From 67b6c2c03faa6479a06ba5d741e5cabdf68ef51b Mon Sep 17 00:00:00 2001 From: Michael Rappazzo Date: Sat, 16 Aug 2025 08:46:29 -0400 Subject: [PATCH 001/355] fix: move CHANGES.txt generation to target directory - Generate CHANGES.txt in forge-gui-desktop/target/ instead of source tree - Update installer to copy from target directory for all build profiles - Add CHANGES.txt to .gitignore since it's generated - Remove hardcoded fromRef to use latest tag automatically - Remove maven-release-plugin exclusion for untracked file --- .gitignore | 3 ++ forge-gui-android/pom.xml | 2 +- forge-gui-desktop/pom.xml | 52 +++++++++++++++++++++++++---- forge-gui/release-files/CHANGES.txt | 2 -- forge-installer/pom.xml | 2 +- pom.xml | 1 - 6 files changed, 50 insertions(+), 12 deletions(-) delete mode 100644 forge-gui/release-files/CHANGES.txt diff --git a/.gitignore b/.gitignore index e3efffb7d41..5206dbe2055 100644 --- a/.gitignore +++ b/.gitignore @@ -66,6 +66,9 @@ forge-gui-mobile-dev/testAssets forge-gui/res/cardsfolder/*.bat +# Generated changelog file +forge-gui/release-files/CHANGES.txt + forge-gui/res/PerSetTrackingResults forge-gui/res/decks forge-gui/res/layouts diff --git a/forge-gui-android/pom.xml b/forge-gui-android/pom.xml index 1f02f1c236b..34e42eb19be 100644 --- a/forge-gui-android/pom.xml +++ b/forge-gui-android/pom.xml @@ -486,7 +486,7 @@ - + diff --git a/forge-gui-desktop/pom.xml b/forge-gui-desktop/pom.xml index dfe902e6b9a..4e6b5c911a9 100644 --- a/forge-gui-desktop/pom.xml +++ b/forge-gui-desktop/pom.xml @@ -35,7 +35,6 @@ timestamp-property - month.date MM.dd @@ -47,7 +46,6 @@ regex-property - snapshot-version ${revision} -SNAPSHOT @@ -189,7 +187,7 @@ java.base/java.nio java.base/java.math java.base/java.util.concurrent - java.base/java.net + java.base/java.net ]]> forge.view.Main @@ -208,6 +206,46 @@ + + + org.codehaus.gmaven + groovy-maven-plugin + 2.1.1 + + + get-changelog-from-tag + initialize + + execute + + + + 1) { + tag = tagList[1] + } else if (!isOnTag && tagList.size() > 0) { + tag = tagList[0] + } + + project.properties['changelog.from.tag'] = tag + println "Using changelog from tag: ${tag}" +} catch (Exception e) { + project.properties['changelog.from.tag'] = "HEAD" + println "Using changelog from tag: HEAD (fallback)" +} +]]> + + + + + + se.bjurr.gitchangelog git-changelog-maven-plugin @@ -220,9 +258,9 @@ git-changelog - - forge-1.6.65 - ../forge-gui/release-files/CHANGES.txt + + refs/tags/${changelog.from.tag} + ${project.build.directory}/CHANGES.txt - + diff --git a/forge-gui/release-files/CHANGES.txt b/forge-gui/release-files/CHANGES.txt deleted file mode 100644 index 05f0bf1829e..00000000000 --- a/forge-gui/release-files/CHANGES.txt +++ /dev/null @@ -1,2 +0,0 @@ -- Bug fixes - -As always, this release of Forge features an assortment of bug fixes and improvements based on user feedback during the previous release run. diff --git a/forge-installer/pom.xml b/forge-installer/pom.xml index ff9bfc148aa..e6497f3a30f 100644 --- a/forge-installer/pom.xml +++ b/forge-installer/pom.xml @@ -171,7 +171,7 @@ - + diff --git a/pom.xml b/pom.xml index f9e9b43ecf6..87d70446855 100644 --- a/pom.xml +++ b/pom.xml @@ -202,7 +202,6 @@ true .mvn/local-settings.xml - forge-gui/release-files/CHANGES.txt From 8d98eda18d12f37973c929b95a00d4bc59788a08 Mon Sep 17 00:00:00 2001 From: antoniomartinelli Date: Sun, 24 Aug 2025 18:17:54 +0200 Subject: [PATCH 002/355] fix: wrong cube id saved as LAST_IMPORTED_CUBE_ID --- .../java/forge/gamemodes/limited/CubeImporter.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/forge-gui/src/main/java/forge/gamemodes/limited/CubeImporter.java b/forge-gui/src/main/java/forge/gamemodes/limited/CubeImporter.java index 9dcafb9c37a..765d7c0ff11 100644 --- a/forge-gui/src/main/java/forge/gamemodes/limited/CubeImporter.java +++ b/forge-gui/src/main/java/forge/gamemodes/limited/CubeImporter.java @@ -50,7 +50,7 @@ public class CubeImporter { } } - private static CustomLimited parseFromURL(final URL url) { + private CustomLimited parseFromURL(final URL url) { // Use a generic 15-cards booster template with no rarity slots // Nice to have: Infos about the slots and the draft format can be found on the platform and imported via JSON api. List> slots = SealedTemplate.genericNoSlotBooster.getSlots(); @@ -70,7 +70,7 @@ public class CubeImporter { cd.setCardPool(deckCube.getMain()); // Save the cube ID in preferences as the last imported cube - FModel.getPreferences().setPref(ForgePreferences.FPref.LAST_IMPORTED_CUBE_ID, deckCube.getName()); + FModel.getPreferences().setPref(ForgePreferences.FPref.LAST_IMPORTED_CUBE_ID, parseCubeId(url.toString())); FModel.getPreferences().save(); return cd; @@ -83,7 +83,7 @@ public class CubeImporter { * "https://cubecobra.com/cube/list/cubeid", * it returns "cubeid". * Otherwise, it returns the string as is considering it as a plain cube ID. - * @param inputStr + * @param inputStr the input string which can be a cube ID or a URL * @return string representing the cube ID */ private String parseCubeId(String inputStr) { @@ -92,10 +92,8 @@ public class CubeImporter { String[] parts = inputStr.trim().split("/"); yield parts[parts.length - 1]; } - case CUBEARTISAN -> { - // Not implemented yet, but could be similar to CubeCobra - yield null; - } + case CUBEARTISAN -> // Not implemented yet, but could be similar to CubeCobra + null; }; // Check if parsedStr is alphanumeric only, allow hyphens as well since full Cube IDs can contain them From 780cc8ddbf5d5cb77a5b407c9aac87aa1150b464 Mon Sep 17 00:00:00 2001 From: Leandro Doctors Date: Mon, 25 Aug 2025 17:55:31 +0200 Subject: [PATCH 003/355] Fix build on JDK 21+ This bumps `izpack-maven-plugin`. Tested with JDK 25. Similar fix for another project: https://github.com/lsc-project/lsc/pull/385 Original Error message: `[ERROR] Failed to execute goal org.codehaus.izpack:izpack-maven-plugin:5.2.3:izpack (standard-installer) on project forge-installer: Execution standard-installer of goal org.codehaus.izpack:izpack-maven-plugin:5.2.3:izpack failed: java.lang.ArrayIndexOutOfBoundsException: Index 70131 out of bounds for length 22674 -> [Help 1]` --- forge-installer/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-installer/pom.xml b/forge-installer/pom.xml index ff9bfc148aa..fcb32fa0dde 100644 --- a/forge-installer/pom.xml +++ b/forge-installer/pom.xml @@ -101,7 +101,7 @@ org.codehaus.izpack izpack-maven-plugin - 5.2.3 + 5.2.4 post-integration-test From f27472d9bd98631d79ea8fe2d365b038d1bd857d Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Tue, 26 Aug 2025 05:14:20 +0800 Subject: [PATCH 004/355] migrate Callback to Interface - closes #5717 --- forge-gui-mobile/src/forge/Forge.java | 61 +++-- .../adventure/scene/AdventureDeckEditor.java | 34 +-- .../src/forge/adventure/scene/DuelScene.java | 10 +- .../src/forge/adventure/scene/EventScene.java | 28 +-- .../src/forge/adventure/scene/ShopScene.java | 10 +- .../src/forge/card/GameEntityPicker.java | 15 +- .../src/forge/deck/FDeckChooser.java | 123 +++++----- .../src/forge/deck/FDeckEditor.java | 188 ++++++--------- .../src/forge/deck/FSideboardDialog.java | 22 +- .../screens/constructed/PlayerPanel.java | 102 ++++---- .../screens/gauntlet/LoadGauntletScreen.java | 16 +- .../screens/gauntlet/NewGauntletScreen.java | 217 +++++++----------- .../screens/home/puzzle/PuzzleScreen.java | 42 ++-- .../limited/DraftingProcessScreen.java | 56 ++--- .../src/forge/screens/match/MatchScreen.java | 9 +- .../src/forge/screens/online/OnlineMenu.java | 28 +-- .../planarconquest/ConquestAEtherScreen.java | 11 +- .../ConquestCommandersScreen.java | 7 +- .../ConquestMultiverseScreen.java | 56 ++--- .../screens/quest/QuestSpellShopScreen.java | 21 +- .../src/forge/screens/settings/FilesPage.java | 44 ++-- .../forge/screens/settings/SettingsPage.java | 89 +++---- .../src/forge/toolbox/FOptionPane.java | 25 +- .../src/forge/toolbox/FSpinner.java | 18 +- .../src/forge/toolbox/GuiChoose.java | 134 ++++------- .../src/forge/toolbox/GuiDialog.java | 6 +- .../src/forge/toolbox/ListChooser.java | 23 +- .../src/main/java/forge/util/Callback.java | 5 +- .../main/java/forge/util/WaitCallback.java | 2 +- 29 files changed, 550 insertions(+), 852 deletions(-) diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index d04cb4c62d8..82a99fe90de 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -639,13 +639,10 @@ public class Forge implements ApplicationListener { return; } //don't allow exiting multiple times - Callback callback = new Callback() { - @Override - public void run(Boolean result) { - if (result) { - exited = true; - exitAnimation(true); - } + Callback callback = result -> { + if (result) { + exited = true; + exitAnimation(true); } }; @@ -668,13 +665,10 @@ public class Forge implements ApplicationListener { options.add(getLocalizer().getMessage("lblExit")); options.add(getLocalizer().getMessage("lblCancel")); - Callback callback = new Callback() { - @Override - public void run(Integer result) { - if (result == 0) { - exited = true; - exitAnimation(false); - } + Callback callback = result -> { + if (result == 0) { + exited = true; + exitAnimation(false); } }; @@ -701,30 +695,27 @@ public class Forge implements ApplicationListener { return; } - currentScreen.onSwitchAway(new Callback() { - @Override - public void run(Boolean result) { - if (result) { - if (replaceBackScreen && !Dscreens.isEmpty()) { - Dscreens.removeFirst(); - } - if (Dscreens.peekFirst() != screen0) { //prevent screen being its own back screen - Dscreens.addFirst(screen0); - } - setCurrentScreen(screen0); - if (screen0 instanceof MatchScreen) { - //set cursor for classic mode - if (!isMobileAdventureMode) { - if (magnifyToggle) { - setCursor(FSkin.getCursor().get(1), "1"); - } else { - setCursor(FSkin.getCursor().get(2), "2"); - } + currentScreen.onSwitchAway(result -> { + if (result) { + if (replaceBackScreen && !Dscreens.isEmpty()) { + Dscreens.removeFirst(); + } + if (Dscreens.peekFirst() != screen0) { //prevent screen being its own back screen + Dscreens.addFirst(screen0); + } + setCurrentScreen(screen0); + if (screen0 instanceof MatchScreen) { + //set cursor for classic mode + if (!isMobileAdventureMode) { + if (magnifyToggle) { + setCursor(FSkin.getCursor().get(1), "1"); + } else { + setCursor(FSkin.getCursor().get(2), "2"); } } - deltaTime = 0f; - hueFragTime = 0f; } + deltaTime = 0f; + hueFragTime = 0f; } }); } diff --git a/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java b/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java index dc32be79757..b8e52e545c8 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java +++ b/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java @@ -295,13 +295,10 @@ public class AdventureDeckEditor extends FDeckEditor { if(toSell.isEmpty()) return; - FOptionPane.showConfirmDialog(Forge.getLocalizer().getMessage("lblSellAllConfirm", toSell.countAll(), value), Forge.getLocalizer().getMessage("lblSellCurrentFilters"), Forge.getLocalizer().getMessage("lblSell"), Forge.getLocalizer().getMessage("lblCancel"), false, new Callback<>() { - @Override - public void run(Boolean result) { - if (result) { - Current.player().doBulkSell(toSell); - refresh(); - } + FOptionPane.showConfirmDialog(Forge.getLocalizer().getMessage("lblSellAllConfirm", toSell.countAll(), value), Forge.getLocalizer().getMessage("lblSellCurrentFilters"), Forge.getLocalizer().getMessage("lblSell"), Forge.getLocalizer().getMessage("lblCancel"), false, result -> { + if (result) { + Current.player().doBulkSell(toSell); + refresh(); } }); } @@ -423,12 +420,9 @@ public class AdventureDeckEditor extends FDeckEditor { if(toMove.isEmpty()) return; - FOptionPane.showConfirmDialog(Forge.getLocalizer().getMessage("lblAutoSellCurrentFiltersConfirm", toMove.countAll()), Forge.getLocalizer().getMessage("lblAutoSellCurrentFilters"), Forge.getLocalizer().getMessage("lblAutoSell"), Forge.getLocalizer().getMessage("lblCancel"), false, new Callback<>() { - @Override - public void run(Boolean result) { - if (result) { - moveCards(toMove, autoSellPage); - } + FOptionPane.showConfirmDialog(Forge.getLocalizer().getMessage("lblAutoSellCurrentFiltersConfirm", toMove.countAll()), Forge.getLocalizer().getMessage("lblAutoSellCurrentFilters"), Forge.getLocalizer().getMessage("lblAutoSell"), Forge.getLocalizer().getMessage("lblCancel"), false, result -> { + if (result) { + moveCards(toMove, autoSellPage); } }); } @@ -823,12 +817,7 @@ public class AdventureDeckEditor extends FDeckEditor { Localizer localizer = Forge.getLocalizer(); if (isDrafting()) { - FOptionPane.showConfirmDialog(localizer.getMessage("lblEndAdventureEventConfirm"), localizer.getMessage("lblLeaveDraft"), localizer.getMessage("lblLeave"), localizer.getMessage("lblCancel"), false, new Callback<>() { - @Override - public void run(Boolean result) { - resolveClose(canCloseCallback, result == true); - } - }); + FOptionPane.showConfirmDialog(localizer.getMessage("lblEndAdventureEventConfirm"), localizer.getMessage("lblLeaveDraft"), localizer.getMessage("lblLeave"), localizer.getMessage("lblCancel"), false, result -> resolveClose(canCloseCallback, result == true)); return; } else if(getEditorConfig().isLimited() || getDeck().isEmpty()) { @@ -840,12 +829,7 @@ public class AdventureDeckEditor extends FDeckEditor { if (deckError != null) { //Allow the player to close the editor with an invalid deck, but warn them that cards may be swapped out. String warning = localizer.getMessage("lblAdventureDeckError", deckError); - FOptionPane.showConfirmDialog(warning, localizer.getMessage("lblInvalidDeck"), false, new Callback<>() { - @Override - public void run(Boolean result) { - resolveClose(canCloseCallback, result == true); - } - }); + FOptionPane.showConfirmDialog(warning, localizer.getMessage("lblInvalidDeck"), false, result -> resolveClose(canCloseCallback, result == true)); return; } diff --git a/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java b/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java index 74afd0a9732..49527d4cde3 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java @@ -39,7 +39,6 @@ import forge.sound.MusicPlaylist; import forge.toolbox.FOptionPane; import forge.trackable.TrackableCollection; import forge.util.Aggregates; -import forge.util.Callback; import org.apache.commons.lang3.tuple.Pair; import java.util.*; @@ -153,12 +152,9 @@ public class DuelScene extends ForgeScene { } private FOptionPane createFOption(String message, String title, FBufferedImage icon, Runnable runnable) { - return new FOptionPane(message, null, title, icon, null, ImmutableList.of(Forge.getLocalizer().getMessage("lblOK")), -1, new Callback() { - @Override - public void run(Integer result) { - if (runnable != null) - runnable.run(); - } + return new FOptionPane(message, null, title, icon, null, ImmutableList.of(Forge.getLocalizer().getMessage("lblOK")), -1, result -> { + if (runnable != null) + runnable.run(); }); } diff --git a/forge-gui-mobile/src/forge/adventure/scene/EventScene.java b/forge-gui-mobile/src/forge/adventure/scene/EventScene.java index 0d7e692b61a..d39d948e959 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/EventScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/EventScene.java @@ -29,7 +29,6 @@ import forge.adventure.world.WorldSave; import forge.deck.Deck; import forge.gui.FThreads; import forge.screens.TransitionScreen; -import forge.util.Callback; import forge.util.MyRandom; import java.util.Arrays; @@ -124,26 +123,17 @@ public class EventScene extends MenuScene implements IAfterMatch { //todo: add translation decline.name = "Do not enter event"; - enterWithCoin.callback = new Callback() { - @Override - public void run(Boolean result) { - currentEvent.eventStatus = AdventureEventController.EventStatus.Entered; - refresh(); - } + enterWithCoin.callback = (result) -> { + currentEvent.eventStatus = AdventureEventController.EventStatus.Entered; + refresh(); }; - enterWithShards.callback = new Callback() { - @Override - public void run(Boolean result) { - currentEvent.eventStatus = AdventureEventController.EventStatus.Entered; - refresh(); - } + enterWithShards.callback = (result) -> { + currentEvent.eventStatus = AdventureEventController.EventStatus.Entered; + refresh(); }; - enterWithGold.callback = new Callback() { - @Override - public void run(Boolean result) { - currentEvent.eventStatus = AdventureEventController.EventStatus.Entered; - refresh(); - } + enterWithGold.callback = (result) -> { + currentEvent.eventStatus = AdventureEventController.EventStatus.Entered; + refresh(); }; introDialog.options = new DialogData[4]; diff --git a/forge-gui-mobile/src/forge/adventure/scene/ShopScene.java b/forge-gui-mobile/src/forge/adventure/scene/ShopScene.java index 58f3bbdf5de..fc3ebbfe8f8 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/ShopScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/ShopScene.java @@ -10,7 +10,6 @@ import forge.localinstance.properties.ForgePreferences; import forge.model.FModel; import forge.screens.FScreen; import forge.toolbox.FOptionPane; -import forge.util.Callback; import forge.util.ItemPool; /** @@ -65,12 +64,9 @@ public class ShopScene extends ForgeScene { return; FOptionPane.showConfirmDialog(Forge.getLocalizer().getMessage("lblSellAllConfirm", cards, profit), Forge.getLocalizer().getMessage("lblAutoSellable"), Forge.getLocalizer().getMessage("lblSell"), - Forge.getLocalizer().getMessage("lblCancel"), false, new Callback() { - @Override - public void run(Boolean result) { - if (result) { - doAutosell(); - } + Forge.getLocalizer().getMessage("lblCancel"), false, result -> { + if (result) { + doAutosell(); } } ); diff --git a/forge-gui-mobile/src/forge/card/GameEntityPicker.java b/forge-gui-mobile/src/forge/card/GameEntityPicker.java index 2591e8a670e..809470890e9 100644 --- a/forge-gui-mobile/src/forge/card/GameEntityPicker.java +++ b/forge-gui-mobile/src/forge/card/GameEntityPicker.java @@ -34,15 +34,12 @@ public class GameEntityPicker extends TabPageScreen { setHeight(FOptionPane.getMaxDisplayObjHeight()); optionPane = new FOptionPane(null, null, title, null, this, - isOptional ? ImmutableList.of(Forge.getLocalizer().getMessage("lblOK"), Forge.getLocalizer().getMessage("lblCancel")) : ImmutableList.of(Forge.getLocalizer().getMessage("lblOK")), 0, new Callback() { - @Override - public void run(Integer result) { - if (result == 0) { - callback.run(((PickerTab) tabPages.get(0)).list.getSelectedItem()); - } - else { - callback.run(null); - } + isOptional ? ImmutableList.of(Forge.getLocalizer().getMessage("lblOK"), Forge.getLocalizer().getMessage("lblCancel")) : ImmutableList.of(Forge.getLocalizer().getMessage("lblOK")), 0, result -> { + if (result == 0) { + callback.run(((PickerTab) tabPages.get(0)).list.getSelectedItem()); + } + else { + callback.run(null); } }) { @Override diff --git a/forge-gui-mobile/src/forge/deck/FDeckChooser.java b/forge-gui-mobile/src/forge/deck/FDeckChooser.java index 5297a42472e..da274ad3618 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckChooser.java +++ b/forge-gui-mobile/src/forge/deck/FDeckChooser.java @@ -1421,50 +1421,46 @@ public class FDeckChooser extends FScreen { return; } - GuiChoose.getInteger(Forge.getLocalizer().getMessage("lblHowManyOpponents"), 1, 50, new Callback() { - @Override - public void run(final Integer numOpponents) { - if (numOpponents == null) { return; } - List deckTypes = Lists.newArrayList( - DeckType.CUSTOM_DECK, - DeckType.PRECONSTRUCTED_DECK, - DeckType.QUEST_OPPONENT_DECK, - DeckType.COLOR_DECK, - DeckType.STANDARD_COLOR_DECK, - DeckType.STANDARD_CARDGEN_DECK, - DeckType.MODERN_COLOR_DECK, - DeckType.PAUPER_COLOR_DECK, - DeckType.PIONEER_CARDGEN_DECK, - DeckType.HISTORIC_CARDGEN_DECK, - DeckType.MODERN_CARDGEN_DECK, - DeckType.LEGACY_CARDGEN_DECK, - DeckType.VINTAGE_CARDGEN_DECK, - DeckType.PAUPER_CARDGEN_DECK, - DeckType.THEME_DECK, - DeckType.NET_DECK, - DeckType.NET_ARCHIVE_STANDARD_DECK, - DeckType.NET_ARCHIVE_PIONEER_DECK, - DeckType.NET_ARCHIVE_MODERN_DECK, - DeckType.NET_ARCHIVE_PAUPER_DECK, - DeckType.NET_ARCHIVE_VINTAGE_DECK, - DeckType.NET_ARCHIVE_LEGACY_DECK, - DeckType.NET_ARCHIVE_BLOCK_DECK + GuiChoose.getInteger(Forge.getLocalizer().getMessage("lblHowManyOpponents"), 1, 50, numOpponents -> { + if (numOpponents == null) { return; } + List deckTypes = Lists.newArrayList( + DeckType.CUSTOM_DECK, + DeckType.PRECONSTRUCTED_DECK, + DeckType.QUEST_OPPONENT_DECK, + DeckType.COLOR_DECK, + DeckType.STANDARD_COLOR_DECK, + DeckType.STANDARD_CARDGEN_DECK, + DeckType.MODERN_COLOR_DECK, + DeckType.PAUPER_COLOR_DECK, + DeckType.PIONEER_CARDGEN_DECK, + DeckType.HISTORIC_CARDGEN_DECK, + DeckType.MODERN_CARDGEN_DECK, + DeckType.LEGACY_CARDGEN_DECK, + DeckType.VINTAGE_CARDGEN_DECK, + DeckType.PAUPER_CARDGEN_DECK, + DeckType.THEME_DECK, + DeckType.NET_DECK, + DeckType.NET_ARCHIVE_STANDARD_DECK, + DeckType.NET_ARCHIVE_PIONEER_DECK, + DeckType.NET_ARCHIVE_MODERN_DECK, + DeckType.NET_ARCHIVE_PAUPER_DECK, + DeckType.NET_ARCHIVE_VINTAGE_DECK, + DeckType.NET_ARCHIVE_LEGACY_DECK, + DeckType.NET_ARCHIVE_BLOCK_DECK - ); - if (!FModel.isdeckGenMatrixLoaded()) { - deckTypes.remove(DeckType.STANDARD_CARDGEN_DECK); - deckTypes.remove(DeckType.PIONEER_CARDGEN_DECK); - deckTypes.remove(DeckType.HISTORIC_CARDGEN_DECK); - deckTypes.remove(DeckType.MODERN_CARDGEN_DECK); - deckTypes.remove(DeckType.LEGACY_CARDGEN_DECK); - deckTypes.remove(DeckType.VINTAGE_CARDGEN_DECK); - deckTypes.remove(DeckType.PAUPER_CARDGEN_DECK); - } + ); + if (!FModel.isdeckGenMatrixLoaded()) { + deckTypes.remove(DeckType.STANDARD_CARDGEN_DECK); + deckTypes.remove(DeckType.PIONEER_CARDGEN_DECK); + deckTypes.remove(DeckType.HISTORIC_CARDGEN_DECK); + deckTypes.remove(DeckType.MODERN_CARDGEN_DECK); + deckTypes.remove(DeckType.LEGACY_CARDGEN_DECK); + deckTypes.remove(DeckType.VINTAGE_CARDGEN_DECK); + deckTypes.remove(DeckType.PAUPER_CARDGEN_DECK); + } - ListChooser chooser = new ListChooser<>( - Forge.getLocalizer().getMessage("lblChooseAllowedDeckTypeOpponents"), 0, deckTypes.size(), deckTypes, null, new Callback>() { - @Override - public void run(final List allowedDeckTypes) { + ListChooser chooser = new ListChooser<>( + Forge.getLocalizer().getMessage("lblChooseAllowedDeckTypeOpponents"), 0, deckTypes.size(), deckTypes, null, allowedDeckTypes -> { if (allowedDeckTypes == null || allowedDeckTypes.isEmpty()) { return; } @@ -1490,38 +1486,33 @@ public class FDeckChooser extends FScreen { gauntlet.startRound(players, humanPlayer); })); }); - } - }); - chooser.show(null, false); /*setting selectMax to true will select all available option*/ - } + }); + chooser.show(null, false); /*setting selectMax to true will select all available option*/ }); } private void testVariantDeck(final Deck userDeck, final GameType variant) { - promptForDeck(Forge.getLocalizer().getMessage("lblSelectOpponentDeck"), variant, true, new Callback() { - @Override - public void run(final Deck aiDeck) { - if (aiDeck == null) { return; } + promptForDeck(Forge.getLocalizer().getMessage("lblSelectOpponentDeck"), variant, true, aiDeck -> { + if (aiDeck == null) { return; } - LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingNewGame"), true, () -> { - Set appliedVariants = new HashSet<>(); - appliedVariants.add(variant); + LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingNewGame"), true, () -> { + Set appliedVariants = new HashSet<>(); + appliedVariants.add(variant); - List players = new ArrayList<>(); - RegisteredPlayer humanPlayer = RegisteredPlayer.forVariants(2, appliedVariants, userDeck, null, false, null, null); - humanPlayer.setPlayer(GamePlayerUtil.getGuiPlayer()); - RegisteredPlayer aiPlayer = RegisteredPlayer.forVariants(2, appliedVariants, aiDeck, null, false, null, null); - aiPlayer.setPlayer(GamePlayerUtil.createAiPlayer()); - players.add(humanPlayer); - players.add(aiPlayer); + List players = new ArrayList<>(); + RegisteredPlayer humanPlayer = RegisteredPlayer.forVariants(2, appliedVariants, userDeck, null, false, null, null); + humanPlayer.setPlayer(GamePlayerUtil.getGuiPlayer()); + RegisteredPlayer aiPlayer = RegisteredPlayer.forVariants(2, appliedVariants, aiDeck, null, false, null, null); + aiPlayer.setPlayer(GamePlayerUtil.createAiPlayer()); + players.add(humanPlayer); + players.add(aiPlayer); - final Map guiMap = new HashMap<>(); - guiMap.put(humanPlayer, MatchController.instance); + final Map guiMap = new HashMap<>(); + guiMap.put(humanPlayer, MatchController.instance); - final HostedMatch hostedMatch = GuiBase.getInterface().hostMatch(); - hostedMatch.startMatch(GameType.Constructed, appliedVariants, players, guiMap); - }); - } + final HostedMatch hostedMatch = GuiBase.getInterface().hostMatch(); + hostedMatch.startMatch(GameType.Constructed, appliedVariants, players, guiMap); + }); }); } diff --git a/forge-gui-mobile/src/forge/deck/FDeckEditor.java b/forge-gui-mobile/src/forge/deck/FDeckEditor.java index d9da6455b96..620a564b510 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckEditor.java +++ b/forge-gui-mobile/src/forge/deck/FDeckEditor.java @@ -547,17 +547,14 @@ public class FDeckEditor extends TabPageScreen { if (showAddExtraSectionOption()) { addItem(new FMenuItem(localizer.getMessage("lblAddDeckSection"), FSkinImage.CHAOS, e -> { List options = hiddenExtraSections.stream().map(DeckSection::getLocalizedName).collect(Collectors.toList()); - GuiChoose.oneOrNone(localizer.getMessage("lblAddDeckSectionSelect"), options, new Callback<>() { - @Override - public void run(String result) { - if (result == null || !options.contains(result)) - return; - DeckSection newSection = hiddenExtraSections.get(options.indexOf(result)); - showExtraSectionTab(newSection); - filterCatalogForExtraSection(newSection); - getCatalogPage().scheduleRefresh(); - setSelectedPage(getCatalogPage()); - } + GuiChoose.oneOrNone(localizer.getMessage("lblAddDeckSectionSelect"), options, result -> { + if (result == null || !options.contains(result)) + return; + DeckSection newSection = hiddenExtraSections.get(options.indexOf(result)); + showExtraSectionTab(newSection); + filterCatalogForExtraSection(newSection); + getCatalogPage().scheduleRefresh(); + setSelectedPage(getCatalogPage()); }); })); } @@ -592,24 +589,16 @@ public class FDeckEditor extends TabPageScreen { if (allowSaveAs()) addItem(new FMenuItem(localizer.getMessage("lblSaveAs"), Forge.hdbuttons ? FSkinImage.HDSAVEAS : FSkinImage.SAVEAS, e -> { String defaultName = deckController.getNextAvailableName(); - FOptionPane.showInputDialog(localizer.getMessage("lblNameNewCopyDeck"), defaultName, new Callback<>() { - @Override - public void run(String result) { - if (!StringUtils.isEmpty(result)) { - deckController.saveAs(result); - } + FOptionPane.showInputDialog(localizer.getMessage("lblNameNewCopyDeck"), defaultName, result -> { + if (!StringUtils.isEmpty(result)) { + deckController.saveAs(result); } }); })); } if (allowRename()) { addItem(new FMenuItem(localizer.getMessage("lblRenameDeck"), Forge.hdbuttons ? FSkinImage.HDEDIT : FSkinImage.EDIT, e -> FOptionPane.showInputDialog( - localizer.getMessage("lblNewNameDeck"), deck.getName(), new Callback<>() { - @Override - public void run(String result) { - deckController.rename(result); - } - })) + localizer.getMessage("lblNewNameDeck"), deck.getName(), deckController::rename)) ); } if (allowDelete()) { @@ -618,13 +607,10 @@ public class FDeckEditor extends TabPageScreen { localizer.getMessage("lblDeleteDeck"), localizer.getMessage("lblDelete"), localizer.getMessage("lblCancel"), false, - new Callback<>() { - @Override - public void run(Boolean result) { - if (result) { - deckController.delete(); - Forge.back(); - } + result -> { + if (result) { + deckController.delete(); + Forge.back(); } })) ); @@ -649,12 +635,7 @@ public class FDeckEditor extends TabPageScreen { CardEdition defaultLandSet = allowedLandSets.get(0); List finalAllowedLandSets = allowedLandSets; FThreads.invokeInEdtNowOrLater(() -> { - AddBasicLandsDialog dialog = new AddBasicLandsDialog(deck, defaultLandSet, new Callback<>() { - @Override - public void run(CardPool landsToAdd) { - addChosenBasicLands(landsToAdd); - } - }, editorConfig.hasInfiniteCardPool() ? null : finalAllowedLandSets); //Null allows any lands to be selected + AddBasicLandsDialog dialog = new AddBasicLandsDialog(deck, defaultLandSet, this::addChosenBasicLands, editorConfig.hasInfiniteCardPool() ? null : finalAllowedLandSets); //Null allows any lands to be selected dialog.show(); }); @@ -686,14 +667,11 @@ public class FDeckEditor extends TabPageScreen { } protected void showDevAddCardDialog() { - FOptionPane.showInputDialog(Forge.getLocalizer().getMessage("lblPromptCardRequest"), new Callback<>() { - @Override - public void run(String result) { - if(StringUtils.isBlank(result)) - return; - CardPool requested = CardPool.fromSingleCardRequest(result); - devAddCards(requested); - } + FOptionPane.showInputDialog(Forge.getLocalizer().getMessage("lblPromptCardRequest"), result -> { + if(StringUtils.isBlank(result)) + return; + CardPool requested = CardPool.fromSingleCardRequest(result); + devAddCards(requested); }); } @@ -924,15 +902,12 @@ public class FDeckEditor extends TabPageScreen { List commanders = deck.getCommanders(); //use commander name as default deck name String initialInput = commanders.isEmpty() ? "New Deck" : Lang.joinHomogenous(commanders); FThreads.invokeInEdtNowOrLater(() -> { - FOptionPane.showInputDialog(Forge.getLocalizer().getMessage("lblNameNewDeck"), initialInput, new Callback<>() { - @Override - public void run(String result) { - if (StringUtils.isEmpty(result)) { return; } + FOptionPane.showInputDialog(Forge.getLocalizer().getMessage("lblNameNewDeck"), initialInput, result -> { + if (StringUtils.isEmpty(result)) { return; } - deckController.saveAs(result); - if (callback != null) { - callback.run(true); - } + deckController.saveAs(result); + if (callback != null) { + callback.run(true); } }); }); @@ -979,17 +954,14 @@ public class FDeckEditor extends TabPageScreen { return; } FOptionPane.showOptionDialog(Forge.getLocalizer().getMessage("lblSaveChangesCurrentDeck"), "", - FOptionPane.QUESTION_ICON, onCloseOptions, new Callback<>() { - @Override - public void run(Integer result) { - if (result == 0) { - save(canCloseCallback); - } else if (result == 1) { - getDeckController().exitWithoutSaving(); //reload if not saving changes - canCloseCallback.run(true); - } else { - canCloseCallback.run(false); - } + FOptionPane.QUESTION_ICON, onCloseOptions, result -> { + if (result == 0) { + save(canCloseCallback); + } else if (result == 1) { + getDeckController().exitWithoutSaving(); //reload if not saving changes + canCloseCallback.run(true); + } else { + canCloseCallback.run(false); } }); } @@ -1431,7 +1403,7 @@ public class FDeckEditor extends TabPageScreen { this.addMoveCardMenuItem(menu, source, destination, new MoveCardCallback(card, source, destination)); } - protected static class MoveCardCallback extends Callback { + protected static class MoveCardCallback implements Callback { public final PaperCard card; public final CardManagerPage from; public final CardManagerPage to; @@ -1465,13 +1437,10 @@ public class FDeckEditor extends TabPageScreen { if(max < 2) callback.accept(1); else - GuiChoose.getInteger(prompt, 1, max, 20, new Callback<>() { - @Override - public void run(Integer result) { - if (result == null || result == 0) - return; - callback.accept(result); - } + GuiChoose.getInteger(prompt, 1, max, 20, result -> { + if (result == null || result == 0) + return; + callback.accept(result); }); } } @@ -2024,14 +1993,11 @@ public class FDeckEditor extends TabPageScreen { break; case Commander: if (canEditMainCommander() || isPartnerCommander(card)) { - addMoveCardMenuItem(menu, this, cardSourcePage, new Callback<>() { - @Override - public void run(Integer result) { - moveCard(card, cardSourcePage, result); - if(cardSourcePage == parentScreen.getCatalogPage()) { - parentScreen.getCatalogPage().refresh(); //refresh so commander options shown again - parentScreen.setSelectedPage(parentScreen.getCatalogPage()); - } + addMoveCardMenuItem(menu, this, cardSourcePage, result -> { + moveCard(card, cardSourcePage, result); + if(cardSourcePage == parentScreen.getCatalogPage()) { + parentScreen.getCatalogPage().refresh(); //refresh so commander options shown again + parentScreen.setSelectedPage(parentScreen.getCatalogPage()); } }); addReplaceVariantItems(menu, card); @@ -2063,12 +2029,9 @@ public class FDeckEditor extends TabPageScreen { else currentColors = null; String prompt = Forge.getLocalizer().getMessage("lblChooseAColor", Lang.getNumeral(markedColorCount)); - GuiChoose.getChoices(prompt, markedColorCount, markedColorCount, MagicColor.Constant.ONLY_COLORS, currentColors, null, new Callback<>() { - @Override - public void run(List result) { - addCard(card.copyWithMarkedColors(ColorSet.fromNames(result))); - removeCard(card); - } + GuiChoose.getChoices(prompt, markedColorCount, markedColorCount, MagicColor.Constant.ONLY_COLORS, currentColors, null, result -> { + addCard(card.copyWithMarkedColors(ColorSet.fromNames(result))); + removeCard(card); }); })); } @@ -2109,21 +2072,18 @@ public class FDeckEditor extends TabPageScreen { String prompt = localizer.getMessage("lblSelectReplacementCard") + " " + card.getName(); String promptQuantity = String.format("%s - %s %s", card, lblReplaceCard, localizer.getMessage("lblHowMany")); //First have the player choose which card to swap in. - GuiChoose.oneOrNone(prompt, sortedOptions, new Callback<>() { - @Override - public void run(PaperCard replacement) { - if (replacement == null || replacement == card) - return; - //Next, ask how many copies they'd like to swap, taking into account the number available. - int available = parentScreen.getCardSourcePage().cardManager.isInfinite() ? Integer.MAX_VALUE : cardOptions.count(replacement); - int maxMovable = Math.min(available, cardManager.getItemCount(card)); - new MoveQuantityPrompt(promptQuantity, maxMovable, (amount) -> { - CardManagerPage sourcePage = parentScreen.getCardSourcePage(); - //Finally, swap the cards. - DeckSectionPage.this.moveCard(card, sourcePage, amount); - sourcePage.moveCard(replacement, DeckSectionPage.this, amount); - }).handleEvent(e); - } + GuiChoose.oneOrNone(prompt, sortedOptions, replacement -> { + if (replacement == null || replacement == card) + return; + //Next, ask how many copies they'd like to swap, taking into account the number available. + int available = parentScreen.getCardSourcePage().cardManager.isInfinite() ? Integer.MAX_VALUE : cardOptions.count(replacement); + int maxMovable = Math.min(available, cardManager.getItemCount(card)); + new MoveQuantityPrompt(promptQuantity, maxMovable, (amount) -> { + CardManagerPage sourcePage = parentScreen.getCardSourcePage(); + //Finally, swap the cards. + DeckSectionPage.this.moveCard(card, sourcePage, amount); + sourcePage.moveCard(replacement, DeckSectionPage.this, amount); + }).handleEvent(e); }); } @@ -2294,29 +2254,23 @@ public class FDeckEditor extends TabPageScreen { if(!cardManager.isEnabled()) return; if(draftingFaceDown) { - addMoveCardMenuItem(menu, this, parentScreen.getSideboardPage(), new Callback<>() { - @Override - public void run(Integer result) { //ignore quantity - PaperCard realCard = getDraftPlayer().pickFromArchdemonCurse(getDraftPlayer().nextChoice()); - moveCard(realCard, parentScreen.getSideboardPage()); - } + addMoveCardMenuItem(menu, this, parentScreen.getSideboardPage(), result -> { //ignore quantity + PaperCard realCard = getDraftPlayer().pickFromArchdemonCurse(getDraftPlayer().nextChoice()); + moveCard(realCard, parentScreen.getSideboardPage()); }); return; } DeckSection destination = DeckSection.matchingSection(card); final DeckSectionPage destinationPage = parentScreen.getPageForSection(destination, true); - addMoveCardMenuItem(menu, this, destinationPage, new Callback<>() { - @Override - public void run(Integer result) { //ignore quantity - moveCard(card, destinationPage); - } - }); - addMoveCardMenuItem(menu, this, parentScreen.getSideboardPage(), new Callback<>() { - @Override - public void run(Integer result) { //ignore quantity - moveCard(card, parentScreen.getSideboardPage()); - } + addMoveCardMenuItem(menu, this, destinationPage, result -> { //ignore quantity + moveCard(card, destinationPage); }); + addMoveCardMenuItem(menu, + this, + parentScreen.getSideboardPage(), + result -> { //ignore quantity + moveCard(card, parentScreen.getSideboardPage()); + }); } @Override diff --git a/forge-gui-mobile/src/forge/deck/FSideboardDialog.java b/forge-gui-mobile/src/forge/deck/FSideboardDialog.java index cb7b63411b5..3b55023dc23 100644 --- a/forge-gui-mobile/src/forge/deck/FSideboardDialog.java +++ b/forge-gui-mobile/src/forge/deck/FSideboardDialog.java @@ -150,14 +150,11 @@ public class FSideboardDialog extends FDialog { @Override protected void buildMenu(FDropDownMenu menu, final PaperCard card) { - addItem(menu, Forge.getLocalizer().getMessage("lblMove"), Forge.getLocalizer().getMessage("lblToMainDeck"), FDeckEditor.MAIN_DECK_ICON, new Callback() { - @Override - public void run(Integer result) { - if (result == null || result <= 0) { return; } + addItem(menu, Forge.getLocalizer().getMessage("lblMove"), Forge.getLocalizer().getMessage("lblToMainDeck"), FDeckEditor.MAIN_DECK_ICON, result -> { + if (result == null || result <= 0) { return; } - removeCard(card, result); - parent.getMainDeckPage().addCard(card, result); - } + removeCard(card, result); + parent.getMainDeckPage().addCard(card, result); }); } } @@ -181,14 +178,11 @@ public class FSideboardDialog extends FDialog { @Override protected void buildMenu(FDropDownMenu menu, final PaperCard card) { - addItem(menu, Forge.getLocalizer().getMessage("lblMove"), Forge.getLocalizer().getMessage("lbltosideboard"), FDeckEditor.SIDEBOARD_ICON, new Callback() { - @Override - public void run(Integer result) { - if (result == null || result <= 0) { return; } + addItem(menu, Forge.getLocalizer().getMessage("lblMove"), Forge.getLocalizer().getMessage("lbltosideboard"), FDeckEditor.SIDEBOARD_ICON, result -> { + if (result == null || result <= 0) { return; } - removeCard(card, result); - parent.getSideboardPage().addCard(card, result); - } + removeCard(card, result); + parent.getSideboardPage().addCard(card, result); }); } } diff --git a/forge-gui-mobile/src/forge/screens/constructed/PlayerPanel.java b/forge-gui-mobile/src/forge/screens/constructed/PlayerPanel.java index b05df5549a8..c71ddd6d5d4 100644 --- a/forge-gui-mobile/src/forge/screens/constructed/PlayerPanel.java +++ b/forge-gui-mobile/src/forge/screens/constructed/PlayerPanel.java @@ -534,18 +534,15 @@ public class PlayerPanel extends FContainer { private FEventHandler avatarCommand = new FEventHandler() { @Override public void handleEvent(FEvent e) { - AvatarSelector.show(getPlayerName(), avatarIndex, screen.getUsedAvatars(), new Callback() { - @Override - public void run(Integer result) { - setAvatarIndex(result); + AvatarSelector.show(getPlayerName(), avatarIndex, screen.getUsedAvatars(), result -> { + setAvatarIndex(result); - if (index < 2) { - screen.updateAvatar(index, result); - screen.updateAvatarPrefs(); - } - if (allowNetworking) { - screen.firePlayerChangeListener(index); - } + if (index < 2) { + screen.updateAvatar(index, result); + screen.updateAvatarPrefs(); + } + if (allowNetworking) { + screen.firePlayerChangeListener(index); } }); } @@ -554,18 +551,15 @@ public class PlayerPanel extends FContainer { private FEventHandler sleeveCommand = new FEventHandler() { @Override public void handleEvent(FEvent e) { - SleevesSelector.show(getPlayerName(), sleeveIndex, screen.getUsedSleeves(), new Callback() { - @Override - public void run(Integer result) { - setSleeveIndex(result); + SleevesSelector.show(getPlayerName(), sleeveIndex, screen.getUsedSleeves(), result -> { + setSleeveIndex(result); - if (index < 2) { - screen.updateSleeve(index, result); - screen.updateSleevePrefs(); - } - if (allowNetworking) { - screen.firePlayerChangeListener(index); - } + if (index < 2) { + screen.updateSleeve(index, result); + screen.updateSleevePrefs(); + } + if (allowNetworking) { + screen.firePlayerChangeListener(index); } }); } @@ -804,21 +798,18 @@ public class PlayerPanel extends FContainer { private FLabel createNameRandomizer() { final FLabel newNameBtn = new FLabel.Builder().iconInBackground(false) .icon(Forge.hdbuttons ? FSkinImage.HDEDIT : FSkinImage.EDIT).opaque(false).build(); - newNameBtn.setCommand(e -> getNewName(new Callback() { - @Override - public void run(String newName) { - if (newName == null) { return; } + newNameBtn.setCommand(e -> getNewName(newName -> { + if (newName == null) { return; } - txtPlayerName.setText(newName); + txtPlayerName.setText(newName); - if (index == 0) { - prefs.setPref(FPref.PLAYER_NAME, newName); - prefs.save(); - screen.getLobby().applyToSlot(index, UpdateLobbyPlayerEvent.nameUpdate(newName)); - } - if (allowNetworking) { - screen.firePlayerChangeListener(index); - } + if (index == 0) { + prefs.setPref(FPref.PLAYER_NAME, newName); + prefs.save(); + screen.getLobby().applyToSlot(index, UpdateLobbyPlayerEvent.nameUpdate(newName)); + } + if (allowNetworking) { + screen.firePlayerChangeListener(index); } })); return newNameBtn; @@ -1070,41 +1061,32 @@ public class PlayerPanel extends FContainer { final String message = Forge.getLocalizer().getMessage("lbltypeofName"); final FSkinImage icon = FOptionPane.QUESTION_ICON; - FOptionPane.showOptionDialog(message, title, icon, genderOptions, 2, new Callback() { - @Override - public void run(final Integer genderIndex) { - if (genderIndex == null || genderIndex < 0) { + FOptionPane.showOptionDialog(message, title, icon, genderOptions, 2, genderIndex -> { + if (genderIndex == null || genderIndex < 0) { + callback.run(null); + return; + } + + FOptionPane.showOptionDialog(message, title, icon, typeOptions, 2, typeIndex -> { + if (typeIndex == null || typeIndex < 0) { callback.run(null); return; } - - FOptionPane.showOptionDialog(message, title, icon, typeOptions, 2, new Callback() { - @Override - public void run(final Integer typeIndex) { - if (typeIndex == null || typeIndex < 0) { - callback.run(null); - return; - } - generateRandomName(genderOptions.get(genderIndex), typeOptions.get(typeIndex), screen.getPlayerNames(), title, callback); - } - }); - } + generateRandomName(genderOptions.get(genderIndex), typeOptions.get(typeIndex), screen.getPlayerNames(), title, callback); + }); }); } private void generateRandomName(final String gender, final String type, final List usedNames, final String title, final Callback callback) { final String newName = NameGenerator.getRandomName(gender, type, usedNames); String confirmMsg = Forge.getLocalizer().getMessage("lblconfirmName").replace("%s", newName); - FOptionPane.showConfirmDialog(confirmMsg, title, Forge.getLocalizer().getMessage("lblUseThisName"), Forge.getLocalizer().getMessage("lblTryAgain"), true, new Callback() { - @Override - public void run(Boolean result) { - if (result) { - callback.run(newName); - } - else { - generateRandomName(gender, type, usedNames, title, callback); - } + FOptionPane.showConfirmDialog(confirmMsg, title, Forge.getLocalizer().getMessage("lblUseThisName"), Forge.getLocalizer().getMessage("lblTryAgain"), true, result -> { + if (result) { + callback.run(newName); + } + else { + generateRandomName(gender, type, usedNames, title, callback); } }); } diff --git a/forge-gui-mobile/src/forge/screens/gauntlet/LoadGauntletScreen.java b/forge-gui-mobile/src/forge/screens/gauntlet/LoadGauntletScreen.java index ae4dce37928..8149acb920f 100644 --- a/forge-gui-mobile/src/forge/screens/gauntlet/LoadGauntletScreen.java +++ b/forge-gui-mobile/src/forge/screens/gauntlet/LoadGauntletScreen.java @@ -32,7 +32,6 @@ import forge.screens.settings.SettingsScreen; import forge.toolbox.FButton; import forge.toolbox.FList; import forge.toolbox.FOptionPane; -import forge.util.Callback; import forge.util.ThreadUtil; import forge.util.Utils; @@ -107,15 +106,12 @@ public class LoadGauntletScreen extends LaunchScreen { if (userDeck == null) { //give user a chance to select a deck if none saved with gauntlet FDeckChooser.promptForDeck(Forge.getLocalizer().getMessage("lblSelectGauntletDeck"), gauntlet.isCommanderGauntlet() - ? GameType.CommanderGauntlet : GameType.Gauntlet, false, new Callback() { - @Override - public void run(Deck result) { - if (result != null) { - gauntlet.setUserDeck(result); - GauntletIO.saveGauntlet(gauntlet); - } - } - }); + ? GameType.CommanderGauntlet : GameType.Gauntlet, false, result -> { + if (result != null) { + gauntlet.setUserDeck(result); + GauntletIO.saveGauntlet(gauntlet); + } + }); return; } diff --git a/forge-gui-mobile/src/forge/screens/gauntlet/NewGauntletScreen.java b/forge-gui-mobile/src/forge/screens/gauntlet/NewGauntletScreen.java index 2503ed864b2..ace5d598736 100644 --- a/forge-gui-mobile/src/forge/screens/gauntlet/NewGauntletScreen.java +++ b/forge-gui-mobile/src/forge/screens/gauntlet/NewGauntletScreen.java @@ -7,7 +7,6 @@ import java.util.List; import forge.Forge; import forge.assets.FSkinFont; -import forge.deck.Deck; import forge.deck.DeckType; import forge.deck.FDeckChooser; import forge.game.GameType; @@ -23,7 +22,6 @@ import forge.toolbox.FLabel; import forge.toolbox.FTextArea; import forge.toolbox.GuiChoose; import forge.toolbox.ListChooser; -import forge.util.Callback; import forge.util.Utils; public class NewGauntletScreen extends LaunchScreen { @@ -58,158 +56,125 @@ public class NewGauntletScreen extends LaunchScreen { Forge.getLocalizer().getMessage("lblGauntletContest"), Forge.getLocalizer().getMessage("lblQuickCommanderGauntlet"), Forge.getLocalizer().getMessage("lblCustomCommanderGauntlet"), - }, new Callback() { - @Override - public void run(String result) { - if (result == null) { return; } + }, result -> { + if (result == null) { return; } - if (Forge.getLocalizer().getMessage("lblQuickGauntlet").equals(result)) { - createQuickGauntlet(); - } else if(Forge.getLocalizer().getMessage("lblCustomGauntlet").equals(result)) { - createCustomGauntlet(); - } else if(Forge.getLocalizer().getMessage("lblQuickCommanderGauntlet").equals(result)) { - createQuickCommandGauntlet(); - } else if(Forge.getLocalizer().getMessage("lblCustomCommanderGauntlet").equals(result)) { - createCustomCommanderGauntlet(); - } else { - createGauntletContest(); - } + if (Forge.getLocalizer().getMessage("lblQuickGauntlet").equals(result)) { + createQuickGauntlet(); + } else if(Forge.getLocalizer().getMessage("lblCustomGauntlet").equals(result)) { + createCustomGauntlet(); + } else if(Forge.getLocalizer().getMessage("lblQuickCommanderGauntlet").equals(result)) { + createQuickCommandGauntlet(); + } else if(Forge.getLocalizer().getMessage("lblCustomCommanderGauntlet").equals(result)) { + createCustomCommanderGauntlet(); + } else { + createGauntletContest(); } }); } private void createQuickCommandGauntlet() { - GuiChoose.getInteger(Forge.getLocalizer().getMessage("lblHowManyOpponents"), 3, 50, new Callback() { - @Override - public void run(final Integer numOpponents) { - if (numOpponents == null) { return; } + GuiChoose.getInteger(Forge.getLocalizer().getMessage("lblHowManyOpponents"), 3, 50, numOpponents -> { + if (numOpponents == null) { return; } - ListChooser chooser = new ListChooser<>( - Forge.getLocalizer().getMessage("lblChooseAllowedDeckTypeOpponents"), 0, 11, Arrays.asList(DeckType.COMMANDER_DECK, - DeckType.PRECON_COMMANDER_DECK, - DeckType.RANDOM_COMMANDER_DECK), null, new Callback>() { - @Override - public void run(final List allowedDeckTypes) { + ListChooser chooser = new ListChooser<>( + Forge.getLocalizer().getMessage("lblChooseAllowedDeckTypeOpponents"), 0, 11, Arrays.asList(DeckType.COMMANDER_DECK, + DeckType.PRECON_COMMANDER_DECK, + DeckType.RANDOM_COMMANDER_DECK), null, allowedDeckTypes -> { if (allowedDeckTypes == null || allowedDeckTypes.isEmpty()) { return; } - FDeckChooser.promptForDeck(Forge.getLocalizer().getMessage("lblSelectYourDeck"), GameType.Commander, false, new Callback() { - @Override - public void run(Deck userDeck) { - if (userDeck == null) { - return; - } - - GauntletData gauntlet = GauntletUtil.createCommanderGauntlet(userDeck, numOpponents, allowedDeckTypes, null); - launchGauntlet(gauntlet); + FDeckChooser.promptForDeck(Forge.getLocalizer().getMessage("lblSelectYourDeck"), GameType.Commander, false, userDeck -> { + if (userDeck == null) { + return; } + + GauntletData gauntlet = GauntletUtil.createCommanderGauntlet(userDeck, numOpponents, allowedDeckTypes, null); + launchGauntlet(gauntlet); }); - } - }); - chooser.show(null, false); /*setting selectMax to true will select all available option*/ - } + }); + chooser.show(null, false); /*setting selectMax to true will select all available option*/ }); } private void createQuickGauntlet() { - GuiChoose.getInteger(Forge.getLocalizer().getMessage("lblHowManyOpponents"), 3, 50, new Callback() { - @Override - public void run(final Integer numOpponents) { - if (numOpponents == null) { return; } + GuiChoose.getInteger(Forge.getLocalizer().getMessage("lblHowManyOpponents"), 3, 50, numOpponents -> { + if (numOpponents == null) { return; } - ListChooser chooser = new ListChooser<>( - Forge.getLocalizer().getMessage("lblChooseAllowedDeckTypeOpponents"), 0, 11, Arrays.asList(DeckType.CUSTOM_DECK, - DeckType.PRECONSTRUCTED_DECK, - DeckType.QUEST_OPPONENT_DECK, - DeckType.COLOR_DECK, - DeckType.STANDARD_COLOR_DECK, - DeckType.STANDARD_CARDGEN_DECK, - DeckType.MODERN_COLOR_DECK, - DeckType.PIONEER_CARDGEN_DECK, - DeckType.HISTORIC_CARDGEN_DECK, - DeckType.MODERN_CARDGEN_DECK, - DeckType.LEGACY_CARDGEN_DECK, - DeckType.VINTAGE_CARDGEN_DECK, - DeckType.PAUPER_CARDGEN_DECK, - DeckType.THEME_DECK), null, new Callback>() { - @Override - public void run(final List allowedDeckTypes) { + ListChooser chooser = new ListChooser<>( + Forge.getLocalizer().getMessage("lblChooseAllowedDeckTypeOpponents"), 0, 11, Arrays.asList(DeckType.CUSTOM_DECK, + DeckType.PRECONSTRUCTED_DECK, + DeckType.QUEST_OPPONENT_DECK, + DeckType.COLOR_DECK, + DeckType.STANDARD_COLOR_DECK, + DeckType.STANDARD_CARDGEN_DECK, + DeckType.MODERN_COLOR_DECK, + DeckType.PIONEER_CARDGEN_DECK, + DeckType.HISTORIC_CARDGEN_DECK, + DeckType.MODERN_CARDGEN_DECK, + DeckType.LEGACY_CARDGEN_DECK, + DeckType.VINTAGE_CARDGEN_DECK, + DeckType.PAUPER_CARDGEN_DECK, + DeckType.THEME_DECK), null, allowedDeckTypes -> { if (allowedDeckTypes == null || allowedDeckTypes.isEmpty()) { return; } - FDeckChooser.promptForDeck(Forge.getLocalizer().getMessage("lblSelectYourDeck"), GameType.Gauntlet, false, new Callback() { - @Override - public void run(Deck userDeck) { - if (userDeck == null) { - return; - } - - GauntletData gauntlet = GauntletUtil.createQuickGauntlet(userDeck, numOpponents, allowedDeckTypes, null); - launchGauntlet(gauntlet); + FDeckChooser.promptForDeck(Forge.getLocalizer().getMessage("lblSelectYourDeck"), GameType.Gauntlet, false, userDeck -> { + if (userDeck == null) { + return; } + + GauntletData gauntlet = GauntletUtil.createQuickGauntlet(userDeck, numOpponents, allowedDeckTypes, null); + launchGauntlet(gauntlet); }); - } - }); - chooser.show(null, false); /*setting selectMax to true will select all available option*/ - } + }); + chooser.show(null, false); /*setting selectMax to true will select all available option*/ }); } private void createCustomGauntlet() { - GuiChoose.getInteger(Forge.getLocalizer().getMessage("lblHowManyOpponents"), 3, 50, new Callback() { - @Override - public void run(final Integer numOpponents) { - if (numOpponents == null) { return; } + GuiChoose.getInteger(Forge.getLocalizer().getMessage("lblHowManyOpponents"), 3, 50, numOpponents -> { + if (numOpponents == null) { return; } - GauntletData gauntlet = new GauntletData(); - gauntlet.setDecks(new ArrayList<>()); - promptForAiDeck(gauntlet, numOpponents); - } + GauntletData gauntlet = new GauntletData(); + gauntlet.setDecks(new ArrayList<>()); + promptForAiDeck(gauntlet, numOpponents); }); } private void createCustomCommanderGauntlet() { - GuiChoose.getInteger(Forge.getLocalizer().getMessage("lblHowManyOpponents"), 3, 50, new Callback() { - @Override - public void run(final Integer numOpponents) { - if (numOpponents == null) { return; } + GuiChoose.getInteger(Forge.getLocalizer().getMessage("lblHowManyOpponents"), 3, 50, numOpponents -> { + if (numOpponents == null) { return; } - GauntletData gauntlet = new GauntletData(true); - gauntlet.setDecks(new ArrayList<>()); - promptForAiDeck(gauntlet, numOpponents); - } + GauntletData gauntlet = new GauntletData(true); + gauntlet.setDecks(new ArrayList<>()); + promptForAiDeck(gauntlet, numOpponents); }); } private void promptForAiDeck(final GauntletData gauntlet, final int numOpponents) { final int opponentNum = gauntlet.getDecks().size() + 1; final GameType gameType = gauntlet.isCommanderGauntlet() ? GameType.CommanderGauntlet : GameType.Gauntlet; - FDeckChooser.promptForDeck(Forge.getLocalizer().getMessage("lblSelectDeckForOpponent") + " " + opponentNum + " / " + numOpponents, gameType, true, new Callback() { - @Override - public void run(Deck aiDeck) { - if (aiDeck == null) { return; } + FDeckChooser.promptForDeck(Forge.getLocalizer().getMessage("lblSelectDeckForOpponent") + " " + opponentNum + " / " + numOpponents, gameType, true, aiDeck -> { + if (aiDeck == null) { return; } - gauntlet.getDecks().add(aiDeck); - gauntlet.getEventNames().add(aiDeck.getName()); + gauntlet.getDecks().add(aiDeck); + gauntlet.getEventNames().add(aiDeck.getName()); - if (opponentNum < numOpponents) { - promptForAiDeck(gauntlet, numOpponents); - } - else { - //once all ai decks have been selected, prompt for user deck - FDeckChooser.promptForDeck(Forge.getLocalizer().getMessage("lblSelectYourDeck"), gameType, false, new Callback() { - @Override - public void run(Deck userDeck) { - if (userDeck == null) { return; } + if (opponentNum < numOpponents) { + promptForAiDeck(gauntlet, numOpponents); + } + else { + //once all ai decks have been selected, prompt for user deck + FDeckChooser.promptForDeck(Forge.getLocalizer().getMessage("lblSelectYourDeck"), gameType, false, userDeck -> { + if (userDeck == null) { return; } - gauntlet.setUserDeck(userDeck); - GauntletUtil.setDefaultGauntletName(gauntlet, GauntletIO.PREFIX_CUSTOM); - launchGauntlet(gauntlet); - } - }); - } + gauntlet.setUserDeck(userDeck); + GauntletUtil.setDefaultGauntletName(gauntlet, GauntletIO.PREFIX_CUSTOM); + launchGauntlet(gauntlet); + }); } }); } @@ -224,26 +189,20 @@ public class NewGauntletScreen extends LaunchScreen { } } - GuiChoose.oneOrNone(Forge.getLocalizer().getMessage("lblSelectGauntletContest"), contests, new Callback() { - @Override - public void run(final GauntletData contest) { - if (contest == null) { return; } + GuiChoose.oneOrNone(Forge.getLocalizer().getMessage("lblSelectGauntletContest"), contests, contest -> { + if (contest == null) { return; } - FDeckChooser.promptForDeck(Forge.getLocalizer().getMessage("lblSelectYourDeck"), GameType.Gauntlet, false, new Callback() { - @Override - public void run(final Deck userDeck) { - if (userDeck == null) { return; } + FDeckChooser.promptForDeck(Forge.getLocalizer().getMessage("lblSelectYourDeck"), GameType.Gauntlet, false, userDeck -> { + if (userDeck == null) { return; } - //create copy of contest to use as gauntlet - GauntletData gauntlet = new GauntletData(); - gauntlet.setDecks(new ArrayList<>(contest.getDecks())); - gauntlet.setEventNames(new ArrayList<>(contest.getEventNames())); - gauntlet.setUserDeck(userDeck); - GauntletUtil.setDefaultGauntletName(gauntlet, contest.getDisplayName() + "_"); - launchGauntlet(gauntlet); - } - }); - } + //create copy of contest to use as gauntlet + GauntletData gauntlet = new GauntletData(); + gauntlet.setDecks(new ArrayList<>(contest.getDecks())); + gauntlet.setEventNames(new ArrayList<>(contest.getEventNames())); + gauntlet.setUserDeck(userDeck); + GauntletUtil.setDefaultGauntletName(gauntlet, contest.getDisplayName() + "_"); + launchGauntlet(gauntlet); + }); }); } diff --git a/forge-gui-mobile/src/forge/screens/home/puzzle/PuzzleScreen.java b/forge-gui-mobile/src/forge/screens/home/puzzle/PuzzleScreen.java index 46ca4eb881f..e318b0b1c92 100644 --- a/forge-gui-mobile/src/forge/screens/home/puzzle/PuzzleScreen.java +++ b/forge-gui-mobile/src/forge/screens/home/puzzle/PuzzleScreen.java @@ -23,7 +23,6 @@ import forge.toolbox.FLabel; import forge.toolbox.FOptionPane; import forge.toolbox.FTextArea; import forge.toolbox.GuiChoose; -import forge.util.Callback; import forge.util.Utils; public class PuzzleScreen extends LaunchScreen { @@ -56,32 +55,29 @@ public class PuzzleScreen extends LaunchScreen { final ArrayList puzzles = PuzzleIO.loadPuzzles(ForgeConstants.PUZZLE_DIR); Collections.sort(puzzles); - GuiChoose.oneOrNone(Forge.getLocalizer().getMessage("lblChooseAPuzzle"), puzzles, new Callback() { - @Override - public void run(final Puzzle chosen) { - if (chosen != null) { - LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingThePuzzle"), true, () -> { - // Load selected puzzle - final HostedMatch hostedMatch = GuiBase.getInterface().hostMatch(); - hostedMatch.setStartGameHook(() -> chosen.applyToGame(hostedMatch.getGame())); + GuiChoose.oneOrNone(Forge.getLocalizer().getMessage("lblChooseAPuzzle"), puzzles, chosen -> { + if (chosen != null) { + LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingThePuzzle"), true, () -> { + // Load selected puzzle + final HostedMatch hostedMatch = GuiBase.getInterface().hostMatch(); + hostedMatch.setStartGameHook(() -> chosen.applyToGame(hostedMatch.getGame())); - hostedMatch.setEndGameHook((() -> chosen.savePuzzleSolve(hostedMatch.getGame().getOutcome().isWinner(GamePlayerUtil.getGuiPlayer())))); + hostedMatch.setEndGameHook((() -> chosen.savePuzzleSolve(hostedMatch.getGame().getOutcome().isWinner(GamePlayerUtil.getGuiPlayer())))); - final List players = new ArrayList<>(); - final RegisteredPlayer human = new RegisteredPlayer(new Deck()).setPlayer(GamePlayerUtil.getGuiPlayer()); - human.setStartingHand(0); - players.add(human); + final List players = new ArrayList<>(); + final RegisteredPlayer human = new RegisteredPlayer(new Deck()).setPlayer(GamePlayerUtil.getGuiPlayer()); + human.setStartingHand(0); + players.add(human); - final RegisteredPlayer ai = new RegisteredPlayer(new Deck()).setPlayer(GamePlayerUtil.createAiPlayer()); - ai.setStartingHand(0); - players.add(ai); + final RegisteredPlayer ai = new RegisteredPlayer(new Deck()).setPlayer(GamePlayerUtil.createAiPlayer()); + ai.setStartingHand(0); + players.add(ai); - GameRules rules = new GameRules(GameType.Puzzle); - rules.setGamesPerMatch(1); - hostedMatch.startMatch(rules, null, players, human, GuiBase.getInterface().getNewGuiGame()); - FOptionPane.showMessageDialog(chosen.getGoalDescription(), chosen.getName()); - }); - } + GameRules rules = new GameRules(GameType.Puzzle); + rules.setGamesPerMatch(1); + hostedMatch.startMatch(rules, null, players, human, GuiBase.getInterface().getNewGuiGame()); + FOptionPane.showMessageDialog(chosen.getGoalDescription(), chosen.getName()); + }); } }); diff --git a/forge-gui-mobile/src/forge/screens/limited/DraftingProcessScreen.java b/forge-gui-mobile/src/forge/screens/limited/DraftingProcessScreen.java index e33dfb0f298..a36f540ce12 100644 --- a/forge-gui-mobile/src/forge/screens/limited/DraftingProcessScreen.java +++ b/forge-gui-mobile/src/forge/screens/limited/DraftingProcessScreen.java @@ -69,40 +69,34 @@ public class DraftingProcessScreen extends FDeckEditor { } FThreads.invokeInEdtNowOrLater(() -> { - FOptionPane.showInputDialog(Forge.getLocalizer().getMessage("lblSaveDraftAs") + "?", new Callback<>() { - @Override - public void run(final String name) { - if (StringUtils.isEmpty(name)) { - save(callback); //re-prompt if user doesn't pick a name + FOptionPane.showInputDialog(Forge.getLocalizer().getMessage("lblSaveDraftAs") + "?", name -> { + if (StringUtils.isEmpty(name)) { + save(callback); //re-prompt if user doesn't pick a name + return; + } + + // Check for overwrite case + for (DeckGroup d : FModel.getDecks().getDraft()) { + if (name.equalsIgnoreCase(d.getName())) { + FOptionPane.showConfirmDialog( + Forge.getLocalizer().getMessage("lblAlreadyDeckName") + name + Forge.getLocalizer().getMessage("lblOverwriteConfirm"), + Forge.getLocalizer().getMessage("lblOverwriteDeck"), false, result -> { + if (result) { + finishSave(name); + if (callback != null) { + callback.run(true); + } + } else { + save(callback); //If no overwrite, recurse + } + }); return; } + } - // Check for overwrite case - for (DeckGroup d : FModel.getDecks().getDraft()) { - if (name.equalsIgnoreCase(d.getName())) { - FOptionPane.showConfirmDialog( - Forge.getLocalizer().getMessage("lblAlreadyDeckName") + name + Forge.getLocalizer().getMessage("lblOverwriteConfirm"), - Forge.getLocalizer().getMessage("lblOverwriteDeck"), false, new Callback<>() { - @Override - public void run(Boolean result) { - if (result) { - finishSave(name); - if (callback != null) { - callback.run(true); - } - } else { - save(callback); //If no overwrite, recurse - } - } - }); - return; - } - } - - finishSave(name); - if (callback != null) { - callback.run(true); - } + finishSave(name); + if (callback != null) { + callback.run(true); } }); }); diff --git a/forge-gui-mobile/src/forge/screens/match/MatchScreen.java b/forge-gui-mobile/src/forge/screens/match/MatchScreen.java index 61801a1049f..80ac6e9f8a1 100644 --- a/forge-gui-mobile/src/forge/screens/match/MatchScreen.java +++ b/forge-gui-mobile/src/forge/screens/match/MatchScreen.java @@ -1188,12 +1188,9 @@ public class MatchScreen extends FScreen { } private void confirmUserConcedes() { - final Callback callback = new Callback<>() { - @Override - public void run(Boolean result) { - if (result) { - getGameController().concede(); - } + final Callback callback = result -> { + if (result) { + getGameController().concede(); } }; diff --git a/forge-gui-mobile/src/forge/screens/online/OnlineMenu.java b/forge-gui-mobile/src/forge/screens/online/OnlineMenu.java index bcd8ea48ef6..ca767d2b423 100644 --- a/forge-gui-mobile/src/forge/screens/online/OnlineMenu.java +++ b/forge-gui-mobile/src/forge/screens/online/OnlineMenu.java @@ -13,7 +13,6 @@ import forge.menu.FPopupMenu; import forge.model.FModel; import forge.screens.FScreen; import forge.toolbox.FOptionPane; -import forge.util.Callback; public class OnlineMenu extends FPopupMenu { public enum OnlineScreen { @@ -31,23 +30,20 @@ public class OnlineMenu extends FPopupMenu { if(screenClass == null) { FOptionPane.showConfirmDialog( Forge.getLocalizer().getMessage("lblLeaveLobbyDescription"), - Forge.getLocalizer().getMessage("lblDisconnect"), new Callback() { - @Override - public void run(Boolean result) { - if (result) { - if (FServerManager.getInstance() != null) - if(FServerManager.getInstance().isHosting()) { - FServerManager.getInstance().unsetReady(); - FServerManager.getInstance().stopServer(); - } + Forge.getLocalizer().getMessage("lblDisconnect"), result -> { + if (result) { + if (FServerManager.getInstance() != null) + if(FServerManager.getInstance().isHosting()) { + FServerManager.getInstance().unsetReady(); + FServerManager.getInstance().stopServer(); + } - if (OnlineLobbyScreen.getfGameClient() != null) - OnlineLobbyScreen.closeClient(); + if (OnlineLobbyScreen.getfGameClient() != null) + OnlineLobbyScreen.closeClient(); - Forge.back(); - screen = null; - OnlineLobbyScreen.clearGameLobby(); - } + Forge.back(); + screen = null; + OnlineLobbyScreen.clearGameLobby(); } }); return; diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestAEtherScreen.java b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestAEtherScreen.java index a8adcd9ad24..d2c94bf9deb 100644 --- a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestAEtherScreen.java +++ b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestAEtherScreen.java @@ -355,13 +355,10 @@ public class ConquestAEtherScreen extends FScreen { caption = caption0; options = ImmutableList.copyOf(options0); setSelectedOption(options.get(0)); - setCommand(e -> GuiChoose.getChoices(Forge.getLocalizer().getMessage("lblSelectCaptionFilter", caption), 0, 1, options, Set.of(selectedOption), null, new Callback<>() { - @Override - public void run(List result) { - if (!result.isEmpty()) { - setSelectedOption(result.get(0)); - updateFilteredPool(); - } + setCommand(e -> GuiChoose.getChoices(Forge.getLocalizer().getMessage("lblSelectCaptionFilter", caption), 0, 1, options, Set.of(selectedOption), null, result -> { + if (!result.isEmpty()) { + setSelectedOption(result.get(0)); + updateFilteredPool(); } })); } diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestCommandersScreen.java b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestCommandersScreen.java index 429f9c56ca9..931de1a901c 100644 --- a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestCommandersScreen.java +++ b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestCommandersScreen.java @@ -95,12 +95,7 @@ public class ConquestCommandersScreen extends FScreen { String problem = DeckFormat.PlanarConquest.getDeckConformanceProblem(commander.getDeck()); if (problem != null) { //prevent selecting a commander with an invalid deck - FOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblCantSelectDeckBecause", commander.getName(), problem), Forge.getLocalizer().getMessage("lblInvalidDeck"), FOptionPane.INFORMATION_ICON, new Callback() { - @Override - public void run(Integer result) { - canCloseCallback.run(false); - } - }); + FOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblCantSelectDeckBecause", commander.getName(), problem), Forge.getLocalizer().getMessage("lblInvalidDeck"), FOptionPane.INFORMATION_ICON, result -> canCloseCallback.run(false)); return; } diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMultiverseScreen.java b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMultiverseScreen.java index fbe7327925c..55de463ad31 100644 --- a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMultiverseScreen.java +++ b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMultiverseScreen.java @@ -28,7 +28,6 @@ import forge.gamemodes.planarconquest.ConquestBattle; import forge.gamemodes.planarconquest.ConquestChaosBattle; import forge.gamemodes.planarconquest.ConquestData; import forge.gamemodes.planarconquest.ConquestEvent; -import forge.gamemodes.planarconquest.ConquestEvent.ChaosWheelOutcome; import forge.gamemodes.planarconquest.ConquestEvent.ConquestEventRecord; import forge.gamemodes.planarconquest.ConquestLocation; import forge.gamemodes.planarconquest.ConquestPlane; @@ -50,7 +49,6 @@ import forge.toolbox.FDisplayObject; import forge.toolbox.FList; import forge.toolbox.FOptionPane; import forge.toolbox.FScrollPane; -import forge.util.Callback; import forge.util.Utils; import forge.util.collect.FCollectionView; @@ -130,38 +128,30 @@ public class ConquestMultiverseScreen extends FScreen { } private void spinChaosWheel() { - ConquestChaosWheel.spin(new Callback() { - @Override - public void run(ChaosWheelOutcome outcome) { - switch (outcome) { - case BOOSTER: - awardBoosters(model.getCurrentPlane().getAwardPool(), 1); - break; - case DOUBLE_BOOSTER: - awardBoosters(model.getCurrentPlane().getAwardPool(), 2); - break; - case SHARDS: - awardShards(FModel.getConquestPreferences().getPrefInt(CQPref.AETHER_WHEEL_SHARDS), false); - break; - case DOUBLE_SHARDS: - awardShards(2 * FModel.getConquestPreferences().getPrefInt(CQPref.AETHER_WHEEL_SHARDS), false); - break; - case PLANESWALK: - if (model.getUnlockedPlaneCount() == model.getAccessiblePlaneCount()) { - FOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblAllPlanesUnlockedNotify"), Forge.getLocalizer().getMessage("lblAllPlanesUnlocked"), EMBLEM_IMAGE, new Callback() { - @Override - public void run(Integer result) { - launchChaosBattle(); - } - }); - } else { - awardBonusPlaneswalkEmblems(FModel.getConquestPreferences().getPrefInt(CQPref.PLANESWALK_WHEEL_EMBLEMS)); - } - break; - case CHAOS: - launchChaosBattle(); - break; + ConquestChaosWheel.spin(outcome -> { + switch (outcome) { + case BOOSTER: + awardBoosters(model.getCurrentPlane().getAwardPool(), 1); + break; + case DOUBLE_BOOSTER: + awardBoosters(model.getCurrentPlane().getAwardPool(), 2); + break; + case SHARDS: + awardShards(FModel.getConquestPreferences().getPrefInt(CQPref.AETHER_WHEEL_SHARDS), false); + break; + case DOUBLE_SHARDS: + awardShards(2 * FModel.getConquestPreferences().getPrefInt(CQPref.AETHER_WHEEL_SHARDS), false); + break; + case PLANESWALK: + if (model.getUnlockedPlaneCount() == model.getAccessiblePlaneCount()) { + FOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblAllPlanesUnlockedNotify"), Forge.getLocalizer().getMessage("lblAllPlanesUnlocked"), EMBLEM_IMAGE, result -> launchChaosBattle()); + } else { + awardBonusPlaneswalkEmblems(FModel.getConquestPreferences().getPrefInt(CQPref.PLANESWALK_WHEEL_EMBLEMS)); } + break; + case CHAOS: + launchChaosBattle(); + break; } }); } diff --git a/forge-gui-mobile/src/forge/screens/quest/QuestSpellShopScreen.java b/forge-gui-mobile/src/forge/screens/quest/QuestSpellShopScreen.java index 5ba210eef8d..7161c4427d8 100644 --- a/forge-gui-mobile/src/forge/screens/quest/QuestSpellShopScreen.java +++ b/forge-gui-mobile/src/forge/screens/quest/QuestSpellShopScreen.java @@ -205,19 +205,16 @@ public class QuestSpellShopScreen extends TabPageScreen { final int max = itemManager.getItemCount(item); if (max == 0) { return; } - final Callback callback = new Callback() { - @Override - public void run(final Integer result) { - if (result == null || result <= 0) { return; } + final Callback callback = result -> { + if (result == null || result <= 0) { return; } - //invoke in background thread so other dialogs can be shown properly - FThreads.invokeInBackgroundThread(() -> { - ItemPool items = new ItemPool<>(InventoryItem.class); - items.add(item, result); - activateItems(items); - FThreads.invokeInEdtLater(() -> parentScreen.updateCreditsLabel()); - }); - } + //invoke in background thread so other dialogs can be shown properly + FThreads.invokeInBackgroundThread(() -> { + ItemPool items = new ItemPool<>(InventoryItem.class); + items.add(item, result); + activateItems(items); + FThreads.invokeInEdtLater(() -> parentScreen.updateCreditsLabel()); + }); }; if (max == 1) { callback.run(max); diff --git a/forge-gui-mobile/src/forge/screens/settings/FilesPage.java b/forge-gui-mobile/src/forge/screens/settings/FilesPage.java index bce5a794ba4..e1e3a49b4e8 100644 --- a/forge-gui-mobile/src/forge/screens/settings/FilesPage.java +++ b/forge-gui-mobile/src/forge/screens/settings/FilesPage.java @@ -296,12 +296,9 @@ public class FilesPage extends TabPage { @Override public void select() { - new GuiDownloader(createService(), new Callback() { - @Override - public void run(Boolean finished) { - if (finished) { - finishCallback(); - } + new GuiDownloader(createService(), finished -> { + if (finished) { + finishCallback(); } }).show(); } @@ -322,20 +319,14 @@ public class FilesPage extends TabPage { @Override public void select() { final Map categories = getCategories(); - GuiChoose.one(prompt, categories.keySet(), new Callback() { - @Override - public void run(String result) { - final String url = categories.get(result); - final String name = url.substring(url.lastIndexOf("/") + 2); - new GuiDownloader(new GuiDownloadZipService(name, name, url, ForgeConstants.FONTS_DIR, null, null), new Callback() { - @Override - public void run(Boolean finished) { - if (finished) { - finishCallback(); - } - } - }).show(); - } + GuiChoose.one(prompt, categories.keySet(), result -> { + final String url = categories.get(result); + final String name = url.substring(url.lastIndexOf("/") + 2); + new GuiDownloader(new GuiDownloadZipService(name, name, url, ForgeConstants.FONTS_DIR, null, null), finished -> { + if (finished) { + finishCallback(); + } + }).show(); }); } protected abstract Map getCategories(); @@ -355,14 +346,11 @@ public class FilesPage extends TabPage { @Override public void select() { - FFileChooser.show(Forge.getLocalizer().getMessage("lblSelect").replace("%s", label), ChoiceType.GetDirectory, description, new Callback() { - @Override - public void run(String result) { - if (StringUtils.isEmpty(result) || description.equals(result)) { return; } - updateDir(result); - onDirectoryChanged(result); - FOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblRestartForgeMoveFilesNewLocation"), Forge.getLocalizer().getMessage("lblRestartRequired"), FOptionPane.INFORMATION_ICON); - } + FFileChooser.show(Forge.getLocalizer().getMessage("lblSelect").replace("%s", label), ChoiceType.GetDirectory, description, result -> { + if (StringUtils.isEmpty(result) || description.equals(result)) { return; } + updateDir(result); + onDirectoryChanged(result); + FOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblRestartForgeMoveFilesNewLocation"), Forge.getLocalizer().getMessage("lblRestartRequired"), FOptionPane.INFORMATION_ICON); }); } protected abstract void onDirectoryChanged(String newDir); diff --git a/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java b/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java index 202b1e8c135..96d968f1c31 100644 --- a/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java +++ b/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java @@ -28,7 +28,6 @@ import forge.toolbox.FCheckBox; import forge.toolbox.FGroupList; import forge.toolbox.FList; import forge.toolbox.FOptionPane; -import forge.util.Callback; import forge.util.Utils; import java.util.*; @@ -75,12 +74,9 @@ public class SettingsPage extends TabPage { FLanguage.changeLanguage(newValue); - FOptionPane.showConfirmDialog(Forge.getLocalizer().getMessage("lblRestartForgeDescription"), Forge.getLocalizer().getMessage("lblRestartForge"), Forge.getLocalizer().getMessage("lblRestart"), Forge.getLocalizer().getMessage("lblLater"), new Callback() { - @Override - public void run(Boolean result) { - if (result) { - Forge.restart(true); - } + FOptionPane.showConfirmDialog(Forge.getLocalizer().getMessage("lblRestartForgeDescription"), Forge.getLocalizer().getMessage("lblRestartForge"), Forge.getLocalizer().getMessage("lblRestart"), Forge.getLocalizer().getMessage("lblLater"), result -> { + if (result) { + Forge.restart(true); } }); } @@ -125,12 +121,9 @@ public class SettingsPage extends TabPage { boolean landscapeMode = FModel.getPreferences().getPrefBoolean(FPref.UI_LANDSCAPE_MODE); Forge.getDeviceAdapter().setLandscapeMode(landscapeMode); //ensure device able to save off ini file so landscape change takes effect if (Forge.isLandscapeMode() != landscapeMode) { - FOptionPane.showConfirmDialog(Forge.getLocalizer().getMessage("lblRestartForgeDescription"), Forge.getLocalizer().getMessage("lblRestartForge"), Forge.getLocalizer().getMessage("lblRestart"), Forge.getLocalizer().getMessage("lblLater"), new Callback() { - @Override - public void run(Boolean result) { - if (result) { - Forge.restart(true); - } + FOptionPane.showConfirmDialog(Forge.getLocalizer().getMessage("lblRestartForgeDescription"), Forge.getLocalizer().getMessage("lblRestartForge"), Forge.getLocalizer().getMessage("lblRestart"), Forge.getLocalizer().getMessage("lblLater"), result -> { + if (result) { + Forge.restart(true); } }); } @@ -376,12 +369,9 @@ public class SettingsPage extends TabPage { Forge.getLocalizer().getMessage("lblRestartForgeDescription"), Forge.getLocalizer().getMessage("lblRestartForge"), Forge.getLocalizer().getMessage("lblRestart"), - Forge.getLocalizer().getMessage("lblLater"), new Callback() { - @Override - public void run(Boolean result) { - if (result) { - Forge.restart(true); - } + Forge.getLocalizer().getMessage("lblLater"), result -> { + if (result) { + Forge.restart(true); } } ); @@ -397,12 +387,9 @@ public class SettingsPage extends TabPage { Forge.getLocalizer().getMessage("lblRestartForgeDescription"), Forge.getLocalizer().getMessage("lblRestartForge"), Forge.getLocalizer().getMessage("lblRestart"), - Forge.getLocalizer().getMessage("lblLater"), new Callback() { - @Override - public void run(Boolean result) { - if (result) { - Forge.restart(true); - } + Forge.getLocalizer().getMessage("lblLater"), result -> { + if (result) { + Forge.restart(true); } } ); @@ -418,12 +405,9 @@ public class SettingsPage extends TabPage { Forge.getLocalizer().getMessage("lblRestartForgeDescription"), Forge.getLocalizer().getMessage("lblRestartForge"), Forge.getLocalizer().getMessage("lblRestart"), - Forge.getLocalizer().getMessage("lblLater"), new Callback() { - @Override - public void run(Boolean result) { - if (result) { - Forge.restart(true); - } + Forge.getLocalizer().getMessage("lblLater"), result -> { + if (result) { + Forge.restart(true); } } ); @@ -458,12 +442,9 @@ public class SettingsPage extends TabPage { Forge.getLocalizer().getMessage("lblRestartForgeDescription"), Forge.getLocalizer().getMessage("lblRestartForge"), Forge.getLocalizer().getMessage("lblRestart"), - Forge.getLocalizer().getMessage("lblLater"), new Callback() { - @Override - public void run(Boolean result) { - if (result) { - Forge.restart(true); - } + Forge.getLocalizer().getMessage("lblLater"), result -> { + if (result) { + Forge.restart(true); } } ); @@ -495,12 +476,9 @@ public class SettingsPage extends TabPage { Forge.getLocalizer().getMessage("lblRestartForgeDescription"), Forge.getLocalizer().getMessage("lblRestartForge"), Forge.getLocalizer().getMessage("lblRestart"), - Forge.getLocalizer().getMessage("lblLater"), new Callback() { - @Override - public void run(Boolean result) { - if (result) { - Forge.restart(true); - } + Forge.getLocalizer().getMessage("lblLater"), result -> { + if (result) { + Forge.restart(true); } } ); @@ -958,21 +936,18 @@ public class SettingsPage extends TabPage { description, currentValue, null, - new Callback() { - @Override - public void run(String input) { - if (input == null) return; // cancelled - if (!input.matches("\\d+")) { - FOptionPane.showMessageDialog("Please enter a valid number.", "Invalid Input"); - return; - } - int value = Integer.parseInt(input); - if (value < minValue || value > maxValue) { - FOptionPane.showMessageDialog("Value must be between " + minValue + " and " + maxValue + ".", "Invalid Input"); - return; - } - valueChanged(input); + input -> { + if (input == null) return; // cancelled + if (!input.matches("\\d+")) { + FOptionPane.showMessageDialog("Please enter a valid number.", "Invalid Input"); + return; } + int value = Integer.parseInt(input); + if (value < minValue || value > maxValue) { + FOptionPane.showMessageDialog("Value must be between " + minValue + " and " + maxValue + ".", "Invalid Input"); + return; + } + valueChanged(input); }, true // isNumeric ); diff --git a/forge-gui-mobile/src/forge/toolbox/FOptionPane.java b/forge-gui-mobile/src/forge/toolbox/FOptionPane.java index fd3cf7262bc..19cf6a8d9e8 100644 --- a/forge-gui-mobile/src/forge/toolbox/FOptionPane.java +++ b/forge-gui-mobile/src/forge/toolbox/FOptionPane.java @@ -83,12 +83,7 @@ public class FOptionPane extends FDialog { public static void showConfirmDialog(final String message, final String title, final String yesButtonText, final String noButtonText, final boolean defaultYes, final Callback callback) { final List options = ImmutableList.of(yesButtonText, noButtonText); - showOptionDialog(message, title, QUESTION_ICON, options, defaultYes ? 0 : 1, new Callback() { - @Override - public void run(final Integer result) { - callback.run(result == 0); - } - }); + showOptionDialog(message, title, QUESTION_ICON, options, defaultYes ? 0 : 1, result -> callback.run(result == 0)); } public static void showOptionDialog(final String message, final String title, final FImage icon, final List options, final Callback callback) { @@ -189,19 +184,15 @@ public class FOptionPane extends FDialog { container.add(inputField); container.setHeight(inputField.getHeight() + padTop + PADDING); - final FOptionPane optionPane = new FOptionPane(message, null, title, null, container, ImmutableList.of(Forge.getLocalizer().getMessage("lblOK"), Forge.getLocalizer().getMessage("lblCancel")), 0, new Callback() { - @SuppressWarnings("unchecked") - @Override - public void run(final Integer result) { - if (result == 0) { - if (txtInput != null) { - callback.run((T)txtInput.getText()); - } else { - callback.run(cbInput.getSelectedItem()); - } + final FOptionPane optionPane = new FOptionPane(message, null, title, null, container, ImmutableList.of(Forge.getLocalizer().getMessage("lblOK"), Forge.getLocalizer().getMessage("lblCancel")), 0, result -> { + if (result == 0) { + if (txtInput != null) { + callback.run((T)txtInput.getText()); } else { - callback.run(null); + callback.run(cbInput.getSelectedItem()); } + } else { + callback.run(null); } }) { @Override diff --git a/forge-gui-mobile/src/forge/toolbox/FSpinner.java b/forge-gui-mobile/src/forge/toolbox/FSpinner.java index 694408b87b6..efe671380bb 100644 --- a/forge-gui-mobile/src/forge/toolbox/FSpinner.java +++ b/forge-gui-mobile/src/forge/toolbox/FSpinner.java @@ -2,7 +2,6 @@ package forge.toolbox; import forge.Forge; import forge.toolbox.FEvent.FEventType; -import forge.util.Callback; public class FSpinner extends FTextField { @@ -36,16 +35,13 @@ public class FSpinner extends FTextField { @Override public boolean tap(float x, float y, int count) { - GuiChoose.getInteger(Forge.getLocalizer().getMessage("lblSelectANumber"), minValue, maxValue, new Callback() { - @Override - public void run(Integer result) { - if (result != null && result != value) { - int oldValue = value; - setValue(result); - if (getChangedHandler() != null) { - //handle change event if value changed from input - getChangedHandler().handleEvent(new FEvent(FSpinner.this, FEventType.CHANGE, oldValue)); - } + GuiChoose.getInteger(Forge.getLocalizer().getMessage("lblSelectANumber"), minValue, maxValue, result -> { + if (result != null && result != value) { + int oldValue = value; + setValue(result); + if (getChangedHandler() != null) { + //handle change event if value changed from input + getChangedHandler().handleEvent(new FEvent(FSpinner.this, FEventType.CHANGE, oldValue)); } } }); diff --git a/forge-gui-mobile/src/forge/toolbox/GuiChoose.java b/forge-gui-mobile/src/forge/toolbox/GuiChoose.java index ab5f95b4f71..b196856fc30 100644 --- a/forge-gui-mobile/src/forge/toolbox/GuiChoose.java +++ b/forge-gui-mobile/src/forge/toolbox/GuiChoose.java @@ -35,12 +35,7 @@ public class GuiChoose { callback.run(null); return; } - getChoices(message, 0, 1, choices, new Callback>() { - @Override - public void run(final List result) { - callback.run(result.isEmpty() ? null : result.get(0)); - } - }); + getChoices(message, 0, 1, choices, result -> callback.run(result.isEmpty() ? null : result.get(0))); } public static void oneOrNone(final String message, final Collection choices, final Callback callback) { @@ -48,12 +43,7 @@ public class GuiChoose { callback.run(null); return; } - getChoices(message, 0, 1, choices, new Callback>() { - @Override - public void run(final List result) { - callback.run(result.isEmpty() ? null : result.get(0)); - } - }); + getChoices(message, 0, 1, choices, result -> callback.run(result.isEmpty() ? null : result.get(0))); } // getChoiceOptional(String,T...) // returned Object will never be null @@ -80,12 +70,9 @@ public class GuiChoose { return; } - getChoices(message, 1, 1, choices, new Callback>() { - @Override - public void run(final List result) { - assert result.size() == 1; - callback.run(result.get(0)); - } + getChoices(message, 1, 1, choices, result -> { + assert result.size() == 1; + callback.run(result.get(0)); }); } @@ -99,12 +86,9 @@ public class GuiChoose { return; } - getChoices(message, 1, 1, choices, new Callback>() { - @Override - public void run(final List result) { - assert result.size() == 1; - callback.run(result.get(0)); - } + getChoices(message, 1, 1, choices, result -> { + assert result.size() == 1; + callback.run(result.get(0)); }); } @@ -172,52 +156,46 @@ public class GuiChoose { } choices.add(Forge.getLocalizer().getMessage("lblOther") + "..."); - oneOrNone(message, choices, new Callback() { - @Override - public void run(Object choice) { - if (choice instanceof Integer || choice == null) { - callback.run((Integer)choice); - return; - } - - //if Other option picked, prompt for number input - String prompt = "Enter a number"; - if (min != Integer.MIN_VALUE) { - if (max != Integer.MAX_VALUE) { - prompt += " between " + min + " and " + max; - } - else { - prompt += " greater than or equal to " + min; - } - } - else if (max != Integer.MAX_VALUE) { - prompt += " less than or equal to " + max; - } - prompt += ":"; - getNumberInput(prompt, message, min, max, callback); + oneOrNone(message, choices, choice -> { + if (choice instanceof Integer || choice == null) { + callback.run((Integer)choice); + return; } + + //if Other option picked, prompt for number input + String prompt = "Enter a number"; + if (min != Integer.MIN_VALUE) { + if (max != Integer.MAX_VALUE) { + prompt += " between " + min + " and " + max; + } + else { + prompt += " greater than or equal to " + min; + } + } + else if (max != Integer.MAX_VALUE) { + prompt += " less than or equal to " + max; + } + prompt += ":"; + getNumberInput(prompt, message, min, max, callback); }); } private static void getNumberInput(final String prompt, final String message, final int min, final int max, final Callback callback) { - FOptionPane.showInputDialog(prompt, message, new Callback() { - @Override - public void run(String result) { - if (result == null) { //that is 'cancel' - callback.run(null); + FOptionPane.showInputDialog(prompt, message, result -> { + if (result == null) { //that is 'cancel' + callback.run(null); + return; + } + if (StringUtils.isNumeric(result)) { + int val = Integer.parseInt(result); + if (val >= min && val <= max) { + callback.run(val); return; } - if (StringUtils.isNumeric(result)) { - int val = Integer.parseInt(result); - if (val >= min && val <= max) { - callback.run(val); - return; - } - } - - //re-prompt if invalid input - getNumberInput(prompt, message, min, max, callback); } + + //re-prompt if invalid input + getNumberInput(prompt, message, min, max, callback); }); } @@ -271,12 +249,7 @@ public class GuiChoose { callback.run(null); return; } - sortedGetChoices(message, 0, 1, choices, comparer, new Callback>() { - @Override - public void run(List result) { - callback.run(result.isEmpty() ? null : result.get(0)); - } - }); + sortedGetChoices(message, 0, 1, choices, comparer, result -> callback.run(result.isEmpty() ? null : result.get(0))); } // If comparer is NULL, T has to be comparable. Otherwise you'll get an exception from inside the Arrays.sort() routine @@ -285,12 +258,7 @@ public class GuiChoose { callback.run(null); return; } - sortedGetChoices(message, 0, 1, choices, comparer, new Callback>() { - @Override - public void run(List result) { - callback.run(result.isEmpty() ? null : result.get(0)); - } - }); + sortedGetChoices(message, 0, 1, choices, comparer, result -> callback.run(result.isEmpty() ? null : result.get(0))); } // If comparer is NULL, T has to be comparable. Otherwise you'll get an exception from inside the Arrays.sort() routine @@ -299,12 +267,9 @@ public class GuiChoose { callback.run(null); return; } - sortedGetChoices(message, 1, 1, choices, comparer, new Callback>() { - @Override - public void run(List result) { - assert result.size() == 1; - callback.run(result.get(0)); - } + sortedGetChoices(message, 1, 1, choices, comparer, result -> { + assert result.size() == 1; + callback.run(result.get(0)); }); } @@ -314,12 +279,9 @@ public class GuiChoose { callback.run(null); return; } - sortedGetChoices(message, 1, 1, choices, comparer, new Callback>() { - @Override - public void run(List result) { - assert result.size() == 1; - callback.run(result.get(0)); - } + sortedGetChoices(message, 1, 1, choices, comparer, result -> { + assert result.size() == 1; + callback.run(result.get(0)); }); } diff --git a/forge-gui-mobile/src/forge/toolbox/GuiDialog.java b/forge-gui-mobile/src/forge/toolbox/GuiDialog.java index 1a454e73d20..6363ede340e 100644 --- a/forge-gui-mobile/src/forge/toolbox/GuiDialog.java +++ b/forge-gui-mobile/src/forge/toolbox/GuiDialog.java @@ -29,11 +29,7 @@ public class GuiDialog { final String title = c == null ? "Question" : c + " - Ability"; String questionToUse = StringUtils.isBlank(question) ? "Activate card's ability?" : question; final List opts = options == null ? defaultConfirmOptions : options; - FOptionPane.showCardOptionDialog(c, questionToUse, title, FOptionPane.QUESTION_ICON, opts, defaultIsYes ? 0 : 1, new Callback() { - @Override public void run(final Integer result) { - callback.run(result == 0); - } - }); + FOptionPane.showCardOptionDialog(c, questionToUse, title, FOptionPane.QUESTION_ICON, opts, defaultIsYes ? 0 : 1, result -> callback.run(result == 0)); } /** diff --git a/forge-gui-mobile/src/forge/toolbox/ListChooser.java b/forge-gui-mobile/src/forge/toolbox/ListChooser.java index 1d8f6cf717a..dfd46fc20be 100644 --- a/forge-gui-mobile/src/forge/toolbox/ListChooser.java +++ b/forge-gui-mobile/src/forge/toolbox/ListChooser.java @@ -120,19 +120,16 @@ public class ListChooser extends FContainer { updateHeight(); - optionPane = new FOptionPane(null, null, title, null, this, options, 0, new Callback() { - @Override - public void run(Integer result) { - called = false; - if (result == 0) { - callback.run(lstChoices.getSelectedItems()); - } - else if (minChoices > 0) { - show(); //show if user tries to cancel when input is mandatory - } - else { - callback.run(new ArrayList<>()); - } + optionPane = new FOptionPane(null, null, title, null, this, options, 0, result -> { + called = false; + if (result == 0) { + callback.run(lstChoices.getSelectedItems()); + } + else if (minChoices > 0) { + show(); //show if user tries to cancel when input is mandatory + } + else { + callback.run(new ArrayList<>()); } }) { @Override diff --git a/forge-gui/src/main/java/forge/util/Callback.java b/forge-gui/src/main/java/forge/util/Callback.java index acb8cecb424..41d98d8c625 100644 --- a/forge-gui/src/main/java/forge/util/Callback.java +++ b/forge-gui/src/main/java/forge/util/Callback.java @@ -1,5 +1,6 @@ package forge.util; -public abstract class Callback { - public abstract void run(T result); +@FunctionalInterface +public interface Callback { + void run(T result); } diff --git a/forge-gui/src/main/java/forge/util/WaitCallback.java b/forge-gui/src/main/java/forge/util/WaitCallback.java index 95c7c0d4573..a41aa4fd4d5 100644 --- a/forge-gui/src/main/java/forge/util/WaitCallback.java +++ b/forge-gui/src/main/java/forge/util/WaitCallback.java @@ -2,7 +2,7 @@ package forge.util; import forge.gui.FThreads; -public abstract class WaitCallback extends Callback implements Runnable { +public abstract class WaitCallback implements Callback, Runnable { public class Lock { } From 28ec24069cf50f0bab2b20524f6f75086785b30b Mon Sep 17 00:00:00 2001 From: Leandro Doctors Date: Mon, 25 Aug 2025 18:35:34 +0200 Subject: [PATCH 005/355] CI: add support for JDK 21 Depends on https://github.com/Card-Forge/forge/pull/8533 --- .github/workflows/test-build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-build.yaml b/.github/workflows/test-build.yaml index 59aaaffdc04..c293c074119 100644 --- a/.github/workflows/test-build.yaml +++ b/.github/workflows/test-build.yaml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - java: [ '17' ] + java: ['17', '21'] name: Test with Java ${{ matrix.Java }} steps: - uses: actions/checkout@v3 From b24f536190e0993ff5d9262c28728d6e4b2b8a7e Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Tue, 26 Aug 2025 06:34:59 +0800 Subject: [PATCH 006/355] use Java Consumer --- .../src/main/java/forge/GuiDesktop.java | 4 +- .../java/forge/download/GuiDownloader.java | 9 +- forge-gui-mobile/src/forge/Forge.java | 9 +- forge-gui-mobile/src/forge/GuiMobile.java | 3 +- .../src/forge/adventure/data/DialogData.java | 5 +- .../adventure/scene/AdventureDeckEditor.java | 8 +- .../src/forge/adventure/scene/MenuScene.java | 2 +- .../src/forge/card/GameEntityPicker.java | 8 +- .../src/forge/deck/AddBasicLandsDialog.java | 7 +- .../src/forge/deck/FDeckChooser.java | 60 ++++++------ .../src/forge/deck/FDeckEditor.java | 20 ++-- .../src/forge/deck/FDeckImportDialog.java | 8 +- .../src/forge/deck/FSideboardDialog.java | 12 +-- .../src/forge/error/BugReportDialog.java | 5 +- .../filters/AdvancedSearchFilter.java | 4 +- .../filters/ArchivedFormatSelect.java | 4 +- .../itemmanager/filters/FormatFilter.java | 4 +- .../src/forge/screens/FScreen.java | 10 +- .../screens/constructed/AvatarSelector.java | 12 +-- .../screens/constructed/PlayerPanel.java | 16 +-- .../screens/constructed/SleevesSelector.java | 12 +-- .../forge/screens/home/AdventureScreen.java | 5 +- .../src/forge/screens/home/HomeScreen.java | 24 ++--- .../limited/DraftingProcessScreen.java | 15 +-- .../src/forge/screens/match/MatchScreen.java | 6 +- .../match/views/VAssignCombatDamage.java | 6 +- .../match/views/VAssignGenericAmount.java | 6 +- .../planarconquest/ConquestChaosWheel.java | 11 ++- .../ConquestCommandersScreen.java | 10 +- .../ConquestPlaneswalkersScreen.java | 9 +- .../screens/quest/QuestSpellShopScreen.java | 8 +- .../src/forge/screens/settings/FilesPage.java | 79 +++++++-------- .../forge/screens/settings/GuiDownloader.java | 6 +- .../src/forge/toolbox/DualListBox.java | 8 +- .../src/forge/toolbox/FFileChooser.java | 14 +-- .../src/forge/toolbox/FOptionPane.java | 42 ++++---- .../src/forge/toolbox/GuiChoose.java | 98 +++++++++---------- .../src/forge/toolbox/GuiDialog.java | 12 +-- .../src/forge/toolbox/ListChooser.java | 9 +- .../java/forge/gui/interfaces/IGuiBase.java | 4 +- .../src/main/java/forge/util/Callback.java | 6 -- .../main/java/forge/util/WaitCallback.java | 6 +- 42 files changed, 298 insertions(+), 308 deletions(-) delete mode 100644 forge-gui/src/main/java/forge/util/Callback.java diff --git a/forge-gui-desktop/src/main/java/forge/GuiDesktop.java b/forge-gui-desktop/src/main/java/forge/GuiDesktop.java index bcd38dd843d..4a57d8fa84a 100644 --- a/forge-gui-desktop/src/main/java/forge/GuiDesktop.java +++ b/forge-gui-desktop/src/main/java/forge/GuiDesktop.java @@ -15,6 +15,7 @@ import java.net.URI; import java.net.URISyntaxException; import java.util.Collection; import java.util.List; +import java.util.function.Consumer; import java.util.function.Function; import javax.swing.ImageIcon; @@ -53,7 +54,6 @@ import forge.toolbox.FOptionPane; import forge.toolbox.FSkin; import forge.toolbox.FSkin.SkinImage; import forge.util.BuildInfo; -import forge.util.Callback; import forge.util.FileUtil; import forge.util.ImageFetcher; import forge.util.OperatingSystem; @@ -264,7 +264,7 @@ public class GuiDesktop implements IGuiBase { } @Override - public void download(final GuiDownloadService service, final Callback callback) { + public void download(final GuiDownloadService service, final Consumer callback) { new GuiDownloader(service, callback).show(); } diff --git a/forge-gui-desktop/src/main/java/forge/download/GuiDownloader.java b/forge-gui-desktop/src/main/java/forge/download/GuiDownloader.java index 9c53c99f482..04671d2e01e 100644 --- a/forge-gui-desktop/src/main/java/forge/download/GuiDownloader.java +++ b/forge-gui-desktop/src/main/java/forge/download/GuiDownloader.java @@ -37,9 +37,10 @@ import forge.toolbox.FRadioButton; import forge.toolbox.FSkin; import forge.toolbox.FTextField; import forge.toolbox.JXButtonPanel; -import forge.util.Callback; import net.miginfocom.swing.MigLayout; +import java.util.function.Consumer; + @SuppressWarnings("serial") public class GuiDownloader extends DefaultBoundedRangeModel { // Swing components @@ -57,7 +58,7 @@ public class GuiDownloader extends DefaultBoundedRangeModel { SOverlayUtils.hideOverlay(); if (callback != null) { - callback.run(btnStart.getText() == "OK"); //determine result based on whether download finished + callback.accept(btnStart.getText() == "OK"); //determine result based on whether download finished } } }; @@ -70,12 +71,12 @@ public class GuiDownloader extends DefaultBoundedRangeModel { private final FRadioButton radProxyHTTP = new FRadioButton("HTTP Proxy"); private final GuiDownloadService service; - private final Callback callback; + private final Consumer callback; public GuiDownloader(final GuiDownloadService service0) { this(service0, null); } - public GuiDownloader(final GuiDownloadService service0, final Callback callback0) { + public GuiDownloader(final GuiDownloadService service0, final Consumer callback0) { service = service0; callback = callback0; diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index 82a99fe90de..cbc171eda58 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -53,6 +53,7 @@ import io.sentry.Sentry; import java.nio.file.Files; import java.nio.file.Paths; import java.util.*; +import java.util.function.Consumer; public class Forge implements ApplicationListener { private static ApplicationListener app = null; @@ -639,7 +640,7 @@ public class Forge implements ApplicationListener { return; } //don't allow exiting multiple times - Callback callback = result -> { + Consumer callback = result -> { if (result) { exited = true; exitAnimation(true); @@ -648,7 +649,7 @@ public class Forge implements ApplicationListener { if (silent) { - callback.run(true); + callback.accept(true); } else { FOptionPane.showConfirmDialog( getLocalizer().getMessage("lblAreYouSureYouWishRestartForge"), getLocalizer().getMessage("lblRestartForge"), @@ -665,7 +666,7 @@ public class Forge implements ApplicationListener { options.add(getLocalizer().getMessage("lblExit")); options.add(getLocalizer().getMessage("lblCancel")); - Callback callback = result -> { + Consumer callback = result -> { if (result == 0) { exited = true; exitAnimation(false); @@ -673,7 +674,7 @@ public class Forge implements ApplicationListener { }; if (silent) { - callback.run(0); + callback.accept(0); } else { FOptionPane.showOptionDialog(getLocalizer().getMessage("lblAreYouSureYouWishExitForge"), "", FOptionPane.QUESTION_ICON, options, 0, callback); diff --git a/forge-gui-mobile/src/forge/GuiMobile.java b/forge-gui-mobile/src/forge/GuiMobile.java index 2af4a82bf0a..e63362a1182 100644 --- a/forge-gui-mobile/src/forge/GuiMobile.java +++ b/forge-gui-mobile/src/forge/GuiMobile.java @@ -32,6 +32,7 @@ import java.io.File; import java.util.Arrays; import java.util.Collection; import java.util.List; +import java.util.function.Consumer; import java.util.function.Function; import org.jupnp.DefaultUpnpServiceConfiguration; @@ -282,7 +283,7 @@ public class GuiMobile implements IGuiBase { } @Override - public void download(final GuiDownloadService service, final Callback callback) { + public void download(final GuiDownloadService service, final Consumer callback) { new GuiDownloader(service, callback).show(); } diff --git a/forge-gui-mobile/src/forge/adventure/data/DialogData.java b/forge-gui-mobile/src/forge/adventure/data/DialogData.java index 4064188e420..fedd70b6839 100644 --- a/forge-gui-mobile/src/forge/adventure/data/DialogData.java +++ b/forge-gui-mobile/src/forge/adventure/data/DialogData.java @@ -1,10 +1,9 @@ package forge.adventure.data; -import forge.util.Callback; - import java.io.Serializable; import java.util.ArrayList; import java.util.List; +import java.util.function.Consumer; /** * Dialog Data JSON loader class. @@ -22,7 +21,7 @@ public class DialogData implements Serializable { public DialogData[] options = new DialogData[0]; //List of sub-dialogs. Show up as options in the current one. public boolean isDisabled = false; - public transient Callback callback; + public transient Consumer callback; public DialogData(){} public DialogData(DialogData other){ diff --git a/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java b/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java index b8e52e545c8..1a6207e7314 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java +++ b/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java @@ -34,12 +34,12 @@ import forge.menu.FMenuItem; import forge.menu.FPopupMenu; import forge.model.FModel; import forge.toolbox.*; -import forge.util.Callback; import forge.util.ItemPool; import forge.util.Localizer; import forge.util.Utils; import java.util.*; +import java.util.function.Consumer; import java.util.function.Function; public class AdventureDeckEditor extends FDeckEditor { @@ -809,7 +809,7 @@ public class AdventureDeckEditor extends FDeckEditor { } @Override - public void onClose(final Callback canCloseCallback) { + public void onClose(final Consumer canCloseCallback) { if(canCloseCallback == null) { resolveClose(null, true); return; @@ -836,14 +836,14 @@ public class AdventureDeckEditor extends FDeckEditor { resolveClose(canCloseCallback, true); } - private void resolveClose(final Callback canCloseCallback, boolean result) { + private void resolveClose(final Consumer canCloseCallback, boolean result) { if(result) { Current.player().newCards.clear(); if(isDrafting()) getCurrentEvent().eventStatus = AdventureEventController.EventStatus.Abandoned; } if(canCloseCallback != null) - canCloseCallback.run(result); + canCloseCallback.accept(result); } @Override diff --git a/forge-gui-mobile/src/forge/adventure/scene/MenuScene.java b/forge-gui-mobile/src/forge/adventure/scene/MenuScene.java index 41e1930bd73..4f8a1a1b1c3 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/MenuScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/MenuScene.java @@ -157,7 +157,7 @@ public class MenuScene extends UIScene { loadDialog(option); if (option.callback != null) { - option.callback.run(true); + option.callback.accept(true); } }); B.getTextraLabel().setWrap(true); //We want this to wrap in case it's a wordy choice. diff --git a/forge-gui-mobile/src/forge/card/GameEntityPicker.java b/forge-gui-mobile/src/forge/card/GameEntityPicker.java index 809470890e9..8146a8c1f85 100644 --- a/forge-gui-mobile/src/forge/card/GameEntityPicker.java +++ b/forge-gui-mobile/src/forge/card/GameEntityPicker.java @@ -3,6 +3,7 @@ package forge.card; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.function.Consumer; import com.google.common.collect.ImmutableList; @@ -20,12 +21,11 @@ import forge.toolbox.FEvent; import forge.toolbox.FEvent.FEventHandler; import forge.toolbox.FOptionPane; import forge.toolbox.FTextField; -import forge.util.Callback; public class GameEntityPicker extends TabPageScreen { private final FOptionPane optionPane; - public GameEntityPicker(String title, Collection choiceList, Collection revealList, String revealListCaption, FImage revealListImage, boolean isOptional, final Callback callback) { + public GameEntityPicker(String title, Collection choiceList, Collection revealList, String revealListCaption, FImage revealListImage, boolean isOptional, final Consumer callback) { super(new PickerTab[] { new PickerTab(choiceList, Forge.getLocalizer().getMessage("lblChoices"), Forge.hdbuttons ? FSkinImage.HDCHOICE : FSkinImage.DECKLIST, 1), new PickerTab(revealList, revealListCaption, revealListImage, 0) @@ -36,10 +36,10 @@ public class GameEntityPicker extends TabPageScreen { optionPane = new FOptionPane(null, null, title, null, this, isOptional ? ImmutableList.of(Forge.getLocalizer().getMessage("lblOK"), Forge.getLocalizer().getMessage("lblCancel")) : ImmutableList.of(Forge.getLocalizer().getMessage("lblOK")), 0, result -> { if (result == 0) { - callback.run(((PickerTab) tabPages.get(0)).list.getSelectedItem()); + callback.accept(((PickerTab) tabPages.get(0)).list.getSelectedItem()); } else { - callback.run(null); + callback.accept(null); } }) { @Override diff --git a/forge-gui-mobile/src/forge/deck/AddBasicLandsDialog.java b/forge-gui-mobile/src/forge/deck/AddBasicLandsDialog.java index 1e82406728d..ca0d93ff361 100644 --- a/forge-gui-mobile/src/forge/deck/AddBasicLandsDialog.java +++ b/forge-gui-mobile/src/forge/deck/AddBasicLandsDialog.java @@ -21,6 +21,7 @@ import java.text.NumberFormat; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.function.Consumer; import com.badlogic.gdx.utils.Align; @@ -55,7 +56,7 @@ public class AddBasicLandsDialog extends FDialog { private final Deck currentDeck; - private final Callback callback; + private final Consumer callback; private final FLabel lblLandSet = add(new FLabel.Builder().text(Forge.getLocalizer().getMessage("lblLandSet") + ":").font(FSkinFont.get(12)).textColor(FLabel.getInlineLabelColor()).build()); private final FComboBox cbLandSet = add(new FComboBox<>(IterableUtil.filter(StaticData.instance().getEditions(), CardEdition.Predicates.hasBasicLands))); @@ -113,7 +114,7 @@ public class AddBasicLandsDialog extends FDialog { private int nonLandCount, oldLandCount; private CardEdition landSet; - public AddBasicLandsDialog(Deck deck, CardEdition defaultLandSet, final Callback callback0, List editionOptions) { + public AddBasicLandsDialog(Deck deck, CardEdition defaultLandSet, final Consumer callback0, List editionOptions) { super(Forge.getLocalizer().getMessage("lblAddBasicLandsAutoSuggest").replace("%s", deck.getName()), 2); callback = callback0; @@ -149,7 +150,7 @@ public class AddBasicLandsDialog extends FDialog { hide(); if (landsToAdd.countAll() > 0) { - callback.run(landsToAdd); + callback.accept(landsToAdd); } }); initButton(1, Forge.getLocalizer().getMessage("lblCancel"), e -> hide()); diff --git a/forge-gui-mobile/src/forge/deck/FDeckChooser.java b/forge-gui-mobile/src/forge/deck/FDeckChooser.java index da274ad3618..37a74925f6f 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckChooser.java +++ b/forge-gui-mobile/src/forge/deck/FDeckChooser.java @@ -52,7 +52,6 @@ import forge.toolbox.FEvent.FEventHandler; import forge.toolbox.FOptionPane; import forge.toolbox.GuiChoose; import forge.toolbox.ListChooser; -import forge.util.Callback; import forge.util.Utils; import forge.util.storage.IStorage; @@ -62,7 +61,7 @@ public class FDeckChooser extends FScreen { private FComboBox cmbDeckTypes; private DeckType selectedDeckType; private boolean needRefreshOnActivate; - private Callback callback; + private Consumer callback; private NetDeckCategory netDeckCategory; private NetDeckArchiveStandard NetDeckArchiveStandard; private NetDeckArchivePioneer NetDeckArchivePioneer; @@ -88,7 +87,7 @@ public class FDeckChooser extends FScreen { private FOptionPane optionPane; //Show dialog to select a deck - public static void promptForDeck(String title, GameType gameType, boolean forAi, final Callback callback) { + public static void promptForDeck(String title, GameType gameType, boolean forAi, final Consumer callback) { FThreads.assertExecutedByEdt(true); final FDeckChooser deckChooser = new FDeckChooser(gameType, forAi, null); @@ -230,7 +229,7 @@ public class FDeckChooser extends FScreen { if (optionPane == null) { Forge.back(); if (callback != null) { - callback.run(getDeck()); + callback.accept(getDeck()); } } else { @@ -429,36 +428,33 @@ public class FDeckChooser extends FScreen { //prompt to duplicate deck if deck doesn't exist already FOptionPane.showConfirmDialog(selectedDeckType + " " + Forge.getLocalizer().getMessage("lblCannotEditDuplicateCustomDeck").replace("%s", deck.getName()), - Forge.getLocalizer().getMessage("lblDuplicateDeck"), Forge.getLocalizer().getMessage("lblDuplicate"), Forge.getLocalizer().getMessage("lblCancel"), new Callback() { - @Override - public void run(Boolean result) { - if (result) { - Deck copiedDeck = (Deck)deck.getDeck().copyTo(deck.getName()); - IStorage storage; + Forge.getLocalizer().getMessage("lblDuplicateDeck"), Forge.getLocalizer().getMessage("lblDuplicate"), Forge.getLocalizer().getMessage("lblCancel"), result -> { + if (result) { + Deck copiedDeck = (Deck)deck.getDeck().copyTo(deck.getName()); + IStorage storage; - switch(lstDecks.getGameType()) { - case Commander: - storage = FModel.getDecks().getCommander(); - break; - case Brawl: - storage = FModel.getDecks().getBrawl(); - break; - case TinyLeaders: - storage = FModel.getDecks().getTinyLeaders(); - break; - case Oathbreaker: - storage = FModel.getDecks().getOathbreaker(); - break; - default: - storage = FModel.getDecks().getConstructed(); - break; + switch(lstDecks.getGameType()) { + case Commander: + storage = FModel.getDecks().getCommander(); + break; + case Brawl: + storage = FModel.getDecks().getBrawl(); + break; + case TinyLeaders: + storage = FModel.getDecks().getTinyLeaders(); + break; + case Oathbreaker: + storage = FModel.getDecks().getOathbreaker(); + break; + default: + storage = FModel.getDecks().getConstructed(); + break; + } + storage.add(copiedDeck); + setSelectedDeckType(fallbackType); + editDeck(new DeckProxy(copiedDeck, "Constructed", lstDecks.getGameType(), storage)); } - storage.add(copiedDeck); - setSelectedDeckType(fallbackType); - editDeck(new DeckProxy(copiedDeck, "Constructed", lstDecks.getGameType(), storage)); - } - } - }); + }); break; } } diff --git a/forge-gui-mobile/src/forge/deck/FDeckEditor.java b/forge-gui-mobile/src/forge/deck/FDeckEditor.java index 620a564b510..69f5a2e1728 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckEditor.java +++ b/forge-gui-mobile/src/forge/deck/FDeckEditor.java @@ -892,7 +892,7 @@ public class FDeckEditor extends TabPageScreen { saveHandler = saveHandler0; } - public void save(final Callback callback) { + public void save(final Consumer callback) { IDeckController deckController = getDeckController(); if(deckController.supportsSave()) { if (!StringUtils.isEmpty(deck.getName())) { @@ -907,7 +907,7 @@ public class FDeckEditor extends TabPageScreen { deckController.saveAs(result); if (callback != null) { - callback.run(true); + callback.accept(true); } }); }); @@ -916,7 +916,7 @@ public class FDeckEditor extends TabPageScreen { } if (callback != null) { - callback.run(true); + callback.accept(true); } } @@ -948,7 +948,7 @@ public class FDeckEditor extends TabPageScreen { ); @Override - public void onClose(final Callback canCloseCallback) { + public void onClose(final Consumer canCloseCallback) { if (getDeckController().isSaved() || !allowSave() || canCloseCallback == null) { super.onClose(canCloseCallback); //can skip prompt if draft saved return; @@ -959,9 +959,9 @@ public class FDeckEditor extends TabPageScreen { save(canCloseCallback); } else if (result == 1) { getDeckController().exitWithoutSaving(); //reload if not saving changes - canCloseCallback.run(true); + canCloseCallback.accept(true); } else { - canCloseCallback.run(false); + canCloseCallback.accept(false); } }); } @@ -1318,7 +1318,7 @@ public class FDeckEditor extends TabPageScreen { protected abstract void onCardActivated(PaperCard card); protected abstract void buildMenu(final FDropDownMenu menu, final PaperCard card); - protected void addMoveCardMenuItem(FDropDownMenu menu, CardManagerPage source, CardManagerPage destination, final Callback callback) { + protected void addMoveCardMenuItem(FDropDownMenu menu, CardManagerPage source, CardManagerPage destination, final Consumer callback) { //Determine how many we can actually move. ItemPool selectedItemPool = parentScreen.getAllowedAdditions(cardManager.getSelectedItemPool(), source, destination); @@ -1381,7 +1381,7 @@ public class FDeckEditor extends TabPageScreen { final int max = maxMovable; menu.addItem(new FMenuItem(label, icon, (e) -> { if(max < 2) - callback.run(1); + callback.accept(1); else GuiChoose.getInteger(prompt, 1, max, 20, callback); })); @@ -1403,7 +1403,7 @@ public class FDeckEditor extends TabPageScreen { this.addMoveCardMenuItem(menu, source, destination, new MoveCardCallback(card, source, destination)); } - protected static class MoveCardCallback implements Callback { + protected static class MoveCardCallback implements Consumer { public final PaperCard card; public final CardManagerPage from; public final CardManagerPage to; @@ -1414,7 +1414,7 @@ public class FDeckEditor extends TabPageScreen { this.to = to; } @Override - public void run(Integer result) { + public void accept(Integer result) { if(result == null || result == 0) return; from.moveCard(card, to, result); diff --git a/forge-gui-mobile/src/forge/deck/FDeckImportDialog.java b/forge-gui-mobile/src/forge/deck/FDeckImportDialog.java index a9f4b564f19..9287adfcfa6 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckImportDialog.java +++ b/forge-gui-mobile/src/forge/deck/FDeckImportDialog.java @@ -19,6 +19,7 @@ package forge.deck; import java.util.ArrayList; import java.util.List; +import java.util.function.Consumer; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; @@ -35,11 +36,10 @@ import forge.toolbox.FComboBox; import forge.toolbox.FDialog; import forge.toolbox.FOptionPane; import forge.toolbox.FTextArea; -import forge.util.Callback; public class FDeckImportDialog extends FDialog { - private Callback callback; + private Consumer callback; private final FTextArea txtInput = add(new FTextArea(true)); private final FCheckBox newEditionCheck = add(new FCheckBox(Forge.getLocalizer().getMessage("lblImportLatestVersionCard"), false)); @@ -121,7 +121,7 @@ public class FDeckImportDialog extends FDialog { FThreads.invokeInEdtLater(() -> { hide(); if (callback != null) - callback.run(deck); + callback.accept(deck); }); })); initButton(1, Forge.getLocalizer().getMessage("lblCancel"), e -> hide()); @@ -165,7 +165,7 @@ public class FDeckImportDialog extends FDialog { yearDropdown.setEnabled(enabled); } - public void setCallback(Callback callback0){ + public void setCallback(Consumer callback0){ callback = callback0; } diff --git a/forge-gui-mobile/src/forge/deck/FSideboardDialog.java b/forge-gui-mobile/src/forge/deck/FSideboardDialog.java index 3b55023dc23..ea3c04ed42b 100644 --- a/forge-gui-mobile/src/forge/deck/FSideboardDialog.java +++ b/forge-gui-mobile/src/forge/deck/FSideboardDialog.java @@ -1,6 +1,7 @@ package forge.deck; import java.util.List; +import java.util.function.Consumer; import forge.Forge; import org.apache.commons.lang3.StringUtils; @@ -16,13 +17,12 @@ import forge.screens.FScreen; import forge.screens.TabPageScreen; import forge.toolbox.FDialog; import forge.toolbox.GuiChoose; -import forge.util.Callback; public class FSideboardDialog extends FDialog { private final SideboardTabs tabs; - private final Callback> callback; + private final Consumer> callback; - public FSideboardDialog(CardPool sideboard, CardPool main, final Callback> callback0, String message) { + public FSideboardDialog(CardPool sideboard, CardPool main, final Consumer> callback0, String message) { super(String.format(Forge.getLocalizer().getMessage("lblUpdateMainFromSideboard"), message), 1); callback = callback0; @@ -37,7 +37,7 @@ public class FSideboardDialog extends FDialog { public void setVisible(boolean visible0) { super.setVisible(visible0); if (!visible0) { //do callback when hidden to ensure you don't get stuck if Back pressed - callback.run(tabs.getMainDeckPage().cardManager.getPool().toFlatList()); + callback.accept(tabs.getMainDeckPage().cardManager.getPool().toFlatList()); } } @@ -104,7 +104,7 @@ public class FSideboardDialog extends FDialog { updateCaption(); } - protected void addItem(FDropDownMenu menu, final String verb, String dest, FImage icon, final Callback callback) { + protected void addItem(FDropDownMenu menu, final String verb, String dest, FImage icon, final Consumer callback) { String label = verb; if (!StringUtils.isEmpty(dest)) { label += " " + dest; @@ -113,7 +113,7 @@ public class FSideboardDialog extends FDialog { PaperCard card = cardManager.getSelectedItem(); int max = cardManager.getItemCount(card); if (max == 1) { - callback.run(max); + callback.accept(max); } else { GuiChoose.getInteger(card + " - " + verb + " " + Forge.getLocalizer().getMessage("lblHowMany"), 1, max, 20, callback); diff --git a/forge-gui-mobile/src/forge/error/BugReportDialog.java b/forge-gui-mobile/src/forge/error/BugReportDialog.java index 9e8cf14ace1..6dc0f2667d1 100644 --- a/forge-gui-mobile/src/forge/error/BugReportDialog.java +++ b/forge-gui-mobile/src/forge/error/BugReportDialog.java @@ -12,10 +12,11 @@ import forge.screens.FScreen; import forge.toolbox.FButton; import forge.toolbox.FScrollPane; import forge.toolbox.FTextArea; -import forge.util.Callback; import forge.util.TextBounds; import forge.util.Utils; +import java.util.function.Consumer; + public class BugReportDialog extends FScreen { //use screen rather than dialog so screen with bug isn't rendered private static final float PADDING = Utils.scale(5); private static final float BUTTON_HEIGHT = Utils.AVG_FINGER_HEIGHT * 0.75f; @@ -59,7 +60,7 @@ public class BugReportDialog extends FScreen { //use screen rather than dialog s } @Override - public void onClose(Callback canCloseCallback) { + public void onClose(Consumer canCloseCallback) { super.onClose(canCloseCallback); isOpen = false; } diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/AdvancedSearchFilter.java b/forge-gui-mobile/src/forge/itemmanager/filters/AdvancedSearchFilter.java index 7ed493e4ed7..08f391bac7a 100644 --- a/forge-gui-mobile/src/forge/itemmanager/filters/AdvancedSearchFilter.java +++ b/forge-gui-mobile/src/forge/itemmanager/filters/AdvancedSearchFilter.java @@ -24,8 +24,8 @@ import forge.toolbox.FLabel; import forge.toolbox.FList; import forge.toolbox.FScrollPane; import forge.toolbox.FTextField; -import forge.util.Callback; +import java.util.function.Consumer; import java.util.function.Predicate; @@ -211,7 +211,7 @@ public class AdvancedSearchFilter extends ItemFilter } @Override - public void onClose(Callback canCloseCallback) { + public void onClose(Consumer canCloseCallback) { onFilterChange.run(); super.onClose(canCloseCallback); } diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/ArchivedFormatSelect.java b/forge-gui-mobile/src/forge/itemmanager/filters/ArchivedFormatSelect.java index cb3d1d6ec26..596a7b91a64 100644 --- a/forge-gui-mobile/src/forge/itemmanager/filters/ArchivedFormatSelect.java +++ b/forge-gui-mobile/src/forge/itemmanager/filters/ArchivedFormatSelect.java @@ -3,6 +3,7 @@ package forge.itemmanager.filters; import java.util.Arrays; import java.util.HashSet; import java.util.Set; +import java.util.function.Consumer; import com.badlogic.gdx.utils.Align; @@ -16,7 +17,6 @@ import forge.screens.FScreen; import forge.screens.settings.SettingsScreen; import forge.toolbox.FGroupList; import forge.toolbox.FList; -import forge.util.Callback; import forge.util.Utils; /** @@ -95,7 +95,7 @@ public class ArchivedFormatSelect extends FScreen { } @Override - public void onClose(Callback canCloseCallback) { + public void onClose(Consumer canCloseCallback) { if (selectedFormat != null) { if (onCloseCallBack != null) { onCloseCallBack.run(); diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/FormatFilter.java b/forge-gui-mobile/src/forge/itemmanager/filters/FormatFilter.java index fdc85a1b652..f8479733c9a 100644 --- a/forge-gui-mobile/src/forge/itemmanager/filters/FormatFilter.java +++ b/forge-gui-mobile/src/forge/itemmanager/filters/FormatFilter.java @@ -5,6 +5,7 @@ import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.function.Consumer; import com.badlogic.gdx.utils.Align; @@ -24,7 +25,6 @@ import forge.toolbox.FComboBox; import forge.toolbox.FDisplayObject; import forge.toolbox.FGroupList; import forge.toolbox.FList; -import forge.util.Callback; import forge.util.TextUtil; import forge.util.Utils; @@ -199,7 +199,7 @@ public abstract class FormatFilter extends ItemFilter canCloseCallback) { + public void onClose(Consumer canCloseCallback) { if (selectedSets.size() > 0) { List setCodes = new ArrayList<>(); List sortedSets = new ArrayList<>(selectedSets); diff --git a/forge-gui-mobile/src/forge/screens/FScreen.java b/forge-gui-mobile/src/forge/screens/FScreen.java index b28586b1124..16ab256fcd0 100644 --- a/forge-gui-mobile/src/forge/screens/FScreen.java +++ b/forge-gui-mobile/src/forge/screens/FScreen.java @@ -1,6 +1,7 @@ package forge.screens; import java.util.List; +import java.util.function.Consumer; import com.badlogic.gdx.Input.Keys; import com.badlogic.gdx.graphics.Color; @@ -23,7 +24,6 @@ import forge.toolbox.FDisplayObject; import forge.toolbox.FEvent; import forge.toolbox.FEvent.FEventHandler; import forge.toolbox.FLabel; -import forge.util.Callback; import forge.util.Utils; public abstract class FScreen extends FContainer { @@ -66,13 +66,13 @@ public abstract class FScreen extends FContainer { Forge.startContinuousRendering(); } - public void onSwitchAway(Callback canSwitchCallback) { - canSwitchCallback.run(true); + public void onSwitchAway(Consumer canSwitchCallback) { + canSwitchCallback.accept(true); } - public void onClose(Callback canCloseCallback) { + public void onClose(Consumer canCloseCallback) { if (canCloseCallback != null) { //will be null if app exited - canCloseCallback.run(true); + canCloseCallback.accept(true); } } diff --git a/forge-gui-mobile/src/forge/screens/constructed/AvatarSelector.java b/forge-gui-mobile/src/forge/screens/constructed/AvatarSelector.java index d7aca56fd97..a68ad339324 100644 --- a/forge-gui-mobile/src/forge/screens/constructed/AvatarSelector.java +++ b/forge-gui-mobile/src/forge/screens/constructed/AvatarSelector.java @@ -2,6 +2,7 @@ package forge.screens.constructed; import java.util.List; import java.util.Map; +import java.util.function.Consumer; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.utils.Align; @@ -15,7 +16,6 @@ import forge.screens.FScreen; import forge.toolbox.FDisplayObject; import forge.toolbox.FLabel; import forge.toolbox.FScrollPane; -import forge.util.Callback; import forge.util.MyRandom; import forge.util.Utils; @@ -28,7 +28,7 @@ public class AvatarSelector extends FScreen { return random; } - public static void show(final String playerName, final int currentIndex0, final List usedAvatars0, final Callback callback0) { + public static void show(final String playerName, final int currentIndex0, final List usedAvatars0, final Consumer callback0) { AvatarSelector selector = new AvatarSelector(playerName, currentIndex0, usedAvatars0, callback0); Forge.openScreen(selector); } @@ -38,7 +38,7 @@ public class AvatarSelector extends FScreen { private final int currentIndex; private final List usedAvatars; - private final Callback callback; + private final Consumer callback; private final FScrollPane scroller = new FScrollPane() { @Override protected ScrollBounds layoutAndGetScrollBounds(float visibleWidth, float visibleHeight) { @@ -60,7 +60,7 @@ public class AvatarSelector extends FScreen { } }; - private AvatarSelector(final String playerName, final int currentIndex0, final List usedAvatars0, final Callback callback0) { + private AvatarSelector(final String playerName, final int currentIndex0, final List usedAvatars0, final Consumer callback0) { super(Forge.getLocalizer().getMessage("lblSelectAvatarFor").replace("%s",playerName)); currentIndex = currentIndex0; @@ -91,13 +91,13 @@ public class AvatarSelector extends FScreen { if (index == -1) { lbl.setCommand(e -> { - callback.run(getRandomAvatar(usedAvatars)); + callback.accept(getRandomAvatar(usedAvatars)); Forge.back(); }); } else { lbl.setCommand(e -> { - callback.run(index); + callback.accept(index); Forge.back(); }); } diff --git a/forge-gui-mobile/src/forge/screens/constructed/PlayerPanel.java b/forge-gui-mobile/src/forge/screens/constructed/PlayerPanel.java index c71ddd6d5d4..67aa9d77944 100644 --- a/forge-gui-mobile/src/forge/screens/constructed/PlayerPanel.java +++ b/forge-gui-mobile/src/forge/screens/constructed/PlayerPanel.java @@ -3,6 +3,7 @@ package forge.screens.constructed; import java.util.Collections; import java.util.List; import java.util.Set; +import java.util.function.Consumer; import forge.gamemodes.net.event.UpdateLobbyPlayerEvent; import org.apache.commons.lang3.StringUtils; @@ -41,7 +42,6 @@ import forge.toolbox.FList; import forge.toolbox.FOptionPane; import forge.toolbox.FTextField; import forge.toolbox.FToggleSwitch; -import forge.util.Callback; import forge.util.Lang; import forge.util.NameGenerator; import forge.util.TextUtil; @@ -1054,22 +1054,22 @@ public class PlayerPanel extends FContainer { return new FLabel.Builder().text(title).font(LABEL_FONT).align(Align.right).build(); } - private static final ImmutableList genderOptions = ImmutableList.of(Forge.getLocalizer().getInstance().getMessage("lblMale"), Forge.getLocalizer().getInstance().getMessage("lblFemale"), Forge.getLocalizer().getInstance().getMessage("lblAny")); - private static final ImmutableList typeOptions = ImmutableList.of(Forge.getLocalizer().getInstance().getMessage("lblFantasy"), Forge.getLocalizer().getInstance().getMessage("lblGeneric"), Forge.getLocalizer().getInstance().getMessage("lblAny")); - private void getNewName(final Callback callback) { + private static final ImmutableList genderOptions = ImmutableList.of(Forge.getLocalizer().getMessage("lblMale"), Forge.getLocalizer().getMessage("lblFemale"), Forge.getLocalizer().getMessage("lblAny")); + private static final ImmutableList typeOptions = ImmutableList.of(Forge.getLocalizer().getMessage("lblFantasy"), Forge.getLocalizer().getMessage("lblGeneric"), Forge.getLocalizer().getMessage("lblAny")); + private void getNewName(final Consumer callback) { final String title = Forge.getLocalizer().getMessage("lblGetNewRandomName"); final String message = Forge.getLocalizer().getMessage("lbltypeofName"); final FSkinImage icon = FOptionPane.QUESTION_ICON; FOptionPane.showOptionDialog(message, title, icon, genderOptions, 2, genderIndex -> { if (genderIndex == null || genderIndex < 0) { - callback.run(null); + callback.accept(null); return; } FOptionPane.showOptionDialog(message, title, icon, typeOptions, 2, typeIndex -> { if (typeIndex == null || typeIndex < 0) { - callback.run(null); + callback.accept(null); return; } @@ -1078,12 +1078,12 @@ public class PlayerPanel extends FContainer { }); } - private void generateRandomName(final String gender, final String type, final List usedNames, final String title, final Callback callback) { + private void generateRandomName(final String gender, final String type, final List usedNames, final String title, final Consumer callback) { final String newName = NameGenerator.getRandomName(gender, type, usedNames); String confirmMsg = Forge.getLocalizer().getMessage("lblconfirmName").replace("%s", newName); FOptionPane.showConfirmDialog(confirmMsg, title, Forge.getLocalizer().getMessage("lblUseThisName"), Forge.getLocalizer().getMessage("lblTryAgain"), true, result -> { if (result) { - callback.run(newName); + callback.accept(newName); } else { generateRandomName(gender, type, usedNames, title, callback); diff --git a/forge-gui-mobile/src/forge/screens/constructed/SleevesSelector.java b/forge-gui-mobile/src/forge/screens/constructed/SleevesSelector.java index 5cfb8bbc95e..e957529da34 100644 --- a/forge-gui-mobile/src/forge/screens/constructed/SleevesSelector.java +++ b/forge-gui-mobile/src/forge/screens/constructed/SleevesSelector.java @@ -2,6 +2,7 @@ package forge.screens.constructed; import java.util.List; import java.util.Map; +import java.util.function.Consumer; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.utils.Align; @@ -15,7 +16,6 @@ import forge.screens.FScreen; import forge.toolbox.FDisplayObject; import forge.toolbox.FLabel; import forge.toolbox.FScrollPane; -import forge.util.Callback; import forge.util.MyRandom; import forge.util.Utils; @@ -28,7 +28,7 @@ public class SleevesSelector extends FScreen { return random; } - public static void show(final String playerName, final int currentIndex0, final List usedSleeves0, final Callback callback0) { + public static void show(final String playerName, final int currentIndex0, final List usedSleeves0, final Consumer callback0) { SleevesSelector selector = new SleevesSelector(playerName, currentIndex0, usedSleeves0, callback0); Forge.openScreen(selector); } @@ -38,7 +38,7 @@ public class SleevesSelector extends FScreen { private final int currentIndex; private final List usedSleeves; - private final Callback callback; + private final Consumer callback; private final FScrollPane scroller = new FScrollPane() { @Override protected ScrollBounds layoutAndGetScrollBounds(float visibleWidth, float visibleHeight) { @@ -60,7 +60,7 @@ public class SleevesSelector extends FScreen { } }; - private SleevesSelector(final String playerName, final int currentIndex0, final List usedSleeves0, final Callback callback0) { + private SleevesSelector(final String playerName, final int currentIndex0, final List usedSleeves0, final Consumer callback0) { super(Forge.getLocalizer().getMessage("lblSelectSleevesFroPlayer", playerName)); currentIndex = currentIndex0; @@ -91,13 +91,13 @@ public class SleevesSelector extends FScreen { if (index == -1) { lbl.setCommand(e -> { - callback.run(getRandomSleeves(usedSleeves)); + callback.accept(getRandomSleeves(usedSleeves)); Forge.back(); }); } else { lbl.setCommand(e -> { - callback.run(index); + callback.accept(index); Forge.back(); }); } diff --git a/forge-gui-mobile/src/forge/screens/home/AdventureScreen.java b/forge-gui-mobile/src/forge/screens/home/AdventureScreen.java index 9e7f7bbd770..16b6c64bfd0 100644 --- a/forge-gui-mobile/src/forge/screens/home/AdventureScreen.java +++ b/forge-gui-mobile/src/forge/screens/home/AdventureScreen.java @@ -9,9 +9,10 @@ import forge.localinstance.properties.ForgeConstants; import forge.screens.LaunchScreen; import forge.toolbox.FLabel; import forge.toolbox.FTextArea; -import forge.util.Callback; import forge.util.Utils; +import java.util.function.Consumer; + public class AdventureScreen extends LaunchScreen { private static final float PADDING = Utils.scale(10); private boolean loaded = false; @@ -46,7 +47,7 @@ public class AdventureScreen extends LaunchScreen { } @Override - public void onSwitchAway(Callback canSwitchCallback) { + public void onSwitchAway(Consumer canSwitchCallback) { if (animation != null) { animation.stop(); } diff --git a/forge-gui-mobile/src/forge/screens/home/HomeScreen.java b/forge-gui-mobile/src/forge/screens/home/HomeScreen.java index 3177ef541c2..4fcd3a21f4f 100644 --- a/forge-gui-mobile/src/forge/screens/home/HomeScreen.java +++ b/forge-gui-mobile/src/forge/screens/home/HomeScreen.java @@ -28,7 +28,6 @@ import forge.toolbox.FEvent.FEventHandler; import forge.toolbox.FLabel; import forge.toolbox.FOptionPane; import forge.toolbox.FScrollPane; -import forge.util.Callback; import forge.util.Utils; public class HomeScreen extends FScreen { @@ -115,19 +114,16 @@ public class HomeScreen extends FScreen { addButton(Forge.getLocalizer().getMessage("lblHelp"), e -> FThreads.invokeInEdtLater(() -> { try { if (Forge.getDeviceAdapter().isConnectedToInternet()) { - FOptionPane.showOptionDialog("Join Discord option will open the invite link to join Forge Discord server. Forge Support option will open the Forge Support Channel.", "Choose option", FOptionPane.INFORMATION_ICON, ImmutableList.of("Join Discord", "Forge Support"), -1, new Callback() { - @Override - public void run(Integer result) { - switch (result) { - case 0: - Gdx.net.openURI("https://discord.gg/3v9JCVr"); - break; - case 1: - Gdx.net.openURI("https://discord.com/channels/267367946135928833/692000787856883752"); - break; - default: - break; - } + FOptionPane.showOptionDialog("Join Discord option will open the invite link to join Forge Discord server. Forge Support option will open the Forge Support Channel.", "Choose option", FOptionPane.INFORMATION_ICON, ImmutableList.of("Join Discord", "Forge Support"), -1, result -> { + switch (result) { + case 0: + Gdx.net.openURI("https://discord.gg/3v9JCVr"); + break; + case 1: + Gdx.net.openURI("https://discord.com/channels/267367946135928833/692000787856883752"); + break; + default: + break; } }); } else { diff --git a/forge-gui-mobile/src/forge/screens/limited/DraftingProcessScreen.java b/forge-gui-mobile/src/forge/screens/limited/DraftingProcessScreen.java index a36f540ce12..33d608fdeb8 100644 --- a/forge-gui-mobile/src/forge/screens/limited/DraftingProcessScreen.java +++ b/forge-gui-mobile/src/forge/screens/limited/DraftingProcessScreen.java @@ -14,7 +14,8 @@ import forge.gui.FThreads; import forge.model.FModel; import forge.screens.home.LoadGameMenu.LoadGameScreen; import forge.toolbox.FOptionPane; -import forge.util.Callback; + +import java.util.function.Consumer; public class DraftingProcessScreen extends FDeckEditor { private boolean isDraftSaved; @@ -54,7 +55,7 @@ public class DraftingProcessScreen extends FDeckEditor { } @Override - public void save(final Callback callback) { + public void save(final Consumer callback) { if (isDraftSaved) { //if draft itself is saved, let base class handle saving deck changes super.save(callback); return; @@ -63,7 +64,7 @@ public class DraftingProcessScreen extends FDeckEditor { if (isQuestDraft()) { finishSave(QuestEventDraft.DECK_NAME); if (callback != null) { - callback.run(true); + callback.accept(true); } return; } @@ -84,7 +85,7 @@ public class DraftingProcessScreen extends FDeckEditor { if (result) { finishSave(name); if (callback != null) { - callback.run(true); + callback.accept(true); } } else { save(callback); //If no overwrite, recurse @@ -96,7 +97,7 @@ public class DraftingProcessScreen extends FDeckEditor { finishSave(name); if (callback != null) { - callback.run(true); + callback.accept(true); } }); }); @@ -131,7 +132,7 @@ public class DraftingProcessScreen extends FDeckEditor { } @Override - public void onClose(final Callback canCloseCallback) { + public void onClose(final Consumer canCloseCallback) { if (isDraftSaved || canCloseCallback == null) { super.onClose(canCloseCallback); //can skip prompt if draft saved return; @@ -140,7 +141,7 @@ public class DraftingProcessScreen extends FDeckEditor { if (isQuestDraft()) { FThreads.invokeInBackgroundThread(() -> { if (questDraftController.cancelDraft()) { - FThreads.invokeInEdtLater(() -> canCloseCallback.run(true)); + FThreads.invokeInEdtLater(() -> canCloseCallback.accept(true)); } }); return; diff --git a/forge-gui-mobile/src/forge/screens/match/MatchScreen.java b/forge-gui-mobile/src/forge/screens/match/MatchScreen.java index 80ac6e9f8a1..00d6b7648be 100644 --- a/forge-gui-mobile/src/forge/screens/match/MatchScreen.java +++ b/forge-gui-mobile/src/forge/screens/match/MatchScreen.java @@ -5,6 +5,7 @@ import static forge.Forge.getLocalizer; import forge.toolbox.FOptionPane; import java.util.*; import java.util.Map.Entry; +import java.util.function.Consumer; import com.badlogic.gdx.math.Vector2; import forge.adventure.scene.GameScene; @@ -67,7 +68,6 @@ import forge.sound.MusicPlaylist; import forge.sound.SoundSystem; import forge.toolbox.FCardPanel; import forge.toolbox.FScrollPane; -import forge.util.Callback; public class MatchScreen extends FScreen { public static FSkinColor getBorderColor() { @@ -314,7 +314,7 @@ public class MatchScreen extends FScreen { } @Override - public void onClose(Callback canCloseCallback) { + public void onClose(Consumer canCloseCallback) { MatchController.writeMatchPreferences(); SoundSystem.instance.setBackgroundMusic(MusicPlaylist.MENUS); super.onClose(canCloseCallback); @@ -1188,7 +1188,7 @@ public class MatchScreen extends FScreen { } private void confirmUserConcedes() { - final Callback callback = result -> { + final Consumer callback = result -> { if (result) { getGameController().concede(); } diff --git a/forge-gui-mobile/src/forge/screens/match/views/VAssignCombatDamage.java b/forge-gui-mobile/src/forge/screens/match/views/VAssignCombatDamage.java index fb784fd4127..8d7cb41c3cb 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VAssignCombatDamage.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VAssignCombatDamage.java @@ -21,6 +21,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.function.Consumer; import com.badlogic.gdx.utils.Align; @@ -44,7 +45,6 @@ import forge.toolbox.FDisplayObject; import forge.toolbox.FLabel; import forge.toolbox.FOptionPane; import forge.toolbox.FScrollPane; -import forge.util.Callback; import forge.util.CardTranslation; import forge.util.TextUtil; import forge.util.Utils; @@ -54,7 +54,7 @@ public class VAssignCombatDamage extends FDialog { private static final float CARD_GAP_X = Utils.scale(10); private static final float ADD_BTN_HEIGHT = Utils.AVG_FINGER_HEIGHT * 0.75f; - private final Callback> callback; + private final Consumer> callback; private final int totalDamageToAssign; private boolean attackerHasDeathtouch = false; @@ -421,7 +421,7 @@ public class VAssignCombatDamage extends FDialog { return; } hide(); - callback.run(getDamageMap()); + callback.accept(getDamageMap()); } private int getDamageToKill(CardView source) { diff --git a/forge-gui-mobile/src/forge/screens/match/views/VAssignGenericAmount.java b/forge-gui-mobile/src/forge/screens/match/views/VAssignGenericAmount.java index 9fc02058b6a..bd0d7946e1b 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VAssignGenericAmount.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VAssignGenericAmount.java @@ -21,6 +21,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.function.Consumer; import com.badlogic.gdx.utils.Align; @@ -45,7 +46,6 @@ import forge.toolbox.FDisplayObject; import forge.toolbox.FLabel; import forge.toolbox.FOptionPane; import forge.toolbox.FScrollPane; -import forge.util.Callback; import forge.util.CardTranslation; import forge.util.TextUtil; import forge.util.Utils; @@ -55,7 +55,7 @@ public class VAssignGenericAmount extends FDialog { private static final float CARD_GAP_X = Utils.scale(10); private static final float ADD_BTN_HEIGHT = Utils.AVG_FINGER_HEIGHT * 0.75f; - private final Callback> callback; + private final Consumer> callback; private final int totalAmountToAssign; private final String lblAmount; @@ -360,7 +360,7 @@ public class VAssignGenericAmount extends FDialog { return; } hide(); - callback.run(getAssignedMap()); + callback.accept(getAssignedMap()); } public Map getAssignedMap() { diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestChaosWheel.java b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestChaosWheel.java index c24ac7370d4..cbe80952a7b 100644 --- a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestChaosWheel.java +++ b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestChaosWheel.java @@ -11,19 +11,20 @@ import forge.gamemodes.planarconquest.ConquestEvent.ChaosWheelOutcome; import forge.toolbox.FOptionPane; import forge.toolbox.FOverlay; import forge.util.Aggregates; -import forge.util.Callback; import forge.util.PhysicsObject; +import java.util.function.Consumer; + public class ConquestChaosWheel extends FOverlay { - public static void spin(Callback callback0) { + public static void spin(Consumer callback0) { ConquestChaosWheel wheel = new ConquestChaosWheel(callback0); wheel.show(); } private final WheelSpinAnimation animation = new WheelSpinAnimation(); - private final Callback callback; + private final Consumer callback; - private ConquestChaosWheel(Callback callback0) { + private ConquestChaosWheel(Consumer callback0) { callback = callback0; } @@ -97,7 +98,7 @@ public class ConquestChaosWheel extends FOverlay { @Override protected void onEnd(boolean endingAll) { hide(); - callback.run(ChaosWheelOutcome.getWheelOutcome(getWheelRotation())); + callback.accept(ChaosWheelOutcome.getWheelOutcome(getWheelRotation())); } } diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestCommandersScreen.java b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestCommandersScreen.java index 931de1a901c..3578dd88cd2 100644 --- a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestCommandersScreen.java +++ b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestCommandersScreen.java @@ -1,6 +1,7 @@ package forge.screens.planarconquest; import java.util.Map.Entry; +import java.util.function.Consumer; import java.util.function.Predicate; import com.badlogic.gdx.utils.Align; @@ -38,7 +39,6 @@ import forge.toolbox.FList; import forge.toolbox.FList.CompactModeHandler; import forge.toolbox.FOptionPane; import forge.toolbox.FTextField; -import forge.util.Callback; public class ConquestCommandersScreen extends FScreen { private static final float PADDING = FDeckChooser.PADDING; @@ -83,19 +83,19 @@ public class ConquestCommandersScreen extends FScreen { } @Override - public void onClose(final Callback canCloseCallback) { + public void onClose(final Consumer canCloseCallback) { if (canCloseCallback == null) { return; } final ConquestCommander commander = lstCommanders.getSelectedItem(); if (commander == null) { - canCloseCallback.run(true); //shouldn't happen, but don't block closing screen if no commanders + canCloseCallback.accept(true); //shouldn't happen, but don't block closing screen if no commanders return; } String problem = DeckFormat.PlanarConquest.getDeckConformanceProblem(commander.getDeck()); if (problem != null) { //prevent selecting a commander with an invalid deck - FOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblCantSelectDeckBecause", commander.getName(), problem), Forge.getLocalizer().getMessage("lblInvalidDeck"), FOptionPane.INFORMATION_ICON, result -> canCloseCallback.run(false)); + FOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblCantSelectDeckBecause", commander.getName(), problem), Forge.getLocalizer().getMessage("lblInvalidDeck"), FOptionPane.INFORMATION_ICON, result -> canCloseCallback.accept(false)); return; } @@ -104,7 +104,7 @@ public class ConquestCommandersScreen extends FScreen { model.setSelectedCommander(commander); model.saveData(); } - canCloseCallback.run(true); + canCloseCallback.accept(true); } private void refreshCommanders() { diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestPlaneswalkersScreen.java b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestPlaneswalkersScreen.java index 5ce19d9cc88..49b77076c3a 100644 --- a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestPlaneswalkersScreen.java +++ b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestPlaneswalkersScreen.java @@ -10,7 +10,8 @@ import forge.localinstance.achievements.PlaneswalkerAchievements; import forge.model.FModel; import forge.screens.FScreen; import forge.toolbox.FChoiceList; -import forge.util.Callback; + +import java.util.function.Consumer; public class ConquestPlaneswalkersScreen extends FScreen { private static final float PADDING = FDeckChooser.PADDING; @@ -39,12 +40,12 @@ public class ConquestPlaneswalkersScreen extends FScreen { } @Override - public void onClose(final Callback canCloseCallback) { + public void onClose(final Consumer canCloseCallback) { if (canCloseCallback == null) { return; } final PaperCard planeswalker = lstPlaneswalkers.getSelectedItem(); if (planeswalker == null) { - canCloseCallback.run(true); // Shouldn't happen, but don't block closing screen if no commanders + canCloseCallback.accept(true); // Shouldn't happen, but don't block closing screen if no commanders return; } @@ -53,7 +54,7 @@ public class ConquestPlaneswalkersScreen extends FScreen { model.setPlaneswalker(planeswalker); model.saveData(); } - canCloseCallback.run(true); + canCloseCallback.accept(true); } private void refreshPlaneswalkers() { diff --git a/forge-gui-mobile/src/forge/screens/quest/QuestSpellShopScreen.java b/forge-gui-mobile/src/forge/screens/quest/QuestSpellShopScreen.java index 7161c4427d8..0a0bb5f2284 100644 --- a/forge-gui-mobile/src/forge/screens/quest/QuestSpellShopScreen.java +++ b/forge-gui-mobile/src/forge/screens/quest/QuestSpellShopScreen.java @@ -5,6 +5,7 @@ import java.text.NumberFormat; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; +import java.util.function.Consumer; import com.badlogic.gdx.utils.Align; @@ -32,7 +33,6 @@ import forge.toolbox.FDisplayObject; import forge.toolbox.FLabel; import forge.toolbox.FTextArea; import forge.toolbox.GuiChoose; -import forge.util.Callback; import forge.util.ItemPool; import forge.util.Utils; @@ -80,7 +80,7 @@ public class QuestSpellShopScreen extends TabPageScreen { return true; } - public void onClose(Callback canCloseCallback) { + public void onClose(Consumer canCloseCallback) { FModel.getQuest().save(); super.onClose(canCloseCallback); } @@ -205,7 +205,7 @@ public class QuestSpellShopScreen extends TabPageScreen { final int max = itemManager.getItemCount(item); if (max == 0) { return; } - final Callback callback = result -> { + final Consumer callback = result -> { if (result == null || result <= 0) { return; } //invoke in background thread so other dialogs can be shown properly @@ -217,7 +217,7 @@ public class QuestSpellShopScreen extends TabPageScreen { }); }; if (max == 1) { - callback.run(max); + callback.accept(max); } else { GuiChoose.getInteger(item + " - " + getVerb() + " " + Forge.getLocalizer().getMessage("lblHowMany"), 1, max, 20, callback); diff --git a/forge-gui-mobile/src/forge/screens/settings/FilesPage.java b/forge-gui-mobile/src/forge/screens/settings/FilesPage.java index e1e3a49b4e8..a2fcfe4fe40 100644 --- a/forge-gui-mobile/src/forge/screens/settings/FilesPage.java +++ b/forge-gui-mobile/src/forge/screens/settings/FilesPage.java @@ -36,7 +36,6 @@ import forge.toolbox.FGroupList; import forge.toolbox.FList; import forge.toolbox.FOptionPane; import forge.toolbox.GuiChoose; -import forge.util.Callback; import forge.util.FileUtil; import org.apache.commons.lang3.tuple.Pair; @@ -61,38 +60,35 @@ public class FilesPage extends TabPage { Forge.getDeviceAdapter().requestFileAcces(); return; } - FOptionPane.showOptionDialog(Forge.getLocalizer().getMessage("lblPlsSelectActions"), "", FOptionPane.QUESTION_ICON, ImmutableList.of(Forge.getLocalizer().getMessage("lblBackup"), Forge.getLocalizer().getMessage("lblRestore"), Forge.getLocalizer().getMessage("lblCancel")), 2, new Callback() { - @Override - public void run(Integer result) { - switch (result) { - case 0: - FThreads.invokeInEdtLater(() -> LoadingOverlay.show(Forge.getLocalizer().getMessage("lblBackupMsg"), true, () -> { - File source = new FileHandle(ForgeProfileProperties.getUserDir()).file(); - File target = new FileHandle(Forge.getDeviceAdapter().getDownloadsDir()).file(); - try { - ZipUtil.zip(source, target, ZipUtil.backupClsFile); - FOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblSuccess") + "\n" + target.getAbsolutePath() + File.separator + ZipUtil.backupClsFile, Forge.getLocalizer().getMessage("lblBackup"), FOptionPane.INFORMATION_ICON); - } catch (IOException e) { - FOptionPane.showMessageDialog(e.toString(), Forge.getLocalizer().getMessage("lblError"), FOptionPane.ERROR_ICON); - } - })); - break; - case 1: - FThreads.invokeInEdtLater(() -> LoadingOverlay.show(Forge.getLocalizer().getMessage("lblRestoreMsg"), true, () -> { - File source = new FileHandle(Forge.getDeviceAdapter().getDownloadsDir() + ZipUtil.backupClsFile).file(); - File target = new FileHandle(ForgeProfileProperties.getUserDir()).file().getParentFile(); - try { - String msg = ZipUtil.unzip(source, target); - FOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblSuccess") + "\n" + msg, Forge.getLocalizer().getMessage("lblRestore"), FOptionPane.INFORMATION_ICON); - } catch (IOException e) { - FOptionPane.showMessageDialog(e.toString(), Forge.getLocalizer().getMessage("lblError"), FOptionPane.ERROR_ICON); - } - })); - break; - default: - break; - } - } + FOptionPane.showOptionDialog(Forge.getLocalizer().getMessage("lblPlsSelectActions"), "", FOptionPane.QUESTION_ICON, ImmutableList.of(Forge.getLocalizer().getMessage("lblBackup"), Forge.getLocalizer().getMessage("lblRestore"), Forge.getLocalizer().getMessage("lblCancel")), 2, result -> { + switch (result) { + case 0: + FThreads.invokeInEdtLater(() -> LoadingOverlay.show(Forge.getLocalizer().getMessage("lblBackupMsg"), true, () -> { + File source = new FileHandle(ForgeProfileProperties.getUserDir()).file(); + File target = new FileHandle(Forge.getDeviceAdapter().getDownloadsDir()).file(); + try { + ZipUtil.zip(source, target, ZipUtil.backupClsFile); + FOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblSuccess") + "\n" + target.getAbsolutePath() + File.separator + ZipUtil.backupClsFile, Forge.getLocalizer().getMessage("lblBackup"), FOptionPane.INFORMATION_ICON); + } catch (IOException e) { + FOptionPane.showMessageDialog(e.toString(), Forge.getLocalizer().getMessage("lblError"), FOptionPane.ERROR_ICON); + } + })); + break; + case 1: + FThreads.invokeInEdtLater(() -> LoadingOverlay.show(Forge.getLocalizer().getMessage("lblRestoreMsg"), true, () -> { + File source = new FileHandle(Forge.getDeviceAdapter().getDownloadsDir() + ZipUtil.backupClsFile).file(); + File target = new FileHandle(ForgeProfileProperties.getUserDir()).file().getParentFile(); + try { + String msg = ZipUtil.unzip(source, target); + FOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblSuccess") + "\n" + msg, Forge.getLocalizer().getMessage("lblRestore"), FOptionPane.INFORMATION_ICON); + } catch (IOException e) { + FOptionPane.showMessageDialog(e.toString(), Forge.getLocalizer().getMessage("lblError"), FOptionPane.ERROR_ICON); + } + })); + break; + default: + break; + } }); } }, 0); @@ -107,16 +103,13 @@ public class FilesPage extends TabPage { Pair totalAudit = StaticData.instance().audit(nifSB, cniSB); String msg = nifSB.toString(); String title = "Missing images: " + totalAudit.getLeft() + "\nUnimplemented cards: " + totalAudit.getRight(); - FOptionPane.showOptionDialog(msg, title, FOptionPane.INFORMATION_ICON, ImmutableList.of(Forge.getLocalizer().getMessage("lblCopy"), Forge.getLocalizer().getMessage("lblClose")), -1, new Callback() { - @Override - public void run(Integer result) { - switch (result) { - case 0: - Forge.getClipboard().setContents(msg); - break; - default: - break; - } + FOptionPane.showOptionDialog(msg, title, FOptionPane.INFORMATION_ICON, ImmutableList.of(Forge.getLocalizer().getMessage("lblCopy"), Forge.getLocalizer().getMessage("lblClose")), -1, result -> { + switch (result) { + case 0: + Forge.getClipboard().setContents(msg); + break; + default: + break; } }); })); diff --git a/forge-gui-mobile/src/forge/screens/settings/GuiDownloader.java b/forge-gui-mobile/src/forge/screens/settings/GuiDownloader.java index af33caf3763..dbbccb30601 100644 --- a/forge-gui-mobile/src/forge/screens/settings/GuiDownloader.java +++ b/forge-gui-mobile/src/forge/screens/settings/GuiDownloader.java @@ -18,6 +18,7 @@ package forge.screens.settings; import java.net.Proxy; +import java.util.function.Consumer; import forge.Forge; import forge.gui.UiCommand; @@ -30,7 +31,6 @@ import forge.toolbox.FProgressBar; import forge.toolbox.FRadioButton; import forge.toolbox.FRadioButton.RadioButtonGroup; import forge.toolbox.FTextField; -import forge.util.Callback; import forge.util.Utils; public class GuiDownloader extends FDialog { @@ -58,12 +58,12 @@ public class GuiDownloader extends FDialog { }; private final GuiDownloadService service; - private final Callback callback; + private final Consumer callback; public GuiDownloader(final GuiDownloadService service0) { this(service0, null); } - public GuiDownloader(final GuiDownloadService service0, final Callback callback0) { + public GuiDownloader(final GuiDownloadService service0, final Consumer callback0) { super(service0.getTitle(), 2); service = service0; callback = callback0; diff --git a/forge-gui-mobile/src/forge/toolbox/DualListBox.java b/forge-gui-mobile/src/forge/toolbox/DualListBox.java index efa699d9de3..0128f439769 100644 --- a/forge-gui-mobile/src/forge/toolbox/DualListBox.java +++ b/forge-gui-mobile/src/forge/toolbox/DualListBox.java @@ -3,6 +3,7 @@ package forge.toolbox; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.function.Consumer; import com.badlogic.gdx.Input.Keys; import com.badlogic.gdx.utils.Align; @@ -10,7 +11,6 @@ import com.badlogic.gdx.utils.Align; import forge.Forge; import forge.toolbox.FEvent.FEventHandler; import forge.toolbox.FEvent.FEventType; -import forge.util.Callback; // An input box for handling the order of choices. // Left box has the original choices @@ -36,11 +36,11 @@ public class DualListBox extends FDialog { private final int targetRemainingSourcesMin; private final int targetRemainingSourcesMax; - public DualListBox(String title, int remainingSources, List sourceElements, List destElements, final Callback> callback) { + public DualListBox(String title, int remainingSources, List sourceElements, List destElements, final Consumer> callback) { this(title, remainingSources, remainingSources, sourceElements, destElements, callback); } - public DualListBox(String title, int remainingSourcesMin, int remainingSourcesMax, List sourceElements, List destElements, final Callback> callback) { + public DualListBox(String title, int remainingSourcesMin, int remainingSourcesMax, List sourceElements, List destElements, final Consumer> callback) { super(title, 2); targetRemainingSourcesMin = remainingSourcesMin; targetRemainingSourcesMax = remainingSourcesMax; @@ -101,7 +101,7 @@ public class DualListBox extends FDialog { final FEventHandler onAccept = e -> { hide(); - callback.run(destList.extractListData()); + callback.accept(destList.extractListData()); }; // Dual List Complete Buttons diff --git a/forge-gui-mobile/src/forge/toolbox/FFileChooser.java b/forge-gui-mobile/src/forge/toolbox/FFileChooser.java index 0c4521706c5..174ae9f7c42 100644 --- a/forge-gui-mobile/src/forge/toolbox/FFileChooser.java +++ b/forge-gui-mobile/src/forge/toolbox/FFileChooser.java @@ -2,6 +2,7 @@ package forge.toolbox; import java.io.File; import java.io.FilenameFilter; +import java.util.function.Consumer; import org.apache.commons.lang3.StringUtils; @@ -15,7 +16,6 @@ import forge.assets.FSkinFont; import forge.assets.FSkinImage; import forge.menu.FMenuItem; import forge.menu.FPopupMenu; -import forge.util.Callback; import forge.util.FileUtil; import forge.util.Utils; @@ -28,25 +28,25 @@ public class FFileChooser extends FDialog { GetDirectory } - public static void show(String title0, ChoiceType choiceType0, Callback callback0) { + public static void show(String title0, ChoiceType choiceType0, Consumer callback0) { show(title0, choiceType0, "", "", callback0); } - public static void show(String title0, ChoiceType choiceType0, String defaultFilename0, Callback callback0) { + public static void show(String title0, ChoiceType choiceType0, String defaultFilename0, Consumer callback0) { show(title0, choiceType0, defaultFilename0, "", callback0); } - public static void show(String title0, ChoiceType choiceType0, String defaultFilename0, String baseDir0, Callback callback0) { + public static void show(String title0, ChoiceType choiceType0, String defaultFilename0, String baseDir0, Consumer callback0) { FFileChooser dialog = new FFileChooser(title0, choiceType0, defaultFilename0, baseDir0, callback0); dialog.show(); } private final ChoiceType choiceType; private final String baseDir; - private final Callback callback; + private final Consumer callback; private final FList lstFiles = add(new FileList()); private final FTextField txtFilename = add(new FilenameField()); - private FFileChooser(String title0, ChoiceType choiceType0, String defaultFilename0, String baseDir0, Callback callback0) { + private FFileChooser(String title0, ChoiceType choiceType0, String defaultFilename0, String baseDir0, Consumer callback0) { super(title0, 3); choiceType = choiceType0; if (choiceType == ChoiceType.GetDirectory) { @@ -195,7 +195,7 @@ public class FFileChooser extends FDialog { if (returnDirectory) { filename += File.separator; //re-append separator if returning directory } - callback.run(filename); + callback.accept(filename); } private void back() { diff --git a/forge-gui-mobile/src/forge/toolbox/FOptionPane.java b/forge-gui-mobile/src/forge/toolbox/FOptionPane.java index 19cf6a8d9e8..433e5f931ff 100644 --- a/forge-gui-mobile/src/forge/toolbox/FOptionPane.java +++ b/forge-gui-mobile/src/forge/toolbox/FOptionPane.java @@ -1,6 +1,7 @@ package forge.toolbox; import java.util.List; +import java.util.function.Consumer; import org.apache.commons.lang3.StringUtils; @@ -21,7 +22,6 @@ import forge.card.CardZoom; import forge.game.card.CardView; import forge.localinstance.skin.FSkinProp; import forge.screens.match.views.VPrompt; -import forge.util.Callback; import forge.util.Utils; import forge.util.WaitCallback; @@ -61,40 +61,40 @@ public class FOptionPane extends FDialog { showOptionDialog(message, messageFont, title, icon, ImmutableList.of(Forge.getLocalizer().getMessage("lblOK")), 0, null); } - public static void showMessageDialog(final String message, final String title, final FImage icon, final Callback callback) { + public static void showMessageDialog(final String message, final String title, final FImage icon, final Consumer callback) { showOptionDialog(message, title, icon, ImmutableList.of(Forge.getLocalizer().getMessage("lblOK")), 0, callback); } - public static void showConfirmDialog(final String message, final Callback callback) { + public static void showConfirmDialog(final String message, final Consumer callback) { showConfirmDialog(message, "", callback); } - public static void showConfirmDialog(final String message, final String title, final Callback callback) { + public static void showConfirmDialog(final String message, final String title, final Consumer callback) { showConfirmDialog(message, title, Forge.getLocalizer().getMessage("lblYes"), Forge.getLocalizer().getMessage("lblNo"), true, callback); } - public static void showConfirmDialog(final String message, final String title, final boolean defaultYes, final Callback callback) { + public static void showConfirmDialog(final String message, final String title, final boolean defaultYes, final Consumer callback) { showConfirmDialog(message, title, Forge.getLocalizer().getMessage("lblYes"), Forge.getLocalizer().getMessage("lblNo"), defaultYes, callback); } - public static void showConfirmDialog(final String message, final String title, final String yesButtonText, final String noButtonText, final Callback callback) { + public static void showConfirmDialog(final String message, final String title, final String yesButtonText, final String noButtonText, final Consumer callback) { showConfirmDialog(message, title, yesButtonText, noButtonText, true, callback); } - public static void showConfirmDialog(final String message, final String title, final String yesButtonText, final String noButtonText, final boolean defaultYes, final Callback callback) { + public static void showConfirmDialog(final String message, final String title, final String yesButtonText, final String noButtonText, final boolean defaultYes, final Consumer callback) { final List options = ImmutableList.of(yesButtonText, noButtonText); - showOptionDialog(message, title, QUESTION_ICON, options, defaultYes ? 0 : 1, result -> callback.run(result == 0)); + showOptionDialog(message, title, QUESTION_ICON, options, defaultYes ? 0 : 1, result -> callback.accept(result == 0)); } - public static void showOptionDialog(final String message, final String title, final FImage icon, final List options, final Callback callback) { + public static void showOptionDialog(final String message, final String title, final FImage icon, final List options, final Consumer callback) { showOptionDialog(message, title, icon, options, 0, callback); } - public static void showOptionDialog(final String message, final String title, final FImage icon, final List options, final int defaultOption, final Callback callback) { + public static void showOptionDialog(final String message, final String title, final FImage icon, final List options, final int defaultOption, final Consumer callback) { showOptionDialog(message, null, title, icon, options, defaultOption, callback); } - public static void showOptionDialog(final String message, final FSkinFont messageFont, final String title, final FImage icon, final List options, final int defaultOption, final Callback callback) { + public static void showOptionDialog(final String message, final FSkinFont messageFont, final String title, final FImage icon, final List options, final int defaultOption, final Consumer callback) { final FOptionPane optionPane = new FOptionPane(message, messageFont, title, icon, null, options, defaultOption, callback); optionPane.show(); } @@ -108,7 +108,7 @@ public class FOptionPane extends FDialog { }.invokeAndWait(); } - public static void showCardOptionDialog(final CardView card, String message, String title, FImage icon, final List options, final int defaultOption, final Callback callback) { + public static void showCardOptionDialog(final CardView card, String message, String title, FImage icon, final List options, final int defaultOption, final Consumer callback) { final FDisplayObject cardDisplay; if (card != null) { cardDisplay = new FDisplayObject() { @@ -149,13 +149,13 @@ public class FOptionPane extends FDialog { optionPane.show(); } - public static void showInputDialog(final String title, final Callback callback) { + public static void showInputDialog(final String title, final Consumer callback) { showInputDialog(null, title, "", null, callback, false); } - public static void showInputDialog(final String title, final T initialInput, final Callback callback) { + public static void showInputDialog(final String title, final T initialInput, final Consumer callback) { showInputDialog(null, title, initialInput, null, callback, false); } - public static void showInputDialog(final String message, final String title, final T initialInput, final List inputOptions, final Callback callback, final boolean isNumeric) { + public static void showInputDialog(final String message, final String title, final T initialInput, final List inputOptions, final Consumer callback, final boolean isNumeric) { final FDisplayObject inputField; final FTextField txtInput; final FComboBox cbInput; @@ -187,12 +187,12 @@ public class FOptionPane extends FDialog { final FOptionPane optionPane = new FOptionPane(message, null, title, null, container, ImmutableList.of(Forge.getLocalizer().getMessage("lblOK"), Forge.getLocalizer().getMessage("lblCancel")), 0, result -> { if (result == 0) { if (txtInput != null) { - callback.run((T)txtInput.getText()); + callback.accept((T)txtInput.getText()); } else { - callback.run(cbInput.getSelectedItem()); + callback.accept(cbInput.getSelectedItem()); } } else { - callback.run(null); + callback.accept(null); } }) { @Override @@ -219,11 +219,11 @@ public class FOptionPane extends FDialog { private final FLabel lblIcon; private final FTextArea prompt; protected final FDisplayObject displayObj; - private final Callback callback; + private final Consumer callback; private final int defaultOption; private final boolean centerIcon; - public FOptionPane(final String message, final FSkinFont messageFont, final String title, final FImage icon, final FDisplayObject displayObj0, final List options, final int defaultOption0, final Callback callback0) { + public FOptionPane(final String message, final FSkinFont messageFont, final String title, final FImage icon, final FDisplayObject displayObj0, final List options, final int defaultOption0, final Consumer callback0) { super(title, options.size()); if (icon != null) { @@ -267,7 +267,7 @@ public class FOptionPane extends FDialog { public void setResult(final int option) { hide(); if (callback != null) { - callback.run(option); + callback.accept(option); } } diff --git a/forge-gui-mobile/src/forge/toolbox/GuiChoose.java b/forge-gui-mobile/src/forge/toolbox/GuiChoose.java index b196856fc30..12c7b2346f3 100644 --- a/forge-gui-mobile/src/forge/toolbox/GuiChoose.java +++ b/forge-gui-mobile/src/forge/toolbox/GuiChoose.java @@ -5,6 +5,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Comparator; import java.util.List; +import java.util.function.Consumer; import java.util.function.Function; import com.google.common.collect.Iterables; @@ -12,7 +13,6 @@ import forge.Forge; import org.apache.commons.lang3.StringUtils; import forge.game.card.CardView; -import forge.util.Callback; public class GuiChoose { @@ -30,20 +30,20 @@ public class GuiChoose { * getChoices. * @see #getChoices(String, int, int, Object...) */ - public static void oneOrNone(final String message, final T[] choices, final Callback callback) { + public static void oneOrNone(final String message, final T[] choices, final Consumer callback) { if ((choices == null) || (choices.length == 0)) { - callback.run(null); + callback.accept(null); return; } - getChoices(message, 0, 1, choices, result -> callback.run(result.isEmpty() ? null : result.get(0))); + getChoices(message, 0, 1, choices, result -> callback.accept(result.isEmpty() ? null : result.get(0))); } - public static void oneOrNone(final String message, final Collection choices, final Callback callback) { + public static void oneOrNone(final String message, final Collection choices, final Consumer callback) { if ((choices == null) || choices.isEmpty()) { - callback.run(null); + callback.accept(null); return; } - getChoices(message, 0, 1, choices, result -> callback.run(result.isEmpty() ? null : result.get(0))); + getChoices(message, 0, 1, choices, result -> callback.accept(result.isEmpty() ? null : result.get(0))); } // getChoiceOptional(String,T...) // returned Object will never be null @@ -60,39 +60,39 @@ public class GuiChoose { * a T object. * @return a T object. */ - public static void one(final String message, final T[] choices, final Callback callback) { + public static void one(final String message, final T[] choices, final Consumer callback) { if (choices == null || choices.length == 0) { - callback.run(null); + callback.accept(null); return; } if (choices.length == 1) { - callback.run(choices[0]); + callback.accept(choices[0]); return; } getChoices(message, 1, 1, choices, result -> { assert result.size() == 1; - callback.run(result.get(0)); + callback.accept(result.get(0)); }); } - public static void one(final String message, final Collection choices, final Callback callback) { + public static void one(final String message, final Collection choices, final Consumer callback) { if (choices == null || choices.isEmpty()) { - callback.run(null); + callback.accept(null); return; } if (choices.size() == 1) { - callback.run(Iterables.getFirst(choices, null)); + callback.accept(Iterables.getFirst(choices, null)); return; } getChoices(message, 1, 1, choices, result -> { assert result.size() == 1; - callback.run(result.get(0)); + callback.accept(result.get(0)); }); } - public static void noneOrMany(final String message, final Collection choices, final Callback> callback) { + public static void noneOrMany(final String message, final Collection choices, final Consumer> callback) { getChoices(message, 0, choices.size(), choices, null, null, callback); } @@ -110,15 +110,15 @@ public class GuiChoose { } // Get Integer in range - public static void getInteger(final String message, final Callback callback) { + public static void getInteger(final String message, final Consumer callback) { getInteger(message, 0, Integer.MAX_VALUE, callback); } - public static void getInteger(final String message, int min, final Callback callback) { + public static void getInteger(final String message, int min, final Consumer callback) { getInteger(message, min, Integer.MAX_VALUE, callback); } - public static void getInteger(final String message, int min, int max, final Callback callback) { + public static void getInteger(final String message, int min, int max, final Consumer callback) { if (max <= min) { //just return min if max <= min - callback.run(min); + callback.accept(min); return; } @@ -139,9 +139,9 @@ public class GuiChoose { } oneOrNone(message, choices, callback); } - public static void getInteger(final String message, final int min, final int max, final int cutoff, final Callback callback) { + public static void getInteger(final String message, final int min, final int max, final int cutoff, final Consumer callback) { if (max <= min || cutoff < min) { //just return min if max <= min or cutoff < min - callback.run(min); + callback.accept(min); return; } @@ -158,7 +158,7 @@ public class GuiChoose { oneOrNone(message, choices, choice -> { if (choice instanceof Integer || choice == null) { - callback.run((Integer)choice); + callback.accept((Integer)choice); return; } @@ -180,16 +180,16 @@ public class GuiChoose { }); } - private static void getNumberInput(final String prompt, final String message, final int min, final int max, final Callback callback) { + private static void getNumberInput(final String prompt, final String message, final int min, final int max, final Consumer callback) { FOptionPane.showInputDialog(prompt, message, result -> { if (result == null) { //that is 'cancel' - callback.run(null); + callback.accept(null); return; } if (StringUtils.isNumeric(result)) { int val = Integer.parseInt(result); if (val >= min && val <= max) { - callback.run(val); + callback.accept(val); return; } } @@ -200,18 +200,18 @@ public class GuiChoose { } // returned Object will never be null - public static void getChoices(final String message, final int min, final int max, final T[] choices, final Callback> callback) { + public static void getChoices(final String message, final int min, final int max, final T[] choices, final Consumer> callback) { getChoices(message, min, max, Arrays.asList(choices), null, null, callback); } - public static void getChoices(final String message, final int min, final int max, final Collection choices, final Callback> callback) { + public static void getChoices(final String message, final int min, final int max, final Collection choices, final Consumer> callback) { getChoices(message, min, max, choices, null, null, callback); } - public static void getChoices(final String message, final int min, final int max, final Collection choices, final Collection selected, final Function display, final Callback> callback) { + public static void getChoices(final String message, final int min, final int max, final Collection choices, final Collection selected, final Function display, final Consumer> callback) { if (choices == null || choices.isEmpty()) { if (min == 0) { - callback.run(new ArrayList<>()); + callback.accept(new ArrayList<>()); return; } throw new RuntimeException("choice required from empty list"); @@ -221,22 +221,22 @@ public class GuiChoose { c.show(selected, false); } - public static void many(final String title, final String topCaption, int cnt, final List sourceChoices, CardView referenceCard, final Callback> callback) { + public static void many(final String title, final String topCaption, int cnt, final List sourceChoices, CardView referenceCard, final Consumer> callback) { order(title, topCaption, cnt, cnt, sourceChoices, null, referenceCard, callback); } - public static void many(final String title, final String topCaption, int min, int max, final List sourceChoices, CardView referenceCard, final Callback> callback) { + public static void many(final String title, final String topCaption, int min, int max, final List sourceChoices, CardView referenceCard, final Consumer> callback) { int m1 = max >= 0 ? sourceChoices.size() - max : -1; int m2 = min >= 0 ? sourceChoices.size() - min : -1; order(title, topCaption, m1, m2, sourceChoices, null, referenceCard, callback); } - public static void order(final String title, final String top, final List sourceChoices, CardView referenceCard, final Callback> callback) { + public static void order(final String title, final String top, final List sourceChoices, CardView referenceCard, final Consumer> callback) { order(title, top, 0, 0, sourceChoices, null, referenceCard, callback); } public static void order(final String title, final String top, final int remainingObjectsMin, final int remainingObjectsMax, - final List sourceChoices, final List destChoices, final CardView referenceCard, final Callback> callback) { + final List sourceChoices, final List destChoices, final CardView referenceCard, final Consumer> callback) { // An input box for handling the order of choices. DualListBox dual = new DualListBox<>(title, remainingObjectsMin, remainingObjectsMax, sourceChoices, destChoices, callback); dual.setSecondColumnLabelText(top); @@ -244,61 +244,61 @@ public class GuiChoose { } // If comparer is NULL, T has to be comparable. Otherwise you'll get an exception from inside the Arrays.sort() routine - public static void sortedOneOrNone(final String message, final T[] choices, Comparator comparer, final Callback callback) { + public static void sortedOneOrNone(final String message, final T[] choices, Comparator comparer, final Consumer callback) { if ((choices == null) || (choices.length == 0)) { - callback.run(null); + callback.accept(null); return; } - sortedGetChoices(message, 0, 1, choices, comparer, result -> callback.run(result.isEmpty() ? null : result.get(0))); + sortedGetChoices(message, 0, 1, choices, comparer, result -> callback.accept(result.isEmpty() ? null : result.get(0))); } // If comparer is NULL, T has to be comparable. Otherwise you'll get an exception from inside the Arrays.sort() routine - public static void sortedOneOrNone(final String message, final List choices, Comparator comparer, final Callback callback) { + public static void sortedOneOrNone(final String message, final List choices, Comparator comparer, final Consumer callback) { if ((choices == null) || choices.isEmpty()) { - callback.run(null); + callback.accept(null); return; } - sortedGetChoices(message, 0, 1, choices, comparer, result -> callback.run(result.isEmpty() ? null : result.get(0))); + sortedGetChoices(message, 0, 1, choices, comparer, result -> callback.accept(result.isEmpty() ? null : result.get(0))); } // If comparer is NULL, T has to be comparable. Otherwise you'll get an exception from inside the Arrays.sort() routine - public static void sortedOne(final String message, final T[] choices, Comparator comparer, final Callback callback) { + public static void sortedOne(final String message, final T[] choices, Comparator comparer, final Consumer callback) { if ((choices == null) || (choices.length == 0)) { - callback.run(null); + callback.accept(null); return; } sortedGetChoices(message, 1, 1, choices, comparer, result -> { assert result.size() == 1; - callback.run(result.get(0)); + callback.accept(result.get(0)); }); } // If comparer is NULL, T has to be comparable. Otherwise you'll get an exception from inside the Arrays.sort() routine - public static void sortedOne(final String message, final List choices, Comparator comparer, final Callback callback) { + public static void sortedOne(final String message, final List choices, Comparator comparer, final Consumer callback) { if ((choices == null) || (choices.size() == 0)) { - callback.run(null); + callback.accept(null); return; } sortedGetChoices(message, 1, 1, choices, comparer, result -> { assert result.size() == 1; - callback.run(result.get(0)); + callback.accept(result.get(0)); }); } // If comparer is NULL, T has to be comparable. Otherwise you'll get an exception from inside the Arrays.sort() routine - public static void sortedNoneOrMany(final String message, final List choices, Comparator comparer, final Callback> callback) { + public static void sortedNoneOrMany(final String message, final List choices, Comparator comparer, final Consumer> callback) { sortedGetChoices(message, 0, choices.size(), choices, comparer, callback); } // If comparer is NULL, T has to be comparable. Otherwise you'll get an exception from inside the Arrays.sort() routine - public static void sortedGetChoices(final String message, final int min, final int max, final T[] choices, Comparator comparer, final Callback> callback) { + public static void sortedGetChoices(final String message, final int min, final int max, final T[] choices, Comparator comparer, final Consumer> callback) { // You may create a copy of source array if callers expect the collection to be unchanged Arrays.sort(choices, comparer); getChoices(message, min, max, choices, callback); } // If comparer is NULL, T has to be comparable. Otherwise you'll get an exception from inside the Arrays.sort() routine - public static void sortedGetChoices(final String message, final int min, final int max, final List choices, Comparator comparer, final Callback> callback) { + public static void sortedGetChoices(final String message, final int min, final int max, final List choices, Comparator comparer, final Consumer> callback) { // You may create a copy of source list if callers expect the collection to be unchanged choices.sort(comparer); getChoices(message, min, max, choices, callback); diff --git a/forge-gui-mobile/src/forge/toolbox/GuiDialog.java b/forge-gui-mobile/src/forge/toolbox/GuiDialog.java index 6363ede340e..1fe5d810933 100644 --- a/forge-gui-mobile/src/forge/toolbox/GuiDialog.java +++ b/forge-gui-mobile/src/forge/toolbox/GuiDialog.java @@ -1,13 +1,13 @@ package forge.toolbox; import java.util.List; +import java.util.function.Consumer; import org.apache.commons.lang3.StringUtils; import com.google.common.collect.ImmutableList; import forge.game.card.CardView; -import forge.util.Callback; /** * Holds player interactions using standard windows @@ -15,21 +15,21 @@ import forge.util.Callback; public class GuiDialog { private static final ImmutableList defaultConfirmOptions = ImmutableList.of("Yes", "No"); - public static void confirm(final CardView c, final String question, final Callback callback) { + public static void confirm(final CardView c, final String question, final Consumer callback) { GuiDialog.confirm(c, question, true, null, callback); } - public static void confirm(final CardView c, final String question, final boolean defaultChoice, final Callback callback) { + public static void confirm(final CardView c, final String question, final boolean defaultChoice, final Consumer callback) { GuiDialog.confirm(c, question, defaultChoice, null, callback); } - public static void confirm(final CardView c, final String question, final List options, final Callback callback) { + public static void confirm(final CardView c, final String question, final List options, final Consumer callback) { GuiDialog.confirm(c, question, true, options, callback); } - public static void confirm(final CardView c, final String question, final boolean defaultIsYes, final List options, final Callback callback) { + public static void confirm(final CardView c, final String question, final boolean defaultIsYes, final List options, final Consumer callback) { final String title = c == null ? "Question" : c + " - Ability"; String questionToUse = StringUtils.isBlank(question) ? "Activate card's ability?" : question; final List opts = options == null ? defaultConfirmOptions : options; - FOptionPane.showCardOptionDialog(c, questionToUse, title, FOptionPane.QUESTION_ICON, opts, defaultIsYes ? 0 : 1, result -> callback.run(result == 0)); + FOptionPane.showCardOptionDialog(c, questionToUse, title, FOptionPane.QUESTION_ICON, opts, defaultIsYes ? 0 : 1, result -> callback.accept(result == 0)); } /** diff --git a/forge-gui-mobile/src/forge/toolbox/ListChooser.java b/forge-gui-mobile/src/forge/toolbox/ListChooser.java index dfd46fc20be..153ff540f97 100644 --- a/forge-gui-mobile/src/forge/toolbox/ListChooser.java +++ b/forge-gui-mobile/src/forge/toolbox/ListChooser.java @@ -21,6 +21,7 @@ package forge.toolbox; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Predicate; @@ -77,10 +78,10 @@ public class ListChooser extends FContainer { private FOptionPane optionPane; private final Collection list; private final Function display; - private final Callback> callback; + private final Consumer> callback; private AdvancedSearchFilter advancedSearchFilter; - public ListChooser(final String title, final int minChoices, final int maxChoices, final Collection list0, final Function display0, final Callback> callback0) { + public ListChooser(final String title, final int minChoices, final int maxChoices, final Collection list0, final Function display0, final Consumer> callback0) { FThreads.assertExecutedByEdt(true); list = list0; lstChoices = add(new ChoiceList(list, minChoices, maxChoices)); @@ -123,13 +124,13 @@ public class ListChooser extends FContainer { optionPane = new FOptionPane(null, null, title, null, this, options, 0, result -> { called = false; if (result == 0) { - callback.run(lstChoices.getSelectedItems()); + callback.accept(lstChoices.getSelectedItems()); } else if (minChoices > 0) { show(); //show if user tries to cancel when input is mandatory } else { - callback.run(new ArrayList<>()); + callback.accept(new ArrayList<>()); } }) { @Override diff --git a/forge-gui/src/main/java/forge/gui/interfaces/IGuiBase.java b/forge-gui/src/main/java/forge/gui/interfaces/IGuiBase.java index bf74ef77fc0..a9c34302926 100644 --- a/forge-gui/src/main/java/forge/gui/interfaces/IGuiBase.java +++ b/forge-gui/src/main/java/forge/gui/interfaces/IGuiBase.java @@ -7,7 +7,6 @@ import forge.localinstance.skin.FSkinProp; import forge.localinstance.skin.ISkinImage; import forge.sound.IAudioClip; import forge.sound.IAudioMusic; -import forge.util.Callback; import forge.util.ImageFetcher; import java.io.File; @@ -15,6 +14,7 @@ import java.io.IOException; import java.net.URISyntaxException; import java.util.Collection; import java.util.List; +import java.util.function.Consumer; import java.util.function.Function; import org.jupnp.UpnpServiceConfiguration; @@ -42,7 +42,7 @@ public interface IGuiBase { List order(String title, String top, int remainingObjectsMin, int remainingObjectsMax, List sourceChoices, List destChoices); String showFileDialog(String title, String defaultDir); File getSaveFile(File defaultFile); - void download(GuiDownloadService service, Callback callback); + void download(GuiDownloadService service, Consumer callback); void refreshSkin(); void showCardList(String title, String message, List list); boolean showBoxedProduct(String title, String message, List list); diff --git a/forge-gui/src/main/java/forge/util/Callback.java b/forge-gui/src/main/java/forge/util/Callback.java deleted file mode 100644 index 41d98d8c625..00000000000 --- a/forge-gui/src/main/java/forge/util/Callback.java +++ /dev/null @@ -1,6 +0,0 @@ -package forge.util; - -@FunctionalInterface -public interface Callback { - void run(T result); -} diff --git a/forge-gui/src/main/java/forge/util/WaitCallback.java b/forge-gui/src/main/java/forge/util/WaitCallback.java index a41aa4fd4d5..71b74e05095 100644 --- a/forge-gui/src/main/java/forge/util/WaitCallback.java +++ b/forge-gui/src/main/java/forge/util/WaitCallback.java @@ -2,7 +2,9 @@ package forge.util; import forge.gui.FThreads; -public abstract class WaitCallback implements Callback, Runnable { +import java.util.function.Consumer; + +public abstract class WaitCallback implements Consumer, Runnable { public class Lock { } @@ -11,7 +13,7 @@ public abstract class WaitCallback implements Callback, Runnable { private T result; @Override - public final void run(T result0) { + public final void accept(T result0) { result = result0; synchronized (lock) { lock.notify(); From deb8369f11d3e03d76994bf6b1fa508b49df2777 Mon Sep 17 00:00:00 2001 From: kevlahnota Date: Tue, 26 Aug 2025 06:53:59 +0800 Subject: [PATCH 007/355] Update FDeckChooser.java --- forge-gui-mobile/src/forge/deck/FDeckChooser.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/forge-gui-mobile/src/forge/deck/FDeckChooser.java b/forge-gui-mobile/src/forge/deck/FDeckChooser.java index 37a74925f6f..360fce30228 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckChooser.java +++ b/forge-gui-mobile/src/forge/deck/FDeckChooser.java @@ -8,6 +8,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; +import java.util.function.Consumer; import forge.game.GameFormat; import forge.util.MyRandom; @@ -108,13 +109,10 @@ public class FDeckChooser extends FScreen { container.add(deckChooser.lstDecks); container.setHeight(FOptionPane.getMaxDisplayObjHeight()); - deckChooser.optionPane = new FOptionPane(null, null, title, null, container, ImmutableList.of(Forge.getLocalizer().getInstance().getMessage("lblOK"), Forge.getLocalizer().getInstance().getMessage("lblCancel")), 0, new Callback() { - @Override - public void run(Integer result) { - if (result == 0) { - if (callback != null) { - callback.run(deckChooser.getDeck()); - } + deckChooser.optionPane = new FOptionPane(null, null, title, null, container, ImmutableList.of(Forge.getLocalizer().getInstance().getMessage("lblOK"), Forge.getLocalizer().getInstance().getMessage("lblCancel")), 0, result -> { + if (result == 0) { + if (callback != null) { + callback.run(deckChooser.getDeck()); } } }) { From 192a64bbc3ce467a689c1d3f87685db1ae35eca4 Mon Sep 17 00:00:00 2001 From: kevlahnota Date: Tue, 26 Aug 2025 06:58:09 +0800 Subject: [PATCH 008/355] Update Forge.java --- forge-gui-mobile/src/forge/Forge.java | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index cbc171eda58..09895d69452 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -600,22 +600,19 @@ public class Forge implements ApplicationListener { } if(currentScreen == null) return; - currentScreen.onClose(new Callback<>() { - @Override - public void run(Boolean result) { - if (result) { - Dscreens.pollFirst(); - setCurrentScreen(Dscreens.peekFirst()); - if (clearLastMatch) { - try { - Dscreens.remove(lastMatch); - } catch (Exception e) { - e.printStackTrace(); - } - //check - /*for (FScreen fScreen : Dscreens) - System.out.println(fScreen.toString());*/ + currentScreen.onClose(result -> { + if (result) { + Dscreens.pollFirst(); + setCurrentScreen(Dscreens.peekFirst()); + if (clearLastMatch) { + try { + Dscreens.remove(lastMatch); + } catch (Exception e) { + e.printStackTrace(); } + //check + /*for (FScreen fScreen : Dscreens) + System.out.println(fScreen.toString());*/ } } }); From 9325794e2fe83eb0c97a1a566b2c30bfac7505f2 Mon Sep 17 00:00:00 2001 From: kevlahnota Date: Tue, 26 Aug 2025 07:03:24 +0800 Subject: [PATCH 009/355] Update FFileChooser.java --- .../src/forge/toolbox/FFileChooser.java | 68 ++++++++----------- 1 file changed, 30 insertions(+), 38 deletions(-) diff --git a/forge-gui-mobile/src/forge/toolbox/FFileChooser.java b/forge-gui-mobile/src/forge/toolbox/FFileChooser.java index 174ae9f7c42..374b125b0a7 100644 --- a/forge-gui-mobile/src/forge/toolbox/FFileChooser.java +++ b/forge-gui-mobile/src/forge/toolbox/FFileChooser.java @@ -66,24 +66,21 @@ public class FFileChooser extends FDialog { return; } - FOptionPane.showInputDialog(Forge.getLocalizer().getMessage("lblEnterNewFolderName"), new Callback() { - @Override - public void run(String result) { - if (StringUtils.isEmpty(result)) { return; } - - try { - File newDir = new File(dir, result); - if (newDir.mkdirs()) { - txtFilename.setText(newDir.getAbsolutePath()); - refreshFileList(); - return; - } - } - catch (Exception e) { - e.printStackTrace(); - } - FOptionPane.showErrorDialog(Forge.getLocalizer().getMessage("lblEnterFolderNameNotValid", result), Forge.getLocalizer().getMessage("lblInvalidName")); + FOptionPane.showInputDialog(Forge.getLocalizer().getMessage("lblEnterNewFolderName"), result -> { + if (StringUtils.isEmpty(result)) { + return; } + try { + File newDir = new File(dir, result); + if (newDir.mkdirs()) { + txtFilename.setText(newDir.getAbsolutePath()); + refreshFileList(); + return; + } + } catch (Exception e) { + e.printStackTrace(); + } + FOptionPane.showErrorDialog(Forge.getLocalizer().getMessage("lblEnterFolderNameNotValid", result), Forge.getLocalizer().getMessage("lblInvalidName")); }); }); initButton(2, Forge.getLocalizer().getMessage("lblCancel"), e -> hide()); @@ -220,33 +217,29 @@ public class FFileChooser extends FDialog { else { title = Forge.getLocalizer().getMessage("lblEnterNewNameForFile"); } - FOptionPane.showInputDialog(title, file.getName(), new Callback() { - @Override - public void run(String result) { - if (StringUtils.isEmpty(result)) { return; } - - try { - File newFile = new File(dir, result); - if (file.renameTo(newFile)) { - txtFilename.setText(newFile.getAbsolutePath()); - refreshFileList(); - return; - } - } - catch (Exception e) { - e.printStackTrace(); - } - FOptionPane.showErrorDialog(Forge.getLocalizer().getMessage("lblEnterNameNotValid", result), Forge.getLocalizer().getMessage("lblInvalidName")); + FOptionPane.showInputDialog(title, file.getName(), result -> { + if (StringUtils.isEmpty(result)) { + return; } + try { + File newFile = new File(dir, result); + if (file.renameTo(newFile)) { + txtFilename.setText(newFile.getAbsolutePath()); + refreshFileList(); + return; + } + } + catch (Exception e) { + e.printStackTrace(); + } + FOptionPane.showErrorDialog(Forge.getLocalizer().getMessage("lblEnterNameNotValid", result), Forge.getLocalizer().getMessage("lblInvalidName")); }); } private void deleteFile(final Integer index, final File file) { final String deleteBehavior = file.isDirectory() ? Forge.getLocalizer().getMessage("lblDeleteFolder") : Forge.getLocalizer().getMessage("lblDeleteFile"); FOptionPane.showConfirmDialog(Forge.getLocalizer().getMessage("lblAreYouSureProceedDelete"), deleteBehavior, - Forge.getLocalizer().getMessage("lblDelete"), Forge.getLocalizer().getMessage("lblCancel"), new Callback() { - @Override - public void run(Boolean result) { + Forge.getLocalizer().getMessage("lblDelete"), Forge.getLocalizer().getMessage("lblCancel"), result -> { if (result) { try { if (FileUtil.deleteDirectory(file)) { //this will ensure directory or file deleted @@ -271,7 +264,6 @@ public class FFileChooser extends FDialog { } FOptionPane.showErrorDialog(Forge.getLocalizer().getMessage("lblCouldBotDeleteFile")); } - } }); } From f452b94cb8e6bba61e5f10b5f34f2c9b9a8f2b3c Mon Sep 17 00:00:00 2001 From: kevlahnota Date: Tue, 26 Aug 2025 07:16:43 +0800 Subject: [PATCH 010/355] update missing migration --- .../src/forge/deck/FDeckChooser.java | 2 +- .../src/forge/deck/FDeckEditor.java | 48 ++++++++----------- .../forge/screens/settings/GuiDownloader.java | 2 +- .../src/forge/toolbox/FFileChooser.java | 12 ++--- 4 files changed, 29 insertions(+), 35 deletions(-) diff --git a/forge-gui-mobile/src/forge/deck/FDeckChooser.java b/forge-gui-mobile/src/forge/deck/FDeckChooser.java index 360fce30228..f3ee6bbe455 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckChooser.java +++ b/forge-gui-mobile/src/forge/deck/FDeckChooser.java @@ -112,7 +112,7 @@ public class FDeckChooser extends FScreen { deckChooser.optionPane = new FOptionPane(null, null, title, null, container, ImmutableList.of(Forge.getLocalizer().getInstance().getMessage("lblOK"), Forge.getLocalizer().getInstance().getMessage("lblCancel")), 0, result -> { if (result == 0) { if (callback != null) { - callback.run(deckChooser.getDeck()); + callback.accept(deckChooser.getDeck()); } } }) { diff --git a/forge-gui-mobile/src/forge/deck/FDeckEditor.java b/forge-gui-mobile/src/forge/deck/FDeckEditor.java index 69f5a2e1728..41cb685e509 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckEditor.java +++ b/forge-gui-mobile/src/forge/deck/FDeckEditor.java @@ -561,25 +561,22 @@ public class FDeckEditor extends TabPageScreen { if (editorConfig.getGameType() != null && editorConfig.hasInfiniteCardPool()) { addItem(new FMenuItem(localizer.getMessage("lblImportFromClipboard"), Forge.hdbuttons ? FSkinImage.HDIMPORT : FSkinImage.OPEN, e -> { FDeckImportDialog dialog = new FDeckImportDialog(!deck.isEmpty(), FDeckEditor.this.editorConfig); - dialog.setCallback(new Callback<>() { - @Override - public void run(Deck importedDeck) { - if (deck != null && importedDeck.hasName()) { - deck.setName(importedDeck.getName()); - setHeaderText(importedDeck.getName()); + dialog.setCallback(importedDeck -> { + if (deck != null && importedDeck.hasName()) { + deck.setName(importedDeck.getName()); + setHeaderText(importedDeck.getName()); + } + if (dialog.createNewDeck()) { + for (Entry section : importedDeck) { + DeckSectionPage page = getPageForSection(section.getKey()); + if (page != null) + page.setCards(section.getValue()); } - if (dialog.createNewDeck()) { - for (Entry section : importedDeck) { - DeckSectionPage page = getPageForSection(section.getKey()); - if (page != null) - page.setCards(section.getValue()); - } - } else { - for (Entry section : importedDeck) { - DeckSectionPage page = getPageForSection(section.getKey()); - if (page != null) - page.addCards(section.getValue()); - } + } else { + for (Entry section : importedDeck) { + DeckSectionPage page = getPageForSection(section.getKey()); + if (page != null) + page.addCards(section.getValue()); } } }); @@ -1828,16 +1825,13 @@ public class FDeckEditor extends TabPageScreen { sortedOptions.add(option); } } - GuiChoose.oneOrNone(Forge.getLocalizer().getMessage("lblSelectPreferredArt") + " " + card.getName(), sortedOptions, new Callback<>() { - @Override - public void run(PaperCard result) { - if (result != null) { - if (result != card) { - cardManager.replaceAll(card, result); - } - prefs.setPreferredArt(result.getEdition(), result.getArtIndex()); - CardPreferences.save(); + GuiChoose.oneOrNone(Forge.getLocalizer().getMessage("lblSelectPreferredArt") + " " + card.getName(), sortedOptions, result -> { + if (result != null) { + if (result != card) { + cardManager.replaceAll(card, result); } + prefs.setPreferredArt(result.getEdition(), result.getArtIndex()); + CardPreferences.save(); } }); })); diff --git a/forge-gui-mobile/src/forge/screens/settings/GuiDownloader.java b/forge-gui-mobile/src/forge/screens/settings/GuiDownloader.java index dbbccb30601..ea92bd04841 100644 --- a/forge-gui-mobile/src/forge/screens/settings/GuiDownloader.java +++ b/forge-gui-mobile/src/forge/screens/settings/GuiDownloader.java @@ -52,7 +52,7 @@ public class GuiDownloader extends FDialog { service.setCancel(true); hide(); if (callback != null) { - callback.run(getButton(0).getText() == "OK"); //determine result based on whether download finished + callback.accept(getButton(0).getText() == "OK"); //determine result based on whether download finished } } }; diff --git a/forge-gui-mobile/src/forge/toolbox/FFileChooser.java b/forge-gui-mobile/src/forge/toolbox/FFileChooser.java index 374b125b0a7..b8e0c2405fb 100644 --- a/forge-gui-mobile/src/forge/toolbox/FFileChooser.java +++ b/forge-gui-mobile/src/forge/toolbox/FFileChooser.java @@ -77,8 +77,8 @@ public class FFileChooser extends FDialog { refreshFileList(); return; } - } catch (Exception e) { - e.printStackTrace(); + } catch (Exception e1) { + e1.printStackTrace(); } FOptionPane.showErrorDialog(Forge.getLocalizer().getMessage("lblEnterFolderNameNotValid", result), Forge.getLocalizer().getMessage("lblInvalidName")); }); @@ -229,8 +229,8 @@ public class FFileChooser extends FDialog { return; } } - catch (Exception e) { - e.printStackTrace(); + catch (Exception e2) { + e2.printStackTrace(); } FOptionPane.showErrorDialog(Forge.getLocalizer().getMessage("lblEnterNameNotValid", result), Forge.getLocalizer().getMessage("lblInvalidName")); }); @@ -259,8 +259,8 @@ public class FFileChooser extends FDialog { return; } } - catch (Exception ex) { - ex.printStackTrace(); + catch (Exception e3) { + e3.printStackTrace(); } FOptionPane.showErrorDialog(Forge.getLocalizer().getMessage("lblCouldBotDeleteFile")); } From 0d342c778fff3df99c17c49efc5a3fbd6c0490a2 Mon Sep 17 00:00:00 2001 From: kevlahnota Date: Tue, 26 Aug 2025 09:11:31 +0800 Subject: [PATCH 011/355] fix NG+ --- .../src/forge/adventure/player/AdventurePlayer.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java index ccc0cd279c2..63b4a18c051 100644 --- a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java +++ b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java @@ -1212,11 +1212,7 @@ public class AdventurePlayer implements Serializable, SaveFileContent { } public void removeAllQuestItems(){ - for (ItemData data : inventoryItems) { - if(data != null && data.questItem){ - removeItem(data); - } - } + inventoryItems.removeIf(data -> data != null && data.questItem); } public boolean addBooster(Deck booster) { From a66349d8a17c880a38294927fab67b7084bf9308 Mon Sep 17 00:00:00 2001 From: Eradev Date: Tue, 26 Aug 2025 01:26:25 -0400 Subject: [PATCH 012/355] Missing token (#8538) * Add g_1_1_forest_dryad_squirrel * Update curiosity --- forge-gui/res/cardsfolder/c/curiosity.txt | 1 + forge-gui/res/tokenscripts/g_1_1_forest_dryad_squirrel.txt | 6 ++++++ 2 files changed, 7 insertions(+) create mode 100644 forge-gui/res/tokenscripts/g_1_1_forest_dryad_squirrel.txt diff --git a/forge-gui/res/cardsfolder/c/curiosity.txt b/forge-gui/res/cardsfolder/c/curiosity.txt index 764e69f1e32..3be6a5c5d59 100644 --- a/forge-gui/res/cardsfolder/c/curiosity.txt +++ b/forge-gui/res/cardsfolder/c/curiosity.txt @@ -5,4 +5,5 @@ K:Enchant:Creature SVar:AttachAILogic:Curiosity T:Mode$ DamageDone | ValidSource$ Card.AttachedBy | ValidTarget$ Opponent | Execute$ TrigDraw | TriggerZones$ Battlefield | OptionalDecider$ You | TriggerDescription$ Whenever enchanted creature deals damage to an opponent, you may draw a card. SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 +SVar:PlayMain1:TRUE Oracle:Enchant creature\nWhenever enchanted creature deals damage to an opponent, you may draw a card. diff --git a/forge-gui/res/tokenscripts/g_1_1_forest_dryad_squirrel.txt b/forge-gui/res/tokenscripts/g_1_1_forest_dryad_squirrel.txt new file mode 100644 index 00000000000..0f73be0f5ca --- /dev/null +++ b/forge-gui/res/tokenscripts/g_1_1_forest_dryad_squirrel.txt @@ -0,0 +1,6 @@ +Name:Forest Dryad Squirrel Token +ManaCost:no cost +Colors:green +Types:Land Creature Forest Dryad Squirrel +PT:1/1 +Oracle:({T}: Add {G}.) \ No newline at end of file From 258b8c18a90be304308a98543ad0a52a22e92101 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Tue, 26 Aug 2025 06:26:32 +0100 Subject: [PATCH 013/355] Fix Thief of Blood simultaneous ETB (#8535) Co-authored-by: TRT <> --- .../ability/effects/CountersRemoveEffect.java | 20 ++++++++++--------- .../cardsfolder/s/sin_unending_cataclysm.txt | 2 +- forge-gui/res/cardsfolder/s/suncleanser.txt | 2 +- .../res/cardsfolder/t/thief_of_blood.txt | 2 +- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/CountersRemoveEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CountersRemoveEffect.java index fd401571072..41b4c840054 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CountersRemoveEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CountersRemoveEffect.java @@ -102,24 +102,29 @@ public class CountersRemoveEffect extends SpellAbilityEffect { int totalRemoved = 0; CardCollectionView srcCards; - if (sa.hasParam("Choices")) { ZoneType choiceZone = sa.hasParam("ChoiceZone") ? ZoneType.smartValueOf(sa.getParam("ChoiceZone")) : ZoneType.Battlefield; - - CardCollection choices = CardLists.getValidCards(game.getCardsIn(choiceZone), sa.getParam("Choices"), + srcCards = CardLists.getValidCards(game.getCardsIn(choiceZone), sa.getParam("Choices"), activator, source, sa); + } else { + srcCards = getTargetCards(sa); + } + if (sa.isReplacementAbility()) { + srcCards = new CardCollection(srcCards).filter(c -> !c.isInPlay() || sa.getLastStateBattlefield().contains(c)); + } + if (sa.hasParam("Choices")) { int min = 1; int max = 1; if (sa.hasParam("ChoiceOptional")) { min = 0; - max = choices.size(); + max = srcCards.size(); } if (sa.hasParam("ChoiceNum")) { min = max = AbilityUtils.calculateAmount(source, sa.getParam("ChoiceNum"), sa); } - if (choices.size() < min) { + if (srcCards.size() < min) { return; } @@ -128,13 +133,12 @@ public class CountersRemoveEffect extends SpellAbilityEffect { title = title.replace(" ", " "); Map params = Maps.newHashMap(); params.put("CounterType", counterType); - srcCards = pc.chooseCardsForEffect(choices, sa, title, min, max, min == 0, params); + srcCards = pc.chooseCardsForEffect(srcCards, sa, title, min, max, min == 0, params); } else { for (final Player tgtPlayer : getTargetPlayers(sa)) { if (!tgtPlayer.isInGame()) { continue; } - // Removing energy if (type.equals("All")) { for (Map.Entry e : Lists.newArrayList(tgtPlayer.getCounters().entrySet())) { totalRemoved += tgtPlayer.subtractCounter(e.getKey(), e.getValue(), activator); @@ -150,8 +154,6 @@ public class CountersRemoveEffect extends SpellAbilityEffect { } } } - - srcCards = getTargetCards(sa); } for (final Card tgtCard : srcCards) { diff --git a/forge-gui/res/cardsfolder/s/sin_unending_cataclysm.txt b/forge-gui/res/cardsfolder/s/sin_unending_cataclysm.txt index 1cb8bf8b52b..346ebd68e10 100644 --- a/forge-gui/res/cardsfolder/s/sin_unending_cataclysm.txt +++ b/forge-gui/res/cardsfolder/s/sin_unending_cataclysm.txt @@ -5,7 +5,7 @@ PT:5/5 K:Flying K:Trample K:ETBReplacement:Other:DBRemoveCounter -SVar:DBRemoveCounter:DB$ RemoveCounter | Choices$ Artifact.HasCounters,Creature.HasCounters,Enchantment.HasCounters | ChoiceOptional$ True | CounterType$ All | CounterNum$ All | SubAbility$ DBPutCounters | RememberAmount$ True | SpellDescription$ As NICKNAME enters, remove all counters from any number of artifacts, creatures, and enchantments. NICKNAME enters with X +1/+1 counters on it, where X is twice the number of counters removed this way. +SVar:DBRemoveCounter:DB$ RemoveCounter | Choices$ Artifact.HasCounters,Creature.HasCounters,Enchantment.HasCounters | ChoiceOptional$ True | CounterType$ All | SubAbility$ DBPutCounters | RememberAmount$ True | SpellDescription$ As NICKNAME enters, remove all counters from any number of artifacts, creatures, and enchantments. NICKNAME enters with X +1/+1 counters on it, where X is twice the number of counters removed this way. SVar:DBPutCounters:DB$ PutCounter | ETB$ True | Defined$ Self | CounterType$ P1P1 | CounterNum$ X | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigPutCounter | TriggerDescription$ When NICKNAME dies, put its counters on target creature you control, then shuffle this card into its owner's library. diff --git a/forge-gui/res/cardsfolder/s/suncleanser.txt b/forge-gui/res/cardsfolder/s/suncleanser.txt index 82b735d110f..6c80ca16b09 100644 --- a/forge-gui/res/cardsfolder/s/suncleanser.txt +++ b/forge-gui/res/cardsfolder/s/suncleanser.txt @@ -5,7 +5,7 @@ PT:1/4 T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigCharm | TriggerDescription$ When CARDNAME enters, ABILITY SVar:TrigCharm:DB$ Charm | Choices$ CreatureDBRemoveCounter,OpponentDBRemoveCounter | CharmNum$ 1 SVar:CreatureDBRemoveCounter:DB$ RemoveCounter | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ All | CounterNum$ All | SubAbility$ DBPumpCreature | SpellDescription$ Remove all counters from target creature. It can't have counters put on it for as long as CARDNAME remains on the battlefield. -SVar:OpponentDBRemoveCounter:DB$ RemoveCounter | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | CounterType$ All | CounterNum$ All | SubAbility$ DBPumpOpponent | SpellDescription$ Target opponent loses all counters. That player can't get counters for as long as CARDNAME remains on the battlefield. +SVar:OpponentDBRemoveCounter:DB$ RemoveCounter | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | CounterType$ All | SubAbility$ DBPumpOpponent | SpellDescription$ Target opponent loses all counters. That player can't get counters for as long as CARDNAME remains on the battlefield. SVar:DBPumpCreature:DB$ Effect | StaticAbilities$ DBCantPutCounterCreature | RememberObjects$ Targeted | Duration$ AsLongAsInPlay SVar:DBCantPutCounterCreature:Mode$ CantPutCounter | ValidCard$ Card.IsRemembered | Description$ That creature can't have counters put on it for as long as EFFECTSOURCE remains on the battlefield. SVar:DBPumpOpponent:DB$ Effect | StaticAbilities$ DBCantPutCounterPlayer | RememberObjects$ Targeted | Duration$ AsLongAsInPlay diff --git a/forge-gui/res/cardsfolder/t/thief_of_blood.txt b/forge-gui/res/cardsfolder/t/thief_of_blood.txt index 7a5c5ec2e17..aa08652abed 100644 --- a/forge-gui/res/cardsfolder/t/thief_of_blood.txt +++ b/forge-gui/res/cardsfolder/t/thief_of_blood.txt @@ -4,7 +4,7 @@ Types:Creature Vampire PT:1/1 K:Flying K:ETBReplacement:Other:DBRemoveCounterAll -SVar:DBRemoveCounterAll:DB$ RemoveCounterAll | ValidCards$ Permanent | AllCounterTypes$ True | StackDescription$ SpellDescription | SubAbility$ DBPutCounters | RememberAmount$ True | SpellDescription$ As CARDNAME enters, remove all counters from all permanents. CARDNAME enters with a +1/+1 counter on it for each counter removed this way. +SVar:DBRemoveCounterAll:DB$ RemoveCounter | Defined$ Valid Permanent | CounterType$ All | SubAbility$ DBPutCounters | RememberAmount$ True | SpellDescription$ As CARDNAME enters, remove all counters from all permanents. CARDNAME enters with a +1/+1 counter on it for each counter removed this way. SVar:DBPutCounters:DB$ PutCounter | ETB$ True | Defined$ Self | CounterType$ P1P1 | CounterNum$ X | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Count$RememberedNumber From 5bb532bf9dbdc032cb67eac674189677391fcc13 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Mon, 25 Aug 2025 13:46:48 +0200 Subject: [PATCH 014/355] Game: only reverse NonactivePlayers if more than one Reversing the Turn Order should have no Effect there if only 2 players --- forge-game/src/main/java/forge/game/Game.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-game/src/main/java/forge/game/Game.java b/forge-game/src/main/java/forge/game/Game.java index 196dc753239..eea0d849ea5 100644 --- a/forge-game/src/main/java/forge/game/Game.java +++ b/forge-game/src/main/java/forge/game/Game.java @@ -421,7 +421,7 @@ public class Game { // Don't use getPlayersInTurnOrder to prevent copying the player collection twice final PlayerCollection players = new PlayerCollection(ingamePlayers); players.remove(phaseHandler.getPlayerTurn()); - if (!getTurnOrder().isDefaultDirection()) { + if (players.size() > 1 && !getTurnOrder().isDefaultDirection()) { Collections.reverse(players); } return players; From 1365b82968f976b3d23bf1cb99b86cd3189b670e Mon Sep 17 00:00:00 2001 From: Paul Hammerton Date: Tue, 26 Aug 2025 08:43:01 +0100 Subject: [PATCH 015/355] Add treetop_recluse.txt --- forge-gui/res/cardsfolder/t/treetop_recluse.txt | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 forge-gui/res/cardsfolder/t/treetop_recluse.txt diff --git a/forge-gui/res/cardsfolder/t/treetop_recluse.txt b/forge-gui/res/cardsfolder/t/treetop_recluse.txt new file mode 100644 index 00000000000..eedb77b645f --- /dev/null +++ b/forge-gui/res/cardsfolder/t/treetop_recluse.txt @@ -0,0 +1,7 @@ +Name:Treetop Recluse +ManaCost:1 G G +Types:Creature Spider +PT:1/6 +K:Vigilance +K:Reach +Oracle:Vigilance, reach From 7744474f39892e103e5fea628277cfa4c0fd23e6 Mon Sep 17 00:00:00 2001 From: Eradev Date: Tue, 26 Aug 2025 03:48:40 -0400 Subject: [PATCH 016/355] Fix token numbers --- forge-gui/res/editions/March of the Machine.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/forge-gui/res/editions/March of the Machine.txt b/forge-gui/res/editions/March of the Machine.txt index 00d84d7dee2..4eeca174c24 100644 --- a/forge-gui/res/editions/March of the Machine.txt +++ b/forge-gui/res/editions/March of the Machine.txt @@ -513,8 +513,8 @@ ScryfallCode=MOM 8 g_1_1_phyrexian_saproling @Maxime Minard 9 ur_1_1_elemental @Ryan Valle 10 wu_2_2_knight_vigilance @Ernanda Souza -11 gw_3_3_phyrexian_hydra_lifelink @Néstor Ossandón Leal -12 gw_3_3_phyrexian_hydra_reach @Néstor Ossandón Leal +11 gw_3_3_phyrexian_hydra_reach @Néstor Ossandón Leal +12 gw_3_3_phyrexian_hydra_lifelink @Néstor Ossandón Leal 13 rw_3_2_spirit @Michael Walsh 14 wb_1_1_spirit_flying @Bruno Biazotto 15 rw_3_2_warrior_symbiotic_attack @Viko Menezes From e550c307c28b973a7d16a016d15fd43bc335a8dd Mon Sep 17 00:00:00 2001 From: Eradev Date: Tue, 26 Aug 2025 06:29:49 -0400 Subject: [PATCH 017/355] Option to remove unsupported card from collection --- forge-core/src/main/java/forge/card/CardRules.java | 7 ++++++- .../src/forge/adventure/scene/AdventureDeckEditor.java | 8 ++++++++ forge-gui-mobile/src/forge/card/CardRenderer.java | 4 ++++ forge-gui-mobile/src/forge/menu/FDropDownMenu.java | 5 +++++ forge-gui-mobile/src/forge/toolbox/FContainer.java | 1 + forge-gui/res/languages/de-DE.properties | 4 +++- forge-gui/res/languages/en-US.properties | 4 +++- forge-gui/res/languages/es-ES.properties | 4 +++- forge-gui/res/languages/fr-FR.properties | 4 +++- forge-gui/res/languages/it-IT.properties | 4 +++- forge-gui/res/languages/ja-JP.properties | 4 +++- forge-gui/res/languages/pt-BR.properties | 4 +++- forge-gui/res/languages/zh-CN.properties | 4 +++- 13 files changed, 48 insertions(+), 9 deletions(-) diff --git a/forge-core/src/main/java/forge/card/CardRules.java b/forge-core/src/main/java/forge/card/CardRules.java index b2b41a1bd03..fe36b18679e 100644 --- a/forge-core/src/main/java/forge/card/CardRules.java +++ b/forge-core/src/main/java/forge/card/CardRules.java @@ -53,6 +53,7 @@ public final class CardRules implements ICardCharacteristics { private boolean addsWildCardColor; private int setColorID; private boolean custom; + private boolean unsupported; private String path; public CardRules(ICardFace[] faces, CardSplitType altMode, CardAiHints cah) { @@ -220,7 +221,9 @@ public final class CardRules implements ICardCharacteristics { } public boolean isCustom() { return custom; } - public void setCustom() { custom = true; } + public void setCustom() { custom = true; } + + public boolean isUnsupported() { return unsupported; } @Override public CardType getType() { @@ -825,6 +828,8 @@ public final class CardRules implements ICardCharacteristics { faces[0].assignMissingFields(); final CardRules result = new CardRules(faces, CardSplitType.None, cah); + result.unsupported = true; + return result; } diff --git a/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java b/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java index 1a6207e7314..968fc9d50d1 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java +++ b/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java @@ -350,6 +350,14 @@ public class AdventureDeckEditor extends FDeckEditor { int safeToSellCount = amountInCollection - copiesUsedInDecks; //Number we can sell without losing cards from a deck. int autoSellCount = Current.player().autoSellCards.count(card); //Number currently in auto-sell. int canMoveToAutoSell = safeToSellCount - autoSellCount; //Number that can be moved to auto-sell from here. + + if (card.getRules().isUnsupported()) { + menu.clearItems(); + FMenuItem removeItem = new FMenuItem(localizer.getMessage("lblRemoveUnsupportedCard"), FSkinImage.HDDELETE, e -> + removeCard(card, safeToSellCount)); + menu.addItem(removeItem); + return; + } if (copiesUsedInDecks > 0) { String text = localizer.getMessage("lblCopiesInUse", copiesUsedInDecks); diff --git a/forge-gui-mobile/src/forge/card/CardRenderer.java b/forge-gui-mobile/src/forge/card/CardRenderer.java index 627dd19b46d..af3b1e5dfe9 100644 --- a/forge-gui-mobile/src/forge/card/CardRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardRenderer.java @@ -220,6 +220,10 @@ public class CardRenderer { if (pc.getRules() == null) return getCardArt(pc.getImageKey(backFace), false, false, false, false, false, false, false, false, true, false); + if (pc.getRules().isUnsupported()) { + return CardImageRenderer.forgeArt; + } + CardType type = pc.getRules().getType(); return getCardArt(pc.getImageKey(backFace), pc.getRules().getSplitType() == CardSplitType.Split, type.isPlane() || type.isPhenomenon(), pc.getRules().getOracleText().contains("Aftermath"), diff --git a/forge-gui-mobile/src/forge/menu/FDropDownMenu.java b/forge-gui-mobile/src/forge/menu/FDropDownMenu.java index 725426fdc87..1301cfea13c 100644 --- a/forge-gui-mobile/src/forge/menu/FDropDownMenu.java +++ b/forge-gui-mobile/src/forge/menu/FDropDownMenu.java @@ -69,6 +69,11 @@ public abstract class FDropDownMenu extends FDropDown { } } + public void clearItems() { + clear(); + items.clear(); + } + @Override public boolean tap(float x, float y, int count) { super.tap(x, y, count); diff --git a/forge-gui-mobile/src/forge/toolbox/FContainer.java b/forge-gui-mobile/src/forge/toolbox/FContainer.java index 2a747c9dd1d..b7b85529963 100644 --- a/forge-gui-mobile/src/forge/toolbox/FContainer.java +++ b/forge-gui-mobile/src/forge/toolbox/FContainer.java @@ -23,6 +23,7 @@ public abstract class FContainer extends FDisplayObject { public void clear() { children.clear(); + ((ArrayList) children).trimToSize(); } public int indexOf(FDisplayObject child) { diff --git a/forge-gui/res/languages/de-DE.properties b/forge-gui/res/languages/de-DE.properties index e7c02dccd8b..c619d74df95 100644 --- a/forge-gui/res/languages/de-DE.properties +++ b/forge-gui/res/languages/de-DE.properties @@ -3542,4 +3542,6 @@ cbPreloadCustomDrafts=Benutzerdefinierte Entwürfe vorladen nlPreloadCustomDrafts=Wenn aktiviert, werden die benutzerdefinierten Entwurfsdateien beim Start vorab geladen (Forge benötigt beim Parsen von Entwurfsdateien eine längere Startzeit). lblRepairCost=Reparaturkosten: {0} ? lblRepair=Reparieren -lblDataMigrationMsg=Datenmigration abgeschlossen!\nBitte überprüfen Sie Ihr Inventar und Ihre Ausrüstung.\nBitte erstellen Sie an dieser Stelle eine Sicherungskopie Ihrer Spielstände, da der aktuelle Spielstand noch nicht überschrieben wird, wenn Sie im Menü „Szene“ den Punkt „Daten“ -> „Sicherungskopie“ verwenden. \ No newline at end of file +lblDataMigrationMsg=Datenmigration abgeschlossen!\nBitte überprüfen Sie Ihr Inventar und Ihre Ausrüstung.\nBitte erstellen Sie an dieser Stelle eine Sicherungskopie Ihrer Spielstände, da der aktuelle Spielstand noch nicht überschrieben wird, wenn Sie im Menü „Szene“ den Punkt „Daten“ -> „Sicherungskopie“ verwenden. +#AdventureDeckEditor.java +lblRemoveUnsupportedCard=Verwijder niet-ondersteunde kaart \ No newline at end of file diff --git a/forge-gui/res/languages/en-US.properties b/forge-gui/res/languages/en-US.properties index e82665d5aaf..cffccf1d684 100644 --- a/forge-gui/res/languages/en-US.properties +++ b/forge-gui/res/languages/en-US.properties @@ -3296,4 +3296,6 @@ cbPreloadCustomDrafts=Preload Custom Drafts nlPreloadCustomDrafts=If enabled, the custom drafts files are preloaded on startup (Forge will have longer startup time when parsing drafts files). lblRepairCost=Repair Cost: {0} ? lblRepair=Repair -lblDataMigrationMsg=Data Migration completed!\nPlease check your Inventory and Equipments.\nPlease make a backup of your saves at this point since the actual save is not yet overwritten by using the Data -> Backup at the Menu Scene. \ No newline at end of file +lblDataMigrationMsg=Data Migration completed!\nPlease check your Inventory and Equipments.\nPlease make a backup of your saves at this point since the actual save is not yet overwritten by using the Data -> Backup at the Menu Scene. +#AdventureDeckEditor.java +lblRemoveUnsupportedCard=Remove unsupported card \ No newline at end of file diff --git a/forge-gui/res/languages/es-ES.properties b/forge-gui/res/languages/es-ES.properties index 0e10be48fd8..6a969b6fa39 100644 --- a/forge-gui/res/languages/es-ES.properties +++ b/forge-gui/res/languages/es-ES.properties @@ -3546,4 +3546,6 @@ cbPreloadCustomDrafts=Precargar borradores personalizados nlPreloadCustomDrafts=Si está habilitado, los archivos de borradores personalizados se precargan al inicio (Forge tendrá un tiempo de inicio más largo al analizar los archivos de borradores). lblRepairCost=Costo de reparación: {0} ? lblRepair=Reparar -lblDataMigrationMsg=¡Migración de datos completada!\nPor favor revise su inventario y equipos.\nPor favor, haz una copia de seguridad de tus partidas guardadas en este punto, ya que la partida guardada real aún no se sobrescribe al usar Datos -> Copia de seguridad en la Escena del menú. \ No newline at end of file +lblDataMigrationMsg=¡Migración de datos completada!\nPor favor revise su inventario y equipos.\nPor favor, haz una copia de seguridad de tus partidas guardadas en este punto, ya que la partida guardada real aún no se sobrescribe al usar Datos -> Copia de seguridad en la Escena del menú. +#AdventureDeckEditor.java +lblRemoveUnsupportedCard=Quitar tarjeta incompatible \ No newline at end of file diff --git a/forge-gui/res/languages/fr-FR.properties b/forge-gui/res/languages/fr-FR.properties index 3504790fa5d..e2f2b5c4a71 100644 --- a/forge-gui/res/languages/fr-FR.properties +++ b/forge-gui/res/languages/fr-FR.properties @@ -3547,4 +3547,6 @@ cbPreloadCustomDrafts=Précharger les brouillons personnalisés nlPreloadCustomDrafts=Si cette option est activée, les fichiers de brouillons personnalisés sont préchargés au démarrage (Forge aura un temps de démarrage plus long lors de l'analyse des fichiers de brouillons). lblRepairCost=Coût de réparation : {0} ? lblRepair=Réparation -lblDataMigrationMsg=Migration des données terminée!\nVeuillez vérifier votre inventaire et vos équipements.\nVeuillez effectuer une sauvegarde de vos sauvegardes à ce stade, car la sauvegarde réelle n'est pas encore écrasée en utilisant Données -> Sauvegarde dans le menu Scène. \ No newline at end of file +lblDataMigrationMsg=Migration des données terminée!\nVeuillez vérifier votre inventaire et vos équipements.\nVeuillez effectuer une sauvegarde de vos sauvegardes à ce stade, car la sauvegarde réelle n'est pas encore écrasée en utilisant Données -> Sauvegarde dans le menu Scène. +#AdventureDeckEditor.java +lblRemoveUnsupportedCard=Supprimer la carte non prise en charge \ No newline at end of file diff --git a/forge-gui/res/languages/it-IT.properties b/forge-gui/res/languages/it-IT.properties index 60765f4a8e4..054dcadfdf1 100644 --- a/forge-gui/res/languages/it-IT.properties +++ b/forge-gui/res/languages/it-IT.properties @@ -3545,4 +3545,6 @@ cbPreloadCustomDrafts=Precarica bozze personalizzate nlPreloadCustomDrafts=Se abilitato, i file delle bozze personalizzate vengono precaricati all'avvio (Forge avrà tempi di avvio più lunghi durante l'analisi dei file delle bozze). lblRepairCost=Costo di riparazione: {0} ? lblRepair=Riparazione -lblDataMigrationMsg=Migrazione dati completata!\nControlla il tuo inventario e le tue attrezzature.\nA questo punto, esegui un backup dei tuoi salvataggi, poiché il salvataggio effettivo non è ancora stato sovrascritto, utilizzando Dati -> Backup nel menu Scena. \ No newline at end of file +lblDataMigrationMsg=Migrazione dati completata!\nControlla il tuo inventario e le tue attrezzature.\nA questo punto, esegui un backup dei tuoi salvataggi, poiché il salvataggio effettivo non è ancora stato sovrascritto, utilizzando Dati -> Backup nel menu Scena. +#AdventureDeckEditor.java +lblRemoveUnsupportedCard=Rimuovi la carta non supportata \ No newline at end of file diff --git a/forge-gui/res/languages/ja-JP.properties b/forge-gui/res/languages/ja-JP.properties index 8612c0ac14f..b69952d3fdc 100644 --- a/forge-gui/res/languages/ja-JP.properties +++ b/forge-gui/res/languages/ja-JP.properties @@ -3541,4 +3541,6 @@ cbPreloadCustomDrafts=カスタムドラフトをプリロードする nlPreloadCustomDrafts=有効にすると、起動時にカスタム ドラフト ファイルがプリロードされます (ドラフト ファイルを解析するときに Forge の起動時間が長くなります)。 lblRepairCost=修理費用: {0}? lblRepair=修理 -lblDataMigrationMsg=データ移行が完了しました!\nインベントリと装備を確認してください。\n実際の保存はまだメニューシーンの「データ」->「バックアップ」を使用して上書きされていないため、この時点で保存のバックアップを作成してください。 \ No newline at end of file +lblDataMigrationMsg=データ移行が完了しました!\nインベントリと装備を確認してください。\n実際の保存はまだメニューシーンの「データ」->「バックアップ」を使用して上書きされていないため、この時点で保存のバックアップを作成してください。 +#AdventureDeckEditor.java +lblRemoveUnsupportedCard=サポートされていないカードを削除する \ No newline at end of file diff --git a/forge-gui/res/languages/pt-BR.properties b/forge-gui/res/languages/pt-BR.properties index 5dbb6aa09ea..2af56447c9a 100644 --- a/forge-gui/res/languages/pt-BR.properties +++ b/forge-gui/res/languages/pt-BR.properties @@ -3630,4 +3630,6 @@ cbPreloadCustomDrafts=Pré-carregar rascunhos personalizados nlPreloadCustomDrafts=Se habilitado, os arquivos de rascunhos personalizados serão pré-carregados na inicialização (o Forge terá um tempo de inicialização maior ao analisar arquivos de rascunhos). lblRepairCost=Custo do reparo: {0} ? lblRepair=Reparar -lblDataMigrationMsg=Migração de dados concluída!\nVerifique seu inventário e equipamentos.\nPor favor, faça um backup dos seus arquivos salvos neste momento, já que o arquivo salvo atual ainda não foi sobrescrito usando Dados -> Backup na Cena do Menu. \ No newline at end of file +lblDataMigrationMsg=Migração de dados concluída!\nVerifique seu inventário e equipamentos.\nPor favor, faça um backup dos seus arquivos salvos neste momento, já que o arquivo salvo atual ainda não foi sobrescrito usando Dados -> Backup na Cena do Menu. +#AdventureDeckEditor.java +lblRemoveUnsupportedCard=Remover cartão não suportado \ No newline at end of file diff --git a/forge-gui/res/languages/zh-CN.properties b/forge-gui/res/languages/zh-CN.properties index 55bcd7cc03b..89382b38946 100644 --- a/forge-gui/res/languages/zh-CN.properties +++ b/forge-gui/res/languages/zh-CN.properties @@ -3532,4 +3532,6 @@ cbPreloadCustomDrafts=预加载自定义草稿 nlPreloadCustomDrafts=如果启用,自定义草稿文件将在启动时预加载(Forge 在解析草稿文件时会有更长的启动时间)。 lblRepairCost=维修费用:{0}? lblRepair=维修 -lblDataMigrationMsg=数据迁移完成!\n请检查您的库存和设备。此时请备份您的保存内容,因为尚未使用菜单场景中的数据->备份覆盖实际保存内容。 \ No newline at end of file +lblDataMigrationMsg=数据迁移完成!\n请检查您的库存和设备。此时请备份您的保存内容,因为尚未使用菜单场景中的数据->备份覆盖实际保存内容。 +#AdventureDeckEditor.java +lblRemoveUnsupportedCard=移除不受支持的卡 \ No newline at end of file From 31e537f42b2bdaff8fb9bdac299831be10ff0973 Mon Sep 17 00:00:00 2001 From: Eradev Date: Tue, 26 Aug 2025 06:33:30 -0400 Subject: [PATCH 018/355] Remove changes to FContainer --- forge-gui-mobile/src/forge/toolbox/FContainer.java | 1 - 1 file changed, 1 deletion(-) diff --git a/forge-gui-mobile/src/forge/toolbox/FContainer.java b/forge-gui-mobile/src/forge/toolbox/FContainer.java index b7b85529963..2a747c9dd1d 100644 --- a/forge-gui-mobile/src/forge/toolbox/FContainer.java +++ b/forge-gui-mobile/src/forge/toolbox/FContainer.java @@ -23,7 +23,6 @@ public abstract class FContainer extends FDisplayObject { public void clear() { children.clear(); - ((ArrayList) children).trimToSize(); } public int indexOf(FDisplayObject child) { From 91241ee53cc86c52eb72beeb505cb0be334eb426 Mon Sep 17 00:00:00 2001 From: Leandro Doctors Date: Tue, 26 Aug 2025 12:53:37 +0200 Subject: [PATCH 019/355] clean up: remove obsolete GitLab templates The project moved to GitHub almost a year ago. Having duplicated, unmaintained templates will generate problems in the future. If needed, they can always be retrieved from the commit history. --- .gitlab/issue_templates/Bug.md | 33 ------------------------------ .gitlab/issue_templates/Feature.md | 15 -------------- 2 files changed, 48 deletions(-) delete mode 100644 .gitlab/issue_templates/Bug.md delete mode 100644 .gitlab/issue_templates/Feature.md diff --git a/.gitlab/issue_templates/Bug.md b/.gitlab/issue_templates/Bug.md deleted file mode 100644 index c2804f08ab3..00000000000 --- a/.gitlab/issue_templates/Bug.md +++ /dev/null @@ -1,33 +0,0 @@ -Summary - -(Summarize the bug encountered concisely) - - -Steps to reproduce - -(How one can reproduce the issue - this is very important. Specific cards and specific actions especially) - - -Which version of Forge are you on (Release, Snapshot? Desktop, Android?) - - -What is the current bug behavior? - -(What actually happens) - - -What is the expected correct behavior? - -(What you should see instead) - - -Relevant logs and/or screenshots - -(Paste/Attach your game.log from the crash - please use code blocks (```)) Also, provide screenshots of the current state. - - -Possible fixes - -(If you can, link to the line of code that might be responsible for the problem) - -/label ~needs-investigation \ No newline at end of file diff --git a/.gitlab/issue_templates/Feature.md b/.gitlab/issue_templates/Feature.md deleted file mode 100644 index 712f6a75065..00000000000 --- a/.gitlab/issue_templates/Feature.md +++ /dev/null @@ -1,15 +0,0 @@ -Summary - -(Summarize the feature you wish concisely) - - -Example screenshots - -(If this is a UI change, please provide an example screenshot of how this feature might work) - - -Feature type - -(Where in Forge does this belong? e.g. Quest Mode, Deck Editor, Limited, Constructed, etc.) - -/label ~feature request \ No newline at end of file From c27a9d136f5d6f739d75d6880fd04fbd5f48f4a9 Mon Sep 17 00:00:00 2001 From: shenshinoman Date: Fri, 8 Aug 2025 16:36:17 -0400 Subject: [PATCH 020/355] Expanding my Innistrad further. new enemies. New maps. Second biome is partially populated. Everything is contained to innistrad plane, so should have no impact on the main game outside that plane. --- .../decks/standard/INN/inn_peasant_easy.dck | 33 ++ .../decks/standard/INN/inn_scarecrow_easy.dck | 30 ++ .../decks/standard/INN/inn_zombie_easy.dck | 28 ++ .../Innistrad/inn_approaches/dark_forest.tmx | 357 ++++++++++++++++++ .../davriels_mansion_dungeon.tmx | 329 ---------------- .../main_story/approaches/davirels_forest.tmx | 124 ++++++ .../approaches}/davriels_mansion.tmx | 327 ++++++++-------- .../approaches}/davriels_mansion_2.tmx | 269 +++++++------ .../approaches/davriels_mansion_dungeon.tmx | 226 +++++++++++ .../main_story/approaches/tacenda.tmx | 124 ++++++ .../Innistrad/towns/inn__gavony_parish.tmx | 150 ++++++++ .../maps/map/Innistrad/towns/inn_abbey.tmx | 128 +++++++ .../Innistrad/towns/inn_gavony_chapelry.tmx | 129 +++++++ .../Innistrad/maps/tileset/buildings.png | Bin 240599 -> 232481 bytes .../Innistrad/maps/tileset/buildings.xcf | Bin 815977 -> 740743 bytes .../maps/tileset/inn_buildings.atlas | 11 +- .../Innistrad/maps/tileset/inn_main.tsx | 288 ++++++++++++++ .../world/biomes/inn_approaches.json | 5 +- .../Innistrad/world/biomes/inn_gavony.json | 5 + .../adventure/Innistrad/world/enemies.json | 160 ++++++++ .../Innistrad/world/points_of_interest.json | 65 +++- 21 files changed, 2154 insertions(+), 634 deletions(-) create mode 100644 forge-gui/res/adventure/Innistrad/decks/standard/INN/inn_peasant_easy.dck create mode 100644 forge-gui/res/adventure/Innistrad/decks/standard/INN/inn_scarecrow_easy.dck create mode 100644 forge-gui/res/adventure/Innistrad/decks/standard/INN/inn_zombie_easy.dck create mode 100644 forge-gui/res/adventure/Innistrad/maps/map/Innistrad/inn_approaches/dark_forest.tmx delete mode 100644 forge-gui/res/adventure/Innistrad/maps/map/Innistrad/inn_approaches/davriels_mansion_dungeon.tmx create mode 100644 forge-gui/res/adventure/Innistrad/maps/map/Innistrad/main_story/approaches/davirels_forest.tmx rename forge-gui/res/adventure/Innistrad/maps/map/Innistrad/{inn_approaches => main_story/approaches}/davriels_mansion.tmx (62%) rename forge-gui/res/adventure/Innistrad/maps/map/Innistrad/{inn_approaches => main_story/approaches}/davriels_mansion_2.tmx (64%) create mode 100644 forge-gui/res/adventure/Innistrad/maps/map/Innistrad/main_story/approaches/davriels_mansion_dungeon.tmx create mode 100644 forge-gui/res/adventure/Innistrad/maps/map/Innistrad/main_story/approaches/tacenda.tmx create mode 100644 forge-gui/res/adventure/Innistrad/maps/map/Innistrad/towns/inn__gavony_parish.tmx create mode 100644 forge-gui/res/adventure/Innistrad/maps/map/Innistrad/towns/inn_abbey.tmx create mode 100644 forge-gui/res/adventure/Innistrad/maps/map/Innistrad/towns/inn_gavony_chapelry.tmx diff --git a/forge-gui/res/adventure/Innistrad/decks/standard/INN/inn_peasant_easy.dck b/forge-gui/res/adventure/Innistrad/decks/standard/INN/inn_peasant_easy.dck new file mode 100644 index 00000000000..f1d9c987a53 --- /dev/null +++ b/forge-gui/res/adventure/Innistrad/decks/standard/INN/inn_peasant_easy.dck @@ -0,0 +1,33 @@ +[metadata] +Name=INN_peasant_easy +[Avatar] + +[Main] +2 Angel's Mercy|AVR|1 +3 Ambitious Farmhand|MID|1 +2 Beloved Beggar|MID|1 +2 Berieved Survivor|MID|1 +2 Doomed Traveler|ISD|1 +2 Bar the Door|DKA|1 +2 Gather the Townsfolk|DKA|1 +2 Gavony Ironwright|DKA|1 +2 Lunarch Veteran|MID|1 +2 Slayer of the Wicked|ISD|1 +4 Unruly Mob|ISD|1 +12 Plains|ISD|3 +7 Plains|ISD|2 +5 Plains|ISD|3 +2 Village Bell-Ringer|ISD|1 +3 Zealous Strike|AVR|1 +3 Homestead Courage|MID|1 +3 Sharpened Pitchfork|ISD|1 +[Sideboard] + +[Planes] + +[Schemes] + +[Conspiracy] + +[Dungeon] + diff --git a/forge-gui/res/adventure/Innistrad/decks/standard/INN/inn_scarecrow_easy.dck b/forge-gui/res/adventure/Innistrad/decks/standard/INN/inn_scarecrow_easy.dck new file mode 100644 index 00000000000..6f4ab30d8f9 --- /dev/null +++ b/forge-gui/res/adventure/Innistrad/decks/standard/INN/inn_scarecrow_easy.dck @@ -0,0 +1,30 @@ +[metadata] +Name=INN_scarecrow_easy +[Avatar] + +[Main] +2 Crossroads Candleguide|MID|1 +4 Field Creeper|EMN|1 +1 Geist-Fueled Scarecrow|EMN|1 +3 Harvest Hand|SOI|1 +2 One-Eyed Scarecrow|ISD|1 +1 Scarecrone|JMP|1 +2 Traveler's Amulet|ISD|1 +3 Scarecrow|ME4|1 +2 Wild-Field Scarecrow|SOI|1 +2 Jack-o'-Lantern|MID|1 +2 Wicker Witch|SOI|1 +5 Island|ISD|2 +5 Mountain|ISD|2 +5 Swamp|ISD|2 +5 Plains|ISD|2 +[Sideboard] + +[Planes] + +[Schemes] + +[Conspiracy] + +[Dungeon] + diff --git a/forge-gui/res/adventure/Innistrad/decks/standard/INN/inn_zombie_easy.dck b/forge-gui/res/adventure/Innistrad/decks/standard/INN/inn_zombie_easy.dck new file mode 100644 index 00000000000..db75eaa37d5 --- /dev/null +++ b/forge-gui/res/adventure/Innistrad/decks/standard/INN/inn_zombie_easy.dck @@ -0,0 +1,28 @@ +[metadata] +Name=INN_zombie_easy +[Avatar] + +[Main] +2 Crawl from the Cellar|MID|1 +3 Hobbling Zombie|MID|1 +2 Diregraf Ghoul|ISD|1 +2 Gravecrawler|DKA|1 +2 Hunted Ghoul|AVR|1 +2 No Way Out|MID|1 +2 Rotten Reunion|MID|1 +2 Walking Corpse|ISD|1 +2 Shamble Back|SOI|1 +2 Sightless Ghoul|DKA|1 +2 Rancid Rats|SOI|1 +10 Swamp|ISD|3 +7 Swamp|ISD|2 +[Sideboard] + +[Planes] + +[Schemes] + +[Conspiracy] + +[Dungeon] + diff --git a/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/inn_approaches/dark_forest.tmx b/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/inn_approaches/dark_forest.tmx new file mode 100644 index 00000000000..aacd7ba49e6 --- /dev/null +++ b/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/inn_approaches/dark_forest.tmx @@ -0,0 +1,357 @@ + + + + + + +2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374, +2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374, +2374,2374,1259,1259,1259,1259,1259,2515,2516,2516,2517,1259,2357,2678,2518,2673,2674,2514,2678,2676,2359,1259,1259,2357,2359,1259,2357,2358,2359,2357,2359,2356,1259,1259,2374,2374, +2374,2374,2358,2358,2359,1259,2357,2513,2362,2360,2514,2358,2678,2516,2518,1259,1259,2515,2516,2360,2675,1259,1259,2673,2672,2358,2678,2516,2676,2671,2675,1259,1259,1259,2374,2374, +2374,2374,2516,2360,2672,2358,2671,2675,2673,2672,2513,2674,2361,2362,2676,2359,1259,2673,2674,2675,1259,1259,1259,1259,2515,2516,2516,2516,2360,2514,2359,1259,1259,1259,2374,2374, +2374,2374,2516,2517,2515,2516,2517,1259,1259,2515,2517,1259,1259,2673,2674,2672,2359,1259,1259,2357,2358,2359,1259,2357,2513,2674,2362,2516,2517,2673,2514,2358,2677,2677,2374,2374, +2374,2374,2516,2517,2673,2674,2675,1259,1259,2673,2675,1259,1259,1259,1259,2673,2514,2358,2358,2678,2516,2676,2359,2673,2675,1259,2673,2674,2672,2359,2515,2516,2360,2361,2374,2374, +2374,2374,2360,2675,1259,2357,2359,1259,2357,2358,2359,2357,2359,2356,1259,1259,2515,2516,2516,2516,2360,2361,2675,2357,2358,2358,2358,2358,2513,2514,2678,2516,2517,1259,2374,2374, +2374,2374,2675,1259,1259,2673,2672,2358,2678,2516,2676,2671,2675,1259,1259,1259,2515,2360,2361,2362,2518,1259,1259,2515,2516,2516,2516,2516,2676,2513,2361,2361,2672,2677,2374,2374, +2374,2374,1259,1259,2356,1259,2515,2516,2516,2516,2360,2514,2359,1259,1259,1259,2673,2672,2359,2673,2514,2359,1259,2515,2516,2516,2360,2361,2674,2675,1259,1259,2673,2362,2374,2374, +2374,2374,1259,1259,1259,2357,2513,2674,2362,2516,2517,2673,2514,2358,2359,1259,2357,2671,2675,1259,2520,2518,1259,2673,2674,2674,2514,2677,2677,2359,1259,1259,1259,2520,2374,2374, +2374,2374,2359,1259,1259,2673,2675,1259,2673,2674,2672,2359,2515,2516,2676,2677,2513,2675,1259,1259,2520,2676,2677,2359,1259,1259,2515,2516,2516,2676,2359,1259,1259,2673,2374,2374, +2374,2374,2676,2358,2359,1259,1259,1259,1259,1259,2673,2514,2678,2516,2516,2516,2517,2357,2358,2358,2678,2516,2360,2675,1259,1259,2673,2362,2516,2516,2517,1259,1259,1259,2374,2374, +2374,2374,2516,2360,2675,1259,1259,2357,2359,1259,1259,2520,2516,2516,2516,2360,2675,2673,2362,2360,2361,2674,2675,1259,1259,1259,1259,2515,2516,2360,2675,1259,1259,2357,2374,2374, +2374,2374,2516,2517,2357,2677,2677,2671,2675,2357,2359,2673,2674,2362,2360,2514,2677,2359,2673,2672,2359,1259,1259,2357,2358,2677,2359,2515,2516,2517,2357,2677,2677,2671,2374,2374, +2374,2374,2674,2675,2515,2516,2516,2518,2357,2678,2517,1259,1259,2673,2672,2671,2674,2675,1259,2673,2675,1259,2357,2678,2516,2360,2675,2673,2674,2675,2515,2516,2516,2518,2374,2374, +2374,2374,1259,1259,2515,2516,2516,2518,2515,2360,2675,1259,2356,1259,2673,2514,2358,2359,1259,1259,1259,2357,2671,2361,2361,2675,1259,1259,1259,1259,2515,2516,2516,2518,2374,2374, +2374,2374,1259,1259,2673,2362,2360,2672,2513,2675,2357,2359,1259,1259,2357,2671,2674,2675,1259,1259,1259,2515,2676,2677,2677,2359,1259,1259,1259,1259,2673,2362,2360,2672,2374,2374, +2374,2374,2356,1259,1259,2673,2675,2673,2514,2358,2678,2517,1259,1259,2515,2518,1259,1259,2357,2359,1259,2673,2361,2362,2516,2517,1259,1259,2356,1259,1259,2673,2675,2673,2374,2374, +2374,2374,2358,2358,2359,1259,1259,1259,2673,2362,2516,2517,1259,2357,2678,2676,2359,1259,2673,2675,1259,1259,1259,2520,2516,2517,1259,1259,2358,2358,2359,1259,1259,1259,2374,2374, +2374,2374,2516,2516,2516,2359,1259,1259,2357,2678,2516,2517,1259,2515,2516,2516,2517,1259,1259,1259,2357,2359,1259,2673,2674,2675,1259,1259,2516,2516,2516,2359,1259,1259,2374,2374, +2374,2374,2516,2516,2516,2672,2358,2359,2515,2516,2516,2517,1259,2673,2674,2674,2675,1259,2357,2358,2678,2517,1259,1259,1259,1259,1259,1259,2516,2516,2516,2672,2358,2359,2374,2374, +2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374, +2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1236,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1394,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1394,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1394,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1394,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,1237,1555,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,1394,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,1080,1397,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,1394,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,1553,1080,1080,1080,1239,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,1552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,3629,0,0,0,0,0,0,0,0,0,0,0,235,0,0,0,0,4082,0,0,0,0,0,0,0,0,77,0,0,0,0,0, +0,0,0,3450,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4244,0,0,0,0,70,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4562,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,3306,0,0,0,0,0,0,231,0,5364,0,199,0,0,0,0,231,0,0,7537,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,41,0,0,0,0,63,0,0,0,4399,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,4713,4406,0,4557,0,0,0,0,0,0,0,0,0,0,217,0,0,0,0,0,11802,0,11803,0,0,0,0, +0,0,0,0,0,0,0,0,0,4724,4717,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,0, +0,0,0,0,217,0,0,0,0,216,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,4248,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,0,0, +0,0,0,0,0,0,0,3307,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,0,0,0,0,0,0, +0,0,0,0,59,0,0,0,0,0,0,0,0,0,215,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3451,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,7538,0,0,0,0,0,0,0,0,0,0,0,0,0,218,0,0,0,0,0,0,59,0,0,0,0,0, +0,0,0,59,0,0,0,0,0,0,0,59,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,218,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,231,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,59,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,217,0,0,73,0,0,0,0,0,217,0,0,0,0,0,0,0,0,0,0,0,0,220,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3930,3934,3932,0,0,0,58,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,0,0,0,3450,3925,4244,4250,4245,3935,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3925,4240,4085,3933,4244,4251,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,4084,4087,4243,3630,3628,3623,3470,3628,3318,4397,3316,3623,3312,3627,4724,4719,3627,3628,4718,4722,4090,4083,4092,4244,4251,4399,4714,4561,4724,4719,4402,4558,0,0, +0,0,4084,4093,0,0,3629,3633,3634,3629,3631,0,3474,3475,3467,3622,4406,4720,4719,3623,4403,4406,4245,4240,4092,4093,0,4720,4724,4719,4406,4720,4560,4558,0,0, +0,0,4081,4251,0,0,0,0,0,0,4404,4409,3629,3465,3464,4556,4564,0,4557,3464,3631,4564,4241,4242,4247,4251,4404,4406,0,4720,4719,4406,4565,3470,0,0, +0,0,4093,0,0,4404,4406,0,0,4404,4718,4722,0,3466,4567,4720,4722,0,3629,3628,4718,4722,0,3308,3315,4399,4718,4719,4405,4406,4720,4722,4565,3473,0,0, +0,0,4251,0,0,4565,4403,4406,4404,4718,4722,0,0,3627,4722,4404,4406,0,0,3624,3631,0,0,4720,4719,4402,3476,4720,4560,4567,0,4404,4714,3312,0,0, +0,0,3924,3924,0,4720,4721,4719,4714,4564,0,0,0,4559,4404,3627,4719,3314,3315,0,3313,3315,0,0,4715,4560,3476,0,4720,4725,0,4562,4555,4556,0,0, +0,0,3933,3935,0,0,0,4402,4555,4722,4398,0,4720,4719,4714,3468,3629,3630,3631,3313,3627,3628,3318,0,0,3629,3631,4404,4406,0,0,4720,4719,3311,0,0, +0,0,4081,4248,0,4404,4714,4558,4564,0,3308,3315,0,4720,4724,3628,3315,0,3313,3623,3312,3627,3631,0,4404,3315,0,4562,4403,4405,4406,0,4720,4560,0,0, +0,0,3315,0,0,4562,4558,4561,4717,0,3624,3628,0,3313,3315,3629,3631,3313,3627,3633,3633,3628,3315,4404,4714,3312,3315,4720,4721,4560,4403,4405,4406,4565,0,0, +0,0,3476,0,0,4715,4716,4722,0,0,0,3629,3628,3627,3631,0,3313,3627,3631,0,0,3629,3631,4565,4566,3470,3631,0,0,4720,4556,4561,4722,4565,0,0, +0,0,3312,3315,0,0,0,3316,3315,0,3308,3315,3629,3628,4406,0,4720,4719,3315,0,3313,3317,3315,4720,3469,4559,4404,4401,0,4404,4718,4725,0,4723,0,0, +0,0,3467,3468,0,3451,3316,3623,3312,3314,3627,3628,3315,3466,4713,4406,0,4720,4719,3317,3627,3465,3473,0,3629,3628,4714,4559,4404,4402,4567,0,0,4405,0,0, +0,0,3627,3631,0,0,3629,3633,3465,3472,3473,3629,3631,3474,3475,4564,0,0,4562,4558,3476,3629,3631,0,0,3471,4561,4719,4718,4724,4722,0,4565,3470,0,0, +0,0,3634,0,3313,3309,3315,0,3629,3625,3631,3313,3317,3311,3470,4722,0,4404,4718,4716,3631,0,0,0,3313,3627,4719,4718,4722,4404,4406,4404,3627,3628,0,0, +0,0,0,0,3632,3465,3622,3315,0,0,3313,3627,3630,3630,3628,4406,0,4723,4725,0,0,0,0,0,3471,3476,4720,4719,4406,4565,4567,4565,3622,3627,0,0, +0,0,3315,0,0,3629,3633,3628,3314,3309,3627,3631,0,0,3629,4719,4406,0,0,0,3313,3315,0,0,3632,3634,0,4720,4722,4720,4719,4718,3465,3473,0,0, +0,0,3476,0,3313,3315,0,3629,3633,3465,3622,3317,3318,0,0,4720,4722,4404,4401,4404,3627,3631,0,3313,3318,0,0,0,0,0,4720,4722,3632,3465,0,0, +0,0,3312,3317,3627,3631,0,3313,3315,3629,3633,3625,3631,3313,3315,0,4404,4718,4719,4402,3473,0,3313,3311,3476,0,0,0,0,0,0,0,3313,3623,0,0, +0,0,3469,3470,3628,3315,3313,3627,3628,3317,3315,0,3313,3623,3622,3314,4718,4719,4718,4560,3476,3313,3311,3470,3631,0,0,0,0,0,0,3313,3627,3465,0,0, +0,0,3627,3628,3623,3312,3627,3628,3627,3465,3622,3309,3627,3465,3467,3467,4403,4718,4719,4718,3628,3627,3469,3312,3315,0,0,0,0,0,3307,3624,3628,3315,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + + [ + { + "type": "gold", + "count": 20, + "addMaxCount": 50 + } +] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [ + { + "type": "shards", + "count": 1, + "addMaxCount": 5 + } +] + + + + + + + + + + + + + + + + + + + + [ + { + "type": "shards", + "count": 1, + "addMaxCount": 5 + } +] + + + + + [ + { + "type": "gold", + "count": 120, + "addMaxCount": 40 + } +] + + + + + [ + { + "type": "gold", + "count": 50, + "addMaxCount": 40 + } +] + + + + + + + + + + [ + { + "editions": [ "ISD","DKA","SOI" ], + "type": "card", + "count": 4, + "rarity": [ "Common" ] + }, + { + "editions": [ "ISD","DKA","SOI" ], + "type": "card", + "count": 2, + "rarity": [ "Uncommon" ] + }, + { + "editions": [ "ISD","DKA","SOI" ], + "type": "card", + "count": 1, + "rarity": [ "Rare", "Mythic Rare", "Uncommon" ] + } +] + + + + + + [ + { + "type": "gold", + "count": 15, + "addMaxCount": 40 + } +] + + + + + [ + { + "type": "gold", + "count": 15, + "addMaxCount": 40 + } +] + + + + + [ + { + "type": "gold", + "count": 1, + "addMaxCount": 20 + } +] + + + + + + + + + + + + + + + + + + + + diff --git a/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/inn_approaches/davriels_mansion_dungeon.tmx b/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/inn_approaches/davriels_mansion_dungeon.tmx deleted file mode 100644 index 009f446d6a8..00000000000 --- a/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/inn_approaches/davriels_mansion_dungeon.tmx +++ /dev/null @@ -1,329 +0,0 @@ - - - - - - - - - -7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621, -7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7465,7466,7466,7466,7466,7466,7466,7466,7466,7466,7466,7466,7466,7467,7621,7621,7621,7621, -7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7623,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625,7621,7621,7621,7621, -7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7623,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625,7621,7621,7621,7621, -7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7623,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625,7621,7621,7621,7621, -7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7623,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625,7621,7621,7621,7621, -7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7623,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625,7621,7621,7621,7621, -7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7465,7466,7466,7466,7466,7466,7466,7780,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7778,7467,7621,7621,7621, -7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7622,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625,7621,7621,7621, -7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7622,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625,7621,7621,7621, -7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7622,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625,7621,7621,7621, -7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7622,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625,7621,7621,7621, -7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7622,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625,7621,7621,7621, -7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7622,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625,7621,7621,7621, -7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7622,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625,7621,7621,7621, -7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7622,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625,7621,7621,7621, -7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7622,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625,7621,7621,7621, -7621,7621,7465,7466,7466,7466,7466,7466,7466,7466,7780,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625,7621,7621,7621, -7621,7621,7623,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625,7621,7621,7621, -7621,7621,7623,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625,7621,7621,7621, -7621,7621,7623,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625,7621,7621,7621, -7621,7621,7623,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7778,7466,7466,7467, -7621,7621,7623,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625, -7621,7621,7623,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625, -7621,7621,7781,7782,7463,7463,7464,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625, -7621,7621,7621,7621,7621,7621,7623,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625, -7621,7621,7621,7621,7621,7621,7623,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625, -7621,7621,7621,7621,7621,7621,7623,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625, -7621,7621,7621,7621,7621,7621,7623,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7462,7782,7782,7783, -7621,7621,7621,7621,7621,7621,7623,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625,7621,7621,7621, -7621,7621,7621,7621,7621,7621,7623,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625,7621,7621,7621, -7621,7621,7621,7621,7621,7621,7623,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7462,7782,7782,7782,7782,7782,7782,7782,7782,7782,7783,7621,7621,7621, -7621,7621,7621,7621,7621,7621,7623,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621, -7621,7621,7621,7621,7621,7621,7781,7782,7782,7782,7782,7782,7782,7782,7782,7782,7782,7782,7782,7782,7782,7783,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621, -7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621, -7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621, -7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621, -7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621, -7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621, -7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621 - - - - -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19937,19938,19938,19938,19938,19938,19938,19938,19938,19938,19938,19938,19938,19938,19938,19936,19625,19935, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5253,19937,19777,19784, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7764,7765,7765,7765,7765,7765,7765,7765,7765,7765,7765,7766,0,0,0,19937,19942, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,8988,0,0,18673, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,6181,6181,0,19624,19625, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,19935,19777, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,19939,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8235,8239,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8240,8236,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,7764,7765,7765,7765,7765,7765,8239,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,8235,8239,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,0, -0,0,0,8235,7765,7765,7765,7765,7765,7765,8239,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,0, -0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,0, -0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,0, -0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8240,8236,0,0,18688, -0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8240,7765,7766,18688, -0,0,0,8080,8081,8081,8397,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,18688, -0,0,0,0,0,0,8393,8397,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,18688, -0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,18688, -0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,18688, -0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8398,8081,8082,18688, -0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8398,8394,0,0,18688, -0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,18688, -0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8398,8081,8081,8081,8081,8081,8081,8081,8081,8394,0,0,0,18688, -0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8398,8394,0,0,0,0,0,0,0,0,0,0,0,0,18688, -0,0,0,0,0,0,0,8393,8081,8081,8081,8081,8081,8397,8081,8081,8398,8081,8081,8081,8082,0,0,0,0,0,0,0,0,0,0,0,0,0,18688, -0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7924,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18688, -0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,6180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18844, -0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7924,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7924,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7924,0,0,0,0,0,0,0,0,0,0,19621,19623,0,19614,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7924,19614,0,19621,19626,0,0,19614,0,0,19615,19937,19936,19623,0,18676,18672,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,19621,7922,7923,7923,7924,19615,19621,19931,19784,0,0,0,0,0,0,0,19937,19936,19622,19623,19621,19622,19623 - - - - -0,0,0,0,0,18682,18690,18523,18524,18841,18842,18843,18530,18844,18850,18842,18850,18851,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,18846,18845,18535,0,0,0,0,18849,18848,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,18846,18848,18530,18532,0,0,0,0,0,0,0,0,0,11110,11111,11111,11111,11111,11111,11111,11111,11111,11112,0,0,6803,6803,0,0, -18530,18844,18848,0,18523,0,0,0,18688,18693,0,18530,18527,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,10623,0,0,0,0, -18682,18693,18530,18526,18844,18847,18845,18532,18846,18845,18531,18844,18845,18535,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11431,11434,0,0,0,0,0, -18844,18848,18683,18687,18845,18532,18846,18851,0,18846,18682,18690,18849,18851,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0,0, -18690,0,18849,18848,18846,18845,18532,0,0,0,0,0,0,0,0,0,0,0,11110,11587,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,22299,0, -18851,0,0,18530,18532,18846,18848,0,0,0,0,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11584,11112,0,0,0,0,0, -18845,18531,18532,18846,18845,18532,0,0,0,0,0,0,11110,11111,11111,11111,11111,11111,11587,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, -18844,18686,18693,0,18846,18845,18535,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, -18693,18846,18682,18529,18532,18691,18693,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, -18845,18532,18846,18682,18693,18846,18851,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, -18528,18685,18530,18844,18848,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, -18681,18848,18846,18848,0,0,18524,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, -18690,0,0,0,0,18523,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, -18693,0,0,0,0,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, -18690,0,0,0,0,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, -18693,0,0,0,0,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, -18693,0,0,0,11110,11111,11111,11111,11111,11111,11111,11111,11587,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, -18690,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, -18693,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,7913,18530, -18690,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,22456, -18693,0,0,0,11426,11427,11427,11586,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11584,11111,11111,11112,0,22456, -18693,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,22456, -18693,0,0,0,0,0,0,11426,11586,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,22456, -18690,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,22456, -18690,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,22456, -18693,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11585,11427,11428,0,22456, -18690,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,22456, -18693,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11585,11427,11427,11427,11427,11427,11427,11427,11427,11427,11428,0,0,0,22456, -18693,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0,0,0,0,0,0,0,0,0,22456, -18690,0,0,0,0,0,0,0,11426,11427,11427,11427,11427,11427,11429,11429,11427,11427,11427,11427,11428,0,0,0,0,0,0,0,0,0,0,0,0,0,22456, -18690,0,0,0,0,0,0,0,0,0,0,0,0,0,11432,11432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22456, -18693,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22456, -18693,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8238,6181,6181,6181,6181,6181,6181,6181,6181,0,0,0,0,0,0,0,0,0,22456, -18690,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18690, -18693,0,0,0,0,0,0,0,22297,22139,22296,22295,22298,0,0,0,0,22453,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18530,18528,18529, -18845,18532,0,0,0,0,0,0,18671,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18849,18847,18847, -18840,18839,18532,0,0,0,18677,0,0,19621,19625,19623,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -18684,18684,18690,18523,18672,18524,0,18676,18673,19779,19772,19936,19622,19623,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - - - - -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20594,20595,20592,20595,20592,20595,20595,20596,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20752,3001,20906,0,20752,0,3003,20754,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20752,0,0,0,20914,0,0,20754,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20749,20911,20593,0,20749,20595,20911,20751,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20752,0,20914,0,20914,0,0,20754,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20594,20595,20595,20595,20596,20753,20753,20753,20753,20752,3002,20752,0,20752,3002,0,20754,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20752,0,0,0,20910,20911,20911,20911,20595,20750,20911,20909,0,20749,20911,20911,20751,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20752,0,0,0,0,0,0,0,2428,20906,0,0,0,20914,0,0,20754,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20752,0,0,0,20590,0,0,0,0,0,0,0,0,20752,0,3001,20754,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20752,0,0,0,20754,0,0,0,0,20590,0,0,0,20752,0,0,20754,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20752,0,0,12644,20754,0,0,20594,20595,20908,20595,20595,20595,20908,20911,20911,20912,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20910,20911,20592,20911,20912,0,21065,20751,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20752,11761,0,0,0,20754,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20752,0,0,0,0,20754,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20752,0,0,0,0,20754,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20752,0,0,0,0,20754,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20752,0,0,0,0,20754,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20910,20911,20911,20911,20911,20912,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753, -20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753 - - - - - - - -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20753,20753,20753,0,0,0,0,0,0,0,0,0,0,20753,20753,20753,20753,20753,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20753,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20753,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20753,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20753,0,0, -0,0,0,0,0,0,0,20753,20753,20753,20753,20753,20753,20753,20753,20753,20753,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20753,0,20753, -0,0,0,0,0,0,0,20753,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20753, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20753, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20753, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20753, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20753, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20753, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20753, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20753, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20753, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20753, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20753, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20753, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20753, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20753, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20753,20753,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - - - - - - - - - - - - - - - - - [ - { - "type": "gold", - "count": 80, - "addMaxCount": 50 - } -] - - - - - [ - { - "type": "gold", - "count": 10, - "addMaxCount": 60 - } -] - - - - - - - - - - - - - - - - - - - - - - - - -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,11280,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11280,0,2364,0,11280,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11603,11280,0,11605,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11763,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11606,11607,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11764,11765,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11615,11616,11617,11618,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11773,11774,11775,11776,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - - - diff --git a/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/main_story/approaches/davirels_forest.tmx b/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/main_story/approaches/davirels_forest.tmx new file mode 100644 index 00000000000..41921a78bdd --- /dev/null +++ b/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/main_story/approaches/davirels_forest.tmx @@ -0,0 +1,124 @@ + + + + + +2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374, +2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374, +2374,2374,1259,1259,1259,1259,1259,2515,2516,2516,2517,1259,2357,2678,2518,2673,2674,2514,2678,2676,2359,1259,1259,2357,2359,1259,2357,2358,2359,2357,2359,2356,1259,1259,2374,2374, +2374,2374,2358,2358,2359,1259,2357,2513,2362,2360,2514,2358,2678,2516,2518,1259,1259,2515,2516,2360,2675,1259,1259,2673,2672,2358,2678,2516,2676,2671,2675,1259,1259,1259,2374,2374, +2374,2374,2516,2360,2672,2358,2671,2675,2673,2672,2513,2674,2361,2362,2676,2359,1259,2673,2674,2675,1259,1259,1259,1259,2515,2516,2516,2516,2360,2514,2359,1259,1259,1259,2374,2374, +2374,2374,2516,2517,2515,2516,2517,1259,1259,2515,2517,1259,1259,2673,2674,2672,2359,1259,1259,2357,2358,2359,1259,2357,2513,2674,2362,2516,2517,2673,2514,2358,2677,2677,2374,2374, +2374,2374,2516,2517,2673,2674,2675,1259,1259,2673,2675,1259,1259,1259,1259,2673,2514,2358,2358,2678,2516,2676,2359,2673,2675,1259,2673,2674,2672,2359,2515,2516,2360,2361,2374,2374, +2374,2374,2360,2675,1259,2357,2359,1259,2357,2358,2359,2357,2359,2356,1259,1259,2515,2516,2516,2516,2360,2361,2675,2357,2358,2358,2358,2358,2513,2514,2678,2516,2517,1259,2374,2374, +2374,2374,2675,1259,1259,2673,2672,2358,2678,2516,2676,2671,2675,1259,1259,1259,2515,2360,2361,2362,2518,1259,1259,2515,2516,2516,2516,2516,2676,2513,2361,2361,2672,2677,2374,2374, +2374,2374,1259,1259,2356,1259,2515,2516,2516,2516,2360,2514,2359,1259,1259,1259,2673,2672,2359,2673,2514,2359,1259,2515,2516,2516,2360,2361,2674,2675,1259,1259,2673,2362,2374,2374, +2374,2374,1259,1259,1259,2357,2513,2674,2362,2516,2517,2673,2514,2358,2359,1259,2357,2671,2675,1259,2520,2518,1259,2673,2674,2674,2514,2677,2677,2359,1259,1259,1259,2520,2374,2374, +2374,2374,2359,1259,1259,2673,2675,1259,2673,2674,2672,2359,2515,2516,2676,2677,2513,2675,1259,1259,2520,2676,2677,2359,1259,1259,2515,2516,2516,2676,2359,1259,1259,2673,2374,2374, +2374,2374,2676,2358,2359,1259,1259,1259,1259,1259,2673,2514,2678,2516,2516,2516,2517,2357,2358,2358,2678,2516,2360,2675,1259,1259,2673,2362,2516,2516,2517,1259,1259,1259,2374,2374, +2374,2374,2516,2360,2675,1259,1259,2357,2359,1259,1259,2520,2516,2516,2516,2360,2675,2673,2362,2360,2361,2674,2675,1259,1259,1259,1259,2515,2516,2360,2675,1259,1259,2357,2374,2374, +2374,2374,2516,2517,2357,2677,2677,2671,2675,2357,2359,2673,2674,2362,2360,2514,2677,2359,2673,2672,2359,1259,1259,2357,2358,2677,2359,2515,2516,2517,2357,2677,2677,2671,2374,2374, +2374,2374,2674,2675,2515,2516,2516,2518,2357,2678,2517,1259,1259,2673,2672,2671,2674,2675,1259,2673,2675,1259,2357,2678,2516,2360,2675,2673,2674,2675,2515,2516,2516,2518,2374,2374, +2374,2374,1259,1259,2515,2516,2516,2518,2515,2360,2675,1259,2356,1259,2673,2514,2358,2359,1259,1259,1259,2357,2671,2361,2361,2675,1259,1259,1259,1259,2515,2516,2516,2518,2374,2374, +2374,2374,1259,1259,2673,2362,2360,2672,2513,2675,2357,2359,1259,1259,2357,2671,2674,2675,1259,1259,1259,2515,2676,2677,2677,2359,1259,1259,1259,1259,2673,2362,2360,2672,2374,2374, +2374,2374,2356,1259,1259,2673,2675,2673,2514,2358,2678,2517,1259,1259,2515,2518,1259,1259,2357,2359,1259,2673,2361,2362,2516,2517,1259,1259,2356,1259,1259,2673,2675,2673,2374,2374, +2374,2374,2358,2358,2359,1259,1259,1259,2673,2362,2516,2517,1259,2357,2678,2676,2359,1259,2673,2675,1259,1259,1259,2520,2516,2517,1259,1259,2358,2358,2359,1259,1259,1259,2374,2374, +2374,2374,2516,2516,2516,2359,1259,1259,2357,2678,2516,2517,1259,2515,2516,2516,2517,1259,1259,1259,2357,2359,1259,2673,2674,2675,1259,1259,2516,2516,2516,2359,1259,1259,2374,2374, +2374,2374,2516,2516,2516,2672,2358,2359,2515,2516,2516,2517,1259,2673,2674,2674,2675,1259,2357,2358,2678,2517,1259,1259,1259,1259,1259,1259,2516,2516,2516,2672,2358,2359,2374,2374, +2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374, +2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1236,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1394,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1394,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1394,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1394,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,1237,1555,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,1394,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,1080,1397,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,1394,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,1553,1080,1080,1080,1239,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,1552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,3629,0,0,0,0,0,0,0,0,0,0,0,235,0,0,0,0,4082,0,0,0,0,0,0,0,0,77,0,0,0,0,0, +0,0,0,3450,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4244,0,0,0,0,70,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4562,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,3306,0,0,0,0,0,0,231,0,0,0,199,0,0,0,0,231,0,0,7537,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,41,0,0,0,0,63,0,0,0,4399,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,4713,4406,0,4557,0,0,0,0,0,0,0,0,0,0,217,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,4724,4717,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,0, +0,0,0,0,217,0,0,0,0,216,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,4248,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,0,0, +0,0,0,0,0,0,0,3307,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,0,0,0,0,0,0, +0,0,0,0,59,0,0,0,0,0,0,0,0,0,215,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3451,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,7538,0,0,0,0,0,0,0,0,0,0,0,0,0,218,0,0,0,0,0,0,59,0,0,0,0,0, +0,0,0,59,0,0,0,0,0,0,0,59,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,218,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,231,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,59,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,217,0,0,73,0,0,0,0,0,217,0,0,0,0,0,0,0,0,0,0,0,0,220,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3930,3934,3932,0,0,0,58,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,0,0,0,3450,3925,4244,4250,4245,3935,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3925,4240,4085,3933,4244,4251,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,4084,4087,4243,3630,3628,3623,3470,3628,3318,4397,3316,3623,3312,3627,4724,4719,3627,3628,4718,4722,4090,4083,4092,4244,4251,4399,4714,4561,4724,4719,4402,4558,0,0, +0,0,4084,4093,0,0,3629,3633,3634,3629,3631,0,3474,3475,3467,3622,4406,4720,4719,3623,4403,4406,4245,4240,4092,4093,0,4720,4724,4719,4406,4720,4560,4558,0,0, +0,0,4081,4251,0,0,0,0,0,0,4404,4409,3629,3465,3464,4556,4564,0,4557,3464,3631,4564,4241,4242,4247,4251,4404,4406,0,4720,4719,4406,4565,3470,0,0, +0,0,4093,0,0,4404,4406,0,0,4404,4718,4722,0,3466,4567,4720,4722,0,3629,3628,4718,4722,0,3308,3315,4399,4718,4719,4405,4406,4720,4722,4565,3473,0,0, +0,0,4251,0,0,4565,4403,4406,4404,4718,4722,0,0,3627,4722,4404,4406,0,0,3624,3631,0,0,4720,4719,4402,3476,4720,4560,4567,0,4404,4714,3312,0,0, +0,0,3924,3924,0,4720,4721,4719,4714,4564,0,0,0,4559,4404,3627,4719,3314,3315,0,3313,3315,0,0,4715,4560,3476,0,4720,4725,0,4562,4555,4556,0,0, +0,0,3933,3935,0,0,0,4402,4555,4722,4398,0,4720,4719,4714,3468,3629,3630,3631,3313,3627,3628,3318,0,0,3629,3631,4404,4406,0,0,4720,4719,3311,0,0, +0,0,4081,4248,0,4404,4714,4558,4564,0,3308,3315,0,4720,4724,3628,3315,0,3313,3623,3312,3627,3631,0,4404,3315,0,4562,4403,4405,4406,0,4720,4560,0,0, +0,0,3315,0,0,4562,4558,4561,4717,0,3624,3628,0,3313,3315,3629,3631,3313,3627,3633,3633,3628,3315,4404,4714,3312,3315,4720,4721,4560,4403,4405,4406,4565,0,0, +0,0,3476,0,0,4715,4716,4722,0,0,0,3629,3628,3627,3631,0,3313,3627,3631,0,0,3629,3631,4565,4566,3470,3631,0,0,4720,4556,4561,4722,4565,0,0, +0,0,3312,3315,0,0,0,3316,3315,0,3308,3315,3629,3628,4406,0,4720,4719,3315,0,3313,3317,3315,4720,3469,4559,4404,4401,0,4404,4718,4725,0,4723,0,0, +0,0,3467,3468,0,3451,3316,3623,3312,3314,3627,3628,3315,3466,4713,4406,0,4720,4719,3317,3627,3465,3473,0,3629,3628,4714,4559,4404,4402,4567,0,0,4405,0,0, +0,0,3627,3631,0,0,3629,3633,3465,3472,3473,3629,3631,3474,3475,4564,0,0,4562,4558,3476,3629,3631,0,0,3471,4561,4719,4718,4724,4722,0,4565,3470,0,0, +0,0,3634,0,3313,3309,3315,0,3629,3625,3631,3313,3317,3311,3470,4722,0,4404,4718,4716,3631,0,0,0,3313,3627,4719,4718,4722,4404,4406,4404,3627,3628,0,0, +0,0,0,0,3632,3465,3622,3315,0,0,3313,3627,3630,3630,3628,4406,0,4723,4725,0,0,0,0,0,3471,3476,4720,4719,4406,4565,4567,4565,3622,3627,0,0, +0,0,3315,0,0,3629,3633,3628,3314,3309,3627,3631,0,0,3629,4719,4406,0,0,0,3313,3315,0,0,3632,3634,0,4720,4722,4720,4719,4718,3465,3473,0,0, +0,0,3476,0,3313,3315,0,3629,3633,3465,3622,3317,3318,0,0,4720,4722,4404,4401,4404,3627,3631,0,3313,3318,0,0,0,0,0,4720,4722,3632,3465,0,0, +0,0,3312,3317,3627,3631,0,3313,3315,3629,3633,3625,3631,3313,3315,0,4404,4718,4719,4402,3473,0,3313,3311,3476,0,0,0,0,0,0,0,3313,3623,0,0, +0,0,3469,3470,3628,3315,3313,3627,3628,3317,3315,0,3313,3623,3622,3314,4718,4719,4718,4560,3476,3313,3311,3470,3631,0,0,0,0,0,0,3313,3627,3465,0,0, +0,0,3627,3628,3623,3312,3627,3628,3627,3465,3622,3309,3627,3465,3467,3467,4403,4718,4719,4718,3628,3627,3469,3312,3315,0,0,0,0,0,0,3624,3628,3315,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + + + diff --git a/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/inn_approaches/davriels_mansion.tmx b/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/main_story/approaches/davriels_mansion.tmx similarity index 62% rename from forge-gui/res/adventure/Innistrad/maps/map/Innistrad/inn_approaches/davriels_mansion.tmx rename to forge-gui/res/adventure/Innistrad/maps/map/Innistrad/main_story/approaches/davriels_mansion.tmx index f84b9e721bd..3f8eee2d9ec 100644 --- a/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/inn_approaches/davriels_mansion.tmx +++ b/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/main_story/approaches/davriels_mansion.tmx @@ -1,10 +1,9 @@ - - - - - + + + + 7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621, @@ -51,13 +50,13 @@ -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19937,19938,19938,19938,19938,19938,19938,19938,19938,19938,19938,19938,19938,19938,19938,19936,19625,19935, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5253,19937,19777,19784, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7764,7765,7765,7765,7765,7765,7765,7765,7765,7765,7765,7766,0,0,0,19937,19942, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,8988,0,0,18673, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,6181,6181,0,19624,19625, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,19935,19777, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,19939,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9825,9826,9826,9826,9826,9826,9826,9826,9826,9826,9826,9826,9826,9826,9826,9824,9513,9823, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5253,9825,9665,9672, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7764,7765,7765,7765,7765,7765,7765,7765,7765,7765,7765,7766,0,0,0,9825,9830, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,8988,0,0,8561, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,6181,6181,0,9512,9513, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,9823,9665, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,9827,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8235,8239,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8240,8236,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,7764,7765,7765,7765,7765,7765,8239,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,0, @@ -72,113 +71,113 @@ 0,0,0,8235,7765,7765,7765,7765,7765,7765,8239,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,0, 0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,0, 0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,0, -0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8240,8236,0,0,18688, -0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8240,7765,7766,18688, -0,0,0,8080,8081,8081,8397,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,18688, -0,0,0,0,0,0,8393,8397,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,18688, -0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,18688, -0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,18688, -0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8398,8081,8082,18688, -0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8398,8394,0,0,18688, -0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,18688, -0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8398,8081,8081,8081,8081,8081,8081,8081,8081,8394,0,0,0,18688, -0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8398,8394,0,0,0,0,0,0,0,0,0,0,0,0,18688, -0,0,0,0,0,0,0,8393,8081,8081,8081,8081,8081,8397,8081,8081,8398,8081,8081,8081,8082,0,0,0,0,0,0,0,0,0,0,0,0,0,18688, -0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7924,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18688, -0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,6180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18844, +0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8240,8236,0,0,8576, +0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8240,7765,7766,8576, +0,0,0,8080,8081,8081,8397,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,8576, +0,0,0,0,0,0,8393,8397,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,8576, +0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,8576, +0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,8576, +0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8398,8081,8082,8576, +0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8398,8394,0,0,8576, +0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,8576, +0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8398,8081,8081,8081,8081,8081,8081,8081,8081,8394,0,0,0,8576, +0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8398,8394,0,0,0,0,0,0,0,0,0,0,0,0,8576, +0,0,0,0,0,0,0,8393,8081,8081,8081,8081,8081,8397,8081,8081,8398,8081,8081,8081,8082,0,0,0,0,0,0,0,0,0,0,0,0,0,8576, +0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7924,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8576, +0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,6180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8732, 0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7924,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7924,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7924,0,0,0,0,0,0,0,0,0,0,19621,19623,0,19614,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7924,19614,0,19621,19626,0,0,19614,0,0,19615,19937,19936,19623,0,18676,18672,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,19621,7922,7923,7923,7924,19615,19621,19931,19784,0,0,0,0,0,0,0,19937,19936,19622,19623,19621,19622,19623 +0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7924,0,0,0,0,0,0,0,0,0,0,9509,9511,0,9502,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7924,9502,0,9509,9514,0,0,9502,0,0,9503,9825,9824,9511,0,8564,8560,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,9509,7922,7923,7923,7924,9503,9509,9819,9672,0,0,0,0,0,0,0,9825,9824,9510,9511,9509,9510,9511 -0,0,0,0,0,18682,18690,18523,18524,18841,18842,18843,18530,18844,18850,18842,18850,18851,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,18846,18845,18535,0,0,0,0,18849,18848,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,18846,18848,18530,18532,0,0,0,0,0,0,0,0,0,11110,11111,11111,11111,11111,11111,11111,11111,11111,11112,0,0,6803,6803,0,0, -18530,18844,18848,0,18523,0,0,0,18688,18693,0,18530,18527,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,10623,0,0,0,0, -18682,18693,18530,18526,18844,18847,18845,18532,18846,18845,18531,18844,18845,18535,0,0,0,0,0,11268,11269,4217,4218,4219,4220,11269,11269,11269,11431,11434,0,0,0,0,0, -18844,18848,18683,18687,18845,18532,18846,18851,0,18846,18682,18690,18849,18851,0,0,0,0,0,11268,11269,4281,4282,4283,4284,11269,11269,11269,11270,0,0,0,0,0,0, -18690,0,18849,18848,18846,18845,18532,0,0,0,0,0,0,0,0,0,0,0,11110,11587,11269,4345,4346,4347,4348,11269,11269,11269,11270,0,0,0,0,22299,0, -18851,0,0,18530,18532,18846,18848,0,0,0,0,0,0,0,0,0,0,0,11268,11269,11269,4409,4410,4411,4412,11269,11269,11269,11584,11112,0,0,0,0,0, -18845,18531,18532,18846,18845,18532,0,0,0,0,0,0,11110,11111,11111,11111,11111,11111,11587,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, -18844,18686,18693,0,18846,18845,18535,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,1493,1493,2201,2202,2202,2202,2202,2203,11269,11270,0,0,0,0,0, -18693,18846,18682,18529,18532,18691,18693,0,0,0,0,0,11268,11269,11269,11269,1493,1493,1493,1493,1493,1493,2265,2139,2141,2140,2138,2267,11269,11270,0,0,0,0,0, -18845,18532,18846,18682,18693,18846,18851,0,0,0,0,0,11268,11269,1493,1493,1493,1493,1493,1493,1493,1493,2265,2140,2139,2140,2137,2267,11269,11270,0,0,0,0,0, -18528,18685,18530,18844,18848,0,0,0,0,0,0,0,11268,11269,1493,1493,1493,1493,1493,1493,1493,11269,2265,2140,2140,2141,2137,2267,11269,11270,0,0,0,0,0, -18681,18848,18846,18848,0,0,18524,0,0,0,0,0,11268,11269,1493,1493,1493,1493,1493,1493,1493,1493,2265,2140,2139,2138,2137,2267,11269,11270,0,0,0,0,0, -18690,0,0,0,0,18523,0,0,0,0,0,0,11268,11269,11269,11269,11269,1493,1493,11269,1493,1493,2329,2330,2330,2330,2330,2331,11269,11270,0,0,0,0,0, -18693,0,0,0,0,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, -18690,0,0,0,0,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, -18693,0,0,0,0,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, -18693,0,0,0,11110,11111,11111,11111,11111,11111,11111,11111,11587,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, -18690,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, -18693,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,7913,18530, -18690,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,22456, -18693,0,0,0,11426,11427,11427,11586,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11584,11111,11111,11112,0,22456, -18693,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,22456, -18693,0,0,0,0,0,0,11426,11586,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,22456, -18690,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,22456, -18690,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,22456, -18693,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11585,11427,11428,0,22456, -18690,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,22456, -18693,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11585,11427,11427,11427,11427,11427,11427,11427,11427,11427,11428,0,0,0,22456, -18693,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0,0,0,0,0,0,0,0,0,22456, -18690,0,0,0,0,0,0,0,11426,11427,11427,11427,11427,11427,11429,11429,11427,11427,11427,11427,11428,0,0,0,0,0,0,0,0,0,0,0,0,0,22456, -18690,0,0,0,0,0,0,0,0,0,0,0,0,0,11432,11432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22456, -18693,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22456, -18693,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8238,6181,6181,6181,6181,6181,6181,6181,6181,0,0,0,0,0,0,0,0,0,22456, -18690,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18690, -18693,0,0,0,0,0,0,0,22297,22139,22296,22295,22298,0,0,0,0,22453,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18530,18528,18529, -18845,18532,0,0,0,0,0,0,18671,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18849,18847,18847, -18840,18839,18532,0,0,0,18677,0,0,19621,19625,19623,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -18684,18684,18690,18523,18672,18524,0,18676,18673,19779,19772,19936,19622,19623,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,8570,8578,8411,8412,8729,8730,8731,8418,8732,8738,8730,8738,8739,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,8734,8733,8423,0,0,0,0,8737,8736,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,8734,8736,8418,8420,0,0,0,0,0,0,0,0,0,11110,11111,11111,11111,11111,11111,11111,11111,11111,11112,0,0,6803,6803,0,0, +8418,8732,8736,0,8411,0,0,0,8576,8581,0,8418,8415,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,10623,0,0,0,0, +8570,8581,8418,8414,8732,8735,8733,8420,8734,8733,8419,8732,8733,8423,0,0,0,0,0,11268,11269,4217,4218,4219,4220,11269,11269,11269,11431,11434,0,0,0,0,0, +8732,8736,8571,8575,8733,8420,8734,8739,0,8734,8570,8578,8737,8739,0,0,0,0,0,11268,11269,4281,4282,4283,4284,11269,11269,11269,11270,0,0,0,0,0,0, +8578,0,8737,8736,8734,8733,8420,0,0,0,0,0,0,0,0,0,0,0,11110,11587,11269,4345,4346,4347,4348,11269,11269,11269,11270,0,0,0,0,12187,0, +8739,0,0,8418,8420,8734,8736,0,0,0,0,0,0,0,0,0,0,0,11268,11269,11269,4409,4410,4411,4412,11269,11269,11269,11584,11112,0,0,0,0,0, +8733,8419,8420,8734,8733,8420,0,0,0,0,0,0,11110,11111,11111,11111,11111,11111,11587,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, +8732,8574,8581,0,8734,8733,8423,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,1493,1493,2201,2202,2202,2202,2202,2203,11269,11270,0,0,0,0,0, +8581,8734,8570,8417,8420,8579,8581,0,0,0,0,0,11268,11269,11269,11269,1493,1493,1493,1493,1493,1493,2265,2139,2141,2140,2138,2267,11269,11270,0,0,0,0,0, +8733,8420,8734,8570,8581,8734,8739,0,0,0,0,0,11268,11269,1493,1493,1493,1493,1493,1493,1493,1493,2265,2140,2139,2140,2137,2267,11269,11270,0,0,0,0,0, +8416,8573,8418,8732,8736,0,0,0,0,0,0,0,11268,11269,1493,1493,1493,1493,1493,1493,1493,11269,2265,2140,2140,2141,2137,2267,11269,11270,0,0,0,0,0, +8569,8736,8734,8736,0,0,8412,0,0,0,0,0,11268,11269,1493,1493,1493,1493,1493,1493,1493,1493,2265,2140,2139,2138,2137,2267,11269,11270,0,0,0,0,0, +8578,0,0,0,0,8411,0,0,0,0,0,0,11268,11269,11269,11269,11269,1493,1493,11269,1493,1493,2329,2330,2330,2330,2330,2331,11269,11270,0,0,0,0,0, +8581,0,0,0,0,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, +8578,0,0,0,0,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, +8581,0,0,0,0,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, +8581,0,0,0,11110,11111,11111,11111,11111,11111,11111,11111,11587,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, +8578,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, +8581,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,7913,8418, +8578,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,12344, +8581,0,0,0,11426,11427,11427,11586,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11584,11111,11111,11112,0,12344, +8581,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,12344, +8581,0,0,0,0,0,0,11426,11586,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,12344, +8578,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,12344, +8578,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,12344, +8581,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11585,11427,11428,0,12344, +8578,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,12344, +8581,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11585,11427,11427,11427,11427,11427,11427,11427,11427,11427,11428,0,0,0,12344, +8581,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0,0,0,0,0,0,0,0,0,12344, +8578,0,0,0,0,0,0,0,11426,11427,11427,11427,11427,11427,11429,11429,11427,11427,11427,11427,11428,0,0,0,0,0,0,0,0,0,0,0,0,0,12344, +8578,0,0,0,0,0,0,0,0,0,0,0,0,0,11432,11432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12344, +8581,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12344, +8581,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8238,6181,6181,6181,6181,6181,6181,6181,6181,0,0,0,0,0,0,0,0,0,12344, +8578,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8578, +8581,0,0,0,0,0,0,0,12185,12027,12184,12183,12186,0,0,0,0,12341,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8418,8416,8417, +8733,8420,0,0,0,0,0,0,8559,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8737,8735,8735, +8728,8727,8420,0,0,0,8565,0,0,9509,9513,9511,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +8572,8572,8578,8411,8560,8412,0,8564,8561,9667,9660,9824,9510,9511,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -18681,18845,18844,18850,18850,18851,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -18535,18846,18848,18530,18532,0,0,0,0,0,0,0,0,0,0,19103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -18693,18530,18532,18849,18851,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8046,8047,8047,8047,8047,8047,8047,8048,0,0,0,0,5254,5413,0,0, -18523,0,18632,0,18530,18534,18532,18634,0,0,0,0,0,0,0,0,0,0,0,8204,24944,24468,25257,24470,24469,24471,8206,0,0,10962,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8204,0,24626,0,24628,24627,24629,8206,0,0,0,0,0,6340,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18946,0,0,0,8204,25107,24950,25110,0,0,0,8206,0,0,10646,0,0,6495,0,0, +8569,8733,8732,8738,8738,8739,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +8423,8734,8736,8418,8420,0,0,0,0,0,0,0,0,0,0,8991,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +8581,8418,8420,8737,8739,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8046,8047,8047,8047,8047,8047,8047,8048,0,0,0,0,5254,5413,0,0, +8411,0,8520,0,8418,8422,8420,8522,0,0,0,0,0,0,0,0,0,0,0,8204,14832,14356,15145,14358,14357,14359,8206,0,0,10962,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8204,0,14514,0,14516,14515,14517,8206,0,0,0,0,0,6340,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8834,0,0,0,8204,14995,14838,14998,0,0,0,8206,0,0,10646,0,0,6495,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8204,0,0,0,0,0,4204,8206,0,0,0,0,0,6495,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8204,25103,0,0,0,0,24941,8206,0,0,0,0,0,6495,0,0, -0,0,18792,0,0,0,0,22456,0,0,0,0,0,0,0,0,0,0,0,8204,8047,4209,0,0,8047,4209,8049,8047,8048,0,0,0,6495,0,0, -0,0,0,0,0,0,0,22456,0,0,0,0,0,0,0,0,0,0,0,1109,0,0,8206,0,0,0,0,0,8206,0,0,0,6495,0,0, -0,0,0,0,0,0,0,22456,1401,1402,0,0,0,0,1109,8363,8363,8363,8363,8364,0,0,8206,0,0,0,0,0,8206,0,0,0,6495,0,0, -0,0,0,0,0,0,0,22456,1465,1466,0,0,0,0,4261,0,0,0,0,0,0,0,8206,0,0,0,524,525,8206,0,0,0,6495,0,0, -0,0,0,0,18524,0,0,22456,1529,1530,0,0,0,0,8206,0,4278,4279,4279,4279,4279,4280,0,0,0,0,716,717,8206,0,1401,1402,6495,0,0, -0,0,0,0,0,0,0,22456,0,0,0,0,0,0,8206,8047,8047,4199,4200,0,0,4323,8206,0,0,0,0,24787,8206,0,1465,1466,6495,0,0, -0,0,0,18632,0,0,0,22456,0,0,0,0,0,0,8206,0,12644,4263,4264,1238,8047,4387,8047,24941,0,8047,526,24945,8206,0,1529,1530,6495,0,0, -0,0,22453,22296,22139,22137,22137,22613,0,0,0,0,0,0,8206,0,0,1107,1235,1235,1235,1108,8206,0,4150,4151,8204,0,0,0,0,0,6495,0,0, -0,0,22456,0,0,0,0,0,0,0,0,0,0,0,8206,0,0,1171,1236,1236,1236,1172,0,0,0,0,0,0,0,0,0,0,6495,0,0, -0,0,22456,0,0,0,0,0,0,0,0,0,0,0,8206,0,0,0,0,24944,25110,0,8206,0,0,0,8204,0,0,0,0,0,6495,0,0, -0,0,22456,0,0,8046,8047,8047,8047,8047,8047,8047,8047,0,8206,0,12486,8047,0,25109,0,8363,8363,8363,8363,8363,8363,8363,8363,8206,0,0,6495,0,0, -0,18630,22456,0,0,8207,0,0,4212,4213,4275,4212,4213,0,4198,4198,1111,1239,1239,1112,8206,0,0,0,8206,0,0,0,0,8206,0,0,6495,0,0, -0,0,22456,0,0,8206,0,0,0,0,0,0,0,0,0,0,1303,1496,1496,1304,0,0,0,0,0,0,0,0,0,8206,0,0,6654,0,8559, -0,0,22456,0,0,8049,0,0,4212,4213,4275,0,0,0,4212,4213,1303,1496,1496,1304,8206,0,0,0,0,0,0,0,0,8206,0,0,0,6495,0, -0,0,22456,0,0,8362,8363,8363,8363,8363,8363,8363,4342,4342,4342,8363,1303,1496,1496,1304,8206,0,4271,4272,0,4271,4272,0,0,8049,0,0,0,6495,0, -0,0,22456,0,0,0,0,0,0,0,8204,0,4154,4154,4154,0,1303,1496,1496,1304,8206,0,0,0,0,0,0,0,0,8362,8049,8048,0,6495,0, -0,18792,22456,0,0,0,0,0,0,0,8204,0,4154,4154,4154,8204,1175,1240,1240,1176,0,0,4271,4272,0,4271,4272,0,4271,4272,0,8206,0,6495,0, -0,0,22456,0,0,0,0,0,0,0,8204,0,4154,4154,4154,8204,8047,8047,8047,8047,8206,0,0,0,0,0,0,0,0,0,0,8206,0,6495,0, -0,0,22456,0,0,1401,1402,0,0,0,8204,0,4154,4154,4154,8204,0,0,0,0,0,0,4271,4272,0,4271,4272,0,0,0,8207,8364,0,6495,0, -0,0,22456,0,0,1465,1466,0,0,0,8204,0,4154,4154,4154,8204,4278,4279,4280,8204,0,0,0,0,0,0,0,0,0,8207,8364,0,0,6495,0, -0,0,22456,0,0,1529,1530,0,0,0,8204,0,4406,4406,4406,0,0,0,0,8207,8363,8363,8363,8363,8363,8363,8363,8363,8363,8364,0,0,0,6495,0, -18523,0,22456,0,0,0,0,0,0,0,8204,0,0,4214,4215,4216,4341,0,0,8206,0,0,0,0,1401,1402,0,0,0,0,0,0,0,6495,0, -0,0,22456,0,0,0,0,0,0,0,8362,8363,8363,8363,8364,8362,8363,8363,8363,8364,0,0,0,0,1465,1466,0,0,0,0,0,0,0,6495,0, -0,0,22456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1529,1530,0,0,0,0,0,0,19615,6495,0, -0,0,22456,0,0,0,0,0,0,0,0,0,0,11122,0,0,11122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6495,0, -0,0,22456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6495,0, -0,18629,22456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7449,0,0,0,0,0,0,0,6181,6181,6181,6181,6181,6181,6181,6181,6656,0, -0,0,22456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22456, -0,0,22296,22297,22137,22296,22140,22138,0,0,0,0,0,0,0,0,0,0,22137,22138,22140,22296,22137,22137,22297,22137,22137,22295,22137,22137,22140,22296,22297,22297,22613, -0,0,0,0,0,0,0,0,0,0,0,0,22612,0,0,0,0,22613,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,19100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18792,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18946,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8204,14991,0,0,0,0,14829,8206,0,0,0,0,0,6495,0,0, +0,0,8680,0,0,0,0,12344,0,0,0,0,0,0,0,0,0,0,0,8204,8047,4209,0,0,8047,4209,8049,8047,8048,0,0,0,6495,0,0, +0,0,0,0,0,0,0,12344,0,0,0,0,0,0,0,0,0,0,0,1109,0,0,8206,0,0,0,0,0,8206,0,0,0,6495,0,0, +0,0,0,0,0,0,0,12344,1401,1402,0,0,0,0,1109,8363,8363,8363,8363,8364,0,0,8206,0,0,0,0,0,8206,0,0,0,6495,0,0, +0,0,0,0,0,0,0,12344,1465,1466,0,0,0,0,4261,0,0,0,0,0,0,0,8206,0,0,0,524,525,8206,0,0,0,6495,0,0, +0,0,0,0,8412,0,0,12344,1529,1530,0,0,0,0,8206,0,4278,4279,4279,4279,4279,4280,0,0,0,0,716,717,8206,0,1401,1402,6495,0,0, +0,0,0,0,0,0,0,12344,0,0,0,0,0,0,8206,8047,8047,4199,4200,0,0,4323,8206,0,0,0,0,14675,8206,0,1465,1466,6495,0,0, +0,0,0,8520,0,0,0,12344,0,0,0,0,0,0,8206,0,12644,4263,4264,1238,8047,4387,8047,14829,0,8047,526,14833,8206,0,1529,1530,6495,0,0, +0,0,12341,12184,12027,12025,12025,12501,0,0,0,0,0,0,8206,0,0,1107,1235,1235,1235,1108,8206,0,4150,4151,8204,0,0,0,0,0,6495,0,0, +0,0,12344,0,0,0,0,0,0,0,0,0,0,0,8206,0,0,1171,1236,1236,1236,1172,0,0,0,0,0,0,0,0,0,0,6495,0,0, +0,0,12344,0,0,0,0,0,0,0,0,0,0,0,8206,0,0,0,0,14832,14998,0,8206,0,0,0,8204,0,0,0,0,0,6495,0,0, +0,0,12344,0,0,8046,8047,8047,8047,8047,8047,8047,8047,0,8206,0,12486,8047,0,14997,0,8363,8363,8363,8363,8363,8363,8363,8363,8206,0,0,6495,0,0, +0,8518,12344,0,0,8207,0,0,4212,4213,4275,4212,4213,0,4198,4198,1111,1239,1239,1112,8206,0,0,0,8206,0,0,0,0,8206,0,0,6495,0,0, +0,0,12344,0,0,8206,0,0,0,0,0,0,0,0,0,0,1303,1496,1496,1304,0,0,0,0,0,0,0,0,0,8206,0,0,6654,0,8559, +0,0,12344,0,0,8049,0,0,4212,4213,4275,0,0,0,4212,4213,1303,1496,1496,1304,8206,0,0,0,0,0,0,0,0,8206,0,0,0,6495,0, +0,0,12344,0,0,8362,8363,8363,8363,8363,8363,8363,4342,4342,4342,8363,1303,1496,1496,1304,8206,0,4271,4272,0,4271,4272,0,0,8049,0,0,0,6495,0, +0,0,12344,0,0,0,0,0,0,0,8204,0,4154,4154,4154,0,1303,1496,1496,1304,8206,0,0,0,0,0,0,0,0,8362,8049,8048,0,6495,0, +0,8680,12344,0,0,0,0,0,0,0,8204,0,4154,4154,4154,8204,1175,1240,1240,1176,0,0,4271,4272,0,4271,4272,0,4271,4272,0,8206,0,6495,0, +0,0,12344,0,0,0,0,0,0,0,8204,0,4154,4154,4154,8204,8047,8047,8047,8047,8206,0,0,0,0,0,0,0,0,0,0,8206,0,6495,0, +0,0,12344,0,0,1401,1402,0,0,0,8204,0,4154,4154,4154,8204,0,0,0,0,0,0,4271,4272,0,4271,4272,0,0,0,8207,8364,0,6495,0, +0,0,12344,0,0,1465,1466,0,0,0,8204,0,4154,4154,4154,8204,4278,4279,4280,8204,0,0,0,0,0,0,0,0,0,8207,8364,0,0,6495,0, +0,0,12344,0,0,1529,1530,0,0,0,8204,0,4406,4406,4406,0,0,0,0,8207,8363,8363,8363,8363,8363,8363,8363,8363,8363,8364,0,0,0,6495,0, +8411,0,12344,0,0,0,0,0,0,0,8204,0,0,4214,4215,4216,4341,0,0,8206,0,0,0,0,1401,1402,0,0,0,0,0,0,0,6495,0, +0,0,12344,0,0,0,0,0,0,0,8362,8363,8363,8363,8364,8362,8363,8363,8363,8364,0,0,0,0,1465,1466,0,0,0,0,0,0,0,6495,0, +0,0,12344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1529,1530,0,0,0,0,0,0,9503,6495,0, +0,0,12344,0,0,0,0,0,0,0,0,0,0,11122,0,0,11122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6495,0, +0,0,12344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6495,0, +0,8517,12344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7449,0,0,0,0,0,0,0,6181,6181,6181,6181,6181,6181,6181,6181,6656,0, +0,0,12344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12344, +0,0,12184,12185,12025,12184,12028,12026,0,0,0,0,0,0,0,0,0,0,12025,12026,12028,12184,12025,12025,12185,12025,12025,12183,12025,12025,12028,12184,12185,12185,12501, +0,0,0,0,0,0,0,0,0,0,0,0,12500,0,0,0,0,12501,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,8988,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8680,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8834,0,0,0,0,0,0,0,0,0,0,0,0,0 @@ -188,25 +187,25 @@ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22453,22137,22137,0,0,0,0,0,0,0,0,0,0,22137,22137,22613,22612,22137,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19621,0,0, -0,0,0,0,0,0,0,22453,22295,22296,22137,22137,22137,22137,22137,22137,22613,0,0,0,0,0,0,0,0,4207,0,0,0,0,0,0,19937,0,22453, -0,0,0,0,0,0,0,22456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22456, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8047,8047,0,0,8047,8047,0,0,0,0,0,0,0,22456, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8207,0,0,4196,0,0,0,24951,24468,0,0,0,0,0,0,22456, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,8207,4194,4333,4334,4203,0,0,0,4260,0,0,0,0,24626,0,0,0,0,0,0,22456, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,8206,4258,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22456, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22456, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,8047,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22456, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8204,8047,8047,0,0,8047,8206,8047,0,24785,8047,8047,0,0,0,0,0,0,22456, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4341,25108,0,24943,25108,0,0,0,0,0,0,0,22456, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8206,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22456, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8206,0,0,0,0,4336,25109,4336,25109,4336,0,0,0,0,0,0,0,22456, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,8047,8047,8047,8206,0,8047,8207,0,0,0,8206,0,0,0,8,0,0,0,0,0,22456, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8204,0,0,0,0,8047,0,8047,8047,8047,0,8047,8048,136,0,0,0,0,0,22456, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8049,25109,0,0,0,0,0,22456, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12341,12025,12025,0,0,0,0,0,0,0,0,0,0,12025,12025,12501,12500,12025,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9509,0,0, +0,0,0,0,0,0,0,12341,12183,12184,12025,12025,12025,12025,12025,12025,12501,0,0,0,0,0,0,0,0,4207,0,0,0,0,0,0,9825,0,12341, +0,0,0,0,0,0,0,12344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12344, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8047,8047,0,0,8047,8047,0,0,0,0,0,0,0,12344, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8207,0,0,4196,0,0,0,14839,14356,0,0,0,0,0,0,12344, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,8207,4194,4333,4334,4203,0,0,0,4260,0,0,0,0,14514,0,0,0,0,0,0,12344, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,8206,4258,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12344, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12344, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,8047,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12344, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8204,8047,8047,0,0,8047,8206,8047,0,14673,8047,8047,0,0,0,0,0,0,12344, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4341,14996,0,14831,14996,0,0,0,0,0,0,0,12344, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8206,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12344, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8206,0,0,0,0,4336,14997,4336,14997,4336,0,0,0,0,0,0,0,12344, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,8047,8047,8047,8206,0,8047,8207,0,0,0,8206,0,0,0,8,0,0,0,0,0,12344, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8204,0,0,0,0,8047,0,8047,8047,8047,0,8047,8048,136,0,0,0,0,0,12344, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8049,14997,0,0,0,0,0,12344, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8204,0,0,0,0,0,0,0,0,0,0,0,8362,8363,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,8049,4197,0,0,8363,8204,0,0,0,0,0,0,0,0,0,0,0,0,0,3363,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8204,0,0,0,0,0,0,0,0,0,0,0,0,0,3427,0,0,0,0,0, @@ -222,69 +221,69 @@ 0,0,0,0,758,759,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,822,823,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,758,759,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,822,823,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18530,18534,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8418,8422,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - + - + - - + + - + - + - - - - - - + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + [ { @@ -309,16 +308,16 @@ - - - - + + + + - - + + [ { @@ -343,7 +342,7 @@ - + [{ "type": "randomCard", @@ -364,17 +363,17 @@ }] - + - + - + [ { @@ -385,12 +384,12 @@ ] - + - + diff --git a/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/inn_approaches/davriels_mansion_2.tmx b/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/main_story/approaches/davriels_mansion_2.tmx similarity index 64% rename from forge-gui/res/adventure/Innistrad/maps/map/Innistrad/inn_approaches/davriels_mansion_2.tmx rename to forge-gui/res/adventure/Innistrad/maps/map/Innistrad/main_story/approaches/davriels_mansion_2.tmx index 86056ad0198..c09ea8d0108 100644 --- a/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/inn_approaches/davriels_mansion_2.tmx +++ b/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/main_story/approaches/davriels_mansion_2.tmx @@ -1,9 +1,8 @@ - - - - - + + + + 7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621,7621, @@ -50,13 +49,13 @@ -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19937,19938,19938,19938,19938,19938,19938,19938,19938,19938,19938,19938,19938,19938,19938,19936,19625,19935, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5253,19937,19777,19784, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7764,7765,7765,7765,7765,7765,7765,7765,7765,7765,7765,7766,0,0,0,19937,19942, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,8988,0,0,18673, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,6181,6181,0,19624,19625, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,19935,19777, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,19939,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9825,9826,9826,9826,9826,9826,9826,9826,9826,9826,9826,9826,9826,9826,9826,9824,9513,9823, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5253,9825,9665,9672, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7764,7765,7765,7765,7765,7765,7765,7765,7765,7765,7765,7766,0,0,0,9825,9830, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,8988,0,0,8561, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,6181,6181,0,9512,9513, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,9823,9665, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,9827,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8235,8239,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8240,8236,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,7764,7765,7765,7765,7765,7765,8239,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,0, @@ -71,113 +70,113 @@ 0,0,0,8235,7765,7765,7765,7765,7765,7765,8239,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,0, 0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,0, 0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,0, -0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,4154,4154,4154,4154,4154,7923,7923,7923,8240,8236,0,0,18688, -0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,4154,4154,4154,4154,4154,4154,7923,7923,7923,7923,8240,7765,7766,18688, -0,0,0,8080,8081,8081,8397,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,4154,4154,4154,4154,7923,4154,7923,7923,7923,7923,7923,7923,7924,18688, -0,0,0,0,0,0,8393,8397,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,4154,4154,4154,4154,4154,4154,7923,7923,7923,7923,7923,7923,7924,18688, -0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,4154,4154,4154,4154,4154,4154,7923,7923,7923,7923,7923,7923,7924,18688, -0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,4154,4154,4154,4154,4154,4154,7923,7923,7923,7923,7923,7923,7924,18688, -0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8398,8081,8082,18688, -0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8398,8394,0,0,18688, -0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,18688, -0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8398,8081,8081,8081,8081,8081,8081,8081,8081,8394,0,0,0,18688, -0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8398,8394,0,0,0,0,0,0,0,0,0,0,0,0,18688, -0,0,0,0,0,0,0,8393,8081,8081,8081,8081,8081,8397,8081,8081,8398,8081,8081,8081,8082,0,0,0,0,0,0,0,0,0,0,0,0,0,18688, -0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7924,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18688, -0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,6180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18844, +0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,4154,4154,4154,4154,4154,7923,7923,7923,8240,8236,0,0,8576, +0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,4154,4154,4154,4154,4154,4154,7923,7923,7923,7923,8240,7765,7766,8576, +0,0,0,8080,8081,8081,8397,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,4154,4154,4154,4154,7923,4154,7923,7923,7923,7923,7923,7923,7924,8576, +0,0,0,0,0,0,8393,8397,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,4154,4154,4154,4154,4154,4154,7923,7923,7923,7923,7923,7923,7924,8576, +0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,4154,4154,4154,4154,4154,4154,7923,7923,7923,7923,7923,7923,7924,8576, +0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,4154,4154,4154,4154,4154,4154,7923,7923,7923,7923,7923,7923,7924,8576, +0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8398,8081,8082,8576, +0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8398,8394,0,0,8576, +0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0,0,8576, +0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8398,8081,8081,8081,8081,8081,8081,8081,8081,8394,0,0,0,8576, +0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8398,8394,0,0,0,0,0,0,0,0,0,0,0,0,8576, +0,0,0,0,0,0,0,8393,8081,8081,8081,8081,8081,8397,8081,8081,8398,8081,8081,8081,8082,0,0,0,0,0,0,0,0,0,0,0,0,0,8576, +0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7924,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8576, +0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,6180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8732, 0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7924,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7924,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7924,0,0,0,0,0,0,0,0,0,0,19621,19623,0,19614,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7924,19614,0,19621,19626,0,0,19614,0,0,19615,19937,19936,19623,0,18676,18672,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,19621,7922,7923,7923,7924,19615,19621,19931,19784,0,0,0,0,0,0,0,19937,19936,19622,19623,19621,19622,19623 +0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7924,0,0,0,0,0,0,0,0,0,0,9509,9511,0,9502,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,7922,7923,7923,7924,9502,0,9509,9514,0,0,9502,0,0,9503,9825,9824,9511,0,8564,8560,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,9509,7922,7923,7923,7924,9503,9509,9819,9672,0,0,0,0,0,0,0,9825,9824,9510,9511,9509,9510,9511 -0,0,0,0,0,18682,18690,18523,18524,18841,18842,18843,18530,18844,18850,18842,18850,18851,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,18846,18845,18535,0,0,0,0,18849,18848,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,18846,18848,18530,18532,0,0,0,0,0,0,0,0,0,11110,11111,11111,11111,11111,11111,11111,11111,11111,11112,0,0,6803,6803,0,0, -18530,18844,18848,0,18523,0,0,0,18688,18693,0,18530,18527,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,10623,0,0,0,0, -18682,18693,18530,18526,18844,18847,18845,18532,18846,18845,18531,18844,18845,18535,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11431,11434,0,0,0,0,0, -18844,18848,18683,18687,18845,18532,18846,18851,0,18846,18682,18690,18849,18851,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0,0, -18690,0,18849,18848,18846,18845,18532,0,0,0,0,0,0,0,0,0,0,0,11110,11587,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,22299,0, -18851,0,0,18530,18532,18846,18848,0,0,0,0,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11584,11112,0,0,0,0,0, -18845,18531,18532,18846,18845,18532,0,0,0,0,0,0,11110,11111,11111,11111,11111,11111,11587,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, -18844,18686,18693,0,18846,18845,18535,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, -18693,18846,18682,18529,18532,18691,18693,0,0,0,0,0,11268,11269,1491,1491,1491,1491,1491,1491,1491,1491,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, -18845,18532,18846,18682,18693,18846,18851,0,0,0,0,0,11268,11269,1491,1491,1491,1491,1491,1491,1491,1491,11269,4217,4218,4219,4220,11269,11269,11270,0,0,0,0,0, -18528,18685,18530,18844,18848,0,0,0,0,0,0,0,11268,11269,1491,1491,1491,1491,1491,1491,1491,11269,11269,4281,4282,4283,4284,11269,11269,11270,0,0,0,0,0, -18681,18848,18846,18848,0,0,18524,0,0,0,0,0,11268,11269,1491,1491,1491,1491,1491,1491,1491,1491,11269,4345,4346,4347,4348,11269,11269,11270,0,0,0,0,0, -18690,0,0,0,0,18523,0,0,0,0,0,0,11268,11269,11269,11269,11269,1491,1363,11269,1364,1491,11269,4409,4410,4411,4412,11269,11269,11270,0,0,0,0,0, -18693,0,0,0,0,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, -18690,0,0,0,0,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, -18693,0,0,0,0,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, -18693,0,0,0,11110,11111,11111,11111,11111,11111,11111,11111,11587,11269,11269,11269,11269,11269,11269,11269,4152,4154,4154,4154,4154,4154,4154,4154,4154,11270,0,0,0,0,0, -18690,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,4152,4154,4154,4154,4154,4154,4154,4154,4154,11270,0,0,0,0,0, -18693,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,4154,4154,4154,4154,4154,4154,4154,4154,11270,0,0,0,7913,18530, -18690,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,4152,4154,1495,1496,1495,1496,1495,4154,4154,11270,0,0,0,0,22456, -18693,0,0,0,11426,11427,11427,11586,11269,11269,11269,4152,11269,11269,4154,4153,11269,11269,11269,11269,11269,1303,1495,1496,1495,1496,1495,4154,4154,11584,11111,11111,11112,0,22456, -18693,0,0,0,0,0,0,11268,11269,11269,11269,11269,4154,4154,4154,4153,11269,11269,11269,11269,4152,1303,1495,1496,1495,1496,1495,4154,4154,11269,11269,11269,11270,0,22456, -18693,0,0,0,0,0,0,11426,11586,11269,11269,11269,4154,4154,4154,4153,11269,2205,2139,11269,4152,1303,1495,1496,1495,1496,1495,4154,4154,11269,11269,11269,11270,0,22456, -18690,0,0,0,0,0,0,0,11268,11269,11269,11269,4154,4154,4154,4153,11269,11269,11269,11269,4152,1303,1495,1496,1495,1496,1495,4154,4154,11269,11269,11269,11270,0,22456, -18690,0,0,0,0,0,0,0,11268,11269,11269,11269,4154,4154,4154,11269,11269,11269,11269,11269,4152,1175,1240,1240,1240,1240,1240,4154,4154,11269,11269,11269,11270,0,22456, -18693,0,0,0,0,0,0,0,11268,11269,11269,11269,4154,4154,4154,11269,11269,11269,11269,11269,4152,4154,4154,4154,4154,4154,4154,4154,4154,11269,11585,11427,11428,0,22456, -18690,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,22456, -18693,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11585,11427,11427,11427,11427,11427,11427,11427,11427,11427,11428,0,0,0,22456, -18693,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0,0,0,0,0,0,0,0,0,22456, -18690,0,0,0,0,0,0,0,11426,11427,11427,11427,11427,11427,11429,11429,11427,11427,11427,11427,11428,0,0,0,0,0,0,0,0,0,0,0,0,0,22456, -18690,0,0,0,0,0,0,0,0,0,0,0,0,0,11432,11432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22456, -18693,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22456, -18693,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8238,6181,6181,6181,6181,6181,6181,6181,6181,0,0,0,0,0,0,0,0,0,22456, -18690,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18690, -18693,0,0,0,0,0,0,0,22297,22139,22296,22295,22298,0,0,0,0,22453,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18530,18528,18529, -18845,18532,0,0,0,0,0,0,18671,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18849,18847,18847, -18840,18839,18532,0,0,0,18677,0,0,19621,19625,19623,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -18684,18684,18690,18523,18672,18524,0,18676,18673,19779,19772,19936,19622,19623,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,8570,8578,8411,8412,8729,8730,8731,8418,8732,8738,8730,8738,8739,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,8734,8733,8423,0,0,0,0,8737,8736,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,8734,8736,8418,8420,0,0,0,0,0,0,0,0,0,11110,11111,11111,11111,11111,11111,11111,11111,11111,11112,0,0,6803,6803,0,0, +8418,8732,8736,0,8411,0,0,0,8576,8581,0,8418,8415,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,10623,0,0,0,0, +8570,8581,8418,8414,8732,8735,8733,8420,8734,8733,8419,8732,8733,8423,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11431,11434,0,0,0,0,0, +8732,8736,8571,8575,8733,8420,8734,8739,0,8734,8570,8578,8737,8739,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0,0, +8578,0,8737,8736,8734,8733,8420,0,0,0,0,0,0,0,0,0,0,0,11110,11587,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,12187,0, +8739,0,0,8418,8420,8734,8736,0,0,0,0,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11584,11112,0,0,0,0,0, +8733,8419,8420,8734,8733,8420,0,0,0,0,0,0,11110,11111,11111,11111,11111,11111,11587,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, +8732,8574,8581,0,8734,8733,8423,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, +8581,8734,8570,8417,8420,8579,8581,0,0,0,0,0,11268,11269,1491,1491,1491,1491,1491,1491,1491,1491,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, +8733,8420,8734,8570,8581,8734,8739,0,0,0,0,0,11268,11269,1491,1491,1491,1491,1491,1491,1491,1491,11269,4217,4218,4219,4220,11269,11269,11270,0,0,0,0,0, +8416,8573,8418,8732,8736,0,0,0,0,0,0,0,11268,11269,1491,1491,1491,1491,1491,1491,1491,11269,11269,4281,4282,4283,4284,11269,11269,11270,0,0,0,0,0, +8569,8736,8734,8736,0,0,8412,0,0,0,0,0,11268,11269,1491,1491,1491,1491,1491,1491,1491,1491,11269,4345,4346,4347,4348,11269,11269,11270,0,0,0,0,0, +8578,0,0,0,0,8411,0,0,0,0,0,0,11268,11269,11269,11269,11269,1491,1363,11269,1364,1491,11269,4409,4410,4411,4412,11269,11269,11270,0,0,0,0,0, +8581,0,0,0,0,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, +8578,0,0,0,0,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, +8581,0,0,0,0,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0, +8581,0,0,0,11110,11111,11111,11111,11111,11111,11111,11111,11587,11269,11269,11269,11269,11269,11269,11269,4152,4154,4154,4154,4154,4154,4154,4154,4154,11270,0,0,0,0,0, +8578,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,4152,4154,4154,4154,4154,4154,4154,4154,4154,11270,0,0,0,0,0, +8581,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,4154,4154,4154,4154,4154,4154,4154,4154,11270,0,0,0,7913,8418, +8578,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,4152,4154,1495,1496,1495,1496,1495,4154,4154,11270,0,0,0,0,12344, +8581,0,0,0,11426,11427,11427,11586,11269,11269,11269,4152,11269,11269,4154,4153,11269,11269,11269,11269,11269,1303,1495,1496,1495,1496,1495,4154,4154,11584,11111,11111,11112,0,12344, +8581,0,0,0,0,0,0,11268,11269,11269,11269,11269,4154,4154,4154,4153,11269,11269,11269,11269,4152,1303,1495,1496,1495,1496,1495,4154,4154,11269,11269,11269,11270,0,12344, +8581,0,0,0,0,0,0,11426,11586,11269,11269,11269,4154,4154,4154,4153,11269,2205,2139,11269,4152,1303,1495,1496,1495,1496,1495,4154,4154,11269,11269,11269,11270,0,12344, +8578,0,0,0,0,0,0,0,11268,11269,11269,11269,4154,4154,4154,4153,11269,11269,11269,11269,4152,1303,1495,1496,1495,1496,1495,4154,4154,11269,11269,11269,11270,0,12344, +8578,0,0,0,0,0,0,0,11268,11269,11269,11269,4154,4154,4154,11269,11269,11269,11269,11269,4152,1175,1240,1240,1240,1240,1240,4154,4154,11269,11269,11269,11270,0,12344, +8581,0,0,0,0,0,0,0,11268,11269,11269,11269,4154,4154,4154,11269,11269,11269,11269,11269,4152,4154,4154,4154,4154,4154,4154,4154,4154,11269,11585,11427,11428,0,12344, +8578,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,12344, +8581,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11585,11427,11427,11427,11427,11427,11427,11427,11427,11427,11428,0,0,0,12344, +8581,0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0,0,0,0,0,0,0,0,0,0,0,12344, +8578,0,0,0,0,0,0,0,11426,11427,11427,11427,11427,11427,11429,11429,11427,11427,11427,11427,11428,0,0,0,0,0,0,0,0,0,0,0,0,0,12344, +8578,0,0,0,0,0,0,0,0,0,0,0,0,0,11432,11432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12344, +8581,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12344, +8581,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8238,6181,6181,6181,6181,6181,6181,6181,6181,0,0,0,0,0,0,0,0,0,12344, +8578,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8578, +8581,0,0,0,0,0,0,0,12185,12027,12184,12183,12186,0,0,0,0,12341,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8418,8416,8417, +8733,8420,0,0,0,0,0,0,8559,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8737,8735,8735, +8728,8727,8420,0,0,0,8565,0,0,9509,9513,9511,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +8572,8572,8578,8411,8560,8412,0,8564,8561,9667,9660,9824,9510,9511,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -18681,18845,18844,18850,18850,18851,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -18535,18846,18848,18530,18532,0,0,0,0,0,0,0,0,0,0,19103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -18693,18530,18532,18849,18851,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5254,5413,0,0, -18523,0,18632,0,18530,18534,18532,18634,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10962,0,0,0,0,0, +8569,8733,8732,8738,8738,8739,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +8423,8734,8736,8418,8420,0,0,0,0,0,0,0,0,0,0,8991,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +8581,8418,8420,8737,8739,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5254,5413,0,0, +8411,0,8520,0,8418,8422,8420,8522,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10962,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6340,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18946,0,0,0,0,0,0,0,0,0,0,0,0,0,10646,0,0,6495,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8834,0,0,0,0,0,0,0,0,0,0,0,0,0,10646,0,0,6495,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6495,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6495,0,0, -0,0,18792,0,0,0,0,22456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8047,8047,8047,8047,0,8047,8048,0,0,0,6495,0,0, -0,0,0,0,0,0,0,22456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8206,0,0,0,0,0,8206,0,0,0,6495,0,0, -0,0,0,0,0,0,0,22456,0,0,0,0,0,0,8363,8363,8363,8363,8363,8363,8363,8363,8206,0,0,0,0,0,8206,0,0,0,6495,0,0, -0,0,0,0,0,0,0,22456,0,0,0,0,0,0,8206,2168,2169,0,0,2108,0,1363,14995,0,0,0,0,4332,8206,0,0,0,6495,0,0, -0,0,0,0,18524,0,0,22456,0,0,0,0,0,0,8206,2232,2233,2106,2107,0,0,1300,0,0,0,0,0,14998,8206,0,0,0,6495,0,0, -0,0,0,0,0,0,0,22456,0,0,0,0,0,0,8206,8047,8047,8048,0,0,0,1427,0,0,0,0,0,14832,8206,0,0,0,6495,0,0, -0,0,0,18632,0,0,0,22456,0,0,0,0,0,0,8206,0,12486,8206,8047,1236,8047,8047,1230,1231,1232,0,0,14998,8206,0,0,0,6495,0,0, -0,0,22453,22296,22139,22137,22137,22613,0,0,0,0,0,0,8206,0,0,1105,1233,1233,1233,1106,0,0,0,0,0,0,8206,0,0,0,6495,0,0, -0,0,22456,0,0,0,0,0,0,0,0,0,0,0,8206,0,0,1297,1490,1489,1490,1298,0,0,0,0,0,0,8206,0,0,0,6495,0,0, -0,0,22456,0,0,0,0,0,0,0,0,0,0,0,8206,0,0,1169,1234,1234,1234,1170,905,906,906,906,906,907,8206,0,0,0,6495,0,0, -0,0,22456,0,0,8046,8047,8047,8047,8047,8047,8047,8047,8047,8206,0,0,8047,0,0,1417,1418,8363,8363,8363,8363,8363,8363,8363,8206,0,0,6495,0,0, -0,18630,22456,0,0,8207,0,1763,1764,1765,3672,0,0,0,0,0,0,0,0,0,1545,1546,0,0,0,0,0,0,0,8206,0,0,6495,0,0, -0,0,22456,0,0,8206,0,1827,1828,1829,0,0,0,0,0,0,0,0,0,0,4152,1111,1239,1239,1239,1239,1239,1112,0,8206,0,0,6654,0,8559, -0,0,22456,0,0,8049,4392,1891,1892,1893,0,0,0,0,0,0,2201,2202,2202,2203,8206,1303,0,0,0,0,0,1304,1923,8206,0,0,0,6495,0, -0,0,22456,0,0,8362,8363,8363,8363,8363,8363,8363,4342,4342,8363,8363,2265,2138,2140,2267,4152,0,0,0,0,0,0,1304,1987,8206,0,0,0,6495,0, -0,0,22456,0,0,0,0,0,0,0,8204,4152,0,0,0,8204,2265,2139,2137,2267,0,0,0,0,0,0,0,1304,4332,8206,0,0,0,6495,0, -0,18792,22456,0,0,0,0,0,0,0,8204,4152,0,0,0,8204,2265,1045,1046,2267,1356,1357,0,0,0,0,0,1304,0,8206,0,0,0,6495,0, -0,0,22456,0,0,0,0,0,0,0,8204,4152,0,0,0,8204,2265,2140,2140,2267,4271,4272,0,0,0,0,0,1304,0,8206,0,0,0,6495,0, -0,0,22456,0,0,0,0,0,0,0,8204,4152,0,0,0,4153,2265,2137,2138,2267,4336,4206,0,0,0,0,0,1176,4200,8206,0,0,0,6495,0, -0,0,22456,0,0,0,0,0,0,0,8204,4152,0,0,0,4153,2329,2330,2330,2331,8206,0,0,0,0,0,4336,0,0,8206,0,0,0,6495,0, -0,0,22456,0,0,0,0,0,0,0,8362,8363,8363,8363,8363,8363,8363,8363,8363,8363,8363,8363,8363,8363,8363,8363,8363,8363,8363,8364,0,0,0,6495,0, -18523,0,22456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6495,0, -0,0,22456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6495,0, -0,0,22456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19615,6495,0, -0,0,22456,0,0,0,0,0,0,0,0,0,0,11122,0,0,11122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6495,0, -0,0,22456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6495,0, -0,18629,22456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7449,0,0,0,0,0,0,0,6181,6181,6181,6181,6181,6181,6181,6181,6656,0, -0,0,22456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22456, -0,0,22296,22297,22137,22296,22140,22138,0,0,0,0,0,0,0,0,0,0,22137,22138,22140,22296,22137,22137,22297,22137,22137,22295,22137,22137,22140,22296,22297,22297,22613, -0,0,0,0,0,0,0,0,0,0,0,0,22612,0,0,0,0,22613,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,19100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18792,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18946,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,8680,0,0,0,0,12344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8047,8047,8047,8047,0,8047,8048,0,0,0,6495,0,0, +0,0,0,0,0,0,0,12344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8206,0,0,0,0,0,8206,0,0,0,6495,0,0, +0,0,0,0,0,0,0,12344,0,0,0,0,0,0,8363,8363,8363,8363,8363,8363,8363,8363,8206,0,0,0,0,0,8206,0,0,0,6495,0,0, +0,0,0,0,0,0,0,12344,0,0,0,0,0,0,8206,2168,2169,0,0,2108,0,1363,14995,0,0,0,0,4332,8206,0,0,0,6495,0,0, +0,0,0,0,8412,0,0,12344,0,0,0,0,0,0,8206,2232,2233,2106,2107,0,0,1300,0,0,0,0,0,14998,8206,0,0,0,6495,0,0, +0,0,0,0,0,0,0,12344,0,0,0,0,0,0,8206,8047,8047,8048,0,0,0,1427,0,0,0,0,0,14832,8206,0,0,0,6495,0,0, +0,0,0,8520,0,0,0,12344,0,0,0,0,0,0,8206,0,12486,8206,8047,1236,8047,8047,1230,1231,1232,0,0,14998,8206,0,0,0,6495,0,0, +0,0,12341,12184,12027,12025,12025,12501,0,0,0,0,0,0,8206,0,0,1105,1233,1233,1233,1106,0,0,0,0,0,0,8206,0,0,0,6495,0,0, +0,0,12344,0,0,0,0,0,0,0,0,0,0,0,8206,0,0,1297,1490,1489,1490,1298,0,0,0,0,0,0,8206,0,0,0,6495,0,0, +0,0,12344,0,0,0,0,0,0,0,0,0,0,0,8206,0,0,1169,1234,1234,1234,1170,905,906,906,906,906,907,8206,0,0,0,6495,0,0, +0,0,12344,0,0,8046,8047,8047,8047,8047,8047,8047,8047,8047,8206,0,0,8047,0,0,1417,1418,8363,8363,8363,8363,8363,8363,8363,8206,0,0,6495,0,0, +0,8518,12344,0,0,8207,0,1763,1764,1765,3672,0,0,0,0,0,0,0,0,0,1545,1546,0,0,0,0,0,0,0,8206,0,0,6495,0,0, +0,0,12344,0,0,8206,0,1827,1828,1829,0,0,0,0,0,0,0,0,0,0,4152,1111,1239,1239,1239,1239,1239,1112,0,8206,0,0,6654,0,8559, +0,0,12344,0,0,8049,4392,1891,1892,1893,0,0,0,0,0,0,2201,2202,2202,2203,8206,1303,0,0,0,0,0,1304,1923,8206,0,0,0,6495,0, +0,0,12344,0,0,8362,8363,8363,8363,8363,8363,8363,4342,4342,8363,8363,2265,2138,2140,2267,4152,0,0,0,0,0,0,1304,1987,8206,0,0,0,6495,0, +0,0,12344,0,0,0,0,0,0,0,8204,4152,0,0,0,8204,2265,2139,2137,2267,0,0,0,0,0,0,0,1304,4332,8206,0,0,0,6495,0, +0,8680,12344,0,0,0,0,0,0,0,8204,4152,0,0,0,8204,2265,1045,1046,2267,1356,1357,0,0,0,0,0,1304,0,8206,0,0,0,6495,0, +0,0,12344,0,0,0,0,0,0,0,8204,4152,0,0,0,8204,2265,2140,2140,2267,4271,4272,0,0,0,0,0,1304,0,8206,0,0,0,6495,0, +0,0,12344,0,0,0,0,0,0,0,8204,4152,0,0,0,4153,2265,2137,2138,2267,4336,4206,0,0,0,0,0,1176,4200,8206,0,0,0,6495,0, +0,0,12344,0,0,0,0,0,0,0,8204,4152,0,0,0,4153,2329,2330,2330,2331,8206,0,0,0,0,0,4336,0,0,8206,0,0,0,6495,0, +0,0,12344,0,0,0,0,0,0,0,8362,8363,8363,8363,8363,8363,8363,8363,8363,8363,8363,8363,8363,8363,8363,8363,8363,8363,8363,8364,0,0,0,6495,0, +8411,0,12344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6495,0, +0,0,12344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6495,0, +0,0,12344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9503,6495,0, +0,0,12344,0,0,0,0,0,0,0,0,0,0,11122,0,0,11122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6495,0, +0,0,12344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6495,0, +0,8517,12344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7449,0,0,0,0,0,0,0,6181,6181,6181,6181,6181,6181,6181,6181,6656,0, +0,0,12344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12344, +0,0,12184,12185,12025,12184,12028,12026,0,0,0,0,0,0,0,0,0,0,12025,12026,12028,12184,12025,12025,12185,12025,12025,12183,12025,12025,12028,12184,12185,12185,12501, +0,0,0,0,0,0,0,0,0,0,0,0,12500,0,0,0,0,12501,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,8988,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8680,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8834,0,0,0,0,0,0,0,0,0,0,0,0,0 @@ -187,25 +186,25 @@ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22453,22137,22137,0,0,0,0,0,0,0,0,0,0,22137,22137,22613,22612,22137,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19621,0,0, -0,0,0,0,0,0,0,22453,22295,22296,22137,22137,22137,22137,22137,22137,22613,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19937,0,22453, -0,0,0,0,0,0,0,22456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1801,1802,1802,1802,1802,1803,0,0,0,0,0,0,22456, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1865,1866,1866,1866,1866,1867,0,0,0,0,0,0,22456, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1929,1930,1930,1930,1930,1931,0,0,0,0,0,0,22456, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,8206,0,0,0,0,0,0,0,1993,1994,1994,1994,1994,1995,0,0,0,0,0,0,22456, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8206,0,0,0,0,0,0,0,0,0,0,0,22456, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22456, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,8047,0,0,0,0,0,0,0,8206,0,0,0,0,0,0,0,0,0,0,0,22456, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8047,0,8047,0,0,8206,0,0,4332,0,0,0,0,0,0,0,0,22456, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8206,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22456, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8206,0,0,0,0,0,0,0,0,0,0,0,22456, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8206,0,0,0,4341,8206,0,0,0,0,0,0,0,0,0,0,0,22456, -0,0,0,0,0,0,142,143,144,0,0,0,0,0,8047,8047,8047,8206,0,8047,8363,8363,0,0,337,0,0,1547,1420,0,0,0,0,0,22456, -0,0,0,0,0,0,206,207,208,0,8204,0,0,0,0,8204,0,0,0,0,8206,0,0,4274,4209,4332,0,1545,1546,0,0,0,0,0,22456, -0,0,0,0,0,1529,1530,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22456, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12341,12025,12025,0,0,0,0,0,0,0,0,0,0,12025,12025,12501,12500,12025,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9509,0,0, +0,0,0,0,0,0,0,12341,12183,12184,12025,12025,12025,12025,12025,12025,12501,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9825,0,12341, +0,0,0,0,0,0,0,12344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1801,1802,1802,1802,1802,1803,0,0,0,0,0,0,12344, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1865,1866,1866,1866,1866,1867,0,0,0,0,0,0,12344, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1929,1930,1930,1930,1930,1931,0,0,0,0,0,0,12344, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,8206,0,0,0,0,0,0,0,1993,1994,1994,1994,1994,1995,0,0,0,0,0,0,12344, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8206,0,0,0,0,0,0,0,0,0,0,0,12344, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12344, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,8047,0,0,0,0,0,0,0,8206,0,0,0,0,0,0,0,0,0,0,0,12344, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8047,0,8047,0,0,8206,0,0,4332,0,0,0,0,0,0,0,0,12344, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8206,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12344, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8206,0,0,0,0,0,0,0,0,0,0,0,12344, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8206,0,0,0,4341,8206,0,0,0,0,0,0,0,0,0,0,0,12344, +0,0,0,0,0,0,142,143,144,0,0,0,0,0,8047,8047,8047,8206,0,8047,8363,8363,0,0,337,0,0,1547,1420,0,0,0,0,0,12344, +0,0,0,0,0,0,206,207,208,0,8204,0,0,0,0,8204,0,0,0,0,8206,0,0,4274,4209,4332,0,1545,1546,0,0,0,0,0,12344, +0,0,0,0,0,1529,1530,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12344, 0,0,0,0,0,0,0,0,0,0,8204,0,0,0,0,8204,8363,8363,8363,8363,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,8204,4268,1045,1046,4324,4325,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,4335,0,0,4388,4389,0,0,0,0,8206,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -221,15 +220,15 @@ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18530,18534,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8418,8422,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - - + + [ { @@ -240,7 +239,7 @@ ] - + [ { @@ -251,7 +250,7 @@ ] - + [ { @@ -262,7 +261,7 @@ ] - + [ { @@ -273,7 +272,7 @@ ] - + [{ "type": "randomCard", @@ -301,17 +300,17 @@ }] - + - + - + diff --git a/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/main_story/approaches/davriels_mansion_dungeon.tmx b/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/main_story/approaches/davriels_mansion_dungeon.tmx new file mode 100644 index 00000000000..9eeb11fe2d4 --- /dev/null +++ b/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/main_story/approaches/davriels_mansion_dungeon.tmx @@ -0,0 +1,226 @@ + + + + + + + + +7621,7621,7621,7621,7621,7621,7623,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625,7621, +7621,7621,7621,7621,7621,7621,7623,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625,7621, +7466,7466,7466,7466,7466,7466,7780,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7778,7467, +6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625, +6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625, +6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625, +6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625, +6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625, +6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625, +6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625, +6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625, +6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625, +6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625, +6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625, +6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625, +6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7625, +6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,7778, +6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364, +6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364, +6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364, +6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364, +6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364, +6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364,6364 + + + + +0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0, +0,0,0,0,0,0,0,7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0,0, +0,0,0,0,0,0,8235,8239,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8240,8236,0, +7764,7765,7765,7765,7765,7765,8239,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0, +7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0, +7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0, +7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0, +7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0, +7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0, +7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0, +7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0, +7922,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0, +8239,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0, +7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0, +7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0, +7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7924,0, +7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8240,8236, +7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8240, +7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923, +7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923, +7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923, +7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923, +7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,7923,8398 + + + + +8578,8737,8739,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0, +0,0,0,0,0,0,0,11110,11587,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0,0, +0,0,0,0,0,0,0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11584,11112,0,0, +0,11110,11111,11111,11111,11111,11111,11587,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0, +0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0, +0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0, +0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0, +0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0, +0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0, +0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0, +0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0, +0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0, +0,11268,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0, +11111,11587,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0, +11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0, +11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0, +11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11270,0,0, +11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11584,11111,11111, +11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269, +11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269, +11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269, +11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269, +11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11269,11585,11427 + + + + +10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641, +10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641, +10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641, +10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10482,10483,10480,10483,10480,10483,10483,10484,10641,10641, +10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10640,3001,10794,0,10640,0,3003,10642,10641,10641, +10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10640,0,0,0,10802,0,0,10642,10641,10641, +10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10637,10799,10481,0,10637,10483,10799,10639,10641,10641, +10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10640,0,10802,0,10802,0,0,10642,10641,10641, +10641,10641,10482,10483,10483,10483,10484,10641,10641,10641,10641,10640,3002,10640,0,10640,3002,0,10642,10641,10641, +10641,10641,10640,0,0,0,10798,10799,10799,10799,10483,10638,10799,10797,0,10637,10799,10799,10639,10641,10641, +10641,10641,10640,0,0,0,0,0,0,0,2428,10794,0,0,0,10802,0,0,10642,10641,10641, +10641,10641,10640,0,0,0,10478,0,0,0,0,0,0,0,0,10640,0,3001,10642,10641,10641, +10641,10641,10640,0,0,0,10642,0,0,0,0,10478,0,0,0,10640,0,0,10642,10641,10641, +10641,10641,10640,0,0,12644,10642,0,0,10482,10483,10796,10483,10483,10483,10796,10799,10799,10800,10641,10641, +10641,10641,10798,10799,10480,10799,10800,0,10953,10639,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641, +10641,10641,10641,10641,10640,11761,0,0,0,10642,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641, +10641,10641,10641,10641,10640,0,0,0,0,10642,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641, +10641,10641,10641,10641,10640,0,0,0,0,10642,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641, +10641,10641,10641,10641,10640,0,0,0,0,10642,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641, +10641,10641,10641,10641,10640,0,0,0,0,10642,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641, +10641,10641,10641,10641,10798,10799,10799,10799,10799,10800,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641, +10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641, +10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641,10641 + + + + + + + +0,0,0,0,0,10641,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +10641,10641,10641,10641,10641,10641,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + + + + + + + + + + + + [ + { + "type": "gold", + "count": 80, + "addMaxCount": 50 + } +] + + + + + [ + { + "type": "gold", + "count": 10, + "addMaxCount": 60 + } +] + + + + + + + + + + + + + + + + + + + + + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,11280,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,11280,0,2364,0,11280,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,11603,11280,0,11605,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,11763,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,11606,11607,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,11764,11765,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,11615,11616,11617,11618,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,11773,11774,11775,11776,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + diff --git a/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/main_story/approaches/tacenda.tmx b/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/main_story/approaches/tacenda.tmx new file mode 100644 index 00000000000..f64425f257d --- /dev/null +++ b/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/main_story/approaches/tacenda.tmx @@ -0,0 +1,124 @@ + + + + + +2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374, +2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374, +2374,2374,1259,1259,1259,1259,1259,2515,2516,2516,2517,1259,2357,2678,2518,2673,2674,2514,2678,2676,2359,1259,1259,2357,2359,1259,2357,2358,2359,2357,2359,2356,1259,1259,2374,2374, +2374,2374,2358,2358,2359,1259,2357,2513,2362,2360,2514,2358,2678,2516,2518,1259,1259,2515,2516,2360,2675,1259,1259,2673,2672,2358,2678,2516,2676,2671,2675,1259,1259,1259,2374,2374, +2374,2374,2516,2360,2672,2358,2671,2675,2673,2672,2513,2674,2361,2362,2676,2359,1259,2673,2674,2675,1259,1259,1259,1259,2515,2516,2516,2516,2360,2514,2359,1259,1259,1259,2374,2374, +2374,2374,2516,2517,2515,2516,2517,1259,1259,2515,2517,1259,1259,2673,2674,2672,2359,1259,1259,2357,2358,2359,1259,2357,2513,2674,2362,2516,2517,2673,2514,2358,2677,2677,2374,2374, +2374,2374,2516,2517,2673,2674,2675,1259,1259,2673,2675,1259,1259,1259,1259,2673,2514,2358,2358,2678,2516,2676,2359,2673,2675,1259,2673,2674,2672,2359,2515,2516,2360,2361,2374,2374, +2374,2374,2360,2675,1259,2357,2359,1259,2357,2358,2359,2357,2359,2356,1259,1259,2515,2516,2516,2516,2360,2361,2675,2357,2358,2358,2358,2358,2513,2514,2678,2516,2517,1259,2374,2374, +2374,2374,2675,1259,1259,2673,2672,2358,2678,2516,2676,2671,2675,1259,1259,1259,2515,2360,2361,2362,2518,1259,1259,2515,2516,2516,2516,2516,2676,2513,2361,2361,2672,2677,2374,2374, +2374,2374,1259,1259,2356,1259,2515,2516,2516,2516,2360,2514,2359,1259,1259,1259,2673,2672,2359,2673,2514,2359,1259,2515,2516,2516,2360,2361,2674,2675,1259,1259,2673,2362,2374,2374, +2374,2374,1259,1259,1259,2357,2513,2674,2362,2516,2517,2673,2514,2358,2359,1259,2357,2671,2675,1259,2520,2518,1259,2673,2674,2674,2514,2677,2677,2359,1259,1259,1259,2520,2374,2374, +2374,2374,2359,1259,1259,2673,2675,1259,2673,2674,2672,2359,2515,2516,2676,2677,2513,2675,1259,1259,2520,2676,2677,2359,1259,1259,2515,2516,2516,2676,2359,1259,1259,2673,2374,2374, +2374,2374,2676,2358,2359,1259,1259,1259,1259,1259,2673,2514,2678,2516,2516,2516,2517,2357,2358,2358,2678,2516,2360,2675,1259,1259,2673,2362,2516,2516,2517,1259,1259,1259,2374,2374, +2374,2374,2516,2360,2675,1259,1259,2357,2359,1259,1259,2520,2516,2516,2516,2360,2675,2673,2362,2360,2361,2674,2675,1259,1259,1259,1259,2515,2516,2360,2675,1259,1259,2357,2374,2374, +2374,2374,2516,2517,2357,2677,2677,2671,2675,2357,2359,2673,2674,2362,2360,2514,2677,2359,2673,2672,2359,1259,1259,2357,2358,2677,2359,2515,2516,2517,2357,2677,2677,2671,2374,2374, +2374,2374,2674,2675,2515,2516,2516,2518,2357,2678,2517,1259,1259,2673,2672,2671,2674,2675,1259,2673,2675,1259,2357,2678,2516,2360,2675,2673,2674,2675,2515,2516,2516,2518,2374,2374, +2374,2374,1259,1259,2515,2516,2516,2518,2515,2360,2675,1259,2356,1259,2673,2514,2358,2359,1259,1259,1259,2357,2671,2361,2361,2675,1259,1259,1259,1259,2515,2516,2516,2518,2374,2374, +2374,2374,1259,1259,2673,2362,2360,2672,2513,2675,2357,2359,1259,1259,2357,2671,2674,2675,1259,1259,1259,2515,2676,2677,2677,2359,1259,1259,1259,1259,2673,2362,2360,2672,2374,2374, +2374,2374,2356,1259,1259,2673,2675,2673,2514,2358,2678,2517,1259,1259,2515,2518,1259,1259,2357,2359,1259,2673,2361,2362,2516,2517,1259,1259,2356,1259,1259,2673,2675,2673,2374,2374, +2374,2374,2358,2358,2359,1259,1259,1259,2673,2362,2516,2517,1259,2357,2678,2676,2359,1259,2673,2675,1259,1259,1259,2520,2516,2517,1259,1259,2358,2358,2359,1259,1259,1259,2374,2374, +2374,2374,2516,2516,2516,2359,1259,1259,2357,2678,2516,2517,1259,2515,2516,2516,2517,1259,1259,1259,2357,2359,1259,2673,2674,2675,1259,1259,2516,2516,2516,2359,1259,1259,2374,2374, +2374,2374,2516,2516,2516,2672,2358,2359,2515,2516,2516,2517,1259,2673,2674,2674,2675,1259,2357,2358,2678,2517,1259,1259,1259,1259,1259,1259,2516,2516,2516,2672,2358,2359,2374,2374, +2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374, +2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1236,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1394,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1394,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1394,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1394,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,1237,1555,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,1394,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,1080,1397,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,1394,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,1553,1080,1080,1080,1239,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,1552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,3629,0,0,0,0,0,0,0,0,0,0,0,235,0,0,0,0,4082,0,0,0,0,0,0,0,0,77,0,0,0,0,0, +0,0,0,3450,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4244,0,0,0,0,70,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4562,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,3306,0,0,0,0,0,0,231,0,0,0,199,0,0,0,0,231,0,0,7537,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,41,0,0,0,0,63,0,0,0,4399,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,4713,4406,0,4557,0,0,0,0,0,0,0,0,0,0,217,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,4724,4717,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,0, +0,0,0,0,217,0,0,0,0,216,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,4248,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,0,0, +0,0,0,0,0,0,0,3307,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,0,0,0,0,0,0, +0,0,0,0,59,0,0,0,0,0,0,0,0,0,215,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3451,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,7538,0,0,0,0,0,0,0,0,0,0,0,0,0,218,0,0,0,0,0,0,59,0,0,0,0,0, +0,0,0,59,0,0,0,0,0,0,0,59,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,218,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,231,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,59,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,217,0,0,73,0,0,0,0,0,217,0,0,0,0,0,0,0,0,0,0,0,0,220,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3930,3934,3932,0,0,0,58,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,0,0,0,3450,3925,4244,4250,4245,3935,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3925,4240,4085,3933,4244,4251,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,4084,4087,4243,3630,3628,3623,3470,3628,3318,0,3316,3623,3312,3627,4724,4719,3627,3628,4718,4722,4090,4083,4092,4244,4251,4399,4714,4561,4724,4719,4402,4558,0,0, +0,0,4084,4093,0,0,3629,3633,3634,3629,3631,0,3474,3475,3467,3622,4406,4720,4719,3623,4403,4406,4245,4240,4092,4093,0,4720,4724,4719,4406,4720,4560,4558,0,0, +0,0,4081,4251,0,0,0,0,0,0,4404,4409,3629,3465,3464,4556,4564,0,4557,3464,3631,4564,4241,4242,4247,4251,4404,4406,0,4720,4719,4406,4565,3470,0,0, +0,0,4093,0,0,4404,4406,0,0,4404,4718,4722,0,3466,4567,4720,4722,0,3629,3628,4718,4722,0,3308,3315,4399,4718,4719,4405,4406,4720,4722,4565,3473,0,0, +0,0,4251,0,0,4565,4403,4406,4404,4718,4722,0,0,3627,4722,4404,4406,0,0,3624,3631,0,0,4720,4719,4402,3476,4720,4560,4567,0,4404,4714,3312,0,0, +0,0,3924,3924,0,4720,4721,4719,4714,4564,0,0,0,4559,4404,3627,4719,3314,3315,0,3313,3315,0,0,4715,4560,3476,0,4720,4725,0,4562,4555,4556,0,0, +0,0,3933,3935,0,0,0,4402,4555,4722,4398,0,4720,4719,4714,3468,3629,3630,3631,3313,3627,3628,3318,0,0,3629,3631,4404,4406,0,0,4720,4719,3311,0,0, +0,0,4081,4248,0,4404,4714,4558,4564,0,3308,3315,0,4720,4724,3628,3315,0,3313,3623,3312,3627,3631,0,4404,3315,0,4562,4403,4405,4406,0,4720,4560,0,0, +0,0,3315,0,0,4562,4558,4561,4717,0,3624,3628,0,3313,3315,3629,3631,3313,3627,3633,3633,3628,3315,4404,4714,3312,3315,4720,4721,4560,4403,4405,4406,4565,0,0, +0,0,3476,0,0,4715,4716,4722,0,0,0,3629,3628,3627,3631,0,3313,3627,3631,0,0,3629,3631,4565,4566,3470,3631,0,0,4720,4556,4561,4722,4565,0,0, +0,0,3312,3315,0,0,0,3316,3315,0,3308,3315,3629,3628,4406,0,4720,4719,3315,0,3313,3317,3315,4720,3469,4559,4404,4401,0,4404,4718,4725,0,4723,0,0, +0,0,3467,3468,0,3451,3316,3623,3312,3314,3627,3628,3315,3466,4713,4406,0,4720,4719,3317,3627,3465,3473,0,3629,3628,4714,4559,4404,4402,4567,0,0,4405,0,0, +0,0,3627,3631,0,0,3629,3633,3465,3472,3473,3629,3631,3474,3475,4564,0,0,4562,4558,3476,3629,3631,0,0,3471,4561,4719,4718,4724,4722,0,4565,3470,0,0, +0,0,3634,0,3313,3309,3315,0,3629,3625,3631,3313,3317,3311,3470,4722,0,4404,4718,4716,3631,0,0,0,3313,3627,4719,4718,4722,4404,4406,4404,3627,3628,0,0, +0,0,0,0,3632,3465,3622,3315,0,0,3313,3627,3630,3630,3628,4406,0,4723,4725,0,0,0,0,0,3471,3476,4720,4719,4406,4565,4567,4565,3622,3627,0,0, +0,0,3315,0,0,3629,3633,3628,3314,3309,3627,3631,0,0,3629,4719,4406,0,0,0,3313,3315,0,0,3632,3634,0,4720,4722,4720,4719,4718,3465,3473,0,0, +0,0,3476,0,3313,3315,0,3629,3633,3465,3622,3317,3318,0,0,4720,4722,4404,4401,4404,3627,3631,0,3313,3318,0,0,0,0,0,4720,4722,3632,3465,0,0, +0,0,3312,3317,3627,3631,0,3313,3315,3629,3633,3625,3631,3313,3315,0,4404,4718,4719,4402,3473,0,3313,3311,3476,0,0,0,0,0,0,0,3313,3623,0,0, +0,0,3469,3470,3628,3315,3313,3627,3628,3317,3315,0,3313,3623,3622,3314,4718,4719,4718,4560,3476,3313,3311,3470,3631,0,0,0,0,0,0,3313,3627,3465,0,0, +0,0,3627,3628,3623,3312,3627,3628,3627,3465,3622,3309,3627,3465,3467,3467,4403,4718,4719,4718,3628,3627,3469,3312,3315,0,0,0,0,0,3307,3624,3628,3315,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + + + diff --git a/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/towns/inn__gavony_parish.tmx b/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/towns/inn__gavony_parish.tmx new file mode 100644 index 00000000000..b81aaacf408 --- /dev/null +++ b/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/towns/inn__gavony_parish.tmx @@ -0,0 +1,150 @@ + + + + + + + + + +23560,23682,23681,23559,23560,23682,23681,23681,23559,23560,23682,23681,23559,23560,23682,23681,23681,23560,23682,23681,23559,23560,23682,23681,23681, +23559,23682,23687,23683,23559,23694,23559,23560,23681,23559,23682,23687,23683,23559,23694,23559,23560,23559,23682,23687,23683,23559,23694,23559,23560, +23559,23682,23549,24052,24047,24048,24049,24052,24047,24048,24049,24050,24052,24047,24048,24049,24052,24052,24047,24048,24049,24050,23682,23681,23566, +23559,23559,23421,23924,23919,23920,23921,23924,23919,23920,23921,23922,23924,23919,23920,23921,23924,23924,23919,23920,23921,23922,23694,23559,23682, +23559,23682,23549,24052,24047,24048,24049,24050,24047,24048,24049,24050,24047,24048,24049,24050,23920,24052,24047,24048,24049,24050,23688,23681,23681, +23559,23683,23564,23924,23919,23920,23921,23922,23919,23920,23921,23922,23919,23920,23921,23922,23920,23924,23919,23920,23921,23922,23420,23686,23560, +23559,23421,23422,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,23420,23565,23566, +23682,23549,23550,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23548,23693,23694, +23559,23421,23422,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,23420,23565,23566, +23682,23549,23550,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23548,23693,23694, +23559,23421,23422,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,23420,23565,23566, +23682,23549,23550,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23548,23693,23694, +23559,23421,23422,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,23420,23565,23566, +23682,23549,23550,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23548,23693,23694, +23559,23421,23422,23543,23543,23544,23545,23546,23547,23543,23544,23545,23546,23547,23548,23547,23543,23544,23545,23546,23547,23548,23691,23565,23566, +23559,23549,23683,23553,23554,23555,23554,23555,23553,23554,23555,23422,23415,23416,23565,23554,23555,23553,23554,23555,23553,23554,23555,23693,23694, +23682,23561,23681,23681,23682,23683,23682,23683,23681,23682,23683,23550,23415,23416,23693,23682,23683,23681,23682,23683,23681,23682,23683,23559,23682, +23559,23560,23682,23681,23559,23560,23682,23681,23559,23560,23682,23422,23415,23416,23565,23681,23559,23560,23682,23681,23559,23560,23682,23681,23681, +23682,23683,23681,23559,23694,23559,23682,23681,23559,23682,23561,23550,23543,23544,23693,23682,23681,23559,23682,23687,23683,23559,23694,23559,23560 + + + + +0,10502,10503,10823,0,0,10822,10503,10503,10823,0,0,0,10822,10504,0,10502,10503,10504,0,0,10504,0,0,0, +0,10823,0,0,0,0,0,0,0,0,0,0,0,0,10822,10503,10823,0,10822,10503,10823,10822,10504,0,0, +10823,0,0,0,14390,14392,14390,14390,14392,14390,14390,14392,14390,14392,14390,14390,14392,14390,14390,14392,0,0,10822,10504,0, +0,0,0,0,0,0,0,0,0,33008,0,0,0,0,33008,0,0,0,0,0,0,0,0,10822,10504, +0,0,0,0,0,0,11342,11342,0,0,0,11342,11342,0,0,11342,11342,0,0,0,0,0,0,10664,10820, +0,0,14231,0,11339,11181,11500,11500,11181,11181,11181,11500,11500,11181,11181,11500,11500,11181,11340,0,0,0,0,10662,0, +10665,0,14231,0,11495,0,0,0,0,0,0,0,0,0,0,0,0,0,11495,0,0,0,14233,10662,0, +10818,10665,14231,11339,11336,11340,0,14534,0,11337,0,33008,0,0,33008,0,14846,0,11495,14527,0,0,14233,10662,0, +0,10660,14231,11495,11653,11495,0,11337,0,11494,11181,0,0,0,14682,11181,11336,11181,11338,11182,0,0,14233,10822,10504, +0,10660,14231,11495,14839,11336,11181,11813,0,11495,0,14523,33008,33008,14523,0,11495,0,14843,0,0,0,14233,10664,10820, +10502,10823,14231,11494,11182,11494,14846,0,11180,11336,11181,11182,0,0,14681,11181,11336,11181,11338,11182,0,0,17592,10662,0, +10660,0,14231,11495,0,11494,14845,11337,11180,11652,0,33008,0,0,33008,0,11494,14844,0,0,0,0,10664,10820,0, +10660,0,14231,11494,11338,11336,11181,11336,11181,11336,11181,11181,11656,11657,11181,11181,11338,11496,11181,11182,0,0,10822,10504,0, +10818,10665,14231,14843,0,14841,0,14843,0,14845,0,11654,11658,11659,11655,0,0,11653,0,0,0,0,17592,10662,0, +0,10818,10665,14390,14392,14390,14390,14392,14390,14390,14392,14390,12419,12419,14390,17278,17278,17278,10664,10665,14390,14390,14391,10822,10504, +0,0,10818,10819,10819,10819,10819,10819,10819,10665,0,0,0,0,0,0,10664,10819,10820,10818,10819,10819,10665,10664,10820, +0,0,0,0,0,0,0,0,0,10821,0,0,0,0,0,0,10824,0,0,0,0,0,10818,10820,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,13687,0,0,0,0,0,0,0,0,0,0 + + + + + + + +0,0,0,0,14859,14860,0,0,0,14859,14860,0,14859,14860,0,0,0,14859,14860,0,0,0,0,0,0, +0,0,0,0,15017,15018,0,0,0,15017,15018,0,15017,15018,0,0,0,15017,15018,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,17278,17278,17278,17278,0,0,0,0,0,0,0,0,0,0,0, +0,14855,14856,15316,15315,15315,14525,14526,15315,0,0,0,0,0,0,15472,15314,15475,15314,15314,15316,15316,0,0,0, +0,15013,15014,15316,15315,15315,14683,14684,15315,15315,0,0,0,0,15315,14690,14691,15474,15473,15315,15316,15316,0,0,0, +0,0,0,15316,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15315,15316,15316,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,14530,14531,0,14847,12623,0,0,0,14527,12623,0,0,0,0,8433,0,14859,14860,0, +0,0,0,0,14842,0,14688,14689,0,0,0,14845,0,0,0,0,0,0,0,14682,8278,8278,15017,15018,0, +0,0,0,0,0,0,0,0,0,0,12623,0,0,0,0,12623,0,0,0,8275,8276,8277,0,0,0, +0,0,0,0,14842,0,0,0,14841,0,0,14681,0,0,0,0,0,0,0,14841,8279,8281,0,0,0, +0,14859,14860,0,14839,0,0,14843,14842,0,12623,0,0,0,0,12623,0,0,0,14523,8437,8439,0,0,0, +0,15017,15018,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14681,0,8432,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,14078,0,0,14080,0,0,14841,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,14236,0,0,14238,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14859,14860,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15017,15018,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,33573,33574,33575,33576,0,0,0,0,0,0,0,0,0,0,0, +0,0,17435,17278,17278,17278,17278,17278,17278,17278,33601,33602,33603,33604,17278,17278,17278,17278,17278,17278,17278,17278,17437,0,0, +0,0,17592,0,0,0,0,0,0,0,33629,33630,33631,33632,0,14532,14533,0,0,0,0,0,17592,0,0, +0,0,17592,0,0,0,0,0,0,0,33657,33658,33659,33660,0,0,0,0,0,0,0,0,17592,0,0, +0,0,17592,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17592,0,0, +0,0,17592,14390,0,14390,14390,14392,14390,14390,14390,14390,14392,14390,14390,14390,14390,14392,0,14390,14392,14390,17592,0,0, +0,0,17592,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8434,17592,0,0, +0,0,17592,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17592,0,0, +0,0,17592,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8913,17592,0,0, +0,0,17592,0,0,0,0,0,0,0,0,0,32937,32938,0,0,0,0,0,0,0,0,0,0,0, +0,0,17592,0,0,0,0,0,0,0,0,0,32965,32966,0,0,0,0,0,0,0,0,17592,0,0, +0,0,17592,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8913,0,17592,0,0, +0,0,17592,0,0,0,0,0,0,0,0,0,14079,14079,0,0,0,0,0,0,0,3729,0,0,0, +0,0,17751,17278,17278,17278,17278,17278,17278,17278,17278,17279,14237,14237,17277,0,0,0,17278,17278,17278,17278,17753,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6340,0,0,4747,4748,0,0,0,0,0, +0,0,0,0,0,0,4743,4744,0,0,0,0,0,0,0,0,0,0,4905,4906,0,0,0,0,0, +0,0,0,0,0,0,4901,4902,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,3575,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/towns/inn_abbey.tmx b/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/towns/inn_abbey.tmx new file mode 100644 index 00000000000..271e06815be --- /dev/null +++ b/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/towns/inn_abbey.tmx @@ -0,0 +1,128 @@ + + + + + + + + +23559,23560,23682,23681,23559,23560,23682,23681,23559,23560,23682,23681,23559,23560,23682,23681,23559,23560,23682,23681,23559,23560,23682,23681,23566, +23682,23561,23681,23559,23694,23559,23682,23681,23559,23682,23559,23681,23559,23694,23559,23682,23681,23559,23682,23560,23681,23559,23694,23559,23682, +23559,23560,23682,23687,23688,23689,23687,23688,23689,23687,23688,23689,23687,23688,23689,23687,23688,23689,23687,23688,23689,23564,23688,23681,23681, +23682,23683,23564,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23420,23686,23560, +23559,23421,23422,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,23420,23565,23566, +23682,23549,23550,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23548,23693,23694, +23559,23421,23422,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,23420,23565,23566, +23682,23549,23550,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23548,23693,23694, +23559,23421,23422,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,23420,23565,23566, +23682,23549,23550,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23548,23693,23694, +23559,23421,23422,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,23420,23565,23566, +23682,23549,23550,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23548,23693,23694, +23559,23421,23422,23543,23543,23544,23545,23546,23547,23543,23544,23545,23546,23547,23548,23547,23543,23544,23545,23546,23547,23548,23691,23565,23566, +23559,23549,23683,23553,23554,23555,23554,23555,23553,23554,23555,23422,23415,23416,23565,23554,23555,23553,23554,23555,23553,23554,23555,23693,23694, +23682,23561,23681,23681,23682,23683,23682,23683,23681,23682,23683,23550,23415,23416,23693,23682,23683,23681,23682,23683,23681,23682,23683,23559,23682, +23559,23560,23682,23681,23559,23560,23682,23681,23559,23560,23682,23422,23415,23416,23565,23681,23559,23560,23682,23681,23559,23560,23682,23681,23681, +23682,23683,23681,23559,23694,23559,23682,23681,23559,23682,23561,23550,23543,23544,23693,23682,23681,23559,23682,23687,23683,23559,23694,23559,23560 + + + + +0,10502,10503,10503,10504,0,0,10502,10823,0,10822,10503,10503,10504,0,0,0,0,0,0,0,0,0,0,0, +10502,10823,0,0,10822,10503,10503,10823,0,0,0,0,0,10822,10504,0,0,0,10502,10503,10504,0,0,0,0, +10823,0,0,0,0,0,0,0,0,0,0,0,0,0,10822,10503,10503,10503,10823,0,10822,10503,10504,0,0, +0,0,14231,14390,14392,14390,14390,14392,14390,14390,14392,14390,14390,14392,14390,14390,14392,14390,14390,14392,14390,14390,10822,10504,0, +10665,0,14231,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14233,10662,0, +10818,10665,14231,11339,11181,11340,0,14534,0,11337,0,0,0,0,0,0,11337,0,0,0,0,0,14233,10662,0, +0,10660,14231,11495,0,11495,0,14692,0,11495,0,0,0,0,0,0,11494,11181,11181,11182,0,0,14233,10822,10504, +0,10660,14231,11495,0,11494,11181,11181,11181,11652,0,0,0,0,0,0,11495,0,0,0,0,0,14233,10664,10820, +10502,10823,14231,11495,0,11495,0,0,0,11495,0,33008,32655,32656,33008,0,11494,11181,11181,11182,0,0,14233,10662,0, +10660,0,14231,11495,0,11495,0,0,0,11495,0,0,32683,32684,0,0,11495,0,0,0,0,0,10664,10820,0, +10660,0,14231,11497,11181,11338,11181,11181,11181,11338,11181,11181,11656,11657,11181,11181,11338,11181,11181,11182,0,0,10822,10504,0, +10818,10665,14231,0,0,0,0,0,0,0,0,11654,11658,11659,11655,0,0,0,0,0,0,0,14233,10662,0, +0,10818,10665,14390,14392,14390,14390,14392,14390,14390,14392,14390,12419,12419,14390,14392,14390,14390,10664,10665,14390,14390,14391,10822,10504, +0,0,10818,10819,10819,10819,10819,10819,10819,10665,0,0,0,0,0,0,10664,10819,10820,10818,10819,10819,10665,10664,10820, +0,0,0,0,0,0,0,0,0,10821,0,0,0,0,0,0,10824,0,0,0,0,0,10818,10820,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,13687,0,0,0,0,0,0,0,0,0,0 + + + + + + + +0,0,0,0,0,0,0,0,14855,14856,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,14855,14856,0,14859,14860,0,0,15013,15014,0,14859,14860,0,0,0,0,0,0,0,0,0,0,0,0, +0,15013,15014,0,15017,15018,0,0,0,0,0,15017,15018,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,15314,15473,15472,0,0,0,0,0,0,0,0,0,0,14527,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,14525,14526,0,0,12623,0,0,0,0,12623,14685,0,0,14524,0,0,14859,14860,0, +0,0,0,0,15315,0,14683,14684,33008,0,0,0,0,0,0,0,0,0,0,14682,0,0,15017,15018,0, +0,0,0,0,15315,0,0,0,0,0,12623,0,0,0,0,12623,0,0,0,14523,0,0,0,0,0, +0,0,0,0,15315,0,15316,15316,15316,0,0,0,0,0,0,0,0,0,0,14681,0,0,0,0,0, +0,14859,14860,0,15315,0,15316,15316,15316,0,12623,0,0,0,0,12623,0,0,0,14527,0,0,0,0,0, +0,15017,15018,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14685,0,0,0,0,0, +0,0,0,15475,15474,15314,0,0,0,0,0,14078,0,0,14080,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,14236,0,0,14238,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14233,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,251,0,8278,8437,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,32937,32938,0,0,0,0,0,0,8280,8434,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,32965,32966,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8913,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,251,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14233,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8913,0,14233,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,14079,14079,0,0,0,0,0,0,0,3729,0,0,0, +0,0,14389,0,0,0,0,0,0,0,0,0,14237,14237,0,0,0,0,14392,14390,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6340,0,0,4747,4748,0,0,0,0,0, +0,0,0,0,0,0,4743,4744,0,0,0,0,0,0,0,0,0,0,4905,4906,0,0,0,0,0, +0,0,0,0,0,0,4901,4902,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,3575,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/towns/inn_gavony_chapelry.tmx b/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/towns/inn_gavony_chapelry.tmx new file mode 100644 index 00000000000..54318d93e38 --- /dev/null +++ b/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/towns/inn_gavony_chapelry.tmx @@ -0,0 +1,129 @@ + + + + + + + + +23559,23560,23682,23681,23559,23560,23682,23681,23559,23560,23682,23681,23559,23560,23682,23681,23559,23560,23682,23681,23559,23560,23682,23681,23566, +23682,23561,23681,23559,23694,23559,23682,23681,23559,23682,23559,23681,23559,23694,23559,23682,23681,23559,23682,23560,23681,23559,23694,23559,23682, +23559,23560,23682,23687,23688,23689,23687,23688,23689,23687,23688,23689,23687,23688,23689,23687,23688,23689,23687,23688,23689,23564,23688,23681,23681, +23682,23683,23564,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23420,23686,23560, +23559,23421,23422,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,23420,23565,23566, +23682,23549,23550,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23548,23693,23694, +23559,23421,23422,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,23420,23565,23566, +23682,23549,23550,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23548,23693,23694, +23559,23421,23422,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,23420,23565,23566, +23682,23549,23550,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23548,23693,23694, +23559,23421,23422,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,23420,23565,23566, +23682,23549,23550,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23548,23693,23694, +23559,23421,23422,23543,23543,23544,23545,23546,23547,23543,23544,23545,23546,23547,23548,23547,23543,23544,23545,23546,23547,23548,23691,23565,23566, +23559,23549,23683,23553,23554,23555,23554,23555,23553,23554,23555,23422,23415,23416,23565,23554,23555,23553,23554,23555,23553,23554,23555,23693,23694, +23682,23561,23681,23681,23682,23683,23682,23683,23681,23682,23683,23550,23415,23416,23693,23682,23683,23681,23682,23683,23681,23682,23683,23559,23682, +23559,23560,23682,23681,23559,23560,23682,23681,23559,23560,23682,23422,23415,23416,23565,23681,23559,23560,23682,23681,23559,23560,23682,23681,23681, +23682,23683,23681,23559,23694,23559,23682,23681,23559,23682,23561,23550,23543,23544,23693,23682,23681,23559,23682,23687,23683,23559,23694,23559,23560 + + + + +0,10502,10503,10503,10504,0,0,10502,10823,0,10822,10503,10503,10504,0,0,0,0,0,0,0,0,0,0,0, +10502,10823,0,0,10822,10503,10503,10823,0,0,0,0,0,10822,10504,0,0,0,10502,10503,10504,0,0,0,0, +10823,0,0,0,0,0,0,0,0,0,0,0,0,0,10822,10503,10503,10503,10823,0,10822,10503,10504,0,0, +0,0,14231,14390,14392,14390,14390,14392,14390,14390,14392,14390,14390,14392,14390,14390,14392,14390,14390,14392,14390,14390,10822,10504,0, +10665,0,14231,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14233,10662,0, +10818,10665,14231,11339,11496,11340,0,14534,0,11337,0,0,0,0,14524,0,14846,14843,0,14527,0,0,14233,10662,0, +0,10660,14231,11495,11653,11495,0,11337,0,11494,11181,0,0,0,14682,11181,11336,11338,11181,11182,0,0,14233,10822,10504, +0,10660,14231,11495,0,11494,11181,11813,0,11495,0,14523,0,0,0,0,11495,0,14843,0,0,0,14233,10664,10820, +10502,10823,14231,11495,0,11495,0,0,0,11494,11181,11182,32655,32656,11180,11181,11336,11181,11338,11182,0,0,14233,10662,0, +10660,0,14231,11495,0,11495,0,0,0,11652,0,0,32683,32684,0,0,11495,0,0,0,0,0,10664,10820,0, +10660,0,14231,11497,11338,11338,11181,11181,11181,11338,11181,11181,11656,11657,11181,11181,11338,11496,11181,11182,0,0,10822,10504,0, +10818,10665,14231,0,0,0,0,0,0,0,0,11654,11658,11659,11655,0,0,11653,0,0,0,0,14233,10662,0, +0,10818,10665,14390,14392,14390,14390,14392,14390,14390,14392,14390,12419,12419,14390,14392,14390,14390,10664,10665,14390,14390,14391,10822,10504, +0,0,10818,10819,10819,10819,10819,10819,10819,10665,0,0,0,0,0,0,10664,10819,10820,10818,10819,10819,10665,10664,10820, +0,0,0,0,0,0,0,0,0,10821,0,0,0,0,0,0,10824,0,0,0,0,0,10818,10820,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,13687,0,0,0,0,0,0,0,0,0,0 + + + + + + + +0,0,0,0,0,0,0,0,14855,14856,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,14855,14856,0,14859,14860,0,0,15013,15014,0,14859,14860,0,0,0,0,0,0,0,0,0,0,0,0, +0,15013,15014,0,15017,15018,0,0,0,0,0,15017,15018,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,15314,15473,15472,15315,15314,15472,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,14530,14531,0,14847,12623,0,0,0,0,12623,0,0,0,0,0,0,14859,14860,0, +0,0,0,0,14842,0,14688,14689,0,0,0,14845,0,0,0,0,0,0,0,14682,0,0,15017,15018,0, +0,0,0,0,0,0,0,0,0,0,12623,0,0,0,0,12623,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,14528,14529,0,0,14681,0,0,14840,0,0,0,0,14841,0,0,0,0,0, +0,14859,14860,0,14839,0,0,14686,14687,0,12623,0,0,0,0,12623,0,0,0,14523,0,0,0,0,0, +0,15017,15018,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14681,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,14078,0,0,14080,0,0,14841,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,14236,0,0,14238,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14233,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8278,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,32937,32938,0,0,0,0,0,0,0,8434,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,32965,32966,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8913,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14233,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8913,0,14233,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,14079,14079,0,0,0,0,0,0,0,3729,0,0,0, +0,0,14389,0,0,0,0,0,0,0,0,0,14237,14237,0,0,0,0,14392,14390,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6340,0,0,4747,4748,0,0,0,0,0, +0,0,0,0,0,0,4743,4744,0,0,0,0,0,0,0,0,0,0,4905,4906,0,0,0,0,0, +0,0,0,0,0,0,4901,4902,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,3575,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/forge-gui/res/adventure/Innistrad/maps/tileset/buildings.png b/forge-gui/res/adventure/Innistrad/maps/tileset/buildings.png index 19ec78526d5761bcabc2c8dac1ac6e8939201456..fd7bcffc7ca893410e78fbdc7207deee2ea81a34 100644 GIT binary patch literal 232481 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⧁jzfBt8+YD1>$t_NaPg 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%0Df`qslkku2$ljSL{3;cf&|JuTO{HJO0M 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

jxVp@F;WwSy8vw`hmY`>c@ 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 S2C#QH0NmC#)WT{yMEnn_qRij` literal 240599 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%0AXXB+T1Zxc^$h*o*&hMTYtk*PNAD^ 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

  • 0=?F~#D^EG-IFK4Z(t+k*JUQh7)rg{Bf*&q{GsuF+lT}z|lWlx(N3DC|`I z`|(0tV^VZ)X@bN0g?iAi_YhznS^1*Q@=JVp6`?75ElijClC!7Hd$f$|WY|dCi1nCi zeqdiI;xU50LSSK{PUKVhpFwQ8$}XBzyT71cKMF!sl}1Er%M!spe6*o2a>=X8f9`H_ z@Pcq2C{VI!=edA;WP|cdO4j9{pD8D{GCNP3;oEO+TRhZ;m?)Qf{=-mf_z$SiRX_Bd zY8boB>0I^F$YvbGalDZ3tX1-^8U=!+;uX0pzvR;rVg3;07@a1Eb%=7P&U+JM{7~+M za-+=Vt$?kip&5LadU`%u)vQOqQ?+%JXL?}>r(m-jZ!Dr{zp-2}dJpVt;kk_4_~?$Z`l-Hh`4s}G`^L@8tKh+l>AbN$f{sT z#8UY8sP{3oV+O?1VPL2U^lO-Y()MkX!o(ldR|>C7NWS*D8Tu9|p@F)VicggEGO{a%SBqE+alb93 z*5LW@3aZlyzBcOB&@(;@TGy8g?{@w4oHb-OgV%e?UO&94a3*B=L6^>n1yL1{pYD4) z`t)-D%<79+9oO6?=vI9IWz;cl7D>bFg24A_KH3!R8l^j@J4-v(A>qr4{GR`o9^Z;1 zN3EXxZ~o43Q#So#ya5=AAjvHuTASqe)K{Bh(kvJ)Z!o`o5?UCp5EEfzsr)nd6x>sv zBz3IgcsP>~Q3EQeqtk*?3t6{Pr33I47?csb%6hu5v=p*HPnrTus?m$Mq7~W9L1c#{ z@f(lTVq`drP$7)2|F{GQ0L2-?T^3+_{Gtr*lVTxuhq|9Xk`7rXeNIF$<8LFX4#3W8 z9oK(<%dSZX_+D=3SM2aJrcbWlQ=OlAl6al{oc&F=T=FNkTLPmAsg6upRNHb%wz=1_ zBnbw0$9xyH{cYDDkPH_CMZ}5f04?f|F?mwu?*J7$&QtE0m#ckhf7E#|!LQg`H@j5D z%byI%cd6gID}re*WuhkXPH9q4?aQPIR+AafIAJ#MzTW+XY#QYK^5&qi8*#izEc*og z1GJ#j-aY=Mk}z6)&XJs-ggPm!1`DP^DzzggL?~=oS8zaf8nUqbti%8T2GAVQ&?}w! z%bj_Mk3WnT3}8+J2HAj)qo;7GYtVhae{;-N1yUO}azt;cv-g^AFe6&FB9hA@+wvCEz(Je^&ZRqZcG!j==Nt+NwiL zI_1E;okX8ZjkFwJJ8*munUMoA@n&VFB6c|XW0uz?%OTZDhFBHtUFSUho>$55vBB_L z=}1G~_k|667IWB7Fx6J3$h-0D>J)9|JsS7ewglEgd>#5084o+*N25C8lSAZ$d^s*% zKf1NuhJ}h@A*&;qo4H8N^vV07{s^6ASH+^oyjs?4v?8u@aejF z8vVG2uMkF>*KDhN^yI~?e#6HKfuAm+2SaUhmZ@kT*mZJGH}$%^oGQylu$lVomXQVdcZJ)oh6a0yzwJO&l` zh_4V?_z!dh{deC9b-znq8Q%!!{IL-)MB}F0m$|p~(OO(=y_aRnP0Z5lnuR}vbiya8 zWG&U=scc!Ob#WWOXJ3ZTT9)A#UpWP8PH=fB#a@L@u9@`wfW_g*nlgDD&tP&qG4UAy zzfO#OY{Dm-f`(pzlYzva>BsT**htF-w&4iaL5!nM&$@FqH>C z-z2-fZxz!5aSl!$ zxL^NLFu=0_oG57nFwzxBI>*HsK&jDgqo$adTd#-6Z}_^~ft=3(P|3gOYvkT{#Aq8R zheTw=AC1Nt7F_D==UAqzR0?pvg7T!@y#E)*BY`ryf1qj$!hZ_XdBd1OcZE*QQ(QqG zWS!8~T#hALd)6>ulCc*|bt`zwvT#x?dYw-?S}Wi~R8TksirstvilHbcdbZP1 z9&pDO<%2{kBq8bY$1uy)o_cBX%Nnil zRB=9I9g7y_Jki=^-+)aKS_7AoENCq-)26osE!||C4X`&o>I(70KSrY;$N^xB%1VhU z5wZyMJE`+iom}!G$Ks>zm1lAf{YndbVADWCQ-%qHXT1v+g1-1Os9f4DRX*C1YG3op z6B7w(*jlZ&00jlWqQ-|z?~ZLwl%*yVt7K*i3;W`N@fKC&d=+4sAc!?ROCODl0F0xI z$pcu^Izs%AuYP37DJO^eOwHpH6Bz%fRSJfg8kU^-!`U>2x&*?=9sX=-H3Xt6S((t_ z2)Tra+u0RjsYQLO*+!( ziHn+dd1>E|>x%uihw892sI{^kSXxiFCI)d9!3-x_$f%Ra@(%oPBO{Pt@c&E1$kL9? zV>bOXdaC8ncW7x{3I(ewbazCMg6kMl8Pv47U0{o<=E;K3Z|hng&(HYXRP>KOWRH}zG-N`a#ED3#T-HYnCpL?*Yxrhe_#)A$^ZMX zC*s7|r&hiH#WoMPHxWvj_%4T{dXye4og3^7@34VSk(6~cz%B@9z}{XMF4mDZtRlg} zm~rpO4}*c+-y?n39QNT<7FMiex;r87Cdtf%=XG2fK|w{*jZOi*e;kXd;}#?fks_&S zh&Ybt>ts5>)oQ6A*|J0Xnvx}}WULTi1TM$PIZc+}-jfu_mwZmUST@<6CD=u4q zi^aB1FN!syCmQA=eTf7%o$r7%4H5#>0nXzT$9fjm{}~EFzIDcAFR0}BV;jVx0I}51 zKmV@=ye;K}^7PB*^x}W0cf)?z|AA)l%3`mU1Ku`Nr~g|v>bxKek07Mpix`Wgf@*Uq z_Brhp-MWwOVs1==pMRG)J5-0X|1rNFB_9!eV}E)S!JHx@%nc=S>K&GMUR2IuG`&xB zX>iB;HBiFPK92>4A|$FDfbaol!1cukIt-=IuLHjSI-RJ2sMU!fx$Ig56uF+!?UL3xiaqy&!_>g!UaIDh)f|uIa2YV|Y?6Usm6tIZ2AKIftyap94Hi z`De)(`UL$Cf?Sgq8hFplW*GYXoMf6nOB;JTiP{=Dm{uh9u~k!*w)VW(SZ9FG30eP5 zE#`Z-%c@m}>nUSvnjK*NoS8KG7PK$B!L61B@UsnDOq=A|p-?}=#igTt<2Yxd5R|c% zW)Qy}vuf-Am!geghMKv7BZeZB3{BPtMZ%w!k?2Lp%M~>4+tbc??&q=x*S1Rj zM1cw?$6beIWRTOcNW*f$2T1*+F{m*0(EHA-YfdtG>3l(pNA{%`NK4JBu&V@KY^sw$ zX%#e$mynwGN8qLUI(tAek>vC#O2J0>!q2n0goviplsSTJt8)$4^`fAaf(~oe6`VT+ zU6eA0lAshM>!D_Hn33QfHDHNgtsfFnGer4fBGKw-+7D<*H8)TvxgguKuWxjIWS*8l zE-ruH-OtrLVh~YMpHv{!P@a+Rf7(KrNLNM%m!Hj--32`X-`fo#Sc+q6azXj^Ef7+a zu-DV*dLxzsC+ojT{UznqL3t44l&Qk!>BYsQ2x=)q}Fzo}xmWb!itx?y)M!jK=u?o+&k%!`cjJOoXobMqp1RU;5Ke zfY80IG<_8Py9ic2?V`s{EBD(u#t&fch?BA=3z`|0H{9a9?GBV1ZeN%zuq;>{NVm1N zpFBsrkCAu*f~jDn>o4_x(X&&#l=@9CdrC@XydMFoAJ`#Sw0b7If-;gH7%->=2eitZ zQA&@Z&w?}7x0I6X>l6*6a-4W(LDwCG$ID4s=`h#&Req)qrz#;}>+Ma++am@n2kx~z zJZ7xScJFOQrt&+lt}h_;e;;)3h`^2Hq7BtaH{%B&9FW}j+$$cKBtmKnP#1sKWQL!5 zf8P%*YM3AY*v+rk5e~8SSp%EBYbQpIU|9a)j{zxok+#$E{h+-)gO{D)pVs1r@8CB1 zt9eK1d_9b9+<@8XmGn2JprosY3Mzfq2) zijE^aj|q$cCP}nbl|1^SBKQd!WJ|kj?Ab%$y~@__J=ChO_t^c3&po_#Ow}=rUVJO% zh#{z{@c6DX(ZGKAR}lMb(M>&9WCqNV3xjRMBhc;0ZVSK#NvTc^CKyuCi|A^h(auQ0 z#v#M^5wSR=3vNxHMG4+{Fu3+$RBMa9P!ZvmKJql9ZY@_N)W#EGzRtViGko8lUw95V z|5y3JSXQ;KLi4uuq_U2D*hrLd`_Rz`*Mr!YYV zF8Z8W7XB}9SL2ny4A^c*zSWq8So+@pk{n^nf97s#8JF|X`a)9h0Q62_eQ;FrKaJ5x}`b z9SlF!Sc+3kq$c@Kd9Cq6^XcvL0-$YQ_bY2!&-w+vr2D7b#RASTo&q-SS=wv!Pa3dx zi3RTEsi;bi#I2<%`LK}Ohz$G$2R4bhYHzz`8xkF#cF+?<80d`Cx#_nFI!Kxom1SS9 z@jrJhDmq46o@Fq7OQd__YONhQhqBNF}RppCuRNp-P#*`6@_v2t{6*a&`_Y19FS*rgYJ4$vib4FRL?j8 zUFmAAqZs$yYb#8(%U{)*{W=nxQ+R2r^cBz3X6xb+T^stgs$N7RxZS@?{FG{1?za|R zvg@+Wbn0S1;qH=NQ%K|jw77Gc#?t>Pt-n92Q8CeHXXYU7F|#j2QAADCO%OCzX;S<8 zq*K%#U}=I7(f24ST=F&n*Smh%#E)ng)1nACOlR0;_(G!(MkFtP?W|(Gytp8e%zDWU zPJ_jlo_t}%^F=(m+K_5l6eKGgk?+j7D$GZe46)u`QbElHJ|{n*iShk2@UOXsUmM0O z6TRMB>ER)h%0$6^)Nd0s_&6N$I@KIxXkYuWxNqvS7-M;kpae>G3@(}BFRQCk=SIe# zF?H}c9bp(4VQY7qWsBnk1E&bmLelUp2>R{cb%(W-Bi7OlhzMfiBt;LKyrKX}7~?Fg z9YCu8h;qz#`Vn;mLpfFSZqso98z%l_Z~&^q{^8$U!-!Ifc5(kCC-BMjB%A(&NGTfI zJZ`}dRQ(L7%0E?iRuJn0^QC}b9JT?Dei}TAu#@eL+rUvf+s{78Oejj zqKtY02&@DN1qdu$R|4Dx3Y56pulYP~k$#lhineo4h^VFQ{Rf5g5-_+v|Dq0TF-1Zw z83M}&{QI!SgQ=J?n9GAvF*?1VYe=+5?H*ZgcdRr=u zq1LMN408@Gzt;`4EqPU6Pp|$5;qSSHJdGLQ)NG-uDBe|BXo z(2sZ08hr``SrUiq&ah;O6>lb)(J=yj$LwF&rb_7EaRDcf*c3Nj$kRXLk6lyD2-y&M zjdN}ZZ7Pi;z}y^ax7t z72J=i(JRto(iie@8p(pMN~c#%vlD}OI#}vDw`Qd8Qeq8@`O|MMoPx#P+JDPZSnog zB7PA2fzhZ~kB^wZpNKDkNkY~Z-=2fo)_H8QS0S9ljn-2D%#AMjUkzBn(RLFOQK1a^ zRBT+OjyZwxa=pXX^<=HUcf;fxCkdHdOl?!b*xpGDrSEEqTDf3>X!Sr$|0Loo&5jxa z?pVu9#v~04i%gN*Q%S%VwAmPep36*9ta)7SErDq>@Crx~~{BEjj!zcRcWWRtVrn~k~osjK_P<`D!`sS7sY zBxLG!3)V^u?hQ*-G(UBj!qC_Gw#hgEpM4l7XLfXk?7L2Z*#%mS+I@oK$w&JR7Y9?5 zXboSUKmvXu*QG#BkPpFdeY?`da&h1r?;Rg3Asu2ib9`s>n@%DKS4M6S)Ec7pgp>pe zMbDjb#llW`<_k$LoD*wM78I#w5`{WHqEMydymRc=;5< zO3lms8tqA0rH{%5Cxt2Md3SG5qhs;HifoLvw&WD|;Mq)cOqr?Z(#Yt6I5J!tgMJqu zlVd?f>U#S0Q8BvH7lnmq-L*qB{PWbF(cUrGY@%w`w&5|GcRq|V^snW)uimtc{=Mtw zm#4(h3iSlBrf%lszD?*@klj7MtufN}EInxUK~)`b? z>QQZLD!ahO=GmlsC5LK<=uQ7-;ll_=m`&jo?3@m7#c#@{>*Spyb$;e%hT>LRIQ@u> z>&M#sk2|KB?VTg52Y=)6m)JG!&HA9(%38Uib@05}=JNxrnB9jHOi;^A8|H+*A1!*v z2*v?w!DMHNaf4s`@?@no4OU!c%UZrM3^0O!|Jo<8nKHnNeeq#4b}&F3ubgkT<>2CQ z>$?gc!1dc~WC~n+*)%(N2P}4SVq{3{Jl9! zv^G39umRm*V4Dg91I6a!BSVjo1(f&&>7bB$8pF7(nLF`(43_ra{`c`mXxW9V+Ag*h%X#ZtFd^It*Djo-!br-U9GoWes)|EeJ@Q^Mw z5_?<^1uO)YRD|Y-n^Gl#Et@A_3Dko^bXC28sMsf#YGJLxx;{w-cVKmKo}R)3B`Roe z4DGkrTL)vgFlpZBzSLmg=R__d=hntV6&hcx@xBY0y#Y8Raivk|pl&v@BNVM;m2e*L zjUAlkNyb@!r8s}eGU{93z9AId;dp%ZhOCt?7rxcN%W@2A#K<>z8W^0ba6ga(p==)g z{cbKA|GziEw=``Jy-Rj?nX2ATa0@cH zVc4Xc#(~JW-(k~nE~3ABrMkCEI0ZEZJ$sy45vrRls@F5I2`=MN&?RWP{5rp>shv}0P%}@YNI>E(SA+C8ekSYe08B_MPAfVTB4j$gO z|E}D1k*=${;@6B&PQ&&eXJ(Ms&7M5>mv?mkyR!SL2WXHm^mcH8{T7qP@sSsE`JJwL z?QsX{YdccWjZm~G|Bsto4>i%%|0MoRJB?ZAUC><;TFaMMFU+NH&76R&2fS(D<-p(+ zJPZIEONP9X{9!~mZQp$oR^Ke4_vs60k*-4KYCk9z@An|u*6wjkCZ+C(*#vuJ!SeG$ z;f>T+LXHacu`S|^*xOIuq@l56f|xkvaE;~~wraGk#$cFa-rDt5e7;p}aJQW5GL(*p zBH4m-E7uC6$e-wMF(B}ndKmE##vssa)V+AJz;B8*>>T4#jg`^AfO>;JPkonxx;~g2y?WP^_{ac5y#a# z@bBPL_X3L+tn7QW2Qdy*arUGzl=-vjh2R3Hn*Wr4^;K>2QKuQ+gxc{7hT~@Hc1M+e z-tvU>8ghy^gT2h(hU1w2J-7IAyho93tMQ_-q-cI>8u`ef{3idqPB}HFA=VDSZo4!W z=fBFUA%5W@mU8FB#+ZL8cTZa%z=QVV%s>B!cxmrkV!Qh(rE^zc-m3YUzpuY*n;jwVpIs%Zx4+{WYI^?M-HXQfeM|f-y)#6}{3Z zHL_6q(6WLNhoZ7aTm<`142d`FOQAnla!b^lL5LrdLu%M%B1Yzv!>rt2 zs$!(f1 zn%Y0gVkY!*!B?a7h*rPcGMSdzW{X_*O+S><^AaWn<`Kbwm93q8Y|5L^DwPSmSG6~# zIEERg^U)e@C2VkM^&mPOYH3i!2F&@m1WT1S%P&WJWMDU&BNux|DtyP}FFbDhKCT#| zYU!Swq-KH)R`9Qp%v8F`kMXK$f~Y64f$N0C1yR=mwA**Bbxr74s$zr$9K`?PLaNId9>B%CN-e% z5vXkrj^B94e70CtKD~LVQWOWJO&fs-M}`2GtyY_m%?T$(55dW>tNH8 zFzBFNqO5waeV;->c0CqkTS;VJKcpsEf!p5TL=R&>_*jcGpn(Da`n8OG2|4DJED$UrjKdg&9-G62=b=oPNI6vFbU~V&f%y#1X3;%D0@Sz8XnFfw!L}prROB zOE0`CYBb66g8`-G`=|M2OQ8CC1dy(IOAoXusVzwJSFcY?Lu>29?dieW*Vj{_%r-Eg zst>6ZV_qw(Oj=J~;OZ!w`S{n=4vSQ$ba8jzJFYC6X>;OIonXj>c|m7qSueA28n?!9HZbgWG`#CGQF&pK@V&TqS33z9fbV@^rC3Dm&gRA zNw)$^Jy1J9%L+-C2dHEVa0u6rN!;Ijxm)ja|7+0kswEg)n4dAB16gu;+2=t<*jqXs zA+}hPem_$dlCOi!-?Kzt&i4>VebQRT5Fc_2BD;=x)PLQGKHUT@(8jn1R_C9#)1N;; zl9%Z49*k$2%CRf*S3a>DC+FWlCnX8*_bBcIvrhD-gF457J zRoFdnomzTnQsAs%mL?m7MUW?(U!=p}$2V7g+*r$nPC*1cLUA{RK>i$5r%u~_`S6wf z5CqFdv;>}GvAbzqFMQwKBf(v>r){x8YgH8Nh@5*B6XS2`8k>S}&{bI5Ja_Le=cy(Y z$=#gNlTC5>&@(06`it8Hb(fK-@eMMAONKk z+|x=3GU8jBz^q zYNS+?&?suOdEjN$aXfU^lg}S2Ssty_)z@4JTU@ zf${|z8oqm%Zw{Gvn7IY_2P8V>eP>AvTHobrBZ|RA4o^rJw}9fYO3N|sdJsf#JE@|+ zuMHl~gF9F;y!zwU)PhwiY#)x#Fvz{mB zviY}D$&8qh<6i^QrRbe&`A<1xKmU#p;hJJXghnS~gYK$G;fhnz7c%t*C7aQ0lIGZl z7!XL-Nz_k+B8~XZ*?8W=JSCKZAdj+BBw+bupZ7071KUZ2!_(D-L5dWziUPL7P~C!_wY%VlCafTJs=>cik#B*vtc&kNO-=r z%K-|iyTDaooErW4O~4OYZCVZm;ok?+ee@Rt$s%Y2w86 z8yalrFh1O)1Q4N4lRE@WoMaZYpQqnL5^ztigK1or3UMS2ZcQ*~O&fls20)C@32HT1 zFs{-ej_bLfj|DYZKUr0>@9LTdj$1jRa!OZ?4G~VzJZ%G z`iuU|_d(hD2H7q}ffRCZrVNho)bt&M2X^59yFE-0Cmi6xULzzXu`XG&vb@5LTPspZ zP0csHOdPoCs^_h=+Yiw5~j8 zjhX1I6K>qgT{Yg0Y=={ghzCy;+4Ix#eO}KOD|zm^>TLW+T=NZhf1g=S43~B*7Yk() zH@O;Pa=!luShn_kQ&%?#!}z&O1`6 zrIE8LvAQ0FW=Ak$1M|;3v-|jRQ{>~m25ksgVKJy$P1_A?I#*8bd3U4|+ijPCTQpfVo&?HCi{$op1#m6VlLxshmVpA9k|O%HXNbW(&RYEZWOta@!l z=X4Y&=`YT+omUhUM#0!s^TcUFYTiBJNs4#;$+SXT-nuw~rm#sba2V1#SJT2vRsZbe z+<$L&=!;J=I(#sw@aB6q%YTE9G!F{ElvgGKz~i0K%e zo64&|k&J^vL;4ZRci7>uDhet3Ht-Al4)N%Qphk0G5{{NiuGSFIE4`SryL9))hZsQd z@2LvQ7>ePnjC$J~tTuB|Vq}eRT6>Cn@K2$j;&W(k8nU#Hru+tF3xi%pk>C+zC-m@r z66dytVl;zv(Ai_3su*lV4B>~y1JtNQVQj*h9Nwn)<6Om5;?+UF+fa`DL!qrY-e#MZ zWd$p*66ur_BovCI|NBY}1+1Z%Gvspi>e(HSAiH+q_O)J_==y<1!+(@_so!SE9=-Qc zt)n@=Ix5QUdmkQ3Qc}A6 zAq27M77z&uQIG~vy1PR{Iu(VXlm_V(P^7z&p@;4vhJl%Z_wf0y_5S_STO_) z?DM|QL{`3{lu3@@->;Gn7m3#`Yd6%s^If3A!OHys>S1PVW=tda<#S4(3_ff45!Ab$7${K`~1wsGhR{F z{?aN|t;JzayEG&l~%TDji8=}Y| z%cduOt6;iUYChPxbnWz^?B@)nKK22FK_6Is`V_J}wEETlQ)NE?iyAMl&U$ZEJ&{px zW}ClT&)pyv+7La7RxE-UZ=hTBXP)H!@M9XJ9+(*WZ2WQ1_j(&spIRyB?a5FF55j@; z&YoI^KcD9fN-p>>Ue83%yEw29=aw_y0}d{|E>#kgz}Z#}il!fl zWkr!Jx@8f6c&k$CBWSwKC$x|pEQ{)U<$sh?K4-gCAF$S^8pJ(5^au0+Pr;4LZI-zV zOl{CvoHlj}3=H|{bQDwzb!F=BSx2Z1_4Taz==|zH4-O1GNFVb4!zI})Izs_@$BuVj z_}J)i!Jzz{UWBEdC;5gy)}R8u;I*s0FQ%h1E)FUUtd-djT*STpiC5EZr_u4G&^U~W z)N}b}u5aeN@6F8I{oscU{*LI1=wSj92*Xnv=}W$Rl_e{)wGi+85xqtvpjul0V(+b^!7(*($i2W z-bI7U&3Az-Z~U!__JV6jGiI}K8jymLW;sX_NwdV8SO5Pn4yQxy5Tx33THdvgq7+gM z6S(6SE1#feddUw3PWs|tfm=_l)i?-=*SjuRpyPrBjLOo~RF#Mv6j%oSlEaz}roOfJ@!@$kW2DLQF@q*1 zyvLF4<7mBc@1?9P4n%LJ0pE4$X8kDWy4`CTO%7C#QM5hOBH-fL(l{bPxrE|O9^xj! zeuwdkeemZi5uzhKMi(Jz-=-u*dwjL^Ps;gr@WSJ;wSwxX9>@2CcB>vVdtX`)YO??9 z|NXKL9!M{L$SSDKX6RhdBtPp=J+Awg^mOuW%F$N!?R${Vvi|f8FjlR-+C5Ry=QDHm z($zzq0|LKCP)eZ?mcED!)SIrf`nTDE-TbpsQeV9I34U#^uQUF+#qgy-ZKsBc-AueM zw(c^?A<^1;0CB1=^tbLJ0_H_z5eA3v<{Zln37X{IPKcVir7AdLEmS_Dp7E@2D8YCd z&>HJlM&qp`zn!#5kHT)^kKDk6?9s&au{X`$c$<8RLhx4*kahl~@*IlfPrT3=NO`?U zAb1(;9d?{y`W%dgqoqM8OI8nQ#IdvWN4n5@lfD5d(m%u$2zo3f37k@ui%JtxYw#@J;%7vjhmGl&M19v?o z&8W&i$J*t%^N7aV!i_Tl%4N4b zu4AUc8r)oz@@Z{8FEh1tm)RjavTFM8J0+bT8ZFYyrBC!oM8|Hd<;@pz!bOhv?cUQh zEX9&tM#u5zPWi;Aa!gAPuS?pf2qwa<)J6S$rhLqG?+O{Q&7khD_9Z?5aoa{&tu5a0 zn=ei+HqnA=U424H9MlDv3>M%nMEie6UzJsi4-es5333$F>`+?0OZ+Y-Xif0?LavFs zCv|0Phw|5bzfT2=Ec5Esz}Iy6ebg$U)E+paAY!t6OE$Y0xb(~MWXp9lOMg7J1-KTq zltZ_R!<I9=iRUc(7cQoJ)aZt3qV(S$dwsC<0EP zWud*K9qDo{g)4O%bgFlaBJuHVRtpN0QnpmKgb^3G*Y|4Cx)CYyw&R%Y$Gw}iBpv8a zhyMz@9Xb#3ka^MepRkZoJoq}IkUh4qh+RQvp(=6jUn)(~;<=Ralq)WyRlp~on;Te8 z6TpP3QbLgG>;E9TElZzfAVpbvy`3j!;oqzUjxu9g%2*2B7bkr6i(Yt_C=m+^2Ug&U z{`y6}#E=^2r3p(2u+)BRa+xo4C|nn0Hzi^Ax4Z*A{+p@+w-jmq%>X?^XSjLgQ(S|! zBbA299w8+PZnK9j<@b3Cm(Ng21$#+VUjNI;e%7$~;m@h^*0kj95kP>Sp9lG|eq0F5 zfHQnhTtjByy_}-al3lO22wb)6>d=Ik>aw#ZFTS)Npyn_mNIvoZEZ@Vwb)R<>HGkr! zX3M=L?1NDXQ>7G@j6U?X`?_CaA0|0-ObnTQ4(UU$TLw?uYW!9GXXB&hqZKRfe-MwK zIzewfG5fesSz(ld{eDiXgCmX4g_DGaANRY*;XfJrdoU=Fn+aU~0zKBxpWg~lY}Z__ zr?E|7Dt%uW0|eL+QL@Od6^<0U68b>bAf)t7;*#yHgVs;gnByPMdKHWB*FB_k!utuP z`B(x+dECb*D=^aL`lL0#{53{dN(wFQ-x7xJuvUn`|L&W-8_4vpYN$eF{|I~W`drse zto5MKmzm={D2gCsj?hjNq@MdQ+^t(FgamiqJ@|6hs+W3Mk!h7!;;LXzn8i_?`>I_2*$^96}Xl5hhv;I2PxUy4FIvhHyFP|7K@7tb_!gM*B7 zxWqq2U-{p`YnwBwO`_uE435(7zKxZLc3YUEq3TCjwr^j}DejlK?QHqYA@N19W2;&bf76WfjXH<<0>uhVVdHQ2?n$6mT2%_gWFClk%ZaxI ztVUVd$K8(a9J<9YkuylnxQmK@Ho7$Pu(LaHm3}Bx{>l3+v*e0aT*Vku`wXQ`_iJW@ zZJ}HmB=+JzHuMZ{URH@{hijrZ)&?y(w_fUytwZlLLQDV=ygE;p+jn9@8^fx+9=9K; z`3HZmTN!7k93oQW0U5MAz_vJY9K+EVZ?B!^L%gmIxyi-nO3w^xvzVDwfYnsl&G zuW-`w2M#&SsGv_Xf_C`aCC%7>2p7ef7NLl zY3%w6Pm*R1VUb!DeYeb#wDKzVEfSzan9cU#QEGE+TL9`x>s3AM5jyEFR^-)MTd0Vu zh&%dqEoHNeN5J;*%#eVOk56~8bY-S7;nIi3EV!5Ec%4_vJ5lFiv<`Y1^+!W4!-Jy-TIuhE=_?3RV-;feoykaVpuJLCU}S z+IsYfy~zY$_Bz58)9ZC4NZ6huibl!zw1p#;{n|zWwO{P2_+i11IKX^;^K;Lsi#~9Q3A>1|Q4a_01SvcrOAVPQ(Ew9#}#CAhs}-sjd%uW|pe``;z|ZGw zX8@;{WPRUI^T6cPs>Kyu_fpL+1$`R6D6#}&ksxYHN)e{EHo$Xu;#(Dl9MWxa5HK}Y zm+WyUz4K0?$GSymYK5DUv)e7}8-|D;RDNI7_RK0^%ZT>+1wOAHD`yep1O(Jdd?}`* zeNxk#(<2sIUgYPkyv${S``kX0m9jo0Li}fA*`+&6q8G*)*`YS3z7oz@?I%T--*+2X zoHaLs-H!QVv5UgG!_UV7t{kQ7SAWU@Arck2avgn~rP!zqKiQ*|lHz&^CrsnOc2wSh z9|w2y5)d#3xo=oOp0QG67q;yZ0R zA+b!Pe|CH!Uq{70)rJdc}#kd-+J?fqnRz8nbp!X5W`LYa`)= zq?iBRe%AkdzZH*7_~(4T$Rw)uj*f@9XG`2j?v5nU*6$OY{bNG+{v-0w-sNY(6<|^W z=lCr!V_#Abr3uImdtZuTQJSd99?1zA$YnZ$$x-_nQgnAy3CL>rCKR|GZigkTUYUakDJJ z5MPTIC-l;)>pS-MzxwP7`xl|^-!;;&Ht6&CC-y9^K8X2=6J470{FTocscMs)xN6=i zhg#(3eypcA(No8agI

    M14p+y?@_3kZjQTvM!I>PE_?yZCft6W&4wXf)RNhg##uw zfy+{T(^0&b@m^eriWot_-*XQ;XcPhsaBi@oP-Bn6#40|>F53E11mH0Ay^?b;_>pyp z@JM+foMM+(KrKrnkYuKQT9bRhY_A5vrzO9L`^OC5EQ;?<8_BA8Aja zRheb*K|Da(7xOC0RZb|^;GL7TW2;iER>^P#jDz>gVF~fUV@SX7ZJO_OLXh<(r+jtI zk$(O2DIlE}662DuV#N_6-!sbE_QJ?WKTsZO{x}gCvbJkBirnsml=YpbmnI(}|GhI! z5iu=;O!G)0<|;y_nrb02v;8ff6V4L+|IhkCFo@J_UV+s}?8bh!!U|zKOyP4D)3i_0Id`wFOs$ z{-vw}+4#!|)^2Vq!j(ipoZbA@x&-g0pG^8Bb39QUSWafhnh~mLXxyZ!+!u^Ws5j8u31i&N z+mREcCcA%i*MN6r`v`iJ-;0>hcj6DZ9uKmr>ab;lsxBq3wo|al)&eIeEzugz_7uug`fC{ zOx~Jcfb~3qsz3b-hHBXB z->mmn{FE869kqOmeO2)s`%dlBSr-IUg7hacxKW;xv_pjJAdrK^mmPa zPrt*E;En)3y${ONS5KHm6LT-M*$mhha$?~z_`nw)U}ahS+e=i-$uwe$^B?WvTR3yU1NCU|yy`!T32 zUMPuS4hTqcA5^fQ8SXOMdz z{C|k{O%420Mv4@i8s2|@CIl;P(s)Vm#`ZSTd(EDALz(8E-_7<)x%AfZTr0LsCBU;$ zPWD%}GLW3}AMY?)@0|A1C!y8}(4IRiUDrAIjkv4-M$k#dwXr-}OcOYWf%@)rsS0R=>3K;O!-Mv{qVdErn56JOUJyETS=a`1nBs1|r7%(=2_|LJYs=4NVI`Mnd+cRhIMw5v~x4Z8f}B1%PQ zbsFi~A#-6wQ*Wr8{MespT$gYqZmH~#!};rIm!_CXfERUk>XN<-LmM#$`B_Ks3*dGv zn=d_HPbB_=X;u9Re2H{^JN?PsGjND9v>dU*n&!Dvzgf^Z!f4BDD;P{G&YmqR%Y48L z+4vbw{mfkKoc)3I-rhCEfnav>rMwu3zD+){MH>QHsLM8 z%#U47J=~I9Sck=L6lMvqBSWB`Qrf@1Id`P=Xv<|&ANxnC)|TshFQGHDLUXTj*KKB< z7!YqCf^b;dxN4S@K*YG2Oi98j<-1KvJ-|Znrg+wro*h-+)%p6rGgsCQ{q=RzwIYwl zemDm6<~jA+2%m!&AmzcS9`QJ=S9sN6d3Iy-rICJn_&`=lJ1bzq{}k=9q}~~+F)4~- z4GDbVip+7NcZ40-S#Y$-0{~(5_c+z95WgdTsvcPo%r>8SBERd@9237)4iqc{j>e5O zQgvRbH!czxte29R!J+y0JXSsA!89w?eiZ)63F+TQMLb&nZmA{;885l&Q9Q_D5SmZ5mrXH+y z`_NT$43p}NB+C)xY=19QllM7PYcAR+$myyxmAz1nAW7TTE&k~vt->h#Upq^C7a1AL zFC9u|>5R9>PhYv+$x>12tL&U+M9E*Qcd+j4PDuMn{JG5Nf#R4Y!AS9bKsx&xALCjE z)!+Hh843A`!2!#Z6Wh~%ziBPksBE;wU`e2_-ZULj{5bbH$>0c-*W%^oovRn(nqUL4 zytnNFh~jU0mnu0MBLF8q>ZM67u|aA!)cY0UT?=OkHEg!g;KNPz9?VbgYyKHv8ix1ViRWC?va<9%l*Trrs4(a=`E@!a`Q9_ZsohV3nb^2zfzu!-byJd-z-QOp~&A z!yB0r4}ObYIp2mTMcGosp10v~JP)mHe4Da>qbmd&vlhb!gk%#AO6_kJ$K&G%PAF+- zyrWOD?leoLXM5X3q)|oho~T4=>5Q$aQAcW;ovmsszbXZ*i`h?Wa|9ClKhi6n ztt<9zeRI*Z(yHD6Hg!!8cqv3&`*knkm-t#gZoS>N%cUP-C?fyscb~`v@I&QXLR~T6 z-{PH>5K%3P2c?}=RONX8Ind1-^D|^i*Bk&;2jd@eA@pr&$#3`{*s;ixL&r>W%QsW& z8^CEde?uEi{~uP_imI&UE;8FwG+ndB;9&a64=rd&+}9`YKIpY%@cR&Rk@Bt*+^I9k zfJ-vW<;=joOYj}%r#Gm!lur0&P}3|Y4z6<|*GO%09i&S66 z&7X?XrB}DWvf8?;DVoqIr78D+i%bBetu;d4>uX-X(wD# zJ&Y1B9T9jSBCU6C$OUU{ZT$}UpcLmJPE<+Ygf5}Es;>%!{bIWLze=~E2C|L_d}7NM zQtHX3?b5x3VT%JUw+jgHFRrR%hxqN8*k$AX^KGX?s~WE75s%8 zx3194lgZr88I2cE8NAY0<*~&}+Y>g+TIGH@JLfa)CXQ;oT3EC%%}>5-JdN_tC#qC{ z_oO8D5ugk6GjtWxX7@u;k&xGX7 zW0lFrc8zSPr5Fm8#WcXzRZme>a{L!BSB)=QosDYaU{<|-2^P4;-V^8EiZlsjQm!;x4e{rh68OU)|tPS*Begw=fy^E!IDdf`4Vm zr=XXQc-#Y6p^Sik#NCG|rNoC7W#em`gFXdBMKS4B{|qgQ@p_g}tf$*w1m^l}wX@c` zeorM8d|EPHBI@VvQ+xlLy(BeYi*f{I%OE2BUXcC0dm;1K# zEbE1O5B5~?(RC;n9W@U#Q%Q4YuZG&|yNc~tfDt@2@FdttF&Cc8nneVh+5x0xN_nEH zVVi|6wcA9QXFBjkDs1Y_ZYv`dG9TkX%(|r24j?}_3WvYP&C>T=NoXY6pn(GCyO;Hr z-tIH-|2-fTkPV&mk?)>4^ApeU#OI8%q$WOQdV~0rQ1Y^#*mYZ5lV>ou8n1sm$JT#w zDdfkidD(55-0?M~ZkOuPXsLEvkag>h&g@blN#-ArkPup(5rs+f@dSb zo0lJiKTWi|gS6t)3PS%;-Fg{DttO2c8umu^(cCk5_@`GR+USfJQWB_NalFxAA@`i9 z2r_t~cr!hp5wzHn?jVmb_W}xr;F-mRs2)pev zvl9{e*d5m%E;xfpB{QU2oZrG4Tz>r!zGm@+JL2)hC7OiF z!vC{}`zH($CFzl}-f<&pi7-6q^}5B)zIxZ$lO7(~_VmUKT5%!n?LdTtRrI1&BWQ^< zP4Wbzb?cja%;)z16~$XAK_ALYOm%N7OGPu7uHR+?%$eL7hUa-)HL8hZ?Q+tyC|gmK zD4FY?lfs4dxsf5L#L661Ktxp?kxK+ogpo7m<>fPhDOK;Zq^8>BtCPx49_U4rGbU{F&!g?Vt z!RjjmVNaHP!YW5NPLCLqDd7UDIzQGCBaraI1$dUp9M<85ZGAFCtL1t*OJ0uERE$gM zmBhtzvh!=|Q$pMzo_4U2d3GYOsZRRZBr=bUBUlaVSI@lS>?g=>%Ga(G$IjzNIx_#~ z1j;A4x6*uiN9DuUh^~`h2hZ}(&jL;LsqX^CJa-E_-amWwRcjeYeqV;72FV<;u4UIt zOO_V>UU^n^6phzky>jte;7m*9rt#dSzi7Ad^4$Ic_y=|A;RRt9{J$G<88#LQkMZB^ zOSzL}EcjArpPRhBnG{4jY-F|KWo+3Fa`mbv41R?LljePQlifw7tCHZ2!(}ZKw#|*E ze!48q4ovd?=KgP12I1bFvy%+?dwCgcDbZoX85TFjH#q+RKk0`;a6-(B2hlzi^U+uZ z!WFarxK{)={icMkyI4Ow^0Y-!-19?GqzYEj&%BbnY;|%?_w>JTYlWv+#$-HyMcB?$ z7=yP46pm`@zAS>0S+)_(6l=>~Ew+~VZC{Ei(?D3ZVAi`i!!?4<0&Md$WQO=0KkenM@oo#iOoo@Zn%_Oe^_&2;{bWx$vTzWAoqQCj7>}0BPA8je@ zI?9TTzY=wxdV-inkDWZua;na{em;Qn)xDv0ID2ELSK##K!A%S|q@(QmR$JH$n8!yO zSqsT)Gq~JWcNGtA;)Da=d4qN&;v6EL{+AwC+lg7$-bouaz_;*n`>w)9v|`((2j%i~ zW}RG|a`;zIj7*+I?fu((b4>)D&th?wY3ZChp2-Af#V#)5ICz}a*Z6L)D8yP^ty zv>&?V+l6eIONgqz>@r4(Hv2_s@l0kfVy127)OHbOwLfvUky`x9DgA1AENCclS|-a) zkE`c;`0#pSterzT;`xIyIDNZU+9X;mXI~J~GbuQPpU_^&wIJSMZU?Pcw94@f4hMwD znDga5uvELgsZ`YOnO&Pf8!_PoMWe2b#0gRt%=Z8ES!a~oIeQGKa%WKTYMK#e5AKV( zSjQ3FPUQUq#_eF)Z%!%rAugw%w0|WM73DqSQ1big@>vf`y2ZoO{v<$xGWSNBux!5d z!_DXUeI@FgqeI~SZIv?or00tpsTKdzOJjP%5B*22j2~gNa6fsAdZF?VLBBuE)V+;QC{MFe!lCMRz!HT-p0_5SiSa|$^Q+Fy|FUU#+hNa4 zMek<;GpagEjAMrzcp4Jj9lof!Ekv|2!my6=;_R7Ox$%F%aW!_tBx`c4z5~idhm%wS zOzm@Hb+^mg;RiS20`TZ*OU(s?3NANqk+`1sJE>*ANj24CyWUVcUj{#bdM}1ok{9%2 zx^wIc3d#RiKB1UM=gAus`^w&;wwE8PC}j-mR|`l?%MLv*IRR)8Qs2XbE%M-ObyG0W zsEWKjpq&bw^4f;y*{B(i8UX@MA(lVgFZymv(P_15!cxZvfZ*Is`LtoV>&wMs*@U^0 z%iB^{nB04t6lZMEtc+d+yXa?oBeU)9%}ric46S&I{U`PX6s9$N@jAu=9OK#WlM}E+ zbUW#mi_J-;dj9uV=D~;MIwB8n3lr;<0#Qpi==tbYv=hK0Zer>7SwKkW!2|wv#z(t> z<~ty%yzk9yb*Z7xo<#yXelx<-V_kM}?j3qiAF5$QXE&9j?B=F4_jFN9n>ew7dwin! zB|yp|0PDm>8f)v%@%lBMwd0$h<2!s7qRzgRDDvZgN3n^0yR^ysS|Yazlv2!Y=+2^; za(k+OXT7&RyRXwi%+$$Vpo`uWlpN&K&+nx7Wq)n9>JX&RnhC^a^B0TP!G$Js!BLk@ z;|?#~h*ydgRYx}?^mj(X=Y!OSiho^`c)aK8&Y1f4zl-2@skjHcbTT*l3^XlErZ5w$ zG`hS;yQYv}T8qGPWFtH{&XzA3zW^7Y)<)SJ=FSrJJW%SN$k~I!BYv?st+gI$bq`=B zYdkSI%RbUj(JKSU*kK28cvLbGg+3w9>%IzrYx0j5;k=Aalu{^W_$m0No?f^U%L9|q z@4L$-Te;dV*f@3ffeD*H{lZQz;skTL>xYRcBAN8SkQA0Yq=KJNvNj;}bHVuy?Fnd( ztBj%0=*3?Ddv5x_FHh!t&Yjs5dGKNqbu#iSs{=^9H!rql#Bh$1c?CajnAY_iA0Nkx zbyg1=qz}zxPk?RvB_*&d%UcAAGKqT9=OBzNNral3aYOH}3)#~`LQT~3dJ@)|*6dzd zV+t|Ztqg+2pY$Vwh+RX>+SRIV;2?v=*mvxL0@*6-@9fPvQ`y}|M_=Zl#M1TmW^y)ap&zny8JGI#ST-5SG9_v&FpD&oP0QVpZTu11o$6DycW~>Mbqb-U~M+>ir%p;?7j{NlYg0pPylN zXS{firIGddsoxN$MaTHpVHI4xa9tcpunmpra-3(m`}Wn6Hosu<=K9d-L>!*p%G;^R zlGpp+5u$O|*Dw?@wAOYS`v*UVhoi*)ZMzfu|7l0eP4*C?E7TSdWmg$Ose};~zcdG2 zKVa11*Vm5&-|~!_)a8r(mTfC)$DzPM{U|bns(}51fm(|I5_My7=R719XdeDhaFbIryB&or~S< zUq}{%$s;^7G6u#8{GYpf=VE&$*Rk6YmW-ej%R6t+*>wM>wfXCzT7j;zRk7{B!=yr1 zyPUlHI`I*T+!(QW9bJgC99Mqt`4ZWr3}7M6>aDfrbw9@s(nR9cv1f@h!rPMxAl@t9 z;_)n%#GY8aEro8$@bWBZhEc&1M_|vM|76vTM1yyphXUw)FKa)}*3r+HUYF`I;_8Euj)q60s z7hV~M_f@6z?*VR{SJLgI7qGeR${n`%7-`z=SMl9Mw#|hXj_U2)1dnIjwG_QIp8i-P z08yh|bKwf0VWprH5}Ma~?T34Rc;ipp_lKY(&b3cS9nThS#-`%eoDevdF#K)r{ZgUL zkLz92?bwV*z%nnG=ua*Kfnpo1-P9YJAMiVe8Dn})vE)(vq~o|pMdJ@gw2415K6qn0cZ%Qpj!PP9RbkIx710&RiI$%g9v{VGVFkBL6M z8hQ{q0?9PGyL}i}J`IjmqaG5+GkdMH0WmZK^3D%SE%W9^inZ0l>1>@h@z>AkOrDy= z)5mAPud-i-*c!fWG`a4tcx7>tnwWO&p-X+Q?Vki4v5SkHmf`PH9K4^%IKi@je3BHW znqvyxs2C&kIq6~NC#Qq%j=iMM=&c7gKi&t$k&xFsTRvEzAf9cRPrl0b8NWOq)hf4q z;}ee*^9#{Qi)xdW=t?Ub5!GY-yWnhm*%{KqaX6M>Yx)}~0C<&tJrkW*sjG|jRu(BX`40_pQ;X~!tHD!))x|Q>Ol>agHT3Vxc6h^1zw2sdaBD*tA zZ&b*p;H|-c`u&Iq&K>?^$01Y6AOC<{mYns7ZWx|kS{AP(vL{I9qJ0>Jzcjn^&wpfvoZ;VSM95!(V01)Yg zVxHOXnUJKS)wNjH(9jABQA&AU1w*(F`=Mm^)zb?^ttANFZaKT~$bZ4Cjo%B;NzN(T zxtUSWPx$IfJxq~HYJA=d?Zs&(WVK5Jwi-M3NCMWTBHMZpDn$X%ko#IJ)N3`32hYW# z@jCKKFYPMBdK2oIHQDRQG0RM7Qv#6eDAHWgez@!2LjDBMev-^&2tWX#IApN za2|h?A$v0-%r=W3!q=t-fACAoQ@$WUPRNE$MRnXvScjB~{fv=9Z*2xh9$B0mXp&7~ zUlPWeCZ_21sP&ReH=eY>RDS~TkW$49*<=n4O+A-R(Z+|fU=ig7_^E~O6Ek1v6Qs6z ze!JyZ)_GpR7`_ys7uhAL$uG00h6f;@lMyz`@LDkVJGU?KKkZhyJE*Mn;1%CUY_?*U zq%K!HP%~?~-lv_rN0U#^C9|2CXtoZEP#PQp&MXpUSO4(lY<@em2?$KHQ9GB-mZt zRth~nk#{$VV_Ak66shlECmydWL4w>B67O3f@fa&g1j0d-`bD@EM+!8yK&a9=F$Y$c zC`j`&C6oU0tc4DwK>r0~p~Gg%&g4GhQ8PtJvY?{_wPt+`&rHegOYwVu>}^ANug$U%LMe|ED#78%#b$1OeEmZ>~0Ny}+p1 zyTy}idDt6q z$2hYu4x>uYKLuq0wt2s_MCyDlS;)>!|D!+I&&nOEW1(_C z3YuhLEq&H)s;!0$P_Pq*UghitAo)}8qXHx&(BNdw{#b)UMuBc+|G|F#$=1{T30hHP zT**O)v(q0pJhhNdUf<%&@wn!H4RA|_+Q2^pg6U_AwEvZ;cQf9->#`FmuuyKI+cj$k zCQWuaoxxSFMY%DJ26Kd@Q-@rPXRAxY3x$^#B}T@Au?yn|0I#va}ULZO139rgY8 zZ~K;>p}A@gREfEtjN+>*c^UhXEc#0Nwrc6vzNpUt$%FOYY@(n8MTnqx@gu)ejd=A- zUGdf;y_{fW&jMTmGZ->Va6f0L{ONJ{zOx72G( zZk{XD_VcZb=-s=p0U*vYk6bC0nEL@Qp}k3rcaYVS&j%_8IHPy{L&G<+qU zZ?jBu0Q`y#(Zo4 zWFghd0NYAaiIFEbneS#B-L3>_ARuLiJD>w1mOH_t_FdINzec;Gm_#L$SzAX+t5I!0 zzu`hmFoUym2WGpeUl~Z7jI~1D5LZbKwT~t_%CRM> zvFuyD2}GY$IEod;K^hd$BedkKFqbSP?T~cG2y{y30Nt7Je7#VG9Uf&;M>AR{K=37$ zMeRkFz1RCAV)%Mey1Gv|2DdJ*74NOza)!S?ngZh~ba`#|kR1H2(9NO@F?9$gnct4s zplgbM3o^A~K9BDeg2a}`n+&&BPF?@}l9o*f`(}cgFR~pOsR@zhu9&IxNk=*DPiI4W z$Ncu|X#(4j)9_DdLuD3)(#}tb$5*jM~Tw zYKK0@U0cRi+pJjBF6L?9(6#wHTg_9X6L~!TpFd8`cmIe)d=N5w_#^$uWwp++jrdQj zy$Ox_cxi#=2{w$!u|v~+V_UlixHV{!UI^n9h;kBa@EA!Vak{yJfKvRC2c#qG5WI11!OGkV+oHmYrb2U#OtG{qG=@-2sc^=uK^whj)DV*!%qpnsgj)Q@TWk4 zHe)p(u@lp^il*un+X6g>i$=Gx;naH|%LdD-M2-|MZ789>;h>@mPLP7|{%!RTDq)#| z!aNUR@!Lswe_g()9Sz>THSvI^QY14TU@%pMS5fbUQrJ~aiXVjHTW@OtZTju%vEJ~m zPNS_FTPU8wI=tuHo~kb^8%(`^soLYgY=Z*NmCsgF@4dW5_iYeVQ)pE1Hc$S6+X_H08@9Z%*46xm6Z7xk5vjB-U_vg>AD6G{B}cgs0B&r7tuGKs=$C1f4s?l@KhmQ zUMX9!PqgS%Wwclh)Uf#8u@8zr+|By(X8dkTRejv^h!WdM-CPsfAeT8p*U*b&Ej0Z?7vKVv=?;eg>ocb!|m}a;ZrM*`dy9J&8K`0S)H$YGVIiKOi{Z= z9pgH}M#RF#B!~>;$?kGMVtS;VUvJB|-jSiJYipeqV_SApKdk^6jS{JrhIssFOcYs> zgK)}Kv&JKDUpNOrq&~HN>wefN)gcNY z=e2J#lf0GbcH>0M`8^NLs;uU7<$^%w)Z+F0mB=QiMZGuZNdh+oqAV6RsB@ru_rU=L zP{c>p9}b2uN`ntb|2~%0+)>eoajdD(vVjO>tV9}MP?)mn1p@*unS%@8+#Dv+MZ0@L zKdXS+Mt7b3@K&0iKUe6`$?@^ufZKEI8b|as*skaOY(ir@F|{DfZ&+ANfdErMpwX{n zU*bxSd73pMeJ3o`-dAc`XnOzkDq(al%I4zxbcq_R!>?|*ImOyu-Z66RZ@1K*eSp4! zaCgUAe1EKTV8xBuHs5s%JMimb#vBqjPPoA6Nv)VeGVsEqDlPW=0WbuX^7=)H?VkwQ z9z|$S)MmvNyRKjxa0ubf1B{?tETgVpNzuLQJ)EU|<$05W5`_RoR-hOQ`SUgu*|{WH zNy#INy(9>lvDDacDaO*b|Ki7SZGpZBzi+jgf@l6q4%q~7og}E~a@5%;THdY`C8+%U ze*7lHom=t_p|u{RM?gYt+Yi*Lxk&b_U~RQtI-}lmyq79$vNO5;N8{O}cUjz*DISO# z<gBcHC7DB%;4^kSGOETQv3+t z1Z(?cm-^Ug{2Y7>!kM9O@9*2@TX-!a=lyBiao#a-rr<8( z11P7%1z+$fFn&V?FaI;Q5*13DP~Uwigoj%`xIW?!g^J;ZeJ`4Wxr-cGRfHK8;We~R z%bXI%3PA}vGX2%|%V6wQyvmE&^DA8xz&Y@D9?d-UJ=J*JLf$shxlY*NSlEhgZdv1{OG$O*iVD7(#bVYOEP6CyOZ@Ec?SIMw{sqO#}p4m z9?glFa6lC)wRy!j%bYZO&TU{P0@Ibd&isyI^&r6jUKJ9tlF zqp-5_&kgHQza&aLjdTNjkNkiR-4@4FMz8R zs5uAG2|0P|A6^l5_z-34Bl(}zaf^sF0Z3d=5HS)#N;li%-E-!vP`}O`T4erYsP}an z?-e6!N52a(gr>4iCmxgtu!X(!2+i^6VY|dAO1XWZJzQ%LPL9VAnb1)2%Q8Ch6d6t) zq1y3-s>n@ai=cr75&;A`+1dK6nCW z9eAB}2v1ALdwta}w8$@Xud$KszwPxm%8HSHn1@#Z5jH4Z#rXrtutfIoV@S-}=S;0O zho?K|`<-@&z8Ts&E7_PsbEowdZ^Y07c>B@vq*nQP_Z!^NTX%8B70df$^8EU&R`W*? zMfrN-a=XksN3tGi^#NW(*tFwTQ5sbesY&-qDov08U>fc%(-ZV)q@%R#VRS2$1|B+I z#~}T%bBaxU&G=P4i;vIm6gI*L&GqLaENaw%-^_XM7(bL1uv#L!vYb*3$yREI8n!o_ zF>akt+$w`+a}8$!N_*NsTN31%e|f5R);1d$jSQ03WjrqlH6Xwb-C_0FI-!7b$=;WB z_DGG#w?58SsF$lvO=MR~jMCz31wePI($+`ka*rNG#`ET@chv!lCAZ9VIW4Z;=*y4K2FABQ+=hGq=6ed_brd6?D=I<^u6&6e&UinH^7G2U&uydtSBZ7ve8K# z@(ryyReEVh`Ssia0w(Z%#Ps7EUyi$6SqR(H(VL^@GI>^P=qJoyP<{XZW9clzqU!!G zJd~t#DLsH7f(RlFLwC0*4T4hAJ+yQS2ogi5phyc0AWDaXbc1wvzk8nl`+@6;3r9FJ zXP>=)Ypr`JS6wc@wY?&PSXoW>_#JpVIK9_p8=QG=W)~yozijX*Gdel{;M?q<%Ip_T z45FUH2`5GBiDUkMW@yK)6S(t*Pc|#T!YR>K?CBORsvYiv%FK*>amt!N8eiFH#^EW zRx?{d{_)3bsnU_M=q#%3;CA}Og4Hr?uG;Z@uki{0qZohOK|@;!R2!Aa|nr~h~;^}a?5DDrE1O(K;7!R1JP z5H=t#FC_jpX!5b5e*lHEq_K5V%sh|fduUmOL3DIPXt9w=bl>v2i^=B>S1S%?EB$zQ5Za zUJ8+S-HMoDU~-RD1F1hVsG&jTE!0ONYqnzLM{jY{|kU zw^PXl)fb|ekoo6>)rdMgyF#l8uj&#!O-}yV(N?fYtlh165wY#5fRTVjn4H3Jt3+8!;Zg2_)&~CMI0X7re0qzAA3I zr?lLkTr7SVhS#JOR>9zX3lfW(MxSDg)0$-i7a3bH56)>jg42S_WyX8O21X5$veHl6-c(^cJE`dUa)V>>)@>G;O9!7RhzV6l#X3RoB>zpsB* z_${QdiYxMRf_BG(w-#;RJs7(@{zJ5N%YD-yjQCkrVOl<80;3UQ8$h7x>PfT4PlH^m zV^)!ul-=G={pg=k{FskF`QYcCG6_Bjx&qDt$vNh^LcxnD>SpctmfO$G{Q;B${nx;l zXvz57KL_pH^pY?%CJP@>}kXR8E0#WF_r8Y5Y`>1pQ=G-=Sx$x=LUH zj=E<RbmJACtU7A zta5KI`JV2BTyC zj(yBD`-o`(p7keJ9B496=pbs)m5FIrHAP=Orz96y4I0Mm>Uuow)nA1o|6Y8ctlS)EG?wx=>@VC?O(evSu z91b23XX7FJY87mZF@~&8l8dW@s2NXQb0WkV#LI@1m*hfdK`MbEZ98^C3kDrfm;fus0lPw+u`#ni=;bksZcpq= z(MJLDBCM5qG;D@)R@(`--u${H0;_dXaebYT8; zsT>xEXT9oX3oDRNyoIg(A$X}&Bf&T;l zk3IYj<$z3Qg}GOQ4~t6Jap%G4S1d>XSecfy8axE21{<$6!;YIT7g z9_A^5?`-=X;wNI=n0FH&{DXFwp))c=5yH7QWJWaTWPI0kOSm!Ue)Cbu@d%gm$7+BL zgJ*mA3DyBV?4${@hDmJuL&jJ;w-dxV;J;&PQuLt2gB%&Vy`iNq)|JdBg^Du&&QsY8a)4!1cDX<8-}KV#=^`m0UX+?vTO%Eo z4+h~+#P(fQFE)m+Jk1h{6XhhINY>MN2<~Auvx{qhr-CR-yScJ+k)mh6SeiADoIw=J zK8n5QXD5VUr-O($3jebm_qu-!q=@?E+D&TRKIgt|x@7Y>61z>s+G&O~hL|oqCLp`` z9RIn2$J7#WCjVjHHg`|bI3Elh!R%VU;VEB=&3h zfq!2#e2_eE5FA#-xFxN*+#vhf@D!i<6d;jnZ)TE`_Rch;`dnC*zbORB`d)3(fb52R z+Gd3LK1(Nd((epDak7s~QJ1b!7MHwjDBs8`J|ti$`U*KT+?Go5O~I&?*MK*OI04M4 z!4Vg(#G^?wsTlj~>m^5LzH?R5mVHmLqc~TS%;S`=Ekc`(K8TXB!)Ici!&$Ft>6~~d z!+melkHS~KIP&{O1M#os?aH>bxWz!fSnpUKt`do4$0 zncEQm#1`-Asq{nMCQ^-aMHO!A3|uLAV|+H_d=V-&OzVISv7Cp~a0oQzhyenQ+}(-; z^phV*#xIaAf{=me(e=ZGmDVSEpIY!wcHF)+o`N?i@OT8r$mueOWDqPKQcKB;DfoN| z;}YEuA;r>O*N9rGcr&4s_gQ}eabo>bSS7|90&#}E7*i9|;0_1Nb;#4}y*}yI&5==B z87ttJU)GI^{++zz?Q718n>1A#xsAfo>V2*<{CG?FP*~|TQG%^Z(EV%1haYs`3MC5Y zyd0KGeH&OycDZk2dYJbsE~7t;s?}cIrU|~S=l@zf zWPhhIF2fF296L_^lDk=(5-IVN=E}T|^MT1GE}jyEbL`o2^1oBYbhdCT;`S=K}FurR_7-0N#s@ zr+r)&4TLN=39m#4H>KWbXt5?9vo(261d~=%rg40RlqiHxK-eyvO5#SJTH=qgD*Q{d z5=EQ~fgLvZ(1Nq{ltO$}wKmicnVdGuIGRm@PEhHaV>E_17F{2nNSK-~>j9N@7@Hx> z0lK?bUv~v|@&px(iKiTM-@n9C(3QJZu*XyiQH#h~wV&r0LSx3@e(HH^0&PVI1->E_ z_$9LhE>7{kWn0HFA)QQkH#g8b(pkzHwUqeh&x{|zB!g_lrEE%(p_q!!gLlK;gh4jZ zgu2afKms}N;WN{gu9<*=frdilm*BVQDRf-dLSOw6Zae$(bEUHL!Sma8WqtJIK7<|` zDRqZG7?W6G6uu;gNFZ(t6S_lb!w4lLNLSoNfXaqAcd9esVRWEKC)13w^Y>$}P*&GW zWF(8oy_hPmKTx@ z@RQX;>)z8Z4>3K%?J-Wb9C>;DI`r!q@kL2hH(M2Dno1DFPR0{aLP1fv(*aZs{`~egzb$`CMd@#3+49?AB9MeD zJ8a_H?T6}$`;$b|<-9UJsTf2zqhR5xNiMps=xTXXA1#{X`SB1n!*V zUWLAj0U7(2hs?tmoEvfer}*9nIId)1EtsgPE;CJUvrXt;)`anaQr=c5cOzjYUeaFb zU~>21UZhS-3y^^Oz?V#{b~3p_nX9o$JelAF79JXTKI2e%aixcgM zBQu(N3}PW5%Zq|*(!O=rXOV1_KlGHOLLV6%!1hLy&_cMAQ%V{mKH`tYH0dNVBrF7D z-3$pWKN8h*qX!a_*3_K+%2}H@1Y_I3vS?7RAX+101Um<)EYZjV5fJUUCm%a*s`9Ra z5m~(`{dFT1=_tVMyy$f?9mk1H4grmkK3AHicM|%q3KfRMDIssr2Sp>WJ?^xRsTs8{ zOY8z)SB)4k1J_Z6^uWbYuwU%Xkj@iqdrwsZC*$xN1`I)b?KU|`U^mf_`fC!cLpyZ= z3-Fs1@UicmJ)Z;q{IF`d2DS#SM2Y;2afKMi~gbk zu!-b(dQudBs|1hO@1e4@^!Vz;*#5+%70AC#qE{q?rlST5`0M_z$wuPo)?O+IMcZWa&)|*oTO_YBEm3=Yxse4dO*XuZ5 zC(kA+C49)NF=J;Nvh6t*A%=wG1z4?BI2Mzg8K&kaxcQqW1np6$t$57}YZ!#gU&6sX zDFq;w$PH9FIz>)u4IUW3;jtnC7)#N91Iz+H*^nK4YExcS-GsrrY_dRtyQ z!k0VU_5l)h`JIcpx#2jgU+TtA>Tz`V^ecoO?TyFCLj_Arac?e-fV-WXJ_kL45ylW8 z-DpqrDs6@7op#(KyK?;XlWxg@`{bLs%%U(g!ie8g?D(Spx2MGgrP(vK>@{mSh zd-+yj0E5NG)z!AWFqHvmN^=9QL)Lh0`yae+$F94V(fw)7f2yr`vOG=GRPpjzmU2p- zqtQxu-p{q{yps#()-msem#h$E=QT zWPQLx7ue&TX^xxdv@otwU0z*Y^zs0yap&l#7%Yqvv)%R~blSaA!vXu46|J-@uC+T( zIY<(r?5{N?j#aOh+Qr~aYQc#UQ=`D2q}mJkg^9M>!rI7{-23~|nF z|CzL33e69}8)Q=;(0ETPyJtoI$_;lNuu7S$^L|0w=)#pMzQ?^>!A8;L*UrHY#RZI! z$m2cwEe2-T>We<$`&aOi398ISzK&?G|2 z;Q4f3FVtC873_t8sR6iieg&V2bGAc^%kgFjbVU(_jum%Ao#J?fz(&jkuV_#C6Kc$9 z9GzU-Ko{RM2uu)6r`kxsP8V{HO4Mns?A$v`=#FEotewrr>%F(&YQ7lDO|C7oo@zcO zu)L`uEI*wZmPcT;45olmezIxsb)f{sXJT&gpPE)fa8@Yy#_{)o$wrLM7~)Yx?KMoF zF^3I&G&qVH?kNcgsj1dOm_8no=4AC-mrxp8pr`aMuC6Lf=B4JX5j+&e(=Hl3(h=CR z7q(9FMngr>LF#|mYZmbBpjz2ZO^r6fz_pD9EIkEWAC!(he9lX&pk$go0$Mp(kgy+& z?8+T}f|h5a@!7xRtewBBgtEjr{gqDc?R-gUMsAGNrkDr_UT?YhSQPgZ8nT*J#LM@{ zrq6Sl(pqCR@&iB*%!BT|a|f4iuNX>Cj|Ln4u^VDc6^WxJgZ3iu+az~%ZWEy+H3x7Vhq$t|`wAqQEradH29;rZ6qhY|VJL%rR6()Md z;W!GstR#&HkcXk9(^hXXB3hJq-rFaW3%La@f4e(try1%n0rx@jn66xuB#N8=0;x)VbWBEg zWe7oljpA2@T8eSukVYkrz42_aGu^+5Lr0<@ZS^7FL+A7-8`S$R&Px0$KM7Det^tD@ zoR%W>lHvkRjgp*F51UuXkONM!Y(qmv(z&HQ9fkmDK8LSGvTPp9;K=Z;THWRa4ivfP zeqL6rP!5Hq%xftI$pk>ES-NH`Exr&@edH{fc}}&8^iop}5RFxrHRXVQjEIxi@yh1d zP=4CfV|#;k$}%lltNuu0jtv$^Yk^a0I{`CGJ87nt`~z3BbEtP%=9K*C3|pLxTL2O( zE84J&L`MnwG+&g&k*h=b{Eo(T z4c^iPT=-$rV!{)G#9Py`W+O#oknOiis9`tCK{cOx^AIv5=tKZPoHv(2AfaU1(CobV zE6skfm*5lpSxtu3r~+*viZH9s9fePFmli(!6Am{ zwh&RVA&Zrp$lQSFt(A!d&$jb^mr7jorFV~@{5_Dv^%+`5^JV5RYR1w>t1li1DK^Hm z9qczZbWJxKeeTkGBs#VGSEN73d~W1B!#xIA@wWV$qTuGG4iheEL_?sm7rD38j(K;8 zIrXVjPl9=0;1k^V`wS3@FQ=)!RsZSV%Yu}kc?baY#EvvkSK&tMH21u@n4|d_mg%Y0 zJZ{e0D{}>-nKXicO6$ca2oyQ+KmZMbLhmH^e#8m(Dc5hR1(WdD$KMxyA534Vg+5A} z2lx@N=S&}pqpfTMXTcy$#|93AP3TM366XTl2JR6rU#Zasp&v1wl0rm6P6zhr2@gCH z6ENO;xqmWn4(M6=^}PwArY@2!&#oR^=z~^&#pic#JBfJK0@@ZqmSQ##asNO4-GLc4 zX5L{>0PPFg>!%o#aCc1@DV?+rpcSTJWP?HV=sZiG^&p^YXDeq$74KWYE?4^b>jE(& zLVfQDp`gFqp##3K;zMui}z#3J_znaQ=jT zom5zw4N^sbxyP>Y0=res7ZavP;OZx*P;8_-&v7WCXJO^+1w3^rd%5@}F``SEzkNd36 zQ8a^L0J#=2xtDGzdH}Rguc+wIl5SyCzXxN#_<7wGc_Bvx3cFq)`b2;D6qQTAOF8)$>26ZIq|8pwEB6(Rb=m*V{h5^e7~sd7(^ zy=js2ndtpr+%my&tNRbeJig}tY7SHwxi6_0FJ%Vof4b=p%mcHBMGpdC(;4SM)kWxY z9Q#@>r7EwTuK;FB0knugBtZTd%OTsxhB;+?2My9k%SSEymJGdyZLx3b(oZpf<8Y+8 zJOdNW@rnVVr+E3|L#H{PevG_8d@KIsz|+@DjFJ_nD`#&2JU19P$|#=bto%}p$B9GW zg(CO^@1;o0WlMaVkh4~+&9H+0bOd|?03Mi*)qVxr-@+>I#l)Dor?g_BiIP#oB&x3VD}@uHU)^>ht}AwE zxynVD9%Imaw)Lx_TG6-WN=d=^|5PZhV)+DcaMjh|pu@F>xjU|GhWLRHT zVdzcLeh()pch@&7@MHuqlISllY`@jK;o|o*i~)*8)Szod-9a$$Q~(fvd)+rUKx$6I zT8*nG0P{=iOdPc*M<73PO3EV~&f>QNXY&5umw`KH!{KaDhABck5MJu#*;zdDZv&sQ z0euF*BgQ*C`mCKOB1JJbKL)K>OyMus|L|RkVw36@x50}3b^Bv-q=&9bvK$JxYH6Tl z3B(1H!Bj9t@3FW9Ht})u7Kg{P=LT@#VXC=syGHq0A-T9sLhIiv#Ir~f$USQ<|E6R9 zU^Qzooe#bt(=t}MEt!=+yj$XWCtoTv%5hhZ13bl*G(S!t0!4H@} zdrw1owhYOUHG*NgMRuLX&L0yqqjfrOq}=myr-%}W+A5E&)6JNH?p<&nWSOQ7f82iB~TVh6stvG1_$KB zIzD}#KvC?g+s{Wva84fK7!_7fPG&={nrZ=Y86YIdRr58+#{R+* z80f~0!iqDPIQV7WooP~pr7jv81;>(Hob+tphkOdk3ktufW;^_Ru^a}0^!gt}AJNvG zeoe~WrELv`NQ)TSNL4-L%`CMmW*d?j9LzMT$7CXk=vBrlJi5n9Gz9d2bLVBuLVVxT zJm+PQ0Gp)(yBd^>Y3XA7m-9~GVKowX2+T}$gzPXwx05Ly-;j(cOJ-#UoMZ}q0~sv~ z5z5CCk7Gx8U|CI=iI{J{F_&>R!?%F=8Jo;!#iv=b7(U(`r&GbgdZ;B6Q1>o5`W&2h zak}HevAdt?XFNCOhpaZ= znT#_oNrzz+M?fsh7q)m)-Mt#<>KZ8gsUa!BYqWqjNxn7L*7X|ya=v=db=%3-3AXGJrk?cqMu0*l z>oPVUOz*oHg}w@)i{RyC;!ScT`Dv45LMid9JSd1f7!?z;r8^bYDw5n$T^}2%dWcth zeAV<~EI3JLM6GhZ4#=8}cI6X-b*X2bBxVq$Dl8W3Wj+%PGTOP=bTU7K)HfFbMA$xn(Qr zVvZ*p0y_%SaU{igubdH9mnc`!CHSFjJ@nyvrdd<_)28saO9Tsg^?Ct;-1K}^maR}8 z;p`Cr1Op@;UgBl!7;R0-b1t`BR#lWNCYj>;9|~w|0jszJ+iOC*Ve%Nopi8-uzZaTHbxp zNzBWhH>_LF3B|_hIoe{B0!QP=q7bxRe2rDYN{qPfQAJY*UQ4m@P~<&5>cb zxd0<-EP6PD!rKcqv}>PvXM94ygE%z&w53msZkKis&ci*5fPUQnT+9vJdF zd7y?66m4DO2YPr18b9<&k%B^X!d?-7+x}8bfDs)S5PU})7PleQziK_Nw0s+PafpsJ zYMi~2yXU?OLT~Em`4QSyR7X__4T`CUJcg?!kKSck^1o369Tm*PUe1Tg`NwQ!+pgcN zB=>c9{=?*ZUob*fm5HpmR-X622s&#hFR+XDE^pA{rHC? znBV4AsH5^p38@0l4SCt5d|hDQtBk}vWc`z-Atj{P#AC7D{>|+Mzz)fI{?lK67g=*2 zueduo9E^G_0djxvJ_jqeb|R$^@Of~|ufDHhIwX6iUPMOVPrq`?HZ5MK^`KpAF-1SK zv%7ZCug>E;+U2`Ji50do*^=fIh>+rbfCF-&>;?B{n%+Of)yws5JHHAonqb^+oY<=Q zRo*(WJc}rP77yB%Y5E)!l-IMC>VZs<-u!LESJ0W_4mrQ)omXz!pnCW(Uq(jZESXJe zVHjFhC+6$;l$a?Ctd)iy?wKrIdq1-0)2F&tN|<4-S@=3wuuX2p(yTQZ>S`FEC&<9} zsOGRC)LPfMm7(`lJ4!<-cSfu%a=$T`zUbt6xmpMYxuyke%V|MUtZ`8;t`cK zY7es?ZwI;FI7IvcmQ#@Y>-7cKkuXjTS{FLKefFoa$ol1^voAWLoRbDZ@hv8?P9o%5 zh8hz}y3l(%;(0q<2@b)a_{o^pveX*XdFcl@(%)UkdRViiB1|w*HObtEC`#Ie`pHTrj zU@0sy3K&}Yd3lBV{@Awlk2)H};@}0MlMNywAA9d>oxTOX$oO|ZjQFFm-9I~fT=!b) z1Pc$Yn6V-I#98mF^+^#&o!1Ii1(v?cdwFY@7vC=O>wv?c|8&{{FKQ#q>iEIf{{A`(!P!SepLO7#)DUAu(tQYCOA|91{N z=)>!M+)T3W5$>1s5y}A)qjFEk7)-evR@}veNxP?;XU83HzWzINy4v-vy6RU}kJ|Cs z^`kzU!S73dAwABwZ@@9+c)hVz_7xECP#66GkO5(O4eyEC2aJ+9s-(YT3)X|C_#^X?t~JK zG|-jNJ<`M1eRnaLO+EuZVU43s#F6eeopR}KWaw$&j;yh)z;cNqWp$||=ljnY*U|IF z6fqV%gWRN=Z+`E&opb3uR1dX9hKEL*+tU!4f3eAAKmQU!SUi8gxZ~zme?k!=0a?2_ z=porI3Tn(2{TU%Kbn$a*YBp;FftKYl9PdKWjJ_EY_DCifGaLAdDM z)6=ttkO`(c_@QIzWsJo|zlA+ne&%!oRU`q~i8#yBth1-g!5~(!Lu+_-F_X_)js^P{ zAN5I1;Yn8yYs&6)8Va^&pyMk0%aMO3f^ke&13*{$m#(@9QS zF=yM4vEtTk?-O99om;NqO6a)!7Y3vJUxBSJ6$Cq1QPIY(lHb_k{aE$q zpE~7?Y%QKqQeXs15XQw;1Wf#&u1NVMl>D#^0tW!%fH+%uYwr74@00Y;7B1#a&&}nB zOR<#R(QKtg6@B5>F{+=Su9GmTWSrxELRzC0y_U6~ZvKt2_>2$R&mYee75HyNbVv)a zc`4F0idSlhP~kb3GbZ!q*+ZsuVzp?q&!2wG2++Eejh&u46n{&vn~+`VFU${yw5R2d z|GcTxGJ0YX?iKp-{J~G|iwi$)w{cR(U30J+k|pML|6`7*weY@uT15DG_X7~f0ZB0e zjV)$yR8Mb>h|XTSFdopMTHuzA6(Eh(>Y{&4biKOt_DUARBm+Xs4eEOS&dq~vW?(=5 z2A>t#5k~9LrI_L1DvoWivOmB;CUdxkheE8DdV3x_XZ+MQMB4%JQ!$_bk|JyB2~)PJ z#5&K8ZftneUWlzC8!sZ0lHRpR^F%tg=@OFS)U&XkX#>Ra3Lv#A>v5}PatSy!>unwZ zwOI2-2fl+v{E-?Qjs~2h9e(-=ITaeu{0f6+jOTw5VRzv_g(5HijVy^mB^fWDo^P0J zUzet$-EXyGT2jMkB(L?9PG(L)76l&dbuJo0scr7 zlVnz1M(ic5)bE#jh3_^1**^`J@htyW%(Xf^&(TCG#6k*0Dic67+rYR7(MV$0sRR)S zupAZ7*AamL=h)N1dT={&$}ItrS<20P0&Y&WJ{c)CcBAZKx?WoiJYCo`*r&-*obR>8AqSn7@O#p>? z7Y_f|GLfLzQJjbqY?;p+ZIf1|V6QZI1OVBRHDV2;XB(4o_R}T}o9~=5!sDkJ#RQbl zuXnCu&fDV2JH?F`hVXeOFZyNBCU8~U2;TqpQF)lXalZKYeT|snS20Fq-*L;81yt;L z{qd99jgA2utE2HjlUSaFooe~8MQ}l;bfNjUkChG4u97#oC5fO&gMHwA-;oOXXqP5_ zRL%_9Z$-k)cd$v-fW z98^;V)mpUxzr!5Cg$It-$zpF1V&LgcU>9cojDHSe8KO{>7Yj6|E`v+74+%*5sfx>x zG3ovbbg~UZg`xIMq)>F#uIlo~QixzVW5pBWP7x zd9X@aL#s^6!w8-G|B?AQ2?|wPRa6qZ}Qt|fX!A_`%Vtgo8ccQ$WbM3H<_+_&V;AX zrSMHuUCMrAP>Aj^l7#~=?=qm3wI*X$DyvKWdEJb8Zpwm{sg~L4N4c`quv*Fjq5MN~ z;S@uyD_V3kCq7;7`@vNTgF8;<%BBS@t;{$v%BgivFWFu(tVF1GOf@7 zj1%zj{RZeo1S-4iqkAAvZRR*41pY(8%Lzm5=e4-Y$r^yySlqsJvsaoNI7=?8_`Thi z!(K8OlbAjmbgZ*(vLDYbB`)GptP1_O6O74(X#IEGzpt2_j6J;!x^}v;h5w!8aH1&h|63;BOnD^5)5kEy1Q>;Gy9U&{}1w^mi)! z)ZASK_M~2Sy6!B!Xm37!#nSSk7b1W3cMI$jOZJ)+G&mEB|+eodylC^iw02m#iYH#f#o?!SS{|R*bsMhiI%DGBR@h*cLXN`r z+C3*X-v1mUK3wTwW1_(IJ{bfjsQT+wrd$E#!}l}+7ecb0TRU#;Ejb(~&r;AeS9FcEvFJBL~@Rl|8(p&JPANA(t3PRWNyeP`;*q|C z#xi6rysNjVKzS1U?_E^Lvk8UwU}mgg(M2Sps&gnP2M!#)WS=v2<2Dwzr}N0b^jg;K z*HRbWV_~5klmd=klZeRm7muy*7Sey>2#W8tBb;bROfWTMF%!`(SS6EZlW|h+POIZm zmlQ)bYj*lNYX=pLM1)Sg=#HMm;A}YBd6;h9`}ESQVo}_fJ^eFA15DsCF@*BVOzg$; zpyWC90N_VK7a9VVAl*KE;+Lc`3SRt`=5>M+P$b|#GbJK~hMogN*&7vVk-w7O*W8(G z!E;2sf4cme^Sz*tya?00Oej;32KOOKhs^sH&-Z%Ue_yzp;K3I0z>qI~v?eL0UdIfE zVRFNDI(LBqA(kn&Md7!=&-fTuSr1E_pV|kr-i=;pnD%kqKMdqb=UBG!V9;B`lV=f_ z*4Bg+{Nh0aA-~s9xsF9u8Qh~K^3liPabXApVFCTO!y}U+zfi{`a@4^xXLy1Rk<<2T0&?FtseC1&VB(iDO5^$($ z+}L$H!O)H*%dSOXe>LIR!PB7~ci^6ZlaL-7|1ml6Oq@#BBAIu6L@`h1}|y?HkeW$Ek3Rz_z-itS{?fA&xO?_8iStFYPn5! z!p)r9G7Lq3;26-~?YpW9pyKk$j>YVz6g+C-glG=F7T%S|S)cs!obUzRueKhOC_j7a zL9_SX41ciuOTfkdQZ)#EK?`7}c*RgXkMGd72O4>ofOU*g%aijzazX~sVY=TiVMC7y z``t$Waw*5|1=S13bJ@rauxyLE_9f%Y(i^uvxJAW%rtD@VS$bqbq-S_|amxf`#8%!TUSS|vlfHZkBBF*TEB`4NAh9bNmx@wu!v@Ya2lm2i{jAtepb_2q0(E+ zA-uGq3y!i7YLXm6V1HdYOVvFD8@Gv|)f;bStuATQ@KWXbCdus;1~NMKK?07Kf1|ML zw<*l-Zly<(=`dHUPiV?+rAd%r@1UMNN|NbAsxms334nuLs-MAbE`y`^Vzn12?;Id3 z;L?|K+fG>enCN*&=EWJrgL*15i12AW>6)RqQzjCP?XmOcoVV%b3=3HcO+XDfR^Pq% z@<}Z?bn^Fw;Kd(d`2({#3LK-_DXvlLM2rw6`H_?FNw2puVPVT26&;Ji7EK3UQ+JUl zUpODzq{zKSmqTBu71K46X#+U5q1k zx4UZK+dyGsm#~hi9(N~ZZ_>hUHij-rW9tF!`t&@?Rz#Rm3UyhtRE-#$@v1J9L^AI?sc*@IH}q0tD1zG+femaljwAnpn>jISe+l zS?#MB9OQRmFrsfX^e6I}OJ?&3u$(o{ZBHyKsbq?CFZmD~ePnR7|DNz}deUXxS66;o zyoxF@^I$i8FFF-dVR@7ZKhDbJD=_2*fZy}xfvVDEBh-2SW= zV+U?4!Ei@#e&jz1pdx8(lMJ%R8w&?ndeCpThV#xXM7Ha+7PAB0kf?t3VN+dqx{jjO z1~4}lbN1ielLb{%gfCpmr_6!xrOGNC zj|n^$5QeTzVke4g@v6_9Ute(!wSRFqbC<8bpTLli5qk5~3XUy|kMjbLkch9sWD0XccqMX$N=*l@ww-?5W2%P1yz*fr^*QmR$uB5UERM;N%T|g_n^kAZZ84p$BMxODit3 z>>v_)-%h+1Yj>8;QNU*18Jncr>rzRpF4B2mT3_`7EmgGq5-@|tYVtvU;h%k>j@^VudqBSqeXvj^Gf>qz6u5R7}W!FcKu>PQOuyFI~*3V z((Po-i^-&AG&ji;S{XR_ab&WqER4aspLa3(p!2F3+~9(8me&i-M9ZMWn_uA0A#Kek z6|4@=f#uaUV_EGB#cVLvAn@qp6mbsW=#SQd#;muuE((GC=qq%^dZZcGmP=%FFG&jZ zNOCGZY7wuGX2;$~HDdu*Ez_SJm8Lo%F=$Mo2)Sj2#>gxU$ zYU5%z+ESu7=3WQs6a$S$sdz*rqwf2pTVUXq)H@K>p?V|2(hR6&jAiv&Uj32<5>Obl z5U!rKIc=~fs zMj^!jV~V9!Vw~N{ZT--9HQ!iT5cs@M0%$x?e0Q!TUG#vW8H*)MVx66@12|DZsm>|e zF%I~C-r3=pxUYls120u}t@J~Mbr8Nw+6BBLB-#7C$BgYVpldf06(=>&O_Glo1Y2@o zKqs;69D8^yHH4|^E(MiJBi6kss|Z&1$80$)1)i2P3YpZWQ4&e!8jm$tZ%7pI^6eiS zC`Ra|0F2YhJzbPxAnXw}H9J&u}ms#3ZzC(ws`|QE4Y!{#u zr3!DmbFZE`-bU41s#h#f_r>@-Yvf<=z59dqPfwg(cQP@Ff~H$(TYJU zLu2_;PZ!=iR6Ow(vL!nav~c>A0{EiZ0M_tZRq5|Xt7s{avEkrI)&8*(9tqs!MC#;*kOK9 z|4KRG^Lc>DNU4ii*;kl?o$XI)%zeOzFDq|{$OMmDz1;yu@2^gD<<~C=(brRN;vgAJ z0;1bFE=6TEXa|knzAS-g8l@L`QOZ~1bh|fUg9pP5++=VXaEPWQrItrMT72M8rxnlp z!t@lI8XuFB(|VrajNwVwrJo&gu9Rw;oFV~|avw*tf%xxY>a8sK`s~Fp@|;bQs%tZ` z=e{Ej>2|L|2(4*u_7{uS?Ha0$2Zbe($z9hKmTsGa;L*=NC|QUh{=ry?arFc7>qRtCvLGi=Te!xjf_oAA_=!NVYTM~knTg9UIcj3fha59pT zJ{jB|2=JHMi1?_9ih!fS{$)=#GgpHEVby6^dMuQyp-wPvYW-3tP$!#1aqnCA;|U)> zs>M_d&||Q#yI@Iu@(F23Y=&A2?lUamC?XC9YJAN{%7=Jv;j&7qk1I{YACX2pQ;qpQ zlCCl;s_yF#osuHbLzjf8bTf1}NC~2JgY*C+NO!4pNl8jeD1wv%(w)OYcf$bh;s1VM zEk3|n_nv#s-e>Rq3)TlC=QMc@Xk`C@ZTK>-ScK5#At)7Yy+;0Ak3L`?@yi>(er~wo z?$to++?gbwws_on$>(<_cgFoDP9euFLNs4BROL5c(^YaNNmJP~E-VEn7z-X42N8g_ z3%0@gBdCwD*)+H^%9b%RVL}RtFi2P>MH|6AMaAn7Y;LDBv#P_jK16oVZGN`HW!KpV z`UEDeX8@c|MhV~&*%IkUnU*pgjfG`R?Y5MXF!Dz%#uRLCc;|dS#3g$dEY>)YJ>9`8 zXxs4@4~TFmMSa;a(Q0`VPpM|`pLJ@a#yUjK<9?*t{`{4I@8+O3-DLgYD7zvk8}i(k z?DqX9z1=d4YhQQ}BPSPj-xI%-!f~bc|L*y-?QWP<%ETaMA#ju~(2at%O%c4#jQ9#C z(HH@MCM>>{ACR_0SiKHR-WcnD5^+UE%c7@@R(WN&kvOr&N4}Q1 zVk&X>I$BLR`5ZC)0I*~a#ye&QikU^36fT?6tvMLZlY*^>Z_=`$!nW?rU7tfuSZ@OT zeb{cb^vPp!Vo0(G=_%{rn*|NG*0SUC7~>ZyxgX_#x6P|><6FNc|Ho;4_c)L2ZgaNt z+b>)@fg5(}!rK%HvCEZkX@Y{>uAV$5H>Rhx$J!lV>?i`UPS~gsb7@y>Vsv3VC4Y$A zTXRfMi(r-V`5H&W3+;vz$F?4%wu=jIn(D`}F(`&fe7}9=xt;ZvY!i0(GESzjll_QU ze=TPJjG{p!2^(-#hhFWitgxtxKY8!en0(E`2IP#650f`2|yoW5GHa#@X8%JZI;EnB$mn zJ*Se{fy0*#v9?~cM+JxB^BpUGyzz4JavMG-$C}2*75?_qHJs{J#GrS}zZ(_iyHc}L z0bT%uy_N_++r#B*pNX6>dj8(SAxRB%Jwm`0;H2$5=btE>A*uk@rF{}sN ziuiZW9D4{}oYjXtHofD(o|M{ZmFA4odUW&6J!;3EOnxrU;SS=wbyPDoq3l_gQyX~j zl>xr}?6iYL{`sVr^pHeZa2k0a9*zf#}#2UK~X1>i7O-r<%d z@g5(sO|1~TrV0YkGe_`PAd5!(Ja4Dlzku);|7V!JjwvBUx}`}~d(NlqTl-6msn-S6 z!^2YO)7UnYyftk@rcU@U!y8mHQlG>&2C$+4{|l5K7mB65_Y1t6EH$t`{A>)Eo0SCV zm-2l|iEC_VR&jvmZ7H%DQPnAd+jcE<6bLVoj%-TZY`s8@R+-BkW~zZZK}bj+9UXPj zy_ZZinUX~^A zW+Sh0rkZ%dM)1us@%qaiFiHJLi+M@QeuObboLnfUWk!#E696siO#Veg<^|7}Ccn5!E_S5P-F*?aqy0zswiG%`6uHBJ zYrdu?hxc*wS$f^QLrm8NK;GT!PXQU$Ff$iWdZ>MupaB8#5lnGi$KoEyZ8aX6`O(CC zQj|-o7kMhPz5YYLjp^(Kc6YnPsUod)qn9^N?TBuG1b5*eOR3%I2bH;}BlJN5K#WMn zv(`+@;2Kam3G^RhlHB}--*z1%>Uy!KK{wCHI_^_a`M7veMHQ&@BVPHz@M^#>_lw=I zD7j}nC4+b}-_P!LJpndlu=lzN4iLM3YC6ZQY4A7gp-Ip^3zD&gWll(hpz3C7YdtPe znaD-Gqk&&P$wVlDpxy!y;&3F(U_h4kW5BE{k2dLL;N5t~x81uTvH9p?_mL;uCiELK z!uKTI&fYTr{sYHE{9VAmv%HR!zv=5!WECmRjrxU=FZ0V8DHq3aa*ac^ScU(*_W~tJ z^63(f>c9h@Pe5=SMI4-k`I<8bDM(ax*CX@PURtj#xhJOkSU*$-+M>ipLthGuMEO|7 z10lBD=lOn_@B9UUIs*B-4xl_a`)IC(KVs`j0e}-jhKZtc^>k(c?uegDOfkS4&Y+ho zsnik^w`}o|@kk6%F7<@Z7vY{b5N;|t&-U?h2|V+k2La2#C?ps#J##@#gq3&-Yz!MN z+o0j;69wU2r|v^K()*;q;`ZvFCtmSd|GqQD!kQ876}NxLNN9lPqyr=$*6YFrQG|Z0 zB*d*RXgE1=J33}YBjZGKWu>HO!eqBe)eb>ltBOg;brzR_W9;65Rb0Cm5*sh`l}uWUnwt?6n*gqdqzXo9j>-y0s|30y>5<%tx<@Pdwrn__R{9erqmTn|#ZB zg;EZ7UO#>r2U^wG20`weQ4t}}A+<=w9N>WMWL_GY8)^;EWgsd%g_DSxw=N0t5tZSI zGIIV(8!xNdlTcIY{{b>i9PH6pe1Bq;G}nTJgGy+H*;^{PQYS7=D%LXmg|=@ zFU&a-?#ix(S)h7zmpuIzia|^U$C{bUp6mY9{XFx}5XD2$pSPvTewvob<6UTpp06($fr8*36*$#mWSc*G0GfS}FGx}R zlaa?|4heXO*}stOPewHjWYT*01s_?Hel*#K&hT)~Zm5=>Jd+&yyH$k#KvZ&AQiEUb zRobIQn1*vG%j__i5j&oN;vwRs34>5M{PGe@P%I;dOjw`^_In%sD6BE($~_YO=3PtF z0V>nzU}bFD>iYfr2iOqPMLvDhBXOx>^P_LcOs8_6A(9_xI9%98xpYJaXMlIsT4gaqyG#HG!>%7xh3|#q&ta zkP?=XsQvubAWSBytsZVlj&$@k*P!?;pS*5~%_>5v5eBngCZE%zXHlN6V(WXebGkoC zt&bSdFV7CtzysTrUp)|Jzw{pvH zM+VmD<%(9~ed{t7>9dA2W3fA`2*tHLRMu)(eW1(`^4*z^)H^{6T(8*Jcb&H3%yE6k z>Wlt&RD)CiMVrRb*z7wZ(FA^ahxoMqvwCAmC-`C$2Zx3bKo3BwaINefX0u|yAEEVF zMm4~HyJDQaU!X-c8tz9emW-g}dE`k?E$M zEV3^*X>+wpIJ?QSO8qF!p(~1$ev6F!An8$?+>`I5U#X#ifM|78>5O5d$RK-)B%2wk zOmhQBAsgh>9S0NeSGiK?DUn0b0UOkN?M@GY>JPEv=OJM@pFURw=yf#w;b%FVAFfLN zyZ4yoc9`eGpei~6b4?C5T5Z%Rjb5GMxQKq%aqTQ zsH7<6tZTk8wiEogv!c)ZXWaz&RytR@q?v{t@c6#Tk!xz{)Ux{X7q{1k9%0hsiT&(Sp>IhQ3Q-M%_wCD;a=u5X_P74{I{zq@yd<0RmG9Vb z81}rXBsOV+X}>c2w0o%{C6OzLTBf%zim7_{AB!facs>ih4nlE%146evQv8?UkhI{{ z;uCH0;c3YG&UcBOnUOtKm6>CV#zp20iJOsI$XwgCY`4^A<*ICam4{Qu z$Ma<}vS_2ARe~Ew)0p);7YfQ1bGUI(6?BpgIoGrb;loCjVFAT5-u`&|$Bf^;_)`PR zla^Pj0POReJ8Hbg9ls-mxRDZ-QX9FBB5+f$32rs(ah#6id984v0h4;GQfZ6PmGdJz zm&wrY_Ojh*PdUM-+sKNpO|K6=6pQ1$3gp@9tWI9e?9#=(iSc=)ch$fK89nz#p3>bs zf!t&haNzR)3;8BMmiWjH2-HvcuM=0l`GX5OSWFnFSXrn@6feshP*C|3wbEfs79;%l z!cVY|Dz8oY=Mtpab++;yYv)swcfZHel=#huyJW!^Mn_$y$910&x{Hy$s`6G`Hf*sf zDQm!NL@xu)tzVY@*r{3@0v6;vcRT9=^TJWWKSDcx)x37(f)lP<(@wc*wn>7y!nzw(9%%Fv6cQ_J6VHhPE?-ZZih^+>pB7 z+ZgEjZ{58Q4Xeg|>{nO|7K%PNz^H)bYPoqztH9i;Z7j6FSj3~Tvdy^^Km^IRL-+y7yI zW>Re7uTNHfhCMEj$UX8K|NFw6%3Zk5r57N3TMskzn|8A|eO86iR3)7j-wk=DJb}-> zi(z2@!}~HgsXIP;*9aQa2eAEd6mZZwBqEFPW@1xLes7SJQeo-3cr5+<=_^HCai`>b zGt(}$q?|-u+uf4ca!I#gX-JLgJ#n40VBlL3P9O#EniE<%uD$R0WhglS&vUj%^0-d( z`B`^yjB_4Z5J&$+4g~=vT|u%KEYN(Dzg6tN_<7gDx;$Ke zn%wk$&jgHwh&Xxv0iz@JPXsAF8}&U*Te2~UN(VOL5?&+?h6b+yo7IQ%f+>_w66w+A zBdr?jf_j^Z8-PSh02&s;asNVt3Y&j2^+XhU7dA8cnFnX)VKOl?(O;2?fA|8L-sIId z%;Z+7`1<5(pxIsXc_%p~s(VNu3c&VLq+~^+8#s9$mjjgLdjDzpPwa*reoO850A^be z&NwVGOj1Nrf#+C&B z35#eW!VuR??)Bu<9xXB`J1_6Q$W_u2^0L1XDLt&x#_S9aVem3Z9|)&DN}uu3c!^p| z@cakq!gqzuGRP*3ugc-YYrtjChWV$_P6}5>4tQhMB{Jjl@r4p6Y#m9gv z8rc?Im1=NjQF*RYsYH1CvC8WsPHWVf%B2fK6^n z%Ul|-`k|1i2#!FKcri;+ovd-ng#;Xvy<=msU4iM0G zVmWYb_b=KNV>gJ}g_8D;7^BExfPMgzAK4k`=5Nq_e;Z|!FvA)Z5Q#a@*5K1yrK!WE zV#@NPbd=|BlFH}N`XWI%V>0v=du`0}G$b?GAGAUr16e-%axS{S-zxAEQ&3cGLtB9) z3&iO3_(D)By_Y|Gaq(~3?*WRw+?EP>uDiKg=JV^v2Wn-);SM57*K8~j?gVUV=Noy`u1nV#BHHc*d{LH%;4o^j5Lca0G%r!^tK{YqcA^V>UI6VOC-+=kN~ZT z?qlZnNut*waU7~q>z18H^~?__tg%n<#yL-u`>{8|jDV$E^TyP#m*Xv^!kj#&;?qxY z%fe(x5YgR4RWC1&y59~r)JV%CYOi#Jnn!(GvuG~0*{B&^VUM;Ujs)~cR}Aj-&*JgwO6uEiF)fk)Io;YazBZdW~?;d*K*G zPG&Pa8ou5J8FYQs0~4WmrFf+ZP{h^GgxwQ*D03R4vF0XsZ z(><3-J&?yfx;|Ei=#ok;T$TY7tn=k}k zZat{0Cb|#|p2_0hoKs}Fj=%*AA6e%m)3?8Hcg+b|Vr6q1Ie+J{PRXT683#0Kd9t0h z(xrmdUoKG2QVj*rl!d02Jr!q_)-W$zN!blDU&!^0W9XIHJ9_$~l4#c4n9*G8nGHuw z)O_4K;2g9PN5Mjdd9qA9r_A=q2jCOg@j5l&aUKClOQ0ci;J7J6g9c`e+=5c?k}FOU z<976}^+n|7&pd_)`q&E_7tGhSBn|^XxOWQu2n-cmU*)c=7!)Lqv6ItRxhRl9HBlAJ zqRo0*`CP?04wtZPJ1Xl=xA*=30TH;}_pKjyBVB;gC|4RNM7*TyqVAiAG$9 zGyRvA2ANi!H|zLJ&u=AcrAX-^vuB{UUlbK6UN%qNHqz&L*!n7wugYOQ!)>Umg=CW>k;z{ z8x>u{!r1DuPox=N42skUM}5Cvl!GRj{i4g7bTbSbZM> z5%0}rp)_KLu=qQrz~!5|F`BoF=5N8&PxeNna@Gf`V`$7KYwV60Y@txt0Tu-f0*+to z4E^SR%*+aC`oO{ih|q|$3Cz|nr~YsfRl2lDWyop%+UaJHrQC+KsWojhXF#T;k76+toG&<@Cv(c zSj>FGfZ+fBGydsX%0W(4w`u|N5sx-K_&+-ved zv~rqEJlZ&gibdD&x|mk^h=1-?_RGM{^_cWj!%UbEQ|HwG1mvhoUVV;4*jeRNFiFhr zW6igv_C-r>v&ia8nRl3g9Q}Bo_M6gf*6RShi0S_}I(rf4PfabsgFS!q0Al*HBH8uIP20>1G}nUDn1fvp zYK^6#$E3!fK87+a4d>r?RF}_X1|>YzoL7NOL=v+ixX$H~6@>(sq!>P*EK4m)!bJ0y za3y)nt|5w`ZeGYTC%nuwBCT4DnM=38WR*f#fUO1aKD5^c8e6L~3T*9zhF*1n|G`Rh zBgvY!OyuFK&YzG=UKW;`f{-xsg=ECO8gN?TxlP97&~WtI4ECfjS*$LqPSX zZqBCZhgIAp3q@{kdQ)UI9Aw4B7)g^h!vnzS_P1szM7KF7)&uI4`pguk>`sZAsWD4Oo4qP(i1 z0!@K&5z)y|3Eh(?uFOJC1D|;HU|Tpac&#pBA_KASa>Bl4s|G)Sdy&G1@RZ>HDUZvM zM=Ul0x+`0N5T*o!ma3bIZJft5^mAsd?m)kv+hX5$ljHyGBfa=IzJ@Rt6fN+(Y`ysc zwZBuftIaO>jnqwx<(Gw%%UNK2ZpZ#*ORBSMLaMB_=Y3z2j82+X^}KTm+ce0S?x`;3 zr`vcVRmpq<)!^qMNz{Hzd9+X%7~41TJ$2+^Ec$Rg+8BYdA^T(fC%IeC?rM)}V9LRv zAQ4X!W}dua6~Oo%rWe>>Ez-#UJ)8Y9`p^vMI6k5cBsjf(Wj{*2Tec{8D*t5@HXKvmN=cNWV&Dyq0WCe{<= z5YbZwpbD@-g6l}-5H5SzDb8=%>^96sY!qe1TFraw!w$#w_gLwA6WGz_z znocevZwUTq1>F1QX9Q}z0r;9zMb9Uw+QICRZ~k!q5Ms-zJsL*04V6bYJLz!%SM_=> zEgiIevMjFl_}Z=meu$1fD;aW2E%z44%2Hgnos7Vti_eALJ3Lu$W|FlEmZ<;4erYz^ zJ+Uy6rc>;z6aq(YRjwD=^7D>tU)z6TSIJ5y<#^Kmb7sn{JVt0NBze-rrRo=u-b1Tq z3t?V+5$9BiuAf+vPH78*mICo#=~-j$CkWC!ydUp&Pf%{PCrq8W3Ex^SB!aZ!r@oQ) zy)*dS>v=Z0zG%kOia9^%5>J}~gS!mg2|bk8%Lewe^2$%O{-@F=BCOMd$&rl%x^93Y zC2cqFA1B%5ixZL6b@M~>Ef*8=zO1?#-1PwkDC4f>`a4DOTwijvI_J)&p8?p51=XZJo4wL1K@gN63BRSIRq1(I+CXUkEjxkOt?(9ciS^rXIve{Dp7 z{YMgeCt~MgAYm+PaO`lAU|9`>k_M{m{t%nd@WawNL_?7(3ANIP{YwU^NT01ofgbT6 z{JF=6{7NR^SEN^tG$P%Gk(Drn&5SC9QXhe_xRkm-pH~Smiv&>6WGuVm7@mf4f$0kn zv}G3Qvs|0jV$Qfr+5Yf+C6;=eIH9U$1i%w8VFHNEhdOmkW&1u-ySD1%;ind>TC~u_ zdnZ_@9?pk|$~J&@kh>}8ro!yf2!_FBI;m|}mKqMB@1)z^i_e`wSI)8O>yLpRjivCm zmgo*h^|}#`5epKng4fqi{~$R@L!KJ2lVX#aMMyg{s8X+v-sXRGY!(JG8PNuK zA<2ncH`Bo7Hq4NH8vRWIrrknaU!mm92d!SEJ+HQ1?Iim!KyKsm<*EXZ8ThV;0qe^A%Stti9r_^`Z?#id9Er55|hUvI_oP&RLU z@`LgPTF|8r!hyn*uU^g7J>O9>uHl^#%xu%Qjpb5)W~vi9B_hKQ>=vIqaW2H10?cUQ zN6xxAs%7e_QRGT$@(8d*2_}}xp5n*xs3&fbt4bd4edvK#s3k!0F0v?1=8V0#%8I~k zwk~Ftq*=bMBi(}H6yO{dO1ihQeTMmgqpVm+e6atM(wUDzEaaXflpddTZ}59~v`h{O z{wZ?m(~Q0{#hiF9N0f5LjMjgPh3VeAnvi7{Trw8E&K2By>FfI}FgeF0dlVMD7h?CB z>A?*6cgxIba)!jktAm^;=v)5uKda{n@?W2lCUV-gA&zb$KxUu%oa zVqiF~x1I8dB_3r}MM!QM8?xGKb?aP(rTuXZ)kSY5m5$W4KN-mc(qNl>>`(nj)&kPY zJbXBFeIm8w;dM-=KvnlW<|TnTIm}0^Lq@~0jn?Udr%x}nX`v)uON^b# z$M4a#DV?BYD``#^;(VO!o%aamtm8JPTFS|f1y2bR@+;X;VmVK$?2$Crum~C_dk2h&(V*}#u>qrP+MWc3vy{ zglRIvcO{_~pD6w>0sf~yRzx`Nb_FcbdrH!7l$hCxa%{MlbD$t{(~oFi%wI_9i*Ja; zylk#Pn49Xm8&nPB!uPFda$VRV*{AXi>zAQWHF*o?gCqzZ%u`hB4|(HxZ2#b)lV*{= ze`_8`t0-RXIXWxN63}N|p2mmu?E{EeLlCrVW<^8mNU)8s#h#q&0D7E@$Eri$Mo;ID zX^$@5ao~T0S~Czg>bllY@@KgurSdyj#WvG6<@%u7paxQ<(8;zn+4S1l+EjKb*g;G* zxPVNGXu^l_A6fj!n2TVUzghxzhl&4m;z4B{c>;-Ol7vXR1I>0i&A7e%j~x;l!Kc;e zD~XN(nM9xX)ls$3!4Y*+{AfBA2Je|pJa6rKIY(Go-^s{-{TMsiBMwcs;H=T4Ql(Sa z6KJpDbhQHz;eQVQ@{*>$A}4NlmRMfs&{VaXJ^M+b2U|a%gZ&hC8>y!yP0Tf+!0T8d z%Xm_cnP}bS7#TwH{`opqD)mG>CazH``9)NGL+RIqEioLWCgS1 zD!{*l09ek&-r(*8%SSZE-RTC)8+8Udp0m9cuh0sY%Wp(2`Aq^B-y9w@>cWLMV`p6; zgtCTU#)1@yYyguMP^P~!-6rW-gyPQNB+{|AV?(}mE06rA-li6X<>=SL^fYOK`dVfA zAt|4>Nw!uPzJA@^P4SP8{b-dV2)3f5!-+4jl%Hs)u_R?6NhBk_moV|HkV3d^1OuT# z?%>;t*vZ(W`?4-#^}p;qlsB_`Id|lsL|Tu{bK=T51xlJq7HQuj9rd?m!cU|EyD_Am zn!*PUx%!@SiS<~1XZD#UyTI3eqZ&g2&w6dOl|eP3PX;ZGEisK2_IAhT7g6ExuDw3d z`uTje%U|e4^v-v&nb=^|teX=$X@H!o6&% zBk^Eq&&nd#nJiZg z-MOsQ2=Teulda#W1`CJOI#4d_^$SHl40i3L7Q{@>=1i$Z#@_c0xS@!4)1qIbUgS@8 z`C=}8m@Bskve<=hOlS-Z>vHPb7tE@h#xF!nos$$uN^YclbpI`&tbS`=^I$n`B9zvn z20#zX|JH|UQyHUvW1Fx{72B{K9oyI`YhmeZZug%-wsOy*xsX%0#32FFBM&8f7Oe@& zTlkTlU2u`?IM$q$)a%lsE6km(zciN0K9kITv=L>n>+JX)V$Q5sy>~Jch|o*dBLFqb zvhc{Tq0Kck7o(1_k;mD=WKaJZPYGxFZZxR>^Dnm2!8gdkXgpcUz_;cXDh5gTdSa4N z@iRIWlDXf|*tl{EErz36di>BQ2%yD!$#~l1yd21V)jUj7zcu@|?*vd5BoKyq+E+C) z`b7n^`_~)2X%(M;CR8mg{?9q@PZTU+3GA5YA->wzkx(gpOOtWgU!b|H6F;Dqy@mxj zI&zP#t))l`4M;wjL|7bQ>}<|^l8e$s+q5$)Yv~U^s_uNup~%55)_>Kh96u8wo)=YT zE8QhIIWsWlA^iD>@LRmRUWPsU(}-VzwJOw~?y;S13~mt4>wQx>K}eIdPD1)~N&80=C& zzs-47Os~jv#v>7R56Ef#AX-Sw5IX%UC|DO_j?Vx6fT&_79lxuLgupV1ox#Z>Jv-m@ zk9AS8Fk*9UM*ygID**6no(ObPr%~8%cmD0r_VINf$fGt2S7LlexN-gTcA2GsRJ0gxnGUOWkLg><6$Bp?IknQh>zHze9t#>ZofeSt{ zTtYRyODt^VhIT|_VHybu(4Jpc4WRDI(?CxgiZ#5_Rd0v4En7vl=_J}D!W`j`Ai)y4 zco1pJ9td=<;h3XNMn=!Hep9er2aD^pap!FM$L=>L4a_=wk8&3_IrzspdUL6zGL`uT zA^}DnQAtHRUUduik!>I7tco2&X@dUi#8Fkab(re8xsaQY2KKuRTB46gcE@iry_|e} zL-&QC2wux_UhvI8f+~~OhwsQ2cRL|XxarVx^S%Yepc~$$wFBbzT?2VD>>@GpX)~tr zWi%rZX=Z3-La_>YDkHjVp%D$_Bi}C;eRc*1{=ip*0{4<8pGL+TeBVFfF;{+!RH1LE zvnA|$CUAM^WJV&+t|^)Q9s*|W;sGwsdSR|EyxDL&EPuv=r-DsFlQk6*hLRQ`AOzmq z7B!8#pW$P_WA5R#aFPRpG8?q75K~d866u>W#mR5LK&r??&b)i?qh9WSbIt=CmKElb z+Qo7uS3q>h#H#izHOoSJ{UJC>YPDcEohzjMW}XUbe-_AiZ-zH3X+I!^@gw0RuAfpz z<3Bp$2>uAnwLW8^N2G-rjVs`edXRBasZ#6VAjj=V-E-F%*>EU_I83qtTgQmuHkkwA z4?2sJX|nlY3QWC2>SYgFB8VTJZ)0Tk+Izp`>^;lHpuWx~!>p4;72C#XLCnc=s@#Hb z@7p=`>_>4WHns|?Z6U4V_h9#-l*)#zGp(*op5Fb{@GehqDSE@fD(#C%VSg(`+z(yf z`duW+(a4}UY{a3_={>-Nsz{0M9~?E&47gB|_$P;Bhx^Xv^%lkh%K?CxuQkIQ}5^ zBn~1;w!ZP`VJ1rW-(iD+#npB?_s<>zCc^QL&aeAAuv}Eh;S3w<5CJMc$iJ8-_xS2h z%`W1b_^K7DsB^#z>A;i@!YXtnYRUG=Q3jplv@D^;V$6$#_-gVFMn(b0Lw`JIGjw(Q zOi4)IaV1vzH^G^a?Cqa{>-RC7$sa9Nk{fSM+)U{OKPGrj}0~D2@CXI+SIq zt+;N^CI~aCWX(=djr>8md27aj;t8;6^!~Gd9#tO?i^=MRBTjO97c-?4cWbhG9av0D zY;L2E;#jw?Ei|&UoqK?w@g!gGG1F03GXfwJUWz7{bATM+Sfa1es#a&%bQb zKVucLoIONjdvopUzdX<0z12{vRq=FktaPGOPL3G5sHfpd1=JMN(Z zc=rI#7ZHichx0YsqRA=!5=domG1ZkG+amsQRX+6kM}{To%WxgE)8-#QG2SeBt5#Pm zags~XOvMnu?YM?-F{a~ce!d0xD?z1giJ0suNk6N7Rv*j7oF$56E)YMVO=7s@_=gIME`D?0j zi_#wN{kFf4V_E2yx^R5j-^nY*c{x*3=63fhGj;OwbYe|Q1i)-D_DCc-*5izBqD;ce zOdr0mDBJZQxpd3vpQS%H?b=?tk)#oFBH`7HZ00QTcGc3bK-u;Yqh0hQ^snn7JcKnq zh)Hr28`}h`AbV1@=eN4~XmV1+rGidyTFXFO35nxCHnP3je46$1ved{DA6y_GK-!M{U;o__f?1P6LN*vS zJEJI16Gi{4Smd}8sId`}L2#R^@j`5OxXAR2#`6B4Z^l$6Z5W*vo{at zjYI#yr@^yGIAaVql*^lrDur`u_HL@h(HNq?%Oq@ke$JH0kbH;DDN|P%`SaqdxG52g zNd~Blw%xcOHiB6$|Jke;S4c9k*bQU5!S4#sFrkG~KawFP@i!EJYMvVp;p~2(9101Z z6_>N-B^?R<>^zM8%N`#o@f|CF*Bf(!_Jlp6uwknofB5tZMLr)&QsW9H4S_9|ic1My zZXr@A2}HXB;dT9S&+LZ#4F+*anSYizeTo>0*fV=d83}>J;F52R)P0Rx!wTOD8Yjpe zkRHQ3m>u2MYOs@oeGy%0pp#!qx4#w;=j@<%a`9WVoW>$=(C)oRStsx8%af4k0z!brcDx_C!`C5=drWz3Wn`ZL?p}kD>;G zfgl7&!g%)SJ_Bx@49jDEGD4+bOs*$1?ygKb5s{f}E+cljrYcO?+zQBL;1!%$D?TgD zhVxb{ZMAnDa>#p*7iL!3{q#m zwQ~iDGp4&6Db{^76wGM$;Y@@2Vu=OI;U<(kC-$T~BiQLYW1_7*OkLv40@bh?)UUr{Zw}{T$&QRh*j{e$~`u(M_H7OapJ$dt->^4l^1=&%#1@GP>8Sv3vI}*db z42W4Sd3$&Io{>R*%!-{Y@6uhPpN_P%vKx;-)5uTJo6J#B|Q>GtrVi!_RvIzoE^JvYK0WHf22c0ZUS>y z@%onF$pg+8W&`Z(vVCU==;YToF7j~N0{oJHuNCW$<3W`J9zIJ=T#DxscQ0o+HHI)S z-xUO@r^zJYj^^E&8vCQm7l=~z5i4l~XtVwhiHanuX3nV=)jN1Y+PlRNQA#6ErzEqe zf7+!Tl#KOeFXG=yYA>_i*ahQ=DnpOXu~xzKxl%d15^Z}{&* z%%YB&NfL5#tQe$~mbgU}Kn&v=tGqsKToU)k!g_QiJYrmOls%FeD@nyF=`eac55=F#;gwn+`h&>8spAHK&Hzf*`cv^AFQBpfd zox;bvDsIyrG@ZybtoJR&R6I95p&BW&J!%s~B%J^$KqOaPdugJxEtcTDoy3}_j@|_-sIv%{xhY+lk z;ZYA=ny>F%TP*FT*mj#|)KH&E*>yK)%PI#_?Xl7P;y>Ruw=)frTsdq`) z16jo~>D7d7a1`)fln~yEU4uRGqj>0+RxD&rFTnbDwql^7BZ0D}M0rX!MsFuF zC_9LjYRbT+bp$Y4yKw@AxE(ZeZ+GGkuT{r&pt~MNQWT8;L|*nLe2?4=daSI|#>J!} z1U8y6X@$m{{%4s7j@%)C*cnf|u#AHSO*%*$CE)B)dulTfT{2S|hc{I8o63Oh{5ni8 zW6MS-U>whs7i&@HVk(vzPdwaGB~&wATDgE{kOH@#P@{OEP}}Ux{$@W}##(W(fk!h9CbVx$H}-;QjeziTx!F*%RtbU6j3F9kWF%R@amI&Yx+z=RX1dOaW7{sHcS zy*a7~%&eb;3D6(Oq`}V#4P$zL5ux-0{<|Ourn@NDaTh2x_nJf=ub*$MFh9&_hbWUB zCFjyxl3MHC)V2xj9TU9g>h$+HLA}Dyt-g_B5N-}r3O>!b`M!ZXS0^bDnsd_J!Fr!hP{=lJhv5qB4~2iiXQ>-^7O&^0?)l44ES$O`>bwE~~w6Q*1zW?h2lWDo%dDn_CL2 zdyMV$01^**BgE&7`K#Vi7R&xv9$X^_*cUvF;APT@#{U_&7;h*+2~+CEK0F+Gsu6`x zu1Ka^U$w0}wywB@M$+{9R5`xLE&&qQg#)WSd#3zq+kp31Os)JB!O~z>Y{=J9(O!6> zWlv~z-@e`lSqudCwuh9*l(z)?Ku5ahbwgy_s&&)Rr7*M+;{1p8Je;tyX_;ak=K^nT zVuP(Xh&SP&K#vFV-=8O4;M;U{aa}L}dqKAu&-wXn-OBvMrD`&c7;1n|10kKH)TGa` z>_B-&A(QX4m9}i>L#>VKQc%luYNdeiyPds;K#D8L_R|8%DcKs-gb$~Km7>U-Rmj12 z3jX1uE2&7p=F2U;Ky+jrq9Cs*|2*-ZHjKb0`Sw9kW0*<@D{E1n_0iTB>>|H}vtb_+ zG@2JyEw8Row)JXA#lb&ieSRCg1EwkhzH70%2dm*7$&yKWU~Ah15iY%EJv}>5^WsQ82y}VyWDMzc= z&-w2siwW2&1h5mwLs9fJn}Y^d`t^#OxxylkC@HVeF~|?KbKPbI*UmN`OXm_F+03r@ z^avF=lEP63S%?eI-n|!dfg3-2h5qZ^s{o#GiTnctS--EXDwS1 zb2~GM(tY+8v{IO6dd^-bCB3_c=95fa`n-o7h3W){N-=+j&Om{uh2IJ`!X?FV8Nij- z%ll{ZiRAVp2hpU}b!CA%J6(A=D8dv^XX?>9WT}pPqZ0ehCDd7jIf|>^<*)fGgJ6HZ zXsy=^MAp`sXb_+CHoB$*1X{npzE)|0?=ZyKsBWo-OD)5ggQ>ZsGo}x!=w7C3*hu&( z)Hd!YLd#{Thf={Z?m*BWS6WBCk5Z~3VIX14h$8Plwb6mn0Xxbs?kwk_)tR10(Y-v+ z@WemXMY&$qXsAym5^a|$@iTpngatIO@=5C%CiDM#45wYcBsFcEZ{{!lW@6kt=ABLR z&H9{rZ}8(Y%8o#%7w|e{xNw~}j^D`{{KBF=fb5ZE`){+>C3xM=>{q&+@%C_;apf*W znLhnP_2S9}a$y|E0Q>1v!2!9Z7tS+K7HP8_oV63ImzEUh_cv|_po7kDwQIg)Df2FR zz$Vh8!D~wTT%y_e`!5WJWU11<)(3h>9G{Vqi<;NTzj^RGWXFBYe|t-QV3suelxQ!= zyh?cZXS2E3eq)t)_5rHK9L4^J!z9!$5{sz*C%ebhALf!?0v5A*T2ZS9*KO|l>=F!F z>XCoxp@zC&xNgwij!2N>QhV-5d5#HvQkV`e(6X}hJwg7#(?%%kGH6n|9-k#8=_Ja$ z&-Ai8s(dY}+E6{86LW>q!}b4%6VsyAYRbY&iZ|k`N!MbWvTQFn>D4V_=HGEQL=cep z%CpM`@mB(PpBpUwi=x>0=O6so@c#Dv86Rf*R^>rjO&C|qV@B`>t&{FbNXme!wS;(- z;}$LkkJY6JxaDnJv!rK%Dk%@#Z!Fi-?@(GAzOEFub1{U)8= z+G$aN?x6Ex_zttT=Yg~>>U9g>u($fWwEItuEN*AC%&@FH)Oj3-8)4Cy)%L}uvPt4IQ$Df_zmmTR@Y0pr_=rnK7vsNU==QV*E zDSw%F#FpcJGVkK0BY4c{EK6)rSptL9Rlgi{ohZZR%)+P_-%ULMnD za?_M{PdmR@;JNq_ue%?JtGzzbQ)4aZ*gi@oi^(Wt zhBiwn+(qK9T|+QYX#0F^k36^yu;6NQ`1-bFWXZ;QrMz68mD07#I7>qA)i3NL^U+yL z#sXW3`cIy^+$cEBi>Bt`XQGgOnP$(*sz=uZMqRFgFe2BVB~#z%G-zPgP~o*s*uo`29k2BYB+R+Z_)B0lB>@ldvy?aaxSc zor&b5x0f2qPCl;l?`&R<+wafQyFUxIK0E(!g1FVgE0td6Wl8KC=8v9MOLT_OL+Vli z|E@mc*`VKsR%(096n$3Qw_c$3Hej*&_+q<*w{9AY@m4SJIe!4Sy@Wji^YpVUJ33Q|E zv8L&p>df{MhXo#`1ih@e!^;wTg(C>R+RXFLNIA$rJq_=hq-A(vqUKiS+us|ihg zQSSe-^pycob>G)RcX!v2QW6qM=g={fw8BG4gET{@(kU%NH_|N~3P?(~ba%g(-~au< z2m0P~_Sv!4+WUOUzA+N}flonUb(3v}Ko1>1Yj3bek2G#+C~{}zt!P!Z7hzpP8hUMG z)bZS^TP*5se-bh*Dnz;Bl>S_urf}RvzNlj7jd~citgx$cehD9JL{egnuh6 zJ*WoA(FER1_QUiWz8a1kefE;*>6caX;B_FGdD?^6>CEf|Nq?HVX}P+aN!jQ>yV&TU zS;l)?+M>Npr7ut_X((@{JLYWlRbg1|xZ^MXm8P@*YFD;ob5RT=6&bE&3IHCFeOo_z zKSWQNpA&9dpdAULA{VxEGX5MH8zoFf`(#cOgQu8~qeMgTZ!fo1ZIeAQ_tPRg+GKfUz6;$4<(AQ^vc0S*6)}U4unT{-_BUVqm0@<@tcc7&XgZrlY1pZsNcx6sV zf0!z}TLffK03M~|_mEcg00a$+`(#5S1356$FV;A)WS0Aupy}0p<)zvI4R;o`k^Xpd z75$}tedw&wm%_r}nicH^Xb(;u^noI7x2?ltG&2(Nu1RF+lY z*KFF6)9JQLvi_nyG+9_7N2007C8KP68YF?^KejuHE)1p}6JLK-U1;NEl`tTrO`6n; z%Pqw-swnN7DH>n=_WsitFNTJP-^MmiAJD0)$uX*N!|^8ByYx5k5NQJ3rszn-I1!Z! zC2yG(Jn6-}E+$A+=0ggUUpW~=Y&MCN_`ctf6B5q7k^Wt^alvo=g1Q)CzLN9dasiVk zf}4QQ{Hw$M1Dj1aBp_fVU38dn;GZ~6sfi~QXneQq8nlmvG;70fBloFq_=J2>H^q%Q zyk7;WRM(K=V=;>vt}%@$BE9xqhv|J-t?{?PGAq(`02kmcIAG*pyeJW)h<8TBSQy)! zwLDvQCr$c|Rm@sKGwsSW6iuYO{p&}-|gytmuF?T8rs7nWEj0^>pTX+5_&M1f6P7mu(LyR;V)<-JP>YhO!&ck)Q;nTp(k&m6$wzhM94_FecBa0~GQQe7mNkc_3X z8-K`w+siO9;Ay6tcql*gs_swN`?B|eKS25NfuVVvH8?T0s?o6~# z_g)-EzhRBGHj=NetXuEk3XJiY3zAqRyZ(*{oB7*wVAOxyh`_(Szp%5 zg(G0089@Pzv5(}-Z|i__Oj_Iij!|OnZ&+fb(Z2ya*uc-8p%(W)zh6+GyE$cEC%f0Y zoBs)qnGlMInWRNc!ckT!ah{Bab#wVB68@=lgpcL7w2UD?5Xuq@&fki)^p55i1*!7x zP7Xb*qh)lh(-4@6PH#81do}WSqsGd=w)!tGt!WlG;b%jk1cnA<-OTd4A zj=t4CNz`$l7ats*V&%u(?Ftloo%%tU11ve&Eqm$r=J?YW;?ZBS@6Rr2>W`x!S<(}7 z6~Xjy9(mu7QH2n!E19I0ORBnKy&4z(-}aZ#myzWo2Z&Sr zh3&A#_$NVEXdZWjE6L--1<_*3ucx8aUyN~wB{@B9^ z=8QeYCOe*4&hlLr)9FmR}Pjv*W_a_caAJvK)AWP%sx9OB90_*LOni zgNp`1IYdc`q*Q!x8-oKwr}3Fox3dzDk7C$81Dc!J7H%IZ^c3tRmB1O6{a#cn_eGq^t2 z9ZcWh{pbFcRm+$L;;$)%VcsXM-mMoY9lRvar%m?`$(pFQ^kpk=`X1Ol*D7>RC9q$f zc|jiyl>5v|REL+wJ=l?0*lzrd-aU-yp^d{(j@&tIlt_g`cUeN)pqVBed-Du3G(RHj z?7(=3mi6rC`3{%)r7nOR4&B{)O^X%!{pBTLe2mJrNlC#T8+#PGkg7Qnp<-2n9GQBMz zvIxJ2&MPWNAlz>&@Q7LZ!2a#ZksE770B~Q>4d_{!r~qbh(v4&4z}EhoObl!c3}8ge z00E=F^3Pg!-?v~B3%{iP?QSkEL5i{|@oVks;eEYT`>{fSv}zr&HgUP7H|`qP`d;fo z1;Oh?&2&RakZqQEh`-u06OqPW9}NS8-KQrQS2;Pw=;JT*{cGh8_4?4C7=D0V2dXf% z^bLj*rVn^+Z^W4yo#hwvg4)I~g5OO#W}}b7*Rg{kk1FE^USY@&y_K&C>T`fdLyNElq|!kTpl9Tkyux8D99_{l+wO^G@S=vdVYok@^PXCQB;l@- zp5-K+f2_l^@GvrEJuYktMvn0&Ir1I%&09+OkfcW5X*o7O78zp0;v?08A9trcD>YX= zUlYH5$v$NTrI@&rfC6B+OcG0CZzgi~8{TgF|Es=t_|d3%1msRHpBxL3rzDG)JMjKS zvO$fCj;2|OhH>CCQ?*z6ir#+=vX@YQ^QUnCHguZE(x|27$%K^Qxpz0xts{TedJOg1 zcl(fDVxP@55wq}&vDf^<;fZKBU}){(m_pNUMNQZExp$~XVz1RtlwJi>Wy@gTG+#_- z#lB^^CW&V4IdaD-6Fc?$Ac*n%FUXJ2Q zN*KJh{Wmc1$zzlD;X*MJRg5tBb7@@6DZHh7b8F*WW3j~MBnk)O51MG(56VK;-w(#+ zMbX~?=+Ln$M>Osdb@own)-p~}waS8?f2@5g#qN#~^-1{hpR$fg9N-ki&yH&D9~@6v2-<);*!xm%(L(`3sL1EA2pxUitpG8gqJ z>_{lv;f56LtKl>Zv^arr3QdnXR-KjC7x9Me(li_fADM`Mo#3*5${){ZMz3S}UdBbr^#fPd2t90Ox5~EhK63l>57=XEA>0P@!}$w`!FIBksA9xMMI#J=wC&wc>G|sfeHt! zUbGnfA9?fi_d#(Bkb&L@7^qM#@_rS{h0v_C)umizyAPqN(O={Ts)ng#60_yIaYMPq zMXoWITJT0wfro7QJZ_@)uRk0y?#n8Pr#@wCqX&)D7qJ>JH!XxT5`Jb#uCB z^Ed0RB_1p|?ge)5H0gPqa1WQ(wD0HR@R+zjCCUM9ZBh6LH*nOz9=c*ysn5$Lo(4R( z6f8q*3Ax(!k?60ko?*m)6ZBi410_LarwGa9A*SjwJ_z0xzbeI*Nq=^=2S^6V@ zj|9jt$w&A8Q5SDsY~M;L=|4_RoLS`Nrj|`zjQFyfmH&}BucO*Pdt^CcdotQBZbbqc zgN2mc+$WHAK~M@U8~pAQfr9SB3l5t0-G+^w9Vf(usg~(XyGbg-PIDd|pPm(0OLf`Q z+x|VqW{XcY>7F`hkm4PA59T&J-xkDbg&luKnD7BJ;4fC@-yc*n)bCt|!9VL(qd_y( z&yrxmq1~K}BtV0a#VN}y(XFcepSe0?14k|{$UaEv5TZqdU-^4g3vQv3uUoP#y4>O@ zZq1V67Bu*3`WfayFUSg6)13P0Rt5P=5mrunCuWA^Ne*!4jM7U!`#{=qNyPoRD#z(H zX!Q<*?EZU`lMbt%-`$?sW|7v{y?Nmh|A0Eo0x>DZ67x{k-ewrob=Ty!y{5|Fk$#sq zuhL8CsC7zNP7dtJSCfCW1WdjfrYZ_i`cLH1^>kt^TTR(VlcCc`%o{HP-tV^bdHZ|d zc2k$88;vJ!>pG2|uDIni-gK1L+W2l-7J8MEtfGDCow|D*GGw5%g(}+<33RegWVN0h zyDanQh17ehlO;}Yy+!wzp%NiL^l*O#Pn40_U|w=F@hx((r-+wHL1oIH_OfeJg%7M0 z#FIbZaA<2l;zre-fAp6@lw0SIoB)$Wm~@4pV~<~lte7wvcQD$a_*4=U5mP1wdkw?n z9z0^GEWn}>L^T{&YSZ&~1W7J$QjJ%yZwKwDu!)`Nq#3y0EX>;GwWR1n zpl+!%JOB(} zDsCnzQ}M&;gFD~CgX*I8{9wEFjIX?m;6B*9(!lG19u_?uEDte=zwT|`!)oKzqDMM@ zgx^28;$xKNGD>J0v%vXi4MH(w^*$C-&32q3{__~?%S;ayN8CWg`zW!4(ZzofzrrA@ ztD5aK>$}{ldz#HV+H!B_*LT^9AWZVMx4z9zJSQzen>vYEc+Fkl_7p-nuKZUt?Sa}| zJWKaIPr@GIb8q=gtZI_WONv9m&c=G-&> z`_)EG_byRIv#!dYCoH-13qSxOuXVnGOH}i*?f$7zLpg@F{kqz6?5*w=5s%dJP(^8U zLp)KF=91GIf=G&j<&w7;jkOQAs>;O}u9_lNcPKr?^0q5=axxZag$XCJTr}|+Z$q2q z{@%FU9mTpe3XPR4w~v1&1hZj(8>9)cqaf7E;q})d$0~s?Dfl0=Cn4 z%+7Aa8GGo6Q{44eg?=*MZGjJVNl+raWCDHfYXZhcP^YmdzC@|DsMq6u%Evafnbb`U zOb~$dHiJSwvg50ti7tP}&f*`#%$%K;^LruK=5p9J)&Ll)Xup$I@Tt=N`gFb9eSxOP zHc@#~=*HFb!uZ&G64UqOm&HNZN;KdCPJi+z{<$nPfYc^A^^ZfWt+aAnNV3y}`R^_5 z?k!tLC3W#SMeg42YKMP|D}}!lNB{z943hTy#An8I_I7cVtD$Av7`T>ju)4CGzC(Ar zK=08%g>rY)gR4wIi^RGWEiLNj7lhr0T_-FB&m*A%qJ(4peTHLd(@(pIB8q@hZAbRa zu?6&4>_iDlgj0tj1^E>*bHhlb><%jGA!ywG9tb8pu3DEf|H4>ng;ISGFxh(N5 zmlnM`nF#Ep@g|Z%TP|pu0rWx3;x6_?QS$CeajWfv#uwi_kRIu>ZuA<^HwI$*;H3{5 z19uI^T#(vCFy^EnQwQ%RJl?D{*Gq}@&>8>M{r4k>xb*`wAivsXlDbouwaJ88l&On) zY>_N)FERw7t0sJFN_pFRzacv=1uhDPYpMC!u}YnY6Cx*UTD_;X&eaJl)PBF-d%e@1 zSbzPe-pyV%M=6pA+xV;lnI01Iu=Q83^E&AOX}CAeSsV2(^LQot_nHpGO7)`8aIsJgx{X>`$Ly%>%;pn%Ocb>sR1Ck=~=}OSF>+pRslC3lRygU&ice z3a=yqN!ii_2Kl{|dfUu~Y7TN*>yDtnXv?Cb(rDs-YfuUVTB_gQe3VTL{ril7&(4aO{#lLpA^1SoGF83GO*Uk%?b2jmr zxC(K1LKSG48gNgU8Off{6Z_HQZin(y$8W>V*J9tAdRsT0_WzP^qLHJ=!Ha~ml9|OQ z1t_|WUNiETCAsuPylZPIky=b-OLUp&f%eC9Byc3h)Ax|oqBG;q{fV^%{N3q9rb>y< zvf~S8qAy0s$2WRnu-5@_0*Zzff)GnZE{OY({1jJ<5A!4nn8y^b zIx(Bl;gY;=+wT)OQn&|ji=v_x6`GJS- zzVa5nf&3u5^V@2MVfQ^AJM){ObxTXLTNxjZT<6KKznW&0Cywhs4xR`7-efo>k>D0ih*ukE6sSwks;=K^q8Fx+^_S!mz5=-UNKyIi>n|!18$Zr^OE)Z}{b^}$z5Q~h?>f9=@!b<> z39d>ox8-|l05lHNl|7RMcoHl!i|ekSfzs+C_agdiz-fjA4g%4FTw8$4jmK#zExHDN zWvueNk#oxbTdWON%cp-gR>j|Zm4c>pw(@J{5X1DDviL@PPSh_DI-en+l3L-WiKrB+ z!1oDYAr$aq0+OZ(xgCHT<}G)^-76)HpeH#KTuBN0>PX4(Pl*P!cu=%z7JrlZCva{t z;z6+;0%Sl63zej%^myXicK+~UegW2v+wyaSl8|EA%AXZiL9U3}?Gr0v{! zA}{0N6q+{<>NLj&nbPDq+-9cWyYu`RJQxEFzGa`FW97Ju=kzScbp4NXJ&K?W&zA3> z7F}FYL}Ub^`)6{BJ#;(ueKqH=cil?}gNQX=R{0T~Hb3w@t&eftM&Ds6&&TBb_(!WF z=6pxg$ICkHChu}fm(z~2!Y9|HC#m2|P4WClPm6qFrakdqpxo%_`)u_gp5xt@4{+E{dg-x?Ap zq31YpPEQDhM7ir=5o+bZp0EWYymob-E!3l<%W0*VZIeK)9+#<*2aitP-cKanznx5% zdwFlp1kc)qakQ50tR6pOj%dJ^L7Q|Z*-}8>8>h}N!Pr6e9uW#r7nn_uXX?djH?dR%Q-yWL-r%lbQfysCSBFnyDfR7vaL$<~ADx0BqY%d*h&N&a zN6-tIlla-)4k_kYuHAq~**^p@#kF6>*tkye1qsAJArMvbb#De7Z{+`(^r+PhPG1xg z_rRvMv=+8~^5P_mYv)-{piFNNkxN5g!POHw4BVx@f1^Xb_7BJB|21>lHYJYtQdUeV^Bj`Q)+ z0h2J0pxMno6I%~7NR-wT=PFrQv^Z${AE1dP?gn#q<{)Dro}gC(nUmQg#b?$228p&v z9n+TnLa&OkoV|A|L{VoF9Kxre@uo=!yDzK?;(WTG_IdpDZzidy)M+k?Z5gXiA6IG&b!h1&7ErWyXz2+Cfhd9z>FBFV zTbjP9m6evZYm&IhiYk~-c(nfEbPl-^cgtSmzRKY&;_i3wG1l~s9bG*pqWUZ?y=A)f zas!U~yQg<=J}vKR>x@?D7ch6e$d?~zjjPxDC|78uUxMk2GeB%c6!|ZSt9$XxAkEi3 zQ1}{vkw2IUnpekZwMlsa7gj~;1CnG^u!)(L{V-gnx5438-@4H@>{gGV`H$FsztIh$=3n7Fv(@CY>)+;7PO(MikFoDTjS71Cq^!dYr$Okrzj2f{nl80llrD$!(w)jX zt4d|DJ%4ieTDH6Tj8e+PuJGT-br*L`ZbpSUj+Dfly;ki~q?I|!qoUN40s*A}4w&+s zBBY*m@EY4ajQ`B5&#w-oQ8Jlx^Aiz}xb+^>a{Ls{q;*it1N1#B@I5di;yXS}CJ9FI zr5a4xpf)a=!4r8}8Kd#xEO5tTc+7{36AOLLT3cp2SzM`zaDU2@-!LjSod2*}Sn&O$ zvF$*}5ho9g?}3Yr>9gMp6u~Oh&(=yJ2j{Y6+#P`U?L56eg_uq(j8RGDT4QYmd?m2` zE%L21zGkTwQRwA>04b3c#Oh)rcIHDK^l5;uqOVb$GOABk5bTFAG#2@`is*D`_p2f$ zwXTb}3t4+ut;fpAw3mH1o|C^WcgHj)r~FL^PO5`-9!q%7elb+3W!y|$!4btxOPYMp zHa_Uh$P)~}D3ut&gh|IJ51X?-E;VyE`JZ__v*otCr0OIlaakEEyz-XbZ7@&L0-zH_ z^T@Jk`%*w60G%{H&;=U^E6JN^pvL8NPc`Fk5ITX9KuVts9pAR>IhQk6d15`XVlRQ^ zGv}9wrYP-{y9i_*RK5^4Fgp19wKlWF{C4Y8$}Pf15(&=?`AA}CI(;{pU7ama7gI-I zaKhH$piC(69pvmjb=~RPE3`=)@DD&%5!*(H+#}&iJ>M!*w#P`A^n+`>UNQsYY{Mr& z^PUK$HRqZA>GMpH@AhYe7yWhF8Byu=$2Tb;P+{j5#B37bK%CSbVH4WM$+DhY&)PO7 z>%v(Y)X8H<;nQ6caIkL@I>N1_>@{xE@?Tw3RGdaQ>1d5SvS$(6ZxXMprJ^@p`?kBvxPu&AhLzH?c*AD?8 zn+c)YapxYQu9zDOBr*@@8hYuc^dmvbsN5@I0$oR2bVdAH66+*iqYG-b6W+jIX_0Og zXZwlMD+<1bfFgoWEkv}0+g60;lu(iK0O;zuZ0eZ`WBHiChTL;~d$V2ao_pug= zN&V)RWxVl)x%D$^m&3PLQLPe{^d{FDcTgXX>fJK zTfA>zDM0rHNJxf~m>SPH4=je*2T+*Zc2k%>gq)4J7@J@A{sdsse&A!q#1S~37Ow@1 zEAIG>w`^j+s#m+ndvG5{-s?__atCmEn1tm?cpBdtmk#n2$W~~|XzU(oL;SVcYmsw< zK53SNC3dM-o;Qeu?3o1|7g+w0=Q9^U0olf^*M6P{4Aka4bA+R44YoW(iP1z9NFo9Y zE3IY7CVcE0`5S*zQNmXT7$mBdW&4{=O1-SI%4k1H6n~dV>}QN!pQy*jA0CPhJqiJv zd%OS(VM$&$D{f0ds$OPN+UI`#j>Z7EKaSNf@XXF!i+&Bjp|37&9QrsIFaTnn*mUaR z+u}17$+Bdx zU-H=$?D|I+buK#!FZBzg7zj~yW2tA*lXDr=n$CW_^sL&#{|2a&Cz^cK<(gMu>VSTt zSL8{gj#hG!YKCr7AA0{9pa7taZ<>HA6A`YnG>^|ASn%Eil~v@9bCh{-6cBzS@41d- zr5f0Yt``rZu{WP4(n#g z`pf!ia*}z4xf#D``#7pNoSjMDimbm+N=mwe{~9h+($K0OVndh^>u@>$ce{rIGSc~e z$PXKpI?#C1wbXC}aLtle82_K6n0R30;Z@==iMf2#o6tvCEhPm0Oi-hykrANNQ6zdi z?esmsio^0uU$BSZpBz6rN5;Zp7;#+AHvAY7b2|p+kdlIRT~EpnIoLUW*~Uq`%LQ^! zymGwn-}T6Cy7>?E^eC$}J&#Na`eiGVAx@MoC`d#62P)izhyP44X*Cxirx&XVTQ8Q3 z?1gU2L=_ga9Y5*R55e=xY!O03Xq$LY6$>avIG1M7`<-&=K{!gKZxF&Ix=tH9(J>^2 z@@N6e$$ahvz2h5~cKr>2dzjo(5i-8iZ?>S?^(2`3MP5_WU*}BhSug_O+VGZ& zeXB#OHn3bgp6-1k@{s8H(|D}=U-`&?Olkp!wlP)h3f5ULR4y5l$S~-r@<-rhS?>;o zDI7A7bF#xLzYY&8>EY8uU{r=}-LmAwgQ59rCZ5@R0$GZE(dce-xa8U6 zD#H3ivU~6(=`&i@5W(H+2!=L@EJLA347G5(eYi`D%H~vqimxm-Aloo^=;KrAXaNC+ z{ne5B3vN2i?xoX@IRt6l2P>Y-pnJm0+^H{yC z;lQjIt^gR(`zw3YE4f!zlccM$b2f%7(>{Q2YWDB$jmDQ^6n7v|;e;s5)=kW8RPWOT>Y9e}Mt{dSm z;Lv%BNO^zjz67s*Fw=L*2NyD6Kpw)(nc4J=95ttLD?}@Gmso3ECAuO6Ve;?|$ z#U+@>R50q6qDCa>9HF(Rqi9pqNQoVtW4gmALw zpDC1KAz9k4pu$PFO1v!w6Y}gAsBB9^+>j3mL`=NUVv72;vQH z(q5W%6N51zOqk3SpZ*&Xis48atngZRL&r{7Gqml3iWg%+V!KcTEQ_4|rP@d9x^HBr zwWT9?XBAZ;RxMJfW^TVW5AsgmuA|MG=@;!WO2VvWOn zP`Q=;Q&GNYu^126^teSfE~Ba*Y}xMh@u5lF(gyrOhf49Sl>fyXg)gK$U;%-|+P=Q1 zRGT0#b5z{H`#xDhfA_6Jxj!CA!_7)_v*pvh>;|R`6u2KxVy<0E+@#SZ{dFx?oC@13 znJrN%`|TKV8hR;4aaw0)8V-%&Uy?aGs~FBYKA*pTiXbVr7i)QXU@DdT!8e94Yb}Gl z+uae|^^a@$+|K@YQz ziq03ZM!1^Fle5Why;hxUc9)q`)s|YO0EznE;B!Hni^GEo#+ZOB6_Tlut$tfA;qa&) zlhTObD-A!Q(iZr=-O@GP@W4;;duOlaFxG+7W<<>ov#X%1r4})#-eopJ*KII632;sZ z=~hj3o=iR9m}9XsnY^EX=1{_g4r-yc$@(_awaA50;?6$%{!tyNC(8NgI`08iw}t~( z3X*=*&DgPvn#cgG;iz`WsqpeKoc<@2S<#yo6i|=$(n1*kpW4Rm=;iTa6=$vTk=^xw zvHQ2w{-|u|s^#Ew}aoeSdZ73Y3Rcq83#UQYqVE@d(*e*aqdA_l@<5 zBqA%)4~=bt#-v_ziC~mo^;k^5N=3eXO#uF?I;tqi(#>+xE~0%wa@*0bO4Tcp$fJ?u zZBcyp@pX1*#!%ScnpLMaLa@u7?QwpwT+guGgjxu&XTQ=7cDMl_=vR9;*+B;~yL@%o ztz$X*t6Lwy^UgqyH6m5Mq0nx+zugAH#G^kZ+sEAh{o*rrL|m*Ii^%#ajbHx(F(%(c zwN&Ch`^--;1`unm3AuxiZ!0e0qT6%I345dS=c_9FSU~?A%5XE#H8;Adyvn_B$fQKJ zY_)_a!;WzFE`SdMRr-Lfi&;3aSMQq-0VwzTsYl0ow{zAs*?-vid#O-) z{ErMR6E})Dn2=$u#B25Kw$VI( z=oV<{u4Kan%dP0u;Fw!cXLNV4&R@~ky z?&JcluzRw#qduaQc@iyZURD4=8(F|@cwQU7sIP(aqyRIq_KzE~!N}$|5={Oh$(Y@N zSJ#gN69`vSJz5gD7~BO&^T{FO{mn*l{-PhzaQ(*s*xV0Xj3no?R;rQyz!uEEs?Ng{ zj4gLHecab^m&4?EhOa5zJqMt! zE@$dRr!DJ(-rltqhhceMO|bCvqvl9>ahaRv_#hRn<&L}dz+7TGT-sBb)*p>GzV5F#|8tjdPZpj(L0z1a?EkT6 z2#wR06d7Y-#&T8{v4gSddn|8Nn!6dy6H=s0l}w6pXEzN)uDACtJ~4-|L$smu_$!Nis{L(z zO-y*ZI><(F4};$%{pKQPRq?u@4@FkWUmSde7XL=HRwP1bJCis#c%MDHX0{K6ygcI5iD9%v(Jv4Z)1{}fg{QpZ}XkgugWI4OWuo-W( z9&b`O=>y5Znt;T@^JuFvc`ZXrCveXf#~qcQZ-T3)U_Pgl^+o!Ud9(E(iJ2V(7DLq2 zCcJg-W)h+iCDS>>PCR>Q)+b<&t~g}z_o0R(;>Zw_u&JJH`#(=QfnJlHz^9N!6|ObX zc_F-`wDgzJ%I&*O$LRbffL01^M&*{1MGWiY9*WB4e2w4yGn)S$f?ts|2`c z(rh1w0D@EimEn_KI&cSCVlJn>Jpd^)%w-{XPD~Edl@rebh#cZsXE4PxY39_*?M;MY zfC|MThR@Y3+He9`-_0sM?Ph4sm^pb5EHUkmgr-OIS)`Rej9vDL+sXqsb0ZOCFcN=$ z4}|Ox;+HP6FcKE&U}nbBMB;&C0uD`i|27;FPhlpVDWpV90Tn(b!A~5D?sytuB@%Bo zM2z#^hlX!u|0v-ZMTQXKgNV&}qU1@;ws^Mh!5WNKx0yH?Ee@^x88>BvhqBe)5H7|eS+>Xn#XsLQaGWP zB8V5!&Q>%c5NX=rACOoH=&|dR1DoIx23^HI+GqV)Gvqx6ZMQhXjJ`s~;IN5Kq|vWS%9(EFy|ZL=$Op3z~bliD$w$nQ|N& zd5BalKlBero?DmQAjOzdthdY&ze>u8)t-uJ8MF6U@jx{k6J|qvTewN{kVn z7fGj0r*ysf~XpL0c${KSx7y= zuWOJEBM-#3D%$T1y8t7EHAD{MaRF#A?fl_S2yt0IQLMzVa+povg%4 zT6w^7q4&2&`$^HTvQ=S|0cNt& zWAR_HvOz|78yc2MYqxwQIlFJV*W$=9vN10R%brPeD3JBM6$G-3INV> zxNgl?@4ikROIAtkpI%Ik^obZyMrZU%hn3Q1ZCXjEp|Gj{R~F12SBuvkJRrDQ-@dSLxBNF&Mg7Q1PPc^ z#tl>oR7Y6Pbl(wi;!F{F9vTQ{edi3joEbNJue%-RzS|G}c0$Mj7b70J5@^N~E99Qb z2Gx#%15NXNEZs|fUkf{#sTU9{>ULhN03$l^??YJzCrS>sg=$o3>^b<-WW*frRhp3s z+a>AQ?f>{20x3CA)3Y(RWpVx9dEj}D%Hl$+7#b_&j9v!02Z$Z`X5ATiGbxS{Kd6?_s+h;*;;;R@V=w{vPmfrf z?m^YC-PYP#a@F@%ERh^Km#oJ~9%W{i*%)B1G;2J2;0W5+CGoz}h~T#YL37KGplrqpmCa$vdo zFJ~Xj=YEUZ616D0dt0cE#oTH7D<=r}jgHr)!*J!LVn$j@Lny{LRFC{Ad#cE&uYR@W zt<#YeZnPay&J)p9$7Xu#b;rc$lXNKkT4poAndk^PpgQDl9FS#sAvUr>Ep~ii$+I`v z$u^%PefNJ)S54h3o&&>1)?L&3*j6FYL^P; zhgaK)AENWgvamluXWh7op_MIyySzMxfm%5_2|2ipi+s~wW_NnM%4Yz{BP;p-m8e<} zpSk;3>vChx4qd)bJQ2ajhF&}!4Nx}OgC)HG0K;a&_Z`z?&wU14%cVZ~o{B`X65|p{ zz3_1h%F|_rh(Zn!IVI&;&nYJXqR5Q1j^XAUk%N&B?ZEl|)B5WindJi(($W}g=N-hB z7)%y5giX!RiKk!`3TVCoTkflqV}{;MSp>+8MG`UOE(hz}vLI=2)9&0i z==dT2x34?tXS5fMr4|&>$XYzi-3`N%Jj+V`8EjjIZ9AHz7k06pu#(fp%4QfCR>J03 z0Yl~=rXNf$Z)7OfM9@pAygzwE`+#wbeX9N;mz~7 zhXcUBUeSpv9ib`N#3?!fZ4lNA(~P5&Rs<_kE)Q*-&*e-Kr{7tx?nhx|B#(S!7+-$F z`If|-`A_6>j}O*{KPHSe)qnfc+>lqOL{T3)mGd$Upfs&oRK;)AJ^U-H4*u?t#b3=_ zx@Ox1kL-5YSMj~S{iVhd?i<1&sAqnfzn*Q@3s(Xv=;-4vI`enfK!|(4Dj5zfsn#$`9t zV}$Kmnf1=24j|+A!y@T8W@}Xr;cAOOcHc49rP2po^&8p}svKPJmP5vnSGAjq9o7?a zhu5`GvR(y8p$q?<@M8f?$0Y|Kvn`5SgO9N28GYJ0c6b_#YbnF2vSofp^St1}xcCgo ze%nZnRXCuV?G-`4Vk7jE(=i}LjYiETVpGnsM9e=v0QyaHSNC4M-p|fq8}Qk4t) z)BI+!(PnmHiE!_vr4uEP_TX)99RL`YACgwgS{DN}Jn!6f1*3<2WjzQlme+cu0E-W( zhEocVSXgEU4(XBIT;&6^V**Hc<_-N3mwn{m-OQ31zA0`iKx!kaLgVmReY3IZ6;sZu z2ic3C{QnWUk>aBCKcP{V<2w*_3^HH@r!4EK;o+Mfzbf+SWrg^U{zyeHIa}-;MIxm| zXVw(Qb7ka@&k^bv5+~f;LhymTs}yCONF0h?85oKsy`p=^Php&n$@j}jLq`aIu}mkP zZdJ^R1S70j^X3ZFEb0cR9H5QetQd$=uQX`fDzO8|l)j)ssm&rYjKY zi%#X50P*-}l3k?+H)^)$gV(3OZIeZ$C<#2Nkrvs$F3nVLo?cc`2^x@d1Hf1PS$K~s zvi*O)4ncFiPFtLh%9|#{&n}EY3Jt5)4sQy5`v1 ztzMmz^#_Jj-DY0cOAaMjo`}7ZRQE?F!8pr3bjbkll^YC=BHS$>yEFfcQ7!GQVW$_x z8Z=RqFmB}Amrv*%B}tCG8B^IDM!LdsyGV-k^*cbi#uj5$T;k|_`g?7IXGXR*9A>Hi ze_|gorqo7k;3(;5`>*M2h`p(FQfFt9rJ{)ZB7#3Oo+{WFE1lUCg0g(WP^-}GphTK=u1__wr-H~m%nVRdYy1~gTwd;W`&2lrAH;MZ8ekzx10noE zXv1;~YcV~;I<=#^G3N2~pOne&JOY|7PfbP`UepMCHBym^sABmqD~1oKebS&OyCYU2&}i`}IY7od#f6Y{ndbbkDEM zJy^pa95I_CNzn-q--X0uM|Retkga;SuTJ0vCW2BCbwUOf3=Djv@##vey_PfqQ^UtN z(mFsJ22x7VPyeTIit>|Yl+{X>C-1D@1b62@w)>}VvrRj4giy2(j*DdDk-Ia1)KP{a zAy3$zvfgcnX|Vw}HLB7J)uKRaOWtA6PEfaof;VL>P0;3c%b~bLHDI#gTS)x9&Y~~N zI(RpsiYjs)F%G8$)U`4eb{C+7~@?wS{pe7>M ze9ATsq3DCD`I{`kFza@ODY#jq1FO6~I<_n_B^ATLD?AbPdkn|0Nfi~!R618Yqb1sS zZjg}xss5w!y}!@(p+EvX7p?Wv>O<~2rVhP5W2Z$1Dk4xqVTzY)MItU^sUTZ0%1&>p z(-Y?U2%EcfZyXNFa~o|z5@n6fnD8+W1BQ9!QRZ2}(qIyUq|;{$ovi9jc*`eez@N*m zRA9Y+Q5_B}#N@daN?>aOp6OyoOcFo-p&4-MfQW%fk{3zdm|Vkf4@wS_-sioPV!qw& zPsH@TRFQus?;hkajx)kH0;rNt%O3%`FhAeJz1f*F@y?air;+(wK%Z}#U_-OXYt|z$ zQ&H=N4QAft9k=+!ECm`;7Ix&rU*RzlBuKdy`8E$BY;Az`hI6@@L1_{xWA~a37 zX(PLGva9%P@?{?#FO3;Wm0YStIHmX-5VRv+p-EsVZZ&NVkTJYRM1J6q@!C@CXMU$g zFU7(^zmsD24b-gEE9+_gs5r2PdJ-;MecK@FLlA=Z$rx0Kt+jup|Y(K2N?@{r-OS^H&(y5@u%s^REX^{bl2l- zxGLvjnoRz4)x+IT0CBsU4N8<0J9Tcs=iFMggDA1-;^*0t8*w3mQ#PJun z@+~M~MGf2cFvJ^A11(u8NjZdt5%FOHj}FBH|u19iW z^()h1fs}Mhf0azB7F}Rshze-~LZQc0NA#2Nz4MAMU&114AoRKgak1FHO&kRY&Ojt?8b(y7b{;+ALHD_53K^%YAFPT zKw;NG$aXHFP(-lb5cJ-IWAGa2!8uF3M<9>TSY~=SQZw7vj%OC9`Qn9(6LY$VB8@vN z=Ga~+-ndl4Y3&wm=R%ZDcaUB4`ymgpUejPa;{Va~mT^&i@Avo63?0%9LrW^%-941F zfPADu5TsMOK|s1oC8R-GDG3SbknZlhH{aj?ekSu$nX}K{`<#7UYrWTs%`BB2SPQsg zI!(wiR)VVR&=L}Seo7Cx03${_WJceK0 z{aoAM`7u^8htCqsjoq$s26fH+KBgtB5NNAsdSp&D^(N*5^Rm$VtKIh_Cl&d%2swEd zO}zU8E@>AK&==hnYnnC@o;jRW?*+sdT9qJ(zy|ukQW;*OgzU+Sa};j8Jg2y$yyS>D z^MTb8*XW$-_r#Pi7_e?UOU(IZI{9LXE*4_~ZM!90Hh{857G3f!UwM!+3VKIldjY-Z z;zd790>_YkFUGlyd-y64w!I+8`=cjS{Yh!H*MM(D{|fZdTyT>I`rO?zA9FYx>u7kd z*Cp=AA-NCV2J@JubQZEhSrTFfmf~P-ZiagZ7lpF>1F-+r)#LwT{t^R(lU1&q33 zm&aBQZB5|qff;*NvP}Z#y8j;G%sb?1La0$oEZwK~azl4$w?jVc4xOLaI3^;mmP#Th zomh@A^CM`NTvx~9t(Q`qAfuNuKaM9Hxh;pt-i8DygtMD|IbN_6@l*G7rJxGrer&E% z#ra7w_1!Dc>gVqH{-2{8f}E%*m0EW^gpY5M6-8CXJ&jX6`&}yR#Q!V`v~}D@l=eAY zb@)L7?!wG4<7w#%9se;&J^0N}#W7^9krZ+25<>wWl*xk4&ggM~=%F?A2Qx{|*ivI0 za=}KCH0@?TUE>p!{c zY}KV;2eA?rDpN5=3m6K9KU31u29r}Fw7{q+K=)|GX<+*ZCdlve=ZQyJ00sL`!Sp8~v)m0X2qYgjZP) z$0&2}aO@2h70<9g{S(oyWkbNo_=aZvwCvzkLY&g$5J5lU2bwX7^ZYH>tw+PdH+JI= zmoVJD!$tp@_LcyKg97i5;3vdbBmXI)mF%i!jq@#p!~44@PT5lPF8;2^fmMo-;j*ua z$7BA4+U3W(LqW1{w@MyU_k}H!Kd5+^9#RjybT@TAyl?gzr|F_cJ_+6}Mf)K98dR(7 zofcz&74WP0BOx=cXl*(c=d~8r)IX%#P8Z&gGc?a*6Yx#Kz%3jnN8S_p&yk%?ctwEl zf`U(t`%&M2ZX2S3Dpvg8=Zls}u}An$G%)k_rHZ_Eo88eZQYkp)KlTM~;U`*}wLg4Q zhc_q!13Y!tx0pl|#UZWDN{4&5mss?*KzsZu^M&uj`>yuG96_PwyrC-_2m*)@yGeg8 z3vG4u%ftXxG>)Mk=tME?DuzTqnNzDWVCERvo@=43 zmx!>FRWhvib-pY?!i4zReZ}J`$g4X)0G{k;ww}o8G3Xg?H#eMIBC0F$3iX4Ob6?48 za;kB6orSXe^Jy~#i2j;cl>V-M(OC;H#zwgxg-4!<>^uxsaU_jPOkMfyGBw2dRf4U@ z5G;L_zccmwGkZcmzZ#)Uo{ErRVj7+#C6JmaALhQL1SZu4%j(gw$v>^%dE!&g3QHx0 zuAi(4pox)knFSmN!-s!R0P}JeZ&JM+002A;|G|Slk$ayx5dGVo5q zNQ#a))IWLyQ)c`lI0QQb2LO0+f+JgdDcH12D0(jxI}(YOaiS+C!V}kkG`qH3 zLMN+!nSk8GuE48F!*u>oS>!*7V=7jb$;)c{(eEw#w zok-^W5$uc83>_FKV&PQRct(gpF|~Q;b9Ok(#rQU!X}apM?9;zoxs&-w-NyE_S1#Eb zVcHclb*8e6U<-rZPRZab(KO#J>wmXpI^T|8o~QVs^dRo!R!xpz z?JxoqY0GKJTy9=loj0v8 zDh~p@ zkV>~pxGj(!p@eIF>QnXogZ~@YyjMQk#_j2c-G}sHo2t6cO8cQQVM88=SCxZgHD&!o z$>H$-Nk>PuP=0M`A|@BL1Cv3@<@ul}8YnnvDF>E#(Qm>SWEA*oCYSNeHQ3asN!KSgf$+Ya5*-h@U^^I4?ad{73=`K2Lf+Xx9koE#6O}uUY`B{ zzxV9v$O+mp?-3wRS1-O&a0))@+4^T{Q1z$#HmU|p{-{E6&^c|muQaK<92}d{Z{A$N z%rbqkXlW!6rfS>VtZS=ga@#Dd7S49vA8tvd{F#Qny-^7f;-sYr>)YMvgQ$Olg2oV| zXNuYTM09KE=t#F{C8qS7%Otwkn&F#g5WX3#fo=9L!rPD8dR)%?Ko|nssk&BOZ^Gbn zY=4ND=}S4D5~+{R$cj-*)=J7 z4hu0E{Neq6|27-YYQ^jQoZYy}EOp%ncHU056eityF8gU9I$&j{N_o4Se7J5|4#{A< zR&uzVeR2gOr(f=mR$%ds@g2JoAk#kJ0?TosR2N^W)xXe&SL0)jY?iM7hpr=mJdymS z?T`{THo@Ux#Z)H)+?IR|J^wSIB?eQWpM>}{Cd^%`Htp(+s)WH9yIoF7?BQ#zxqlxz z+A_Dmalc53Rw+JpX1;dNz=?9yO3tux9Gc}4w$mEB23{}$*Lcu|r*BEhgyI&L>L;K^ zfnA30HBEe^YS(q&Jz!)FFXWJZ zCV+NrYLZ1M>*-cmjzi(j5|gmOgJ^BPyq|WHjq`LgE}y6MLGH_{h6cMHD3%=q!8t|^ z13}?P05ifEH64DQYIqqfmE~uxdUO)<=k04WbtQ=BO9~;x#pA`hCj*9Zl(CTEMb#EVWA;9=jmU09Kbu)0ixnLdxHdJXm`6bxA=5SvIo^U9Cqu|WFphDUs zcAIC@`DS!(0-74jFJ3=A`bL~(tbek|v?=J8;MBuNNWg@qnA1!UO-fy+5?ku_4m#?L z2pMhK=kD%1}*4_V!R(%kxlQQ*iaWYbS??#gu`SWsE8bF`*9EHHt zmIW?09{?pdE1{QHcVr_fjl6@GYi6Hp16D=w1EEsMj#V}{DI#RlpK6S(j?p$tn6JY2 zPy@AHoXWv!3=K=DBMXr4D5?9;`6G$8Z3H+GBcl~+^&w=#ozkDw7tr%yjfVesN#{% z3!x%nRFKToxlH}jk+zz?%t)Ts{;Qmjji%qvyTJ85DN~d}sueZ)j#D;FLn6IXyM3K) zt+q#eo!Qt9Ok&68qon5$@VG-(FCdi0J33TI=!*XQW4XM#K$TZaPgK;M%9kQMwyna> z^=kb`Th%WA@)$cliGX>YN0=WH+gFsIh$c_o<$#m6zISnPknR`Z*?d!Atoj9>Z z)G&lQmlh!-Vf>uuojndBwyJ8nzHDzJ(Lb6M-0A`*evu}M9N zLVsximDkZcaYxeH9-FNga>>d%U?Fr4kC{7D6f<%u&~|a*?jWp<8{0NJLm1S zs;^4)pK`O}YB!kG+gL(s$X<3M*@r`8;w#n50rxDnv?2jzn+YDF`!$b9|I4TM3R{;~ zXLwR$w=~w(z`Ro+2A+^&4C^Nm95{rc@1_U|VCq1A7~Ox+J?%vKdt{74OuUHaprEj_7R zBx83#VoYS@ucbWTIL%z03SYMWwmqBYJ61qL)%zf$@G~d&3wW6i2Uv=yP7t{K4)8X} z+NAT;UIh==kPM`()mwmqDkDjHxxlPKE}WLFMyefiNcNY1>9#=PprThw{QaG2idim{ z-w|&_G;3bn3-HqdEy-MI*4of6Ai8aDk>}vzyr}DE*ou~|R0kBjgLrF13d!~B^=t2e znvLYVf2VRmXSHx>E^g<@@zl_7&5Kf|0*ONFt#6-B9(Yd*5!Kzf zFPeG{_*ZU1MpWT6=*7=@$$XvM~em40{v}-mNX|{XSn_iZsIMt*sEWZm>-3A&1Ge_Oler4?zob9?f7jE|a z^|)|`^iFRsiS^0SX+-wOkwW{0)F<&ZUS2wCKr3v{TriXk*2;TmMd*{LlDXTQuKG|yt3|Yy zEC;xk0mcmIz=AEgT8!Oha|qB7;91Z{=_^ZKi!1M*K1LVX#8S$AvS%jWETL>*A^3#xFTRy`#geKP`Ve+G8j}04at^ z(QlC{{5xCjsgs!z2iyY)WZCBOPu+5!4`B~(vzv0y)jRyMLQ0Y=+93}O%$M*3`N=h1 zN(Op@P+&jd25CxQT`^{@6Bho`?Pdy2E%g7(Ky2eswMvs873Y4|_<95f+3{=nCP z#WGZ{e!Tyx!CnLS2RS_gK!VQ{Ge{zA5D_);F7stU&(BtHFalNlk^Yf?Q#!g_ zyWwM?7sGjvAZZfh?1uacR7m542PXLr|0;KhS|>#GTn7dJqOPyB$-sFF-ro(buJ`5p zmE4Ei+SRg{rsHV>6}cUaYK|#$(85)pPW^6Dd4dwnxp+e&6iB!67R0%dve0-vG4SKh z5c`|o39#BiCZ%kGeD)yQW|J4kfb$^$*6~ zFB(t+n3ATWLMY39q#a%|TO;{|o&(wWLo6!jx2!495=65@2jscVj7Xo5ugd`Sz|E3} zZ+NdP=65?_E1In-a$Hy|sV$};YX}C%-AvJzPALXGkjY1PhlZAq-LgERM23DeJ7<8+ z4G1FF1a6rd?vO;dpO;k9swbWGO5LX-NhLi)_H5_jL>cq=mBW{csG_Va)=S z-}}rk)L+lA;#YN;=JkF5yK)jtBFF=kW#k!(lk~-VSmULL+1nNFqaTy`K{?0kBh|2_PV9JZLYZ>Mv-DzX(uWyHIWaFi4 zd`dufPfT3(B%^kFIz{i<-r_yg1@S4CmD~*%hNX5B3aeH08s7DY0U_zimO`)ARO?*H zugUXn*_Hl7%LLDCS9rFdy8<@iAEDFd=Ke?T%FhYb{^Knd^CPmFVl-8FwpAl_ghG8^ za&5xo4aNdRD!^wcieZ7!#@JtQ7Aan7G{h~26*ztWc6|Is2xObuH&*!9_-j}=Ry@5* znw(tzomw~6QL)3+)j+oQULv3uV-LLtN>WTOF@WAFh00SFPb<_sn8bE@p8?3etrVaC zE(MP~}yg7Ghd@(xvbMG^6m5z8DOaDH9?=x@i@p|vH1k97Ubl41<} zjAzXipOh2Xx+bP-lG8*H;;6z10#$LAeR!qVqDx_i&-uk*U>Bp(>mnpv<%wydvXVd48n3(<}gA5@wYKJK8z!Bt0jp(3z^BzgsS-d!@z<~v$|fc@sBd31~h4HzLFzn{OaWLKTmhi@JwpCM z9-^C&MK0jb0WmK9k}93&0^Yf1kWV-ET?r@yFwgTw;s08;MB`t6TYl5`EHo>ap407F zUtC!DsBDmhcBUm}nhbP< zPvqCtJ{+#xdsU5I#gg?dVA)fE9pEO@py}nb*3PKlM+wpADfatsgV?N|0l{j=ZD7%k zqCc;B!LNA$v+^}+eKb4Z!BM^Cr`eE9pl@7!54BVLyu0%dYkhLj&caHMG6j5=KbB zG>94XT3cItXO4NTTw91Cgq4Z_S8_O~g7W&Kq-Db7aI0gI?$)$I<+B{z&Rex3a{@_T z{<6K(Pp!Qg&gH_^vOJ$6*b#mOmg5*9)+^Bv8KMlFIw1hd=Qi>WQ6>W9J=d-D;oiVu zH7V=;ehZn%5I`=X?{t9ooTEisN`hLizN|5NchIlzRmI~uqYXtA!jE!JjvT?akFtSO zADBR}8hI<8)ybg$v<{bNzhf}051$D-K=}3f@i7ZU4U9!4yxg~qg^cyTv4lqjsbt~4 zm9vPGLksY>_GBC&t8(rikq<&?6%%7)I3yhVKu>2P43pL_+BUPwxFglw(Y*1w4~eR? zb{_$NO?06H$L8^9_cLnRFk9TwPXP|~%3pMINwCjAn+;-3#FEAEKSchXiCiae==sW8 z(@PbY8$7z6B5;W5L@cH0M8G(R!t-NlIlTs1kJzJI+b9{s>f9JqoFa%oG{3|^I3Yk zz1FdbM&n7Z$%K_R=BA3+oOP-3ahv@2m=PS2p94Z)A*qB2`_UW;u{L?Q*jPxw=CNXZ zDm&38D%^-Qi=Ef>jB3p2VJn&=WB!qBW%ijoQquwTQ?hYNc>3 zcowp$yrTF^DaMDvBy&0{lcT5YD7IOW6u|xsvLxAB5wR!*u&pp0 z*})Qev_u9fIE)A;&c*gbm*e(R*{n`hZv*c>+aq^FHJBtKeW-Qini_rdzOYcWkT{|) zhS1WES8JFY%R$%;s34HOM@tyw0F6m6O-N3))u&#~WqeZFHN<>IXqMs?s~C5PHo&Htl58Wb{y5)pI&mKL?I*UDyWKrQM>~Sx z1gY0=#tx%h8idhOF(zkB&5WAb$d>aZYJ?rS;V`OqTk~cRk^aNa-(9Ovo*IBZf4B|H z6JP~X`l4tm=>4(giCaCYL^_u;1sN_q10{sQYH_EaeJ?F6HHwDd!4sD{Uy@RNrx){v5&H>;E3S9hy-|%WMo*jvFA!V| zJ%G*z1Zfd&=zYOpYZS%miyO}=lLS2X=RjW zLt<=OB6LKhY;fYGI1xYs8h^a9v7ecQ_P)5&vn#G~`6~JDdBIH5TyW$a)5YFL(5~Tb z7bJ}I34kQt27#Bc1e!-GwYFwSvQAm~XS*v^;*FtWvWlcwjih;5c-CFvBF9CRys`7y z6HYtbha;_!O+RgHh~{~JdONFRcC)3Q`cxaP5Qk~TC(JlFF^5b0satIh#tJ7TSoqy{ z5QNhQbGBS)bQmkI(9AEbK)|zT`Ql7atos$mAb(&Pxu98NO8s@{frx;(3e8wQ+#?OH zcFAbW`bCM`gx1F6Lrxr)`Co*zwuAiu#?o*0y@r8I7QCJaiL42pqMGT*?jL!ysvbwR zatJ-?vC=-dfx`ZT0iihG!5h%Iv#v-O~&3ns-_Y(?n04NZ#piZ3R95V!{O&|dl>wJ!V)y?H1(q+xrq^Ej_j9!QDKTb+WTlNDW1-s#ysa^JJt z^1`3cz~9$W?}9ZDFk_N)fXYl%%GUpbK(1lA{);zQ^4c{}Wl>3@By9&04xaYYju#VR zG?<9GVkCa{u!V3;G-)fM(($>y)eV`~=gKfrVxCMh0VeO1oj=yE%Zohwl-pdhy_bWPG^@iT zG0T8VJCX5w1UJBxiX1gdE1j+W$$kxz3*YMIz@WcoDd4I{q|s{_W^Jf2ra}8VKWA<0 zt=~(?DQ?z!NcBDR=Cm6RhWSf78gmN{qnWoFSr zN`B}mo&+QF`iqk0fjq7uKAYRLnoZ)gciz!0&ddAqdV%sh?aZ#Z{o>EzWbNv|UhqBz zk722N{BK9Ym|gR;s@wW%hpb>K8XkhAZt8Sh^s zi4M-LtYrMWes@frdEM`od7a^Wa6)`Y%cHfcs7c#pl^J{gB2F-tU@Gc-MrJ;9fK84~3NFc8qdpCu zCX5+C60p+GoXVV^HNRK(Z;j{yf3k z4D+|Vd0vi9*5#JpgPv%+r0!Mt%&YK8^VfIv-Ud1X*NiL3ietMV0IOCesi=GOm}yw( zRKNm^GblJJXX?Ge(4RzRq#nAI2ae|6^!9!tS*4w22fXvrf%=9=?4hqT%fN$Ejh@W# zN%-APabc~af#6YF|2`%nj3lHgw^P>hshvFVpyM+I7QxN1j)_kf4uebql4yV#m%nCa zi|x*jpm^Q;dMZLG98)SelmQbl5MsNo^KW2V2XI&R5^Ad75xktFLN#2lt3XYO(S)=0 z!{G^5C{JC~B7D{4htSS%Ip2^3Ihi@gVpmh|8Z~lbk%hul+1XRs7@VD#B*d$S7Cj}1 zV>6?Sa9hKH%H!>24WP$h5VQhMs{IA3?=N=b?+C$D`Vn`fk6L<1DJdHNJ{c9?3~w`8 z8lG=5NYFC!8GI4@QkJny{N}b0OXJ6N9<8L1jRoMsKhK$9E=6R_PncVuTHZ%!8Em

    B3hU_(szYBeosEit&zX`nBOM1zH4&SsPyY|i;A!djSMM{~BF~iIK z%0;1MVtikwT--nMbBO!fsX_rs^z5ioP}$AqOc(PEkBXkf{Q$Z>Xfp4g(x&2k;F^GY zJd<5O!(t#4rU^rjxLYBwn@*&OhpAA+&n8v~ASmsB*ze2rvgYQ#%!5G*JjDvtbpwt3 z5&I)zm}+Mz4$&Zum6s5R#<|-z0u8<^R8xJ0tpGUck0>l^WqHhx#4DJp(b+w#ZCIqT zqqWwRD3;O$Q6Wd;e7o@pE+609iyM@7`h?dUrqQCu0!qTa4cZp5QJyfcmeePirsP~- zlk`a4>lzf^JP##Y8mc%IKsli@&A!}MU_prULwcVg%6Odqk*h$A37p6&M4Vh_VA%R1;C>1CG{mg?7z--if%R7M>-L9n7%9k# zYm9wPlk(;%ZsTl_C8~%f+)31l(pE=KK7zi0kV5gc{H4hY3s>F41ey&iucY~)b839y zR4Rg~pO`g2ycg|+)&?m@p5n&52qL+!0dXD$;wZUKW`W{_m=pcv4ExBpZt!wRXOsU6 zYcFsojEWuJSW&Qo0kft*usHTo{l!(jDk-LWgpZz;3R<`g&-m4D%v!3r%8e*$-vwN8 zW&|e+pm9iF-4c!BDY}#Oa~)jvkzhri!PhXapwkLZgHk3)KSvN5nX9`0`J3GF2-2PH zsGwdho61z_*yn=>L8$-r_u3hxwSEB|#`G#-mS>;Y7`26GFYAIQPV%8An+w+NsO_<{Y}5yX zr$g-)I(`6KsaC5B=#U^yAxKti`>-&DvO zRgFDrZZk-*!-~h4cxR}n{;IHz^5Idu$igy9bW z=`L9}n3Akwr z!29Ukbad*=bL+dDHS>5N(hfR~dF1PfX3~5+1b?PgADTI$fq`SS<#O@kuQCcz0ceL8 zibgymE;!{h)SR%^ir*7T`9c1F1oH^khVvS)HrB*53sIBi#>+alrvIXcsJK0wSqCQH z*8tNn+t?G*ys@xiO5|CEBve?~n%c(^3WU!@Q$InwK2;OSp>5q8kcHI{yXpTdFgv&;xhJ5aBI-+<7CRBKE6 ze^^$sh}?0u#1(BQS?Ar2tTT2oyNdU#<_jGy7eqMhk;zwUDdzz=Ftyy6P{;F zunQp=D!&%4GXmzP(l0(3DLQSe6JLP=4+)a_q@sFQ}r8EJl7}$z{*gGF`tqc-9Bi<-CbP|ilAH| zM!f6>GNJ`%`+rHVq2!jFODA({PM`(!*>k(V5A`mo`mOe+L}}yxF&4g-&z4n~dwJZ0 z0N^E0UD=G2j$t<)0HJT){YuVWo0Vxyo1<;7vN;b0q!TR5&~r z*U0jU;-+8GtM%cE@nPT8`$CXd#41LrvCedOd~D}KdHUCB;$wl1lpXfl_*ud0gyvJA zU?9~yNH_;T8CwEm=Y#so-!S^;;&E3KImQ+58~+K_?t77`sS%F4HA!qq>x@gCU0+#K zI(p(Pd^Fu$dQirTrDZCeSmHqFkC|sfzw@35%wLB@^a(;~q;&1!0rUu6$cn*zQi#=Gj{XskL)K~Z!O;~xQlSR&voJG2(R0@LjMhQk>i~BYewev zZA{#J2xOY3(&riL`9!Bnoc#xChn83I02x%l*m=I$1Q-P$#o}$a0;3x4tgTrSVyC=r zLts$O#(PFM|D*p3zu}m5$R?taSv^Xet_1+=_*^c|Igcl=iJbl(Up!12{&OsYD~>~3 zcAUUG&o1vdiSj3)bhhl!sMfqk0rTR93}QF zlb`$eP}}|Yrw$N^dikd=9l~1j351&D$u(1TRJmN2va{oPzrULWYYYLg=oT1rVenkL z=6eZ<(l(l3nHuvo)NUFX5oS>26xj``GEJ%c?Wh6I-h6$XGUu@6{y(I90 zZ@-x>knqkN|69nSNErOOvq4b>4Rh61-pf*4^t&YUb2iDiw?*z_D^bXXRJDhEp+B~^3;tKrfHn6cr4LwVzDRy2n53O}ZVzvYe{hd){)7rp&xCis@n=`}HeMj-XToXn zub=r_5aNXtH;ft8E*IwX+9OQs@eyInpiD8{zNEX7*lvR5N$ej@t7JBR_VinVh#trW+? zpQC)HtZB%Uz>~QINkjQ^cyi7*-N%=6+PEqR^ zhxdk~iuCthDmLx)m;RiTfn$#j4$43x-7&$Jj)DhbGoC3b#aw@{3Z;n}*ZSI>TudV6 zR~b60`g!cRe%C6zk$HX+Le(JF7WT}#D|K!PKYYkn7!T|uss6>j11yTENxqrQ@V{wi zdvOg^I)12$7H6K<|1W$~Z{6LYH^mXuRqvNhy;evAzUk{1{8J#I{cgsO(|$=&`(v}r z@+raK$Zzk_+f>76qeChOBifj;aZTX~5)QxyNwBSV6;EP`KVPR*fng*SRe=%ur)du_ zxBuf44D}MchhQM#a-JW6kl#Njp?T#t4@MMXH&KmeV}lUS#A)kLoe-@-kQ@A&JSaX! zSJm4?xHQo-gPzVMsKV^N3RAMtG6Y0{S4emF#Yw`@B@OZiHA8h)M-yO^D%#(%MzB$7 z-7S(sep5EP28E}|F`I7&_gf^zi|tW6fWX@J^da%2A!@Sy%d*_T6p|7LM`XfDUrD*o zH6qgGTOd|p8fi602LZR9t?H2ym`i0xEuf&^H9FqzZ3sq9AM ziVb6XLHO0x{Ye@gZwA6GmhOduliIE5r8=C}{w++uri%QHo&)ls^5&X!+*l%<+bg-Z zGurK*BxBoS7zJ`)zaq1AgCM}0Q&if=4jemzLYL7($Iq0z<-}L7qZ3E+4qiPJw$!@I zr9hxghtpv||29cr0k_jB-vlOtjD;%Ff2CbtK%wV5;IQYMrOt3sfX%n(mUF3_L@Qst zzpt#ZQE)q|+_@V;RQfdGKlHw%2>+#;oVSvQs*_8qXicUG|0H=3I5~5O`qERCCGulg z%Y}J3J!xHNS%(U3=kbe8W0mKvqVts*l9d%jY3on|9OjB2b~_lwGER{>umAMK&u|$j z`cp#POWT7;U0CYOZv$WmUIbQAHU=&u-g*81MMXtr0s81t2nn}=7H#w$qyvUf?(<>W z=l+B3qlS){?eT7iL)v>79L@2luwJtrFZh; zD{zI6z>|^8nYfI$F78zc@R(cOjI2K<{2kYj*q;;CnDR@H?CFNl8U@9S^|BDoe!h^f z`0rbZW0S2u^ZZ+*QABaSNBB&R<-0fV?@7_Il^~jSkfC|CGJ>cyWLuv zA`=RL-ZUGZR3LKv(W9g9|88n!+I?#j-#eFAd*6R(z$SW)F}On9&eTV#RLKAOhtt*0 z+r^DXB6)Cuwg{i&@8B-9BR|k+UERz16PmS!h_jTn+QOLsrc~a)et2g5zck46qPzCZ#XQp2N43fET4^v-_`7PGyVTSQ%sGZ57!5XYB4=VsHbHfM3K zZ?R(8eoR%FeoX^5Vh(3h6nb%bi4Qp{btC{&82Q_zUPS3VMj37Zt%Qke0yx~YDoM@; z=ZR~|5>o4F%Dn_i=h%?}8M)O%7CPJIwwy2J-A^|d)2S}<(L!_IkP&?()zBB{#OB{m z`C}@Lyr~={wyeitVG(Yg&_V% zZ6w5K!Ig-KxhMcXUS5st6YMiX>yWjh%kj&lX=mkbRbAUTsn(<>SeDuR^zgrY|N|zcLU9IqVgl9hPEPU_B7uQ5nlPx!X z_pZ&2kvQ6mpj2#x3nf-KKq#k~0CSdLhpk){Ukj$XE(Gv@es@P%1Cj)HV18+TShsSQ zlmA7Q{}AAf){R}%2~Cq(FLd~xQ^J*G_{IK`A`r+T;8j)HlVsOggI2wL zu9FU2cl0IplDxoZaegX#OIk|(a96IP?EB!)1dU%(D74w3dHm)``mZS*&uZvTQIg{` z0$MRb+UwtIhxcPj0yhJvH=knDmc7l^{B-p=3BR$Ysw-ol$=XAlSp%>sT9@v({uB^8 z+@L`H9>?(YWj;ZuXqB`r6hk4a^qdIq*V3$z^|?gQPd7I^dh^iRG=X`7zU>s$}7 zwAyT|R@tA5^=p3p6?3_HC$M3~RN&&gB9b0Isc#|f@F;5=e(H$-aQ!1K;Zs-vuahnc zo;r&1VBSlkKzC&A?aie@($%hCV@I$v`q0Z{w1&SXyL}hkv(>7-R?jKweAq^$_4VgZ znr~MAvc~Ph#Zvw0O~UPw3+U@FxZcpO4%M6Y+?Ai0qr?~m&eL6NA_#_B2fnX!$d(WJ z2Ts`MFKpYjS#K{P;AzV`a9?%uSx5NSk_5$XNt%y<>r`8hbNx!8mS!<_Rh{MrrIz}Z z-E>jsP(JGm^I1QM!o@n3$G_DI1ju)%jF9yy;+1`>+bXL;5uWhpDGzA7h!8!qFDEal zAqF+;R7-pmU#??p(w=zUZKEz3~&&GjH0`#gzG+D+W-Sp7O0YT7)BNS?*p5 zyRgkhBZ05A9e0_O({MeWA~s_wXz1`B`9bR!K2>bX-K@0BOW!RLa|tc)p6;PdG2Upd zGWD&bksEWJxT&y-xy#uM@iWY{QDzzv+%4@%n*W}CLO8nA zi9b`R>?%9j9CuY=hUl9jKxS*)+8Cq~$(B{R6ZN1mD*o(t8UbNT${rMwwJuv@eQq#y zxeQxR!s0#cC-*0Jo`zpIY(wpJaljhk%^CxcDl@{QeZ^d9_GWP}LSb!DXlID8n-$Z- zM^J-@ovZJiOj8?xQRVZ}%kbv{Ql6In>)jfoHIBsVQRkAF2;CXy4&uYsU?@5W||qxePLf@~fcA-kN%bqo>!GB5#O zgDccrnO(|#tuSXm@Px(>8^R6rSoV&yM2*>^H2ewEUu=H}mkyoL&Ty7(Cnhyo%8By! zD;AiY`n9#g;4BEj^5;20ke++P~FG8ZjM*)&R4T0jY22KwV}ROe(K za*@~b*R9^hl`UAS6Kf|yC>kP_yg-ZTON#)HVMh4#im-=SmCBEctIs~kIekaME7l%A zA8+z#N*tX>EAfJ*#h)cxzO2n)6Y4LNQWSs!$%gk*5d+eP!7)aZVmnIUHPs=Y&0-!D zO-acb%Fb@}FJUkyI=l4RX)dcM=XTd6@&m6hkO1e_956%3w^cO!026vzJzt=XM((jM zF{vH52D$H0=bQ$exs9=+oIqjcgzf0QYppE@ZRDm7`Ke<9;UXXUiR5Krn@^SK$wfVi zsdG7raAd=)^lGF$BBw&#x)ugX7ITU%CAd(posqW1JZ3{uR3Nq4-t&91{uR#yLjV&yOpN}i}&2KRuXCgzz)1EWL zX~|tM%kY)UJX2ARbY7uL8x+BS7LNx_z+(O`xi?+?W~^ITA?Oo-=fVT-oz$0BF`}nC zNeEC{g!izmC4tprg%3B33&@H|T=$zvVrpv^W8)`wn8)wmA;r`3s3X^Fo(IkfoabCz zsrHnp%KW@>+=;?^@VPn%L+A60AIw!Gkqe8PQ7-e#QwcfE*hwyNMPK2qXqd#fOO#tB z$a&$7tp{sIaI#!OdI#hjc8wc)zqiULA#@FcMR5Mn*j!wP;Kd_ux7O^jA}0j1;g^7i z@e|S=K%P_^?{wr>R&M1^et4dW-01(bbeyb8B={lCes7XN&2Uo>hs;HSg zZM}l@+fc~OVj@38-w5nXeZNFxgP2a}PF4#mlO6=gKIh)xTuHCMEr(PjgeOfPc+vsF z?i6J^ucaEMY_wxu1r*Zi=4doWh%sCL^sHk88XpZ_x1>f^Og^*zvazL6e{GeEfkUeQ z;`-ue|G`SjRU8GVR+rgEN(~zVCoYaxYNzm*d%F9BV9fW(J53U*YH1gPJy_cxgS@KfI7A^Zvp+?qSURTC-SOl0l4m{DYm6@&xl<&qO>jdutl!+TFZayjDn| zlyLt-yL+R>B2*9}=TsKnayBG|?*IJDJ0*+z<~1Ni1^|~0pm%m{(kQ%|EnbDU(1F_1lF2n)?4rNO<*$SWQu z#B4^3zhtqzxqCNv9_t9~&8S!9lz(srzD)?@pp5v9 z$RLT81(B38%Y$kjU4?U^y*r%LTBoBZ6VRKasT#sR#tE=$D}m>?(i!kfPY zD+-HdfOVvu)m~;?yJ;0*-D9$}LmWmtc|2niGU6WInCvvJJacoDk{H;-LSi2@fl|fW z?AJ#?|3bt6$odGV0XYU)%#&X!z)9b@tPY`&ruB8G>ITVzuu$V`EpO)3dzun9ezQn1 z9c>x1uXu>^P&9z}1QJ zE)H{`h-2gV_5F*_+wa>@el^G(e<^G zM~Y=r(E?PS)Zl&>yy0tKF%_u(jJCn?b`rtKki{zA*XWl=DJ$@>1|4m5XH`m0le1@& zN>cxk)y~_?c375wU#BBJv$D@YIkn|Uu6K3lE7`t8V?G4Vw=zYWhF*kXqo?x&W#VD^ zb(q5T!6}AH@!Si<4>G zUEr;q-Q?*WwEBSWaJBr3<4qy^^uyPnI>YoxL#D{`J0+xRh)4;=aQFNSE_-Khwk%Vl zbYS_f%4^#`|MNBA8N#Jlbw{R+C;JiYuS|px1??e{sHo+JP7Y`@eM(9uIh0LJB|1Agun*VxaUE zw8-4rDq4qse!oV+7Xi50Z2ZphJaQcoVi_X>VJ^M05$}@?bToFE)hT}8m~ZP4BAS%_ zSpP;lc@H9GmB)Pil=hrK0mRJZ zC#nakzqP1QanYGNs;G6XPY3kobv14pTE7kaws;@SUe?Ux1h?9*%4(H@ecX0t* zL4Ge8Rf#T<9)`aq?y2>n-1fc5L5!Kt0B*c0|g--t9?+Wp5pMnYG3-%1;@-dTPe7*P1hhecC0d|eGS z9VU62*S8s;{+0RESB+=@XjFlv2qU73Ssf9i&n0Ad!fZ&CE1W%TtKog1%_eyqF@825 z`D*SLy*rxNCo03)jODsrQnyONB6J|K#{I)$2EWG#p^5QKzZkkR2k>aamCrY>NXrDn z7cq63L`8fWkLZexfoJafZ6{Q`D?6ht^_E&v1w)N$?!4vPr#{CB-fTTue%!FqYUhr%w(3gH2V53$;~PQ zjh%RweYllEZeqeumo&xI56kqTJz;4uUAR30(f}CU@8q}7iYJ|j#9enq?qNAgrTx_m z@*QqNtK8&S{7TL@p|_~rDA_#Y7H8~&n03(jk0E4jsDqMr$n!a)>LQ}=n%rxfRl>We zXO{{SFg?dCJ)?W~IY&XD6~nZPLx!%oUt`UsL;+bp8aD2iQ7skjH?#^W1O{#(I`pY|~E!l+w<9ojmpW zw_J}N&%IZ~I;V8Pl67jSd5B1vt5sA|_rv;MUC8alyU{#bomb~f!`IQ?byIny7U1J8@poZ2d`JL0rxSowuLtgZ{9g&p zvn0rll4m3DZ1M4zV9#072UKqsN5H@D#(^Kl1tLKPTPm@@ZG7w-LpBVa$C^ zU7P?VY`&fttz+;*5a~#Ri8MDO8q*Efb6~*UmKHOj$vwtM=F2nJ)O!T9c zbw(I1uQyB~5)H{$31{UcwgCJUU^rvOYGxHL0lnmdBJ%+m#d7D~fOcI>JjedO`?6-g z0Fh6RNE0+n?IS-e)&TLn`2Q64dN=Pb_7ys;`=o-N(2t&mq)m4 zj?)5O@hs?U@^AsbBQUJ&UEhCa@rNUWaDi_RXM=@I| zDyU~l+BF;dmgNF7t41n0QHqtv4rS5O-2U#(C0mIWUJfRm2=rJMar5eD2Ru2+6Xm7d zsaeD-LnPKb-~n@0l!mTdWT`p(#Y=MjBhX2LfPSv4KtD1#@-ge!028v?@PjI{5`f^a z;B8I-vX)$L7km$9@Rx6+1ue$_riU3&$8uzg{0S}h^TWZHBnGMxEKG#i4{JJSkA3n$VHP6~!DiRf#L|;;-mP}EKY8ar51@cL9rh0n z)M9Bf$)71uUkt)Gb)G7DRsNAQBEzykk(2$KhE+F(8JD)f#)Yq%uJP2fzp;48>FOcT_KNZFX^W$yFBJJ0Q-LSI{gDGACEzwba7!l#ZOpU~yT77pOk zzC+P?5M0x&(kBVRZ(WNsi7Z=yf`uXWNPD$dR^1T|qBZdDm#dMpoOYiJIO0-Yo%V|a zY;l4lu5>W z#w{bA0_q|B`0E$HnLHnR$1~ts`1p_fTWC%MUWQ?_SAM`bI`RPxITud zbdw%ly>eJ=h`msQfFuOaL+G+*<=>zC%9OWp;-Tl$z5AJ+7@{P**;64UMvd$Zq7cy}Yc}$*AL? zAoF%nwnu)g^q|+Pica9w1PzIGC*ZIxa6rVD*}@H^o4&<3gx9a8&twIioNq00W9M*l zA^CZT4>{CqIV|C-tnbxId7rKRdvMgKhBTLGsaoO059HCy2?WOhFd5tMt;W!_(yzXH z3m8%XFa=>Ad#ey&_1=xC2X_u=XK;F@OnE_gep3O=jGK%ZIT&}%!g3`zcCFsEW-SKP z$+VV`U2G)f$JuE+*C0Y8PGxNcR^1isW9Xlom;28(qjSOZW80gCdwFWBemt?%9BI=l zZwEF$>JsaHj$%M9*ZS@QFABz|ug$zaF#zg9fqb^(kURPP2lK`8qW;5_7{Ep^N^L^V zQkbJv)^lnh@sBq(0O4K(RvAzLa44fkoB?i3(VG)%nmedVAZ;x;wdi~+}@`s)<-H3nMe}z}f@p*rv6*0C1vPWu^F5)aj}ydTEhq2tkYPcL2I{FeyEYW!Zri zo$n5%zj1YxT6I1dCevI!MugQFyjzcB9Gg;Eq{$C>ko)6%1A5w}cd?s;k%2NN|Jm-& z_?X{T=^G+@(xt@N=4JtsKMPM!AJ|6ajs-Id^~L#IYZ&cwN=lTd=Nfd$I`wu#wf1?c z**^-vdi|H>qv#LY;RQHe=c7dU6%TbZq9EOC4|P56gFVKTR-;yU;Vi&t2gvN;Yw*hL zs`Kpad27%E8uN}PzD+NFJc$12Q9R+|^%zXV{28aDV;ZboSgrK>pJ6t$&!;ZoY?EF* zBT5rX{{qU_iLb4UR0^9WX*E9#Y8E%~)Y3eQLHbg#-%JKX-q+ya`E0%+9|Cps%*7#e z2LWfTeE0n%YxugC{Uk1Tu{?pv0r0E(G5Fx#EPMiQ#j~2|e>-ubtemAh%tV}Sj;3r? zk~*CJ@m7@^wlDVfqicB}oCxpYM4EpwhlbtpH+{_kYr%oT3&6i+H^FVszpOd@?@-j@ zxaj#KKh9~$%iI;Y7FF}VA!e zDm`SyVWK`Y&7W%XNjaPXwBHr=tO1Gn6LQPRqrYYNwPAZn@Nf(1a@I>T%x=DzguGus zZ;LC2s@TDXZJ*B$|NHIB(f>Z%sPzp+kAK}I$-un%zb1lo! zpc7I5S+GExsW|Lje~6lfio{P1I(<5MQqtjW$!d`afA-o$cH!RvHc3l!GCnhI8(=bt zc~q#kklIjT$?KKJckth)*=sXt-hbjio^TF=)_@k@S*&b?Yj1~^6M6OE&&US;BNu@@ zm)C<|cjs&8uo+(gEdlJm-%kX7agSx^;}YXDBBid9URrU)pd_Q zjWXW$N+lOLNx!B>NV|SgJl!he3b=-QK|I#RmMLF`14I@4{b^;_P07= zAsRH5`YTj&O{gUK$-_=`a7kvseyIX3nHXBkvIUwZU>jC;lbRURlpyI0m5b14a4}J~ z5D$8J#S&$N01?IWJc|H_nialxkdqFHl=cIy%71ClU#u#Oqorvu3&2L@<$A za?t_Qm%fSLgn>N;)fhi~p3QFMI2tW>fTJ?pL}$R@qw?$8UjnazNf`RX20WPatUwRh z3kZgOs`LAR?`M|(VO+`;acJEgzgQSv_g;yVa7l316;a-Kw!s)Cszi1m-5*1=Qb}qzC*j?1wiUdvE(a(#`l*f=Ip+(FWn*Li(Z&5*o z#OM|1JM(Ayb*BH8J-^>y5=9PW+Snfl^7<>eUj+h+kBu&3?q{AN82wHB2$vQ<_7KQu>`Ox`1wgzi`(AA#YAh@4#G<0z?KdD`Q?SVykP*Ghc#M z9+1+J4EuCXHa4ba>TAT|;hF}XzyI!FMa!&;zqqv&ux-P4!Hx?-gP^e@c%CTltR8DP za$1dgUgK3zcC2V4s%d6739C{9YVK$m79tZDaoU%XFXZuV5Wfl+cQ68W{zKy`wO=KZ zdyCM2HeY_G5o{^=K7GIL*Q`bvJ>`}by0wNUikqqXuec`Pf!3QqGrx{F5J)seD&%3g z!Hi4>adHX){Ky#j08&AcCc}-&h9qX|hb#HZ!t(j@D47xH+|j1LusEz~mWIC4=lj5o z@+RwY01c&b6z@no$<#J4cbK4KKm}crbqvl%i9Si)?VA#-2)p8jyj2Kb{$rR0z8%pv zXH_##$EAGKGUX{2GY4~a@LC`(fNnBz{l0twOZT|>cirkJ_+StgD*D0d07Jj9t+3|S z$;1$?&Ax<@R^euD!DYzc=qWm3w%iAFe+lghpOXQjE*X&BJ2 z&-P-k%;zZfFBi23onz15r+PR51-wtfmD_tWj+7!X0OB^}{^4UX=)+NYu_yc7cCbcS zzWS%K67oNT7?aFM4?Lh?{AX8LoQ1_Q6@>1Gz`1RzU^jb}Z2pB=Z2`^fLJhn2H+)I_ zXUd~KUj9Z~8f9FRN8xe`YMtGgj^}y&af!Hdfgs?VRjAg2**lmU1sakk7m%UIclW6Q zt%z|8=&tsarV-|rhIS=>|9N__uPHHOk0tVWoeoNjD7^tWhZ|oItQM-Y1U47y6V12x z<7K0y7wRY5aJkEt&SsydBGh91kO=~0t?sX6&?Ly(j*v>N;OQ2$%;bGIT@lJbKyGFU zcq|)_rYs^ejX*#`` z7eFARcOwKhJqR&@am7wO;3{LjLO6bC_q&}3Tl9kP~_t=+*^amue9bn4^1jua-$)3HElxl5jD)u9vvj2ix zWv;`NMQyCfGWKHCkxHPLmRoc9c=jA}Lyx7av0=oa>Z1bvJe*({g!d&?Es}aKO;NDA z#og%9AO*D?u(e1)E3jQa?E_5bHO3fD6fAYmoVAxT(fpnd2_A}a-+pN}yt{8^i<|xG zwZIe^s($4$hl2+5@3U=%QLItA58IPfwtBj69-anl@R<1-Qf$?>Qa1`E*F&%i zzgiD^=ZjA_-eJRSLxj~YCB{M%qjY8fm)FyyiF{ZyK$cH!=t3>jXI;gfFa;;eXW$G?gcp_a4gsg}nGgMX7fU=S#IwXL{2nAtnJ5#0`}pM2 zONt=7-=`~0BUW06sCtNu_>E<(h~~?hcQUhoH=lPvjS3U%7gu;LZVs7qD&g*FPGg&? zljig4&w*V5Hc@feyP#BAhM$?wo%iPJdR$v199w@<^VJ-CH3GdhiLqmwZvu#q*1Nx> ztj{ow^xTN>qPahJ@=RM)`<&=}4y;8DNMA~6RT##QZ zwU!5MDS(`jsCZZotIh;$T;aWdzfhzb0zLv<&Ijla8hg&3Tv=*V9yt*nRRyRY-VPd5 zXMR&$BH+Ja%sHAXKo97&DVT#27nn*{9A|eDiC%Nv-7je07$gk@&LD}=NnF7T6O)sL z4fp7U2)!<;R)^{;{rXJak2;>07`2WO|B}8I_F2>As&o&JI|X=ou_mWh|l zb8WRkKD{F4b3Z5yq(v3jY}c6K9XqacVt1Az0iyEYpl^@-i_gjOOSO*q-rz!lQOh}C zF(kIUNlqh*1%=sE0!Ae?;u0iQZ1b=Gb{X0VLXd%4SV(cnjjYb&W+6R0K6;a$kX0Vw zn?26bUSB~i1XTtet2bn>jWuFu&{38OrYzxN+%1uk`@KtkDIJiHwG*~xKs^) zXlk&}`8Bd!Oruy4q8^;j+cdPXM^}UTBaJHN!8BnQ@#HlQ3Nor2_kiG`gdmmI?Nlu@|uS7cR2O1`PTjmYYm5gHPf#x3wbN^9(i>4qrb% ztB~mw+q>(xRrmv3iZ2t4EaM#XKOsWrjv1IZ=;KwCT`vLqah|_^2uzWeumMlcE_CP4 zi_+Gkd#8RN@d);!)r`V3Ljj4xEb+hvk^nZh(h?pX1lD@fWvFP-ifS5@^4Jw9+dEioce=TIpn|s0Rw!-I)Z?4&fx*1{bj#v0JvF z8vB%%(_k|3AjWm*LSYjd<(R=_nYG}OECU|a>L&>v=SAMeL&P}k)@B;w zXr|DM2I4y89OgEXc87D{@AbMc#z(i|F+U~@w2tfvxJR%PXGiyY2UH_9<=8n2+xSNx zA>&DCW#cYl0_Tpp4hMELYL7vBs7M~zVwcDrz*q2nM+JDVlc%b9A>x0t&jG=NL2tHS zv!Hw<2csjRVaM>WnK6EktaK~(m-2It+v=194~+Du$2va?j9NlAXp2Ya&ex;}Vl_1U z20zFZhvCz%Dm`S}dU(7gY=KMXpix;lopU8v0MT=>7*@{SF1n^7yi=Py5vnJS)2~Qb zb}>iSC~u?~QRR{YAoHWC`l<#@l}p z07B^gF!L7!xS~|ikL#Z+@G4pi*XY&9+mOwyIiWFz?Sb)c#H6WKA_v)f0XU)~TP$@pjEW_s zC^Shs+jJCZnhH%eCARuzfSlR)}sATy8p`5L|UnSnxHWEu3zp(D{fDKfre~g#gzYn}c#p zDjZnF0oLDnBKiDD$h~Js0*&|AmntG$)nBn@fI+PG5)~xqV~e`4Rx1O~X5R5v5)u17 z?_MT@Ga_NhAWn&xGhWo@VtnX1eUt_frSlNhw*ba^{FoARE@uFL?bZ8cZ91Ynapqct z<>Y>lsefG85BQudx&F;icGU3&y% z?IqqptR~8hj8+g+x&a_^YRMmPnNVX!C)>(_B`Xn zg=B(|v}5lhf4nD^4u$B3TST!!2|fTsMDk?6KC6R$B6C3dO!c-s`S#H5g!us!ZdVqr zaZL%z{8+4g)O;PFhUZc_&c;m^@IgbQ#Ezbh(JRba`-qG|R6(N6<2Zd*kfXbP$Nkwn z&*5y5H!z4xl5*E|Yk_r0$Ks~z7K}b$*IsfY3CP$`cW!or{!ia#-6jBN{0wnM%Xw-? znJW}Ny1WF*d`qMsF38DuwhyV%2+s%eel-(m^E~1Jo$?!E4_uFwHU9zW(X4mge^X1! ztG;BtYs-zk!?3W2U6kPA!a5>V-gbulU@Dpnt^PIv{&{;%Wl78|7q@tfi9;smPtPRu z=32-cT7wl?&@@_#7(;Qz@Hb7-SGXF3!@yQSYHhK3ksehSCf0pTsE5sPB1cj-mj6Hs z*$AuqTd6bN^cz25#~r?Zb`@H0^^YB0K;{+*$M;B;0|s$--S=Th-r&4fG194kf$ax3er*PmNnSz{X?&t6o{sJ6Y} z;HR!>0Vj(n;OH~(01)7S&t_!iI%* zFg@3IT%Cq`X*|8aipkKXa}c-dEqca1^Nso6ejo7=W<;h`y3YR5u*8_yTcGO@HDBOo ze$QuJdd@wr{M7!MI6D5{5q*PmelqLdoAXK{RCtv&J?9W{~ z6}e2YUu1|0Nog4z=saVJan>piwF!VafVSlx;JQrOG6&)W({jYSTl(zA8(=0211wE+ z+XeK6y)W}N<`pTDk`$`!6Gd=ZeE?qos+^GO+!B$4Y^acnYwtUISg;ZOK*C1)%X;2Ec}QfU>nz`zYKFu+rmcg<$2AK{^t=Pgr@pETFX>&tVN@0rVs$^=Y_aX4= zrattFp~X;WGX6GGv%?E`cE9+&k(5L|0C-0Jbo|H!1o@K-&gkNJ0hmxiR=E#UmU)R> z8Z^An@*f6M#kTE&gXErV8{E}5yNT_WOWt);IVR|#W&KPH4)`ui)v0VSP5`P9oF3Ba zLq7CDS5ODm?|Q3)*?A}Zx5)b=C4&pob81^kH}moeO+{~8UfZqa($#WA#*OT0?qr~O zE;;E{=O|6S|3#XN^ez@TKY$T0`ihEXB_%o-N0REEc2_f-882Z#MTR4!<-dPN!LQy7 z^8D2e`u~T^fZiv>GHygIYtyf2(4n7ste_y+(yORlCg?O;xj{fP8H^AY&8MiQJArP{ zEHGfd{?Grs-~I@JTX=G1_gbPoT*vRxZ1uA)RfmQ_CVoQ3$q~Jaj~691E=vn;*S+#Z ze3S=!?JoY*xPnG_BX*<>8fFsxq~Cx07X#-_PTSUQTekDq&Ag?4^P+5QZ0P!l1A{Jq z-+eLfruh`Znnf>{p2b`HI}vP!d7jDFIZ`nB!|;uSX7cP_z~=Rq+omJFJC|?Su zY5=m;Q=GUZfX!^pkF&nU zueDKwl&^zzws*5D;Tn(2s#0X~1~otlP>-kF9YF4^(|gFdh+-T`qWAi3ef^(h+CpeT z!7;_^5tH_ePf&GpdB;lw-DtH2^1iA0R*I^=eh@I_In0bv+HU%>fodYN*uEEHem`?l z1pDRBtdxp>RRriL5%I4hSXsB+%p6!0r?Jy_If}tuPu`(I+nX3dazV_lMJ@GA*AIh< zYP$WdrT`lP@JuCcHL}7wG{FtTHACDo_wX%n+Y)iAWnvN~t9aUr(9V}*q4eCcIgl47 zUIEh5m)yQ?@e>X|(toO7-&q~|cA3-2GX`B=is}-te*7XgNn9dCY7R2CL;0${ znVr2KSxScs$04r!9$`il)!gok`Z59pfVnI*Q3-!4j(r*ISVGErAOnkO;rsPZn+PXx z7PgV-MdA+fe?SL^7&p})FbVIz{4tLCbP(TOKuvPA3mewBiIkhmN3lIX9mT~x<}xcR z#8>wYI7lb&&ip;kt|jfkfDW6?p@sVZ3j0e|&IFp$T2zp908klC1WWInCTD>G`pUeq zRKz?N^W7P@v{;L#^p9cjFn%gan60JE}UmJCDHR*|7wH4}FGj@CyBPfD)>_K1HQU`*v1njp|i0UZF0kO-Ws+W=)o zZgN!Ikrx(nwTUz@v#N6EOS}|HtbuwG4!fql{T-W^Z%(z3P=F}pS0+d!rYV=E90-#7 zad_yxnwg9aO8QgAN1Sipz3IMMgK*RfKcCH6y4y*uG+ z$RT!^itGN)r3h#>D10tO155l^pGtt7Ud9(PdoaFG1$;GrH$si^f^Q}Np`$)?0vynt z{y{C58ft4wef9czHuADNa|I}mfbWt-59e5aEV+i#aFXw$5d^5X4ru*wi5bC-`mW#r z5U`@z-dxVyEc$Bu=Cu9uXnWRu%QLBI!X1Dm%uaCQsxJURKI>UVIy6ShLrYrtc=sIA zY#OozY$)5|LGKh@3nnVOQ}jrKET?j4$EM2YMS~QBcw7f%!{-z8D@p`>gMcZB-!9_F zc>L7u#%<-$GAC_zBE{X4w#`5bPuu^g&mX14HW!5#fZ0 z+Ze4@o1aikjHOGhMYZNz5*}itn4WMMj_NCBV+gYZfh^ja1o$H(vq!1$^xu=Xxs^2g z>Cz8>zMfEu4a0>zIlaFweXahpe0SXROs#Wn=W;_G|Fr4fW}#EPh1g!eIP*Ctak2HhG%tP9O~UiC-9E%V%p8-I4g2ENRyH`buJt(F_fiS%zR z95{D)KarIA87we$UadZ|Z!Sj-m>G=g$Jrn~^i6nuLJeoaF`OBJP|%kSH{x!9hM2qi z6u%fWiFruG3runem2`;hiXQm;q8FN%9)eKdBK{%7M-lf&J`V8~IZrt1ASaI$djLgVgI75}w}@4FF_J9khy zfwSL$FzBz`X{O-!v79WCIz^1 zPc59Q$NHDn>7hI^DpI4dW%1NHf#<%X!vz~DEeO2PlE_r^okzc!Cz!B0rs#>YwH8=e z7qz#%!$w6N>z&&joj(0#ew&K(dUd*d^JvNRhIFX-UZ1XI^uisDik-wo6tUu0pW#;H%+yeR>!qj} zCE#lLCiRypTi&F_n5ttbvs*S_s-c-QM~6L zYWdlJm$CvNf_@qEjRxq54vYP7AMvr{r{`2rMBpOZOLxxVLR|y&na}4BQ18meQ{KRv z#-fLnRQH`x%5?+^x`@%aR!5Y&XLnI<%0>`ckwcr!hTkRCo%;#d`UPrP`$FOt)jHf| zLpj@&rS$2K+;H#S=2K@;aNTz>|BPmRC>mPklV&eW3=`F@!ryowFNL>ki!`BLEj`n@WZen@ z#r-Y0K|j!YXHj%V4`@9mt#@j#!#=gR_Rz*;_x!V`bcByL#>dCkz57#XtCMsxi`tg? z#+gTy(!=Wezpx5D*HHx72=InsDl7^|%7O7l<*_X1D4J^svT-y(sclxfwHh~_BdD-P zP^#=g1Cv->LHZd7^bY^I8{XleUydI6B}`b40EW@-0KvXIoW-~}e&8=Cd+gX~bYEI( zv?NUV>K67_@O19xKQ25xOZ}+*Ycu{P)Jt0dr@;6i4@1Q?>HzH|cVIqu@Sh0Y%vL3_ zoK?Ak3B3rRGfAU@awQvCG8JB^JAHlr9|3D8m8|19E5~!Bb@h|Ptsw9Mw+OB+SysgH z*^@qu;`R_e3%{%_YCZQ<{Elz!RbtbZAg!Lq(*(z!_s;faqT9alTbd;vtFR?%dbZ2C zM(*J*k;ic{oh&zE&lJVY$}o^=%REd|y!S$nKh%sw$qc8d#^RXzX-p78kov0TZVwdO z&ByjYCi3{Qwf3J;&u zB%+4Es)g+L2NbuvIAP;_3#d7x$+>q9zeCBNwXy}(@S&B&(EG|OTP}?rQ zlU9{ypI2#5PDJrlQ%8waQ{FM1md7~p;JhwxN&h%)mAJ|IiDdi5xBYR6$a2a{>(JEp zcKoMRdJ(H&dODwnxC_S>dz3duG<J5rm?(2x}e|#zVlum>e?V5^?4U?>_>4+m=91htu|t8 zkQ90FqcM?5->`JyC$vVG?Er zxO>&Z1cv(&`I`VEEonNnq2+NA$;k<=Y}Cd%?@fa6^qcQ%i~->nC2`{m1R?As}2>z|O{K|o@% zGyGs5x4f?j@u*%b^xGJ_Dzr9XJLA0b+@^*HjV?g#!_K!W5^vYRhx|8#YoFK7=3O=s zZJzD@A5MX%zVEtwWmPy*s^Q!1ze0H4$#86||8~}N1aWL!TWvu1%A39|b}Fi_C{YXX z>%pDlMgQ4W@29ZbtQ$cBf=a^=&yK(Zj9V-z?>HXTOX?eLTFU-A;xsfxypdz&{5C_v z5&LyHIXuWx@?*Nz2Bj_>Z_wxwl~cf7`ZL^R%W*mY9*ubV2re4D%pL5(n^d89h3I3e zrl3n3%INlzUgjj4WR-?&}z>hi+Rw_L4e6 zofx_(z4tRNU{z+P&Q9Kb25)@@;rh$1$bX_M5gzltalprao0-8=)*2a^3Bx_Y&kn?-6PiU0PMEbo@xYE%T3 zJSp5n!Qufw2%1GW^asJF-;h|_CbGV>F&J-nX=bbMhFysjYeX90E9|0_*hl_2{;P{< zW_pjbG3D&Fus1^pP*cSXtpj5)4_&31$IwjG&t`Y`vTa_)mAXJatcU5{cw-ceG+n)` z=yCUtCPhtTGVX2i@7oBnNA98W z7jF(0ge5ka0&RRr^(br2`*rn$-e)!&X45$dyMUWkW4^J%mhhPPPEcAb`#$jr=1~&0 zD9&kJA1rWi6+blpFh6( zI9OfT*fkAVk)&f*jeYt18N@wp3>msKk(qUp$I5Oh{2dnu-VNcY8*B2B-#f&aY2VL( z-87n8*2^pBq3rM*{I&)=(PY*{S^uqy28$$7W&q!+A@wR4)Jf?syoyLWOfOmn#W2e{8OLYhN+*-z@v9xCP;mqevfcE%jCMh zz1IE8muE<7=XG=V4+UqA=>x@%0T&lCI9y`NaNNqRh zC|VNh>T5n(;+4?d<0%n(uN~+FY3h~AZm!6y4a+;z*YIV(s@*ngPY33}Hfb?SUV2Q5 zqLJ3K=7T>Ir!;e>3G)*QqbbZ_l|D($%JOxH+ytrZxw161^{WdT)!~xl1Gf*h zX62#L3LKKlSJeMF3|C*MypAkqV9r>*-#mWS?LrTBR4+v?%M!gYJ#%JtJe+a(yR1kC z2{=IoexJ$;Ng)nsa9xUS+5Co^QAU{8GUOg<4AoVTNYH zXUPSv|CIfOJ%rWvNv~VKruLN+K0d{L5E{V6(F`?x_^9j@iEdwUN)S+HFC|x&;>EXe z;xTn+S{G|dhk$o?Mar$&@Za+o1O)YKA5yP0|L^dqx&6Zv@F&y`ev8rmWT%}bzVizc zlmO{0a%KuQgH-mM=}+6A=|8!&@LNjvG-eFfYYBPAN`@>SIGr@IwBd<1okc=^t*9Lj zSBpMgyu-bponB9|$aT|DYK0mtY%3kr4X00c-}I#~e9*_R>8R=&zd(!u)*H7haY^4Z z!!sz~$_B5O&X=mvRNoaQi;b$K@I`ClBm9{*g;6o(#Zn|DQHhe$>DfGGqqq ziUfz{765uKXD?rS2Jt5Mp{Tj*g)@@wcdqMwe$AnU!&L^hkGXQ&p_b4+SEL>C)2dJn z4g0=Kf#~*Kp_i+4LA5YGx2sAcgpKk1+Fnn4C(ihBB53N4KE(E^CXz}Q4n3KN|CUS` zZ~Ws>wL{L<$&P^M=s8oKf)hOMzAm`VH!C?>{eB$-q>P^B_oLaRhp?>{f+6mAHU_or z7NjGDu1eCQL{i7H{rZBXo{buN|Hn-O>t%m!C+xMME1aGu9RRrt&9NOSJ$Z+q_)7@m zdf{EbJJ*JSM)Dt@`8kM9C(>5iR7QFy2l8T<5b;6mtHr_c_wYnyY76-adYky|U}hQSRZMeOYfO`RjJv*G`O^f)Fr+;i*mk z#^HMYhW0Um?1xRD!gg{tFxU+V%FipX{tVBpB8pU&SOn0~m#g(8&8(Y=W>aS&vK--* zhcq+82+65fvuyS70xvs_(zF{>-CqduxYN(kUxT>+uFeL$7M|)$NVUVne$t8=zezLk zAQoG(ZZbX_;zH62&_7qO&SH~|pE04o)rg#%<|mCg^avxDwo6vRTZt8}Te?>q!qD*^ zgaPy+V8rC0j&%%0B!{76|1aZzo}~}M%OzUoebr%Ows6tfdFAj{*8x*L z&Bxbi>!vlo+SK$FT=av=(OBdHVOIyTacE@ z`8B3-wnk?&=BW>J|i&f&b}p4@bz)yHw%v%j6FZl32Js-m65bs1?~HO4xDNd#zyRYPSsL{2?o~%> z4I_zj=N@p+zXP|PN-iF#mA}s4HoR?cdefaY-Y6Hh!d&87^scgP`k(8(ULmn12LczCxlXDNit?Q6G3$DoUPXpE-H9S*Jo=&Ng-@uccnSNQM zHX`xw4n6Mql3u6|9$#_|K0SXTlX>(U7Xjfwzc3%>6gLqE0n1jfa~Q}WBK%o|&mzL2 zwfd4tuq~qA0n1F!_(x;hI||P1EHj$`wfJcfgLvb+lIIRrQ=^ybG$9-PZTa(qfe$>2 zi>O%KTtZX)=xH-HQqIH*Z#jdd)|JHZ4it> zwP3V(><;YDYMwSmt2XX#)I5y@dKI74Yn04lfr`ARAAYX9k%p0TOJQ$pf5$8?X{NJG zp8sP9_wM5^N*~KJ=YU-rEXIF-Q%z#HSiV<&M-%T0=Y%Q@y@TNVRR^#%fzR}akC5j7 zTcj3174x&}OSE9cRZaZ+3b}Ym6|Mk^y_|+zbcOt``lTfpf~CrUJiW7cg>bC(DI*?h zEUIUxd95KYw^**gDkCUdccOkx9+n%O+ccqe(1L2uoI(9f?S zdny3DWhFKStvd1d1fwOQ45!jzS)|~j!=xPy_eM4Z6%^OaAUZW9UVW4Kx3!<9kC5p{ zr}sO>+*gPRpX2EjeTOMgH1M2E^av9BMj1Hki;Gmq(jwiR(%t?@-Arnsl zX1vgM>fDl8^IY~;O7~fhpS{oLhEcr8!k?e^Z@sH*J)~9xp%(WaaOx0#3>z>*Nk)w5 zu!M^7W`WSz5i7nk{ls`7oc*RPq5*1pUw{G3gtVU`oyl>PI#{SuQLmJ?PmC(#pP6h{ zP?qzLut{x-%362|l#T6IC1)Y{Gb}|LsE#8-5U3COF~khFKBJD~beR9nR&;iw^W$58 za`F_1E&-n0Vqv5V_iC1ZOk<6>A-a{*F28?5Hal=M>*$g5H~F7(&PPiZUf(R_)*CNP zQ)Oyf%tZN$rnlQ2_~ONslaySh{HO)uSpCx%xsh8EvLmq=T>05wDBmdXHfLICDyvan za4GDi;mev7^)KY-z-J~1*nocTu_Ue>lH}t<$A-BBaahtOwQzwz_R;yM&A%# zk|WSLvGDPjoeB}Q|xGSAcYMqy@eIck=tp%2VS>_ zuNATV5Li)=or`ljiPHm8V4-IrW0DCy$YUKjSR;jW`|d zn^>~!HX2c8ILSGVATCJtV^N;46#IDz3Y-?I%>w%$?tf!3q2-p#Zz?{;yi<7f2p3M> z9zh=K9qq*;+MlUQ>Mr2;lT}el((%T7aU^}E?InKX= zTJ50GVnXHgi4hNl0qjh&rduD*TPMW3d0i8pAL!riaZ?QFZv;(B$lFNTJq>EwS@&I( z4B~ltOm{II1PouEkLH^_>Yq<-ohTc-)4BC0XPY733cl>=#%+C7U;?uZC7K**@uCEO zb>#R5)u>!s%&khfI&yD|=8pa8Q8yuTJXHf6^i)An>QW^YOf1&@;lSfrndRQY2t^ zl?Y4`w-dWOXoo-X4jBKO@9cNIRz|zZqjsVoVxS%7XT0TsqfEg&&|=`nANzE4Cv*A3 z1~ExOq^^D1K0Sa9zuUk+<2Q)Fo^e3DKycBq@{tg`T@PJ<<X|aQ z>N4W5XNm$B66o_;(Tm;2g8E3#UgaR#H?!$(!V&tSdzN;ucX^ERg9NUQL|;Bk?`}z7 zGWyGB+78-o;R*ni3kW1H8E@?3m@IeqF52;SVw(<+c*NFEbX$FAI+vUDabT`@JEsma z)TI9YvQ=q)=2|GlALQTGWTF~i>rfSeMaA=k&!9I}huqmZ9bON#I1f55^A2>2Nc$5^U zl^O7~b-!BX1%g}X%OigI3`w<%{L3{k9AnW{wR!BzLNh1u9D?ySUep6bjM(LX282e65|<_{to3RP~IhrEe{NAufgiB!lCrr3OW-?pbc$x}W#O zbY8zwsC;0o2CQ%JAATr#^Jhw~4w#UNEkxj<6ORvx{7silU{PJbvc^1kWb+%;uY&n2IBYP5qqGaw9c`RNIwDA|^g00NruMXpKk3$%pD z+)!0id#4qxFA0sWtL@Z?Zuhbs|CXpX!{~$GxzFm~8(vADythBug8otW$B{l0QzO(_ z`cU50{_XMwDL$-J8lZ2!waOivpLG&Qd44ZY7A@bDwHvl{r% z+#%Qh$|&hn=yT`Nn zzlT{5yQx%#Oq3830kxXWUy`J8oiq5Hr4$5S01;DEL)*eA?Vx*Vhk)H+UyGT@g0w2@ zpnrx&Tjg8XN_APY^;s?S1su`~uNcnvvz8jV@o9bF>`2j?<|qv|Kk`k~CQfQnjGN}N#GKr33b z?C)(gEy34SL)e8SnTVipGw6w~-`C;j4GelOWE?OUd#@uR`Z`HQnVZ{yu51as_@+HB z!#-mTVn;GUPt#XLv%%9L8ZZeuxm!SmPdWL}i=ZyCnnxw)AR*#~GE{pHr$~#9`h(1G z%#)HRDif@S*V3?fo+1a^^Wd1V3=NM)vb$a$CC=4q4bsw_GCt$QH~!M`&UArH2J#(J zMFdoxi^;+ra*+KEMYc4h-l^v&Jbx2>yp2%x?>jSGXfNoxPV{m^;}xhE@)WzxC#+=4 zTSxXJi8b}gzVt$%z>Mg6W1=AArVog_!O~-W1A1K*1cz$S9f#N!e~{ zQu2*Ia!;DV5-M#$WRH>FJ^{8hLhiHAxv$BXeRU4N9#o3#+WskL^n z#&F=xE5rYV163>?Xb{p;-O{8UE+$;?s>hMH<3pl}jaWd%F(JTvMgSy54@4cGV49#| z6v{~vseJd>S6&`_|1`@c)EUr=)$pk~W9JiE^l&v|Ro}+C67Bii66xVslYV|1-Wx;1 zqZI`trp}!uHV->WeTNb|r`MMWJmm6`J+L-?eQ| zp!&zo*dv0MqRb`;8A7Lw3ThXKSmH>ftujH5!%Biwwl^mQOuhD4k5`P6@TpXSUtq==ril}yzCjFtjd z#8>1EvH{uZwJ`(SX;@}q(k=iIwI#vb@_}sA=<`^DD&{WGB*t+me(=JF6|V$5{<$7? zG4jzJa@!6M0bGZ(_&?;>5!fh-s06?&!BuJJe3aP6jqk^)s^>{;T z=zEaHiJQF1fZQyA1QWOA`h{hNQ$X7Q7N3Dh6elKMFw?Df%)b^)(62U_z zhR%#mV`qi5bxN;Z0upRNZ2=J`MTwC^im3ch{|JX%`-~vt53YU%A5nw=cig%|O)hf$ zv$(`4867C*Pw~KtwR$S`|0>&y806v5a{oSFpa@4zcVdl5+8lQi4___Dr^io*2<_Yt z#y`I%4+nel!*-yul7YmXX~=Z#FKB4X0DcF>TS{z_^sZXhHfP-^0Izb|SfzeD?I+rJ z?L7^^Qy)eivHOSnDCGPmGfh-(+Yzu4WdZ=$&#IPWX%dl3%p-8nO}HcNwPZDd{?otP zj)@NF_R6(s=l^e2+=r<-WN1}69Vci1{1+Uc*(CNkixSCMhKG19#o(}-;jveBHQ~#-ruIE|1 zb~DqELVPM z3_Z%2H&GQ$jRt$W+Z@F{(Z0#MZTTD_5OGs(mmW}?>T0v_T%@6^Yx8{FaKGrBpdPmH zxRVT#BZWyo+SBmzs+~ow6mXFe$)yrsq%@GlUG$;9P13qV4`Y0JSr7K7k2)ukoOcF$ z%wg34JtR*eBoXPTU0oXyK|r9FH(0GkLLfvFh(kE%r~C# zn`)m?H~hRvX+VqlTQ-Yl9irM7yR_f%? zL69zlb5p9x$h68ZTqh+ZI-F{eQ+4!~x=w=+mWzB>-ys9&iGWF@{w4I}jQYJA?P$Z2 zYD|G5{N`$R&%h{{VZ5Zm#gE#r3beLH}(?@)zN`#cde4Eff`2wVj}#E9R0Lu({h!lFFWY9UKVT{ zToh;-)hW>%#aDkW;2c2r=X8)EY0?xvF~a_EsWHGTe-pgGPN?sadEPETC?)$Z(V9jO zcb%#>N3lo7wo4rrT=tXY`$h;$dyZ`Z(MHKLKY=HD9OxsT`;`wg&~&nJpx96Y<_+UZ zITO5nQj1{qH}pW+`a<;9DB-U*U7 z_E#$k=w}+U{?WOpLSdgE&>c|z1`i#dCfG%$U?Yy?C9zg7FW-D0ezoidbsYe`JrE?P zrqLV7sZ^CL-uGFoWCQ-hP{K4qEOWv42`XU#nv?1M9vih0*DlISZ9hQ6N%+mVR5o;x zo4C&P?=gg`cO;&&=Ow|CV6CS~oZe)qCCVjmKTx z9IO62O#@o~wxrUvDtk`B0q@ph&idN}0|2mhFlo=s0VrOEJTdr9-%X#)^am^MDdaAB z02z|BjPj+XkB%Mkilpf%ZR}R&IiUh7hGH>2Jris7 zH-M6?z*|>$@eg;ot}yFe>SC&Y1eHf5Kjj58>AIEz;q@Wz5F zve52e=HpKF7y(0!i^Qo{L?Ja$pW=Y)?DnyLZX)p{QuhD51_0rmAOB`wZ2Y6)q9`R& zMP#u}0#IPa`gY_bo{HdfxED+Hy!uu~QD9Ntr*Y!wAP$t;aM?Sfy#w{OH~V>&xdC^{ z%~nsivXuSr9PBMXkK$D2DAYM&`K`nh$ScGM2nd?>r1*2KPUoX_3P@&YwhP?ZIW6ec zT5V&DQSE zY$%;igFxDK7L@8dY3_ditlgJpRaZi5SEFhrRdt``ns4vi_8ns%`+xg&f1G#%fn;$? zm(+u#NS~;V{8qW^pkNJvr1f$#63(1vyzi48yy0`qgoo0ek3i1DkL({kI|-tSV^J?w>r!Pt&tRm7_Ea@+yEG!>-5} zl3QUsML+knM;DE49RcZ0#AM4C2HCQs48B=_5UU3HL!YlK+L*87BPzA7F$zDo4w$sZ z98$1{-@IkkCvMVT)~6MVf6906M=sfnrSBIt?^T^Jr|0d54PxcND}bpli)66@r{4G)K>EFx!E%T=$+rCHOM$M^aU5YyPy;5Ae3yS! zWlH@nzKzzZ(>m3?#~OR8F{02vp29M*CVj|*SV|{j$z|=ZgT;PESA2bD4@JT!{lc#C z4#yi1*)(kJ$=QHlCd;Am6jFe!2Bce5;X7|hilW>b$UQwTAuFKPit@IlYFbk!C|^21 z`C=&L=T)T%#Zj!r;|aEbM+y^e3@Qgh)8!5`LQV51 zF#J_OD+R1WzX(S=ykJcHieB7ZNgG~1m;+MCGr#tx2#SW@mA&U~_&7I^VflO}_}Ncr z<%TC#sEBx9Sy;;qA56)q=yf=us3z;s@;7fBH72+pTLWIV#-pkNQHQ`q!qao5Z63c5 zI293Glh2*Yg59qAS299&iBs=J@NAJk$7*T6h>pz0&EA+ED^Kk0N}<(=zEYI^l}Vyw zblaPe$)!G00g)M{SOJzT$j#UCXI8oei3!>Plk=n0{9F%9I!uhJ0mxp3VY{h z;4}Q@v%1ksj2=5lmCs-G4LtA{c`QWOSFHlvK!yagIU>ya>(%n zqo>o^LhW%3k7Cb5gsi{6xN^%p{5G;8MB|)H3cw$_tBAd4f$B7x8;3@i91cYpiL&dY zC%6x!iY!9lQsqx9YSk%$+@TJy*nMR#>n3UH{d|uV9z~B{}ei~o+Rio$U=Cea-U)NRBesNWGjb+!> z@woTHH}i8B9<@$yJP>htb5WHfGGq&>nZMlS*4A437z@V2#32%G05{>Rykha=s$Vc-K7A?)j9 zq@nYYeRouFD7+)dqOSewQcg}a<#@H}IX*zN9LA4hYr0hC~bZfh^ zwyHKKjgH8*Fr!s3EU4s8 z_n26M_gX}51doeEKMDQxq#br1&CFtaMC5krW+UAIVV5bf5aL{JSNKSqlAcJIbX5E@ zA%V^HoIjQ#~7&k%>~B@O2#!gPvXP zuy2`G8gK!O2!%)!IL-oBf9{mS1~-vFfNKH7v!~>FWV-4~;8;>3Rdp=HVQWWzD)`*J zlzHV_L6}b?cFSXu>m{wJdfZ~rQ4@$J44kBpB(JFKMJemJo;86ZNHZ-=a2t0d{76I~C zDj@@7g&>nqI&sNsIhABSYMCrxhYj#7QcWh@>^yCXwWm*p?`$fhk5+%e9s8gqg2IbK4Lfs272BaMHa8iLM`ogPlT*B*?jIQWg}8&lqw=4x zm>rq6dwaxmBPR13@)l>X=+uX5R1T|K&%nhnq4>!HN@38A$G%V)Sm$d*U2zqTV~E0q zz6+}-p>m>-HhVo7xOQ4~6$zh*mrL)S1q$0pY1YKLju#+SVVhbu7%Ji60M#lcfAcd# z4^-;hK1ta_DChgt9G~3V$#In@0w?Q(CD*F72atkEPYnj${2~enbA=eFaglBesD|{} zpIH_3@|om02Nyu)60L^EaO9a}zJP|N(Q*buf)JY+j|}h={?*aV zzRJ$AD^Kjt4=E4TnGS;&>PscGqEL0&Kw5A*dLVmeeko_J-EMJJ(_&yU#=CbC%1iCMzw*N`C-Uk1{;|?@ zs{0o+jUE?DAcNcn-lhx9?!%0eYyvnrAmx8p4VUCUTYnSmwlv2Nw>H|K7V~)^%}OMt z!p?$T@OTg@h7vOnk;9U}e$%@g52b1~?Pc#(LbDIc+TlTq1H!?g@7=zbafqjdBo%OB7MWW$mD`l`z;b&JrgEHki%DDFD!{h9Do7vUbl%scU-wA@a zY|DQvRvNJ&0{Tnp&R^p?hEMxYQO|`B+uWBMIGg*&ZP-nSU0-(X93p*KXh(|_fR0-I zj=q2CVJwd26p&=F^)*JfN52$ZtWnRe=tP&kOUE#?enY)Uc@S?XnRNUbE*t#zE5GX7 zmfaYEJSw0Pl6CB?sG^NX>lc;wT8Yhb|?Fd3nphVdK@bbHNr%|XtsWBDp?WU^cc zD*+|6i`;{jz?I=6%hzEh&Uu&_(Hkv(1YYyx!u_~f>raRFl((n%f4tV2nXwW03mRl< zHOQsX3c>QoggWn|5X}PDs(dcKe6ljaAzhjt=5*i+s7uT1`EWSLY z`1qcZ2edP}i|)vj<@fa;6MDl??e?i-(hzf}RISd*>9lXoN}tYk_CexSrW<=F*6nHI zX6=bJa1=rTrT7}4i^aOe`4ot%nzlzhTKVmGvVL=|ypVq7duKgQT_-QMQs>%YR_>?$ zcg!+r(t%BFKyivoAtt8Wsch>SEAO%=t{5O zv?bmJ7TzEolzsak@cwcvC}J~dnL!8dmL{)$kc+ZYBAZfJpPfD&oSXBd zo(NR<=fi;Mn~Rh%P7fzP2Kc2d=ZnX+?Vx|-GJ!6bE=ueI;N-FF5}tq00uqYEWK(vX zbElt6qpj*ahD$_<92S0jA#gS)9Ud+`t04h?Gha6}ZZ}!X3F??5JghYOt-sas@_$%9 zkghsE>*o-o2yGKixsu%O^hd8mE2Ch(+Z(u@W#q;LLW{;LW)@> zyo{i_J|EWJWmEQUY}fB7^b6=BB*0UW*fWE}PXQQvv>1qEaBf{}Zb3>AOceBBBYi1pv%y>oYO&J9=fcRo)QWNjKe`mq7 zUc07>Zwdq5{vh2|HZ96h_TWuc5AxLow-vJ|9{4sFoWM48R5ikQxqU=>5gUMy~nUI zSBvo*!6os%UE$J+CJ6${Tb!dGnMsoA=D)femC|&=s`Pj^>2d*z#&Mk0aq$#7RwiXH z0HoS3v&hYA*@4oK=qk4@_UyY$EOOhH0cw)hYPFoQ){%AnI5=dhvVNigM^YxXU`k}l zNPr5vlMXFcxhKDNJ?i*P;$lJiE^OiLtqS1sLOs1p z4zgS9aBw5u4S?eXwe6;Fs*3s$t02=c@b2dEzRB5KL=XDr9~3jF?Z=ShJn;~B`g-t2 zck;@J+*mo5Z0UEGtw!MFXF(CitcVyG!?2P_72+3!;#B^frxu3+%3N_RC9}A1XY6E_ zg=-{1y=zlTx&Hn3fMjVWF>RZWWluZsNNN{sB8wLhijReYvv#_{+JF9&uREaRZG?b& z9wY9z_iVT*PVXaelXrPk{wei(PbMIHdIUflKpy?kfkiTRJT^IBGw&pY>bl?2?D^N6_Nx`+ z?#AJ&xkigaOOl?R9znn*dgL}}4F=HkOSWh)*^RhhQ3O)`$5UL~1^l)8?Zo}5jDOPg z;rACbI#_a;#@xI{yg<<$2IPXS+mH?t<@vhZRY$(DSeU$6)8EYPH^5@xpycoTYbUOo zdP@@O448O3;`0X=J)X zHtK;@0R^(TpQ!0eq%=1AS!smC98cw6{_PF1`k}wo`d_`%H%H%&^_+U~024(uUDCql z13R)+b+ zMiu}CRg_n~9#e}Ie}{9(dPB);fia-er|@<#;hx*EN5r`;o~{=0t;-p}ZfML{PxgfP z<<-%-Owh%`2~BOehWEB;I$t~NfGM7Vj<7kw?6=1UFaEf$E*nRNby+t%Tr8Az<5jM7 z!g--^rBf#3Qhs~!<#bOEEw zz}%s0M{@&nf?y{afDPeL4)mZ4`_&5ERex%rs~u?dFr+oZA19YO{maLOMD`=Y8ICONnkJBB7Ra}ppo%YCF{3{Kf3R4 z>K4wJtFLL!(JgS*=2kY(`Q9^!FTNCzxgMhNY&H5Y)U#X#?N5-FoW{Yi5b33E-cQ@_ zJ%RKjAkj&qqK_d1EJ?_MIhrMZ)j$cfLw^bsw^rjlJ=q^9AIPhS1Mz;@QH^$_l<)qi zRttAm9wx$RpR=ER>Owtxz00`B3!{^bck42VH?!SM%~x9a0aT!wQPIe+sk>NDWYMeD zFv=p13^Zy3!Zo(>as!LH@!uHX=;IOT?=&FpDJvTLr~Hzu9+9Zk#H?C8^Vsnu=>oO^ zCGtvc+rT&Ir=~wh(Ei{#?dKB0-NtKVrqh_>RD@Kc{)mT_qH07jivQ2uIbM6}<=4{w zu`cNbnH~GA^uyli&W&VxY+0W%GazG7`WgN`JG<2R;h``AZ4{L z*fQ|)TZ=7GgDCz~*b&NzS~_tTQW4F&nMGpAwJN-^$wT7pYM*?HQ$0WePzvIK`4ef* zqUtrcwQTf(V3m`qV}=82U|th{zXSV8sMwe56XC|4xOnlojHB^c)KdUwC2?~34Nzg#R}H+_g`=Jp>uf~k;3 z^zK`i#!kJiFWcAFvmZ_^udEHk0By5~Yr6;PWJJT(q_9A01^Q(NaA zv0)&W2%(eXQZ6=<1-n54D>&n~QZk_Ulb>*aS6Y!=A5{gsL7=tCL#hTB5hL1c%6rytj^>m;P`#89$DV(_AR}J@qnS*s%h7+JcR9tz|B}sK zJx}$HGFjF?Lb~-51(%W|pa_wi9^Zl?9Mb`rInoCdw%GNpYutP}3paM~UL(vjuTet1 zlD4}n-bW23;~P|ZWbWcI%^N__NX@@(lij4bMUofx$M%2kS2F)j42T1=-$m_3$x>^% z9`^)1hCi6T|18vZXxZdw786XpfSn7I^UBS;D{yLo-BTPUk&6I<_{q9^v>&cRJCfkr zGwE}UDk{ekNal|5!_~VOkh(fN8jn|@FVi}XY+@HTWZeIV1c1^2dGRs$;8entp z(Rxbt_;goWM9o7%(mR!nnsX`b0D1rSxXALrH&ucFflN*dUs;1n83Ur#DS;rn${_#r zkF*Bm%(@+N!*`*#LUTsIhm{RBbEas{wVVx!oWI8@v!~M*-(~MP3xr=w)OfgMG2LH7$(nVl8{E_JwWes z`5^*FqJLEA)h>a3J7z~+n}u8UYfvH*h@*Klekv$ydq(g6*F<~6Y-8rc0hVda;BMG@ zI^+hvV|Xwm)3^jwX}8a>Nc5X+^Ag(y2RBx7C9TV*%u$l&=PjGO*!?uIPa(4gE(A&hhL-p_KP1IZzSN*+i0qW#sckZvty( zc|=Dm{+@c|aXPRk%#`wBkS=_OrFyj@EiyqpNr{yd(=DA7O)f|se(m@Hv|{!?j0>Pm z<#_c=(jg7+`yNaArY{p6C#g$JtuuUQRCIL@8vT}%#%q>N(U(@{FYHroo^xLV#;(Pq zzMydwplk?U3{{5}-zOe(mPVQN*mx?EsHa$L=G3eFAtO=ff2JZHcxVSlrCBAHe|%#t z+oMZsvU5jw$1U@{wvA?G8!>>ieUFM zn#m%puLbC~`2t;l{JR)GayEsdO3KY7){alzo&!ykaC zL_4e(7a#F6ajNg2%*}iX1Ga})c)podE9kLy49LowHfW>*(|q7Ts~7G^W6%tFkIvoW z#f>jP>`>)jlH~IrrSY108!qnu-xPS<+@aBec10?(>tB~J!*Ss)zNw{tZUoyDO*=cx zEr8jkVSv(6!GJF>`_n%3GkZO?GG$)gjPQWd0|u+CP&OMWz4vYD^6z60=fwm?q)X4YX}%@RQjq6OU6Y z@Ss%l;@E1HhpN^VieK74k{RF>|Fa2p#%u748u_0duCCBtQ0dPc0)l^ezl^ zF`cS^0D}*%h?p8Z8I9FU!s{;|{U%P`Ey;xUz|xrf`vvAXd+~yx^wse{3#L!x(#qHQ zmwN5?DXTmwW1NI9H1X{sa2Kd>wF$!;L~F!tB474_AJKd3IG*<7HL*a zW{9YUJwJvm2J>8Q13FO=mg%_r)47WLQ=fw$!v)=;5Rq>L>n*K zMyTnz4yy!U(6ncnoV;5;0*nMm+Eb5-h@!4K0NhknV{!qqckupj zNoGb*`x-ZeZfL!WDFx}k+>=CW^4;iMw@0tsp^uLv7NMNAI+2-gYBkE>u!8A^)ll0f zkVdAD*e-HVLG2v_1m|;nr}d=3&lXQ@ekGl$rcHDMAcTU8vQ`9J(deW>YXdjYh|qU% zz`!^V#UmUPENvOwrbNA?f@Tq})TSswKkOHl^@{4_*5zEqk5{1Z(HAq-59U-08CK~* zdAG8fZ1WmkJsmWb$eXyTwOuR@3|Ki5!CT4BJvgsS9fr&R)M^(QBF4@a7r;Mc@4q{` z-Rx3^cP>(>E)k`R*MhK-rvKc*K=A4ai$=${IvS4_QYnw-@{0q>I3;vy6!D?7?OX2q zMzsDq@AdC@d_74m?mx`wVo)FUJ8XqkS|+m(IQCO1 zB(b&Txi@L&Ts=KBS0`)ra3`{P=?@J-uaSy&UAe@Y6j|)rE)5(SV{X*vw8w$9B=vz3 zAmjp4++!6h#vuMLho$or$SkU~IqqwP{BY=j;t*huxQeo};ehD&Z$?J&ZOW`+P>hv1 zlV_H6GO&+LU%Qqjrc~WZ=?enG?_e-9<5z>_-YRKgC7fKqo+uGM5>~F~pXypkHjGqv z?A-f7+e23-3`l1z0|VVa-Fq8e^ddGW!Z^VpL+UYqqrqqY9k?xb(#rLSYRyKJH+PLh z%HDl)ZRcy3AlzSTBrKO8GUM&vnQ*IEPX>0U%fA*Y-0nq{-WRbtP*P#thFreH?GW){ zC6&7|I*W+|4s2y~-~|EV9lI2S_!RYr~%CKgF92D7jx^U?^}DV8C6`Ue{@JEZDYZ!Ci|faT+V} zMq(-}4UI@3lt>^x`*k+?Dj|<9PE&plZV*brSGWfUX_>m!$$Afd-<;eN(s zEk^wjP4YcsH3eu`*ms%^M1E)WeA#8*ykzWS7p=cCfb)LXMnetN?&*QPk~DkJ-ACVU za78@fFJdNfes3Z+CO}d9;!7-UeKE)f59D@V$Aoc~5@vj#pP2WUrj+xyJe=sUPsAg@ z-0n!7XEuf?cBHEpGKbmDd;wxY&2H*J#GiYF!#9AKs|OJnsJT#|Gh&d=i4;o~Hh5|Q zkk>T3d(!F8%pU83H>8*oril6B^8Wey>BVlM0QrtS)o_;9QRM`SFy8nm`Im1NZN-1; zSoN7x5&|OLjhV)w`>nq0mwXqXF4lZSqS{7+ds`Ha>0gOCx-uaZT=B!CU!#%0NuxYA zLFP&_<8|1JY5Y_$8=cw5L{r8PNGCKdxWbG}xA!Mc>EXtxBT|9H{pFNtFcCNCOS|M4 zY;*}SJDx3cE^HAobFqGY6Vr(6p_S3iFk~c&bcCSYJRno^H$!h{F*wIFvrc63%Dquo zg|q$-gjNtav(O8WHryGHlwjI<*WdP^DD~^hn%j0n{ z#~#`E5mS)A4#yke@bnWWS$+Z-aDfbek7schbK7Rtoq-yPeFF=XE20a{1A)|ax)hg- z-^JBBW-dM}kn^tIj?U`0=;6l9L5Mx*Qc-^>up+=DRg; z(seLLcMHh1{RBn0$_LdxGQ|kKF~ajHrN0E-enhn{5d#vB!*Ff1(bP(xM~esw9wvde zJKBkzeD~8S7vDlAics+qC6^s#+W~stQ7u4C@JMCm4EqdSxvr9c_Tr>~H)u@YTymt5 z+|_mTftFk*+AnNJ7jNXx>?8r}l*hbCUoQP}rT}7m$D=qf;x-U>g+H(yI}&A7Jp+Y2 zAv>r)x}+O#IXl~#>^08C+^w|6Tz*Jke?G-IhU+04NJzD&$uzs^m`*VZ)OAj=JPqLy zes3955QIvJW4DmI!qAlt+>;+S?0hb+?<~VvE#$Rd{cQ)-5yW?0@BPL<)?2R%#(7x+ z#gZ%vcdVCxHJGl1iY~vN^~b9Jv9e%C%s%bNFp!A|86l=CYg%YPl*TKQYN!A6V_sgVv+6|9x3hQ)> z70`oXoJ61~!nYvc)*!P+KDcnTkoPmFQ}RJd?})jc*;K;x9V5=~$>e(8m#qAR;?c#E zCEZXHk%3?eXr{|!l<#h3Hs}~$pAqm=qI3cFYXLR^_FFhF&Zr+Z>!a94qsib*nb6AY z2LzYFRt?ijWHH%&IIBr->c&qppMEd|hp2!lG-zTsRpl7Kwouad~B>wpelJxwF)pi{1-&O`bedLnRo z&T1w|)ciW+OwZV&%2Wde!Lq(UBreBK`wVN1j)g_+;rJ(^FHi$hsWgd!d>kv=uAKaW zzNo->NxkdPL9CZmrJLc^35Lup9B<^g}M9)uz1sf5Y z{8B6SYcW@&H1q>%nxWys;r-Bnl9?Q}wCYcdno%CY51tL!aPU~vJivFiNSG!7#ssIb-kSkw-bcG&2l1Di4;K!iehICiZD? zzq^)-yS7!Z-a-a%dH46dQ5CtUhk8xBKq-AY=G zyMtn&YB(JKS_!PYx@sUEqs?SwXAR}tyB__R)Dr5*E7Geu;#EajImn<^w^r1}-eB4e zOrxw;zNx`w$F%{udnuRUtMqNMs;g`H2pE8-ALC4TAKDe>MMx46n^o(oldqv!)xp4Y11)2Am+FC}D zZ%ntOVX%ye_rKN5{2D~38qXsV=G(cDN3r8CikeG8haB1SlRdX^(3+|D*P7XG38LLo zfS>-9${;>k!&c+)5h3QV^G+W$gw0S)5= zRtNSHK#)7Hz_~NML3t0@7-=AP`p#+0_1m^^;Rkf;9+#`>6m1&-4iWBVG}2{y*phKW zlq49+X%3LXra{9AM$NkUZmVJkO|+Oiy&LUho$62+(q=kSC9u=j@c zce*ZA=ExJJEa^kY01GYwSpN+c+GZBN#!ukYt^k8upa(+e9Rop@NnGM?5Z)Jp`X|yW zfAeo#;PNosXw~&;3pkLW!kh`nzfozJv)Oa1<#gLF`cFWj!EQ0j>-H=F^~llCv^Jn6 z5Yo?c-68{#>tFb!B2xtl(TclJ<4n<)$YbeSBUz^@wv^6i zfV0uW>q?5_!mZ`@>|%ca0hF4buJW8_J$Yv}HBm}IeCf-ipvoGn%)Zk;b@+s-Oi)5Z zBJZ4;%g)~IkkR%Q$jm<@33@QFHHeS(Z9u(8+X)9AJkmcBA9>gN4->5>*f zX;@eU9*}O91(cKyX%&!=?(SA%N$HkOrIAn?1f(UTySw2GzyEpX3%%4~zBBiH(nxxk#pr>pf-by(cT@0I%x8_=J;o^YiC!NaFAFDRhhbEsze}=){o!H5WI3Ncg#`tRJhz zf2!OXhy+Ng6gejHk&|(9h!qR9(Na*Ndv~y*q&hN7-hr;g-<|oyaj2tJ9&*<)- zb7g)%mSk};jLOyBNec{*d()fY6`D2?FBY=X%mwk=W@9^m$Jw->E`PXOqjfSYA0buO za{n`>kNUlj^FEy*ykF$2kizsyNLm)>8Q^@R}`H$O}9CLo;TRMw5BIbquBKQY2u1VYu&2$Vg$jS z!XGe*rFn8HkPij(zk@*HAQ;b&&3?6wB@-lIIymPWtTIM=N4N3Sg&E|mvAF*BfYi2_hx#&EaF{NGh0>5g zQTm9H0g9tSX5IqCug03jtYW-EvPa8jwAHW_qBP~-uUMJ>rjih?>;JSL<|`m4uq|s} zEaRiN3G=mvytqJ4Qt_Fb5B3b$el3O4=fFrCQ<0-YVT4dbwROUnUNLWzKIt%ba!Ww(<(6o9W|Pt3~GXPgx}BpxCwRKA@_%5 zyNqXkdARxH@egQI$4$cEdF~^{nmu2FoBgW?Wcy7m2~c~`%SI}6e4=eu5#7Ht<0Xw{ zM!w&f`;VsSZOmM%sQ7CH|4)JW6ha7tBSBsFsE~XG^FBTfaaNI|Ld-M|%cB6I;GS6e z;dlfySMb7)`%3r`%6us@Br6AmXOg?+ofEHgfiQ&rdTA1L4?>E;g5sMIGxnHBI(2x7Y1 zT;>;6%kIR~&aoNv&^{`$37%?d^1hYpjCkZGE0Gum5m?U+&s#q>iBFTqJ`pG?Dm{?( zdLQ?JRkF&&f`?H~@iO2=!)z`?!g&5+jS!aUrpYy_Bgx_Fya+yk7uQ;dIw~BypXr|8 zZIM4b{Gx@qdr)NZQL*TnMXP9*Y?stM9ZRuF<*>r+qz6hX(biV6B@@;sg@$8RK1TNw zTN*Wu{nyg;%`(&&_F;3&e6ZAwwW)Gnq5sKi(U;XYv*@{v<9KS6MGu62LPv{cI z*<@D1*|H_|YxH@|5#dFcj@4}JmKHO-#qgtAz6#kM0Pi6O-SeW)^C+*Z6B?9QUCCU2 zf)jKu2_rZnVItR|Eqo<7&9@D?0*U5Tcxk6hE2>wB;Ixeke_0ciHwGe|qU2+Q9RJMv zUC%8-LEu99lf04hqXWf1A@v@~JKlQ3;I~LJtQ>}|JpQHLn@$Z=EVr1h*(YKxnbprp zfH+k9Y&9rR=m?_!`rDr$VQ#x4li%op8eATzLWhF+cUMtPb==1Muh-2Gv_kUi%Kn=d z)SR^)18LYdmW`5Z;H61hn4Y$gg3NO9Lj8+tq2GD)1md}HUAbnkMXyW8bqZ7d_=<7> zUF#C%K%@cE7JFgqpoJZ1`REy}_$pRJ0a6~HA6tv9@9{Xq+kt)aQFI=CSaf?IJPY4; z0i+Fa?7+TftHaf>!n<(EN)y0?(S>|kf^>gPs(UYF`j=FI-?yS}Ol^<7V9`gNJeBYH zT`TQzhUR)2$ajo~5*H)i!*C=E6gZ`4_^E@?IZH^y7Rh37U!T^kKpCK!+)42}BOkt` z?0Zdmtgby!Rp7P9iACD4;K zpmkef*S1AYRMj6bn<9Pp86qVv*r%)z8OwqG_MB>YS{&i?^;p_65l^*-?oaVQ4KL=S zG=AUQba)lK`r7@kZs1mAWoUklzT@FEI#>+O=$P?Kbqh57$%evfk=S0Ixz<1+xYFQz z?SnKsWp))r-p3CXjdTGK_^MzV9qh?Jr8~tH82M*tw2;thB#!%d0se69Hv6`}n%>yI zQH?SOX#dL~ED7hXA z8x31=V#SH=V-U%PLTEl@UkxxxM7z%9$-8N~*jH~pI&nWXdK2IjqaH@EpYacaoJt?I z16%p0G|~(9>yHM>8rC<=C_k1-cpB>QJeBn=v+-qu*khnQd9w7HeW`F*d%Zf&f+pF> zEhMV(Dz?;L{Kzrm>9Kw%%03>39LFPRFEG0ly{CC8a>d~w$!IMxnPyn{-0?1B_DQF8 z^3RaxLh^642AG|htPdPB(@NrdBSzfnjVsRqAOSwp7i~`17Yh2hZ1wVdOi0E{d(&q{1=~*uU#?iSL44t6GX4HHPzEmm-tB>E z>HAmTJNmWX^d4gxV`$Jk^rOySq_ksB2+3P+CHApeK#KVTGbvfT5DsQ!k>rmVh^g(M zpr|J8V>K#ds#WT-T)@cG#Kt@(*7Rg4X|V>`B~xr-SR5@O{~A** znF{&Pnp`Sfuu@D}1b-VH8M~Y~X*OYT0lotOXlrSb-dcQf8q2aA&opPVU2zwZ_k6k_ z?*qm0Xlv#c`m3C_f`3o9Z*;UahQzLj6$cROckAR;d%qmJryfO%siMe2cEn*ZCSVg! z+-h;hi)17fT&?ZwRUo2Cd*5J5pIRxC-geI7UhC0Kx%7tXcMTR(gO7CYIkn6#i(i_o zN{C82xB{AJghY@9>tIs^i;Y~XEz53?7Le1k8FHc8^>H7X)iC>h3cbL^#bpPy{*dBz zpqcVit#{lJQ?eoqsKhK3}l{%skeEp72O$~u;(xI}(0fVQSMD-DZMX7<>6ElMCG!lF)HSA!LOtY@4g zz$qX-eE2}9TA0?vJn4NRYou|B$2RkGWox>aHm-&0XiesUQ-26(eaMytd2SB_B+&Xi zc7J7hl**Mm_T==;#Nsm&k61HP;2r})b8cHcvVK3{l)=x@jnba*c4?%5hhM1a#X26u zzo^Nin?Tux!Yv;YQrI+?O7<$GvMIsJ-=G>pODBJ-S*S>T1cd>9Cn;SlB*NKEf9(dR zPpH~w@*XnZ19Jag;2-)R8%S$-dWmB5U$=Erv1sh_1Kwx35A*}LsY!3h<2p2kkR_Ry z{jc=pk1Vh*zNFn0;#)ipDl02h6B2+_bXV;}Qr)wwB_~`?w)a-ZT*V{D))dz_qe-v z29a_5$70Hb1)<3EN$|6$S6HAG~UgCo#)L>Fs=c#Fwuyq=dYJ2FO-nS$>3;~+VbLTb+3QXJ z{k38FGF1>@swV%X47n5d{fSJqeZ;0XwjgUix34ho)0?~9*bB^t|MN$053OHMJ03C0 z5kXo73f?8N9g0sih04Bd0cg~Pp~LBO>Peg8cHpL1EOlDJGjH

    Hq^U;lLhlz@G7%u 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%0Asv#=}@Q!*tBGC``4 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

    Gg|vBn3TcxobCEXX{1$1G2+}6sNSoZP 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�A=ijvICJNCh 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�*Ix*6eO0DV1hOiewyZBz5-ek07b6kknAO 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

    xjqDp8*(me3ex4?u4+ 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

    L{3rqMlU!cAjZ!_Yc+nv*T& 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

    QaNiyF{ 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

    78!c6KHF}ax`*un8-kHe}Zh0Q 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≻&?#F9W9T{YouB7%pxurb^aSi_5+S}IJDrO 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

  • `BAY#5?i;PG;9T1 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 diff --git a/forge-gui/res/adventure/Innistrad/maps/tileset/inn_buildings.atlas b/forge-gui/res/adventure/Innistrad/maps/tileset/inn_buildings.atlas index a08b774f09f..5fdcf47cae9 100644 --- a/forge-gui/res/adventure/Innistrad/maps/tileset/inn_buildings.atlas +++ b/forge-gui/res/adventure/Innistrad/maps/tileset/inn_buildings.atlas @@ -632,4 +632,13 @@ crescentus size: 32, 32 lodge_1 xy: 272, 528 - size: 16, 16 \ No newline at end of file + size: 16, 16 +dark_forest + xy: 416, 496 + size: 32, 32 +abbey + xy: 32, 80 + size: 32, 32 +parish + xy: 352, 368 + size: 32, 32 \ No newline at end of file diff --git a/forge-gui/res/adventure/Innistrad/maps/tileset/inn_main.tsx b/forge-gui/res/adventure/Innistrad/maps/tileset/inn_main.tsx index 3183138d35a..dc896ca900d 100644 --- a/forge-gui/res/adventure/Innistrad/maps/tileset/inn_main.tsx +++ b/forge-gui/res/adventure/Innistrad/maps/tileset/inn_main.tsx @@ -54,6 +54,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + @@ -121,6 +146,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -208,6 +267,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -293,6 +392,16 @@ + + + + + + + + + + @@ -328,6 +437,11 @@ + + + + + @@ -898,6 +1012,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -974,6 +1125,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1039,6 +1227,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1902,6 +2115,21 @@ + + + + + + + + + + + + + + + @@ -1946,6 +2174,26 @@ + + + + + + + + + + + + + + + + + + + + @@ -1975,6 +2223,26 @@ + + + + + + + + + + + + + + + + + + + + @@ -1986,6 +2254,26 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/forge-gui/res/adventure/Innistrad/world/biomes/inn_approaches.json b/forge-gui/res/adventure/Innistrad/world/biomes/inn_approaches.json index 3285fc95ded..566b960d608 100644 --- a/forge-gui/res/adventure/Innistrad/world/biomes/inn_approaches.json +++ b/forge-gui/res/adventure/Innistrad/world/biomes/inn_approaches.json @@ -31,6 +31,7 @@ "Borderland Ranger", "Escaped Skaab", "Falkenrath Neonate", + "Hobbling Zombie", "Howlpack Exile", "Loam Dryad", "Missionary of Saint Traft", @@ -46,7 +47,9 @@ "inn_ulvenwald_village", "inn_Cave_river", "inn_lodge_1", - "inn_forgotten_lodge_1" + "inn_forgotten_lodge_1", + "inn_dark_forest", + "inn_abbey" ], "structures": [ { diff --git a/forge-gui/res/adventure/Innistrad/world/biomes/inn_gavony.json b/forge-gui/res/adventure/Innistrad/world/biomes/inn_gavony.json index 2acd34b21cd..1da750563ef 100644 --- a/forge-gui/res/adventure/Innistrad/world/biomes/inn_gavony.json +++ b/forge-gui/res/adventure/Innistrad/world/biomes/inn_gavony.json @@ -26,8 +26,13 @@ "DarkGras" ], "enemies": [ + "Gavony Farmhand", + "Scarecrow" ], "pointsOfInterest": [ + "inn_abbey", + "inn_gavony_chapelry", + "inn_gavony_parish" ], "structures": [ diff --git a/forge-gui/res/adventure/Innistrad/world/enemies.json b/forge-gui/res/adventure/Innistrad/world/enemies.json index 583e50e85e4..789eb791e85 100644 --- a/forge-gui/res/adventure/Innistrad/world/enemies.json +++ b/forge-gui/res/adventure/Innistrad/world/enemies.json @@ -459,6 +459,59 @@ "BiomeRed" ] }, + { + "name": "Gavony Farmhand", + "sprite": "sprites/enemy/humanoid/human/peasant/farmer.atlas", + "deck": [ + "decks/standard/INN/inn_peasant_easy.dck" + ], + "ai": "", + "spawnRate": 0.7, + "difficulty": 0.1, + "speed": 25, + "life": 17, + "rewards": [ + { + "type": "deckCard", + "probability": 1, + "count": 2, + "addMaxCount": 3 + }, + { + "type": "gold", + "probability": 0.7, + "count": 70, + "addMaxCount": 80 + }, + { + "type": "card", + "count": 3, + "colors": [ + "White", + "Green" + ], + "rarity": [ + "Common", + "Uncommon" + ], + "editions":[ + "SOI", + "DKA", + "ISD", + "AVR", + "MID" + ] + } + ], + "colors": "W", + "questTags": [ + "Human", + "Humanoid", + "Peasant", + "IdentityWhite", + "BiomeWhite" + ] + }, { "name": "The Gitrog Monster", "sprite": "sprites/enemy/undead/zombie.atlas", @@ -523,6 +576,58 @@ "Gitrog" ] }, + { + "name": "Hobbling Zombie", + "sprite": "sprites/enemy/undead/zombie_2.atlas", + "deck": [ + "decks/standard/INN/inn_zombie_easy.dck" + ], + "ai": "", + "spawnRate": 0.7, + "difficulty": 0.1, + "speed": 18, + "life": 10, + "rewards": [ + { + "type": "deckCard", + "probability": 1, + "count": 2, + "addMaxCount": 3 + }, + { + "type": "gold", + "probability": 0.7, + "count": 50, + "addMaxCount": 80 + }, + { + "type": "card", + "count": 2, + "colors": [ + "Blue", + "Black" + ], + "rarity": [ + "Common", + "Uncommon" + ], + "editions":[ + "SOI", + "DKA", + "ISD", + "AVR" + ] + } + ], + "colors": "B", + "questTags": [ + "Undead", + "Zombie", + "Humanoid", + "IdentityBlack", + "BiomeColorless" + ] + }, { "name": "Howlpack Exile", "sprite": "sprites/enemy/humanoid/werewolf/werewolf.atlas", @@ -950,6 +1055,61 @@ "BiomeBlue" ] }, + { + "name": "Scarecrow", + "sprite": "sprites/enemy/humanoid/construct/scarecrow.atlas", + "deck": [ + "decks/standard/INN/inn_scarecrow_easy.dck" + ], + "ai": "", + "spawnRate": 0.45, + "difficulty": 0.1, + "speed": 10, + "life": 20, + "rewards": [ + { + "type": "deckCard", + "probability": 0.75, + "count": 3, + "rarity": [ + "Common" + ], + "addMaxCount": 2 + }, + { + "type": "deckCard", + "probability": 0.55, + "count": 1, + "addMaxCount": 2 + }, + { + "type": "gold", + "probability": 0.3, + "count": 13, + "addMaxCount": 80 + }, + { + "type": "card", + "count": 1, + "rarity": [ + "Common", + "Uncommon" + ], + "editions":[ + "SOI", + "DKA", + "ISD", + "MID" + ] + } + ], + "questTags": [ + "Artifact", + "BiomeColorless", + "BiomeGreen", + "BiomeWhite" + ] + }, { "name": "Sigardian Priest", "sprite": "sprites/enemy/humanoid/human/cleric/monk.atlas", diff --git a/forge-gui/res/adventure/Innistrad/world/points_of_interest.json b/forge-gui/res/adventure/Innistrad/world/points_of_interest.json index 4991e7ee5a3..59dace85ed3 100644 --- a/forge-gui/res/adventure/Innistrad/world/points_of_interest.json +++ b/forge-gui/res/adventure/Innistrad/world/points_of_interest.json @@ -1,9 +1,51 @@ [ - + { + "name": "inn_abbey", + "type": "town", + "count": 4, + "spriteAtlas": "../Innistrad/maps/tileset/inn_buildings.atlas", + "sprite": "abbey", + "map": "../Innistrad/maps/map/Innistrad/towns/inn_abbey.tmx", + "radiusFactor": 0.8, + "questTags": [ + "Town", + "TownGeneric" + ] + }, + { + "name": "inn_gavony_chapelry", + "type": "town", + "count": 10, + "spriteAtlas": "../Innistrad/maps/tileset/inn_buildings.atlas", + "sprite": "parish", + "map": "../Innistrad/maps/map/Innistrad/towns/inn_gavony_chapelry.tmx", + "radiusFactor": 0.8, + "questTags": [ + "Town", + "TownGeneric", + "BiomeWhite", + "Sidequest" + ] + }, + { + "name": "inn_gavony_parish", + "type": "town", + "count": 4, + "spriteAtlas": "../Innistrad/maps/tileset/inn_buildings.atlas", + "sprite": "parish", + "map": "../Innistrad/maps/map/Innistrad/towns/inn_gavony_parish.tmx", + "radiusFactor": 0.8, + "questTags": [ + "Town", + "TownGeneric", + "BiomeWhite", + "Sidequest" + ] + }, { "name": "inn_Cave_river", "type": "cave", - "count": 15, + "count": 12, "spriteAtlas": "../Innistrad/maps/tileset/inn_buildings.atlas", "sprite": "Cave", "map": "../Innistrad/maps/map/Innistrad/cave/inn_cave_river_entrance.tmx", @@ -17,7 +59,7 @@ }, { "name": "inn_crescentus", - "type": "town", + "type": "capital", "count": 1, "spriteAtlas": "../Innistrad/maps/tileset/inn_buildings.atlas", "sprite": "crescentus", @@ -28,6 +70,21 @@ "BiomeMoonlight" ] }, + { + "name": "inn_dark_forest", + "type": "cave", + "count": 10, + "spriteAtlas": "../Innistrad/maps/tileset/inn_buildings.atlas", + "sprite": "dark_forest", + "map": "../Innistrad/maps/map/Innistrad/inn_approaches/dark_forest.tmx", + "radiusFactor": 0.4, + "questTags": [ + "Hostile", + "Cave", + "BiomeColorless", + "Sidequest" + ] + }, { "name": "inn_forgotten_lodge_1", "type": "dungeon", @@ -92,7 +149,7 @@ { "name": "inn_ulvenwald_village", "type": "town", - "count": 10, + "count": 6, "spriteAtlas": "../Innistrad/maps/tileset/inn_buildings.atlas", "sprite": "ulvenwaldtown", "map": "../Innistrad/maps/map/Innistrad/towns/inn_ulvenwald_hamlet.tmx", From ab49e9779738272478192fcb0e847bfadaf09a02 Mon Sep 17 00:00:00 2001 From: shenshinoman Date: Fri, 8 Aug 2025 16:36:17 -0400 Subject: [PATCH 021/355] Expanding my Innistrad further. new enemies. New maps. Second biome is partially populated. Everything is contained to innistrad plane, so should have no impact on the main game outside that plane. --- forge-gui/res/adventure/Innistrad/config.json | 88 +--------- .../map/Innistrad/towns/inn_gavony_parish.tmx | 150 ++++++++++++++++++ .../res/adventure/Innistrad/ui/inn_shard.png | Bin 123808 -> 1367410 bytes .../adventure/Innistrad/world/enemies.json | 2 +- 4 files changed, 153 insertions(+), 87 deletions(-) create mode 100644 forge-gui/res/adventure/Innistrad/maps/map/Innistrad/towns/inn_gavony_parish.tmx diff --git a/forge-gui/res/adventure/Innistrad/config.json b/forge-gui/res/adventure/Innistrad/config.json index 8118b5b6b0d..3fe454ec59c 100644 --- a/forge-gui/res/adventure/Innistrad/config.json +++ b/forge-gui/res/adventure/Innistrad/config.json @@ -7,96 +7,12 @@ "colorIds":["W","U","B","R","G"], "colorIdNames":["tr(lblWhite) [+W]","tr(lblBlue) [+U]","tr(lblBlack) [+B]","tr(lblRed) [+R]","tr(lblGreen) [+G]"], "restrictedCards": [ - "Black Lotus", - "Mox Emerald", - "Mox Pearl", - "Mox Ruby", - "Mox Sapphire", - "Mox Jet", - "Ancestral Recall", - "Timetwister", - "Time Walk", - "Command Tower", - "Arcane Signet", - "Opal Palace", - "Path of Ancestry", - "War Room", - "Commander's Plate", - "Campfire", - "Cloudkill", - "Command Beacon", - "Commander's Insignia", - "Forge of Heroes", - "Imposing Grandeur", - "Jeweled Lotus", - "Myth Unbound", - "Netherborn Altar", - "Sanctum of Eternity", - "Stinging Study", - "Study Hall", - "Witch's Clinic", - "Time Vault", - "Sol Ring", - "Mana Crypt", - "Tolarian Academy", - "Tinker", - "Demonic Tutor", - "Vampiric Tutor", - "Bazaar of Baghdad", - "Library of Alexandria", - "Mana Vault", - "Fastbond", - "Mishra's Workshop", - "Yawgmoth's Bargain", - "Gaea's Cradle", - "Commander's Sphere", - "Drake Stone", - "Wrenn and One", - "Under-Construction Skyscraper", - "Temur Elevator", - "Slumbering Waterways", - "Omenpath to Naya", - "The Heron Moon", - "Gobland", - "Fetching Garden", - "Mox Poison", - "Wisedrafter's Will", - "New Master of Arms", - "Halving Season", - "Questing Cosplayer", - "Teferi, Druid of Argoth", - "Anax and Cymede & Kynaios and Tiro", - "Call from the Grave", - "Mise" ], "restrictedEditions": [ - "HTR", - "HTR17", - "HTR18", - "HTR19", - "HTR20", - "PCEL", - "HHO", - "CMB1", - "UST", - "UGL", - "UNH", - "PPC1", - "UND", - "PUST", - "DA1", - "UNF" + ], "restrictedEvents": [ - "LEA", - "LEB", - "2ED", - "30A", - "CNS", - "CN2", - "CMR", - "CLB", - "CMM" + ], "allowedEditions": [ "ISD", diff --git a/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/towns/inn_gavony_parish.tmx b/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/towns/inn_gavony_parish.tmx new file mode 100644 index 00000000000..b81aaacf408 --- /dev/null +++ b/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/towns/inn_gavony_parish.tmx @@ -0,0 +1,150 @@ + + + + + + + + + +23560,23682,23681,23559,23560,23682,23681,23681,23559,23560,23682,23681,23559,23560,23682,23681,23681,23560,23682,23681,23559,23560,23682,23681,23681, +23559,23682,23687,23683,23559,23694,23559,23560,23681,23559,23682,23687,23683,23559,23694,23559,23560,23559,23682,23687,23683,23559,23694,23559,23560, +23559,23682,23549,24052,24047,24048,24049,24052,24047,24048,24049,24050,24052,24047,24048,24049,24052,24052,24047,24048,24049,24050,23682,23681,23566, +23559,23559,23421,23924,23919,23920,23921,23924,23919,23920,23921,23922,23924,23919,23920,23921,23924,23924,23919,23920,23921,23922,23694,23559,23682, +23559,23682,23549,24052,24047,24048,24049,24050,24047,24048,24049,24050,24047,24048,24049,24050,23920,24052,24047,24048,24049,24050,23688,23681,23681, +23559,23683,23564,23924,23919,23920,23921,23922,23919,23920,23921,23922,23919,23920,23921,23922,23920,23924,23919,23920,23921,23922,23420,23686,23560, +23559,23421,23422,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,23420,23565,23566, +23682,23549,23550,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23548,23693,23694, +23559,23421,23422,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,23420,23565,23566, +23682,23549,23550,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23548,23693,23694, +23559,23421,23422,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,23420,23565,23566, +23682,23549,23550,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23548,23693,23694, +23559,23421,23422,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,24048,24049,24050,24051,24052,24047,23420,23565,23566, +23682,23549,23550,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23920,23921,23922,23923,23924,23919,23548,23693,23694, +23559,23421,23422,23543,23543,23544,23545,23546,23547,23543,23544,23545,23546,23547,23548,23547,23543,23544,23545,23546,23547,23548,23691,23565,23566, +23559,23549,23683,23553,23554,23555,23554,23555,23553,23554,23555,23422,23415,23416,23565,23554,23555,23553,23554,23555,23553,23554,23555,23693,23694, +23682,23561,23681,23681,23682,23683,23682,23683,23681,23682,23683,23550,23415,23416,23693,23682,23683,23681,23682,23683,23681,23682,23683,23559,23682, +23559,23560,23682,23681,23559,23560,23682,23681,23559,23560,23682,23422,23415,23416,23565,23681,23559,23560,23682,23681,23559,23560,23682,23681,23681, +23682,23683,23681,23559,23694,23559,23682,23681,23559,23682,23561,23550,23543,23544,23693,23682,23681,23559,23682,23687,23683,23559,23694,23559,23560 + + + + +0,10502,10503,10823,0,0,10822,10503,10503,10823,0,0,0,10822,10504,0,10502,10503,10504,0,0,10504,0,0,0, +0,10823,0,0,0,0,0,0,0,0,0,0,0,0,10822,10503,10823,0,10822,10503,10823,10822,10504,0,0, +10823,0,0,0,14390,14392,14390,14390,14392,14390,14390,14392,14390,14392,14390,14390,14392,14390,14390,14392,0,0,10822,10504,0, +0,0,0,0,0,0,0,0,0,33008,0,0,0,0,33008,0,0,0,0,0,0,0,0,10822,10504, +0,0,0,0,0,0,11342,11342,0,0,0,11342,11342,0,0,11342,11342,0,0,0,0,0,0,10664,10820, +0,0,14231,0,11339,11181,11500,11500,11181,11181,11181,11500,11500,11181,11181,11500,11500,11181,11340,0,0,0,0,10662,0, +10665,0,14231,0,11495,0,0,0,0,0,0,0,0,0,0,0,0,0,11495,0,0,0,14233,10662,0, +10818,10665,14231,11339,11336,11340,0,14534,0,11337,0,33008,0,0,33008,0,14846,0,11495,14527,0,0,14233,10662,0, +0,10660,14231,11495,11653,11495,0,11337,0,11494,11181,0,0,0,14682,11181,11336,11181,11338,11182,0,0,14233,10822,10504, +0,10660,14231,11495,14839,11336,11181,11813,0,11495,0,14523,33008,33008,14523,0,11495,0,14843,0,0,0,14233,10664,10820, +10502,10823,14231,11494,11182,11494,14846,0,11180,11336,11181,11182,0,0,14681,11181,11336,11181,11338,11182,0,0,17592,10662,0, +10660,0,14231,11495,0,11494,14845,11337,11180,11652,0,33008,0,0,33008,0,11494,14844,0,0,0,0,10664,10820,0, +10660,0,14231,11494,11338,11336,11181,11336,11181,11336,11181,11181,11656,11657,11181,11181,11338,11496,11181,11182,0,0,10822,10504,0, +10818,10665,14231,14843,0,14841,0,14843,0,14845,0,11654,11658,11659,11655,0,0,11653,0,0,0,0,17592,10662,0, +0,10818,10665,14390,14392,14390,14390,14392,14390,14390,14392,14390,12419,12419,14390,17278,17278,17278,10664,10665,14390,14390,14391,10822,10504, +0,0,10818,10819,10819,10819,10819,10819,10819,10665,0,0,0,0,0,0,10664,10819,10820,10818,10819,10819,10665,10664,10820, +0,0,0,0,0,0,0,0,0,10821,0,0,0,0,0,0,10824,0,0,0,0,0,10818,10820,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,13687,0,0,0,0,0,0,0,0,0,0 + + + + + + + +0,0,0,0,14859,14860,0,0,0,14859,14860,0,14859,14860,0,0,0,14859,14860,0,0,0,0,0,0, +0,0,0,0,15017,15018,0,0,0,15017,15018,0,15017,15018,0,0,0,15017,15018,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,17278,17278,17278,17278,0,0,0,0,0,0,0,0,0,0,0, +0,14855,14856,15316,15315,15315,14525,14526,15315,0,0,0,0,0,0,15472,15314,15475,15314,15314,15316,15316,0,0,0, +0,15013,15014,15316,15315,15315,14683,14684,15315,15315,0,0,0,0,15315,14690,14691,15474,15473,15315,15316,15316,0,0,0, +0,0,0,15316,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15315,15316,15316,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,14530,14531,0,14847,12623,0,0,0,14527,12623,0,0,0,0,8433,0,14859,14860,0, +0,0,0,0,14842,0,14688,14689,0,0,0,14845,0,0,0,0,0,0,0,14682,8278,8278,15017,15018,0, +0,0,0,0,0,0,0,0,0,0,12623,0,0,0,0,12623,0,0,0,8275,8276,8277,0,0,0, +0,0,0,0,14842,0,0,0,14841,0,0,14681,0,0,0,0,0,0,0,14841,8279,8281,0,0,0, +0,14859,14860,0,14839,0,0,14843,14842,0,12623,0,0,0,0,12623,0,0,0,14523,8437,8439,0,0,0, +0,15017,15018,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14681,0,8432,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,14078,0,0,14080,0,0,14841,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,14236,0,0,14238,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14859,14860,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15017,15018,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,33573,33574,33575,33576,0,0,0,0,0,0,0,0,0,0,0, +0,0,17435,17278,17278,17278,17278,17278,17278,17278,33601,33602,33603,33604,17278,17278,17278,17278,17278,17278,17278,17278,17437,0,0, +0,0,17592,0,0,0,0,0,0,0,33629,33630,33631,33632,0,14532,14533,0,0,0,0,0,17592,0,0, +0,0,17592,0,0,0,0,0,0,0,33657,33658,33659,33660,0,0,0,0,0,0,0,0,17592,0,0, +0,0,17592,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17592,0,0, +0,0,17592,14390,0,14390,14390,14392,14390,14390,14390,14390,14392,14390,14390,14390,14390,14392,0,14390,14392,14390,17592,0,0, +0,0,17592,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8434,17592,0,0, +0,0,17592,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17592,0,0, +0,0,17592,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8913,17592,0,0, +0,0,17592,0,0,0,0,0,0,0,0,0,32937,32938,0,0,0,0,0,0,0,0,0,0,0, +0,0,17592,0,0,0,0,0,0,0,0,0,32965,32966,0,0,0,0,0,0,0,0,17592,0,0, +0,0,17592,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8913,0,17592,0,0, +0,0,17592,0,0,0,0,0,0,0,0,0,14079,14079,0,0,0,0,0,0,0,3729,0,0,0, +0,0,17751,17278,17278,17278,17278,17278,17278,17278,17278,17279,14237,14237,17277,0,0,0,17278,17278,17278,17278,17753,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6340,0,0,4747,4748,0,0,0,0,0, +0,0,0,0,0,0,4743,4744,0,0,0,0,0,0,0,0,0,0,4905,4906,0,0,0,0,0, +0,0,0,0,0,0,4901,4902,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,3575,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/forge-gui/res/adventure/Innistrad/ui/inn_shard.png b/forge-gui/res/adventure/Innistrad/ui/inn_shard.png index 1b1382e3673638a7c3e5c3532af698ade072833d..8311189b31d04c2f19eaf43a27bc96e00a89e542 100644 GIT binary patch literal 1367410 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

    ;nYw%Jc+3M=x*kpgx+9*|#j3Mr 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 p|(L@&BxBf?$ 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 z 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

    f#WCeZl<>% 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

    3c+P$}dc+jMb=1m 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%0AAt;@Eo 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%0Aq=7&zsWVDTN7VaXP}#y<#2}dhG@NOoe~$t0 zj9LS@=;St;^oW-PDWimFlu{>Cds)dfKk1(XYhclvk(V;2=ZOxgFC6`~G-c^@!jt3F zBTuK%zgyfD73BB>?Ob|_a!fhuQ(G5yjf~XyF6G4e_l9x>{DpK*=i+tNchLy698MCoFFzV*?i>V(p&egPjKCZ7PgR_Q(^ffU z4rCsH^HmCJY!D5K8#-h9yWH!UE-HK_$Z%o)q_jvW&QEF5k$o2oQ}(NH4`~yf{y;L* z7HgN3MDu~QJuic?KK#oPPRMcxUWbK~Yxc>QYWhd1x*Hya3Hg+VFmLwk<6i_ibZ%#N z+|cR`MCbx@W6bKvX&p!0^)vouz!L(AICoI+ofBYU`(9%&gaYG2q z9{zWvp-wwZ^qi-ic&`_R!(mQ3>&@GfPRVdq}!lc`s!=0RfnMLplK!I`Nq=ovQ%Rhrn9}Jr(mMV*B;x=)5!r)dHUD>H|v&7G$ z0B_rx z^|0p6Iu#~T=f^(vGnXGw^eSyxkeYPSYaDwKhQDxwsw^^OcJx@rf>|+|{sv+7daKgK zl6m6?Hf>$svu%8d5T^bypT7CC>AolZnEDxziSchdsXB`NGj4HF7PojS%eXJsAXexN5-aM| z2a1+``MO)7KP^$M-P9l<;OK+0#r)ggcYWFAccp{G)Jt?Dn1js#ld=p|fT^JwpGUIq zGa<&_KN;O%vHw=Z10MJPx!#CBzrI1wY4!y|c{9kpxi1&|J~zMee%~={!l@q7Hw9~P zYIyt7kb0kcU+s8Z*MeXtdg?%+uyK+4=l8qk9|S)}yw9kC$JOsiqWg> zDE?*n7dcl#zPI~sOq|im92Ip`x(RgKaDm2o&s(hE}UAlCsqm)?V0RB1sA_WDTDS z1X?kj-(CxaFgDm=qHI!i`%9iJG@KcXl^T$uE*k9F z%U^3tA!AV7|3I?B_05#P0UWr<^3?V>oc(@$dI)e40Q?tG3~v(}Fx_*1XU($GRLsKl zQHBB66%t!1#VgJF7Mbsj8nV@3J?tqi8oLhwJPd5o9iOEiRcVpj)Q%})_w~)iPAh^5 z!UOL<2nye`rO49cl?*pDB}D8diyYAc!@_-$Sjf4epNhQj7WYd~eh|X>E?REk4{xrDDw&JICxHzQ$u6*u;9`1!*s>9O``NkW&O4x4pV{ zm7RGWEhx_(EkMfxfy6FgK5pt#24=B9i&;4=RJxJgu_PM$eiOVGf6Ud-W`F@ODP*%x z1u!M*6v5x-Uv#O!y^v05E$T7T16epG2wsOba++!B;@3IC3~Kas`w#sQ@2~_faI(;1 z*VG!r26OnO;PKGYMk~IX`Vzdw*I(Opfy7a!f59RbP}dfs(o8*P^c8sq=vKMe;qCb0iolNWNHdak9vv{+s{6j|fHT0R$)?SR<(gh!9tR7?fd@N3W+@7A47B3yOuCd{so} zwZ&hpwFZwUbAN^q?@li3-5`rp_wGO$2~;|Er!}_3AeO-JtJUOjV7 zUJ42hMFd+$&EHT$-kwPxgIK}=^HMAN={pCO+@}~@WMkq{=HKpt_1U8w08z6YFr@vg zSQYZ<%x~A$U|&Vc$Xdm1-C5%GaBcpkn_%4fZIj=~qDtZ8(8@c26DZ2}_M=6)z~s%I zJSdG6+^fsDNi??DF3XOWjTbmXEANFv`UO9f2_&5K*5#|*o0d`;->C@}P}Xl}J)z+# zN1RDTjKCJwXETmO#|J|6-X*>-o_F$SH31&y!J!=3nujcS`K9dE5~5@aNqY+v@6VSM}TmF0_UrPkF9G^s%3Xttp!vsWw*g-SIny zw*z;MuX}IEjf8dBizQEKqK*Ba?h+7PBNX}?@lBw%F|p9b-PY2yfQb|neB5INgz=jO zqxZYq=(jGCvmxGiNpdPDkZvdfaNVLEHJ``#iq`4u;GCs=VeNm9SgnavPH~^!&ta(Z z7op$n`_!2hh!tu?L!6+wBSiXhOzMHjy(ctNi6-IM4BTi;|D_jfPDS7mx2$BppHLM zL{3{4FJ!SxSyFe6I!L`Nn%lj^8toZ>1)Ba!_{Z`iG9^K5MIl?|>;O;Zwi1NNv9?4k zvt{v7LihfSvAb3!S2XeYUN_#d*F$(Qm1v2O^Fc<43A!J7d2rxMdsMqy(V@+T7QmvFakgEatDnl2=~2y zB>p|sW|(c)O)<|SpYm7U8ff$il%+5bI=TSaj^o|m*65bjk432nuzi9+%e=AA*SlJ- z6|I`=nsr-NVZXKc$G*%jf{Yu{)izg-t!hxT^ z(D3I4#cnUE;iuPb^3UvaiJl|-~n!t z@=@{h%lp9O5tElboZhvm7@Fh8o@W!<$2`f4V-?U6Dz+vDB24^Wl*wfGzgUsSqeRyy z`1$UUQs81M3SZMaf??lg$}~9=)T}k%Vf+^M5xDk7vT0K_RmO{tCelh-GXwoyV7+Vdot)wG zoiCr$d&)E_XZTy#k#uXRSIfE4XN~O#OmSAeZO9;gsjN5?JTXtpw>J{1=NJtOP|Hb4 zFE%%mSz)N2vQ+uNB55lFnifgeU%~6s77hLMi1!_7z#7$lgv7mg+J!H)8H9kk*o0f| zfbNjjC@#f=-Lbd$JaaQFm`z-uO9C*5(xaN%bjOXi)#~75qXbzDRZ_yjHXpYLH6T9h z*grCjdmj-%vWw}Ze6FNG7{7aMwF4mok2XWW$zJO&(La2m?jpMWxF}#iIbY`r2}Jc>-|r>lA*%}b_Nl(G5vA^PAPIZPf>9=xKII9}$Ab0hSY*{{>J{rfxD14gr?&AHj8kzmQHO`MCAl<5y zm^vxgvn+^Ju`j*7=b=l2??)4`l3M5SZ^Az?3JaTU*v8$RiQv>#Z5Gu>5S+)qK)dUs|M5D~vHi+^7nOi+CDncr^#Cni_~I zJ`n3lTBQEg(T3?V3DVOqy${hW%z<6{FQBp1I3zt+kZFK=3iU_H4dy?|-s@oGIuSKb zR8}p(XCk!K6XDwPwxe&x(zDrEr^!CXAst*P3V!r0GdCP?XKb-wKwCGhB2Ozs@8uxW zps5!DjbWGD#n~7y5Dvo!ZA{PIH4Mc`C$((bDFj?(D@2iIgu^yJ{iMHC&Uc9V{?LWg zo9RD`-qQ@K>r=2HX*jDzV>&)b=_g9`jOzoCF}-9;GQ61dufRQ$9mejg_jepT!L?#`XUcru-KZtu07&TTH}vhQPIUnnqvek!*{-+>h&>`$CYk*QKhcY+VbU%Fh$zA6%7 zqR)ao2@`2nFl+Zoem9E{Wmhos{W>6H^2_^doLO=-FGxDX6XFD&+{EA*mPXJOsUiNC zQ8y`UteXk}LpixUjC+b>qEFdwH6 zdVI5;0e=Jc!4rAABZLZCy0vNuyqDJNxc*$VE+gTI%JJ+TAh>1sX91NNqhFxg{W@U& z`S$+f-4S<>C10-Xdym-_2S17Cq}q=BbAosK#M_H=yH7h=J?!gn??Vb1b3`Axxb|!t z7Jl60;jvRYNs_@s_MD*QIdt+7rHc$bK4^e~EA!DCF?iCF**#I94cVLRSd;LNC=lfQ zB)Wb=L_&=J97)k?Z?EU{s%26qG=&x-UGGfqE1x_=7%TJLT<)yabk{aQBz=wh_AM7R zF1_UvjuPcyt4Zb^%^qV^8u#}x*LUaAk|Z*yOQs6qKAPBh;w&TV#!2utLDvITVG`&Q z4Wz%qvQQ*v*K@DKyY9xxaO7wz=;LNIsgf zS(#I2=}-3B^gRk1BvlEu#x4t)ZTfNGzgLV%jk-!CIsAgTK_>+Wu*NJ1^W_yexOWNT zca;WjkdrajPewM;4y#3h)uyPFeSg|^Sw|Nd?op)OUjdkX--5O?SvLX;rXtvj z4LEwV)&nnd)(VXS*>J@EQaoy&1wBWs1^#0}HU;wpcG1w#LEQ|^COH$I{Pu3bpH7sP zy)9vh3t+$J2s)%tR#w-s1=Th0a0jY@ZB)xZ=RMYYX;z&WGl4&ge(~<>a(O?65^N?p zAN-B34ROaqS%qJiyKF^;^R7AuC~z%%h>^|ao?5%VaH~cw6>$W90NwRXF8l#fF(C{4 zK`%YKu{|&1fi9UeC$r+H5*g&ddXPO76N2rP%9{eva1qgZ|E1|VWwxLC8u$ojJPd=qG|9h8QAEPQym8F#WF2VL!ZHy!MYy+?S zh%A+vBh>HPu<%>ns`Gi?!eeJ26>8(1%NgT!!13o&wJ974B+blx;Uw!B${~Y|lQ;4V zGRZqanx`P)x{Nv6-Q0g~cbX-SvY@Va%TOK`m4R#K+*rcNMB9N5DPaVPIllU6m>(5_ z0Aku#z$RL0`~&*)XbPc~ToA$0(L>E9zBK zl{^EmRdS%m&kbYQ4%LtKn_}%9k;VEsCbCT#HF8jcs9g^vcNduOxD(aaL67|=lP_m& z7Y#JyqZ3wL95J9OKTG3b?ZYF(6nvSX28LZwC?Z$~6B}<3v zV_##V@3}~@t>Mo_z5fk-(z=YVIN&3}IgPZw+qa4_mWW>}>g%iYgd3`+wFy{ZNa`!g zZ&TM>_mAv${XI%3IM~0$^3JQz&3$9GvDa+D(6}BYBWvn?ESR;radR@S8>1n}`$UuI z7-`gT|2RwI<(dt&Je8`XhiPXqk(!!G*0>;iGc?54$`vX2H%G0=rVt{*YL6~u-=gYM zi@_JNA4A9g>~?(A9CfYy!oFV|Yc(__zV^A_2RDB^kz-X_1+;^F6*JtC&QdrzYC?h~}+8jex{zMVg%Nb##gi@fqSqASE_ zEeH|tWOA#5-EU3-M64|(uSXB02lFBm z63j6#5J)~U?HHFYnlbz$7T#R1vF(kqg4#@oW$gv596mi=8mt1Q8=uRQEuYIeh?rdf zuQW>F!@LqM@7y0-Ep61*>b&l6D{F3UVoOgV)c8;uqD?qC>o7 z2Z}r;G2sPDyQAo@g;x}ryOxyASm=E;rJ6^N0>nbg4^=X67??9Yt-RkBKuw0mn;(k! zdm7X23k{iBYfKZK;a&;6hQgnFUB@>QJ?bcHg`=wWWiEbc%9e5r<6~Ynnr|EvgxviY z-4v$(4)oaHjWAZdv0fbz3jJUmRd{!F-^?Mpj#B{`%yJvawLcIYEU&k7}d$*+kStX6$lV2V$vAvx&>%QId*yC+k%mG$0Sunb!O2%k{Mv$|EUae*e!PCEb z$tLU*Zn@>~??<`;{+uUgO6=T0tDYn})P#Bz-GpqG%47}tUG!enbj@;A0_`7dS15u; z+6-3Ej~rYBEQ|BVe0V@W732m$-D}&sNy`tveu+d_n1+IsB|ncLlwwybN|dPS1Ik3`_|zUdM{RW;_qc!sHF?qlVDezye~iYrvy;Rj>{HKukSs9rZt~T z^3<5Y@~7N`+-oOuq52)(yiierJ|snTS!=P5~sIt2?_CWBki2 zC^U}gvp(_oA&vPF^Y@U=_hr~57~7MEU2Jf>#VJd}^uu2U*x(NO+2a-qv)gveiE0J& z&DP)i4RwNuDvV_XN~x;{sn5Q(1U#OVSLC>uyxv+7)m`dqroJAX(YN3HiN2mw%pu;h z+D~p!u6Kzwl*t*W6R-HS5da5o}4=eWkK)OGLaw0k#lD#q*w zIit8u06PB3mSCn+4V2LG()edlp_PKs)*?uSP^sZo>=yd#DzhURpxISGY*E(M6=5Qj zr^=43tzp^LNZryJ?~*jl7U`4HDA|C^N)Qap*3Zc`^gzQFA|sxGDAA4_F=}xmw&oS| z|HWnC(C$W6WEhblG6HnL)YdM!{VzM%5lQ`*)GwgK&lE1HE5VRXG>Kp{X0kojCTzKv zw~^xrFFFPO|;DTn!41vE~0&CrC@U?Jrwnrtdwe}yxE2n)x8pZv+Va%>T2)iDq zy#v5PCahN0Ofq1-3_v{PN&+FPW}QFz9cQSlmhD`ibAv!cC|ss`Rjy&wPA(6IC7yskoySFOBGOv$LHdnl}wB!T-@>Gd1Df zIa6xs;fJSR2jfnB={ObUjgN7}L6&rPt6v=YL4s_u>M0Wrs)LAwxRXAeu^2K$C_vsg z)cb-vnuA~1tse7`0soMvh$gV`YSB{v)HD?<*(Nl7(ZxwWpEIh6#{-qH5+e6AqqDai z5M7D0D!21~XIC4~#s+MfC&x|vBFon@;E2y<7j)S!M68^Nl#NiO;G%D+AFCW=nMSEw zl*8ynXQ}vYX47WK$d=+ZM33IE!X{AvAMiQI zgm*%?iE_}Ji^8YlgFhnGhbbm{l@{+G*14&cMsjy>S2I*=4KHHNM5N4vi*x|!WcR_} zoumW~#JXZ-@T_~dg_Qy;;%Rh1Yj?T#1a|RgAHG#FqJ!q*L#OxfR88V`3#=azs&SLM zHAd8lgW8+%)@V_@!hvqJeL|sgwXoXJlw4HN>kWcmkLLZY1Q=$d59%rI(uy%K_^uN_~dzC-Y0cXn5dM$r$3*BE4JM(_#@hiNjp;dWVIV=Jz_1K-R=+ z_Bs+De&$!JLyE3s!a{vr$)5}0ti$IhIt5!mAj-W2Zw@s(i%M^ec@qjY6X`0 z7`>koqga4X+7rb2TpgQC`QWfZg%@(pLDu8IgaB%G-mN!mzm#G(igN7a7)xM%&>wu* zi3dS6*1ZqCf>ca=UKRgjc`MI$L6jmXaxP@x_=`z7Fc{ zKrG#yASM%dKxyznordj7tATf5Scfop8exIoL&h)o<2hwG$%$nO%~0t^*Q?+^A%q19 z7@>kmqgcJIjz^rOm?$$SY)SRlP-G$N&NdFd-;$u8$UWck-TMBnLm45MZNa!hHfJf) zQg81H`(GzhFxWR7qfT&wGS(VKK5)|G?H8z4B*DL$yFP6NIExvX*gSNCjl!LYf~Q42 z9!`+s@G)OWe4Q*>#a)}G-TToM=g5~Ew6)eMlGLmSNvl{K166~-+@PyP8la$)7G~e_ z#Ri!(e|$T^t3tb^An40!Qd^#jH1XNyvtvC}%r9UiJ; z!k&$8fc~nfFt!r!($Zpr;iOR3!_OU}V$VjL(x0F3mdqWlZdOl%Wa?dD`YK^2@8M`*-j9RCNA4 z0riLwebJO5k*zn*7!5IZ^vX!}_)nnh#-AqyI$;{7Hm9;k!;1tQf=QlV>Q&1QR7gw4 z>^$&$sQIoY99eOQ0~fG>!IZ=U#>a2bIN9d?y<66!`OsX z@;};Is#FSWa1nt_(TB5b7M6~jC5RWR$;os$cc*I3i753l|H?!7KKZcU15a``unApC zf2Iiq-y;buz9R0)dQcfBUNHqKdHZB zO}3Qr6^z!o+9_3}q8|BPK82u}PtnJ!Qq#*r(MR}r<~tLJ<@J^=7c3T+l?MLIYREtI} zF}UOO9S*m+&0c-A?Rft032O4tpRkZ&nP>73Lw0ANI@uR0XMZAM0QeKKs|8q7i2`rg zS&yfLTY~?%%?OIJS_FF3Sxh}g2;`1}g zr7^=b8XD-+ZQOOW)if#x8i(k;O+@IvdZ#N6bkHvb5lgNbbkHdu(Kp8{Zj?dK92Q=$ z#^?VMv=Rrc*2^`Y$3g#tMhL1*BcQnCtm`iN8>3oFc3kM0Aos>8VJ@!JP!k0s=MxUu z9iiwIG;EUgFk~UxAY_n-ewE0E&491MbKTplMfv>`$)-j!X^a;?z3*#^NqugxwHa}n zTNY+qe=rt8d9-kW#~60|Nc+!fs2iJb%&YvG`F;7LE%Y_h+=_7%U=w5@WMf;QGf!zT zAiEGvlbM&cC$@y6L#kG2cEl)XcA19&uJedF}KccH#i10 z15ru7P^i<58?lVXz~axi6bne2mDE6K%pEEC1i?cz50-bb8vml*6Slun8u09#qeQa$ zZ$f`;P)#>GhM3H?3fV6YH>j}MpU!+gxI?p#@+?dBpp+Y)(ry$zjC#Bo*puVzFadnTVfV&WV9DA(XbaNXUWwT{uq+b{j(eE|H@IzIEqvLC`JY(v_Tyxk_ zcY`y)1SAqDLt+K~pVogBcMefG!xE6(*U(+VONt@K!5^lr^B%G_lt0sfR%7p^C5Z}z zb4|IsH;XOc{%BpvI1LFp75%==Mtl}o*igVphA`@YHqk0d3oZK-1v0W*OKa+~f1lVq zoX+H)xIe^pVz5nq*TWJyDVobGCKpI5v4`T-`BvHPW>F{nPKcKXc;(o{>ryX9E=G@y z`=W%pwCQaIbFsrk_(4U&u@2A1{!w59ieWf~86}7ay<18K^@~Bc^<1+k;52}T=MWCQ z>f9z_U3%~QE_e|B%6A&8w97}zy|kW>q~J@02~oISo20gY-Zu-oxJzSKr>sE>0rmm| z^o8a0&o#ISOkY2VP#fYKa|`VND`ljycPRrT-y0wN-}0_m%MBX8Y~XO0wt(!i$@!xsc!%Bm^ghP*)r>asw9D zYg8?_|E( z5hWpK`mVpvF#niaNC!MA7m#IveNf9SJzdbSTNo=~8yOYzk~|JQ9dQu|eCS8^SSo4j zB~JA`DlX1@`|N5PO(`BW85NKx#36Sbv#ZHz1WR=#;&@x8RQVh8i^e<+u`WqZgUo~$ zkAlW#xUyk;gw=6ET=fRt<`vfA*LB><-^_^Ih|s&6Rz~;0`8(CaDMaW*OR%D8vQ%X? zsESm&pJRaoDt<85ZnE%-8)UB_nL@3JMarKciajzAQo*0>hV4tWgd@{x5oKsRiTIEd z^v@St)-W-lwT*m|uobsP7v#CW>*abL#<9Cyc0LwMojXb#6ksCuXQ1rrA$D>Xs4Pa2 z7V=!B>k=V-fu7kg@o*53HMIifgUC-SE+GL9?|R>TyBQ2IA@LIKhIG`JQnHk47+d_R zD$}Jxan-v3UgQPWRRoGQrcaX}U#5vG*g$cP99D*sIdniIqJC|p#h38Lb#l={BzK*^ zxv^;`6hvYKbDwG30>X)+4<`&h56HAj)Vo9XL4EhP#K;=qIzYJ72y7Y-00~`IuzITO z;x1xAzYyziAoGEk9O9s-zmr!dtKv-Hq63s7s-U0!FFlO;9rsLjY4!iFE(V;mTEu#R z-Cgo?RQDJ9f-09J&iJc_1@t0~6C}Ovs7-x-%npSI8IrpnKM>5D-vS3TV3on_=--?* z;A(JHiPYiy=zm%USz4D#dQgjWkm7 zrbzy^yBH-b9EL41>U5ggpMb!0iK&RExwKJR!*cw+5J@>l-~H1ET}MjT@Q_80VV@&A zKQN%EVaMn_5ey&28dw9dl6X3-_vGj-3nxgJZ{Tz_qo309Hq)%+ygX!w7_g_Od#K@A z;+Y{!)iRr8H>X(|&Xq_q9X^beEn4P%bOX`;#@8x@GeAHk)@4`c= z4^2>7v+!^)#R0!d|DTqIlC+3kItnMO<6DNr_YP8$NGex+;x#K3=Dounj zE&>U#?%hP5_sf3|1R(Q{sZn8lkANRCkPnG{9TexWa$s2xi#xu!o_%Ry;8NY#XqMw@ zOjOdDOuE5}SG?a!at9be*0xfzmR7~hU0TfKG}G z(kVSaKp2w3=#-Ap9q-;hfe*jk_c`bOp6jYjD?u4L=AzIJJIoric2r&*({-=r1auFP z`>_7#hjO4WssZ!uW`n~vQ`F5BDjDipNvK%eV_EY+olL83t%v)eJMU4b1dREr;f6NQXQvQl>#SEg*?VG^n)>_x zb0KGRu`w6*LD^wO>EAbW4ic8usqGzc_wc_r+6I(w#gvBF97EhCvgJ7K3qsoHUf8+Q z86T*{5a(HxAE&8_QRcH11z0o3$9Qf@g-f*h9aTBTPjCXd>$+cQa-H-EwT@0;z zZlR+V?NvTVfb~4}S0C&R!J1a-7e^#-*(s8U6Of2mL_-}Hpm}NP9){V{H=MWf z+ZoiI{D#iQyilJCva{h%MEYwIvto=lmnf#gO%u1F7>%h01IQ|*WS z?2qUGr+}kwZj)fn^BgUKAYLfqL{O6?$TUQ2+i(>R{!r(5l%#Gth;CPk4vW$6M@_ir z1uw!=P)mSTIe<|C6c2^kXwABa^xB5b3bI4B9hHI!cEaE5)*d4NWshD3N(Y5JvH4z%#?KOJr_F)c-{qe@Xu`CMu*qHSKrf{dsYxb+#ZAphaGDQE1L6UXo49Z&Z z9Yx&LyYp^u(&p6{e(z%1nES&aQO7G%@6B3%LHg;;OTl``OZg+cy}S-)`iiy>4llhwQ zT(edU@i&{E&#tGZm}h50t}fj|Vw_(Wn`R6u9PDOB5K&bDmU&r5Ot{nUDG0!qfBtHV zYZ?xiyI=j?Mbwjg&k(|_)%~Ed^8BRZ|J+ggZ~I)kZ>#KYX*D%rf51M1^8uD2ctRm}AgQ zpq1O6jTjHnF0_r7{eCkK8m;MqUH9s~ujabKso7EHEdRi}8q9&$x`*b;IQNxJP>X&0 zCrsUx9|hI;ZAZk4Z5~jErodXRVCny#q}gBcAOaOtL?Ox}a^H(07m6&`%?YtY~Y$L+vj0<@T*g%28N;;1&bJ;y7tVxMcgIxDmVLA|Wu*zG#Wg-Lo3=sOOAi2z zy!>c1ebl^GC~>=xm!X~)0XuOCRVvA6y){W*VyJm+KS zw=$zx zg-leye)s~BKc)}o1=ebFBG$EAt*Nf-AKhaBb7&<$D+V%5XkTqIy*e z|FqN@;rIVJ=Sj4J3_!3<5hG|(x$Nw$BT-_T&DQ^cKA6a?D?<}=KKj+VJ}Q@z{oN1z zir6UC_|U=~wii8+dY#?WT=?*zIQnw=J8MPL`}q9vfjVv66Peu9FJd^zi@hLG-<9)g zCJ`{3j%rLi#;^jxzb!3j&Q|IKSzFZ@I$+O_&+d#;&5ITE`V^2%} z-{hkbKwlI_&xG^Tr9C^tk!F@~g)vM6CZ{`Guh;qRW?C7Wu3tSrSVaSgwrj$v!lTN| zjvXIH5%3FhQJYz4C@}YKpNC}E6FDHxK4BkYF(Z5@&5cWSJ$AMfDoV(&V}4kO{{6~c z;9fUeS*pL~v-C6_PH$#dp(lL?iT-y zD}={;N{*ljdJ>9>=DiN;Ka2E}mZhjni0c*pqGU`@X}iW8MttB$@<1GJksJD1v7Fyw zq*N#YtP)uE>&eH0nrV(cyl&Udls@X*f`-M^R{hly$=55;LJK04uf}#s@4pvc&s%x< z@!B5%@T^)lIA*tDWd1Ra=}=9~p0yP8ex3s}I`>mM8v7{>u*9wAJJ(xa@c(fFf87Z4!Q7GSU~LJvPA?{xC?Bj;N|ob+ipThgAlISo2I z7OB@tf6%De7n#(x#AQbS1w|C#!iU^aVG>$8$ z!Wvplm`KSXF%$jYHcjkwpg43v0JkpiX5h#G4d4`{+CCxY{gp>W6fKA^JhY!uZGw?L z?eAuVu=$cgN`!K}Di*}B5hP_&7pbU_i3ocgPK$0C4oow3sc0jlGknO1EGC7*73B$H zita%bqDEt$uTF|L_lR)~w+iCX%8)X^Z-SVm}+YI^i}vzFc1H$-)OU?j>`Md4df&qjk5l&i64k zrTPRZ{;<))r2^$qG(U^r(IKgDA&Fk?ldJ|$k1gg7-$5d28%8QR@MW^WA|vGwRDj6l zYc5CSpdab+o;bD9{IA9)j>q$Zsex?a6k_1qx5{&+Z@-$}F5+2#LytR{kS?3X_z)~4 z;Y9N`F^U1Xl0}}i(#hkAKz{LkF`oDIL+N*<9KHi>-&0YvJcftZJLFP%A6p;)@ibAB z*{l3l@^m(GR0ph#ZoeSLM!JE1^aaj(vgSX+`RS*trbEyF$)H;E1@wGu$tA`@fvA}t z3X1NYuj@xd-N_vc!5l=gw+i$jPiaz*8^-=;^S)=hDafr}HdzH(*Cd5HqL5TchRioA z-r-%YxUHlM#M{J&KLZnW8L>=*X%aEbMDs(cF)w*Q4TAS;KD{5{BY;u>JKpE>(bMo{ z(^_JA@)`o0-ZY>|=FY`OYTTaDGccfhdi{zBb#b=TFaGG)&|&(s;}vqn2#Q9=YJQhw z2;oDqhyTkDdQ=012H&%JN0MlFJ)FAYHiO!_Z;ajOPz0aDgb9YH>DmM%okN2QlB?lV zl^kBxQ^VAk(QO0gf^MT?gG-h)Tbs3z6=q0FM?nxM`2U38Q54I)hg;e+;{?Bc?JD+y zr-mu9JJQzX-FrzamLB0m3d4zg7~i*V@1Al2u-G;WhV z4iz{1;rRA_7umMrfN3N+@{?B_3b2nTB!r6B_J8}FNC^I@zzn)C|&j9sxN^8^* z(S(di|Jz~1r?|#^ih;ih-@U!w#q9TmqmoougZ#fP_@Rg#8nY_APuJ7@(Kdg-aX2CM zNv+p2(j+mb;u7qfIVE7A-+qVtD;81a!dqo|MF1^L zVN@s-R`S(hKv>C5&DY=uhl^{kfjsG7JBRSf?1ehbAAc{r)>_M6ItPiOy&sxi+tc6O ziZTBX)vCqWfvq0qA4JF{I`N$v1mkTb3z9cZw+MDo4*jIV?rqBZ>Lwh`KK>PCa#G1Y z$wB$+9OcgBo}MKC=f{`3HnW%OE7a5Zv>iKp8`=N)?`)r_3u3-NR!=wnM11nHlbe5$ zUTqh^A{=B-&~yJou-!xTHD4{9xTT~dmUw;lmKH;KIJ>WphK*Lx5d4P@D_R}fI+)8_ zQ63jojDJ|ne9a74AZ1M=5qRd2R=Jc`-2I(qK@Yn>>lO`n&sTrf^-ikKLej400qJNG zFaLSuUjA_cSKV*c(-PY)o4Xv%eUTd}GYuq`df~M$<@Crf9cU$H;ZJ;nTj92dDVJ${ zZ1XUNYGs2$fY%veDUqg!_3?_ESAuKsJ|R)L>5sNIW~=@vHvJMg&n3apR77A8>FR%; z8Ok5$@oXKTCfqzp$=Ni+Ts&#aL5Kl8;mn#8lxm@Ju+iDEZpJI%FM+;^aRs43U#$-1 z`5V3Dn%Zg1sHb-GPUSWi9p8k%zTUTZ>z?A!hSp0W2dzX*6pJ{@r=+w-HTEET%hKqp z345h(3GB-f8b`J3)ZM^g-lX*pMqam#mruRpe~mUzBv^2=-cdLhv3|17zB9A8=S1W8 z4z-ZUAf=fvLK8aVqrVPz`WXFo&3_>)nOjxNjJ`(soH*~J9XwbEp;7wW!*erUB#jMPmuj!d!t174)^K z-Yr~!9|wEs4isIkPN{e{HZ;$~egc04V#jKlyt>SCDcfX~Vj|5^>4IN7v6wr}Kc#gr ziZDjmf(rZksu7~zS3Z+#&81Y0?{&vtkP$6Sh!W=U!Vc`7-f@e{gh)h~~E zmGf(NcGtZejWH`fkt)|{XDX{)iuCObYK?>O8?{)4sAAYh8cJ@m(j&&rX#K|`lQ68) zXMfTioadjm!oXC46-!~klWj_M1CK645|KtrycjSyvq+c7Ad};c@1U+03>Pkqf?rbQ zOfNo?SZBfEunh55b~PJo+>#km_%E;5-7(Y{7QhSU&wtM~-_Kf2_PW9&&k0K8h?DFp-kW&qZE~q6rYYQud1GH56d<=*TcxXF$oan;ftJX$2c^KhJ8*P zjBR|W-ViOyEm5_*=8-rUijTNNjIWr|*tLpmZw+aI96j7uWpbHVig$BkSBA#5C(d6b zsO}gHhoSFFYzi)m)^^0na$3xtJAhFtUO(5RVD0tJ;5G81;7GUo(r?KFH}wQ#VT*H5 zyDvOLamH;j8pRGgdmrDh(IJ|x=G)w!piSFSvuPp0<)~ew>7oTN5CGq@{Rd;>uy*EG zCyf+P@<6OxF;y6nloKS|9QIwV`5z9!`+LhN#OF|NzS-bE9;MBu@vWrc-XrUuIzew5 zMGT<|bx&>Wyk47_Ho$!)CU->H9bUJ)|mz^UZ^fKKf{`w(hrhN{ji_6m;+p zLGR<(+^*{nyi$J3@2D|00)^_FNc~TlQ(^cisR~Ug*KVg>W{DdJAfR6h~A`k5L$MtJY1}AE6 z+yhp?p;6q%)nsTaF&75Rm-%z1rU^X(YE-woiQpNzM@wnItd6CeKwCUhA>1s*zWE+4+d`IsR zR;7C_NfIg!5@Eem1ZjeL3ZqZO?K8bjeuNP_;ZOgyOT-d~yr*HKtRE}>o4}{CJXaM9 zi<{a5yzSxyoXb-o%J4m?PXy-%92-1^g}*j3Lj1D%M*+0!ri*0DI_j=*1h8m>ajV~{ zO69y*E>%4!>F)WD2;tW4VxXa+de`(tM*#r#caQvi6wBu#QYU#j>|n8X_kTI;=?nDM zYyfdlS${C!#bo;YS(T*)cEu|Wse_!fE{Haa@a56{=xf-Nzkg3SX!Mf_U!;$XIz_iN z91s0Vcv14mkls7MVW%xovFk*Ywmr#VPm@CkLo|)7Wn49VhAm@*BaN^sXCq8n^7%X? zl{$LJAbBRb)PP23L*#)HV6r z)0P9qts^gq(W$T~F#T%bZ`a1|42^x68Q+6H(xTy_TS$`N%S*%!Jsg1`KCj_}1jhfG zMMdCzBCbh)=3M93`~7TX`F4(%Q+^;jc|;3jJ87j$3-RSf=f3+$kEaZbSs!ulA) zR!Z>w;CR}%z!{{1Qw?cj)f8FFJp3~87SKYy^UfJZj!LNlu^svLc59G_<~O~R87mv= zF@OxI`_ktZ7XZ%AoqX1>EbR6=w}CMOrgjiwA!{#w3xaui(bKWyw1|Vs`F}@P)B`fZ z*>kbOXwWO4^#E}nJ94L`;sae;mhww9NQ3OLu_pomPW^*NXM@qs+ATYw>g%2o{35)H zIw@140-QrM`y?#-Z~=w7S^Y{Ehvd5!LT`U+lw+7)AMmdAKcQ}*}`O2R`>@d(g;)_45K-juRPdI`9A9+u8XKDvn1T4 z^AGX<3XSqPN|x&UAvD{-om+qg+ueOn2%u5|4Cd4GXiTk9rqTb!L%sWF`R4XoQaR5|5@g%Z zV2NG_2)MmNDQ?*h)5F~eU3S-!!dfq+&`7XhyDRVI?$grq$|_yvf7WzPX=92hU4ID%-6eV^YEG8836d}m=uXzf+ie1*v0w@aWz_%r6XKHx zV_Xf-EYO(2r#f%wl2j09BJ*rF*Bq;#46?rDOKe?MzU$*PEpU|7CH8tPz?X&9KHFNG zSCSIc&q>-#-TEr7(LVgm@%T0epx-Cb2p8r@dzf;+oS*dCeeQKU@z+I*r7{hPo3djr zr}6tCTi0X0lpo7_g@w>f>PRqf*HVJ5_f^7hFv)l7rL$$zZn4#0d&Cd8W2-fRjeYzk zc=>SoCRL}NfQnDnfS&2D6d?;hi`QjRZujL|eVh)Lj`fkRLz;*pN91qL7zBg3X+%vo z51csA)#TSz1;3Q{t+Ub3Uw;Rc1w*!YcwA(C_rmsBVknXD!vRs7{ZVIX({_3}&I*Cq z2W{}yo4CRN!*v8}lxfll^bAOqXQ^oc*j~%9zxnI`dG?fR&PUJVnm#o(T)R`Q?ukNv z!VHtQ78f>)#-S;hK^_Jzn6f>Pte=o>`hkD{V}b_Eojth3q?1gFo-!hWj`^jo- zKQTWPpQ92${<#y~?#t_UmKbV;cW+S;`)L<5Dqf}Pik(Nxo40j4gLD%f_nv^bduD6q zM7-;NyT`H!p_?tZGlR^hrs9O2?n8;-`L55YM6fr~4QSV7%uB_)7n}oXANPt%ifml& zK1;wn-13%Oh|Esnn>Sb++VluT-V8I%ey}@A+^?ap?1c`wcaqUM?0o;TzhwI^}@kO76khXIDyxtY&3oe7z&oD&sT=BLj9W3^DfRqA^bpbnGQn>rWgjOi9vJc+gCRkB zyd)Nvp4SKzYwwYm$Vb&QTz;*F!k7T3+p1W=DDKLTM?^JA@04nW*=__sVaHD9ca_~H z<|84sDVYxLJT@b%SYqxM9^O3MQRIIM1-%syO(!UUnO~+~RgA+g1|0k7LHC-~?+^Z| zR_?z{TL^Qf4N)COQEe6~C`gvp%}!Tda1v^PyO_jh|D+D70DNfA6RwFyaQb+o%zz*~ z0BSJZ`^}-sRk&BIYCwv@-G%yP^4Rcyd)c%ZA{d)Ipzxg2D!LogS$F~m7;-UDS?CvD zW%=7HGu8s|6*-Q>&I?eRpP))fJ$JDg`F(XCEB~gEHur%E-5HJE<`ES)(t(f~S__p^8A_a6maITg?uy1B&cM#D&i$G7kA;&l=Gmz~|Lgz~2@8VRFgd{fyL+*e~CW$-;jH}6E86A<2e z{Pi^QUeP2N0^}YMeYHp5d2&c}Z;82i<&pn^LRo*(*kEM`IWH!aHaCB3UW30?A=iKN zQ&0diwQx$}wHrq~D8Riy9V0V)7IlR)6wnQk2StS$Pz8vekcUG8x+KX$Szp_XtnHTK zYp9Rx9>z6YUXOIYirKPL?9vq$Rx>s3&=nSSG_6fvfuK?dsh_0IuaZc}BZk{~XE6^F zH~*ltyp^ioPmR{ZHu2g!@k1};wV2m(brF=)%;HW1woxb00VIm1-zDvnQ1oc4m8|~b z@Njy3YNdqjFL1C)W)|ml>V~9${NR6YUi^&j7gR%^(=*|=S7J@pH>CN-uC1i$1!3Kg z>|+9E%-l~Y+|mQ4Q&p?904?YRW$K;h49NZdj-6tB?%cGZEvR7dI@U`6X?`_w_(nQY z-dN(RNG@aCCT8YuS&M@2-Y-l&3XaeX{!LHf}abKtm))Urh>b#vb4xJ1<3K zsUyCUgWAY6`Aehio2`0UVDS8x&FrhTygDpIpO-R4lUCUQSH{3dqi~u4tEjo;SN@wV zu!bS3IQSSuhpSjP*Ko<+$Ja+ZR$zS_(8)Xb>8Or8VX66JUtcbxJZa3uj!y)Dcd4IH=+4|X?w`lJ-W!vJx%QRWT9 z_d=~vF7M$?x5N?0g<$=cQ^(E9XU_S?difOU_;*iX>6}us_!+Y`w(zAhyWejo|7_8kI+l8On9#6{ z$8?Dt%XqzgPt@L|vBDM1yH(@Y-S*q^nCru#=V#XEj~d6>M=NuWIKVnNtTqJ{rHwb8 z9|%7#a$+)Ub#j5Xe@E7g^Sg5>8P{56!V-5($nHPip3in8BL1I)$LqQRV=T^L9Jqv)==lt&VH=yh&K4g8&W4AV21 z_rS1pbnu~nl6Mn+=p;@#FTX&1$>1+(!e7M@ye9b?Y=lYG_)ZVeOIsEHR z0X&TjNEY}|Z{l}QDZ!>?))j%A5bm_@cq5~8{a}yzj*yJUGDtP1JpEM83Oe&IeH~-hB^qS)5QzUcQ~bmfxA_WY0BI@B*Hyb)Zue zp|9F2#OVFaESfbtycf$eyo|ro^{S5d`C~A9)kjY=#u&^^=kL{GgSmONIPk3kY0$u9 zbTInf1$Q$PWHDD$3eJ z@W*G`V41k{Qt$p?pE$mAI1SRgz;ExnMvaO3iTTq0etEK}4DVax;x3nW=;Dhq>(@re zhBJll0DbPq6~;j2F(eoX>MD!7sZH^k*nrXAT06kIsMtHL@y!+Sn`W%gTQJuI&5g|g zW?|ekow_G}0OSIgNf&_&ZK^EB+%pTU`e6m8%9m21bvUPN3EVlx8RxG%#8*$?|1%HrP9m1rY^Ht zNb#}>&N~TCzO;CMO86F#J{U?7_8;@X?^5PE1xCvgH72|R|06fI&w@k57886TPTH++ zw@yhLJZ@tv83*;JgVx=96l~Kr5gwb zu179lW08jnUtV%N6sJH@h~uGyw~jw(ot<#odI)D`;7|J>HCzvKarj>r>)t zc$cF;Kree879`5N!EXbDoeuX9%s0YE(%MFP34U9dwDxxCuM7(&A`4@Y|BO1`>v~1l zG~RRp`M=k_h5pm=3cLlx!Esu&p(fJYebru0KThYl0ClEAj;9@B)pgJ^`FHxYYma30 zJ5&C_*ap~h+zb8>Ef;4*rs!ZhgrqG+^P2Q>)8U(lJhN~5b;}%AW6%~W7n&Y)ohbn! z==Fj>wUOCmcF3l!rrPvw-62XO@Na{8K0S|>y2E#`ZGe=FoQ!>LdWFk9zv{<8_-R#? zGI3RCRNb~7z|hA91o>}!Td2+v3_vkZQDtB?OwP;WG!w%{e-V0a zg~s1C#(gNH(aQ8@v#DHcBmYF4>X)E>J9Bi+juLixX3cOgS8ksN-HwDIJ+M|PD#P8B zO(ujh{@gcuOU}s8I6p;VN>H%$VGalL$SdPYT~lrRSDe=-T`?(=h6x}NvKLlG9Ey1Y z)xIIegr(PXZh29+UrhAYs<{qJd6TrSS)ahM!R1-!*VbnjJk%DkB|A%k0E$XV^twb% zOVcQ@jFjib#oF*W)dr^ZR`SJql;`#O$2XZ?l;R|zBrT{8>7FPu6mOkm8f(wxBauoq zcBNCWxlx&2lbRu8NW$#q#?zlazutu}))%2NrOw6I_d35E3-8tFY=MByZfAc`Ks^F( zfB{ZAXGR242gT}9nYS*&?|UeBI?Tt*zC8fOt}_p%eN0B;X?umlcEK#AjHBq5Pp9Ty zgg#CoW`;@kZXSq30M!*-_dj*g&|5*a%r9WBm^{3-rC9fss0S(g^#?@>mIupyXDk^! zb*R+eP)Z!s%zzcpkEfz%oT2OMC4Mrqz^a_RP(&z>Pv?qEYd6Cp?VpNTbJ-<>x=Nrj zhNS~sf=ylovc;5&awC-TX=p4Gt^6*4INmz?Amw)3^m-@pQ1b^iE_|3oxqfMIvZ+{Y z^wo}o|E+KrLncz1!C z$%3-F?;;dxQ37EjnVVyzz=I@qZ})>a0W4Q>ALR%t!B@G(Wq5@Jh;UkxogD{)^;^FJ z4)bauwbH!Z&vZJB&%NR>ve3t_a5jyQhx_O6b+OuOmy`%DmcW>QVqvqj&zB)1$S3$S zPsmNev%%BF>XYp4c}V1CMaXl=*7fsM$gt~EgACw)y8tvti*XLjEK_&~;8z(!2Ylj> zt4xeEuLn?Fin)b}6JK@6^&}~qKYaVYSg2x^ zbm}!<&m*uKoycZ;N`qQ9hVo(t+P8w;yd&S)NlH(GPlD#X(V@gfHsmcq+_U2h{OzIn zL;N?8AN>P{+R?NfUihQeM#p^g>1-vxUBeLpWYYiL4eG#EV8n0OiUePl2#LLB8brGa z#_bc>OIKL@JJ4kJc{9=&tMhQqCm&^LhKSaz?&V&PKu}(<)=MYH==4d5AHeD2&9)Md zp8-;h4O6I0r2qeTA4p|tLD%UUX-*IDB<2PfhoA!nk1yHyOp>NuWm4HzpD9*zLV9?wqQ=-JA~y#?9*kb24L|kpnW3ghGIF zms)>23l0pJUkE{@_kUq<=rLb7A1Tlf`>Mb1x_a7gINv<69*@#yV~Ul!$4!2a&n$KR z0AYQ(A}#)WQpCN|&Z?6+^hUW{@`cYI)2{Cy;^5o7=1ECukmECG%WlbJto&`~~I<4~NY;0JoEs4xG&GZr-V7kL+>Gr7>emYll(zlvI z+U%j7EzU74TU%%x1w?>K2pQgX}P>IFD)iP)dwO_BQC$Lzn&=G;p_<`4@aL9Yxe=arRY3HHz!;(v84tUm$84K)DrBJJIa%lrA>kgo)^| zsZgjxtj=);auGTZ)XjFAiGMIqVfcO+j&-2`wN!u zt(=u(6!_Y^$s&b?adf`!OGuQtdT1YnkU&U0CP@ap7qMfSsD&E@RbXctjl7VPpdfO6Z$ z%U@|wU%xEG#Vmf!=wE6EJbsCGJ~{vOOB^9VA#w=oTHyG`L-xpLWIaU_QEEDLZp9E0in0$$j(_`4Wrw7PXATcJ=wo8q9w1RlZ=d)~={K1u@8}QVC)#Jq6 z1pnb+Pd_w~`l0Srko3CJXfHV}gU6n_GC5h(fN~+4PLkY>-B0zOZ*rluSqobQ*bLBi zLbsEMf-k)_?&9l{3zxeR%R;k9riitk2oqaAk^#17XWR+hpWAqm74m!|`b?>TQS<6Qn!F+Cj?^?gPU~1@ zG)`To_s_Twj)|I-SodMk6uTh2{#qt(hV6zF+xqcy!PwLC6`W!2n#85$G(yM`XNHu+ zwV57>N>2>@HilxT+D!_WR&6CHM@~@LcP>z~d|ABCYlG<2!~pBA%gk;`(4v7cM3&+e zLqcQ?me_zVdnxI_5M+W0ee_$xo4Ka8JP?Ey1Gk^i9Ae5H^|s}a>vwJ1r=j(_;_vT# z=){VT`4$S{jO8z;q?P=vqyFtxZ6s=+{L3?-0!NVt2j#e4uaG&KN*X-p?*)DClHNY< z-}$mvFgethKp7a#4clRFZ7{*THux?kYs+_q73L(9kF z6;9_GwP48D^RnNp@|ga=o!Pk&a%z}wMDuxcMy)+A%ld~M{N5RHI+};rG7v!ID}(Dp zrsTayFR2c_sVSerk1JIScnXH$80M!5xb=Cl1>z1jLTE>`|8}%ZS1rP<`yg(|GF~J_ zVv*5I(vgt2Si0lks>0*CAKC1K=pTo0xrUquMu8z+wbwnjDM2U8tHVRGPbEQTo3d69 z3|o5!A%xhs*X93!d-;`T~1F7UKzkPan+$dAQ7s7TZFMtmNr9b_5If;BylDQ{!3?T`4EI8}` ze?xsz`>d#xXv2S?yesJj}rVxEOLT>wTLLQlu7VpZv^I zihRD6)lGkKJ0tthQ7$WSZD5^{gw;EGWOIhMsf++X-NO6<+=p2A%~E$8fiwN%J$M8R zL3bLd-2+{o{BZ#%^S&Mo=dLo3x??ha2HQ1DNm**G)^{5k)p+k<{Q+U>!;F4=>+rii zqrCxS6$EkeXer?Hz6gJP@*jtN4%osgPK$4&<2_30F|ct2{8^NO0|d;-|KZOggx3); zkpVNyc?ic*e)4q+dCD*YFM&WE@8_SoMDbP~)U@zkK8iTD2W^CbTYf-|7`+AUG~;Cu zPB$Y%G)Gl`00|?0FP>xZsmugsIlw8cuOo6q9A;9qF^x-X)DO>?xe_FCsqBYGn0Wy{ zI0C80aKe&E14&JAt10WdDt2x7NE0fSkF^Sthw%_w3xN#76(J97LGjNdn+*HS1-sN~ z-_4egGE2yHdyTNFl9#o2c>X>H@e9#f}K5d|AszG0cxx=`9kjh~ z;~mJe+V!dexssNa(`ub`K0clGe>}gmM`ss05|jLl22JkCc$}=b7(HmGl5945zB9PP ziS5loOTYbr&zFc6r+MC&qArtnX2v3}88>;V4gPS#+kxmmG)`%B(#)@H4YuxLw6>Ny z60C36rQ7ZfzvM#Ph;{-$#$WlU{$V_5(opS(6*g_Qy}2Oxef(;Og{eYLEkkiJnFOEnrWXRr4S(})pTI z%osV^EB#Dn2|T@{P`wW9Kxs->+f{!_2+MH&ND$4b`8 zvbzML<*)nrTW#vk*9~7f*e5~-cL!D^G(@y&x#AZpyPRJ5G+kc6Pw(DUib2!^OKU&v zTRG-j9nMY6vtFX|orU=vvD_bIBat{^6wBr_)z$m7Rtqe>^GWRznD)AA=C$}56$60I6dzKJi|ix5JxaDy5y@nMg%=d^59P1_W53A3qbdkTztV~$Vb zp0PH5`_SO#O2Bd!q&Pvcsp}wLl<#WdkUfjoyv}zSVhK7^`@N zN;dd>UVQ$A80%WbR!)iQ81(}InrgbNE5H1BXv(rzF8Kl7(lL83h~OIvUhs+90^`pg)w zIICi{&n^2Zpj)g3qJPo0>5m zEH-9A3l-m)V@&6IknomYH(34K@DC{+P6=x7;-tONK1vB{&u2uZ#dwRMgxh=7(RZre zyZJzTbFxM-fR**NQ6tANG=HqYkT`BbO5&Rz{tw~7$Hle>Vdl>QH>jM_hjHvTvy2sD!=l=fn zs50O{sn)gOlBZetjdKC;A@l{x(uWp2)-9OS4A5TM z@%@Uf$qcJ?vgQ-1lURhg{d59j!jb1fB1MWF$atDo{iBU7^`WkI-#d($Ikgk#tMN z@6EB8uv}0HK59_kX!CS;0LM1pzrY1#l5Ria13sZJV{}!%-FJEA@-jrQjJ?g(M`+NK zZ8<9z;LyAu5GMyMK8G@LW5Avco=Y_Oja?Ge<&E$GSIe@Gl94FAIG=$pH-7glI@n@& z%fx)_mK+CFE@q7qyrUZIyFmsiQ7$E%jUjr{TLpB3Zxu1fJU5y=V^L~Zjm>VzMVX1; zMK{U^Ow`2z6-7Fl@|TkfIY$u3b;-9EBQyA|tL0{~e)(RrbSHQchE_^`fpNM0$04VU zm}<}@yZ+3p6n{8kNB*g$%__}OBW zCs1aPW8NU~y-;0QHtzr1YhL3`+)W8!rw$d?q{Y4o*ehRqj7RxoVB?xFv^qKzg{q>8 zpl7h=0OWXYG|3D0<%)DBqS6mcRERB+uu~$IqKw-3EG2vToS6V~@6H0M zf_694v6T?+9s14+>6kNdz00^^l81O&2djhxLKnTucyQ1JIm{dz)k^9M5o3WPjmr(s zzugs~7O1ib-=GpQ{;$R!$?-x5!p*T@W_mU8lr86E9=?D0zIaQl_4DN*pgRopvQ5J6eHl(RZcyV)Sd%73ma3y$Gpg+V($yp+)fW7#ssI=a{c-}mw*VBFw;K-` zQNs7Fvn+wA3oDFunh>WisE(XVC2-!uyrzYc&Wvh<2Go7iSv@4Ng1v%nmSW047j#&e zvf=sfywq$4xNXjNU2*RAmE5mF=A!{0_V*v;Z%IUE>ab8vj*I=_ValLOM)sV5RC#FZ z7*Dy7eshzGw^}2us{=l;E@DPcdwPNSk(5+WN{H)mGi6FT)~661`TfryTtqwnpHvlz zUiC<;>ch7dU_-(gVa^8>cQ+xhuw1_vXB8?uXlX+Jv)c?alp~abcjnEodX@4w>qO}E ze4PA=*|(Sn)O-%tL? zaiXSS5f+eSe9O6d{JT03_EYXrO;fF{IeVQukFEVw+`cINSSZ%a;Rjj%tsFy$*C0T7oMtJz9tr!_+z zD-yYYWB*4^;YXFzvep~GA_aio+e&^ZgKum)Ub~JCNCkY67jA!xDc0lUUFx14(pkDL zq-;>g=ZUL5>{W#c;Qol!@waG;qv?SSz<)$1I9%rV!sqO1K}Z$%*jC#opSIHZ??N~q z2Ds4{`TI3JLqo9q4l&k7FiqaLM-lA>* zg*xtvJ{6P+`X5JU85U)?M&Ti62nnS-1f*LDX(=fMq&oyeknR{-I;A@Wap>;uPU#-H zVQ9|#onKrR{|5H#{lr@LdKvk`f8Ds$nyiz@87dKIq-@)|*lPvpxS&CXhxRD&1ej8l z+9XYTd2zc^$1LgpiUV&a9(G03xBm8I$+!C<4e37}Qh-Rfb<-{zqW{KLCBfz%ub~3v zp$t#5zVH`puu8&g(6s4rdghvmX7+L62xP0}Ohd5n#B@GRNK!cXei2AEpR0h)0+1hE zGG0thGjt&5f*E8ak!mEzeNB1qwOnzN+vEAAG7IfKdOv#Iw)JMMFI9x)IQSz*D-MMV zj0?@A9yW-g<2od+!#B-SZVqoh(>kBK>SI=#=yr6CV%Izv>8Ae7QjI-n{engl;<6`- z{E6uBT~=`%t+8lrjWX%EJ$s-Zlg^pL(5+8W!afPW=`5p=U2~{*7Wa(+ zpDmlvx)sd-S%#X=(K_AIq3WSMQh``dia z@9F;lc7Mv70*{BZJzCseMn5zDhvw^deSQ$zx^H{HRr2Hm&zC*FMAvijEB4WzBNq+U2d%P_Gqi3CYmJWxx- z;FbR9kYGpWI@}AF-n{=3n>}PEfxBJwUWhA*wp;RI=QwwmR{W-5E`-+nQ^=JGL9l&O z62^f&Ie0udw=UuUBYf)byz6FvL}Sx_ND-H4K_9t}X!KYYzxR_DtOiBRp*{oeyLglf z&QR#FF`AJRl=8sgloh)pm>y|jc2lEQzjV9#kQ5E}PW_fs@jFjW&(JT^Z%%Ua6-K2rW>OXJA12&AiSDH*w|iO@G`CvC z3$S-#dY0~_flxTiF9S1zeetPaF6{Smk!nZXF zJl>((=tTK86l2A8nmTp{kthKU^`TZtw-OTfum4qxXxAQpu=^E*Qz77-+D%Jix_-wV z8fYjl6w$>8SDP4Tl|(gT0k=UKv7y{S6M9C9re>J0^o`87?`KGR4sz+k7J{8gu`8oK z@f=g5FfO~uHqVj_u6`+`i3I(``E9q%25x!lKDlv5!h^SI&-O<59hawHZrx{DO;Eem zw2uX-?M;&l(ba0bh?kGYsG@7Pdoh>osX`wL_umU(JUffmWwGfzJSKf;|GPvvYWCgW z*^Y)W(p^cSOYzZe+*fuVF*bH@sgleyW+jz;UH}K?Oi8J_c>FC07{k@Wl=r!RSboz1 zKs#ojE~-w>!+4xBsjI6>#4h(=+*wh+(u&cJ1tDjjiO({hdJ_t~x+M$TvMksuJiMOv zoank)=7;8uh*v`OhkNW_Noeuil3rI8DNfP6h&UVj zF4UE*^Lww?JxIWyK)nv3@Vpd;oh9kzzVDB{{+NmvLHWUoNqyy{ef;HWfhJ#M<`J73 zwdeTGuwFCE6fx(}yj6FB#c0lvNWg0GXXZb!xUD#of1%KHNd4nQ65zvZ=I+o_ng2_^JVKRCt^m42cO;d92aYI;UKMVwPIqLl;V37J8C%4 z0^&76LL#}Z_OWKCqy)qVBJe7?uNh?zlJecxrO^eaV0g#lW=ME$~Ab& zcjTe>=jNy39K0fll$={Eo8wnEa&l56GIenU;*}vX$Xx7nxGCY0*%rDcaVT(0vDyk3|~0gnP)mc!g`>%2VxE=EccgZx#0x`>NKe7GhKVtOwNW zQi8_}ghZ1VS?yHph0x}D?&1$4f<`(0{{p;S9*|7Rg>_`J%jANRHD_^#K%JX^tNQy3 zK2cXhx*9|XLo_8bly*wjwQ#d3Es_0KpY`}GUVR$`n$f_nz-jL(-P8Q(;7%@C)A9m9+E@cH}{PM=?2e#O~Me;Ed@kulC-}koMkxOc-xAu zt!sIczx9hU;V{nOf#g{8=2zVxNry0miANT}$=`$x?|Z4WPAGVQU*8Z&Ch}( z_oW80CflGARqHeqn`qEXf;$A#k1xVo;?TpUpp>Za?1#n$=pTfNEgAo-ZKaqGLpGW? z2m&SRo_yIl0p8?f9QG`ntTqWinckwWoY_R5MCDz&7UW!*iv)PbqFN?Y;aOo8Sz2nZloF5P&&8D4rdG=9 zA)RH}IHX94Nag4%u%wS{ef2Du9w|JT4^ zrMl}U^HG>lYiLJo!F3HfPEq*~Gt}q+s0DXeHr;XQPQ%7|7M#-aP>ceVa0DuLh-uXh zP?s$Ph-Zrh-O=Gyfwzjj=@S-qdPwszMD6fXE#hFI<9t}T_?H%`l5gxkRZfH4A?bt( z6C>}$L2q;Ls%^P2p%OUIi7Wm*o>TL&)#X2;K-*NjNi^Sp^_zL+R-xE=KtoS0@LZ3tR8Smk_Y+d1SL zR=7(k;37!|>^M#BK4tKF$G@87=gIv9<)D}~`(`fTFl7<%#J_l32t zUUT;ZL-j9_M;i&e*w@=3QF8ZdF~eCROo*&zPNuQUUj=}Ye7o0KyWU+%W^|L+(L*~p ziOAf{SR(kV-B^>y>mLXz<0IGzq+4LJ|ewHsqH@x4%Va=B8_HYC8HI3-R7ERTu&F&%vHmAfWp(cVxoE8kNQ z(O^>~l&$r!N|OwT4L-~U&{>CTa}kk4X`x=BdTTQC+gsm&y+WZSjRKei<;yI2)qykY zozRTl=ljS{5EryHz!8ZZCZRV5P2xQ6gGDmOG=mA$6x1ru^Edi21ZT(TzWfa|Je;Xe z+86Syc9m&l+P&jJ5OVu-`fe_y%Q(l}SH|Ir|)dsAR>O6!4g z6{Qdfo$hiu_(c4pOz;-rmfYToUU6|*Oil$ODT!6WD}F*%^;G&|?VDB$e1{6nZUXs! zxelOc!hk|(AvutQe7o*~?bO z!$K0({in_=JfDV3rN*UPfc-%z`FuoDiBK#Qd1<6=|4dom)?9Z;IYnWB2YQ<1>tnfkS<4V>Bg`#jiZ0N+^7}bT zBv5!bJd5-uQpwpjl1Cairk!Ncc^fKfz*c&i3t4}ZJlVNDeDTFd=EVBeB!g97xQ2#28d(>Q zJm;IKM#F}tYpXj`cYR}bh?n$W zww8>2F>-uZ3Coduk88k@kdvH*G6_*js+%pU0V<%3dGAZTW0!6>0_!u<-Cd9b4WSri zKJkLIU_!l1E(KtmP1#p)r8TsQYg8nX5QdPbU{#tI(9aChKB7edcf+NxP?~zPSf4NO z4m=F zLD#KBEzfEn8uRuS#XBwmfoU!ln~pI_@L4uk9tCK~NP%z|2VKTd!}z`McV_#@KE7ki z5DFvWv)rf?!ezZc1741TSn;2uZ_uPswKq|DBrso3fw@PJ_X1xN^eNHa1UY-*dkI?Z zq?;VRh;wcS#%B}y-8BBtpFld05qhiQ)uu7OqS5mwQyOXyZI;(F{ZzQ_27!tON?dSc zdcesazF9Fz$v&R*(9X1g^c5&BlmZ>GfB`wgSrVt5xSxhBTF_&svalhu;aLlq;c8Bi z>xXSN=?s;k_0a$r1D=M2etBo_Gwt&#@i#*Cfv&(r-L}4SBrXT%h_@Q1DW3O$HhE~P3s6D#TIptOiUQ#Xr4r?>Xri7%M?`07)o=3tz|C)a^#xrKeoJm} z5kbet#E3D@!JGwj)bJiRiLn?%oB7f`_NG(Y-nBMsCv}gaq5@A7RWdO8spksA7yS&? z#X0uKNAJnWcQi+j0X%&CdBvt9QYe#rJTxL|ugD@=ukXk!ofXo*M>;Y)w0U^v6$(XW z=*4)BWeq*du=4mGh3R=5AdMbG=`}oy7mj888n}R)ZA`j*A&T;;I&Rh%JWvT6Dnp^D zNX*tQJw;y!W;2*8ojv2eFL$h=`TB$iMZ_$M*~XeMDf}ZCZI_UI4Vg3ErzQ*j;{&eoei)BC--D`Z(U0uk;BVE~=hqXV=Cx1=ko)42?iOPs6 zJT~x}RT-cWE4uk!J0(3o^`}LY%GPqcv382}Pb&Jrd?Bn#VcC#i*-*bL57WS1tlkzr zU(c!$-JTW`Ztq_p?680hrifPd9d36?VL&xxh--@`ean^_?cP-JomgFih13($J~)jg z1NvIip<1Eu1$4g48(e?gh*zqF@ycLyEALTg(Z3*wkw}J411XKJ@7tA&g-*${ zfMD)!6JciLV{omZDQ_U%AT(P4qmc9X1C5GSl3Js#L_jA@Z!SKs;B9JYJs_Y?`!UXn z+J^m2BK=y8hA>gOEX4aJ8~BYKRnD!`Gu}9%om`!!vE2S0&-&AuL1jGBUu_L78u?p^ z#;+Q+-xXAnMl4x(-cK;a^)C?Z115b`yw0gZU>MdtAJwI6K*Zbt!N zeBD|&wlvvj7-;C^TcJ$cL8wL`J6yo;DN{t~h9(t{+y0>bU;Pj1c+1ao^37X`=Eh>s z6h2<6PW2=1aMFP<*hxo_)N8OuKzhh#VucHIZXD7HynCvud;6CE$>1epPz+Z9tKTa% zdiqIvls80*Roq2b5#`~h)_?*3Q25wGbjkIwo+@d`+pRJaGU+B7D7KUdihwJVe1%gq z!i=c;8d@djM=uB$d`V%RD&HYMy?Hd{7^-3E8&eR+g58Zv6S9Phwak0;S&bS6@^$hS zoHFVDK|&kiAtCLiVY}-Q&Ici4_l%mTG&p&Bc!&}2tz8=qMRn*y(wer#rHZEMlW9TZ0?zVU>kSi0r^#iK^bOp=Y3cLiUA2av>!T=M*T>G zsCeeb1kI;$UvEeCIMN2{c;f6|h9z6Tsh9(_QT1l4@+Hc3kw6zYa~>kP3nFys)d!XL zBNjcWHh}gD?EXMFg>n|r+Hv8(a(}I&L-YK2f{}(D{21?bu8UmO_FI&e;{Hl(z)_O7 z^!}2(^m!y}i@Daj*XG|8yw10qNAfL2fK`YeMWDl{!O)n&J?~PLc4^30o;N$fZRuTD z2U4P2s{cJ5hPQo=Q!o-A60h4)&iE{3D-auYrC~}Rdp(z zxR#jOPGR{-sQ^OrHSl4HzeFdI`=(|C>kc(8*i`e|ey|Z{$BuHIO(56tl6@?QjV$mp zdK(4bW@Y>5kjHwb&xLQ$L5dwj+u}G#B(%{;TyO_W5XrJW(w0Z88;+?(nPpj2>Erbi z!m_JXLKt!DsY*^!`CDDBX1{Vgq3lSJBb zhKr|wIfB2#1<=dSioBL>LeGARVU4)YE4ioW=DQ)pXh%NXE)E5K|E`>41i{{*+7sz` zgmm=ap*m)Vh5b60yImUs8%$KH%Z5!gJ}uE5`#E~xy9Bi-F`=0-C7C~5x;H$`3OnqK zdhhiPy*xn&TMUr*H0BZG@pAEMVn3t8}7W7dIp6zjP?*U!7!O`zLeM+v~nZP9O+U z6Mjj#bzZ}siIglBeb5^N4x0_5i9E<((~{p;pHJCP1qqI%>Y{hJDF;fG*@UWbbsKT= zw#hk!eSD2`fOlGsC#v=vlH$TxWKGFlcx6ZZKFMv#6aDl|3pQ>A&M>N<{mVfZgEx@m zM-Qu-y&_Z?-7_C&O?+vGL+TzB7i;(%P84h)OyD8-vuAq9X2Eom{AQR06wV;Y9biOW z-l{gg2RH}YI!~j;5ACMmdF=c6Z1!rS9Lp&&7*$ z?iSd}dOW18^nGcAHOo-C6ohasls^{qQFP%MfpuT?TL#TkeWU4SwuSSi^glxri#&H6M0U+hsYtbbF16j8jcIbly^;j3y+wKfV0b8gq4l>Q!y zIFQ)8F^`4^t-fLqVbZU};(gurT4@lMU@*tD$sCdSeSr02(r~kr-n-VZ27n^P4I*;! zu9(%(Ds2l|XN7WxDVJ&Cg`XQIiE+;I91(y%cDT_Yub4RL@?r3R{@ zmge#|fghu$xKX+&7Jsjm!(Bq7L>qN)1=pOb=s`l+Z-h1^of{yfv8yM7X0&drQjE1R7jfkijkXk@uWPc+Z(D!8dK+9P zwPuaE8UKgsL8q0DJ{;yMLsaCNeGq}YQSistLmK_7hPj;!;f2Z&mw|W}2>SrlVQomT z>$k+uweWFk%svubfoQDv1y`+=3aqC=rc!%)8j61$F&8av86wbeN?Kw+`R_%0?!8~| zHF_a;Ru_#ff^&%Hl7kclGFrDn(V$@ZZrlP3d-bIfG0%;rnZ9%Oco8ZvM?$B*QCmyx z&)?XeTc^49MIK6s0eVr}Bb1re=l#e8DhDY$hz0!u>ql~Sa^U*d>%fh*6+uM#;=Ra5 zoB<|G?#+~*yA2IRN|n^{Kx`T&g&4GK>gcDv{uhote^1y9JA{O_w1AjKYQ zE^mJz7}+Oq8;B_eV2N58(E6cyy`OIFWP;a0&wp8gb8DwpRxMXY*{oSA*|+FX(=%%4)??sIs0S-@VW6hX- zlCC3Z?&XOP!)7rbo!=6iOs=@kyr5(WuEMu>*+WTUzGf+HUmV?31Zj2Ec+I<_P*H_% zReef7E(FUKfRTLe`+rws<9rke|B1L3*H@jIp`FP9I?XA1=av@Ce64^#jZJDfT1uKl zPB^$9`|R4BqF(?EiEuNbE$ek4UZZX(7@%t%w0TKw)SgVcCXSwQYd3gmjhdH96WQXn zrT(93Al`NLCgE~JctPYnhrU!E&}V^U;F|inMSRXz@?RXAkSip-R6@S)6!?CV@nB*s zaKyGzlnvp#TCa*4a~Zn{j7U#UqK}MBz3W%+FR6VSWQb}mV!Cv;4w=2_vnNTDa4sAWs!rizRW&$~?TGW&Wv(vi8zd$Rh3Z zepalOrpAq0MSg55p)IhPLY|o|W;&Nn1pU{CdV)7(&|+koZ9pEH9%bi`uWqa(?S?Lx zy`C=1NQB8mae?U3anE@~hbN?mKY}-%HkhH<6s|irA31Z}p2O1ZPSjlOf4WnIKsqp4 z@Y;;}6Xe319LqUpTj)N>4=eWFewDM8Z#5&{k(03v+afAbkg!VJA~ctCF-SGrDO`Uj zH^2#B;@ytj^T%6|`qJp=Sq$;1tWpnD7X2AkU+>yYR9|rVKZVf`*Hz zz4XDKwQsqUl;lOOWYdqnfTY$kG7ZkYu8s`Uv{cX%<~rw%4L7dsE}A$ZEL#iZpG@Z+ zEnqu$ueuRk^k8?(@_$R5H6);Te;R%@pjVb)xp>nsk{uoubkA!B&e0T#>eyUM`JCS8 zxXBx_3x&@09pn$OgN*RYS%Y^e9C3KSqmZUj3;EGaA9jp$2%KCc2C_jU{AK zpF}I&B!YL&UWO)>wpum6$MeYfOxigF2N@6nEb*GOQ3oo6!>qnH|IZpD z_q%9YzE{O3kjrH<&I_W6Up;zP8=yiv(YlJ>@v+!jllLw>nlvm zu&#?!MBO!suP{hv?{TA1;<1b(f>@p6Q$OJmkPqbu`c4Vf0{m&vB$nA`k_~UbG0!0U zgEGXyT`cGQlBq7!tf-Uz$;J9f-+%~tz^{LSHBEM6c7|1UDm>YW5f;b2(HOyko~L@O z(HmgzwnLE#y3IeDW*e8z#y@Pmv53!1y(G4!X!pO+BsX*u$Velxe2LkSOA$V>2uC|^ z*}MTMMgwU`PMaS3TG8;m0M2-Q_yBA4)}V0K&@vpALM%9&xFgIj@jeTWO|T`%3b_DJ z{f-rBei;`7x|>Yrv=L(!I6;?yIXA~c8d&)_#juS?lygn!6zb3T@fy^0GH`8wpYmsM zn`Xw9#g(m7P;RVC>>bBDd`tZAK~v=3J-{%{5Fv^!+(LI5>*#ZPI+Q)9gTMb_e;pnu z5-8WE8A6hij9b4_ICY|itR$)?x=3y3+p4+zd@AgI5%A*+BGZ?>F3XqUU6v2WT$UH3 zW|kL==F0sC=f?pihl|Itt=TG0$;OM0r2TS_n}4|b^SPeG4J}&btLcWZVIbpGU@nE( z-r9ZfutZqpOAER`2RmPVLZ!eJD{7syvGEMs40QS7b6%t8jX+@!6mz_-oqZ+~8}f(W zL;ET~#?7Cz1=W9mZ(R-3BFdqD$Dm#|9v#g`c?UEhe~_=+JneBABjUGfezA z+CNXNqBRrpqiC7ZLbj{NI_h~^yv=S zVKq%!T|=Q!T$*c{R#AuRvC_vG*giqD#5ur?e1Od5B{QGnzl=NkSn2sy3hgJs$&9?$ zHKbwwm1zQYlr#z#ie78-ouw+I*PRMfb=l{q=7y_pcG?tS!B^ImQ!u6a(>0cznN+p@ z1myoD+FUhx#>1i1f-))IE}f)lQN(wRU?uo{y!)wLT5f!P@ekUWClk}zhA2k{z3Jqv z*c*Nun@YsEguLYV+1>2O`NAxFrTqobzh?J84;#d7F(bk*yTU6C_djy=JvcO}+5ijB za(vZ~4az5$m8P-GiA<&tjYL8i;qhvjUxb31S&YOSnm=V@9G={FhVoD(Kqv>&Vw3L5 zz4~BOfEUsC7T;e&6g5vR3@^fYY7#%&VuyJDG_wAvQJHx~Oq(XFgGP;-c@dm}i&4MR z?S$$Q%8XeB@q%VNlWN8h7ES z5N~`JE04Tyo^qHKySobniG+1?$cWG4hX6xV&w!EItLL*o5xa04A=KulX^B->0`=cS zmTMM+RmP*oJRUA?R&RjK!7Ic}i6VvB@@?_d-Nt6Fy02tM16Vb)gp?c*La(C7KH?&e ztb~%LXz9exuHzS%7WY^*8GaL5vPcJ&<}@))lfU-#H6z<2aPt!|F)1)DbitUb!Ionf9Uc?MFTKv9!L@BT{laIsfwQrs z1Eb6Iq!{jTDRF;j!q&p2Z`H8EUNe`8uM?|LD&eoOe$r8v&_YTNOPsZ)JH_m_GDPox zi4r7EIu_d3E|h@8wM@P9%7fwMq&;=%eb9Z`8Mn!d)6x%ci(Q+-KSxG=CyG8tR@Pso z-sWyDJ(av-x^ZC_44$0Nmlm=p%`T0(4*ZmH%9Rw~|6Fywc^^*U&)=D^*T^{anx9pB zvQqW6h%n`*dJJ+(3c~=VE>9410PNJeu=6$Hx~6h13->$lTKz>FA?sIay10!LsNa!+Y>OZm+sFmVfkp zt(}nHi%Zn>cPWt-!Z_|L%m;uLlx|}*AYRC903uA88mh#(itPsjy0RCozzPoB3LBa} z=jZd$H1pbPj4<`W-pmV6s@Wmt4?a6HCj$30Z#(jM>^Dbn8niz+^7Ll%pH3E!mWcmB#p!>@~AoTNmXz*+uFlM9m0I+SyB11zH z7nMNSY!DABDM2p=HzZyXbhy@mcSv`Wt6x{`Ahz=tO^wzfse}FP0@6)oZ(6pz1USi5 zWE5Vjs9Q~DG#ijdR32@gZfP%g;EkVqR90e-!=<=rf39WtjnfzaIp8vjvy>QpD{A5h zJD6|HjfU@>y`KdeX*7k!u-^f13Tm#C&l-pxG}P;cG#Yx<>H>Cd6Tp@z&%$i?2|Lw0 zBE7HlTwlcno@B(4nk#Y0Y?bNdTgGRDyL!yQ&p2v~-7F;nFPlk-H z$(EAoIPXtrKK(-lHckeNV|q#WUMDh%WtL=StIYxWq68jaK!q{kTwyV+AhrEw%*%I3 zhMCxfd)$O>LD35HgsRi-3s<+52k9-BiF$6Q6-!>{HFzIxV}dqIg{8T6nqnZWPuHM` z(|(%dGU~0-D(Wvj`s{@n)@z_Df_^TDBfQ^$Lc8qX&eQPE z!wUJ8+d@E|udVw0o^+5=Qh|shC%O>;Ebs8HyZ?g_MfSK2`wzf_tO<;(w^7RLF#5{V zamwmMUDk#GID6BW-P4IL^Sjk&NmvVl6uDnzYjQJsdqbF7f_iAXkNO+S`i!es+@EN% z&hzMUDp3^`u`YhE$jxURTA~~xq$J#?Su`WRSHobV(T44Y_SW;Yxg;2jn9>l{a5_Mx z4P%SqTkG*e&vl2U!#xUeOLPs+^u`F7$MYXy2en9Ktue;xkB1eZy1BR#@8I@t209qu z0b-P8aWrF)K`UcAq&>ZB0Er8r$L-jYD|u6-5ElO9evCba0kTzx`aby#pyKe}9KDsk zAq16sbjF_De)`7HXXEh#l-BWJ^=g*sq0({PeO*Y`F5@r6XxBrnFAdzDd?$B9h;H;i zPm5iXyH0Gb3=(SB(u`cJ{M~%=gt^KqnL$&43pZU0JLYs0mIkXGG;|Cj^`7DA#rx3; z;U!-SIj=Voby_@f`oEFnTD@{^PLn6I{{?@34*sY&-cKXI%;MM$&G2eof&)ud==60qx@_b=u zb?8Q@I)Un~5Ew*C zK)K%BVb6bY=ImFfQ42KaE?#wunEY)qc`4pWs=3=UU{FG98mcxD1>y~;>(=Xq-+>FY za1XAs3xRztfxpc^4qaqW;hH7W*t?e=DUh}Y+Jd=Yc%Nzc>4VInHOeLWwbG4r|Ahx6 zQ1GWYb7V#Lf*~O5&{%r{pl!NU@cm-a-IM#U1w9^krkfLUh+q$DwX4LWf|aMfadpixWUlt&Zf zP*Oo6QP*Q**2=OABPG?oS?Y$@=U!^N5sOVPvHZo(ouG12$!iJnI7=I#qMA7(tZ$=R zF#k<_k=F6xIMX&)V8(Z@B z(_j|yi;6dCeK`Z{rZ#L#S(5J*yF|iQqRyiU$#A1AHbg5G!kp7_xRDEO0+k0!Q+D(; zU^2jTiv)`QR&X~V5*}8|fo9{O>W|D-$Z(9EO}gxR=iUxi^3!ZQ5LE3TUicL6Um?y0 z8@n^ni#{$lqX?LjT1$*PiB!umTfgrn_>r09{INV9hda|1`?tA?-@}#JTKK}KaWnb8 z8;$deJa6SO*2KrY{d{XX)dQc38*io+VL&&kZ$z2=tck>B$jkZ;ILsx$bLq!1Fu(DI zR3wPzVcPsJqGz3imIV2HqUT}~cwcJ);(W)DmfGrXzUxRi$LHkg7b+id4J_}^;&^`& zr{OotMR5oSy!9s@qHR`xyS{DXYg0v_LDftAGE#?|_9dkOs_@M^E0a+>Uu&s*ph%1# z5Z(4dkE0u%57qRvQvxCdlCU&B4Vc=2(8ZJ|eDHB^z(JZnMhP*S^8xqNiy|!U--5nQ z%8*B*UF7_ocnc!Z8SSOKaKomGUJLI7@L41;+P^OaJ5`=7VT@_XMli<&S|&;kY~p>w z*Z7PcjXC75bYIh&)WHV(QMviAf`Sb|Y5-=rWWqRC+}Zdhm*(n(Lk&{UqGRdDYpOne zJb!nPqI2>XeLDJW9iWKm@VXUOIFaU3w$P`_#99Z4eu_(@nwIy!JwI-57?>S(S|n}W zDDJF_5`UqJYYq#D)7D@n^}JTtX+??CwMV_cQCNT4tfUXoe@ESc`1Yk&#W23&mo-nb zmoz#tXZQ^0Vx5@qMTE%!O)_vnd_>D;A?m)f-a;w2Y{7Pu9)dZd+DtvnxNbcJ;BNQE za|YoJfH{CkuVL*mfWMKr%R-R@h)tKn4KS~p0&x}-5#=Ut0nHg)2QiR=M--}II#`=C z2EFqb?U?77mk7k$BWn8{w8L7>Howv^xYXQ+4wW8_4m1=6vio>|5QHYg1Nlsbg&{Mj z2_IBG6fJfQnwNDTZ9Kn`!WN5Bh|U}e3K`p?3l21{%k+lXvLdqzbwFypcCRkMLY?Wk z63M`xm?VG>Fstmz9xZ=XqeMBC1_b3IAeU!TJ@OAB3y}!1sXLXq%+rUgp*_!&{((OT z3XpCK9m);m*Rp6-qYO7=COOMAK?Wr^K}ZK3}?#`;D(#7X-2d+<-N zSTdj4cE*y+MaP1&LsRu<6J#aJT~IkN+jdkGmc7TlFxhAwys8WtE1+u(>Av> z$!l4hjI*ok;W)S3g)b`E1?6!xvSMI4v?*-w9-rDuvYD6bXiNzO( zdfyDbEjDhAhYAg_F0k8&7SF3hl@m)}lNGjG%jUjjps(+=V@iBA&lO|G91%M{G`C6y z#cynZKyP#ZgpdDpZYC**uPtZ6V3CWP+ezegZ<^^ZO`@YcPnFYDl4HZ#qpYN~Y6<(o z0}d(NsR_u?tYT0N60S??|4DEM8418TI2D}v`iOh%TZl?6tU{bjCSuK@gMuxPwx=qP z7KzVod-#U4%n;zR&0s#iOU$_O+ETEwt^)?dAHf@ywy4n}pFE$-XP z@b#~!xbKmt#Xf}!k_tBD@5%nExtipE%iNc$ga1?cHz0RS?m7Aw{~Gw88kN3~>7f-@ z85o$8JYXXjO{NJoLb69Xa3oy|LpKtA$kiK*R`dg`C2Ux|Bu%dixD3}d(bXS8aKbmMFM2 zPW_@wti7y3Zb>T4OAL#Xj<0bRMlUN%*_7r?TbPuzyRKfj6~H%i2z-o_!;L{r(*shL zgaWm{0dA^4Cz>v*o}X%i$P`Bf&cW2gmjQ255dFhPHX1&*7=p%1lBUY9WXIY<9Z4NP zeXxBjMWOVC#zpw&{P`~JK=C~N00UYjFDLoIVK2PX`M5XYb+3BhV<|&o@Miwbw!DTt z_r~7G0cPgeR1HNdGj6w8pUK8gR(m?Eic^O?$i){2Gf2rDjMR$K;TPUN%_kczxOc2% zK{wb9+vr`Lr$fDurl)!oY@3cWZuwXv8Pr(+rmmzq?eWIvI11=w;|xKHG6_^73>QM;62IM8nUS%<=66i%60L@q(|oGyBJw zMx&KQfK$h^_mn#oj`RNMUwMWNy&q{*6Z=_@Rdk@9@T=KxvR<9x(vV;qN>CSG-;%zM zoY1Mkzwp}M z$yH5yl?sTQv&B3vW^%*+bedn>;LV1nj|HF?R3X4m|C|8B2~fm2Ep|u3B9n2dqc6Sy zelXWe#bJ96$c-}Q%sl4?M4S$%Yq;-&@&*eI@eWcaC}sKs zoCm$$scMPlPu#!k2TSQOk==cE(Qh?jhdVDm!W$e`8NfJ$wnA&j#OY1AvQjKqG|49* zEQ~pdzsc)q@m=baZ@A`7&Ktvcd^^ubN$A9Qv=1YftisauvrH>wSB0H8P6NPW{ zD@_V;F^=R-LHOVWSRJosUR=@6eUgbmWPhM*K_p&XL+mVFd!4W9r+ zCLa$5*5Ywn6w&_*6^@o7X-yp5Y}`?*L5Pt5dBIM)ID}drtXPQF!U(K0KWo}Q&Pi_O zDUP+?h>tEmf7;D&d_McJjkNX6TKZs)_RVHjMHY)Bl|KvEpUzWBj}@F~(oiA^-Ae)g zh9uL#F}rRznqPEtn@>hrL~)QaZP8uw+&FJOmMxvFL_7I6mayU-0m&s5_3aaC_G8%cb@J*Df*O4?Rp9 z4Y$2nv2eILV{!Uf$KW~-wq8IJ55TbV)(LI}D6UetPl2+E3 z==C2@Y-2u;Ofyr|^f}3XTmV41lSJ9dX_K*yD5VUXRoP1kyO4T6Wsx;lgP^!E!F)~m zJ!!?AvFJo35pdC%192A4%zI)pZhj{sJydww_u(+kIa7M1z(T&4yT8*0{3uH({XiW_ z{(s*ztWZ&sZ1QCozI9@bVJfgSlQEuKKQ@Lx?NebCiC(M79pU+5P)aP#hH}aHk$uoi znmJdUI0~YP7zZ?Z2W+!Jsk`6O7%u4^9AKP|K0#rtul(7wDFb%HE@m9}OD`w?^}vn; zrscvm747qPuX7>Rkgzv!^$l-6!I-UV96y|8V*$>kqE8mc^(xKEEhi=B`eV#cF*g|^ z%b*V8KKyivKneC&Rg(e$?zUFz#~&X{y$}K*f){Ie=Ewo>P~b$Y`%+Hm(oHmWj0gK2 z#&4bEu&|`T@u!f!ii|%9fC&in%-XB0WYB-!Q}L7sC$k@wsI_xLDK=P{0txYNRL zSlT{D*i7F`H4 zT%pz8P4=_IUzrF)e33KP&!|>Z>2Ii8O~8G=vA(@gY5Ua&gn4Uby-&QrrOwv(cw<4` z%v?o0%BuIr_Q#wnE;^mA%WH_f+@edRD+lj}={NoII&EQ!gqgNF9HjQYSO@P$?oe5{`qgvI^Got(o zPw}WV$CbAN!5}A9kKX0Vg(zFWPioP7%*6+Xu_d!OR{MK%JWOSq52+q^TUt_i$n1qH z3|nw{bQ2_GE*5&IenJn{TbmZK%GQL&UwDXysJwK64E30@D9-D4Im<3nyHpTcUSMwk zPpHCBLgdZicX5!R_8j!&BCuK|GZ4GC={hN9=$jZB2&=9S>GkFbGCWV|xW{`hGc_J( zDIBL7E7Ci_p}FA;NtXHgLk4{x5|@zW%So=xUm<7j=Zk!*M2y|@E~v_Y%bgm6 zS7Xup$=IXXQ~tq})?g!UT;?U$c@;VXT9$}X!4?7x{~t$Z85L#Qwc(+M?(XhXy5S+D zOG;uW5$W#k?vxNDm6pz-Q(8c}2OPTF?|#2uti>;wnKjpS?|q)fG3KFi8ooMW<=?La zv^Z;ubl3bB4fJfe;nbgh$=fp?J@@-^ZmG!mAN}<^k|-pMI;M7GwP!@V5ZdG-czIyCR%CDP~QJnuJyBoBtBtByU(l`IBSzf__Y0-mt zqYJ_=4BY303fu{JcGWyh+VI>Q6M0NBQqwiW{xQL}l_+?%jXF7JK==V|Vb@$bML+$E z#G*0os0Zr_XcGhiAgV-ZL$>>>Iy^NspGuoZl?+(Np|PyG(bz)qB1)B`pdo>fDb|h#M@G{7h z8P56d2j~?HEl+tD5v)`g3rtWOiG;R|n=nnyNXyZE5ARDjW91K4&+4l1#m3v5!$10| z@8j^DFc_}FsZ6?1C4)DaLR-Uh(y^Su@o-t9Gu(21ne+pmQnr1t9Su%k;Na)sV_DFCtmE+lPGAs>?4nk=rRyT!RzK>-o(&QtnNXk1t$k7vwS76TgBf=~~megj8 zXr4|TC+wveRPCN;Ol$ej_|RiU9^$)mJpnu-qeImORE4c~j!lhvZhFFK5x+g*10+o( zNHF$u3E0~VJ4Eze0SHFvX%0AXJ5}HvizaV>jxg%x^GvfKUuwAVq&#FP-NM|tR~I)U z0x>%HlY{1u=uGEy-VW?YzykbvXlNhs=O_*TI?G5Tjhzyo#j2Xg@0(Z|aD=u7gj2o-lr=xdZO0!Hy)V0ThR|CS~&hb7mYe1Tdt~-~Yq`>5}SwT^ut4 znk<{7JQ73*r>)+=j~p{*MSFHiZv z7+7ZGX$RBy6;8W2~1(aQ~^Sfwt&VYB6r*ftXn$-{HNP8WrRLkJVmjs z*_57IcFFIuFZ&3;a5TsHR;GX|PNF|> zW;Vmjq}ndPPAzcoQB74%_IYrbm7mpIXzR_DSYa^5&Kw|Zv!fx;)<>S&zD0MOueSF$ zM~3u54uJnw1%2AuE5Z8KO_3+g{L&U&AcETaq{dp~4{ z=P955BDZ=olhyfHIpaRT0mbsqP$zMW&E77}J_!m3k=VcjwW2ra9$iwnIZn*J{bVH+ zZ~l)0Ge){@ZaMlacUH<5&UXrtX(XUJthEs}wl8;0`JOTS>bBIwn7A}4rXxuzv&Hfq zJVoTiq@jksjx`xnlGW36l&gEE?lzVff*-#xTtQp|DJ0|S>#h-D5e!r%;qga7T!@;W z13JSzl1|N1U3Tty_JO`SK+I^yh4^C`#PzdHX8(UfJwDnZR?pDw9@m`r4jfrrYlI)m zMCGS=#s&h*v{{S#eQ>famSfw@%z&o&C-3wbRF)EM)wNjPSd2oq`rd$mLiY>FVleRC z>|~-i)6C6|zuG}VZe^$B);PFZ*ip!K1Y$bpn0X;nW;_(QS70T@oD+}9EPX0pemy#i z?&BR@Q3eLsl>|$G(O7i4s7?!OBvw-;HNx89*=$J@dZX2bdqA<8niFDmmf<)Ss}r-_ z-t$e<@4R+aHC$QiS_&}$<@1Ob26RR!60}T&_#drb4W>Xnq1{28NGba#EpMSW=|L?l?#RkO>AZHZ`=4+zc_7^9*` zc@^0yDjD8d`rt#hAFBxnAXBXWK{#j%-VuuxDCCsgRGlmQ$4JV(c|?q8HanjpM}e3v z1lT5R>#B{1A+#A;az zy#;K$)7i^lgovA9&(XYYG zGrm0j9<4X4b|*6bd<0mJ%UplonkbdwsJtP@Zl)S_yQJ5z_6&SjeOUE!qvUq!Z5bxL zxk6a>BscD0w*n%%+keH~j_^&zr3XRgEMnh-JlOrnqK1yxP@uzfiC>)0<6TDk7?4z3 ziwGhV2I@%x&fo5>hDA=~NhLJU2G}z3!LAv$8gBymQPSp)W-fe=&t1*H&^9%jE1#OS zkLAWugLX(3p<$0UvyJ|h^Qc2%{-OP>xcXyG@LDBq@;9Rtjf8D8Q z$HdjtSy~?SlEk$cq?+}0=mYNFUUR2_`$LwRc^9*l?K!pa;9b&b1qjiI;%gsW7&#)P zJ6Kc{Mn`O zk3EcK&3AwZ(_`=+gg~N8{O7~hAAj^oxnL=9!mpxj3Zn`j5+FcI{@m~RWq0CKQ+%N> zWG(_mUV9P=qY06UG%to@sji#+J#;&d*Wg;*qk#Oi1iOfe-VfPqdnndg$=JI@hQPb9 z>dXeu!vLkVt<5Lmv-%%C-jP(GZ|6>wp!(1nlKIvTZ;)yt?P(o~{QJP365?uN%GRi}A_xMcL(lUd_$? zJ_8wUreLXA(opBG;17P)YxQJ5wg~;ZtL}&~hO;C{PqJ1aIIt|vvH7o=Owy8{q{24U zPraQH*~)=r&^9Q4*wsCF_K!74?We$b;V;MENAI=14z0ASnVRPmMcllp|JNV*Wb>v6 z$$3lk4T_tyXU)P5whH5^ED*>RYS~@UD41&*TcMXm(Wwac4ZMFj+&{w%@}>g0{~fuM z<)SqaNxbuH68|)S3d^zv{~dUt_>WRL#2tyn*=_m8)^cN&Bx>zL1!60j0&_j|osvev5#kX1 z1pJhJt5>PPvdrdY9c|N^UFH}`T~{XnejmUxFZ+i0?fwoqzCJ&(7BM2^C=H+m4a z`;0}vw(XuBK5alF3m z8)Yf0_>@bIck$VByf~CYY#?7Z;cL-}DMJw291+f(;E1PMzEU>XG(YAhW!zDMM_`$S zlq^FsIpRlDC?dFAj*{Z>4YSCSG6=O;y?o&)(h*KLAw4GBM%3Y_ z3yk2Q@Nwml7oG*bu|>(qu zQOX(SoM_urZBd3bikG*4^3nCB`?LCH^S`ed)Dm3&U%yCpdXTbdq4&)pK%3O)l*a3APXX!q1nTMd;K?Kv|}0dnp63u zkp}efoM8jEkVr6kIu865<2Lec;;Nz8Ou9vzF7gE9Xj}lI*Y{|SECpYBY`l7A-)SbZ ze&eH{1%qU825ExyJN~(-k%O-KNNk?|=k6nME2Q>v>vp5b7Qphh=pfp`mEmuh4Hj|< zHo+ETHK6^q&gdoSB-rmpoQ5CbM!D$y!(%CCx8Z4jd`0nS821zuHq{q-HP;IzN{r_~ z>;I}tY8}&jOHwz^r%RJvtMc!;OmHS^t8@XM!%_Kd+CQ0Y@%h?)m-mT zO6a-75}}?F&=g@JU?M(Y-tAwn|8I_*ZH!k4ozOu8?nQJgE#S6FzOMFUM>Z58gnR9C zVmD{DWzomCd<6lCSD12vTmhuAst0Bz$hrhkz-H(HolU8|@SO|tP&@Hb{ z{j$NEgp!U-_ui}>^`W_)zPcZhU-#q(y4Ost2Y-i~_{2lGl;a0oeQ=JMF9FN6O~>8r zl86%P;!(%T+6~)S*v*=vxElC~(sX(;anaPlYT_(ttMsW)fTXwgCSTGZ=(`giP66Yw zZa(esCM(uJw@-5Oufi&xoA9lfk@0bDNnk zO;$aM5W%t2B4_Te3yM4CK{2f;D+-Ah?8v&euO7!yTl12pz2V6Xxy8-w{B$xBQgKwnpjyL_v>l5?wDRfC5oggf+76kTIH_N09c^ zdJpH_MsQTiT@{cuH*Hcn8v~feHv1crMjh@-2hJwxxf7%|6nUMl3i_LVx;)ZBOq{Jw zqhv|*QUVNu)YOkWN~EL1)bB18O}fIc7iBC!1VuY>-Guk|H?@{yAW~grL#3!yPPSNY z!PZH1k`Y&2wHNMvc^t6y65)_8 zVZhuQa^a(f_S?UBWZNf?shloGV<>P?(uP{-Ux0`;MmYlSxQU?!a6%iY?5zYkga|pg zT^28WbY4TKAAMo#!mJ&e%C_u&>t8qv;?j^tx?f`|x1yS+DXK8tM=P!I)}n@}MONFx zG4joMP#Rlm-Y30XWK0sL=SF%F;0uSiTkCBb+#Qx?(AEvZx=sD?eQkN6(y)l(+6h7Sg?&+h)@!g)d3r`=o0J|vQhuGDy^9sc${dvAtTD)S| z8&^7(0rFO@n&k?o=m`8B&_fwZwZR-Wq{6es1+_6A&g}5S8XalAFd<)zUj9!5=c{t; zp!iSz1C~!twSWyMiGJh#5+7_=I8v*c_6qG`HO7KAD7+G3@@(Kt9e3r{={ZX~(1SNw zW9!aY7Uym2JBppDtP9un+dY6keU8+W`=*h&$k*#KO96~(Lz`&1IK<4m%Mn>)?NDf#2j7v{QAQ@io*HO1`T^huNe+N`>7QT_(KK&PB*whc5p8BQ=eoi88nh_xSIaQi!h*AT_2wcg*|eN z3>UOKwO|c)^!)xK{$PL|t!HKtP-kutpHafU{dq)%vXu)Hl$7lRuo?7DNSiJ5E6ygC zsc57|fIbgV9%3}1hM>d&$eU;I(+}yE0V}euSD{i@ke(OWw>m1 z&WyHQ_YPou5}Cd&*1~+!a{2i$`IB1Mr_#Iane18u%(FVuz6I_MTUL z&?GdwTx_R@&}H_d`3qj!Ip&?`*(_n+w8ly3y=JsnKThNQE5eHs@Rv@Z9Q?%>vA;EA z|LR^J&}+T@W+($9XW@06V%}grPy69Qjz5G}uUrg=#{@d@ib4(v= zO~C(F!LW#_O8p_Lg-nJUk(blSS+EDFKh}J}Yqc^ibI%19oE6^?$O=Bv`@*)7_-NH4 z_c3mNEV_oQ$Gc2k6h_*tKEei``WMtW0)nV;0aYb{eFuC6F-IY^QK8v#b+&Fe3~OTU zXR-M`PleTToC^isOEDArXLwQgX_A?k%V>QR{%O|uez!!v;d2+$p2}!h9rYVe$g<}n zV%8MQ(}`6XL?dmJ0E3k>W(-VQ&xg zO(V5C{xYtR8~KTBkI{V-MZCr6nt5ewd| zpcNC?nhNsXC7=atGhYn`2dRrMlc1LbQGj;q?Y)fpFmyFKbCY6kfQo7s;t_57BRi-% zFb;~&>x%~uePGCFl)F~bWEw0%N-VjWAf29|^@c~b#uJ%ZIsKz=H6XgajQ^*EmWm2K zDxB%?D6Ia8V2)IwZ^Nhcc9Nl)7q#yZ@TVig-PaT< zmVGUXU0{X@ZCj5yv3h7itZ%7ex1*wtR4ldlqy;d+&MCW?(qU6p=C;-kQ`7+MKX)zQ z)x;_Ix_Ips*>TE0+2(bMJGVW_8wNDw9$qDly8o5u_XL|yb=`pcboFW0(%U~QmHxXX zNa|z?cXu})4h!WDXO0wGCA9f~h&Zr^g-jYDXxHe8hLEbdZG|zefvSz+jps0kCyS@R zHfVXd)`|;Vz*e*<6pagLlZ)JXU!TbC*L|}mUu%E_;ju|o*h4?_+2F#Mf)WC#3aJYIXqAZ=RnWYY$ z1k->pohiGMZ$LS9H-J;&)9tf5K8TBH4K30ft7-nd__-(pk?ODU?5skmBim@4_4Soi zD^u}pgC7emt?xYTSkuM*v3tq{RwBxNBgh-2t`mkgT7453Z+4GRN-f$#c zS_zd4aXd4$K_Ax)%pRmHxJ^%!YX$oGdi>$9_38qMpUOW79K=imBQ--yr(z;n5snc6 zpW*t+IMqaB`w1U7%|LEt;N zubOC7@k>9yO2Yjwdd_>8t>2Up6a@xEgM$S=L80Bc=brZ=do-d<4_X%uj5=W=thD?Z z8wi8K(KyOuvy2!$Y(Ef&w|o9_R8`iczhK{dM@qzYYirQ(y zDPk<5ZkM505$jK)wyOfLdFM7jc+KN&yBQkbxCA~42e+5|1H6bl-nefb9{MCPJE6dM zXEk1MqLORU_7OrORRKt??Hc59PW0%+l?Yt0ar7Uc93lGeK1I*+G)U^66Q|XvRt|a2 zvIul*S5TL_J$b;jxU#0@9=tXQ-T+Crssz;DHkxQ;D<|=$pB|>Oj*&+|3K#bN?f+z) z1Re^Ad>y@1=K|T;)bf~5^9@mf&a580S2mB|%dH=$qmJs^#foNB0biZFVK8Mazo;~+ zd>jtSv=lxR=$L{uEzF|&yhfZ z#gfhE{YEuz!jOh#Ni!^P=efWi>F$!qbF}gcH-Yf%45Nzgi$U+W*TNN(M3*}+ELs&4 zd`WO>c;n=8Fe77H1&>J@s zNv4`NV^jA}+J2SyPd2dU&GdIULmz6&Rw-Acal;WTl-EWHk{G|+9cd$whVGNqWpo9K zoW9D>Nr#6(JaqnEq`8DN%Z=miCzY`V0)R_Y^I~ zyU*)QqDT0Oz~==9%q{~H!Zu+?>)EtpRq$lsi5HefKz;-PKDsRlr}dlTfmpNw&)pKw z#~*y3_ggOyuj=;c=V!q~)k_K}V$w096;#*#*H0GffsfzT0;9Hnp1t?Razc@Te+0ET zbx)sE@v(Kjye{GS^X|AJGgvJ^E|H>Xc}BmVv&i! zX?j{i*i(l(N_BrJn_u?<&w>>5)_g?JY(P+ls`mnUDemDrtKlt;zuVsB^!{I~{#s?z zAegSYQP=sRlG|$y?!L+BzJernzNzNkWcQsMXcDq?>3B#|?kqiP(WGDh{I-Q&=3DyY zZ}1ZtYzIPG{CmGOSM10yP2yh`HEv0I!ubhzKH88w`cyQ`_4d`@-s3=>Cb?*Pq|qJn2ets&AoklPSm@e)*Eeso6P;)`tmn_uxPJSD-a zScEYsP6C)rZ(maIuue+a`y9F?LFQPB%bbkVpDk=x$R`J+O8&bCvQ{apTr3f8(21MN z!*E_{l!dX)B>0!`q*d2;M`zF^T~1j_?eBO{PWmt5b4C9B8NVa&F$)Ov@A}<;vU<*? zK;zHcLU_rT>;RO5`a8;)QA#g*o6APKPDCNuA| zb#;~16T%2_%sQ}~R1S?u4`s@u`J z_x?_2vS(f`FJfcaYU_S~ce=Xc&4>H0U8BTA73MId4n8n~03MY@;}Omf<+|^md`d7tDX|kRv!25@znDpCAhf(`)bqsq z=E0QzmJfRT0_XKnq>g{<`1edqy$`WXiJq}%v>;yG3=3SAkmEyaOkB=7=VV5bH9!rk z_CTIIY6o97;&tH%@&CquS{;^qsJ@7FlsG3w?=n-cU^@t}BR!eUa$M^tQVut5AlgWF z4;|`BX7P8TsApjm`A82Z>Oj?XDI&1`cVRUrDZr(^POY;vWo&w)v%1Let6S2oq)Hp- zx84u2=qTWzW?H1qym&xC{sv%6HrP+(t$Zp@mW<8SC6RzhzdVKiW0Qtqph3~w>uVKt zrHbRa+F^h1GO@97{BY|mmO>1A~bOlmD;>gB8p9C$D@j9A6kqKaszyZbx9yLwcbJ>8}_EVtMh&<#FG%utkzD|d?dq${=#OF!t$fEmhgr)T3r~fYTzBNz( znrOD2-Wz}N5%#^$dYh2^PQY?-umsVB@hmc&j|lVoo7dk9-CI2X#|n)3`V*Bje)%U~ zU;u)@4_C_ln#rHk0%mm4_B@>NN7Kk?9F>a;#x(bO0yzggce%@C8vU*JemgnGRW(_0 z!>E5Y7wGnHnj2edhtaR@7WBqW{}SrN+Ms>-($J-GYw^cP!n~u;kgMpX@2x4pg}t9$ zY$=iGQjz;!`@*lueuhYT52S{J?7lC^VqcdT>F4R@-!vrPRAAK*D>k_FAn^TQCPD8} zle!nc51Re0fd82s5G-Ofh;B2SCNFOE2Oa>P-7wzrg2oZE+XGdZ5gd{Gb<59a_x|J|wLV@DYIqh8a&WnADwmwQ`7PYe zfaHU4{KYseEbd#HvGV;sFuy06KRw*aMyRh}(YbAhyh7kf5#vC1bGmh}vQG^2>+B%&W z8ysFl`f_Q4sM(k1=@tbRoUr!kQg zvGV_T)&mS`y9PQS$O1Sfk@ShNc#~yt{GjfevFyt!gQBr{TB%gl&0wbF-bXo_MyYuv zX#jFuTL}u2e9|Tg>t+Bk<};LHAl09FJeYR;EDXYK==lx%{z0=x2R~$;4*3d@r-QG6 z-mASuHbR@>RSE0~ct-*<+^w{yYRWWPKp#cH!%xRs*|_5l>z~MaQtSQZGZ>nsxTJTer8t0^7m?l4mBHr44kc-1|tS)U_}|P zFXu<5>&asMh7Yw>(DZem{@Sxe? zTo&I4FVgM@`6e(Qr$e~!Tl4KQF#2YA9%ne1!ZN|E+I!Mx-D_w>*nMip*mHA|xqg2H z2mGvo13*X8w4*}x#pCN_2msqUkgq=UrAkJHaFsiUaO>0oqimtw6u9VxNx#e_9a%B) zb|!F5lg+8)16kDw6#h(KO*UUE9Kn#~MUADoZiJQCC18O+a+r#7+(T-fVN| z?wLE_?C5QfF2Yj(4g7xUf(rfdz~*w&h}>L~n^mmyBFPo`jQ_n4nkd^CxNAp1z*^kw zwUx1QHBN>Xr%y>j_r>iBAF|JoGqzZAO}V>cGv9*zr;$;igTK~0{FAQafhWVT3ppE5tJg{`e`8$i6<>Co>?>Wk zB@jkatNB#{N*pJNC;ZqzW<{JtSnHbWIBmtW--ttu*+{BtQHBI*4jlOOG+dU-zUT0U zm3kSs*;%U+$n#-Am!}$DAYT+i07>kH!esa(>CC}&zFxD&FXfZ1nB&^2?2c{x_LuDu z0q@-?DmXl|EiB-{My2t1@P>qHjrWgD8?Q|aDY>wm2TPe%E{WO54L--o=r8>KM!msI z_O20sFI7~_?hMm1jD9amQFu+6r5N=UW-?7y$*xlA{UASkjZ`T8PW7WPyK{ARAeGR< zI~yw`y<}H3D0s-rpg@bRrMF6Z>3=$)62|B;x;q zFuQerWm88F&HdfAIUVAynVSEY-AoY3qKwfnEc0mnHT9zLwpF|;w_YAW0H>$ALQMs> zy)4mFCi8LUXKLg$sZrQ2HnRCpT52|Ij@&gMQf15`nEF^}O95|B6$l&PA>^R-mH>kh zzGs#Gw=FkW|Nouj+BXBr@uI^U1?;LV_)n3*Wmg4r0S)6fBI6oRRKqCuosuxqQS8{@ zyfqv1pI%V##|hBz2zDH3&tptTiRWpk0iL|+`+2EZ1}6^g3m&7D>=eq5El^iuIYejI zSZ*Yd<|OzyP8id*=_Y|-*^f$|fZml62{a&(hUKSTw}xf+@g}RjVw4>@HC+|ie90QI zZ(juQq(K)IdYX! z`I}ZGNKDVs3jGa~69E!LnH-$nk8lmP+Ut0xZfB$v&}GXZI$F@OZ*b5_FIe zJ{&h<@xm*|EywF6t=0gQ3?+jH&f+WNDEyGvPL(Z|Ty|P24#()hxINMSY^>GyXzbsh zx%g8o;ffV($s38RZ*gxU&4K~t;2^pe1--9=4ekPk9Gohk%X-l!5w-q7Y*l3MqOxQ> zFsIf0cJ{OXvkx1$o~%9ysF_5d#+ zA^2YLLQZ;=Rux$v2@8wtT%CIYG#`6Gt&8$iwV1RNgf$O53pf0VH#OrW08TBoq*V{F z35vin@sE`5UK*Pup7gUz0lbg%L8gs{uvYy#45&-+jM)QdQioB=z9?UW$4qJQ0CbRVtT>zp93r zYhLH2%tzi{^0`TcXBN&$V@{GE-ZJnkwfs)@^pr0>Rr7=}C&+V$nii~fY?)kld42!C z=t&#o!%y;Ik6{Ocjh-SJqc$!HPhW?p&BDPgwPS32yx&4hv_>)S~gSLXb0{$1AsADnPiQoV=}DmN+F95{-A5a`OL0HsX~;$%h^ zBI^Bnf*PVRi*i96;#>dD{xdrpraVAY;n+hSh-c6xWkeveFz_ivf^1)54)A`;f7*UM zXfQ`xCYm8H-EC((#z2dqU_zBgF%Jz`7NlaM@Oogl7r?F)+X955z|N_9^aZb&{Pscx zghdgVqa*5mLDBQ0)%xb(|9uAe{#OV+6W%sQi`+(vA!6=@uy~k+5Dy@WZ|v>S#yFQs z>#i_yoA`6{FNoVU1)ceTh|cich-zS*LxN^n&DaqbxsjQsZ#8L>%kwASS6i83D3_?X zfzaU41h3g9Q}0T>LQu2am#!AyPKT8#KMnT09z`Preq+AQxw5at5!MxNYw7kuZ-i={mRpJe4N9?Uz#R{uB0>5wMbT)ks*Br_j%j zdFAm=Oa3>CCRAbjdZNbWj7aHLjRE*)pBTgEB*jW^dT$L1Qg#!u=lDhF7~S0wo+;+# z9+b{~&kAxfoC01y0M6cqUh_OOv@)cL=#QjLBsBiv)+fBT3}bVgj)1B@TKc=IrXT-y zHsSUX1&CzOj6xWNKYZ9284^Kan4QawZ1Wd!!0j}AqMds8P5H8`39`2q2GdnIt!E+U-$fmB{TUMwjETO)zbZZJ z6Re~{o?sgiB-&&D&r&nIOVh)jIeUwyaf9TPS79_$J4qxTFF^}yT;@32`!Ga~x4-WB zTXbo4i}7vi+p&!(F}CAthCSfsy@%1>`xQfN{zajJ3?8}9P|NhZ@;;Ib+cJlakWfz@02b%S)ws?vUv#x;2LDoi>hToDpkmej3))s>=K7 za=_?h5qQgyn?xV~N*Fd|TRMSLXoYb~-b8GvQVIuydXYGqUO0rixpR9tWBsNgeR!Vi z{*z6Z5K;te-D zCZAgxWH2isy+HKG;H?7ljF7N(fqA!>eGzzR-Fhq6WGYFP}W&H6DolRjPe_wz3P z8;3@7m||{5ubWE)Nwok4PQ(b`M${|V_`kbQ%kXi$F>~+%BR~RCn6MR$G z;0&$>f&z!5*1&O$d-uibGOz&;`i#xzesv*I{a~}=8R6M$vhuCJ?)&FI@w{t*jmHAy z)qnH3u{Vydk!HH$9nNCwXmOPO@4n%WRSusr#ye0eX`ZT5TV}~~2PbZi+u<|Zx#gT; zRWi>!zjjfciOl8z49#wYd3OGJfz|l8aw#1$+WcOI7x(Nk=PBY|;mT_UatFWEwnE%) zKnrxQpg?=2a9Lnphk6kt1=3YoCeW=t3}~mvT-waIa+XZ}f~;zslaDeS*qTPzxA>CW zlOA0Z#C;ZU)6jLd?(Tc`gu8dKR5bBzx+k;s5br6Zd2mwj*52U`7z)2q7Goacn3{)z z`%3&Hn2_J#kwj@lSkGLY?QL8+@6$}3yp9x&f1wSIcnRY2-u$PQgX0VDcHU#T7C2Xk z+|Cn^`mw)n4I|J2)#Zb$`{5nNrZ|w?fDoIhnlBQ7YoQ$gCyNJD>Q*-?g`3R^fXeZX zxzYOA(E0x5Y`Nxo8Qvf*z z5^wG9S-3oH$dT(zmi9MTfrA)Di25UlE2Z#^9J~ajaYTn!(l27^f)&|_7c`6{Si3_- zPC|&IWc|v$u)?(Y4ul%e~ikpd%?_E-pV|EYL=H(4LgJdOgI>f1P1N<^T?$q}I9Olcz z_dRw99^Rz*1r`D@94?-p;ciQP?r-^8nbwKIzj(slXrt7a zzYa4$x9;2p*CpPEjN>0EmRZFz4ymEO5$0hcLjHIe!Xjr1#aE8P8&ybhU6QW z{z_5S0T%izX#Qn2y_!i|Z-OdY6#t5^*g!t(_>Cx*IR~h%pgr!hS*B$51d-(JIWiu80VR#`N}bgdgz%x0+Jo zHx+Wi_O`GFIS+>+yW#gHwfta9#W0?Z?nXRZV=8&J!5cxq=ZtKbCuY?3L6`20>fP3Q zx6x-mw9?w(|0trs(DEkrrnk<$Q{U{bNaTa%w5ISCE9|#qK4Nv%hiz66cO~C2(t?LcfzL zF&KLEiPIo2}}r8&37tA$@HC zjR~$*W=$)X5AZ;(YIwe_!euxuv$9wUHk4onRt1Q47+xV?PkATne!R~H^ffku@ADAH zh~AM*+t%>i5{#8Rm_)Ou7_;VH9bqtnI5$Z-hMhe(0Ut0nza%fMqYc>_88Rljvag3+ zC&j1^?XQ>2*xQUtda_Vb|MAI>tca0AY2nkx8u&W~Y@L;QI+vIAy#2LmHE%{U6deuH z*1TgK6Xo^>Bk(}0sVNi-y(J$oV0UktXmWH=PWhMUWyma#9udyt^sgmV-}-jzYa7Djl6B_yKFeay&$Qw54E|xg0Dhhp4qcDb${Npa>h8H2aVGUo z?#49zoTffmD@?xjuN*8Xr^P+TiL;k;CGR+#5bS^AZi@Q@IdnNC0bOFdnZLc8c3L#Si zZ8rmfI!=RG==TI zCf3-r73kTFq!5Uj%bQv9Vx!Yl1RATVOamxsZQyGk$$YPnA7Eb0 zNFTc`L41PT`SD&2nlA%0xSCjhnjinIMbt^_m=rzf3hQgZRO_ym`C(!M-7Fx+Ce9(u z3f$g&KK1(>VI+tWfEV2V-Q1YGt0j8+6uRPfvY0FV6%~pj+%i_olA!yGszrr43%f|{ z$5h?X{F3$Qnq#hbFxtGZ%^p#h6bi)WojFwX5z%apU$PB)JrWPb%ZJ13P$2LlY08iX zoS&b_*8q4U3F7~*7u<|Kvw8C15PW1!(>9g~?~M%jS@75H13O;-;*I-5{YTkTDcrvy zflxEr-fT45U~cEY$6R2E>W!f3c<%^TF^U@qiTf2aUT zpcuJs6PuS9$!3l8Uf@_X@AItQAyca{=_#et@b7w0hU(gOJZPimfe^TeOF8UEB)fvV z^5-3jq0dOM`{||n@9WGD0yXR<_Gfit(Me8upfl9dRbpfjTYO}NMdWW-E-z=uknd3R z17}tI5dIn%;MOhpQXoE^%fsufvBrDX8|H3^POS?Ev<%mMq@mfoi#_~MAki9buJ`u% zQUS-Gid2=Kb@>nVKj%@6R})FF91sM;Vvj z{kl}Co^pNV9>%Xksa@7O*Fzj`Cy8cEiP!i-*3cLTqAny24#Cq;o3vKhY1 zXVrXQbrOUMipOqYAddPldug$>;+r~EcOFpw*~wxAeDA=9#RS$nkKDq)n}%kut9C|f zh+AKIWwUhnj%WZx|Bu)Z`wzyYRh_DzS6BAfFmnwI-dPz`G~M2)Odo>xK!&Dh_7M%R zk#|RAiZi04TkbLxkB_B}*8g?z7Y$udc0QGrcdOzo3IBcag3I*k=}{Y;58cZn7-}Qz zFn6>p;~SRxLK{_|bH=myowfvq=@V!HRvFu{Ph>+JZL$k_E33zt9G40xOSeVybH`&d znzCnz0sRDj$81u!dF*B*>A+>HZZiB1x+f z<=BE^SVjWYi9+iC@#XR%stYjV$b}Dk_`7rKNf~GDKYskF-+mp4Y zsfNGNtYeH=;VjV9CYaU&XOW%rpOet$XW#c~fs9H^Qi8R-fx~4G&L>YZC0!}LR-Pfz z&4b*h%X$q$5g||ZYK6ewvLgspodCNEdoA6HA^mWv-=0;gm0Ne7{Z4TjS=#Nj>IVlb{XmoR9g9z=S00V#E*3N)-$TzomD8AZiZv2=JR2` zT%xH$UzOyVd#YJAoCkd*ai+X2TWlOIWZIC)&)s`XgznF4^e+JuOS{&+@~)WI^3{w#9{sb(Ui$eqx~8VjtVNBnTeUM=*ITF= z{{xl4zl4&!9x{%>#kd68gWi+rS%NtV#9$^;s?aLh)qe1C%2EwPe)$nhkLuu)q=5H5 zR`QJ(cxyuf*Cx>QDEc;n@lUpvys)fod0cmT_Gh&m*C1}?MH>lXT1?%HLUGG7`~VbR zR!%`7|E?U=)?~#0n6-`n=Q(q4Q~^srHh2a-Pu~7eb-VdEt?a27$~TChqmX5NL1}ON zNPOH!tgGftTZaHly8rvo+x8IOoNG+>*dr{wFVp=HGQoUpx^RhMz;6B@uJyUY`U5qj z;=DAZX(w=-Z`X{dO-x28_GX%cl+6gv9^Jtn60jIRUs_QAGNDPg}wM~5d{h~p*oML5%WHeocu4t2|IuM z@^p@P$%w-ah`Xk%SJYdA9s^ng*f}q@H!Q=U*mKHK^=IcDKDqQFN+3Z*mAv~hHwTwu z#0rUe-!fLtQ9iVDHD`jVh?>ro={{E#ZqnK_-B+R20dn^Q0D z=**V>8Ec!}LMW1{e7`9JNqI=P3^ik$9UUVIoS^hi&L_t6gaYijhRrOh!E3MTiH8cn z1k``IM5ZM;%jDl})>-ubz;)r^`8f2qm&4WfL3r>`)aI8>vz-jnxQtXC0(l&Np@EyVlMq?tDBH;M9T-H@jU&z<7q0C}D#R=Y1kO=zi}w?0iC=%s^oh>v_!Ft zZ0e%;wC8ffZitsq_oe5;4Vx(yw7(5@UNyT==$>Iw7+&ux)1Rd~GT%uDRp}oM=zU_a zZ^yGI2u&ll4du5Ove={NCkEO5J80F^3~@jDp{a}>9781temiab(SejJ!p4V-9>@x? zgnIz!#f3G27~Lt$4K#??D_UUecd7Q1o0aOtNK3}w`>(T7z74V1baYet=JkvEMBjMJ zTzCt1JEPs^?h_A~A;lyIq zP*HA^oGvWo@Ui5oMGEtnWoh8;=+q>8lw>P5n1=gwUh==Z(Z90=-ADA|M=@6+8O*eg^FG40LHftvAn>Rh5wQhPDIO**P8}2MhLvPBkWN%&?+g8L z%OK%l7(%0KdGWV6lDD+?V%yT7&4chz(0zSpmi)tVzhw)LhN^){x(gqF?|8vsPN{MH zMd#yb{~@QdyTJIKDg1v*9;!cc+3{2qT9N{6-th4xG2ue1_ym;Ps5WeN%pR;H->~E7 zRZ$O>{nX;D+ElkEOzj?Cn8 zZ?^mv+sl#d|Gra8M%SI#D|z~&D)flBt7?W@k2O=hg7soT<2nvXWH zp4kMxn5Sijo<*m>G6et4#(!I++6NE{=a7FdLsbY$4-t9~6B#2JsI+h=f7=LeB_$?f zLBI7)O_<~7u5mJH{9@4zuXDT5;p5f5$UGsj^W;DiZdFQBgx)9L#JxMk2=o>+Plwe< za`RIn@3!;DiUO=h3nm=F*Zp|}$EyDt&6y6cBeT38|FuTf^;IU5K^G?2YUh0}NLk|Q z%q9pK5_H`J%>dgqY=M0p`>OG)M%TuVa?A7{fMI#BL_=}R&)8Sbc2P(Zo>1eDlQcdo zIo&=*M{J^wZGMt1Qk~CCML=}rnOIye3PVloooZgHfrThFJ4yt@C?e*1!0>gQ+Nw|*r*Un(>LLE_KbZ9O@* zic8IwG8Rm6^bbV090ShI1fj6&zZ5nbCF(t3GrW55%cF>@%ln_86rL>>H^eO#J&Kya zeItVW(l>n_vrc34*_vn#`4Ai7Nvj{!`J!{-$(m*l7BY;gkiY|snx!=iUk>1FzPfYH z*Z1YL_q&T~xjxmy935*o3}~z^R3jmRFh61-AK;nN*wWW%BYBH`8merhK)OZ&ZQZG5 zv_Qcr*1se$aZB{s@0JSqxC{FlF~(9j=mA7p$B+d<2|m_#-c^I9ZglWFYB;9G@gHci zemw2qmyDf`IJdm&G{IFN3wlq+y)6OG2Lg(~-?|W+;n}8z!;fwC?!oQcr05vR@p64Ci@B?3H);dHmBL-q@Hl;A_X(s6U){NSW(Zta0 zAjp8scRnd$lIcdwb@gphARKG5jhwV~{fiB{9b(&iE$=1fr??y+_%06K3yj}?2F{$! zq_tGBO|&D6l<{t=DG?l2Ad*Yy!jxff)Eo6smp-;K$^+h=?dueq3o7kHPU;1G4x#?G)rHZj< zK3FIpdZ0#{277RX=3)z}c`3rABooRS(~*Yzwdt*(#=NRBSC#d52us`*16Yvg+M!FZ z_lNm@4E8QwiDg2+sO_J4Zwn|+ChQW%FNL8+QaALqxi7n$wRs&flanHVgjVR)>_cXu zKf|)Tv-q+|m7e+rvnZlTrbg9gvEuI;sq+3(;oouyN~~Zr&*ndD5Cja{w3qlT%*g!u zMTAl(7H@fEWRMg#h8FhmHJ~Za)T5m`8Vz9lY?qYWr`&kE-6QOJ8vbj2qi^s=PIta7s=3ls<#TZ!#V)OOdMxk6mY9t-{jTz&YOwj%fD*&h3 zb$;-9I}JmeOILBB{yi0P%o24Xh9=4bLXo^jUqp?0ro5VVRbdy`Ak0W#_4u~YHX#FIOxn%0OjJ=MPqywCVJWD@g84*P#*0J*6 z(DX4ZHg?GW2EP;?GR6LG^A`jdGMWnoBewt|uUGAZw@;`;3bcuVlaisUCD5#2Zr(U1;X)y34BY0>Jybz{j@K1e&eNI zKY7AU+)>)96l49Fz2Nv%Iwt4Oe z2>K`7M3Clp52l}Jx|^KxtoA1cu?PLC-#>hT=@F#C4zB3BojWDUR?E;PyPhk)KP->! z7Ts6~@9+HfZmrxIm6P)$GDPNelKOH(CJY0CY-(8ox%a@|CjPn5iy`-PeQ9*HSrDj@;H38{p)62KJ+lk&Z*{W|j*&)mLJYbX9~ zqxj`X*?ql!Hcymc3Fw#XFX?96l`WE?2*OAxB8LSYhAiH$iF=%~_pRSIdt(YpAiUBZ zUhmj|I(lC$gdjOcVFj$ZhOXrGXj`9>lPSFC%Dlhy>({&gadq8}ruDmiX>xannI4)^ zj9ntG@Oyf#WG3HRs!kSZE}RzMuccr7E?VcVmc#?$ zFJYh#FgEw(Osen5!l(3#TZ61aZR4SQ!>?Z2v(yr4<&z6a11~C!ZC(Wz7=BK1K*7~E4!javnH^t8oXFD#Y!`}UKb)D5BQ z^ZGl>xa($1B>P=(CNH3P62db1`YaXqYw?FaA8j0#CQ>{Bb+1pbs;QSdoFbs4ks z8PJxZ0h)@IY%-aRV7&X)4=N1+NO~w#l3Q(m$em`_gWz~IPO+-9SZ?$Jclywi4SZW6 zPxis+{5pPT?{U#OeJf659vSJ>m76NS?J5qNT9a<`PL<5Z$pE z6jv{saS5G0S?1&NV;hcNkA$AN7)c#H{@@f-$G1jJyzfBKQ`y4jH!2sPXmzC>wrH!F@p1ZB)Z`x>sslUrwnDio|n6er>b9dIeIyX(n+&?zULmJ z2d#2czH3xFv?!I5J~4d$IkVi-TuxC>y-&8)7t(VwlOe_9jGQ>V^wRmQn`{{lB06b; zpgd_eK76=rh{U$%b*WvW!Y{Z^EpjwfrOJxBMxP7uyXLTKj*dNjyV@n}xRFbep@8&5{}*xhq>dTTseCR31i9 zkvIWQl)kr9C~s&QM}41%E8$j|j+KmymT)DNW;tFsiwe-Ml&t`eQyV~}g(scU*Mp=d zr}v`3Z!r{7R)Wt05CEBxp%}mI=QBC-S3F63prm797X@ub7@c~SGMqI3EnLLM0lJng zmGAvcl04PsrD;vK9k@a8GCJc%+uS#-lQi5oDDzh#`Y=;H9@48;yMvv0ZXeym&(}*L zZ?B-AN7`DTsFQ2C#WdNSnb4DJQHhUu)IX|11oI1j*JwzUE#^@nOg!R&GN8$O!S(Jx zH>$T+7AsfBbDr@_3HR9Gf^~c+x7D_^F)m>5CJEn3(@*e)3+Yzqf8?(!X9>4HkCD57 zhg9%wwfA@EE^I}4<`}o*A{ti&vUuFm-j@%tBlKGKg!L!rodTc@pnSkijFRA^dOP}BptC<6LM-YK(FyTw01A!%4 ziV|juiFwP}8M2)_ZipofQPFXbd%VPRkG_kDkYktOUycv5Qw*kb-jKDLUwXEO{KZds zd^0vE1cLKR*U9q|k9=UkhZEjlnlKxb4x88F0J^dLA%N#C&v=g#1tJA#09%5|N$*%_ zI}NSn*RbuD$Ri8*zo3B(lS$g;YY;*bb-NDiQJQ_|5fS~*0te;dyS^bZRz!dR`470d zUdFk}F{7)xN`L*S%_EX2sgGk~&!O{fwEfOJg!DI!JlpCA3$4Ze92V7+BDj9R77GZ5 z!d;4C^s!$ryB61TGU>Yo9mR!qvZK6HGFv2Hb&meJ=(s%P0C;<4$9kHEIE$$yEU8(w z0gV~{aVtWC>l5TXTjt#j3uas6o{dGRilPhW3#ildDT13^{izf1@#-nAnb6nc_e`ax zOM2jP^FqaMmW&_6oO;6i^-93dHe<4uswHgIL3goOQvVf`Vp z6&l?MfAA-%QCxta>Q>qA0NY0}$Ag{C4Eh~n&NlLNR|kPz)=GEPZr2o zpSdbP3!Oke0VN@v@6F$cdB5Qti)@a*KE`(PpN_?rbOE?yqa4P^FA5TQ=2V7|riFeP zocsEupf=EIS!!lkykPR_;9(Lj`~a9$x6;`=Hv-Z1%T*8;N1SJDi(jO=z0Oqb8BV-` z`Au=&pO{v<-9)U-`&eQY+MK2ha;2|Sx8GRfXOWyE+*BwVYLzDUM+XVW1k>OM!PoI# zb!>-`H;<@;;MAVBk~Hb{j7!tC8Vj@O0nC6tNe!b^H>T?T4RFSR{ov)Qu1Xa+g=8ws zci)V1;dqZfe{Q4n){pb0HD_vz^}1(kEj!^e$X;#*XRirt`+2Z_+l^>=hn{h0S6PWe zDX0}w!{h3f2ljO&1AVyk#I!Va*&uzT;u_msm;frPDe(svDz$pE-Iov)qqj%8nfB0m z{C2bFz8kIerm^&~-|*0b%q~bETPabypK>$!FW4cQofFANf|;x3nIUiad>k6h-@7$e z(jnYWx%2JV=A`$>gzTe)2T<>mpc4)C&8vrzOK%oqj$U5*F9nu%mc%qt2X*Yc+6g9&d~Jyna|ViH!~G-3w4-G)WG#;1Tv9!k<#`5rxH1JKG2s z40T=->sc;$S~8d%T+Fx{EHu!&TqfV0wP6YHMUaX)fTd3)t|f%_w6)UnywbSALrERh z`dEZhW2^eOxaH=bS8Ah+X}FizhqZyK6UNCp<5%p}Hpma}%MbtN>7+J0DR2y?CxlgR zk_Nm@6Jx)PARhH|QC7rOsFStu6aH;XWzMMkN($rOQ#(%X91=TDI8M2qoSpqm$SRQ^+ZEYI5Ll^=JWF?Ezby5Kt}HM=z-hM!kt#%t0r! zW?HgNT{P50ePU6+?%Dvx?l{gT4zZl%6WrADPqv~J!Ne1t|8rzCwSg}>ZxzTCGKN58 zser;WkeU}rp^4;qIB4u+lInZqR4zA{Mg%M`h%gzc>Zp*KsI!%LiGxU8EqWI80n*S} zN$^(P4B1urm8s{*l%f;cW|bPc0=2^x1@(a*-A+tV{^9O~dz3 zv-rQg=Kz`Iy%?uS?)wyy?*%o>fC0rT^dK-GZTk z>2vR|8*fNZClN(Vy+AD^0@S2Ec@o;CbGwYdUP-rpxJeCR87kb!Lv+!pIJPjguwi^l zP5qwaRCDH*$g+sO{f4hcf-*eGPQI6^wi}^kbMyLVj}t(oSDYfYb@c)mFw4hrkz{+b#PgJkr2)GPAJff>O1R^8Uc0|@zD9^G32x=8jM1Ml5vaq(iBOv@h z|E9}(aV>Yf|A#LtHo_;X=KPf5=CL|W#rSZyck^>scbwDV-|E)G_+J9mzt^^wHVG{K zEUi}(I{_&$y=s3%_)kqS2!|C~VZJbkJB5=r<{VM4wXj)@q1A0EqX2Tgg!-fj#1f%& z2oTe!YG;4?vyj{wO4w7Xk)n6<6-us6z!(;R*G2(t4?)KIE~_c&aDFg5{jWrFIC>ef zzqJlUNsZ916Z@F0*p8A-kjk-S_VzJoumitEv&ffYKnOnAAW#uC`36k|HtG>&rW)RG z!q&|0CA8%%5m50J`m-J%UbMiBz%^+&&koLLy*Pl8VzA2suTEw`DUi}3UrOMb{Bo-Y zTX*g+STKDWGj${vPTj!X+t-6-+RV&FuD1aVWL&^;96bc3B5O#}re+i*18z0PF2@zE z?!JUn{94v|lXxoDGN%iWbRYFI8L8P9RmIwfcMtREB1|t)Xv&RdO#N60g_y@5#TXpl zWjx}864F3b>sPRyL?RiY9=gkJerdwN0>%N)vSR_MWCj**4tMEW6=vUmQ4&`e@o{p` zbl>D2n4^zxtP#tO5aqLV3R{zN+<^6MgLp6W+y{{9{MXYwD0=u0IYJ)<2bCT8VoJyF zk0Mys{~_1Ru17XZVqBQ)viLOGFS}3nW~H~EZ%xDM<4Ld*7pEP1ii4Hz=vhNMMxGU9PS(Dm zM{g?4;zk`WU*a-v4}w2wBkwz8Li{mpiBAw8V;oFxP|>^=Y-#7L8uI5!7f77tA=iI; zP$t(eSLXK|h`x@A_xOrO$y9>(W{87ESdLK@5925F ztb2aUY=CgZYmY0n#9ubMFt<_zKO;A4yB_BDWV2f=@$eo_M2|C1jAf6IJ>X|TP+X?n z{R4Q}1-=))^9fGGZ?4*Pc>O^}kIlf8S#okIi*-mn7}~;Z!$9IG)SkIp<_dO3s8ynO z-4B1ykTg{t?bvC5l8(OS00zpRM)RYRI(|kvIDzUB#?9x}p`%V-!9(n9F``EuWzRY3 z_{;r#L)~zPsk8KYDL1M--9wJv>^M|3Xi1CAWikO3=2Ct-$p9mP?(7WLZD_t7m8TQA zM&>Iv$_Qc(MF*UKKk0^|dQ)?K)byE|3Cq*g`=8WRGtYGJ3i1ao6&`xy>0G)4$}kpP@^{*=ftqh(@1xidc1b_>iRhd{_>Q*?_@?En&V@RS0`3F8(q46e7a{a z?<>D3uCYEfPMSJ9ylQNcP{i|d)O{y~BvYKrB#1rZ6?bb7@`Fsd>pjL1>avlBZE@o6 za(X_zJCt2~zi*K?x^AJAXLI-MgwZH*#Mvs>%hA-ZpvJyIkaJ&&O!bdLyEfU0%I;c2 z4dWy9`nB8|$YKW|IprNt*&HxK|L*tV}Let^dvZOUAckPh{h z3_Q(qdKaWQl{ac9WGmOuNb(g_`>--{>}Sfbtd6o}aAGn9)o*L~gL{16a%Q4x=d+jM z@;lrK5%LBnR&2vhhafI6ipzL;z>9|uJc7P{EHK%|Z3i@W%22p2|WX4oA?ibTBf5Anqc>4H3%)$z3 zCkZrlNemTu3BsL1|t-SKdWckZMjs#rT=nEu4;G&n7ufr=L5% z!i8Ja<`4~cu45~12Cj(@$7Y$tpD;^^nOJL9`iQgMNzZWJY?b%F|I&t8-uDc_M%Eds zzFx)GoJJ{IR{O?&Kkb@Nd$)k&o4xY{Zx%&cRz_o@zLd{xr(lH_x8a=ndzkd_27%4L{&p(s@aqngKD? ztFJi&`!xNUGo9bZYjZ$cIuQi#O}H%^ca7({l8{YN$ucPf!>aCt zoi2X09Igt#Oyf31;=`4WOyLk1>7|1>EQ$%RT z;jq}@qTcvQ$Nr-087xo3x=T$GWs^^zdZ~%C?vhIj`(c7X6{_b_1M5Hp z6P#x*DB}TlQS4z&*J{c`&W);A!VRv-6=c9_WH^`S!QwP?%+_A z90!}(ktvsA5x>eqX0OIJE^UY?^&YNG$FS+gHdbc%d>j;T3c$KI=XAHXf`jmdNh=~M z+OdolVoVq=GO6pCvzE_IQezvovXyp}_rPx7myZl#R<5PDPp`DV9c?dZX|98t9@Cx4 z#gsPPV6+-B!hf043>QDOE}{d65E_1wh=~}_+pd%8`u1Kl%iZI{`+wzE(5vr*_d2Im zMm;yzemBT8sSD-ya_Re@gU-^B6VI|S+C@%Fzl-m7s^^#A?Q-TQB{Ml;knuKTbEdBi z1=*{f#)elc?m-Vc4SGpKhzI;BSV;&rSV=tea|1c?VPq8&uj98z#n^d;aypd8ClWjNZP4yRph zvZ|I6@vb@^+Fe(`R(v>^cSuiGGHE>2Q`&xEQe7wE#>~BP4=-T9Jkf+ZKUurw^=5=? zxI{;5{{*Mg7A}=DT{6Th&c>EJoi+Wy;**bJ=&x~|gI%pkGSFYfiv4Vnf^-QvQv&i2 zPrB#|*Vc}REbEIH-*orey?jQ)r-Z43#_Gr%?DaF?Iwj0T9R04bZJC!(B=NQ06mTJ{ z4NP)*xP7yHM%36kD(c7tymj;~mkamT$#xByKj14xg^VPBHwQU{y|Og;*qN!*MU|01Ne^2kI_E4zB@z*Vy$P5*M^V1p!seM zjd$WMMhX@`Pa-4HM}JGy2Kf4ybCfKN{d&}6(Qey?!LQVr#J>y*E=~2uv5TtQc7ze` z+cGD=zco<{t#sY)%YEpJmg0MFxH!|&U&!mA-j7W*bp~9cuikg9-;hy|HLTicV z9H$mt!e70Wxv$B4+v*gp8R=se8m+hgOOLNBB7~UDE9K|eb0Gva91+-#%%7BZM-nHR zZ-D;B{JAndoXIm1G+!QiTWg2c@iCt?2-Hpx@p>SEvP9v!qf~yzeazY-^Q^U|oG9hQ z>lX^A;n?AyknoeShZw~2S(P#Tg=XTKVkDa$N!^NNM(V$+(k{aMp@;Yupy=RDRm9uE zx%duooEiLFF0P~>;lf<+lk{{{EZ^q+eL1dNaF!|FTvNU{^Q3ft=Fom(NH9kgOPWiq zqwgse*Y3*XD!NG_YxI`VHB>CHw8UHF_0xL_DH2rqm=w%y$S;tdJTb8$$3PFQY%A62 zUDuf}vHNTrJNl?KWKT)b^Gg~#A%;)ccg34WH)-dezLj9)>eF>5B5)CjS`k7URq=LI zSm>4WIwGZi^1T}x)3A5)pZL~sRUw^TN`{_+PwP4^kIm=Ac~9F60m)U$D~bPvv99mu zygpZIVuE69t*fD$fSaQDAYRi$B(2kutFG$?hEj`}KxCUdu~yva=0*qV=_X%*d|NP4 zwk!Wdm*w-7|Cfc_!}_jpI+FAB-AU^?qv3s~nPf93g6 z7eSfwQh+YHHb0O%9o%V{U~JwJWS+7H=MGUiz=>efYKdvjHMYk=JuD1fjbMc1e`A?E zh6K?AUD?SsUAg-!4Q+lU4JP?^0Nt4~pwDoxyG5L5;qtnv4uCVmYzYsmkBFaQy(e4o zBo#jYg4$RQ`+l?UCraJumq}e|mr0LDZ*^&`b?(#3-3hSZI<3#-u%^2M8`y<>t%rjI z0K}I`k2*l#zBsSe%L8+2z^PAy)$$t6r|a%rfZr0kqyAt7oSEZ_1K3-+jUhouUT++3 zAZF627T9RUCOZVEx&-F$Yt_q3siQT%nVSK+@1%Q%(M&e7WMk&gB{>5J%O2IbZXnWQ zOrwc^b4%ryQ;jrMJ!0Eh@7zA+4KSYVlhxzJH<4v)^to%wnv;U>(i4%Y{J*lJ>Z{LQ|Jm1_y8 z3z+zIA!a7=QV;yj()Z7|(9(EYd8ZP$XS6@>Qz!0EW;1Kp#AQxw7cJA-R-oD;T}a7Jzj~|9g`q0;yEydKD_^25xELN1yJsJi64qTBg`gQ z$?!27cG$0!;(17`&zlA>_#!ok&5{d@<0M{AaeAo_XmgdwsqV6=#cz+0vUCd}%DgY7 z?D0`mrx%_8U3T=C)nov_Z7&I+CT>-Y1OwtuaoaDbzX$>I``&=tZrk>Wo#NL>Cm&0I z2IHf?`fYff4zb?)2RXm7_-A*+okHX9p*0POf$$S0 zZz|8{S?y6uA0gN`9n`_G5o6<5pmYs8=?;JlEFt^N^hFDhrv)`Jr((eGmgXJ=*9((3 z*9Q46^eD}e+uqL)2kLj51{Va)(=x`kMl9*29Su43218z76b$wcOgmS7HPeYME9=9o z^IS39hNQLo7!5AAuv^(LB#TViZ`->m`n4oM;8rIFST|Fh{Pp3=-{dI_N`rtIDNQ{ zKjHo4cX+~;+VWMliT2b}KmdJ|njpGA>Z@K{>{6XUHGz zBb#LRBS@JNql+9%Z4}7{G`^$JGLw}G5UiAq)r%{$SCuS}3Yo2}7xLv3Q>D$-D@N8W zguT7{HVA|FQaMP35fy<~7#J7Vj44sm*@mFMTMf zi`jGPJ|b=v0>1GoSUN)O!bVrXdeG>Ozzb8+S|=@mWLbA0*i^C!V)ikDNe>oVxI zSmKJjO;eH!6&##u2aWk5P)b+FEg&a3`4D2Sv+=vrwN7K!Vste{T`^>mQys4X^CZ`k-u5jhXDF(FX>UOIrA za>brpq>w9%8w}S`W52*kb(Jw7o+V`Xx?HhJ(E1CqC>#fRR#o`Scd%fZMde=h_X3)t z{m;qy3uLVzP+fz37{0e9`2J=wIs^v+YIm?TczD(3yS>FASo_mc@%I|)O|Q}m_{2)y z5}+!_>S*gqN~ThybGQ0+a2-8xjSHOJ z)7i@5X6uz?LI8A#&5xx|#Mx=VKuXN;mhcqrn$yz?9z9cPd44^jZq3O_^x@0UmmhHf z5!9(`@xC0r1*neMXSr_=WZ15+&u*R`VaGNn^!7{4N~{t}ulJlf^x2nW&QbxKW+Fl$ zxttE+lcxpO{PDqv4SLg5q{0M$)vj5f2f$eR#%WRI8cu^8p|A`k;%~vn#7mTr3Vayw z)3>5RmUW!i*&KxOtvU_j4rzgdSm|Gb!?QKolA1HO#dHAJV(KiBK{~d9%lIUT*ZvTN z2YB7hYj~0v!ucU+9~@Dq853S{O1qhSr>O@&-$6g{SHC`dubvcaTFK}}jkT4Gk(s$cLGTIL zJd508mq-4>({*<%?p0-E^#%`SmvrMT;ecdsGvW~hKz zuV>lS^y4&a;ziEzKHtP(m0Oeh{-)H@g^E&Z*qSlidCXhF!mQt=*|S z*S!TkOIK21i5GmKw9$PRaSHTfi;Wh}5yC=#+8i{=0Ss!_Y$pl?aVJ!KH>NEAWh5=9 zLW#X>54P(Cdjl!8G)GE&%G@4f>0T*Oclbc{-McN$hW9`P_PFS-i1dKKo21Jghr$|f zU^C@xH$tx>YMAZh6~3Q^dg6b8yU8k^F!liO9u4#_41KCGlrMo(13i#hUFGurx*j>P z{&)Om)!k7WRzT4gJy=8%*MI5T-hH{2_<7xs2u1e*xyd+|#N)nxQj1^ZvRur&(je&} z`{*P^90a_0p&4Qm+*WEDvC<^QH6nFT_8->6mp;DvQ>s8upf~L^W{=C+%9SOx_Fd1! zH2pTrAh|4ucr^c*Z-%pk@lm4xYEQ0F{W<@jYR^F8U(!?6u21bXEX+v|B@WlitQzJ= zab?r;qxG*FmrjK7Q;05Jw0IB5J;w4RlxY9p(f}z7o0LkHaBJD7+ApdhF$sIaDbSWC zkV8|OpZackYI4SQmzbojmNDFJbq4w0@LfWGC!118p6NAqItt@<+}rjk9=-nMq^w%K zZq0r(l1UmQbWrWkvxtW>?>!h|mPx>Bd6qaXT;(P4m>t8S!qS9Cts18@9NLqApGEzN z8XcK8qp*cnXgvCFC%1(NU#Dm(H?jk{`xc~M#uxTglq$)F-j0@)s8Au^6TLbfG#g=T zdWzS>w+ujMh9fBF4=ANJ&NHFutzj~zcQ##z1jYMYb5>=`D#~|g_hcHR z&)Hw5BW=Y5!9tCTGN+d-v4Mt$7C1dX(;$b_RDHwobVe0VuX4N{p9aa z+39OUX$MJ)Zg-{S9{<7j%uBVla(`7ORYEWJ)za=Q8H;!_k~q@(a4Y3RL+wqBl)jk1 zSgWMyKI0ZL+Sh06DGeG7x2%P2S zg2meWBJ&=(b8m6n5k`&BY~xYu?u{PViWYK^n*|A?^hBY)#rKv+e`d8P+}63Q-NEgQ zQ{5Di9{8|esxCo@F^aF1gRMmf*O08WDi)n&f`9Y4=MjR3xW)WIatf~L!3>cDPf|I# z)6uDw$I*1=T1P>c)OBN)_iH70ukK;Av#TXmTxhHEWFSZ`7wpXO=QGw8vz(sXj9*Z~ z*kw>UvvG ztxP67A(mz3K=0bQhn$UfJ=~Ugam{cjU2xS{G62& zI`y?~?rH@7X;N%}Z68!^SMVdGI)z;S+aha3N!@AI`&d2}pv!q}I$_grcami6IRK|0 z!lBhKdCn+|V8NF{RnQ^2iO4EnS?LoMGa|bCL-h9-?;OL+zYZ=bt@{YzhT82M%GN! z*aDdRB&WZ~j?L)X$=R$rd%Z|I`9;OiC*mf0ggJso`$>nuB*PfzH(%n=q77sydMss936 zz5^rT3Q}ZqF0`0|2@%nv_WJ8wRq?b}J%(gt*3v(W#`A95{y?%o6(s^xr-XupuP(yZ zEnEGTfszT79>OFUAFIsPsqcajI-g!W^xVudPpJ_RS-QKI|_r`M4R6E$%6Uz476C4*uJR7d-B3k!|=i zL$J88Zmp^oPm_M5rd;iz*4#GP@ZB9!-=x1U^!=t}vd+R(A3a)2AJs%B)c)JbzEf=F zT;<{XaPzl{B>fdXdx7qUl@*WekxM)|^;+py-k3y}p&{j-y-1foe^hR_DxPaZ8f;no zd1tSlbUQ!l^Fh<_cW9p1RV)b;EdDNs7_WtQ`?m7|aVn#vM<+mM7SqrIn057>Vsl!I zH)(m#X~X^z#yruWD=YWqn=R;J)=#Mx>}4)(cMnN}Cycs&Rh!`qSw}6)j|xd~^Mz5C zWFKZ}+hkU&96r!$*6>^;@GHU77k#es-a`j?y?*7*JA`joSq1R&%$Xhl#6ye#No@XT zCl#R{Z_%)|WnQA*PRU<=*CAVCm{(4d8t4Cd9O<%CcPT> zJZZBcgd6JTvZ)zAVS|};A}J$$w5OZGxzQ)abkJ(;UA1}Gwp+Q;r1i89b)Kwp<0My* z+GnO2JQ@Aqg`BHFH#SM_g0p>PuJNM9OKjWZvF%Id(!IpPgAd;nt=TKSixqd5kIro5 z?HT&g+mD5)RydiGk-U9VDz)^+sTWe#qRb-t=ZbA3!Y&M-;qim=z9yg!!%BCI3+Nkv z^a3WzW@qZUvXEvs!vW|YZZ(|jMp!y{&ScSc5g%(1A4SkjGE={7 zu*rfMQgYG*k!f%yh|lQ6BxNUya=_xOCAJdwhkUps1a`v!eQ@$XNQnT2dnxG0Tv#ok zpkqdxpW;7JeDiM>Yh{!Om0i+U6<8KRDq3OwL5m!(m&x7A0JF5|N2!HHkiI%S@VoFK z8|_r#Ab#9CazK$_E%r|En>=eh7#>JWEbQf`Gr`=FcpA#mm!y>0`@-pL?p}s}-eVEt zM}O0_x3qhT#qN*ic|obcM)t*}fIf{2wPEO;JJtlfE_bmi4MzAh^8u0AK%2t8tdn1V+A0(-6(VtezmD@PG*jai(>L|-Oo4rnXnC> z#(&(naG6qlgA3d}VM$IuWcced4e38&?|LbA3O&PidDfQt-Mv9g0gQA|z~VZJTxuvR zj+I{M-$W?v(G$;$ZgPx-d& z9s{35auolZpP4x`C*3;^ROXT=QFa_Cpc~p*g(mAT*I^M+rV^Xw5D06ktuWyN zQ4L4%%0-|NDgdjtYqGdOCAUj2wqOTMUK9s9Lv& zSO@b{ez5}7t_xqJ&*Pyy$*|{o<5PO+rXONYE$}+j`(HKwQO{HdrizVQd{mjePgG2O zaRD!GoAWQ6z@8!zs_X%c2Tb?GLz%y#NCf#|YG_ zaL#$ZpRec34dVgMs#^DdOIG~Qi1{r=#Jh$0c4{IcuEcZ89t;TcJZIT~4n1q&$&L+u zLh~#0SKtkCr^O!8jH_Bg{n(*X>9zwpl$tNus5ov`vplwF=O)U6EYai*uU_7<8qxu#W+(}Jk zDpSU#gGZNLO|%FzLyEv`7B9$&Ie-Bc-{zK5ofs8#m(|()mfG`yG_#%Ma>qfWok`nb zw-Xr8jc>bK<{^8!T7vTyrA6!V_D=z7a^v!H3NYyK`h|4Q9E%D_f6YO1J_v&EW-O9;fu5whp_ex|*v3 zuDpgCS&;`LO~R$-iMu@Nd9D`~HODks&XJ1f$>zMuX4u=QCi<0;yM)i&0hKKhq2iLB zjPK0=akb^bo-p|;h5ybO5h=t%C>&q0nqU9hy_oELy&|U#3Zg(h@u*A9T=*1ImJw)t z{#hl&Oj88c;AryQ5i%j)vF25ugQ1_A#z4fKGt2*34Lk}~^mDoarw?rxaBN(ePn~fr8d+#DmX@;peVsv!j3vJ z*pr6s;iF?oLED1HcGGhj4d^RInhF4S5ca*Ba8knvyW_m*BkW%GhBil3THbn1j5}N> zjKl|dDqH#qsFyw%-p{J#SZpHkq!F*m12Gq{`aVidY=;|*Vj&KfDjkkAt z5t9apt8j~a$|+`tO`L=t=&>iaH}Xh6#E1cEI1}R`=HNCG`aHm?H-2s~y%DT$PvJxf zuG1=xrA(b8ug0LLIK@$B2bR&BU2eTeWs7a+TrX#?7H)yH}l#;$sha(zvkz>xH#r5VCIhE1=}!{xGgfL z)KYB#E6~mYU*dpL?x7Zc`e&jXWx4<)P34wvbR}5_>Nyg1l@-)1X*aXH&+%)!2u_g?VD&pn`8WLF>$HxXrXU)o23GBj^49U*Hn0(6Yz$Z=Z+0G|(|EsnrF;TqI`~bvblXgc) zz})h7EF+$qaW3-afi=L?!JL51b2!Q68+<;;yeHoCf|*Vyk6nS-QX{B`JdB22oU&nI zuB+DlFd|hf4E0=bRV2dVj4RN|s=KJ-;Xsde2Am zu#pg}k2S(pfDrOM`&ipgbUUUgnppo&@ukY9qc1OwGCqnV3@{!ZNA3{t2hFAMJnSkv znmbb<$Y4?lT0C+obl@{Gm32Pq{ab9cI*~u*!MI0>}=^2I})C!$5@MRh7^D zced6V{(^GzIBoCk9zr;+?d1TwjQ78$D;Mmy6q4)2wHif%l*2~<#f}d(?B9}VnK6sF z{`VUtj&W5>G!Cq6m2I84g>;>C%eZ+$&Qdv%@Qr@X$_tqPyW0-e2Nvmw$z|iFce+g} zON+SS7LWe_dWL%KR)4jT%3x(*=jXxCS;`W^b8Y;zXx_kcTMEqHlAYz6o})Z@i1h=q zbl23#b8WnaJ2>8nv#r^#=;J1}qyy1@ZY{MKkP_2E3~zMGTI@_!OuPh*;; zF^9r;c;&=zsj&B6k1ERWw?ZFG*1cQ(mS(`7T-W>3A#Uy6qCEFZIDf9ix#52y z#KVP`Vp}k<7TrN9nt!RpM=?JeDH{GPxmoDt))yiVqPqQz-=0xipR@!Wb6fHUlwr@D zLk7mR?|)hgwiG0PzSU5*oTyMD=wX3=$Y+?eL{d^%9@qEvZIRT8p@?A<2VkUUg4$wc zPST2di*2K&K5|TZ1AAjuRqA;QsoAVxqBtZZ{YxdSBjClmXGA~UzCiX4q?1{&k~dz} z>^y}bbzf|?czoOMQwT9UKQN~RchJuiV$4sz52Qs3Jtj43{3oQdpPiKa%S&9=uKY%! zBu+R4UQBO66JhRLtUohrsQ+K(9(QVywIfI!mB)2EgMTKuPiHgFPPw1zPwBm}wSn1F znR4`lmrX}G4dd^MQ96(w-%xeg5U`3>j;Q^H0$i!;E6L3)q((vRdZ<1f_ct} zmEoqU#q(i1&wJ*+x5@7TEXq!ruLsOywaIXb$+hI1_^xKoo<=h55MwE3V@rRk#VbFv)*C?eUa`+PxPa&E4fE&h?Ke%ipkuiQS?I-V=vat(>dC731 z=daGZeRpSqQc^zc0TYj}Ut3@O89((q8wIaLOE><1E(V<0H(pcbNE5XL>K#^!@|e*? zV5&9b(cAU<7{O<&ICAG(cb$QmTpb!p~WGF z7f}0F+Dw7ML2d7V0P^G9I$1>JvKV+owpbW7QB?Yd0n_U6!X z_U!oaS=y$(_o1g}QH{su8qu^nM4?^c8{A&Wdzc& z9wLti6=`tq@go229tP2)v*9;z^yCw@1!pvE0jfs^BYn;1fE1x>9ZZ0@`*D*aa78nA zf}5!uV>CZqES3pzoub~+&a}AqzuP|?*ZT(k23SGUY3vI*u zpXZqUmNO`9ivUB>9P!=@_X7~zB6`68W53uxry`l_ z_C?mfk}^JM+us+SA6=1oG~W`F?+IJ2OdWRJX~Ci!kFsyBeo2kz-b-g!;J($JOc<&J zn`$acP2+g%2h8X%Zh=dwgHcE1(b)|d|HBXIjmTFi`|82+4&1TzwpSNT9_)&DS-01l zPYL0B=Y6L4e_grF1cyjU1sSZ%^ZYK*)B3H99eJZfA;98N_{pZ*_UPdLx<7*hrw`2e z^F?_}|J+z##?)}oMxn=m-nxgTAJbAEYOP}A4K`PMTl2J?qv*SmlobCcs#RYv=&iLu zF*$ADw`hKcRF>qUKb^zDLXPtvpOlJb2rRz)IBnU@Y`5S9n7_F=0CD~xH8nks`or*n zjO1)W&hP^zo)Cc=*XjTrc}+!t_A$$8hhL12_V#q**gG9ONAkexI|VS}t8Qx$^9$u; zK3K2*mc~Q-nSa_wQE|M5ywKrkV|B|&jajC%kbJ1A-Q*WMfm};I7rSfI5sUovj z13Mnr)?W>-ot~7xHTUvsHAIUgqt=F?w#4sZOzYUQN#KoMNs&G8iHWlT$4cD-UOAC zDEU2v3V2N?OoUL}UWb?`Cq$Cl@Q#6h&EiZ3CA9M7Mx!!ZV<1!ekJVT^njk6(N)`bG z*&hQZbyrecyktLdyOYAyl&oh^tD1#$nSM9yn9Hl>2{9ZefliRiP-&|iAnB{U!;m99 zg|=vDL&G?@DlS9AhqaT-}6QiOxES#HM!EfE_r`fbk1(XH{sT~j? z7agC~X4nQ9#jM%q!9(AOixC(nP{LKTP`CbY~isOp1ED`nBJir9_Z0k)B zyB6KPj#c3dSHEX@ETNV4is@;iHH(o(SbK^PC%W}hOGc%}%Jyb-upyIq*LsV5#QH~k z=%t%)qZF}txTQ=zj0E@XS;y|-Vo6Z%Z!bXDh`W1yCdQESGJVYkrg#u>2*Mn3);>u> z34pK)bDYR>(tUI0h)(w2LxKx$I2>HS)%eaO33-WrT|~w2+HUaBZ-%_T%p^s4+nt^%prnYhRkkG7I{rJX z1E|MY4oOdvKFG9D0#oJFM&O#XD+`}6ZJz=nDYQYtB)Bn-))xvXj?ZUPrUt<}<^rt0 zD`sOF#_xaRC_uQuj-UWuXK4kQcMp_Fw_jq25Hew$yB-wp9)-r?Yjkf;sDM07nC%gt z%83;X`u3c)h2l(fuSm9@^f(G^UWGcG$N2?l}| zli^yyMoj3_ZI3g}Du&Qs^cxfg^7B1?@+e`yE1)Wrv{QrezLn0giZ>;Dq{O=uj zjjS(NNblTb`SMNPZ>R-v=Z*ZbMA1O#g)9@m+o>={qEm?5~~m zG0rtMd|dr8COHe-UkgBBu7wSKN<7VORXZ|1W|#eC1b^7>K>C8nVE4VlV}OaxnkEf+ zXAYfy+tBVqS$lNk$ezJO-=p+Ep)+TR#D!ri5aBF9?$cJ9_ z%V=h+*kq{i&G{JKc3Qm$T(?DQ=ZJDdgddQC+E-^x$Xy(G0vMONI}_>3K-vK#T=7E^ zdU9hl!tXQL*=7JFKuYp85rney;2#n8BJYiua>nvih0g6}&a+e7wAx;X`EZ+Y4Zhxt z^%flyluOO};+tx?Ey5JeUtQf!`I^qjk`eiylrA5yEt>(4U;SNz-2JOf3}1G|y2`rq zkRmY9;3(3luUH=eTC_;%T2&upd>vs-)v)DCWZrfWM1<~&u!7Z@ds%!Xr)FW|N?r9r zTPdn%8hihagnjkZj4M>86= z*=#slr3g)3mCDOYd@%M3Y;p|<6lR{p#99V0Kf$;T52=M)RDNS1u`~f~cj1;aZPbAT zuJJ+Sat?fPAUsa-?EXs-@@9?5S3l$u9Y zawdHi>O7$llews}15Ua+syfB zc}pdc;f=4TVJzd0hx0=3m_gD$KnB|R!fT|5As~-O`V49M!45sK>C9yeSXo~G`fLX3 zVgkE>(pV;Nsi`P5zP$_>wdp^eI9k_dd~aFK;?qS0hGE}Zl+Vw*|M9ud z7gh3wV>vO4KOkD)AIKzO&fAYduo-vY~r%UAH(r{s(bgH>3qW^b!(kIRRze3M>2vxyfC!G8Xzm( z_hm!K9ft%L^asJqyNNMS!!J0cy zk~^~AiTkViTQWI{>^5Lb2RLmxfz+JXJjqlnVH96g6=;}jC?Hkd`$_05${fpI%{-Rt zz1tvc*?b>ni7Fk$`tL;tGDYG&{a!vt4pm-Hdh#=+ku6?A?2YFvmz`LnCAMYA7 zV=SfHaX(T>HSK79{|lRW9?ge%2NUNqzWjR6q}n>ALDe9ye;YI4J!j9WA>cCKJ?iL> z9!~6=wvPKc;OXc5Usw`O1SFBn+e84dOQ&^)JiD4Qr|R_(dLPn@Vj8qiSU3bN;iGKA z0pti!mLxoE1rW;$qphCF=fu*E(k zW?PW>s7~wIs~&tH0ci2Ti{|P2AJe5E86Zsw5`zUD= z7N!omna@cbW&cqjsFaz|%s^?|tAbGWHPx*0oM$O!d3CLSmhMLun|*cGQhBIy=4Qt| z`N6R`?uBdy(ZE~N&cG3P303yz_CEyVN!XevJd08^4`@eA&YK52)%?LwR+N}=Hjy6^ z-YFNL*)63+Ll7d)M#;#T5Y;g~z;JLU70lv6d+%X!_-n7UXSDNb)a9WjU7yB4A!l7h3Wn}K)3 zp9>=0|08au2kHu~Z;M=9Lnc^(is${8Vde7YT5^P-x{6j7wnjFZMmEXY!V$_0c*Sji znvo2o2i$vd@$P;y2NB$cM(_M>&;;Zg#^%PBmgT*@0L!`z!oAYUSnF}v#=#^9I&MW# zNX?hJiuagljRlyveA<2(Rt=Q_+~<-;gRFq1h;*xaWbiktwJtmBpu3KZD^A07fZ2|L*!8Q|!+fbhRz0!Zu$`x~LJRXu^R>w-D z`j7(jQ>96Hs?!FQEm1c8hCGVKmfZ-q{{|N)&ojSL@YQ%~YVgbS-s9|)phelfeL>B2 z^avDW7|c(q074-~l%d3?zw+tGzTEio<7P4uCN>nlZhfZUCS10^3&R>K(BPz*C$*a| z)7=K%%?!-?a~HUR*Q$W08nCg$BqDL|KyXL}#a7%tLkjE~g+B zsH7&HZcVu#i|^YV77=)EHR={N7w%+sWW$0aNJapbGAnt@+u2{ne&vJ|yppx|Xpq(` z|BTBzKI)MpYh%;d{HvBWKe`SW7e7pad6`i+nOCk0jWyo{s@V`|Osn)Cz|ybW?}mzt zSh}UM*k0KD!S}y(Mqd=#AQdEmc3^BnklZ4F#oXLdw4e+~6@)fZpTd{n@ z-?697)aWq9Fk*48PJiW0+93+#9lqT#OKHXk%J!o*! zJIJgNM&Pd(mmVwFT^_d*iz|J=9}`$E@{eEc+elOxmK{?*ze!R)CF$;oizPpXn4QV-5t3yA>kgeX`idK**xZe zEqqr2KUxd8y<9Tx4cCqwalqPU9>F4OgG}>K#Z~1r4jF7ITRgvq6+Ja*I7S0|d%+iy z&N+{4S9@3jxMI#?nvc=39~0}L(8ECOZ5I!!K#^w3>Zm)n{9eB%G1vvsN25l$OBu!n zR}|f69>8BTR!hpuiDcwl>W@B|%+V@xb&UTz4=HkXNZf0BtFSFt^= zI8UqVlSlgbc;$-Ww?{mmP`W-+d*-msU-qOy^elkTkX}mtIAQ&tyRgT%d(E`q0L9=a ziRgn0ji|f-DnmE3GUj{RU)#;c6#0h}UW~7jIwi(V1DMcpX-@uN;6f6tl6dLh{OrZ& zx=LBk_l^F-(Do|uKd_TY43-w$WjJvOljGh_$>tU3>Gt(|j@tUx0~VgRViJSfI7u{G z6*M7uG+K^7UO7_ZqRa~RWn8y@5!P=JW+wE`uyWuD-F~e+a0~c3LeN~>@4CW?O~a+z zCT}Fh%2B2MM$88`iGIO2l84q(ei{@$H4*4`dAveA)Na9;l~R}Co5XPYsnmQIi&%Q~01LwKg~(L+yTKNcp~ z;1}*Eo2DM&?#~*qFWhP8ipI+Y#);@Y%0G;+tI;p0>$cF}g;Jbq7g2u9B{G7PQGB5u z5(>8OiOxIUS0UD0y%H%lat;r(9Uk~5x;jE0IL$p4hE_hWzu26~Stm6Hk4%8R-Vd)_6`|;}+1;qPM$%?G6 z@We_`fU-L5DdVXt_Y9WVd*9=R!XvEGH@Te+dho}!uaGb%(U}1} zgzN;Q8;k(q=Kmlp2>hO3kv<*MT#DGaS2*k*wDzwW4X%#Za;o!c$oYJ!T(tdi|A( z7?br}7-o!yg9&6X&vl4QFPkJp)ORc6?Oe)wD#NS=m%yWu3i^(p;xXn!octCECX3b~jY!SZKH}68VRr&CV;%U3v z2S^yjOP-q}0eP56k(OK*pP7vh@xEZ)=l`4hIE9XgJ`VAzGW@bB0X=n{VbPSV6H{G6`9Vt5eMotBTU{@dTCs#F9#DiA?+yf04_$?BGS&@{PQ)V#Rm6lq22L)DqP3weiqCsT)(F+EA{JBynMdXFlR{0n)!PunL8v0u!|>9 zh*#gHup^XL1W^O-bV-7xV$?0~ZG=2s!tQ5BEAt@c|I!aso93~rE5Nr%cOo5i*o%HU zRwKu)y9b_be*qC+@|skBXWc=8`w4OFRZoM4Y)%71rDS&^7=sk41J+t+%Q6GcrFvO zurqsUDV4mLbLcmt^C!kRY>xTu_&$$>0$4q%I12%fxkNTa-+|$j{tUB(u>JL_+`;~w zk`%&3Udh?iX|b?*ldyY=lr3Vlq2IEBmsM;w<)8Of&nbCK&GVVJuj5gNHzWf*G{35U z$kjY&u+!Dm*N2I9HGDH@$QG=m<*ZwodwZpKL<17KkXL~cGhH8`LN@?|Cqo$o}9-~qD;42&}R|OamD|N zh2ei=8~2w>X$>%_`nw7kcE0nx!q+hmy%O;&wiuoNV)}-DJXu}oy7#+q*)(U^o!kY| zcF>~zwxgD!xSl|70nfi%8f|XK-6Dz_`w{Wvxgc;ex}Qt?4d&eJ@BI?>6kP{}`zO{6 zKTU}dQt-0l-dii{GDZ(aBA+Ebil5Y+GA>)rKK|?`hfKOjLqT_!+(eU+?)g;VA#tlP zx%I(Djrf0yjaxyywuUDc?-!1k_3w2*qR0+TeylUgr(9s26KCZo z0yLs+tnMt?083fIiJEuh3Tckpn}qY?*Y-RjwsW{s zv5>c8m|twtb6dRNU~dwsT^i$DqD=Jxo@U5lg{lHN6xQSYtcR0Ed>ZZq#R*X!J^&ax zE&;i8T13Q7FWDM#{QSx=q3Osd?XkTHYjg!uE0bSeK6j)e4ch=3G&aN0Y?$CVK=e7djEEM+5Z36=@(-~9)X%$^vcXb>n3+WjtV_bHX-c&o_(f4AkwkkZg;p$9$*T= z2rot?&D2q%9nAEBeCsPMA{?7}5u3_w3hlAhGH?n{ifB_P**F8O;+e$MJ9YyY@T<5c z)`+<#x>Z(gD=*G32gTdNuV)a^kj!l&20@aqXgFwVL9Pesm?N-0CpnHnKr*^q1Q{ez zl_O9^`$7m;Jk(Z}%^rboqJosEtfOI#yoWc3CiNs%kj~7LEDQ+P&|u>!dFG`st%l3> z>LBts;bA6-PsIeqPI1o9or%75b0;Om9m?84CT=7(w^}!@0hsX)z!%>lLuX~P<3Xs&^=BhDFGNGM#JvT8S$b)-y&FbuFRr!)av#eKPwO(pNwVB zr)dsAwTO}-fGp#0PS;23IQ~5wQUr+;)!h9C>@?(c?>|GDj(}4#z2Y82!cf1v^C_}P zapZR7;bTP#M0DNFwcC-Q*D|eV2KYe1$4VDEE+__bd-S7d)IQ^~CP!`Tt$j z&Cws`CrQNJpA>+H*3CH>fGFA*f;LjEPS_68+vm_OwMC1V*Ud$4V-*uPaa+lG{3jLw=_wD)9NcF zW?nw;fP@L%pd%3`>bTfCmQy*gT+l+=>vM}IiUGqer=EcDMx;K1fqsBIkFGa6MfE!a zLmo|$+suLNN-Zc*XwfkK>=qdIqT7vgBD|?%w|bKbNs;=B1Pd}Rn|Qf!g}w7Pf9H(8 z3j_aHyoASOfZy(Z&y@s#7i981u!g|^CO7nGy_W{&h>!Yx5rwnI93$Q;l~^Ji{bN3)qM{{-zzUvv z#^)WO67k*83JV>@$J~WK;Z_ zMswO|wC2@RxnLQoOOc0ZUgjepwXvy2o<=^jQ^*T7&*TmyH(_fmzySMdEd?U#(gyhO z8)Sb#C%(hfK{W&@DJ&9CB5p5aMW|01f{BPrLSDYOpzXp%@sOQ+7U_vm{xS%!lC}5% ze9BbhDVm&Y!reer=+;L93&P|!aEDH~H=EHBTwGcE2kK$|qq37Bvjbk0O?pk6@J6^Y zsBk(?8vJ-dTta^g1LPoR8Io$>IVkOb=p?m#j$ZhicFhlN$uc?*QvN_J#{P|YI`}HH zo|mZfd{fMldjn4k#zg!iyX5-C5B~aF+v3UGKO9C!vjB3^Qi7;k|D=W^pm+&!{It0O zt}HeMI`?dXmq$f%(q{IAn;4PUDe*JWpGv1w_h%rw?&wOf*=y^o`$_F>G~aw2S&M<} z;U-OyhVUS?2QIk_y$?;9hKxl!M#M3KPr@RIcpY(T;j4A2KM1OTBOumqv)62_V9LKK zuSs57Q+8 zVfvy6LK~HC{@*tt3^Y>!&EYnyUq1cV zj6!_0B*#%f8xmzZ0qgeGXNA0!|2pN-eZeVsbV47SX=dQ9;Of{nfAh(Hncv^BRziR2 ztce{_y3MzLe|)_2nd(5zVFAW=v$upz+{B-rL6zZm4)98!VqXOlr)W=)^IVeh6SUtV zL4;I)db%x*)d<+$Syv)Q=aq{tdj8mkKKI+U3xKQKfmm*x+yxo&^$CKR?|cHd#`z*2 zr;sH?>qamDJIvvysf4c@g8pI8g;3{uEAygpwG` zp2|qpDs8#4>l#Pw#wg7Y=h026Cm;0ygnzB-ytvRhiN73RB+9#ZXoviGQ|)##oEYc9 z&aLVZa0I~}@%N4%FX62~J}mXg*Ftk{fJunds-1Lci*)eVPTVPoqU#~L#vLP*9C$pS zce*^gEq*BrFfoLPjjsc##COA$Tm|P0sasQ*Tcnkc{_}g*clN&co;bJ#G&Ydw%+jD& zAAMpV7GGT6^GAL(`C9{q#BgZ)zvTe7VLWWB67~AKzitEQt)?yqxw^=48AOKz<6VB0 z$yZoT{^yd|nSZnYM8{6IJ^LCjj$2ah^NQi+2`86&*C9vjEUb6}U*t0iUSI=v zk{i`8@(kF>)e+82E=qu)bu(MY^6$jh{Wgz?&2CuA`FjwgW}^l~$YM9$LOOuK>(>yHgv?=J#VX0LeU`m}Rx zY+o#a{1$REVaug7Zq|?iAIuY;7g+fG=W|i*&K|VE(UDg3k?LFW8rMfM+!ntR^nVvz zwuQ+!d|^qtvWZNljmkYD_q0&jDznX1=bHS{_)5~ts9+hiFN8fH>wG;X+7oveX_Oq> z-F2vamUbO+^js7l_nR9Gu5WucANOo~Z6v+99PCz-aoE$8QcIjAU+WP`I zmsT36l_YO*do?6Z%4f7*N-h(xwBdb?YEuX+p0CXbk z$bM{|h=(M8N4<^!q!I{3%JU8Sk7_(qHQb(m_s1m=mm0Szh8{oC)^)EYKps3!8e+*=uHD$W@h> z8`?q$_N}jvAV7xgIVD)d$XMuFjT?QhCIQS^e6*8|AXd^HTQ2&5`KeYrvz98`4X0;r z_t6zkWw-S(EQ+LW81u0fVmcBeLdIKP%hi7!wWPx-FTm^qQ2@BMA&mvBr+vaASJa`k z{%4GuySI!JrQ78L=n6?<1xZ?BT_fxL-z*wMWHaL}pL567-uI9o`oHGVQ)aGXcWJJ8 zs7Xb9-Lo&;;uKW(Q(=h!Vy~I&1A$RaLnX4EL(MyDEFE`L3vB>c)Y}yv*1)t76IUK` zxXi?%WSB)Il1sP`^3$H5%mNT)&Vv5gtG3Mu125Q)F^a#Uj|CQNjwT2~o!!MUQ|?o~><@ck+IaEe=Y-+w(|XGl@6%Os%4sT@{x|N_yTh^1 z2kt9j7#i~jvMEMlyVpnl8yN*Rk2!KxA{N~bfDsB$VW?5(Jo zijLe?5h3>B8Jt+Mxk*HMQ1wC`ze|Y5Fa(@ZM2nJ}?`lMcB@&ysrfxe5L2!S0$y1+{ z&XVAI$d6RUY6fm(C}G(DL?r8-VrQp>{A-A7Smz9jGh(aO(&b;Gtbij~P^N1j`)DVR zaP(H7kPev2VW)&=LLUeVKB|~k7D^5lnS(7@B60g$-%xvc-y4K?h>v5Qt6GY0O7qSM zNN1|_z5w=T^_4(z6aP98CE6g3A;Xovji9+E3~Mac>`)!icc-$aRLqrDy-9 z8^_vL8O!<3ySsZigqlUbn3eVBM4ZNPOj1dL4bz*)L%;BT7Tc-6Z#*^yJjnKsNW)WR z;e*RRo4h^bGRe{TnB{sI)J=0l4>I^!bcK9sE{gHmdC)Z|9C48!9prkBoQAtqM$fKX zP0a+>dy_skHvfA(*q43h^2TKQw#VeCoJ1uh8f1iNY=*N@f+}3$2lZzw3-4GdC8cqC zcq?FHHB!>^s6{73POO^QNH@WLko3g!{F_tD*$Z%#l#tYXmUcdAD1-F1$QQE|&+62O znR%5kEc?g`C&(L!k?02N(>+Y5C%6cc_RbsI30j-8K(|+Nik6*!B*%U(H3vL4!}Bca zP2sO5{#@sPr_1ZMaQB>t?lZLP@#UQfWLTO3&bVxwNd4cx%hqX3G;C8if~+p%V@m@) zPK^gH!yY(!ZGP9Wlo#T$Hxk|+KbR!NpFcv)mn!-nvRAk9{}y;|I?1d;?|alzkjbtn zv`9g+CQUt?lbLaOCM=98iYq=t7P*!s5B!x{U2%!ak5+To?0}3RMA_!LuZpRlJiOc9 zCK;9~UuE4xHcP+?vz;D&3-twGB$X^Rvf>}rAfLHq`zm1oqmQyQ8ln53q0msN5?F$q zHq%_Oq};ht|Am8?3v}JFO>y0hy@z8zDjN1D+b$eyLm67Mj%A?5L*)JXNw^G0UK!!v z$Qwc)t@*nrlfzs z5cACWv%%w0Z95+BeC47l3i)@Rr3c?S%W)S&{NA-9Zl`P4e#17mUHF+c6j<_<5AvTR zk%IsYK?tY-+NlE{tw?y9epsU~m}CXSVHCd9d!FYt7nYZLkRNw}d|DRZ2@y^{QG&+7 z18t}Qrm>vcQEuLR*^xLt5oYjaga32*_k%d+TzpYZm+f4n?XjS_ku+v{l>wJL_Fu>^ z70M!3;OU+>itCn^Jpr&Z0X}pJOXG-Gw4#e>`EJc8%`_x7=_)^(O*wN=eKh_I^YQ`h zj$ZkbgiY;ep>&f5Y>)G(jPyO#aC=*yx06|n*G-`*G*r>}sq1h3^RwCqnhsF&vej=KR`7vXQkW979v0>;kTzL9{VC1eO4U3~G>#)+Q=#GGjx z^QyzcWLxYdo)l-VHszpYnfuo$h`T!?7-m$b070~DxL>1Jp(|WG|8x@QlyIQSM%^u# zJt+(dTP*d;bqn_jhY3mUdgM+^0P*6=9hOM#e3teuHUy_1ht5a-gYLIEkmBztp~$jcAT@I zok_8DE^Gj)^1m~@E8&QI^7Lv0G<;40ZGf6dVIrw{Wx&)Fg}@h~a)B^-`(YBP$ynX> z0_Z~+UzXVDgZ1n_OSK_tQ9OOJ6?oD8a6}@m6Eo6ysH+xsYr_6e3g~CI{9^~AC~SV& z=BYV>bz}5%cKc1yr!443kg?Yj^>!>`^K0DWHd@>3>w~cDdG5B=1(7t==~KtZ-wXsS zPQei>iv&F^6;cs{r79O?REGNMpNGRQ5Im~!{okg|p7*pTEzT2##)aUIAn%{y@D^~6 zK8g!df9eS>$fr&*a$j8Q$ZB#&lKb(um9y@%4Pb%<_ph-S>`S6<-h1{X;DnInC?t~@ zL7>AwG32hCS$D%RjR)%k$%0`>(2+OVj6B#Y<6Yd%muc(S_Y8mn$sL&gFCoIm*BNGW zu7v?LjtWnU`m2>N^Vd@|-NOoseAnaA3VSXu!@P#psC~dP6Q<@aeP=QRP0f(vrW0ws z34q{jowXl=o`l^6m^^{rnP)WOTxvAvc|;%hzh0^px}mX12ssxByUR3LSoMNE$-8Z3 zjtJ|fNZ50LWYAY6F%DqB9z2sm0zQmkn^}lfYO^2r9rW6c-vh+ZoEg5#oQE?VT4v}eZ^JQ!4CEPp+CvI5XKk3*fjcA4=+cjazZEy1*RpPa znXaFl9T%cU_h^4e2HiQ|cK$Au`V+sz5IJ_f?VWOMd5o&+b16_%YP(b$uk&+}^e*A1 zosw6^YL3duh^SUa-UOgD;=sg65fphs4Q#ycPshI559!wH`NZnI*pag=iQKE{hd160 z7c1|(`1zsVsq{7=G^*#NshV@Z{w3~1rBw(RxkrBkNB!qL*Ljy!`kMkwj~;0qXH%{Y ztv6xIjgAafkIUPPn(S$Mv-bt^kaOskS9!C|Ysf!_W_)tRf_eJqPUoJpU;iqurllne zfC^8qH#(*Q2Y=ZVc@_N3JGcu5GJZ*A#?OPk&V_>ropc3VMcDj1At$fvZA*RtVxlb>giG>-d+g`p_PTeM-h2oe8BLPQ2Ti9-(Lbqg*OHtC~ zl3!5~CN6*MwZll8YvZ?9H&0XJdH3F6zv2H^c6`zc~MP+;*u1E&5A{?%*wZv)hdW)NPd+$2!tV?vX`K z79Im;z0;1S>V+x$JMK{A1T$b6GEyfAKu;tM0?e7#KM5!v@rzz zZU&7oCoeA`7U$yfbk_~GP{zapNdE=eCITJ1{JN_0X+AiB`vHuj?i zNA|a!DxGOsJ4V*I3Yd1vn*K-8dH7TP{c-$rU0m5@W=A#`Etl-KH;cd$9+*6!cyU^F1qjGMDve3+98j`=xCQ?s$8CeY-YQhA%s}A zU4-^eScgNjOiq1w4~@zW7V6iElPn`zolNc9FHruvopjUBWeVu=V-#Dg($id^8sZe( zk~X?3&F>q-f3rP54NWyz2)$FV};|i-r-KK zLRlPIt@V^`^5{+yZ^cZO!pB*pIp z^u~KLloMuVMz7(3bns`u*eRHB*)1^s0!KN)WvcRJF9q9$7;WCvg(Z|R5743ek&MrswT zB`j?DeJ6>=V6jZ4;=dn9O`U!Uv;uy~tpzU8UZ`xIPIU<5+~?>qNY_(dBuR4Y*Z89^Ei8yEkF?BEQUQ2O-Fv3 z+ZKuQJx+Sn9mBIag;0;r*c~1q&PZqxjGtYc@&I9WfATXDTPX2;p{y91je6L(5Hi4? z5p8q`3ji#q7QS@mu`xld5k%CrkK+{#rXYrky(p6qA&UC8uJAB#HJA9f6l&0L`m(em1mlmZrwuH4LE%*<1eNW3oOdzrJ z*l7*-20Gz;oT3GE@(5uM@Ii)oj%k@cCSA?wfTK8$AXT-r&XcbKsLz_8k++ccrdz}* zHg#S}h+{uOCMa17X(#ed-j%CDQ3_iznlT3xg;^ggFCq^EJqJU580gIc#fsA|n(EZ9 z%bjApe>ENYHmwps!JA+1vGk0>GQp!Wj?Nx1OeYd3JW*8sePqKuERex2<*7d%XudLTlII&}JRKo_&oTC8#$p$2uvE%duTw*OOv$X5q z`j{j*TnOcr6dGUP>fhZFHXQH>Tt6tYnASp;=F99sHgAg6f^6gL%Sntx8roUX@*WVN zAa{v=tq?p*1WMfez*eo`GDy}Lwt)XPrR$oD)FssOG@zVG-~*wQObul?W-#H%BSYmG z^zTW&%OA=^$DwQ6sv;U<0_vjDIMP4w)J7=13Wq#@yjL>kT>_$bu1UI?bCejI{@B&D ze=sgHz$HqzdFYfaA!1lR#x>8;o)!!DwvF|AQ|UY!P@aAoA1I@motVY95QRfzr$fc? z|ME@>2~P7i=h?lTb6tjf9>zv$V@p5kA$m87n_sXTiMiq%*-^%3x(*Jdwc*E}F>itr zicizm?3I$0diXhoErjq8> zsk>dORYdH>oCO+FnVY@}6C%gaLe&4Fp9YqhLga~J4L<>5w=u$#eEcG-Vx%nyfD9v8 z+`OoIbe~8n+%^~JPZZfbBAU(hl9K1o-ErO1Y^!Ihum9|Q#{z{b%NOn7 zX!`lnE|wqRlNjij@&nz2aoY}n{k$4Q;7B5tcJ7QYl9!dy__u>f*JK@kWZRBvOGeTv zxQLmITNi*@Zbg2JeDN>z6C}3+z7V?ws|HJXB(NunxV!V2LJ-ugwLXX#q2bU$wezjR zyTTO=rYZrj#*o`OgE43rYKNfn%ex-yA0z3=KQa(-oH_Bh;T?mEdcZByT($=PvXi7U zi)aaY{LI0j>`>YKb^n0!)QhTAD!gwjpG zbTNo!4G%!3hAiSCOw&-hgUZ!vVX5K+dx}8%XZkyr+b5m`7|Z5jHd~xYZp{S;Oy<;d zEErit!HSBJ!w--0W#Ru@MfPr+Oj+M7@uAO`kxN~VZ|?2}U10ZvgY$!g0Z$MwNLPSPih0thaufocvq{ItTLxRjlarh3 zXCNzIqN7UQ?B4#v@PX(2u^iwNzI4P@Em4nulEwH;lxG|E^3As#D@JE&@YK~HwMtPz z{g@{g+f3Cq;2S^ggP|Y^4H!+JfJw27^P?j}l-)9=i2R)+z1c4&wXD-s-N%b>z+~{8 z%XFDz#?pBs?S23Pcpg22JOf_)kB_JEG@kf}cwqJ^4$Xm;UrsD`3no5o0M1a?D)sj3 ztJ(X7ucSF|E@uNLEfouNrFo?&0Aa6ZZc4c>WolE*;;Y8Y*20ahgt!pfl9>)RPe4mK z!mZ5*WK!N=kPU-4s`7G#EaRn>j(3BG%%<|#j68!O68*o8SpWOm^B}B^nR?h6!$#&R zEI51sJtt%aG^FYQPBM4GkANyhrQOL*S) zOx}rc_#)Y=N%~gSl?W^)V^emr1}QhKEMLx<BH;HsZTtuDA#t+Cp9-cuK(Re_$|H@ zwrsN=Zonto{hRVmZLAg)qT20U3O@k%ZdaJH;4?%a2U~nmE4$}InjMo|wmli|n##5c zg`%3QgECn%5Y#y=yEHp>hvh78#+3d@TS9{!-1zC|U8PzsFDJpHe&5xs=6GH*Ma0jt zRzt(u!~l+pa%3`PxolT;Q;VHm9W}GIx*1P<{ZI-1e&)UK4{8?hbvNeuW03A+*Tndw z(gS(}B1WZh?t7UI0hs;^qJLh!`O ze3h00OTVDC&S;G^_Nvwv&A#4GM$h5&ein?`<#c;_-F5aZ`&-KF#;av_0jiFgrz9K; z{y1zSXgS()NFqMpWP15IAEd|3SI_hL37=C?6miDo;i1{4}~m0D`L$BZB`9aS?Pg)~1> zo~+s~?tjFbCWFu$E8&#=afUABb!ww#*DvrssS#NTG{;~ob?_{Qcrxmu_K_2&8 zqtKyf$Y;oSiUJtkrO|nK^@L{VBL<}ml&TTq40otK?eNXu%^FNniK|JZECD4H&uDhj zsIo1eq7J2`f+( z-Uc2e1jA=5q0B)3Dh^HE==kC4$j*MgSQCE_Ab-^B?neis@@n8IMULXE*@{;k5s54(s+=XWP0rwf-&4VLe^?&}% z{WxGEZrX3LvpZ>nsM3er)4~4D=8Etl|8N=rteMH4ddVi$WNG#(kIlauf;}* zG2{`Gwq#9S6|Zk?dp|Ex1cW79_myaDPwl?EOHz{#W6B&C*j(HXUjnwawyC_(AY}jp zUn(!gu*Tahj86k%S*or79gSxOT2pT=6v(ZD;XB;yQv}n|9r~&9uH%vmJlEI_3z#Np z5$+csgR8ekEh6Au)b^&0czKAX1}W@_yOQ zaPbBaVGhzf>t{<8*{n0EdlpSxBg(rcu8gQLEyRIe>IhNp4vU+I`C#mB#ZAx3QIL&$iWbJZK@Co1@Sx-dR z42C5F+>Hig-@J&1n{gsgUTF&2dR z+4&lT8a{Zyyd~iHI-YjBF2PZ*8YDNKc7L`Y4v8L5WT!2F6Ouwg2M1oZF)X4EE`XV z{UL#4lu%Q)bRJT>(cd-7%cRPYBfv0;RFp(NliA3(h#aYXq-IxD`{BuRzqZ~~1!|5 z7L|G&CKxFBm@id0v`KW?LG(jn2TLo`ge~d^Obau)_loJ(RR16V6*aq-QDvP6#7t@s z8_atj=3#TMtJXH<2!(dFj; zhYBATRi}}YBQ`}ta7%MpWcyF$Hu`PT1 z@{p*DEIE!#`b;kygrcRIF{fuF|H~2bSb693@sUg4#?>luN7603hN$Y{FB$Qi+dVu0 zxvBEklVQO@G|?8qGc=An7^$#C?FnYYlt4@<#%eOQTex0P98j_k)&Zf)Gi)7q>WEQ0 zJY<;2O03se9{VmjQ=c=x`=_mz+%Prvr$S?R|oi_g`l&zf~V3&3x3mR*yfKanU1YbLF40j$V{-Qc=%5pJpx$lkSR&>95AZZA;_!_#SSi4YV5 zEpf4GM%10$SvoF|yes7X76C+ZF=6nlwsu@h9rt|V%6nc1mJ`U6gH}9&O}9^IoeJ$` z?fNDFQja8YBF`qz~W@r;<(-xr6av)J9G_SK*VkS4HflM^l?dv>0z zCbxMG;N1Kmtt8<*uF1OzybR^AIS?3t@!o4^{CGKqa>`~t$*7i`G)Gk; z{za@(x#S7s-sXe7O^W%kH2&6OGw`D-`ZC+Zn6i3kP*--1v|;|Vc?tRe1~%#eWD$Pw zl(IR&X;3!SmQfV%e*w`5gO2rF-`yrp;Ms}D<$i~;lKn3c&zJ<1KOmP70LK9{NaZPJ z!F*^gn`Jr|<^RbCcLlsQXtQ&k^3ksCvQ*D6`{ZV`48F|eYz>XMg_zS^pPAJ$9KFD2CndUr9|SGO+R%q6hmXD&R<$?4kOqad>CKd{+qsdurjgG7=Fw^V8uUhaufqaRdje~ zv-cGMC8o!8n-A5WG6}~%fVCg*j1L-@9+F3^-8e8ki=5ki-%3h=fusYb7;Fivi`k*- zOG}FZuygad5Ya^IYf{yBK(rbdvFYj-7`bRc(73!G=Qz#U*MKLZ`LbX$X^DdU;0yi1 zn-}CK3Ii2cBKXrjfmBJf$~)Z>wWj0Jm+;cQ@PZgS^8y1WM!SD26bO%_j|14=esCY< zVllSfDEy~IK(o%Z$K}dpw-7rlm6T^6sPeHUh*?Ftz1v7faE_+dd zJrgtOtdb?G)slS0F&rBQd#ws^+U?!nS3brYtL*%GNccS<{zv}2JdyFpx|FkhA$!)N zggApDTI&2kmVl(LLCVloJ07O-RkaVY_8K24-a_iv+M-zzca^3XRQg;;4*ni2&8PYS z=9Io~-gViq>3jpi;_WkPX`T^{Kt#oREFNB6zub0$dTl7h`=Sh$B914Yqw|e53XAfM z@D6g7v?Tcf>cqK1-Qis_z`R2Sj^ESJh{ng{o_DGC&`jP{KjpR(AEu`RIAX$ZkBwG8 zWM*`5aFv)>Dck+*qc0vO6zQhvEDdPIKyvtp{eLFBwW-H%r6AVmJtKnng zq`tro&RYtEQjk%@FdY!7ycVs>sZMxn*z3hCYyjDsVy*TW%I|_<|610;ORh1hf{tAXsz#qrAVNx+Ts~G z%2X$Y|GT5mtkhI1>jcfw?NX6;iC zUe!?fxoL-sDPjzrTw{WnJxmq`HfowJlzh@_TSFV4yb^`SPx-&$%y}$9C9Ej_1jqCx z=8?u%S$T4Xb@6X<#HcV?_Rr(6pY^RNZv@t5FKwTVj(iRcN-vNucmxrPpWpN=qo;Z= z)sl~EIh{&7oIn8YoU{t$;jGAd+|XY40~3ZDCZZD)rr+`D$TAgZ1i41`xUlx8X4m26IMa!6S=?>-G@f9oC1Eb?l%u9e8&jM1+EPeFyBE=4mb5 zY@M5L%ZFJ8jPvq&pCFN?z!sREFcr;J1fm9)m+i5Kf3lrN{LS@;@7`SQ$WEGA zl#&9%#K`GhHgf;o!8|q<+G!S&VUQ29bPdiJ`&g=P=VT0m?@eR!ju5gE6`$mU@Jl2v z?y9T(U*2ZV@S?LsT%@r36Lho?h7`ktiyxUxNL0uqn8zDAa73t8u!=epYn-_W!DjFN zKd#=+?&%+X`Etw*PPxiH(Dr>mdX^91`TiDzny!2N$^-&1jJMo7)xeBRzXHqWyMSj4 zJBA2B*eO0SgO(?*Mk-q^Wd8)wH&qrm0jS|r-9n5TazL<&gStP%rW7N3^?6%e_qu8Fu#o6K|{A`rp=?Fg` zz;-gid%Em(U%b4E@3(AvZQhKwWGF)>P71L|y`f_d?+Izd?pPHi9K*fwiiO{XSuGj3iMmN>`W$soXymL$9Se&@mlhpu@uqAsTZZ1K%iH<^-;4ycnOoJBgiZ*Y`{uCA2p?6ecVB?Xz*8 zCYxYs*z@jhsqJ?0Wkh$dY7MBA8@~pBGJ+ld0BH(HrXe4?$L(=yZ{GdGN#-a~$xKBi z8vy0KvPPQ2LCgnIhrocT*Fy*7r`8H~lT8IKTH$iY{T|bz+?Ub}764%PCCtd2Bl{;V zO=EgsBsk^XVx5>ui)dWO+6SZBp9gQ^JcYtM$DT_^3gRi=xXT*-q=1BsLgR~!{I04g zy3!2@zLanPQdQ2$x?#@)q zWSf-C7eNEvWfO_pg#XDjwAB)!8q4w(3m_qhj%-UOeea|g^nZgQP?g}PJei)%I6WdU zdVIScpjikNHnz|i%^YwgMnPV8O%YnrR)}D&=r@BO;nFH5%~GFRC577BnlqfzM>EbS z2DV~kWFChKD)_LUTdS@RZr*K|LG=*PEt2Kh9YJ^K=>N4t2rD^|WdrT9>nt2Kwg0&I zc--G?ln2A7h964uUnPCd-0K!AvOVGau#*Z4IbzweIn=N~{*=NGU3*xu_R_7KlERpzg3Bf&XEDKa!aQRC>C$a2#(7JNQ=Ps!*Ay11 zkAB;vIcS~5BW7%o19e8b0`S*X-;b&2;5JuV-kW6gnn4f9SyPi8g-7^w`rfx%P-Q(4 zI$#`Inm9KyYbau)mJ&e##*(jpClZtiUk*|JR&fh#U=6YJwup%v^&n`s5Gd(`>5E@# zEHD5<6si45?nII+-j!Ro_Bt!T2uW}%8$6D$vkpuXMp%iTegr4nV2`9NpTJLC`>3Ks zZUPK@C16Ntm!T>oqyGD&$fe2gpiiqv*qcLMk9j(1p`sm_Is3*cDKmNo8V_BHwp!m` zRqY>5E0mTdgj&Y2dO646tLxrQB*4=7Ilr@XC1_#wY3M&v-YL@}vAy#n1?%Nc+GK;6 z@ViY?hhQm3ThnsAp#NHM_vWALe!K3?E5D<~w!R3t ztF)g`9LAQ*{VHaKwCSX9HixQBVwH(2Iyr0eWb2l5fTQ|`Ozyv}jJGKXA=%lnZ)EG+ zSV^7VA(wpbMr}hsL8&76Fm#G{;WPG@#$VVVVZSpUhoc~B;Xcq*0D0nN38;n9u=73m zBX3Arq7V80r1{q;JZyrl<6+iBjl!gDemBKmCI_KY`fOJ910${5&sMudb0vRYG0W`a ze?M*mU7D{mu_ZPnKdxqkcRZg-$%o?Q7{RE}1l+3jSC3Xb&(xb^jk#Nc%Y8YF=V^8- z*Xw^;DxKtV*p2&UzmiUxmF0s9MPiDQKqjs3~ zy{F+8vG)E@i8FU@b2~79$TRb>P_hKzTNhIy(u@8~lSUr2@qGZ5mK&ZHMTrY#*Jy{GAxA!BXiLTS7TWYT-%Yy+*058 zLXf$f3gVX^Es+7ABDAB%C<&$A)CQF; zX^+nK)(O17cdhp}$m)EdC(z}6RM}Rhb38h3MpoP4W| z&*s}yr_kX~Q+(uSzj;k`dWITn7q$cnf3=!?0Ly8_lp5j3c^_-q)MqPRZ6D0fORQ3J zjbZXg=M^#<>fL;d497JSXP)pEvAH0|tdDQrT{L=y+47P(Y4>?R|l}eEDz$e3HuG1I3hm zn@V>t&ndT09NT1=%t98RRb;sLt^V{^Pye)8oDl6LtjTbzON*6OXkwk8f4(N+)`ALW zr?p~Tpka_E6oK=9U|1fag~V|Rs!t(A!|Cc=HKT)-mquNyyy;)_Irav(nBQL-nq zS}zoJuF&^kTfUSjglO+J=h#c&hZMjR3*#R_NTM)=rb-u80J+I?@B1Cwxg7FURJ;ij zF{K=@Bb2mz>BbWjSgr^Z-V_T@vTBB8?u`JWLDJx!t zs%r(DD>5YwTw4dI@9A?PuCryf%9|g>@o92ks;6=Pg%kU*ka)ytzGgjr_=W1GLeFu` zJ3TpqBAy$+latA^s<}3jAUm=pE3;QY}wJ_!NxG%`i62N|pY$GZ7`%pMD{)h7Fol zNOyu!EG?XN$OgzGJ!Wpt)9(nkeq(KGC@>g|IQYuu2X`mEQ%H4!lhd3{O3Gw!inf5U zTFOpw1107hua?iL`NtX6Q?2|#XW0b>4Y7tA|B=~RQEi>s?(Ky%(E*4mi;e8;J66o( zlWZ(}2~x#)wpZ>IMaanXii0^ZbojnRqnF`3?QT1Vf8WSOMSCXxEmpd@i`3)po`&1( z+2MqAUSbcp`t_t`#DPd9&fCk!9}<4v965Pnh`!N}!7%iFE46bv2?8uae+Ew|tP|3f zyyLu(-kF!SM8Jgd=qtL7wQ@Wwl1jD~{b_*F!@o7>9P$zKaYI!yu>zbJS*IC@~Wy2iR5&@dekS?3~GFkiHsX0mwldS zXPwtKQawfv&mRT1gkph)eQRT5>~!lbmlhS`CfZYFCR_53iGfvqcCMl1@vOB~c(CQB z?*36e5QUx}UoKc0I=3imxzxuFj)UL>j<3{RS<8hDb=NO`kuEHK%y|A@Vy(f&bK%hM zCg$cY$K|0f8a(}&$dv}$h6mdj{d7O+-BEuVQygVs%@t%qq7HqqP))ER`5k?`0SZ1M z^5?u&4m9VxHgdps1BOm_k0YWl{L+SBzMR@>y-ZB*rLZg2HW?>A!{Ed#z?2w+R(rvJ zyAw{=7f!=>`2yE@4nQQDXYCN9d9c-IKG|z+W$K4 zd>as+@o$T9r>uXAAS5F#7q*<$KWA<%Y5cdPgsAaR0)aWbP5v5oC$bhwVV4fwINF)< zZz;s7(`55`87(q-c>+MEv$BNkw!;cktW;H+u+Wq^_ zD8?;@hE!b?WRPp$Iwbw@N0Z`hOPzm^L?wze36R2Mlt@RiB0UA4{GnSp2rg%&admt3T5x zPpk+4h8t}}|_Hi!B8$}(lL9!&!$Uu@qlzU7bXTBWU zYl-@kd&M*~*G$u+h$~C?O65@B~}WEA*+Y9_o)|-*5$}zFcaf zXH>`P6bxh~9{0M38Yo8%6$BW0pyPln3o8of)ym2g_HH_jszXCjeudG+9a!Gx9v91t zva%`z$}CxC6~8CGQ%^mvET^bMh661h2FRT&PmLFXF>hU{bs*#$L;|e>jP<2%coyax zUwoU&oH{pO-*8S$?GjIwlf4_z`EzK(f{$V62RoOqo3Q`G3sl6=2~s3)hZ8G`dU>s1{;X2blh z%jHN(F+F6W_xm{+apkT6@qJ~^QvEt|r2642j^wNL{bl-Z`ol}kTb)N5VELAxb-<`4|4^I;=73GmD z^>VCtV^2Fh#t5)1hrM~~hNj6kE5`e|N}KAsz)SHK*57{A8i*#0db)fYY6R@gGm8Y{ z{!Yc-knPc@qY@w0#PK@Qsg)T3UiFm(haW-tFnP$rti-wx6y@ha+}?qfI;@;Qedu#i z!yrZJ6Le=#c}7vkr$|Z+M8_fx-#`F#eo%VzoE&EZ{H2a6@0i!wcdM_?Eay0gHA>g4 zPKHOgo;YG8g<-(UFB#|Z5K3lFi9VK+$o8?6AsY-ML0@^4?X3b@JFZSs?h0iBT>q_= z3*Xx3Yl~}JQPgs}DM;0zws6_~yYtp_rErFk-*Up+Fr^9Zg=mYk9|JDWeL!?K!6g%+ zCOaXBn9WFyQ#v^4=!v&H=Ujf$z_5U)pJ)6UfP+81*fQTlJnxstd9mhQ9ud3~aXZS7 z;PfkHUwI}x0E5~ApcwH+7>?xe9Z@*hpDn(MoA-wsXEoO0+B=%}s6d*I`8ZIVv_xFnBiZRd5c>j;Gm`l4oc#-T{A2*A3Z$HNb)@vdV};V0SPel(M*X^qtUtpTB5U_0wjEwg z1PJ9ag_ZLB`mf!1KrCoGb6_s<{^Q-=^=Ur~BMfTcw87`84%{^q-uA&`I}nPPpVEN@ zy2GymiHV-oFuy%((HaL&qsOCN5rc>R7g}T06ec@z<8vlT`-9Ra_<^rr^@ZGUC_4CF z{kV=cQEytPn^`U(?2TCw(`of?PUbPYB?`H{-MO#{|)YYgLGTns3n4{U;`r?X$#~t2<}^DERN; z_{skJdjxS?mTuu+M6^okE)Bpt*a8f@=cB>gHE)$}aIz4Q4d#nY(@Xc~0oRYApn#pA zl&R)^lJtQMdU9MqHj^x6mHX-S9Y964A!)~IeLRqC@8g5}@?w!zzvoVXLR0jfW->+6 z`iR|t_%+WMIsz#h!-YHXeVn2sKBhNdiL7s_CG!RS4m}m4o|1rA{w4eB;Cfu1EhJEc zJuxuDN9Six&%QbWy_KA_4r8YDR4zqyDnZL}4 z8^a*qxdu@KdmZ(LV@;;t6<5Dfv@&JxwNx4C=Ui4ytQq_Oo)MUaC1Z~gEKv9{aol%S7X0>q^ymV@p<<3^(Vz>Q^<)wruj-gfy z|4-GgvMLm(4NH&49zE8WTMFyXk`t-2*Tv6Yrh{spS0;81Tf!nqzQ;Q?gJdqlS2!@B z30^Ba*T7afS2yE4I4M3(+&oFt<1q@miJKD&aZGkmt!AJbd8`SQEFKPUk~%t@E_42M z)%W@Eb3BXIwBhfs&KjJC4P`<`;-wCpXK&Xchv9<|vGaA_Y)d!n!v5W`+th}mhTJu! zelg}p=bLod%LL{PDC+k|fJhcW17KC(?B)i_0%j4;f$;(O`hn8o#rV@%yOSkrL1?DIMFQNZh9=R z$@czBvyUpC;=>}pv6~uEg;o>hJ|M=a?-uSJ1#H^@KWYcs1DP{3lehwY{nc>V-u@kd zc2oWrqjK^qgX&G&WxJ3SY<3Hv?LRU?WM((*+EQ54_WAEezM!|;Eyyh7ZFJ$V zxvaF`YgSa$<-{BLaVN`>ZA!6uMmVJvPfaN#kak6b_A33;KnDwSUXZZe!iso}=P}e*lk8rTUYFZ`Dfek>&QsvDLb3ns5D#c})g- zKj6cZ^0{K46O`A*j?)MYTrCs$U43Rnt!ei`N?%|5$S!%9B*XnBuIjb8z>hf@*!}Xc zBo(Apt6&2zF8R=Vc|O-hm~7zdtQHzrKahJ~R`P^-eoC?N%KdBg!AVB%&_P?Vs z-cl?z=u4$+vg!J@xzjBVAJ-*rQ%qT`BeFyi*WAU?W1%jShs%!Z#C!adx^8V#yp!SV7Z0}6B_PzCrUr!p7F;om(PD%X9(y&39s}@s zlZ1oK&l~4>_)%kkV{D&_L$%(Wp!f0PH*_CzkJ?h)BDtPtg{d@ltVJvM%C5}5{W4C@ zHzkA!(rr6oC}Lci=OtF7bbmX&Nw>R6EgVJ2+=O#GmgE#*m0(n&fm+4P>Mn26mamAF zJPQZ_QU5(m$Oen;My&t8A7o0+UfY_ z7A#w^M6*4mG)9r-aqn?&gp-2brGL!w&{ctl5&l1Rv-qG{BOdAFSqPL<0Kt57MU$LqV;msf1cW!c263b#%|d?fb(;(rNQ_y*_s>dPr4^&BNbgr@t^)!L5V7o(-R=>U9PraJc0>;?zwV6i>?0@-9X61V^!*o|;i${4y6pJ7FuekC(-f8ixRw**J!HIr8v&u`n_F)PpP!i@)uHQK&+i7gx02hVsXjyv(0 zz3Pr^%nT}yuZLSlhkktiKjFagplV1=Tv&-O#!=eDZezw#^Q~@30Lx`mYmBU_+b2k? zhVYjs4b8Mb{$SawfTYni&zyz|JwLyu7ap%nfAIM)%Oi6}9*(LRS=KzLe$+eBZ=Gt9 z{;47yv3`f8cJBwMACu`^H!|n#k{1dfPD(OTZ;;(g`8sjbRaI53pOrz+WzqCLR?9g} zX0cj!>dZT4_wI>v*k>srqE zg~wiCV^C4;1%T2LF$*AQDG{AdKK5*3eYHlq5YvkER?RW29o00uf1;7~2g93fAk;n9 zDpDqv%`hO*A#`Ll?vTaGU>)F@oqRl)THv}9Ej}=)V)XrYp0~;4Pua3K_)>Q9oq|*s zU&NlG6|elm4z@Ebqp1h)UXuI*B}@o%s1Gw;u_o(F$)B%|&djY|aQ1p)Ae9>X*^IG; z5A-kw6~N0{U2X7t0W+1oEFvcK0Kv>!cJpK>CbR$CLi5gWAFqo+3kxdg{fr7gPAx=? zLeK*!ehgiPiTm4Q*t-P+kcd85d!Fk8vuk*?`4;RY6Eu<6FR{tRH?$l^E`Xiz_z0EC z0l-xM9h`=`z}3c(_-H|y_A+U9KKkwrBf8>EITY6jyM-QM4AE(Vb?4@|sh^!xtms z`6nqeuWvhOHBzo$$(Ee>`#mYiN{?UYqDQn+5<)RVB*fpR27ZFPiENY1y9LQYWNp{? zfs|k&`q)Txgk`IXwA~j|0LAf*Y2jba6B35pjPxfYNk#yw!ZyMJ3Fgj!{hhj)>uDJb z8i1nAz@!t{2gN?-uS;aV*H;?3LH0~&Zh;;KXAD5@Vd)m)i}Mb_*dg&BL+YE_+(4}+^mXRwhCxJgvkR0 zhlwP^YY~L_jr}U!qsI6pc2y>HdnB7zpU#%LbKsACQ9kEl}XUTtP;rtVlc~9_HSN(3=??=W~cO> zWv1>dx^q6y5<9+no)B!gSZ# z^rgOw>=pmoB+TP#`QjW+@{2Fs>5kwXA(`uA@Gnq0u-V$PS+V?@+30OaDc#N_K7`sy z#t0|zjLjR)~#tW z4Qh5;Eqy8-+fJmikCsX<8K!i#Q=9LX3VkuvOTG{Vz!h1PGT{c!7*rRJEN^d>58*BJ zT{ADc7N2NCNl9UEB~8*crqa@qXxm3?;skH2z8_Dy^BVpa$2s?hVnQ87@{2!McDgqM zSrK>=VThPdv=n`&+e|L@F*(2zP#3uLV*```b`qCer$15}R&#R}27^hWRA2 zJ&=-E>(pkYd!@BKI%s_J?K+c#y-IImk>^x2!kV(!Vo7Re^cu6fcyZDP0yiVecWM|GyyUik?-?ka%KaeiR&0V0=bJ}1q)k>e*=w&rsFWOz>Y}*|Tc1^=2 z18ZdAm<{5#emnYf6H1)m;aM<~c6oks+#~tO<5KfObKjoB3Pfs3mflZ|lZouD z(y?6=<q{TEQjge1p+E_!`)eO^1erPHE>${|4kc=tb0(^5FFc-rAjJOlIk*Zln< z{-Cs>YFa)pucl6Y^mWmApm~+mC*JKFNP9~Br{Z`TSWN~vY(YL`G7u~IrR!U++*+P} zeoXvljOS;|;qH1t#9J$nWZWtPW=QAzSW)Ki=t>I&@VTLV4eFHDXi!(TS!IqlbU@=6 z7h)fp!}2LTqQnKcWARb^g7!Rzy-I;QVtK9u;*O!=ufGz`{yuK3Jx^zK$%_^84hLEH z+xE-_CJb-6#u!Hv)|)f?)*v%UnTp*8Vuw z4jT7hJ>D(6_$@x3Lg^2?5U_C&U-pSHvRq!}0C#UxTFRR0l+sgcoeYICHTS{pNC7q3m<*{1KY3HJd*JyYkv_J=lL&R;>H$YxKm4bNVQHd zh|pkwlXcIX$_QhwyvlMSWB5+7j9C10gO;Vl$Rn+724*o1!@i#(wUK1X^FNUcNn^|p zpT~|rmwvh!Y<=>ym9{zPX0D?R1C0D9-EZ}nd{4!6WN?VfD;N&{{nNrmYE=x**Huwm z5M}WYOdDVs#G?ueu&Omo@AZ>#EIkBN_mE)YNhH%o667sbN4JTmQlH}kP&c)*9@DB*klt{T?wTt)dD1lPiQVuo@<#F$UM8v@q=Ms!PJzVX#=^e1`o59nM6&`1j7#dJRMdLc zVzBe&kz5lt(Rsn|K48J?6xyK@b?Vm^UB}_|A~Km_IbgI02WNdQ8d^#FHQAC+>q*i& z#jl^YSg%06{TWle(cyso>@Wl^?k)gKOnjqoM_&D<@b5$1)l4I7y0?4OQ{f*^jTkf6P*-)>T)sE~9FlO2TVB zMb)g4<nC-xqW=3gA1iaj%8kU?D(U+d zhYBOq__WdEtfzA{D~7=diFx_g$lcP?@3wo1yCo%wKd$6wVaqI113bAu>eM7pP0vMy zmDg6XRLe^Hv1zEgWfie)SG=?-$uXBIH1FQ6H!_TE|C$#Yy3{N8Equ6l9<9q<_+IJI zbLnumax+*);bitR0B6Fp8LywJ6;`rRNk98${O%6jI>eM2A2TaAE`jFwi=NXfUv3L^ z_Wij1yhyp@|HdYLb1o_?z5HtJ|D)HfuF`oSpSO=ozF4PZ@H}x5;fuhlcEnmk%ybN* zgxy@}4q2OIeodB{K3_+gpWJUl@brXtTx#kE7GO`74a&}*I=!z;3HV$;?Ex+Y19pnK z^HXq)G5NSh9yxQCz6<&7r#+4a5kgJUPx2k;G()I>88Zvrw}aHOJG{uT$x`3p|8ydl zm?wAI|Kio)TuS~9(zEE&j2SFdKOp~hO&H8B+XxcUi!VQ>P%jxYwfC|ws|j#fHQXcp z_POQv8$Tg@xE=#}-IPjMakGece{sr=Zr!Vgz6L=OTg6uXZbe0n^II`G z>|<}K*krs|y^wmE1a`u7adRXYLq%^m*?;}hTVGJodt+9|1@J9cWgPHul6s?k7ms=b zcf}=PT5ri-XVHX4VL}@a*a64FsnrUPQy>-hx!rmeagz>L3z@{>KPwt5(dj->7Ndq? zeCT(ufXrc0r4n8VJG4|!b_i5Ut2E5map=^hj_(P|5Oi~-9sq|B%vzrGLAtx~i~)Gr zFU|HZ!c4T|G{|HgW&qmBfn5+t?T)s_`@?zR{RbUL%J>*FD%FLtdxPjL4u zen)Rja}y_yK86TTxg`Z+!aDjPlimDS^<5l3>hmi_E27SNTZLAc7QWOqtaLl$?_E?g zL(~cF0(RTgk^%5RObOA>RG&>Y@KiP|3k*qq{R0`cUk`RYX7+!N;wgD`?)wPkRdzwr zM1+_gf#ou6c`=xpwlna!f3m_3M41zeGI8Ms8NRFr83kQcxHw@iX@6lH{7)h}E4(xB zv}D(?O2LutxJo7Hj6OxU7n1DDk5!pa(Aa;_9E?Td>3_37*|*y)BlLwNer?V@#>dG59Mi(R2wx~#v$#SHe& z+x4XwzA~N=H|vvDiHc(^KhOFi+tl9=w(sYvBXe<--Fmgg*47Yp^4uAw&nz83+2>{U zFHNg9bq&Yb;0drXZy{0pDoqypD(mm(i30Z z(5mmBCALM5*i%H;(XO!G#JF)nu>uqlzo%q;uOhoD?_Pen-JK?51us#qnrg>XW;~bx zUi^J%nQ_Q!Dvl~&ydHR0u+!$7_ivxcRK2HK?zDU-eeun|;SArHW1cV9bcag+cRR@1 zf7LC=>gS7i44#4DP3t7Uu@&VjKCxgEdgwqP%!bv=7n{FEpQPL;y4r(K&Gdt*lnaPwyni(*Pua1b}h z`6P(J4>!VC_Oq*?J-*ji$5!ePIbw)tMnqWJk|KON`m7-7AX6XI6FD?+$U18G>-84f z+i1kv+IR)VTAv?_-)mMaGmk#1vHrXD8zbalB}ZKWt7E^2r5Oocw=?)V+En9AAntxz z9WU#5{FQR@QRo8aQ#Umsr?{6D3AwMY`C95^$IJRMJ3eWVr5ncl$*1O;!X6pEoqzJ* zb4~l%g=N?sqoRdRNc)FVjOmh0qKnq4%%=I@sFCbXvgQyIJG&w#wTt6yV0fT5cYT9j zOJ60q?ChTR8QHYSWDZ^8LJjD`u^t8_+}M23a7ILF=CPc%>nl8-9grE46prioLteSW z^?pEE$LLL7Tq1sayq=P$QQh$L))hTh1?z%Vrbk>+k>I9I;2DpJ_gw8r{%vhJoVCaf zF|j7B=*g$F{44fN{|7TLsy3>C$QOFG^H1xtKMKkWr{3pxRupr6P_DSFH#r&i zD3YH=Uxi;jEGybW^0g=~hhAAiwto~Rp%e3&@F!a)36hb3WhfGIIBv;C+<-2U8lV_N z6&desJ{%{wDG`IHTlOFKNNh>wZ`}Og)hv;VVw6Ce3Z4vbXeHVk1_hez=b7VOY1YU$acA{I_yPPiM{&vs;Z1t0CCYE$xK9E=PWOzut zc21I`OXPPbCs+Iu`zu=&$zIO~K{@~V#JC#v=9PCBT>yJ2`Li7Rme1GWX~ur$*?#R= zTmWRM_T=n?@8YY^UO@bM+4xz^s0_*Wd;$MwCl@6_=2v(MBt8-9v4eJ9Sr3P~QP^;G zgK2n2?V4is86E{L4lBdMV9N6d_ntjs#9xNMwO^)gbMlXdC8h6yqeiAqB6^grBeL$? zql9eBDd07OP88yhGhCZ+)FO8vFz1nwxP%q|3v+w%4teXy{+Zne*Z9HJY2>R|LOJcx zFSje)ucg7Gef5E9Jbe&*#!Ae>a>ZE_(|^!CMJ@+$M!t%W8I5He`w z(Q)lE6wZzhC)hN2G~JY`*^9oV>aK{)25r;R#SO2%w3)mH^V;F0JzW`0gME>SjKV!n z9B$ZYe!o~?(+D$`$In|EEhMCvLa^*cyQ*%vrAhrai1GNld&=Q_GcFwn=Xo6UZrz!F z2dg-6DWn=i8L;A;;dKgO>H}e0%($p(jKyIco%{OcCDE1Qvn3GH#u{&WI(?ISZ^39E zOYrzA#k(Yi2Y-3F!ixWjX}qZ~FIF5SbF0MUcNg}{#R-8MS{*vr!);iP#2yx}83h3s zLGATaKtOimR>M!J$GP-f8>B*td3B$t`F1rb--Ox6A&a=d0D!%GyLjGIDevJcQS0ou zj&0DDnm%>B%KqLi69gv&upP8}cEpjd$B}1<>>~$#8J~oI(@iJGkGYsSop`W|yJN4` zQi;Cr)rpyYY4}){4DQ7%ByXCz5wJlK?x@JTEl7-7z}+A`1idnXu3Mx-1T^OMFRQA# zYky-FjiJ@Rz`|21smfv5QETc^l|)8lwmktm*tQ4Z4$uS^K5x)bl<&IwH1Ce$M$-5W z8#Mtb>PAbI(MdAIsU+VKS_Zr;OwSr7@kgv~S06PU?PkBYIBfShZ6IH-k?j~gIFfGD z5VJZxV#7jTMwEe=0g$1%x_Ewfqu~-YzjYR801V0RQKMDR)PUXa?3b4CKWzK!a`DX% z?=-pCB6%-vFkTB+!Qd@c(uxn4VMZDge8Y+iqL-IHNwk;0O*p{&QI!#oY4dVYXyps>c4Y|mIV49f$fA;I{jzCQ zFFiLC^p?JQ=%To>35LsW6@hEL zbhJFEk%CWy>E}6X7=dF+ipbY+%8ujh9H7ghGQLY-!MyWmeSH)dF2l*dS~P+#alURh zR~|Hi8Uo~Eg}OfM%w;+%OzRH>@J}8Nm6C8A2iDXG<@&~G$-^5e``$pXdog{4-Th4~ zL(?ZMdHn>dhnv$q#6rF{lfcZ-T(PQIGiNL|J+*6+$NA4NLZWn@V>n&#(CwY&;=r(N zlUZZtiIJx1H0Sez;r@X-%y^3cf5!yb{eG{!#HV-qk>w7GQT0W+WoBoh!paXkQ|cUM zer&ck6e+o*(TcaItbl4V#Ju-h=W+q#nQ=J9Ekt{4>c8uqop(_Qa^c)YWw#U6_slN$ zlk5r!_S>Jw8#MHU*dM+S-%NACBV*TK>6F+^o4|>#-O;U)V)fV`><=00elb+BP$Q$K zBj!RLrTQ-2rTO~px8%pO^%0Fh7#bBf50Cj~NhE#HL8|d{F&nauVvxYjm&xL`lqqTz z!3C017By0jh}tsqP4>y+^c2Zp*awrcscCdRpUCOd$Fe!QQBN_;7hAe%OSAFKl$oTF zk@@>~<-)>6Gc^^0Ze+E2Og)vq8TX3XlPOh|`mA+dvd{)$oI-A#JivFkYW2W(X4Lc5Q3c}QL`jk}O{S15v!5u2?jgFl zU_=1yDe(1?Dgq~syQ>(0gUS@GYb|b4>br@M@T-NCbUE}?euVOto^ENy7Z@jC$d*;Y zzVr17oE9j5h!im)tw7|8zUPX1bD>9wQpQrsN|XWW?Px$iC1!|44=BX`W4rCC52zy) z;MMTJdO+{7olQsmmIN=j(r^=VPXh?p$-!)OrkFxcL4rwQ(43KMBn-rBF>f0>#=zyM zE-jd)O4cbPrn^o2w{noFd3RMV_wJ3>g@u0-KKrEQTQsF3xYTxkd!p{hQb$+%iq=Ak zh4#1>xA32pT#?-e_SIdYt)95`8K29*PJanN!O(w}8jg44Y;(Wr-1qR9vXg`AVL$a~ z3|dy3IY+~kn5a*ogCdjh%MtFm@auBozp05}{_ye`rkaTF;BP#GI_z!HzJBRNY@+3| z_JcOgTK=@wG;U;rSC$Rm^Aj58FDn_l%5VkNu8f##F!a7FxIf!~f28WqKcKSOSN6@r z{9M#-T{fKMB&Ywh9dm8&*8N!+D>%c)C-uV$InYl~PyW!SUWe5xtNp&kC0LVm*{dtX z>HN?2{(b)V%5H5y<^C_Fz32MM-Z)6ACx#(bl)VnqcR*!^C!$6G0oZ@&^P!)wdDnA< zpO`SdyHqj0slcDhA896dak{uYpFnNo>Q1Fc>K?>fCa8nrg&XklAUO0s8pL&1U{_U@ zC7cP&?cofrdf>7FE4+N7OddTP!zUUpx>+uJZzYSej=y|PjGaCxcr;D<#mv`u+^MJ$ z22`>V@JN0N%?i8(;M3;XvY%a;i}Sn z{I4S=^l-5Lt?}$WeQ|;xU3AIJxuaWIo<;N8dI7Y2d4RzjsA%0!Z0S(6Jh3<%56qls z!k48&Qk9p9Jq7SaE#?8!v5%;7TO!8|ma=AI5(<5?YG+41-J@i2GMwLMT+3q6>785s z!OrOi(usuxT>}9$0)!HOi}6sJrE=@n-gAF{rH+gjnarJ^O}JhSAG=OLXC_Eqw2s%g z0eC4ZCd}6engoX?b zJJlWY%;EKa+T+fj>Rq4Dhs<93_$xI#n_MS!=YOb}dFC5&rs{FZu%I_fA6*LbtU7VL%mxpu?XRAjxYQDG^P>Z3k+~7RJq;Wghsl^`-mM2}O!(hnnolxid2@OE4wVQ;eGCO{ErB#;TuSa| z#Ql0|J$tXl9T(m}Pz(!nni_ z225TTe^MQ0LuSYcM8-O_NRkRw6nu4j>dx~l`NxJnUY%+(4=)B}B zY5iij-?4IzHc+Mg*w#V2@5xsd9z3H2CA``@MZ69y?c(?DQu_Pzz2iC9^;!O}wicZN zzr-lp%gq9f0*7bjs@@uz%7ek}8Y;o$$rHrE)4Kr<6E^_|<~jNpTqo#1$~y>B@OddNmbk64q|n`y7`MXvO*bia;prRnDgLG03_PU!dFjY=g%*5!()OY=e|joxzY~;;uK-%G_*6!hPA&j5GxA5zp6WB%{P>D3Rsj+Uv$EJi6Gb zwqNnltYm)*Jr_hw+KA2W0ns;2CHyh8dfiXKCM;U3Uuc9OQJl=jvf&|c5jE20;O4~I z*}_w7=sRGrddEHRk{15ECnRdh9k2Z#JvM!G?=L(Iq$v~+Br)^XbA1-rSSCh3Ns}y` zbMN3dvx*C>!#0720m{f6sE?X46UO;)HJZ@#?XgT3cu^I@Lb()A{@z$3MFBO~JohOdd@ z&Vf2E*5LjuuHo55bb)UGdWe~vd1{!XEw21Ppa{BB^d;ec_C}2@h4)l-9o!&8 znnUHC^bEx|ok#VE#5s^p&=eSMW;|7FS^FLs5>}8FNXPthrC$=Xo4CWRhbd09bSPhw zrE9>LI&6WVaq5vpUk5gLC#HW;-EWF4XV=pd3ROg`mgyj z3$C~|)k&HT%0)k5WZQ(C3g8xK*+0biVzI0Z>QMgR$9GLQDD#`&<1AX@d0^*k*4ISX z%1UTx#U??$;{+O2cI2LaRxi@nbN3L~t(VC$G?@Fk-GPg=!oodGo4QL zy-CRU?Qa0&b7}tlntRYgh;kZscU(Z~UU8cG@P{S%J%jT)z|Ep7UJZU2FUMQo_cmTGcjo*YNIF=Xr#b&Me=-8f zC2`%pb&UIQiw^mrA9oe0zSJp^YsVKOudrAv&R;>Jr%R^i=p_LKu>|E5J}ef$_@Pg4 z<0YQ1cnx7^?3H*=p{jFwOi)>blj0mdPV~I#5fSirpWAgO;OcfIDC64N3x7wta4oaN zli#e>g~P1bU&^e}Utwez;Y}8~te3g3hzs;OftzF8>5dh)y49E?1d%kGK&~?icjk`~ z*tTu*_+Po|wE1nVvY0vMa$uw4#bz?NzrFrUSzvc{Py}R1*lZ;P=+EFmH>b;i`T=Z& zQnqD!-171(dXDLoaavErwvWG-r3n3jN91v`rl~*~ zc*@)Tbgn42G?83Td>~Qdc^MBroZ0WsA@SC~X*XyF>2?J(#M9LOQV}DAZq4_<{NM`? z0p%$=-DCkRBtsw4xdMejj@V(%3KMnH+!I;EVQEYMLuM$og4_W3?kmOtfND` zPR({^>AfOtCcAe5l3@2(=uDODwRUM{*FKW#52X%Xz2W=1Ci~<*p^)01ANEo`xWKb& z`By&gVN)9X2#pE6c4sjIXql}e##gw`E^%@^WwvEnnQ6&pc4!S!PzPS@uB`#k(x~rOr`4veykC7nDs*AY&976|MC)u+?VJE-}oBXtdCp zmh&ygU{o-vDLU!(6&zn5>%S0^OiA&gk`;Vt-|}ZdG_7b)wC7TyW3M5yBswHmZ6hDU$LZ((M)9{4|Gy>u9RYn5erDM?=rh)k4q%^kAYV!TF@(&SU1p z|4x&IWft@slO#{0Yme8z-N&H-n02O2+wf2KXXdH=a{|LgM69h?!0n#bL1B$dOBb$RKIR1`y6Ki+jt6 zxARm)=mQ1O6$wsG7Rzu&`2&FJ_=xUeJ+jHqjE4y3EM3W~QL$SqYf&@rG0TiP^1NSD zwBY+!AdAs1%VGynjv`R;e@`d2|nm4%8IV2|V0So@N3o4#x#9w9F z{6^X{qJ)8#?$B!+7(yBT2j~!LD*=^K4tEO8*Bke$9!o#$*?UFO;MiD8?4~*ejMOUz z`(--=c(o9}G5_JfW9K(VSIRL<_G@#<@)0Ec@qyUob*}XHS4!Mg*aGY6 z4Cs?}Xo>*TnkCLAl!NVUn#p8JM0s{)zM+R<>oJj7EC~ufakR#Dr!&m;Dtn14%Dmus z;~lX=YRjCsEFLNF71XCG-T=ntEDx^g+njU`x#6f1R(2HzO03YyfBkuXkI%=@p|IF-f@}$S< z*JZh%(lyuKD$^aV`vk}vf#18=@*sr6RcV#T?RrhwHf+j4`5p|NseGzsx&TZSq?!)- zSN{qveB1~grmf||m)k&bg`No+fv#2e0b-T}J{=QgzudhKj}DI?>{X~R`{-)o=DuxD zx-%%UUE$8sehQQ-x7pRb(S++QqE)jOQ7m zJo%y?u+H-1kX%zL7*4qps%yPtIy|MrKGRg!{ZvMGJsptoZN>m-zT*KhhPv2KP7X-Lc=c2*!UOAjCP9X7S)QKx2T!YnsG3vg{)A+3U^~W(xMi0(zPuDY3#bhJtU$+ zPB9me#I4@V)o}3n+<^z?_Pe+i{&%?~ zd{r0ey9G^={lp@|^YL2u$T-46ePy~oW6{Rqz8&3C8!bsG<~pKb5?)zU!&l~DqpTLX zXiK??=8B}#PMeVuj4^KZ*5Q%=EZVab&XD>|>)qoy$?p;QGfUZ?e0KlwwFn{*@X83U zBK7(Dd_0DCzkln`WYC+=r=*Tg^}a`hrD&JU{m5U~^)IUEZ5zddy*g(s-*`%A) z{An;I$`%ue+wqb3+l2=GebS4myr6>rbVg|s(&GZL#sTJdrKY9lT_*@^FEXjk*RW0N z7S1_4mTxy3d5P3wwHIs0yL~--x;7Kapr1GHucvhIzqI6;tLrjUpuu2ubqO zCIyTXmme&1hXg4?yHbqlhZ^KJe+DCse)FSrOA_pCKk_cJtxyLYVjW33q-7Zn_-0#QBtD4_YZ)hLr5r~3h3 ze?RaLckQ}YF#_TjzVp(xfd*r?Pl0s-d4Tidkts~_?YaO}iB;b1ZzYl5!f?u*OrcQ` zacQgQpU|0~?{=6o(e61{|2(fOeZ31lYNxipF0)C+8qiwb&CR*``DoqVkQ{D@sohK8 z4rkNoT&WYW^ZQ?G^rzhs48@v6nI&~y>fn9aG64iMCSA7VIvxyeu?=%((FhPYAs!qO zvwT?_)By#2^J`m6xi}s5++If&KKMvOdde<8fWoEjfn1VQc1egf#6EF8pJ9G>_W{&e zcuCcC&E}Onaqd_$hJO$nD3L{pVL+1RwSQX`7Ji;D8~LdDZp{Wxw1Rtx5p(Kja;W`v zx|-p(?X|+5BVGP2vjRpO?CUS)M3icm+(K(jcWOa+hcB7@o2u4Qr^jORM{q1kU zjpA&ef&6jQ=d0@0Xn7Cbycnw6{+TAJG9Q;2qBUl57aqnJCBQ*=OIv%M=A994=(xuw z6@xPVGtP@aT~{l;;;p&Ry@0oqD1$-9!6)F$Q0g8!|K*JZF5(x8ILB@y*Ga{fzQhLxgCbu9NX<(;HxReLbusW-N%Z20Cew#RMqL2S}&ZKSyg= zQ1B^)B7rehbd46&MIzKz03lg9m641?ztKFU9E9x3 z>RHcy#EQlJ7HYN+Q31rGdN^>2nXXwXN0ozAMHk-23R4sX3l$5*5X?L7DSi1Q-M{$Q z|H!iWpOEQC&-5Brpqo%12Oi?-Fv4hQ8atEVwtqMwEtW(TS=NVVKfL6RHHiBcS?l_a zoseu7HTzqCyu5u*=jwd;Q>Gq<*E%fyD&xOTk*-r572`bx&6(f3+4%f9oyrw&U&u+( zsfN0DN4TGX0@*Z!OB@+||ISpA4UWV#bZK9`vrC^`2Im8^;7=^T zi~=)64Iq63*C}Ux!9~>nQ1chau*qk6ggsb*p=M6hDSR0M%Ld^3P}$gX=>yrI6)h)O z7*^pqrCo|&>{CBWe5W&EM;r)3qdDYVaGC*AAgpozCW&m(;$ECus6Q8>JWV#E=h*q= zjK3`L#xxYFF|D-+{^E#;0XN;%{LWYWCTyK?#k+b-{`t+#D-kWPqlp-I4lv!$= zl{X3>dBb@+66zj`9q_f%_+vqscF3v>?@2j&c9crT5eE&@oF{==qOI}!`$P}%Ms5NY z`G70IJ-G+hV{dw1d{~-bWK;V-X8}~&^gJwKnab4Nm8!8cNYPRS13Ac>zvX5&AFiG0 z7n;5&kTEO5%$lRm(k0UCnWZd{VYR)EetVLhT~naevkXbAVSXgt_IK~Pk0)WbHb?#0 z!u1Xg#sw@H7AKFf*WrhOT=L0x7O<52{StJCzX83(;hPj$XO`c7$7;qm`z`1!@jsTh zs~D;h`|tF4_!D0v^&kJLs_)>LRGgdtF(r^@TmLo%W17~{!y-3koUhiJ=oOr#K^3Yx4Ik6cF=<@djU4=(6z3_BC( zfB$2^@2XL+864q7u!3#h<{eW-Y?jQ7_5qjk#6M}jW#5gB5$MvXdhwo_ zM6NvnBG#UL6USPs(Saw_3!T|!W7||@6+Y+z=au*a4F-*ln+wkfegjKu{l84-1_my+ z7#sC;2w#y$BO9sONnVUn&y-x6Nlkfnxr2glF(R>Wb8^<+nRcVDlU}M-owg_nebcoV z1iUrJ4BB~S18Ujh|Llzsj{#%xHrBeajT+W#C*DYePEqoS+M<+vNNo%&M#*jAdp&yF zH`h}>P*~u7)^EKpu+*A4m_HeEyORVLeJLFuP@y_m|IIU!5h%s!IMGZk!-fNs*?bBC z=>aUE15xy^yWUKeCw`sIA)>%;Ep3O|^ByqQxP#B42WUPP??2F{U~~uB0B~OX;ZH>A zQooJ8u1H*GN2|SFUW`uB-LR5Brb5CVAjkMiw)5I24v?^$bDU4Yct9#P#fl~J?nGk+ zXYiU%lY|0Y)(%EeVD`*+-aMorGstM!^g_^KNPD*jx29>ntA$!-&i$zL&1~a!9u2xy z;RmHwGtf{?N1+u*GB+BJTRigiGX3BBH(s#y`a6q@;lF(@>4Bt+l=i3vK?1aSt&{Db z)4sx|8j-ZX<8*weIxUbx-im7UaB`3!-2BV{(q5^~_b7&4_|OK7F$&AEI&r-J>&UYQm3nI6?egKEs!TeyZ1U>pk4y+XLJ57 z<>)oDgg_mxbk9@jpeHVHe&h*>kU+*v|neD z0jV|54INv)r$FLjRXKWO6|F43{fzMVm6Afhphr|0VTB3xf&uQQLEROO9%Z;4nt8+} zIBAaNi}zKtMN%Z0R z0Z^IKP}}ATo}Oj~S6Yuh`X*d4Z*$$rX7lcPA6?MF5Aou7Zh_AA%k_8L@acN_F1o;# z*?jw|5MdYV3PnMnKNTWz@Nh4L5>+=G!9uvZ#cAZ{I^x;Roa>=`45kw7C9a_oIAL*E zwEzF#$y*!QD@u6iom3+@TDOWa`@ z0)ef*6SV%pqeDJ<@fW`QfpENP#V09&+Ubr&HQ6y z_thhn^bwxZ%es>RC>6`El?Uq2Un{=@vBxvQ=FQPEphm^F!f)Ejt#6C$=_}Br3ud4t)+*KSuj)=n)eO)a)Y!Wk&B-Qll zuJrx>vsCM*W#*287tim~E^5A;acrlRGYV0htr#_zVtj9#%FpF|+kIt4&Pns`PqG7( zl}ACmZ$mMg*i4UXaeW4Ul>7t78@j5f0``r{T*EMXKB}loZ=uFqQ4k;U8IOHtQycIW z)czsXPRGb@sKUryO*q1{Ww^(#0T19Y_n_QsW+)$1xKfS~MUBWpP|D|QCI*BkLu(3N zh#3Pups)Kt`L^cAB5UibNx;y)PX_y2yT12PEz`C=uSQCZM?ZPFUHUg~Y;|MYd-j#- zg#mRBM=NK7dS9xvSE7<@1J(Ka4|!hJU|~e=23mMEchDZoRrb``x0jKP zU#lw2Oxz&|Q%2Bc0fkQf5rgHLDUjvw1$U^-M=`2~jo*v~O7?o#tY05Y40zz5wq$-j zPuD+eFRzfDULo3JxJXN8Y(n}OcroWq8N4Ho1|DbZD9Ob# z7FicQtveOvq5kg;#ocH&t?}mAQkn(4He^}wJz$MA<8?Ww`S^?(RQ(X?M&iBAl-O6g zt24j!T~sWlde&kzl=aXQA4$t5BE-$gl~gLGkW}8(UGWS8cO*2`$7^KQe(V%FdpDPH z>zna_y}Rg5sKu~Qn%v*pIxX%RV=Fr>3at0_5;4+=KSleTWx82RjW2xXS|Ub1A5SMS zK?IXB?Xk_&Fr8n9a4V`W(aLPvFn%Vob0xNYHLv*nih+V?vevP}GZLw|zlGI4{ApLP zWn)2yZP+EtKw4PSg;-{|fvIvg{Q}hqQTYdmx)DG?2M?9>abi=uO@J|R4bm(+Y0qb) z2IzA;XA(MsbFZv{nQKmfR)7_*<J7t zgB-}t=uSk6fV{V!yH#B{1kZlWJHowt)YbpZ1v`*&4zWV9&B0+;1J>mV%Q!ZlCpM@t z<3gt9BvylNb!#fCNFw0`jzBZw88Y!E`YPy$WWyq8aP(LCYK`hLArd2G(%@ zYTAv6E$8O7U61qn7rHV5ZDT`|y+Xsmet!ycM)U`HT>_3C?lBMrKh9B$jMHYpCiw_3 zygdnPhMTdqo1vNIWa!u7wp#uvS6yaOHPLO51x*3ueIH)PG2UW^O|HiinquvD!c2 z3O?r%I-+yu>DLTKZYy-knDwRe*jQ{bxqSAGc(l74L8ONdADZ6`!xlm)|4NcWVzSpXz zSOz({$9!i}M4i-G1nA)2(gFHK7E;+3-qV8%FgrQ^pPq>;G?m|6dsRIpEvXiLOIF67 zPy$E0ko^9aiGdZ)Rg8OPn)8WFx4Bsp6`m(mrOb3E#(AZ%r6}hHBf`(|d9SGJ=BV&c zS4)aE)XnMcZya!wEG2ojp6aE+ zpqfJ@BTs1<{?Wj(%Gx^R`p;E;0{^b zk|OK?jd_)DO@b^(35M=$DxkCwcq?%-F11q~$RDYNgCLt-XoJ+|bf5~62CMpVyb!~n zoV{27ZAhO!&y<|ue)SCB0tMYrihpOqqTgh~8_d1>kQnK*5wJfJSn4+wJH7q+tOMth z_mNKX#cukqC#HDWU`6TsCuT9vq#=f@7hXj&?P$@8iFg|0^FM0MSK}B5tyrw1p0b>K zgI^|_)PZJ8HzOs)P~MgeHR!f>8nwMaE=yNfjMwmr7go2=Hwdzl-F{94$LdIRek|jm znA*|j37A2*XQpB+)6!-mEhruhuHOOF=dy4+vX;%?051v6X^Gblek?5Gv1IzL8P zoNoTupY2iLKT&r!^Soh=;6G5k_gu8z=GTMbM?h%zCp;ELS`7e|Ej|;*32YQr*;1cM$X+wred(Z?7yjr zgaDB`2c(To6NBjOyxxmo&9uyAj?I%jHsM2TD>M zGl}kg?P9+V4Aouc8|<0~(;PI}QgNgC6?u{EF0FU|b8(@!@Li!Cxg0-*oYqb_xHN2SLHx zf6L}=M#e0QtXyAAdYtEHtd614KW0>_`u}uROk_L?o*3wK7>~@spO~TX9v|IjEK=#X zo=14g+wUr+I=XTFm(6*9Lj%h_V&t(|4Qm_EIO$oHvzZoynehHIk~5n_|0D=0;}VLh z7ZpyG3oH8e>U@?n%BMqg8c4Ex#P%0aR-%@Q!6r}N*a{G!-&5dU1RfK8vfPf2uw~Q9 z`Ewd@^i5b?uxuv5YsSomO@I{H8xm8NOHyCpZXwa*7XEi;e9UGP5ti{F&6;nn;M@A% z?;^V_X*crk+*`;%bf3PEJ7vwo7Wo_H4j)ZPGYvq)x}<=Lo)Sz}$Mw~IqILR;sE=l} zglz$)SjAmQNT4?{l_n}Sm1lgKmtoI$+7{`lhQJxf{}1C(R{k7?=eXvm+V|yY^v9Xi zNPg|7Wri|oucu4f^O|tHjVbNK>?ANLu85*}grI0ui3AD>U#}d@roDA@U&SycfX0x% zP=PB=!cKiqrMa24+1g#zu&|(5-1~(8Cboo~LxR2nbj1K~p;XcTzd)xG4j2FA zW0hhY_z9sn{^49BLPZJG3I4JUl(z9`DOMES`ZEEJ!w zX-^Ywy%BWHH{UEGK&g6NT(BCEl`}zIVo9(1zX1$$drVAIi9V*V70|WNao(oN_O^R2 zdNpfD8GT(m;Z}SAaIOoT)AZo~YMQ###f97ABYUc(+{i4CiSa@%MhI9)HqlAu!<4m| z8?vk_f4f_{R;d6k`DZx1RguS)e&A+TwZ+T$f;+)=$qA0DF1K|nR0zH3&X4xAQwkVC zP5ZlCaWd72|4iXNTrQ#eTrrG+er*9E$1U#j{vREYJ^tQE*hlNLV_+-BJ;b|=w1A01 z{dQ%}MQyj0^JgYVKqDYcHE<%wSbkBs{uq3d;FbK6KRyCtM-C|*4fwaNw zsfX2cE^M>HnuUcnI;q zo3{=KAPsY_=7ojh<`mziXN)_aB`c=uSk5`HyN#&QVn0C9+FV&QPZ(b3`!h@*s@=@S zXH#8CR-BAM4S(271%KF_e@k8u&_~R6hylb~R9Djdl-Sf2%D)&F@wU;bl3Eaj4m1|w zeM3LbMKS%N=YY%Ef1|g?m72i)*b{qSd-+IHbv_duR}}F`^&UVv-6R!M`avl&zv=`d zQ=qdiqlsC%IYY{Sunq0_TVbnD4`(E@#L)`-G7aeA=vS2zH2G;v&Jh@`daoG#y2Vc6 zZHW@~&~w2;tAfj{JDM$W6$}iR;P=u z=M?@(rg*DxcM2fFAiF<*<8NbP|3}eT_%-#mVf>6y(n>disB}m-A|=wDn;5j|NFM+wd5gqmOZ6PSz9*o)Q<6%MmReCv43ZV=rd}GVA6Pirk(; z9^e_}0Je|`(7X*UYrD)$hwatUDKhd#Tdt&}S)@ykJ@wY~KyedEN#p=&LE1oCGYe$9>sL?{>xr+{*!A$lcQc(-wy}+T#YKQ{R4hX>GJ&|MU3@}^U{DQ1Ni(h^LsZH-M3@oh_Wlcx!cM%enD@+~jm>DOs zW(ObqCd`!G6ZtS|oE^0zV}2P9pcYaaEE4C94N;X+^syg~E;p{>pssi+w<)v zcO59M5)7VpU@pHzp>qw@CsqWPXJU;(J?T3M;F@U0ez2_wAY*vhFzLBNKi=MQZT_pR zzur7UthZI8e|@k+43ttAWjg8MZ--;?!|*_95H+m-Qt7VcApVeM747c7>KiYvH- zZPKsZfJu62XN%(*(ZDn+E2F7p=M0z7u3H(#pMCUPfcKyj3Jz~FmAHDD=6Y<=Oqt;rR`L|kX`p1fVe)(FuWK%*E!$<7QLG^)rC8@pYv~@!06BM%+mMdSa_U<0H8t()0yByDyaT0wU$kL=Lcc^bX32{HD~zIScN<@lJpj!MI@Ry1Q*lbZ zY{9aq9?jD*V90>O5B$Q;8QwZIwRGXsr`)qgs_O)&8fOa9M&^tra)a~Sn1eNh2;|lQ zGN7U1j#KLt2LmDwDTJ>fAdR9bjdB5Mnqwhdc*wrZSWtC`bXlFKT;_S^)n+yl1w|rZ zpEQ1Y%Qh+t>xSdMrnQEb0}T19W^A>+CHMaQUZE?Sh$&yq+w4~6A5DZ-8gKEJ{E`9g zDsgh?16)94+%GB){`Jt{C`+j*mLUC)q>f1u)l^lSY*p^^VoE{=IJ_*qC}+KGPdhBL z)E3l)%$X720;beS+<<#}koPi68B$S|3=s@?4e3U{#IhoVlZB3tSLGmjiNL1>jyLiE z$1<(-A!%Cxvl8Ba!|)61-&ORtv0_bzLS1XLKH>WR{(QWl#8`Q@f=A2@z3OJLn&xOP z`Pv5i%n%XH4~W@G6wjIGM>f5koDd!aHK3LyUe7o))yqk+@`zlc<;hSt=gimDRbW+a z^L9aJN0+;$7G%(;h{OBa|^hA4)o?~d#MQw^*MJ$LY{Fa`3meJ8lT4E8hIopv-kT4AIVKm`>!8VsEO2N6Uwn@@{~ zIE++J*CtH%)(v!|jXhD1F6hPi8$29%V@thGxIJ@7M7NF}LqBCQw|QYFJDI$QUoA^B zx%YfENP({FN`kc|WRPRF$+5b~V>D+Q7xIKvDqNOTF1)w^3U24)%m3j+Lui3n<4d~~tqDt_HRcb4HDz}#T zXljNMyN%}RR+rn4^m%l*f-;&{QG>CAhi`28%fWCGN@r;x=2@j6igZRu>m?cBzZ!N+G1-Gs z)@iMQ=XhbpK#l0yuJjLLs`aWGXW)|sOrbK#SyOhaPJtcoD{XIM6vUMnp0|5tR@-%U ze}tMtjpTujumM+f#}&7A_!`$Mn@~v2%L70+^(5$J>kZ*(d)T!3?)CwhdTKHC=jX52 z2;8dz&~ccp@@&?Sj%$I%*Jn+>$BRo7l>xVD?$_^cvfK@I2MtIXu6Bir(h2*J8b~g9 zvTS2jC%!+Vd(!T|a+njW@+i6ZO}Jy5;0Y5Eu#5Wu*D(>KJ7=nAfT`7DOyE71HK zD`$yjyh6)x%!p(8I5PRb+Q~20lx=i?YCxs={o8vPN860wYmMJl{=R;?&;`CXqd;zM z`=8V$=7j*M75?G+f1-A*17WE;ijzy9qbvji7aKM(?Kq#m348%>5$VhU*m+yw>$O#K zj0z?q4uCW60K6LPm3%-P2|)_jjCAn8lJ0vxMvY^Zvs^l=&O!SfQ=3(4*fD9x5BI*k+_| zkuJ$Z9BK60HkeEq+Neaz&%~~xDXU&SY|A1DOt^|ysos1N{q+|B4-+VZ)-3;cnZFp-;=sY?mynjF%XzVt|YQ<_yz*(?7%)mV2eSsS6Rd&3!Rp5o-bw zZt$>8Kck8~BRaVZdF>@45Qep%3*OO~3qCTlQ1Io@4m}RE7{97|QjB)b?5V0NM*ljr zTR-{!*Y9wA)pzaZlj~tQk3#%Lo-DXgzd!+DV`HH%XA?V-Odq7QD}fw1%mouoLQ43CjY9KJ>DTG|g0RjmE_H3wo6Kd&TNX5Dc$|#n zPpFkh)lGeZgPpmP9x_)l?~NCAwlaUZ(LW|@2skS+84^+w%QWTM$PFG5FM8e8H{Gx2 z>D|D0Ll%%cw>$Ms5cRc+h~VV1UdMTFSI=r^?fsnJ9|4)$bsKr1aAK6jy?lknvxcp( zM$O$)^_ddOnfKq%$#)Bo)1^W&TVM8~lElk~y@6?0H_@)jLP57drP-p^N`%j%1dkSX zy@e&Vb%O$h)XlvIO!%0VBlrUXSPfB(V^Px``m$e|VE+dbO3t+YopVsD37TOGV%z z*H8~RVpW8cbi0!D=c5CK!v26D7Ak-&fSQZ>vjUN(x>S@W8RN5`oy}wJ{0V-o97&fM z`Y#or{hlQdg3x+(qL+K;-dZK2+aaW5Lbzd4s1m{E-xMWw=TF0%lzl6peV&~y@+HI=(a9#G|5x(bLu@$f>L$2&Rdgq*mcC_a$zW0CHhdCKWBwE%exJVHc1p8 z%E?on$QSygP6o#P?gWJQAck#^+FxTi*R3?dS+XW-9s5tBUP)nNx8vUK<*K}hUJDke z6};|7-I)~;{fv89Y_PGZ;XIC2E_f<&7;(H{~&m!(**#V?Ej{ta6pa|I@g+3%FG zM6)Hwh-?N;@J?hEm1HCBaC!QKsc??Hx2RHanoEns!jx{}{IpN3R%LXcDiiURoitcc z_cAu)+uc8%3O;=&!>KM9S&murYDzkp*L(iBo2y;l&8PYSzfP`IiQq(nxtA9u0ok-HBJ-tzyRC)GgP5c)h$n+`a*s>prB9QdESYFHOND;!ORm zcxBVmi|Ps2MTOrd(8uC;i7JT%m?a1})+Q0M1N*+MzW+GI0D-zOuA|GhMK>H={ zkkLxHx&0|Okkl=-6>B}POYk`8GQGPxeg9@EC;3fv_Ko=Bh55>HTYHWi2OrAh2i#!& zWJM}*;FY}aFGHHe-8H!OvGY8{jIdL5@oL1W+DIPuB{- z3C|-32Mue%!UnZ%9@o)8(0^cI9VuhY9&%D!)$^$Q6_*8FBdIC6!4+76XT<#~$fb*=3?YBe)2CS80j#j=RJHh zdh^2mfRDPSOiYO2AkFBL5kCBWBhMa;2hBFXyF6oBtW$J75Lb*5IxD^|)-4Kk)HVOL z8vA8nBI`-S zZlI3y=lSFAsu3eFXA-(^)YV3a3_w*&M8Gn8GNW1BUQl%W-~<~%?Vc~Cy&wFrIHhO> z(|;sjl-z>Ri-|%0b{eBlH~WHnF=uD@Xa-e`lqRG^GB3xvn0{J%zBDfzQs#rYhzurA z`n#4KH05C})Q8dcCQeSCqUJh|4$f=Tyzaer*lVx&N5y3!vE7~?tQqljwlfEKdDCL- z)|h5j)ll8n_dcF~+gX1J%Tg~{;t^BI2259Ok5_J}T>h3Hb$-(qqHP&btSABfsu6m! zad7+Lt^bu9m&d2Z2QF^QEvjhPa zhH>_AMqh-*9n`nuN<5TQY~hwY-qo@K6r?c}m5zREcZwBe7o84EO$S1?L`^ z0jfmVe}CS7>dd?GL{v6adK3w3A6g)omR~ve7z!rtnKW2?=Cac~Th%JtjV8M!w%G@A zmOFb40Q!|U!*cv9XS6?1t5@DwT>0mYT4aVeG2xZ%Nt#zCACt9(D3ye;q$5?uBQbG% z(Wu!4BWL^iAN&oq=HX6Eewh&XaL_~Y|3pY00In4zfZ@E#F)1#;BVLUhDNy)q zy5wy=*6zExQt5lXqDYGJjK2=X6aHEq%nsJ2zwic5A3)(UgnJ^f)t$oEjt~Z6B$Foo zSwV`(bDO(Jh*@+FvD6p(AESQQpGz;esUBK~uU858%IygQps2_B1I!7|(|m>U)9Za) zle8(#G_6nQsRBK2gNEXoi)7$>vLXnKs*EH~U64F7ZV4t$@%={JN+J_TE&K)3sNl#8 zefi?a0qtdC=yVW=nGHi12z>amNUyC``dKCp=@0T1CV$af-yt~Qg}%b=0Q_LE(Jr0y z#Mbh(Rt84A={K4SYR-yZX{bISI%7+52^cZe={Hs&w#bSI^^s4B0ods!?+gw=-{cpw zA_ew^0f}eYKX-%T9xJ8ZUh!SmbXD!6RIDwn>~22I9}6;0ioRb~-M6MFibmc~4p+pR zhV0?}G4EpE`Xm3edg_ebH3*m6*jBus(y+Z7A4Z3W$TBF|e!cBw`)YvmgtzrO0OQZs zxRKoOm_3;vY#Id2P}M5PZ)4;g<@GzB5<#yDsfVmp<90GI^zozv^c)q$D7^Q-Mb*9z zaeURaPI{a2<}uV{{R#&T#g~$p8Q)`TX|PIabqOtylPvv>B`hJ$2@wI_N@AI*ej;P5 z1SoiOCU!3>3YUVe-(fnqG zqiwtjOH$;8^lK(w4z!XTVULc(=&QB5l;Ub{ZL1x2y)gq_P0C>_r;`Xj?&U;Cl~!C< z>frWg1sLG&oJp>cvmN~R{$L@IE;``RNTIIeOz|y$~lwa2EmK^shR>CO2)aVZ-q? z7i3Z@EaS_W2+>oi$>Cph$ zW}mn!s;@zLmK`cgvtbZ25^{M4g=f1jd{vnLCXU@cJIesa)h$U;Ok6p{O!^!rPy2TY zd=H8mGW6Mak`%wSzcOcvzzK95OeG_35A6__AmZSgSZ%n+TsZF8T=@Dc9PWFh@5!m# zbw^Nqr$T^&Ko20H^bUc=dc5@d`V$89dF!*O@seSrLxol5Z;+MzgwDuui)E1X7?6 zl->>^Q>N`kl$3;%+{!AA58}27G{!lmiU}KtjB<+%qY7tAVbNcLX|k!7KbDK$W{X|^#H6Ym!k^^Ss%#KD>d(6lDioL*$nq1xoh>)Wubj6K<6&Kt zsI=B8o#X<99lhTIlkc!Kxtkod0U?Ts7fA78&$J{&H8xB?GN2r`?|<@n>gYQn5;`=& z$@(_2TPVVozgjDu$4qzbRU>)d0b}J|Dtjuj0JEg$jFCqI*joJdX7)Xf*Y`apXE{aR9cySM(&(q zNK>VoJ>AD8allnx_zn6fIlfS@Oun%;`7I9L^V?lsh^R_)y~g#nAD~vNas7rv)$_T~ zmh??ZA0Jx4475TGVifba z@#<|^LwoM_hZ8ZxKsUuZgWV#p1uj)I(~nncL;mH+$jxx znV)vVUic=}Ji@-YA6N9y75`^v>d#5(s>}RsjbE>phK!uqc64`J72UWZN4T(KV1LX>`&=v8@hMo z8sV^Sig3S`L^q+|hzae=cyfmNt=QsDPiUbqbsCPa@V{y@-WY$GqUFOM+{o$7dqYR{ zYSp`7ls)CMAS1SySDB#<|0Sfy8;K33;_sC}m3k`~8<3PrC%djMFJ&>zqp zop^m`?fTc{yC?nl9L>j^3AThzO7sr^2ED?2%`|TelnVKD!}u^|zPku%G9Qk0f)g&) zS~=rdruJXPZp=n4*7`Qhx293gQbDOAFp<7VC?Gi1(-~4F8voxfrQ}!3TWS}gM5;=K zGnih1>OKMvnZ)iYPJl0ZjpaB4r%e9MK(P>Mo7j4wv2jf0#rElGYD61g1*sx4gEW&w zuc?+8Us>TjN7duuD=RZIY(@XJ<9KyKV-%=mnURJ?b|a==Sot8Fy*eMRjLN zf*rK8%M{Gj>Ajtg#KnRBulCM-xZs-)xQqWv=e{E0Qr!T2oMPVo}_1!vIZQtN$%~?PmuJ?r&62tUVF}mkS=~hA5#E zSue5c;;xX-3KmV$p;w5#uVr7`3cYC|y%x6Vius&WB$bv;BB3~pn(nF!p-dSnMw|wP z-xv6=hVUR!_KSqO{T4_6qE5@ihYLy`vC+WLo#pDy9b6M$jq^7<;~k>r6&5_gNHfCs zD>D7xr1q({r}5#b0Nl!v1*Uo)iDxiQH}g5z%2{{j-I~`T6nWw2cWzwTyytord{Fi} z>wfI$MXyi4W0L87mqE7MpR!dCt(ZzTgj$y&BgETl#vKv2l45miAUTj1y}ffX1jj`Zl#xzu6P)mjR791%jZQ`)qYbXf+V6I@Ke2$@hpB2-qa z^80J*%n*vWG+{|J$ON-A`8#E-7R%AJG4~1c5Y0A=`WQVEaqREv@rn^4Wila93EDL zTWP`R+{Hi*zFc3iX$rc-RA2F%!$ttz*+A1W6SxBJVS)O(I_cl~Qn-Dc8>iV|KF$o? zs@`*}Ys^==Nouw5`HOu_v9pe&F5Z&)%!%-;nheXFhNAf0?ro%u$dbvM1O)&1TNuM{ z{?@wue##v)0$^}*R?{LsqPjn+b#lz2*lwyArxOMD`-F#xJn$PKM4d=Sz|xr-%>{%3 z-jOC-UbxoPSg-x%J}bJTE?p4*eTg+$}&%ybyx>~)OVf( zBCN^Z!{k*|5HzMElLe4Gv{O9e6)#?mTIg@QGS&a%4;P%i41Qd{$=j62#9bA?@*1@< zY%cC!FU{`z5r2&HUi}a654JF@D1n^La`HEu>KpOjZz@(wd%&%$l9{E+-b)4EtU zPv@sF(bEaPu|bM}*GSxP9gL{tUSW&>_)5{^DnR1Gw9Fl zh?tnX8}cLP`3qM67Sal>V~U6BmHS+EhB7mZS{?X%hf8-x1`HoX`R>YPj;mj@d}aZS zDXqv?c6Lb=zhmm0UrlDd+;Y4`stBODA-a`wL}T_;u5i%APiM={KS+_sg1oQxh0)yN z1yrV(jkSD6?Q5^NL~4+qZtF>l`i5|cPp*>!K=#-HAUp5#OGz2?UzI2jp{VhUzn=k* z2wH!)LDQT@?K;lE0NMEm3b$sXBRNS}A;AKSJTAZ0F`Q|>cAn&4-2OtkT5>?)U+x=d z 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%0Ak)fbTQn7z?mhl`{6gZk9eg(kp-d_p z&f0~pfF{_{d6gsCA$N8D;AGWcn+hO3OFQYCF}EQ?p1W_{Mb%_HjAY@VFjcU?{J||f zh=XR;hTRGF;7fnOv763nGo@ud@4g}nrY8|w`_R)^mAJbIp8Z^KSZyk`G2x=nsGVfhG=Bod= z#N4!xqIVXqU0nMFuH|f0!{Yt8?7Q;8mYQ=3tJe1dI}_61ArcgT({l>V_eINp#>E};FUyHqbM5#3D;)}_uV)_zF1 z*;c2gqJ~ghsorAf$r1meT-=AAJ~m}Av3cqkhkl#%tRx)9HL|b!Wv<})6zSF3S(e-T z85`y-yiV`%3&0~jN0ivK2?@g46L-7^=dF+eJ@e1!{RQ6o)gI}0n3ob3xloB?Hj5j! z^&)1(7fFV?N?&bYK>&~m7t}=W-za1qq5?^_EQ8SL_NNC0ztRgbFXTO?0Fe@x^UFq* zbJL?~W*)-CI>u9jOD0VnGa5(kiV;40hkJqNlg_*O-rxUOJN-8>T(2*SeJ7R7dGe!> zdzqxn!LZkHm-we$rlHDk4QHIsBetyM@OQK2BQNyvJv{4E=zVPIyLo`};F$_yIHb^& z>grnar6G`KIa4p^Kn6{t(CMY`H$M_Ne z8Hkj7h6i$XNZ{mPWvNd@4}ty(;M-_{kqb$!Wzf{*ja>-Y{e6SSQDne7 z=;RA6dH%8V<<)T4V zOvEzLHXY-MxrP45v7u`glg4|gXRZ;j$k&GaG>FB{LY&pCMZe1 z_>gKE&R(X?zV$}IfXahI%PajjQ;JaW@7Z>;`(h%(-q(FABE|QP|2E5pydpi2o%d{t zc8TmQ;n=S=@#YYdtm%5R0^Qhmov8#pR$^ElQHDA-lGWNwoqe`GujtzROb!_8%uF(g zaw5&AXxLRS>l7`7P%x*+B=eXGQ(Yj#E6kRqVS1Eh7Ej5Wp=QULX7S#F#=QW=C1byX2)e{>h zCx#UTgcY)iE@rLE%YR7gkozW~ZOWL(D(eK_b-QC4u(`7PQFNyo&x*11@OzZGMp>xy z(lEeucL!$>t%8s=#uHlSr$C_?e_(n;$|G{L7x848w|UqyqJ_YCpCweFKD{4I>DG;! z&9w0v0V0ge|3(r-B<~iKgze$LV_CeDp30!Yr>@GCw@FIOEiXyg705oUNxioEsb%WzWK&%>g@&S`t<_cRj@`VvRIDUbifAVNUqX!XxOQ6PZ+{3Ha>yq3H*TukT-_JrLiojbsq z_hdCx_T{ux_FlPs0M*KHhq3PrpoB1HoAj;&UTn=(>>%6_UX}51Mgkx@e!M&0eRYX1 z#PrICe5MX(uL+_=wC94#oi@~@3b&~gWUDSAKe-Ff9AdD79pTvmZQ-8;+Jg(+&U)GO zDKqPasb)@xb&7cJpZqF!q;pA90w>5kNRxK*rgb>KO}hk%J>v`v2rvr!PiYK>y>OGI zl1FF^nf!*B=2E^BkPXWbkP9lr@>(VMP7_|mi;auWom%z{_`lno-ftEp4$ic0M>}-~ z$c>6i#4!`%c=hF1{WK}wKpI6p7~z>`f-?sQW(Zbvt=Du>`A}cRYqRN@zt?{IB}Z7` zjql7HDplfHAOeOt*N4`=h>S0j^C&5s5-DwevgqSSto` zUsrXh^VSp?cyE%(-vr$|PoBj7l*c{4K2iK)lUD?DeTvflGdk;(C0)Do#l>XsW$F@H z6OFb=w**2$WE2J_rfjBY^(ok8h2>^1UiDF2hr6y^{=YZ5(p0m%W&aRD=h;(%Wv?ej z7Cs>rs0OR|6mY^ho?n%&-{07zUK-*FMcZ5*rGGp7%+zmbLGX!PG^g9qIIL~4dqtLXq)^-2=Ha3je*q;SP z>0c~YFDs^Yy>Wxl{(AAQ9Ye8M>)+>DsxjDNF#6;!AHt*8$C$fe_vHMGlno%n>+dxp z$fUp@ANMX&_F)lAdOEI?PeGGVW*Z}U#=XFz-epkWqU)o*s2agw7@_u#iEZ6*XRea& zyGacxM=)Jzg_1{I2?gnjsHwSMp4|wf2NCA_>9qc5nCev0%q!JA{>sUQ+{p|`)evO8 zK-yLQGo<=1vP^BNEYod@*lp}`1Wu`4Z2T#*YTYumvg(^D3vlQ68h1RTCUjuqG1PZ# zZFXIVm)Ne|tI``zzXKlq@4Z=G7+{7jw|swmP4V_j?h?(p51UE0|BSP?sS2v-dOwj5 zBkBzG29TR+vE~ns_^A5m4m+4%q~phMu9*UGk?HNu8S?67PdJwPw{Y|MN8<@x^})SrVT7 ziFp0AAYC^`N<>n|Zp-GeP8BcdnQ>FqfIgKdiIHLbD$S!*GtD@9Zec&Fl+z5!j+cD+ zAA}FtKM>O1Klr}+_WK(v(8FPs$}>6Zo39k?kQd3%WQjP3#8%HFeGrilb*m;o#^4#! z5VGN2Rm&?7G`+DPeMVQH5}d<-Sma~zo`FOZDDpd8-R{Y!RRJWSOnqNF6gp60NO32& zF=o9-HYWef>~cMP?3c&z_)vm4mwW*fL*u0+)sQCr)xaYJ>K>HiacuS}kJy875>;Q(OWVNU~>2-MHTGn_~VwJn0LPqu30l5N;`G z*dM=1yqZpbe?-6`8ZSCi_to=|14>m56)ZV$c0v6`%L0)GGyM zEl&=9mPo<>S}@K5mdYO(O?4UlW*oJz$DG8(s!mXwSMh(5W%_`K*z-6IcfF0mc5T5_ zjP&YOuDNQ?1HYEo<{9N;n3a?Jb@#x6*pKb9y6XMbx})p@Pzr5;9W2;DMWRj6W`sp~ ztdeCLUS?AZk>*p~cCO5sS`^n0N{d3COq{(hoLr{2NFrJf+>#5m{op>jjK(H>qNPX* z^V^EYBL6UAe;2l5G4*lSZW_W_+P$r#X#cC3PyUCTLfF*pSRI|k(43Ju%|)xGV(c}_X)?8;qkPw&B5dBZI3rTD!b#dN z>i-aUNdiCJkBU{~FX@)P|D>dBUhN$YMM|u}0?AVEy|k26Xr+*V|hut6xFKn@Uozmt8@{Hhke; z$nnUuEfC`0+WsS0@Zj3|VlTuB9kP{;dvmlsp50yY`FLaHM;=Nk>E50oU|OUh2%DRd zBms*I;dtwO4hD~9kN!r}V*exRfGer&%c#Y9ZOf_0scLkmriLl6RetxSKmQeDq$^DE zucVvg{c`V0F5%V7It}LP#b`^VKU}FXqwpWmQ!tqm!e^Nfp`58Z^L?KZrGoZ-qyjcl z(y-H-Uaf$w6Dv3|hiSo|)8@9RZ{%%V-WV=kKMiJK*`9H`nfpZB5+2Nw+tzUT`rhWz zN<}VYo(enX*Y@Cv#o5*ScP9{gO9j?AXGr-#CzzDFm|#>J6nQ$sliC0~hpkOeVGlKk zt!X)M5&!x%WZ93!4erIJF45|e9i*0#G{5BQILN5et1soQb?7-2wKB{uDi?g~20b|y zv7*#-+cBd2760Axq3+OnVF`CY0nl-GmZs-K1aK^{!n?6Vgj%D*WP&y#!)+3av`8H# zxaj_vqVw~=cEV}V{7qF)peAsEC1Y8;pjZvgSL3}V~d@E^8= z4Ry9<;nUkHvXwx9)LE%Ip^Eual&oCz?QdMZ(vj5r+EuA`w8 zp!Vc18wV#2fYn!1W9q>_ax-h9*Q>#PmacCuWDjv}0opO6N_0_eyOds*2Hg9ba;cSS>!ws-UU_UM$zL!6 zvngI-P9%-D>19?w(WEG9&x{mnt9lj&bCk$wxrRx-P8xsQhbdkblX=== zPIQ29DVpSZ1f^DM9JdO(z$2Ju%I@Q)hDUTxyg>_%mp|{w$KFa zAvCxC+t*{1o37}~0>%9l$2L)OgXm0+W9t;Yc4K$U8&Si5hTTY@B49;z$;_m+d7RFy zCUuS5}lxZ4}k+ znvRIU&A4p91^?ZB*O`(Xe6%`SW7@C!-tfBqR#u~zLX21u-WIBJUr1*tK_A>kfXPlu z#RLBe%sMCA-4Xf@dusNA`op4OBY&9j4-O9(0!{JEPvq6HpN4E{tEnJOKZ#5$z{!l| z9b~+#f`?Y=opih6(_LL@56bRCYSpkx-5Q~AK!}y_KAj3FVnpS7v96+bwBR(*4IVQ9 zG379P3E_x;e3B%XSPt-?R|>*LrdA8&<0kh%y` zBEEmC{v{Ds#;s)ahjyX^IVoOYScuh*fnm*h+OWn?5+5%LZ5{gjOw%V*p`H3OfIKt( zm>C&-4I8PkP9y@CkayZW*3zQW-75NkOB{i@4s|<6*Uf)V7uk5T?FQO$z?Cu9@+4|f za$HBA*rUL0%8sf^Xyq+8^< zXd@AT4oU|ytXEEElCrEZ)8EUNW4Z>uIN;{;-FhY9oNNXiN$<$YjW*`WR~vlYhYKWf z@?1jyvuhp+4G3cvLHXwQiR>XaQ3Rv88dHA{}%1}9K=Ik}a{mSw* zKcFs08bEEQyVhg&AP6-7Ox@?bwzxtC2Y0V?BJn7TTl(c^2b zIKJaK!CyAZx(O{u+4^614T!6nNqspeTFTAWTb3!XeMG2Ja^9=7w$a9j zU=Ez!T@lS$z4JD?{rhG~f%RYEE~qM~Ifxpq_S(}aQsshoSLNLeZF-$oV8JvJ>&=`0tOQtq? z1YhxD)U}+@M)Lwjq#epiK^cSTlvai!cLG4WE6Oe4TJ+NSu66h19SR%%ntn-Z{&L;+ zh@)B`r~4s1=Ns>e`xUMeVNS=RdDb*J@Y?JkrGul5*E3{g*lY{db#T*qdF0b#W?BK* zx38=CaBYqXoGwC8``U%Yum5S=uxu3l1lvj;zUz?SrJS>w&M{s*Xnr%b=VMmzzFp#l zKN<1fP3PGJg?T&vj%K6R2*(L%0T61wyrphV2S>!J?m-9p85@e+C3caVQ)GZt4NBK5 zg!T|CM7vi_(r+^?tT=qWA&EuAb&Su<+{6+G2A-B@@+;-*&7RSK0>Saqc3Y(+De^IR^}1-`&+@CV#g@j&Qd$F3?HrWuW323MQoW~Vi%U2oy@>no$*iM zb;*L{`v1L#ml3NAobX3)lTL!kaH0&G^%2NIak@N*>##f+fMZy&$CwQhzNzp!1jpRe zO}Dq3hWntZ!|jdf6f;)ce|(*J;}U=ZwIzbDbISK6;ucdX*w?_V1Ktc+VCC@(j=sSW zs_SYEbS_PQbeub<>Kh!1ff!Wi>v<>Z@vbJ7??Y)NEltMXwc`G3r1NxtK9QeMAAK!K zUtJaE#eI;jW7Z~<9tOo#eBX$bjW+F6G!noadyx*_f4`O_$eP!dOSOC0l7qUpmX$pg zo(nM7UFTwsK`D`TW0}z^_mCJsUVkD~el2N3ag`wmHo@#n?3z0P$t4awuRzMM;hPFB zAm!6UIf3h(YeC4I0i&z#{ue;LiBdl5Xg}e|5^nL@*U%Qj@kwuhd|Bz=mAVvCxa9_= zgqrH6flrIf|DnBQ(fgnW$^^gmw@gXgB^7iQ{KmNFIzsqsw4M58{j)0}3kZz>rsnvy z{h7z_gq6R*kQH(`mVp;V*PVgGO-=vKn*R2sw|xC4)J6wvejUObwF{?2D*OLHKO^D8 zy#?(bx)`awW+Z3invhJAB!}X8;G24dufHcleEE}x`kUIi)dUi#>rb*6lyg$kpE*j;V__$J6@I9+DYUe!LORqbo{5s+qQfe6Z0Pao7g?D5RTBd^5jJmB& z`jm9mJ}faoFq|#)`yiOIjTxoNxcTk7a_A4pT(ME*@{G`G;X;g2g^;tOv#P24i{}2D z4@;T>rTm;GqWpAh*C~wK-gPntEk?wTa1;O}dcuX_U~6o8D!_DP)x_Sk?$_52(1W9Upu!h7Rd zPdvEx36Z$ogRD2(f3Fzoi254Hho$?-?H+5^&%(LyDK^M?*2Y_>Wu80l9`*l;sjCDZ zvP^x8w{LKOO(RGLIZ)Lg2k`5Wz^kc9%LAf+qa7NzFcl(wc1;>b!04Ro$`{cYCy~>L z9`koBJZg;$XR^MmxiY+1B~?Ga^GH+}j=*gIflcDx4pnbE{B34KL>2x7NMe9PY}p(1`ayLCIFLyN-2}Jd zjF_ow>J0xb&R94^{7Kxz`e(>fj`_B_6xHy|N9xN!U8J3xQ=7tI)3-ci=om(+yYNJP zpNtSJX$V|3|7PRE`piz1?!=Vw7O)SHMvp0{WThj1MvfZWzMe-nWG*+$jGh?e$%@%R zpIT@xsH_wW$7n#I;V?7&&M%0Y^L3z2_~^;qBx67l7VYUkShB@=GMVtY9`m0DPd_o6 zU3I#(b4^@b_~X0Dz04UjGviE*I5sQ==!h0BKndo{R}v)_r9YX+5nK3J!#a*LPJj6c zML9phXgAG%5CuVsi_RxG#{fL9I)%mt9fBZN=jzG7l>=-XcP<)|sGc!ciFcbsMGAwS z4x^l#^I!Wkcal{0A66uNqQ(kepy-t%b?Et|tCgw)*q6U?h_5Qn+U2FErBAUHYs!2* zQYgd}N_;jsm)2Eh&Jd|te{>~M94KDz`8=+chgP0(n|8_@_rD}nsSyA`LhU~aD-M1# zM3Ds{!HF%L|38y;N`U8=Ws!KClke{Qf~GS!#rg0116K53kb23-9|eOTF}n;fwEBLR z`gldcQrhJ9j&Q2tPBZxUmS&!*Mod5jRN?d#txk-53HeYKn)R1>s{YJb0q>eeNHO`ZAzzN95_e?fG7P$;(k>We)4Rmo zC4vKY0x+1FS+Di;IIpYQqw`L$t>5OA`aZvh6tZ*Mu7z{j&^$?+DvXVrS-Ic-i05=f zXR9O7KRzW%(QqSvF!HPY(l=158G1ssM<5@aBc+;Wc_Ownh5Nj82-HS)AuO|61H$j#S_P zsJXQAc`V=Ar!5L%XVAi=f=`SkJ(+D`sIX%Nc6u2d!c!0NB5+&?Ep;6XX|y*(WD2Q@YD`SDgl!EFg~$i}_L z6`F@}@{S)UabyM#Z|DOIYPJgn>HH7@Xyg7)cPQgzvvj~sh-84;?=y7!!{*+- z`4umtuVgFVQosta6yvx2&3D$hwriH%&+6}M_SZ$wN;iU`Mn?>7`Dche0j8|@75^=k z!^xQBF`1Aq)m`RpPHKRN6Zb>I`ODnz%!113pv%C0gvzV9IVad&O)Uxw zOHrisM^s24s{`Tl39r3kKvS;A(e&}*nxOvJKLZ@M~tTgqbW>vVo8_F9jQXrd9Ca3VpH(+#j z_SdvEUm7Xl64_?Ulh^gH-Hja$PAa=UGc8K3)~@BQNLrMJB>2z*D7q7kl}C3qDt+pY zWbnEI;MRpd;6J9S4NgPUY!n<0_tfK#K3=LRRVaN!a*E7o;HCHPX*YZnuc+3l=WG5< zDMxYU!(9^dADVbVQCjnhqWVWx?7hCS3!s_ZTF9F3Xgpx4rY~t0grCMPD*7Ot5QR{jN#Brd*JO06-6no4UmxgOxql^z7vI_pT0G11 z2lb)bZqI#PaB*z9zCnkvxhTUPe`R#Z_drGv!$saR@~s8cx)Z}|#i`>-Mm(;Xt5r~03_AMh7xRscylTP3wC5FQtiR%AZf>*9r{fHa zhQp#WE*jYf4#Wki&GW>>(=Dk$RhXUQIiM(G6RFxjLchXh~*fC1NkWPp(0 z{uqBr&`+6neVdT*Ok%);`6pWGZHTCbi=}2^%$fbb6yr*Dq%JQ5OlFg3x=mfP3~KZq zVje;QF)?y)yWDA^|M*yo5Ssj-N^tA*_AYs`G=^@ z@y~YCbE%neb>?jcs>d_}@&%vRwAXkh#4id7KTv}Dd*G$M8#9D`JjYTuen zk;T8Zw~&+H(J5`Qr_WL0Wt%R4aU+JJIWn1-(EOJ+eVFSyb&TCVeH_j)bq^-T#5nj& z0(SB}#irdWg-YN?(}jkQi@4q73Xr!MSYBSA%m2HunP)E9od4=)UW3w_j;0@1#p=j# zS%1P-EU>Ow^IQ2NJ7M1%%;XpYI(Br3!;D{-&UTZ)AqbCBY7g?C=kYCV+z{lky&Ox% z#V~x{m-as{1%hK<*lWmKwnhe4Hc6{ASFIk)Mw!9Om92QN_z(OTyQ`0g zo;yGg6DJUU-zOV90R@2+&Qfosg2!XNVk0$I<~s*}?79W^Va_fekLY?alV6Y%oU)sT zQ~*mlG%>(ox)*xZb*h#Sv9ce*1)+g~s%iWa!lmYa&vSOiP7?NmH;-%U8QWEXDqrmr zz2I?QCRs32hQ9!=1Li>$EdMg&K^j1RU6(ix5#S>Vs%*gku2gq!F`F*{8=u-()@Ojt zpOj(~80tepA`Wxaz>pV(0cD@0Jk1UL4}=FtaPa;+45omaC8M|6bblS3vEua*9)WF+ z<=SR*5rTK1WHaMJ#Lrub5mEB|>+H^@VW+d~@~sG?7Unphjnu3&Q{`-_O9vm~ojf`% zdIVW;%S?r5tTKvE6g|o!%jt-@;h8TFOhEIPK1!FWd_5UFr!xi zr+y97{y<|3I4OXNYz&*THa4n}*K`W+KD_q%I%+x&9#=(Trp!$JOC8n3^XLo`ThL;# zFNA7v=E4;xOa$fOGo@1lJbwWxC;m{rmRbli z!B|JAvW&F+k+eL2hOyHzHKTU4?BAfnLf$8k$!UgO`{m5iH+l{o2XbO)tQWgE0HSnb zijW9TsF~g2*H%**+=swL*fFob@~^R#Pv#!|b6@dbH*#Y2vJ7C@w&0!`aB_OxUEiuj ze|}&}BSZk+-2fx@e^oRNA$n6jGuSD3?>Np)Q#0O4Yky+|<`(92O=!?=RhEAi^X5qQ zeNR7z)W)08_r|a#TQ_aX-sK!=Y)T26A8Xmf+}d>O*6S)&=mJ{ig*9O{Gh$QOk}BXE zGmv4et-}<^f%jMpO%D_<1f$-RmOD2sBdH5z5s#S@$ckLhrKUIDapy)APvbf1a}u&F zW9b%Z7EJ!IxajCqJl}C8=ZR@G4Tz48zWJCfQ}e`;U=s%wokSw6@?+@7`VTjFZHeqr z)F$`;pX8XUi2X|Zn_~u91%nFCM`;9x7_jFl+NI2Tzf6^MWw>Q0c|1=l?)#JN?A33O z-Qwk);nbwm&~7vixBFsfn*ALruO(jwH^R%I6SDmp1Am@Jtt-2HLHofvvs6mb>{E-4 z<&S`t7@r`ynfJhu4h6k3(QPn5bijGgxqU z-Wk$i68QDsf}l(V{**4M8c9Z}aBCfkAaKwrSYI5&!(GOGF00w35dT9 z=BKfq=+CECXrQ~*>HZ>!@`QfQ-u&}>GA06QE{+rg=4zmBMUSv*#F@(BL4O!W)JrLF zj{yE1cW$&TIP_6j+aekdqWG^*;P981>`WWoSIeetnnS5kau95bf29+-jALsK0B~Jrv_bvd)_spHd(58U3=kU&({r~0XEFO z@Hi=8`fRX1F-#zjW!@oaBXgI;57GsXzV><+$G0JhC98rdWFiEp$VXn#G`BIpN&aBN zc2%<$I@#im-_T2?HSvPOa}bnLYYWThtp!Vq8w*%wkZ$D&hA-0>0cnO1kP!H-*C@T3 zY!dIrB&(mV?PXRMC~{R`v|+){yFwNxNW@%;^#j zVGR!6QN3^OW+Gd#4hcKm9*{mWAR8#z&{9_Lx@TP+cs|U&3x~%8-9n z=Gi(~^t<|a$lRw>^u3vsR_m(~%5%I+-4RX|C*6JJ2l&&*%|Kd`dM;R+^5zSI(3 z&JWAsz>1y~09HG57;x*gMKx>5SGk@u-W=S#=#H8cgk|@{V{JS2H3DSQts2H*E!k^B zykQloxfW=4FmhL`mJ@s$cYISy760HHuB3jTjl>oLbC`OrbNN#(8}rwZmzryRzPL2t zxX4J<_~VY_%H~?_T;nIK0R8ITo61xE_IIGfRvM_m`$+qkTYAg`_Z-X3eD=aIOEB~Z zozN27pS5i%l&G{4Kvmu^zX-(zHrvi$-Q^QJB0=t)62XoDVp{pPnKlmhH3whB{dk-g zmy<rVv_7q2XF8IHTBjA0CW8rYhwBh=zGNx~3po`L=7Ya~ce{XT> z&)ZlF?lFTqf4H`{w3m_i&RK~8Gh09n!8NzSKSBcRnSw9RTK*+&UFV9+N&mzOF*g64 zMEt8PJ`~(FYk8Nj{H*;!BSZ+E?+hPieu;ABXrB;kEvf}g?Mg}0R&pkTSWrk}M z=SMua8;eV2g2`}VTLe!lH0W1Aj4o&755CYSGj3vIR;Lls6v4Ied#3Ti>U^eAUfS!Q#=fTW?Fj>lgtm-|S@IZe4M zj(lK@-Pti&W19V@1Pe*t)@Ooe+fBuqxJ3_6mSls!CVMEJ>B!gZSS)rhZjm~ry|ttV z&Yl+<{f>+9fh6?ErgbiJ(c=Y@abP)dAG$vI z##_{nYw*1ABG-Qo^t@%bq%qo#7Dx6x7KZM2Z{nz3Qt7KH0UHUsY>NgEiblg<2dyhc~XfdB=ylJX_;qWV)hKE%# zEH;Um@s~g6(}|&8Dn=s+@}lJ+0Fd)$Bxr8FYp(wMLJ;2s(hgYq!Dm4?a~I9?sU8-P z>7INPn0#vj>9(dj_uI=>VAoNWEv$N#2lD>mdy$51_>3 zbp~qyJ&uAj4V;IbB(Y90`orZ1skBuK1(O6+5fhSB=A)k)B$h6)Jx+FWs!i%ZPl_0a zQldMS|FWzacT_RaHBg@9c;;i2fj73plUBI}13!et~COiw2 zIMvxl-`eK;Jphmdo`sw(3 z8EsG6Ch=Isk!OniTYJ$so(gkG<~*A9mQ=E#m z%3R@m`x{!Qu%Dl9d*ZxmROo=?68BOm@E?p4AWGe>LV*a!gFdOe5Qe7`oe96+^Q%I= zA6m2|l*_&p=a^a3MTDdjmPdq!G_9;JBpwSCZL`DDkEJ^P!0r43Q#VpG#qs(#zxjbz z=0=9MeIoC+)bFi&0^?C~in8DO{Ii!5BnSVBxH4J2&aE>63|?0Fqq~ojax?d5D*s{+ z$JoEQxr92jzuL1AdvaKw+XSsh$B|<(<-s08lr$xjSs^-Ij&2jN^v;nz8Sxhj5n^>K*A}<#NrgYgMv4q)b{d9Aib>DR#x4`^fT` z{e|o7{U51;`&+X&CD0m~ItqRbvA5@|pX&or^vunFbEBduo_uWmtnid}Oz>BjDjwda zAd@81N|W5OE(h~e!}%1kfzGapXp|P=dS4S(x2Bn4AmM3W2k+YFjoPzQw|)~Kvi_g^ zFfyF{XUCY~u03!F!BUn0&fH#IHd!;t>%XiO(IaYe@V0oOPMIS%-m$waxKWYT9@pWF zyM^W8zhGl4k^XEjl=SVXHvOLxLFB8RYr3Rx)Ws!G7h2LT_nX8ZDXi{9zhnRsS=N6> zb0@MAeCH^6xxOrXcAXyJ`syCq^d2B4U#;8?xE?Xi+0}KV2M*_kyG`~A!&^h?&W9rA z7e!`+(fSm4#vh~=r~YwE$|dhxhG29NS4U*~Jz{I6XO^MqW3mCMW3oZpr)rXH0?F1} zyWkcv2F)|Xt9uECu|I4l9youx`DC~8BQ9$H3LTZT3Z=Zv9R8aA*Fu;~AYB2hYUi7h zG5ApuzOfxzPxW^+=Cpa;a#WMM83@!{8#f?^TCQYVb#jXFGr~6B6vu*`(%Z~Q0m5MK z%cTADyM6@KT8U>u?w*8y&F=PV#O+pb4Sk`316Mu6GN0^Zr-git*#0LkW81}fnJ4B< zOlI0!{4vt+2GSWzAQNzVL(6sjNQ-pf@Su`;YIc6sL#qaZFwmufbgR0G$bUWP2H&gs z^WuURE(6!rPal6*%=(%t`emxZ^n}VME0EF-tV{s1eCiyy4IbqeikunT&L+XparKtUC2} zXTNBSNgO(|2NzPM{u=_C6h@*G4(S3oGvqba9L|WzGgwN=3H1%FG8c&y0|B0XSJ+zhHhW zbMd9z)x`PkrJP^os;Obp5s~uL^=_h2N5y-h<@>Wcvgy!{(!W`DGP^p<@BX^i%U~of zb`jhBTt8a&K#jOxbA+9#**y8M{=C5_RQxX8U6Ts>$(i1W9t4Jn5=B`ob?L7C5wbVy zegUZl{{#3BHNb(oA?F1eLp5C%G7rGQi8e85=N*=CD4F*Ul;fMV+`DqufC<28Z6+}c z%(+Zsi}qDk+F;S(t$Toff0~0YiNS);G!TeVjH-9sWl>GEOYo)-YT01zve3EQu}R@V zHE?P2n?g(aF2>=#bJLry;|$EW-}pyPKZ&YTT9Qk11?V&Os27E|{yKbK`4A3i zq4lYh$Q!We+xeN+OYuW@^4q3bO7X&e6GA1sw`;-5pmugUo|z}A7rU(~+tx1Gty_QD zwCNWoeI22nibew}dmY~a%A^EdLYyQ%EARsu5wcY9=YY=0{LuH$uD;M}!mCe$kP;)1 z;RFW-URJXn@W-FDDQPzZYU#l|?UA!Xqhx{1@!j_F!hBdx%+X{#9QHZEhCfb};?usx zd$^G6qoW7cd&!6W_p2e??Y^yg5Ph>4z@VKjL$qu(&R(lN{)n|^WpzjK(J-W^Ealqd zigJQbix)nd%ibb|6XVR8hH^GF1^CILejywkF>m{Kn(UVqr(N-2l;S<%aDY5_`uR{{ z85{NXOX;W5@1>1mclOw1em~z@kG2J9fIfhR)klYi9?;EU3RllYaOHc;(+@&2Vr;cO zSlZukT@~YZsFBIkJ=nwA@?a4vf6nSJ_`Cln$wFJ}=fEV$=ta4uIF#v@0nU2hJP(52 zaEU?dAe$piU7pP!te)m3yPy&IhfLb%yXQk5lD>CY39)5&2&Eb3yMX9K7B>>$orR_j zX%AidxknGt$V)?RCQJ70+P0Q&tv>#ttPfxQei#c_nWwN}>RH8RKY!=5NKU&^`yKR6 zb7a}e=_y)EqioG9ZdS7cLk@?=4-Yq1e|=+k2P+Q^vry0#dZ5+zX@2EHn0AZq+{0_? z>*2#Mzk?)v<@0K=$qC;?_!@lRY?&^J*1q$LE3L6N+>Jf>!k{r)7+xM0vh^D5E-T(C z8}W&T@Oa4-js<|n)f}5B=?9@&tSgQPpI`lEj?()8Y*X+JM_T&yR!GPK^(eQ~TYFX# z=olqS6;_wW8_M+x!|j_vqLz;Lr`!O|fjO)lbqVm#NqzBvfSd&glE>^(Z8H`e(oL}Y zmOhUdt)3*LK29Mq;3WqjPE}bm>4m)DHBn~TY$ z_$4BU>(&1jdd`|pKdC;~`|Xo#LGevDc3d5M0U1 z*pIz~_#wPgE2rLHYkxzs4)@COho#1bj5b#1a#FL#`S~(-m;7x;+#Bfv8Q9SE^dtKI zNde+`$YELODWJfFWvr|y+xB@Cq^l*{fP!n>)*)Nz!JhWv)Ekc5?y5Cs68K`!a^3KYdyyAfC`O!7_X7F%t}^lYVix3>ZCa zYpqk{oyRtJEGK-w7+f4Uk&Dmbh}(2;0HpQSK7?-zy4KE~5?xj{AqK}OS#~!GF5g7Q3!`+Pv6jsF2DEpgG0(`I{$2H8DJ;CscUBQ z9C=euxlN-uX!@;I^XXBYE->OJ|MdN6af_~D!I0O0IdjlqqVgF;i8wLOy8E9d@KZAW z4<8Www}~=A0ImsV`dTCAMj4QB`a?1g<&2d<3t$(NufDfgy%1;aVF`nMj`6H%npd!X zKJK#=H_y0gUF8d;DezmqGoAS-3cQ;au5ot{=Dyotasq{HVvxFoRsh*jLiR0PZpFpt z*OpG7Blw-E3;Oy77d~3D;lF4{WP|bf9LMtd_YDIatw}<2Md(lP7Sc2FNL^Gpzh+SN z{oBheIHYb&#qa@={h2h95Yn54G1Xa?H+9%|)Lf=(9Zqvd3!YA<(Wkh2y_7Y^x+oQ# zgV*)a51vV#fdjrIM8Ylcz88UC_`nH8-Or5CGOF(ji$9hpFR#RQDbuPs>n=RqfwR(A z;o3bO&FRIbvn?om{I> z_6*1ZWYZLF3gr6{>4R@c+C9+hw_<`n z1|cUF+H;qlAN8hISqgUU=Q9F>lg=F793;^xDev80fm#pzhr23!&#e4-PBtLTo|TDS zfl2(c!#F3Luzt=++3VhS!8pn=0={CrYpy|cHC+;c7L3H zlZ>Acz=Gk%iv7P-73tvUY8lkjSOK$$KhQ$WlmWCj9z6hXbfSt!momP$UN^p;0Yz5*}+_=%T89$eubg1|4< zq-KElRG(XV@XZ=Mknw<^#J+Zk2_PP?J-w%!Y4{GZzjD92tn{u-!=dQ*@BI%LwT`$I zYY($^>AiEqr{H5bHrcz`b6^9*>G9~D>?ig@drihErRjWyEW7jm@|lHF$9Y4)a1zM@ z6OaHHt64lIAZ)J-quEGt_DiyNaC1_>$<(VEP{2bvOm}^F<6}~`>2#2c;P^wZX`E|d z8Wg<7Q>e;U8A^qo6n4B3CEFwsO*2vQ;%Oe1Un=^42Vqm5zggQ>!oqe)G9J3mI3p{O zB3bG^VvHwlq#CS-Kec|ZV81nyBa{gB>UB7jbG|s+zTfERJH0!9 zVjoZoyeDg}HXxgt9KHlQ3c<&vIUAnhOsO{4-IMJVluz(_@cH zfts(*CPc`W8;~@P4of0+@vknT2m`<%-?@Op)cvL!4O%eUR|&vQ2-`f~pxGtfc)QDKixo!Xf(q)hDyTGx z8d;^&8ZkVFf4_@Ik2*jl_p6#S&*vzP$Y0z%Lx_q4&d=D@y1r(ltq1AlY1p+UImts4 z1NfvprvyZ`bq_xV-;J=)6dH8JaH0Z|_(BVJ6%cyrHcaMME#S-ObTBd&U2WRv9v z2^GQ&Sz)HXUV#^q9~8(bJ@m5KJF@1TEzed10Q39UhM%!ZL_`qTgH251lTEHt0u5Cz zJ?~<$6z2^0mOgrapv)Zf*B%$H!c6m}Cx#=6ah4FC)LXSy0a(vsA;n{(>!jor{b(aN zjJCQ!OttK-n+;~K@YC)aIByBW&dG8RRY8V4DEH`crLrxo=@MDWvRCv(bBo?j1&(}49| z?_E^vSjmoXg==bbpRFNY{XJ-k_Wet+FGt0GJ}O>tqP*w|k}E?N*%|~&%w>uR!BaG> zL5)a@zoW;@F9dDh&V32kJXXd59GR_fFft9)86 zjgK&2;<`zGddu4&1F_0v7!qf(3M{!lc&zGtWPDrhA(Nb&AljNr7;_4al67 zXg+@E8*l2ZEv%hxB=G%^tswDMhTFb2 zv3KA+>a}3N%Lh@0R675j@V_s3od042cMj)viY#_eKI2#>r!boNKTxI|4s*qU-S?8q z$>vCk9pnC`RX@nms^VFcGu>44w10I;7=1R$@`mt~Qm~f)a!JswnE=Og0zB2j7bb>& zXMyL6?<4f;=)6`e{^+{bEwi|=EIa^}^+i3lj+V)nH9Rp3>#4v6-a z=}Ow=iLM&s75~&7o&bR_OL~#NY+_$6#&P`av8J1iGFt117a)DS`D+FrAvYLq5Fb+R zd6G^e(5TSQ@@4vOsYVjBdVi_KsITToi9s`d9v+KLn+*dvE?gy&7lWlAyq|BJkS)I` zhnn{Ho13`U8arg3Z@=qg%hGSr4|ZNAYAz$Sti{Zv`TVUek2CiqDh~|NHmT7W@4268 z^(uoq^iN$)j!$pdaZHUwL#KaHmrnH<+D-q>Jlmg$sN4y@SZtQs-`h3?#oU^b9{V+3 zrq(Mt;Fcy64%=HuZQpJP%u|_XC}_I`%YE?0XnM*vr3JAF!^GGNe8D;9jnQYD*Y&aQ zqptxYNGq3x4Nv`&T6qfK#bHULJ~yGT=Yosc)&a9ft$e0 zC?Z-w2$TjM-=2z{0qqel?#=KnkCeb0BlG~M^QXmS3UC4rS5v%>mYJtU?YfJkp#QRt zD@c3+x7vG$qh8&kCGO|pmV0z4Z@w}rcs^JJr(Q5dFVgNG&et~GPW7^Q=U~Be${{eY zuGl#wL)cb2_A4~arQ_ZDLpp#+ADe&Pw4T3OE34yfHe?EXg znB_kM(4R9CtkVBY@58GCF$lk6z*8I#ULewGd6;?HdA}>obyM4S*D6cu%6N%~tq;i9 zVuH1mY9V9H{yhPO(VV7+L`d>}R*2k&upcP}-Fvo2s1Fe$ea}5nMY;&*8^OX-Q%!6$aFUcI z2t{Z7|JIN^8u>GLwX-YZBCP@!hO8YEcu6faU2`F0?^+srU_pDmGFt9TE>*5CN+FS3 z9|JdQu)_QEH(5hiRkPM5IQ*h49t&>I{5KRAKp}0MD&Yn9m>G<(>{Cu54(cdE=;?fWo6e8Ks z0lhn)N9SuclR2uYWh8)<(bW&7A);S6Fp=ME#_51TaKbY6dGRMx*(}9(e zvb=#H$q6*kHCIHKUV9w*=#jw%x`UzqNS}q7m%Nw97%`wua=G`0s8x;W3HHm*nt{7* z_aA(Jr6CFcBSfFL=@f*+BXRPQ!q}`c0|6;g@I&k(*j-kNt$$^T_45z>Z{1m9N)e;D z!tX$7{#In80T2D9 zk=C8tqAB9k7O!p+LTeI=vB9Z*v#a04n2n`f%vem4ir&8gdF!p@uJZaBH7ra%>u^Mi z;hi&*yqx!oBPsIqz9D4&bs2^#8mFnIReb{`xzfAv>#Yoq+l<^T{ji7zx`_uVn zW8q0G52D^KNvIyTFm;}yZ3IB57w{D7a7?r`tL^8zflK3$Jnir#tJCg09V9BXDGL>k z`snFP^St@yed5PkJG?&dyk=++bpXKQ4lRX&$X&ya`~x+{EWPg?m}ozHX+@qZ=(2b1 zULpB9&poefQ3n8jlw}zmoEC>WZC_5Fb>brfEaisrKaDD$jDFpZUmTODtF$i3RgNik z-%hCQK3=s1n}0WsZnhzm!0>lNUO)(1hZQo5RR?Oa(DtTJhnaJ;wR#)3Y%;{i_}8g7 zK7o@Iq-0E;Zi&E}IkL9Kz9k{k2ropS3SBp5e~bLDC`97hml9G`;Xe7DKz3w$$@Ieg zwXo;8yovO^vB}l#t1Kyuf0m@*Q<72WK|l((li4Msg*np``(ZX4_P?K+4=fxRnN*Ir zmP?#@5&yE9e-#DR`@erR{Pg!%{*P`~zx)|dWwN=-v2w?Bv%$t+Y`$V}$QOiUQcaY~ z6;AkP9}wGojsK$p&O>t~kIQyMoN1XZ{XMcEzX|JWY>CS?Y;4LSAaq3rGMi=2s^033 zGHs}$x$?voYKQ3yQM7wDrp4K0dr`^SGG(rLAJJ64lJ8?aO={jdw&<@BW=lG{F!x=w zJjJonQQG~`$V4KLm9fi9gt60O#rs+j((6*pmhM7>UWCG{E1@Bv=4rhWZY3K0$1}CYf%zp1g#~Qm0Ui#xwYXYl zD<_U~W>U{6!Rw~w`OWcbw2$xfi5f!^93V6(hA*;>f$v2Cw#N@=d!Xmf zpe|s@%1EA<`8?l*a$Uc2c7oebzSb-h2T-6AHQt+=A6MJ+zWzf*A9tRdI}DD+)YzTz zLyQTYR$Sa;Tp=*gf@0K?n#@{7!YjIxt%Tn@)T6G6?>fQuzuSk`ZMPVjX>q9aJCEJLkNgawk|5n88a z(sq~K`d2{`R)uSs?*JG;EGe}$?+BD}ifmztAI|39Jzvrc1m5gK6wAhIA@kF@fm?Qi$hb*G>Vec4w(lRh+9TIUkq+RKR_;U>A)K-TANkT;Xa7!Qsn~Uh zbWyuu6l2S+GJ1D}S9gJK8gSVY1Qf;DfU4kE7aMhfA(@xdr)t)pm85&Xf&3ssv5wiB zc+t$fK}q>(0vuM9wolJokG{>+EPEoV^K9yY7EhEZxVoq`eD5LkTxLk%qek=hWydgB zA$b#?cxa1>A|e#1m|&C%f;~@dR56TNDX#|DSYz7hAZ7qLVANRTjZ6=wJSkTm>S`od zJG(V8nG;pyemWS4EPSX;dG<$^=;JwiU)OaIU!)!tBfPs|7>^d+dmo|J?yRbJzE=@7m_$O|j|->#$-UvwA!` ze{x=LWRMBBWu>=h))x~L^MiC$M3m~+D%8qe-u5iVL`5xFG3AQ0=S6!v^)7P&`u*@U zG(RT%knGQDJQX7u&DPWQ`f28!3=9zqlNmfFO8#Yid1Y0g8xnYwSnL}#0)OP+dW!h% z_l3E4;Mm0lJt-mx>3%61R283%U8j22QP$z2D9(`lLgJ}Hrj4NLlf2k;a*Ox!(Dixb z)`!t)(t|urJeq~+RWR#p@gH`I4VO@gBH^2NY`h2GzCZ;wj^w#=u#c?G;T#qQTa1o% z{E8kr`?%uBZpx>6Gs7L-e#U7~_0HI4()BqB)m7+ACUn6z?xH0mWn^LG5q&%Clwjq>8>Bx^W%Rm+N72zq-_k2CzF0QzKVq~j8r$2=+38%vocovq+Y*n7 zo5hK`ML$@a_)JvMc8{-{Fm{Y^lEf6}$=PoHRLl;CE|eLs$`mhFqxd*ta7Lz^4sN_> z!ap50&4=`uBblJ)Z7`JS>kSB4>(nV*P zE!tem@J+;5sq-M6^oW3^HuWV*#iqlFdhOEqwR~Gx)(a^7SH>zZ;AklNwTZO%Qb#YT#kViA?LOSWe2i_x=TAERBD_X-$Se^c zkGCx+-l9Dv-n>0K-n=_oHr<^7CLXkHAW0zHt9wYdk#Z~(*-AS&452DL3C&ji?Go_R z=9U5(Gl}yj+5KAt4Ncy8Q8|S0e-xcnKvZoPh0n}T(uxw&p&;EzBSMwUp&6AE%$xna-&i?VN*lxZyy`$s&shzEg9Vd3?weJ#7bIP zuFowRE~osBS2YB_oW0vP{*y`Dca*pcQ{cZ=U&RXleaTdezOGkJoqYz08~ zVB>HWsyaa%6VJZoiAFqNonc&#sW}bqo5>DnE8TR|c$OEX`SJiod730GLa7Nf6Jm8G z6E@{RpmBYzPATR6N;;qjw~a8+V%w!tih@q+6$QOy3F?)UZw&YLbUhX?cY?H^V1sDeHJ6 z3J{JTY9?j$gtf2(3P%w(^)J?>7orzT%6y)z%hB6S<=-@yPSt8xZv^~wbg4)?9K$Aj zpLPQ9B2>Pw*O#lKxp9qb0;-nH+7Zc%Nx}{j2O^GdwxtYBup2Rc(edX=G zH5$*({AhHJR%Q@NANI{kpj*cad=to~ulv`N*2Drt?WO97-u)vPnD&2Zb;nLReB_3G?7u#;6X`$rGyDZglS zDP?$ZjruO_GA1*zdQ0fr{6ds7rKcq*cHV!%^yhxhxYoK~SIaS5W|&W?pc)Kah91vNrm;@^)M}9|e z;snW%Z|Opdu(tqT=!Jep5RJ_mFUKMsgdpf*H2Kg1AGqZOg4>S>mO2qy{w5K(OW8?& zFhhyrfKvck#y<%D6g#{Y$*o*&Nm`5=@?i6*^B4Wicf@RE@ToF+hg zq5>P;IYfyo^riZ{3SY^QF|MFh^~@0Tp$1m2MIE?+@S)dRI5tE;oB28OM35yJI?P?A ztT;O-OHui}Q>r-cPpS5N)h-uK!8vY*ZM-kt<{x15v)$~$^O@@-rbfy2u`sHJz zm;?-75y&(7Zp$P|$>(V0a+#h7n6le4(j`K}t(u6yJM{a?`Cs0_jk4HAkYF9JWjC$yJ87%=^V?3r zn)GYrN9)sksYqh(BI$K|=_Tagx5%8UAa{nQYRVikH{PD0nYqGUlx;OEXsm^tOT@N5 z*{f6Vr?6V?0u`;7`@#~%!ut~D1~tmew`b;6>B6|2EQ0Yvin0vT={|<&a%&Q2&O>i# zOG*}dS*p#YA2s93nLyo5;{-7_850NQH|~Z1P*PptylUB*?5Z!Cx0qk2#lg~~wsa+` z;~{hs#oHc{q&g!wT(eenOCxB|d6(;F!AG=X5_6pCb*=E4AIek;oXtTkP5Q)bX^;A$eTQ*^{Ru$XKDu4q z#(fwg&&>}}b(@Ny{XXUx?mmBake>Sqj{J@bN=7?CYCT-^eqL?xUsH7+#s`#9KH_K4%~y%$!Io(>MDtB( zPyjnkkzV9HyzLD8d~jRX?&~|K z0`4Yfr#B%vG~l?uvBg5!IOKD;s}8eVahB&4zy2$VO5@IAC2j?cCe!?Mwl2f>RqI10 z{KSE{smNlxOlY}HdpEJYPvn~^Ue>C7<~P)`C^f!6qB2uw>v(B3J5c4j9eI4f3I?i; zLa%A(rJ1Zwj0TM9VQn?}w_H-M=||NlrRWFY3ismL?j7?pJk5$cp)aIcn)F(QamXlh zRsGc+--RpHCsMtF_%}B?0PjpUzfZ5Ai7y3EW4f|_TrtyZO|T}Mb0&4oc5@LxGU`Q7 z+EvGW<1yb*izs*7H>lSK$d4fR3Hj^7m5^>NfGxpaXTKE&WLK|51*`7T`;Tw<5)0r*k&ey$>0+{pWsqg@1`mzQG;+J3KhjUSW3G zBKeNOeO!|m{nUc~fR%5t7a>rY_d!wfZYQIqUK>%qM+i0-9g=oK#u-$2^;esD%3+%8 zHuhQTI&mQ)_gqOMuJz(!secQGM$9m@l8xFIvrjOz`3A8lC36|{qvA++EaVXH7`4;R zS~Qw=n~uhe66BHgRrLpVZ2EiHi99^z->z6I$E`?ACXop)iCB4w=D{_a8h#$VbO1pP ziP7baoK0_q$=!K`g->0k?$)hdP!-S=+>hc`g~>&{R&sG~KL8CP-Za`%&?$JmUhAFR zhLzLY210@6mwo-K+aIw}gY2|6OmJH9mmZ0<7LC$H z_ndXI`J#Le%6By+8^0Tjo+=n&KG5xOmwc*Jp~g&n=03_eT5=~8E4SGzkr)DbT;A1- z=h4+9J-+@4(XdwJO=bGFTt%}-`U&Aq_#bPo2?2s+=_zy%MT$7abAZ z!XhdqQ=%Arh1J`^XEQE>cfJ<-;Ht_<8Vk(UP?&NB?qwei$){d9wT@Y0ieB8{f2*J| zD-5A{qDkGU;Rai1P{7r!-KzS1)6t==GiJ#cBR3|Jzvg?yZ_D44>!Z~Ix&1aq2i$LX zG2qtYr3!4|=sww%-2#}j)qd6Q`_DWZfe0D@bj+yf5}-$1;eIpp@3F2`;ht(c15sf? z>ALUIkANuhRJmd zE`_ucPta&aVWFZ;RA#6cmQ#B08jqphN2dIlDr+7mmJ8^jKbf;lo6*~pBxEuk)i4pdT4`)>Lvu`bafm07d_`!A!+EjlS5zrMbhVH9 z?^7Wp?vJ?V!aseuY)lBE|1_Z?agn5s|BDcD@lliU`nbhW{Ie4$srB*P+pTP0d*%?G zlv6kB#a^nC6yb_F1uJt{3!!>J(7I>2N7V|0$M}lzV=rgPaG#Q+a+gT22*1nJy`%XZvqugjC&l zlJM-CVxJ9&^dD@{y`v9rkh?w?pl%q9jL@Lfk>1)P^t64xHW!eK~?-hh*rgW+vuI*tGmovRLOH`eOl zdinf)zB@JKpg3%x1&zFx)wl5(cIx|S zr+uLT{4=a+;p$%&yBZXRNk~`Bui2}9Ieqve{1o;;4-)!t%->RjQVBE*z|?w`M}N)n zaPHSlwQZ^Ve>ZNqXSdf-&xz;0DJE zH&9+GR*2^1QaeuEqMU3PHl9`>#Ce+XQKlw)C%4&Xibb^&CT1Sqn;gIwTJCDInJz>XiyP7xCz4L(ZwDT%~ zZRIc{ZKSDync4eAreC2k(;Jls0J8Ggtkx&8VS%Zma=^~-!DfGH$y7t-u+U=0$xDO# z6O?JjUZ(IM-KbO27vpTy4H!0fxg9RJ%UBf|-C|_jA4&UEMz@Dynr=y}$5b8QRl_&A zM^JpSbXZ9om4wTQ4Te>Uf`zz0Z6>jQL#_Z!krXi6@_jFXN#joc?{kkv+eaBi+ID6p z{hHjFp9LQQLgnDjM(?FSN}0paW}r+qs5Y^H80go6nO^IPyNjH2@3M!6J1T-b8wi$nE81&X0@oUU-Xh1&j5&4Xu?L z3`Kx0pC^_KBLii>ie7gBk~AWvX(|erY`Q}Wq({8LNujA*x{-%__bJkqq{=)Q-`I<5 z#u)&t=?eb=UB-B;$Pu~0QzcjWu)s6u32L18%?bawC!P1!LP-djvjnbkg9ppRTAE3t zzH64iL$-rHDj@3yMJs=Yk+s?zBT(Rp`x3PN9N?9S57O>?UK+8}^Cg7;wmOvp2V=8# zG&sUr{^ICchZkWF0yCIO_K45ASrxs&Sn3s$j-7dr@PBs zINRGV%g^jDhZ~v2D7Es)w|gC(!p$G0A!!?MBG#4oeRJo*>=@Id5q>qE>POK5GgVOh zikRBf=4nipFQu6C1}$}k+1}sVVIk`QKsO&o$qwt&cOx0DNpp7jrJAd8LgEw9wZ7qY z8z;6eWz@~YlSFq)lb_704X~%GZDYU}<=QTBkC+5w*Mu_`#_C`{F>pDVN^N_@-zxHG ztTKL0T7WzUe2@bGcgL?@zIew#0t1;jAMi%d zdzoj+aS!B#BEl0$Z0%a5u<(Ik$Q4g9Wxkb~q9Un6fsZF_0z-mj+zdZ+9pT7g+|RIx zOQGr?#tj>sJ8JD5;iNr`F8(o?)GH0m3C$YKv)ql}Bh7qLxlwo}kcWRLKMj|1yTOgt zGZ&AG=GV%S>W5b+Pco7`JXAG<)eVe9=EI-Pe>4)K<8_u<^R!|GJao^trl9+4h7nDQ zbxImhoRNuAvuSHkq>r48c4Bd};3Ir;9H zf}0()1eubyOj&fmv)*->jtwhP`7E%FbKH`b6V#!t&R6}vs*nC|ZQ}d`vdznsMCzpu z{^%%E7Xm(>2Tj#N^gAEo0Ssx%FYE3<-dlRQujFtevk$VmM|VQYM&@)ZM@H%)FTX`o zTWM~GPHE1dcJjQAv2M-&wcPS278q?m))!8m>pA)q+?mrxD z-0T-e?MG|wXp0p#L@w4Px72-{bZcbux~cK!Tf%uY)bWcT-@@1=3NQsCLU1Oa_=@Hk zUBS-EYSx-Z3$uh7w@`n9SPASrmcvRLkh}Ah^F!b}Rj9f7^98C2>;>92m%ix&xA3>0oUT zhi;cU?KxF>zgX?3Dp*Sv8w7lsEEM(c?vdK1tS*O%*6~NHe{n-C0i3cp(x5nd<0}hc zhuJh?`^9A8{b=WB%+A{mRN?$g($n>`ND7c6LI|8ZZ6;bjsg|ETz(WMWeoHM}7PLj4 zO?shBWfGsKwS9;8JU<7*y#I=J6M{a5K>0~7fTX{s26XQ^hn+kEaDM0!q5t%=pFRVo zf>l#SpI&}i>E4uHG||~o+pm8OoLa8?8}D0R`qtB=A@^^{0d183{~O|0ngA_;V8J+PXmKnfKb_6{WKZ9M}hndRL7 zKl8A_uSnZXao=*q#j8r|6MMA=3cHEiJ>dW&)MrK#zu$T=9^PD7A@FW0%4oe{ZGh&_ zrxc=a`*5>RFJHGl?j4o+4#~>!u93QylMqYu)`-3|_2x%vJa%%YZCM07y!NA2@-`pp z<%Dx`K~9MpmCBsc>b?(MHM{@#L!##Yt1Qts59q(`+{}7$1*@Z+kNKh5Xs&3+vp*pg zV4}4B8uDSs16*LaedF-}G~yRyq^4V%15Jx(yRO&}5W;@l7N!eTZwW~px`9QKU%7C8 z+*$x1z#{!3SkmdUz74nalOV`ZTBgK~!;IbDIVAv0nul9kGdv6*af2w;7g+%)0$e^qX2@KhJ z(b)hXXU}%Zt&ITkA%di6IbQRJNd;npP$KMJRJP4Oc}^F++SgQfMkrs==dDhavw4W65_l*R)owWaN98g=uBPyhH_?RFs7Fa5 zkOfZDV}k9PK^Gvhg2MiqD@>ctTeSeuPhd!9tOs8N^XUn8ExRX`X#j<~_b6XJ67)>b z_HPDUuZxWi+2>w_c<{D=awJ!VW3Df5*gA|)k|-F@Vz%y)#v{s=J}hR}=qs&!nJ7qI zUdATeew*U|av58}xSTsxZi8jn0j4?@)xb@zeeWFp+4?o{uUZ(da%7n>WrU^)zzFk6 zBT=2K2Eu43YC9%s=Nr_3_cxkxm&56mnC=3(h_Jf%nNdC;FG+P7uK5W3f21f${%Y_` z+6uWZf6km`46k8ImONskzu?0~eq;8dSTH1f8tvr^>jYn;d`_HbgYgWsq+!XftuQpG z3_x#@I;cmtqFLEzUOs)>7+xoz|0K;6;N2^6n1^25(#zE`?jteA!Z#U|mtYiY=s#eNuN0DMT1xUE>KI#q)jVW;(Q zsDJ#8QqHUG@wB&v1kvUrE{&JjKCip61GUCWte5NK19;50$I_|+UC!C2t>1CQ$s5{N zqI2K*r%s*%IBZ4VoH1*m$Fv}$LaN=kXw5(Glmig)g{vexhFNiREEEc-^_Pu|On<~_ zCpK&{{AV-cxBMC!3?{Eas;;N2XQ7;0EtFFevM|1EN`kjfL8V^tu9&~rT#HI3bM;x3 zP`hMG?FdEf!NWL*d6Bvolq?tySsKa2sW{iITjuyy`^&?~z6Ds|yjoy#s^9hRjyk+$ z&qIDApG$V57it(x?6To1oIu{iTcX9G6~|M{%cq$LgvzGc=~c0@3<$vai-WSwt|R(U zs?^!B7&1@#F@TqfDDXujS6Q}P-e6uhNsFq;*eSKmwp;bx_un2F%Gl@aSK;dNNG(ag z{Y3uBaRt8bE00QVS!jH$!m{3MWi5ORd?DqTX?tMkvqQ@HFv~TqWgmzbg6Mcp(CqIB z>eTI%8=yvH9-y2ZbpqLMoy)WzW`5nrM{miM8CC<%y^5gEr1mE)@||I z5zpwFrKfSvz81O+b15rga*J#@V3#HISGn_o@iuk-YzmSo#YP+7B{}%vp1aIXh?2rR z&KmbeMOts6!1}@KRto{^tO(&I$Q*X*G%8#GZ>8b2697qh`+r~OiCb{~6|E4rpI=r$ zI>^APT;vFsOP0_CJUsCP%&ObHH=Po^e_R53%lYx1A|3)~ra*$MXyCyG1{i^e$VyeM z=XU%G1Y={gEhO-kT@6P7*{wN>sUcVlosM4b^uyoRQlNa1$>2i z5NGnQ652|Xf~8L)(@Y?xv*s^gr?g1Tg8l?35c4wV3IPI8Jv1*kS!I{iD}^xnX4%YT z32^qcasb=O?^0JT-RU<40EJZ|pcuB4z3*wKh16O-g)ErwTXNL4iF{3^J(GSa9@ZIs z<=VuAi1uP)J3E3$V`BHz zo**8;v`=@qU{e#c;zr37l*}Uz(*xqfq&0bgCXYmq`{Dz#458sdg@UF^HGcWKBAR#c z7U7>POZ9=SEBD06T54mn zU1xQEUZHJu)FPp;&e(QkkEss2 zSXV(5^MBV4q}b?5Ua&<&717BeM5LS<6#YPsdjpCNP-K8Hm)utm;LT8lY<@KWk`rNX z)&Ix;Cif=Y&q3YNoV@N=HbpX_D%IY)KdT;!J)Zk{N~a`A_v9 zZZngNZY|^irMSOfQjbenP5`mwxf$;JJYWn5=@=em^c)&*(#WEI!+Mk=qH48^W{8~N zNVoh}_!n$8cGJY%dR>aGrMejk5?+wH@;*ggb+K2A&Sa?n14GR;KNSmc*C<_+Bf7VK zij*w&GWUsJ&7&NuH(RPT$lW9qOzfB*x_t9U#YIM0YMj*CwpxAsfuKXuR%zKYT@Sm2 z75wNZsvg%+AwpHqYo2^c8Dqz``)P~?Y>$mewDsudpn1-Ix34JgP6|$J$Z$TK{b|>1 zPh886=3tnzAyx3A{oGkOD2^p(@2N2R)Dj;L$6K@BTH(84`S8=mjl>a5TZi>d51(pO z_T~!9sB{YPk5*lvyx;n+zTbj!74{!}lhb$xWqoH4pTdYw-@f#x7u!5J%sP10Eary| zZJY%DO=r5AA=Drt0a>HkmlZRSOM1yy-DQgvD?tB%1Vj1=BHk;B+xv#a$m8|iPl^w9 zAr%7>{DY4OS04wNdS9LJYz};q;TgPn#K76q1}(tQ@XyT}()A%p1V|i-E8B*HokrKg zu6aQZC_R_4NJ4+(+$LC6^-V!LVKj*_jCq4QH$19Ebuz8x^<;VrclJk*L!*XEB4gxU zbC*>@V2A=+UPm*1>{px6G_TLs>MVV=<`@X8fh^GE-ueq{vPugPgT;w zQ{VqJHeOMnvNlrt(Rm-JB^l4mMt-v7e46WWg4C8=)~lP*+^)41+9^!%;(i->HQAqVtJ# zcNp7-A~PB(H!1s>=_IMCCP|-iXWM5olncnfNUEJ!CKHMo|2DI(_%W7%H#0^mM?*jK zgEDbeFI^oO$EyQwPV5^sarX0O-n8V}ch;1AhjT*}$jX;rhPvPm*h_ti-{;CL!rvXh zFHuLVn*l_t5D?MF4#Ppg5TV{n({-&4GXe!fvHB+YN^0pZt(ZMJC@o@QNS??tgdb(h zv;4yKyqQK%ihrq0K&XtgRC_w6cKkmh&{Tx?D*L|+kC$~!{Z%Q}Uo4ig+aU0PFp$LB z00pflbJQxNaS;+%QhopIg8HLG(^xBq5tW`<5a%gqo!6I%kI&oxg3xUR%nBAO`=!$!32=8~UcT;jx$x}Tjo9d;`CtkI3SCM}r@;UL)^qfjq`m(O*CTQf(prOvONesRSQiPBAUoXxsGl?9?EcbK{# z4jZwX?bA)X0`e($NkPO8Y(}T4-VopkF+l~xx*^IK`u4%O<{3&I1L1XWUMd+=4^I6DA_*T^En*H%<`J4UIKUeGzy9X?~xpQHU z{H49ZG2IH;UI>^-M-dOntDMx?@rA;V-ws#w=f&PE@Q6>9sTcQG=M6d3P%z-b^1qAg zzcu(|V6&y3ygqMjiAd8GuaX3{!NNY@lW&P$asT4fi_QELD(C7y4cY*~ike^~`9r!4p!|nPWBJp)p0~kGfs1D#mkAMj4 zCu0@!#t({e>^-NkzVJK6(xzPae8)MiG~4b1d||p%WuX)VNHxtRhA(^Ty=_W_r zr*9rpepo7{{=C22EeYXbV5yWReC?;4zcqpdmcp`+Z}<}|Np{r26^WH0F8N=mes}rn z%q4D#gTx-Z28PC?z^-v6*~Tt~gs8DlLXhb1vnMOwzvHeEU4UcN6NyCt85sE2R5;(B z`3TCE(RLu7F+eLlra|1`PtzbFhFcc5dZ8(9N=HF38Yh2sLA!zeop94{LU1`b>qMr4 z-%*#o{Po`)E*SAeH}maHxgXCl+;OF4Gzx!Xab}Q&$YY37D^4nvpJ7TU+q0TWq71r@ zqj?a>su%WSfIdq6xg2o=YPu!rYRd;wB-aQt<==%(a&#Lt9d}8nK+P_Hw zxg$#>5nkZ(1Fq@(M3s7nFIO+v6$8eaMbR?&-xbkZfEri^O2T?U1*5pQ%Y#p_SStb0 z=4G(Rg8q-J5KghWN?rv(hiDaAe7g)*h2;lGAaRDe4zAydzas`FO1uVv;-Ez_&K*iB z)zr7g^t{EIgJdVbdVa^&u!Nfn*DR5~wecLrkP^nCYkxsTa*>F z>kSgCuMtZWDUgGss*CO0`joUJKAI#n_m&#Kp+Ma*i5w$aUUE?NJ?u5N&0BI$z2Z^xgR-c-L6~>2E*2a@M&k8@~e7;Lav0SOf>k|RQ z2a$9?lYh9IiY0NwcRQ?POr8 zV>j5J`ovtz;*H`LbDR!Bt9ds{EfS@QQaXTR@=>26@qf*~w*1S6TFF4sf;G5?wedgvg$zZR-fxS zz+=Lp1XusY7s$OJ^qp3Ug@nL(-p;L~jNM`=$Vp3H896L`BQYmVK*Eo8eW}~OT=Gbr z{WSceUka3q_uz2_sEkAJKd8V@~hNh6=mgum_d>jAX09v;; zet)jhltn|RC6m-@Ib8a8O0+n<<|QQ*N;Y%89-?awu#F053iV;Bj50s^TDeO-qwgwd zFtRZ50bv}Ntu1j?CuK-ROQNLp!=(9RjqvY-F!$f02C;WdhE+QKC$OoOF?jj7JbcFR#*=8EU1{#FfSdpB`!4+Tri4G=f6aS8A770~ z;|$Ks+EYc9L9zb#u$sWNKSK4FSwhEv^ZQs2U}%pB7ABosTBGU_dMHu_`}TS5dGGO6Dd_MfL1>L zJ@gOzb%%13r-R*#RiR4dpGlej7Z_EG5gFFwAS$V`$&3K0q|&y=ph6bprB*~ zuWjFwfX-@q?OhHxlvAw?c6m{vxHr0x+5gsgz~|jAHUD#^J6H;#@1vz>NZq2#Of&P} z3io!@{i?Ta?Z>MSpfD^NR+DePicLL9lI!afa>kQ;8#Fy8Bw)>SAlf^cLVyek(FlnQ z?}id6fktktrqS&E&eM*6jtpTIGp>?)Q6fn}T7`xjXYXO#?PP>%jknVU@XsaL(^QCC*ytALYNXE~H@5p`>C~!0#kV!(6TO&+R z^~+Sa|4fbUuA5#wJ2YQT?PQAzRE(7-Kv97BYP=xbQ26Raf=qf7vO%pkT`R`xTYc`^ zs5Fv(+OFo}l^CyL<;eu8g~_6g`#@ofwGO>o!J?z%&cG(E+wX463u>uX75kUt$DkEW*G4fN%IGgstupMKlh_8 z>j1}9_)4@bVPT*V?UDRIF(|LE14E+opT+ZhYs-INW#RH=?J9%DZd~(Qkv7fMS?_HA z$6>c9Cna37mW70I9{UDd3>M&hZ~)a=XOu!GM?w z$FTCQ#Le@sjW~$CyJH=y8h&4srq{JCR||xO0F`K~Llc9yvcjFn;K-wr#*5dpS`(7( zNqtJbj9C};gr2z%MynZgSF!q!KFhP2=P!ssy4f9O@ECv|%Pz~jkN9cporH+E=y~_c zKocw1yVsA!on%I#gj1>C71O-uLF%y_WA#xGq364*O&kU&gZ2+1^O=Vp57V2Oid>g%6^36DGRW||ow(iie05u{tR@k72sQ9EXrm%MzL=*;|B++kAl5r$sKmc|Fi3ndbvooh@UF%)*(8m8A$q=hIXi1J@1(n6`DM*#!U9u5me z^|g~vBykfFuFc+!rRJAeFx{Oi;kB#Z&bE{F3-`h1+gF1|5D^~J-+4H=xfj)%9Wo*! zee=YpgkJzRDo4#-D3^ z{}`ALoCeY~1Wrz|!C~^57u1CR>|K%+uWs>x(}e~SRiNCBehe&=-B$)mF@^Y@^}H71 z=ur2MQWv6n^uPdM{9T{8ygiPyRDM^gRk4a0pv;o}J~j}A$2#uZbZe8O2j`V#ke)YX zutUCQ|2oKXOH2ZNB5~wPOWP|%WdiOL_^Kbubiv$v7h*hFLtg*0NJ9z%g#X4xpHe$j zSw12x!u{>}6jyVQGC=2mE3D+Nv0*lX37(T#q$tdE%8_P3Td7I8=7*N}t;8{^5J*5u zkVirzWquXC9u#=S(&E^`2l5y8E53JaBwquHwQM$HQwyFsWg1;omQs;q5c&%BX=8uz zAm)Ku$$p*ow9K=L&ma1{5(StyB~Qzm#ZNcqNqGsJG>cHJO0bsKyKd@h<@k8-{Iyl? ztu5#SJP(IB5%O<33}`=|fK)aW@E#3nky|osi!=xXPRla^EdE{R@{ER&e>o_eAe*PXQ|8C^@z0 zn^e{qjBJ(>NOxG=#c(dBahwtXU3~p+Zz0tRj;udRkVcVf=i)wKfHlE9qSVFmZiHNj|QX}BgI1I5+Kli3_XRRun8nLCE{DW7J2A!%N`o9w$j@S}Ju6oNp(9q7K`WtU1-I??B6=qc z@xe+m4Y}uxiyU*?8B%V=1S4=Bz^#{SACwp1g9XIYkDS!)HPT~h``Xv)d>hi1OzkKM$%K`V-c-l}wZufkcQa&ma2mB~VM%t;4x_NY>+ zFa8`a4~2rfAf%{A;fcn1u3Hj;ZmPDDH$Q9Y&M4^A_L9eoq|DM-4gz23O9{rqW~!I{ zb6N!JviYHBaR$G4XU{#pJa1i?t{;=myO53fRBSN&PwkY?k*DBeUvq~iX!_tr7G*_t z^HXYjOlX^G#rKoj@=4D2*A4o~&tBlR8s)P|4`f#d^FdwK*TA>mbsoEI8>XB@R6+bQ zh#Ges0TB2bp$FYdvz#F%fJbJ?R z@ZMIvuYKUlQaG}e2r261DKb9Wn#R7iBEhk-4PB%rFS%2_68GZVA-iW>T2B2~qhR`F z!U3_tkk~rK$kec$^PVImp{SHlSSsiG z{c6>V+pb4iPiXi-ip(gT^xiKM4=cDO+918-UU)$INas5rGadP9Gw5iA2o z<5@@)9?`@)n_jdYd+|5zJQgpP{(nNx@<2w+^VX%|;8?yv{w{y_Y4tBS8sl&wzw3^T z2VIj9C?lM=k~iE&-(f4J}UQM55JiToWI(nkSuFWqL>nCy%tJsa2DU)eyn8RZ$iYypJpg- z?t~L4yB-tImBk*d#YQ+(TQC>mv1Q}HN5Y#MDBFXgIgs^??jvtpK-?k$x}DkD9_VT+dJMvT<2%;;=SK*5IT|fr zX#M*Sas^Y(7qP#bU3>(_405(Jz>veZ9?4t2s9!(5Thxv#s!K>;oo*g&ZEN`>Aq)!- zuWE|87bl@h!prm4dm!HfvHDhsS#So($^Cj+-O~bltGZN;jnzS5H?*X~y+l6L-`pT5 zJz~aCJi$>+4#LJfEfA)^6!5Y{ZF<(3D4aj4wTf~fMaZ5(Dl#3C?>SWr=jvQL^t&eX z64+6*qpQ(-9nVeT=eiL&@D3a8MDuJc*KOBs+fGEt0zBM&{SU|sqp$+m9P|8{tNE=ik1?>1>7u;Be+)R*r%S@gC?KQYa!7<7 zOoEAJNRfB7ja6IUt#tX~5yTE#52ui019WyhGoouBfvcGCX!)a4cJR?G#@x&(J;FpH zqK7YNa(F45P+Y-;ChkS4Jy6a~xUzizsQ7X8L3jv-kGxS8OiAgS5s1h>{kF1(^DT>K zgP2xjg%ZVo-feOH_0NC-8-15J{S(yRUF%LFt&Q=*+ka>d)qeY`)=}B3hAJM?um-Bl z`)UHEB%xcP+~wi7L?j}m&$^#pS14}3ii`?Tx%)Qr<$hrUlf-?JGIE8_V^#4KBE1KS z$7Xy|v0Vw|Bl$CLJep!9HgB?nHY(=wZR_$3CShN4F7YZ@9=bRtmeyY;{$2}Ii+w09 zF@Pbr<&-hMrgY-2qW_|}_}8NI#OZm__Be^FtIR#Tjw4oFWX?w7izm2DC^j(IJ|gtkz)k+qzoCnh&5&BZHdCS@oc%Bu)dng;Z-5(!ewZ0`;Vft2Wfk(0jfFQ) z-sc5zbsA*g5Roh8m}ezhAU=A@;ZnG)g$sEKSeNe!S4t#)h@#^qDIZ3J=S~lj#{p#8Ej0J9NCUvz^ggC6Zed$u`5Ys!lK(gRA&Xz zIK>5$66fJCRCjjuF^S2yGG1BxeFE>$bbo6tqf922jO0!37Y1VjAa&_yp z3gEqfz2iDdp6R(6&s=eCJqKW(#3zJI3f?To_tCx83_R2~Uu!8zOLR8iNgV=2LrPb8 z{|QEM+q1e3e*__XJh!q~nUBF#saLk%S=N*6N#B@^v}?oEhHiuEG!1eNz^(=`DRoJ` z6vG0FptMotwtzG)-{S1q~xyEl-VsI!JUm6~^uA?-5E{Mv5+d-`~D zzL)=%GfY>ZzCf_tgdU9xaeu@1GNGjR*6(3KzjbqciBIfYKW^A*n_L-b8-2MTn!7{8 z;jtc5#KFJu?akE^@z9s2sQ;oxcKXFhh$822mh)UsrV0AV-1qKhzBkDus};OUD(?Z1 zJY<>QSRLoJnn?)37y{@NGGaARhc%T-JmE>|C?5w1r{v#zGidtY)jS3-d|^X-w-}w# zX8OAXy6ZqiO5_gD=2l$d=D$u`YbVH~R+;w8g20bP8pWVWBW5=^m-&lgz3S132^p)ijW@+A(5R+|^P#Ukf9o}dZc`uW?NEn_1c<1Npv z+n$ccwpy|!OugQmt*`Fzfqv78eT`n_a48;4+f7+v@y5d#Qx@FU4_Y(9YNh4bY7 zPgFRz)(w7X+bupd`!IT{HhQThOwDlU)GeD1yat4^hnUJHS!2i|>{Ez7S4b}D1k&9m z!pc=UrKr#=QxJ;O9pIbL+v6{}8@)<9zm57o5D`j-83Vx!cRiDx7wa2?t^v6?P#&o3 za*BNIaIF?Hu3b49UW(u%_X~FYZk>E`(o5`ofSS$G)OG9{xwA`0Y-HS}@9!&HyIw`# zs?{?AGl*pflci_HdF!~k@%R(ohcpvSsjnVLohzqL_v)c}_PK0^v}XZw!QbB;`C1a% zydj*^!G0G&=S7x6P*yr&Ja}Zmyp2GET9x83 zYYKLlX%nrXu8wKXiC*pj3G|;|$~Da$W%xjc)FQ{OKpF3JO6QfohS|YP*jZ4sfNtsi z$zOBEO(usvTQJ@;;NzMMUIn)-EyA~xfA*EPiKFyH9Iv!X@YO3{ zH|j1|X`92@x$NqdzLxap-yb{P)pjRTO@%1G%rFsMoSd+e-1q5QQU~@dBW0`#iC7@4 z^yeFysXQS%WHECq#VBB;H9I7=Skq{__!v+jDe0uzZgVBYGK|jTV3tNFw((FU4_TuV z>#gAbePOH#iKzRlUKAR_z$gCA-Z<$fdAC<@P{>ryJ198I6kw95!ClrH4_t36b%iu@=AuZS# zpq`SC48W;(wA*~GYVUc!=EcFuh>c^SbJ;1`o9A6tD5>u&<%H`msJc4%EBzg4;x38k z3jFS+vlx;_Jp<|B4MhL_*$OdhFBOW8sI)LH^XCQRszEO`L)|=8}Va_80AwuS* z>yAT-tq#?L0YvMRf*zO%6JQ9O`6Ho;RA{{HL#ITBuqJtBi2eiChg;cPvfZL0rcYo> zGw&vYU!JexWRbuaVaLYM*uY8=K{xj z+h$?iP@53Q9pl#r>U@QtdbE1pIYl;W9?w_7elJWH2nJ40)0l!}I4jUj+=&qOA4DwV zqMuq_M&u@&g^W(MtqHoVW^j>k{r4nx>3uwJxvr} z7CC)hip`PUBSh*q%HHS?c~Sm5jNK4*vK{8>*HM8 zjSmsBWyBr7Zmw^r%5;MR)04rxPz@98Rwy0@tW)bd$f)Nt#cL9Y{8Xi(A$>=8@XGXly6x>b$#FTC6&6G+h&phoN`9xuHFf-^2ri! z+g4?7ZaM=$xj5fBMY9^4odwJEke^NCq#pYbXye-HtmFvc%|9lVZP>KhsAIN~>2c~$ zCT8Sg2Bdaiq_Hj{XQ6qwB)$uzcz**lXYr#?-Pf+}eUz^S?0GhR6PC}JF|BRA5pBEc z{$c|)y2;u)kH~aizAf9TP?X)7EsHyJ*;&$Pr@Iya&WaR#B@0q!zdQldUv-OK&cnTJNmEOo`!Gnd&L8 zh$jB*sLJd(_bxkBE{{UQmZ?vtGzbqMd>>zV&ZiRLx|A^x7>~EhH^*wGgJx5dyZ-;l z;7MjspzO_4`i;L)B@m?UW&6?!gvw%F(V6t-O|XHu_dRqk7EpsHi|nLLcxLGkbZ8pZ z1>TjvInjEo*z;mt*|G{n+P_>-*Mv6%KUR+v@skF(Y2#A|w#S8%16r!}`*S?>HtfIl zWicc`84bkM`lZq9+(>`7=)w*|utR#mbo)t0&m#Pc+QFno4yCH4-I>!jvXNC1L#rKREHe& z`g;#A#UDas%#bx)EzM^l{TUANY7TM473Wcn7rOuOexpgDQ1ZRr6mOlqlTtzS#_T#LGeHf0xU z1sxY_TT4vLn7UmP@MuWWq69d|+roOOCsIbaUwI!605e(9HPbWQ3Jdn6<&Q$0d6=p} zq#~K@Kt{_C*W;KNroOS4Uou9?{gmZ?E6b5S>b*ZC-8uzD;;wN1^!GLk^Q`^1wvue*^u3b`*3;+US8D#S1wI5x5tS7na{*G-_LTPgE0#PaTbw)hD@FyN(Vl|?KPCUuy5G;*6G=&0 zBEtiVG3u9|+**1Mh)7ifLcd^5!#8%36B1?A$5{%TS(IdiVBP$9+L@fI5+Hr))xj)>?Xvc^dAH5cVGMjD`SUx4?DbG*bMGR7OXP z)?D{(Q+s&$f$!=k%J)Mol+d;v8sI+gNukPIc~8+Lfoc3wY=U3oaVMnEedyaaAtaf@ zf>b6^8YKp|ma-Qlin|=;-NPY7Pm?0Yh4+%OW%-Ui?c-TtNT2;0_?WH{Lil5<5Yi5o z`XU~XIXK+CF%tW0m?GoZw=#W^O{vy@^P|jnlRJX8|JrY}P+QbY1VXd9mX!I-vXvUmZNiP1q99gU+- z6FOnucm>cbvcAZ?rt@Hnh-B`OaI-< zCtYIQ$serER&0}!X4y2n`4mpWRlzvTFv2&Nvqg#ttEbLRRyaP{`rv~hAM5uaZ=%VS zgSJVWNV#v*9{mmg?QP`rlhmINXM`mSWlUZjl#tF)LSuw?yvtGiQqKulYVWB@5(}U>aiPHMfe@%N&ztkr}eK-Dd1C!<+t}>qL36|5P&3;}Nu>4e@SNqqOFu3{X zY~vu}Q!HD1)75WeC$4-Cx0V=_5UR;-wHW(ySLd;IFq!^BJT$Ity0v6$)s%I{2s5}_ z<$JT_wjCBY+0_2vJpUv&BRbRl4%!YFsRmv5yC3!5yJ%utylsS{4{!6fYG&ZqO?bfg zb-;n!Ubp>?j9Ov2z*|qD`h3%0?0M&TC*mImYUy`UC06u7a*Fu&0IOjF2l%982;AuH zUUP{299av@^puy`=qUa3y^KGIuhr~_dfxa!3?3=z$~`P#=n7`|pSIV`u51KCL-tAQ zfvEGP5EvRpA?_rBDzRv>`v2;6aZ$KvFvRQQz#>YmIWnMkKA*x_;rwi6xuDD2@;C?0^<#s#Drn0;Rd^)A^yEp3>S z&ONZ?OaJYwBi|QBHpw?2wZFsh%&+pN+v|#S?X9IF3uj~ zG?sr>+P`a1kN6@ChR^o24&3B66w20~516qs;$@gr=T_knd#|!&`#dyd_z>nr%~$r& z!G49>4Cy#yJ@=&EvA;hmYU;N#9m{N=saU*@B2eZX6dPXjvBxfs?xak#rT}0SFN229 zT;<#&^7$rxl`?MjbgEmDeMwxe01$%M=5Xh<{Z2*dtX~eSCRHx$dwYY~mf7bwwrMPc&P3pp z#V(UdI;+9vk6C}TEBlPwMR#;f;Lk=)3Xn=cQ%$nTI!XAN7cZ^`mIi1_%|!VY3&l#l zemFGBbSMlY^NyblMB;egM}98;1@e%5KD~EBS9(94oa&a4s>dhAdCP*v@2~mRn;Oc1 zY$hVx*%0cJg{@KT5#y{i0HW9u4Y&s{lg3<lhGldq!73^2v>dV_4 zcx@LV)Z}Z&LTl4UbayH?;e32|)+8q}q6-&GAgLrdU%ipDL4_La}>F7=Z7= z&A1FIVm{f_x#a@&63wpo2ItFarwTL(8yUof5>mS!AFVulh2{fM-<&W+E}P!)3Q5+z z=&DcrH_2ic=m-8e_Uh5cwO;~=-$9a5@4`fBvcH)cQEPs##*Z!zXcC3aP|%b9{6W?S zF@>dfVfIbvVrgjO(%uGq)z&q89vcz4M|B+fP-M>tQVdwj-G9LZJ~sP=Cxu@(Jg%5N zyqS!gCflg_VttN7?*%+w)dgL`3xZ)rjY$*wj@~ZCL1f3?fyBQwib*DM0psM?ttn4} zrODpyqb=x+W3$^|^eyFeRPJiNs?|6rWzxyLBH+b294h$KCGa6>Yn-p~zCpcE61Ij3 zf2x@;72Kx{TqCHkMKVrr0s@+td01uk9>s0I1|=$NuJr5LrgyAr*#5PV(YU6y5z9NssuxW~cyEfU2GD-Pf|rr$`5+(=#<-HE%WlQLTpKnna1l ze1ZQ1a0CeN!1tRt6|UrENg9ZoFQs(m`(*uKkcV@==-8%>B4vA=K_Ef151BNg&#PSk zZLyo&8LfAI}2+{U<`zQCvx74+n<6AWbM=M z9Pf$#g6*##`0bSXk@6sD$o5Y{dUu9$orzH5IKBxWBGPhvudxF1NjY;=G`eix*wc0U*aX#$TQTgn;Kp zstp`{*m98#`b=Q^ilc3Nyo`b5V+2D@*9U`~s|PO|*g%m5*m%xhO+OX{SXeOnrf3}e(YsUE;a?uQo~`7*F#JWO5s zLh+miv-hd1qB4{Ix+&|nHOn6GZsk~w^;X`a#jH{wO96A%L|(0_EQHH2#TGToo+(<- zY*TGxYAh9)sjUTQvR-S4=)76r^&Hv0y|e_9{k#@`Kfs)d0PuCFzx4I#^vOyRVl1Gg z1?;m81FGYADbIpjI1ikT)SKs<#wzpzR8pZYAlVD|hgv&M)Et4bQ&JextRBWk?_L}O z<5N3rB>}G9yRB;JqGO4T!QwNqaSbu>7}5nriLcM4$>4|u?5{>sK^vd%-SL54vUiKV z5wF0d6hr&iA&(u~9$_V??V2JZ0(%5U#+uwJuq4m@Iq-s{+?Kf>1--Z^>Uumuz>wt-~y9FTLH%W%4!v23x)(#o$Olv!tBkqTQkJE;u1-{@Tv5t}I79U4p!Rxc< z$h(;PW9$E3rx-n_q}j|sfWN|yW=@{;THt0GGzYUd--U!i`~%%HWIG~;%p496M7E+T zzMBWMlcsJZKWXp%(xo07AUyMw{zcui&<61KrY`Emc>sJsQM~BLqvprIv1O+lCGv?J0wM|I)`=O#4|5XzTvY|Ibwm}XJ z3;mYN8OTsc&stmhVK%X6fNIK^%xnw3ar5UsyNRpZ=Vuo(txupI_Z?q13$px61q`0@ z5+;9&rE~+RdR?RQu}C5^+=hWJCUB5p{)Oq!wok|Z$k@9PuiA7OGJi|U#dhS}10pfc zVMv}`(XYdmx&gC9)A&G7&D8y&j%k@Z`!|GWZX11)#-*&*Fgydt_HX(L*kx>D=vj(y zQ9jORd0}9vBKQG}&U;pIvU0C%IaKU1#=dZl=z6Z=csBcZXcdHiWhIkBvpg8U!4nno zz1NQcA$v(E$lx;48>}zAg$5pQ00tA(NUkhPhDe_R?jPyD`_lcmR^xQRd-{*}^*DhI z*TMh$8R{$r#b>$42YcJUqb*aVF%7=*E$Po-ZPhq_ppM}8z<&)hj>X>>Ta(|DzC<(Q zX{MjWtQG4t`FrMq8Gg>+1Biz$at6J(pYd(YRO6CdUcD6`JbAck9a{Lc+e~{YuGFtJ z9%2T$CNg{X-xhUM-lrR3#|c8)%w1R>poBSuzWh3#*pA}1*I&0)0ZYMaq5<> z1(?H|8x{FG+v5qgp;0NcI}gkP+6;2xehL>bWO0o=>6T!jJ0<=#yrZN87hkb*7(!C} zK9bjaRlWG9E)^&p@G6XX7)_uc;TDkOsp|}H02&uBXd?v`n!ZJ=%&#$=19vg z48MK$5wCK`hGIjg>cn&EV!IsvUXZJ-k4XKFCg&l~HG*~$efTAg!}g$B``r8dq~SC| zxfi!>_0oD;?p*rQf#c8Dr^E+;WB+bbr?XAlyLSHbiXACU@P9kk9-ssL5Jf>%e5}1p zariF7tm*KxP9J`F?0D$_;n0A%!97eZSb#OA8U`tNO<`rH`(I7l7YFmJ}uIh6=t&M1db4-IsmiBpmQmPe{9`R zG3}~CQ-pcRT-3}z^I5ZI@ZO<|tW-FrLM7Fj?`21c3}Kl6PIK9BNQ^}d*`1yOLT`ur4D@K#q^VBDpTP;rKB>FxScLgy+9l(e=n z<{j6Hp104WHUXMw=~CPTEXR#fQ!E+8ZP0uj@JF7b43`U3B!UJB3T1$lu-@bdHbtfi zJMtcy3?mMCeje4>z>SomHhj^SPuSV`0bot7dP zxfmDqrw{V=rF-yz#i4R4h;z;ShH6EN1P$`ywLqx`l2U_f<^J!zo6|iNd_}Rv-np~C z?L=r!rniZf4$@3-DZvyd$WPe_B!?ECIlc$rLeR&f6?b3A`T!Mtjc3Db>wrUR7y}&C z�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

    #(J>f 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 `+-o2O{5 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

    mK2m#*2o6+EoXnBm@|3LuKP~pX77ZCsutP+bRdy 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

    @+l2-LW|qH@IlJbr!CVSbPzzp4eZ+ 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�K!yj-WFeXI_Ux~M*}*8YekzIr`|7I3xqPzII@U837A zQDGtsv%KEHNNB#F?c*l5fz_wBdRp$It~(}tZ}u%FUbLXD zr!c7GyEiaJINBl*z3CMA@0|Q{hg@-~$|j_x>Vz=#j?<1oi4T~ui$vc!a3tUN53(Je zEu9=GM^6*?_@LJ@iqpGTmHN#@MX+@pHG#e2B7B$a=mL|k{V%6=tUDWGbhB#CqR^)m z;)o1)m*C;c@hkWH_2}KbfSdi?5VnQ8fySC+xA{h9bLP{Bf3Hn8Sgdjx z#5(@eyd$0q5&qZITUeRc6Tn=g%{_)q?S1KHhDGc&*U7R6h+F3Kyhd6qOCvn`8 zRldx`V)X#D9-^C5`ZLL*8#_gbw z#|rTk9zZ2oIm?hRQ+eKp4jgcUnW4t#SQlay%P~JqN}n4He#Zs|t1%!u2I9czpF08e zM%@5r=?zxV7sMD0>t64&?JmQc7bbcVLL5Fz-bWPSZSe%%8X3AjT?%vz0;K9{ape9~ zX{Vb<_EM#od{P<|As;}`IzG=^R#nqG7c*nzZ3KR zk};klU>^QRB+h-6H}Q8qx1Z98?x4JPh;+a$eBM+|$N2rkJGJo7N{Hp1q8b*rc2KMj zfU!RQJjp&Egnd#@P_QvKtRfqvW#6Mx<(iYVx60u|%{l40csJKsvmccA+j{qPiP}Oe zqbIU*bhzKyb)q6fJg<58RZG%UO@<%dQ+tV z*^Gz>N@!J>2q-L>BD5!ZVD=IE#&+0WDNm6=$E8mM>KrG$^E#gTzVCic5%=db{cDdd z|FJ&S1)j=#4#vKrG6^aJrc%Kw@|p3h&m7+n@~(%P=hd@h1AxyB1vc1iL2}dLy&~Mq zsra+I@=kdpPcve>Xbo-)t#~f9hX3^+CdzFV{w~NUrWG2v&=Sq)ze#C&^^%9k=e0E% zHoHCK>qgMH3^Wpv^2aIU6H|AJz02Rv+Kow{UX5>$wd<6lUTy+E9175S!- z^qE9k@g|f^sY<}fQV^fh)iVQwZ?lbcVzCH(<(mJnORH3LfDA--p)tCm&3DITM zVi2QC*?b}_nq>lWygkaEN3@rH|HGmacy=`whra(XmxW611On>r-Y=&5PULAJ!K$MI z+%>hg?((zOpY%+=84jXuGpzFJhl{_9v(d`EYV1s}U-VdXoItjqTz*Mdk1b9cS#)Rn zUVF_rCRBpP)hr#1mkiBz?IeQd&nR@21!me!lwXckp3KJO^ffM;c_~f2SeNc`aRuWa zkXF@-Gp7M8sb-M3?TREQ6L7Me&Fo;j%3EH$MhkL{%af0H8DfdOv3F*y(~%tIs8{O| zAi{HR8fbiFOel@x#c>98{=uI7v)!}>Duc1>`H^;&Si5i79>Wbkv`flN@gZ^Nh0*M@ zyl;c*?p0>IBA*uVDffqmN7ZwHV!14c$hk)UYztzQ2GTxSEH-=GSLI3>h6vrH6Q|7IbiWQ;|>C_M|5Z=N9&ugD~VzwYc0CatI) za4(|qLD3Z^0qXyq{nv$Xa^D209+ABb-|+ek5>ujtn%s};%)HE65ohO!^Uy@mlc&D7(%E@FWpKg|3==7{gsiAx^+XK-P*j8 z)|IG;{aRem=E;xgv@Vm2WA;}m_1d#;Tc7P3i6)@Cr7eaIARNcT+)rHd5nBbp)Udk1 zujO^ShOHO7MBNf!>wb(#C17hE)INv*?DOCKa=J?|`PmA7e!quvYmSmIk3)Xv?QYET z6HpDE^H;eS<=}b*0E75m8nPUxnh2JF$8~ptpNCDwt-|(2LI=647`-oozmy!vKdJwt z;usR-#=7J0AK-3#EHvgFmV5U|4(K4u#l4KAIK;RK>(@k;xrux_{m+NV2ww+X^x7hh z`@Or_dU@+qUUU=?!{;&f0jRgT$+zA$477DpL$GZXimj!#$6=dzI{}fZldJZ$SW=#k zd?FBOey|c`!`pccEAF;s-$UX7vnvxn4fI=_5)tkc>`N@Shgo9HKWRlBM+6f=q%S_O zF*uwHj~#n?SRXTW=qJc~4MCTofGp?G@v3$&oRDFO_R|AKh}T+WnFV`Nj}QS6D{HY0 z?Aoz@M$}Wm)IxXx{x?MfoL@a>>UnCKG;>hvC0FlqI~o@L!c&PYq@`O?vHbGq*{6d5NX4VvdkegBmo=YU@7s-JcN>NG zf%2$MQ!GGW05L{p|IpN8voHtecw|~)3x1gM&9}z5R_Vxk^6oEkVd#6^OEf0nov+>7 z)8#A5-aU^@W(GR3PG2|WhCD3j)E@bvq54%Sg|g~Ob8t*K9q&J zKO#>aM;aYFK z8wQsqtO zVv@czu0Sb3_tF4gSY4dcUqCfe0->JP0YjRFxGui#IDbm_Z8ca)816^dQ_fMxgMs^g ztsg#U#M;GHLRd)n-F0Br_dt$z#c#|Z0+Ao?{uHu_otJDA(p(f;70MgJ1LAn#_OUZL3dM*gHMug2ryOVs+0 zOZ8g8l&#|CCr_Qno>eFm_<+7(Y@_W;)%&L-sas{A<Y%_?s{z)}Q|ITF*4x+-tMdm^@C^Tfa69BEA?$ZhEbav11i`<5>9J<%dm zD*SjdE=-BXK2~fw z>Qs@YQrSX{5Zl5Dw!E4Ui=~+@)nlV@3~$mmeoVuG*da2SGP8#R_r_VjCY;~w0z@b&5i;&qR9k#TPNxr^Ho z^9W`udMsRo^v|(sFYLE=Ncc^+oS6?GmmH+GA{A-el*c`6OSax+yj8!F7H1#K`F)Bf zZOiL9@W9qxC=r^@D zI_wFF%;Hww$MyrI1qD^9Qsx49PP*h*v>-vK#z_!m)o)1K#PsL zsdwFnni!f1iwql$c0nuc!2j&rT;3cQ9I1$CTM1Kr6X+@?!%{eQ(YBM%Z%8T-l)``3QD{XP1yI$&H&kM&4VEq zxxWGV%&JBbQR$diCpRJRfaT8{L3|p3+>Dvs^>>Yi20mKPPumCHnALLaX5GCVi=3Nl zlZ{kFc7lcs%6qnwxVNM})b6D8ec@nBPu1CQCD-T$5L>C|n$4kyY<{dsJj;;poynSE@w-;q~dj~)TD&CRO6Mb{pAfTjsP%U$Wbck6vZ z6n0^$#>dY`OJ4CjsG&TBhr{rR9^^xGW6{&XL)H&!dzr|&K2-9(d zi<&C8+Q@s^l9oD!?C-kf#z#$!W{qe^vm?-)3o={vKCdIE)fsxU0Umz7m@oH9ss2KF zyoe>eguzER%Zk_By?DRJ4%>&_AsCTu?AZ5X<_(8vnVg~~3bAt@bLmEuJ3 zKhhg5+*n{oX~+6j+s(G_dpDoV8L#{@RX%{L!eS(l=vw*KWXo>VcaixOd0)}2Z`Uw0 zY2&p6VhMBl#y4V)0q||T78?nmzI;_l1YWkD^tnr7Y~Z;>T~zvS!7Uhi-RG-d0^_DY-|H7#z@sa$wxX+tnrQoM~VEg0RRm;a21?ufph=_(9a(=sROsE$ij2xjI{ z%o?(z=yP@-h0K5&Of}!-=mK73(RtisN)Wb>TNJe?}uAAQZ#z4)uL0}<)(e?v#s{v zt~S^}TWg`X$g4oz)s7>K?vtQSVQES6K0+RSoY-=I7)&uu__PBjhqaO=Xc&Vd=_&UN zW&l(#O;%wJ512JQ>Mc%*J8*iy>$LdG$ou~bP;DCRFl;k^s^!q#CixFA3Jgr`sup81 zxUgjVLxAQD*<(*?D(|+$8aSJz0TOrIlJ#U9^B|E zB2D9obaA9;0rk2vS9X}zFlKm~t@z+}@`y~tq_^(Ys*}+AQA}m9A2Vz_>v$GPdF_L~ z7xH~BJ9k3elDZTtJWQT{c!-(81)v7V@+xc;z}06-WhX;2{8e+-mXlJQo{5+X1Se0M z#o}F)%Z(%N+q=!yOIYpwyCpIm@)~(rXN%kHOLU*X?Tk&ZQ}^95EZF~kcC{u*<>()b^mv3V;||4pjTcJX3_X>-cq!u&BQA56R;TR zzi0DQipf$4(Z?IE@J{vK1E__nPi-bu{Yb=8(o_@j%lWNG`a5M!CNXAtn7Ihc>#e13 z<8^~AxhwYFU%d@ryRybDwhP2+tdbU6_87-UE$h>FE&xdZPCXHO>h8+4w2ClII9H73 z3I(RrnY`rm(Uk47m=8yoAJna(f~3D^Xr9`FoQ5BG~MJCp(NZ!YH4>vkA0G`v?_IJmVB~TOy{mfl3CyM^h?>FN|^tpAj6qL+(y6J~+EWF)W zmM(U+$m%KKSV^f2AHo(C0tMKMD@U2#iv)H_pjmnUCf|0W%?pk{8-)50s;wEbF~<+R zFqXxK^rwOqyrfSk<4yABt?vy6fjO?PDis)JME+4igXM8h1Ou|su|=qT?* zlKr&Y#)z)HjGsgs!oe3v_?rH`3Y_DrPT&7I#v1)5fS8$7~H~L+rrcxO5!E0$X$P?uy zLh%Ek$~+`vlS3qEW#YnB+A*rXQ>6=VEO7$1FrO0q(NO?Kn%ouaaRgeUcs?@1m$=27Wz=A%V>Eng0-TX{Zp%mdDVv zIk15HQCSgP*IWP57_m_=W|;kF;UIq!Fd-WI!nHiXwGtzT>Q{L+oct!`)IS>>JNh~; zLO!>C$G49v6?p|}A4DxfLOHv6a!9%8-xU)H4!@v@RHCB&akbx!p0+n9t47Auzq}tG zr>SWZ-+n^L?3j|5Sbiid%N!6mbVNkr6a<`(wQSm>5SW<_Y^?DMDf{Sb2m}eIf_RBk zR2st3k#E+dHl@xu0#JB)Mmn29eEez87~=cBVC7eMJd+06Ejlqf(PKg#mA+$|kCy%k zk=6t=J?^vTM7IT(3`6_ZhY%Ivzli$9C+@hAh~#48e!80)!d*tEa0r?7#s$kH9&n3N z*=%EY-vW&ILu;fcViH|&{rqmi={D8d(#FYHN4b=W?5FTE`kojCBXd3rpPJ*QiS$f9 zvShtDEULFdq*_Yr;_nMd4<61dW5Ut3$KK7ac0LVHNLHQi%WN6oJWn>1=h2k;Y52J8 zYNm1jsw1l*Wzp5edcq~+3+ILQDEVsV%4HbwaNntYc?}rg10U?uCROA zc=hNNPw8X{09``oTJny~e^8!L%x@%@M9F<jkJR8&5&1PYS;0`Rl|h&kARRFvs^(NSi zFO7H&KU}a`WAIw4x9cbQ0eOA9iX$cqBg0OUvex&0H|6_}fT2poWD7SJr|I{MV$;Zo za?vKS^0Eu&QE;?F{EayQr0~hPnGx13IOC?Gb9HJ{Lbx#al>|<-+BsttRWK4qh1S4A zt1=JN9z!z13CL){X@Df+ok>chkj3m9Y!NY;D1Mk*H59M#KCmiAiL}sM+MeJb4~&y*7ycSf)N9U;IcRin`WE2GQZ@3osmd%^N8^*%r&U+B=KCAA)djO zms3q@=jQ+^IaBUSv;2YRhUX)_DLBH<+VzOT)RUR5zd0hFs}=(GK*NyJKN+@lJGj?pm}7 z%r}@UBy@jXwgu;DdkerZ3O`B4|89{6SSF-6|B%k?%rF^yetu<5xPu_@{pSanaX^@! zFao~1XIBbM5bs>hQm=?DZK}}$v0~@fu;?f>2QQRsI%u&=^_*!Q2Cf4=8Seb(ejn|H z=w%)4qhs0!HznDQ*2R=@d~_4BH0oGfunLsxw?D-OCPe`bC(Lzky6huetW{nvR3gu6 zqy8Sy-o0Pw%duIiJw=Y6T}x%b|CxV*+rfY@nu{gZ7Gm=s=W4rdi;uc-=~uR97DEGY zGCWBB;@&+8!5Icm&@I;01rU55*26GHozdEF9sHShU+?$(c#M3ulXPgm_bZ@dPh{Vc z@h^05?Au*i)JG)P1c8XJe)Z}NZ6el|z8qfsA@_YaR)>D^Yx(@yR;+`!`_et(lRAM( zA&XUA%qPCAntyLKK~aULPne^s9*)!5ss->F?bbC12!#hRib0)oWRD<|0NpZtpR& zu7{nqyIk0#{=^k>cFqssZtF93bTRb}c7GfJd$^us?VhD?Xe~J(GfnN30~wG0`KnSY zY!;BkyPRs0Nep^}>eVT1|1zJ%EKMGeYVak6=r5oi`(5(E7Ya3!dF3H09sVS|T}s|C zjsO z8lIQw`ZvlKIXXPU?(+*~;S9AMs=Q8llbD}K-Dmsd={j}e9Lo!0nP$=rt!h^gEjpA0f5bU6m(5bcE5GJYsZf@ zhVCCYNF-@{yqHj3WG$Li+sdggs_qCc4MIyho@XpWSY%7icQda#EbII=D`}anllQG2 zBBjbP+w5{Lj5&5tT9951yC!T zu@PWBKImX;JT{{Kt-eHCp?=jTXrFh-82S}`4$w88(EeQ`cbO|E0s4Ag%y8+dHPo&J zIZovO%rO&Yf%|o6o9rsY=r8n9l}AQd#wK(PZD#_5kqMPGHmr3fAW5n2)el+)t4wLx zCSh;H6=3AfnU*8h-e}lFUH4EN*1L1wrnZ~5ez9naN7Hfu(%PpjXTRcrXmVH2Zm;RH z5|)-SzMOuj=PsMsZ+oKlsqMPeRtnZ8gwjJHi`LvoS$QcYM;@iZfE?flR$82}kAI`@ z$)`&?cg_+W^1F;$X(eyGHRkGXuAtE} zoB=GqRJMYQ5H)fq;lxK!i!7ELN_2KRR$R!-nU3f_Q>dgjJG3} zSx8%SQgu0>FlMA2sPx&ytghG5Sk~0o(~?6g2Ob+L56CfNraQtKlPW{T8rxMlW-&Qr z<8scT+AfE3DJ6$()Ype=eHPQ-0A{H_GEhZrqbx^0uXnAS-Z2ulPpS@d-{b}g6J?|PA_o`kD?&(~oMqZgY*J(F zw7xm!bw5jliqUp7&gz_mQPRFpYyqk#p;WHgO*kRPCbe%y`(|Z{24GQtSGf~v3*^{JPNy8eqL@sn z?M$ex(N<9_P91j~sE)VBEHN`-$yxnfOO#^SrL0XJOnN&nt(Dd0s+LZrVmLQe1Sm7*0iUQ|?nbX$|Bv42B{mt+Zkhee8r#3y{%K_aJVZT|m9h8rNPudQllL34z z*+%$U!tcz^7H-5a~-_SL{wb}w?@29iTIme*LTXF|w3!1?|}pAF|nH5QZO zamKPUMF*CI^8$4Vv3-!%yAQ<}%CEYp2!i)mAh{$N*0Ocfb~9@mzqaE5>+2k4H2H zI4sZVovUZ}P2z#YNnWr07_AG9^rO{zc5pc*S$qOSH>)3-vqU`5>zvn8W^#YpZyQP#QiEys7s zH2_;bAkqDe`s=p<7{H07@M}lf&*4{3SmbX2u)DyjciVq001LrY_`6pb_QmtaLin|N z8O#zH0=!yQW zDPv84CA-}LWPhjwD8=$_Ll%KZ14H) za)#&pbvb_9LgiOz*W0@w4C@77q1^>w82hfM4bDA0vDt?xzxF*>*IlS}*KXigVC)aH za^=>+>2-du*}Vgs-96AbgYyB-LIAdQc4@1p%vgGUZ9p^j3nAKH48Sg!g|xf>KLNnb z-`xPP!xsRsN2;G20Ji_^srChceP=Iz`Yijw-u>YZ_U?~=vM1k@)c#vL`|!~&za^1A zVWe;D;Y;=5XOC=;@S&%V?C|lGtvuYb=Hh}?=4Y(2v}6l=dm2NJZ2e%*rk3VB?^bNRUu(Gvz(jjVtyUe7hUHz1YjW`!hk&- z7pg)+BUCDx)(bV0^w2557|w81=Lb)0PEUs0@tC4uE7HlB#D%E+x;U*8O`B=6D-?-P9-Rz=0dP3&6ttZbPvf2sRQ4*2BDE zp#h^pMVKqL08>DoF2EsI9Bq)v7=R|^r2;S!>Nli&0B`|$fLGpD^{mGzugVWlLp9_| zovyhuQP%sLbA;e6jiRUusK{9gXsT_%DgaE7puXTLDpXhG$#R1q((iJA_0II}iut%Z(< z8)WLi2X=d@t-ld=T2eVHu3qEXgr1_(3m{m`^9VBIr(2ECY_$(9D;jI6&9b#R4ULs) zyWfA``i4nde*?gVN7XmHPX)@ZF=m_uJayZA*zUvrdEJlH*XU zj4>z+BPor8dL~#zsVS2oyy3pnE5*4-f6WnwFfPMWc=L~W+4DWNtOoQst@V- zwCb-qCFi85u_hOh1E^;z=Y>T0sK7|TobJf^$q&lG4xG_6s*9Df&Fr?Vwp_Bwt){g% z)PEN9o~Ng@l(YPN$|iRk9v)d;Em&it>;P=;aMC*4bsgKZrX0bxwzoHnTF+W*Giy`3 zMVmdS>RW40-xZr44mn;PcA%E%Ff*LSk@~Rp<>jcM4pG@+a_#{Y%;bl2L++O-P($lL zh~dhZhww2oVTxG|XEK&uC|Gu}=pit`FT!`26|k~emt&+llJkxFrnFd+;})~&y(yb{ zsCG&SRww38EbHxus)MbXq4bJR>lt-)t(lkuh3KUEQ)|q!s*l2Q-Uvkld@<7`3A;0M zX)CW4Ex$;4lD2q0W2;vS*4eA+cS83xtYe0)xl^`=3~0e@cQKte+EH6-=seSuJ7J|2 z)v?M`(sLQF%c<4uU@NMh*Byqvqm zimN43Y6p3(dni*kglb$)W0KHDIe=+7eyAm~>a%(ES!O$<|DnQ6R8{A4bWwlhSvt1`EM_PTT9CPIqp^&Kj$o(_kOxl1PbD) zFv1s^9T7Md*LKgDrS_N5^+|;8U`y96EfuYz=Np1A5~&k1*PrS4S^I#0alnnr6Vo-a zDl>g{LgylnR;;b_0%X;0SVtY0A{&{}SKrn% z*lF9+#ft5|+_OjDUs-*l<*=C0Vw5yY4nV(S9Sdi_9LQ??DaRd{0v5>c6xFj!Hc%<4 zPwRJXN@KVKya`uOq1;+Ln6t*J#+13dP49H%Hyr94d`b7EHq_7pOeR4xjDWcyUDE@pHaCsdG(jw)9OutGXYzB8n^3%~)RF1jz?BlJ2uH)#F52<8Mme ze$l>Qj7)2M&FNb-cF#t#57Z7*R-94)sg8JfRAL_Zn7E|7X0&E$CgPb0pOF6NExmM)fQc8bfPVP#>c`3?+xWU)+z~x35OOvad$I za^+fUy`_5^w{N0ftN!R0LAwBijp?~3P$EtR_5A=KR8&7weaEZZXTHMJGk36uU)QE>zj-lp~5w>~{09MfX7&~T8pGvo@eQCJYmJM!vp{^G$0nH*M#1)1H2OeEn|bA2032w!d?R()xbZJ&)x_ zUF`|vV`kC8{D|F4_Sx6*dv-51V10Vt1E|V$ZraeO#sR{k0c4Efl!NeORGQ@M8>3xO zUv;%ZjWYnW@=C+YKXCR`lHR;|{;DOegP3 zv2l$>Luo*(+HY0kr^Yyxt|(s%Ixes8j#N!!rQXp!0E`(QQGfx#fM0||UU^=y?c*oc zhVl#ewRWie37PD|FIR*C!%lwMuD0TzDg3w8F6Zvml2S5e* z+9QcOiP}}pt#iT^U;FkDA_2DU!Yz#BgK)?jm=`LdjdhWAU0>M^K2?^8l z&^G=?2;t$&k9PL%dpFkip99GPAcpkUi}< z0JeDv0MqeZ0JeE~seW*2>u2Y>$BSzKcJlhQLoh(s%isOZ6<}N1_vAHj?5%GY^p(ypNHGsmvhEtZP#?xkQefmYm6|oLf0`LwX@bhHPnb(SG{VPxjY;|2Ou_ z-~7q`{y+R1`@_HdTYLKMjqRQs%gL(g!$2Q~>7+Guo>$*~u>bOZ`0wrS|J}c_qw`a1 zPIW9-mUF@EjXAwUwJ(5cFbW(Qm2<6+E0qQHOFX9!ME#9~<)afZ57%SXLJu{Qvj)UM zK}5(T3bIPQVg*-S>0?7>Mjb(@BajGK6apihM*tE=J}(dZ1Nw~XW$8952UO)Df7I|$ zp#178z;H+bRVbG3LN1n^-yK*?uEYmduh^LR}u7c#+Ne-QAZU2(757+kD>?lJt09mNZLI6gXWeB>)B06VO z=hM=U0eES73xKg7zqz08^(hzEteNk(lj z1_%m37-5~vAj-W2p{+yqfY~->KH&h#(baajo`>gljq3m~n5hzoOFlXbH5K8ED8K+< zgf}KiNmoz-!cc%!$P=b=A)N;Xd59rlMGf_ViX5>*0J{R!7m6~K(ZN@+?nb$RR=QT4 zykI#!7a0>10DNu$nCds7dQ;zH#!JFT!~5VK09^pQP#H%qHO|Ss^+n0$p^x2CO5;Mq zX4mHI@Z!)eo?Y14lQWxI>{z0pK9wU^Upi1Lp|a9PVK~ENYhlvJlg53PBzg{@^P$k}G*P7>gU`ObKDoNs1*-c?@J>6$B>3T?tVo7U1t zHfl5Kw%FD+=7XGLYX{q|AfsNAMSvf`GTjY<%xLT>H~?$3YgQu^Gn2IY0}rfkXu!zv zMR?-~rgaBk8cWA8LKtalU8DbayX>|@#wPmUxc=tg*4sM$TVs&M2F9DP?~hFYv2+d@ zP^+JOWYHnjjmoI|CZ8E#3k6%CU@Tfe<(|-XSA8XQY)XA4G3pK;`^B2q z^|H+$O*sHdO~o9BWoL1i(l)o>u^DoG?UZFDYpgLtTFNH3%f{@HyHD4wvsttHN=44o zp!H??Jh?QpxQ$ii80F>g125$0kX(604u1-T4FE&V&A1#MlnbL3IYn~9#^m@WCsi*h zXJKBB%S_JVa)JS80E-ZKo*QYT zu4kVsJg=yHOKGcZs!p~5 zP`b`WQP-(ic|-L$uV>s*TWIN7>iGDS`qPY@>M3$bWjyB@xuSr2Sv?m*=}5j#UaYY) zVP|^h=)OI~aXxS3y7vK+n%BlHu6>i#&3wrUa>|P<>Wgv^0bzOlF3Sn0jx%#5)k9O) z(s(JWuF7#;Y2wF|W&Ik}a^rj^y7OLIC#ze$jvX=P;DASAMp zR$C$&zP=p@zn!aCeqQ^|R^>QrUFR&JQj{~9lv5w==B#7(Qo_3&q7^mn6~G+~kWo}!7J+o_jQ26rTR8jV za4Ie6p7ks^HbdK-&8d#`cO3YFzE{%y_D%d78_@j_0!mVMlDkKXV-`U@1Nf~)ETOWK zH!ITAd#I*&V7_11h*(5*Fqj+EdHM{9mYdF4ZKbL@(wI~O5N0f`wl#k|XC-DAMG0At z*v!GKEu1b|YrCzsrn*vlqpzT}AwS%pu8q+L31=nrjU?rfit4U{(k7}h4;wj~;x*M# z8KqZF&noR;2L%}QG@KuF2uAr)o@Uf1nXPdor!i0amI?VpDW`j$-CKikmeh}Rtw>>5$Bb+I)3<=ei<;W_K~5}4sn0b60G5l`KtkWB3AK^5+FwE6p0dHDe&-`r zTWZN)S$7ar(DCifDYd<-E2(IU@p?jIulkVs7>X})WibOK;jQEhBb1eElWPq1;{9Zw zhf+2)Mxe$7sC^w*{c#?hgXH{uT^wx210@86bBQC9M8NU8ft_ zV64*pkiQMZDgyVS5e|8?{Y$Xx zOWXc(02b^QsJL$6S7^UFu50863zc61_zLYe0GNy!Aw#>~*86v@hvf=FDTDKGU!dAT z$pyTUJqkh~djS~G>w2B-=Q@{;Me((F^~#qH&~$tVvqJdgA(h>2y>tf+J<@qlodLTZ>wMT1peg`kVe)+-7J0Syp1yTO*u{q*JzSD)A>`Up9faTum~{() zg`i633}Kc7E$w%0Y*SgVHQB1l$U~6I^MOd$APgPf+^qpAMKUn{=$39ohg^*LCE=lAf;*ScnCcglFTT)p;C z`@6mAE;;_qcWxo{>a`Gn?WwNj_b+W`_r&J9xxW5u4LJ5i0H(jq0LnrDc6j2dueCGa zSJzGg02Tr-;1?D`G2qvR_TxB09d{n9|8@b`!Hd^!JCC2aN^Hpi*tz<~Be#vSOWVA- zvi+ye9e^E^2>GrR@CWBRhY7X=k#7N5>jZ_v8#NS!-#|I?IdJ zSy{5i{Indyww9BgKZoVq#)5I;&1Ga|MG9`$3Okvc8>NfB4;f|uBEhIJ{i4;y2kIQoW)2=4tH7~E8X>R z?LQLN$5CwDhNAk|k;8{-27pqm%UPA<-=d6DEvvTl@m z!fyvlQ3psN@B!So+G!kRh8#x#*tOzo*!qTtT?KX*qTq0bN+O(9R9!v;q|BjL7jyx> z95lJp8UP_TU_$pi;W+^_wN)npd{ue1 ze=uVufJki^U?f8&MY{yfhGBm|Fi-5Ck>jl6fflrdQ2ply28MsoVvtUk(6ssYBP>-tb{_zZ}l(u=ZsSR>(l2|e>1 z$@~MAR!aN$L=b+D>W8u*v@TG9IRsPrg8B%`8me zT|LXKioU6q?eNv6P4AU$@5P+W9+Yf)SI*b0>RAr=aDKr5>pw21rM0GdmZOC_0eCTx zRbP|S<};DC($*(Odq~a~4vxx_Bu5;=u#i%PYNX$PdXBtC+ zgsKcD9tb$9`oIWx1bm_X8r9#TYF7ZU5w)Y?n%Y`J7L^iJv&*Vrar22C$$abTA+;5 z_exIpm{Y$l>KvItoiFN8;Ood&_LYqFvAo(B&`bLy)E^Q$Hm>Wt5gJ_6`?9F<0`*&d z$j?D|*@%uCObuA16!Gvn_GO}gfx@8bLFKOMn)yLJpSYFPR^|_9t+0@{vAXW9iHb(= zGSv-jDhDW4`yg4mLkRUhCN-eGM+*^G&=jWC<}|*bs9`;)XUoi?xv7HrBnCVS^?kqx z$?GHPhlE1L^c-@!&dTAEtsSpellG}T9@D*Y&xA3S^!(EGm^BtP4gt<|Oh(VDv)-`w zYSlv^T}igxu{rhQ=1NuPsaT#cM3p~Q(tE2qVq2$kHc=kXyQyE}rs_V`uQoR1N<-S% z?Dm}Y=by3LV9R#V@d z+L^Yb+7l3~u};YPv`uZzdcPSj=-Y<8RK=L}dn$rao2Y8cU`9oiJ)ypon=ZPti`;Ff zyntNus%t`>NAmjaE3qGaN8_%>W5NxGw4D%RlwITk1T6cks9Ajrr3dYS>Vt4c@{lop z=XH%Sy*q}~XGha|e`z_ERh=f)CNtWeP+QdZ!@|yjE$uJ)KVBk??fGF{Q{N&eyy)LW z;FsP_8k0P9S?eAa*;JoW*(2(2d5!U5m?SDT03G=SNoen(lmJ@YQ*pLz)p>m%Xe=2@ z^ZZll55rc_SW}#;cnBk5kIYIrQPKSu0j7F4X)KAU4kP6W)sNaLiqx{|Gq3(zQ-9FD zQSu^|^bMhP{;?Dpki`Eb02ukc2!9OV*K>RLSnIOg$NGKsBFG1(zx4vJ@Vd7FSYSXX z;Ma|58=wglmh1+G-9ReLk5{=chi5(K41reo_i(#kt83Sav)=Pzx~2m#-AfqqxGQ6Q z+fDn(NF)#FA`w5JDoiZD`-Isk-*|2)z!>JROXUEDg?Zhuv-vHb{9&Vy{mvfVvEIKQz4_kl^A&zuyqlHMRtK#XdxK;a{%n< z#T&QXEBaY53*@HGw{v-=-&eMAu5s$o6Yc+8_x{?BUXfVyr9J-it-b!`Cp&yjUcO`7 zdwi)e;E|oaq<^1koIBK5qV1R1kv+UPvi(OVb|Bk1)89_^?cw>6?VYoq?BY=4+<}hU z*BJWH7I!z@mUg#nS+=sbZPTkuHodZFOFJ8W&ZDOn_V%Yw_V51t|7ic`|MCB3|N1}w zJ3D-Gs&k*%!p63B7ME@7@YwdxFKqkp(Ek44{agEg{(t`8_W$~y{wMpF|M+igadXvG zSil~D42rFEK_7=%y#%@dERqi3*H{9T*QoW4GJ~F8f+(O+J>>{%ELpi-xB67m8YE9| zRjeeZHi^PS=Z?npf=TK_F(HRtj;F(&q?~pfcbs&b#Hg$bcft_A&;po*lc^6%4}}aM z7$K2kF@2x_?tpbVr-!)pIH_)3r<7~65BKT-s=NG>QN~{A1DFYcSFZu0T%p#zR_Fjb zMB-jqcFz?$!&vXR?;3yi^T+}a7}SmD7jqD(>&UovuwBPRb)Bfn2R!8ZJr)8m_79J} zRX;LU!FAPez4sB8HC(@KZ0GsiHsIIz1kW0HrFwIK1r(zm0uUBJu$$wrL0h-p$b%F~ z^laC0o=Z&S8tK9*pq4|_jGko|3i+&vSvmLRtml_1svQEpqJ-A!?*UZG7-5lw;Rd0+ zNe{0i%+ftlVW&(b>2!d%C`|L&dr{;z+wy^8}|dAP1IXvHB^FxzF!p&ye4kedtT z7yl6^c|Cxt&}>+yR+ObZRCIoG#h!n7XXh`TIlKx&8RZl?1k;!z1L%;82)M=)&;y_w zO-Ec|M;$UD0h0g_{>bx2El0jBz)&~?V?xIP!AOQ*R^8T`6`P)$vc_c7+tt1Pdp0oC z?|H!j*skY3u61&OMTWc|+_m0*)4Q#ApSykKE&vOS++Zly0AM%}!zjE6HPy2qj~l8+ zRE5c^oB`cOvYPewL=t?Qjtd%tmR`g8egag3R&A>@V6-J(=k(?Y~LTgZ0 z$(g|cYi~5Ivn3~Ut8SfbR9$MHYlJfDIj-idxmB{xPQ|7k)~&HwwCYN>JIiC*9(}iE z%}v6F5^|g#$ObGb$DD-5QGkVnd~PytL%FRmlCMIx1^yXavv*#SS@}fMGzdp&~OT2FE2Q)1J876PC-d z4uDchhVn;_twiXLM4Ie+Q^C?(3++B5n0AW~^JUS$(6SGN4pTcpkBe=M&3$ z2xM+i*I87VyP=fHxe1@8k7W9_&9coLO#O$LSZmzM>t&r^@2-xX*9^c& z4w&u*;6?5;U>?f0L`Qvr`v4GVnbOk3^nhfmRjZNbY`tOm)w-@JXK=Qla_HXY6`ts+Oe2>6n-JTXq$A8dhFz zIVdY=J)vV`?W~Q-fgO{BIxa^(+Sd50bD;uD%ZW#Yk?iK#A!+xx+8())NTwZ=V;@2! zpi#dZYXD1Ww&L*ALo2lp3M4|eNL&r{94a#zg8G8)m0V}Qup#YFSR-MOgZlfB+6$12 zr0?YZV!{MwhGfRfxD16D^%w)FRW&}U&Y4XV_%)bQ-&b1#<^Xkox-0?5sb$>>MR zsC^v=?WU40nntR?K3+IR#`wHSWw*r z%C=#ZE2T0`Znmv7PwqX{srqC}^-Kc$9DQ2#MiTqVOu@2R=U&Ux87t{owwG(Rusx|U zZp<1>MO%0{X=8-}o84)79>eUE`hlKRvd*lb8EbFWt+uRp#9Y>f(hqE+s=nV;ALUu8 zE(YU+_CW74CUY51kE;HMELPGp%j;eXYHJgN)~CN^>S_;ad(6x@QHxq;N^NFJ?Xfnd zaZ&FswH1=!le=)Z+GnH9LCY=c-M*l@T2Q-c4OwnAV^b#`TYI)_3un`|d@*aeIo)?t z?MLur8T;BM>3?$t)eC@d%nItS%O@)iw+W>sG!XzvQumbV3w0g+;08=Ru>SOb z?!REw#k&6uNQn`u2w>_baf&Mnuiyrl73`!T!gu#N>Ll7Jrt8k4Y)9~4E}u+IM=P8%P!@_fk>O_fP) z7G)=D!eHVJ^?N-ZCahrWC&@mLi!e=Qt0XBuDpf+cN7dIHmW3cz`=Aml%<8>3qcL6W zu(83j_hJvwQW$pvOXY~F~qYf;%dH7=k z1wJ!tquS5gM3Ha1$e#gVJ<#j61(2&Z%<)UxdM$)kU)pvTfZc$l-?rNzE3hx^7uxOc z#qgK_WC65Deotchy~il9wEZzK>BY4X1{uIFKp3D*`vITs*exifeSuEbrgK~ascQpr zp&IM{W*^y&(kie}Z57(xzxUeReX;QT%qAIb3->3y5zrN?y4Z#i3=6>)+d>G&{s9zI zeLa2aP>gloU&o`~+PZpa8&85fUB7}@-Rp+G*{|2G_qzqT0^8;~J+Lb(Klf!CM7+Kt`X-lNvKYrVj$ z*ML}uZ~yrg0I(nI`0bB=?S-RDn|^qzkL5F)I{;P%z$(o1^;^b1x2y}d0A3i73uB$_ zxBh-|W~&!hw=9HU%nBL8FU)g)b;BP4U?{vcFKz%Bp^t~J-ny}kzY!t{2-~`R?68bk zBR3s@J+p(C9HajK{Fz<6eQi%ZzPG1xeq%E&1F9pNCrULJlgf;yB|N> z`yaovw?BNgzx~I5W&hp({=e9t{^4)!<>zy`RVQdm%0D!k}O-!Gr?Px8Cts5 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 pWHs|GN0L^rxdSF+{AGicn|lrqyuWQTc Date: Tue, 26 Aug 2025 10:56:05 +0200 Subject: [PATCH 022/355] MagicStack: check for StackEntries in addAllTriggeredAbilities --- forge-game/src/main/java/forge/game/zone/MagicStack.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/forge-game/src/main/java/forge/game/zone/MagicStack.java b/forge-game/src/main/java/forge/game/zone/MagicStack.java index 6b20d52e089..0c76a6394d0 100644 --- a/forge-game/src/main/java/forge/game/zone/MagicStack.java +++ b/forge-game/src/main/java/forge/game/zone/MagicStack.java @@ -854,6 +854,9 @@ public class MagicStack /* extends MyObservable */ implements Iterable Date: Tue, 26 Aug 2025 20:51:17 +0800 Subject: [PATCH 023/355] update Console Textfield navigation --- .../src/forge/adventure/stage/Console.java | 152 +++++++++++++----- 1 file changed, 113 insertions(+), 39 deletions(-) diff --git a/forge-gui-mobile/src/forge/adventure/stage/Console.java b/forge-gui-mobile/src/forge/adventure/stage/Console.java index 2d320614c98..aa8755d0256 100644 --- a/forge-gui-mobile/src/forge/adventure/stage/Console.java +++ b/forge-gui-mobile/src/forge/adventure/stage/Console.java @@ -1,22 +1,26 @@ package forge.adventure.stage; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.InputListener; import com.badlogic.gdx.scenes.scene2d.ui.*; import com.badlogic.gdx.utils.Align; +import com.badlogic.gdx.utils.Array; import forge.Forge; import forge.adventure.util.Controls; public class Console extends Window { private final ScrollPane scroll; - private String last = ""; + private String last = ""; private final InputLine input; private final Table content; public void toggle() { - if(isVisible()) { + if (isVisible()) { setVisible(false); getStage().unfocus(input); + Gdx.input.setOnscreenKeyboardVisible(false); } else { if (!Forge.advFreezePlayerControls) { setVisible(true); @@ -27,47 +31,117 @@ public class Console extends Window { static class InputLine extends TextField { private final Console console; + private final Array commands = new Array<>(); + private int index; + private final TextField textField; public InputLine(Console console) { super("", Controls.getSkin()); this.console = console; - writeEnters=true; + writeEnters = true; + textField = this; } @Override - protected InputListener createInputListener () { - TextField self = this; - return new TextFieldClickListener() - { + protected InputListener createInputListener() { + return new TextFieldClickListener() { @Override - public boolean keyTyped (InputEvent event, char character) { - // Disallow "typing" most ASCII control characters, which would show up as a space when onlyFontChars is true. - switch (character) { - case BACKSPACE: - break; - case TAB: - if(self.getText().isEmpty()) - { - self.setText(console.last); - } - else - { - self.setText(console.complete(self.getText())); - self.setCursorPosition(Integer.MAX_VALUE); - } - break; - case NEWLINE: - case CARRIAGE_RETURN: - console.command(self.getText()); - self.setText(""); - return false; - default: - if (character < 32) return false; + public boolean keyUp(InputEvent event, int keycode) { + switch (keycode) { + case Input.Keys.UP: + if (!textField.getText().isEmpty()) { + index = commands.indexOf(textField.getText(), false) - 1; + if (index >= 0 && index < commands.size) { + textField.setText(commands.get(index)); + console.last = textField.getText(); + index = commands.indexOf(console.last, false); + textField.setCursorPosition(Integer.MAX_VALUE); + } else { + index = 0; + textField.setText(commands.get(index)); + textField.setCursorPosition(Integer.MAX_VALUE); + } + } else if (!commands.isEmpty()) { + textField.setText(commands.get(commands.size - 1)); + console.last = textField.getText(); + index = commands.indexOf(console.last, false); + textField.setCursorPosition(Integer.MAX_VALUE); + } + break; + case Input.Keys.DOWN: + if (!textField.getText().isEmpty()) { + index = commands.indexOf(textField.getText(), false) + 1; + if (index >= 0 && index < commands.size) { + textField.setText(commands.get(index)); + console.last = textField.getText(); + index = commands.indexOf(console.last, false); + textField.setCursorPosition(Integer.MAX_VALUE); + } else { + index = commands.size - 1; + textField.setText(commands.get(index)); + textField.setCursorPosition(Integer.MAX_VALUE); + } + } else if (!commands.isEmpty()) { + textField.setText(commands.get(0)); + console.last = textField.getText(); + index = commands.indexOf(console.last, false); + textField.setCursorPosition(Integer.MAX_VALUE); + } + break; + case Input.Keys.LEFT: + if (!textField.getText().isEmpty()) { + if ((textField.getCursorPosition() - 1) >= 0) + textField.setCursorPosition(textField.getCursorPosition() - 1); + } + break; + case Input.Keys.RIGHT: + if (!textField.getText().isEmpty()) { + if ((textField.getCursorPosition() + 1) <= textField.getText().length()) + textField.setCursorPosition(textField.getCursorPosition() + 1); + } + break; + case Input.Keys.V: + if (Gdx.input.isKeyPressed(Input.Keys.CONTROL_LEFT)) { + if (Forge.getClipboard().hasContents()) { + textField.setText(Forge.getClipboard().getContents()); + textField.setCursorPosition(Integer.MAX_VALUE); + } + } + default: + break; + } + return super.keyUp(event, keycode); } - return super.keyTyped(event,character); + + @Override + public boolean keyTyped(InputEvent event, char character) { + // Disallow "typing" most ASCII control characters, which would show up as a space when onlyFontChars is true. + switch (character) { + case BACKSPACE: + break; + case TAB: + if (textField.getText().isEmpty()) { + textField.setText(console.last); + } else { + textField.setText(console.complete(textField.getText())); + textField.setCursorPosition(Integer.MAX_VALUE); + } + break; + case NEWLINE: + case CARRIAGE_RETURN: + commands.add(textField.getText()); + console.command(textField.getText()); + textField.setText(""); + return false; + default: + if (character < 32) + return false; + } + return super.keyTyped(event, character); } }; } + } private String complete(String text) { @@ -79,13 +153,13 @@ public class Console extends Window { toggle(); return; } - CellOh*`almI$!>{{81bP}*8BbS6 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

    DBDudyxjW2_^!JFR@X;sfC=7n34Hi~+lD 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 + + {"startBattleWithCardInCommandZone": [ "Emrakul's Presence" ] + } + From bc3faa88c4d565b6e01e91820da171cfba1689ad Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Thu, 11 Sep 2025 18:55:44 +0800 Subject: [PATCH 174/355] fix Keyword Advanced Search --- .../main/java/forge/game/keyword/Keyword.java | 6 + .../forge/itemmanager/AdvancedSearch.java | 329 +++++++++++------- 2 files changed, 200 insertions(+), 135 deletions(-) diff --git a/forge-game/src/main/java/forge/game/keyword/Keyword.java b/forge-game/src/main/java/forge/game/keyword/Keyword.java index d4b698b4ddb..c6f08b0130f 100644 --- a/forge-game/src/main/java/forge/game/keyword/Keyword.java +++ b/forge-game/src/main/java/forge/game/keyword/Keyword.java @@ -278,6 +278,12 @@ public enum Keyword { return keywords; } + public static Keyword get(String key) { + if (key.isEmpty()) + return null; + return Arrays.stream(values()).filter(k -> key.equalsIgnoreCase(k.displayName)).findFirst().orElse(null); + } + private static final Map> cardKeywordSetLookup = new HashMap<>(); public static Set getKeywordSet(PaperCard card) { diff --git a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java index 81b9d1771da..37ed9f18eed 100644 --- a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java +++ b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java @@ -57,6 +57,7 @@ public class AdvancedSearch { protected String getItemValue(PaperCard input) { throw new RuntimeException("getItemValues should be called instead"); } + @Override protected Set getItemValues(PaperCard input) { Set names = new HashSet<>(); @@ -77,6 +78,7 @@ public class AdvancedSearch { protected String getItemValue(PaperCard input) { throw new RuntimeException("getItemValues should be called instead"); } + @Override protected Set getItemValues(PaperCard input) { Set names = new HashSet<>(); @@ -98,21 +100,31 @@ public class AdvancedSearch { protected Keyword getItemValue(PaperCard input) { throw new RuntimeException("getItemValues should be called instead"); } + @Override protected Set getItemValues(PaperCard input) { CardSplitType cardSplitType = input.getRules().getSplitType(); + Set keywords = new HashSet<>(); if (cardSplitType != CardSplitType.None && cardSplitType != CardSplitType.Split) { - Set keywords = new HashSet<>(); if (input.getRules().getOtherPart() != null) { - PaperCard otherPart = FModel.getMagicDb().getCommonCards().getCard(input.getRules().getOtherPart().getName()); - if (otherPart != null) { - keywords.addAll(Keyword.getKeywordSet(otherPart)); - keywords.addAll(Keyword.getKeywordSet(input)); + if (input.getRules().getOtherPart().getKeywords() != null) { + for (String key : input.getRules().getOtherPart().getKeywords()) { + Keyword keyword = Keyword.get(key); + if (keyword != null) + keywords.add(keyword); + } } } return keywords; } - return Keyword.getKeywordSet(input); + if (input.getRules().getMainPart().getKeywords() != null) { + for (String key : input.getRules().getMainPart().getKeywords()) { + Keyword keyword = Keyword.get(key); + if (keyword != null) + keywords.add(keyword); + } + } + return keywords; } }), CARD_SET("lblSet", PaperCard.class, FilterOperator.SINGLE_LIST_OPS, new CustomListEvaluator(FModel.getMagicDb().getSortedEditions(), CardEdition::getCode) { @@ -121,11 +133,12 @@ public class AdvancedSearch { return FModel.getMagicDb().getCardEdition(input.getEdition()); } }), - CARD_FORMAT("lblFormat", PaperCard.class, FilterOperator.MULTI_LIST_OPS, new CustomListEvaluator((List)FModel.getFormats().getFilterList()) { + CARD_FORMAT("lblFormat", PaperCard.class, FilterOperator.MULTI_LIST_OPS, new CustomListEvaluator((List) FModel.getFormats().getFilterList()) { @Override protected GameFormat getItemValue(PaperCard input) { throw new RuntimeException("getItemValues should be called instead"); } + @Override protected Set getItemValues(PaperCard input) { return FModel.getFormats().getAllFormatsOfCard(input); @@ -136,6 +149,7 @@ public class AdvancedSearch { protected ConquestPlane getItemValue(PaperCard input) { throw new RuntimeException("getItemValues should be called instead"); } + @Override protected Set getItemValues(PaperCard input) { return ConquestPlane.getAllPlanesOfCard(input); @@ -146,6 +160,7 @@ public class AdvancedSearch { protected ConquestRegion getItemValue(PaperCard input) { throw new RuntimeException("getItemValues should be called instead"); } + @Override protected Set getItemValues(PaperCard input) { return ConquestRegion.getAllRegionsOfCard(input); @@ -156,6 +171,7 @@ public class AdvancedSearch { protected QuestWorld getItemValue(PaperCard input) { throw new RuntimeException("getItemValues should be called instead"); } + @Override protected Set getItemValues(PaperCard input) { return QuestWorld.getAllQuestWorldsOfCard(input); @@ -166,6 +182,7 @@ public class AdvancedSearch { protected MagicColor.Color getItemValue(PaperCard input) { throw new RuntimeException("getItemValues should be called instead"); } + @Override protected Set getItemValues(PaperCard input) { return input.getRules().getColor().toEnumSet(); @@ -176,6 +193,7 @@ public class AdvancedSearch { protected MagicColor.Color getItemValue(PaperCard input) { throw new RuntimeException("getItemValues should be called instead"); } + @Override protected Set getItemValues(PaperCard input) { return input.getRules().getColorIdentity().toEnumSet(); @@ -192,6 +210,7 @@ public class AdvancedSearch { protected String getItemValue(PaperCard input) { throw new RuntimeException("getItemValues should be called instead"); } + @Override protected Set getItemValues(PaperCard input) { final CardType type = input.getRules().getType(); @@ -228,6 +247,7 @@ public class AdvancedSearch { protected String getItemValue(PaperCard input) { throw new RuntimeException("getItemValues should be called instead"); } + @Override protected Set getItemValues(PaperCard input) { CardSplitType cardSplitType = input.getRules().getSplitType(); @@ -243,7 +263,7 @@ public class AdvancedSearch { return subtypes; } } - return (Set)input.getRules().getType().getSubtypes(); + return (Set) input.getRules().getType().getSubtypes(); } }), CARD_CMC("lblCMC", PaperCard.class, FilterOperator.NUMBER_OPS, new NumericEvaluator(0, 20) { @@ -294,7 +314,9 @@ public class AdvancedSearch { @Override protected Boolean getItemValue(PaperCard input) { List cards = FModel.getMagicDb().getCommonCards().getAllCards(input.getName()); - if (cards.size() <= 1) { return true; } + if (cards.size() <= 1) { + return true; + } cards.sort(FModel.getMagicDb().getEditions().CARD_EDITION_COMPARATOR); return cards.get(0) == input; @@ -318,7 +340,7 @@ public class AdvancedSearch { if (!(input instanceof PaperCard)) { return ""; } - return ((PaperCard)input).getRules().getOracleText(); + return ((PaperCard) input).getRules().getOracleText(); } }), INVITEM_KEYWORDS("lblKeywords", InventoryItem.class, FilterOperator.COLLECTION_OPS, new CustomListEvaluator(Keyword.getAllKeywords()) { @@ -326,38 +348,40 @@ public class AdvancedSearch { protected Keyword getItemValue(InventoryItem input) { throw new RuntimeException("getItemValues should be called instead"); } + @Override protected Set getItemValues(InventoryItem input) { if (!(input instanceof PaperCard)) { return new HashSet<>(); } - return Keyword.getKeywordSet((PaperCard)input); + return Keyword.getKeywordSet((PaperCard) input); } }), INVITEM_SET("lblSet", InventoryItem.class, FilterOperator.SINGLE_LIST_OPS, new CustomListEvaluator(FModel.getMagicDb().getSortedEditions(), CardEdition::getCode) { @Override protected CardEdition getItemValue(InventoryItem input) { if (input instanceof PaperCard) { - CardEdition set = FModel.getMagicDb().getEditions().get(((PaperCard)input).getEdition()); + CardEdition set = FModel.getMagicDb().getEditions().get(((PaperCard) input).getEdition()); return set; } else if (input instanceof SealedProduct) { - return FModel.getMagicDb().getEditions().get(((SealedProduct)input).getEdition()); + return FModel.getMagicDb().getEditions().get(((SealedProduct) input).getEdition()); } else { return CardEdition.UNKNOWN; } } }), - INVITEM_FORMAT("lblFormat", InventoryItem.class, FilterOperator.MULTI_LIST_OPS, new CustomListEvaluator((List)FModel.getFormats().getFilterList()) { + INVITEM_FORMAT("lblFormat", InventoryItem.class, FilterOperator.MULTI_LIST_OPS, new CustomListEvaluator((List) FModel.getFormats().getFilterList()) { @Override protected GameFormat getItemValue(InventoryItem input) { throw new RuntimeException("getItemValues should be called instead"); } + @Override protected Set getItemValues(InventoryItem input) { if (!(input instanceof PaperCard)) { return new HashSet<>(); } - return FModel.getFormats().getAllFormatsOfCard((PaperCard)input); + return FModel.getFormats().getAllFormatsOfCard((PaperCard) input); } }), INVITEM_PLANE("lblPlane", InventoryItem.class, FilterOperator.MULTI_LIST_OPS, new CustomListEvaluator(ImmutableList.copyOf(FModel.getPlanes())) { @@ -365,12 +389,13 @@ public class AdvancedSearch { protected ConquestPlane getItemValue(InventoryItem input) { throw new RuntimeException("getItemValues should be called instead"); } + @Override protected Set getItemValues(InventoryItem input) { if (!(input instanceof PaperCard)) { return new HashSet<>(); } - return ConquestPlane.getAllPlanesOfCard((PaperCard)input); + return ConquestPlane.getAllPlanesOfCard((PaperCard) input); } }), INVITEM_REGION("lblRegion", InventoryItem.class, FilterOperator.MULTI_LIST_OPS, new CustomListEvaluator(ConquestRegion.getAllRegions()) { @@ -378,12 +403,13 @@ public class AdvancedSearch { protected ConquestRegion getItemValue(InventoryItem input) { throw new RuntimeException("getItemValues should be called instead"); } + @Override protected Set getItemValues(InventoryItem input) { if (!(input instanceof PaperCard)) { return new HashSet<>(); } - return ConquestRegion.getAllRegionsOfCard((PaperCard)input); + return ConquestRegion.getAllRegionsOfCard((PaperCard) input); } }), INVITEM_QUEST_WORLD("lblQuestWorld", InventoryItem.class, FilterOperator.MULTI_LIST_OPS, new CustomListEvaluator(ImmutableList.copyOf(FModel.getWorlds())) { @@ -391,12 +417,13 @@ public class AdvancedSearch { protected QuestWorld getItemValue(InventoryItem input) { throw new RuntimeException("getItemValues should be called instead"); } + @Override protected Set getItemValues(InventoryItem input) { if (!(input instanceof PaperCard)) { return new HashSet<>(); } - return QuestWorld.getAllQuestWorldsOfCard(((PaperCard)input)); + return QuestWorld.getAllQuestWorldsOfCard(((PaperCard) input)); } }), INVITEM_COLOR("lblColor", InventoryItem.class, FilterOperator.COMBINATION_OPS, new ColorEvaluator() { @@ -404,12 +431,13 @@ public class AdvancedSearch { protected MagicColor.Color getItemValue(InventoryItem input) { throw new RuntimeException("getItemValues should be called instead"); } + @Override protected Set getItemValues(InventoryItem input) { if (!(input instanceof PaperCard)) { return new HashSet<>(); } - return ((PaperCard)input).getRules().getColor().toEnumSet(); + return ((PaperCard) input).getRules().getColor().toEnumSet(); } }), INVITEM_COLOR_IDENTITY("lblColorIdentity", InventoryItem.class, FilterOperator.COMBINATION_OPS, new ColorEvaluator() { @@ -417,12 +445,13 @@ public class AdvancedSearch { protected MagicColor.Color getItemValue(InventoryItem input) { throw new RuntimeException("getItemValues should be called instead"); } + @Override protected Set getItemValues(InventoryItem input) { if (!(input instanceof PaperCard)) { return new HashSet<>(); } - return ((PaperCard)input).getRules().getColorIdentity().toEnumSet(); + return ((PaperCard) input).getRules().getColorIdentity().toEnumSet(); } }), INVITEM_COLOR_COUNT("lblColorCount", InventoryItem.class, FilterOperator.NUMBER_OPS, new NumericEvaluator(0, 5) { @@ -431,7 +460,7 @@ public class AdvancedSearch { if (!(input instanceof PaperCard)) { return 0; } - return ((PaperCard)input).getRules().getColor().countColors(); + return ((PaperCard) input).getRules().getColor().countColors(); } }), INVITEM_TYPE("lblType", InventoryItem.class, FilterOperator.COMBINATION_OPS, new CustomListEvaluator(CardType.getCombinedSuperAndCoreTypes()) { @@ -439,12 +468,13 @@ public class AdvancedSearch { protected String getItemValue(InventoryItem input) { throw new RuntimeException("getItemValues should be called instead"); } + @Override protected Set getItemValues(InventoryItem input) { if (!(input instanceof PaperCard)) { return new HashSet<>(); } - final CardType type = ((PaperCard)input).getRules().getType(); + final CardType type = ((PaperCard) input).getRules().getType(); final Set types = new HashSet<>(); for (Supertype t : type.getSupertypes()) { types.add(t.name()); @@ -460,12 +490,13 @@ public class AdvancedSearch { protected String getItemValue(InventoryItem input) { throw new RuntimeException("getItemValues should be called instead"); } + @Override protected Set getItemValues(InventoryItem input) { if (!(input instanceof PaperCard)) { return new HashSet<>(); } - return (Set)((PaperCard)input).getRules().getType().getSubtypes(); + return (Set) ((PaperCard) input).getRules().getType().getSubtypes(); } }), INVITEM_CMC("lblCMC", InventoryItem.class, FilterOperator.NUMBER_OPS, new NumericEvaluator(0, 20) { @@ -474,7 +505,7 @@ public class AdvancedSearch { if (!(input instanceof PaperCard)) { return 0; } - return ((PaperCard)input).getRules().getManaCost().getCMC(); + return ((PaperCard) input).getRules().getManaCost().getCMC(); } }), INVITEM_GENERIC_COST("lblGenericCost", InventoryItem.class, FilterOperator.NUMBER_OPS, new NumericEvaluator(0, 20) { @@ -483,7 +514,7 @@ public class AdvancedSearch { if (!(input instanceof PaperCard)) { return 0; } - return ((PaperCard)input).getRules().getManaCost().getGenericCost(); + return ((PaperCard) input).getRules().getManaCost().getGenericCost(); } }), INVITEM_POWER("lblPower", InventoryItem.class, FilterOperator.NUMBER_OPS, new NumericEvaluator(0, 20) { @@ -492,7 +523,7 @@ public class AdvancedSearch { if (!(input instanceof PaperCard)) { return null; } - CardRules rules = ((PaperCard)input).getRules(); + CardRules rules = ((PaperCard) input).getRules(); if (rules.getType().isCreature()) { return rules.getIntPower(); } @@ -505,7 +536,7 @@ public class AdvancedSearch { if (!(input instanceof PaperCard)) { return null; } - CardRules rules = ((PaperCard)input).getRules(); + CardRules rules = ((PaperCard) input).getRules(); if (rules.getType().isCreature()) { return rules.getIntToughness(); } @@ -518,14 +549,16 @@ public class AdvancedSearch { if (!(input instanceof PaperCard)) { return ""; } - return ((PaperCard)input).getRules().getManaCost().toString(); + return ((PaperCard) input).getRules().getManaCost().toString(); } }), INVITEM_FIRST_PRINTING("lblFirstPrinting", InventoryItem.class, FilterOperator.BOOLEAN_OPS, new BooleanEvaluator() { @Override protected Boolean getItemValue(InventoryItem input) { List cards = FModel.getMagicDb().getCommonCards().getAllCards(input.getName()); - if (cards.size() <= 1) { return true; } + if (cards.size() <= 1) { + return true; + } cards.sort(FModel.getMagicDb().getEditions().CARD_EDITION_COMPARATOR); return cards.get(0) == input; @@ -537,7 +570,7 @@ public class AdvancedSearch { if (!(input instanceof PaperCard)) { return CardRarity.Special; } - return ((PaperCard)input).getRarity(); + return ((PaperCard) input).getRarity(); } }), INVITEM_BUY_PRICE("lblBuyPrice", InventoryItem.class, FilterOperator.NUMBER_OPS, new NumericEvaluator(0, 10000000) { @@ -576,11 +609,12 @@ public class AdvancedSearch { return input.isFavoriteDeck(); } }), - DECK_FORMAT("lblFormat", DeckProxy.class, FilterOperator.MULTI_LIST_OPS, new CustomListEvaluator((List)FModel.getFormats().getFilterList()) { + DECK_FORMAT("lblFormat", DeckProxy.class, FilterOperator.MULTI_LIST_OPS, new CustomListEvaluator((List) FModel.getFormats().getFilterList()) { @Override protected GameFormat getItemValue(DeckProxy input) { throw new RuntimeException("getItemValues should be called instead"); } + @Override protected Set getItemValues(DeckProxy input) { return input.getExhaustiveFormats(); @@ -591,6 +625,7 @@ public class AdvancedSearch { protected QuestWorld getItemValue(DeckProxy input) { throw new RuntimeException("getItemValues should be called instead"); } + @Override protected Set getItemValues(DeckProxy input) { return QuestWorld.getAllQuestWorldsOfDeck(input.getDeck()); @@ -601,6 +636,7 @@ public class AdvancedSearch { protected MagicColor.Color getItemValue(DeckProxy input) { throw new RuntimeException("getItemValues should be called instead"); } + @Override protected Set getItemValues(DeckProxy input) { return input.getColor().toEnumSet(); @@ -611,6 +647,7 @@ public class AdvancedSearch { protected MagicColor.Color getItemValue(DeckProxy input) { throw new RuntimeException("getItemValues should be called instead"); } + @Override protected Set getItemValues(DeckProxy input) { return input.getColorIdentity().toEnumSet(); @@ -673,6 +710,7 @@ public class AdvancedSearch { protected MagicColor.Color getItemValue(ConquestCommander input) { throw new RuntimeException("getItemValues should be called instead"); } + @Override protected Set getItemValues(ConquestCommander input) { return input.getCard().getRules().getColorIdentity().toEnumSet(); @@ -825,6 +863,7 @@ public class AdvancedSearch { } return false; } + @Override public boolean apply(Set inputs, List values) { if (inputs != null && !inputs.isEmpty() && !values.isEmpty()) { @@ -846,6 +885,7 @@ public class AdvancedSearch { } return false; } + @Override public boolean apply(Set inputs, List values) { if (inputs != null && !inputs.isEmpty() && !values.isEmpty()) { @@ -867,6 +907,7 @@ public class AdvancedSearch { } return false; } + @Override public boolean apply(Set inputs, List values) { if (inputs != null && !inputs.isEmpty() && !values.isEmpty()) { @@ -890,6 +931,7 @@ public class AdvancedSearch { } return false; } + @Override public boolean apply(Set inputs, List values) { if (inputs != null && inputs.size() == values.size()) { @@ -915,6 +957,7 @@ public class AdvancedSearch { } return false; } + @Override public boolean apply(Set inputs, List values) { if (inputs != null) { @@ -939,6 +982,7 @@ public class AdvancedSearch { } return false; } + @Override public boolean apply(Set inputs, List values) { if (inputs != null) { @@ -959,6 +1003,7 @@ public class AdvancedSearch { } return false; } + @Override public boolean apply(Set inputs, List values) { if (inputs != null) { @@ -977,6 +1022,7 @@ public class AdvancedSearch { public boolean apply(Object input, List values) { throw new RuntimeException("shouldn't be called with a single input"); } + @Override public boolean apply(Set inputs, List values) { if (inputs != null) { @@ -994,6 +1040,7 @@ public class AdvancedSearch { public boolean apply(Object input, List values) { throw new RuntimeException("shouldn't be called with a single input"); } + @Override public boolean apply(Set inputs, List values) { if (inputs != null) { @@ -1030,32 +1077,32 @@ public class AdvancedSearch { } }); - public static final FilterOperator[] BOOLEAN_OPS = new FilterOperator[] { - IS_TRUE, IS_FALSE + public static final FilterOperator[] BOOLEAN_OPS = new FilterOperator[]{ + IS_TRUE, IS_FALSE }; - public static final FilterOperator[] NUMBER_OPS = new FilterOperator[] { - EQUALS, NOT_EQUALS, GREATER_THAN, LESS_THAN, GT_OR_EQUAL, LT_OR_EQUAL, BETWEEN_INCLUSIVE, BETWEEN_EXCLUSIVE + public static final FilterOperator[] NUMBER_OPS = new FilterOperator[]{ + EQUALS, NOT_EQUALS, GREATER_THAN, LESS_THAN, GT_OR_EQUAL, LT_OR_EQUAL, BETWEEN_INCLUSIVE, BETWEEN_EXCLUSIVE }; - public static final FilterOperator[] STRING_OPS = new FilterOperator[] { - CONTAINS, STARTS_WITH, ENDS_WITH + public static final FilterOperator[] STRING_OPS = new FilterOperator[]{ + CONTAINS, STARTS_WITH, ENDS_WITH }; - public static final FilterOperator[] STRINGS_OPS = new FilterOperator[] { - CONTAINS, STARTS_WITH, ENDS_WITH + public static final FilterOperator[] STRINGS_OPS = new FilterOperator[]{ + CONTAINS, STARTS_WITH, ENDS_WITH }; - public static final FilterOperator[] SINGLE_LIST_OPS = new FilterOperator[] { - IS_ANY + public static final FilterOperator[] SINGLE_LIST_OPS = new FilterOperator[]{ + IS_ANY }; - public static final FilterOperator[] MULTI_LIST_OPS = new FilterOperator[] { - IS_ANY + public static final FilterOperator[] MULTI_LIST_OPS = new FilterOperator[]{ + IS_ANY }; - public static final FilterOperator[] COMBINATION_OPS = new FilterOperator[] { - IS_EXACTLY, CONTAINS_ANY, CONTAINS_ALL + public static final FilterOperator[] COMBINATION_OPS = new FilterOperator[]{ + IS_EXACTLY, CONTAINS_ANY, CONTAINS_ALL }; - public static final FilterOperator[] COLLECTION_OPS = new FilterOperator[] { - CONTAIN_ANY, CONTAIN_ALL + public static final FilterOperator[] COLLECTION_OPS = new FilterOperator[]{ + CONTAIN_ANY, CONTAIN_ALL }; - public static final FilterOperator[] DECK_CONTENT_OPS = new FilterOperator[] { - CONTAINS_CARD, CONTAINS_X_COPIES_OF_CARD + public static final FilterOperator[] DECK_CONTENT_OPS = new FilterOperator[]{ + CONTAINS_CARD, CONTAINS_X_COPIES_OF_CARD }; private final String caption, formatStr; @@ -1104,8 +1151,8 @@ public class AdvancedSearch { final OperatorEvaluator evaluator = (OperatorEvaluator) operator.evaluator; Predicate predicate = input -> evaluator.apply(getItemValue(input), values); - final FilterOperator[][] manyValueOperators = { FilterOperator.MULTI_LIST_OPS, - FilterOperator.COMBINATION_OPS, FilterOperator.COLLECTION_OPS, FilterOperator.STRINGS_OPS }; + final FilterOperator[][] manyValueOperators = {FilterOperator.MULTI_LIST_OPS, + FilterOperator.COMBINATION_OPS, FilterOperator.COLLECTION_OPS, FilterOperator.STRINGS_OPS}; for (FilterOperator[] oper : manyValueOperators) { if (option.operatorOptions == oper) { predicate = input -> evaluator.apply(getItemValues(input), values); @@ -1125,8 +1172,7 @@ public class AdvancedSearch { final List values; try { values = getValuesFromString(initialValueText, option, operator); - } - catch(Exception e) { + } catch (Exception e) { e.printStackTrace(); return null; } @@ -1134,8 +1180,11 @@ public class AdvancedSearch { } protected abstract List getValues(FilterOption option, FilterOperator operator); + protected abstract List getValuesFromString(String valueText, FilterOption option, FilterOperator operator); + protected abstract String getCaption(List values, FilterOption option, FilterOperator operator); + protected abstract V getItemValue(T input); protected Set getItemValues(T input) { //available for options that have multiple inputs @@ -1178,12 +1227,13 @@ public class AdvancedSearch { String message; if (operator.valueCount == FilterValueCount.ONE) { message = option.name + " " + operator.caption + " ?"; - } - else { + } else { message = "? " + operator.caption.replace("|", " " + option.name + " "); } Integer lowerBound = SGuiChoose.getInteger(message, min, max); - if (lowerBound == null) { return null; } + if (lowerBound == null) { + return null; + } final List values = new ArrayList<>(); values.add(lowerBound); @@ -1195,7 +1245,9 @@ public class AdvancedSearch { upperBoundMin += 2; //if exclusive, ensure it's possible to have numbers in between } Integer upperBound = SGuiChoose.getInteger(message, upperBoundMin, max); - if (upperBound == null) { return null; } + if (upperBound == null) { + return null; + } values.add(upperBound); } @@ -1226,7 +1278,9 @@ public class AdvancedSearch { protected List getValues(FilterOption option, FilterOperator operator) { String message = option.name + " " + operator.caption + " ?"; String value = SOptionPane.showInputDialog("", message, null, initialInput); - if (value == null) { return null; } + if (value == null) { + return null; + } initialInput = value; //store value as initial input for next time @@ -1253,9 +1307,11 @@ public class AdvancedSearch { public CustomListEvaluator(Collection choices0) { this(choices0, null, null); } + public CustomListEvaluator(Collection choices0, Function toShortString0) { this(choices0, toShortString0, null); } + public CustomListEvaluator(Collection choices0, Function toShortString0, Function toLongString0) { choices = choices0; toShortString = toShortString0; @@ -1276,9 +1332,9 @@ public class AdvancedSearch { } private boolean eitherStringMatches(V choice, String name) { - if(toLongString != null && name.equals(toLongString.apply(choice))) + if (toLongString != null && name.equals(toLongString.apply(choice))) return true; - if(toShortString != null) + if (toShortString != null) return name.equals(toShortString.apply(choice)); return name.equals(choice.toString()); } @@ -1287,16 +1343,16 @@ public class AdvancedSearch { protected String getCaption(List values, FilterOption option, FilterOperator operator) { String valuesStr; switch (operator.valueCount) { - case MANY: - valuesStr = formatValues(values, " ", " "); - break; - case MANY_OR: - valuesStr = formatValues(values, ", ", " or "); - break; - case MANY_AND: - default: - valuesStr = formatValues(values, ", ", " and "); - break; + case MANY: + valuesStr = formatValues(values, " ", " "); + break; + case MANY_OR: + valuesStr = formatValues(values, ", ", " or "); + break; + case MANY_AND: + default: + valuesStr = formatValues(values, ", ", " and "); + break; } return String.format(operator.formatStr, option.name, valuesStr); } @@ -1304,18 +1360,18 @@ public class AdvancedSearch { protected String formatValues(List values, String delim, String finalDelim) { int valueCount = values.size(); switch (valueCount) { - case 1: - return formatValue(values.get(0)); - case 2: - return formatValue(values.get(0)) + finalDelim + formatValue(values.get(1)); - default: - int lastValueIdx = valueCount - 1; - StringBuilder result = new StringBuilder(formatValue(values.get(0))); - for (int i = 1; i < lastValueIdx; i++) { - result.append(delim).append(formatValue(values.get(i))); - } - result.append(delim.trim()).append(finalDelim).append(formatValue(values.get(lastValueIdx))); - return result.toString(); + case 1: + return formatValue(values.get(0)); + case 2: + return formatValue(values.get(0)) + finalDelim + formatValue(values.get(1)); + default: + int lastValueIdx = valueCount - 1; + StringBuilder result = new StringBuilder(formatValue(values.get(0))); + for (int i = 1; i < lastValueIdx; i++) { + result.append(delim).append(formatValue(values.get(i))); + } + result.append(delim.trim()).append(finalDelim).append(formatValue(values.get(lastValueIdx))); + return result.toString(); } } @@ -1350,12 +1406,16 @@ public class AdvancedSearch { protected List> getValues(FilterOption option, FilterOperator operator) { String message = option.name + " " + operator.caption + " ?"; PaperCard card = SGuiChoose.oneOrNone(message, FModel.getMagicDb().getCommonCards().getUniqueCards()); - if (card == null) { return null; } + if (card == null) { + return null; + } Integer amount = -1; if (operator == FilterOperator.CONTAINS_X_COPIES_OF_CARD) { //prompt for quantity if needed amount = SGuiChoose.getInteger(Localizer.getInstance().getMessage("lblHowManyCopiesOfN", CardTranslation.getTranslatedName(card.getName())), 0, 4); - if (amount == null) { return null; } + if (amount == null) { + return null; + } } Map map = new HashMap<>(); @@ -1370,13 +1430,12 @@ public class AdvancedSearch { protected List> getValuesFromString(String valueText, FilterOption option, FilterOperator operator) { int amount = -1; String cardName; - if(operator == FilterOperator.CONTAINS_X_COPIES_OF_CARD) { + if (operator == FilterOperator.CONTAINS_X_COPIES_OF_CARD) { //Take the format "2 Mountain" String[] split = valueText.split(" ", 2); amount = Integer.parseInt(split[0]); cardName = split[1]; - } - else + } else cardName = valueText; Map map = new HashMap<>(); map.put(cardName, amount); @@ -1412,25 +1471,29 @@ public class AdvancedSearch { } } option = SGuiChoose.oneOrNone(Localizer.getInstance().getMessage("lblSelectAFilterType"), options, defaultOption, null); - if (option == null) { return editFilter; } - } - else { + if (option == null) { + return editFilter; + } + } else { option = defaultOption; } - if (option == FilterOption.NONE) { return null; } //allow user to clear filter by selecting "(none)" + if (option == FilterOption.NONE) { + return null; + } //allow user to clear filter by selecting "(none)" final FilterOperator operator; if (option.operatorOptions.length > 1) { final FilterOperator defaultOperator = option == defaultOption ? editFilter.operator : null; operator = SGuiChoose.oneOrNone(Localizer.getInstance().getMessage("lblSelectOperatorFor", option.name), option.operatorOptions, defaultOperator, null); - if (operator == null) { return editFilter; } - } - else { + if (operator == null) { + return editFilter; + } + } else { operator = option.operatorOptions[0]; } - Filter filter = (Filter)option.evaluator.createFilter(option, operator); + Filter filter = (Filter) option.evaluator.createFilter(option, operator); if (filter == null) { filter = editFilter; } @@ -1440,8 +1503,7 @@ public class AdvancedSearch { @SuppressWarnings("unchecked") public static Filter getFilter(Class type, String filterText) { String[] words = filterText.split(" ", 3); - if(words.length < 2) - { + if (words.length < 2) { System.out.printf("Unable to generate filter from expression '%s'%n", filterText); return null; } @@ -1454,8 +1516,7 @@ public class AdvancedSearch { System.out.printf("Unable to generate filter from FilterOption '%s'%n", words[0]); return null; } - if(option.type != type) - { + if (option.type != type) { System.out.printf("Unable to generate filter from FilterOption '%s' - filter type '%s' != option type '%s' %n", words[0], type, option.type); return null; } @@ -1515,14 +1576,23 @@ public class AdvancedSearch { public interface IFilterControl { IButton getBtnNotBeforeParen(); + IButton getBtnOpenParen(); + IButton getBtnNotAfterParen(); + IButton getBtnFilter(); + IButton getBtnCloseParen(); + IButton getBtnAnd(); + IButton getBtnOr(); + Filter getFilter(); + void setFilter(Filter filter0); + Class getGenericType(); } @@ -1554,23 +1624,18 @@ public class AdvancedSearch { Object piece = iterator.get(); if (piece.equals(Operator.OPEN_PAREN)) { predPiece = getPredicatePiece(iterator.next()); - } - else if (piece.equals(Operator.CLOSE_PAREN)) { + } else if (piece.equals(Operator.CLOSE_PAREN)) { return pred; - } - else if (piece.equals(Operator.AND)) { + } else if (piece.equals(Operator.AND)) { operator = Operator.AND; continue; - } - else if (piece.equals(Operator.OR)) { + } else if (piece.equals(Operator.OR)) { operator = Operator.OR; continue; - } - else if (piece.equals(Operator.NOT)) { + } else if (piece.equals(Operator.NOT)) { applyNot = !applyNot; continue; - } - else { + } else { predPiece = ((AdvancedSearch.Filter) piece).getPredicate(); } if (applyNot) { @@ -1579,11 +1644,9 @@ public class AdvancedSearch { } if (pred == null) { pred = predPiece; - } - else if (operator == Operator.AND) { + } else if (operator == Operator.AND) { pred = pred.and(predPiece); - } - else if (operator == Operator.OR) { + } else if (operator == Operator.OR) { pred = pred.or(predPiece); } operator = null; @@ -1626,16 +1689,7 @@ public class AdvancedSearch { control.setFilter(filter); if (filter != null) { control.getBtnFilter().setText(GuiBase.getInterface().encodeSymbols(filter.toString(), false)); - - if (filter.getOption() == FilterOption.CARD_KEYWORDS) { - //the first time the user selects keywords, preload keywords for all cards - Runnable preloadTask = Keyword.getPreloadTask(); - if (preloadTask != null) { - GuiBase.getInterface().runBackgroundTask(Localizer.getInstance().getMessage("lblLoadingKeywords"), preloadTask); - } - } - } - else { + } else { control.getBtnFilter().setText(EMPTY_FILTER_TEXT); } if (onChange != null) { @@ -1657,32 +1711,31 @@ public class AdvancedSearch { @SuppressWarnings("unchecked") public void updateLabel() { - if (label == null) { return; } + if (label == null) { + return; + } StringBuilder builder = new StringBuilder(); builder.append("Filter: "); if (expression.isEmpty()) { builder.append("(none)"); - } - else { + } else { int prevFilterEndIdx = -1; AdvancedSearch.Filter filter, prevFilter = null; for (Object piece : expression) { if (piece instanceof AdvancedSearch.Filter) { - filter = (AdvancedSearch.Filter)piece; + filter = (AdvancedSearch.Filter) piece; if (filter.canMergeCaptionWith(prevFilter)) { //convert boolean operators between filters to lowercase builder.replace(prevFilterEndIdx, builder.length(), builder.substring(prevFilterEndIdx).toLowerCase()); //append only values for filter builder.append(filter.extractValuesFromCaption()); - } - else { + } else { builder.append(filter); } prevFilter = filter; prevFilterEndIdx = builder.length(); - } - else { + } else { if (piece.equals(Operator.OPEN_PAREN) || piece.equals(Operator.CLOSE_PAREN)) { prevFilter = null; //prevent merging filters with parentheses in between } @@ -1695,7 +1748,9 @@ public class AdvancedSearch { } public String getTooltip() { - if (expression.isEmpty()) { return ""; } + if (expression.isEmpty()) { + return ""; + } StringBuilder builder = new StringBuilder(); builder.append("Filter:\n"); @@ -1718,7 +1773,9 @@ public class AdvancedSearch { expression.clear(); for (IFilterControl control : controls) { - if (control.getFilter() == null) { continue; } //skip any blank filters + if (control.getFilter() == null) { + continue; + } //skip any blank filters if (control.getBtnNotBeforeParen().isSelected()) { expression.add(Operator.NOT); @@ -1737,8 +1794,7 @@ public class AdvancedSearch { } if (control.getBtnAnd().isSelected()) { expression.add(Operator.AND); - } - else if (control.getBtnOr().isSelected()) { + } else if (control.getBtnOr().isSelected()) { expression.add(Operator.OR); } } @@ -1748,13 +1804,16 @@ public class AdvancedSearch { private class ExpressionIterator { private int index; + private boolean hasNext() { return index < expression.size(); } + private ExpressionIterator next() { index++; return this; } + private Object get() { return expression.get(index); } From 1dbd358c1944a3d732186e3d6a2cf204b5da4ff7 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Thu, 11 Sep 2025 19:01:59 +0800 Subject: [PATCH 175/355] fix to include main face --- forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java | 1 - 1 file changed, 1 deletion(-) diff --git a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java index 37ed9f18eed..da523205006 100644 --- a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java +++ b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java @@ -115,7 +115,6 @@ public class AdvancedSearch { } } } - return keywords; } if (input.getRules().getMainPart().getKeywords() != null) { for (String key : input.getRules().getMainPart().getKeywords()) { From c2fc877201bc39d30b8ea8d4f0d54a30bff361e9 Mon Sep 17 00:00:00 2001 From: kevlahnota Date: Thu, 11 Sep 2025 19:45:39 +0800 Subject: [PATCH 176/355] minor changes to Emrakul Boss Deck replaced some cards that AI can't use properly --- forge-gui/res/adventure/common/decks/boss/emrakul.dck | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/forge-gui/res/adventure/common/decks/boss/emrakul.dck b/forge-gui/res/adventure/common/decks/boss/emrakul.dck index 3dde6ccecc8..b2c6eacca77 100644 --- a/forge-gui/res/adventure/common/decks/boss/emrakul.dck +++ b/forge-gui/res/adventure/common/decks/boss/emrakul.dck @@ -3,22 +3,21 @@ Name=Emrakul [Main] 1 Black Lotus 2 Vesuva -2 Planar Portal 4 Eldrazi Temple +3 Forsaken Monument 2 It That Betrays 2 Pathrazer of Ulamog 2 Void Winnower -3 Emrakul, the Aeons Torn +2 Emrakul, the Aeons Torn 2 Emrakul, the Promised End 4 Expedition Map 2 Eye of Ugin -2 Mana Vault -1 Ancient Tomb +4 Ancient Tomb 1 Strip Mine -3 All is Dust +4 All is Dust 2 Kozilek, Butcher of Truth 2 Kozilek, the Great Distortion -3 Mana Crypt +1 Mana Crypt 1 Sol Ring 3 Titan's Presence 2 Ulamog, the Ceaseless Hunger From db8e084332ec36017ef5b759b89cf5571dc5e8a4 Mon Sep 17 00:00:00 2001 From: Agetian Date: Thu, 11 Sep 2025 19:21:51 +0300 Subject: [PATCH 177/355] - Add puzzle PS_EOE3. (#8696) --- forge-gui/res/puzzle/PS_EOE3.pzl | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 forge-gui/res/puzzle/PS_EOE3.pzl diff --git a/forge-gui/res/puzzle/PS_EOE3.pzl b/forge-gui/res/puzzle/PS_EOE3.pzl new file mode 100644 index 00000000000..789f6572258 --- /dev/null +++ b/forge-gui/res/puzzle/PS_EOE3.pzl @@ -0,0 +1,16 @@ +[metadata] +Name:Possibility Storm - Edge of Eternities #03 +URL:https://www.cardforge.org +Goal:Win +Turns:1 +Difficulty:Rare +Description:Win this turn. Your opponent has 10000 life! Deal at least that much damage this turn to win. Ensure your solution satisfies all possible blocks. Good luck! +[state] +turn=1 +activeplayer=p0 +activephase=MAIN1 +p0life=-1 +p0hand=Welcome the Darkness;Bloodthirsty Conqueror;Vayne's Treachery;Syr Vondam, Sunstar Exemplar +p0battlefield=Herald of Eternal Dawn;Jumbo Cactuar;The Masamune;Enduring Tenacity;Plains;Plains;Plains;Swamp;Swamp;Swamp;Forest;Forest +p1life=10000 +p1battlefield=Zidane, Tantalus Thief;Absolute Virtue|Id:1;Pain for All|AttachedTo:1 From 43a15706014c5f7c8d703377ae8a7fda696a0a68 Mon Sep 17 00:00:00 2001 From: Jetz72 Date: Thu, 11 Sep 2025 11:22:17 -0500 Subject: [PATCH 178/355] Deck Importer support for Adventure, Quest, and Planar Conquest (#8681) * Some cleanup. * Expanded/fixed basic land set functions for quest and adventure. * Get land sets from unlocked planes in conquest mode. * Add importer for Adventure, Quest, and Conquest. * Remove unused import * Remove redundant override * Deprecate hasBasicLands predicate. * Delete getManaNameAndSymbol --------- Co-authored-by: Jetz --- .../src/main/java/forge/card/CardEdition.java | 9 +- .../main/java/forge/deck/DeckRecognizer.java | 160 ++++------- .../deckeditor/AddBasicLandsDialog.java | 2 +- .../forge/screens/deckeditor/DeckImport.java | 120 +------- .../adventure/scene/AdventureDeckEditor.java | 39 +-- .../src/forge/deck/AddBasicLandsDialog.java | 2 +- .../src/forge/deck/FDeckEditor.java | 97 +++++-- .../src/forge/deck/FDeckImportDialog.java | 214 ++++++++------ forge-gui/res/languages/de-DE.properties | 3 + forge-gui/res/languages/en-US.properties | 3 + forge-gui/res/languages/es-ES.properties | 3 + forge-gui/res/languages/fr-FR.properties | 3 + forge-gui/res/languages/it-IT.properties | 3 + forge-gui/res/languages/ja-JP.properties | 3 + forge-gui/res/languages/pt-BR.properties | 3 + forge-gui/res/languages/zh-CN.properties | 3 + .../java/forge/deck/DeckImportController.java | 261 +++++++++++++++--- .../src/main/java/forge/deck/DeckProxy.java | 2 +- .../planarconquest/ConquestData.java | 25 +- .../planarconquest/ConquestPlane.java | 7 + .../planarconquest/ConquestUtil.java | 54 ++-- .../gamemodes/quest/QuestController.java | 17 +- 22 files changed, 596 insertions(+), 437 deletions(-) diff --git a/forge-core/src/main/java/forge/card/CardEdition.java b/forge-core/src/main/java/forge/card/CardEdition.java index b433fd3588f..3a69cfd0b37 100644 --- a/forge-core/src/main/java/forge/card/CardEdition.java +++ b/forge-core/src/main/java/forge/card/CardEdition.java @@ -1018,16 +1018,13 @@ public final class CardEdition implements Comparable { public static final Predicate HAS_BOOSTER_BOX = edition -> edition.getBoosterBoxCount() > 0; + @Deprecated //Use CardEdition::hasBasicLands and a nonnull test. public static final Predicate hasBasicLands = ed -> { if (ed == null) { // Happens for new sets with "???" code return false; } - for(String landName : MagicColor.Constant.BASIC_LANDS) { - if (null == StaticData.instance().getCommonCards().getCard(landName, ed.getCode(), 0)) - return false; - } - return true; + return ed.hasBasicLands(); }; } @@ -1048,7 +1045,7 @@ public final class CardEdition implements Comparable { public boolean hasBasicLands() { for(String landName : MagicColor.Constant.BASIC_LANDS) { - if (null == StaticData.instance().getCommonCards().getCard(landName, this.getCode(), 0)) + if (this.getCardInSet(landName).isEmpty()) return false; } return true; diff --git a/forge-core/src/main/java/forge/deck/DeckRecognizer.java b/forge-core/src/main/java/forge/deck/DeckRecognizer.java index 2757f418b26..ab2cc78a0f0 100644 --- a/forge-core/src/main/java/forge/deck/DeckRecognizer.java +++ b/forge-core/src/main/java/forge/deck/DeckRecognizer.java @@ -49,6 +49,16 @@ public class DeckRecognizer { LIMITED_CARD, CARD_FROM_NOT_ALLOWED_SET, CARD_FROM_INVALID_SET, + /** + * Valid card request, but can't be imported because the player does not have enough copies. + * Should be replaced with a different printing if possible. + */ + CARD_NOT_IN_INVENTORY, + /** + * Valid card request for a card that isn't in the player's inventory, but new copies can be acquired freely. + * Usually used for basic lands. Should be supplied to the import controller by the editor. + */ + FREE_CARD_NOT_IN_INVENTORY, // Warning messages WARNING_MESSAGE, UNKNOWN_CARD, @@ -63,10 +73,14 @@ public class DeckRecognizer { CARD_TYPE, CARD_RARITY, CARD_CMC, - MANA_COLOUR + MANA_COLOUR; + + public static final EnumSet CARD_TOKEN_TYPES = EnumSet.of(LEGAL_CARD, LIMITED_CARD, CARD_FROM_NOT_ALLOWED_SET, CARD_FROM_INVALID_SET, CARD_NOT_IN_INVENTORY, FREE_CARD_NOT_IN_INVENTORY); + public static final EnumSet IN_DECK_TOKEN_TYPES = EnumSet.of(LEGAL_CARD, LIMITED_CARD, DECK_NAME, FREE_CARD_NOT_IN_INVENTORY); + public static final EnumSet CARD_PLACEHOLDER_TOKEN_TYPES = EnumSet.of(CARD_TYPE, CARD_RARITY, CARD_CMC, MANA_COLOUR); } - public enum LimitedCardType{ + public enum LimitedCardType { BANNED, RESTRICTED, } @@ -108,6 +122,10 @@ public class DeckRecognizer { return new Token(TokenType.CARD_FROM_INVALID_SET, count, card, cardRequestHasSetCode); } + public static Token NotInInventoryFree(final PaperCard card, final int count, final DeckSection section) { + return new Token(TokenType.FREE_CARD_NOT_IN_INVENTORY, count, card, section, true); + } + // WARNING MESSAGES // ================ public static Token UnknownCard(final String cardName, final String setCode, final int count) { @@ -126,6 +144,10 @@ public class DeckRecognizer { return new Token(TokenType.WARNING_MESSAGE, msg); } + public static Token NotInInventory(final PaperCard card, final int count, final DeckSection section) { + return new Token(TokenType.CARD_NOT_IN_INVENTORY, count, card, section, false); + } + /* ================================= * DECK SECTIONS * ================================= */ @@ -239,14 +261,11 @@ public class DeckRecognizer { /** * Filters all token types that have a PaperCard instance set (not null) * @return true for tokens of type: - * LEGAL_CARD, LIMITED_CARD, CARD_FROM_NOT_ALLOWED_SET and CARD_FROM_INVALID_SET. + * LEGAL_CARD, LIMITED_CARD, CARD_FROM_NOT_ALLOWED_SET and CARD_FROM_INVALID_SET, CARD_NOT_IN_INVENTORY, FREE_CARD_NOT_IN_INVENTORY. * False otherwise. */ public boolean isCardToken() { - return (this.type == TokenType.LEGAL_CARD || - this.type == TokenType.LIMITED_CARD || - this.type == TokenType.CARD_FROM_NOT_ALLOWED_SET || - this.type == TokenType.CARD_FROM_INVALID_SET); + return TokenType.CARD_TOKEN_TYPES.contains(this.type); } /** @@ -255,9 +274,7 @@ public class DeckRecognizer { * LEGAL_CARD, LIMITED_CARD, DECK_NAME; false otherwise. */ public boolean isTokenForDeck() { - return (this.type == TokenType.LEGAL_CARD || - this.type == TokenType.LIMITED_CARD || - this.type == TokenType.DECK_NAME); + return TokenType.IN_DECK_TOKEN_TYPES.contains(this.type); } /** @@ -266,7 +283,7 @@ public class DeckRecognizer { * False otherwise. */ public boolean isCardTokenForDeck() { - return (this.type == TokenType.LEGAL_CARD || this.type == TokenType.LIMITED_CARD); + return isCardToken() && isTokenForDeck(); } /** @@ -276,10 +293,7 @@ public class DeckRecognizer { * CARD_RARITY, CARD_CMC, CARD_TYPE, MANA_COLOUR */ public boolean isCardPlaceholder(){ - return (this.type == TokenType.CARD_RARITY || - this.type == TokenType.CARD_CMC || - this.type == TokenType.MANA_COLOUR || - this.type == TokenType.CARD_TYPE); + return TokenType.CARD_PLACEHOLDER_TOKEN_TYPES.contains(this.type); } /** Determines if current token is a Deck Section token @@ -536,7 +550,7 @@ public class DeckRecognizer { PaperCard tokenCard = token.getCard(); if (isAllowed(tokenSection)) { - if (!tokenSection.equals(referenceDeckSectionInParsing)) { + if (tokenSection != referenceDeckSectionInParsing) { Token sectionToken = Token.DeckSection(tokenSection.name(), this.allowedDeckSections); // just check that last token is stack is a card placeholder. // In that case, add the new section token before the placeholder @@ -575,7 +589,7 @@ public class DeckRecognizer { refLine = purgeAllLinks(refLine); String line; - if (StringUtils.startsWith(refLine, LINE_COMMENT_DELIMITER_OR_MD_HEADER)) + if (refLine.startsWith(LINE_COMMENT_DELIMITER_OR_MD_HEADER)) line = refLine.replaceAll(LINE_COMMENT_DELIMITER_OR_MD_HEADER, ""); else line = refLine.trim(); // Remove any trailing formatting @@ -584,7 +598,7 @@ public class DeckRecognizer { // Final fantasy cards like Summon: Choco/Mog should be ommited to be recognized. TODO: fix maybe for future cards if (!line.contains("Summon:")) line = SEARCH_SINGLE_SLASH.matcher(line).replaceFirst(" // "); - if (StringUtils.startsWith(line, ASTERISK)) // markdown lists (tappedout md export) + if (line.startsWith(ASTERISK)) // Markdown lists (tappedout md export) line = line.substring(2); // == Patches to Corner Cases @@ -600,8 +614,8 @@ public class DeckRecognizer { Token result = recogniseCardToken(line, referenceSection); if (result == null) result = recogniseNonCardToken(line); - return result != null ? result : StringUtils.startsWith(refLine, DOUBLE_SLASH) || - StringUtils.startsWith(refLine, LINE_COMMENT_DELIMITER_OR_MD_HEADER) ? + return result != null ? result : refLine.startsWith(DOUBLE_SLASH) || + refLine.startsWith(LINE_COMMENT_DELIMITER_OR_MD_HEADER) ? new Token(TokenType.COMMENT, 0, refLine) : new Token(TokenType.UNKNOWN_TEXT, 0, refLine); } @@ -613,7 +627,7 @@ public class DeckRecognizer { while (m.find()) { line = line.replaceAll(m.group(), "").trim(); } - if (StringUtils.endsWith(line, "()")) + if (line.endsWith("()")) return line.substring(0, line.length()-2); return line; } @@ -741,21 +755,12 @@ public class DeckRecognizer { // This would save tons of time in parsing Input + would also allow to return UnsupportedCardTokens beforehand private DeckSection getTokenSection(String deckSec, DeckSection currentDeckSection, PaperCard card){ if (deckSec != null) { - DeckSection cardSection; - switch (deckSec.toUpperCase().trim()) { - case "MB": - cardSection = DeckSection.Main; - break; - case "SB": - cardSection = DeckSection.Sideboard; - break; - case "CM": - cardSection = DeckSection.Commander; - break; - default: - cardSection = DeckSection.matchingSection(card); - break; - } + DeckSection cardSection = switch (deckSec.toUpperCase().trim()) { + case "MB" -> DeckSection.Main; + case "SB" -> DeckSection.Sideboard; + case "CM" -> DeckSection.Commander; + default -> DeckSection.matchingSection(card); + }; if (cardSection.validate(card)) return cardSection; } @@ -1017,51 +1022,21 @@ public class DeckRecognizer { private static MagicColor.Color getMagicColor(String colorName){ if (colorName.toLowerCase().startsWith("multi") || colorName.equalsIgnoreCase("m")) return null; // will be handled separately - - byte color = MagicColor.fromName(colorName.toLowerCase()); - switch (color) { - case MagicColor.WHITE: - return MagicColor.Color.WHITE; - case MagicColor.BLUE: - return MagicColor.Color.BLUE; - case MagicColor.BLACK: - return MagicColor.Color.BLACK; - case MagicColor.RED: - return MagicColor.Color.RED; - case MagicColor.GREEN: - return MagicColor.Color.GREEN; - default: - return MagicColor.Color.COLORLESS; - - } + return MagicColor.Color.fromByte(MagicColor.fromName(colorName.toLowerCase())); } public static String getLocalisedMagicColorName(String colorName){ Localizer localizer = Localizer.getInstance(); - switch(colorName.toLowerCase()){ - case MagicColor.Constant.WHITE: - return localizer.getMessage("lblWhite"); - - case MagicColor.Constant.BLUE: - return localizer.getMessage("lblBlue"); - - case MagicColor.Constant.BLACK: - return localizer.getMessage("lblBlack"); - - case MagicColor.Constant.RED: - return localizer.getMessage("lblRed"); - - case MagicColor.Constant.GREEN: - return localizer.getMessage("lblGreen"); - - case MagicColor.Constant.COLORLESS: - return localizer.getMessage("lblColorless"); - case "multicolour": - case "multicolor": - return localizer.getMessage("lblMulticolor"); - default: - return ""; - } + return switch (colorName.toLowerCase()) { + case MagicColor.Constant.WHITE -> localizer.getMessage("lblWhite"); + case MagicColor.Constant.BLUE -> localizer.getMessage("lblBlue"); + case MagicColor.Constant.BLACK -> localizer.getMessage("lblBlack"); + case MagicColor.Constant.RED -> localizer.getMessage("lblRed"); + case MagicColor.Constant.GREEN -> localizer.getMessage("lblGreen"); + case MagicColor.Constant.COLORLESS -> localizer.getMessage("lblColorless"); + case "multicolour", "multicolor" -> localizer.getMessage("lblMulticolor"); + default -> ""; + }; } /** @@ -1080,37 +1055,6 @@ public class DeckRecognizer { return ""; } - - - private static Pair getManaNameAndSymbol(String matchedMana) { - if (matchedMana == null) - return null; - - Localizer localizer = Localizer.getInstance(); - switch (matchedMana.toLowerCase()) { - case MagicColor.Constant.WHITE: - case "w": - return Pair.of(localizer.getMessage("lblWhite"), MagicColor.Color.WHITE.getSymbol()); - case MagicColor.Constant.BLUE: - case "u": - return Pair.of(localizer.getMessage("lblBlue"), MagicColor.Color.BLUE.getSymbol()); - case MagicColor.Constant.BLACK: - case "b": - return Pair.of(localizer.getMessage("lblBlack"), MagicColor.Color.BLACK.getSymbol()); - case MagicColor.Constant.RED: - case "r": - return Pair.of(localizer.getMessage("lblRed"), MagicColor.Color.RED.getSymbol()); - case MagicColor.Constant.GREEN: - case "g": - return Pair.of(localizer.getMessage("lblGreen"), MagicColor.Color.GREEN.getSymbol()); - case MagicColor.Constant.COLORLESS: - case "c": - return Pair.of(localizer.getMessage("lblColorless"), MagicColor.Color.COLORLESS.getSymbol()); - default: // Multicolour - return Pair.of(localizer.getMessage("lblMulticolor"), ""); - } - } - public static boolean isDeckName(final String lineAsIs) { if (lineAsIs == null) return false; diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/AddBasicLandsDialog.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/AddBasicLandsDialog.java index 7cff8386751..e2aa334956a 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/AddBasicLandsDialog.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/AddBasicLandsDialog.java @@ -68,7 +68,7 @@ public class AddBasicLandsDialog { private static final int LAND_PANEL_PADDING = 3; private final FComboBoxPanel cbLandSet = new FComboBoxPanel<>(Localizer.getInstance().getMessage("lblLandSet") + ":", FlowLayout.CENTER, - IterableUtil.filter(StaticData.instance().getSortedEditions(), CardEdition.Predicates.hasBasicLands)); + IterableUtil.filter(StaticData.instance().getSortedEditions(), CardEdition::hasBasicLands)); private final MainPanel panel = new MainPanel(); private final LandPanel pnlPlains = new LandPanel("Plains"); diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/DeckImport.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/DeckImport.java index a572911f12a..54bfaff992e 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/DeckImport.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/DeckImport.java @@ -46,7 +46,6 @@ import forge.toolbox.*; import forge.util.Localizer; import forge.view.FDialog; import net.miginfocom.swing.MigLayout; -import org.apache.commons.lang3.StringUtils; import static forge.deck.DeckRecognizer.TokenType.*; @@ -523,7 +522,7 @@ public class DeckImport extends FDialog { else deck.setName(currentDeckName); } - host.getDeckController().loadDeck(deck, controller.getCreateNewDeck()); + host.getDeckController().loadDeck(deck, controller.getImportBehavior() != DeckImportController.ImportBehavior.MERGE); processWindowEvent(new WindowEvent(DeckImport.this, WindowEvent.WINDOW_CLOSING)); }); @@ -531,7 +530,7 @@ public class DeckImport extends FDialog { this.createNewDeckCheckbox.setSelected(false); this.createNewDeckCheckbox.addActionListener(e -> { boolean createNewDeck = createNewDeckCheckbox.isSelected(); - controller.setCreateNewDeck(createNewDeck); + controller.setImportBehavior(createNewDeck ? DeckImportController.ImportBehavior.CREATE_NEW : DeckImportController.ImportBehavior.MERGE); String cmdAcceptLabel = createNewDeck ? CREATE_NEW_DECK_CMD_LABEL : IMPORT_CARDS_CMD_LABEL; cmdAcceptButton.setText(cmdAcceptLabel); String smartCardArtChboxTooltip = createNewDeck ? SMART_CARDART_TT_NO_DECK : SMART_CARDART_TT_WITH_DECK; @@ -600,7 +599,7 @@ public class DeckImport extends FDialog { if (token.getType() == LIMITED_CARD) cssClass = WARN_MSG_CLASS; String statusMsg = String.format("%s", cssClass, - getTokenStatusMessage(token)); + controller.getTokenStatusMessage(token)); statusLbl.append(statusMsg); } @@ -740,12 +739,12 @@ public class DeckImport extends FDialog { private String toHTML(final DeckRecognizer.Token token) { if (token == null) return ""; - String tokenMsg = getTokenMessage(token); + String tokenMsg = controller.getTokenMessage(token); if (tokenMsg == null) return ""; - String tokenStatus = getTokenStatusMessage(token); + String tokenStatus = controller.getTokenStatusMessage(token); String cssClass = getTokenCSSClass(token.getType()); - if (tokenStatus.length() == 0) + if (tokenStatus.isEmpty()) tokenMsg = padEndWithHTMLSpaces(tokenMsg, 2*PADDING_TOKEN_MSG_LENGTH+10); else { tokenMsg = padEndWithHTMLSpaces(tokenMsg, PADDING_TOKEN_MSG_LENGTH); @@ -755,11 +754,6 @@ public class DeckImport extends FDialog { tokenMsg = String.format("%s", cssClass, token.getKey().toString(), tokenMsg); - if (tokenStatus == null) { - String tokenTag = String.format("%s", cssClass, tokenMsg); - return String.format("%s", tokenTag); - } - String tokenTag = "%s"; String tokenMsgTag = String.format(tokenTag, cssClass, tokenMsg); String tokenStatusTag; @@ -776,97 +770,6 @@ public class DeckImport extends FDialog { return String.format("%s%s", targetMsg, spacer); } - private String getTokenMessage(DeckRecognizer.Token token) { - switch (token.getType()) { - case LEGAL_CARD: - case LIMITED_CARD: - case CARD_FROM_NOT_ALLOWED_SET: - case CARD_FROM_INVALID_SET: - return String.format("%s x %s %s", token.getQuantity(), token.getText(), getTokenFoilLabel(token)); - // Card Warning Msgs - case UNKNOWN_CARD: - case UNSUPPORTED_CARD: - return token.getQuantity() > 0 ? String.format("%s x %s", token.getQuantity(), token.getText()) - : token.getText(); - - case UNSUPPORTED_DECK_SECTION: - return String.format("%s: %s", Localizer.getInstance().getMessage("lblWarningMsgPrefix"), - Localizer.getInstance() - .getMessage("lblWarnDeckSectionNotAllowedInEditor", token.getText(), - this.currentGameType)); - - // Special Case of Card moved into another section (e.g. Commander from Sideboard) - case WARNING_MESSAGE: - return String.format("%s: %s", Localizer.getInstance() - .getMessage("lblWarningMsgPrefix"), token.getText()); - - // Placeholders - case DECK_SECTION_NAME: - return String.format("%s: %s", Localizer.getInstance().getMessage("lblDeckSection"), - token.getText()); - - case CARD_RARITY: - return String.format("%s: %s", Localizer.getInstance().getMessage("lblRarity"), - token.getText()); - - case CARD_TYPE: - case CARD_CMC: - case MANA_COLOUR: - case COMMENT: - return token.getText(); - - case DECK_NAME: - return String.format("%s: %s", Localizer.getInstance().getMessage("lblDeckName"), - token.getText()); - - case UNKNOWN_TEXT: - default: - return null; - - } - } - - private String getTokenStatusMessage(DeckRecognizer.Token token){ - if (token == null) - return ""; - - switch (token.getType()) { - case LIMITED_CARD: - return String.format("%s: %s", Localizer.getInstance().getMessage("lblWarningMsgPrefix"), - Localizer.getInstance().getMessage("lblWarnLimitedCard", - StringUtils.capitalize(token.getLimitedCardType().name()), getGameFormatLabel())); - - case CARD_FROM_NOT_ALLOWED_SET: - return Localizer.getInstance().getMessage("lblErrNotAllowedCard", getGameFormatLabel()); - - case CARD_FROM_INVALID_SET: - return Localizer.getInstance().getMessage("lblErrCardEditionDate"); - - case UNSUPPORTED_CARD: - return Localizer.getInstance().getMessage("lblErrUnsupportedCard", this.currentGameType); - - case UNKNOWN_CARD: - return String.format("%s: %s", Localizer.getInstance().getMessage("lblWarningMsgPrefix"), - Localizer.getInstance().getMessage("lblWarnUnknownCardMsg")); - - case UNSUPPORTED_DECK_SECTION: - case WARNING_MESSAGE: - case COMMENT: - case CARD_CMC: - case MANA_COLOUR: - case CARD_TYPE: - case DECK_SECTION_NAME: - case CARD_RARITY: - case DECK_NAME: - case LEGAL_CARD: - case UNKNOWN_TEXT: - default: - return ""; - - } - - } - private String getTokenCSSClass(DeckRecognizer.TokenType tokenType){ switch (tokenType){ case LEGAL_CARD: @@ -899,17 +802,6 @@ public class DeckImport extends FDialog { return ""; } } - - private String getTokenFoilLabel(DeckRecognizer.Token token) { - if (!token.isCardToken()) - return ""; - final String foilMarker = "- (Foil)"; - return token.getCard().isFoil() ? foilMarker : ""; - } - - private String getGameFormatLabel() { - return String.format("\"%s\"", this.controller.getCurrentGameFormatName()); - } } class GameFormatDropdownRenderer extends JLabel implements ListCellRenderer { diff --git a/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java b/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java index f67b249c031..808b366c3ac 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java +++ b/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java @@ -27,8 +27,6 @@ import forge.item.PaperCard; import forge.itemmanager.*; import forge.itemmanager.filters.CardColorFilter; import forge.itemmanager.filters.CardTypeFilter; -import forge.localinstance.properties.ForgePreferences; -import forge.menu.FCheckBoxMenuItem; import forge.menu.FDropDownMenu; import forge.menu.FMenuItem; import forge.menu.FPopupMenu; @@ -41,6 +39,7 @@ import forge.util.Utils; import java.util.*; import java.util.function.Consumer; import java.util.function.Function; +import java.util.function.Predicate; public class AdventureDeckEditor extends FDeckEditor { protected static class AdventureEditorConfig extends DeckEditorConfig { @@ -146,7 +145,8 @@ public class AdventureDeckEditor extends FDeckEditor { if(event.cardBlock != null) { if(event.cardBlock.getLandSet() != null) return List.of(event.cardBlock.getLandSet()); - List eventSets = event.cardBlock.getSets(); + List eventSets = new ArrayList<>(event.cardBlock.getSets()); + eventSets.removeIf(Predicate.not(CardEdition::hasBasicLands)); if(!eventSets.isEmpty()) return eventSets; } @@ -558,7 +558,7 @@ public class AdventureDeckEditor extends FDeckEditor { currentEvent.participants[i].setDeck(opponentDecks[i]); } currentEvent.draftedDeck = (Deck) currentEvent.registeredDeck.copyTo("Draft Deck"); - if (allowsAddBasic()) { + if (allowAddBasic()) { showAddBasicLandsDialog(); //Might be annoying if you haven't pruned your deck yet, but best to remind player that //this probably needs to be done since it's there since it's not normally part of Adventure @@ -713,27 +713,6 @@ public class AdventureDeckEditor extends FDeckEditor { return this.deckHeader; } - @Override - protected FPopupMenu createMoreOptionsMenu() { - return new FPopupMenu() { - @Override - protected void buildMenu() { - Localizer localizer = Forge.getLocalizer(); - addItem(new FMenuItem(localizer.getMessage("btnCopyToClipboard"), Forge.hdbuttons ? FSkinImage.HDEXPORT : FSkinImage.BLANK, e1 -> FDeckViewer.copyDeckToClipboard(getDeck()))); - if (allowsAddBasic()) { - FMenuItem addBasic = new FMenuItem(localizer.getMessage("lblAddBasicLands"), FSkinImage.LANDLOGO, e1 -> showAddBasicLandsDialog()); - addItem(addBasic); - } - if(FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.DEV_MODE_ENABLED)) { - addItem(new FCheckBoxMenuItem(localizer.getMessage("cbEnforceDeckLegality"), shouldEnforceConformity(), e -> toggleConformity())); - String devSuffix = " (" + localizer.getMessage("lblDev") + ")"; - addItem(new FMenuItem(localizer.getMessage("lblAddcard") + devSuffix, FSkinImage.HDPLUS, e -> showDevAddCardDialog())); - } - ((DeckEditorPage) getSelectedPage()).buildDeckMenu(this); - } - }; - } - @Override protected void addChosenBasicLands(CardPool landsToAdd) { if(isLimitedEditor()) @@ -765,6 +744,12 @@ public class AdventureDeckEditor extends FDeckEditor { catalog.moveCards(landsToMove, getMainDeckPage()); } + @Override + protected PaperCard supplyPrintForImporter(PaperCard missingCard) { + PaperCard out = super.supplyPrintForImporter(missingCard); + return out == null ? null : out.getNoSellVersion(); + } + @Override protected void cacheTabPages() { super.cacheTabPages(); @@ -775,7 +760,9 @@ public class AdventureDeckEditor extends FDeckEditor { } @Override - protected boolean allowsAddBasic() { + protected boolean allowAddBasic() { + if(getEditorConfig() instanceof DeckPreviewConfig) + return false; AdventureEventData currentEvent = getCurrentEvent(); if (currentEvent == null) return true; diff --git a/forge-gui-mobile/src/forge/deck/AddBasicLandsDialog.java b/forge-gui-mobile/src/forge/deck/AddBasicLandsDialog.java index ca0d93ff361..d7709e5cee8 100644 --- a/forge-gui-mobile/src/forge/deck/AddBasicLandsDialog.java +++ b/forge-gui-mobile/src/forge/deck/AddBasicLandsDialog.java @@ -59,7 +59,7 @@ public class AddBasicLandsDialog extends FDialog { private final Consumer callback; private final FLabel lblLandSet = add(new FLabel.Builder().text(Forge.getLocalizer().getMessage("lblLandSet") + ":").font(FSkinFont.get(12)).textColor(FLabel.getInlineLabelColor()).build()); - private final FComboBox cbLandSet = add(new FComboBox<>(IterableUtil.filter(StaticData.instance().getEditions(), CardEdition.Predicates.hasBasicLands))); + private final FComboBox cbLandSet = add(new FComboBox<>(IterableUtil.filter(StaticData.instance().getSortedEditions(), CardEdition::hasBasicLands))); private final FScrollPane scroller = add(new FScrollPane() { @Override diff --git a/forge-gui-mobile/src/forge/deck/FDeckEditor.java b/forge-gui-mobile/src/forge/deck/FDeckEditor.java index 41cb685e509..eff2481bff0 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckEditor.java +++ b/forge-gui-mobile/src/forge/deck/FDeckEditor.java @@ -81,13 +81,21 @@ public class FDeckEditor extends TabPageScreen { public boolean allowsCardReplacement() { return hasInfiniteCardPool() || usePlayerInventory(); } public List getBasicLandSets(Deck currentDeck) { + if(hasInfiniteCardPool()) + return FModel.getMagicDb().getSortedEditions().stream().filter(CardEdition::hasBasicLands).collect(Collectors.toList()); return List.of(DeckProxy.getDefaultLandSet(currentDeck)); } protected abstract IDeckController getController(); protected abstract DeckEditorPage[] getInitialPages(); - protected DeckSection[] getExtraSections() { + public DeckSection[] getPrimarySections() { + if(getGameType() != null) + return getGameType().getPrimaryDeckSections().toArray(new DeckSection[0]); + return new DeckSection[]{DeckSection.Main, DeckSection.Sideboard}; + } + + public DeckSection[] getExtraSections() { if(getGameType() != null) return getGameType().getSupplimentalDeckSections().toArray(new DeckSection[0]); return new DeckSection[]{DeckSection.Attractions, DeckSection.Contraptions}; @@ -144,7 +152,7 @@ public class FDeckEditor extends TabPageScreen { ItemManagerConfig catalogConfig = null; ItemManagerConfig mainSectionConfig = null; ItemManagerConfig sideboardConfig = null; - Function fnGetBasicLandSet = null; + Function> fnGetBasicLandSet = null; Supplier> itemPoolSupplier = null; String catalogCaption = null; @@ -196,7 +204,7 @@ public class FDeckEditor extends TabPageScreen { this.sideboardConfig = sideboardConfig; return this; } - public GameTypeDeckEditorConfig setBasicLandSetFunction(Function fnGetBasicLandSet) { + public GameTypeDeckEditorConfig setBasicLandSetFunction(Function> fnGetBasicLandSet) { this.fnGetBasicLandSet = fnGetBasicLandSet; return this; } @@ -296,9 +304,21 @@ public class FDeckEditor extends TabPageScreen { } @Override - protected DeckSection[] getExtraSections() { + public DeckSection[] getPrimarySections() { + return gameType.getPrimaryDeckSections().toArray(new DeckSection[0]); + } + + @Override + public DeckSection[] getExtraSections() { return gameType.getSupplimentalDeckSections().toArray(new DeckSection[0]); } + + @Override + public List getBasicLandSets(Deck currentDeck) { + if(this.fnGetBasicLandSet != null) + return List.copyOf(fnGetBasicLandSet.apply(currentDeck)); + return super.getBasicLandSets(currentDeck); + } } public static DeckEditorConfig EditorConfigConstructed = new GameTypeDeckEditorConfig(GameType.Constructed, @@ -348,18 +368,19 @@ public class FDeckEditor extends TabPageScreen { .setMainSectionConfig(ItemManagerConfig.QUEST_DECK_EDITOR) .setSideboardConfig(ItemManagerConfig.QUEST_DECK_EDITOR) .setPlayerInventorySupplier(() -> FModel.getQuest().getCards().getCardpool()) - .setBasicLandSetFunction(d -> FModel.getQuest().getDefaultLandSet()); + .setBasicLandSetFunction(d -> FModel.getQuest().getAvailableLandSets()); public static DeckEditorConfig EditorConfigQuestCommander = new GameTypeDeckEditorConfig(GameType.QuestCommander, DECK_CONTROLLER_QUEST) .setCatalogConfig(ItemManagerConfig.QUEST_EDITOR_POOL) .setMainSectionConfig(ItemManagerConfig.QUEST_DECK_EDITOR) .setSideboardConfig(ItemManagerConfig.QUEST_DECK_EDITOR) .setPlayerInventorySupplier(() -> FModel.getQuest().getCards().getCardpool()) - .setBasicLandSetFunction(d -> FModel.getQuest().getDefaultLandSet()); + .setBasicLandSetFunction(d -> FModel.getQuest().getAvailableLandSets()); public static DeckEditorConfig EditorConfigQuestDraft = new GameTypeDeckEditorConfig(GameType.QuestDraft, DECK_CONTROLLER_QUEST_DRAFT); public static DeckEditorConfig EditorConfigPlanarConquest = new GameTypeDeckEditorConfig(GameType.PlanarConquest, DECK_CONTROLLER_PLANAR_CONQUEST) .setCatalogConfig(ItemManagerConfig.CONQUEST_COLLECTION) .setMainSectionConfig(ItemManagerConfig.CONQUEST_DECK_EDITOR) - .setPlayerInventorySupplier(ConquestUtil::getAvailablePool); + .setPlayerInventorySupplier(ConquestUtil::getAvailablePool) + .setBasicLandSetFunction(ConquestUtil::getBasicLandSets); protected static DeckSectionPage createPageForExtraSection(DeckSection deckSection, DeckEditorConfig editorConfig) { CardManager cm = new CardManager(false); @@ -542,7 +563,7 @@ public class FDeckEditor extends TabPageScreen { @Override protected void buildMenu() { final Localizer localizer = Forge.getLocalizer(); - if (allowsAddBasic()) + if (allowAddBasic()) addItem(new FMenuItem(localizer.getMessage("lblAddBasicLands"), FSkinImage.LANDLOGO, e -> showAddBasicLandsDialog())); if (showAddExtraSectionOption()) { addItem(new FMenuItem(localizer.getMessage("lblAddDeckSection"), FSkinImage.CHAOS, e -> { @@ -558,28 +579,41 @@ public class FDeckEditor extends TabPageScreen { }); })); } - if (editorConfig.getGameType() != null && editorConfig.hasInfiniteCardPool()) { + if (editorConfig.hasInfiniteCardPool() || editorConfig.usePlayerInventory()) { addItem(new FMenuItem(localizer.getMessage("lblImportFromClipboard"), Forge.hdbuttons ? FSkinImage.HDIMPORT : FSkinImage.OPEN, e -> { - FDeckImportDialog dialog = new FDeckImportDialog(!deck.isEmpty(), FDeckEditor.this.editorConfig); + FDeckImportDialog dialog = new FDeckImportDialog(deck, FDeckEditor.this.editorConfig); + if(editorConfig.usePlayerInventory()) + dialog.setFreePrintConverter(FDeckEditor.this::supplyPrintForImporter); + dialog.setImportBannedCards(!FModel.getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY)); dialog.setCallback(importedDeck -> { if (deck != null && importedDeck.hasName()) { deck.setName(importedDeck.getName()); setHeaderText(importedDeck.getName()); } - if (dialog.createNewDeck()) { - for (Entry section : importedDeck) { - DeckSectionPage page = getPageForSection(section.getKey()); - if (page != null) - page.setCards(section.getValue()); - } - } else { - for (Entry section : importedDeck) { - DeckSectionPage page = getPageForSection(section.getKey()); - if (page != null) - page.addCards(section.getValue()); - } + switch (dialog.getImportBehavior()) { + case REPLACE_CURRENT: + for(DeckSectionPage page : pagesBySection.values()) { + if(importedDeck.has(page.deckSection)) { + page.setCards(importedDeck.get(page.deckSection)); + if(hiddenExtraSections.contains(page.deckSection)) + showExtraSectionTab(page.deckSection); + } + else + page.setCards(new CardPool()); + } + break; + case CREATE_NEW: + deckController.setDeck(importedDeck); + break; + case MERGE: + for (Entry section : importedDeck) { + DeckSectionPage page = getPageForSection(section.getKey()); + if (page != null) + page.addCards(section.getValue()); + } } }); + dialog.initParse(); dialog.show(); setSelectedPage(getMainDeckPage()); //select main deck page if needed so main deck if visible below dialog })); @@ -643,6 +677,20 @@ public class FDeckEditor extends TabPageScreen { getMainDeckPage().addCards(landsToAdd); } + /** + * If a card is missing from a player's inventory while importing a deck, it gets run through here. + * Returning a PaperCard will let unlimited copies of that card be used as a substitute. Returning null + * will leave the card missing from the import. + */ + protected PaperCard supplyPrintForImporter(PaperCard missingCard) { + //Could support dungeons here too? Not that we really use them in the editor... + if(!missingCard.isVeryBasicLand()) + return null; + List basicSets = editorConfig.getBasicLandSets(deck); + String setCode = basicSets.isEmpty() ? "JMP" : basicSets.get(0).getCode(); + return FModel.getMagicDb().fetchCard(missingCard.getCardName(), setCode, null); + } + protected boolean shouldEnforceConformity() { if(FModel.getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY)) return true; @@ -695,6 +743,9 @@ public class FDeckEditor extends TabPageScreen { showExtraSectionTab(section); if(pagesBySection.containsKey(section)) setSelectedPage(pagesBySection.get(section)); + else if(section == DeckSection.Main && pagesBySection.containsKey(mainDeckPage.deckSection)) + //Tried to switch to the Main page in a Planar or Scheme deck. + setSelectedPage(pagesBySection.get(mainDeckPage.deckSection)); } public void notifyNewControllerModel() { @@ -1027,7 +1078,7 @@ public class FDeckEditor extends TabPageScreen { protected boolean allowSaveAs() { return allowSave() && allowRename(); } - protected boolean allowsAddBasic() { + protected boolean allowAddBasic() { return !isDrafting(); } diff --git a/forge-gui-mobile/src/forge/deck/FDeckImportDialog.java b/forge-gui-mobile/src/forge/deck/FDeckImportDialog.java index 9287adfcfa6..251da9f6716 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckImportDialog.java +++ b/forge-gui-mobile/src/forge/deck/FDeckImportDialog.java @@ -18,11 +18,12 @@ package forge.deck; import java.util.ArrayList; +import java.util.EnumSet; import java.util.List; import java.util.function.Consumer; +import java.util.function.Function; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Lists; import forge.Forge; import forge.Graphics; @@ -31,11 +32,15 @@ import forge.deck.DeckRecognizer.TokenType; import forge.game.GameType; import forge.gui.FThreads; import forge.gui.util.SOptionPane; +import forge.item.PaperCard; import forge.toolbox.FCheckBox; import forge.toolbox.FComboBox; import forge.toolbox.FDialog; import forge.toolbox.FOptionPane; import forge.toolbox.FTextArea; +import forge.util.ItemPool; +import forge.util.Localizer; +import org.apache.commons.lang3.StringUtils; public class FDeckImportDialog extends FDialog { @@ -45,7 +50,7 @@ public class FDeckImportDialog extends FDialog { private final FCheckBox newEditionCheck = add(new FCheckBox(Forge.getLocalizer().getMessage("lblImportLatestVersionCard"), false)); private final FCheckBox dateTimeCheck = add(new FCheckBox(Forge.getLocalizer().getMessage("lblUseOnlySetsReleasedBefore"), false)); private final FCheckBox smartCardArtCheck = add(new FCheckBox(Forge.getLocalizer().getMessage("lblUseSmartCardArt"), false)); - private final FCheckBox createNewDeckCheck = add(new FCheckBox(Forge.getLocalizer().getMessage("lblNewDeckCheckbox"), false)); + private final FCheckBox createNewDeckCheck = add(new FCheckBox(Forge.getLocalizer().getMessage("lblReplaceDeckCheckbox"), false)); // private final FCheckBox importInDeck = add(new FCheckBox() /*setting onlyCoreExpCheck to false allow the copied cards to pass the check of deck contents forge-core\src\main\java\forge\deck\Deck.javaDeck.java starting @ Line 320 which is called by @@ -57,100 +62,60 @@ public class FDeckImportDialog extends FDialog { private final FComboBox monthDropdown = add(new FComboBox<>()); //don't need wrappers since skin can't change while this dialog is open private final FComboBox yearDropdown = add(new FComboBox<>()); - private final boolean showOptions; - private final boolean currentDeckIsEmpty; + private boolean showOptions; + private final Deck currentDeck; private boolean createNewDeckControl; private final DeckImportController controller; + private final FDeckEditor.DeckEditorConfig editorConfig; private final static ImmutableList importOrCancel = ImmutableList.of(Forge.getLocalizer().getMessage("lblImport"), Forge.getLocalizer().getMessage("lblCancel")); - public FDeckImportDialog(final boolean replacingDeck, final FDeckEditor.DeckEditorConfig editorConfig) { + public FDeckImportDialog(final Deck currentDeck, final FDeckEditor.DeckEditorConfig editorConfig) { super(Forge.getLocalizer().getMessage("lblImportFromClipboard"), 2); + boolean usingInventory = editorConfig.usePlayerInventory(); + boolean replacingDeck = !currentDeck.isEmpty() || usingInventory; + this.currentDeck = currentDeck; + this.editorConfig = editorConfig; + ItemPool cardPool = editorConfig.getCardPool(false); controller = new DeckImportController(dateTimeCheck, monthDropdown, yearDropdown, replacingDeck); String contents = Forge.getClipboard().getContents(); if (contents == null) contents = ""; //prevent NPE txtInput.setText(contents); - if (editorConfig.allowsCardReplacement()) { - GameType gameType = editorConfig.getGameType(); - controller.setGameFormat(gameType); - List supportedSections = new ArrayList<>(); - supportedSections.add(DeckSection.Main); - supportedSections.add(DeckSection.Sideboard); - if (editorConfig.hasCommander()) - supportedSections.add(DeckSection.Commander); - supportedSections.addAll(Lists.newArrayList(editorConfig.getExtraSections())); - controller.setAllowedSections(supportedSections); - } + GameType gameType = editorConfig.getGameType(); + controller.setGameFormat(gameType); + List supportedSections = new ArrayList<>(); + supportedSections.addAll(List.of(editorConfig.getPrimarySections())); + supportedSections.addAll(List.of(editorConfig.getExtraSections())); + controller.setAllowedSections(supportedSections); + controller.setCurrentDeckInEditor(currentDeck); + if(usingInventory) + controller.setPlayerInventory(cardPool); onlyCoreExpCheck.setSelected(StaticData.instance().isCoreExpansionOnlyFilterSet()); newEditionCheck.setSelected(StaticData.instance().cardArtPreferenceIsLatest()); smartCardArtCheck.setSelected(StaticData.instance().isEnabledCardArtSmartSelection()); createNewDeckCheck.setSelected(replacingDeck); - this.currentDeckIsEmpty = !replacingDeck; this.createNewDeckControl = replacingDeck; - initButton(0, Forge.getLocalizer().getMessage("lblImport"), e -> FThreads.invokeInBackgroundThread(() -> { - List tokens = controller.parseInput(txtInput.getText()); //ensure deck updated based on any changes to options + if(usingInventory) + controller.setImportBehavior(DeckImportController.ImportBehavior.REPLACE_CURRENT); + else + controller.setImportBehavior(createNewDeckControl ? DeckImportController.ImportBehavior.CREATE_NEW : DeckImportController.ImportBehavior.MERGE); - if (controller.isSmartCardArtEnabled()) - tokens = controller.optimiseCardArtInTokens(); - - //if there are any cards that cannot be imported, let user know this and give them the option to cancel - StringBuilder sb = new StringBuilder(); - for (DeckRecognizer.Token token : tokens) { - if (token.getType() == TokenType.CARD_FROM_NOT_ALLOWED_SET - || token.getType() == TokenType.CARD_FROM_INVALID_SET - || token.getType() == TokenType.UNKNOWN_CARD - || token.getType() == TokenType.UNSUPPORTED_CARD) { - if (sb.length() > 0) - sb.append("\n"); - sb.append(token.getQuantity()).append(" ").append(token.getText()); - } - } - if (sb.length() > 0) { - if (SOptionPane.showOptionDialog(Forge.getLocalizer().getMessage("lblFollowingCardsCannotBeImported") + "\n\n" + sb, Forge.getLocalizer().getMessage("lblImportRemainingCards"), SOptionPane.INFORMATION_ICON, importOrCancel) == 1) { - return; - } - } - - final Deck deck = controller.accept(); //must accept in background thread in case a dialog is shown - if (deck == null) { return; } - - FThreads.invokeInEdtLater(() -> { - hide(); - if (callback != null) - callback.accept(deck); - }); - })); + initButton(0, Forge.getLocalizer().getMessage("lblImport"), e -> FThreads.invokeInBackgroundThread(this::performImport)); initButton(1, Forge.getLocalizer().getMessage("lblCancel"), e -> hide()); - List tokens = controller.parseInput(txtInput.getText()); - if (controller.isSmartCardArtEnabled()) - tokens = controller.optimiseCardArtInTokens(); - //ensure at least one known card found on clipboard - for (DeckRecognizer.Token token : tokens) { - if (token.getType() == TokenType.LEGAL_CARD) { - showOptions = true; - - dateTimeCheck.setCommand(e -> updateDropDownEnabled()); - newEditionCheck.setCommand(e -> setArtPreferenceInController()); - onlyCoreExpCheck.setCommand(e -> setArtPreferenceInController()); - smartCardArtCheck.setCommand(e -> controller.setSmartCardArtOptimisation(smartCardArtCheck.isSelected())); - createNewDeckCheck.setCommand(e -> { - createNewDeckControl = createNewDeckCheck.isSelected(); - controller.setCreateNewDeck(createNewDeckControl); - }); - updateDropDownEnabled(); - setArtPreferenceInController(); - return; - } - } - - showOptions = false; - setButtonEnabled(0, false); - txtInput.setText(Forge.getLocalizer().getMessage("lblNoKnownCardsOnClipboard")); + dateTimeCheck.setCommand(e -> updateDropDownEnabled()); + newEditionCheck.setCommand(e -> setArtPreferenceInController()); + onlyCoreExpCheck.setCommand(e -> setArtPreferenceInController()); + smartCardArtCheck.setCommand(e -> controller.setSmartCardArtOptimisation(smartCardArtCheck.isSelected())); + createNewDeckCheck.setCommand(e -> { + createNewDeckControl = createNewDeckCheck.isSelected(); + controller.setImportBehavior(createNewDeckControl ? DeckImportController.ImportBehavior.CREATE_NEW : DeckImportController.ImportBehavior.MERGE); + }); + setShowOptions(false); } private void setArtPreferenceInController() { @@ -160,16 +125,66 @@ public class FDeckImportDialog extends FDialog { } private void updateDropDownEnabled() { - boolean enabled = dateTimeCheck.isSelected(); + boolean enabled = dateTimeCheck.isSelected() && this.showOptions; monthDropdown.setEnabled(enabled); yearDropdown.setEnabled(enabled); } + private void setShowOptions(boolean showOptions) { + this.showOptions = showOptions; + dateTimeCheck.setEnabled(showOptions); + newEditionCheck.setEnabled(showOptions); + onlyCoreExpCheck.setEnabled(showOptions); + newEditionCheck.setEnabled(showOptions); + smartCardArtCheck.setEnabled(showOptions); + createNewDeckCheck.setEnabled(showOptions); + updateDropDownEnabled(); + } + public void setCallback(Consumer callback0){ callback = callback0; } - public boolean createNewDeck(){ return this.createNewDeckControl; } + public void setFreePrintConverter(Function freePrintConverter) { + this.controller.setFreePrintConverter(freePrintConverter); + } + + public DeckImportController.ImportBehavior getImportBehavior() { + return controller.getImportBehavior(); + } + + public void setImportBannedCards(boolean importBannedCards) { + controller.importBannedAndRestrictedCards(importBannedCards); + } + + public void initParse() { + boolean usingInventory = editorConfig.usePlayerInventory(); + List tokens = controller.parseInput(txtInput.getText()); + if (usingInventory) + tokens = controller.constrainTokensToInventory(); + else if (controller.isSmartCardArtEnabled()) + tokens = controller.optimiseCardArtInTokens(); + //ensure at least one known card found on clipboard + for (DeckRecognizer.Token token : tokens) { + if (token.getType() == TokenType.LEGAL_CARD || token.getType() == TokenType.FREE_CARD_NOT_IN_INVENTORY) { + + if(usingInventory) { + //Settings aren't compatible with player inventories. + setShowOptions(false); + return; + } + + setShowOptions(true); + + updateDropDownEnabled(); + setArtPreferenceInController(); + return; + } + } + + setButtonEnabled(0, false); + txtInput.setText(Forge.getLocalizer().getMessage("lblNoKnownCardsOnClipboard")); + } @Override public void drawOverlay(Graphics g) { @@ -202,7 +217,7 @@ public class FDeckImportDialog extends FDialog { yearDropdown.setBounds(x + dropDownWidth + fieldPadding, y, dropDownWidth, h); y += h + fieldPadding; - if (!this.currentDeckIsEmpty){ + if (!this.currentDeck.isEmpty()){ smartCardArtCheck.setBounds(x, y, w/2, h); createNewDeckCheck.setBounds(x + w/2, y, w/2, h); } else @@ -222,4 +237,49 @@ public class FDeckImportDialog extends FDialog { } return y; } + + private static final EnumSet MISSING_TOKENS = EnumSet.of(TokenType.CARD_FROM_NOT_ALLOWED_SET, + TokenType.CARD_FROM_INVALID_SET, TokenType.UNKNOWN_CARD, TokenType.UNSUPPORTED_CARD, + TokenType.WARNING_MESSAGE, TokenType.CARD_NOT_IN_INVENTORY); + + private void performImport() { + List tokens = controller.parseInput(txtInput.getText()); //ensure deck updated based on any changes to options + + if (editorConfig.usePlayerInventory()) + tokens = controller.constrainTokensToInventory(); + else if (controller.isSmartCardArtEnabled()) + tokens = controller.optimiseCardArtInTokens(); + + //if there are any cards that cannot be imported, let user know this and give them the option to cancel + StringBuilder sb = new StringBuilder(); + for (DeckRecognizer.Token token : tokens) { + if (MISSING_TOKENS.contains(token.getType())) { + if (!sb.isEmpty()) + sb.append("\n"); + String message = controller.getTokenMessage(token); + String statusMessage = controller.getTokenStatusMessage(token); + if(!StringUtils.isBlank(statusMessage)) + sb.append(String.format("%s - (%s)", message, statusMessage)); + else + sb.append(statusMessage); + } + } + if (!sb.isEmpty()) { + Localizer localizer = Forge.getLocalizer(); + if (SOptionPane.showOptionDialog(localizer.getMessage("lblFollowingCardsCannotBeImported") + "\n\n" + sb, localizer.getMessage("lblImportRemainingCards"), SOptionPane.WARNING_ICON, importOrCancel) == 1) { + return; + } + } + + final Deck deck = controller.accept(currentDeck.getName()); //must accept in background thread in case a dialog is shown + if (deck == null) { + return; + } + + FThreads.invokeInEdtLater(() -> { + hide(); + if (callback != null) + callback.accept(deck); + }); + } } diff --git a/forge-gui/res/languages/de-DE.properties b/forge-gui/res/languages/de-DE.properties index f1119155fe8..56cbd2770a5 100644 --- a/forge-gui/res/languages/de-DE.properties +++ b/forge-gui/res/languages/de-DE.properties @@ -2838,6 +2838,7 @@ lblDecklistTitle=Deckliste lblSummaryStats=Gesamt-Statistik lblDeckSection=Bereich lblNewDeckCheckbox=Erzeuge ein neues Deck +lblReplaceDeckCheckbox=Replace Current Deck lblImportCardsCmd=Importiere Karten lblCreateNewCmd=Neues Deck lblErrNotAllowedCard=Set ist nicht erlaubt in {0} @@ -2845,6 +2846,7 @@ lblWarnLimitedCard={0} in {1} lblErrCardEditionDate=Set verträgt sich nicht mit der Erscheinungsdatum-Option lblErrUnsupportedCard=Ist nicht erlaubt in {0} lblWarnUnknownCardMsg=Unbekannte oder in Forge nicht unterstützte Karte +lblWarnNotInInventory=Card not found in inventory lblWarnTooManyCommanders=Aktueller {0}-Bereich enthält {1} mögliche Commander-Karten: {2} lblWarnCommandersInSideExtra=Bitte prüfen und, falls nötig, min. eine Karte in den Commander-Bereich verschieben. lblWarnDeckSectionNotAllowedInEditor=In {1} ist der {0}-Bereich nicht erlaubt. @@ -2936,6 +2938,7 @@ lblCardImportWarning=\nWarnung: Das Deck {0} wird umbenannt in {1}. lblConfirmCreateNewDeck=Du bist dabei das neue Deck {0} zu erzeugen. {1}\n\nWillst du fortfahren?\n\n Hinweis: \ Bitte denk daran den "Save"-Knopf im Deck-Editor zu klicken, um das neue Deck dem Deck-Katalog hinzuzufügen! lblNewDeckWarning=\nWarnung: Alle ungesicherten Änderungen am aktuellen Deck {0} werden verlorengehen. +lblConfirmReplaceDeck=This will replace the contents of the current deck ({0}) with the imported cards.\n\nWould you like to proceed? lblImportCardsDialogTitle=Importiere Karten in aktuelles Deck lblNewDeckDialogTitle=Erzeuge neues Deck #FNetOverlay.java diff --git a/forge-gui/res/languages/en-US.properties b/forge-gui/res/languages/en-US.properties index f808e0d736b..4b49dcbf189 100644 --- a/forge-gui/res/languages/en-US.properties +++ b/forge-gui/res/languages/en-US.properties @@ -2898,6 +2898,7 @@ lblDecklistTitle=Decklist lblSummaryStats=Summary Statistics lblDeckSection=Section lblNewDeckCheckbox=Create a New Deck +lblReplaceDeckCheckbox=Replace Current Deck lblImportCardsCmd=Import Cards lblCreateNewCmd=New Deck lblErrNotAllowedCard=Set not allowed in {0} @@ -2905,6 +2906,7 @@ lblWarnLimitedCard={0} in {1} lblErrCardEditionDate=Set not compliant with Release Date option lblErrUnsupportedCard=Not allowed in {0} lblWarnUnknownCardMsg=Unknown Card or Unsupported in Forge +lblWarnNotInInventory=Card not found in inventory lblWarnTooManyCommanders=Current {0} Section contains {1} potential Commander Cards: {2} lblWarnCommandersInSideExtra=Please check and move one to the Commander Section, in case. lblWarnDeckSectionNotAllowedInEditor={0} Section is not allowed in {1} @@ -3001,6 +3003,7 @@ lblCardImportWarning=\nWarning: The deck {0} will be renamed as {1}. lblConfirmCreateNewDeck=You are about to create a new deck {0}. {1}\n\nWould you like to proceed?\n\n Note: \ Please remember to click on the "Save" button in the Deck Editor to add the new deck to the Catalog! lblNewDeckWarning=\nWarning: Any unsaved changes to the current deck {0} will be lost. +lblConfirmReplaceDeck=This will replace the contents of the current deck ({0}) with the imported cards.\n\nWould you like to proceed? lblImportCardsDialogTitle=Import cards in the Current Deck lblNewDeckDialogTitle=Create a New Deck #FNetOverlay.java diff --git a/forge-gui/res/languages/es-ES.properties b/forge-gui/res/languages/es-ES.properties index a715861c960..663759c9bdf 100644 --- a/forge-gui/res/languages/es-ES.properties +++ b/forge-gui/res/languages/es-ES.properties @@ -2847,6 +2847,7 @@ lblDecklistTitle=Decklist lblSummaryStats=Summary Statistics lblDeckSection=Section lblNewDeckCheckbox=Create a New Deck +lblReplaceDeckCheckbox=Replace Current Deck lblImportCardsCmd=Import Cards lblCreateNewCmd=New Deck lblErrNotAllowedCard=Set not allowed in {0} @@ -2854,6 +2855,7 @@ lblWarnLimitedCard={0} in {1} lblErrCardEditionDate=Set not compliant with Release Date option lblErrUnsupportedCard=Not allowed in {0} lblWarnUnknownCardMsg=Unknown Card or Unsupported in Forge +lblWarnNotInInventory=Card not found in inventory lblWarnTooManyCommanders=Current {0} Section contains {1} potential Commander Cards: {2} lblWarnCommandersInSideExtra=Please check and move one to the Commander Section, in case. lblWarnDeckSectionNotAllowedInEditor={0} Section is not allowed in {1} @@ -2950,6 +2952,7 @@ lblCardImportWarning=\nWarning: The deck {0} will be renamed as {1}. lblConfirmCreateNewDeck=You are about to create a new deck {0}. {1}\n\nWould you like to proceed?\n\n Note: \ Please remember to click on the "Save" button in the Deck Editor to add the new deck to the Catalog! lblNewDeckWarning=\nWarning: Any unsaved changes to the current deck {0} will be lost. +lblConfirmReplaceDeck=This will replace the contents of the current deck ({0}) with the imported cards.\n\nWould you like to proceed? lblImportCardsDialogTitle=Import cards in the Current Deck lblNewDeckDialogTitle=Create a New Deck #FNetOverlay.java diff --git a/forge-gui/res/languages/fr-FR.properties b/forge-gui/res/languages/fr-FR.properties index f0b1edad4a6..6d1a5e71b96 100644 --- a/forge-gui/res/languages/fr-FR.properties +++ b/forge-gui/res/languages/fr-FR.properties @@ -2840,6 +2840,7 @@ lblDecklistTitle=Liste de deck lblSummaryStats=Statistiques récapitulatives lblDeckSection=Section lblNewDeckCheckbox=Créer un nouveau deck +lblReplaceDeckCheckbox=Replace Current Deck lblImportCardsCmd=Importer des cartes lblCreateNewCmd=Nouveau Deck lblErrNotAllowedCard=Définir non autorisé dans {0} @@ -2847,6 +2848,7 @@ lblWarnLimitedCard={0} dans {1} lblErrCardEditionDate=Set non conforme avec l'option de date de sortie lblErrUnsupportedCard=Non autorisé dans {0} lblWarnUnknownCardMsg=Carte inconnue ou non prise en charge dans Forge +lblWarnNotInInventory=Card not found in inventory lblWarnTooManyCommanders=La section {0} actuelle contient {1} cartes de commandant potentielles : {2} lblWarnCommandersInSideExtra=Veuillez vérifier et en déplacer un vers la section Commandant, au cas où. lblWarnDeckSectionNotAllowedInEditor={0} La section n'est pas autorisée dans {1} @@ -2944,6 +2946,7 @@ lblCardImportWarning=\nAttention : Le deck {0} sera renommé en {1}. lblConfirmCreateNewDeck=Vous êtes sur le point de créer un nouveau deck {0}. {1}\n\nVoulez-vous continuer ?\n\n Remarque : \ N'oubliez pas de cliquer sur le bouton "Enregistrer" dans l'éditeur de deck pour ajouter le nouveau deck au catalogue ! lblNewDeckWarning=\nAttention : Toute modification non enregistrée dans le deck actuel {0} sera perdue. +lblConfirmReplaceDeck=This will replace the contents of the current deck ({0}) with the imported cards.\n\nWould you like to proceed? lblImportCardsDialogTitle=Importer des cartes dans le Deck actuel lblNewDeckDialogTitle=Créer un nouveau deck #FNetOverlay.java diff --git a/forge-gui/res/languages/it-IT.properties b/forge-gui/res/languages/it-IT.properties index 3a64c4aff17..f95f2d0c3e1 100644 --- a/forge-gui/res/languages/it-IT.properties +++ b/forge-gui/res/languages/it-IT.properties @@ -2836,6 +2836,7 @@ lblDecklistTitle=Lista delle Carte da Importare lblSummaryStats=Statistiche Generali lblDeckSection=Sezione lblNewDeckCheckbox=Crea un nuovo mazzo +lblReplaceDeckCheckbox=Replace Current Deck lblImportCardsCmd=Importa le carte lblCreateNewCmd=Nuovo mazzo lblErrNotAllowedCard=Edizione non permessa in {0} @@ -2843,6 +2844,7 @@ lblWarnLimitedCard={0} in {1} lblErrCardEditionDate=Edizione non valida secondo l'opzione sulla data di pubblicazione selezionata lblErrUnsupportedCard=Non Permesso in {0} lblWarnUnknownCardMsg=Carta Sconosciuta, o non supportata in Forge +lblWarnNotInInventory=Card not found in inventory lblWarnTooManyCommanders=La Sezione {0} contiene {1} potenziali carte Commander: {2} lblWarnCommandersInSideExtra=Per favore, controlla e nel caso spostane una nella sezione Commander. lblWarnDeckSectionNotAllowedInEditor={0} Sezione non è permessa in {1} @@ -2942,6 +2944,7 @@ lblCardImportWarning=\nAttenzione: Il mazzo {0} sarà rinominato come {1}. lblConfirmCreateNewDeck=Si sta per creare un nuovo mazzo {0}. {1}\n\nSi desidera procedere?\n\n Nota: \ Non dimenticare di premere il tasto "Salva" una volta importate le carte per aggiungere il nuovo mazzo al catalogo! lblNewDeckWarning=\nAttenzione: Qualsiasi modifica non salvata al mazzo corrente {0} sarà persa. +lblConfirmReplaceDeck=This will replace the contents of the current deck ({0}) with the imported cards.\n\nWould you like to proceed? lblImportCardsDialogTitle=Importa le carte nel mazzo corrente lblNewDeckDialogTitle=Crea un nuovo mazzo #FNetOverlay.java diff --git a/forge-gui/res/languages/ja-JP.properties b/forge-gui/res/languages/ja-JP.properties index b60161c00d3..471d530fa74 100644 --- a/forge-gui/res/languages/ja-JP.properties +++ b/forge-gui/res/languages/ja-JP.properties @@ -2835,6 +2835,7 @@ lblDecklistTitle=Decklist lblSummaryStats=Summary Statistics lblDeckSection=Section lblNewDeckCheckbox=Create a New Deck +lblReplaceDeckCheckbox=Replace Current Deck lblImportCardsCmd=Import Cards lblCreateNewCmd=New Deck lblErrNotAllowedCard=Set not allowed in {0} @@ -2842,6 +2843,7 @@ lblWarnLimitedCard={0} in {1} lblErrCardEditionDate=Set not compliant with Release Date option lblErrUnsupportedCard=Not allowed in {0} lblWarnUnknownCardMsg=Unknown Card or Unsupported in Forge +lblWarnNotInInventory=Card not found in inventory lblWarnTooManyCommanders=Current {0} Section contains {1} potential Commander Cards: {2} lblWarnCommandersInSideExtra=Please check and move one to the Commander Section, in case. lblWarnDeckSectionNotAllowedInEditor={0} Section is not allowed in {1} @@ -2938,6 +2940,7 @@ lblCardImportWarning=\nWarning: The deck {0} will be renamed as {1}. lblConfirmCreateNewDeck=You are about to create a new deck {0}. {1}\n\nWould you like to proceed?\n\n Note: \ Please remember to click on the "Save" button in the Deck Editor to add the new deck to the Catalog! lblNewDeckWarning=\nWarning: Any unsaved changes to the current deck {0} will be lost. +lblConfirmReplaceDeck=This will replace the contents of the current deck ({0}) with the imported cards.\n\nWould you like to proceed? lblImportCardsDialogTitle=Import cards in the Current Deck lblNewDeckDialogTitle=Create a New Deck #FNetOverlay.java diff --git a/forge-gui/res/languages/pt-BR.properties b/forge-gui/res/languages/pt-BR.properties index e296ffda340..1386999433d 100644 --- a/forge-gui/res/languages/pt-BR.properties +++ b/forge-gui/res/languages/pt-BR.properties @@ -2917,6 +2917,7 @@ lblDecklistTitle=Lista de decks lblSummaryStats=Estatísticas Resumidas lblDeckSection=Seção lblNewDeckCheckbox=Criar um Novo deck +lblReplaceDeckCheckbox=Replace Current Deck lblImportCardsCmd=Importar Cartas lblCreateNewCmd=Novo Deck lblErrNotAllowedCard=Coleção não permitida em {0} @@ -2924,6 +2925,7 @@ lblWarnLimitedCard={0} em {1} lblErrCardEditionDate=Coleção não compatível com a opção de Data de Lançamento lblErrUnsupportedCard=Não permitido em {0} lblWarnUnknownCardMsg=Carta desconhecida ou não suportada no Forge +lblWarnNotInInventory=Card not found in inventory lblWarnTooManyCommanders=Seção {0} Atual contém {1} Cartas de Comandante em potencial\: {2} lblWarnCommandersInSideExtra=Verifique e mova um para a seção do Comandante. lblWarnDeckSectionNotAllowedInEditor=Seção {0} não é permitida em {1} @@ -3012,6 +3014,7 @@ Deseja prosseguir?\n\ Nota\: Por favor, lembre-se de clicar no botão "Salvar" no Editor do Deck para adicioná-lo ao Catálogo\! lblNewDeckWarning=\n\ Aviso\: Qualquer alteração não salva no deck atual {0} será perdida. +lblConfirmReplaceDeck=This will replace the contents of the current deck ({0}) with the imported cards.\n\nWould you like to proceed? lblImportCardsDialogTitle=Importar cartas no Deck Atual lblNewDeckDialogTitle=Criar um Novo deck #FNetOverlay.java diff --git a/forge-gui/res/languages/zh-CN.properties b/forge-gui/res/languages/zh-CN.properties index 131b6421519..b1d79ab5f0f 100644 --- a/forge-gui/res/languages/zh-CN.properties +++ b/forge-gui/res/languages/zh-CN.properties @@ -2844,6 +2844,7 @@ lblDecklistTitle=套牌列表 lblSummaryStats=统计摘要 lblDeckSection=部分 lblNewDeckCheckbox=创建一个新套牌 +lblReplaceDeckCheckbox=Replace Current Deck lblImportCardsCmd=导入牌张 lblCreateNewCmd=新建套牌 lblErrNotAllowedCard=系列{0}不被允许 @@ -2851,6 +2852,7 @@ lblWarnLimitedCard={0}中的{1} lblErrCardEditionDate=不符合上市日期选项 lblErrUnsupportedCard={0}不被允许 lblWarnUnknownCardMsg=未知的牌张或未被forge支持的牌张 +lblWarnNotInInventory=Card not found in inventory lblWarnTooManyCommanders=现在{0}部分包含{1}张潜在的指挥官牌张: {2} lblWarnCommandersInSideExtra=如果确实是指挥官,请进行进行检查并将其中的一张移动到指挥官区。 lblWarnDeckSectionNotAllowedInEditor={0}部分中的{1}不被允许 @@ -2928,6 +2930,7 @@ lblCardImportWarning=\n警告:套牌{0}将被重命名为{1}。 lblConfirmCreateNewDeck=你即将创建一个新套牌{0}。{1}\n\n你想要继续吗?\n\n 注意:请记得点击套牌编辑器中的\"保存按钮\"以\ 将新建的套牌保存到目录中! lblNewDeckWarning=\n警告:对于当前套牌{0}的任何未保存更改丢将被丢弃。 +lblConfirmReplaceDeck=This will replace the contents of the current deck ({0}) with the imported cards.\n\nWould you like to proceed? lblImportCardsDialogTitle=将牌张导入到当前套牌 lblNewDeckDialogTitle=创建一个新套牌 #FNetOverlay.java diff --git a/forge-gui/src/main/java/forge/deck/DeckImportController.java b/forge-gui/src/main/java/forge/deck/DeckImportController.java index 8ba686c67ce..dbf89e11c2f 100644 --- a/forge-gui/src/main/java/forge/deck/DeckImportController.java +++ b/forge-gui/src/main/java/forge/deck/DeckImportController.java @@ -13,15 +13,24 @@ import forge.gui.util.SOptionPane; import forge.item.PaperCard; import forge.localinstance.properties.ForgePreferences; import forge.model.FModel; +import forge.util.ItemPool; import forge.util.Localizer; +import forge.util.StreamUtil; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; import java.text.DateFormatSymbols; import java.util.*; +import java.util.function.Function; public class DeckImportController { - private boolean createNewDeck; + public enum ImportBehavior { + MERGE, + CREATE_NEW, + REPLACE_CURRENT + } + + private ImportBehavior importBehavior; // Date filter private final ICheckBox dateTimeCheck; private final IComboBox monthDropdown; @@ -30,7 +39,7 @@ public class DeckImportController { private CardDb.CardArtPreference artPreference; private boolean smartCardArt; // Block Preference Filter - private boolean inlcludeBnRInDeck = false; + private boolean includeBnRInDeck = false; private final List tokens = new ArrayList<>(); private final Map cardsInTokens = new HashMap<>(); @@ -38,7 +47,14 @@ public class DeckImportController { private Deck currentDeckInEditor = null; private DeckFormat currentDeckFormat; private GameFormat currentGameFormat; + private GameType currentGameType; private final List allowedSections = new ArrayList<>(); + private ItemPool playerInventory; + /** + * If a free card is missing from a player's inventory (e.g. a basic land), it gets run through this function, which + * can handle creation of a usable print. + */ + private Function freePrintSupplier; public DeckImportController(ICheckBox dateTimeCheck0, IComboBox monthDropdown0, IComboBox yearDropdown0, @@ -54,13 +70,14 @@ public class DeckImportController { */ this.currentDeckNotEmpty = currentDeckNotEmpty; // this option will control the "new deck" action controlled by UI widget - createNewDeck = false; + this.importBehavior = ImportBehavior.MERGE; // Init default parameters this.artPreference = StaticData.instance().getCardArtPreference(); // default this.smartCardArt = StaticData.instance().isEnabledCardArtSmartSelection(); this.currentDeckFormat = null; this.currentGameFormat = null; + this.currentGameType = null; fillDateDropdowns(); } @@ -68,13 +85,23 @@ public class DeckImportController { if (gameType == null){ this.currentGameFormat = null; this.currentDeckFormat = null; + this.currentGameType = null; } else { // get the game format with the same name of current game type (if any) this.currentDeckFormat = gameType.getDeckFormat(); this.currentGameFormat = FModel.getFormats().get(gameType.name()); + this.currentGameType = gameType; } } + public void setPlayerInventory(ItemPool inventory) { + this.playerInventory = inventory; + } + + public void setFreePrintConverter(Function freePrintSupplier) { + this.freePrintSupplier = freePrintSupplier; + } + public void setCurrentDeckInEditor(Deck deckInEditor){ this.currentDeckInEditor = deckInEditor; } @@ -105,11 +132,13 @@ public class DeckImportController { return this.smartCardArt; } - public void setCreateNewDeck(boolean createNewDeck){ - this.createNewDeck = createNewDeck; + public void setImportBehavior(ImportBehavior importBehavior) { + this.importBehavior = importBehavior; } - public boolean getCreateNewDeck() { return this.createNewDeck; } + public ImportBehavior getImportBehavior() { + return importBehavior; + } private void fillDateDropdowns() { DateFormatSymbols dfs = new DateFormatSymbols(); @@ -159,10 +188,10 @@ public class DeckImportController { } public void importBannedAndRestrictedCards(boolean includeBannedAndRestricted){ - this.inlcludeBnRInDeck = includeBannedAndRestricted; + this.includeBnRInDeck = includeBannedAndRestricted; } - public boolean importBannedAndRestrictedCards(){ return this.inlcludeBnRInDeck; } + public boolean importBannedAndRestrictedCards(){ return this.includeBnRInDeck; } public List parseInput(String input) { tokens.clear(); @@ -186,7 +215,7 @@ public class DeckImportController { if (!this.allowedSections.isEmpty()) recognizer.setAllowedDeckSections(this.allowedSections); // Banned and Restricted Card Policy - if (this.inlcludeBnRInDeck) + if (this.includeBnRInDeck) recognizer.forceImportBannedAndRestrictedCards(); String[] lines = input.split("\n"); @@ -196,8 +225,13 @@ public class DeckImportController { if (this.currentGameFormatAllowsCommander()) { List> commanderTokens = getTokensInSection(DeckSection.Commander); - if (commanderTokens.isEmpty()) // Check commanders in Sideboard only if the commander section is empty - checkAndFixCommanderIn(DeckSection.Sideboard); + if (commanderTokens.isEmpty()) { + // Check commanders in Sideboard only if the commander section is empty + if(!getTokensInSection(DeckSection.Sideboard).isEmpty()) + checkAndFixCommanderIn(DeckSection.Sideboard); + else + checkAndFixCommanderIn(DeckSection.Main); + } checkAndFixCommanderIn(DeckSection.Commander); } @@ -309,7 +343,7 @@ public class DeckImportController { } public boolean currentGameFormatAllowsCommander(){ - return this.allowedSections.contains(DeckSection.Commander); + return this.allowedSections.contains(DeckSection.Commander) || this.currentGameType == GameType.PlanarConquest; } public List optimiseCardArtInTokens(){ @@ -332,13 +366,8 @@ public class DeckImportController { else refTokenMap = tokensPerSectionWithSet; - List tokensInSection = refTokenMap.getOrDefault(tokenSection, null); - if (tokensInSection == null) { - tokensInSection = new ArrayList<>(); - tokensInSection.add(token); - refTokenMap.put(tokenSection, tokensInSection); - } else - tokensInSection.add(token); + List tokensInSection = refTokenMap.computeIfAbsent(tokenSection, e -> new ArrayList<>()); + tokensInSection.add(token); } if (tokensPerSectionWithNoSet.isEmpty()) @@ -356,7 +385,7 @@ public class DeckImportController { Map referencePoolPerSection = new HashMap<>(); - if (this.currentDeckNotEmpty && !this.createNewDeck && this.currentDeckInEditor != null){ + if (this.currentDeckNotEmpty && this.importBehavior == ImportBehavior.MERGE && this.currentDeckInEditor != null){ // We will always consider ONLY sections for cards needing art optimisation for (DeckSection section : tokensPerSectionWithNoSet.keySet()){ CardPool cardsInDeck = this.currentDeckInEditor.get(section); @@ -436,6 +465,100 @@ public class DeckImportController { return tokens; } + public List constrainTokensToInventory() { + if(this.playerInventory == null) + return tokens; + CardPool availableInventory = new CardPool(this.playerInventory); + //Map of tokens to the things we're gonna replace them with. + Map> tokenReplacers = new LinkedHashMap<>(); + //If we're adding to our existing deck, ensure we aren't counting the cards already in it. + if(this.importBehavior == ImportBehavior.MERGE && this.currentDeckInEditor != null) + availableInventory.removeAll(this.currentDeckInEditor.getAllCardsInASinglePool(true, true)); + if(this.currentGameType == GameType.PlanarConquest && currentDeckInEditor != null) + availableInventory.removeAllFlat(this.currentDeckInEditor.getCommanders()); + //Step 1: For each token, if it's asking for more copies of a print than we can supply, split the difference out + //into a token that's indifferent to the edition. Reduce available inventory accordingly. + for (Token token : this.tokens) { + if (!token.isCardToken()) + continue; + PaperCard card = token.getCard(); + int requestedAmount = token.getQuantity(); + if (card == null) + continue; + if (token.cardRequestHasNoCode()) { + List list = new ArrayList<>(); + tokenReplacers.put(token, list); + continue; + } + int available = availableInventory.count(card); + if (available <= 0) { + List list = new ArrayList<>(); + tokenReplacers.put(token, list); + continue; + } + int numTaken = Math.min(requestedAmount, available); + availableInventory.remove(card, numTaken); + if (available >= requestedAmount) + continue; + + List list = new ArrayList<>(); + list.add(Token.LegalCard(card, numTaken, token.getTokenSection(), true)); + tokenReplacers.put(token, list); + } + if(tokenReplacers.isEmpty()) + return tokens; //We have every card that was requested. + //Step 2: Try to find alternative prints for the ones that do not request an edition. + int capacity = tokens.size(); + for(Map.Entry> tokenReplacer : tokenReplacers.entrySet()) { + Token token = tokenReplacer.getKey(); + DeckSection tokenSection = token.getTokenSection(); + List replacementList = tokenReplacer.getValue(); + PaperCard card = token.getCard(); + String cardName = card.getName(); + CardPool substitutes = availableInventory.getFilteredPool(c -> c.getName().equals(cardName)); + List> sortedSubstitutes = StreamUtil.stream(substitutes).sorted(Comparator.comparingInt(Map.Entry::getValue)).toList(); + int neededQuantity = token.getQuantity(); + for(Token found : replacementList) { + //If there's an item in the replacement list already it means we've already found some of the needed copies. + neededQuantity -= found.getQuantity(); + } + for(int i = 0; i < sortedSubstitutes.size() && neededQuantity > 0; i++) { + Map.Entry item = sortedSubstitutes.get(i); + PaperCard replacement = item.getKey(); + int toMove = Math.min(neededQuantity, item.getValue()); + replacementList.add(Token.LegalCard(replacement, toMove, tokenSection, true)); + availableInventory.remove(replacement, toMove); + neededQuantity -= toMove; + capacity++; + } + if(neededQuantity > 0) { + PaperCard freePrint = getInfiniteSupplyPrinting(card); + if(freePrint != null) + replacementList.add(Token.NotInInventoryFree(freePrint, neededQuantity, tokenSection)); + else + replacementList.add(Token.NotInInventory(card, neededQuantity, tokenSection)); + capacity++; + } + } + //Step 3: Apply the replacement list. + List newList = new ArrayList<>(capacity); + for(Token t : this.tokens) { + if(tokenReplacers.containsKey(t)) + newList.addAll(tokenReplacers.get(t)); + else + newList.add(t); + } + this.tokens.clear(); + this.tokens.addAll(newList); + return tokens; + } + + private PaperCard getInfiniteSupplyPrinting(PaperCard card) { + if(this.freePrintSupplier == null) + return null; + return freePrintSupplier.apply(card); + } + private int countTokens(List tokensInSection){ if (tokensInSection == null || tokensInSection.isEmpty()) return 0; @@ -487,27 +610,31 @@ public class DeckImportController { if (tokens.isEmpty()) { return null; } String deckName = ""; - if (currentDeckName != null && currentDeckName.trim().length() > 0) + if (currentDeckName != null && !currentDeckName.trim().isEmpty()) deckName = String.format("\"%s\"", currentDeckName.trim()); String tokenDeckName = getTokenDeckNameIfAny(); - if (tokenDeckName.length() > 0) + if (!tokenDeckName.isEmpty()) tokenDeckName = String.format("\"%s\"", tokenDeckName); - if (createNewDeck){ - String extraWarning = currentDeckNotEmpty ? localizer.getMessage("lblNewDeckWarning", deckName) : ""; - final String warning = localizer.getMessage("lblConfirmCreateNewDeck", tokenDeckName, extraWarning); - if (!SOptionPane.showConfirmDialog(warning, localizer.getMessage("lblNewDeckDialogTitle"), - localizer.getMessage("lblYes"), localizer.getMessage("lblNo"))) { - return null; + if(this.currentDeckNotEmpty) { + final String warning; + final String title; + if (this.importBehavior == ImportBehavior.CREATE_NEW) { + String extraWarning = localizer.getMessage("lblNewDeckWarning", deckName); + warning = localizer.getMessage("lblConfirmCreateNewDeck", tokenDeckName, extraWarning); + title = localizer.getMessage("lblNewDeckDialogTitle"); + } else if (this.importBehavior == ImportBehavior.MERGE){ + String extraWarning = (!tokenDeckName.isEmpty() && !tokenDeckName.equals(deckName)) ? + localizer.getMessage("lblCardImportWarning", deckName, tokenDeckName) : ""; + warning = localizer.getMessage("lblConfirmCardImport", deckName, extraWarning); + title = localizer.getMessage("lblImportCardsDialogTitle"); } - } - else if (this.currentDeckNotEmpty){ - String extraWarning = (tokenDeckName.length() > 0 && !tokenDeckName.equals(deckName)) ? - localizer.getMessage("lblCardImportWarning", deckName, tokenDeckName) : ""; - final String warning = localizer.getMessage("lblConfirmCardImport", deckName, extraWarning); - if (!SOptionPane.showConfirmDialog(warning, - localizer.getMessage("lblImportCardsDialogTitle"), + else { + warning = localizer.getMessage("lblConfirmReplaceDeck", deckName); + title = localizer.getMessage("lblNewDeckDialogTitle"); + } + if (!SOptionPane.showConfirmDialog(warning, title, localizer.getMessage("lblYes"), localizer.getMessage("lblNo"))) return null; } @@ -516,7 +643,7 @@ public class DeckImportController { final TokenType type = t.getType(); // only Deck Name, legal card and limited card tokens will be analysed! if (!t.isTokenForDeck() || - (type == TokenType.LIMITED_CARD && !this.inlcludeBnRInDeck)) + (type == TokenType.LIMITED_CARD && !this.includeBnRInDeck)) continue; // SKIP token if (type == TokenType.DECK_NAME) { @@ -547,4 +674,66 @@ public class DeckImportController { } return ""; // no deck name } + + public String getTokenMessage(DeckRecognizer.Token token) { + return switch (token.getType()) { + case LEGAL_CARD, LIMITED_CARD, CARD_FROM_NOT_ALLOWED_SET, CARD_FROM_INVALID_SET, + CARD_NOT_IN_INVENTORY, FREE_CARD_NOT_IN_INVENTORY -> + String.format("%s x %s %s", token.getQuantity(), token.getText(), getTokenFoilLabel(token)); + // Card Warning Msgs + case UNKNOWN_CARD, UNSUPPORTED_CARD -> + token.getQuantity() > 0 ? String.format("%s x %s", token.getQuantity(), token.getText()) + : token.getText(); + case UNSUPPORTED_DECK_SECTION -> + String.format("%s: %s", Localizer.getInstance().getMessage("lblWarningMsgPrefix"), + Localizer.getInstance() + .getMessage("lblWarnDeckSectionNotAllowedInEditor", token.getText(), + this.currentGameType.name())); + + // Special Case of Card moved into another section (e.g. Commander from Sideboard) + case WARNING_MESSAGE -> String.format("%s: %s", Localizer.getInstance() + .getMessage("lblWarningMsgPrefix"), token.getText()); + + // Placeholders + case DECK_SECTION_NAME -> String.format("%s: %s", Localizer.getInstance().getMessage("lblDeckSection"), + token.getText()); + case CARD_RARITY -> String.format("%s: %s", Localizer.getInstance().getMessage("lblRarity"), + token.getText()); + case CARD_TYPE, CARD_CMC, MANA_COLOUR, COMMENT, UNKNOWN_TEXT -> token.getText(); + case DECK_NAME -> String.format("%s: %s", Localizer.getInstance().getMessage("lblDeckName"), + token.getText()); + }; + } + + public String getTokenStatusMessage(DeckRecognizer.Token token) { + if (token == null) + return ""; + + final Localizer localizer = Localizer.getInstance(); + return switch (token.getType()) { + case LIMITED_CARD -> String.format("%s: %s", localizer.getMessage("lblWarningMsgPrefix"), + localizer.getMessage("lblWarnLimitedCard", + StringUtils.capitalize(token.getLimitedCardType().name()), getGameFormatLabel())); + case CARD_FROM_NOT_ALLOWED_SET -> + localizer.getMessage("lblErrNotAllowedCard", getGameFormatLabel()); + case CARD_FROM_INVALID_SET -> localizer.getMessage("lblErrCardEditionDate"); + case UNSUPPORTED_CARD -> localizer.getMessage("lblErrUnsupportedCard", this.currentGameType); + case UNKNOWN_CARD -> String.format("%s: %s", localizer.getMessage("lblWarningMsgPrefix"), + localizer.getMessage("lblWarnUnknownCardMsg")); + case CARD_NOT_IN_INVENTORY -> localizer.getMessage("lblWarnNotInInventory"); + default -> ""; + }; + } + + + private String getTokenFoilLabel(DeckRecognizer.Token token) { + if (!token.isCardToken()) + return ""; + final String foilMarker = "- (Foil)"; + return token.getCard().isFoil() ? foilMarker : ""; + } + + private String getGameFormatLabel() { + return String.format("\"%s\"", this.getCurrentGameFormatName()); + } } diff --git a/forge-gui/src/main/java/forge/deck/DeckProxy.java b/forge-gui/src/main/java/forge/deck/DeckProxy.java index d0c473003c5..ae90813cf6d 100644 --- a/forge-gui/src/main/java/forge/deck/DeckProxy.java +++ b/forge-gui/src/main/java/forge/deck/DeckProxy.java @@ -774,7 +774,7 @@ public class DeckProxy implements InventoryItem { for (PaperCard c : deck.getAllCardsInASinglePool().toFlatList()) { CardEdition edition = FModel.getMagicDb().getEditions().get(c.getEdition()); - if (edition == null) + if (edition == null || !edition.hasBasicLands()) continue; availableEditions.add(edition); } diff --git a/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestData.java b/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestData.java index 544a57e84db..0ed47c54c12 100644 --- a/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestData.java +++ b/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestData.java @@ -18,15 +18,11 @@ package forge.gamemodes.planarconquest; import java.io.File; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.Map.Entry; import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Collectors; import forge.card.CardDb; import forge.gamemodes.planarconquest.ConquestPreferences.CQPref; @@ -199,14 +195,11 @@ public final class ConquestData { } public int getAccessiblePlaneCount() { - // TODO: Java 8 stream implementation of filtering - int i = 0; - for (ConquestPlane plane : FModel.getPlanes()) { - if (!plane.isUnreachable()) { - i++; - } - } - return i; + return (int) FModel.getPlanes().stream().filter(Predicate.not(ConquestPlane::isUnreachable)).count(); + } + + public Set getUnlockedPlanes() { + return planeDataMap.values().stream().map(ConquestPlaneData::getLocation).map(ConquestLocation::getPlane).collect(Collectors.toSet()); } public void unlockPlane(ConquestPlane plane) { @@ -302,7 +295,7 @@ public final class ConquestData { } } - if (commandersUsingCard.length() > 0) { + if (!commandersUsingCard.isEmpty()) { SOptionPane.showMessageDialog(Localizer.getInstance().getMessage("lblCommandersCardCannotBeExiledByCard", CardTranslation.getTranslatedName(card.getName()), commandersUsingCard), title, SOptionPane.INFORMATION_ICON); return false; } diff --git a/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestPlane.java b/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestPlane.java index 70caed02419..dc51523487f 100644 --- a/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestPlane.java +++ b/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestPlane.java @@ -50,6 +50,7 @@ public class ConquestPlane { private FCollection commanders; private ConquestAwardPool awardPool; private ConquestEvent[] events; + private final Set editions = new HashSet<>(); private ConquestPlane(String name0, String description0, int regionSize0, boolean unreachable0) { name = name0; @@ -153,6 +154,10 @@ public class ConquestPlane { return planeCards; } + public Set getEditions() { + return editions; + } + private void ensureRegionsLoaded() { if (regions != null) { return; } @@ -193,6 +198,8 @@ public class ConquestPlane { if (edition == null) continue; + editions.add(edition); + for (EditionEntry card : edition.getObtainableCards()) { if (bannedCardSet == null || !bannedCardSet.contains(card.name())) { addCard(commonCards.getCard(card.name(), setCode)); diff --git a/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java b/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java index e70544d620b..1d095807c7a 100644 --- a/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java +++ b/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java @@ -1,22 +1,16 @@ package forge.gamemodes.planarconquest; -import java.util.EnumSet; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.Map.Entry; -import java.util.Set; import java.util.function.Predicate; +import java.util.stream.Collectors; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; -import forge.card.CardRarity; -import forge.card.CardRules; -import forge.card.CardType; +import forge.card.*; import forge.card.CardType.CoreType; -import forge.card.ColorSet; -import forge.card.MagicColor; import forge.card.mana.ManaCostShard; import forge.deck.CardPool; import forge.deck.Deck; @@ -143,6 +137,25 @@ public class ConquestUtil { return pool; } + public static List getBasicLandSets(Deck currentDeck) { + ConquestData model = FModel.getConquest().getModel(); + List planes = new ArrayList<>(model.getUnlockedPlanes()); + ConquestPlane currentPlane = model.getCurrentPlane(); + //Move the current plane to the front. + if(currentPlane != null && planes.contains(currentPlane)) { + planes.remove(currentPlane); + planes.add(0, currentPlane); + } + //Move editions of cards already in the deck to the front. + Map editionStats = currentDeck.getAllCardsInASinglePool().getCardEditionStatistics(true); + List out = planes.stream() + .mapMulti((p, c) -> p.getEditions().forEach(c)) + .filter(CardEdition::hasBasicLands) + .sorted(Comparator.comparing(e -> editionStats.getOrDefault(e, 0))) + .collect(Collectors.toList()); + return out; + } + public static ConquestPlane getPlaneByName(String planeName) { for (ConquestPlane plane : FModel.getPlanes()) { if (plane.getName().equals(planeName)) { @@ -189,19 +202,16 @@ public class ConquestUtil { public static int getShardValue(CardRarity rarity, CQPref baseValuePref) { ConquestPreferences prefs = FModel.getConquestPreferences(); int baseValue = prefs.getPrefInt(baseValuePref); - switch (rarity) { - case Common: - return baseValue; - case Uncommon: - return Math.round((float)baseValue * (float)prefs.getPrefInt(CQPref.AETHER_UNCOMMON_MULTIPLIER)); - case Rare: - case Special: - return Math.round((float)baseValue * (float)prefs.getPrefInt(CQPref.AETHER_RARE_MULTIPLIER)); - case MythicRare: - return Math.round((float)baseValue * (float)prefs.getPrefInt(CQPref.AETHER_MYTHIC_MULTIPLIER)); - default: - return 0; - } + return switch (rarity) { + case Common -> baseValue; + case Uncommon -> + Math.round((float) baseValue * (float) prefs.getPrefInt(CQPref.AETHER_UNCOMMON_MULTIPLIER)); + case Rare, Special -> + Math.round((float) baseValue * (float) prefs.getPrefInt(CQPref.AETHER_RARE_MULTIPLIER)); + case MythicRare -> + Math.round((float) baseValue * (float) prefs.getPrefInt(CQPref.AETHER_MYTHIC_MULTIPLIER)); + default -> 0; + }; } public enum AEtherFilter implements IHasSkinProp { diff --git a/forge-gui/src/main/java/forge/gamemodes/quest/QuestController.java b/forge-gui/src/main/java/forge/gamemodes/quest/QuestController.java index 6cb61c47c51..05dd5907ec2 100644 --- a/forge-gui/src/main/java/forge/gamemodes/quest/QuestController.java +++ b/forge-gui/src/main/java/forge/gamemodes/quest/QuestController.java @@ -19,6 +19,7 @@ package forge.gamemodes.quest; import java.io.File; import java.util.*; +import java.util.stream.Collectors; import com.google.common.collect.Lists; import com.google.common.eventbus.Subscribe; @@ -620,17 +621,21 @@ public class QuestController { } public CardEdition getDefaultLandSet() { - List availableEditionCodes = questFormat != null ? questFormat.getAllowedSetCodes() : Lists.newArrayList(FModel.getMagicDb().getEditions().getItemNames()); - List availableEditions = new ArrayList<>(); - - for (String s : availableEditionCodes) { - availableEditions.add(FModel.getMagicDb().getEditions().get(s)); - } + List availableEditions = getAvailableLandSets(); CardEdition randomLandSet = CardEdition.Predicates.getRandomSetWithAllBasicLands(availableEditions); return randomLandSet == null ? FModel.getMagicDb().getEditions().get("ZEN") : randomLandSet; } + public List getAvailableLandSets() { + List availableEditionCodes = questFormat != null ? questFormat.getAllowedSetCodes() : Lists.newArrayList(FModel.getMagicDb().getEditions().getItemNames()); + CardEdition.Collection editions = FModel.getMagicDb().getEditions(); + return availableEditionCodes.stream() + .map(editions::get) + .filter(CardEdition::hasBasicLands) + .collect(Collectors.toList()); + } + public String getCurrentDeck() { return model.currentDeck; } From 2b64f82f988128a54f2cb0c6313377ef82427c91 Mon Sep 17 00:00:00 2001 From: Paul Hammerton Date: Thu, 11 Sep 2025 17:42:20 +0100 Subject: [PATCH 179/355] Edition updates: OMB --- .../Through the Omenpaths 1 Bonus Sheet.txt | 80 +++++++++---------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/forge-gui/res/editions/Through the Omenpaths 1 Bonus Sheet.txt b/forge-gui/res/editions/Through the Omenpaths 1 Bonus Sheet.txt index 0de5318579b..328dc6083fa 100644 --- a/forge-gui/res/editions/Through the Omenpaths 1 Bonus Sheet.txt +++ b/forge-gui/res/editions/Through the Omenpaths 1 Bonus Sheet.txt @@ -6,43 +6,43 @@ Type=Online ScryfallCode=OMB [cards] -1 M Comeuppance @ -2 M Leyline Binding @ -3 M Nine Lives @ -4 M Path to Exile @ -5 M Reprieve @ -6 M Rest in Peace @ -7 M Wedding Ring @ -8 M Clever Impersonator @ -9 M Counterspell @ -10 M Lorthos, the Tidemaker @ -11 M Mindbreak Trap @ -12 M Mystic Confluence @ -13 M Ponder @ -14 M Rite of Replication @ -15 M Traumatize @ -16 M Feed the Swarm @ -17 M Hex @ -18 M Infernal Grasp @ -19 M Opposition Agent @ -20 M Reanimate @ -21 M Saw in Half @ -22 M Skithiryx, the Blight Dragon @ -23 M Goblin Bombardment @ -24 M Najeela, the Blade-Blossom @ -25 M Relentless Assault @ -26 M Savage Beating @ -27 M Shock @ -28 M Thrill of Possibility @ -29 M Unexpected Windfall @ -30 M Winds of Change @ -31 M Arachnogenesis @ -32 M Arasta of the Endless Web @ -33 M Beast Within @ -34 M Heroic Intervention @ -35 M Hunter's Insight @ -36 M Parallel Lives @ -37 M Silkguard @ -38 M Tangle @ -39 M Alibou, Ancient Witness @ -40 M Terminate @ +1 R Comeuppance @Igor Krstic +2 R Leyline Binding @Cristi Balanescu +3 R Nine Lives @Paul Scott Canavan +4 R Path to Exile @Todd Lockwood +5 U Reprieve @Mariah Tekulve +6 R Rest in Peace @Jarel Threat +7 M Wedding Ring @Olena Richards +8 M Clever Impersonator @Slawomir Maniak +9 R Counterspell @Gao Yan +10 M Lorthos, the Tidemaker @Kekai Kotaki +11 M Mindbreak Trap @Christopher Moeller +12 R Mystic Confluence @Kieran Yanner +13 C Ponder @Ernanda Souza +14 R Rite of Replication @Matt Cavotta +15 R Traumatize @Greg Staples +16 C Feed the Swarm @Nino Is +17 R Hex @Michael Sutfin +18 U Infernal Grasp @Naomi Baker +19 M Opposition Agent @Scott Murphy +20 R Reanimate @Johann Bodin +21 R Saw in Half @Alexander Mokhov +22 M Skithiryx, the Blight Dragon @Chippy +23 R Goblin Bombardment @Dave Kendall +24 M Najeela, the Blade-Blossom @Matt Stewart +25 R Relentless Assault @Greg Hildebrandt +26 M Savage Beating @Matt Thompson +27 C Shock @Jon Foster +28 C Thrill of Possibility @Izzy +29 C Unexpected Windfall @Lorenzo Mastroianni +30 U Winds of Change @Adam Rex +31 R Arachnogenesis @Johannes Voss +32 R Arasta of the Endless Web @Sam Rowan +33 U Beast Within @Jesper Ejsing +34 R Heroic Intervention @James Ryman +35 U Hunter's Insight @Jim Murray +36 M Parallel Lives @Steve Prescott +37 R Silkguard @Dan Murayama Scott +38 U Tangle @Néstor Ossandón Leal +39 M Alibou, Ancient Witness @Matt Stewart +40 U Terminate @Wayne Reynolds From fd2d3c7bb911cf9f719fffca68c4d9471a5d6305 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Fri, 12 Sep 2025 05:09:55 +0800 Subject: [PATCH 180/355] update Keyword get method --- .../main/java/forge/game/keyword/Keyword.java | 34 ++++++++++++++++--- .../forge/itemmanager/AdvancedSearch.java | 4 +-- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/forge-game/src/main/java/forge/game/keyword/Keyword.java b/forge-game/src/main/java/forge/game/keyword/Keyword.java index c6f08b0130f..fec371ad8e4 100644 --- a/forge-game/src/main/java/forge/game/keyword/Keyword.java +++ b/forge-game/src/main/java/forge/game/keyword/Keyword.java @@ -278,10 +278,36 @@ public enum Keyword { return keywords; } - public static Keyword get(String key) { - if (key.isEmpty()) - return null; - return Arrays.stream(values()).filter(k -> key.equalsIgnoreCase(k.displayName)).findFirst().orElse(null); + public static Keyword get(String k) { + Keyword keyword = Keyword.UNDEFINED; + + if (k == null || k.isEmpty()) + return keyword; + + // try to get real part + if (k.contains(":")) { + final String[] x = k.split(":", 2); + keyword = smartValueOf(x[0]); + } else if (k.contains(" ")) { + // First strike + keyword = smartValueOf(k); + + // other keywords that contains other stuff like Enchant + if (keyword == Keyword.UNDEFINED) { + final String[] x = k.split(" ", 2); + + final Keyword k2 = smartValueOf(x[0]); + // Keywords that needs to be undefined + if (k2 != Keyword.UNDEFINED) { + keyword = k2; + } + } + } else { + // Simple Keyword + keyword = smartValueOf(k); + } + + return keyword; } private static final Map> cardKeywordSetLookup = new HashMap<>(); diff --git a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java index da523205006..1952132cbbc 100644 --- a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java +++ b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java @@ -110,7 +110,7 @@ public class AdvancedSearch { if (input.getRules().getOtherPart().getKeywords() != null) { for (String key : input.getRules().getOtherPart().getKeywords()) { Keyword keyword = Keyword.get(key); - if (keyword != null) + if (!Keyword.UNDEFINED.equals(keyword)) keywords.add(keyword); } } @@ -119,7 +119,7 @@ public class AdvancedSearch { if (input.getRules().getMainPart().getKeywords() != null) { for (String key : input.getRules().getMainPart().getKeywords()) { Keyword keyword = Keyword.get(key); - if (keyword != null) + if (!Keyword.UNDEFINED.equals(keyword)) keywords.add(keyword); } } From ac93233e19667d5be3b3938a46776967c0f12ae3 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Fri, 12 Sep 2025 09:38:40 +0800 Subject: [PATCH 181/355] remove duplicated code for keyword search --- .../main/java/forge/game/keyword/Keyword.java | 87 ++++++++----------- .../forge/itemmanager/AdvancedSearch.java | 22 +---- 2 files changed, 35 insertions(+), 74 deletions(-) diff --git a/forge-game/src/main/java/forge/game/keyword/Keyword.java b/forge-game/src/main/java/forge/game/keyword/Keyword.java index fec371ad8e4..8a28b77cf5c 100644 --- a/forge-game/src/main/java/forge/game/keyword/Keyword.java +++ b/forge-game/src/main/java/forge/game/keyword/Keyword.java @@ -1,8 +1,8 @@ package forge.game.keyword; -import forge.StaticData; -import forge.game.card.Card; +import forge.card.CardSplitType; import forge.item.PaperCard; +import org.apache.commons.lang3.tuple.Pair; import java.util.*; @@ -223,7 +223,7 @@ public enum Keyword { displayName = displayName0; } - public static KeywordInterface getInstance(String k) { + private static Pair getKeywordDetails(String k) { Keyword keyword = Keyword.UNDEFINED; String details = k; // try to get real part @@ -255,15 +255,20 @@ public enum Keyword { keyword = smartValueOf(k); details = ""; } + return Pair.of(keyword, details); + } + + public static KeywordInterface getInstance(String k) { + Pair p = getKeywordDetails(k); KeywordInstance inst; try { - inst = keyword.type.getConstructor().newInstance(); + inst = p.getKey().type.getConstructor().newInstance(); } catch (Exception e) { inst = new UndefinedKeyword(); } - inst.initialize(k, keyword, details); + inst.initialize(k, p.getKey(), p.getValue()); return inst; } @@ -278,68 +283,44 @@ public enum Keyword { return keywords; } - public static Keyword get(String k) { - Keyword keyword = Keyword.UNDEFINED; - + private static Keyword get(String k) { if (k == null || k.isEmpty()) - return keyword; + return Keyword.UNDEFINED; - // try to get real part - if (k.contains(":")) { - final String[] x = k.split(":", 2); - keyword = smartValueOf(x[0]); - } else if (k.contains(" ")) { - // First strike - keyword = smartValueOf(k); - - // other keywords that contains other stuff like Enchant - if (keyword == Keyword.UNDEFINED) { - final String[] x = k.split(" ", 2); - - final Keyword k2 = smartValueOf(x[0]); - // Keywords that needs to be undefined - if (k2 != Keyword.UNDEFINED) { - keyword = k2; - } - } - } else { - // Simple Keyword - keyword = smartValueOf(k); - } - - return keyword; + return getKeywordDetails(k).getKey(); } private static final Map> cardKeywordSetLookup = new HashMap<>(); public static Set getKeywordSet(PaperCard card) { - String key = card.getName(); - Set keywordSet = cardKeywordSetLookup.get(key); + String name = card.getName(); + Set keywordSet = cardKeywordSetLookup.get(name); if (keywordSet == null) { - keywordSet = new HashSet<>(); - for (KeywordInterface inst : Card.getCardForUi(card).getKeywords()) { - final Keyword keyword = inst.getKeyword(); - if (keyword != Keyword.UNDEFINED) { - keywordSet.add(keyword); + CardSplitType cardSplitType = card.getRules().getSplitType(); + keywordSet = EnumSet.noneOf(Keyword.class); + if (cardSplitType != CardSplitType.None && cardSplitType != CardSplitType.Split) { + if (card.getRules().getOtherPart() != null) { + if (card.getRules().getOtherPart().getKeywords() != null) { + for (String key : card.getRules().getOtherPart().getKeywords()) { + Keyword keyword = get(key); + if (!Keyword.UNDEFINED.equals(keyword)) + keywordSet.add(keyword); + } + } } } - cardKeywordSetLookup.put(card.getName(), keywordSet); + if (card.getRules().getMainPart().getKeywords() != null) { + for (String key : card.getRules().getMainPart().getKeywords()) { + Keyword keyword = get(key); + if (!Keyword.UNDEFINED.equals(keyword)) + keywordSet.add(keyword); + } + } + cardKeywordSetLookup.put(name, keywordSet); } return keywordSet; } - public static Runnable getPreloadTask() { - if (cardKeywordSetLookup.size() < 10000) { //allow preloading even if some but not all cards loaded - return () -> { - final Collection cards = StaticData.instance().getCommonCards().getUniqueCards(); - for (PaperCard card : cards) { - getKeywordSet(card); - } - }; - } - return null; - } - public static Keyword smartValueOf(String value) { for (final Keyword v : Keyword.values()) { if (v.displayName.equalsIgnoreCase(value)) { diff --git a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java index 1952132cbbc..e58bb3be26b 100644 --- a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java +++ b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java @@ -103,27 +103,7 @@ public class AdvancedSearch { @Override protected Set getItemValues(PaperCard input) { - CardSplitType cardSplitType = input.getRules().getSplitType(); - Set keywords = new HashSet<>(); - if (cardSplitType != CardSplitType.None && cardSplitType != CardSplitType.Split) { - if (input.getRules().getOtherPart() != null) { - if (input.getRules().getOtherPart().getKeywords() != null) { - for (String key : input.getRules().getOtherPart().getKeywords()) { - Keyword keyword = Keyword.get(key); - if (!Keyword.UNDEFINED.equals(keyword)) - keywords.add(keyword); - } - } - } - } - if (input.getRules().getMainPart().getKeywords() != null) { - for (String key : input.getRules().getMainPart().getKeywords()) { - Keyword keyword = Keyword.get(key); - if (!Keyword.UNDEFINED.equals(keyword)) - keywords.add(keyword); - } - } - return keywords; + return Keyword.getKeywordSet(input); } }), CARD_SET("lblSet", PaperCard.class, FilterOperator.SINGLE_LIST_OPS, new CustomListEvaluator(FModel.getMagicDb().getSortedEditions(), CardEdition::getCode) { From b131e4eb04e6ce9b9383832dc0e5676313d110ea Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Fri, 12 Sep 2025 10:11:34 +0800 Subject: [PATCH 182/355] Android crash fix --- forge-gui-mobile/src/forge/deck/FDeckImportDialog.java | 5 +++-- forge-gui/src/main/java/forge/itemmanager/SFilterUtil.java | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/forge-gui-mobile/src/forge/deck/FDeckImportDialog.java b/forge-gui-mobile/src/forge/deck/FDeckImportDialog.java index 251da9f6716..9202258fbb9 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckImportDialog.java +++ b/forge-gui-mobile/src/forge/deck/FDeckImportDialog.java @@ -251,10 +251,11 @@ public class FDeckImportDialog extends FDialog { tokens = controller.optimiseCardArtInTokens(); //if there are any cards that cannot be imported, let user know this and give them the option to cancel + // Android API StringBuilder isEmpty() is unavailable. https://developer.android.com/reference/java/lang/StringBuilder StringBuilder sb = new StringBuilder(); for (DeckRecognizer.Token token : tokens) { if (MISSING_TOKENS.contains(token.getType())) { - if (!sb.isEmpty()) + if (sb.length() != 0) sb.append("\n"); String message = controller.getTokenMessage(token); String statusMessage = controller.getTokenStatusMessage(token); @@ -264,7 +265,7 @@ public class FDeckImportDialog extends FDialog { sb.append(statusMessage); } } - if (!sb.isEmpty()) { + if (sb.length() != 0) { Localizer localizer = Forge.getLocalizer(); if (SOptionPane.showOptionDialog(localizer.getMessage("lblFollowingCardsCannotBeImported") + "\n\n" + sb, localizer.getMessage("lblImportRemainingCards"), SOptionPane.WARNING_ICON, importOrCancel) == 1) { return; diff --git a/forge-gui/src/main/java/forge/itemmanager/SFilterUtil.java b/forge-gui/src/main/java/forge/itemmanager/SFilterUtil.java index c5dfea7a662..ad37ae9afc9 100644 --- a/forge-gui/src/main/java/forge/itemmanager/SFilterUtil.java +++ b/forge-gui/src/main/java/forge/itemmanager/SFilterUtil.java @@ -217,7 +217,8 @@ public class SFilterUtil { } entry.append(ch); } - if (entry.length() != 0) { // Android API isEmpty() is unavailable. https://developer.android.com/reference/java/lang/StringBuilder + // Android API StringBuilder isEmpty() is unavailable. https://developer.android.com/reference/java/lang/StringBuilder + if (entry.length() != 0) { splitText.add(entry.toString()); } return splitText; From b61044abb50371c625d374523e13edefea5d88fd Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Sat, 13 Sep 2025 08:57:29 +0800 Subject: [PATCH 183/355] prevent crash for missing card, fix crash Android 8-13 NoSuchMethodError --- .../src/forge/adventure/util/CardUtil.java | 11 ++++++++++- .../main/java/forge/deck/DeckImportController.java | 5 ++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/forge-gui-mobile/src/forge/adventure/util/CardUtil.java b/forge-gui-mobile/src/forge/adventure/util/CardUtil.java index 95735027514..f25b3ba451b 100644 --- a/forge-gui-mobile/src/forge/adventure/util/CardUtil.java +++ b/forge-gui-mobile/src/forge/adventure/util/CardUtil.java @@ -809,6 +809,11 @@ public class CardUtil { return generateBoosterPackAsDeck(edition); } + private static PaperCard getReplacement(String missingCard, String replacementCard) { + System.err.println(missingCard + " : Not found in the database.\nReplacement card: " + replacementCard); + return FModel.getMagicDb().getCommonCards().getCard(replacementCard); + } + public static PaperCard getCardByName(String cardName) { List validCards; //Faster to ask the CardDB for a card name than it is to search the pool. @@ -817,6 +822,10 @@ public class CardUtil { else validCards = FModel.getMagicDb().getCommonCards().getUniqueCardsNoAlt(cardName); + if (validCards.isEmpty()) { + return getReplacement(cardName, "Wastes"); + } + return validCards.get(Current.world().getRandom().nextInt(validCards.size())); } @@ -828,7 +837,7 @@ public class CardUtil { .filter(input -> input.getEdition().equals(edition)).collect(Collectors.toList()); if (validCards.isEmpty()) { - System.err.println("Unexpected behavior: tried to call getCardByNameAndEdition for card " + cardName + " from the edition " + edition + ", but didn't find it in the DB. A random existing instance will be returned."); + System.err.println("Unexpected behavior: tried to call getCardByNameAndEdition for card " + cardName + " from the edition " + edition + ", but didn't find it in the DB. A random existing instance will be returned if found."); return getCardByName(cardName); } diff --git a/forge-gui/src/main/java/forge/deck/DeckImportController.java b/forge-gui/src/main/java/forge/deck/DeckImportController.java index dbf89e11c2f..08065936d82 100644 --- a/forge-gui/src/main/java/forge/deck/DeckImportController.java +++ b/forge-gui/src/main/java/forge/deck/DeckImportController.java @@ -22,6 +22,7 @@ import org.apache.commons.lang3.tuple.Pair; import java.text.DateFormatSymbols; import java.util.*; import java.util.function.Function; +import java.util.stream.Collectors; public class DeckImportController { public enum ImportBehavior { @@ -516,7 +517,9 @@ public class DeckImportController { PaperCard card = token.getCard(); String cardName = card.getName(); CardPool substitutes = availableInventory.getFilteredPool(c -> c.getName().equals(cardName)); - List> sortedSubstitutes = StreamUtil.stream(substitutes).sorted(Comparator.comparingInt(Map.Entry::getValue)).toList(); + // Stream.toList() is only supported on Android 14 and above ref: https://developer.android.com/reference/java/util/stream/Stream#toList() + // use Collectors.toList() to support Android 8 to 13.... + List> sortedSubstitutes = StreamUtil.stream(substitutes).sorted(Comparator.comparingInt(Map.Entry::getValue)).collect(Collectors.toList()); int neededQuantity = token.getQuantity(); for(Token found : replacementList) { //If there's an item in the replacement list already it means we've already found some of the needed copies. From 02b7e408dc67951262957cfb53272cf7574e9c2c Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Sat, 13 Sep 2025 09:09:04 +0800 Subject: [PATCH 184/355] fix crash Android 8-13 NoSuchMethodError, prevent crash for missing card --- forge-core/src/main/java/forge/StaticData.java | 2 +- forge-game/src/main/java/forge/game/card/CardState.java | 8 ++++---- .../src/main/java/forge/deck/DeckImportController.java | 4 ++-- .../main/java/forge/gamemodes/limited/BoosterDraft.java | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/forge-core/src/main/java/forge/StaticData.java b/forge-core/src/main/java/forge/StaticData.java index ace76500d2a..249724aa50a 100644 --- a/forge-core/src/main/java/forge/StaticData.java +++ b/forge-core/src/main/java/forge/StaticData.java @@ -878,7 +878,7 @@ public class StaticData { } } } - // stream().toList() causes crash on Android, use Collectors.toList() + // stream().toList() causes crash on Android 8-13, use Collectors.toList() List NIF = new ArrayList<>(NIF_Q).stream().sorted().collect(Collectors.toList()); List CNI = new ArrayList<>(CNI_Q).stream().sorted().collect(Collectors.toList()); List TOK = new ArrayList<>(TOKEN_Q).stream().sorted().collect(Collectors.toList()); diff --git a/forge-game/src/main/java/forge/game/card/CardState.java b/forge-game/src/main/java/forge/game/card/CardState.java index fbe570cfc0a..bdc892d36b0 100644 --- a/forge-game/src/main/java/forge/game/card/CardState.java +++ b/forge-game/src/main/java/forge/game/card/CardState.java @@ -367,7 +367,7 @@ public class CardState extends GameObject implements IHasSVars, ITranslatable { public final FCollectionView getManaAbilities() { FCollection newCol = new FCollection<>(); updateSpellAbilities(newCol, true); - // stream().toList() causes crash on Android, use Collectors.toList() + // stream().toList() causes crash on Android 8-13, use Collectors.toList() newCol.addAll(abilities.stream().filter(SpellAbility::isManaAbility).collect(Collectors.toList())); card.updateSpellAbilities(newCol, this, true); return newCol; @@ -375,7 +375,7 @@ public class CardState extends GameObject implements IHasSVars, ITranslatable { public final FCollectionView getNonManaAbilities() { FCollection newCol = new FCollection<>(); updateSpellAbilities(newCol, false); - // stream().toList() causes crash on Android, use Collectors.toList() + // stream().toList() causes crash on Android 8-13, use Collectors.toList() newCol.addAll(abilities.stream().filter(Predicate.not(SpellAbility::isManaAbility)).collect(Collectors.toList())); card.updateSpellAbilities(newCol, this, false); return newCol; @@ -390,7 +390,7 @@ public class CardState extends GameObject implements IHasSVars, ITranslatable { if (null != mana) { leftAbilities = leftAbilities.stream() .filter(mana ? SpellAbility::isManaAbility : Predicate.not(SpellAbility::isManaAbility)) - // stream().toList() causes crash on Android, use Collectors.toList() + // stream().toList() causes crash on Android 8-13, use Collectors.toList() .collect(Collectors.toList()); } newCol.addAll(leftAbilities); @@ -402,7 +402,7 @@ public class CardState extends GameObject implements IHasSVars, ITranslatable { if (null != mana) { rightAbilities = rightAbilities.stream() .filter(mana ? SpellAbility::isManaAbility : Predicate.not(SpellAbility::isManaAbility)) - // stream().toList() causes crash on Android, use Collectors.toList() + // stream().toList() causes crash on Android 8-13, use Collectors.toList() .collect(Collectors.toList()); } newCol.addAll(rightAbilities); diff --git a/forge-gui/src/main/java/forge/deck/DeckImportController.java b/forge-gui/src/main/java/forge/deck/DeckImportController.java index 08065936d82..0686e65b2ff 100644 --- a/forge-gui/src/main/java/forge/deck/DeckImportController.java +++ b/forge-gui/src/main/java/forge/deck/DeckImportController.java @@ -517,8 +517,8 @@ public class DeckImportController { PaperCard card = token.getCard(); String cardName = card.getName(); CardPool substitutes = availableInventory.getFilteredPool(c -> c.getName().equals(cardName)); - // Stream.toList() is only supported on Android 14 and above ref: https://developer.android.com/reference/java/util/stream/Stream#toList() - // use Collectors.toList() to support Android 8 to 13.... + // stream().toList() causes crash on Android 8-13, use Collectors.toList() + // ref: https://developer.android.com/reference/java/util/stream/Stream#toList() List> sortedSubstitutes = StreamUtil.stream(substitutes).sorted(Comparator.comparingInt(Map.Entry::getValue)).collect(Collectors.toList()); int neededQuantity = token.getQuantity(); for(Token found : replacementList) { diff --git a/forge-gui/src/main/java/forge/gamemodes/limited/BoosterDraft.java b/forge-gui/src/main/java/forge/gamemodes/limited/BoosterDraft.java index 066c986f047..9e8fbfa1cab 100644 --- a/forge-gui/src/main/java/forge/gamemodes/limited/BoosterDraft.java +++ b/forge-gui/src/main/java/forge/gamemodes/limited/BoosterDraft.java @@ -437,7 +437,7 @@ public class BoosterDraft implements IBoosterDraft { CompletableFuture.allOf(futuresArray).join(); futures.clear(); } - // stream().toList() causes crash on Android, use Collectors.toList() + // stream().toList() causes crash on Android 8-13, use Collectors.toList() customs.addAll(queue.stream().collect(Collectors.toList())); } return customs; From 0c5ff17e940956474cd375e08c42ef780d87ee71 Mon Sep 17 00:00:00 2001 From: Chris H Date: Fri, 12 Sep 2025 23:32:03 -0400 Subject: [PATCH 185/355] Fix typo for SPM draft --- forge-gui/res/editions/Marvel's Spider-Man.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/editions/Marvel's Spider-Man.txt b/forge-gui/res/editions/Marvel's Spider-Man.txt index 5ed64e26818..0caf16d3fc9 100644 --- a/forge-gui/res/editions/Marvel's Spider-Man.txt +++ b/forge-gui/res/editions/Marvel's Spider-Man.txt @@ -65,7 +65,7 @@ Replace=0.125F fromSheet("SPM allied lands")+ Replace=0.20F BasicLand:fromSheet("SPM full art") Replace=0.05F BasicLand:fromSheet("SPM full art")+ Replace=0.20F BasicLand:fromSheet("SPM cards"):!fromSheet("SPM allied lands") -Replace=0.05F BasicLand:fromSheet("SPM cards")!fromSheet("SPM allied lands") +Replace=0.05F BasicLand:fromSheet("SPM cards"):!fromSheet("SPM allied lands") [cards] 1 M Anti-Venom, Horrifying Healer @Néstor Ossandón Leal From e49021ffdd00548e46aedea70dec0f52d515834d Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Sat, 13 Sep 2025 21:13:26 +0800 Subject: [PATCH 186/355] Different effect card for Emrakul Castle difficulty --- .../Emrakul's Awakening.fullborder.jpg | Bin 0 -> 68046 bytes .../common/custom_cards/emrakul_awakening.txt | 11 ++++++++++ .../maps/map/emrakul/emrakul_legacy.tmx | 19 ++++++++++++++---- 3 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 forge-gui/res/adventure/common/custom_card_pics/Emrakul's Awakening.fullborder.jpg create mode 100644 forge-gui/res/adventure/common/custom_cards/emrakul_awakening.txt diff --git a/forge-gui/res/adventure/common/custom_card_pics/Emrakul's Awakening.fullborder.jpg b/forge-gui/res/adventure/common/custom_card_pics/Emrakul's Awakening.fullborder.jpg new file mode 100644 index 0000000000000000000000000000000000000000..993621cd54f0279c8f0a9a3c46f675339b2e078b GIT binary patch literal 68046 zcmeFXWmFtp@HaR>kl+y9EodOPySux?;BLVZBoJ(Hm*DOeoRHvd!QBZ?fZzV2%0vY)QJrN!e{r~IZsS|*O1jq%r!NE`gV6kA}uwb5g0pw6Q;h|RhWw<{F z3@jW}UPPql$S6>PMoa)K3>+NnGdOtoXV0M2e$eNDXISvqlx$)MFVxHssa$c`-^b@6 zQH$4g;i`W-qv0@j3wn->hfhFA^pcj2o`I2*i<^g+k6%JkN?Jx%PF_P(OIt@*PakMu zX=QC=Yv=Cq#?#B&$2a&xNN8Ai1SlafDLExIEj=T@ps=X8q_nKO{!>F^Q*%peTX#=y zU;n`1(D2ms%O43sfCymkjln~e`n~7v9(zln@ z2*-h)`vAG51vu$2r;MNS!p&D{@P7p% zB-Ht3m^6O$L{J+-$K1H;_X0K>#w=E5E;EZ!){W=7)d#F2f*E(SMq$3VZ68KMa9w}A z`4FiZ`huE28E>kY@AXV}j>q*ST;?7w&Agy&(@);%@lB!zppW^e=u6oNf^iPW&!kNodB zHpSN*t_m7<%UfO`$CIrPE<7fpXYfgE6sT@08d9#yLVY+!DCw!<{$!7AiVvJ7KZnU5 zE^{`u&oJyD6xhqRR3YT-zeKpO1`eB?o20Jm5}26pjn%KzU!tCL9ccLv6Luu2spWdv($|#m27%LhK(&CYx$vNHh{TdxUiRq6m=x(~6XtQV`NvdL&216=j?MPC z`ykGGcuj{-Y@J{w#gAU>b_cpwk30$u22wK7y7i8ZJ%Z+6oX)e7za(!lOHaW|SWUkm zc6?}|V-#u~*kD@z*sH_yjZ>IB*cYAX+Eh{jvVYkBxo2RFI7h)M4 z3s)jkUMk?^92Q0cMXhK(7&Jmm#-UwBi6Bbi;yoteqVlmx(ZZ|BkrLY=2^*7|#v(gd zXw2FE_ze$Gd!*-LMeL%%CL|Djl@Ae7IFqQV?AHHC!F7+Z!DmU&O;p5C$GymQO0Un| zrSy9z<|oq>3w5`8^j@HCMOy*N7$Z_{3eyM6o!4iWE@Ic0*Ho?LT1l40{VYy5f~{39 zJEmk{&B@A4zzTZr+!!S5Wm1SfE%H|%*}KFiK$WUr22YP<&wKSlL$XrSDA%b}Q!6-} zK9-8XGBa%}G)cPQ(4nduP1Tn=Y8Dj^D|^o@98T9#@>QJp z<=p)Ot|Z_fJ(kj2-Bc<`=F5%wR1yV!(s3+nw$lDMahf;4ue->IqXU!LsiA_* zuI}_1r&t02ljCwXoVT%CTuut!KN?qs=WS)x`Dh6D4RXgkJby5!VM(^Di1&0j95y9K z?5gS$>DvwQ_mJ3&ak$TzdU&%B+fx{ zTs5nV(P(GG&4aD4@Yd=Wtrm>}j#piFVw#sc+G35(`qjWZ*TOrtnf&QSlgqd&dn!)1 z{#8=hgR7nGwf3ZTYFnF_W?%EX#rpDId#ov^e4ojcJ8F1ty2-jekuotcWc3i{dLpmV z=XCRJlAfsz3k5Koj#RC!M5G9)&b+QrfKq(PvR)OHfLqt{GtT-4%N*Qf@R&Qk=c{_W za7T>;okkmn6H-zu?*e}{X?ODJMjXjW+uVmb6b~sxigGo}VGe6dbr1+|8tf#xEh@y6U^b%|vTVcoj ziJ*6RN*PBUW}ud~Twf76lthPVYt;?soIBc4@S|gHoD#$F^Fek0oVg@3LJv;$xq3)jlRN^S_$$k9Jq)Y-x@^VhJqK+_dt>Peid*OS< z$`RETeCX-CH|cXy;q2h0GTR|q?r_#ULhKiE1&4TEzR_cu;Wb_)G3}bkMuFSHP*aqz z8*6YO(Q0?JVBja!(4;)RYjQ}sCn~ctlGZrA9CrmB8V`;UUTnm$DkCv3UzHV3N4ahY z+KG0;*yD3wOO2$qj;0rDq-|eJ81=P?gcwa%{blkWVvxAXR*6*wz`()}5L4jTvE^o*?FZ;GtaWDTh+D+@%l{2dK3TGC{S^n3yl147($ zb6K3*<2?1%3bC)s;C7cfd<0Kd*FL!@;g64^>ECGND5or-Zc9K2UUBRB9cQ%3RpCMmmhRWm=K9(QpMsM4y3f+CP=yeJS* zRx(m-go_?;gy>W-I=(*XY8=WU&Gvocs*}^%e39My3(xlbRP9~*_Y2$kLQF>sha15c zS9|v}0Sh;X0>`_ZB#r}Ihq~J0!0+KJ4rQyv-)*;mQrrm?@>QFo4vQ;h1Y=eoL)&2cC zd5G-#A}p(CjUfr#K$Wn-+oC9hm>E_p;$-jVv3oh)S-2siQ4_ADDQB#e~IskMa-DCqOkT3`AczQ|2f8l603S8_GUG6dZ$(mYoifR4?jS3`tR` zOA(A>xVj-r|DG|I>IQG?-)|vJY+$=%8smLaR63Bq-^V^&5VeCKsQE=Y5v?oKCeg=e zSlCHsQ**57C$1+RO&D5trpLYeAmSNLm90NM!w~`^6 z)U0KWKk@H@ABf~o6$0(0-|4e1$C|rT)b=>X%u~+o0Uy zpjiy>QUCT`j@{V=(xJU&=>X~(&6(n1iz$0_CW8J=mH*kYolc(<&EqrzeMEbW*kb_E ziR{quE|OqNl@*M07A~RuCzyoZ;M=RRC|B9TAU`RbAlcPv0NK~DyRGb0arN|>m(q;F zCN$Z;*0CDkgDJk2Y?1myr}47j3lbhtl@cwHDs`ID2sp^k(V1o-99=A=?qGf?n*u~^ z?4v7a?M1R4+C+b!4`3Q%#t1)0e z(Z3<(-eH7B@#b_m(8A$im1F%2eJx>18OgL5j*9mONgUWtzZFy0l_-d&u42M+7uvv5 zGv!ZN8n!z(pKIY9`KgwmGldJIkT9A!jT%9(Jy0mI+@QJBfrjNrv2v@R(;ot&1-4siA3OdQ-CMD6>^A*GR@ z70zt?vA@W6H!mK%vlO^dx5CP_))+uCP|`i05gT%av;|CnzG^ThICVBW^BU};0n(7XMKw<&D*>J> z$j`7$Elu<^Unt)(27PB$hM_CJx5}Rpraj>1nOa`8;g8b6Y?@c|!dmjrV;a@yV}E&- zH96Jb=GcsuV|hmdFTdIEa}>YtlTZHQI9lBiUpmL>M}`70F@-rQl$7KBF+9MR@3t|Y ztc|>o`UDuoPy@3-OSAAA-26bHGGP{*$Z4sWuYV0Bc5W~E3@AO*asWxn z0ZVx|;=r7som)!+6ASE2ZgHTud}^ZKlyW_KDjdna48l{*duck#b_%$vByyvcJ&Z52 z1_qY1%jF_`GcE(3;cvn3CU?yEvPoue#cRtTcVfjM2?kF{NC5(#7XN?NCxtDA+5bO% z(!ct@|J(OTuO}iPB9YymNA^|`!d2|2lFseePXM0|zp&=LpL6Y7Xa+_twr>m$P6;wY ztnPI73*O%%3#wF%RNn?YsHY{&W2XS1J-tgUFaqMHUh+J$?Q4!~b;qdu9FU^cMFKa- zlfDlRC9030WDBG%=9+Xn!wIVF5~IKqLToL}f4@TF=&9NjNCV4H?h6lFsLD2dUYgic zpdSsJ1#*jlG+;@Zu+v#_BKv}zf?bK!=Z%YuEyX4zIE{qQm z^sGWrOTpP~47Y+L0$4&qrNyW^5Qci=8BiL~*$kbc$;9W4tS>gulRsqVN6xfU!g37Q z{fxz3G*CgU@3AX$r?!$y|1?lrBNfnQA9XIsqIm)%qs}o`kTF`;-ryr$RFc-c5o#sW zu8p>0`5d9`QLd?V@R~%2=PjYR+z*{H9cebg;^YeH7m6Nzwv$pW4N<&hb&9TfBO0>x zB&rM4IE8AUV1wjQ(F|W{M7ubU_*-NE$ns7}!>$cnHl`B?px1|E%CIfTaAFKG!%M}< zRo}|g%^(KJ`@!4GRwP^!&=)bu>C-1HARDS9yOi&0W1E{ddXQrt-lKJo6&}7=#&pv% zpkLP#B=6O>LZGi)H=ii+$A2dl*4K1m?_Gvag?#E^(#{ACAwQvk7BKSNdUxCBHjHqG zH}ucZoawFLZc__hZ?TIIG11}K6}Ke;N?;Tej8f_Xm)I24j3#i48WLA{WebSYWABbM zTn0yA@_U$8m?LsCN`_L%w4w2nyQIYGVZK&%juncd9 z1w4Nh}+_~P*U1e?U!Ov_2x{3CAN7@_nV>yIQ_k8ml9&u5D z1Z(025LTaG8^Om9T4`r&?8H0)JU@9_JP?x0@394+=y`E(ZC;)=sjlC;*775b4iX-^Vrk^4FP+8M~=RP%sV2?CqUDuC%`$EZMz+v zvXm!IH-|DmJ_zb%oxhzeQu`VD(M9l5<>Bs^eU%!`N@c@APHgJXa@4y9;eL;64G|C86IcpsS&CuI%E^g)|!)&&y)N1T_PKp)vb45sIUnv*_Q!5B`O`64N@Z z5P-T^an?xZs~>U+7V|ZAU{s$hf`+=ZS1WiSmU4|;4fsN z_rIYhtk~=JXAo-m{W!^6qmQ~N`VT0l#a%5?)wgP%0NqUgV!rSR@Ij+bID_XmR<(=2 zkwm9|{|K5A#yOWe`7?CRS;TG0wDcdi*{j&KB_1zkfef`iPN3gr3@@J2G)-5lv$f_m zC8%(P`L!p(`nAt8>20+&$9NM6s-u=wM9nn4h%`u0lb6C}kE3~sqb7&iD9x~t-_9r3 zvg8?JmC+nAV+cIvS7)AS|8k`0z8id;iw`dIjT5pfm!EqApf)O$4jDvSUFB*2XxzcV z0J|!=&wFZ1P0wcNV>X>zRlF%b;;!;4sa>>%li#O~B2WIJE^M_M^A^hp5lrom16{B} zU%s8t+*cmf<9Xy*uw2eE+2bjMC@Mn1lzE%J6)n>}xiDs$QcrU{IK=57O92-rfnl6H z2Gl5nTFALO=Mq4Eiw{jNxHA7^JZLBOTvIb82)3Sv&fYG|CU~Z$lP#^NKRH=N$=LgPksVCzGE?q4S>d_NmllZLU5r7DRhbHqrHE4cZ z4-wf1h@7!FLl~=42A-Kdd~09I3M_ud_a7yo^#IgPX-|N-zb*aUpYAXtCVF%C>(uGe znpQfH+Pv1Z^FH`MFPpY?z6Sg}cl97OCiPPTg2^j*TfOt<_(`Wjet*pdxE3;!GiX{( z`+Fppvx$EtC~UGdZw_%PlF6h;-+)J7*m-|dK|JB>DORQe!K(S!O!WU{s#M~acrn8C zEQX6^^eup0W!Lb>`_IZ>=%z|qJLSx?wk=4^+>=CZCJxbvP&AyO<2-)?{B3W_v-uAL z;Lbnx(8?*I_iv$&`7(0}+YF{QelYRDx5 zJ%l3XTWLY)yXT)U2Y-R*bzE3z~K&b4x@2$!B44djkLFJ$3}33_j* z3iXS9w@gXcz;AzQeBH!9%jTQ>Tb*OZ`rTCK8)+Y|;BDd@%r4R}Fg16|4eB&BF2drz zDvunlN>OHzpGDrPh+O;)0(rsLo3FMZSXWR`l|ez(Qt4@VMhr(m66jY3cj8hQz3Q56 zyMVmiy@sukE-1+M!wU)>d}XL8I^ECSWgtHRHZ-B7MrtnQfT~k5`Ge3a2juPd^3{WP;$pbW@Pn3TCLdsU z&+dPXw+=SaPVFYcHn~fMstSGM_sxOvQ5ZK{oN}UN*!Q^jL&hC$4Z494Q|Q-f*k22W zvalYq7yq&Ue3I!5vnB#`1t9$2+ajBUXE}f2;n$#A_Y$JRh&{&trBJz*{`?=mYURnv zT4F%&{TK4TGQI{R@b9@RL@$ep%zpv*zaWAFed6B;HZIIXHaUy&{tsIz)P(N;$woR# zF990=-oyQqp|by*@!CNQ;RVp3+4~nmvCx&#e}vQWOvDM*_&UXTf*}hXEUYJGO8*I9 z{S~ZuA~`{kF%N@p=Grb5liP=*xeZ^*6N~`?|kYKV&;BpEBU2Ur-B4z6;Y9yZxEwm(0Dh-Jt;dL}*r#PlyQ z&?3RN^dev<6=rh0Vww&}Yg zKXJ&EW2IRJZDtq8r@?Ts0qW)Ra_u$zS>SCtPk5H2R8qQ8khuk%)ylS$fHh$u()K%y z0x6#@73}>4!`0$+thhV2VI3bG#`f5E*1}+`27ioprOh17CB=6m9{bUQgwhiixRc&0 z-AgI4TaWhYt=wa_e%~DyDOp1MUP4Gd#z@Q28lzUq(T`a5N)sT$WGxac-BN0#pAvS6RcS9(qK3kUA`AXiu zHCRtseL24M4Z(C^msFNI#^voKf>&4jazsOx=aim>H}jdf4j)6S3H5UBR?80zdwgG$ zpqlL_^^}`b+h;eTPHYSkafoGvdrKYoon*MP@3=F%*ZfkP8*?v~_yWS6HiAA|dzsjU zbqm9{eLDMIS8xFNYceVnsxJh8~9av+!9q_tfPh&!*q7Z8;eQWjr07`=CP2 zMEgwe9f>w=c^(Au;DUFgfKppXhrO0pM1H;gtojpO;A=sFawP`~0E%8gTy3XmmqAn@ z5;(TeGN7A$t34JG4SnlKDF(@qAl^-1<)aA4b|Aa!`$R=#2t5rLZ|eEZck;(>&3I+i#*0EN)O1zIW$k?WfK2M)Q3~cKI+{uCDyxU*+p85ONoP-odN$3vSin>fKhaLE(c46YbA&Sca@!jFV#7tlLH#A4V#e!3*Vt5N8qa|vBg9b7 z_`H2QeXoyu1TWyvqk9vSh3akKFt((wIolnn7^VoX^g>#_O!KG)S$eYGkwXHj!& z1h?sLik8L`Y<)xV@b%!LvNhs-gOkDbwK+ZWM5$3bGh81Ph@+XAKSz2SeeN!yIAzo! z6ntc7OpO)9XQ^y6TqDP8^1^#19(!enFA&Pg9}4k6>TUNp)9K^PS|0j##Wmt7i8g=X znv+-gaHho(mH=S@SgS*2)J*ZU= zoB15Td%5FBKMSUI_S;$|*3y&;9YP)=ub#LviHC>>N^^h8xAo--X)q8n(ReEfl1kWG zg)#Hp2|5%94@{B;gL)^Owm#i9;(m#Bb~h_ADkhuLU800kW*!Ui5#r8xAN3GrS5zJF zH^nlyw$xGI@Suuka&H9mm-TI$V2Z>#3Q7d9u z5P;71K4!M;JjI7x_H1_iyWWmQ$IM1%KAG#O%AUa&jJ?=z(>9uB2?&g3Mlv5J5v&J9IW`Zd1uTG6c%-fu zz@xcO{x5CWZk>CH&`v`7woMdwi?VGa1?ua;Yl}l0u140q&Zu_TbV@Y3k+RXbR*B1}T_mUn^1 z$L{zsKQkY^VwL*L(=B z5wc@ zXpEQRXLuoR25#djyiK;S$lV|0-CC|5=dY^!XSYMuI7jj5-^VXp0#Fl;1IlE7oL#Js z!8>t1%ACNf7}d*LJ^{Yj&_83nD(n*|qnk_8TIi}v%P-{AT#(EM0gC$GJZQ71NfD7w z+4|EhyC5!bdEiYsJ>**=S_Q1B>m0(cQhufZF)&=Kl7lT3|Y4;WQQPwjtjjzEpYt+zBA3`sn%^(PFbfKena=@mUt;w3o1GGgFLVi}; zQ1gTC@j9Rz+JI8pQn~y2P2|VU`lbw&k>(#p9DSqU458tGvs#Zo)QJ#0gw)3!Xl*=k ztJQxl65dI7>`V6u{s?BoJNF9LsY;22Hk@doonJo7g~I8DNC+N!@*jG2@^B(;|Gz|s zF2>H%y~7~ypr!rY>sx5i^*l9PWN!pobVK_EAtd$3>>{_iL?$;rA%T{xfRPr<&v)z$yQCU*P2Xz#a@h0X-t;Q=F|(NN*6 zpu)vMUN~b0OoYZlf4}@Ktb$s=rs;v-qR5X=5S*|rgukWMNbL8g@K4d_`K2ViGvRHB z>{w{*#3NTKn0`0a3_4;+FtkST`HS!Ce=YUG1k;((f%6@78>L)8cMep?*zkb8o_}?u zgiiCfF;#^rY=O6bsjDo^c@A(OCM5`1hVq4;7k??B{mU}-(7B+dVaqwI<@|g$1nqR> zoI$4!dH>J+)7x2Z$3*7B9{S^?$L?FNJeH|DM$6JSQB^bYXw}=ECHx(3$A=z3WFb z;+%V^CD2{rZDaDHQq(SM{B6pMNc{$og#Z4*qAtsa?eNXBn9jgW*X4*nJv z8tEQie+NPK7xr_MfRUIek(0vpUqSUeEZqG)5Zd(_`q~{St0OI3v-KMFaJoKs3mQ#-lg$a_1*iX*Z z#;s0F$ChgA153!|&tC#Ye3sjiIL2L<^b zCqU8n58MBsjJ;J5gc?d%|MjnA!BA1#291dSq=$g+uBj)$pZL##U{7ELO#G8DRc;mD z{mV>0!xEZhCxYLf!JTB_IAVUSIZo9~usSaM({EB}Ok#_vcLuCT-Gp*YN{ROQt^YxK z-Bf{ zLUQ@N!}4>IGwDTzT)qo~>NdsSK@xQ?$cAdlunm|iYAUd)I8(TT`+agC#su1J*r|{b z_3v3h+o+~dL?z6vYl{aU}HsOY$kc%Votwa?D53u+c9Q;dyGOh2m%K{W6qUUNml(mM<0o?Ai1JoDEYIud17&t# zS*d{#=8hLmkpk+AamGr!{7SwYmk~E9$%*fDipfXvxxSYqQ)Xh_kG3c&y;8GZ_Ng-V ziWEo21Nb9C-4NVGs~iytUD{peiQaTj{*$YA;Lrda%~szokErq9@5UVeT*~g@ zr7f`9gN=-k?m;0}vBS*Xd1RDL^`d*Pj$M|cU)cAWQsbqYXh{s96wmlG5pHB=c2aiX zVg{>GgEcneaLa%odFRad+0ZD97-T1tyz`PPn-`}bW2lR**wE5~_YK9vY!&}5Gs|Ws zMf_x9M5jyD!=*$jc!jZ8m}#Ic#Ah~wWP$ux2oI@uO#mvd9y5X&iu zmY9XZvoN?yGX$!WB^|3tw1k?2TyZonqB@#kqcoQpxaT4;Wu)Yq5*_u$2{Ra$eG2>7 z&!OhbzLN6N%sqo4jE!W*%zZLS=M@VPSI> zJ4NC)(m+H`SPY2_rOpcXKK57XtQa`x2R30p+hdZzft_m61sUNaUu>~2U)7LI_q-v? zDo0w#M&k|szCD*gEO|glYTMOH(C=r5?uDg{7Sj-saA^Dri+?Bkvd=I^Mn9TR74>2@ zMD9D=rnE{fDTD6t7`A|;Dk4rDK-a67k;4t_tGO>unrjsqq)nYd(%QK(l^=fS*40v) z?(OjAM1IR|3-1yKbq_WTC;q3#H8=0~pjTn11lxqg)f^N0u)wmS;caLoGnxL&g}F?N7dFf*CFc$`==)!$q_iFN6%4>#Zyz__?($)&~HC0+C)3=yHoDf-*-;vyWo7DZn=}*&}f

    ~E;y$=+&o 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 literal 0 HcmV?d00001 diff --git a/forge-gui/res/adventure/common/custom_cards/emrakul_awakening.txt b/forge-gui/res/adventure/common/custom_cards/emrakul_awakening.txt new file mode 100644 index 00000000000..20feed64b65 --- /dev/null +++ b/forge-gui/res/adventure/common/custom_cards/emrakul_awakening.txt @@ -0,0 +1,11 @@ +Name:Emrakul's Awakening +ManaCost:no cost +Types:Artifact +T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Command | CheckSVar$ X | SVarCompare$ LT7 | Execute$ TrigFlip | TriggerDescription$ At the beginning of your end step, if you have fewer than seven cards in hand, flip a coin. If you win the flip, draw cards equal to the difference. +SVar:TrigFlip:DB$ FlipACoin | Defined$ You | WinSubAbility$ TrigDraw +SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ Difference +SVar:X:Count$ValidHand Card.YouOwn +SVar:Difference:Number$7/Minus.X +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Command | Execute$ TrigWish | TriggerDescription$ At the beginning of your upkeep, put a land card from your library onto the battlefield at random. +SVar:TrigWish:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.YouCtrl | Hidden$ True | AtRandom$ True +Oracle:At the beginning of your upkeep, put a land card from your library onto the battlefield at random.\nAt the beginning of your end step, if you have fewer than seven cards in hand, flip a coin. If you win the flip, draw cards equal to the difference. \ No newline at end of file diff --git a/forge-gui/res/adventure/common/maps/map/emrakul/emrakul_legacy.tmx b/forge-gui/res/adventure/common/maps/map/emrakul/emrakul_legacy.tmx index 5395d6fe8e0..9da20bc9569 100644 --- a/forge-gui/res/adventure/common/maps/map/emrakul/emrakul_legacy.tmx +++ b/forge-gui/res/adventure/common/maps/map/emrakul/emrakul_legacy.tmx @@ -3,10 +3,6 @@ - - {"startBattleWithCardInCommandZone": [ "Emrakul's Presence" ] - } - @@ -42,7 +38,12 @@ + + + + + @@ -50,6 +51,16 @@ + + + + + + + + + + [{ From 327ee6853fdf92ecfddff0d969cac4a0bbe2ecaf Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Sun, 14 Sep 2025 08:04:22 +0800 Subject: [PATCH 187/355] use player or geneticAI deck for missing decks --- .../src/forge/adventure/scene/DuelScene.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java b/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java index 5f399fff086..6407ab23da1 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java @@ -193,6 +193,8 @@ public class DuelScene extends ForgeScene { public void enter() { GameHUD.getInstance().unloadAudio(); GameType mainGameType; + boolean isDeckMissing = false; + String isDeckMissingMsg = ""; if (eventData != null && eventData.eventRules != null) { mainGameType = eventData.eventRules.gameType; } else { @@ -295,6 +297,19 @@ public class DuelScene extends ForgeScene { } else { deck = currentEnemy.copyPlayerDeck ? this.playerDeck : currentEnemy.generateDeck(Current.player().isFantasyMode(), Current.player().isUsingCustomDeck() || Current.player().isHardorInsaneDifficulty()); } + if (deck == null) { + isDeckMissing = true; + // copy player deck... + if (this.eventData != null) { + isDeckMissingMsg = "Deck for " + currentEnemy.getName() + " is missing! Player deck will be used."; + System.err.println(isDeckMissingMsg); + deck = this.playerDeck; + } else { + isDeckMissingMsg = "Deck for " + currentEnemy.getName() + " is missing! Genetic AI deck will be used."; + System.err.println(isDeckMissingMsg); + deck = Aggregates.random(DeckProxy.getAllGeneticAIDecks()).getDeck(); + } + } RegisteredPlayer aiPlayer = RegisteredPlayer.forVariants(playerCount, appliedVariants, deck, null, false, null, null); LobbyPlayer enemyPlayer = GamePlayerUtil.createAiPlayer(currentEnemy.getName(), selectAI(currentEnemy.ai)); @@ -368,9 +383,9 @@ public class DuelScene extends ForgeScene { hostedMatch.startMatch(rules, appliedVariants, players, guiMap, bossBattle ? MusicPlaylist.BOSS : MusicPlaylist.MATCH); MatchController.instance.setGameView(hostedMatch.getGameView()); boolean showMessages = enemy.getData().boss || (enemy.getData().copyPlayerDeck && Current.player().isUsingCustomDeck()); - if (chaosBattle || showMessages) { + if (chaosBattle || showMessages || isDeckMissing) { final FBufferedImage fb = getFBEnemyAvatar(); - bossDialogue = createFOption(Forge.getLocalizer().getMessage("AdvBossIntro" + Aggregates.randomInt(1, 35)), + bossDialogue = createFOption(isDeckMissing ? isDeckMissingMsg : Forge.getLocalizer().getMessage("AdvBossIntro" + Aggregates.randomInt(1, 35)), enemy.getName(), fb, fb::dispose); matchOverlay = new LoadingOverlay(() -> FThreads.delayInEDT(300, () -> FThreads.invokeInEdtNowOrLater(() -> bossDialogue.show())), false, true); From a6c893693d3393bdab92ff5e9bf27db3dd854240 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Sun, 14 Sep 2025 08:14:28 +0800 Subject: [PATCH 188/355] remove duplicated code --- .../src/forge/adventure/scene/DuelScene.java | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java b/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java index 6407ab23da1..f7f1b0e77c1 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java @@ -299,16 +299,9 @@ public class DuelScene extends ForgeScene { } if (deck == null) { isDeckMissing = true; - // copy player deck... - if (this.eventData != null) { - isDeckMissingMsg = "Deck for " + currentEnemy.getName() + " is missing! Player deck will be used."; - System.err.println(isDeckMissingMsg); - deck = this.playerDeck; - } else { - isDeckMissingMsg = "Deck for " + currentEnemy.getName() + " is missing! Genetic AI deck will be used."; - System.err.println(isDeckMissingMsg); - deck = Aggregates.random(DeckProxy.getAllGeneticAIDecks()).getDeck(); - } + isDeckMissingMsg = "Deck for " + currentEnemy.getName() + " is missing! " + (this.eventData == null ? "Genetic AI deck will be used." : "Player deck will be used."); + System.err.println(isDeckMissingMsg); + deck = this.eventData == null ? Aggregates.random(DeckProxy.getAllGeneticAIDecks()).getDeck() : this.playerDeck; } RegisteredPlayer aiPlayer = RegisteredPlayer.forVariants(playerCount, appliedVariants, deck, null, false, null, null); From 8f71a5b06ee814caf1c4c5b5744697b0514ac345 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Sun, 14 Sep 2025 08:44:10 +0800 Subject: [PATCH 189/355] throw RuntimeException message for BoosterGenerator makesheet --- .../main/java/forge/item/generation/BoosterGenerator.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/forge-core/src/main/java/forge/item/generation/BoosterGenerator.java b/forge-core/src/main/java/forge/item/generation/BoosterGenerator.java index ad6951478a1..2a64d6154bd 100644 --- a/forge-core/src/main/java/forge/item/generation/BoosterGenerator.java +++ b/forge-core/src/main/java/forge/item/generation/BoosterGenerator.java @@ -633,7 +633,10 @@ public class BoosterGenerator { System.out.println("Parsing from main code: " + mainCode); String sheetName = StringUtils.strip(mainCode.substring(10), "()\" "); System.out.println("Attempting to lookup: " + sheetName); - src = tryGetStaticSheet(sheetName).toFlatList(); + PrintSheet fromSheet = tryGetStaticSheet(sheetName); + if (fromSheet == null) + throw new RuntimeException("PrintSheet Error: " + ps.getName() + " didn't find " + sheetName + " from " + mainCode); + src = fromSheet.toFlatList(); setPred = x -> true; } else if (mainCode.startsWith("promo") || mainCode.startsWith("name")) { // get exactly the named cards, that's a tiny inlined print sheet From 905cf52c5e421ba77a3bfd508b30e13c699d8588 Mon Sep 17 00:00:00 2001 From: Chris H Date: Sat, 13 Sep 2025 22:00:39 -0400 Subject: [PATCH 190/355] Disable 4 player drafts for Quest and Adventure until the UIs can handle it --- .../src/forge/adventure/data/AdventureEventData.java | 2 +- .../main/java/forge/gamemodes/limited/BoosterDraft.java | 8 +++++++- .../main/java/forge/gamemodes/quest/QuestEventDraft.java | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/forge-gui-mobile/src/forge/adventure/data/AdventureEventData.java b/forge-gui-mobile/src/forge/adventure/data/AdventureEventData.java index 703800b4788..dcabc8b1ffe 100644 --- a/forge-gui-mobile/src/forge/adventure/data/AdventureEventData.java +++ b/forge-gui-mobile/src/forge/adventure/data/AdventureEventData.java @@ -292,7 +292,7 @@ public class AdventureEventData implements Serializable { Random placeholder = MyRandom.getRandom(); MyRandom.setRandom(getEventRandom()); if (draft == null && (eventStatus == AdventureEventController.EventStatus.Available || eventStatus == AdventureEventController.EventStatus.Entered)) { - draft = BoosterDraft.createDraft(LimitedPoolType.Block, getCardBlock(), packConfiguration); + draft = BoosterDraft.createDraft(LimitedPoolType.Block, getCardBlock(), packConfiguration, 8); registeredDeck = draft.getHumanPlayer().getDeck(); assignPlayerNames(draft); } diff --git a/forge-gui/src/main/java/forge/gamemodes/limited/BoosterDraft.java b/forge-gui/src/main/java/forge/gamemodes/limited/BoosterDraft.java index 9e8fbfa1cab..6fa74ff64bb 100644 --- a/forge-gui/src/main/java/forge/gamemodes/limited/BoosterDraft.java +++ b/forge-gui/src/main/java/forge/gamemodes/limited/BoosterDraft.java @@ -275,6 +275,10 @@ public class BoosterDraft implements IBoosterDraft { } public static BoosterDraft createDraft(final LimitedPoolType draftType, final CardBlock block, final String[] boosters) { + return createDraft(draftType, block, boosters, null); + } + + public static BoosterDraft createDraft(final LimitedPoolType draftType, final CardBlock block, final String[] boosters, Integer numPlayers) { // quest draft final BoosterDraft draft = new BoosterDraft(draftType); @@ -282,7 +286,9 @@ public class BoosterDraft implements IBoosterDraft { CardEdition edition = FModel.getMagicDb().getEditions().get(setCode); // If this is metaset, edtion will be null if (edition != null) { - if (draft.getPodSize() != edition.getDraftOptions().getRecommendedPodSize()) { + if (numPlayers != null) { + draft.setPodSize(numPlayers); + } else if (draft.getPodSize() != edition.getDraftOptions().getRecommendedPodSize()) { // Auto choosing recommended pod size. In the future we may want to allow user to choose draft.setPodSize(edition.getDraftOptions().getRecommendedPodSize()); } diff --git a/forge-gui/src/main/java/forge/gamemodes/quest/QuestEventDraft.java b/forge-gui/src/main/java/forge/gamemodes/quest/QuestEventDraft.java index 2b5649eeeb0..0dc634a9d86 100644 --- a/forge-gui/src/main/java/forge/gamemodes/quest/QuestEventDraft.java +++ b/forge-gui/src/main/java/forge/gamemodes/quest/QuestEventDraft.java @@ -661,7 +661,7 @@ public class QuestEventDraft implements IQuestEvent { public BoosterDraft enter() { FModel.getQuest().getAchievements().setCurrentDraft(this); FModel.getQuest().getAssets().subtractCredits(getEntryFee()); - return BoosterDraft.createDraft(LimitedPoolType.Block, FModel.getBlocks().get(getBlock()), getBoosterConfiguration()); + return BoosterDraft.createDraft(LimitedPoolType.Block, FModel.getBlocks().get(getBlock()), getBoosterConfiguration(), 8); } public boolean isStarted() { From 64897f1ab44ad7f6c503a8f2880d2a29e619076c Mon Sep 17 00:00:00 2001 From: Chris H Date: Sun, 14 Sep 2025 10:36:17 -0400 Subject: [PATCH 191/355] Simplify logic --- .../main/java/forge/gamemodes/limited/BoosterDraft.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/forge-gui/src/main/java/forge/gamemodes/limited/BoosterDraft.java b/forge-gui/src/main/java/forge/gamemodes/limited/BoosterDraft.java index 6fa74ff64bb..f42980bdbd2 100644 --- a/forge-gui/src/main/java/forge/gamemodes/limited/BoosterDraft.java +++ b/forge-gui/src/main/java/forge/gamemodes/limited/BoosterDraft.java @@ -279,17 +279,15 @@ public class BoosterDraft implements IBoosterDraft { } public static BoosterDraft createDraft(final LimitedPoolType draftType, final CardBlock block, final String[] boosters, Integer numPlayers) { - // quest draft final BoosterDraft draft = new BoosterDraft(draftType); String setCode = boosters[0]; CardEdition edition = FModel.getMagicDb().getEditions().get(setCode); // If this is metaset, edtion will be null if (edition != null) { - if (numPlayers != null) { - draft.setPodSize(numPlayers); - } else if (draft.getPodSize() != edition.getDraftOptions().getRecommendedPodSize()) { - // Auto choosing recommended pod size. In the future we may want to allow user to choose + // Auto choosing recommended pod size. If we've chosen the podsize it should be passed in via numPlayers + int newPodSize = Objects.requireNonNullElseGet(numPlayers, () -> edition.getDraftOptions().getRecommendedPodSize()); + if (newPodSize != draft.getPodSize()) { draft.setPodSize(edition.getDraftOptions().getRecommendedPodSize()); } draft.doublePickDuringDraft = edition.getDraftOptions().isDoublePick(draft.getPodSize()); From cdc696c5063603e92e562cf6fdff6797f46b7020 Mon Sep 17 00:00:00 2001 From: Chris H Date: Sun, 14 Sep 2025 11:13:29 -0400 Subject: [PATCH 192/355] Only show event cost before you sign up for the event --- .../adventure/data/AdventureEventData.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/forge-gui-mobile/src/forge/adventure/data/AdventureEventData.java b/forge-gui-mobile/src/forge/adventure/data/AdventureEventData.java index dcabc8b1ffe..a47591b6684 100644 --- a/forge-gui-mobile/src/forge/adventure/data/AdventureEventData.java +++ b/forge-gui-mobile/src/forge/adventure/data/AdventureEventData.java @@ -607,15 +607,18 @@ public class AdventureEventData implements Serializable { description += "Block: " + getCardBlock() + "\n"; description += "Boosters: " + String.join(", ", packConfiguration) + "\n"; description += "Competition Style: " + participants.length + " players, matches played as best of " + eventRules.gamesPerMatch + ", " + (getPairingDescription()) + "\n\n"; - description += String.format("Pay 1 Entry Fee\n- Gold %d[][+Gold][BLACK]\n- Mana Shards %d[][+Shards][BLACK]\n", Math.round(eventRules.goldToEnter * townPriceModifier), Math.round(eventRules.shardsToEnter * townPriceModifier)); - if (eventRules.acceptsBronzeChallengeCoin) { - description += "- Bronze Challenge Coin [][+BronzeChallengeCoin][BLACK]\n\n"; - } else if (eventRules.acceptsSilverChallengeCoin) { - description += "- Silver Challenge Coin [][+SilverChallengeCoin][BLACK]\n\n"; - } else if (eventRules.acceptsChallengeCoin) { - description += "- Gold Challenge Coin [][+ChallengeCoin][BLACK]\n\n"; - } else { - description += "\n"; + + if (eventStatus == AdventureEventController.EventStatus.Available) { + description += String.format("Pay 1 Entry Fee\n- Gold %d[][+Gold][BLACK]\n- Mana Shards %d[][+Shards][BLACK]\n", Math.round(eventRules.goldToEnter * townPriceModifier), Math.round(eventRules.shardsToEnter * townPriceModifier)); + if (eventRules.acceptsBronzeChallengeCoin) { + description += "- Bronze Challenge Coin [][+BronzeChallengeCoin][BLACK]\n\n"; + } else if (eventRules.acceptsSilverChallengeCoin) { + description += "- Silver Challenge Coin [][+SilverChallengeCoin][BLACK]\n\n"; + } else if (eventRules.acceptsChallengeCoin) { + description += "- Gold Challenge Coin [][+ChallengeCoin][BLACK]\n\n"; + } else { + description += "\n"; + } } description += String.format("Prizes\nChampion: Keep drafted deck\n2+ round wins: Challenge Coin \n1+ round wins: %s Booster, %s Booster\n0 round wins: %s Booster", rewardPacks[0].getComment(), rewardPacks[1].getComment(), rewardPacks[2].getComment()); } else if (format.equals(AdventureEventController.EventFormat.Jumpstart)) { From 1f7862c9702b92ba5717f507f780e07e95350eb8 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Sun, 14 Sep 2025 19:26:44 +0000 Subject: [PATCH 193/355] Update superior_foes_of_spider_man.txt Closes #8711 --- forge-gui/res/cardsfolder/s/superior_foes_of_spider_man.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/s/superior_foes_of_spider_man.txt b/forge-gui/res/cardsfolder/s/superior_foes_of_spider_man.txt index f7ce485cd10..84113d41938 100644 --- a/forge-gui/res/cardsfolder/s/superior_foes_of_spider_man.txt +++ b/forge-gui/res/cardsfolder/s/superior_foes_of_spider_man.txt @@ -9,7 +9,7 @@ SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True | SubA SVar:DBExile:DB$ Dig | Defined$ You | DigNum$ 1 | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True | SubAbility$ DBEffect | AILogic$ ExileAndPlayUntilEOT # AILogic tag not quite right? SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | StaticAbilities$ Play | Duration$ Permanent | ForgetOnMoved$ Exile | ImprintOnHost$ True -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ DBCleanup2 +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ DBCleanup2 | Static$ True SVar:DBCleanup2:DB$ Cleanup | ClearImprinted$ True SVar:Play:Mode$ Continuous | MayPlay$ True | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ You may play this card until you exile another card with CARDNAME. Oracle:Whenever you cast a spell with mana value 4 or greater, you may exile the top card of your library. If you do, you may play that card until you exile another card with this creature. From d999c5e213af33cfe4d376711cd4639a920d5835 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Mon, 15 Sep 2025 09:48:45 +0800 Subject: [PATCH 194/355] Prevent NPE --- .../src/forge/card/CardImageRenderer.java | 58 ++++++++++++------- 1 file changed, 38 insertions(+), 20 deletions(-) diff --git a/forge-gui-mobile/src/forge/card/CardImageRenderer.java b/forge-gui-mobile/src/forge/card/CardImageRenderer.java index 265901d3b19..6df633e82be 100644 --- a/forge-gui-mobile/src/forge/card/CardImageRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardImageRenderer.java @@ -49,6 +49,24 @@ public class CardImageRenderer { return FSkinColor.fromRGB(detailColor.r, detailColor.g, detailColor.b); } + private static float getCapHeight(FSkinFont fSkinFont) { + if (fSkinFont == null) + return 0f; + return fSkinFont.getCapHeight(); + } + + private static float getAscent(FSkinFont fSkinFont) { + if (fSkinFont == null) + return 0f; + return fSkinFont.getAscent(); + } + + private static float getBoundsWidth(String sequence, FSkinFont fSkinFont) { + if (fSkinFont == null) + return 0f; + return fSkinFont.getBounds(sequence).width; + } + public static void forceStaticFieldUpdate() { //force static fields to be updated the next time a card image is rendered prevImageWidth = 0; @@ -143,7 +161,7 @@ public class CardImageRenderer { x += outerBorderThickness; y += outerBorderThickness; w -= 2 * outerBorderThickness; - float headerHeight = Math.max(MANA_SYMBOL_SIZE + 2 * HEADER_PADDING, 2 * NAME_FONT.getCapHeight()) + 2; + float headerHeight = Math.max(MANA_SYMBOL_SIZE + 2 * HEADER_PADDING, 2 * getCapHeight(NAME_FONT)) + 2; //draw header containing name and mana cost Color[] headerColors = FSkinColor.tintColors(Color.WHITE, colors, CardRenderer.NAME_BOX_TINT); @@ -158,15 +176,15 @@ public class CardImageRenderer { float artWidth = w - 2 * artInset; float artHeight = !showArtBox ? 0f : artWidth / CardRenderer.CARD_ART_RATIO; - float typeBoxHeight = 2 * TYPE_FONT.getCapHeight(); + float typeBoxHeight = 2 * getCapHeight(TYPE_FONT); float ptBoxHeight = 0; float textBoxHeight = h - headerHeight - artHeight - typeBoxHeight - outerBorderThickness - artInset; if (state.isCreature() || state.isPlaneswalker() || state.hasPrintedPT() || state.isBattle()) { - ptBoxHeight = 2 * PT_FONT.getCapHeight(); + ptBoxHeight = 2 * getCapHeight(PT_FONT); } //space for artist - textBoxHeight -= 2 * PT_FONT.getCapHeight(); + textBoxHeight -= 2 * getCapHeight(PT_FONT); PaperCard paperCard = null; try { paperCard = ImageUtil.getPaperCardFromImageKey(state.getImageKey()); @@ -246,7 +264,7 @@ public class CardImageRenderer { } //draw artist if (showArtist) - g.drawOutlinedText(artist, TEXT_FONT, Color.WHITE, Color.DARK_GRAY, x + (TYPE_FONT.getCapHeight() / 2), y + (TYPE_FONT.getCapHeight() / 2), w, h, false, Align.left, false); + g.drawOutlinedText(artist, TEXT_FONT, Color.WHITE, Color.DARK_GRAY, x + (getCapHeight(TYPE_FONT) / 2), y + (getCapHeight(TYPE_FONT) / 2), w, h, false, Align.left, false); } private static void drawOutlineColor(Graphics g, ColorSet colors, float x, float y, float w, float h) { if (colors == null) @@ -296,7 +314,7 @@ public class CardImageRenderer { manaCostWidth = CardFaceSymbols.getWidth(otherManaCost, manaSymbolSize) + HEADER_PADDING; CardFaceSymbols.drawManaCost(g, otherManaCost, x + w - manaCostWidth, y + (h - manaSymbolSize) / 2, manaSymbolSize); //draw "//" between two parts of mana cost - manaCostWidth += NAME_FONT.getBounds("//").width + HEADER_PADDING; + manaCostWidth += getBoundsWidth("//", NAME_FONT) + HEADER_PADDING; g.drawText("//", NAME_FONT, Color.BLACK, x + w - manaCostWidth, y, w, h, false, Align.left, true); } manaCostWidth += CardFaceSymbols.getWidth(mainManaCost, manaSymbolSize) + HEADER_PADDING; @@ -517,7 +535,7 @@ public class CardImageRenderer { } else { //left //float headerHeight = Math.max(MANA_SYMBOL_SIZE + 2 * HEADER_PADDING, 2 * TYPE_FONT.getCapHeight()) + 2; - float typeBoxHeight = 2 * TYPE_FONT.getCapHeight(); + float typeBoxHeight = 2 * getCapHeight(TYPE_FONT); drawHeader(g, card, card.getState(true), altcolors, x, y, w - (w / 2), typeBoxHeight, noText, true); drawTypeLine(g, card.getState(true), canShow, altcolors, x, y + typeBoxHeight, w - (w / 2), typeBoxHeight, noText, true, true); float mod = (typeBoxHeight + typeBoxHeight); @@ -714,7 +732,7 @@ public class CardImageRenderer { return; } - float padding = TEXT_FONT.getCapHeight() * 0.75f; + float padding = getCapHeight(TEXT_FONT) * 0.75f; x += padding; y += padding; w -= 2 * padding; @@ -747,15 +765,15 @@ public class CardImageRenderer { return; } - float padding = Math.round(PT_FONT.getCapHeight() / 4); + float padding = Math.round(getCapHeight(PT_FONT) / 4); float totalPieceWidth = -padding; float[] pieceWidths = new float[pieces.size()]; for (int i = 0; i < pieces.size(); i++) { - float pieceWidth = PT_FONT.getBounds(pieces.get(i)).width + padding; + float pieceWidth = getBoundsWidth(pieces.get(i), PT_FONT) + padding; pieceWidths[i] = pieceWidth; totalPieceWidth += pieceWidth; } - float boxHeight = PT_FONT.getCapHeight() + PT_FONT.getAscent() + 3 * padding; + float boxHeight = getCapHeight(PT_FONT) + getAscent(PT_FONT) + 3 * padding; float boxWidth = Math.max(PT_BOX_WIDTH, totalPieceWidth + 2 * padding); x += w - boxWidth; @@ -951,14 +969,14 @@ public class CardImageRenderer { x += outerBorderThickness; y += outerBorderThickness; w -= 2 * outerBorderThickness; - float cardNameBoxHeight = Math.max(MANA_SYMBOL_SIZE + 2 * HEADER_PADDING, 2 * NAME_FONT.getCapHeight()) + 2 * TYPE_FONT.getCapHeight() + 2; + float cardNameBoxHeight = Math.max(MANA_SYMBOL_SIZE + 2 * HEADER_PADDING, 2 * getCapHeight(NAME_FONT)) + 2 * getCapHeight(TYPE_FONT) + 2; //draw name/type box Color[] nameBoxColors = FSkinColor.tintColors(Color.WHITE, colors, CardRenderer.NAME_BOX_TINT); drawDetailsNameBox(g, card, state, canShow, nameBoxColors, x, y, w, cardNameBoxHeight); float innerBorderThickness = outerBorderThickness / 2; - float ptBoxHeight = 2 * PT_FONT.getCapHeight(); + float ptBoxHeight = 2 * getCapHeight(PT_FONT); float textBoxHeight = h - cardNameBoxHeight - ptBoxHeight - outerBorderThickness - 3 * innerBorderThickness; y += cardNameBoxHeight + innerBorderThickness; @@ -1141,7 +1159,7 @@ public class CardImageRenderer { float padding = h / 8; //make sure name/mana cost row height is tall enough for both - h = Math.max(MANA_SYMBOL_SIZE + 2 * HEADER_PADDING, 2 * NAME_FONT.getCapHeight()); + h = Math.max(MANA_SYMBOL_SIZE + 2 * HEADER_PADDING, 2 * getCapHeight(NAME_FONT)); //draw mana cost for card float manaCostWidth = 0; @@ -1154,7 +1172,7 @@ public class CardImageRenderer { manaCostWidth = CardFaceSymbols.getWidth(otherManaCost, MANA_SYMBOL_SIZE) + HEADER_PADDING; CardFaceSymbols.drawManaCost(g, otherManaCost, x + w - manaCostWidth, y + (h - MANA_SYMBOL_SIZE) / 2, MANA_SYMBOL_SIZE); //draw "//" between two parts of mana cost - manaCostWidth += NAME_FONT.getBounds("//").width + HEADER_PADDING; + manaCostWidth += getBoundsWidth("//", NAME_FONT) + HEADER_PADDING; g.drawText("//", NAME_FONT, Color.BLACK, x + w - manaCostWidth, y, w, h, false, Align.left, true); } manaCostWidth += CardFaceSymbols.getWidth(mainManaCost, MANA_SYMBOL_SIZE) + HEADER_PADDING; @@ -1168,7 +1186,7 @@ public class CardImageRenderer { //draw type and set label for card y += h; - h = 2 * TYPE_FONT.getCapHeight(); + h = 2 * getCapHeight(TYPE_FONT); String set = state.getSetCode(); CardRarity rarity = state.getRarity(); @@ -1189,7 +1207,7 @@ public class CardImageRenderer { fillColorBackground(g, colors, x, y, w, h); g.drawRect(BORDER_THICKNESS, Color.BLACK, x, y, w, h); - float padX = TEXT_FONT.getCapHeight() / 2; + float padX = getCapHeight(TEXT_FONT) / 2; float padY = padX + Utils.scale(2); //add a little more vertical padding x += padX; y += padY; @@ -1202,8 +1220,8 @@ public class CardImageRenderer { float idWidth = 0; if (canShow) { String idText = CardDetailUtil.formatCardId(state); - g.drawText(idText, TYPE_FONT, idForeColor, x, y + TYPE_FONT.getCapHeight() / 2, w, h, false, Align.left, false); - idWidth = TYPE_FONT.getBounds(idText).width; + g.drawText(idText, TYPE_FONT, idForeColor, x, y + getCapHeight(TYPE_FONT) / 2, w, h, false, Align.left, false); + idWidth = getBoundsWidth(idText, TYPE_FONT); } String ptText = CardDetailUtil.formatPrimaryCharacteristic(state, canShow); @@ -1212,7 +1230,7 @@ public class CardImageRenderer { } TextBounds bounds = cardTextRenderer.getBounds(ptText, PT_FONT); - float padding = PT_FONT.getCapHeight() / 2; + float padding = getCapHeight(PT_FONT) / 2; float boxWidth = Math.min(bounds.width + 2 * padding, w - idWidth - padding); //prevent box overlapping ID x += w - boxWidth; From 10d359e7d78432189d7eab5319a3d3fc27e2d7b3 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Mon, 15 Sep 2025 14:12:46 +0200 Subject: [PATCH 195/355] Update MagicColor.Color enum (#8715) Adds ShortName and Symbol --- .../src/main/java/forge/card/MagicColor.java | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/forge-core/src/main/java/forge/card/MagicColor.java b/forge-core/src/main/java/forge/card/MagicColor.java index f1e29ebf0e1..e56c88eb808 100644 --- a/forge-core/src/main/java/forge/card/MagicColor.java +++ b/forge-core/src/main/java/forge/card/MagicColor.java @@ -1,7 +1,7 @@ package forge.card; import com.google.common.collect.ImmutableList; -import forge.deck.DeckRecognizer; +import forge.util.Localizer; /** * Holds byte values for each color magic has. @@ -158,20 +158,23 @@ public final class MagicColor { } public enum Color { - WHITE(Constant.WHITE, MagicColor.WHITE, "{W}"), - BLUE(Constant.BLUE, MagicColor.BLUE, "{U}"), - BLACK(Constant.BLACK, MagicColor.BLACK, "{B}"), - RED(Constant.RED, MagicColor.RED, "{R}"), - GREEN(Constant.GREEN, MagicColor.GREEN, "{G}"), - COLORLESS(Constant.COLORLESS, MagicColor.COLORLESS, "{C}"); + WHITE(Constant.WHITE, MagicColor.WHITE, "W", "lblWhite"), + BLUE(Constant.BLUE, MagicColor.BLUE, "U", "lblBlue"), + BLACK(Constant.BLACK, MagicColor.BLACK, "B", "lblBlack"), + RED(Constant.RED, MagicColor.RED, "R", "lblRed"), + GREEN(Constant.GREEN, MagicColor.GREEN, "G", "lblGreen"), + COLORLESS(Constant.COLORLESS, MagicColor.COLORLESS, "C", "lblColorless"); - private final String name, symbol; + private final String name, shortName, symbol; + private final String localizedName; private final byte colormask; - Color(String name0, byte colormask0, String symbol0) { + Color(String name0, byte colormask0, String shortName, String label) { name = name0; colormask = colormask0; - symbol = symbol0; + this.shortName = shortName; + symbol = "{" + shortName + "}"; + localizedName = Localizer.getInstance().getMessage(label); } public static Color fromByte(final byte color) { @@ -188,10 +191,12 @@ public final class MagicColor { public String getName() { return name; } + public String getShortName() { + return shortName; + } public String getLocalizedName() { - //Should probably move some of this logic back here, or at least to a more general location. - return DeckRecognizer.getLocalisedMagicColorName(getName()); + return localizedName; } public byte getColormask() { @@ -202,7 +207,7 @@ public final class MagicColor { } @Override public String toString() { - return name; + return getLocalizedName(); } } From 79fd4a3f8d6cca91375f1d8d8327086546260739 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Mon, 15 Sep 2025 14:27:21 +0200 Subject: [PATCH 196/355] Fix crash after removing target when copying divided spell (#8714) Co-authored-by: tool4EvEr --- .../src/main/java/forge/ai/ability/ChangeZoneAi.java | 8 +------- .../forge/game/ability/effects/AirbendEffect.java | 10 +++++----- .../forge/game/ability/effects/ChangeZoneEffect.java | 2 +- .../forge/game/ability/effects/EarthbendEffect.java | 8 ++++---- .../forge/game/ability/effects/TimeTravelEffect.java | 6 ++---- .../src/main/java/forge/game/player/Player.java | 5 +++-- .../res/cardsfolder/f/footsteps_of_the_goryo.txt | 3 +-- forge-gui/res/cardsfolder/p/push_the_limit.txt | 6 ++---- forge-gui/res/cardsfolder/w/wake_the_dead.txt | 3 +-- .../gamemodes/match/input/InputSelectTargets.java | 11 +++++++---- 10 files changed, 27 insertions(+), 35 deletions(-) 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 49cf157d4c8..114d92d4843 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java @@ -298,13 +298,7 @@ public class ChangeZoneAi extends SpellAbilityAi { boolean activateForCost = ComputerUtil.activateForCost(sa, ai); if (sa.hasParam("Origin")) { - try { - origin = ZoneType.listValueOf(sa.getParam("Origin")); - } catch (IllegalArgumentException ex) { - // This happens when Origin is something like - // "Graveyard,Library" (Doomsday) - return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi); - } + origin = ZoneType.listValueOf(sa.getParam("Origin")); } final String destination = sa.getParam("Destination"); diff --git a/forge-game/src/main/java/forge/game/ability/effects/AirbendEffect.java b/forge-game/src/main/java/forge/game/ability/effects/AirbendEffect.java index a32995cd92d..bfb9f8b85d9 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/AirbendEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/AirbendEffect.java @@ -20,14 +20,14 @@ public class AirbendEffect extends SpellAbilityEffect { @Override protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder("Airbend "); - + Iterable tgts; if (sa.usesTargeting()) { tgts = getCardsfromTargets(sa); } else { // otherwise add self to list and go from there tgts = sa.knownDetermineDefined(sa.getParam("Defined")); } - + sb.append(sa.getParamOrDefault("DefinedDesc", Lang.joinHomogenous(tgts))); sb.append("."); if (Iterables.size(tgts) > 1) { @@ -46,7 +46,7 @@ public class AirbendEffect extends SpellAbilityEffect { final Player pl = sa.getActivatingPlayer(); final CardZoneTable triggerList = CardZoneTable.getSimultaneousInstance(sa); - + for (Card c : getTargetCards(sa)) { final Card gameCard = game.getCardState(c, null); // gameCard is LKI in that case, the card is not in game anymore @@ -55,7 +55,7 @@ public class AirbendEffect extends SpellAbilityEffect { if (gameCard == null || !c.equalsWithGameTimestamp(gameCard) || gameCard.isPhasedOut()) { continue; } - + if (!gameCard.canExiledBy(sa, true)) { continue; } @@ -86,7 +86,7 @@ public class AirbendEffect extends SpellAbilityEffect { } triggerList.triggerChangesZoneAll(game, sa); handleExiledWith(triggerList.allCards(), sa); - + pl.triggerElementalBend(TriggerType.Airbend); } diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java index a84e33d88d3..ea7b2aab70b 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java @@ -928,7 +928,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect { List origin = Lists.newArrayList(); if (sa.hasParam("Origin")) { - origin = ZoneType.listValueOf(sa.getParam("Origin")); + origin.addAll(ZoneType.listValueOf(sa.getParam("Origin"))); } ZoneType destination = ZoneType.smartValueOf(sa.getParam("Destination")); diff --git a/forge-game/src/main/java/forge/game/ability/effects/EarthbendEffect.java b/forge-game/src/main/java/forge/game/ability/effects/EarthbendEffect.java index 5e58004a14c..723bf4522e9 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/EarthbendEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/EarthbendEffect.java @@ -47,7 +47,7 @@ public class EarthbendEffect extends SpellAbilityEffect { final Game game = source.getGame(); final Player pl = sa.getActivatingPlayer(); int num = AbilityUtils.calculateAmount(source, sa.getParamOrDefault("Num", "1"), sa); - + long ts = game.getNextTimestamp(); String desc = "When it dies or is exiled, return it to the battlefield tapped."; @@ -59,17 +59,17 @@ public class EarthbendEffect extends SpellAbilityEffect { c.addNewPT(0, 0, ts, 0); c.addChangedCardTypes(Arrays.asList("Creature"), null, false, EnumSet.noneOf(RemoveType.class), ts, 0, true, false); c.addChangedCardKeywords(Arrays.asList("Haste"), null, false, ts, null); - + GameEntityCounterTable table = new GameEntityCounterTable(); c.addCounter(CounterEnumType.P1P1, num, pl, table); table.replaceCounterEffect(game, sa, true); - + buildTrigger(sa, c, sbTrigA, "Graveyard"); buildTrigger(sa, c, sbTrigB, "Exile"); } pl.triggerElementalBend(TriggerType.Earthbend); } - + protected void buildTrigger(SpellAbility sa, Card c, String sbTrig, String zone) { final Card source = sa.getHostCard(); final Game game = source.getGame(); diff --git a/forge-game/src/main/java/forge/game/ability/effects/TimeTravelEffect.java b/forge-game/src/main/java/forge/game/ability/effects/TimeTravelEffect.java index dc975e08d1c..69fc1f8a470 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/TimeTravelEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/TimeTravelEffect.java @@ -9,6 +9,7 @@ import forge.game.GameEntityCounterTable; import forge.game.ability.AbilityUtils; import forge.game.ability.SpellAbilityEffect; import forge.game.card.Card; +import forge.game.card.CardCollection; import forge.game.card.CardLists; import forge.game.card.CardPredicates; import forge.game.card.CounterType; @@ -20,7 +21,6 @@ import forge.game.spellability.SpellAbility; import forge.game.zone.ZoneType; import forge.util.CardTranslation; import forge.util.Localizer; -import forge.util.collect.FCollection; public class TimeTravelEffect extends SpellAbilityEffect { @@ -41,10 +41,8 @@ public class TimeTravelEffect extends SpellAbilityEffect { final CounterType counterType = CounterEnumType.TIME; for (int i = 0; i < num; i++) { - FCollection list = new FCollection<>(); - // card you own that is suspended - list.addAll(CardLists.filter(activator.getCardsIn(ZoneType.Exile), CardPredicates.hasSuspend())); + CardCollection list = CardLists.filter(activator.getCardsIn(ZoneType.Exile), CardPredicates.hasSuspend()); // permanent you control with time counter list.addAll(CardLists.filter(activator.getCardsIn(ZoneType.Battlefield), CardPredicates.hasCounter(counterType))); diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index aba9ecbfc94..60525c5a051 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -1120,13 +1120,14 @@ public class Player extends GameEntity implements Comparable { getGame().fireEvent(new GameEventSurveil(this, numToTop, numToGrave)); } - surveilThisTurn++; final Map runParams = AbilityKey.mapFromPlayer(this); - runParams.put(AbilityKey.FirstTime, surveilThisTurn == 1); + runParams.put(AbilityKey.FirstTime, surveilThisTurn == 0); if (params != null) { runParams.putAll(params); } getGame().getTriggerHandler().runTrigger(TriggerType.Surveil, runParams, false); + + surveilThisTurn++; } public int getSurveilThisTurn() { diff --git a/forge-gui/res/cardsfolder/f/footsteps_of_the_goryo.txt b/forge-gui/res/cardsfolder/f/footsteps_of_the_goryo.txt index 77892ccf224..20c483986c0 100644 --- a/forge-gui/res/cardsfolder/f/footsteps_of_the_goryo.txt +++ b/forge-gui/res/cardsfolder/f/footsteps_of_the_goryo.txt @@ -1,7 +1,6 @@ Name:Footsteps of the Goryo ManaCost:2 B Types:Sorcery Arcane -A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature in your graveyard | GainControl$ True | SubAbility$ DBPump | AILogic$ BeforeCombat | SpellDescription$ Return target creature card from your graveyard to the battlefield. Sacrifice that creature at the beginning of the next end step. -SVar:DBPump:DB$ Pump | Defined$ Targeted | AtEOT$ Sacrifice +A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature in your graveyard | GainControl$ True | AtEOT$ Sacrifice | AILogic$ BeforeCombat | SpellDescription$ Return target creature card from your graveyard to the battlefield. Sacrifice that creature at the beginning of the next end step. AI:RemoveDeck:Random Oracle:Return target creature card from your graveyard to the battlefield. Sacrifice that creature at the beginning of the next end step. diff --git a/forge-gui/res/cardsfolder/p/push_the_limit.txt b/forge-gui/res/cardsfolder/p/push_the_limit.txt index 6d1d35c1612..c0b0ef1f42b 100644 --- a/forge-gui/res/cardsfolder/p/push_the_limit.txt +++ b/forge-gui/res/cardsfolder/p/push_the_limit.txt @@ -1,11 +1,9 @@ Name:Push the Limit ManaCost:5 R R Types:Sorcery -A:SP$ ChangeZoneAll | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Mount.YouOwn,Vehicle.YouOwn | RememberChanged$ True | SubAbility$ DBPump | SpellDescription$ Return all Mount and Vehicle cards from your graveyard to the battlefield. Sacrifice them at the beginning of the next end step. Vehicles you control become artifact creatures until end of turn. Creatures you control gain haste until end of turn. -SVar:DBPump:DB$ Pump | Defined$ Remembered | AtEOT$ Sacrifice | SubAbility$ DBAnimateAll +A:SP$ ChangeZoneAll | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Mount.YouOwn,Vehicle.YouOwn | AtEOT$ Sacrifice | SubAbility$ DBAnimateAll | SpellDescription$ Return all Mount and Vehicle cards from your graveyard to the battlefield. Sacrifice them at the beginning of the next end step. Vehicles you control become artifact creatures until end of turn. Creatures you control gain haste until end of turn. SVar:DBAnimateAll:DB$ AnimateAll | Types$ Artifact,Creature | ValidCards$ Vehicle.YouCtrl | SubAbility$ DBPumpAll -SVar:DBPumpAll:DB$ PumpAll | ValidCards$ Creature.YouCtrl | KW$ Haste | SubAbility$ DBCleanup -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:DBPumpAll:DB$ PumpAll | ValidCards$ Creature.YouCtrl | KW$ Haste SVar:PlayMain1:TRUE DeckHas:Ability$Graveyard DeckHints:Ability$Discard|Sacrifice diff --git a/forge-gui/res/cardsfolder/w/wake_the_dead.txt b/forge-gui/res/cardsfolder/w/wake_the_dead.txt index 1bc518c106b..f174b37b7cc 100644 --- a/forge-gui/res/cardsfolder/w/wake_the_dead.txt +++ b/forge-gui/res/cardsfolder/w/wake_the_dead.txt @@ -2,8 +2,7 @@ Name:Wake the Dead ManaCost:X B B Types:Instant Text:Cast this spell only during combat on an opponent's turn. -A:SP$ ChangeZone | TargetMin$ X | TargetMax$ X | OpponentTurn$ True | ActivationPhases$ BeginCombat->EndCombat | Origin$ Graveyard | Destination$ Battlefield | ValidTgts$ Creature.YouOwn | TgtPrompt$ Select X target creatures in your graveyard | GainControl$ True | SubAbility$ DBPump | StackDescription$ Return X target creature cards [{c:Targeted}] from your graveyard to the battlefield. Sacrifice those creatures at the beginning of the next end step. | SpellDescription$ Return X target creature cards from your graveyard to the battlefield. Sacrifice those creatures at the beginning of the next end step. -SVar:DBPump:DB$ Pump | Defined$ Targeted | AtEOT$ Sacrifice +A:SP$ ChangeZone | TargetMin$ X | TargetMax$ X | OpponentTurn$ True | ActivationPhases$ BeginCombat->EndCombat | Origin$ Graveyard | Destination$ Battlefield | ValidTgts$ Creature.YouOwn | TgtPrompt$ Select X target creatures in your graveyard | GainControl$ True | AtEOT$ Sacrifice | StackDescription$ Return X target creature cards [{c:Targeted}] from your graveyard to the battlefield. Sacrifice those creatures at the beginning of the next end step. | SpellDescription$ Return X target creature cards from your graveyard to the battlefield. Sacrifice those creatures at the beginning of the next end step. SVar:X:Count$xPaid AI:RemoveDeck:All DeckHas:Ability$Graveyard|Sacrifice diff --git a/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectTargets.java b/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectTargets.java index 33c28e63535..f21d31b8e76 100644 --- a/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectTargets.java +++ b/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectTargets.java @@ -408,15 +408,18 @@ public final class InputSelectTargets extends InputSyncronizedBase { } private void removeTarget(final GameEntity ge) { + if (divisionValues != null) { + divisionValues.add(sa.getDividedValue(ge)); + } targets.remove(ge); sa.getTargets().remove(ge); - if (ge instanceof Card) { - getController().getGui().setUsedToPay(CardView.get((Card) ge), false); + if (ge instanceof Card c) { + getController().getGui().setUsedToPay(CardView.get(c), false); // try to get last selected card lastTarget = Iterables.getLast(IterableUtil.filter(targets, Card.class), null); } - else if (ge instanceof Player) { - getController().getGui().setHighlighted(PlayerView.get((Player) ge), false); + else if (ge instanceof Player p) { + getController().getGui().setHighlighted(PlayerView.get(p), false); } this.showMessage(); From b902d516a7b9b7d31f02272514856750d36fea0c Mon Sep 17 00:00:00 2001 From: marthinwurer Date: Fri, 25 Jul 2025 22:41:38 -0600 Subject: [PATCH 197/355] Added todos for known problems --- forge-game/src/main/java/forge/game/phase/PhaseHandler.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java index 3513eb77976..a88c4601d60 100644 --- a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java +++ b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java @@ -1039,6 +1039,7 @@ public class PhaseHandler implements java.io.Serializable { do { if (checkStateBasedEffects()) { // state-based effects check could lead to game over + // TODO: handle game over return return; } game.stashGameState(); @@ -1111,6 +1112,7 @@ public class PhaseHandler implements java.io.Serializable { // of Priority Player nextPlayer = game.getNextPlayerAfter(getPriorityPlayer()); + // TODO handle concession return if (game.isGameOver() || nextPlayer == null) { return; } // conceded? if (DEBUG_PHASES) { @@ -1143,6 +1145,7 @@ public class PhaseHandler implements java.io.Serializable { setPhase(null); game.updatePhaseForView(); game.fireEvent(new GameEventGameRestarted(playerTurn)); + // TODO: handle karn restart return return; } From 052e72d8eac9c13ee3170a5137dfd65937131b9e Mon Sep 17 00:00:00 2001 From: marthinwurer Date: Fri, 25 Jul 2025 22:49:08 -0600 Subject: [PATCH 198/355] break out first turn setup --- .../main/java/forge/game/phase/PhaseHandler.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java index a88c4601d60..814a3f4e287 100644 --- a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java +++ b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java @@ -1003,12 +1003,7 @@ public class PhaseHandler implements java.io.Serializable { private final static boolean DEBUG_PHASES = false; - public void startFirstTurn(Player goesFirst) { - startFirstTurn(goesFirst, null); - } - public void startFirstTurn(Player goesFirst, Runnable startGameHook) { - StopWatch sw = new StopWatch(); - + public void setupFirstTurn(Player goesFirst, Runnable startGameHook) { if (phase != null) { throw new IllegalStateException("Turns already started, call this only once per game"); } @@ -1024,6 +1019,15 @@ public class PhaseHandler implements java.io.Serializable { startGameHook.run(); givePriorityToPlayer = true; } + } + + public void startFirstTurn(Player goesFirst) { + startFirstTurn(goesFirst, null); + } + public void startFirstTurn(Player goesFirst, Runnable startGameHook) { + StopWatch sw = new StopWatch(); + + setupFirstTurn(goesFirst, startGameHook); // MAIN GAME LOOP while (!game.isGameOver()) { From d2d6b7bc53fa5e9ccbfd697f9cba762fbe569709 Mon Sep 17 00:00:00 2001 From: marthinwurer Date: Fri, 25 Jul 2025 23:00:02 -0600 Subject: [PATCH 199/355] break out main game loop function --- .../src/main/java/forge/game/phase/PhaseHandler.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java index 814a3f4e287..578c9de20fe 100644 --- a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java +++ b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java @@ -1025,9 +1025,12 @@ public class PhaseHandler implements java.io.Serializable { startFirstTurn(goesFirst, null); } public void startFirstTurn(Player goesFirst, Runnable startGameHook) { - StopWatch sw = new StopWatch(); - setupFirstTurn(goesFirst, startGameHook); + mainGameLoop(); + } + + public void mainGameLoop() { + StopWatch sw = new StopWatch(); // MAIN GAME LOOP while (!game.isGameOver()) { From cd3a26e434c53b8e81c3e46e2d9015d52b679ed3 Mon Sep 17 00:00:00 2001 From: marthinwurer Date: Sat, 26 Jul 2025 00:02:11 -0600 Subject: [PATCH 200/355] break out main loop step --- .../java/forge/game/phase/PhaseHandler.java | 237 +++++++++--------- 1 file changed, 120 insertions(+), 117 deletions(-) diff --git a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java index 578c9de20fe..de244cd5794 100644 --- a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java +++ b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java @@ -1030,136 +1030,139 @@ public class PhaseHandler implements java.io.Serializable { } public void mainGameLoop() { - StopWatch sw = new StopWatch(); - // MAIN GAME LOOP - while (!game.isGameOver()) { - if (givePriorityToPlayer) { - if (DEBUG_PHASES) { - sw.start(); - } + while (!game.isGameOver() && !(game.getAge() == GameStage.RestartedByKarn)) { + mainLoopStep(); + } + } - game.fireEvent(new GameEventPlayerPriority(playerTurn, phase, getPriorityPlayer())); - List chosenSa = null; - - int loopCount = 0; - do { - if (checkStateBasedEffects()) { - // state-based effects check could lead to game over - // TODO: handle game over return - return; - } - game.stashGameState(); - - chosenSa = pPlayerPriority.getController().chooseSpellAbilityToPlay(); - - // this needs to come after chosenSa so it sees you conceding on own turn - if (playerTurn.hasLost() && pPlayerPriority.equals(playerTurn) && pFirstPriority.equals(playerTurn)) { - // If the active player has lost, and they have priority, set the next player to have priority - System.out.println("Active player is no longer in the game..."); - pPlayerPriority = game.getNextPlayerAfter(getPriorityPlayer()); - pFirstPriority = pPlayerPriority; - } - - if (chosenSa == null) { - break; // that means 'I pass' - } - if (DEBUG_PHASES) { - System.out.print("... " + pPlayerPriority + " plays " + chosenSa); - } - - boolean rollback = false; - for (SpellAbility sa : chosenSa) { - Card saHost = sa.getHostCard(); - final Zone originZone = saHost.getZone(); - final CardZoneTable triggerList = new CardZoneTable(game.getLastStateBattlefield(), game.getLastStateGraveyard()); - - if (pPlayerPriority.getController().playChosenSpellAbility(sa)) { - // 117.3c If a player has priority when they cast a spell, activate an ability, [play a land] - // that player receives priority afterward. - pFirstPriority = pPlayerPriority; // all opponents have to pass before stack is allowed to resolve - } else if (game.EXPERIMENTAL_RESTORE_SNAPSHOT) { - rollback = true; - } - - saHost = game.getCardState(saHost); - final Zone currentZone = saHost.getZone(); - - // Need to check if Zone did change - if (currentZone != null && originZone != null && !currentZone.equals(originZone) && (sa.isSpell() || sa.isLandAbility())) { - // currently there can be only one Spell put on the Stack at once, or Land Abilities be played - triggerList.put(originZone.getZoneType(), currentZone.getZoneType(), saHost); - triggerList.triggerChangesZoneAll(game, sa); - } - } - // Don't copy last state if we're in the middle of rolling back a spell... - if (!rollback) { - game.copyLastState(); - } - loopCount++; - } while (loopCount < 999 || !pPlayerPriority.getController().isAI()); - - if (loopCount >= 999 && pPlayerPriority.getController().isAI()) { - System.out.print("AI looped too much with: " + chosenSa); - } - - if (DEBUG_PHASES) { - sw.stop(); - System.out.print("... passed in " + sw.getTime()/1000f + " s\n"); - System.out.println("\t\tStack: " + game.getStack()); - sw.reset(); - } - } - else if (DEBUG_PHASES) { - System.out.print(" >> (no priority given to " + getPriorityPlayer() + ")\n"); + public void mainLoopStep() { + StopWatch sw = new StopWatch(); + if (givePriorityToPlayer) { + if (DEBUG_PHASES) { + sw.start(); } - // actingPlayer is the player who may act - // the firstAction is the player who gained Priority First in this segment - // of Priority - Player nextPlayer = game.getNextPlayerAfter(getPriorityPlayer()); + game.fireEvent(new GameEventPlayerPriority(playerTurn, phase, getPriorityPlayer())); + List chosenSa = null; - // TODO handle concession return - if (game.isGameOver() || nextPlayer == null) { return; } // conceded? + int loopCount = 0; + do { + if (checkStateBasedEffects()) { + // state-based effects check could lead to game over + // TODO: handle game over return + return; + } + game.stashGameState(); + + chosenSa = pPlayerPriority.getController().chooseSpellAbilityToPlay(); + + // this needs to come after chosenSa so it sees you conceding on own turn + if (playerTurn.hasLost() && pPlayerPriority.equals(playerTurn) && pFirstPriority.equals(playerTurn)) { + // If the active player has lost, and they have priority, set the next player to have priority + System.out.println("Active player is no longer in the game..."); + pPlayerPriority = game.getNextPlayerAfter(getPriorityPlayer()); + pFirstPriority = pPlayerPriority; + } + + if (chosenSa == null) { + break; // that means 'I pass' + } + if (DEBUG_PHASES) { + System.out.print("... " + pPlayerPriority + " plays " + chosenSa); + } + + boolean rollback = false; + for (SpellAbility sa : chosenSa) { + Card saHost = sa.getHostCard(); + final Zone originZone = saHost.getZone(); + final CardZoneTable triggerList = new CardZoneTable(game.getLastStateBattlefield(), game.getLastStateGraveyard()); + + if (pPlayerPriority.getController().playChosenSpellAbility(sa)) { + // 117.3c If a player has priority when they cast a spell, activate an ability, [play a land] + // that player receives priority afterward. + pFirstPriority = pPlayerPriority; // all opponents have to pass before stack is allowed to resolve + } else if (game.EXPERIMENTAL_RESTORE_SNAPSHOT) { + rollback = true; + } + + saHost = game.getCardState(saHost); + final Zone currentZone = saHost.getZone(); + + // Need to check if Zone did change + if (currentZone != null && originZone != null && !currentZone.equals(originZone) && (sa.isSpell() || sa.isLandAbility())) { + // currently there can be only one Spell put on the Stack at once, or Land Abilities be played + triggerList.put(originZone.getZoneType(), currentZone.getZoneType(), saHost); + triggerList.triggerChangesZoneAll(game, sa); + } + } + // Don't copy last state if we're in the middle of rolling back a spell... + if (!rollback) { + game.copyLastState(); + } + loopCount++; + } while (loopCount < 999 || !pPlayerPriority.getController().isAI()); + + if (loopCount >= 999 && pPlayerPriority.getController().isAI()) { + System.out.print("AI looped too much with: " + chosenSa); + } if (DEBUG_PHASES) { - System.out.println(TextUtil.concatWithSpace(playerTurn.toString(),TextUtil.addSuffix(phase.toString(),":"), pPlayerPriority.toString(),"is active, previous was", nextPlayer.toString())); + sw.stop(); + System.out.print("... passed in " + sw.getTime()/1000f + " s\n"); + System.out.println("\t\tStack: " + game.getStack()); + sw.reset(); } - if (pFirstPriority == nextPlayer) { - if (game.getStack().isEmpty()) { - if (playerTurn.hasLost()) { - setPriority(game.getNextPlayerAfter(playerTurn)); - } else { - setPriority(playerTurn); - } + } + else if (DEBUG_PHASES) { + System.out.print(" >> (no priority given to " + getPriorityPlayer() + ")\n"); + } - // end phase - givePriorityToPlayer = true; - onPhaseEnd(); - advanceToNextPhase(); - onPhaseBegin(); + // actingPlayer is the player who may act + // the firstAction is the player who gained Priority First in this segment + // of Priority + Player nextPlayer = game.getNextPlayerAfter(getPriorityPlayer()); + + // TODO handle concession return + if (game.isGameOver() || nextPlayer == null) { return; } // conceded? + + if (DEBUG_PHASES) { + System.out.println(TextUtil.concatWithSpace(playerTurn.toString(),TextUtil.addSuffix(phase.toString(),":"), pPlayerPriority.toString(),"is active, previous was", nextPlayer.toString())); + } + if (pFirstPriority == nextPlayer) { + if (game.getStack().isEmpty()) { + if (playerTurn.hasLost()) { + setPriority(game.getNextPlayerAfter(playerTurn)); + } else { + setPriority(playerTurn); } - else if (!game.getStack().hasSimultaneousStackEntries()) { - game.getStack().resolveStack(); - } - } else { - // pass the priority to other player - pPlayerPriority = nextPlayer; - } - // If ever the karn's ultimate resolved - if (game.getAge() == GameStage.RestartedByKarn) { - setPhase(null); - game.updatePhaseForView(); - game.fireEvent(new GameEventGameRestarted(playerTurn)); - // TODO: handle karn restart return - return; + // end phase + givePriorityToPlayer = true; + onPhaseEnd(); + advanceToNextPhase(); + onPhaseBegin(); } + else if (!game.getStack().hasSimultaneousStackEntries()) { + game.getStack().resolveStack(); + } + } else { + // pass the priority to other player + pPlayerPriority = nextPlayer; + } - // update Priority for all players - for (final Player p : game.getPlayers()) { - p.setHasPriority(getPriorityPlayer() == p); - } + // If ever the karn's ultimate resolved + if (game.getAge() == GameStage.RestartedByKarn) { + setPhase(null); + game.updatePhaseForView(); + game.fireEvent(new GameEventGameRestarted(playerTurn)); + // TODO: handle karn restart return + return; + } + + // update Priority for all players + for (final Player p : game.getPlayers()) { + p.setHasPriority(getPriorityPlayer() == p); } } From 9f8bb8ae4d71528ba465adb152c68eb77f3ed3a7 Mon Sep 17 00:00:00 2001 From: marthinwurer Date: Sun, 17 Aug 2025 17:54:11 -0600 Subject: [PATCH 201/355] added integration test --- .../java/forge/ai/AIIntegrationTests.java | 82 ++++++++ .../src/test/java/forge/ai/AITest.java | 190 ++++++++++++++++++ 2 files changed, 272 insertions(+) create mode 100644 forge-gui-desktop/src/test/java/forge/ai/AIIntegrationTests.java create mode 100644 forge-gui-desktop/src/test/java/forge/ai/AITest.java diff --git a/forge-gui-desktop/src/test/java/forge/ai/AIIntegrationTests.java b/forge-gui-desktop/src/test/java/forge/ai/AIIntegrationTests.java new file mode 100644 index 00000000000..453d545a72f --- /dev/null +++ b/forge-gui-desktop/src/test/java/forge/ai/AIIntegrationTests.java @@ -0,0 +1,82 @@ +package forge.ai; + +import forge.game.Game; +import forge.game.card.Card; +import forge.game.phase.PhaseType; +import forge.game.player.Player; +import forge.game.zone.ZoneType; +import org.testng.AssertJUnit; +import org.testng.annotations.Ignore; +import org.testng.annotations.Test; + +public class AIIntegrationTests extends AITest { + @Test + public void testSwingForLethal() { + Game game = initAndCreateGame(); + Player p = game.getPlayers().get(1); + p.setTeam(0); + addCard("Nest Robber", p); + addCard("Nest Robber", p); + + Player opponent = game.getPlayers().get(0); + opponent.setTeam(1); + + addCard("Runeclaw Bear", opponent); + opponent.setLife(2, null); + + this.playUntilPhase(game, PhaseType.END_OF_TURN); + + AssertJUnit.assertTrue(game.isGameOver()); + } + + @Test + public void testSuspendAI() { + // Test that the AI can cast a suspend spell + // They should suspend it, then deal three damage to their opponent + Game game = initAndCreateGame(); + Player p = game.getPlayers().get(1); + p.setTeam(0); + addCard("Mountain", p); + addCardToZone("Rift Bolt", p, ZoneType.Hand); + + Player opponent = game.getPlayers().get(0); + opponent.setTeam(1); + + // Fill deck with lands so we can goldfish a few turns + for (int i = 0; i < 60; i++) { + addCardToZone("Island", opponent, ZoneType.Library); + // Add something they can't cast + addCardToZone("Stone Golem", p, ZoneType.Library); + } + + for (int i = 0; i < 3; i++) { + this.playUntilNextTurn(game); + } + + AssertJUnit.assertEquals(17, opponent.getLife()); + } + + @Test + public void testAttackTriggers() { + // Test that attack triggers actually trigger + Game game = initAndCreateGame(); + Player p = game.getPlayers().get(1); + p.setTeam(0); + addCard("Hellrider", p); + addCard("Raging Goblin", p); + + Player opponent = game.getPlayers().get(0); + opponent.setTeam(1); + + // Fill deck with lands so we can goldfish a few turns + for (int i = 0; i < 60; i++) { + addCardToZone("Island", opponent, ZoneType.Library); + // Add something they can't cast + addCardToZone("Stone Golem", p, ZoneType.Library); + } + + this.playUntilNextTurn(game); + + AssertJUnit.assertEquals(14, opponent.getLife()); + } +} diff --git a/forge-gui-desktop/src/test/java/forge/ai/AITest.java b/forge-gui-desktop/src/test/java/forge/ai/AITest.java new file mode 100644 index 00000000000..23588815a25 --- /dev/null +++ b/forge-gui-desktop/src/test/java/forge/ai/AITest.java @@ -0,0 +1,190 @@ +package forge.ai; + +import java.util.ArrayList; +import java.util.List; + +import com.google.common.collect.Lists; + +import forge.GuiDesktop; +import forge.StaticData; +import forge.deck.Deck; +import forge.game.Game; +import forge.game.GameRules; +import forge.game.GameStage; +import forge.game.GameType; +import forge.game.Match; +import forge.game.card.Card; +import forge.game.card.CardCollectionView; +import forge.game.card.CardFactory; +import forge.game.phase.PhaseType; +import forge.game.player.Player; +import forge.game.player.RegisteredPlayer; +import forge.game.spellability.SpellAbility; +import forge.game.zone.ZoneType; +import forge.gui.GuiBase; +import forge.item.IPaperCard; +import forge.item.PaperToken; +import forge.localinstance.properties.ForgePreferences.FPref; +import forge.model.FModel; + +public class AITest { + private static boolean initialized = false; + + public Game resetGame() { + // need to be done after FModel.initialize, or the Localizer isn't loaded yet + List players = Lists.newArrayList(); + Deck d1 = new Deck(); + players.add(new RegisteredPlayer(d1).setPlayer(new LobbyPlayerAi("p2", null))); + players.add(new RegisteredPlayer(d1).setPlayer(new LobbyPlayerAi("p1", null))); + GameRules rules = new GameRules(GameType.Constructed); + Match match = new Match(rules, players, "Test"); + Game game = new Game(players, rules, match); + Player p = game.getPlayers().get(1); + game.setAge(GameStage.Play); + game.getPhaseHandler().devModeSet(PhaseType.MAIN1, p); + game.getPhaseHandler().onStackResolved(); + // game.getAction().checkStateEffects(true); + + return game; + } + + protected Game initAndCreateGame() { + if (!initialized) { + GuiBase.setInterface(new GuiDesktop()); + FModel.initialize(null, preferences -> { + preferences.setPref(FPref.LOAD_CARD_SCRIPTS_LAZILY, false); + preferences.setPref(FPref.UI_LANGUAGE, "en-US"); + return null; + }); + initialized = true; + } + + return resetGame(); + } + + protected int countCardsWithName(Game game, String name) { + int i = 0; + for (Card c : game.getCardsIn(ZoneType.Battlefield)) { + if (c.getName().equals(name)) { + i++; + } + } + return i; + } + + protected Card findCardWithName(Game game, String name) { + for (Card c : game.getCardsIn(ZoneType.Battlefield)) { + if (c.getName().equals(name)) { + return c; + } + } + return null; + } + + + protected SpellAbility findSAWithPrefix(Card c, String prefix) { + return findSAWithPrefix(c.getSpellAbilities(), prefix); + } + + protected SpellAbility findSAWithPrefix(Iterable abilities, String prefix) { + for (SpellAbility sa : abilities) { + if (sa.getDescription().startsWith(prefix)) { + return sa; + } + } + return null; + } + + protected Card createCard(String name, Player p) { + IPaperCard paperCard = FModel.getMagicDb().getCommonCards().getCard(name); + if (paperCard == null) { + StaticData.instance().attemptToLoadCard(name); + paperCard = FModel.getMagicDb().getCommonCards().getCard(name); + } + return Card.fromPaperCard(paperCard, p); + } + + protected Card addCardToZone(String name, Player p, ZoneType zone) { + Card c = createCard(name, p); + // card need a new Timestamp otherwise Static Abilities might collide + c.setGameTimestamp(p.getGame().getNextTimestamp()); + p.getZone(zone).add(c); + return c; + } + + protected Card addCard(String name, Player p) { + return addCardToZone(name, p, ZoneType.Battlefield); + } + + protected List addCards(String name, int count, Player p) { + List cards = Lists.newArrayList(); + for (int i = 0; i < count; i++) { + cards.add(addCard(name, p)); + } + return cards; + } + + protected Card createToken(String name, Player p) { + PaperToken token = FModel.getMagicDb().getAllTokens().getToken(name); + if (token == null) { + System.out.println("Failed to find token name " + name); + return null; + } + return CardFactory.getCard(token, p, p.getGame()); + } + + protected List addTokens(String name, int amount, Player p) { + List cards = new ArrayList<>(); + + for(int i = 0; i < amount; i++) { + cards.add(addToken(name, p)); + } + + return cards; + } + + protected Card addToken(String name, Player p) { + Card c = createToken(name, p); + // card need a new Timestamp otherwise Static Abilities might collide + c.setGameTimestamp(p.getGame().getNextTimestamp()); + p.getZone(ZoneType.Battlefield).add(c); + return c; + } + + void playUntilStackClear(Game game) { + do { + game.getPhaseHandler().mainLoopStep(); + } while (!game.isGameOver() && !game.getStack().isEmpty()); + } + + void playUntilPhase(Game game, PhaseType phase) { + do { + game.getPhaseHandler().mainLoopStep(); + } while (!game.isGameOver() && !game.getPhaseHandler().is(phase)); + } + + void playUntilNextTurn(Game game) { + Player current = game.getPhaseHandler().getPlayerTurn(); + do { + game.getPhaseHandler().mainLoopStep(); + } while (!game.isGameOver() && game.getPhaseHandler().getPlayerTurn().equals(current)); + } + + protected String gameStateToString(Game game) { + StringBuilder sb = new StringBuilder(); + for (ZoneType zone : ZoneType.values()) { + CardCollectionView cards = game.getCardsIn(zone); + if (!cards.isEmpty()) { + sb.append("Zone ").append(zone.name()).append(":\n"); + for (Card c : game.getCardsIn(zone)) { + sb.append(" ").append(c); + if (c.isTapped()) { + sb.append(" (T)"); + } + sb.append("\n"); + } + } + } + return sb.toString(); + } +} From 1f235c5e71e24df8b5d2d0e25adbeb712b9ff959 Mon Sep 17 00:00:00 2001 From: marthinwurer Date: Sun, 17 Aug 2025 17:59:07 -0600 Subject: [PATCH 202/355] remove todos --- forge-game/src/main/java/forge/game/phase/PhaseHandler.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java index de244cd5794..eef0f2c1f50 100644 --- a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java +++ b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java @@ -1050,7 +1050,6 @@ public class PhaseHandler implements java.io.Serializable { do { if (checkStateBasedEffects()) { // state-based effects check could lead to game over - // TODO: handle game over return return; } game.stashGameState(); @@ -1123,7 +1122,6 @@ public class PhaseHandler implements java.io.Serializable { // of Priority Player nextPlayer = game.getNextPlayerAfter(getPriorityPlayer()); - // TODO handle concession return if (game.isGameOver() || nextPlayer == null) { return; } // conceded? if (DEBUG_PHASES) { @@ -1156,7 +1154,6 @@ public class PhaseHandler implements java.io.Serializable { setPhase(null); game.updatePhaseForView(); game.fireEvent(new GameEventGameRestarted(playerTurn)); - // TODO: handle karn restart return return; } From cedfa68c166d52675692fcc659bd47be036e166c Mon Sep 17 00:00:00 2001 From: marthinwurer Date: Mon, 18 Aug 2025 23:36:41 -0600 Subject: [PATCH 203/355] removed unused imports --- .../src/test/java/forge/ai/AIIntegrationTests.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/forge-gui-desktop/src/test/java/forge/ai/AIIntegrationTests.java b/forge-gui-desktop/src/test/java/forge/ai/AIIntegrationTests.java index 453d545a72f..9f24117977f 100644 --- a/forge-gui-desktop/src/test/java/forge/ai/AIIntegrationTests.java +++ b/forge-gui-desktop/src/test/java/forge/ai/AIIntegrationTests.java @@ -1,12 +1,10 @@ package forge.ai; import forge.game.Game; -import forge.game.card.Card; import forge.game.phase.PhaseType; import forge.game.player.Player; import forge.game.zone.ZoneType; import org.testng.AssertJUnit; -import org.testng.annotations.Ignore; import org.testng.annotations.Test; public class AIIntegrationTests extends AITest { From ae7159297b513caed689e49e35a97054bc5873de Mon Sep 17 00:00:00 2001 From: marthinwurer Date: Sat, 30 Aug 2025 20:03:54 -0600 Subject: [PATCH 204/355] made simulation test extend ai test --- .../forge/ai/simulation/SimulationTest.java | 130 +----------------- 1 file changed, 2 insertions(+), 128 deletions(-) diff --git a/forge-gui-desktop/src/test/java/forge/ai/simulation/SimulationTest.java b/forge-gui-desktop/src/test/java/forge/ai/simulation/SimulationTest.java index d3481d2b46b..89a5551180e 100644 --- a/forge-gui-desktop/src/test/java/forge/ai/simulation/SimulationTest.java +++ b/forge-gui-desktop/src/test/java/forge/ai/simulation/SimulationTest.java @@ -1,15 +1,13 @@ package forge.ai.simulation; -import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import com.google.common.collect.Lists; -import forge.GuiDesktop; -import forge.StaticData; import forge.ai.AIOption; +import forge.ai.AITest; import forge.ai.LobbyPlayerAi; import forge.ai.simulation.GameStateEvaluator.Score; import forge.deck.Deck; @@ -18,21 +16,12 @@ import forge.game.GameRules; import forge.game.GameStage; import forge.game.GameType; import forge.game.Match; -import forge.game.card.Card; -import forge.game.card.CardCollectionView; -import forge.game.card.CardFactory; import forge.game.player.Player; import forge.game.player.RegisteredPlayer; -import forge.game.spellability.SpellAbility; -import forge.game.zone.ZoneType; -import forge.gui.GuiBase; -import forge.item.IPaperCard; -import forge.item.PaperToken; import forge.localinstance.properties.ForgePreferences.FPref; import forge.model.FModel; -public class SimulationTest { - private static boolean initialized = false; +public class SimulationTest extends AITest { public Game resetGame() { // need to be done after FModel.initialize, or the Localizer isn't loaded yet @@ -53,19 +42,6 @@ public class SimulationTest { return game; } - protected Game initAndCreateGame() { - if (!initialized) { - GuiBase.setInterface(new GuiDesktop()); - FModel.initialize(null, preferences -> { - preferences.setPref(FPref.LOAD_CARD_SCRIPTS_LAZILY, false); - preferences.setPref(FPref.UI_LANGUAGE, "en-US"); - return null; - }); - initialized = true; - } - - return resetGame(); - } protected GameSimulator createSimulator(Game game, Player p) { return new GameSimulator(new SimulationController(new Score(0)) { @@ -75,106 +51,4 @@ public class SimulationTest { } }, game, p, null); } - - protected int countCardsWithName(Game game, String name) { - int i = 0; - for (Card c : game.getCardsIn(ZoneType.Battlefield)) { - if (c.getName().equals(name)) { - i++; - } - } - return i; - } - - protected Card findCardWithName(Game game, String name) { - for (Card c : game.getCardsIn(ZoneType.Battlefield)) { - if (c.getName().equals(name)) { - return c; - } - } - return null; - } - - protected String gameStateToString(Game game) { - StringBuilder sb = new StringBuilder(); - for (ZoneType zone : ZoneType.values()) { - CardCollectionView cards = game.getCardsIn(zone); - if (!cards.isEmpty()) { - sb.append("Zone ").append(zone.name()).append(":\n"); - for (Card c : game.getCardsIn(zone)) { - sb.append(" ").append(c).append("\n"); - } - } - } - return sb.toString(); - } - - protected SpellAbility findSAWithPrefix(Card c, String prefix) { - return findSAWithPrefix(c.getSpellAbilities(), prefix); - } - - protected SpellAbility findSAWithPrefix(Iterable abilities, String prefix) { - for (SpellAbility sa : abilities) { - if (sa.getDescription().startsWith(prefix)) { - return sa; - } - } - return null; - } - - protected Card createCard(String name, Player p) { - IPaperCard paperCard = FModel.getMagicDb().getCommonCards().getCard(name); - if (paperCard == null) { - StaticData.instance().attemptToLoadCard(name); - paperCard = FModel.getMagicDb().getCommonCards().getCard(name); - } - return Card.fromPaperCard(paperCard, p); - } - - protected Card addCardToZone(String name, Player p, ZoneType zone) { - Card c = createCard(name, p); - // card need a new Timestamp otherwise Static Abilities might collide - c.setGameTimestamp(p.getGame().getNextTimestamp()); - p.getZone(zone).add(c); - return c; - } - - protected Card addCard(String name, Player p) { - return addCardToZone(name, p, ZoneType.Battlefield); - } - - protected List addCards(String name, int count, Player p) { - List cards = Lists.newArrayList(); - for (int i = 0; i < count; i++) { - cards.add(addCard(name, p)); - } - return cards; - } - - protected Card createToken(String name, Player p) { - PaperToken token = FModel.getMagicDb().getAllTokens().getToken(name); - if (token == null) { - System.out.println("Failed to find token name " + name); - return null; - } - return CardFactory.getCard(token, p, p.getGame()); - } - - protected List addTokens(String name, int amount, Player p) { - List cards = new ArrayList<>(); - - for(int i = 0; i < amount; i++) { - cards.add(addToken(name, p)); - } - - return cards; - } - - protected Card addToken(String name, Player p) { - Card c = createToken(name, p); - // card need a new Timestamp otherwise Static Abilities might collide - c.setGameTimestamp(p.getGame().getNextTimestamp()); - p.getZone(ZoneType.Battlefield).add(c); - return c; - } } From 5f32c23dc56f1ed715ecba37d437dac333a70105 Mon Sep 17 00:00:00 2001 From: marthinwurer Date: Sun, 7 Sep 2025 00:44:51 -0600 Subject: [PATCH 205/355] moved stopwatch to a class field --- forge-game/src/main/java/forge/game/phase/PhaseHandler.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java index eef0f2c1f50..035ee178385 100644 --- a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java +++ b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java @@ -62,6 +62,9 @@ import java.util.*; public class PhaseHandler implements java.io.Serializable { private static final long serialVersionUID = 5207222278370963197L; + // used for debugging phase timing + private final StopWatch sw = new StopWatch(); + // Start turn at 0, since we start even before first untap private PhaseType phase = null; private int turn = 0; @@ -92,6 +95,7 @@ public class PhaseHandler implements java.io.Serializable { private final transient Game game; + public PhaseHandler(final Game game0) { game = game0; } @@ -1037,7 +1041,6 @@ public class PhaseHandler implements java.io.Serializable { } public void mainLoopStep() { - StopWatch sw = new StopWatch(); if (givePriorityToPlayer) { if (DEBUG_PHASES) { sw.start(); From f4bff306800cfa92a0d035762a962de36693a30f Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Tue, 16 Sep 2025 11:50:15 +0800 Subject: [PATCH 206/355] update AltZoneLayout VCardDisplayArea for Landscape - Off (Default Layout) - Vertical (Alt Layout with old Vertical Scroll Card Display Area) - Horizontal (Alt Layout with Horizontal Scroll Card Display Area) - fix mouse scroll to scroll horizontall while ShiftKey is pressed --- forge-gui-mobile/src/forge/Forge.java | 20 ++++++-- .../forge/adventure/scene/SettingsScene.java | 2 +- .../forge/screens/match/MatchController.java | 3 ++ .../screens/match/views/VCardDisplayArea.java | 47 ++++++++++++++----- .../src/forge/screens/match/views/VField.java | 45 ++++++++++-------- .../forge/screens/match/views/VManaPool.java | 10 ++-- .../screens/match/views/VPlayerPanel.java | 44 +++++++++++++---- .../screens/match/views/VZoneDisplay.java | 2 +- .../forge/screens/settings/SettingsPage.java | 11 +++-- 9 files changed, 126 insertions(+), 58 deletions(-) diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index ee6fc7f948d..1815faeba14 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -101,6 +101,7 @@ public class Forge implements ApplicationListener { public static boolean allowCardBG = false; public static boolean altPlayerLayout = false; public static boolean altZoneTabs = false; + public static String altZoneTabMode = "Off"; public static boolean animatedCardTapUntap = false; public static String enableUIMask = "Crop"; public static String selector = "Default"; @@ -222,7 +223,7 @@ public class Forge implements ApplicationListener { reversedPrompt = getForgePreferences().getPrefBoolean(FPref.UI_REVERSE_PROMPT_BUTTON); autoAIDeckSelection = getForgePreferences().getPrefBoolean(FPref.UI_AUTO_AIDECK_SELECTION); altPlayerLayout = getForgePreferences().getPrefBoolean(FPref.UI_ALT_PLAYERINFOLAYOUT); - altZoneTabs = getForgePreferences().getPrefBoolean(FPref.UI_ALT_PLAYERZONETABS); + setAltZoneTabMode(getForgePreferences().getPref(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 @@ -260,6 +261,14 @@ public class Forge implements ApplicationListener { FThreads.invokeInBackgroundThread(() -> AssetsDownloader.checkForUpdates(exited, runnable)); } } + public static void setAltZoneTabMode(String mode) { + Forge.altZoneTabMode = mode; + switch (Forge.altZoneTabMode) { + case "Vertical", "Horizontal" -> Forge.altZoneTabs = true; + case "Off" -> Forge.altZoneTabs = false; + default -> Forge.altZoneTabs = false; + } + } public static boolean hasGamepad() { //Classic Mode Various Screen GUI are not yet supported, needs control mapping for each screens if (isMobileAdventureMode) { @@ -337,8 +346,9 @@ public class Forge implements ApplicationListener { GuiBase.setIsAdventureMode(true); advStartup = false; isMobileAdventureMode = true; - if (GuiBase.isAndroid()) //force it for adventure mode - altZoneTabs = true; + //force it for adventure mode if not set to Off + if (!"Off".equalsIgnoreCase(FModel.getPreferences().getPref(FPref.UI_ALT_PLAYERZONETABS))) + setAltZoneTabMode("Vertical"); //pixl cursor for adventure setCursor(null, "0"); if (!GuiBase.isAndroid() || !getDeviceAdapter().getGamepads().isEmpty()) @@ -755,7 +765,7 @@ public class Forge implements ApplicationListener { isMobileAdventureMode = false; GuiBase.setIsAdventureMode(false); setCursor(FSkin.getCursor().get(0), "0"); - altZoneTabs = FModel.getPreferences().getPrefBoolean(FPref.UI_ALT_PLAYERZONETABS); + setAltZoneTabMode(FModel.getPreferences().getPref(FPref.UI_ALT_PLAYERZONETABS)); Gdx.input.setInputProcessor(getInputProcessor()); clearTransitionScreen(); openHomeDefault(); @@ -1468,7 +1478,7 @@ public class Forge implements ApplicationListener { boolean handled; if (KeyInputAdapter.isShiftKeyDown()) { - handled = pan(mouseMovedX, mouseMovedY, -Utils.AVG_FINGER_WIDTH * amountX, 0, false); + handled = pan(mouseMovedX, mouseMovedY, -Utils.AVG_FINGER_WIDTH * amountY, 0, false); } else { handled = pan(mouseMovedX, mouseMovedY, 0, -Utils.AVG_FINGER_HEIGHT * amountY, true); } diff --git a/forge-gui-mobile/src/forge/adventure/scene/SettingsScene.java b/forge-gui-mobile/src/forge/adventure/scene/SettingsScene.java index dac7c6279ad..d91ece8176f 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/SettingsScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/SettingsScene.java @@ -259,7 +259,7 @@ public class SettingsScene extends UIScene { if (!GuiBase.isAndroid()) { addCheckBox(Forge.getLocalizer().getMessage("lblBattlefieldTextureFiltering"), ForgePreferences.FPref.UI_LIBGDX_TEXTURE_FILTERING); - addCheckBox(Forge.getLocalizer().getMessage("lblAltZoneTabs"), ForgePreferences.FPref.UI_ALT_PLAYERZONETABS); + //addCheckBox(Forge.getLocalizer().getMessage("lblAltZoneTabs"), ForgePreferences.FPref.UI_ALT_PLAYERZONETABS); } else { addCheckBox(Forge.getLocalizer().getMessage("lblLandscapeMode") + " (" + Forge.getLocalizer().getMessage("lblRestartRequired") + ")", diff --git a/forge-gui-mobile/src/forge/screens/match/MatchController.java b/forge-gui-mobile/src/forge/screens/match/MatchController.java index 45e47ff423b..510b9e5ec2d 100644 --- a/forge-gui-mobile/src/forge/screens/match/MatchController.java +++ b/forge-gui-mobile/src/forge/screens/match/MatchController.java @@ -174,10 +174,13 @@ public class MatchController extends AbstractGuiGame { final VPlayerPanel playerPanel = new VPlayerPanel(p, isLocal || noHumans, players.size()); if (isLocal && !init) { playerPanels.add(0, playerPanel); //ensure local player always first among player panels + playerPanel.setBottomPlayer(true); init = true; } else { playerPanels.add(playerPanel); + if (playerPanel.equals(playerPanels.get(0))) + playerPanel.setBottomPlayer(true); } } view = new MatchScreen(playerPanels); diff --git a/forge-gui-mobile/src/forge/screens/match/views/VCardDisplayArea.java b/forge-gui-mobile/src/forge/screens/match/views/VCardDisplayArea.java index 9f58e34ed43..31cbec17e79 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VCardDisplayArea.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VCardDisplayArea.java @@ -53,6 +53,12 @@ public abstract class VCardDisplayArea extends VDisplayArea implements ActivateH rotateCards180 = b0; } + private float getCardStackOffset() { + if (Forge.altZoneTabs && "Horizontal".equalsIgnoreCase(Forge.altZoneTabMode)) + return 0.125f; + return CARD_STACK_OFFSET; + } + protected void refreshCardPanels(Iterable model) { clear(); @@ -78,7 +84,9 @@ public abstract class VCardDisplayArea extends VDisplayArea implements ActivateH @Override public void setVisible(boolean b0) { - if (isVisible() == b0) { return; } + if (isVisible() == b0) { + return; + } super.setVisible(b0); if (b0) { //when zone becomes visible, ensure display area of panels is updated and panels layed out for (CardAreaPanel pnl : cardPanels.get()) { @@ -146,7 +154,7 @@ public abstract class VCardDisplayArea extends VDisplayArea implements ActivateH CardAreaPanel attachedPanel = attachedPanels.get(i); if (attachedPanel != null) { int count = addCards(attachedPanel, x, y, cardWidth, cardHeight); - x += count * cardWidth * CARD_STACK_OFFSET; + x += count * cardWidth * getCardStackOffset(); totalCount += count; } } @@ -156,7 +164,7 @@ public abstract class VCardDisplayArea extends VDisplayArea implements ActivateH cardPanel.setBounds(x, y, cardWidth, cardHeight); if (cardPanel.getNextPanelInStack() != null) { //add next panel in stack if needed - x += cardWidth * CARD_STACK_OFFSET; + x += cardWidth * getCardStackOffset(); totalCount += addCards(cardPanel.getNextPanelInStack(), x, y, cardWidth, cardHeight); } return totalCount + 1; @@ -165,6 +173,7 @@ public abstract class VCardDisplayArea extends VDisplayArea implements ActivateH protected float getCardWidth(float cardHeight) { return (cardHeight - 2 * FCardPanel.PADDING) / FCardPanel.ASPECT_RATIO + 2 * FCardPanel.PADDING; //ensure aspect ratio maintained after padding applied } + protected float getCardHeight(float cardWidth) { return (cardWidth - 2 * FCardPanel.PADDING) * FCardPanel.ASPECT_RATIO + 2 * FCardPanel.PADDING; //ensure aspect ratio maintained after padding applied } @@ -181,7 +190,7 @@ public abstract class VCardDisplayArea extends VDisplayArea implements ActivateH for (CardAreaPanel cardPanel : new ArrayList<>(cardPanels.get())) { if (cardPanel != null) { int count = addCards(cardPanel, x, y, cardWidth, cardHeight); - x += cardWidth + (count - 1) * cardWidth * CARD_STACK_OFFSET; + x += cardWidth + (count - 1) * cardWidth * getCardStackOffset(); } } @@ -197,7 +206,7 @@ public abstract class VCardDisplayArea extends VDisplayArea implements ActivateH @Override public String getActivateAction(int index) { - if(!GuiBase.isNetworkplay()) { + if (!GuiBase.isNetworkplay()) { //causes lag on netplay client side, also index shouldn't be out of bounds if (index >= 0 && index < orderedCards.get().size()) return MatchController.instance.getGameController().getActivateDescription(orderedCards.get().get(index)); @@ -266,9 +275,11 @@ public abstract class VCardDisplayArea extends VDisplayArea implements ActivateH public CardAreaPanel getAttachedToPanel() { return attachedToPanel; } + public void setAttachedToPanel(final CardAreaPanel attachedToPanel0) { attachedToPanel = attachedToPanel0; } + public List getAttachedPanels() { if (attachedPanels == null) { attachedPanels = new ArrayList<>(); @@ -278,15 +289,19 @@ public abstract class VCardDisplayArea extends VDisplayArea implements ActivateH } return attachedPanels; } + public CardAreaPanel getNextPanelInStack() { return nextPanelInStack; } + public void setNextPanelInStack(CardAreaPanel nextPanelInStack0) { nextPanelInStack = nextPanelInStack0; } + public CardAreaPanel getPrevPanelInStack() { return prevPanelInStack; } + public void setPrevPanelInStack(CardAreaPanel prevPanelInStack0) { prevPanelInStack = prevPanelInStack0; } @@ -324,8 +339,7 @@ public abstract class VCardDisplayArea extends VDisplayArea implements ActivateH attachedPanels.remove(CardAreaPanel.get(getAttachedto)); setAttachedToPanel(null); } - } - else { + } else { setAttachedToPanel(null); } } @@ -423,7 +437,9 @@ public abstract class VCardDisplayArea extends VDisplayArea implements ActivateH } public void showZoom() { - if (displayArea == null) { return; } + if (displayArea == null) { + return; + } final List cards = displayArea.orderedCards.get(); CardZoom.show(cards, cards.indexOf(getCard()), displayArea); @@ -444,10 +460,14 @@ public abstract class VCardDisplayArea extends VDisplayArea implements ActivateH } private List getOtherCardsToSelect(boolean selectOtherCardsInStack) { - if (!selectOtherCardsInStack) { return null; } + if (!selectOtherCardsInStack) { + return null; + } //on double-tap select all other cards in stack if any - if (prevPanelInStack == null && nextPanelInStack == null) { return null; } + if (prevPanelInStack == null && nextPanelInStack == null) { + return null; + } List cards = new ArrayList<>(); @@ -490,7 +510,9 @@ public abstract class VCardDisplayArea extends VDisplayArea implements ActivateH public Vector2 getTargetingArrowOrigin() { //don't show targeting arrow unless in display area that's visible - if (displayArea == null || !displayArea.isVisible()) { return null; } + if (displayArea == null || !displayArea.isVisible()) { + return null; + } return getTargetingArrowOrigin(this, isTapped()); } @@ -517,8 +539,7 @@ public abstract class VCardDisplayArea extends VDisplayArea implements ActivateH g.startRotateTransform(x + w / 2, y + h / 2, 180); super.draw(g); g.endTransform(); - } - else { + } else { super.draw(g); } } diff --git a/forge-gui-mobile/src/forge/screens/match/views/VField.java b/forge-gui-mobile/src/forge/screens/match/views/VField.java index 12ee0821968..9ab116b7963 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VField.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VField.java @@ -2,6 +2,7 @@ package forge.screens.match.views; import java.util.*; +import forge.Forge; import forge.game.card.CardView; import forge.game.card.CardView.CardStateView; import forge.game.player.PlayerView; @@ -33,6 +34,7 @@ public class VField extends FContainer { public boolean isFlipped() { return flipped; } + public void setFlipped(boolean flipped0) { flipped = flipped0; } @@ -61,7 +63,9 @@ public class VField extends FContainer { clear(); Iterable model = player.getBattlefield(); - if (model == null) { return; } + if (model == null) { + return; + } for (CardView card : model) { CardAreaPanel cardPanel = CardAreaPanel.get(card); @@ -84,18 +88,15 @@ public class VField extends FContainer { if (!tryStackCard(card, creatures)) { creatures.add(card); } - } - else if (details.isLand()) { + } else if (details.isLand()) { if (!tryStackCard(card, lands)) { lands.add(card); } - } - else if (details.isArtifact() && (details.isContraption() || details.isAttraction())) { + } else if (details.isArtifact() && (details.isContraption() || details.isAttraction())) { if (contraptions == null) contraptions = new ArrayList<>(); contraptions.add(card); //Arrange these later. - } - else { + } else { if (!tryStackCard(card, otherPermanents)) { otherPermanents.add(card); } @@ -103,7 +104,7 @@ public class VField extends FContainer { } } - if(contraptions != null) { + if (contraptions != null) { contraptions = arrangeContraptions(contraptions); otherPermanents.addAll(contraptions); } @@ -111,8 +112,7 @@ public class VField extends FContainer { if (creatures.isEmpty()) { row1.refreshCardPanels(otherPermanents); row2.refreshCardPanels(lands); - } - else { + } else { row1.refreshCardPanels(creatures); lands.addAll(otherPermanents); row2.refreshCardPanels(lands); @@ -173,13 +173,14 @@ public class VField extends FContainer { TreeSet row = new TreeSet<>((c1, c2) -> { //Order is sprocket-less cards, then sprocket 1, sprocket 2, sprocket 3, and finally attractions. int sprocket1 = c1.getSprocket(), sprocket2 = c2.getSprocket(); - if(sprocket1 == 0 && c1.getCurrentState().isAttraction()) + if (sprocket1 == 0 && c1.getCurrentState().isAttraction()) sprocket1 = 4; - if(sprocket2 == 0 && c2.getCurrentState().isAttraction()) + if (sprocket2 == 0 && c2.getCurrentState().isAttraction()) sprocket2 = 4; return sprocket1 - sprocket2; }); - outer: for (CardView card : contraptions) { + outer: + for (CardView card : contraptions) { if (card.hasCardAttachments()) { row.add(card); //Don't stack contraptions or attractions with attachments. continue; @@ -187,7 +188,7 @@ public class VField extends FContainer { if (card.getCurrentState().isAttraction()) { //Stack attractions with other attractions. for (CardView c : row) { - if(c.getCurrentState().isAttraction() && !c.hasCardAttachments()) { + if (c.getCurrentState().isAttraction() && !c.hasCardAttachments()) { stackOnto(card, c); continue outer; } @@ -240,13 +241,17 @@ public class VField extends FContainer { if (flipped) { y1 = cardSize; y2 = 0; - } - else { + } else { y1 = 0; y2 = cardSize; } - row1.setBounds(0, y1, width-fieldModifier, cardSize); - row2.setBounds(0, y2, (width - commandZoneWidth)-fieldModifier, cardSize); + if (Forge.altZoneTabs && "Horizontal".equalsIgnoreCase(Forge.altZoneTabMode)) { + row1.setBounds(0, y1, width, cardSize); + row2.setBounds(0, y2, width, cardSize); + } else { + row1.setBounds(0, y1, width - fieldModifier, cardSize); + row2.setBounds(0, y2, (width - commandZoneWidth) - fieldModifier, cardSize); + } } public class FieldRow extends VCardDisplayArea { @@ -270,13 +275,14 @@ public class VField extends FContainer { public void setNextSelected(int val) { this.selected++; if (this.selected >= this.getChildCount()) - this.selected = this.getChildCount()-1; + this.selected = this.getChildCount() - 1; if (this.selectedChild != null) this.selectedChild.setHovered(false); this.selectedChild = getChildAt(this.selected); this.selectedChild.setHovered(true); MatchScreen.setPotentialListener(Arrays.asList(this.selectedChild)); } + public void selectCurrent() { if (this.selectedChild != null) { this.selectedChild.setHovered(true); @@ -285,6 +291,7 @@ public class VField extends FContainer { this.setNextSelected(1); } } + public void unselectCurrent() { if (this.selectedChild != null) { this.selectedChild.setHovered(false); diff --git a/forge-gui-mobile/src/forge/screens/match/views/VManaPool.java b/forge-gui-mobile/src/forge/screens/match/views/VManaPool.java index 8531c6291f5..c832a7de5e0 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VManaPool.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VManaPool.java @@ -69,7 +69,7 @@ public class VManaPool extends VDisplayArea { float x = 0; float y = 0; - if (Forge.isLandscapeMode()) { + if (Forge.isLandscapeMode() && !Forge.altZoneTabs) { float labelWidth = visibleWidth / 2; float labelHeight = visibleHeight / 3; @@ -146,17 +146,19 @@ public class VManaPool extends VDisplayArea { if (h > maxImageHeight) { h /= 2; } - float w = image.getWidth() * h / image.getHeight(); + float w2 = Forge.altZoneTabs && "Horizontal".equalsIgnoreCase(Forge.altZoneTabMode) + ? image.getWidth() * h * 0.7f / image.getHeight() : image.getWidth() * h / image.getHeight(); + float w = w2; while (w > getWidth()) { h /= 2; - w = image.getWidth() * h / image.getHeight(); + w = w2; } float x = (getWidth() - w) / 2; float y = gapY + (maxImageHeight - h) / 2; if (isHovered()) g.fillRect(FSkinColor.getStandardColor(50, 200, 150).alphaColor(0.3f), 0, 0, getWidth(), getHeight()); - g.drawImage(image, x, y, w, h); + g.drawImage(image, x, y, w, Forge.altZoneTabs && "Horizontal".equalsIgnoreCase(Forge.altZoneTabMode) ? w : h); x = 0; y += h + gapY; diff --git a/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java b/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java index 5e6cba4eda2..12cae006f9b 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java @@ -79,6 +79,7 @@ public class VPlayerPanel extends FContainer { private boolean forMultiPlayer = false; public int adjustHeight = 1; private int selected = 0; + private boolean isBottomPlayer = false; public VPlayerPanel(PlayerView player0, boolean showHand, int playerCount) { player = player0; phaseIndicator = add(new VPhaseIndicator()); @@ -116,6 +117,10 @@ public class VPlayerPanel extends FContainer { return player; } + public void setBottomPlayer(boolean val) { + isBottomPlayer = val; + } + public void addZoneDisplay(ZoneType zoneType) { VZoneDisplay zoneDisplay = add(new VZoneDisplay(player, zoneType)); InfoTabZone zoneTab = add(new InfoTabZone(zoneDisplay, zoneType)); @@ -429,32 +434,51 @@ public class VPlayerPanel extends FContainer { } //account for command zone if needed + float commandZoneWidth = 0f; int commandZoneCount = commandZone.getCount(); if (commandZoneCount > 0) { float commandZoneHeight = height / 2; - float commandZoneWidth = Math.min(commandZoneCount, 2) * commandZone.getCardWidth(commandZoneHeight); - commandZone.setBounds(x + fieldWidth - commandZoneWidth, height - commandZoneHeight, commandZoneWidth, commandZoneHeight); + float minCommandCards = Forge.altZoneTabs && "Horizontal".equalsIgnoreCase(Forge.altZoneTabMode) ? 5 : 2; + commandZoneWidth = Math.min(commandZoneCount, minCommandCards) * commandZone.getCardWidth(commandZoneHeight); + float x2 = x + fieldWidth - commandZoneWidth; + float y2 = height - commandZoneHeight; + if (Forge.altZoneTabs && "Horizontal".equalsIgnoreCase(Forge.altZoneTabMode)) { + x2 = width - avatarWidth - commandZoneWidth; + y2 = 0; + } + commandZone.setBounds(x2, y2, commandZoneWidth, commandZoneHeight); if (isFlipped()) { //flip across x-axis if needed commandZone.setTop(height - commandZone.getBottom()); } field.setCommandZoneWidth(commandZoneWidth + 1); //ensure second row of field accounts for width of command zone and its border - } - else { + } else { field.setCommandZoneWidth(0); } - - field.setBounds(x, 0, fieldWidth, height); + if (Forge.altZoneTabs && "Horizontal".equalsIgnoreCase(Forge.altZoneTabMode)) { + field.setBounds(x, 0, width - (avatarWidth / 16f), height); + field.getRow1().setWidth(width - (avatarWidth / 16f) - (commandZoneCount > 0 ? commandZoneWidth + 1 : 0)); + field.getRow2().setWidth(width - (avatarWidth / 16f) - (selectedTab == null ? 0 : width / 2.25f)); + } else + field.setBounds(x, 0, fieldWidth, height); x = width - displayAreaWidth-avatarWidth; for (InfoTab tab : tabs) { - tab.setDisplayBounds(x, 0, displayAreaWidth, height); + if (Forge.altZoneTabs && "Horizontal".equalsIgnoreCase(Forge.altZoneTabMode)) { + float w = (width / 2.25f); + float h = height / 2f; + tab.setDisplayBounds(width - w - avatarWidth, isBottomPlayer ? h : 0, w, h); + } else { + tab.setDisplayBounds(x, 0, displayAreaWidth, height); + } } - if (!Forge.altZoneTabs) + if (!Forge.altZoneTabs) { field.setFieldModifier(0); - else - field.setFieldModifier(avatarWidth/16); + } else { + if (!"Horizontal".equalsIgnoreCase(Forge.altZoneTabMode)) + field.setFieldModifier(avatarWidth / 16); + } } @Override diff --git a/forge-gui-mobile/src/forge/screens/match/views/VZoneDisplay.java b/forge-gui-mobile/src/forge/screens/match/views/VZoneDisplay.java index 02f5dde97c3..f919270df28 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VZoneDisplay.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VZoneDisplay.java @@ -113,7 +113,7 @@ public class VZoneDisplay extends VCardDisplayArea { } protected boolean layoutVerticallyForLandscapeMode() { - return true; + return !Forge.altZoneTabs || !"Horizontal".equalsIgnoreCase(Forge.altZoneTabMode); } @Override diff --git a/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java b/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java index 96d968f1c31..defc485631f 100644 --- a/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java +++ b/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java @@ -274,14 +274,15 @@ public class SettingsPage extends TabPage { MatchController.instance.resetPlayerPanels(); } }, 1); - lstSettings.addItem(new BooleanSetting(FPref.UI_ALT_PLAYERZONETABS, + lstSettings.addItem(new CustomSelectSetting(FPref.UI_ALT_PLAYERZONETABS, Forge.getLocalizer().getMessage("lblAltZoneTabs"), - Forge.getLocalizer().getMessage("nlAltZoneTabs")) { + Forge.getLocalizer().getMessage("nlAltZoneTabs"), + Lists.newArrayList("Off", "Vertical", "Horizontal")) { @Override - public void select() { - super.select(); + public void valueChanged(String newValue) { + super.valueChanged(newValue); //update - Forge.altZoneTabs = FModel.getPreferences().getPrefBoolean(FPref.UI_ALT_PLAYERZONETABS); + Forge.setAltZoneTabMode(FModel.getPreferences().getPref(FPref.UI_ALT_PLAYERZONETABS)); if (MatchController.instance != null) MatchController.instance.resetPlayerPanels(); } From 40f6a5b47209035367f6576f35cdbc2069bb8d05 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Tue, 16 Sep 2025 12:03:18 +0800 Subject: [PATCH 207/355] update --- forge-gui-mobile/src/forge/Forge.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index 1815faeba14..2495d2d2276 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -346,9 +346,11 @@ public class Forge implements ApplicationListener { GuiBase.setIsAdventureMode(true); advStartup = false; isMobileAdventureMode = true; - //force it for adventure mode if not set to Off - if (!"Off".equalsIgnoreCase(FModel.getPreferences().getPref(FPref.UI_ALT_PLAYERZONETABS))) + //force it for adventure mode if the prefs is not updated from boolean value to string value + if ("true".equalsIgnoreCase(FModel.getPreferences().getPref(FPref.UI_ALT_PLAYERZONETABS)) || + "false".equalsIgnoreCase(FModel.getPreferences().getPref(FPref.UI_ALT_PLAYERZONETABS))) { setAltZoneTabMode("Vertical"); + } //pixl cursor for adventure setCursor(null, "0"); if (!GuiBase.isAndroid() || !getDeviceAdapter().getGamepads().isEmpty()) From cebddb7f4b8495d69d3ffc59a18e039041d37b2b Mon Sep 17 00:00:00 2001 From: kevlahnota Date: Tue, 16 Sep 2025 15:38:33 +0800 Subject: [PATCH 208/355] Update damage_control_crew.txt --- forge-gui/res/cardsfolder/d/damage_control_crew.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/d/damage_control_crew.txt b/forge-gui/res/cardsfolder/d/damage_control_crew.txt index e9e2432b337..68e58b2d7bd 100644 --- a/forge-gui/res/cardsfolder/d/damage_control_crew.txt +++ b/forge-gui/res/cardsfolder/d/damage_control_crew.txt @@ -4,7 +4,7 @@ Types:Creature Human Citizen PT:3/3 T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigCharm | TriggerDescription$ When this creature enters, ABILITY SVar:TrigCharm:DB$ Charm | Choices$ DBRepair,DBImpound | CharmNum$ 1 -SVar:DBRepair:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Card.cmcGE4 | SpellDescription$ Repair — Return target card with mana value 4 or greater from your graveyard to your hand. +SVar:DBRepair:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Card.YouCtrl+cmcGE4 | SpellDescription$ Repair — Return target card with mana value 4 or greater from your graveyard to your hand. SVar:DBImpound:DB$ ChangeZone | ValidTgts$ Artifact,Enchantment | TgtPrompt$ Select target artifact or enchantment | Origin$ Battlefield | Destination$ Exile | SpellDescription$ Impound — Exile target artifact or enchantment. DeckHas:Ability$Graveyard Oracle:When this creature enters, choose one —\n• Repair — Return target card with mana value 4 or greater from your graveyard to your hand.\n• Impound — Exile target artifact or enchantment. From 6cf2f20cdcdeeb9a9a07df5c7cc89e852e252f86 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Tue, 16 Sep 2025 16:32:16 +0200 Subject: [PATCH 209/355] ColorSet: store EnumSet and toString as Final (#8720) --- .../src/main/java/forge/card/ColorSet.java | 176 +++++++++--------- .../src/main/java/forge/card/MagicColor.java | 8 +- .../main/java/forge/deck/DeckRecognizer.java | 2 +- .../src/main/java/forge/item/PaperCard.java | 2 +- .../src/main/java/forge/game/ForgeScript.java | 2 +- .../src/main/java/forge/game/card/Card.java | 2 +- .../java/forge/trackable/TrackableTypes.java | 2 +- .../itemmanager/views/ColorSetRenderer.java | 8 +- .../java/forge/toolbox/CardFaceSymbols.java | 7 +- .../src/forge/card/CardFaceSymbols.java | 4 +- .../src/forge/card/ColorSetImage.java | 2 +- .../forge/itemmanager/views/ImageView.java | 12 +- .../planarconquest/ConquestUtil.java | 6 +- .../java/forge/gui/card/CardDetailUtil.java | 3 +- .../java/forge/itemmanager/ColumnDef.java | 2 +- 15 files changed, 111 insertions(+), 127 deletions(-) diff --git a/forge-core/src/main/java/forge/card/ColorSet.java b/forge-core/src/main/java/forge/card/ColorSet.java index abf25c085da..74c67321d24 100644 --- a/forge-core/src/main/java/forge/card/ColorSet.java +++ b/forge-core/src/main/java/forge/card/ColorSet.java @@ -20,7 +20,6 @@ package forge.card; import com.google.common.collect.UnmodifiableIterator; import forge.card.MagicColor.Color; import forge.card.mana.ManaCost; -import forge.card.mana.ManaCostShard; import forge.util.BinaryUtil; import java.io.Serializable; @@ -41,27 +40,97 @@ import java.util.stream.Stream; public final class ColorSet implements Comparable, Iterable, Serializable { private static final long serialVersionUID = 794691267379929080L; + // needs to be before other static + private static final ColorSet[] cache = new ColorSet[MagicColor.ALL_COLORS + 1]; + static { + byte COLORLESS = MagicColor.COLORLESS; + byte WHITE = MagicColor.WHITE; + byte BLUE = MagicColor.BLUE; + byte BLACK = MagicColor.BLACK; + byte RED = MagicColor.RED; + byte GREEN = MagicColor.GREEN; + Color C = Color.COLORLESS; + Color W = Color.WHITE; + Color U = Color.BLUE; + Color B = Color.BLACK; + Color R = Color.RED; + Color G = Color.GREEN; + + //colorless + cache[COLORLESS] = new ColorSet(C); + + //mono-color + cache[WHITE] = new ColorSet(W); + cache[BLUE] = new ColorSet(U); + cache[BLACK] = new ColorSet(B); + cache[RED] = new ColorSet(R); + cache[GREEN] = new ColorSet(G); + + //two-color + cache[WHITE | BLUE] = new ColorSet(W, U); + cache[WHITE | BLACK] = new ColorSet(W, B); + cache[BLUE | BLACK] = new ColorSet(U, B); + cache[BLUE | RED] = new ColorSet(U, R); + cache[BLACK | RED] = new ColorSet(B, R); + cache[BLACK | GREEN] = new ColorSet(B, G); + cache[RED | GREEN] = new ColorSet(R, G); + cache[RED | WHITE] = new ColorSet(R, W); + cache[GREEN | WHITE] = new ColorSet(G, W); + cache[GREEN | BLUE] = new ColorSet(G, U); + + //three-color + cache[WHITE | BLUE | BLACK] = new ColorSet(W, U, B); + cache[WHITE | BLACK | GREEN] = new ColorSet(W, B, G); + cache[BLUE | BLACK | RED] = new ColorSet(U, B, R); + cache[BLUE | RED | WHITE] = new ColorSet(U, R, W); + cache[BLACK | RED | GREEN] = new ColorSet(B, R, G); + cache[BLACK | GREEN | BLUE] = new ColorSet(B, G, U); + cache[RED | GREEN | WHITE] = new ColorSet(R, G, W); + cache[RED | WHITE | BLACK] = new ColorSet(R, W, B); + cache[GREEN | WHITE | BLUE] = new ColorSet(G, W, U); + cache[GREEN | BLUE | RED] = new ColorSet(G, U, R); + + //four-color + cache[WHITE | BLUE | BLACK | RED] = new ColorSet(W, U, B, R); + cache[BLUE | BLACK | RED | GREEN] = new ColorSet(U, B, R, G); + cache[BLACK | RED | GREEN | WHITE] = new ColorSet(B, R, G, W); + cache[RED | GREEN | WHITE | BLUE] = new ColorSet(R, G, W, U); + cache[GREEN | WHITE | BLUE | BLACK] = new ColorSet(G, W, U, B); + + //five-color + cache[WHITE | BLUE | BLACK | RED | GREEN] = new ColorSet(W, U, B, R, G); + } + + private final Collection orderedShards; private final byte myColor; private final float orderWeight; - - private static final ColorSet[] cache = new ColorSet[32]; + private final Set enumSet; + private final String desc; public static final ColorSet ALL_COLORS = fromMask(MagicColor.ALL_COLORS); - private static final ColorSet NO_COLORS = fromMask(MagicColor.COLORLESS); + public static final ColorSet NO_COLORS = fromMask(MagicColor.COLORLESS); - private ColorSet(final byte mask) { - this.myColor = mask; + private ColorSet(final Color... ordered) { + this.orderedShards = Arrays.asList(ordered); + this.myColor = orderedShards.stream().map(Color::getColorMask).reduce((byte)0, (a, b) -> (byte)(a | b)); this.orderWeight = this.getOrderWeight(); + this.enumSet = EnumSet.copyOf(orderedShards); + this.desc = orderedShards.stream().map(Color::getShortName).collect(Collectors.joining()); } public static ColorSet fromMask(final int mask) { final int mask32 = mask & MagicColor.ALL_COLORS; - if (cache[mask32] == null) { - cache[mask32] = new ColorSet((byte) mask32); - } return cache[mask32]; } + public static ColorSet fromEnums(final Color... colors) { + byte mask = 0; + for (Color e : colors) { + mask |= e.getColorMask(); + } + return fromMask(mask); + } + public static ColorSet fromNames(final String... colors) { byte mask = 0; for (final String s : colors) { @@ -293,17 +362,7 @@ public final class ColorSet implements Comparable, Iterable, Ser */ @Override public String toString() { - final ManaCostShard[] orderedShards = getOrderedShards(); - return Arrays.stream(orderedShards).map(ManaCostShard::toShortString).collect(Collectors.joining()); - } - - /** - * Gets the null color. - * - * @return the nullColor - */ - public static ColorSet getNullColor() { - return NO_COLORS; + return desc; } /** @@ -325,16 +384,7 @@ public final class ColorSet implements Comparable, Iterable, Ser } public Set toEnumSet() { - if (isColorless()) { - return EnumSet.of(Color.COLORLESS); - } - List list = new ArrayList<>(); - for (Color c : Color.values()) { - if (hasAnyColor(c.getColormask())) { - list.add(c); - } - } - return EnumSet.copyOf(list); + return EnumSet.copyOf(enumSet); } @Override @@ -372,72 +422,12 @@ public final class ColorSet implements Comparable, Iterable, Ser } } - public Stream stream() { + public Stream stream() { return this.toEnumSet().stream(); } //Get array of mana cost shards for color set in the proper order - public ManaCostShard[] getOrderedShards() { - return shardOrderLookup[myColor]; - } - - private static final ManaCostShard[][] shardOrderLookup = new ManaCostShard[MagicColor.ALL_COLORS + 1][]; - static { - byte COLORLESS = MagicColor.COLORLESS; - byte WHITE = MagicColor.WHITE; - byte BLUE = MagicColor.BLUE; - byte BLACK = MagicColor.BLACK; - byte RED = MagicColor.RED; - byte GREEN = MagicColor.GREEN; - ManaCostShard C = ManaCostShard.COLORLESS; - ManaCostShard W = ManaCostShard.WHITE; - ManaCostShard U = ManaCostShard.BLUE; - ManaCostShard B = ManaCostShard.BLACK; - ManaCostShard R = ManaCostShard.RED; - ManaCostShard G = ManaCostShard.GREEN; - - //colorless - shardOrderLookup[COLORLESS] = new ManaCostShard[] { C }; - - //mono-color - shardOrderLookup[WHITE] = new ManaCostShard[] { W }; - shardOrderLookup[BLUE] = new ManaCostShard[] { U }; - shardOrderLookup[BLACK] = new ManaCostShard[] { B }; - shardOrderLookup[RED] = new ManaCostShard[] { R }; - shardOrderLookup[GREEN] = new ManaCostShard[] { G }; - - //two-color - shardOrderLookup[WHITE | BLUE] = new ManaCostShard[] { W, U }; - shardOrderLookup[WHITE | BLACK] = new ManaCostShard[] { W, B }; - shardOrderLookup[BLUE | BLACK] = new ManaCostShard[] { U, B }; - shardOrderLookup[BLUE | RED] = new ManaCostShard[] { U, R }; - shardOrderLookup[BLACK | RED] = new ManaCostShard[] { B, R }; - shardOrderLookup[BLACK | GREEN] = new ManaCostShard[] { B, G }; - shardOrderLookup[RED | GREEN] = new ManaCostShard[] { R, G }; - shardOrderLookup[RED | WHITE] = new ManaCostShard[] { R, W }; - shardOrderLookup[GREEN | WHITE] = new ManaCostShard[] { G, W }; - shardOrderLookup[GREEN | BLUE] = new ManaCostShard[] { G, U }; - - //three-color - shardOrderLookup[WHITE | BLUE | BLACK] = new ManaCostShard[] { W, U, B }; - shardOrderLookup[WHITE | BLACK | GREEN] = new ManaCostShard[] { W, B, G }; - shardOrderLookup[BLUE | BLACK | RED] = new ManaCostShard[] { U, B, R }; - shardOrderLookup[BLUE | RED | WHITE] = new ManaCostShard[] { U, R, W }; - shardOrderLookup[BLACK | RED | GREEN] = new ManaCostShard[] { B, R, G }; - shardOrderLookup[BLACK | GREEN | BLUE] = new ManaCostShard[] { B, G, U }; - shardOrderLookup[RED | GREEN | WHITE] = new ManaCostShard[] { R, G, W }; - shardOrderLookup[RED | WHITE | BLACK] = new ManaCostShard[] { R, W, B }; - shardOrderLookup[GREEN | WHITE | BLUE] = new ManaCostShard[] { G, W, U }; - shardOrderLookup[GREEN | BLUE | RED] = new ManaCostShard[] { G, U, R }; - - //four-color - shardOrderLookup[WHITE | BLUE | BLACK | RED] = new ManaCostShard[] { W, U, B, R }; - shardOrderLookup[BLUE | BLACK | RED | GREEN] = new ManaCostShard[] { U, B, R, G }; - shardOrderLookup[BLACK | RED | GREEN | WHITE] = new ManaCostShard[] { B, R, G, W }; - shardOrderLookup[RED | GREEN | WHITE | BLUE] = new ManaCostShard[] { R, G, W, U }; - shardOrderLookup[GREEN | WHITE | BLUE | BLACK] = new ManaCostShard[] { G, W, U, B }; - - //five-color - shardOrderLookup[WHITE | BLUE | BLACK | RED | GREEN] = new ManaCostShard[] { W, U, B, R, G }; + public Collection getOrderedColors() { + return orderedShards; } } diff --git a/forge-core/src/main/java/forge/card/MagicColor.java b/forge-core/src/main/java/forge/card/MagicColor.java index e56c88eb808..941a6a821f0 100644 --- a/forge-core/src/main/java/forge/card/MagicColor.java +++ b/forge-core/src/main/java/forge/card/MagicColor.java @@ -166,7 +166,7 @@ public final class MagicColor { COLORLESS(Constant.COLORLESS, MagicColor.COLORLESS, "C", "lblColorless"); private final String name, shortName, symbol; - private final String localizedName; + private final String label; private final byte colormask; Color(String name0, byte colormask0, String shortName, String label) { @@ -174,7 +174,7 @@ public final class MagicColor { colormask = colormask0; this.shortName = shortName; symbol = "{" + shortName + "}"; - localizedName = Localizer.getInstance().getMessage(label); + this.label = label; } public static Color fromByte(final byte color) { @@ -196,10 +196,10 @@ public final class MagicColor { } public String getLocalizedName() { - return localizedName; + return Localizer.getInstance().getMessage(label); } - public byte getColormask() { + public byte getColorMask() { return colormask; } public String getSymbol() { diff --git a/forge-core/src/main/java/forge/deck/DeckRecognizer.java b/forge-core/src/main/java/forge/deck/DeckRecognizer.java index ab2cc78a0f0..0e486c85929 100644 --- a/forge-core/src/main/java/forge/deck/DeckRecognizer.java +++ b/forge-core/src/main/java/forge/deck/DeckRecognizer.java @@ -1015,7 +1015,7 @@ public class DeckRecognizer { return String.format("%s // %s", getMagicColourLabel(magicColor1), getMagicColourLabel(magicColor2)); String localisedName1 = magicColor1.getLocalizedName(); String localisedName2 = magicColor2.getLocalizedName(); - String comboManaSymbol = manaSymbolsMap.get(magicColor1.getColormask() | magicColor2.getColormask()); + String comboManaSymbol = manaSymbolsMap.get(magicColor1.getColorMask() | magicColor2.getColorMask()); return String.format("%s/%s {%s}", localisedName1, localisedName2, comboManaSymbol); } diff --git a/forge-core/src/main/java/forge/item/PaperCard.java b/forge-core/src/main/java/forge/item/PaperCard.java index 1d039313d49..6d693af47b3 100644 --- a/forge-core/src/main/java/forge/item/PaperCard.java +++ b/forge-core/src/main/java/forge/item/PaperCard.java @@ -593,7 +593,7 @@ public class PaperCard implements Comparable, InventoryItemFromSet, public PaperCardFlags withMarkedColors(ColorSet markedColors) { if(markedColors == null) - markedColors = ColorSet.getNullColor(); + markedColors = ColorSet.NO_COLORS; return new PaperCardFlags(this, markedColors, null); } diff --git a/forge-game/src/main/java/forge/game/ForgeScript.java b/forge-game/src/main/java/forge/game/ForgeScript.java index 00e63190e01..358c597814c 100644 --- a/forge-game/src/main/java/forge/game/ForgeScript.java +++ b/forge-game/src/main/java/forge/game/ForgeScript.java @@ -35,7 +35,7 @@ public class ForgeScript { boolean withSource = property.endsWith("Source"); final ColorSet colors; if (withSource && StaticAbilityColorlessDamageSource.colorlessDamageSource(cardState)) { - colors = ColorSet.getNullColor(); + colors = ColorSet.NO_COLORS; } else { colors = cardState.getCard().getColor(cardState); } diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 89f97e8c6a5..3264e0ee5ae 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -2263,7 +2263,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr public final ColorSet getMarkedColors() { if (markedColor == null) { - return ColorSet.getNullColor(); + return ColorSet.NO_COLORS; } return markedColor; } diff --git a/forge-game/src/main/java/forge/trackable/TrackableTypes.java b/forge-game/src/main/java/forge/trackable/TrackableTypes.java index 4b711552ecf..5c81f403365 100644 --- a/forge-game/src/main/java/forge/trackable/TrackableTypes.java +++ b/forge-game/src/main/java/forge/trackable/TrackableTypes.java @@ -464,7 +464,7 @@ public class TrackableTypes { public static final TrackableType ColorSetType = new TrackableType() { @Override public ColorSet getDefaultValue() { - return ColorSet.getNullColor(); + return ColorSet.NO_COLORS; } @Override diff --git a/forge-gui-desktop/src/main/java/forge/itemmanager/views/ColorSetRenderer.java b/forge-gui-desktop/src/main/java/forge/itemmanager/views/ColorSetRenderer.java index 6735e15f1ec..68903a583d6 100644 --- a/forge-gui-desktop/src/main/java/forge/itemmanager/views/ColorSetRenderer.java +++ b/forge-gui-desktop/src/main/java/forge/itemmanager/views/ColorSetRenderer.java @@ -6,7 +6,7 @@ import java.awt.Graphics; import javax.swing.JTable; import forge.card.ColorSet; -import forge.card.mana.ManaCostShard; +import forge.card.MagicColor; import forge.toolbox.CardFaceSymbols; public class ColorSetRenderer extends ItemCellRenderer { @@ -33,7 +33,7 @@ public class ColorSetRenderer extends ItemCellRenderer { this.cs = (ColorSet) value; } else { - this.cs = ColorSet.getNullColor(); + this.cs = ColorSet.NO_COLORS; } this.setToolTipText(cs.toString()); return super.getTableCellRendererComponent(table, "", isSelected, hasFocus, row, column); @@ -57,8 +57,8 @@ public class ColorSetRenderer extends ItemCellRenderer { final int offsetIfNoSpace = cntGlyphs > 1 ? (cellWidth - padding0 - elemtWidth) / (cntGlyphs - 1) : elemtWidth + elemtGap; final int dx = Math.min(elemtWidth + elemtGap, offsetIfNoSpace); - for (final ManaCostShard s : cs.getOrderedShards()) { - CardFaceSymbols.drawManaSymbol(s.getImageKey(), g, x, y); + for (final MagicColor.Color s : cs.getOrderedColors()) { + CardFaceSymbols.drawManaSymbol(s.getShortName(), g, x, y); x += dx; } } diff --git a/forge-gui-desktop/src/main/java/forge/toolbox/CardFaceSymbols.java b/forge-gui-desktop/src/main/java/forge/toolbox/CardFaceSymbols.java index 5ba9090ad71..59dcd09375f 100644 --- a/forge-gui-desktop/src/main/java/forge/toolbox/CardFaceSymbols.java +++ b/forge-gui-desktop/src/main/java/forge/toolbox/CardFaceSymbols.java @@ -8,6 +8,7 @@ import java.util.StringTokenizer; import com.esotericsoftware.minlog.Log; import forge.card.ColorSet; +import forge.card.MagicColor; import forge.card.mana.ManaCost; import forge.card.mana.ManaCostShard; import forge.gui.GuiBase; @@ -204,9 +205,9 @@ public class CardFaceSymbols { } public static void drawColorSet(Graphics g, ColorSet colorSet, int x, int y, int imageSize, boolean vertical) { - for (final ManaCostShard s : colorSet.getOrderedShards()) { - if (DECK_COLORSET.get(s.getImageKey())!=null) - FSkin.drawImage(g, DECK_COLORSET.get(s.getImageKey()), x, y, imageSize, imageSize); + for (final MagicColor.Color s : colorSet.getOrderedColors()) { + if (DECK_COLORSET.get(s.getShortName())!=null) + FSkin.drawImage(g, DECK_COLORSET.get(s.getShortName()), x, y, imageSize, imageSize); if (!vertical) x += imageSize; else diff --git a/forge-gui-mobile/src/forge/card/CardFaceSymbols.java b/forge-gui-mobile/src/forge/card/CardFaceSymbols.java index 75ffcb74b25..5d182b3a907 100644 --- a/forge-gui-mobile/src/forge/card/CardFaceSymbols.java +++ b/forge-gui-mobile/src/forge/card/CardFaceSymbols.java @@ -186,8 +186,8 @@ public class CardFaceSymbols { public static void drawColorSet(Graphics g, ColorSet colorSet, float x, float y, final float imageSize, boolean vertical) { final float dx = imageSize; - for (final ManaCostShard s : colorSet.getOrderedShards()) { - drawSymbol(s.getImageKey(), g, x, y, imageSize, imageSize); + for (final MagicColor.Color s : colorSet.getOrderedColors()) { + drawSymbol(s.getShortName(), g, x, y, imageSize, imageSize); if (!vertical) x += dx; else diff --git a/forge-gui-mobile/src/forge/card/ColorSetImage.java b/forge-gui-mobile/src/forge/card/ColorSetImage.java index de8b20020ce..8e874be9778 100644 --- a/forge-gui-mobile/src/forge/card/ColorSetImage.java +++ b/forge-gui-mobile/src/forge/card/ColorSetImage.java @@ -11,7 +11,7 @@ public class ColorSetImage implements FImage { public ColorSetImage(ColorSet colorSet0) { colorSet = colorSet0; - shardCount = colorSet.getOrderedShards().length; + shardCount = colorSet.getOrderedColors().size(); } @Override diff --git a/forge-gui-mobile/src/forge/itemmanager/views/ImageView.java b/forge-gui-mobile/src/forge/itemmanager/views/ImageView.java index 2e571e88a78..18b921f1bae 100644 --- a/forge-gui-mobile/src/forge/itemmanager/views/ImageView.java +++ b/forge-gui-mobile/src/forge/itemmanager/views/ImageView.java @@ -16,7 +16,6 @@ import forge.assets.*; import forge.assets.FSkinColor.Colors; import forge.card.*; import forge.card.CardRenderer.CardStackPosition; -import forge.card.mana.ManaCostShard; import forge.deck.*; import forge.deck.io.DeckPreferences; import forge.game.card.CardView; @@ -37,7 +36,6 @@ import forge.util.Utils; import java.util.*; import java.util.Map.Entry; import java.util.function.Function; -import java.util.stream.Collectors; import java.util.stream.IntStream; import static forge.assets.FSkin.getDefaultSkinFile; @@ -1100,10 +1098,10 @@ public class ImageView extends ItemView { deckSelectMode = true; deckProxy = (DeckProxy) item; } - if (item instanceof PaperCard) { + if (item instanceof PaperCard pc) { showRanking = itemManager.getShowRanking() && FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_OVERLAY_DRAFT_RANKING); if (showRanking) { - double score = CardRanker.getRawScore((PaperCard) item); + double score = CardRanker.getRawScore(pc); draftRank = score <= 0 ? 0 : score > 99 ? 99 : (int) Math.round(CardRanker.getRawScore((PaperCard) item)); if (draftRank >= 90) { draftRankImage = FSkinImage.DRAFTRANK_S; @@ -1115,10 +1113,8 @@ public class ImageView extends ItemView { draftRankImage = FSkinImage.DRAFTRANK_C; } } - if (((PaperCard) item).getMarkedColors() != null) { - markedColors = Arrays.stream(((PaperCard) item).getMarkedColors().getOrderedShards()) - .map(ManaCostShard::toString) - .collect(Collectors.joining()); + if (pc.getMarkedColors() != null) { + markedColors = pc.getMarkedColors().toString(); } } if(fnPrice != null) { diff --git a/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java b/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java index 1d095807c7a..22854b8f1bd 100644 --- a/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java +++ b/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java @@ -11,7 +11,6 @@ import com.google.common.collect.Sets; import forge.card.*; import forge.card.CardType.CoreType; -import forge.card.mana.ManaCostShard; import forge.deck.CardPool; import forge.deck.Deck; import forge.deck.DeckFormat; @@ -320,10 +319,9 @@ public class ConquestUtil { public static AEtherFilter getColorFilter(ColorSet color) { StringBuilder name = new StringBuilder(); - for (ManaCostShard s : color.getOrderedShards()) { - name.append(s.toString()); + for (MagicColor.Color s : color.getOrderedColors()) { + name.append(s.getShortName()); } - name = new StringBuilder(name.toString().replaceAll("[{}]", "")); //remove all brackets try { return AEtherFilter.valueOf(name.toString()); } diff --git a/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java b/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java index 699d85aac5f..988e762e765 100644 --- a/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java +++ b/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java @@ -5,7 +5,6 @@ import forge.card.CardRarity; import forge.card.CardStateName; import forge.card.ColorSet; import forge.card.MagicColor; -import forge.card.mana.ManaCostShard; import forge.deck.DeckRecognizer; import forge.game.GameView; import forge.game.card.Card; @@ -100,7 +99,7 @@ public class CardDetailUtil { borderColors.add(DetailColors.MULTICOLOR); } else { //for 3 colors or fewer, return all colors in shard order - for (ManaCostShard shard : cardColors.getOrderedShards()) { + for (MagicColor.Color shard : cardColors.getOrderedColors()) { switch (shard.getColorMask()) { case MagicColor.WHITE: borderColors.add(DetailColors.WHITE); diff --git a/forge-gui/src/main/java/forge/itemmanager/ColumnDef.java b/forge-gui/src/main/java/forge/itemmanager/ColumnDef.java index 72100c677e0..97af782408d 100644 --- a/forge-gui/src/main/java/forge/itemmanager/ColumnDef.java +++ b/forge-gui/src/main/java/forge/itemmanager/ColumnDef.java @@ -377,7 +377,7 @@ public enum ColumnDef { } private static ColorSet toColor(final InventoryItem i) { - return i instanceof IPaperCard ? ((IPaperCard) i).getRules().getColor() : ColorSet.getNullColor(); + return i instanceof IPaperCard ? ((IPaperCard) i).getRules().getColor() : ColorSet.NO_COLORS; } private static Integer toPower(final InventoryItem i) { From 72139b523cbea2ad1234e26aa4c0c5c1fc0e0e94 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Tue, 16 Sep 2025 20:04:00 +0200 Subject: [PATCH 210/355] Improve AI timeout detection (#8723) --- forge-ai/src/main/java/forge/ai/AiController.java | 12 ++++++++++++ .../forge/game/ability/effects/ChangeZoneEffect.java | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/forge-ai/src/main/java/forge/ai/AiController.java b/forge-ai/src/main/java/forge/ai/AiController.java index 7f09eb3cfab..98f8608f8d3 100644 --- a/forge-ai/src/main/java/forge/ai/AiController.java +++ b/forge-ai/src/main/java/forge/ai/AiController.java @@ -97,6 +97,7 @@ public class AiController { private int lastAttackAggression; private boolean useLivingEnd; private List skipped; + private boolean timeoutReached; public AiController(final Player computerPlayer, final Game game0) { player = computerPlayer; @@ -1664,6 +1665,9 @@ public class AiController { Sentry.captureMessage(ex.getMessage() + "\nAssertionError [verifyTransitivity]: " + assertex); } + // in case of infinite loop reset below would not be reached + timeoutReached = false; + FutureTask future = new FutureTask<>(() -> { //avoid ComputerUtil.aiLifeInDanger in loops as it slows down a lot.. call this outside loops will generally be fast... boolean isLifeInDanger = useLivingEnd && ComputerUtil.aiLifeInDanger(player, true, 0); @@ -1673,6 +1677,11 @@ public class AiController { continue; } + if (timeoutReached) { + timeoutReached = false; + break; + } + if (sa.getHostCard().hasKeyword(Keyword.STORM) && sa.getApi() != ApiType.Counter // AI would suck at trying to deliberately proc a Storm counterspell && player.getZone(ZoneType.Hand).contains( @@ -1752,7 +1761,10 @@ public class AiController { t.stop(); } catch (UnsupportedOperationException ex) { // Android and Java 20 dropped support to stop so sadly thread will keep running + timeoutReached = true; future.cancel(true); + // TODO wait a few more seconds to try and exit at a safe point before letting the engine continue + // TODO mark some as skipped to increase chance to find something playable next priority } return null; } diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java index ea7b2aab70b..948d3a23bda 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java @@ -1474,7 +1474,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect { } if (ZoneType.Exile.equals(destination) && sa.hasParam("WithCountersType")) { CounterType cType = CounterType.getType(sa.getParam("WithCountersType")); - int cAmount = AbilityUtils.calculateAmount(sa.getOriginalHost(), sa.getParamOrDefault("WithCountersAmount", "1"), sa); + int cAmount = AbilityUtils.calculateAmount(source, sa.getParamOrDefault("WithCountersAmount", "1"), sa); GameEntityCounterTable table = new GameEntityCounterTable(); movedCard.addCounter(cType, cAmount, player, table); table.replaceCounterEffect(game, sa, true); From 930019db4018d60a773e054bcb99057f24545720 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Wed, 17 Sep 2025 12:24:35 +0800 Subject: [PATCH 211/355] fix tab display area size on Horizontal layout --- .../screens/match/views/VPlayerPanel.java | 59 ++++++++++++++++--- 1 file changed, 51 insertions(+), 8 deletions(-) diff --git a/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java b/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java index 12cae006f9b..886c612844f 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java @@ -388,11 +388,15 @@ public class VPlayerPanel extends FContainer { field.setFieldModifier(0); } + private float initW, initH, commandZoneWidth, commandZoneCount, avatarWidth, prefWidth; + private final float mod = 2.4f; private void doLandscapeLayout(float width, float height) { + initW = width; + initH = height; float x = 0; float y = 0; float yAlt = 0; - float avatarWidth = Forge.altZoneTabs ? avatar.getWidth() : 0; + avatarWidth = Forge.altZoneTabs ? avatar.getWidth() : 0; avatar.setPosition(x, y); y += avatar.getHeight(); @@ -434,8 +438,8 @@ public class VPlayerPanel extends FContainer { } //account for command zone if needed - float commandZoneWidth = 0f; - int commandZoneCount = commandZone.getCount(); + commandZoneWidth = 0f; + commandZoneCount = commandZone.getCount(); if (commandZoneCount > 0) { float commandZoneHeight = height / 2; float minCommandCards = Forge.altZoneTabs && "Horizontal".equalsIgnoreCase(Forge.altZoneTabMode) ? 5 : 2; @@ -455,19 +459,17 @@ public class VPlayerPanel extends FContainer { } else { field.setCommandZoneWidth(0); } + prefWidth = width / mod; if (Forge.altZoneTabs && "Horizontal".equalsIgnoreCase(Forge.altZoneTabMode)) { field.setBounds(x, 0, width - (avatarWidth / 16f), height); - field.getRow1().setWidth(width - (avatarWidth / 16f) - (commandZoneCount > 0 ? commandZoneWidth + 1 : 0)); - field.getRow2().setWidth(width - (avatarWidth / 16f) - (selectedTab == null ? 0 : width / 2.25f)); + updateFieldDisplayArea(width); } else field.setBounds(x, 0, fieldWidth, height); x = width - displayAreaWidth-avatarWidth; for (InfoTab tab : tabs) { if (Forge.altZoneTabs && "Horizontal".equalsIgnoreCase(Forge.altZoneTabMode)) { - float w = (width / 2.25f); - float h = height / 2f; - tab.setDisplayBounds(width - w - avatarWidth, isBottomPlayer ? h : 0, w, h); + updateTabDisplayArea(tab, width, height); } else { tab.setDisplayBounds(x, 0, displayAreaWidth, height); } @@ -481,6 +483,17 @@ public class VPlayerPanel extends FContainer { } } + private void updateFieldDisplayArea(float width) { + field.getRow1().setWidth(width - (avatarWidth / 8f) - (commandZoneCount > 0 ? commandZoneWidth + 1 : 0)); + field.getRow2().setWidth(width - (avatarWidth / 8f) - (selectedTab == null ? 0 : selectedTab.getIdealWidth(prefWidth) + 1) - avatarWidth * mod); + } + + private void updateTabDisplayArea(InfoTab tab, float width, float height) { + float w = tab.getIdealWidth(prefWidth); + float h = height / 2f; + tab.setDisplayBounds(width - w - avatarWidth, isBottomPlayer ? h : 0, w, h); + } + @Override public void drawBackground(Graphics g) { float y; @@ -687,6 +700,7 @@ public class VPlayerPanel extends FContainer { public abstract void setRotate180(boolean rotate180); public abstract void update(); public abstract void reset(); + public abstract float getIdealWidth(float pref); protected boolean isSelected() { return selectedTab == this; @@ -852,6 +866,11 @@ public class VPlayerPanel extends FContainer { @Override public void reset() {} //Mana Display does not get cleared. + + @Override + public float getIdealWidth(float pref) { + return pref; + } } /** @@ -881,6 +900,25 @@ public class VPlayerPanel extends FContainer { public void reset() { displayArea.clear(); } + + @Override + public float getIdealWidth(float pref) { + if (displayArea instanceof VCardDisplayArea vCardDisplayArea) { + float cardWidth = vCardDisplayArea.getCardWidth(vCardDisplayArea.getHeight()); + float size = vCardDisplayArea.getCount(); + return Math.min(cardWidth * size, pref); + } + return pref; + } + + @Override + public void update() { + super.update(); + if (selectedTab != null && Forge.altZoneTabs && "Horizontal".equalsIgnoreCase(Forge.altZoneTabMode)) { + updateFieldDisplayArea(initW); + updateTabDisplayArea(selectedTab, initW, initH); + } + } } /** @@ -1011,6 +1049,11 @@ public class VPlayerPanel extends FContainer { activeZone = ZoneType.Sideboard; } + @Override + public float getIdealWidth(float pref) { + return pref; + } + @Override public boolean tap(float x, float y, int count) { if(this.displayAreas.isEmpty()) From 7933893dcbb030dfc8d4ae31039626fb76278cee Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Wed, 17 Sep 2025 14:08:54 +0800 Subject: [PATCH 212/355] update setlookup files - closes #8721 --- forge-gui/res/setlookup/2ED.txt | 1 + forge-gui/res/setlookup/3ED.txt | 1 + forge-gui/res/setlookup/4ED.txt | 1 + forge-gui/res/setlookup/5DN.txt | 1 + forge-gui/res/setlookup/5ED.txt | 1 + forge-gui/res/setlookup/6ED.txt | 1 + forge-gui/res/setlookup/7ED.txt | 1 + forge-gui/res/setlookup/8ED.txt | 1 + forge-gui/res/setlookup/9ED.txt | 1 + forge-gui/res/setlookup/ALL.txt | 1 + forge-gui/res/setlookup/APC.txt | 1 + forge-gui/res/setlookup/ARN.txt | 1 + forge-gui/res/setlookup/ATQ.txt | 1 + forge-gui/res/setlookup/CHR.txt | 1 + forge-gui/res/setlookup/CMD.txt | 1 + forge-gui/res/setlookup/CSP.txt | 1 + forge-gui/res/setlookup/DCI.txt | 1 + forge-gui/res/setlookup/DRK.txt | 1 + forge-gui/res/setlookup/DST.txt | 1 + forge-gui/res/setlookup/EXO.txt | 1 + forge-gui/res/setlookup/FEM.txt | 1 + forge-gui/res/setlookup/GPT.txt | 1 + forge-gui/res/setlookup/H1R.txt | 1 + forge-gui/res/setlookup/HML.txt | 1 + forge-gui/res/setlookup/HOP.txt | 1 + forge-gui/res/setlookup/ICE.txt | 1 + forge-gui/res/setlookup/INV.txt | 1 + forge-gui/res/setlookup/JP1.txt | 1 + forge-gui/res/setlookup/JUD.txt | 1 + forge-gui/res/setlookup/LEA.txt | 1 + forge-gui/res/setlookup/LEB.txt | 1 + forge-gui/res/setlookup/LEG.txt | 1 + forge-gui/res/setlookup/LGN.txt | 1 + forge-gui/res/setlookup/ME1.txt | 1 + forge-gui/res/setlookup/MIR.txt | 1 + forge-gui/res/setlookup/MMQ.txt | 1 + forge-gui/res/setlookup/MP2.txt | 1 + forge-gui/res/setlookup/MRD.txt | 1 + forge-gui/res/setlookup/NMS.txt | 1 + forge-gui/res/setlookup/ODY.txt | 1 + forge-gui/res/setlookup/ONS.txt | 1 + forge-gui/res/setlookup/PCY.txt | 1 + forge-gui/res/setlookup/PLG20.txt | 1 + forge-gui/res/setlookup/PLS.txt | 1 + forge-gui/res/setlookup/PLST.txt | 1 + forge-gui/res/setlookup/PO2.txt | 1 + forge-gui/res/setlookup/POR.txt | 1 + forge-gui/res/setlookup/PTK.txt | 1 + forge-gui/res/setlookup/PW11.txt | 1 + forge-gui/res/setlookup/PW12.txt | 1 + forge-gui/res/setlookup/PW21.txt | 1 + forge-gui/res/setlookup/S99.txt | 1 + forge-gui/res/setlookup/SCG.txt | 1 + forge-gui/res/setlookup/STH.txt | 1 + forge-gui/res/setlookup/TMP.txt | 1 + forge-gui/res/setlookup/TOR.txt | 1 + forge-gui/res/setlookup/UDS.txt | 1 + forge-gui/res/setlookup/ULG.txt | 1 + forge-gui/res/setlookup/USG.txt | 1 + forge-gui/res/setlookup/V10.txt | 1 + forge-gui/res/setlookup/V11.txt | 1 + forge-gui/res/setlookup/VIS.txt | 1 + forge-gui/res/setlookup/WMC.txt | 1 + forge-gui/res/setlookup/WTH.txt | 1 + 64 files changed, 64 insertions(+) create mode 100644 forge-gui/res/setlookup/2ED.txt create mode 100644 forge-gui/res/setlookup/3ED.txt create mode 100644 forge-gui/res/setlookup/4ED.txt create mode 100644 forge-gui/res/setlookup/5DN.txt create mode 100644 forge-gui/res/setlookup/5ED.txt create mode 100644 forge-gui/res/setlookup/6ED.txt create mode 100644 forge-gui/res/setlookup/7ED.txt create mode 100644 forge-gui/res/setlookup/8ED.txt create mode 100644 forge-gui/res/setlookup/9ED.txt create mode 100644 forge-gui/res/setlookup/ALL.txt create mode 100644 forge-gui/res/setlookup/APC.txt create mode 100644 forge-gui/res/setlookup/ARN.txt create mode 100644 forge-gui/res/setlookup/ATQ.txt create mode 100644 forge-gui/res/setlookup/CHR.txt create mode 100644 forge-gui/res/setlookup/CMD.txt create mode 100644 forge-gui/res/setlookup/CSP.txt create mode 100644 forge-gui/res/setlookup/DCI.txt create mode 100644 forge-gui/res/setlookup/DRK.txt create mode 100644 forge-gui/res/setlookup/DST.txt create mode 100644 forge-gui/res/setlookup/EXO.txt create mode 100644 forge-gui/res/setlookup/FEM.txt create mode 100644 forge-gui/res/setlookup/GPT.txt create mode 100644 forge-gui/res/setlookup/H1R.txt create mode 100644 forge-gui/res/setlookup/HML.txt create mode 100644 forge-gui/res/setlookup/HOP.txt create mode 100644 forge-gui/res/setlookup/ICE.txt create mode 100644 forge-gui/res/setlookup/INV.txt create mode 100644 forge-gui/res/setlookup/JP1.txt create mode 100644 forge-gui/res/setlookup/JUD.txt create mode 100644 forge-gui/res/setlookup/LEA.txt create mode 100644 forge-gui/res/setlookup/LEB.txt create mode 100644 forge-gui/res/setlookup/LEG.txt create mode 100644 forge-gui/res/setlookup/LGN.txt create mode 100644 forge-gui/res/setlookup/ME1.txt create mode 100644 forge-gui/res/setlookup/MIR.txt create mode 100644 forge-gui/res/setlookup/MMQ.txt create mode 100644 forge-gui/res/setlookup/MP2.txt create mode 100644 forge-gui/res/setlookup/MRD.txt create mode 100644 forge-gui/res/setlookup/NMS.txt create mode 100644 forge-gui/res/setlookup/ODY.txt create mode 100644 forge-gui/res/setlookup/ONS.txt create mode 100644 forge-gui/res/setlookup/PCY.txt create mode 100644 forge-gui/res/setlookup/PLG20.txt create mode 100644 forge-gui/res/setlookup/PLS.txt create mode 100644 forge-gui/res/setlookup/PLST.txt create mode 100644 forge-gui/res/setlookup/PO2.txt create mode 100644 forge-gui/res/setlookup/POR.txt create mode 100644 forge-gui/res/setlookup/PTK.txt create mode 100644 forge-gui/res/setlookup/PW11.txt create mode 100644 forge-gui/res/setlookup/PW12.txt create mode 100644 forge-gui/res/setlookup/PW21.txt create mode 100644 forge-gui/res/setlookup/S99.txt create mode 100644 forge-gui/res/setlookup/SCG.txt create mode 100644 forge-gui/res/setlookup/STH.txt create mode 100644 forge-gui/res/setlookup/TMP.txt create mode 100644 forge-gui/res/setlookup/TOR.txt create mode 100644 forge-gui/res/setlookup/UDS.txt create mode 100644 forge-gui/res/setlookup/ULG.txt create mode 100644 forge-gui/res/setlookup/USG.txt create mode 100644 forge-gui/res/setlookup/V10.txt create mode 100644 forge-gui/res/setlookup/V11.txt create mode 100644 forge-gui/res/setlookup/VIS.txt create mode 100644 forge-gui/res/setlookup/WMC.txt create mode 100644 forge-gui/res/setlookup/WTH.txt diff --git a/forge-gui/res/setlookup/2ED.txt b/forge-gui/res/setlookup/2ED.txt new file mode 100644 index 00000000000..4f0734cbe3a --- /dev/null +++ b/forge-gui/res/setlookup/2ED.txt @@ -0,0 +1 @@ +U \ No newline at end of file diff --git a/forge-gui/res/setlookup/3ED.txt b/forge-gui/res/setlookup/3ED.txt new file mode 100644 index 00000000000..ac044e5e464 --- /dev/null +++ b/forge-gui/res/setlookup/3ED.txt @@ -0,0 +1 @@ +R \ No newline at end of file diff --git a/forge-gui/res/setlookup/4ED.txt b/forge-gui/res/setlookup/4ED.txt new file mode 100644 index 00000000000..8a3adbd30da --- /dev/null +++ b/forge-gui/res/setlookup/4ED.txt @@ -0,0 +1 @@ +4E \ No newline at end of file diff --git a/forge-gui/res/setlookup/5DN.txt b/forge-gui/res/setlookup/5DN.txt new file mode 100644 index 00000000000..0fcb81693bf --- /dev/null +++ b/forge-gui/res/setlookup/5DN.txt @@ -0,0 +1 @@ +FD \ No newline at end of file diff --git a/forge-gui/res/setlookup/5ED.txt b/forge-gui/res/setlookup/5ED.txt new file mode 100644 index 00000000000..b63377ac325 --- /dev/null +++ b/forge-gui/res/setlookup/5ED.txt @@ -0,0 +1 @@ +5E \ No newline at end of file diff --git a/forge-gui/res/setlookup/6ED.txt b/forge-gui/res/setlookup/6ED.txt new file mode 100644 index 00000000000..75637338e0d --- /dev/null +++ b/forge-gui/res/setlookup/6ED.txt @@ -0,0 +1 @@ +6E \ No newline at end of file diff --git a/forge-gui/res/setlookup/7ED.txt b/forge-gui/res/setlookup/7ED.txt new file mode 100644 index 00000000000..9a61bd8f0a4 --- /dev/null +++ b/forge-gui/res/setlookup/7ED.txt @@ -0,0 +1 @@ +7E \ No newline at end of file diff --git a/forge-gui/res/setlookup/8ED.txt b/forge-gui/res/setlookup/8ED.txt new file mode 100644 index 00000000000..0707bf72370 --- /dev/null +++ b/forge-gui/res/setlookup/8ED.txt @@ -0,0 +1 @@ +8E \ No newline at end of file diff --git a/forge-gui/res/setlookup/9ED.txt b/forge-gui/res/setlookup/9ED.txt new file mode 100644 index 00000000000..4fd473a3e67 --- /dev/null +++ b/forge-gui/res/setlookup/9ED.txt @@ -0,0 +1 @@ +9E \ No newline at end of file diff --git a/forge-gui/res/setlookup/ALL.txt b/forge-gui/res/setlookup/ALL.txt new file mode 100644 index 00000000000..62fec3c1a32 --- /dev/null +++ b/forge-gui/res/setlookup/ALL.txt @@ -0,0 +1 @@ +AL \ No newline at end of file diff --git a/forge-gui/res/setlookup/APC.txt b/forge-gui/res/setlookup/APC.txt new file mode 100644 index 00000000000..64f61e6c4cb --- /dev/null +++ b/forge-gui/res/setlookup/APC.txt @@ -0,0 +1 @@ +AP \ No newline at end of file diff --git a/forge-gui/res/setlookup/ARN.txt b/forge-gui/res/setlookup/ARN.txt new file mode 100644 index 00000000000..27524c76687 --- /dev/null +++ b/forge-gui/res/setlookup/ARN.txt @@ -0,0 +1 @@ +AN \ No newline at end of file diff --git a/forge-gui/res/setlookup/ATQ.txt b/forge-gui/res/setlookup/ATQ.txt new file mode 100644 index 00000000000..02b33c76390 --- /dev/null +++ b/forge-gui/res/setlookup/ATQ.txt @@ -0,0 +1 @@ +AQ \ No newline at end of file diff --git a/forge-gui/res/setlookup/CHR.txt b/forge-gui/res/setlookup/CHR.txt new file mode 100644 index 00000000000..f4053f06a49 --- /dev/null +++ b/forge-gui/res/setlookup/CHR.txt @@ -0,0 +1 @@ +CH \ No newline at end of file diff --git a/forge-gui/res/setlookup/CMD.txt b/forge-gui/res/setlookup/CMD.txt new file mode 100644 index 00000000000..2ce1fe653b3 --- /dev/null +++ b/forge-gui/res/setlookup/CMD.txt @@ -0,0 +1 @@ +COM \ No newline at end of file diff --git a/forge-gui/res/setlookup/CSP.txt b/forge-gui/res/setlookup/CSP.txt new file mode 100644 index 00000000000..9dc4634006b --- /dev/null +++ b/forge-gui/res/setlookup/CSP.txt @@ -0,0 +1 @@ +CS \ No newline at end of file diff --git a/forge-gui/res/setlookup/DCI.txt b/forge-gui/res/setlookup/DCI.txt new file mode 100644 index 00000000000..b8e58f21709 --- /dev/null +++ b/forge-gui/res/setlookup/DCI.txt @@ -0,0 +1 @@ +PDCI \ No newline at end of file diff --git a/forge-gui/res/setlookup/DRK.txt b/forge-gui/res/setlookup/DRK.txt new file mode 100644 index 00000000000..295879af704 --- /dev/null +++ b/forge-gui/res/setlookup/DRK.txt @@ -0,0 +1 @@ +DK \ No newline at end of file diff --git a/forge-gui/res/setlookup/DST.txt b/forge-gui/res/setlookup/DST.txt new file mode 100644 index 00000000000..a26da2793bc --- /dev/null +++ b/forge-gui/res/setlookup/DST.txt @@ -0,0 +1 @@ +DS \ No newline at end of file diff --git a/forge-gui/res/setlookup/EXO.txt b/forge-gui/res/setlookup/EXO.txt new file mode 100644 index 00000000000..251aee8903c --- /dev/null +++ b/forge-gui/res/setlookup/EXO.txt @@ -0,0 +1 @@ +EX \ No newline at end of file diff --git a/forge-gui/res/setlookup/FEM.txt b/forge-gui/res/setlookup/FEM.txt new file mode 100644 index 00000000000..7c161d74e91 --- /dev/null +++ b/forge-gui/res/setlookup/FEM.txt @@ -0,0 +1 @@ +FE \ No newline at end of file diff --git a/forge-gui/res/setlookup/GPT.txt b/forge-gui/res/setlookup/GPT.txt new file mode 100644 index 00000000000..a599d8d3123 --- /dev/null +++ b/forge-gui/res/setlookup/GPT.txt @@ -0,0 +1 @@ +GP \ No newline at end of file diff --git a/forge-gui/res/setlookup/H1R.txt b/forge-gui/res/setlookup/H1R.txt new file mode 100644 index 00000000000..99cbbcea634 --- /dev/null +++ b/forge-gui/res/setlookup/H1R.txt @@ -0,0 +1 @@ +RMH1 \ No newline at end of file diff --git a/forge-gui/res/setlookup/HML.txt b/forge-gui/res/setlookup/HML.txt new file mode 100644 index 00000000000..95a4d662960 --- /dev/null +++ b/forge-gui/res/setlookup/HML.txt @@ -0,0 +1 @@ +HL \ No newline at end of file diff --git a/forge-gui/res/setlookup/HOP.txt b/forge-gui/res/setlookup/HOP.txt new file mode 100644 index 00000000000..dbe6497d536 --- /dev/null +++ b/forge-gui/res/setlookup/HOP.txt @@ -0,0 +1 @@ +PCH \ No newline at end of file diff --git a/forge-gui/res/setlookup/ICE.txt b/forge-gui/res/setlookup/ICE.txt new file mode 100644 index 00000000000..1e6df89332d --- /dev/null +++ b/forge-gui/res/setlookup/ICE.txt @@ -0,0 +1 @@ +IA \ No newline at end of file diff --git a/forge-gui/res/setlookup/INV.txt b/forge-gui/res/setlookup/INV.txt new file mode 100644 index 00000000000..586886e561e --- /dev/null +++ b/forge-gui/res/setlookup/INV.txt @@ -0,0 +1 @@ +IN \ No newline at end of file diff --git a/forge-gui/res/setlookup/JP1.txt b/forge-gui/res/setlookup/JP1.txt new file mode 100644 index 00000000000..4ec53cda2c1 --- /dev/null +++ b/forge-gui/res/setlookup/JP1.txt @@ -0,0 +1 @@ +PHJ \ No newline at end of file diff --git a/forge-gui/res/setlookup/JUD.txt b/forge-gui/res/setlookup/JUD.txt new file mode 100644 index 00000000000..7f9e8688cd7 --- /dev/null +++ b/forge-gui/res/setlookup/JUD.txt @@ -0,0 +1 @@ +JU \ No newline at end of file diff --git a/forge-gui/res/setlookup/LEA.txt b/forge-gui/res/setlookup/LEA.txt new file mode 100644 index 00000000000..8c7e5a667f1 --- /dev/null +++ b/forge-gui/res/setlookup/LEA.txt @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/forge-gui/res/setlookup/LEB.txt b/forge-gui/res/setlookup/LEB.txt new file mode 100644 index 00000000000..7371f47a6f8 --- /dev/null +++ b/forge-gui/res/setlookup/LEB.txt @@ -0,0 +1 @@ +B \ No newline at end of file diff --git a/forge-gui/res/setlookup/LEG.txt b/forge-gui/res/setlookup/LEG.txt new file mode 100644 index 00000000000..2c31703e6e3 --- /dev/null +++ b/forge-gui/res/setlookup/LEG.txt @@ -0,0 +1 @@ +LG \ No newline at end of file diff --git a/forge-gui/res/setlookup/LGN.txt b/forge-gui/res/setlookup/LGN.txt new file mode 100644 index 00000000000..f1f05ca5a7d --- /dev/null +++ b/forge-gui/res/setlookup/LGN.txt @@ -0,0 +1 @@ +LE \ No newline at end of file diff --git a/forge-gui/res/setlookup/ME1.txt b/forge-gui/res/setlookup/ME1.txt new file mode 100644 index 00000000000..3e08e2c0c84 --- /dev/null +++ b/forge-gui/res/setlookup/ME1.txt @@ -0,0 +1 @@ +MED \ No newline at end of file diff --git a/forge-gui/res/setlookup/MIR.txt b/forge-gui/res/setlookup/MIR.txt new file mode 100644 index 00000000000..17f7ade37c5 --- /dev/null +++ b/forge-gui/res/setlookup/MIR.txt @@ -0,0 +1 @@ +MI \ No newline at end of file diff --git a/forge-gui/res/setlookup/MMQ.txt b/forge-gui/res/setlookup/MMQ.txt new file mode 100644 index 00000000000..4b67ce33c5f --- /dev/null +++ b/forge-gui/res/setlookup/MMQ.txt @@ -0,0 +1 @@ +MM \ No newline at end of file diff --git a/forge-gui/res/setlookup/MP2.txt b/forge-gui/res/setlookup/MP2.txt new file mode 100644 index 00000000000..c79813222cc --- /dev/null +++ b/forge-gui/res/setlookup/MP2.txt @@ -0,0 +1 @@ +MPS_AKH \ No newline at end of file diff --git a/forge-gui/res/setlookup/MRD.txt b/forge-gui/res/setlookup/MRD.txt new file mode 100644 index 00000000000..5748b72aeee --- /dev/null +++ b/forge-gui/res/setlookup/MRD.txt @@ -0,0 +1 @@ +MR \ No newline at end of file diff --git a/forge-gui/res/setlookup/NMS.txt b/forge-gui/res/setlookup/NMS.txt new file mode 100644 index 00000000000..3ce670e547a --- /dev/null +++ b/forge-gui/res/setlookup/NMS.txt @@ -0,0 +1 @@ +NE \ No newline at end of file diff --git a/forge-gui/res/setlookup/ODY.txt b/forge-gui/res/setlookup/ODY.txt new file mode 100644 index 00000000000..efadb986e75 --- /dev/null +++ b/forge-gui/res/setlookup/ODY.txt @@ -0,0 +1 @@ +OD \ No newline at end of file diff --git a/forge-gui/res/setlookup/ONS.txt b/forge-gui/res/setlookup/ONS.txt new file mode 100644 index 00000000000..8cefb6a89ea --- /dev/null +++ b/forge-gui/res/setlookup/ONS.txt @@ -0,0 +1 @@ +ON \ No newline at end of file diff --git a/forge-gui/res/setlookup/PCY.txt b/forge-gui/res/setlookup/PCY.txt new file mode 100644 index 00000000000..4d81e651943 --- /dev/null +++ b/forge-gui/res/setlookup/PCY.txt @@ -0,0 +1 @@ +PY \ No newline at end of file diff --git a/forge-gui/res/setlookup/PLG20.txt b/forge-gui/res/setlookup/PLG20.txt new file mode 100644 index 00000000000..3d22f9f2847 --- /dev/null +++ b/forge-gui/res/setlookup/PLG20.txt @@ -0,0 +1 @@ +PLGS \ No newline at end of file diff --git a/forge-gui/res/setlookup/PLS.txt b/forge-gui/res/setlookup/PLS.txt new file mode 100644 index 00000000000..a8afa5efee9 --- /dev/null +++ b/forge-gui/res/setlookup/PLS.txt @@ -0,0 +1 @@ +PS \ No newline at end of file diff --git a/forge-gui/res/setlookup/PLST.txt b/forge-gui/res/setlookup/PLST.txt new file mode 100644 index 00000000000..0225ac2c686 --- /dev/null +++ b/forge-gui/res/setlookup/PLST.txt @@ -0,0 +1 @@ +PLIST \ No newline at end of file diff --git a/forge-gui/res/setlookup/PO2.txt b/forge-gui/res/setlookup/PO2.txt new file mode 100644 index 00000000000..62e9b0e1ed8 --- /dev/null +++ b/forge-gui/res/setlookup/PO2.txt @@ -0,0 +1 @@ +P2 \ No newline at end of file diff --git a/forge-gui/res/setlookup/POR.txt b/forge-gui/res/setlookup/POR.txt new file mode 100644 index 00000000000..6eedcc962ae --- /dev/null +++ b/forge-gui/res/setlookup/POR.txt @@ -0,0 +1 @@ +PT \ No newline at end of file diff --git a/forge-gui/res/setlookup/PTK.txt b/forge-gui/res/setlookup/PTK.txt new file mode 100644 index 00000000000..2b664e3fc9d --- /dev/null +++ b/forge-gui/res/setlookup/PTK.txt @@ -0,0 +1 @@ +P3 \ No newline at end of file diff --git a/forge-gui/res/setlookup/PW11.txt b/forge-gui/res/setlookup/PW11.txt new file mode 100644 index 00000000000..b0ed9a1cc94 --- /dev/null +++ b/forge-gui/res/setlookup/PW11.txt @@ -0,0 +1 @@ +PWP11 \ No newline at end of file diff --git a/forge-gui/res/setlookup/PW12.txt b/forge-gui/res/setlookup/PW12.txt new file mode 100644 index 00000000000..4b09eaef4b4 --- /dev/null +++ b/forge-gui/res/setlookup/PW12.txt @@ -0,0 +1 @@ +PWP12 \ No newline at end of file diff --git a/forge-gui/res/setlookup/PW21.txt b/forge-gui/res/setlookup/PW21.txt new file mode 100644 index 00000000000..52ea083edd5 --- /dev/null +++ b/forge-gui/res/setlookup/PW21.txt @@ -0,0 +1 @@ +PWP21 \ No newline at end of file diff --git a/forge-gui/res/setlookup/S99.txt b/forge-gui/res/setlookup/S99.txt new file mode 100644 index 00000000000..86aa1faf165 --- /dev/null +++ b/forge-gui/res/setlookup/S99.txt @@ -0,0 +1 @@ +ST \ No newline at end of file diff --git a/forge-gui/res/setlookup/SCG.txt b/forge-gui/res/setlookup/SCG.txt new file mode 100644 index 00000000000..e807b90e78b --- /dev/null +++ b/forge-gui/res/setlookup/SCG.txt @@ -0,0 +1 @@ +SC \ No newline at end of file diff --git a/forge-gui/res/setlookup/STH.txt b/forge-gui/res/setlookup/STH.txt new file mode 100644 index 00000000000..5e158786ed9 --- /dev/null +++ b/forge-gui/res/setlookup/STH.txt @@ -0,0 +1 @@ +SH \ No newline at end of file diff --git a/forge-gui/res/setlookup/TMP.txt b/forge-gui/res/setlookup/TMP.txt new file mode 100644 index 00000000000..331ee1ff669 --- /dev/null +++ b/forge-gui/res/setlookup/TMP.txt @@ -0,0 +1 @@ +TE \ No newline at end of file diff --git a/forge-gui/res/setlookup/TOR.txt b/forge-gui/res/setlookup/TOR.txt new file mode 100644 index 00000000000..30841306fc0 --- /dev/null +++ b/forge-gui/res/setlookup/TOR.txt @@ -0,0 +1 @@ +TO \ No newline at end of file diff --git a/forge-gui/res/setlookup/UDS.txt b/forge-gui/res/setlookup/UDS.txt new file mode 100644 index 00000000000..4a1abd4d2b8 --- /dev/null +++ b/forge-gui/res/setlookup/UDS.txt @@ -0,0 +1 @@ +UD \ No newline at end of file diff --git a/forge-gui/res/setlookup/ULG.txt b/forge-gui/res/setlookup/ULG.txt new file mode 100644 index 00000000000..9d3de336384 --- /dev/null +++ b/forge-gui/res/setlookup/ULG.txt @@ -0,0 +1 @@ +UL \ No newline at end of file diff --git a/forge-gui/res/setlookup/USG.txt b/forge-gui/res/setlookup/USG.txt new file mode 100644 index 00000000000..4547d977b95 --- /dev/null +++ b/forge-gui/res/setlookup/USG.txt @@ -0,0 +1 @@ +US \ No newline at end of file diff --git a/forge-gui/res/setlookup/V10.txt b/forge-gui/res/setlookup/V10.txt new file mode 100644 index 00000000000..04c292e8775 --- /dev/null +++ b/forge-gui/res/setlookup/V10.txt @@ -0,0 +1 @@ +FVR \ No newline at end of file diff --git a/forge-gui/res/setlookup/V11.txt b/forge-gui/res/setlookup/V11.txt new file mode 100644 index 00000000000..8980752f3a2 --- /dev/null +++ b/forge-gui/res/setlookup/V11.txt @@ -0,0 +1 @@ +FVL \ No newline at end of file diff --git a/forge-gui/res/setlookup/VIS.txt b/forge-gui/res/setlookup/VIS.txt new file mode 100644 index 00000000000..ff96225abf1 --- /dev/null +++ b/forge-gui/res/setlookup/VIS.txt @@ -0,0 +1 @@ +VI \ No newline at end of file diff --git a/forge-gui/res/setlookup/WMC.txt b/forge-gui/res/setlookup/WMC.txt new file mode 100644 index 00000000000..b66c665bb87 --- /dev/null +++ b/forge-gui/res/setlookup/WMC.txt @@ -0,0 +1 @@ +PWCQ \ No newline at end of file diff --git a/forge-gui/res/setlookup/WTH.txt b/forge-gui/res/setlookup/WTH.txt new file mode 100644 index 00000000000..beb1bb6b31f --- /dev/null +++ b/forge-gui/res/setlookup/WTH.txt @@ -0,0 +1 @@ +WL \ No newline at end of file From 34323107c90e544332db81edc80701cd623f0c33 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Wed, 17 Sep 2025 18:00:08 +0200 Subject: [PATCH 213/355] AetherFilter: use Predicate for Caption (#8724) * AetherFilter: use Predicate for Caption --- .../planarconquest/ConquestAEtherScreen.java | 20 +- .../planarconquest/ConquestUtil.java | 181 ++++++++++-------- 2 files changed, 114 insertions(+), 87 deletions(-) diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestAEtherScreen.java b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestAEtherScreen.java index d2c94bf9deb..f13d3ceb3a1 100644 --- a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestAEtherScreen.java +++ b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestAEtherScreen.java @@ -100,17 +100,17 @@ public class ConquestAEtherScreen extends FScreen { } private void updateFilteredPool() { - Predicate predicate = btnColorFilter.buildFilterPredicate(null); - predicate = btnTypeFilter.buildFilterPredicate(predicate); - predicate = btnRarityFilter.buildFilterPredicate(predicate); - predicate = btnCMCFilter.buildFilterPredicate(predicate); + Predicate predicate = btnColorFilter + .and(btnTypeFilter) + .and(btnRarityFilter) + .and(btnCMCFilter); final CardRarity selectedRarity = btnRarityFilter.selectedOption.getRarity(); filteredPool.clear(); strictPool.clear(); for (PaperCard card : pool) { - if (predicate == null || predicate.test(card)) { + if (predicate.test(card)) { filteredPool.add(card); if (selectedRarity == card.getRarity()) { strictPool.add(card); @@ -344,7 +344,7 @@ public class ConquestAEtherScreen extends FScreen { } } - private class FilterButton extends FLabel { + private class FilterButton extends FLabel implements Predicate { private final String caption; private final List options; private AEtherFilter selectedOption; @@ -383,11 +383,9 @@ public class ConquestAEtherScreen extends FScreen { } } - private Predicate buildFilterPredicate(Predicate predicate) { - if (predicate == null) { - return selectedOption.getPredicate(); - } - return predicate.and(selectedOption.getPredicate()); + @Override + public boolean test(PaperCard card) { + return selectedOption.test(card); } @Override diff --git a/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java b/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java index 22854b8f1bd..ee5e303a52d 100644 --- a/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java +++ b/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java @@ -102,9 +102,9 @@ public class ConquestUtil { while (true) { name = SOptionPane.showInputDialog(Localizer.getInstance().getMessage("lblHistoriiansWillRecallYourConquestAs"), Localizer.getInstance().getMessage("lblConquestName")); if (name == null) { return null; } - + name = QuestUtil.cleanString(name); - + if (name.isEmpty()) { SOptionPane.showMessageDialog(Localizer.getInstance().getMessage("lblPleaseSpecifyConquestName")); continue; @@ -213,66 +213,64 @@ public class ConquestUtil { }; } - public enum AEtherFilter implements IHasSkinProp { - C (null, new ColorFilter(MagicColor.COLORLESS), "Playable in {C}"), - W (null, new ColorFilter(MagicColor.WHITE), "Playable in {W}"), - U (null, new ColorFilter(MagicColor.BLUE), "Playable in {U}"), - B (null, new ColorFilter(MagicColor.BLACK), "Playable in {B}"), - R (null, new ColorFilter(MagicColor.RED), "Playable in {R}"), - G (null, new ColorFilter(MagicColor.GREEN), "Playable in {G}"), + public enum AEtherFilter implements IHasSkinProp, Predicate { + C (null, new ColorFilter(MagicColor.COLORLESS)), + W (null, new ColorFilter(MagicColor.WHITE)), + U (null, new ColorFilter(MagicColor.BLUE)), + B (null, new ColorFilter(MagicColor.BLACK)), + R (null, new ColorFilter(MagicColor.RED)), + G (null, new ColorFilter(MagicColor.GREEN)), - WU (null, new ColorFilter(MagicColor.WHITE | MagicColor.BLUE), "Playable in {W}{U}"), - WB (null, new ColorFilter(MagicColor.WHITE | MagicColor.BLACK), "Playable in {W}{B}"), - UB (null, new ColorFilter(MagicColor.BLUE | MagicColor.BLACK), "Playable in {U}{B}"), - UR (null, new ColorFilter(MagicColor.BLUE | MagicColor.RED), "Playable in {U}{R}"), - BR (null, new ColorFilter(MagicColor.BLACK | MagicColor.RED), "Playable in {B}{R}"), - BG (null, new ColorFilter(MagicColor.BLACK | MagicColor.GREEN), "Playable in {B}{G}"), - RG (null, new ColorFilter(MagicColor.RED | MagicColor.GREEN), "Playable in {R}{G}"), - RW (null, new ColorFilter(MagicColor.RED | MagicColor.WHITE), "Playable in {R}{W}"), - GW (null, new ColorFilter(MagicColor.GREEN | MagicColor.WHITE), "Playable in {G}{W}"), - GU (null, new ColorFilter(MagicColor.GREEN | MagicColor.BLUE), "Playable in {G}{U}"), + WU (null, new ColorFilter(MagicColor.WHITE | MagicColor.BLUE)), + WB (null, new ColorFilter(MagicColor.WHITE | MagicColor.BLACK)), + UB (null, new ColorFilter(MagicColor.BLUE | MagicColor.BLACK)), + UR (null, new ColorFilter(MagicColor.BLUE | MagicColor.RED)), + BR (null, new ColorFilter(MagicColor.BLACK | MagicColor.RED)), + BG (null, new ColorFilter(MagicColor.BLACK | MagicColor.GREEN)), + RG (null, new ColorFilter(MagicColor.RED | MagicColor.GREEN)), + RW (null, new ColorFilter(MagicColor.RED | MagicColor.WHITE)), + GW (null, new ColorFilter(MagicColor.GREEN | MagicColor.WHITE)), + GU (null, new ColorFilter(MagicColor.GREEN | MagicColor.BLUE)), - WUB (null, new ColorFilter(MagicColor.WHITE | MagicColor.BLUE | MagicColor.BLACK), "Playable in {W}{U}{B}"), - WBG (null, new ColorFilter(MagicColor.WHITE | MagicColor.BLACK | MagicColor.GREEN), "Playable in {W}{B}{G}"), - UBR (null, new ColorFilter(MagicColor.BLUE | MagicColor.BLACK | MagicColor.RED), "Playable in {U}{B}{R}"), - URW (null, new ColorFilter(MagicColor.BLUE | MagicColor.RED | MagicColor.WHITE), "Playable in {U}{R}{W}"), - BRG (null, new ColorFilter(MagicColor.BLACK | MagicColor.RED | MagicColor.GREEN), "Playable in {B}{R}{G}"), - BGU (null, new ColorFilter(MagicColor.BLACK | MagicColor.GREEN | MagicColor.BLUE), "Playable in {B}{G}{U}"), - RGW (null, new ColorFilter(MagicColor.RED | MagicColor.GREEN | MagicColor.WHITE), "Playable in {R}{G}{W}"), - RWB (null, new ColorFilter(MagicColor.RED | MagicColor.WHITE | MagicColor.BLACK), "Playable in {R}{W}{B}"), - GWU (null, new ColorFilter(MagicColor.GREEN | MagicColor.WHITE | MagicColor.BLUE), "Playable in {G}{W}{U}"), - GUR (null, new ColorFilter(MagicColor.GREEN | MagicColor.BLUE | MagicColor.RED), "Playable in {G}{U}{R}"), + WUB (null, new ColorFilter(MagicColor.WHITE | MagicColor.BLUE | MagicColor.BLACK)), + WBG (null, new ColorFilter(MagicColor.WHITE | MagicColor.BLACK | MagicColor.GREEN)), + UBR (null, new ColorFilter(MagicColor.BLUE | MagicColor.BLACK | MagicColor.RED)), + URW (null, new ColorFilter(MagicColor.BLUE | MagicColor.RED | MagicColor.WHITE)), + BRG (null, new ColorFilter(MagicColor.BLACK | MagicColor.RED | MagicColor.GREEN)), + BGU (null, new ColorFilter(MagicColor.BLACK | MagicColor.GREEN | MagicColor.BLUE)), + RGW (null, new ColorFilter(MagicColor.RED | MagicColor.GREEN | MagicColor.WHITE)), + RWB (null, new ColorFilter(MagicColor.RED | MagicColor.WHITE | MagicColor.BLACK)), + GWU (null, new ColorFilter(MagicColor.GREEN | MagicColor.WHITE | MagicColor.BLUE)), + GUR (null, new ColorFilter(MagicColor.GREEN | MagicColor.BLUE | MagicColor.RED)), - WUBR (null, new ColorFilter(MagicColor.WHITE | MagicColor.BLUE | MagicColor.BLACK | MagicColor.RED), "Playable in {W}{U}{B}{R}"), - WUBG (null, new ColorFilter(MagicColor.WHITE | MagicColor.BLUE | MagicColor.BLACK | MagicColor.GREEN), "Playable in {W}{U}{B}{G}"), - WURG (null, new ColorFilter(MagicColor.WHITE | MagicColor.BLUE | MagicColor.RED | MagicColor.GREEN), "Playable in {W}{U}{R}{G}"), - WBRG (null, new ColorFilter(MagicColor.WHITE | MagicColor.BLACK | MagicColor.RED | MagicColor.GREEN), "Playable in {W}{B}{R}{G}"), - UBRG (null, new ColorFilter(MagicColor.BLUE | MagicColor.BLACK | MagicColor.RED | MagicColor.GREEN), "Playable in {U}{B}{R}{G}"), + WUBR (null, new ColorFilter(MagicColor.WHITE | MagicColor.BLUE | MagicColor.BLACK | MagicColor.RED)), + WUBG (null, new ColorFilter(MagicColor.WHITE | MagicColor.BLUE | MagicColor.BLACK | MagicColor.GREEN)), + WURG (null, new ColorFilter(MagicColor.WHITE | MagicColor.BLUE | MagicColor.RED | MagicColor.GREEN)), + WBRG (null, new ColorFilter(MagicColor.WHITE | MagicColor.BLACK | MagicColor.RED | MagicColor.GREEN)), + UBRG (null, new ColorFilter(MagicColor.BLUE | MagicColor.BLACK | MagicColor.RED | MagicColor.GREEN)), - WUBRG (null, new ColorFilter(MagicColor.ALL_COLORS), "Playable in {W}{U}{B}{R}{G}"), + WUBRG (null, new ColorFilter(MagicColor.ALL_COLORS)), - CREATURE (FSkinProp.IMG_CREATURE, new TypeFilter(EnumSet.of(CoreType.Creature)), "Creature"), - NONCREATURE_PERMANENT (FSkinProp.IMG_ENCHANTMENT, new TypeFilter(EnumSet.of(CoreType.Artifact, CoreType.Enchantment, CoreType.Planeswalker, CoreType.Land), EnumSet.of(CoreType.Creature)), "Noncreature Permanent"), - INSTANT_SORCERY (FSkinProp.IMG_SORCERY, new TypeFilter(EnumSet.of(CoreType.Instant, CoreType.Sorcery)), "Instant or Sorcery"), + CREATURE (FSkinProp.IMG_CREATURE, new TypeFilter(EnumSet.of(CoreType.Creature), "Creature")), + NONCREATURE_PERMANENT (FSkinProp.IMG_ENCHANTMENT, new TypeFilter(EnumSet.of(CoreType.Artifact, CoreType.Enchantment, CoreType.Planeswalker, CoreType.Land), EnumSet.of(CoreType.Creature), "Noncreature Permanent")), + INSTANT_SORCERY (FSkinProp.IMG_SORCERY, new TypeFilter(EnumSet.of(CoreType.Instant, CoreType.Sorcery), "Instant or Sorcery")), - COMMON (FSkinProp.IMG_PW_BADGE_COMMON, new RarityFilter(EnumSet.of(CardRarity.Common, CardRarity.Uncommon, CardRarity.Rare, CardRarity.Special, CardRarity.MythicRare)), "Common"), - UNCOMMON (FSkinProp.IMG_PW_BADGE_UNCOMMON, new RarityFilter(EnumSet.of(CardRarity.Uncommon, CardRarity.Rare, CardRarity.Special, CardRarity.MythicRare)), "Uncommon"), - RARE (FSkinProp.IMG_PW_BADGE_RARE, new RarityFilter(EnumSet.of(CardRarity.Rare, CardRarity.Special, CardRarity.MythicRare)), "Rare"), - MYTHIC (FSkinProp.IMG_PW_BADGE_MYTHIC, new RarityFilter(EnumSet.of(CardRarity.MythicRare)), "Mythic Rare (100%)"), + COMMON (FSkinProp.IMG_PW_BADGE_COMMON, new RarityFilter(EnumSet.of(CardRarity.Common, CardRarity.Uncommon, CardRarity.Rare, CardRarity.Special, CardRarity.MythicRare))), + UNCOMMON (FSkinProp.IMG_PW_BADGE_UNCOMMON, new RarityFilter(EnumSet.of(CardRarity.Uncommon, CardRarity.Rare, CardRarity.Special, CardRarity.MythicRare))), + RARE (FSkinProp.IMG_PW_BADGE_RARE, new RarityFilter(EnumSet.of(CardRarity.Rare, CardRarity.Special, CardRarity.MythicRare))), + MYTHIC (FSkinProp.IMG_PW_BADGE_MYTHIC, new RarityFilter(EnumSet.of(CardRarity.MythicRare))), - CMC_LOW (FSkinProp.IMG_CMC_LOW, new CMCFilter(0, 3), "Mana Value 0-3"), - CMC_LOW_MID (FSkinProp.IMG_CMC_LOW_MID, new CMCFilter(2, 5), "Mana Value 2-5"), - CMC_MID_HIGH (FSkinProp.IMG_CMC_MID_HIGH, new CMCFilter(4, 7), "Mana Value 4-7"), - CMC_HIGH (FSkinProp.IMG_CMC_HIGH, new CMCFilter(6, -1), "Mana Value 6+"); + CMC_LOW (FSkinProp.IMG_CMC_LOW, new CMCFilter(0, 3)), + CMC_LOW_MID (FSkinProp.IMG_CMC_LOW_MID, new CMCFilter(2, 5)), + CMC_MID_HIGH (FSkinProp.IMG_CMC_MID_HIGH, new CMCFilter(4, 7)), + CMC_HIGH (FSkinProp.IMG_CMC_HIGH, new CMCFilter(6, -1)); private final FSkinProp skinProp; private final Predicate predicate; - private String caption; - AEtherFilter(final FSkinProp skinProp0, final Predicate predicate0, final String caption0) { + AEtherFilter(final FSkinProp skinProp0, final Predicate predicate0) { skinProp = skinProp0; predicate = predicate0; - caption = caption0; } @Override @@ -280,13 +278,14 @@ public class ConquestUtil { return skinProp; } - public Predicate getPredicate() { - return predicate; + @Override + public boolean test(PaperCard card) { + return predicate.test(card); } public ColorSet getColor() { - if (predicate instanceof ColorFilter) { - return ((ColorFilter)predicate).color; + if (predicate instanceof ColorFilter cf) { + return cf.color; } return null; } @@ -295,25 +294,15 @@ public class ConquestUtil { return getRarity(0d); } public CardRarity getRarity(double random) { - if (predicate instanceof RarityFilter) { - double total = 0d; - CardRarity rarity = null; - Map rarityOdds = ((RarityFilter)predicate).rarityOdds; - for (final Entry entry : rarityOdds.entrySet()) { - rarity = entry.getKey(); - total += entry.getValue(); - if (random < total) { - return rarity; - } - } - return rarity; + if (predicate instanceof RarityFilter rf) { + return rf.getRarity(random); } return null; } @Override public String toString() { - return caption; + return predicate.toString(); } } @@ -353,7 +342,7 @@ public class ConquestUtil { } for (AEtherFilter filter : RARITY_FILTERS) { - filter.caption = ((RarityFilter)filter.predicate).updateOdds(odds); + ((RarityFilter)filter.predicate).updateOdds(odds); } } @@ -419,20 +408,29 @@ public class ConquestUtil { public boolean test(PaperCard card) { return card.getRules().getColorIdentity().hasNoColorsExcept(color); } + @Override + public String toString() { + StringBuilder sb = new StringBuilder("Playable in "); + for (MagicColor.Color c : color.getOrderedColors()) { + sb.append(c.getSymbol()); + } + return sb.toString(); + } } private static class TypeFilter implements Predicate { private final Iterable types; private final Iterable nonTypes; + private final String caption; - private TypeFilter(Iterable types0) { - types = types0; - nonTypes = null; + private TypeFilter(Iterable types0, final String caption0) { + this(types0, null, caption0); } - private TypeFilter(Iterable types0, Iterable nonTypes0) { + private TypeFilter(Iterable types0, Iterable nonTypes0, final String caption0) { types = types0; nonTypes = nonTypes0; + caption = caption0; } @Override @@ -452,10 +450,15 @@ public class ConquestUtil { } return false; } + @Override + public String toString() { + return caption; + } } private static class RarityFilter implements Predicate { private final Map rarityOdds; + private String caption = ""; private RarityFilter(Iterable rarities0) { rarityOdds = Maps.newEnumMap(CardRarity.class); @@ -464,11 +467,24 @@ public class ConquestUtil { } } - private String updateOdds(Map oddsLookup) { + public CardRarity getRarity(double random) { + double total = 0d; + CardRarity rarity = null; + for (final Entry entry : rarityOdds.entrySet()) { + rarity = entry.getKey(); + total += entry.getValue(); + if (random < total) { + return rarity; + } + } + return rarity; + } + + private void updateOdds(Map oddsLookup) { double baseOdds = 0; double remainingOdds = 1; CardRarity baseRarity = null; - StringBuilder caption = new StringBuilder(); + StringBuilder sb = new StringBuilder(); for (CardRarity rarity : rarityOdds.keySet()) { Double odds = oddsLookup.get(rarity); @@ -485,22 +501,27 @@ public class ConquestUtil { final String display = rounded < 1d ? Double.toString(rounded) // Display decimal if < 1% : Long.toString(Math.round(rounded)); - caption.append(", ").append(rarity.getLongName()).append(" (").append(display).append("%)"); + sb.append(", ").append(rarity.getLongName()).append(" (").append(display).append("%)"); rarityOdds.put(rarity, odds); } } //prepend base rarity and odds - caption.insert(0, baseRarity.getLongName() + " (" + (Math.round(1000 * remainingOdds) / 10) + "%)"); + sb.insert(0, baseRarity.getLongName() + " (" + (Math.round(1000 * remainingOdds) / 10) + "%)"); rarityOdds.put(baseRarity, remainingOdds); - return caption.toString(); + caption = sb.toString(); } @Override public boolean test(PaperCard card) { return rarityOdds.containsKey(card.getRarity()); } + + @Override + public String toString() { + return caption; + } } private static class CMCFilter implements Predicate { @@ -517,5 +538,13 @@ public class ConquestUtil { if (cardCmc < cmcMin) { return false; } return cmcMax == -1 || cardCmc <= cmcMax; } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder("Mana Value "); + sb.append(cmcMin); + sb.append(cmcMax == -1 ? "+" : "-" + cmcMax); + return sb.toString(); + } } } From 8f5f2059a2121187ddb55cd608e1b9185821a2f8 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Wed, 17 Sep 2025 20:58:40 +0200 Subject: [PATCH 214/355] Fix Self-Destruct (#8730) --- forge-game/src/main/java/forge/game/Game.java | 4 ++-- forge-game/src/main/java/forge/game/GameAction.java | 1 + .../game/ability/effects/DamageResolveEffect.java | 4 ++++ forge-gui/res/cardsfolder/s/self_destruct.txt | 11 +++++------ 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/forge-game/src/main/java/forge/game/Game.java b/forge-game/src/main/java/forge/game/Game.java index ca35e8fa59f..c9f8171f7c2 100644 --- a/forge-game/src/main/java/forge/game/Game.java +++ b/forge-game/src/main/java/forge/game/Game.java @@ -845,6 +845,8 @@ public class Game { p.revealFaceDownCards(); } + // TODO free any mindslaves + for (Card c : cards) { // CR 800.4d if card is controlled by opponent, LTB should trigger if (c.getOwner().equals(p) && c.getController().equals(p)) { @@ -880,8 +882,6 @@ public class Game { } triggerList.put(c.getZone().getZoneType(), null, c); getAction().ceaseToExist(c, false); - // CR 603.2f owner of trigger source lost game - getTriggerHandler().clearDelayedTrigger(c); } } else { // return stolen permanents diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index c2d2425a501..efae785c646 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -974,6 +974,7 @@ public class GameAction { // in some corner cases there's no zone yet (copied spell that failed targeting) if (z != null) { z.remove(c); + c.setZone(c.getOwner().getZone(ZoneType.None)); if (z.is(ZoneType.Battlefield)) { c.runLeavesPlayCommands(); } diff --git a/forge-game/src/main/java/forge/game/ability/effects/DamageResolveEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DamageResolveEffect.java index c96a27937fc..e4e85049f56 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DamageResolveEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DamageResolveEffect.java @@ -18,6 +18,10 @@ public class DamageResolveEffect extends SpellAbilityEffect { @Override public void resolve(SpellAbility sa) { CardDamageMap damageMap = sa.getDamageMap(); + if (damageMap == null) { + // this can happen if damagesource was missing + return; + } CardDamageMap preventMap = sa.getPreventMap(); GameEntityCounterTable counterTable = sa.getCounterTable(); diff --git a/forge-gui/res/cardsfolder/s/self_destruct.txt b/forge-gui/res/cardsfolder/s/self_destruct.txt index a556ba10d5e..adc7757bb36 100644 --- a/forge-gui/res/cardsfolder/s/self_destruct.txt +++ b/forge-gui/res/cardsfolder/s/self_destruct.txt @@ -1,10 +1,9 @@ Name:Self-Destruct ManaCost:1 R Types:Instant -A:SP$ Pump | ValidTgts$ Creature.YouCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature you control | RememberTargets$ True | SubAbility$ DBDealDamage1 | StackDescription$ None | SpellDescription$ Target creature you control deals X damage to any other target and X damage to itself, where X is its power. -SVar:DBDealDamage1:DB$ DealDamage | ValidTgts$ Any | TargetUnique$ True | AILogic$ PowerDmg | NumDmg$ X | DamageMap$ True | SubAbility$ DBDealDamage2 | DamageSource$ Remembered -SVar:DBDealDamage2:DB$ DealDamage | NumDmg$ X | Defined$ Remembered | SubAbility$ DBDamageResolve | DamageSource$ Remembered -SVar:DBDamageResolve:DB$ DamageResolve | SubAbility$ DBCleanup -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -SVar:X:Remembered$CardPower +A:SP$ DealDamage | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | AILogic$ PowerDmg | NumDmg$ X | DamageMap$ True | SubAbility$ DBDealDamage2 | DamageSource$ ThisTargetedCard | SpellDescription$ Target creature you control deals X damage to any other target and X damage to itself, where X is its power. +SVar:DBDealDamage2:DB$ DealDamage | ValidTgts$ Any | TargetUnique$ True | NumDmg$ Y | SubAbility$ DBDamageResolve | DamageSource$ ParentTarget +SVar:DBDamageResolve:DB$ DamageResolve +SVar:X:Targeted$CardPower +SVar:Y:ParentTargeted$CardPower Oracle:Target creature you control deals X damage to any other target and X damage to itself, where X is its power. From 0cab03b96c0ef9bcb608f957dcede1c5951a928b Mon Sep 17 00:00:00 2001 From: kevlahnota Date: Thu, 18 Sep 2025 06:37:45 +0800 Subject: [PATCH 215/355] Update VManaPool.java --- .../src/forge/screens/match/views/VManaPool.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/forge-gui-mobile/src/forge/screens/match/views/VManaPool.java b/forge-gui-mobile/src/forge/screens/match/views/VManaPool.java index c832a7de5e0..1d4f8964cfb 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VManaPool.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VManaPool.java @@ -146,12 +146,12 @@ public class VManaPool extends VDisplayArea { if (h > maxImageHeight) { h /= 2; } - float w2 = Forge.altZoneTabs && "Horizontal".equalsIgnoreCase(Forge.altZoneTabMode) + float w = Forge.altZoneTabs && "Horizontal".equalsIgnoreCase(Forge.altZoneTabMode) ? image.getWidth() * h * 0.7f / image.getHeight() : image.getWidth() * h / image.getHeight(); - float w = w2; while (w > getWidth()) { h /= 2; - w = w2; + w = Forge.altZoneTabs && "Horizontal".equalsIgnoreCase(Forge.altZoneTabMode) + ? image.getWidth() * h * 0.7f / image.getHeight() : image.getWidth() * h / image.getHeight(); } float x = (getWidth() - w) / 2; float y = gapY + (maxImageHeight - h) / 2; From 14f146f8d0ae7701220363903285ba7f47fc6360 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Thu, 18 Sep 2025 07:18:21 +0200 Subject: [PATCH 216/355] Remove TargetsFromSingleZone --- .../java/forge/ai/ability/ChangeZoneAi.java | 43 ------------------- .../forge/game/ability/AbilityFactory.java | 3 -- .../game/replacement/ReplacementHandler.java | 11 +---- .../game/spellability/TargetRestrictions.java | 8 ---- .../res/cardsfolder/a/arashin_sunshield.txt | 2 +- .../res/cardsfolder/c/carrion_beetles.txt | 2 +- forge-gui/res/cardsfolder/c/cease_desist.txt | 2 +- forge-gui/res/cardsfolder/d/decompose.txt | 2 +- .../res/cardsfolder/d/digsite_conservator.txt | 2 +- forge-gui/res/cardsfolder/e/ebony_charm.txt | 2 +- .../res/cardsfolder/f/famished_ghoul.txt | 2 +- .../f/feral_deathgorger_dusk_sight.txt | 2 +- forge-gui/res/cardsfolder/g/gravegouger.txt | 2 +- .../res/cardsfolder/g/griffnaut_tracker.txt | 2 +- .../res/cardsfolder/k/kaya_orzhov_usurper.txt | 2 +- .../res/cardsfolder/l/lodestone_bauble.txt | 2 +- .../res/cardsfolder/m/martyr_of_bones.txt | 2 +- .../pestilent_cauldron_restorative_burst.txt | 2 +- forge-gui/res/cardsfolder/p/push_pull.txt | 2 +- .../res/cardsfolder/q/qutrub_forayer.txt | 2 +- forge-gui/res/cardsfolder/r/rag_dealer.txt | 2 +- forge-gui/res/cardsfolder/r/rapid_decay.txt | 2 +- forge-gui/res/cardsfolder/r/rats_feast.txt | 2 +- forge-gui/res/cardsfolder/r/retribution.txt | 2 +- forge-gui/res/cardsfolder/s/scarab_feast.txt | 2 +- .../res/cardsfolder/s/serene_remembrance.txt | 2 +- forge-gui/res/cardsfolder/s/shred_memory.txt | 2 +- forge-gui/res/cardsfolder/s/sorrows_path.txt | 2 +- .../cardsfolder/s/soul_shackled_zombie.txt | 2 +- .../res/cardsfolder/s/spellweaver_helix.txt | 2 +- .../res/cardsfolder/t/trial_of_agony.txt | 7 ++- .../res/cardsfolder/u/unlicensed_hearse.txt | 2 +- .../res/cardsfolder/w/waste_management.txt | 2 +- .../match/input/InputSelectTargets.java | 6 --- .../java/forge/player/TargetSelection.java | 14 ------ 35 files changed, 33 insertions(+), 115 deletions(-) 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 114d92d4843..6cfc0b0600c 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java @@ -902,8 +902,6 @@ public class ChangeZoneAi extends SpellAbilityAi { list.remove(source); // spells can't target their own source, because it's actually in the stack zone } - // list = CardLists.canSubsequentlyTarget(list, sa); - if (sa.hasParam("AttachedTo")) { list = CardLists.filter(list, c -> { for (Card card : game.getCardsIn(ZoneType.Battlefield)) { @@ -1246,53 +1244,12 @@ public class ChangeZoneAi extends SpellAbilityAi { } } - // if max CMC exceeded, do not choose this card (but keep looking for other options) - if (sa.hasParam("MaxTotalTargetCMC")) { - if (choice.getCMC() > sa.getTargetRestrictions().getMaxTotalCMC(choice, sa) - sa.getTargets().getTotalTargetedCMC()) { - list.remove(choice); - continue; - } - } - - // if max power exceeded, do not choose this card (but keep looking for other options) - if (sa.hasParam("MaxTotalTargetPower")) { - if (choice.getNetPower() > sa.getTargetRestrictions().getMaxTotalPower(choice, sa) -sa.getTargets().getTotalTargetedPower()) { - list.remove(choice); - continue; - } - } - - // honor the Same Creature Type restriction - if (sa.getTargetRestrictions().isWithSameCreatureType()) { - Card firstTarget = sa.getTargetCard(); - if (firstTarget != null && !choice.sharesCreatureTypeWith(firstTarget)) { - list.remove(choice); - continue; - } - } - list.remove(choice); if (sa.canTarget(choice)) { sa.getTargets().add(choice); } } - // Honor the Single Zone restriction. For now, simply remove targets that do not belong to the same zone as the first targeted card. - // TODO: ideally the AI should consider at this point which targets exactly to pick (e.g. one card in the first player's graveyard - // vs. two cards in the second player's graveyard, which cards are more relevant to be targeted, etc.). Consider improving. - if (sa.getTargetRestrictions().isSingleZone()) { - Card firstTgt = sa.getTargetCard(); - CardCollection toRemove = new CardCollection(); - if (firstTgt != null) { - for (Card t : sa.getTargets().getTargetCards()) { - if (!t.getController().equals(firstTgt.getController())) { - toRemove.add(t); - } - } - sa.getTargets().removeAll(toRemove); - } - } - return true; } diff --git a/forge-game/src/main/java/forge/game/ability/AbilityFactory.java b/forge-game/src/main/java/forge/game/ability/AbilityFactory.java index 9487643532f..f4d580cdf92 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityFactory.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityFactory.java @@ -359,9 +359,6 @@ public final class AbilityFactory { if (mapParams.containsKey("TargetUnique")) { abTgt.setUniqueTargets(true); } - if (mapParams.containsKey("TargetsFromSingleZone")) { - abTgt.setSingleZone(true); - } if (mapParams.containsKey("TargetsWithoutSameCreatureType")) { abTgt.setWithoutSameCreatureType(true); } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java b/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java index afd07235a24..ac7912a1f44 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java @@ -280,15 +280,8 @@ public class ReplacementHandler { host = game.getCardState(host); } - if (replacementEffect.getOverridingAbility() == null && replacementEffect.hasParam("ReplaceWith")) { - // TODO: the source of replacement effect should be the source of the original effect - effectSA = AbilityFactory.getAbility(host, replacementEffect.getParam("ReplaceWith"), replacementEffect); - //replacementEffect.setOverridingAbility(effectSA); - //effectSA.setTrigger(true); - } else if (replacementEffect.getOverridingAbility() != null) { - effectSA = replacementEffect.getOverridingAbility(); - } - + // TODO: the source of replacement effect should be the source of the original effect + effectSA = replacementEffect.ensureAbility(); if (effectSA != null) { SpellAbility tailend = effectSA; do { diff --git a/forge-game/src/main/java/forge/game/spellability/TargetRestrictions.java b/forge-game/src/main/java/forge/game/spellability/TargetRestrictions.java index 0f49beba47c..5f1713723d5 100644 --- a/forge-game/src/main/java/forge/game/spellability/TargetRestrictions.java +++ b/forge-game/src/main/java/forge/game/spellability/TargetRestrictions.java @@ -55,7 +55,6 @@ public class TargetRestrictions { // Additional restrictions that may not fit into Valid private boolean uniqueTargets = false; - private boolean singleZone = false; private boolean forEachPlayer = false; private boolean differentControllers = false; private boolean differentCMC = false; @@ -100,7 +99,6 @@ public class TargetRestrictions { this.tgtZone = target.getZone(); this.saValidTargeting = target.getSAValidTargeting(); this.uniqueTargets = target.isUniqueTargets(); - this.singleZone = target.isSingleZone(); this.forEachPlayer = target.isForEachPlayer(); this.differentControllers = target.isDifferentControllers(); this.differentCMC = target.isDifferentCMC(); @@ -538,12 +536,6 @@ public class TargetRestrictions { public final void setUniqueTargets(final boolean unique) { this.uniqueTargets = unique; } - public final boolean isSingleZone() { - return this.singleZone; - } - public final void setSingleZone(final boolean single) { - this.singleZone = single; - } public boolean isWithoutSameCreatureType() { return withoutSameCreatureType; } diff --git a/forge-gui/res/cardsfolder/a/arashin_sunshield.txt b/forge-gui/res/cardsfolder/a/arashin_sunshield.txt index cd6016096fd..5453c808691 100644 --- a/forge-gui/res/cardsfolder/a/arashin_sunshield.txt +++ b/forge-gui/res/cardsfolder/a/arashin_sunshield.txt @@ -3,7 +3,7 @@ ManaCost:3 W Types:Creature Human Warrior PT:3/4 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When this creature enters, exile up to two target cards from a single graveyard. -SVar:TrigChange:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | TargetMin$ 0 | TargetMax$ 2 | TargetsFromSingleZone$ True | ValidTgts$ Card | TgtPrompt$ Select up to two target cards from a single graveyard +SVar:TrigChange:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | TargetMin$ 0 | TargetMax$ 2 | TargetsWithSameController$ True | ValidTgts$ Card | TgtPrompt$ Select up to two target cards from a single graveyard A:AB$ Tap | Cost$ W T | ValidTgts$ Creature | TgtPrompt$ Select target creature | SpellDescription$ Tap target creature. DeckHas:Ability$Graveyard Oracle:When this creature enters, exile up to two target cards from a single graveyard.\n{W}, {T}: Tap target creature. diff --git a/forge-gui/res/cardsfolder/c/carrion_beetles.txt b/forge-gui/res/cardsfolder/c/carrion_beetles.txt index 995d9f9e4f3..096f33e952c 100644 --- a/forge-gui/res/cardsfolder/c/carrion_beetles.txt +++ b/forge-gui/res/cardsfolder/c/carrion_beetles.txt @@ -2,5 +2,5 @@ Name:Carrion Beetles ManaCost:B Types:Creature Insect PT:1/1 -A:AB$ ChangeZone | Cost$ 2 B T | TargetMin$ 0 | TargetMax$ 3 | TargetsFromSingleZone$ True | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Choose target card in a graveyard | ValidTgts$ Card | SpellDescription$ Exile up to three target cards from a single graveyard. +A:AB$ ChangeZone | Cost$ 2 B T | TargetMin$ 0 | TargetMax$ 3 | TargetsWithSameController$ True | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Choose target card in a graveyard | ValidTgts$ Card | SpellDescription$ Exile up to three target cards from a single graveyard. Oracle:{2}{B}, {T}: Exile up to three target cards from a single graveyard. diff --git a/forge-gui/res/cardsfolder/c/cease_desist.txt b/forge-gui/res/cardsfolder/c/cease_desist.txt index 6a36165dce5..162548b016b 100644 --- a/forge-gui/res/cardsfolder/c/cease_desist.txt +++ b/forge-gui/res/cardsfolder/c/cease_desist.txt @@ -1,7 +1,7 @@ Name:Cease ManaCost:1 BG Types:Instant -A:SP$ ChangeZone | TargetMin$ 0 | TargetMax$ 2 | TgtPrompt$ Select up to two target cards from a single graveyard | TargetsFromSingleZone$ True | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Card | SubAbility$ DBGainLife | SpellDescription$ Exile up to two target cards from a single graveyard. +A:SP$ ChangeZone | TargetMin$ 0 | TargetMax$ 2 | TgtPrompt$ Select up to two target cards from a single graveyard | TargetsWithSameController$ True | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Card | SubAbility$ DBGainLife | SpellDescription$ Exile up to two target cards from a single graveyard. SVar:DBGainLife:DB$ GainLife | ValidTgts$ Player | LifeAmount$ 2 | SubAbility$ DBDraw | SpellDescription$ Target player gains 2 life and draws a card. SVar:DBDraw:DB$ Draw | Defined$ TargetedPlayer DeckHas:Ability$Graveyard|LifeGain diff --git a/forge-gui/res/cardsfolder/d/decompose.txt b/forge-gui/res/cardsfolder/d/decompose.txt index 8e9eb4c0182..6b76b523266 100644 --- a/forge-gui/res/cardsfolder/d/decompose.txt +++ b/forge-gui/res/cardsfolder/d/decompose.txt @@ -1,6 +1,6 @@ Name:Decompose ManaCost:1 B Types:Sorcery -A:SP$ ChangeZone | TargetMin$ 0 | TargetMax$ 3 | TargetsFromSingleZone$ True | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Choose target card in a graveyard | ValidTgts$ Card | SpellDescription$ Exile up to three target cards from a single graveyard. +A:SP$ ChangeZone | TargetMin$ 0 | TargetMax$ 3 | TargetsWithSameController$ True | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Choose target card in a graveyard | ValidTgts$ Card | SpellDescription$ Exile up to three target cards from a single graveyard. AI:RemoveDeck:Random Oracle:Exile up to three target cards from a single graveyard. diff --git a/forge-gui/res/cardsfolder/d/digsite_conservator.txt b/forge-gui/res/cardsfolder/d/digsite_conservator.txt index 2fe3b62b2ac..232c18c8f47 100644 --- a/forge-gui/res/cardsfolder/d/digsite_conservator.txt +++ b/forge-gui/res/cardsfolder/d/digsite_conservator.txt @@ -2,7 +2,7 @@ Name:Digsite Conservator ManaCost:2 Types:Artifact Creature Gnome PT:2/1 -A:AB$ ChangeZone | Cost$ Sac<1/CARDNAME> | TargetMin$ 0 | TargetMax$ 4 | TargetsFromSingleZone$ True | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Select up to four target cards from a single graveyard | ValidTgts$ Card | SorcerySpeed$ True | SpellDescription$ Exile up to four target cards from a single graveyard. Activate only as a sorcery. +A:AB$ ChangeZone | Cost$ Sac<1/CARDNAME> | TargetMin$ 0 | TargetMax$ 4 | TargetsWithSameController$ True | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Select up to four target cards from a single graveyard | ValidTgts$ Card | SorcerySpeed$ True | SpellDescription$ Exile up to four target cards from a single graveyard. Activate only as a sorcery. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDiscover | TriggerDescription$ When CARDNAME dies, you may pay {4}. If you do, discover 4. (Exile cards from the top of your library until you exile a nonland card with mana value 4 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.) SVar:TrigDiscover:AB$ Discover | Cost$ 4 | Num$ 4 DeckHas:Ability$Sacrifice diff --git a/forge-gui/res/cardsfolder/e/ebony_charm.txt b/forge-gui/res/cardsfolder/e/ebony_charm.txt index e2350e21a08..04af89188a3 100644 --- a/forge-gui/res/cardsfolder/e/ebony_charm.txt +++ b/forge-gui/res/cardsfolder/e/ebony_charm.txt @@ -4,7 +4,7 @@ Types:Instant A:SP$ Charm | Choices$ EbonyDrain,EbonyExile,EbonyFear | Defined$ You SVar:EbonyDrain:DB$ LoseLife | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | LifeAmount$ 1 | SubAbility$ EbonyGain | SpellDescription$ Target opponent loses 1 life and you gain 1 life. SVar:EbonyGain:DB$ GainLife | Defined$ You | LifeAmount$ 1 -SVar:EbonyExile:DB$ ChangeZone | TargetMin$ 0 | TargetMax$ 3 | TargetsFromSingleZone$ True | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Choose target card in a graveyard | ValidTgts$ Card | SpellDescription$ Exile up to three target cards from a single graveyard. +SVar:EbonyExile:DB$ ChangeZone | TargetMin$ 0 | TargetMax$ 3 | TargetsWithSameController$ True | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Choose target card in a graveyard | ValidTgts$ Card | SpellDescription$ Exile up to three target cards from a single graveyard. SVar:EbonyFear:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ Fear | SpellDescription$ Target creature gains fear until end of turn. AI:RemoveDeck:All Oracle:Choose one —\n• Target opponent loses 1 life and you gain 1 life.\n• Exile up to three target cards from a single graveyard.\n• Target creature gains fear until end of turn. (It can't be blocked except by artifact creatures and/or black creatures.) diff --git a/forge-gui/res/cardsfolder/f/famished_ghoul.txt b/forge-gui/res/cardsfolder/f/famished_ghoul.txt index 3316d8012e2..ae8af4ca09b 100644 --- a/forge-gui/res/cardsfolder/f/famished_ghoul.txt +++ b/forge-gui/res/cardsfolder/f/famished_ghoul.txt @@ -2,6 +2,6 @@ Name:Famished Ghoul ManaCost:3 B Types:Creature Zombie PT:3/2 -A:AB$ ChangeZone | Cost$ 1 B Sac<1/CARDNAME> | TargetMin$ 0 | TargetMax$ 2 | TargetsFromSingleZone$ True | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Choose target card in a graveyard | ValidTgts$ Card | SpellDescription$ Exile up to two target cards from a single graveyard. +A:AB$ ChangeZone | Cost$ 1 B Sac<1/CARDNAME> | TargetMin$ 0 | TargetMax$ 2 | TargetsWithSameController$ True | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Choose target card in a graveyard | ValidTgts$ Card | SpellDescription$ Exile up to two target cards from a single graveyard. AI:RemoveDeck:All Oracle:{1}{B}, Sacrifice Famished Ghoul: Exile up to two target cards from a single graveyard. diff --git a/forge-gui/res/cardsfolder/f/feral_deathgorger_dusk_sight.txt b/forge-gui/res/cardsfolder/f/feral_deathgorger_dusk_sight.txt index bbdd236afd8..1588e349e72 100644 --- a/forge-gui/res/cardsfolder/f/feral_deathgorger_dusk_sight.txt +++ b/forge-gui/res/cardsfolder/f/feral_deathgorger_dusk_sight.txt @@ -5,7 +5,7 @@ PT:3/5 K:Flying K:Deathtouch T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When this creature enters, exile up to two target cards from a single graveyard. -SVar:TrigExile:DB$ ChangeZone | TargetMin$ 0 | TargetMax$ 2 | TargetsFromSingleZone$ True | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Card +SVar:TrigExile:DB$ ChangeZone | TargetMin$ 0 | TargetMax$ 2 | TargetsWithSameController$ True | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Card AlternateMode:Omen Oracle:Flying, deathtouch\nWhen this creature enters, exile up to two target cards from a single graveyard. diff --git a/forge-gui/res/cardsfolder/g/gravegouger.txt b/forge-gui/res/cardsfolder/g/gravegouger.txt index 009cc72f4c2..dcf6ec9b658 100644 --- a/forge-gui/res/cardsfolder/g/gravegouger.txt +++ b/forge-gui/res/cardsfolder/g/gravegouger.txt @@ -4,6 +4,6 @@ Types:Creature Nightmare Horror PT:2/2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters, exile up to two target cards from a single graveyard. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigReturn | TriggerDescription$ When CARDNAME leaves the battlefield, return the exiled cards to their owner's graveyard. -SVar:TrigExile:DB$ ChangeZone | TargetMin$ 0 | TargetMax$ 2 | TargetsFromSingleZone$ True | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Card | RememberTargets$ True | ForgetOtherTargets$ True +SVar:TrigExile:DB$ ChangeZone | TargetMin$ 0 | TargetMax$ 2 | TargetsWithSameController$ True | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Card | RememberTargets$ True | ForgetOtherTargets$ True SVar:TrigReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Graveyard Oracle:When Gravegouger enters, exile up to two target cards from a single graveyard.\nWhen Gravegouger leaves the battlefield, return the exiled cards to their owner's graveyard. diff --git a/forge-gui/res/cardsfolder/g/griffnaut_tracker.txt b/forge-gui/res/cardsfolder/g/griffnaut_tracker.txt index 99e6f0c2a7d..9bd4213d0f7 100644 --- a/forge-gui/res/cardsfolder/g/griffnaut_tracker.txt +++ b/forge-gui/res/cardsfolder/g/griffnaut_tracker.txt @@ -4,6 +4,6 @@ Types:Creature Human Detective PT:3/2 K:Flying T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters, exile up to two target cards from a single graveyard. -SVar:TrigChange:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | TargetMin$ 0 | TargetMax$ 2 | TargetsFromSingleZone$ True | ValidTgts$ Card | TgtPrompt$ Select up to two target cards from a single graveyard +SVar:TrigChange:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | TargetMin$ 0 | TargetMax$ 2 | TargetsWithSameController$ True | ValidTgts$ Card | TgtPrompt$ Select up to two target cards from a single graveyard DeckHas:Ability$Graveyard Oracle:Flying\nWhen Griffnaut Tracker enters, exile up to two target cards from a single graveyard. diff --git a/forge-gui/res/cardsfolder/k/kaya_orzhov_usurper.txt b/forge-gui/res/cardsfolder/k/kaya_orzhov_usurper.txt index 3163e6632ab..57a36d47d94 100644 --- a/forge-gui/res/cardsfolder/k/kaya_orzhov_usurper.txt +++ b/forge-gui/res/cardsfolder/k/kaya_orzhov_usurper.txt @@ -2,7 +2,7 @@ Name:Kaya, Orzhov Usurper ManaCost:1 W B Types:Legendary Planeswalker Kaya Loyalty:3 -A:AB$ ChangeZone | Cost$ AddCounter<1/LOYALTY> | Origin$ Graveyard | Destination$ Exile | TargetMin$ 0 | TargetMax$ 2 | TargetsFromSingleZone$ True | ValidTgts$ Card | TgtPrompt$ Select target card from a graveyard | Planeswalker$ True | SubAbility$ DBGainLife | RememberChanged$ True | SpellDescription$ Exile up to two target cards from a single graveyard. You gain 2 life if at least one creature card was exiled this way. +A:AB$ ChangeZone | Cost$ AddCounter<1/LOYALTY> | Origin$ Graveyard | Destination$ Exile | TargetMin$ 0 | TargetMax$ 2 | TargetsWithSameController$ True | ValidTgts$ Card | TgtPrompt$ Select target card from a graveyard | Planeswalker$ True | SubAbility$ DBGainLife | RememberChanged$ True | SpellDescription$ Exile up to two target cards from a single graveyard. You gain 2 life if at least one creature card was exiled this way. SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 2 | ConditionDefined$ Remembered | ConditionPresent$ Creature | ConditionCompare$ GE1 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True A:AB$ ChangeZone | Cost$ SubCounter<1/LOYALTY> | Planeswalker$ True | Origin$ Battlefield | Destination$ Exile | TgtPrompt$ Choose target nonland permanent with mana value 1 or less | ValidTgts$ Permanent.nonLand+cmcLE1 | SpellDescription$ Exile target nonland permanent with mana value 1 or less. diff --git a/forge-gui/res/cardsfolder/l/lodestone_bauble.txt b/forge-gui/res/cardsfolder/l/lodestone_bauble.txt index 7a9447444e1..d211d4879da 100644 --- a/forge-gui/res/cardsfolder/l/lodestone_bauble.txt +++ b/forge-gui/res/cardsfolder/l/lodestone_bauble.txt @@ -1,7 +1,7 @@ Name:Lodestone Bauble ManaCost:0 Types:Artifact -A:AB$ ChangeZone | Cost$ 1 T Sac<1/CARDNAME> | TargetMin$ 0 | TargetMax$ 4 | TargetsFromSingleZone$ True | Origin$ Graveyard | Destination$ Library | LibraryPosition$ 0 | TgtPrompt$ Choose target basic land card in a graveyard | ValidTgts$ Land.Basic | Chooser$ You | SubAbility$ ChooseZero | SpellDescription$ Put up to four target basic land cards from a player's graveyard on top of their library in any order. That player draws a card at the beginning of the next turn's upkeep. +A:AB$ ChangeZone | Cost$ 1 T Sac<1/CARDNAME> | TargetMin$ 0 | TargetMax$ 4 | TargetsWithSameController$ True | Origin$ Graveyard | Destination$ Library | LibraryPosition$ 0 | TgtPrompt$ Choose target basic land card in a graveyard | ValidTgts$ Land.Basic | Chooser$ You | SubAbility$ ChooseZero | SpellDescription$ Put up to four target basic land cards from a player's graveyard on top of their library in any order. That player draws a card at the beginning of the next turn's upkeep. SVar:ChooseZero:DB$ ChoosePlayer | Choices$ Player | ConditionDefined$ Targeted | ConditionNotPresent$ Card | SubAbility$ DelTrigSlowtrip SVar:DelTrigSlowtrip:DB$ DelayedTrigger | NextTurn$ True | Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | Execute$ DrawSlowtrip | RememberObjects$ TargetedOwner,ChosenPlayer | TriggerDescription$ Draw a card. SVar:DrawSlowtrip:DB$ Draw | NumCards$ 1 | Defined$ DelayTriggerRemembered diff --git a/forge-gui/res/cardsfolder/m/martyr_of_bones.txt b/forge-gui/res/cardsfolder/m/martyr_of_bones.txt index 64b303c4531..fc5c88fd9fa 100644 --- a/forge-gui/res/cardsfolder/m/martyr_of_bones.txt +++ b/forge-gui/res/cardsfolder/m/martyr_of_bones.txt @@ -2,7 +2,7 @@ Name:Martyr of Bones ManaCost:B Types:Creature Human Wizard PT:1/1 -A:AB$ ChangeZone | Cost$ 1 Reveal Sac<1/CARDNAME> | CostDesc$ {1}, Reveal X black cards from your hand, Sacrifice CARDNAME: | Origin$ Graveyard | TargetsFromSingleZone$ True | Destination$ Exile | TargetMin$ 0 | TargetMax$ Y | ValidTgts$ Card | SpellDescription$ Exile up to X target cards from a single graveyard. +A:AB$ ChangeZone | Cost$ 1 Reveal Sac<1/CARDNAME> | CostDesc$ {1}, Reveal X black cards from your hand, Sacrifice CARDNAME: | Origin$ Graveyard | TargetsWithSameController$ True | Destination$ Exile | TargetMin$ 0 | TargetMax$ Y | ValidTgts$ Card | SpellDescription$ Exile up to X target cards from a single graveyard. SVar:X:TargetedObjects$Amount SVar:Y:Count$ValidHand Card.Black+YouOwn AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/p/pestilent_cauldron_restorative_burst.txt b/forge-gui/res/cardsfolder/p/pestilent_cauldron_restorative_burst.txt index e5305fb1f01..b79687adb06 100644 --- a/forge-gui/res/cardsfolder/p/pestilent_cauldron_restorative_burst.txt +++ b/forge-gui/res/cardsfolder/p/pestilent_cauldron_restorative_burst.txt @@ -3,7 +3,7 @@ ManaCost:2 B Types:Artifact A:AB$ Token | Cost$ T Discard<1/Card> | TokenScript$ bg_1_1_pest_lifegain | StackDescription$ SpellDescription | SpellDescription$ Create a 1/1 black and green Pest creature token with "When this creature dies, you gain 1 life." A:AB$ Mill | Cost$ 1 T | Defined$ Opponent | NumCards$ X | SpellDescription$ Each opponent mills cards equal to the amount of life you gained this turn. -A:AB$ ChangeZone | Cost$ 4 T | TargetMin$ 4 | TargetMax$ 4 | TargetsFromSingleZone$ True | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Choose four target cards from a single graveyard | ValidTgts$ Card | SubAbility$ DBDraw | StackDescription$ Exile four target cards from a single graveyard. ({c:Targeted}) | SpellDescription$ Exile four target cards from a single graveyard. +A:AB$ ChangeZone | Cost$ 4 T | TargetMin$ 4 | TargetMax$ 4 | TargetsWithSameController$ True | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Choose four target cards from a single graveyard | ValidTgts$ Card | SubAbility$ DBDraw | StackDescription$ Exile four target cards from a single graveyard. ({c:Targeted}) | SpellDescription$ Exile four target cards from a single graveyard. SVar:DBDraw:DB$ Draw | SpellDescription$ Draw a card. SVar:X:Count$LifeYouGainedThisTurn DeckHas:Ability$Discard|Token|LifeGain|Mill|Graveyard diff --git a/forge-gui/res/cardsfolder/p/push_pull.txt b/forge-gui/res/cardsfolder/p/push_pull.txt index ad6e04791fb..a3ada4eac40 100644 --- a/forge-gui/res/cardsfolder/p/push_pull.txt +++ b/forge-gui/res/cardsfolder/p/push_pull.txt @@ -11,6 +11,6 @@ ALTERNATE Name:Pull ManaCost:4 BR BR Types:Sorcery -A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | TargetMin$ 0 | TargetMax$ 2 | TargetsFromSingleZone$ True | ValidTgts$ Creature | TgtPrompt$ Select up to two target creature cards from a single graveyard | GainControl$ True | SubAbility$ DBPump | SpellDescription$ Put up to two target creature cards from a single graveyard onto the battlefield under your control. They gain haste until end of turn. Sacrifice them at the beginning of the next end step. +A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | TargetMin$ 0 | TargetMax$ 2 | TargetsWithSameController$ True | ValidTgts$ Creature | TgtPrompt$ Select up to two target creature cards from a single graveyard | GainControl$ True | SubAbility$ DBPump | SpellDescription$ Put up to two target creature cards from a single graveyard onto the battlefield under your control. They gain haste until end of turn. Sacrifice them at the beginning of the next end step. SVar:DBPump:DB$ Pump | Defined$ Targeted | KW$ Haste | AtEOT$ Sacrifice Oracle:Put up to two target creature cards from a single graveyard onto the battlefield under your control. They gain haste until end of turn. Sacrifice them at the beginning of the next end step. diff --git a/forge-gui/res/cardsfolder/q/qutrub_forayer.txt b/forge-gui/res/cardsfolder/q/qutrub_forayer.txt index b0607fbdbd2..d9d08599d7f 100644 --- a/forge-gui/res/cardsfolder/q/qutrub_forayer.txt +++ b/forge-gui/res/cardsfolder/q/qutrub_forayer.txt @@ -5,5 +5,5 @@ PT:3/2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigCharm | TriggerDescription$ When this creature enters, ABILITY SVar:TrigCharm:DB$ Charm | Choices$ DBDestroy,DBExile SVar:DBDestroy:DB$ Destroy | ValidTgts$ Creature.wasDealtDamageThisTurn | TgtPrompt$ Select target creature that was dealt damage this turn | SpellDescription$ Destroy target creature that was dealt damage this turn. -SVar:DBExile:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | TargetMin$ 0 | TargetMax$ 2 | TargetsFromSingleZone$ True | ValidTgts$ Card | TgtPrompt$ Select up to two target cards from a single graveyard | SpellDescription$ Exile up to two target cards from a single graveyard. +SVar:DBExile:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | TargetMin$ 0 | TargetMax$ 2 | TargetsWithSameController$ True | ValidTgts$ Card | TgtPrompt$ Select up to two target cards from a single graveyard | SpellDescription$ Exile up to two target cards from a single graveyard. Oracle:When this creature enters, choose one —\n• Destroy target creature that was dealt damage this turn.\n• Exile up to two target cards from a single graveyard. diff --git a/forge-gui/res/cardsfolder/r/rag_dealer.txt b/forge-gui/res/cardsfolder/r/rag_dealer.txt index 0ba8318a893..2c68ab199cf 100644 --- a/forge-gui/res/cardsfolder/r/rag_dealer.txt +++ b/forge-gui/res/cardsfolder/r/rag_dealer.txt @@ -2,5 +2,5 @@ Name:Rag Dealer ManaCost:B Types:Creature Human Rogue PT:1/1 -A:AB$ ChangeZone | Cost$ 2 B T | TargetMin$ 0 | TargetMax$ 3 | TargetsFromSingleZone$ True | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Choose target card in a graveyard | ValidTgts$ Card | SpellDescription$ Exile up to three target cards from a single graveyard. +A:AB$ ChangeZone | Cost$ 2 B T | TargetMin$ 0 | TargetMax$ 3 | TargetsWithSameController$ True | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Choose target card in a graveyard | ValidTgts$ Card | SpellDescription$ Exile up to three target cards from a single graveyard. Oracle:{2}{B}, {T}: Exile up to three target cards from a single graveyard. diff --git a/forge-gui/res/cardsfolder/r/rapid_decay.txt b/forge-gui/res/cardsfolder/r/rapid_decay.txt index 57bf8fd9676..56ca750004b 100644 --- a/forge-gui/res/cardsfolder/r/rapid_decay.txt +++ b/forge-gui/res/cardsfolder/r/rapid_decay.txt @@ -1,7 +1,7 @@ Name:Rapid Decay ManaCost:1 B Types:Instant -A:SP$ ChangeZone | TargetMin$ 0 | TargetMax$ 3 | TargetsFromSingleZone$ True | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Choose target card in a graveyard | ValidTgts$ Card | SpellDescription$ Exile up to three target cards from a single graveyard. +A:SP$ ChangeZone | TargetMin$ 0 | TargetMax$ 3 | TargetsWithSameController$ True | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Choose target card in a graveyard | ValidTgts$ Card | SpellDescription$ Exile up to three target cards from a single graveyard. K:Cycling:2 AI:RemoveDeck:All Oracle:Exile up to three target cards from a single graveyard.\nCycling {2} ({2}, Discard this card: Draw a card.) diff --git a/forge-gui/res/cardsfolder/r/rats_feast.txt b/forge-gui/res/cardsfolder/r/rats_feast.txt index ce40837e24f..71c21fcede6 100644 --- a/forge-gui/res/cardsfolder/r/rats_feast.txt +++ b/forge-gui/res/cardsfolder/r/rats_feast.txt @@ -1,7 +1,7 @@ Name:Rats' Feast ManaCost:X B Types:Sorcery -A:SP$ ChangeZone | TargetMin$ X | TargetMax$ X | TargetsFromSingleZone$ True | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Choose X target cards in a single graveyard | ValidTgts$ Card | StackDescription$ Exile {c:Targeted}. | SpellDescription$ Exile X target cards from a single graveyard. +A:SP$ ChangeZone | TargetMin$ X | TargetMax$ X | TargetsWithSameController$ True | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Choose X target cards in a single graveyard | ValidTgts$ Card | StackDescription$ Exile {c:Targeted}. | SpellDescription$ Exile X target cards from a single graveyard. SVar:X:Count$xPaid AI:RemoveDeck:All AI:RemoveDeck:Random diff --git a/forge-gui/res/cardsfolder/r/retribution.txt b/forge-gui/res/cardsfolder/r/retribution.txt index 0fd9510a962..cfd685751e3 100644 --- a/forge-gui/res/cardsfolder/r/retribution.txt +++ b/forge-gui/res/cardsfolder/r/retribution.txt @@ -1,7 +1,7 @@ Name:Retribution ManaCost:2 R R Types:Sorcery -A:SP$ Pump | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select two target creatures an opponent controls | TargetMin$ 2 | TargetMax$ 2 | TargetsFromSingleZone$ True | IsCurse$ True | RememberTargets$ True | SubAbility$ DBChoose | StackDescription$ SpellDescription | SpellDescription$ Choose two target creatures an opponent controls. That player chooses and sacrifices one of those creatures. Put a -1/-1 counter on the other. +A:SP$ Pump | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select two target creatures an opponent controls | TargetMin$ 2 | TargetMax$ 2 | TargetsWithSameController$ True | IsCurse$ True | RememberTargets$ True | SubAbility$ DBChoose | StackDescription$ SpellDescription | SpellDescription$ Choose two target creatures an opponent controls. That player chooses and sacrifices one of those creatures. Put a -1/-1 counter on the other. SVar:DBChoose:DB$ ChooseCard | Defined$ TargetedController | Mandatory$ True | Choices$ Creature.IsRemembered | ChoiceTitle$ Choose one to sacrifice | ForgetChosen$ True | AILogic$ WorstCard | SubAbility$ DBSac | StackDescription$ None SVar:DBSac:DB$ SacrificeAll | Defined$ ChosenCard | SubAbility$ DBPutCounter | StackDescription$ None SVar:DBPutCounter:DB$ PutCounter | Defined$ Remembered | CounterType$ M1M1 | CounterNum$ 1 | StackDescription$ None | SubAbility$ DBCleanup diff --git a/forge-gui/res/cardsfolder/s/scarab_feast.txt b/forge-gui/res/cardsfolder/s/scarab_feast.txt index d70adde5db5..6cb39a16508 100644 --- a/forge-gui/res/cardsfolder/s/scarab_feast.txt +++ b/forge-gui/res/cardsfolder/s/scarab_feast.txt @@ -1,6 +1,6 @@ Name:Scarab Feast ManaCost:B Types:Instant -A:SP$ ChangeZone | TargetMin$ 0 | TargetMax$ 3 | TargetsFromSingleZone$ True | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Choose target card in a graveyard | ValidTgts$ Card | SpellDescription$ Exile up to three target cards from a single graveyard. +A:SP$ ChangeZone | TargetMin$ 0 | TargetMax$ 3 | TargetsWithSameController$ True | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Choose target card in a graveyard | ValidTgts$ Card | SpellDescription$ Exile up to three target cards from a single graveyard. K:Cycling:B Oracle:Exile up to three target cards from a single graveyard.\nCycling {B} ({B}, Discard this card: Draw a card.) diff --git a/forge-gui/res/cardsfolder/s/serene_remembrance.txt b/forge-gui/res/cardsfolder/s/serene_remembrance.txt index 5428e2e7cc0..55af0dc7bea 100644 --- a/forge-gui/res/cardsfolder/s/serene_remembrance.txt +++ b/forge-gui/res/cardsfolder/s/serene_remembrance.txt @@ -2,7 +2,7 @@ Name:Serene Remembrance ManaCost:G Types:Sorcery A:SP$ ChangeZone | Origin$ Stack | Destination$ Library | Shuffle$ False | RememberChanged$ True | Defined$ Self | SubAbility$ DBShuffleGrave | SpellDescription$ Shuffle CARDNAME and up to three target cards from a single graveyard into their owners' libraries. -SVar:DBShuffleGrave:DB$ ChangeZone | TargetMin$ 0 | TargetMax$ 3 | TargetsFromSingleZone$ True | TgtPrompt$ Choose target card in a graveyard | ValidTgts$ Card.Other | Origin$ Graveyard | Destination$ Library | Shuffle$ False | RememberChanged$ True | SubAbility$ DBShuffleChanged +SVar:DBShuffleGrave:DB$ ChangeZone | TargetMin$ 0 | TargetMax$ 3 | TargetsWithSameController$ True | TgtPrompt$ Choose target card in a graveyard | ValidTgts$ Card.Other | Origin$ Graveyard | Destination$ Library | Shuffle$ False | RememberChanged$ True | SubAbility$ DBShuffleChanged SVar:DBShuffleChanged:DB$ Shuffle | Defined$ RememberedOwner | SubAbility$ DBCleanup | StackDescription$ None SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True Oracle:Shuffle Serene Remembrance and up to three target cards from a single graveyard into their owners' libraries. diff --git a/forge-gui/res/cardsfolder/s/shred_memory.txt b/forge-gui/res/cardsfolder/s/shred_memory.txt index 2308ffb5e9e..85e7a30b00c 100644 --- a/forge-gui/res/cardsfolder/s/shred_memory.txt +++ b/forge-gui/res/cardsfolder/s/shred_memory.txt @@ -1,7 +1,7 @@ Name:Shred Memory ManaCost:1 B Types:Instant -A:SP$ ChangeZone | TargetMin$ 0 | TargetMax$ 4 | TargetsFromSingleZone$ True | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Choose target card in a graveyard | ValidTgts$ Card | SpellDescription$ Exile up to four target cards from a single graveyard. +A:SP$ ChangeZone | TargetMin$ 0 | TargetMax$ 4 | TargetsWithSameController$ True | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Choose target card in a graveyard | ValidTgts$ Card | SpellDescription$ Exile up to four target cards from a single graveyard. K:Transmute:1 B B AI:RemoveDeck:All Oracle:Exile up to four target cards from a single graveyard.\nTransmute {1}{B}{B} ({1}{B}{B}, Discard this card: Search your library for a card with the same mana value as this card, reveal it, put it into your hand, then shuffle. Transmute only as a sorcery.) diff --git a/forge-gui/res/cardsfolder/s/sorrows_path.txt b/forge-gui/res/cardsfolder/s/sorrows_path.txt index 8c9de22e45b..d4ab2064bf1 100644 --- a/forge-gui/res/cardsfolder/s/sorrows_path.txt +++ b/forge-gui/res/cardsfolder/s/sorrows_path.txt @@ -1,7 +1,7 @@ Name:Sorrow's Path ManaCost:no cost Types:Land -A:AB$ SwitchBlock | Cost$ T | TargetMin$ 2 | TargetMax$ 2 | ValidTgts$ Creature.blocking+OppCtrl | TargetsFromSingleZone$ True | DefinedAttacker$ Valid Creature.blockedByValidThisTurn Targeted | DefinedBlocker$ Targeted | RemoveFromCombat$ True | TgtPrompt$ Choose two target blocking creatures an opponent controls | SpellDescription$ Choose two target blocking creatures an opponent controls. If each of those creatures could block all creatures that the other is blocking, remove both of them from combat. Each one then blocks all creatures the other was blocking. | StackDescription$ SpellDescription +A:AB$ SwitchBlock | Cost$ T | TargetMin$ 2 | TargetMax$ 2 | ValidTgts$ Creature.blocking+OppCtrl | TargetsWithSameController$ True | DefinedAttacker$ Valid Creature.blockedByValidThisTurn Targeted | DefinedBlocker$ Targeted | RemoveFromCombat$ True | TgtPrompt$ Choose two target blocking creatures an opponent controls | SpellDescription$ Choose two target blocking creatures an opponent controls. If each of those creatures could block all creatures that the other is blocking, remove both of them from combat. Each one then blocks all creatures the other was blocking. | StackDescription$ SpellDescription T:Mode$ Taps | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ Whenever CARDNAME becomes tapped, it deals 2 damage to you and each creature you control. SVar:TrigDamage:DB$ DamageAll | ValidCards$ Creature.YouCtrl | ValidPlayers$ You | NumDmg$ 2 AI:RemoveDeck:Random diff --git a/forge-gui/res/cardsfolder/s/soul_shackled_zombie.txt b/forge-gui/res/cardsfolder/s/soul_shackled_zombie.txt index 1eb17099201..e79c0803aae 100644 --- a/forge-gui/res/cardsfolder/s/soul_shackled_zombie.txt +++ b/forge-gui/res/cardsfolder/s/soul_shackled_zombie.txt @@ -3,7 +3,7 @@ ManaCost:3 B Types:Creature Zombie PT:4/2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When this creature enters, exile up to two target cards from a single graveyard. If at least one creature card was exiled this way, each opponent loses 2 life and you gain 2 life. -SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Card | TargetMin$ 0 | TargetMax$ 2 | TargetsFromSingleZone$ True | TgtPrompt$ Select target card in a graveyard to exile | RememberChanged$ True | SubAbility$ DBLoseLife +SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Card | TargetMin$ 0 | TargetMax$ 2 | TargetsWithSameController$ True | TgtPrompt$ Select target card in a graveyard to exile | RememberChanged$ True | SubAbility$ DBLoseLife SVar:DBLoseLife:DB$ LoseLife | Defined$ Player.Opponent | LifeAmount$ 2 | ConditionDefined$ Remembered | ConditionPresent$ Card.Creature | SubAbility$ DBGainLife SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 2 | ConditionDefined$ Remembered | ConditionPresent$ Card.Creature | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/s/spellweaver_helix.txt b/forge-gui/res/cardsfolder/s/spellweaver_helix.txt index f4232c91811..c3819f7cbf3 100644 --- a/forge-gui/res/cardsfolder/s/spellweaver_helix.txt +++ b/forge-gui/res/cardsfolder/s/spellweaver_helix.txt @@ -2,7 +2,7 @@ Name:Spellweaver Helix ManaCost:3 Types:Artifact T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigSpellweaverExile | OptionalDecider$ You | TriggerDescription$ Imprint — When CARDNAME enters, you may exile two target sorcery cards from a single graveyard. -SVar:TrigSpellweaverExile:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | TargetsFromSingleZone$ True | ValidTgts$ Card.Sorcery | TargetMin$ 2 | TargetMax$ 2 | TgtPrompt$ Select two target sorcery cards from a single graveyard | Imprint$ True | SpellDescription$ Exile two sorcery cards from a single graveyard. +SVar:TrigSpellweaverExile:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | TargetsWithSameController$ True | ValidTgts$ Card.Sorcery | TargetMin$ 2 | TargetMax$ 2 | TgtPrompt$ Select two target sorcery cards from a single graveyard | Imprint$ True | SpellDescription$ Exile two sorcery cards from a single graveyard. T:Mode$ SpellCast | ValidCard$ Card.sharesNameWith Imprinted+!token | Execute$ TrigSpellweaverCopy | OptionalDecider$ You | TriggerZones$ Battlefield | TriggerDescription$ Whenever a player casts a card, if it has the same name as one of the cards exiled with CARDNAME, you may copy the other. If you do, you may cast the copy without paying its mana cost. SVar:TrigSpellweaverCopy:DB$ Play | Defined$ ValidExile Card.IsImprinted+!sharesNameWith TriggeredCard | ValidSA$ Spell | WithoutManaCost$ True | Optional$ True | CopyCard$ True | ConditionPresent$ Card.IsImprinted+sharesNameWith TriggeredCard | ConditionZone$ Exile | ConditionCompare$ EQ1 | SubAbility$ TrigSpellweaverCopySame SVar:TrigSpellweaverCopySame:DB$ Play | Defined$ ValidExile Card.IsImprinted | ValidSA$ Spell | WithoutManaCost$ True | Optional$ True | CopyCard$ True | ConditionPresent$ Card.IsImprinted+sharesNameWith TriggeredCard | ConditionZone$ Exile | ConditionCompare$ EQ2 diff --git a/forge-gui/res/cardsfolder/t/trial_of_agony.txt b/forge-gui/res/cardsfolder/t/trial_of_agony.txt index 14aa709be91..b464a3d01b8 100644 --- a/forge-gui/res/cardsfolder/t/trial_of_agony.txt +++ b/forge-gui/res/cardsfolder/t/trial_of_agony.txt @@ -1,9 +1,8 @@ Name:Trial of Agony ManaCost:R Types:Sorcery -A:SP$ Pump | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select two target creatures controlled by the same opponent | TargetMin$ 2 | TargetMax$ 2 | TargetsFromSingleZone$ True | IsCurse$ True | RememberTargets$ True | SubAbility$ DBChoose | StackDescription$ SpellDescription | SpellDescription$ Choose two target creatures controlled by the same opponent. That player chooses one of those creatures. CARDNAME deals 5 damage to that creature, and the other can't block this turn. -SVar:DBChoose:DB$ ChooseCard | Defined$ TargetedController | Mandatory$ True | Choices$ Creature.IsRemembered | ChoiceTitle$ Choose one to take 5 damage | ForgetChosen$ True | SubAbility$ DBDealDamage +A:SP$ Pump | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select two target creatures controlled by the same opponent | TargetMin$ 2 | TargetMax$ 2 | TargetsWithSameController$ True | IsCurse$ True | SubAbility$ DBChoose | StackDescription$ SpellDescription | SpellDescription$ Choose two target creatures controlled by the same opponent. That player chooses one of those creatures. CARDNAME deals 5 damage to that creature, and the other can't block this turn. +SVar:DBChoose:DB$ ChooseCard | Defined$ TargetedController | Mandatory$ True | Choices$ Creature.targetedBy | ChoiceTitle$ Choose one to take 5 damage | SubAbility$ DBDealDamage SVar:DBDealDamage:DB$ DealDamage | NumDmg$ 5 | Defined$ ChosenCard | SubAbility$ DBCantBlock -SVar:DBCantBlock:DB$ Pump | Defined$ Remembered | KW$ HIDDEN CARDNAME can't block. | SubAbility$ DBCleanup -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:DBCantBlock:DB$ Pump | Defined$ Remembered.!ChosenCard | KW$ HIDDEN CARDNAME can't block. Oracle:Choose two target creatures controlled by the same opponent. That player chooses one of those creatures. Trial of Agony deals 5 damage to that creature, and the other can't block this turn. diff --git a/forge-gui/res/cardsfolder/u/unlicensed_hearse.txt b/forge-gui/res/cardsfolder/u/unlicensed_hearse.txt index aef7be0e981..2f2b45be2b8 100644 --- a/forge-gui/res/cardsfolder/u/unlicensed_hearse.txt +++ b/forge-gui/res/cardsfolder/u/unlicensed_hearse.txt @@ -2,7 +2,7 @@ Name:Unlicensed Hearse ManaCost:2 Types:Artifact Vehicle PT:*/* -A:AB$ ChangeZone | Cost$ T | TargetMin$ 0 | TargetMax$ 2 | TargetsFromSingleZone$ True | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Select up to two target cards in a graveyard | ValidTgts$ Card | SpellDescription$ Exile up to two target cards from a single graveyard. +A:AB$ ChangeZone | Cost$ T | TargetMin$ 0 | TargetMax$ 2 | TargetsWithSameController$ True | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Select up to two target cards in a graveyard | ValidTgts$ Card | SpellDescription$ Exile up to two target cards from a single graveyard. S:Mode$ Continuous | Affected$ Card.Self | SetPower$ X | SetToughness$ X | Description$ CARDNAME's power and toughness are each equal to the number of cards exiled with it. SVar:X:Count$ValidExile Card.ExiledWithSource K:Crew:2 diff --git a/forge-gui/res/cardsfolder/w/waste_management.txt b/forge-gui/res/cardsfolder/w/waste_management.txt index 9237fb2c9d5..2d9013edbce 100644 --- a/forge-gui/res/cardsfolder/w/waste_management.txt +++ b/forge-gui/res/cardsfolder/w/waste_management.txt @@ -2,7 +2,7 @@ Name:Waste Management ManaCost:2 B Types:Instant K:Kicker:3 B -A:SP$ ChangeZone | TargetMin$ 0 | TargetMax$ X | TargetsFromSingleZone$ True | Origin$ Graveyard | Destination$ Exile | RememberChanged$ True | AITgts$ Creature | ValidTgts$ Card | TgtPrompt$ Choose up to two target cards in a single graveyard | SubAbility$ ExileGrave | SpellDescription$ Exile up to two target cards from a single graveyard. +A:SP$ ChangeZone | TargetMin$ 0 | TargetMax$ X | TargetsWithSameController$ True | Origin$ Graveyard | Destination$ Exile | RememberChanged$ True | AITgts$ Creature | ValidTgts$ Card | TgtPrompt$ Choose up to two target cards in a single graveyard | SubAbility$ ExileGrave | SpellDescription$ Exile up to two target cards from a single graveyard. SVar:ExileGrave:DB$ ChangeZoneAll | TargetMin$ Y | TargetMax$ Y | ValidTgts$ Player | Origin$ Graveyard | Destination$ Exile | ChangeType$ Card | RememberChanged$ True | SubAbility$ DBToken | SpellDescription$ If this spell was kicked, instead exile target player's graveyard. SVar:DBToken:DB$ Token | TokenAmount$ Z | TokenScript$ b_2_2_rogue | SubAbility$ DBCleanup | SpellDescription$ Create a 2/2 black Rogue creature token for each creature card exiled this way. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectTargets.java b/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectTargets.java index f21d31b8e76..95b09fa716e 100644 --- a/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectTargets.java +++ b/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectTargets.java @@ -179,12 +179,6 @@ public final class InputSelectTargets extends InputSyncronizedBase { return false; } - // If all cards must be from the same zone - if (tgt.isSingleZone() && lastTarget != null && !card.getController().equals(lastTarget.getController())) { - showMessage(sa.getHostCard() + " - Cannot target this card (not in the same zone)"); - return false; - } - // If the cards can't share a creature type if (tgt.isWithoutSameCreatureType() && lastTarget != null && card.sharesCreatureTypeWith(lastTarget)) { showMessage(sa.getHostCard() + " - Cannot target this card (should not share a creature type)"); diff --git a/forge-gui/src/main/java/forge/player/TargetSelection.java b/forge-gui/src/main/java/forge/player/TargetSelection.java index 2521a39d04b..0f6ac9e50df 100644 --- a/forge-gui/src/main/java/forge/player/TargetSelection.java +++ b/forge-gui/src/main/java/forge/player/TargetSelection.java @@ -81,7 +81,6 @@ public class TargetSelection { final int maxTargets = numTargets != null ? numTargets : ability.getMaxTargets(); //final int maxTotalCMC = tgt.getMaxTotalCMC(ability.getHostCard(), ability); final int numTargeted = ability.getTargets().size(); - final boolean isSingleZone = tgt.isSingleZone(); final boolean hasEnoughTargets = minTargets == 0 || numTargeted >= minTargets; final boolean hasAllTargets = numTargeted == maxTargets && maxTargets > 0; @@ -149,19 +148,6 @@ public class TargetSelection { validTargets = new CardCollection(IterableUtil.filter(validTargets, filter)); } - // single zone - if (isSingleZone) { - final List removeCandidates = new ArrayList<>(); - final Card firstTgt = ability.getTargetCard(); - if (firstTgt != null) { - for (Card t : validTargets) { - if (!t.getController().equals(firstTgt.getController())) { - removeCandidates.add(t); - } - } - validTargets.removeAll(removeCandidates); - } - } if (validTargets.isEmpty()) { // If all targets are filtered after applying MustTarget static ability, the spell can't be cast or the ability can't be activated if (mustTargetFiltered) { From 1c7bc1c0d353483835e4462beb0e91b8d5be98b2 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Thu, 18 Sep 2025 19:27:55 +0800 Subject: [PATCH 217/355] remove duplicated code and minor format --- forge-gui-mobile/src/forge/Forge.java | 3 + .../screens/match/views/VCardDisplayArea.java | 2 +- .../src/forge/screens/match/views/VField.java | 2 +- .../forge/screens/match/views/VManaPool.java | 24 +- .../screens/match/views/VPlayerPanel.java | 228 ++++++++++-------- 5 files changed, 140 insertions(+), 119 deletions(-) diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index 2495d2d2276..70baa9480c6 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -269,6 +269,9 @@ public class Forge implements ApplicationListener { default -> Forge.altZoneTabs = false; } } + public static boolean isHorizontalTabLayout() { + return Forge.altZoneTabs && "Horizontal".equalsIgnoreCase(Forge.altZoneTabMode); + } public static boolean hasGamepad() { //Classic Mode Various Screen GUI are not yet supported, needs control mapping for each screens if (isMobileAdventureMode) { diff --git a/forge-gui-mobile/src/forge/screens/match/views/VCardDisplayArea.java b/forge-gui-mobile/src/forge/screens/match/views/VCardDisplayArea.java index 31cbec17e79..5e489265129 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VCardDisplayArea.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VCardDisplayArea.java @@ -54,7 +54,7 @@ public abstract class VCardDisplayArea extends VDisplayArea implements ActivateH } private float getCardStackOffset() { - if (Forge.altZoneTabs && "Horizontal".equalsIgnoreCase(Forge.altZoneTabMode)) + if (Forge.isHorizontalTabLayout()) return 0.125f; return CARD_STACK_OFFSET; } diff --git a/forge-gui-mobile/src/forge/screens/match/views/VField.java b/forge-gui-mobile/src/forge/screens/match/views/VField.java index 9ab116b7963..c562bc5c832 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VField.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VField.java @@ -245,7 +245,7 @@ public class VField extends FContainer { y1 = 0; y2 = cardSize; } - if (Forge.altZoneTabs && "Horizontal".equalsIgnoreCase(Forge.altZoneTabMode)) { + if (Forge.isHorizontalTabLayout()) { row1.setBounds(0, y1, width, cardSize); row2.setBounds(0, y2, width, cardSize); } else { diff --git a/forge-gui-mobile/src/forge/screens/match/views/VManaPool.java b/forge-gui-mobile/src/forge/screens/match/views/VManaPool.java index 1d4f8964cfb..57a13b759d0 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VManaPool.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VManaPool.java @@ -28,6 +28,7 @@ public class VManaPool extends VDisplayArea { return FSkinColor.get(Colors.ADV_CLR_TEXT); return FSkinColor.get(Colors.CLR_TEXT); } + private static final FSkinFont FONT = FSkinFont.get(16); private final PlayerView player; @@ -37,7 +38,7 @@ public class VManaPool extends VDisplayArea { public VManaPool(PlayerView player0) { player = player0; - addManaLabel(FSkinProp.IMG_MANA_COLORLESS, (byte)ManaAtom.COLORLESS); + addManaLabel(FSkinProp.IMG_MANA_COLORLESS, (byte) ManaAtom.COLORLESS); addManaLabel(FSkinProp.IMG_MANA_W, MagicColor.WHITE); addManaLabel(FSkinProp.IMG_MANA_U, MagicColor.BLUE); addManaLabel(FSkinProp.IMG_MANA_B, MagicColor.BLACK); @@ -79,13 +80,11 @@ public class VManaPool extends VDisplayArea { if (++count % 2 == 0) { x = 0; y += labelHeight; - } - else { + } else { x += labelWidth; } } - } - else { + } else { float labelWidth = visibleWidth / manaLabels.size(); float labelHeight = visibleHeight; @@ -113,14 +112,16 @@ public class VManaPool extends VDisplayArea { activate(); return true; } + public void activate() { - if(!(MatchController.instance.getGameController() instanceof PlayerControllerHuman)) + if (!(MatchController.instance.getGameController() instanceof PlayerControllerHuman)) return; PlayerControllerHuman controller = (PlayerControllerHuman) MatchController.instance.getGameController(); final Input ipm = controller.getInputQueue().getInput(); - if(ipm instanceof InputPayMana && ipm.getOwner().equals(player)) + if (ipm instanceof InputPayMana && ipm.getOwner().equals(player)) controller.useMana(colorCode); } + @Override public boolean flick(float x, float y) { if (player.isLobbyPlayer(GamePlayerUtil.getGuiPlayer())) { @@ -146,19 +147,18 @@ public class VManaPool extends VDisplayArea { if (h > maxImageHeight) { h /= 2; } - float w = Forge.altZoneTabs && "Horizontal".equalsIgnoreCase(Forge.altZoneTabMode) - ? image.getWidth() * h * 0.7f / image.getHeight() : image.getWidth() * h / image.getHeight(); + float modifier = Forge.isHorizontalTabLayout() ? 0.7f : 1f; + float w = image.getWidth() * h * modifier / image.getHeight(); while (w > getWidth()) { h /= 2; - w = Forge.altZoneTabs && "Horizontal".equalsIgnoreCase(Forge.altZoneTabMode) - ? image.getWidth() * h * 0.7f / image.getHeight() : image.getWidth() * h / image.getHeight(); + w = image.getWidth() * h * modifier / image.getHeight(); } float x = (getWidth() - w) / 2; float y = gapY + (maxImageHeight - h) / 2; if (isHovered()) g.fillRect(FSkinColor.getStandardColor(50, 200, 150).alphaColor(0.3f), 0, 0, getWidth(), getHeight()); - g.drawImage(image, x, y, w, Forge.altZoneTabs && "Horizontal".equalsIgnoreCase(Forge.altZoneTabMode) ? w : h); + g.drawImage(image, x, y, w, Forge.isHorizontalTabLayout() ? w : h); x = 0; y += h + gapY; diff --git a/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java b/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java index 886c612844f..116af531719 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java @@ -38,21 +38,25 @@ public class VPlayerPanel extends FContainer { private static final FSkinFont LIFE_FONT_ALT = FSkinFont.get(22); private static final FSkinFont INFO_FONT = FSkinFont.get(12); private static final FSkinFont INFO2_FONT = FSkinFont.get(14); + private static FSkinColor getInfoForeColor() { if (Forge.isMobileAdventureMode) return FSkinColor.get(Colors.ADV_CLR_TEXT); return FSkinColor.get(Colors.CLR_TEXT); } + private static FSkinColor getDisplayAreaBackColor() { if (Forge.isMobileAdventureMode) return FSkinColor.get(Colors.ADV_CLR_INACTIVE).alphaColor(0.5f); return FSkinColor.get(Colors.CLR_INACTIVE).alphaColor(0.5f); } + private static FSkinColor getDeliriumHighlight() { if (Forge.isMobileAdventureMode) return FSkinColor.get(Colors.ADV_CLR_PHASE_ACTIVE_ENABLED).alphaColor(0.5f); return FSkinColor.get(Colors.CLR_PHASE_ACTIVE_ENABLED).alphaColor(0.5f); } + private static final float INFO_TAB_PADDING_X = Utils.scale(2); private static final float INFO_TAB_PADDING_Y = Utils.scale(2); @@ -80,11 +84,12 @@ public class VPlayerPanel extends FContainer { public int adjustHeight = 1; private int selected = 0; private boolean isBottomPlayer = false; + public VPlayerPanel(PlayerView player0, boolean showHand, int playerCount) { player = player0; phaseIndicator = add(new VPhaseIndicator()); - if(playerCount > 2){ + if (playerCount > 2) { forMultiPlayer = true; avatarHeight *= 0.5f; //displayAreaHeightFactor *= 0.7f; @@ -129,22 +134,22 @@ public class VPlayerPanel extends FContainer { } public static FSkinImage iconFromZone(ZoneType zoneType) { - switch (zoneType) { - case Hand: return Forge.hdbuttons ? FSkinImage.HDHAND : FSkinImage.HAND; - case Library: return Forge.hdbuttons ? FSkinImage.HDLIBRARY : FSkinImage.LIBRARY; - case Graveyard: return Forge.hdbuttons ? FSkinImage.HDGRAVEYARD : FSkinImage.GRAVEYARD; - case Exile: return Forge.hdbuttons ? FSkinImage.HDEXILE : FSkinImage.EXILE; - case Sideboard: return Forge.hdbuttons ? FSkinImage.HDSIDEBOARD :FSkinImage.SIDEBOARD; - case Flashback: return Forge.hdbuttons ? FSkinImage.HDFLASHBACK :FSkinImage.FLASHBACK; - case Command: return FSkinImage.COMMAND; - case PlanarDeck: return FSkinImage.PLANAR; - case SchemeDeck: return FSkinImage.SCHEME; - case AttractionDeck: return FSkinImage.ATTRACTION; - case ContraptionDeck: return FSkinImage.CONTRAPTION; - case Ante: return FSkinImage.ANTE; - case Junkyard: return FSkinImage.JUNKYARD; - default: return FSkinImage.HDLIBRARY; - } + return switch (zoneType) { + case Hand -> Forge.hdbuttons ? FSkinImage.HDHAND : FSkinImage.HAND; + case Library -> Forge.hdbuttons ? FSkinImage.HDLIBRARY : FSkinImage.LIBRARY; + case Graveyard -> Forge.hdbuttons ? FSkinImage.HDGRAVEYARD : FSkinImage.GRAVEYARD; + case Exile -> Forge.hdbuttons ? FSkinImage.HDEXILE : FSkinImage.EXILE; + case Sideboard -> Forge.hdbuttons ? FSkinImage.HDSIDEBOARD : FSkinImage.SIDEBOARD; + case Flashback -> Forge.hdbuttons ? FSkinImage.HDFLASHBACK : FSkinImage.FLASHBACK; + case Command -> FSkinImage.COMMAND; + case PlanarDeck -> FSkinImage.PLANAR; + case SchemeDeck -> FSkinImage.SCHEME; + case AttractionDeck -> FSkinImage.ATTRACTION; + case ContraptionDeck -> FSkinImage.CONTRAPTION; + case Ante -> FSkinImage.ANTE; + case Junkyard -> FSkinImage.JUNKYARD; + default -> FSkinImage.HDLIBRARY; + }; } public Iterable getTabs() { @@ -156,12 +161,12 @@ public class VPlayerPanel extends FContainer { } public void resetZoneTabs() { - for(InfoTab tab : tabs) + for (InfoTab tab : tabs) tab.reset(); } public void setSelectedZone(ZoneType zoneType) { - if(zoneTabs.containsKey(zoneType)) + if (zoneTabs.containsKey(zoneType)) setSelectedTab(zoneTabs.get(zoneType)); else { extraTab.setActiveZone(zoneType); @@ -194,6 +199,7 @@ public class VPlayerPanel extends FContainer { MatchController.getView().revalidate(); } } + public void setNextSelectedTab(boolean change) { if (change) { if (selectedTab != null) { @@ -212,13 +218,13 @@ public class VPlayerPanel extends FContainer { int numExtraTabs = extraTab.displayAreas.size(); if (selected < 0 || selected >= numTabs + numExtraTabs) selected = 0; - if(selected >= numTabs) { + if (selected >= numTabs) { extraTab.setActiveZoneByIndex(selected - numTabs); setSelectedTab(extraTab); - } - else + } else setSelectedTab(tabs.get(selected)); } + public void closeSelectedTab() { if (selectedTab != null) { selectedTab.setDisplayVisible(false); @@ -239,6 +245,7 @@ public class VPlayerPanel extends FContainer { public boolean isFlipped() { return field.isFlipped(); } + public void setFlipped(boolean flipped0) { field.setFlipped(flipped0); } @@ -259,9 +266,11 @@ public class VPlayerPanel extends FContainer { public VField getField() { return field; } + public VField.FieldRow getSelectedRow() { return selectedRow; } + public void switchRow() { if (selectedRow == field.getRow1()) selectedRow = field.getRow2(); @@ -294,29 +303,27 @@ public class VPlayerPanel extends FContainer { } public void updateZone(ZoneType zoneType) { - if (zoneType == ZoneType.Battlefield ) { + if (zoneType == ZoneType.Battlefield) { field.update(true); - } - else if (zoneType == ZoneType.Command) { + } else if (zoneType == ZoneType.Command) { commandZone.update(); - } - else { - if(zoneTabs.containsKey(zoneType)) + } else { + if (zoneTabs.containsKey(zoneType)) zoneTabs.get(zoneType).update(); - else if(EXTRA_ZONES.contains(zoneType)) { + else if (EXTRA_ZONES.contains(zoneType)) { extraTab.update(zoneType); } //update flashback zone when graveyard, library, exile, or stack zones updated switch (zoneType) { - case Graveyard: - case Library: - case Exile: - case Stack: - zoneTabs.get(ZoneType.Flashback).update(); - break; - default: - break; + case Graveyard: + case Library: + case Exile: + case Stack: + zoneTabs.get(ZoneType.Flashback).update(); + break; + default: + break; } } } @@ -332,7 +339,7 @@ public class VPlayerPanel extends FContainer { float x = avatarHeight; float w = width - avatarHeight; float indicatorScale = 1f; - if(avatarHeight 2) - y += INFO_FONT.getLineHeight()/2; + y += INFO_FONT.getLineHeight() / 2; } else y += lblLife.getHeight(); @@ -421,7 +428,7 @@ public class VPlayerPanel extends FContainer { tab.setBounds(x, y, infoTabWidth, infoTabHeight); y += infoTabHeight; } else { - tab.setBounds(x+width-avatarWidth, yAlt, avatarWidth, infoTabHeightAlt); + tab.setBounds(x + width - avatarWidth, yAlt, avatarWidth, infoTabHeightAlt); yAlt += infoTabHeightAlt; } } @@ -442,11 +449,11 @@ public class VPlayerPanel extends FContainer { commandZoneCount = commandZone.getCount(); if (commandZoneCount > 0) { float commandZoneHeight = height / 2; - float minCommandCards = Forge.altZoneTabs && "Horizontal".equalsIgnoreCase(Forge.altZoneTabMode) ? 5 : 2; + float minCommandCards = Forge.isHorizontalTabLayout() ? 5 : 2; commandZoneWidth = Math.min(commandZoneCount, minCommandCards) * commandZone.getCardWidth(commandZoneHeight); float x2 = x + fieldWidth - commandZoneWidth; float y2 = height - commandZoneHeight; - if (Forge.altZoneTabs && "Horizontal".equalsIgnoreCase(Forge.altZoneTabMode)) { + if (Forge.isHorizontalTabLayout()) { x2 = width - avatarWidth - commandZoneWidth; y2 = 0; } @@ -460,15 +467,15 @@ public class VPlayerPanel extends FContainer { field.setCommandZoneWidth(0); } prefWidth = width / mod; - if (Forge.altZoneTabs && "Horizontal".equalsIgnoreCase(Forge.altZoneTabMode)) { + if (Forge.isHorizontalTabLayout()) { field.setBounds(x, 0, width - (avatarWidth / 16f), height); updateFieldDisplayArea(width); } else field.setBounds(x, 0, fieldWidth, height); - x = width - displayAreaWidth-avatarWidth; + x = width - displayAreaWidth - avatarWidth; for (InfoTab tab : tabs) { - if (Forge.altZoneTabs && "Horizontal".equalsIgnoreCase(Forge.altZoneTabMode)) { + if (Forge.isHorizontalTabLayout()) { updateTabDisplayArea(tab, width, height); } else { tab.setDisplayBounds(x, 0, displayAreaWidth, height); @@ -509,8 +516,7 @@ public class VPlayerPanel extends FContainer { if (Forge.isLandscapeMode()) { g.drawLine(1, MatchScreen.getBorderColor(), x, top, x, bottom); - } - else { + } else { y = isFlipped() ? top + 1 : bottom; //don't know why infotab gets null here, either way don't crash the gui.. float left = infoTab == null ? 0 : infoTab.getLeft(); @@ -536,7 +542,7 @@ public class VPlayerPanel extends FContainer { ArrayList out = new ArrayList<>(); out.add(field.getRow1()); out.add(field.getRow2()); - for(InfoTabZone tab : zoneTabs.values()) + for (InfoTabZone tab : zoneTabs.values()) out.add(tab.displayArea); out.add(commandZone); out.addAll(extraTab.displayAreas.values()); @@ -559,7 +565,7 @@ public class VPlayerPanel extends FContainer { private void update() { int vibrateDuration = 0; int delta = player.getLife() - life; - player.setAvatarLifeDifference(player.getAvatarLifeDifference()+delta); + player.setAvatarLifeDifference(player.getAvatarLifeDifference() + delta); if (delta != 0) { if (delta < 0) { vibrateDuration += delta * -100; @@ -590,6 +596,7 @@ public class VPlayerPanel extends FContainer { Gdx.input.vibrate(Math.min(vibrateDuration, 2000)); } } + private void updateShards() { manaShards = player.getNumManaShards(); } @@ -604,55 +611,55 @@ public class VPlayerPanel extends FContainer { public void draw(Graphics g) { adjustHeight = 1; float divider = Gdx.app.getGraphics().getHeight() > 900 ? 1.2f : 2f; - if(Forge.altPlayerLayout && !Forge.altZoneTabs && Forge.isLandscapeMode()) { + if (Forge.altPlayerLayout && !Forge.altZoneTabs && Forge.isLandscapeMode()) { if (poisonCounters == 0 && energyCounters == 0 && experienceCounters == 0 && ticketCounters == 0 && radCounters == 0 && manaShards == 0) { - g.fillRect(Color.DARK_GRAY, 0, 0, INFO2_FONT.getBounds(lifeStr).width+1, INFO2_FONT.getBounds(lifeStr).height+1); + g.fillRect(Color.DARK_GRAY, 0, 0, INFO2_FONT.getBounds(lifeStr).width + 1, INFO2_FONT.getBounds(lifeStr).height + 1); g.drawText(lifeStr, INFO2_FONT, getInfoForeColor().getColor(), 0, 0, getWidth(), getHeight(), false, Align.left, false); } else { float halfHeight = getHeight() / divider; float textStart = halfHeight + Utils.scale(1); float textWidth = getWidth() - textStart; int mod = 1; - g.fillRect(Color.DARK_GRAY, 0, 0, INFO_FONT.getBounds(lifeStr).width+halfHeight+1, INFO_FONT.getBounds(lifeStr).height+1); + g.fillRect(Color.DARK_GRAY, 0, 0, INFO_FONT.getBounds(lifeStr).width + halfHeight + 1, INFO_FONT.getBounds(lifeStr).height + 1); g.drawImage(FSkinImage.QUEST_LIFE, 0, 0, halfHeight, halfHeight); g.drawText(lifeStr, INFO_FONT, getInfoForeColor().getColor(), textStart, 0, textWidth, halfHeight, false, Align.left, false); if (poisonCounters > 0) { - g.fillRect(Color.DARK_GRAY, 0, halfHeight+2, INFO_FONT.getBounds(String.valueOf(poisonCounters)).width+halfHeight+1, INFO_FONT.getBounds(String.valueOf(poisonCounters)).height+1); - g.drawImage(FSkinImage.POISON, 0, halfHeight+2, halfHeight, halfHeight); - g.drawText(String.valueOf(poisonCounters), INFO_FONT, getInfoForeColor().getColor(), textStart, halfHeight+2, textWidth, halfHeight, false, Align.left, false); - mod+=1; + g.fillRect(Color.DARK_GRAY, 0, halfHeight + 2, INFO_FONT.getBounds(String.valueOf(poisonCounters)).width + halfHeight + 1, INFO_FONT.getBounds(String.valueOf(poisonCounters)).height + 1); + g.drawImage(FSkinImage.POISON, 0, halfHeight + 2, halfHeight, halfHeight); + g.drawText(String.valueOf(poisonCounters), INFO_FONT, getInfoForeColor().getColor(), textStart, halfHeight + 2, textWidth, halfHeight, false, Align.left, false); + mod += 1; } if (energyCounters > 0) { - g.fillRect(Color.DARK_GRAY, 0, (halfHeight*mod)+2, INFO_FONT.getBounds(String.valueOf(energyCounters)).width+halfHeight+1, INFO_FONT.getBounds(String.valueOf(energyCounters)).height+1); - g.drawImage(FSkinImage.ENERGY, 0, (halfHeight*mod)+2, halfHeight, halfHeight); - g.drawText(String.valueOf(energyCounters), INFO_FONT, getInfoForeColor().getColor(), textStart, (halfHeight*mod)+2, textWidth, halfHeight, false, Align.left, false); - mod+=1; + g.fillRect(Color.DARK_GRAY, 0, (halfHeight * mod) + 2, INFO_FONT.getBounds(String.valueOf(energyCounters)).width + halfHeight + 1, INFO_FONT.getBounds(String.valueOf(energyCounters)).height + 1); + g.drawImage(FSkinImage.ENERGY, 0, (halfHeight * mod) + 2, halfHeight, halfHeight); + g.drawText(String.valueOf(energyCounters), INFO_FONT, getInfoForeColor().getColor(), textStart, (halfHeight * mod) + 2, textWidth, halfHeight, false, Align.left, false); + mod += 1; } if (experienceCounters > 0) { - g.fillRect(Color.DARK_GRAY, 0, (halfHeight*mod)+2, INFO_FONT.getBounds(String.valueOf(experienceCounters)).width+halfHeight+1, INFO_FONT.getBounds(String.valueOf(experienceCounters)).height+1); - g.drawImage(FSkinImage.COMMANDER, 0, (halfHeight*mod)+2, halfHeight, halfHeight); - g.drawText(String.valueOf(experienceCounters), INFO_FONT, getInfoForeColor().getColor(), textStart, (halfHeight*mod)+2, textWidth, halfHeight, false, Align.left, false); - mod+=1; + g.fillRect(Color.DARK_GRAY, 0, (halfHeight * mod) + 2, INFO_FONT.getBounds(String.valueOf(experienceCounters)).width + halfHeight + 1, INFO_FONT.getBounds(String.valueOf(experienceCounters)).height + 1); + g.drawImage(FSkinImage.COMMANDER, 0, (halfHeight * mod) + 2, halfHeight, halfHeight); + g.drawText(String.valueOf(experienceCounters), INFO_FONT, getInfoForeColor().getColor(), textStart, (halfHeight * mod) + 2, textWidth, halfHeight, false, Align.left, false); + mod += 1; } if (radCounters > 0) { - g.fillRect(Color.DARK_GRAY, 0, (halfHeight*mod)+2, INFO_FONT.getBounds(String.valueOf(radCounters)).width+halfHeight+1, INFO_FONT.getBounds(String.valueOf(radCounters)).height+1); - g.drawImage(FSkinImage.RAD, 0, (halfHeight*mod)+2, halfHeight, halfHeight); - g.drawText(String.valueOf(radCounters), INFO_FONT, getInfoForeColor().getColor(), textStart, (halfHeight*mod)+2, textWidth, halfHeight, false, Align.left, false); - mod+=1; + g.fillRect(Color.DARK_GRAY, 0, (halfHeight * mod) + 2, INFO_FONT.getBounds(String.valueOf(radCounters)).width + halfHeight + 1, INFO_FONT.getBounds(String.valueOf(radCounters)).height + 1); + g.drawImage(FSkinImage.RAD, 0, (halfHeight * mod) + 2, halfHeight, halfHeight); + g.drawText(String.valueOf(radCounters), INFO_FONT, getInfoForeColor().getColor(), textStart, (halfHeight * mod) + 2, textWidth, halfHeight, false, Align.left, false); + mod += 1; } if (ticketCounters > 0) { - g.fillRect(Color.DARK_GRAY, 0, (halfHeight*mod)+2, INFO_FONT.getBounds(String.valueOf(ticketCounters)).width+halfHeight+1, INFO_FONT.getBounds(String.valueOf(ticketCounters)).height+1); - g.drawImage(FSkinImage.TICKET, 0, (halfHeight*mod)+2, halfHeight, halfHeight); - g.drawText(String.valueOf(ticketCounters), INFO_FONT, getInfoForeColor().getColor(), textStart, (halfHeight*mod)+2, textWidth, halfHeight, false, Align.left, false); - mod+=1; + g.fillRect(Color.DARK_GRAY, 0, (halfHeight * mod) + 2, INFO_FONT.getBounds(String.valueOf(ticketCounters)).width + halfHeight + 1, INFO_FONT.getBounds(String.valueOf(ticketCounters)).height + 1); + g.drawImage(FSkinImage.TICKET, 0, (halfHeight * mod) + 2, halfHeight, halfHeight); + g.drawText(String.valueOf(ticketCounters), INFO_FONT, getInfoForeColor().getColor(), textStart, (halfHeight * mod) + 2, textWidth, halfHeight, false, Align.left, false); + mod += 1; } if (manaShards > 0) { - g.fillRect(Color.DARK_GRAY, 0, (halfHeight*mod)+2, INFO_FONT.getBounds(String.valueOf(manaShards)).width+halfHeight+1, INFO_FONT.getBounds(String.valueOf(manaShards)).height+1); - g.drawImage(FSkinImage.AETHER_SHARD, 0, (halfHeight*mod)+2, halfHeight, halfHeight); - g.drawText(String.valueOf(manaShards), INFO_FONT, getInfoForeColor().getColor(), textStart, (halfHeight*mod)+2, textWidth, halfHeight, false, Align.left, false); - mod+=1; + g.fillRect(Color.DARK_GRAY, 0, (halfHeight * mod) + 2, INFO_FONT.getBounds(String.valueOf(manaShards)).width + halfHeight + 1, INFO_FONT.getBounds(String.valueOf(manaShards)).height + 1); + g.drawImage(FSkinImage.AETHER_SHARD, 0, (halfHeight * mod) + 2, halfHeight, halfHeight); + g.drawText(String.valueOf(manaShards), INFO_FONT, getInfoForeColor().getColor(), textStart, (halfHeight * mod) + 2, textWidth, halfHeight, false, Align.left, false); + mod += 1; } - adjustHeight = (mod > 2) && (avatar.getHeight() < halfHeight*mod)? mod : 1; + adjustHeight = (mod > 2) && (avatar.getHeight() < halfHeight * mod) ? mod : 1; } } else { if (poisonCounters == 0 && energyCounters == 0 && manaShards == 0) { @@ -669,8 +676,7 @@ public class VPlayerPanel extends FContainer { } else if (energyCounters > 0) { //prioritize showing energy counters over mana shards g.drawImage(FSkinImage.ENERGY, 0, halfHeight, halfHeight, halfHeight); g.drawText(String.valueOf(energyCounters), INFO_FONT, getInfoForeColor(), textStart, halfHeight, textWidth, halfHeight, false, Align.center, true); - } - else { + } else { g.drawImage(FSkinImage.MANASHARD, 0, halfHeight, halfHeight, halfHeight); g.drawText(String.valueOf(manaShards), INFO_FONT, getInfoForeColor(), textStart, halfHeight, textWidth, halfHeight, false, Align.center, true); } @@ -695,19 +701,27 @@ public class VPlayerPanel extends FContainer { } public abstract VDisplayArea getDisplayArea(); + public abstract void setDisplayVisible(boolean visible); + public abstract void setDisplayBounds(float x, float y, float width, float height); + public abstract void setRotate180(boolean rotate180); + public abstract void update(); + public abstract void reset(); + public abstract float getIdealWidth(float pref); protected boolean isSelected() { return selectedTab == this; } + protected FSkinColor getSelectedBackgroundColor() { return getDisplayAreaBackColor(); } + protected boolean isAlignedRightForAltDisplay() { return false; } @@ -783,8 +797,8 @@ public class VPlayerPanel extends FContainer { if (lblLife.getRotate180()) { g.startRotateTransform(x + w / 2, y + h / 2, 180); } - float mod = isHovered() ? w/8f:0; - g.drawImage(icon, x-mod/2, y-mod/2, w+mod, h+mod); + float mod = isHovered() ? w / 8f : 0; + g.drawImage(icon, x - mod / 2, y - mod / 2, w + mod, h + mod); if (lblLife.getRotate180()) { g.endTransform(); } @@ -811,8 +825,8 @@ public class VPlayerPanel extends FContainer { h = icon.getHeight() * w / icon.getWidth(); x = (getWidth() - w) / 2; y = INFO_TAB_PADDING_Y; - float mod = isHovered() ? w/8f:0; - g.drawImage(icon, x-mod/2, y-mod/2, w+mod, h+mod); + float mod = isHovered() ? w / 8f : 0; + g.drawImage(icon, x - mod / 2, y - mod / 2, w + mod, h + mod); y += h + INFO_TAB_PADDING_Y; g.drawText(value, INFO_FONT, getInfoForeColor(), 0, y, getWidth(), getHeight() - y + 1, false, Align.center, false); @@ -865,7 +879,8 @@ public class VPlayerPanel extends FContainer { } @Override - public void reset() {} //Mana Display does not get cleared. + public void reset() { + } //Mana Display does not get cleared. @Override public float getIdealWidth(float pref) { @@ -885,6 +900,7 @@ public class VPlayerPanel extends FContainer { } private final EnumSet altDisplayZones = EnumSet.of(ZoneType.Hand, ZoneType.Library, ZoneType.Graveyard, ZoneType.Exile); + public boolean isAlignedRightForAltDisplay() { return altDisplayZones.contains(this.zoneType); } @@ -914,7 +930,7 @@ public class VPlayerPanel extends FContainer { @Override public void update() { super.update(); - if (selectedTab != null && Forge.altZoneTabs && "Horizontal".equalsIgnoreCase(Forge.altZoneTabMode)) { + if (selectedTab != null && Forge.isHorizontalTabLayout()) { updateFieldDisplayArea(initW); updateTabDisplayArea(selectedTab, initW, initH); } @@ -935,9 +951,9 @@ public class VPlayerPanel extends FContainer { private InfoTabExtra() { super(DEFAULT_ICON); this.displayAreas = new EnumMap<>(ZoneType.class); - for(ZoneType zoneType : EXTRA_ZONES) { + for (ZoneType zoneType : EXTRA_ZONES) { FCollectionView cards = player.getCards(zoneType); - if(cards == null || cards.isEmpty()) + if (cards == null || cards.isEmpty()) continue; createZoneIfMissing(zoneType); hasCardsInExtraZone = true; @@ -949,38 +965,39 @@ public class VPlayerPanel extends FContainer { } public void createZoneIfMissing(ZoneType zone) { - if(this.displayAreas.containsKey(zone)) + if (this.displayAreas.containsKey(zone)) return; VZoneDisplay display = VPlayerPanel.this.add(new VZoneDisplay(player, zone)); this.displayAreas.put(zone, display); this.hasCardsInExtraZone = true; - if(zone == ZoneType.AttractionDeck || zone == ZoneType.ContraptionDeck) + if (zone == ZoneType.AttractionDeck || zone == ZoneType.ContraptionDeck) createZoneIfMissing(ZoneType.Junkyard); //If the game uses one, it uses both. } public void setActiveZone(ZoneType zone) { - if(this.activeZone == zone) + if (this.activeZone == zone) return; createZoneIfMissing(zone); getDisplayArea().setVisible(false); this.activeZone = zone; - if(isSelected()) + if (isSelected()) getDisplayArea().setVisible(true); updateTab(); } + public void setActiveZoneByIndex(int index) { List keyList = List.copyOf(displayAreas.keySet()); setActiveZone(keyList.get(index % keyList.size())); } private void updateTab() { - if(!hasCardsInExtraZone) + if (!hasCardsInExtraZone) this.value = ""; - else if(!getDisplayArea().isVisible()) + else if (!getDisplayArea().isVisible()) this.value = "+"; else this.value = String.valueOf(displayAreas.get(this.activeZone).getCount()); - if(getDisplayArea().isVisible()) + if (getDisplayArea().isVisible()) this.icon = iconFromZone(this.activeZone); else this.icon = DEFAULT_ICON; @@ -994,7 +1011,7 @@ public class VPlayerPanel extends FContainer { @Override public void setDisplayVisible(boolean visible) { - if(!visible) + if (!visible) displayAreas.values().forEach(d -> d.setVisible(false)); else getDisplayArea().setVisible(true); @@ -1016,12 +1033,13 @@ public class VPlayerPanel extends FContainer { displayAreas.values().forEach(VDisplayArea::update); updateTab(); } + public void update(ZoneType zoneType) { - if(!displayAreas.containsKey(zoneType)) { - if(!EXTRA_ZONES.contains(zoneType)) + if (!displayAreas.containsKey(zoneType)) { + if (!EXTRA_ZONES.contains(zoneType)) return; FCollectionView cards = player.getCards(zoneType); - if(cards == null || cards.isEmpty()) + if (cards == null || cards.isEmpty()) return; createZoneIfMissing(zoneType); } @@ -1056,16 +1074,16 @@ public class VPlayerPanel extends FContainer { @Override public boolean tap(float x, float y, int count) { - if(this.displayAreas.isEmpty()) + if (this.displayAreas.isEmpty()) return false; - if(count >= 2) { + if (count >= 2) { onClickZone(this.activeZone); return true; } FPopupMenu menu = new FPopupMenu() { @Override protected void buildMenu() { - for(ZoneType zone : displayAreas.keySet()) { + for (ZoneType zone : displayAreas.keySet()) { String label = WordUtils.capitalize(zone.getTranslatedName()); addItem(new FMenuItem(label, iconFromZone(zone), (e) -> onClickZone(zone))); } @@ -1076,7 +1094,7 @@ public class VPlayerPanel extends FContainer { } public void onClickZone(ZoneType zone) { - if(activeZone == zone && this.isSelected()) { + if (activeZone == zone && this.isSelected()) { setSelectedTab(null); return; } @@ -1109,7 +1127,7 @@ public class VPlayerPanel extends FContainer { @Override public boolean keyDown(int keyCode) { - if (MatchController.getView().selectedPlayerPanel() == this && !((FMenuBar)MatchController.getView().getHeader()).isShowingMenu(true)) { + if (MatchController.getView().selectedPlayerPanel() == this && !((FMenuBar) MatchController.getView().getHeader()).isShowingMenu(true)) { if (keyCode == Input.Keys.BUTTON_B) { MatchScreen.nullPotentialListener(); closeSelectedTab(); From c2c3add52b76b25f6fec2eb85fb20cd248000936 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Thu, 18 Sep 2025 19:35:23 +0800 Subject: [PATCH 218/355] update switch --- .../src/forge/screens/match/views/VPlayerPanel.java | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java b/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java index 116af531719..16e7a92061a 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java @@ -316,14 +316,7 @@ public class VPlayerPanel extends FContainer { //update flashback zone when graveyard, library, exile, or stack zones updated switch (zoneType) { - case Graveyard: - case Library: - case Exile: - case Stack: - zoneTabs.get(ZoneType.Flashback).update(); - break; - default: - break; + case Graveyard, Library, Exile, Stack -> zoneTabs.get(ZoneType.Flashback).update(); } } } From 10a68c27d5aa8cffb46e268f21d6998fa353142e Mon Sep 17 00:00:00 2001 From: tool4ever Date: Thu, 18 Sep 2025 16:36:25 +0000 Subject: [PATCH 219/355] Update omarthis_ghostfire_initiate.txt --- forge-gui/res/cardsfolder/o/omarthis_ghostfire_initiate.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/o/omarthis_ghostfire_initiate.txt b/forge-gui/res/cardsfolder/o/omarthis_ghostfire_initiate.txt index 36d52ee68db..824e4d54701 100644 --- a/forge-gui/res/cardsfolder/o/omarthis_ghostfire_initiate.txt +++ b/forge-gui/res/cardsfolder/o/omarthis_ghostfire_initiate.txt @@ -8,7 +8,7 @@ T:Mode$ CounterAddedOnce | ValidCard$ Creature.Other+inZoneBattlefield+Colorless SVar:TrigPutCounter:DB$ PutCounter | CounterType$ P1P1 | CounterNum$ 1 T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigManifest | TriggerDescription$ When NICKNAME dies, manifest a number of cards from the top of your library equal to the number of counters on it. SVar:TrigManifest:DB$ Manifest | Amount$ Y -SVar:Y:TriggeredCard$CardCounters.P1P1 +SVar:Y:TriggeredCard$CardCounters.ALL DeckHas:Ability$Counters DeckHints:Ability$Counters Oracle:Omarthis, Ghostfire Initiate enters with X +1/+1 counters on it.\nWhenever you put one or more +1/+1 counters on another colorless creature, you may put a +1/+1 counter on Omarthis.\nWhen Omarthis dies, manifest a number of cards from the top of your library equal to the number of counters on it. From 398917d010af7842ce33402231c3123f9bf65101 Mon Sep 17 00:00:00 2001 From: Eradev Date: Thu, 18 Sep 2025 13:15:07 -0400 Subject: [PATCH 220/355] Support named abilities (#8464) * Support named abilities * Check if spell was cast from a named ability --- forge-game/src/main/java/forge/game/ForgeScript.java | 2 ++ .../main/java/forge/game/ability/AbilityFactory.java | 4 ++++ .../main/java/forge/game/ability/AbilityUtils.java | 8 ++++++++ .../java/forge/game/ability/effects/PlayEffect.java | 4 ++++ .../java/forge/game/spellability/SpellAbility.java | 10 ++++++++++ .../src/main/java/forge/game/trigger/Trigger.java | 12 ++++++++++++ 6 files changed, 40 insertions(+) diff --git a/forge-game/src/main/java/forge/game/ForgeScript.java b/forge-game/src/main/java/forge/game/ForgeScript.java index 358c597814c..5ce1b116732 100644 --- a/forge-game/src/main/java/forge/game/ForgeScript.java +++ b/forge-game/src/main/java/forge/game/ForgeScript.java @@ -412,6 +412,8 @@ public class ForgeScript { return !sa.isPwAbility() && !sa.getRestrictions().isSorcerySpeed(); } return true; + } else if(property.startsWith("NamedAbility")) { + return sa.getName().equals(property.substring(12)); } else if (sa.getHostCard() != null) { return sa.getHostCard().hasProperty(property, sourceController, source, spellAbility); } diff --git a/forge-game/src/main/java/forge/game/ability/AbilityFactory.java b/forge-game/src/main/java/forge/game/ability/AbilityFactory.java index f4d580cdf92..f0c89aa25d2 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityFactory.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityFactory.java @@ -239,6 +239,10 @@ public final class AbilityFactory { spellAbility.putParam("PrecostDesc", "Exhaust — "); } + if (mapParams.containsKey("Named")) { + spellAbility.setName(mapParams.get("Named")); + } + // ********************************************* // set universal properties of the SpellAbility diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index 94d1d10f119..78d13487b62 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -1870,6 +1870,14 @@ public class AbilityUtils { } return doXMath(v, expr, c, ctb); } + + // Count$FromNamedAbility[abilityName].. + if (sq[0].startsWith("FromNamedAbility")) { + String abilityNamed = sq[0].substring(16); + SpellAbility trigSA = sa.getHostCard().getCastSA(); + boolean fromNamedAbility = trigSA != null && trigSA.getName().equals(abilityNamed); + return doXMath(calculateAmount(c, sq[fromNamedAbility ? 1 : 2], ctb), expr, c, ctb); + } } else { // fallback if ctb isn't a spellability if (sq[0].startsWith("LastStateBattlefield")) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java b/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java index 5bc43048acc..514b5c2bd16 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java @@ -428,6 +428,10 @@ public class PlayEffect extends SpellAbilityEffect { tgtSA.getTargetRestrictions().setMandatory(true); } + if (sa.hasParam("Named")) { + tgtSA.setName(sa.getName()); + } + // can't be done later if (sa.hasParam("ReplaceGraveyard")) { if (!sa.hasParam("ReplaceGraveyardValid") diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java index 92d94c496df..399e6ebee96 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java @@ -174,6 +174,8 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit private CardZoneTable changeZoneTable; private Map loseLifeMap; + private String name = ""; + public CardCollection getLastStateBattlefield() { return lastStateBattlefield; } @@ -2675,4 +2677,12 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit public void clearOptionalKeywordAmount() { optionalKeywordAmount.clear(); } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } } diff --git a/forge-game/src/main/java/forge/game/trigger/Trigger.java b/forge-game/src/main/java/forge/game/trigger/Trigger.java index dbcd5ee48de..926e12d18f8 100644 --- a/forge-game/src/main/java/forge/game/trigger/Trigger.java +++ b/forge-game/src/main/java/forge/game/trigger/Trigger.java @@ -392,6 +392,10 @@ public abstract class Trigger extends TriggerReplacementBase { } } + if (condition == null) { + return true; + } + if ("LifePaid".equals(condition)) { final SpellAbility trigSA = (SpellAbility) runParams.get(AbilityKey.SpellAbility); if (trigSA != null && trigSA.getAmountLifePaid() <= 0) { @@ -442,7 +446,15 @@ public abstract class Trigger extends TriggerReplacementBase { if (game.getCombat().getAttackersAndDefenders().values().containsAll(attacker.getOpponents())) { return false; } + } else if (condition.startsWith("FromNamedAbility")) { + var rest = condition.substring(16); + final SpellAbility trigSA = (SpellAbility) runParams.get(AbilityKey.Cause); + + if (trigSA != null && !trigSA.getName().equals(rest)) { + return false; + } } + return true; } From 9b8020bb30d140a69e14f8eafa0b9caae91185fb Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Thu, 18 Sep 2025 21:01:42 +0200 Subject: [PATCH 221/355] Fix copied SA using old replacingObjects --- .../forge/game/ability/effects/SacrificeEffect.java | 11 +++++------ .../java/forge/game/spellability/SpellAbility.java | 3 +++ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/SacrificeEffect.java b/forge-game/src/main/java/forge/game/ability/effects/SacrificeEffect.java index 313261f7459..4fe536aae8f 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/SacrificeEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/SacrificeEffect.java @@ -92,12 +92,11 @@ public class SacrificeEffect extends SpellAbilityEffect { CardZoneTable zoneMovements = AbilityKey.addCardZoneTableParams(params, sa); if (valid.equals("Self") && game.getZoneOf(host) != null) { - if (host.getController().equals(activator) && game.getZoneOf(host).is(ZoneType.Battlefield)) { - if (!optional || activator.getController().confirmAction(sa, null, - Localizer.getInstance().getMessage("lblDoYouWantSacrificeThis", host.getName()), null)) { - if (game.getAction().sacrifice(new CardCollection(host), sa, true, params) != null && remSacrificed) { - host.addRemembered(host); - } + if (host.getController().equals(activator) && game.getZoneOf(host).is(ZoneType.Battlefield) && + (!optional || activator.getController().confirmAction(sa, null, + Localizer.getInstance().getMessage("lblDoYouWantSacrificeThis", host.getName()), null))) { + if (game.getAction().sacrifice(new CardCollection(host), sa, true, params) != null && remSacrificed) { + host.addRemembered(host); } } } else { diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java index 399e6ebee96..2f91be78f11 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java @@ -1248,6 +1248,9 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit clone.mayChooseNewTargets = false; clone.triggeringObjects = AbilityKey.newMap(this.triggeringObjects); + if (!lki) { + clone.replacingObjects = AbilityKey.newMap(); + } clone.setPayCosts(getPayCosts().copy()); if (manaPart != null) { From cb7fc3df4e455392f8c2521e5636e0b1fbed9f99 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Fri, 19 Sep 2025 10:32:18 +0800 Subject: [PATCH 222/355] fix gap and visibility on horizontal layout --- .../screens/match/views/VPlayerPanel.java | 47 +++++++++++-------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java b/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java index 16e7a92061a..d6362537b99 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java @@ -51,6 +51,12 @@ public class VPlayerPanel extends FContainer { return FSkinColor.get(Colors.CLR_INACTIVE).alphaColor(0.5f); } + private static FSkinColor getAltDisplayAreaBackColor() { + if (Forge.isMobileAdventureMode) + return FSkinColor.get(Colors.ADV_CLR_PHASE_INACTIVE_ENABLED).alphaColor(0.3f); + return FSkinColor.get(Colors.CLR_PHASE_INACTIVE_ENABLED).alphaColor(0.3f); + } + private static FSkinColor getDeliriumHighlight() { if (Forge.isMobileAdventureMode) return FSkinColor.get(Colors.ADV_CLR_PHASE_ACTIVE_ENABLED).alphaColor(0.5f); @@ -307,6 +313,8 @@ public class VPlayerPanel extends FContainer { field.update(true); } else if (zoneType == ZoneType.Command) { commandZone.update(); + if (selectedTab != null && Forge.isHorizontalTabLayout()) + updateTabLayout(initW, initH); } else { if (zoneTabs.containsKey(zoneType)) zoneTabs.get(zoneType).update(); @@ -426,7 +434,11 @@ public class VPlayerPanel extends FContainer { } } } - x = avatar.getRight(); + updateTabLayout(width, height); + } + + private void updateTabLayout(float width, float height) { + float x = avatar.getRight(); phaseIndicator.resetFont(); phaseIndicator.setBounds(x, 0, avatar.getWidth() * 0.6f, height); x += phaseIndicator.getWidth(); @@ -461,15 +473,18 @@ public class VPlayerPanel extends FContainer { } prefWidth = width / mod; if (Forge.isHorizontalTabLayout()) { - field.setBounds(x, 0, width - (avatarWidth / 16f), height); - updateFieldDisplayArea(width); + field.setBounds(x, 0, width - avatarWidth, height); + field.getRow1().setWidth(width - (commandZoneCount > 0 ? commandZone.getWidth() + (avatarWidth * commandZoneCount) : avatarWidth)); + field.getRow2().setWidth(width - (avatarWidth / 4f) - (selectedTab == null ? 0 : selectedTab.getIdealWidth(prefWidth) + 1) - avatarWidth * mod); } else field.setBounds(x, 0, fieldWidth, height); x = width - displayAreaWidth - avatarWidth; for (InfoTab tab : tabs) { if (Forge.isHorizontalTabLayout()) { - updateTabDisplayArea(tab, width, height); + float w = tab.getIdealWidth(prefWidth); + float h = height / 2f; + tab.setDisplayBounds(width - w - avatarWidth, isBottomPlayer ? h : 0, w, h); } else { tab.setDisplayBounds(x, 0, displayAreaWidth, height); } @@ -483,21 +498,11 @@ public class VPlayerPanel extends FContainer { } } - private void updateFieldDisplayArea(float width) { - field.getRow1().setWidth(width - (avatarWidth / 8f) - (commandZoneCount > 0 ? commandZoneWidth + 1 : 0)); - field.getRow2().setWidth(width - (avatarWidth / 8f) - (selectedTab == null ? 0 : selectedTab.getIdealWidth(prefWidth) + 1) - avatarWidth * mod); - } - - private void updateTabDisplayArea(InfoTab tab, float width, float height) { - float w = tab.getIdealWidth(prefWidth); - float h = height / 2f; - tab.setDisplayBounds(width - w - avatarWidth, isBottomPlayer ? h : 0, w, h); - } - @Override public void drawBackground(Graphics g) { float y; InfoTab infoTab = selectedTab; + float pad = Forge.isHorizontalTabLayout() ? avatarWidth / 16f : 0f; if (infoTab != null) { //draw background and border for selected zone if needed VDisplayArea selectedDisplayArea = infoTab.getDisplayArea(); float x = selectedDisplayArea == null ? 0 : selectedDisplayArea.getLeft(); @@ -505,7 +510,9 @@ public class VPlayerPanel extends FContainer { float top = selectedDisplayArea == null ? 0 : selectedDisplayArea.getTop(); float h = selectedDisplayArea == null ? 0 : selectedDisplayArea.getHeight(); float bottom = selectedDisplayArea == null ? 0 : selectedDisplayArea.getBottom(); - g.fillRect(getDisplayAreaBackColor(), x, top, w, h); + g.fillRect(Forge.isHorizontalTabLayout() ? getAltDisplayAreaBackColor() : getDisplayAreaBackColor(), x - pad, top, w + pad, h + pad); + if (Forge.isHorizontalTabLayout()) + g.drawLine(1, MatchScreen.getBorderColor(), x, isFlipped() ? bottom : top, x + w, isFlipped() ? bottom : top); if (Forge.isLandscapeMode()) { g.drawLine(1, MatchScreen.getBorderColor(), x, top, x, bottom); @@ -523,6 +530,8 @@ public class VPlayerPanel extends FContainer { float x = commandZone.getLeft(); y = commandZone.getTop(); g.drawLine(1, MatchScreen.getBorderColor(), x, y, x, y + commandZone.getHeight()); + /*if (Forge.isHorizontalTabLayout()) + g.fillRect(getAltDisplayAreaBackColor(), x - pad, y, commandZoneWidth + pad, commandZone.getHeight() + pad);*/ if (isFlipped()) { y += commandZone.getHeight(); } @@ -923,10 +932,8 @@ public class VPlayerPanel extends FContainer { @Override public void update() { super.update(); - if (selectedTab != null && Forge.isHorizontalTabLayout()) { - updateFieldDisplayArea(initW); - updateTabDisplayArea(selectedTab, initW, initH); - } + if (selectedTab != null && Forge.isHorizontalTabLayout()) + updateTabLayout(initW, initH); } } From 1105b3fcbd9710e3a733452079b2b0c7d44d2365 Mon Sep 17 00:00:00 2001 From: Renato Filipe Vidal Santos <45150760+dracontes@users.noreply.github.com> Date: Fri, 19 Sep 2025 05:40:42 +0100 Subject: [PATCH 223/355] Add files via upload --- forge-gui/res/cardsfolder/a/airbending_lesson.txt | 4 ++-- forge-gui/res/cardsfolder/b/badgermole.txt | 2 +- .../res/cardsfolder/b/behold_the_sinister_six.txt | 2 +- .../cardsfolder/b/bumi_eclectic_earthbender.txt | 2 +- forge-gui/res/cardsfolder/c/chlorophant.txt | 2 +- .../res/cardsfolder/d/dai_li_indoctrination.txt | 2 +- .../res/cardsfolder/e/earth_village_ruffians.txt | 2 +- .../res/cardsfolder/e/earthbending_student.txt | 2 +- forge-gui/res/cardsfolder/e/electros_bolt.txt | 2 +- forge-gui/res/cardsfolder/f/fire_lord_zuko.txt | 2 +- .../res/cardsfolder/f/fire_nation_attacks.txt | 2 +- forge-gui/res/cardsfolder/f/fire_sages.txt | 2 +- forge-gui/res/cardsfolder/h/haru_hidden_talent.txt | 2 +- .../res/cardsfolder/i/inner_demons_gangsters.txt | 2 +- .../res/cardsfolder/n/name_sticker_goblin.txt | 2 +- .../p/peter_parker_amazing_spider_man.txt | 3 +-- .../res/cardsfolder/r/rebellious_captives.txt | 2 +- .../res/cardsfolder/r/rough_rhino_cavalry.txt | 2 +- .../res/cardsfolder/t/toph_the_blind_bandit.txt | 2 +- .../cardsfolder/t/toph_the_first_metalbender.txt | 2 +- forge-gui/res/cardsfolder/v/vindictive_warden.txt | 2 +- .../tokenscripts/g_1_1_forest_dryad_squirrel.txt | 2 +- .../tokenscripts/r_2_2_soldier_firebending_1.txt | 14 +++++++------- 23 files changed, 30 insertions(+), 31 deletions(-) diff --git a/forge-gui/res/cardsfolder/a/airbending_lesson.txt b/forge-gui/res/cardsfolder/a/airbending_lesson.txt index 3e422f67f9a..9f904f830d1 100644 --- a/forge-gui/res/cardsfolder/a/airbending_lesson.txt +++ b/forge-gui/res/cardsfolder/a/airbending_lesson.txt @@ -1,6 +1,6 @@ Name:Airbending Lesson ManaCost:2 W Types:Instant Lesson -A:SP$ Airbend | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent | SubAbility$ DBDraw | SpellDescription$ Airbend target nonland permanent. (Exile it. While it’s exiled, its owner may cast it for {2} rather than its mana cost.) +A:SP$ Airbend | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent | SubAbility$ DBDraw | SpellDescription$ Airbend target nonland permanent. (Exile it. While it's exiled, its owner may cast it for {2} rather than its mana cost.) SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 1 | SpellDescription$ Draw a card. -Oracle:Airbend target nonland permanent. (Exile it. While it’s exiled, its owner may cast it for {2} rather than its mana cost.)\nDraw a card. +Oracle:Airbend target nonland permanent. (Exile it. While it's exiled, its owner may cast it for {2} rather than its mana cost.)\nDraw a card. diff --git a/forge-gui/res/cardsfolder/b/badgermole.txt b/forge-gui/res/cardsfolder/b/badgermole.txt index 3ef8bff4dee..9e24582a0b9 100644 --- a/forge-gui/res/cardsfolder/b/badgermole.txt +++ b/forge-gui/res/cardsfolder/b/badgermole.txt @@ -6,4 +6,4 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S SVar:TrigEarthbend:DB$ Earthbend | Num$ 2 S:Mode$ Continuous | Affected$ Creature.YouCtrl+counters_GE1_P1P1 | AddKeyword$ Trample | Description$ Creatures you control with +1/+1 counters on them have trample. DeckHas:Ability$Counters -Oracle:When this creature enters, earthbend 2. (Target land you control becomes a 0/0 creature with haste that's still a land. Put two +1/+1 counters on it. When it dies or is exiled, return it to the battlefield tapped.)\nCreatures you control with +1/+1 counters on them have trample. \ No newline at end of file +Oracle:When this creature enters, earthbend 2. (Target land you control becomes a 0/0 creature with haste that's still a land. Put two +1/+1 counters on it. When it dies or is exiled, return it to the battlefield tapped.)\nCreatures you control with +1/+1 counters on them have trample. diff --git a/forge-gui/res/cardsfolder/b/behold_the_sinister_six.txt b/forge-gui/res/cardsfolder/b/behold_the_sinister_six.txt index 57ae6b8e815..b014a9c2f84 100644 --- a/forge-gui/res/cardsfolder/b/behold_the_sinister_six.txt +++ b/forge-gui/res/cardsfolder/b/behold_the_sinister_six.txt @@ -3,4 +3,4 @@ ManaCost:6 B Types:Sorcery A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | TgtPrompt$ Choose up to six target creature cards with different names in your graveyard | ValidTgts$ Creature.YouOwn | TargetsWithDifferentNames$ True | TargetMin$ 0 | TargetMax$ 6 | SpellDescription$ Return up to six target creature cards with different names from your graveyard to the battlefield. DeckHas:Ability$Graveyard -Oracle:Return up to six target creature cards with different names from your graveyard to the battlefield. \ No newline at end of file +Oracle:Return up to six target creature cards with different names from your graveyard to the battlefield. diff --git a/forge-gui/res/cardsfolder/b/bumi_eclectic_earthbender.txt b/forge-gui/res/cardsfolder/b/bumi_eclectic_earthbender.txt index 8559b76944e..99d21634e24 100644 --- a/forge-gui/res/cardsfolder/b/bumi_eclectic_earthbender.txt +++ b/forge-gui/res/cardsfolder/b/bumi_eclectic_earthbender.txt @@ -7,4 +7,4 @@ SVar:TrigEarthbend:DB$ Earthbend | Num$ 1 T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPutCounterAll | TriggerDescription$ Whenever NICKNAME attacks, put two +1/+1 counters on each land creature you control. SVar:TrigPutCounterAll:DB$ PutCounterAll | ValidCards$ Creature.Land+YouCtrl | CounterType$ P1P1 | CounterNum$ 2 DeckHas:Ability$Counters -Oracle:When Bumi enters, earthbend 1. (Target land you control becomes a 0/0 creature with haste that's still a land. Put a +1/+1 counter on it. When it dies or is exiled, return it to the battlefield tapped.)\nWhenever Bumi attacks, put two +1/+1 counters on each land creature you control. \ No newline at end of file +Oracle:When Bumi enters, earthbend 1. (Target land you control becomes a 0/0 creature with haste that's still a land. Put a +1/+1 counter on it. When it dies or is exiled, return it to the battlefield tapped.)\nWhenever Bumi attacks, put two +1/+1 counters on each land creature you control. diff --git a/forge-gui/res/cardsfolder/c/chlorophant.txt b/forge-gui/res/cardsfolder/c/chlorophant.txt index e63ccf172c3..ce01a6059f5 100644 --- a/forge-gui/res/cardsfolder/c/chlorophant.txt +++ b/forge-gui/res/cardsfolder/c/chlorophant.txt @@ -6,4 +6,4 @@ T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | O S:Mode$ Continuous | Affected$ Card.Self | AddTrigger$ TrigCounter | Condition$ Threshold | Description$ Threshold — As long as there are seven or more cards in your graveyard, CARDNAME has "At the beginning of your upkeep, you may put another +1/+1 counter on CARDNAME." SVar:TrigCounter:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ GimmeSome | TriggerDescription$ At the beginning of your upkeep, you may put another +1/+1 counter on CARDNAME. SVar:GimmeSome:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 -Oracle:At the beginning of your upkeep, you may put a +1/+1 counter on Chlorophant.\nThreshold — As long as there are seven or more cards in your graveyard,, Chlorophant has "At the beginning of your upkeep, you may put another +1/+1 counter on Chlorophant." +Oracle:At the beginning of your upkeep, you may put a +1/+1 counter on Chlorophant.\nThreshold — As long as there are seven or more cards in your graveyard, Chlorophant has "At the beginning of your upkeep, you may put another +1/+1 counter on Chlorophant." diff --git a/forge-gui/res/cardsfolder/d/dai_li_indoctrination.txt b/forge-gui/res/cardsfolder/d/dai_li_indoctrination.txt index dadf19be943..142cb3da795 100644 --- a/forge-gui/res/cardsfolder/d/dai_li_indoctrination.txt +++ b/forge-gui/res/cardsfolder/d/dai_li_indoctrination.txt @@ -5,4 +5,4 @@ A:SP$ Charm | Choices$ DBDiscard,DBEarthbend SVar:DBDiscard:DB$ Discard | ValidTgts$ Opponent | Mode$ RevealYouChoose | DiscardValid$ Permanent.nonLand | NumCards$ 1 | SpellDescription$ Target opponent reveals their hand. You choose a nonland permanent card from it. That player discards that card. SVar:DBEarthbend:DB$ Earthbend | Num$ 2 | SpellDescription$ Earthbend 2. (Target land you control becomes a 0/0 creature with haste that's still a land. Put two +1/+1 counters on it. When it dies or is exiled, return it to the battlefield tapped.) DeckHas:Ability$Discard|Counters -Oracle:Choose one —\n• Target opponent reveals their hand. You choose a nonland permanent card from it. That player discards that card.\n• Earthbend 2. (Target land you control becomes a 0/0 creature with haste that's still a land. Put two +1/+1 counters on it. When it dies or is exiled, return it to the battlefield tapped.) \ No newline at end of file +Oracle:Choose one —\n• Target opponent reveals their hand. You choose a nonland permanent card from it. That player discards that card.\n• Earthbend 2. (Target land you control becomes a 0/0 creature with haste that's still a land. Put two +1/+1 counters on it. When it dies or is exiled, return it to the battlefield tapped.) diff --git a/forge-gui/res/cardsfolder/e/earth_village_ruffians.txt b/forge-gui/res/cardsfolder/e/earth_village_ruffians.txt index 57a170376c6..5a62a08b27a 100644 --- a/forge-gui/res/cardsfolder/e/earth_village_ruffians.txt +++ b/forge-gui/res/cardsfolder/e/earth_village_ruffians.txt @@ -5,4 +5,4 @@ PT:3/1 T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigEarthbend | TriggerDescription$ When this creature dies, earthbend 2. (Target land you control becomes a 0/0 creature with haste that's still a land. Put two +1/+1 counters on it. When it dies or is exiled, return it to the battlefield tapped.) SVar:TrigEarthbend:DB$ Earthbend | Num$ 2 DeckHas:Ability$Counters -Oracle:When this creature dies, earthbend 2. (Target land you control becomes a 0/0 creature with haste that's still a land. Put two +1/+1 counters on it. When it dies or is exiled, return it to the battlefield tapped.) \ No newline at end of file +Oracle:When this creature dies, earthbend 2. (Target land you control becomes a 0/0 creature with haste that's still a land. Put two +1/+1 counters on it. When it dies or is exiled, return it to the battlefield tapped.) diff --git a/forge-gui/res/cardsfolder/e/earthbending_student.txt b/forge-gui/res/cardsfolder/e/earthbending_student.txt index fa0766dd8d9..509f0de1705 100644 --- a/forge-gui/res/cardsfolder/e/earthbending_student.txt +++ b/forge-gui/res/cardsfolder/e/earthbending_student.txt @@ -6,4 +6,4 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S SVar:TrigEarthbend:DB$ Earthbend | Num$ 2 S:Mode$ Continuous | Affected$ Creature.Land+YouCtrl | AddKeyword$ Vigilance | Description$ Land creatures you control have vigilance. (Attacking doesn't cause them to tap.) DeckHas:Ability$Counters -Oracle:When this creature enters, earthbend 2. (Target land you control becomes a 0/0 creature with haste that's still a land. Put two +1/+1 counters on it. When it dies or is exiled, return it to the battlefield tapped.)\nLand creatures you control have vigilance. (Attacking doesn't cause them to tap.) \ No newline at end of file +Oracle:When this creature enters, earthbend 2. (Target land you control becomes a 0/0 creature with haste that's still a land. Put two +1/+1 counters on it. When it dies or is exiled, return it to the battlefield tapped.)\nLand creatures you control have vigilance. (Attacking doesn't cause them to tap.) diff --git a/forge-gui/res/cardsfolder/e/electros_bolt.txt b/forge-gui/res/cardsfolder/e/electros_bolt.txt index fbdba1ff4af..88186bc7674 100644 --- a/forge-gui/res/cardsfolder/e/electros_bolt.txt +++ b/forge-gui/res/cardsfolder/e/electros_bolt.txt @@ -3,5 +3,5 @@ ManaCost:2 R Types:Sorcery A:SP$ DealDamage | ValidTgts$ Creature | NumDmg$ 4 | SpellDescription$ CARDNAME deals 4 damage to target creature. K:Mayhem:1 R -Oracle:Electro’s Bolt deals 4 damage to target creature.\nMayhem {1}{R} (You may cast this card from your graveyard for {1}{R} if you discarded it this turn. Timing rules still apply.) +Oracle:Electro's Bolt deals 4 damage to target creature.\nMayhem {1}{R} (You may cast this card from your graveyard for {1}{R} if you discarded it this turn. Timing rules still apply.) diff --git a/forge-gui/res/cardsfolder/f/fire_lord_zuko.txt b/forge-gui/res/cardsfolder/f/fire_lord_zuko.txt index 2bb84bf5350..a4dee053bb0 100644 --- a/forge-gui/res/cardsfolder/f/fire_lord_zuko.txt +++ b/forge-gui/res/cardsfolder/f/fire_lord_zuko.txt @@ -7,4 +7,4 @@ T:Mode$ SpellCast | ValidCard$ Card.wasCastFromExile | ValidActivatingPlayer$ Yo T:Mode$ ChangesZone | Origin$ Exile | Destination$ Battlefield | ValidCard$ Permanent.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigPutCounterAll | Secondary$ True | TriggerDescription$ Whenever you cast a spell from exile and whenever a permanent you control enters from exile, put a +1/+1 counter on each creature you control. SVar:TrigPutCounterAll:DB$ PutCounterAll | ValidCards$ Creature.YouCtrl | CounterType$ P1P1 | CounterNum$ 1 SVar:X:Count$CardPower -Oracle:Firebending X, where X is Fire Lord Zuko's power. (Whenever this creature attacks, add X {R}. This mana lasts until end of combat.)\nWhenever you cast a spell from exile and whenever a permanent you control enters from exile, put a +1/+1 counter on each creature you control. \ No newline at end of file +Oracle:Firebending X, where X is Fire Lord Zuko's power. (Whenever this creature attacks, add X {R}. This mana lasts until end of combat.)\nWhenever you cast a spell from exile and whenever a permanent you control enters from exile, put a +1/+1 counter on each creature you control. diff --git a/forge-gui/res/cardsfolder/f/fire_nation_attacks.txt b/forge-gui/res/cardsfolder/f/fire_nation_attacks.txt index ccc85675cee..9d3da9e3b14 100644 --- a/forge-gui/res/cardsfolder/f/fire_nation_attacks.txt +++ b/forge-gui/res/cardsfolder/f/fire_nation_attacks.txt @@ -3,4 +3,4 @@ ManaCost:4 R Types:Instant A:SP$ Token | TokenAmount$ 2 | TokenScript$ r_2_2_soldier_firebending_1 | TokenOwner$ You | SpellDescription$ Create two 2/2 red Soldier creature tokens with firebending 1. (Whenever a creature with firebending 1 attacks, add {R}. This mana lasts until end of combat.) K:Flashback:8 R -Oracle:Create two 2/2 red Soldier creature tokens with firebending 1. (Whenever a creature with firebending 1 attacks, add {R}. This mana lasts until end of combat.)\nFlashback {8}{R} (You may may cast this card from your graveyard for its flashback cost. Then exile it.) \ No newline at end of file +Oracle:Create two 2/2 red Soldier creature tokens with firebending 1. (Whenever a creature with firebending 1 attacks, add {R}. This mana lasts until end of combat.)\nFlashback {8}{R} (You may may cast this card from your graveyard for its flashback cost. Then exile it.) diff --git a/forge-gui/res/cardsfolder/f/fire_sages.txt b/forge-gui/res/cardsfolder/f/fire_sages.txt index 6d5863da493..ea44ae2df50 100644 --- a/forge-gui/res/cardsfolder/f/fire_sages.txt +++ b/forge-gui/res/cardsfolder/f/fire_sages.txt @@ -4,4 +4,4 @@ Types:Creature Human Cleric PT:2/2 K:Firebending:1 A:AB$ PutCounter | Cost$ 1 R R | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Put a +1/+1 counter on this creature. -Oracle:Firebending 1 (Whenever this creature attacks, add {R}. This mana lasts until end of combat.)\n{1}{R}{R}: Put a +1/+1 counter on this creature. \ No newline at end of file +Oracle:Firebending 1 (Whenever this creature attacks, add {R}. This mana lasts until end of combat.)\n{1}{R}{R}: Put a +1/+1 counter on this creature. diff --git a/forge-gui/res/cardsfolder/h/haru_hidden_talent.txt b/forge-gui/res/cardsfolder/h/haru_hidden_talent.txt index 4519ac3ce57..7ad83ae1778 100644 --- a/forge-gui/res/cardsfolder/h/haru_hidden_talent.txt +++ b/forge-gui/res/cardsfolder/h/haru_hidden_talent.txt @@ -6,4 +6,4 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Ally.O SVar:TrigEarthbend:DB$ Earthbend | Num$ 1 DeckHas:Ability$Counters DeckNeeds:Type$Ally -Oracle:Whenever another Ally you control enters, earthbend 1. (Target land you control becomes a 0/0 creature with haste that's still a land. Put a +1/+1 counter on it. When it dies or is exiled, return it to the battlefield tapped.) \ No newline at end of file +Oracle:Whenever another Ally you control enters, earthbend 1. (Target land you control becomes a 0/0 creature with haste that's still a land. Put a +1/+1 counter on it. When it dies or is exiled, return it to the battlefield tapped.) diff --git a/forge-gui/res/cardsfolder/i/inner_demons_gangsters.txt b/forge-gui/res/cardsfolder/i/inner_demons_gangsters.txt index 65adf772af2..1ba0bccaea5 100644 --- a/forge-gui/res/cardsfolder/i/inner_demons_gangsters.txt +++ b/forge-gui/res/cardsfolder/i/inner_demons_gangsters.txt @@ -2,5 +2,5 @@ Name:Inner Demons Gangsters ManaCost:3 B Types:Creature Human Rogue Villain PT:3/4 -A:AB$ Pump | Cost$ Discard<1/Card> | Defined$ Self | NumAtt$ +1 | KW$ Menace | SorcerySpeed$ True | SpellDescription$ This creature gets +1/+0 and gains menace until end of turn. Activate only as a sorcery. (It can't be blocked except by two or more creatures.) +A:AB$ Pump | Cost$ Discard<1/Card> | Defined$ Self | NumAtt$ +1 | KW$ Menace | SorcerySpeed$ True | SpellDescription$ This creature gets +1/+0 and gains menace until end of turn. Activate only as a sorcery. (It can't be blocked except by two or more creatures.) Oracle:Discard a card: This creature gets +1/+0 and gains menace until end of turn. Activate only as a sorcery. (It can't be blocked except by two or more creatures.) diff --git a/forge-gui/res/cardsfolder/n/name_sticker_goblin.txt b/forge-gui/res/cardsfolder/n/name_sticker_goblin.txt index 8c30691d0c9..cf0d2543e4d 100644 --- a/forge-gui/res/cardsfolder/n/name_sticker_goblin.txt +++ b/forge-gui/res/cardsfolder/n/name_sticker_goblin.txt @@ -7,4 +7,4 @@ SVar:TrigRollDice:DB$ RollDice | Sides$ 20 | ResultSubAbilities$ 1-6:DBMana1,7-1 SVar:DBMana1:DB$ Mana | Produced$ R | Amount$ 4 | SpellDescription$ 1-6 VERT Add {R}{R}{R}{R}. SVar:DBMana2:DB$ Mana | Produced$ R | Amount$ 5 | SpellDescription$ 7-14 VERT Add {R}{R}{R}{R}{R}. SVar:DBMana3:DB$ Mana | Produced$ R | Amount$ 6 | SpellDescription$ 15-20 VERT Add {R}{R}{R}{R}{R}{R}. -Oracle:When this creature enters from anywhere other than a graveyard or exile, if it’s on the battlefield and you control 9 or fewer creatures named “Name Sticker” Goblin, roll a 20-sided die.\n1-6 | Add {R}{R}{R}{R}.\n7-14 | Add {R}{R}{R}{R}{R}.\n15-20 | Add {R}{R}{R}{R}{R}{R}. +Oracle:When this creature enters from anywhere other than a graveyard or exile, if it's on the battlefield and you control 9 or fewer creatures named "Name Sticker" Goblin, roll a 20-sided die.\n1-6 | Add {R}{R}{R}{R}.\n7-14 | Add {R}{R}{R}{R}{R}.\n15-20 | Add {R}{R}{R}{R}{R}{R}. diff --git a/forge-gui/res/cardsfolder/p/peter_parker_amazing_spider_man.txt b/forge-gui/res/cardsfolder/p/peter_parker_amazing_spider_man.txt index baee9c1c6d9..7d3b1cdfc9e 100644 --- a/forge-gui/res/cardsfolder/p/peter_parker_amazing_spider_man.txt +++ b/forge-gui/res/cardsfolder/p/peter_parker_amazing_spider_man.txt @@ -17,5 +17,4 @@ PT:4/4 K:Vigilance K:Reach S:Mode$ Continuous | Affected$ Legendary.YouCtrl+wasCast+nonColorless | AffectedZone$ Stack | AddKeyword$ Web-slinging:G W U:Spell.Legendary+nonColorless | Description$ Each legendary spell you cast that's one or more colors has web-slinging {G}{W}{U}. (You may cast a spell for its web-slinging cost if you also return a tapped creature you control to its owner's hand.) -Oracle:Vigilance, reach\nEach legendary spell you cast that’s one or more colors has web-slinging {G}{W}{U}. (You may cast a spell for its web-slinging cost if you also return a tapped creature you control to its owner's hand.) - +Oracle:Vigilance, reach\nEach legendary spell you cast that's one or more colors has web-slinging {G}{W}{U}. (You may cast a spell for its web-slinging cost if you also return a tapped creature you control to its owner's hand.) diff --git a/forge-gui/res/cardsfolder/r/rebellious_captives.txt b/forge-gui/res/cardsfolder/r/rebellious_captives.txt index 4c62071a175..7918b91107f 100644 --- a/forge-gui/res/cardsfolder/r/rebellious_captives.txt +++ b/forge-gui/res/cardsfolder/r/rebellious_captives.txt @@ -5,4 +5,4 @@ PT:2/2 A:AB$ PutCounter | Cost$ 6 | Defined$ Self | CounterType$ P1P1 | CounterNum$ 2 | Exhaust$ True | SubAbility$ DBEarthbend | SpellDescription$ Put two +1/+1 counters on this creature, then earthbend 2. (Target land you control becomes a 0/0 creature with haste that's still a land. Put two +1/+1 counters on it. When it dies or is exiled, return it to the battlefield tapped. Activate each exhaust ability only once.) SVar:DBEarthbend:DB$ Earthbend | Num$ 2 DeckHas:Ability$Counters -Oracle:Exhaust — {6}: Put two +1/+1 counters on this creature, then earthbend 2. (Target land you control becomes a 0/0 creature with haste that's still a land. Put two +1/+1 counters on it. When it dies or is exiled, return it to the battlefield tapped. Activate each exhaust ability only once.) \ No newline at end of file +Oracle:Exhaust — {6}: Put two +1/+1 counters on this creature, then earthbend 2. (Target land you control becomes a 0/0 creature with haste that's still a land. Put two +1/+1 counters on it. When it dies or is exiled, return it to the battlefield tapped. Activate each exhaust ability only once.) diff --git a/forge-gui/res/cardsfolder/r/rough_rhino_cavalry.txt b/forge-gui/res/cardsfolder/r/rough_rhino_cavalry.txt index eb523510f0b..47c43cb9c77 100644 --- a/forge-gui/res/cardsfolder/r/rough_rhino_cavalry.txt +++ b/forge-gui/res/cardsfolder/r/rough_rhino_cavalry.txt @@ -6,4 +6,4 @@ K:Firebending:2 A:AB$ PutCounter | Cost$ 8 | Defined$ Self | CounterType$ P1P1 | CounterNum$ 2 | Exhaust$ True | SubAbility$ DBPump | SpellDescription$ Put two +1/+1 counters on this creature. It gains trample until end of turn. (Activate each exhaust ability only once.) SVar:DBPump:DB$ Pump | Defined$ Self | KW$ Trample DeckHas:Ability$Counters -Oracle:Firebending 2 (Whenever this creature attacks, add {R}{R}. This mana lasts until end of combat.)\nExhaust — {8}: Put two +1/+1 counters on this creature. It gains trample until end of turn. (Activate each exhaust ability only once.) \ No newline at end of file +Oracle:Firebending 2 (Whenever this creature attacks, add {R}{R}. This mana lasts until end of combat.)\nExhaust — {8}: Put two +1/+1 counters on this creature. It gains trample until end of turn. (Activate each exhaust ability only once.) diff --git a/forge-gui/res/cardsfolder/t/toph_the_blind_bandit.txt b/forge-gui/res/cardsfolder/t/toph_the_blind_bandit.txt index 8e47200f006..285d343ae23 100644 --- a/forge-gui/res/cardsfolder/t/toph_the_blind_bandit.txt +++ b/forge-gui/res/cardsfolder/t/toph_the_blind_bandit.txt @@ -7,4 +7,4 @@ SVar:TrigEarthbend:DB$ Earthbend | Num$ 2 S:Mode$ Continuous | CharacteristicDefining$ True | SetPower$ X | Description$ NICKNAME's power is equal to the number of +1/+1 counters on lands you control. SVar:X:Count$Valid Land.YouCtrl$CardCounters.P1P1 DeckHas:Ability$Counters -Oracle:When Toph enters, earthbend 2. (Target land you control becomes a 0/0 creature with haste that's still a land. Put two +1/+1 counters on it. When it dies or is exiled, return it to the battlefield tapped.)\nToph's power is equal to the number of +1/+1 counters on lands you control. \ No newline at end of file +Oracle:When Toph enters, earthbend 2. (Target land you control becomes a 0/0 creature with haste that's still a land. Put two +1/+1 counters on it. When it dies or is exiled, return it to the battlefield tapped.)\nToph's power is equal to the number of +1/+1 counters on lands you control. diff --git a/forge-gui/res/cardsfolder/t/toph_the_first_metalbender.txt b/forge-gui/res/cardsfolder/t/toph_the_first_metalbender.txt index 4500e47bb67..f2a3cba7f80 100644 --- a/forge-gui/res/cardsfolder/t/toph_the_first_metalbender.txt +++ b/forge-gui/res/cardsfolder/t/toph_the_first_metalbender.txt @@ -6,4 +6,4 @@ S:Mode$ Continuous | Affected$ Artifact.!token+YouCtrl | AddType$ Land | Descrip T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigEarthbend | TriggerDescription$ At the beginning of your end step, earthbend 2. (Target land you control becomes a 0/0 creature with haste that's still a land. Put two +1/+1 counters on it. When it dies or is exiled, return it to the battlefield tapped.) SVar:TrigEarthbend:DB$ Earthbend | Num$ 2 DeckHas:Ability$Counters -Oracle:Nontoken artifacts you control are lands in addition to their other types. (They don't gain the ability to {T} for mana.)\nAt the beginning of your end step, earthbend 2. (Target land you control becomes a 0/0 creature with haste that's still a land. Put two +1/+1 counters on it. When it dies or is exiled, return it to the battlefield tapped.) \ No newline at end of file +Oracle:Nontoken artifacts you control are lands in addition to their other types. (They don't gain the ability to {T} for mana.)\nAt the beginning of your end step, earthbend 2. (Target land you control becomes a 0/0 creature with haste that's still a land. Put two +1/+1 counters on it. When it dies or is exiled, return it to the battlefield tapped.) diff --git a/forge-gui/res/cardsfolder/v/vindictive_warden.txt b/forge-gui/res/cardsfolder/v/vindictive_warden.txt index 01bac8a17b1..423b2a75186 100644 --- a/forge-gui/res/cardsfolder/v/vindictive_warden.txt +++ b/forge-gui/res/cardsfolder/v/vindictive_warden.txt @@ -5,4 +5,4 @@ PT:2/3 K:Menace K:Firebending:1 A:AB$ DealDamage | Cost$ 3 | Defined$ Player.Opponent | NumDmg$ 1 | SpellDescription$ CARDNAME deals 1 damage to each opponent. -Oracle:Menace (This creature can't be blocked except by two or more creatures.)\nFirebending 1 (Whenever this creature attacks, add {R}. This mana lasts until end of combat.)\n{3}: This creature deals 1 damage to each opponent. \ No newline at end of file +Oracle:Menace (This creature can't be blocked except by two or more creatures.)\nFirebending 1 (Whenever this creature attacks, add {R}. This mana lasts until end of combat.)\n{3}: This creature deals 1 damage to each opponent. diff --git a/forge-gui/res/tokenscripts/g_1_1_forest_dryad_squirrel.txt b/forge-gui/res/tokenscripts/g_1_1_forest_dryad_squirrel.txt index 0f73be0f5ca..b2c5e0c0e6d 100644 --- a/forge-gui/res/tokenscripts/g_1_1_forest_dryad_squirrel.txt +++ b/forge-gui/res/tokenscripts/g_1_1_forest_dryad_squirrel.txt @@ -3,4 +3,4 @@ ManaCost:no cost Colors:green Types:Land Creature Forest Dryad Squirrel PT:1/1 -Oracle:({T}: Add {G}.) \ No newline at end of file +Oracle:({T}: Add {G}.) diff --git a/forge-gui/res/tokenscripts/r_2_2_soldier_firebending_1.txt b/forge-gui/res/tokenscripts/r_2_2_soldier_firebending_1.txt index cb6bdbd40dc..49f8996b9bd 100644 --- a/forge-gui/res/tokenscripts/r_2_2_soldier_firebending_1.txt +++ b/forge-gui/res/tokenscripts/r_2_2_soldier_firebending_1.txt @@ -1,7 +1,7 @@ -Name:Soldier Token -ManaCost:no cost -Colors:red -Types:Creature Soldier -PT:2/2 -K:Firebending:1 -Oracle:Firebending 1 (Whenever this token attacks, add {R}. This mana lasts until end of combat.) \ No newline at end of file +Name:Soldier Token +ManaCost:no cost +Colors:red +Types:Creature Soldier +PT:2/2 +K:Firebending:1 +Oracle:Firebending 1 (Whenever this token attacks, add {R}. This mana lasts until end of combat.) From a72df6ad16875c61328eeb2f2c500339e9fb5bd0 Mon Sep 17 00:00:00 2001 From: kevlahnota Date: Fri, 19 Sep 2025 13:19:50 +0800 Subject: [PATCH 224/355] updateRarityFilterOdds (#8746) --- .../planarconquest/ConquestPreferences.java | 3 ++- .../planarconquest/ConquestUtil.java | 3 +-- .../src/main/java/forge/model/FModel.java | 27 +++++++++++-------- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestPreferences.java b/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestPreferences.java index ac7a8485c4a..317a2bbfffc 100644 --- a/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestPreferences.java +++ b/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestPreferences.java @@ -21,6 +21,7 @@ import java.io.Serializable; import forge.localinstance.properties.ForgeConstants; import forge.localinstance.properties.PreferencesStore; +import forge.model.FModel; @SuppressWarnings("serial") public class ConquestPreferences extends PreferencesStore implements Serializable { @@ -74,7 +75,7 @@ public class ConquestPreferences extends PreferencesStore odds = Maps.newEnumMap(CardRarity.class); if (prefs.getPrefBoolean(CQPref.AETHER_USE_DEFAULT_RARITY_ODDS)) { diff --git a/forge-gui/src/main/java/forge/model/FModel.java b/forge-gui/src/main/java/forge/model/FModel.java index e8ae20c95d4..b33b448ae1d 100644 --- a/forge-gui/src/main/java/forge/model/FModel.java +++ b/forge-gui/src/main/java/forge/model/FModel.java @@ -220,17 +220,12 @@ public final class FModel { for (final CardBlock b : blocks) { magicDb.getBlockLands().add(b.getLandSet().getCode()); } - questPreferences = new QuestPreferences(); - conquestPreferences = new ConquestPreferences(); - netPreferences = new ForgeNetPreferences(); fantasyBlocks = new StorageBase<>("Custom blocks", new CardBlock.Reader(ForgeConstants.BLOCK_DATA_DIR + "fantasyblocks.txt", magicDb.getEditions())); themedChaosDrafts = new StorageBase<>("Themed Chaos Drafts", new ThemedChaosDraft.Reader(ForgeConstants.BLOCK_DATA_DIR + "chaosdraftthemes.txt")); planes = new StorageBase<>("Conquest planes", new ConquestPlane.Reader(ForgeConstants.CONQUEST_PLANES_DIR + "planes.txt")); Map standardWorlds = new QuestWorld.Reader(ForgeConstants.QUEST_WORLD_DIR + "worlds.txt").readAll(); Map customWorlds = new QuestWorld.Reader(ForgeConstants.USER_QUEST_WORLD_DIR + "customworlds.txt").readAll(); - for (QuestWorld world:customWorlds.values()){ - world.setCustom(true); - } + customWorlds.values().forEach(world -> world.setCustom(true)); standardWorlds.putAll(customWorlds); worlds = new StorageBase<>("Quest worlds", null, standardWorlds); @@ -240,14 +235,9 @@ public final class FModel { FThreads.invokeInEdtLater(() -> progressBar.setDescription(Localizer.getInstance().getMessage("splash.loading.decks"))); } - decks = new CardCollections(); - quest = new QuestController(); - conquest = new ConquestController(); - CardPreferences.load(); DeckPreferences.load(); ItemManagerConfig.load(); - ConquestUtil.updateRarityFilterOdds(); achievements = Maps.newHashMap(); achievements.put(GameType.Constructed, new ConstructedAchievements()); @@ -300,10 +290,14 @@ public final class FModel { } public static QuestController getQuest() { + if (quest == null) + quest = new QuestController(); return quest; } public static ConquestController getConquest() { + if (conquest == null) + conquest = new ConquestController(); return conquest; } @@ -435,6 +429,8 @@ public final class FModel { return preferences; } public static ForgeNetPreferences getNetPreferences() { + if (netPreferences == null) + netPreferences = new ForgeNetPreferences(); return netPreferences; } @@ -466,10 +462,17 @@ public final class FModel { } public static QuestPreferences getQuestPreferences() { + if (questPreferences == null) + questPreferences = new QuestPreferences(); return questPreferences; } public static ConquestPreferences getConquestPreferences() { + if (conquestPreferences == null) { + conquestPreferences = new ConquestPreferences(); + // initialize on first call... + ConquestUtil.updateRarityFilterOdds(conquestPreferences); + } return conquestPreferences; } @@ -489,6 +492,8 @@ public final class FModel { } public static CardCollections getDecks() { + if (decks == null) + decks = new CardCollections(); return decks; } From 9bc6ab747d9e11361c120cb98f007dcb87a31964 Mon Sep 17 00:00:00 2001 From: Chris H Date: Fri, 19 Sep 2025 09:11:15 -0400 Subject: [PATCH 225/355] Update Venom, Eddie Brock's power and toughness --- forge-gui/res/cardsfolder/v/venom_eddie_brock.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/v/venom_eddie_brock.txt b/forge-gui/res/cardsfolder/v/venom_eddie_brock.txt index d9ddc26fae9..cef924879ed 100644 --- a/forge-gui/res/cardsfolder/v/venom_eddie_brock.txt +++ b/forge-gui/res/cardsfolder/v/venom_eddie_brock.txt @@ -1,7 +1,7 @@ Name:Venom, Eddie Brock ManaCost:4 B B Types:Legendary Creature Symbiote Villain -PT:3/3 +PT:6/4 K:Menace T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.Other | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever another creature dies, put a +1/+1 counter on NICKNAME. If that creature was a Villain, draw a card. SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBDraw From 6ec6d64cb2dd58edd129c5a8be9e9c7762980e53 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Fri, 19 Sep 2025 22:06:38 +0800 Subject: [PATCH 226/355] update FModel, add Icon Overlay for Horizontal tabs --- .../screens/match/views/VPlayerPanel.java | 23 +++ .../src/main/java/forge/model/FModel.java | 188 +++++++++--------- 2 files changed, 117 insertions(+), 94 deletions(-) diff --git a/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java b/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java index d6362537b99..477ad165d8c 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java @@ -498,6 +498,24 @@ public class VPlayerPanel extends FContainer { } } + @Override + protected void drawOverlay(Graphics g) { + if (Forge.isHorizontalTabLayout()) { + InfoTab infoTab = selectedTab; + if (infoTab != null) { + VDisplayArea selectedDisplayArea = infoTab.getDisplayArea(); + if (selectedDisplayArea != null && selectedDisplayArea.getCount() > 0) { + float scale = avatarWidth / 2f; + float x = selectedDisplayArea.getLeft(); + float y = selectedDisplayArea.getBottom() - scale; + g.fillRect(getAltDisplayAreaBackColor(), x, y, scale, scale); + infoTab.icon.draw(g, x, y, scale, scale); + } + } + } + super.drawOverlay(g); + } + @Override public void drawBackground(Graphics g) { float y; @@ -1069,6 +1087,11 @@ public class VPlayerPanel extends FContainer { @Override public float getIdealWidth(float pref) { + if (getDisplayArea() instanceof VCardDisplayArea vCardDisplayArea) { + float cardWidth = vCardDisplayArea.getCardWidth(vCardDisplayArea.getHeight()); + float size = vCardDisplayArea.getCount(); + return Math.min(cardWidth * size, pref); + } return pref; } diff --git a/forge-gui/src/main/java/forge/model/FModel.java b/forge-gui/src/main/java/forge/model/FModel.java index b33b448ae1d..6232a69d3d2 100644 --- a/forge-gui/src/main/java/forge/model/FModel.java +++ b/forge-gui/src/main/java/forge/model/FModel.java @@ -99,19 +99,19 @@ public final class FModel { private static IStorage worlds; private static GameFormat.Collection formats; private static ItemPool uniqueCardsNoAlt, allCardsNoAlt, planechaseCards, archenemyCards, - brawlCommander, oathbreakerCommander, tinyLeadersCommander, commanderPool, - avatarPool, conspiracyPool, dungeonPool, attractionPool, contraptionPool; + brawlCommander, oathbreakerCommander, tinyLeadersCommander, commanderPool, + avatarPool, conspiracyPool, dungeonPool, attractionPool, contraptionPool; public static void initialize(final IProgressBar progressBar, Function adjustPrefs) { initialize(progressBar, adjustPrefs, false); } public static void initialize(final IProgressBar progressBar, Function adjustPrefs, boolean isSimTest) { ImageKeys.initializeDirs( - ForgeConstants.CACHE_CARD_PICS_DIR, ForgeConstants.CACHE_CARD_PICS_SUBDIR, - ForgeConstants.CACHE_TOKEN_PICS_DIR, ForgeConstants.CACHE_ICON_PICS_DIR, - ForgeConstants.CACHE_BOOSTER_PICS_DIR, ForgeConstants.CACHE_FATPACK_PICS_DIR, - ForgeConstants.CACHE_BOOSTERBOX_PICS_DIR, ForgeConstants.CACHE_PRECON_PICS_DIR, - ForgeConstants.CACHE_TOURNAMENTPACK_PICS_DIR); + ForgeConstants.CACHE_CARD_PICS_DIR, ForgeConstants.CACHE_CARD_PICS_SUBDIR, + ForgeConstants.CACHE_TOKEN_PICS_DIR, ForgeConstants.CACHE_ICON_PICS_DIR, + ForgeConstants.CACHE_BOOSTER_PICS_DIR, ForgeConstants.CACHE_FATPACK_PICS_DIR, + ForgeConstants.CACHE_BOOSTERBOX_PICS_DIR, ForgeConstants.CACHE_PRECON_PICS_DIR, + ForgeConstants.CACHE_TOURNAMENTPACK_PICS_DIR); // Instantiate preferences: quest and regular // Preferences are initialized first so that the splash screen can be translated. @@ -198,15 +198,12 @@ public final class FModel { ForgePreferences.DEV_MODE = preferences.getPrefBoolean(FPref.DEV_MODE_ENABLED); ForgePreferences.UPLOAD_DRAFT = ForgePreferences.NET_CONN; - formats = new GameFormat.Collection(new GameFormat.Reader( new File(ForgeConstants.FORMATS_DATA_DIR), - new File(ForgeConstants.USER_FORMATS_DIR), preferences.getPrefBoolean(FPref.LOAD_ARCHIVED_FORMATS))); - - magicDb.setStandardPredicate(formats.getStandard().getFilterRules()); - magicDb.setPioneerPredicate(formats.getPioneer().getFilterRules()); - magicDb.setModernPredicate(formats.getModern().getFilterRules()); - magicDb.setCommanderPredicate(formats.get("Commander").getFilterRules()); - magicDb.setOathbreakerPredicate(formats.get("Oathbreaker").getFilterRules()); - magicDb.setBrawlPredicate(formats.get("Brawl").getFilterRules()); + magicDb.setStandardPredicate(getFormats().getStandard().getFilterRules()); + magicDb.setPioneerPredicate(getFormats().getPioneer().getFilterRules()); + magicDb.setModernPredicate(getFormats().getModern().getFilterRules()); + magicDb.setCommanderPredicate(getFormats().get("Commander").getFilterRules()); + magicDb.setOathbreakerPredicate(getFormats().get("Oathbreaker").getFilterRules()); + magicDb.setBrawlPredicate(getFormats().get("Brawl").getFilterRules()); magicDb.setFilteredHandsEnabled(preferences.getPrefBoolean(FPref.FILTERED_HANDS)); try { @@ -215,20 +212,6 @@ public final class FModel { magicDb.setMulliganRule(MulliganDefs.MulliganRule.London); } - blocks = new StorageBase<>("Block definitions", new CardBlock.Reader(ForgeConstants.BLOCK_DATA_DIR + "blocks.txt", magicDb.getEditions())); - // SetblockLands - for (final CardBlock b : blocks) { - magicDb.getBlockLands().add(b.getLandSet().getCode()); - } - fantasyBlocks = new StorageBase<>("Custom blocks", new CardBlock.Reader(ForgeConstants.BLOCK_DATA_DIR + "fantasyblocks.txt", magicDb.getEditions())); - themedChaosDrafts = new StorageBase<>("Themed Chaos Drafts", new ThemedChaosDraft.Reader(ForgeConstants.BLOCK_DATA_DIR + "chaosdraftthemes.txt")); - planes = new StorageBase<>("Conquest planes", new ConquestPlane.Reader(ForgeConstants.CONQUEST_PLANES_DIR + "planes.txt")); - Map standardWorlds = new QuestWorld.Reader(ForgeConstants.QUEST_WORLD_DIR + "worlds.txt").readAll(); - Map customWorlds = new QuestWorld.Reader(ForgeConstants.USER_QUEST_WORLD_DIR + "customworlds.txt").readAll(); - customWorlds.values().forEach(world -> world.setCustom(true)); - standardWorlds.putAll(customWorlds); - worlds = new StorageBase<>("Quest worlds", null, standardWorlds); - Spell.setPerformanceMode(preferences.getPrefBoolean(FPref.PERFORMANCE_MODE)); if (progressBar != null) { @@ -239,15 +222,6 @@ public final class FModel { DeckPreferences.load(); ItemManagerConfig.load(); - achievements = Maps.newHashMap(); - achievements.put(GameType.Constructed, new ConstructedAchievements()); - achievements.put(GameType.Draft, new DraftAchievements()); - achievements.put(GameType.Sealed, new SealedAchievements()); - achievements.put(GameType.Quest, new QuestAchievements()); - achievements.put(GameType.PlanarConquest, new PlanarConquestAchievements()); - achievements.put(GameType.Puzzle, new PuzzleAchievements()); - achievements.put(GameType.Adventure, new AdventureAchievements()); - // Preload AI profiles AiProfileUtil.loadAllProfiles(ForgeConstants.AI_PROFILE_DIR); AiProfileUtil.setAiSideboardingMode(AiProfileUtil.AISideboardingMode.normalizedValueOf(FModel.getPreferences().getPref(FPref.MATCH_AI_SIDEBOARDING_MODE))); @@ -265,25 +239,26 @@ public final class FModel { return; // Don't preload ItemPool on mobile port with less than 5GB RAM // Common ItemPool to preload - allCardsNoAlt = getAllCardsNoAlt(); - archenemyCards = getArchenemyCards(); - planechaseCards = getPlanechaseCards(); - attractionPool = getAttractionPool(); - contraptionPool = getContraptionPool(); + getAllCardsNoAlt(); + getArchenemyCards(); + getPlanechaseCards(); + getAttractionPool(); + getContraptionPool(); if (GuiBase.getInterface().isLibgdxPort()) { // Preload mobile Itempool - uniqueCardsNoAlt = getUniqueCardsNoAlt(); + getUniqueCardsNoAlt(); } else { // Preload Desktop Itempool - commanderPool = getCommanderPool(); - brawlCommander = getBrawlCommander(); - tinyLeadersCommander = getTinyLeadersCommander(); - avatarPool = getAvatarPool(); - conspiracyPool = getConspiracyPool(); + getCommanderPool(); + getOathbreakerCommander(); + getBrawlCommander(); + getTinyLeadersCommander(); + getAvatarPool(); + getConspiracyPool(); } } - private static boolean deckGenMatrixLoaded=false; + private static boolean deckGenMatrixLoaded = false; public static boolean isdeckGenMatrixLoaded(){ return deckGenMatrixLoaded; @@ -303,90 +278,89 @@ public final class FModel { public static ItemPool getUniqueCardsNoAlt() { if (uniqueCardsNoAlt == null) - return ItemPool.createFrom(getMagicDb().getCommonCards().getUniqueCardsNoAlt(), PaperCard.class); + uniqueCardsNoAlt = ItemPool.createFrom(getMagicDb().getCommonCards().getUniqueCardsNoAlt(), PaperCard.class); return uniqueCardsNoAlt; } public static ItemPool getAllCardsNoAlt() { if (allCardsNoAlt == null) - return ItemPool.createFrom(getMagicDb().getCommonCards().getAllCardsNoAlt(), PaperCard.class); + allCardsNoAlt = ItemPool.createFrom(getMagicDb().getCommonCards().getAllCardsNoAlt(), PaperCard.class); return allCardsNoAlt; } public static ItemPool getArchenemyCards() { if (archenemyCards == null) - return ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules(CardRulesPredicates.IS_SCHEME)), PaperCard.class); + archenemyCards = ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules(CardRulesPredicates.IS_SCHEME)), PaperCard.class); return archenemyCards; } public static ItemPool getPlanechaseCards() { if (planechaseCards == null) - return ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules(CardRulesPredicates.IS_PLANE_OR_PHENOMENON)), PaperCard.class); + planechaseCards = ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules(CardRulesPredicates.IS_PLANE_OR_PHENOMENON)), PaperCard.class); return planechaseCards; } public static ItemPool getBrawlCommander() { if (brawlCommander == null) { - return ItemPool.createFrom(getMagicDb().getCommonCards().getAllCardsNoAlt( - FModel.getFormats().get("Brawl").getFilterPrinted() - .and(PaperCardPredicates.fromRules(CardRulesPredicates.CAN_BE_BRAWL_COMMANDER)) - ), PaperCard.class); + brawlCommander = ItemPool.createFrom(getMagicDb().getCommonCards().getAllCardsNoAlt( + FModel.getFormats().get("Brawl").getFilterPrinted() + .and(PaperCardPredicates.fromRules(CardRulesPredicates.CAN_BE_BRAWL_COMMANDER))), PaperCard.class); } return brawlCommander; } public static ItemPool getOathbreakerCommander() { if (oathbreakerCommander == null) - return ItemPool.createFrom(getMagicDb().getCommonCards().getAllCardsNoAlt(PaperCardPredicates.fromRules( - CardRulesPredicates.CAN_BE_OATHBREAKER.or(CardRulesPredicates.CAN_BE_SIGNATURE_SPELL))), PaperCard.class); + oathbreakerCommander = ItemPool.createFrom(getMagicDb().getCommonCards().getAllCardsNoAlt(PaperCardPredicates.fromRules( + CardRulesPredicates.CAN_BE_OATHBREAKER.or(CardRulesPredicates.CAN_BE_SIGNATURE_SPELL))), PaperCard.class); return oathbreakerCommander; } public static ItemPool getTinyLeadersCommander() { if (tinyLeadersCommander == null) - return ItemPool.createFrom(getMagicDb().getCommonCards().getAllCardsNoAlt(PaperCardPredicates.fromRules( - CardRulesPredicates.CAN_BE_TINY_LEADERS_COMMANDER)), PaperCard.class); + tinyLeadersCommander = ItemPool.createFrom(getMagicDb().getCommonCards().getAllCardsNoAlt(PaperCardPredicates.fromRules( + CardRulesPredicates.CAN_BE_TINY_LEADERS_COMMANDER)), PaperCard.class); return tinyLeadersCommander; } public static ItemPool getCommanderPool() { if (commanderPool == null) - return ItemPool.createFrom(getMagicDb().getCommonCards().getAllCardsNoAlt(PaperCardPredicates.CAN_BE_COMMANDER), PaperCard.class); + commanderPool = ItemPool.createFrom(getMagicDb().getCommonCards().getAllCardsNoAlt(PaperCardPredicates.CAN_BE_COMMANDER), PaperCard.class); return commanderPool; } public static ItemPool getAvatarPool() { if (avatarPool == null) - return ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules( - CardRulesPredicates.IS_VANGUARD)), PaperCard.class); + avatarPool = ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules( + CardRulesPredicates.IS_VANGUARD)), PaperCard.class); return avatarPool; } public static ItemPool getConspiracyPool() { if (conspiracyPool == null) - return ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules( - CardRulesPredicates.IS_CONSPIRACY)), PaperCard.class); + conspiracyPool = ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules( + CardRulesPredicates.IS_CONSPIRACY)), PaperCard.class); return conspiracyPool; } public static ItemPool getDungeonPool() { if (dungeonPool == null) - return ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules( - CardRulesPredicates.IS_DUNGEON)), PaperCard.class); + dungeonPool = ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules( + CardRulesPredicates.IS_DUNGEON)), PaperCard.class); return dungeonPool; } public static ItemPool getAttractionPool() { if (attractionPool == null) - return ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules( - CardRulesPredicates.IS_ATTRACTION)), PaperCard.class); + attractionPool = ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules( + CardRulesPredicates.IS_ATTRACTION)), PaperCard.class); return attractionPool; } public static ItemPool getContraptionPool() { - if(contraptionPool == null) - return ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules( - CardRulesPredicates.IS_CONTRAPTION)), PaperCard.class); + if (contraptionPool == null) + contraptionPool = ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules( + CardRulesPredicates.IS_CONTRAPTION)), PaperCard.class); return contraptionPool; } @@ -435,29 +409,38 @@ public final class FModel { } public static AchievementCollection getAchievements(GameType gameType) { - switch (gameType) { // Translate gameType to appropriate type if needed - case Constructed: - case Draft: - case Sealed: - case Quest: - case PlanarConquest: - case Puzzle: - case Adventure: - break; - case AdventureEvent: - gameType = GameType.Adventure; - break; - case QuestDraft: - gameType = GameType.Quest; - break; - default: - gameType = GameType.Constructed; - break; + if (achievements == null) { + achievements = Maps.newHashMap(); + achievements.put(GameType.Constructed, new ConstructedAchievements()); + achievements.put(GameType.Draft, new DraftAchievements()); + achievements.put(GameType.Sealed, new SealedAchievements()); + achievements.put(GameType.Quest, new QuestAchievements()); + achievements.put(GameType.PlanarConquest, new PlanarConquestAchievements()); + achievements.put(GameType.Puzzle, new PuzzleAchievements()); + achievements.put(GameType.Adventure, new AdventureAchievements()); } - return achievements.get(gameType); + + // Translate gameType to appropriate type if needed + return switch (gameType) { + case Constructed, Draft, Sealed, Quest, PlanarConquest, Puzzle, Adventure -> achievements.get(gameType); + case AdventureEvent -> achievements.get(GameType.Adventure); + case QuestDraft -> achievements.get(GameType.Quest); + default -> achievements.get(GameType.Constructed); + }; } public static IStorage getBlocks() { + if (blocks == null) { + blocks = new StorageBase<>("Block definitions", new CardBlock.Reader(ForgeConstants.BLOCK_DATA_DIR + "blocks.txt", magicDb.getEditions())); + // SetblockLands + for (final CardBlock b : blocks) { + try { + magicDb.getBlockLands().add(b.getLandSet().getCode()); + } catch (Exception e) { + e.printStackTrace(); + } + } + } return blocks; } @@ -498,22 +481,39 @@ public final class FModel { } public static IStorage getPlanes() { + if (planes == null) + planes = new StorageBase<>("Conquest planes", new ConquestPlane.Reader(ForgeConstants.CONQUEST_PLANES_DIR + "planes.txt")); return planes; } public static IStorage getWorlds() { + if (worlds == null) { + Map standardWorlds = new QuestWorld.Reader(ForgeConstants.QUEST_WORLD_DIR + "worlds.txt").readAll(); + Map customWorlds = new QuestWorld.Reader(ForgeConstants.USER_QUEST_WORLD_DIR + "customworlds.txt").readAll(); + customWorlds.values().forEach(world -> world.setCustom(true)); + standardWorlds.putAll(customWorlds); + worlds = new StorageBase<>("Quest worlds", null, standardWorlds); + } return worlds; } public static GameFormat.Collection getFormats() { + if (formats == null) { + formats = new GameFormat.Collection(new GameFormat.Reader( new File(ForgeConstants.FORMATS_DATA_DIR), + new File(ForgeConstants.USER_FORMATS_DIR), preferences.getPrefBoolean(FPref.LOAD_ARCHIVED_FORMATS))); + } return formats; } public static IStorage getFantasyBlocks() { + if (fantasyBlocks == null) + fantasyBlocks = new StorageBase<>("Custom blocks", new CardBlock.Reader(ForgeConstants.BLOCK_DATA_DIR + "fantasyblocks.txt", magicDb.getEditions())); return fantasyBlocks; } public static IStorage getThemedChaosDrafts() { + if (themedChaosDrafts == null) + themedChaosDrafts = new StorageBase<>("Themed Chaos Drafts", new ThemedChaosDraft.Reader(ForgeConstants.BLOCK_DATA_DIR + "chaosdraftthemes.txt")); return themedChaosDrafts; } From 90bd0c73d0ced11cadab1e4bd6d6cbb02f8b5ff7 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Sat, 20 Sep 2025 14:32:30 +0200 Subject: [PATCH 227/355] Transform: all DFC can transform now --- .../src/main/java/forge/card/CardRules.java | 16 +--------------- .../src/main/java/forge/item/PaperToken.java | 2 +- .../src/main/java/forge/game/GameAction.java | 4 ---- .../main/java/forge/game/GameActionUtil.java | 3 --- .../ability/effects/CopyPermanentEffect.java | 13 ++++--------- .../src/main/java/forge/game/card/Card.java | 17 ++++++++--------- .../java/forge/game/card/CardCopyService.java | 10 +--------- .../main/java/forge/game/card/CardFactory.java | 12 +++--------- 8 files changed, 18 insertions(+), 59 deletions(-) diff --git a/forge-core/src/main/java/forge/card/CardRules.java b/forge-core/src/main/java/forge/card/CardRules.java index 4e1b6de6b48..2a9bb30ba4b 100644 --- a/forge-core/src/main/java/forge/card/CardRules.java +++ b/forge-core/src/main/java/forge/card/CardRules.java @@ -168,21 +168,7 @@ public final class CardRules implements ICardCharacteristics { } public boolean isTransformable() { - if (CardSplitType.Transform == getSplitType()) { - return true; - } - if (CardSplitType.Modal != getSplitType()) { - return false; - } - for (ICardFace face : getAllFaces()) { - for (String spell : face.getAbilities()) { - if (spell.contains("AB$ SetState") && spell.contains("Mode$ Transform")) { - return true; - } - } - // TODO check keywords if needed - } - return false; + return CardSplitType.Transform == getSplitType() || CardSplitType.Modal == getSplitType(); } public ICardFace getWSpecialize() { diff --git a/forge-core/src/main/java/forge/item/PaperToken.java b/forge-core/src/main/java/forge/item/PaperToken.java index 76f94634093..f60c5befe5c 100644 --- a/forge-core/src/main/java/forge/item/PaperToken.java +++ b/forge-core/src/main/java/forge/item/PaperToken.java @@ -156,7 +156,7 @@ public class PaperToken implements InventoryItemFromSet, IPaperCard { return false; CardSplitType cst = this.cardRules.getSplitType(); //expand this on future for other tokens that has other backsides besides transform.. - return cst == CardSplitType.Transform; + return cst == CardSplitType.Transform || cst == CardSplitType.Modal; } @Override diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index efae785c646..b759be95564 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -220,10 +220,6 @@ public class GameAction { //copied.setGamePieceType(GamePieceType.COPIED_SPELL); } - if (c.isTransformed()) { - copied.incrementTransformedTimestamp(); - } - if (cause != null && cause.isSpell() && c.equals(cause.getHostCard())) { copied.setCastSA(cause); copied.setSplitStateToPlayAbility(cause); diff --git a/forge-game/src/main/java/forge/game/GameActionUtil.java b/forge-game/src/main/java/forge/game/GameActionUtil.java index b5a8fe681e1..b7e2ec6d469 100644 --- a/forge-game/src/main/java/forge/game/GameActionUtil.java +++ b/forge-game/src/main/java/forge/game/GameActionUtil.java @@ -993,9 +993,6 @@ public final class GameActionUtil { oldCard.setBackSide(false); oldCard.setState(oldCard.getFaceupCardStateName(), true); oldCard.unanimateBestow(); - if (ability.isDisturb() || ability.hasParam("CastTransformed")) { - oldCard.undoIncrementTransformedTimestamp(); - } if (ability.hasParam("Prototype")) { oldCard.removeCloneState(oldCard.getPrototypeTimestamp()); diff --git a/forge-game/src/main/java/forge/game/ability/effects/CopyPermanentEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CopyPermanentEffect.java index 7345e824bb1..771909901ab 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CopyPermanentEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CopyPermanentEffect.java @@ -287,22 +287,17 @@ public class CopyPermanentEffect extends TokenEffectBase { int id = newOwner == null ? 0 : newOwner.getGame().nextCardId(); // need to create a physical card first, i need the original card faces copy = CardFactory.getCard(original.getPaperCard(), newOwner, id, host.getGame()); + + copy.setStates(CardFactory.getCloneStates(original, copy, sa)); + // force update the now set State if (original.isTransformable()) { + copy.setState(original.isTransformed() ? CardStateName.Backside : CardStateName.Original, true, true); // 707.8a If an effect creates a token that is a copy of a transforming permanent or a transforming double-faced card not on the battlefield, // the resulting token is a transforming token that has both a front face and a back face. // The characteristics of each face are determined by the copiable values of the same face of the permanent it is a copy of, as modified by any other copy effects that apply to that permanent. // If the token is a copy of a transforming permanent with its back face up, the token enters the battlefield with its back face up. // This rule does not apply to tokens that are created with their own set of characteristics and enter the battlefield as a copy of a transforming permanent due to a replacement effect. copy.setBackSide(original.isBackSide()); - if (original.isTransformed()) { - copy.incrementTransformedTimestamp(); - } - } - - copy.setStates(CardFactory.getCloneStates(original, copy, sa)); - // force update the now set State - if (original.isTransformable()) { - copy.setState(original.isTransformed() ? CardStateName.Backside : CardStateName.Original, true, true); } else { copy.setState(copy.getCurrentStateName(), true, true); } diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 3264e0ee5ae..246b405263b 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -257,7 +257,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr private long worldTimestamp = -1; private long bestowTimestamp = -1; - private long transformedTimestamp = 0; + private long transformedTimestamp = -1; private long prototypeTimestamp = -1; private long mutatedTimestamp = -1; private int timesMutated = 0; @@ -425,8 +425,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr public long getPrototypeTimestamp() { return prototypeTimestamp; } public long getTransformedTimestamp() { return transformedTimestamp; } - public void incrementTransformedTimestamp() { this.transformedTimestamp++; } - public void undoIncrementTransformedTimestamp() { this.transformedTimestamp--; } + public void setTransformedTimestamp(long ts) { this.transformedTimestamp = ts; } // The following methods are used to selectively update certain view components (text, // P/T, card types) in order to avoid card flickering due to aggressive full update @@ -696,7 +695,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr final Map runParams = AbilityKey.mapFromCard(this); getGame().getTriggerHandler().runTrigger(TriggerType.Transformed, runParams, false); } - incrementTransformedTimestamp(); + setTransformedTimestamp(ts); return retResult; } else if (mode.equals("Flip")) { @@ -1070,7 +1069,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr } public final boolean isDoubleFaced() { - return isTransformable() || isMeldable() || isModal(); + return isTransformable() || isMeldable(); } public final boolean isFlipCard() { @@ -1132,7 +1131,10 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr } public final boolean isTransformed() { - return getTransformedTimestamp() != 0; + if (isMeldable() || hasMergedCard()) { + return false; + } + return this.isTransformable() && isBackSide(); } public final boolean isFlipped() { @@ -7638,9 +7640,6 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr if (sa.isBestow()) { animateBestow(); } - if (sa.isDisturb() || sa.hasParam("CastTransformed")) { - incrementTransformedTimestamp(); - } if (sa.hasParam("Prototype") && prototypeTimestamp == -1) { long next = game.getNextTimestamp(); addCloneState(CardFactory.getCloneStates(this, this, sa), next); diff --git a/forge-game/src/main/java/forge/game/card/CardCopyService.java b/forge-game/src/main/java/forge/game/card/CardCopyService.java index 3cd81c703ce..ebf6c3a6009 100644 --- a/forge-game/src/main/java/forge/game/card/CardCopyService.java +++ b/forge-game/src/main/java/forge/game/card/CardCopyService.java @@ -131,9 +131,7 @@ public class CardCopyService { c.setState(in.getCurrentStateName(), false); c.setRules(in.getRules()); - if (in.isTransformed()) { - c.incrementTransformedTimestamp(); - } + c.setBackSide(in.isBackSide()); return c; } @@ -168,9 +166,6 @@ public class CardCopyService { // The characteristics of its front and back face are determined by the copiable values of the same face of the spell it is a copy of, as modified by any other copy effects. // If the spell it is a copy of has its back face up, the copy is created with its back face up. The token that’s put onto the battlefield as that spell resolves is a transforming token. to.setBackSide(copyFrom.isBackSide()); - if (copyFrom.isTransformed()) { - to.incrementTransformedTimestamp(); - } } else if (fromIsTransformedCard) { copyState(copyFrom, copyFrom.getCurrentStateName(), to, CardStateName.Original); } else { @@ -274,9 +269,6 @@ public class CardCopyService { } newCopy.setFlipped(copyFrom.isFlipped()); newCopy.setBackSide(copyFrom.isBackSide()); - if (copyFrom.isTransformed()) { - newCopy.incrementTransformedTimestamp(); - } if (newCopy.hasAlternateState()) { newCopy.setState(copyFrom.getCurrentStateName(), false, true); } diff --git a/forge-game/src/main/java/forge/game/card/CardFactory.java b/forge-game/src/main/java/forge/game/card/CardFactory.java index c902781cfaa..690b1535942 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactory.java +++ b/forge-game/src/main/java/forge/game/card/CardFactory.java @@ -87,22 +87,16 @@ public class CardFactory { // need to create a physical card first, i need the original card faces final Card copy = getCard(original.getPaperCard(), controller, id, game); + copy.setStates(getCloneStates(original, copy, sourceSA)); + // force update the now set State if (original.isTransformable()) { + copy.setState(original.isTransformed() ? CardStateName.Backside : CardStateName.Original, true, true); // 707.8a If an effect creates a token that is a copy of a transforming permanent or a transforming double-faced card not on the battlefield, // the resulting token is a transforming token that has both a front face and a back face. // The characteristics of each face are determined by the copiable values of the same face of the permanent it is a copy of, as modified by any other copy effects that apply to that permanent. // If the token is a copy of a transforming permanent with its back face up, the token enters the battlefield with its back face up. // This rule does not apply to tokens that are created with their own set of characteristics and enter the battlefield as a copy of a transforming permanent due to a replacement effect. copy.setBackSide(original.isBackSide()); - if (original.isTransformed()) { - copy.incrementTransformedTimestamp(); - } - } - - copy.setStates(getCloneStates(original, copy, sourceSA)); - // force update the now set State - if (original.isTransformable()) { - copy.setState(original.isTransformed() ? CardStateName.Backside : CardStateName.Original, true, true); } else { copy.setState(copy.getCurrentStateName(), true, true); } From 35e6268a95117105d6d885820056fa9e70f94e8d Mon Sep 17 00:00:00 2001 From: Renato Filipe Vidal Santos <45150760+dracontes@users.noreply.github.com> Date: Sat, 20 Sep 2025 17:58:28 +0100 Subject: [PATCH 228/355] Add files via upload (#8754) --- forge-gui/res/cardsfolder/f/finale_of_revelation.txt | 2 +- .../flamewar_brash_veteran_flamewar_streetwise_operative.txt | 2 +- forge-gui/res/cardsfolder/l/last_march_of_the_ents.txt | 2 +- forge-gui/res/cardsfolder/r/rikku_resourceful_guardian.txt | 2 +- forge-gui/res/cardsfolder/s/skanos_dragon_vassal.txt | 2 +- forge-gui/res/cardsfolder/s/sword_point_diplomacy.txt | 4 ++-- forge-gui/res/cardsfolder/s/sylvan_library.txt | 2 +- forge-gui/res/cardsfolder/t/themberchaud.txt | 2 +- forge-gui/res/cardsfolder/t/thundermaw_hellkite.txt | 4 ++-- forge-gui/res/cardsfolder/v/virtuss_maneuver.txt | 2 +- forge-gui/res/cardsfolder/w/white_mages_staff.txt | 2 +- forge-gui/res/cardsfolder/z/zurs_weirding.txt | 4 ++-- 12 files changed, 15 insertions(+), 15 deletions(-) diff --git a/forge-gui/res/cardsfolder/f/finale_of_revelation.txt b/forge-gui/res/cardsfolder/f/finale_of_revelation.txt index bf83f925a5b..4fd11280949 100644 --- a/forge-gui/res/cardsfolder/f/finale_of_revelation.txt +++ b/forge-gui/res/cardsfolder/f/finale_of_revelation.txt @@ -6,6 +6,6 @@ SVar:DBDraw:DB$ Draw | NumCards$ X | SubAbility$ DBUntap | AILogic$ ConsiderPrim SVar:DBUntap:DB$ Untap | UntapUpTo$ True | UntapType$ Land | Amount$ 5 | SubAbility$ DBEffect | ConditionCheckSVar$ X | ConditionSVarCompare$ GE10 SVar:DBEffect:DB$ Effect | StaticAbilities$ STHandSize | Duration$ Permanent | SubAbility$ DBChange | ConditionCheckSVar$ X | ConditionSVarCompare$ GE10 SVar:STHandSize:Mode$ Continuous | Affected$ You | SetMaxHandSize$ Unlimited | Description$ You have no maximum hand size. -SVar:DBChange:DB$ ChangeZone | Origin$ Stack | Destination$ Exile | StackDescription$ Exile CARDNAME +SVar:DBChange:DB$ ChangeZone | Origin$ Stack | Destination$ Exile | StackDescription$ Exile CARDNAME. SVar:X:Count$xPaid Oracle:Draw X cards. If X is 10 or more, instead shuffle your graveyard into your library, draw X cards, untap up to five lands, and you have no maximum hand size for the rest of the game.\nExile Finale of Revelation. diff --git a/forge-gui/res/cardsfolder/f/flamewar_brash_veteran_flamewar_streetwise_operative.txt b/forge-gui/res/cardsfolder/f/flamewar_brash_veteran_flamewar_streetwise_operative.txt index 9b9f9e64a99..604ab696c0c 100644 --- a/forge-gui/res/cardsfolder/f/flamewar_brash_veteran_flamewar_streetwise_operative.txt +++ b/forge-gui/res/cardsfolder/f/flamewar_brash_veteran_flamewar_streetwise_operative.txt @@ -4,7 +4,7 @@ Types:Legendary Artifact Creature Robot PT:3/2 K:More Than Meets the Eye:B R A:AB$ PutCounter | Cost$ Sac<1/Artifact.Other/another artifact> | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | SorcerySpeed$ True | SubAbility$ DBConvert | AILogic$ AristocratCounters | SpellDescription$ Put a +1/+1 counter on NICKNAME and convert it. Activate only as a sorcery. -SVar:DBConvert:DB$ SetState | Mode$ Transform | StackDescription$ Convert NICKNAME +SVar:DBConvert:DB$ SetState | Mode$ Transform | StackDescription$ Convert NICKNAME. A:AB$ ChangeZoneAll | Cost$ 1 Discard<1/Hand> | ChangeType$ Card.YouOwn+counters_GE1_INTEL | Origin$ Exile | Destination$ Hand | SpellDescription$ Put all exiled cards you own with intel counters on them into your hand. DeckHints:Ability$Counters DeckHas:Ability$Sacrifice|Discard|Counters diff --git a/forge-gui/res/cardsfolder/l/last_march_of_the_ents.txt b/forge-gui/res/cardsfolder/l/last_march_of_the_ents.txt index 0645823806d..fed7511d6b4 100644 --- a/forge-gui/res/cardsfolder/l/last_march_of_the_ents.txt +++ b/forge-gui/res/cardsfolder/l/last_march_of_the_ents.txt @@ -3,7 +3,7 @@ ManaCost:6 G G Types:Sorcery R:Event$ Counter | ValidCard$ Card.Self | ValidSA$ Spell | Layer$ CantHappen | Description$ This spell can't be countered. A:SP$ Draw | Defined$ You | NumCards$ X | SubAbility$ CheatBattlefield | SpellDescription$ Draw cards equal to the greatest toughness among creatures you control, then put any number of creature cards from your hand onto the battlefield. -SVar:CheatBattlefield:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | ChangeType$ Creature | ChangeNum$ Y | StackDescription$ {p:You} puts any number of creature cards from their hand onto the battlefield +SVar:CheatBattlefield:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | ChangeType$ Creature | ChangeNum$ Y | StackDescription$ {p:You} puts any number of creature cards from their hand onto the battlefield. SVar:X:Count$Valid Creature.YouCtrl$GreatestToughness SVar:Y:Count$ValidHand Creature.YouCtrl DeckHints:Type$Wall|Plant|Treefolk diff --git a/forge-gui/res/cardsfolder/r/rikku_resourceful_guardian.txt b/forge-gui/res/cardsfolder/r/rikku_resourceful_guardian.txt index 4c156177fa4..bbe692ee87d 100644 --- a/forge-gui/res/cardsfolder/r/rikku_resourceful_guardian.txt +++ b/forge-gui/res/cardsfolder/r/rikku_resourceful_guardian.txt @@ -7,4 +7,4 @@ SVar:TrigEffect:DB$ Effect | RememberObjects$ TriggeredObjectLKICopy | StaticAbi SVar:BlockRestrict:Mode$ CantBlockBy | ValidAttacker$ Card.IsRemembered | ValidBlocker$ Creature.OppCtrl | Description$ That creature can't be blocked by creatures your opponents control. A:AB$ Pump | Cost$ 1 T | PrecostDesc$ Steal — | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select target creature an opponent controls | SubAbility$ DBMove | SorcerySpeed$ True | StackDescription$ SpellDescription | SpellDescription$ Move a counter from target creature an opponent controls onto target creature you control. Activate only as a sorcery. SVar:DBMove:DB$ MoveCounter | Source$ ParentTarget | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control to move counter to | CounterType$ Any | CounterNum$ 1 | StackDescription$ None -Oracle:Whenever you put one or more counters on a creature, until end of turn, that creature can't be blocked by creatures your opponents control.\nSteal — {1}, {T}: Move a counter from target creature an opponent controls onto target creature you control. Activate only as a sorcery.\n +Oracle:Whenever you put one or more counters on a creature, until end of turn, that creature can't be blocked by creatures your opponents control.\nSteal — {1}, {T}: Move a counter from target creature an opponent controls onto target creature you control. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/s/skanos_dragon_vassal.txt b/forge-gui/res/cardsfolder/s/skanos_dragon_vassal.txt index c4ab79c229a..3c7fa084fe3 100644 --- a/forge-gui/res/cardsfolder/s/skanos_dragon_vassal.txt +++ b/forge-gui/res/cardsfolder/s/skanos_dragon_vassal.txt @@ -73,7 +73,7 @@ ManaCost:4 G G Types:Legendary Creature Dragon Ranger PT:6/6 K:Vigilance -T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigUntap | TriggerDescription$Whenever CARDNAME attacks, untap another target attacking creature. It gets +X/+0 until end of turn, where X is NICKNAME's power. +T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigUntap | TriggerDescription$ Whenever CARDNAME attacks, untap another target attacking creature. It gets +X/+0 until end of turn, where X is NICKNAME's power. SVar:TrigUntap:DB$ Untap | ValidTgts$ Creature.attacking+Other | TgtPrompt$ Select another target attacking creature | SubAbility$ DBPump SVar:DBPump:DB$ Pump | Defined$ Targeted | NumAtt$ +X SVar:X:Count$CardPower diff --git a/forge-gui/res/cardsfolder/s/sword_point_diplomacy.txt b/forge-gui/res/cardsfolder/s/sword_point_diplomacy.txt index 82c929dc202..646845b7761 100644 --- a/forge-gui/res/cardsfolder/s/sword_point_diplomacy.txt +++ b/forge-gui/res/cardsfolder/s/sword_point_diplomacy.txt @@ -1,9 +1,9 @@ Name:Sword-Point Diplomacy ManaCost:2 B Types:Sorcery -A:SP$ PeekAndReveal | PeekAmount$ 3 | NoPeek$ True | RememberRevealed$ True | SubAbility$ DBRepeat | SpellDescription$ Reveal the top three cards of your library. For each of those cards, put that card into your hand unless any opponent pays 3 life. Then exile the rest. +A:SP$ PeekAndReveal | PeekAmount$ 3 | NoPeek$ True | RememberRevealed$ True | SubAbility$ DBRepeat | StackDescription$ REP Reveal_{p:You} reveals & of your_of their & put_{p:You} puts & into your_into their & Then exile_Then {p:You} exiles | SpellDescription$ Reveal the top three cards of your library. For each of those cards, put that card into your hand unless any opponent pays 3 life. Then exile the rest. SVar:DBRepeat:DB$ RepeatEach | RepeatSubAbility$ DBChangeZone | RepeatCards$ Card.IsRemembered | ChooseOrder$ True | Zone$ Library | UseImprinted$ True | SubAbility$ PutIntoHand -SVar:DBChangeZone:DB$ ChangeZone | Defined$ Imprinted | Origin$ Library | Destination$ Hand | UnlessCost$ PayLife<3> | UnlessPayer$ Opponent | ForgetChanged$ True | StackDescription$ Put [{c:Imprinted}] into the hand +SVar:DBChangeZone:DB$ ChangeZone | Defined$ Imprinted | Origin$ Library | Destination$ Hand | UnlessCost$ PayLife<3> | UnlessPayer$ Opponent | ForgetChanged$ True SVar:PutIntoHand:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered | Origin$ Library | Destination$ Exile | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True Oracle:Reveal the top three cards of your library. For each of those cards, put that card into your hand unless any opponent pays 3 life. Then exile the rest. diff --git a/forge-gui/res/cardsfolder/s/sylvan_library.txt b/forge-gui/res/cardsfolder/s/sylvan_library.txt index a81f123f95f..c2b9db9b3a6 100644 --- a/forge-gui/res/cardsfolder/s/sylvan_library.txt +++ b/forge-gui/res/cardsfolder/s/sylvan_library.txt @@ -4,7 +4,7 @@ Types:Enchantment T:Mode$ Phase | Phase$ Draw | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ At the beginning of your draw step, you may draw two additional cards. If you do, choose two cards in your hand drawn this turn. For each of those cards, pay 4 life or put the card on top of your library. SVar:TrigDraw:AB$ ChooseCard | ChoiceZone$ Hand | Choices$ Card.YouOwn+DrawnThisTurn | Cost$ Draw<2/You> | Amount$ 2 | Mandatory$ True | AILogic$ Worst | SubAbility$ DBPayOrReturn | NoReveal$ True SVar:DBPayOrReturn:DB$ RepeatEach | RepeatCards$ Card.ChosenCard | Zone$ Hand | RepeatSubAbility$ DBReplace | SubAbility$ DBCleanup | ChooseOrder$ True -SVar:DBReplace:DB$ ChangeZone | Origin$ Hand | Destination$ Library | ChangeType$ Card.ChosenCard | UnlessCost$ PayLife<4> | Mandatory$ True | StackDescription$ Put {c:Imprinted} on top of your library | UnlessPayer$ TriggeredPlayer | NoReveal$ True +SVar:DBReplace:DB$ ChangeZone | Origin$ Hand | Destination$ Library | ChangeType$ Card.ChosenCard | UnlessCost$ PayLife<4> | Mandatory$ True | UnlessPayer$ TriggeredPlayer | NoReveal$ True SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True AI:RemoveDeck:All Oracle:At the beginning of your draw step, you may draw two additional cards. If you do, choose two cards in your hand drawn this turn. For each of those cards, pay 4 life or put the card on top of your library. diff --git a/forge-gui/res/cardsfolder/t/themberchaud.txt b/forge-gui/res/cardsfolder/t/themberchaud.txt index b2911e5fe24..b4f02da2d45 100644 --- a/forge-gui/res/cardsfolder/t/themberchaud.txt +++ b/forge-gui/res/cardsfolder/t/themberchaud.txt @@ -4,7 +4,7 @@ Types:Legendary Creature Dragon PT:5/5 K:Trample T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDamageAllNonFlyers | TriggerDescription$ When CARDNAME enters, he deals X damage to each other creature without flying and each player, where X is the number of Mountains you control. -SVar:TrigDamageAllNonFlyers:DB$ DamageAll | NumDmg$ X | ValidCards$ Creature.Other+withoutFlying | ValidPlayers$ Player | ValidDescription$ each other creature without flying and each player +SVar:TrigDamageAllNonFlyers:DB$ DamageAll | NumDmg$ X | ValidCards$ Creature.Other+withoutFlying | ValidPlayers$ Player S:Mode$ OptionalAttackCost | ValidCard$ Card.Self | Trigger$ TrigPump | Cost$ Exert<1/CARDNAME> | Description$ You may exert CARDNAME as it attacks. When you do, he gains flying until end of turn. (An exerted creature won't untap during your next untap step.) SVar:TrigPump:DB$ Pump | Defined$ Self | KW$ Flying | SpellDescription$ When you do, he gains flying until end of turn. SVar:X:Count$Valid Mountain.YouCtrl diff --git a/forge-gui/res/cardsfolder/t/thundermaw_hellkite.txt b/forge-gui/res/cardsfolder/t/thundermaw_hellkite.txt index dc442c80b8a..23552a6ea0b 100644 --- a/forge-gui/res/cardsfolder/t/thundermaw_hellkite.txt +++ b/forge-gui/res/cardsfolder/t/thundermaw_hellkite.txt @@ -5,6 +5,6 @@ PT:5/5 K:Flying K:Haste T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ ThunderDamage | TriggerDescription$ When CARDNAME enters, it deals 1 damage to each creature with flying your opponents control. Tap those creatures. -SVar:ThunderDamage:DB$ DamageAll | NumDmg$ 1 | ValidCards$ Creature.withFlying+OppCtrl | ValidDescription$ each creature with flying you don't control | SubAbility$ ThunderTap -SVar:ThunderTap:DB$ TapAll | ValidCards$ Creature.withFlying+OppCtrl | ValidDescription$ each creature with flying you don't control +SVar:ThunderDamage:DB$ DamageAll | NumDmg$ 1 | ValidCards$ Creature.withFlying+OppCtrl | SubAbility$ ThunderTap +SVar:ThunderTap:DB$ TapAll | ValidCards$ Creature.withFlying+OppCtrl Oracle:Flying\nHaste (This creature can attack and {T} as soon as it comes under your control.)\nWhen Thundermaw Hellkite enters, it deals 1 damage to each creature with flying your opponents control. Tap those creatures. diff --git a/forge-gui/res/cardsfolder/v/virtuss_maneuver.txt b/forge-gui/res/cardsfolder/v/virtuss_maneuver.txt index ec3fc71676a..32a7bdea77b 100644 --- a/forge-gui/res/cardsfolder/v/virtuss_maneuver.txt +++ b/forge-gui/res/cardsfolder/v/virtuss_maneuver.txt @@ -3,7 +3,7 @@ ManaCost:2 B Types:Sorcery A:SP$ AssignGroup | Defined$ Player | Choices$ DBToHand,DBSacrifice | AILogic$ FriendOrFoe | SpellDescription$ For each player, choose friend or foe. Each friend returns a creature card from their graveyard to their hand. Each foe sacrifices a creature they control. SVar:DBToHand:DB$ ChangeZone | DefinedPlayer$ Remembered | ChangeType$ Creature | Hidden$ True | Mandatory$ True | Origin$ Graveyard | Destination$ Hand | SpellDescription$ Each friend returns a creature card from their graveyard to their hand -SVar:DBSacrifice:DB$ Sacrifice | Defined$ Remembered | SacValid$ Creature | SacMessage$ creature | StackDescription$ SpellDescription | SpellDescription$ Each foe sacrifices a creature they control. +SVar:DBSacrifice:DB$ Sacrifice | Defined$ Remembered | SacValid$ Creature | SacMessage$ creature | StackDescription$ SpellDescription | SpellDescription$ Each foe sacrifices a creature they control SVar:NeedsToPlayVar:Z GE2 SVar:Z:SVar$Z1/Plus.Z2 SVar:Z1:Count$ValidGraveyard Creature.YourTeamCtrl diff --git a/forge-gui/res/cardsfolder/w/white_mages_staff.txt b/forge-gui/res/cardsfolder/w/white_mages_staff.txt index 3f24d19d5b6..c1c86a4c1c0 100644 --- a/forge-gui/res/cardsfolder/w/white_mages_staff.txt +++ b/forge-gui/res/cardsfolder/w/white_mages_staff.txt @@ -8,4 +8,4 @@ SVar:TrigAttack:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigGainLife | T SVar:TrigGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1 SVar:AE:SVar:HasAttackEffect:TRUE DeckHas:Ability$LifeGain|Token & Type$Cleric -Oracle:Job select (When this Equipment enters, create a 1/1 colorless Hero creature token, then attach this to it.)\nEquipped creature gets +1/+1, has "Whenever this creature attacks, you gain 1 life," and is a Cleric in addition to its other types.\nEquip {3} ({3}: Attach to target creature you control. Equip only as a sorcery) +Oracle:Job select (When this Equipment enters, create a 1/1 colorless Hero creature token, then attach this to it.)\nEquipped creature gets +1/+1, has "Whenever this creature attacks, you gain 1 life," and is a Cleric in addition to its other types.\nEquip {3} ({3}: Attach to target creature you control. Equip only as a sorcery.) diff --git a/forge-gui/res/cardsfolder/z/zurs_weirding.txt b/forge-gui/res/cardsfolder/z/zurs_weirding.txt index 9b13cca8e4f..914d35bad81 100644 --- a/forge-gui/res/cardsfolder/z/zurs_weirding.txt +++ b/forge-gui/res/cardsfolder/z/zurs_weirding.txt @@ -4,8 +4,8 @@ Types:Enchantment S:Mode$ Continuous | AffectedZone$ Hand | MayLookAt$ Player | Description$ Players play with their hands revealed. R:Event$ Draw | ActiveZones$ Battlefield | ValidPlayer$ Player | ReplaceWith$ RevealTop | Description$ If a player would draw a card, they reveal it instead. Then any other player may pay 2 life. If a player does, put that card into its owner's graveyard. Otherwise, that player draws a card. SVar:RevealTop:DB$ PeekAndReveal | Defined$ ReplacedPlayer | NoPeek$ True | SubAbility$ DBMill -SVar:DBMill:DB$ Dig | Defined$ ReplacedPlayer | DestinationZone$ Graveyard | DigNum$ 1 | ChangeNum$ All | SubAbility$ DBDraw | UnlessPayer$ NonReplacedPlayer | UnlessCost$ PayLife<2> | UnlessSwitched$ True | UnlessResolveSubs$ WhenNotPaid | StackDescription$ None -SVar:DBDraw:DB$ Draw | Defined$ ReplacedPlayer | NumCards$ 1 | StackDescription$ that player draws a card +SVar:DBMill:DB$ Dig | Defined$ ReplacedPlayer | DestinationZone$ Graveyard | DigNum$ 1 | ChangeNum$ All | SubAbility$ DBDraw | UnlessPayer$ NonReplacedPlayer | UnlessCost$ PayLife<2> | UnlessSwitched$ True | UnlessResolveSubs$ WhenNotPaid +SVar:DBDraw:DB$ Draw | Defined$ ReplacedPlayer | NumCards$ 1 SVar:NonStackingEffect:True AI:RemoveDeck:All Oracle:Players play with their hands revealed.\nIf a player would draw a card, they reveal it instead. Then any other player may pay 2 life. If a player does, put that card into its owner's graveyard. Otherwise, that player draws a card. From ac492fac357e74903890e078c1c5f7571de0867c Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Sun, 21 Sep 2025 08:47:28 +0800 Subject: [PATCH 229/355] use Supplier for FModel for thread safety --- .../src/main/java/forge/model/FModel.java | 312 +++++++----------- 1 file changed, 120 insertions(+), 192 deletions(-) diff --git a/forge-gui/src/main/java/forge/model/FModel.java b/forge-gui/src/main/java/forge/model/FModel.java index 6232a69d3d2..dca8793a240 100644 --- a/forge-gui/src/main/java/forge/model/FModel.java +++ b/forge-gui/src/main/java/forge/model/FModel.java @@ -17,6 +17,8 @@ */ package forge.model; +import com.google.common.base.Supplier; +import com.google.common.base.Suppliers; import com.google.common.collect.Maps; import forge.*; import forge.CardStorageReader.ProgressObserver; @@ -75,32 +77,82 @@ import java.util.function.Function; public final class FModel { private FModel() { } //don't allow creating instance - private static StaticData magicDb; - - private static QuestPreferences questPreferences; - private static ConquestPreferences conquestPreferences; + private static CardStorageReader reader, tokenReader, customReader, customTokenReader; + private static final Supplier magicDb = Suppliers.memoize(() -> + new StaticData(reader, tokenReader, customReader, customTokenReader, ForgeConstants.EDITIONS_DIR, + ForgeConstants.USER_CUSTOM_EDITIONS_DIR, ForgeConstants.BLOCK_DATA_DIR, ForgeConstants.SETLOOKUP_DIR, + getPreferences().getPref(FPref.UI_PREFERRED_ART), + getPreferences().getPrefBoolean(FPref.UI_LOAD_UNKNOWN_CARDS), + getPreferences().getPrefBoolean(FPref.UI_LOAD_NONLEGAL_CARDS), + getPreferences().getPrefBoolean(FPref.ALLOW_CUSTOM_CARDS_IN_DECKS_CONFORMANCE), + getPreferences().getPrefBoolean(FPref.UI_SMART_CARD_ART), + GuiBase.getInterface().isLibgdxPort())); + private static final Supplier questPreferences = Suppliers.memoize(QuestPreferences::new); + private static final Supplier conquestPreferences = Suppliers.memoize(() -> { + final ConquestPreferences cp = new ConquestPreferences(); + ConquestUtil.updateRarityFilterOdds(cp); + return cp; + }); private static ForgePreferences preferences; - private static ForgeNetPreferences netPreferences; - private static Map achievements; + private static final Supplier netPreferences = Suppliers.memoize(ForgeNetPreferences::new); + private static final Supplier> achievements = Suppliers.memoize(() -> { + final Map a = Maps.newHashMap(); + a.put(GameType.Constructed, new ConstructedAchievements()); + a.put(GameType.Draft, new DraftAchievements()); + a.put(GameType.Sealed, new SealedAchievements()); + a.put(GameType.Quest, new QuestAchievements()); + a.put(GameType.PlanarConquest, new PlanarConquestAchievements()); + a.put(GameType.Puzzle, new PuzzleAchievements()); + a.put(GameType.Adventure, new AdventureAchievements()); + return a; + }); // Someone should take care of 2 gauntlets here private static TournamentData tournamentData; private static GauntletData gauntletData; - private static GauntletMini gauntlet; + private static final Supplier gauntletMini = Suppliers.memoize(GauntletMini::new); - private static QuestController quest; - private static ConquestController conquest; - private static CardCollections decks; + private static final Supplier quest = Suppliers.memoize(QuestController::new); + private static final Supplier conquest = Suppliers.memoize(ConquestController::new); + private static final Supplier decks = Suppliers.memoize(CardCollections::new); - private static IStorage blocks; - private static IStorage fantasyBlocks; - private static IStorage themedChaosDrafts; - private static IStorage planes; - private static IStorage worlds; - private static GameFormat.Collection formats; - private static ItemPool uniqueCardsNoAlt, allCardsNoAlt, planechaseCards, archenemyCards, - brawlCommander, oathbreakerCommander, tinyLeadersCommander, commanderPool, - avatarPool, conspiracyPool, dungeonPool, attractionPool, contraptionPool; + private static final Supplier> blocks = Suppliers.memoize(() -> { + final IStorage cb = new StorageBase<>("Block definitions", new CardBlock.Reader(ForgeConstants.BLOCK_DATA_DIR + "blocks.txt", getMagicDb().getEditions())); + // SetblockLands + for (final CardBlock b : cb) { + try { + getMagicDb().getBlockLands().add(b.getLandSet().getCode()); + } catch (Exception e) { + e.printStackTrace(); + } + } + return cb; + }); + private static final Supplier> fantasyBlocks = Suppliers.memoize(() -> new StorageBase<>("Custom blocks", new CardBlock.Reader(ForgeConstants.BLOCK_DATA_DIR + "fantasyblocks.txt", getMagicDb().getEditions()))); + private static final Supplier> themedChaosDrafts = Suppliers.memoize(() -> new StorageBase<>("Themed Chaos Drafts", new ThemedChaosDraft.Reader(ForgeConstants.BLOCK_DATA_DIR + "chaosdraftthemes.txt"))); + private static final Supplier> planes = Suppliers.memoize(() -> new StorageBase<>("Conquest planes", new ConquestPlane.Reader(ForgeConstants.CONQUEST_PLANES_DIR + "planes.txt"))); + private static final Supplier> worlds = Suppliers.memoize(() -> { + final Map standardWorlds = new QuestWorld.Reader(ForgeConstants.QUEST_WORLD_DIR + "worlds.txt").readAll(); + final Map customWorlds = new QuestWorld.Reader(ForgeConstants.USER_QUEST_WORLD_DIR + "customworlds.txt").readAll(); + customWorlds.values().forEach(world -> world.setCustom(true)); + standardWorlds.putAll(customWorlds); + final IStorage w = new StorageBase<>("Quest worlds", null, standardWorlds); + return w; + }); + private static final Supplier formats = Suppliers.memoize(() -> new GameFormat.Collection(new GameFormat.Reader( new File(ForgeConstants.FORMATS_DATA_DIR), new File(ForgeConstants.USER_FORMATS_DIR), preferences.getPrefBoolean(FPref.LOAD_ARCHIVED_FORMATS)))); + private static final Supplier> uniqueCardsNoAlt = Suppliers.memoize(() -> ItemPool.createFrom(getMagicDb().getCommonCards().getUniqueCardsNoAlt(), PaperCard.class)); + private static final Supplier> allCardsNoAlt = Suppliers.memoize(() -> ItemPool.createFrom(getMagicDb().getCommonCards().getAllCardsNoAlt(), PaperCard.class)); + private static final Supplier> planechaseCards = Suppliers.memoize(() -> ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules(CardRulesPredicates.IS_PLANE_OR_PHENOMENON)), PaperCard.class)); + private static final Supplier> archenemyCards = Suppliers.memoize(() -> ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules(CardRulesPredicates.IS_SCHEME)), PaperCard.class)); + private static final Supplier> brawlCommander = Suppliers.memoize(() -> ItemPool.createFrom(getMagicDb().getCommonCards().getAllCardsNoAlt(getFormats().get("Brawl").getFilterPrinted().and(PaperCardPredicates.fromRules(CardRulesPredicates.CAN_BE_BRAWL_COMMANDER))), PaperCard.class)); + private static final Supplier> oathbreakerCommander = Suppliers.memoize(() -> ItemPool.createFrom(getMagicDb().getCommonCards().getAllCardsNoAlt(PaperCardPredicates.fromRules(CardRulesPredicates.CAN_BE_OATHBREAKER.or(CardRulesPredicates.CAN_BE_SIGNATURE_SPELL))), PaperCard.class)); + private static final Supplier> tinyLeadersCommander = Suppliers.memoize(() -> ItemPool.createFrom(getMagicDb().getCommonCards().getAllCardsNoAlt(PaperCardPredicates.fromRules(CardRulesPredicates.CAN_BE_TINY_LEADERS_COMMANDER)), PaperCard.class)); + private static final Supplier> commanderPool = Suppliers.memoize(() -> ItemPool.createFrom(getMagicDb().getCommonCards().getAllCardsNoAlt(PaperCardPredicates.CAN_BE_COMMANDER), PaperCard.class)); + private static final Supplier> avatarPool = Suppliers.memoize(() -> ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules(CardRulesPredicates.IS_VANGUARD)), PaperCard.class)); + private static final Supplier> conspiracyPool = Suppliers.memoize(() -> ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules(CardRulesPredicates.IS_CONSPIRACY)), PaperCard.class)); + private static final Supplier> dungeonPool = Suppliers.memoize(() -> ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules(CardRulesPredicates.IS_DUNGEON)), PaperCard.class)); + private static final Supplier> attractionPool = Suppliers.memoize(() -> ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules(CardRulesPredicates.IS_ATTRACTION)), PaperCard.class)); + private static final Supplier> contraptionPool = Suppliers.memoize(() -> ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules(CardRulesPredicates.IS_CONTRAPTION)), PaperCard.class)); public static void initialize(final IProgressBar progressBar, Function adjustPrefs) { initialize(progressBar, adjustPrefs, false); @@ -126,8 +178,8 @@ public final class FModel { throw new RuntimeException(exn); } - Lang.createInstance(FModel.getPreferences().getPref(FPref.UI_LANGUAGE)); - Localizer.getInstance().initialize(FModel.getPreferences().getPref(FPref.UI_LANGUAGE), ForgeConstants.LANG_DIR); + Lang.createInstance(getPreferences().getPref(FPref.UI_LANGUAGE)); + Localizer.getInstance().initialize(getPreferences().getPref(FPref.UI_LANGUAGE), ForgeConstants.LANG_DIR); final ProgressObserver progressBarBridge = (progressBar == null) ? ProgressObserver.emptyObserver : new ProgressObserver() { @@ -154,17 +206,17 @@ public final class FModel { // Load card database // Lazy loading currently disabled - final CardStorageReader reader = new CardStorageReader(ForgeConstants.CARD_DATA_DIR, progressBarBridge, + reader = new CardStorageReader(ForgeConstants.CARD_DATA_DIR, progressBarBridge, false); - final CardStorageReader tokenReader = new CardStorageReader(ForgeConstants.TOKEN_DATA_DIR, progressBarBridge, + tokenReader = new CardStorageReader(ForgeConstants.TOKEN_DATA_DIR, progressBarBridge, false); - CardStorageReader customReader; + try { customReader = new CardStorageReader(ForgeConstants.USER_CUSTOM_CARDS_DIR, progressBarBridge, false); } catch (Exception e) { customReader = null; } - CardStorageReader customTokenReader; + try { customTokenReader = new CardStorageReader(ForgeConstants.USER_CUSTOM_TOKENS_DIR, progressBarBridge, false); } catch (Exception e) { @@ -174,15 +226,6 @@ public final class FModel { // Do this first so PaperCards see the real preference CardTranslation.preloadTranslation(preferences.getPref(FPref.UI_LANGUAGE), ForgeConstants.LANG_DIR); - magicDb = new StaticData(reader, tokenReader, customReader, customTokenReader, ForgeConstants.EDITIONS_DIR, - ForgeConstants.USER_CUSTOM_EDITIONS_DIR, ForgeConstants.BLOCK_DATA_DIR, ForgeConstants.SETLOOKUP_DIR, - FModel.getPreferences().getPref(FPref.UI_PREFERRED_ART), - FModel.getPreferences().getPrefBoolean(FPref.UI_LOAD_UNKNOWN_CARDS), - FModel.getPreferences().getPrefBoolean(FPref.UI_LOAD_NONLEGAL_CARDS), - FModel.getPreferences().getPrefBoolean(FPref.ALLOW_CUSTOM_CARDS_IN_DECKS_CONFORMANCE), - FModel.getPreferences().getPrefBoolean(FPref.UI_SMART_CARD_ART) - ); - // Create profile dirs if they don't already exist for (final String dname : ForgeConstants.PROFILE_DIRS) { final File path = new File(dname); @@ -198,18 +241,18 @@ public final class FModel { ForgePreferences.DEV_MODE = preferences.getPrefBoolean(FPref.DEV_MODE_ENABLED); ForgePreferences.UPLOAD_DRAFT = ForgePreferences.NET_CONN; - magicDb.setStandardPredicate(getFormats().getStandard().getFilterRules()); - magicDb.setPioneerPredicate(getFormats().getPioneer().getFilterRules()); - magicDb.setModernPredicate(getFormats().getModern().getFilterRules()); - magicDb.setCommanderPredicate(getFormats().get("Commander").getFilterRules()); - magicDb.setOathbreakerPredicate(getFormats().get("Oathbreaker").getFilterRules()); - magicDb.setBrawlPredicate(getFormats().get("Brawl").getFilterRules()); + getMagicDb().setStandardPredicate(getFormats().getStandard().getFilterRules()); + getMagicDb().setPioneerPredicate(getFormats().getPioneer().getFilterRules()); + getMagicDb().setModernPredicate(getFormats().getModern().getFilterRules()); + getMagicDb().setCommanderPredicate(getFormats().get("Commander").getFilterRules()); + getMagicDb().setOathbreakerPredicate(getFormats().get("Oathbreaker").getFilterRules()); + getMagicDb().setBrawlPredicate(getFormats().get("Brawl").getFilterRules()); - magicDb.setFilteredHandsEnabled(preferences.getPrefBoolean(FPref.FILTERED_HANDS)); + getMagicDb().setFilteredHandsEnabled(preferences.getPrefBoolean(FPref.FILTERED_HANDS)); try { - magicDb.setMulliganRule(MulliganDefs.MulliganRule.valueOf(preferences.getPref(FPref.MULLIGAN_RULE))); + getMagicDb().setMulliganRule(MulliganDefs.MulliganRule.valueOf(preferences.getPref(FPref.MULLIGAN_RULE))); } catch(Exception e) { - magicDb.setMulliganRule(MulliganDefs.MulliganRule.London); + getMagicDb().setMulliganRule(MulliganDefs.MulliganRule.London); } Spell.setPerformanceMode(preferences.getPrefBoolean(FPref.PERFORMANCE_MODE)); @@ -224,38 +267,16 @@ public final class FModel { // Preload AI profiles AiProfileUtil.loadAllProfiles(ForgeConstants.AI_PROFILE_DIR); - AiProfileUtil.setAiSideboardingMode(AiProfileUtil.AISideboardingMode.normalizedValueOf(FModel.getPreferences().getPref(FPref.MATCH_AI_SIDEBOARDING_MODE))); + AiProfileUtil.setAiSideboardingMode(AiProfileUtil.AISideboardingMode.normalizedValueOf(getPreferences().getPref(FPref.MATCH_AI_SIDEBOARDING_MODE))); // Generate Deck Gen matrix - if(FModel.getPreferences().getPrefBoolean(FPref.DECKGEN_CARDBASED)) { + if(getPreferences().getPrefBoolean(FPref.DECKGEN_CARDBASED)) { boolean commanderDeckGenMatrixLoaded=CardRelationMatrixGenerator.initialize(); deckGenMatrixLoaded=CardArchetypeLDAGenerator.initialize(); if(!commanderDeckGenMatrixLoaded){ deckGenMatrixLoaded=false; } } - - if (GuiBase.getInterface().isLibgdxPort() && GuiBase.getDeviceRAM() < 5000) - return; // Don't preload ItemPool on mobile port with less than 5GB RAM - - // Common ItemPool to preload - getAllCardsNoAlt(); - getArchenemyCards(); - getPlanechaseCards(); - getAttractionPool(); - getContraptionPool(); - if (GuiBase.getInterface().isLibgdxPort()) { - // Preload mobile Itempool - getUniqueCardsNoAlt(); - } else { - // Preload Desktop Itempool - getCommanderPool(); - getOathbreakerCommander(); - getBrawlCommander(); - getTinyLeadersCommander(); - getAvatarPool(); - getConspiracyPool(); - } } private static boolean deckGenMatrixLoaded = false; @@ -265,103 +286,63 @@ public final class FModel { } public static QuestController getQuest() { - if (quest == null) - quest = new QuestController(); - return quest; + return quest.get(); } public static ConquestController getConquest() { - if (conquest == null) - conquest = new ConquestController(); - return conquest; + return conquest.get(); } public static ItemPool getUniqueCardsNoAlt() { - if (uniqueCardsNoAlt == null) - uniqueCardsNoAlt = ItemPool.createFrom(getMagicDb().getCommonCards().getUniqueCardsNoAlt(), PaperCard.class); - return uniqueCardsNoAlt; + return uniqueCardsNoAlt.get(); } public static ItemPool getAllCardsNoAlt() { - if (allCardsNoAlt == null) - allCardsNoAlt = ItemPool.createFrom(getMagicDb().getCommonCards().getAllCardsNoAlt(), PaperCard.class); - return allCardsNoAlt; + return allCardsNoAlt.get(); } public static ItemPool getArchenemyCards() { - if (archenemyCards == null) - archenemyCards = ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules(CardRulesPredicates.IS_SCHEME)), PaperCard.class); - return archenemyCards; + return archenemyCards.get(); } public static ItemPool getPlanechaseCards() { - if (planechaseCards == null) - planechaseCards = ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules(CardRulesPredicates.IS_PLANE_OR_PHENOMENON)), PaperCard.class); - return planechaseCards; + return planechaseCards.get(); } public static ItemPool getBrawlCommander() { - if (brawlCommander == null) { - brawlCommander = ItemPool.createFrom(getMagicDb().getCommonCards().getAllCardsNoAlt( - FModel.getFormats().get("Brawl").getFilterPrinted() - .and(PaperCardPredicates.fromRules(CardRulesPredicates.CAN_BE_BRAWL_COMMANDER))), PaperCard.class); - } - return brawlCommander; + return brawlCommander.get(); } public static ItemPool getOathbreakerCommander() { - if (oathbreakerCommander == null) - oathbreakerCommander = ItemPool.createFrom(getMagicDb().getCommonCards().getAllCardsNoAlt(PaperCardPredicates.fromRules( - CardRulesPredicates.CAN_BE_OATHBREAKER.or(CardRulesPredicates.CAN_BE_SIGNATURE_SPELL))), PaperCard.class); - return oathbreakerCommander; + return oathbreakerCommander.get(); } public static ItemPool getTinyLeadersCommander() { - if (tinyLeadersCommander == null) - tinyLeadersCommander = ItemPool.createFrom(getMagicDb().getCommonCards().getAllCardsNoAlt(PaperCardPredicates.fromRules( - CardRulesPredicates.CAN_BE_TINY_LEADERS_COMMANDER)), PaperCard.class); - return tinyLeadersCommander; + return tinyLeadersCommander.get(); } public static ItemPool getCommanderPool() { - if (commanderPool == null) - commanderPool = ItemPool.createFrom(getMagicDb().getCommonCards().getAllCardsNoAlt(PaperCardPredicates.CAN_BE_COMMANDER), PaperCard.class); - return commanderPool; + return commanderPool.get(); } public static ItemPool getAvatarPool() { - if (avatarPool == null) - avatarPool = ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules( - CardRulesPredicates.IS_VANGUARD)), PaperCard.class); - return avatarPool; + return avatarPool.get(); } public static ItemPool getConspiracyPool() { - if (conspiracyPool == null) - conspiracyPool = ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules( - CardRulesPredicates.IS_CONSPIRACY)), PaperCard.class); - return conspiracyPool; + return conspiracyPool.get(); } public static ItemPool getDungeonPool() { - if (dungeonPool == null) - dungeonPool = ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules( - CardRulesPredicates.IS_DUNGEON)), PaperCard.class); - return dungeonPool; + return dungeonPool.get(); } public static ItemPool getAttractionPool() { - if (attractionPool == null) - attractionPool = ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules( - CardRulesPredicates.IS_ATTRACTION)), PaperCard.class); - return attractionPool; + return attractionPool.get(); } public static ItemPool getContraptionPool() { - if (contraptionPool == null) - contraptionPool = ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules( - CardRulesPredicates.IS_CONTRAPTION)), PaperCard.class); - return contraptionPool; + return contraptionPool.get(); } private static boolean keywordsLoaded = false; @@ -396,67 +377,36 @@ public final class FModel { } public static StaticData getMagicDb() { - return magicDb; + return magicDb.get(); } public static ForgePreferences getPreferences() { return preferences; } public static ForgeNetPreferences getNetPreferences() { - if (netPreferences == null) - netPreferences = new ForgeNetPreferences(); - return netPreferences; + return netPreferences.get(); } public static AchievementCollection getAchievements(GameType gameType) { - if (achievements == null) { - achievements = Maps.newHashMap(); - achievements.put(GameType.Constructed, new ConstructedAchievements()); - achievements.put(GameType.Draft, new DraftAchievements()); - achievements.put(GameType.Sealed, new SealedAchievements()); - achievements.put(GameType.Quest, new QuestAchievements()); - achievements.put(GameType.PlanarConquest, new PlanarConquestAchievements()); - achievements.put(GameType.Puzzle, new PuzzleAchievements()); - achievements.put(GameType.Adventure, new AdventureAchievements()); - } - // Translate gameType to appropriate type if needed return switch (gameType) { - case Constructed, Draft, Sealed, Quest, PlanarConquest, Puzzle, Adventure -> achievements.get(gameType); - case AdventureEvent -> achievements.get(GameType.Adventure); - case QuestDraft -> achievements.get(GameType.Quest); - default -> achievements.get(GameType.Constructed); + case Constructed, Draft, Sealed, Quest, PlanarConquest, Puzzle, Adventure -> achievements.get().get(gameType); + case AdventureEvent -> achievements.get().get(GameType.Adventure); + case QuestDraft -> achievements.get().get(GameType.Quest); + default -> achievements.get().get(GameType.Constructed); }; } public static IStorage getBlocks() { - if (blocks == null) { - blocks = new StorageBase<>("Block definitions", new CardBlock.Reader(ForgeConstants.BLOCK_DATA_DIR + "blocks.txt", magicDb.getEditions())); - // SetblockLands - for (final CardBlock b : blocks) { - try { - magicDb.getBlockLands().add(b.getLandSet().getCode()); - } catch (Exception e) { - e.printStackTrace(); - } - } - } - return blocks; + return blocks.get(); } public static QuestPreferences getQuestPreferences() { - if (questPreferences == null) - questPreferences = new QuestPreferences(); - return questPreferences; + return questPreferences.get(); } public static ConquestPreferences getConquestPreferences() { - if (conquestPreferences == null) { - conquestPreferences = new ConquestPreferences(); - // initialize on first call... - ConquestUtil.updateRarityFilterOdds(conquestPreferences); - } - return conquestPreferences; + return conquestPreferences.get(); } public static GauntletData getGauntletData() { @@ -468,56 +418,34 @@ public final class FModel { } public static GauntletMini getGauntletMini() { - if (gauntlet == null) { - gauntlet = new GauntletMini(); - } - return gauntlet; + return gauntletMini.get(); } public static CardCollections getDecks() { - if (decks == null) - decks = new CardCollections(); - return decks; + return decks.get(); } public static IStorage getPlanes() { - if (planes == null) - planes = new StorageBase<>("Conquest planes", new ConquestPlane.Reader(ForgeConstants.CONQUEST_PLANES_DIR + "planes.txt")); - return planes; + return planes.get(); } public static IStorage getWorlds() { - if (worlds == null) { - Map standardWorlds = new QuestWorld.Reader(ForgeConstants.QUEST_WORLD_DIR + "worlds.txt").readAll(); - Map customWorlds = new QuestWorld.Reader(ForgeConstants.USER_QUEST_WORLD_DIR + "customworlds.txt").readAll(); - customWorlds.values().forEach(world -> world.setCustom(true)); - standardWorlds.putAll(customWorlds); - worlds = new StorageBase<>("Quest worlds", null, standardWorlds); - } - return worlds; + return worlds.get(); } public static GameFormat.Collection getFormats() { - if (formats == null) { - formats = new GameFormat.Collection(new GameFormat.Reader( new File(ForgeConstants.FORMATS_DATA_DIR), - new File(ForgeConstants.USER_FORMATS_DIR), preferences.getPrefBoolean(FPref.LOAD_ARCHIVED_FORMATS))); - } - return formats; + return formats.get(); } public static IStorage getFantasyBlocks() { - if (fantasyBlocks == null) - fantasyBlocks = new StorageBase<>("Custom blocks", new CardBlock.Reader(ForgeConstants.BLOCK_DATA_DIR + "fantasyblocks.txt", magicDb.getEditions())); - return fantasyBlocks; + return fantasyBlocks.get(); } public static IStorage getThemedChaosDrafts() { - if (themedChaosDrafts == null) - themedChaosDrafts = new StorageBase<>("Themed Chaos Drafts", new ThemedChaosDraft.Reader(ForgeConstants.BLOCK_DATA_DIR + "chaosdraftthemes.txt")); - return themedChaosDrafts; + return themedChaosDrafts.get(); } public static TournamentData getTournamentData() { return tournamentData; } - public static void setTournamentData(TournamentData tournamentData) { FModel.tournamentData = tournamentData; } + public static void setTournamentData(TournamentData tournamentData0) { tournamentData = tournamentData0; } } From bea5ffb0a843ac00af80424a329ec15be70f70c2 Mon Sep 17 00:00:00 2001 From: kevlahnota Date: Sun, 21 Sep 2025 08:51:30 +0800 Subject: [PATCH 230/355] Update FModel.java unused var --- forge-gui/src/main/java/forge/model/FModel.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/forge-gui/src/main/java/forge/model/FModel.java b/forge-gui/src/main/java/forge/model/FModel.java index dca8793a240..7ae9a94341c 100644 --- a/forge-gui/src/main/java/forge/model/FModel.java +++ b/forge-gui/src/main/java/forge/model/FModel.java @@ -85,8 +85,7 @@ public final class FModel { getPreferences().getPrefBoolean(FPref.UI_LOAD_UNKNOWN_CARDS), getPreferences().getPrefBoolean(FPref.UI_LOAD_NONLEGAL_CARDS), getPreferences().getPrefBoolean(FPref.ALLOW_CUSTOM_CARDS_IN_DECKS_CONFORMANCE), - getPreferences().getPrefBoolean(FPref.UI_SMART_CARD_ART), - GuiBase.getInterface().isLibgdxPort())); + getPreferences().getPrefBoolean(FPref.UI_SMART_CARD_ART))); private static final Supplier questPreferences = Suppliers.memoize(QuestPreferences::new); private static final Supplier conquestPreferences = Suppliers.memoize(() -> { final ConquestPreferences cp = new ConquestPreferences(); From a7568b08450638bb73f89b4efadb3acdd29558fe Mon Sep 17 00:00:00 2001 From: Renato Filipe Vidal Santos <45150760+dracontes@users.noreply.github.com> Date: Sun, 21 Sep 2025 08:30:43 +0100 Subject: [PATCH 231/355] Cleanup 2025-09-21 --- forge-gui/res/cardsfolder/a/appa_aangs_companion.txt | 4 ++-- forge-gui/res/cardsfolder/f/fire_nation_attacks.txt | 2 +- .../res/cardsfolder/t/the_rise_of_sozin_fire_lord_sozin.txt | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/forge-gui/res/cardsfolder/a/appa_aangs_companion.txt b/forge-gui/res/cardsfolder/a/appa_aangs_companion.txt index 5cfc5cb267b..ecebfb61baf 100644 --- a/forge-gui/res/cardsfolder/a/appa_aangs_companion.txt +++ b/forge-gui/res/cardsfolder/a/appa_aangs_companion.txt @@ -3,7 +3,7 @@ ManaCost:3 W Types:Legendary Creature Bison Ally PT:2/4 K:Flying -T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever NICKNAME attacks, another target attacking creature without flying gains flying until until end of turn. +T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever NICKNAME attacks, another target attacking creature without flying gains flying until end of turn. SVar:TrigPump:DB$ Pump | ValidTgts$ Creature.Other+attacking+withoutFlying | TgtPrompt$ Select another target attacking creature without flying | KW$ Flying SVar:HasAttackEffect:TRUE -Oracle:Flying (This creature can't be blocked except by creatures with flying or reach.)\nWhenever Appa attacks, another target attacking creature without flying gains flying until until end of turn. +Oracle:Flying (This creature can't be blocked except by creatures with flying or reach.)\nWhenever Appa attacks, another target attacking creature without flying gains flying until end of turn. diff --git a/forge-gui/res/cardsfolder/f/fire_nation_attacks.txt b/forge-gui/res/cardsfolder/f/fire_nation_attacks.txt index 9d3da9e3b14..e737dd00894 100644 --- a/forge-gui/res/cardsfolder/f/fire_nation_attacks.txt +++ b/forge-gui/res/cardsfolder/f/fire_nation_attacks.txt @@ -3,4 +3,4 @@ ManaCost:4 R Types:Instant A:SP$ Token | TokenAmount$ 2 | TokenScript$ r_2_2_soldier_firebending_1 | TokenOwner$ You | SpellDescription$ Create two 2/2 red Soldier creature tokens with firebending 1. (Whenever a creature with firebending 1 attacks, add {R}. This mana lasts until end of combat.) K:Flashback:8 R -Oracle:Create two 2/2 red Soldier creature tokens with firebending 1. (Whenever a creature with firebending 1 attacks, add {R}. This mana lasts until end of combat.)\nFlashback {8}{R} (You may may cast this card from your graveyard for its flashback cost. Then exile it.) +Oracle:Create two 2/2 red Soldier creature tokens with firebending 1. (Whenever a creature with firebending 1 attacks, add {R}. This mana lasts until end of combat.)\nFlashback {8}{R} (You may cast this card from your graveyard for its flashback cost. Then exile it.) diff --git a/forge-gui/res/cardsfolder/t/the_rise_of_sozin_fire_lord_sozin.txt b/forge-gui/res/cardsfolder/t/the_rise_of_sozin_fire_lord_sozin.txt index 680c2cf38a8..dbf399f6d6b 100644 --- a/forge-gui/res/cardsfolder/t/the_rise_of_sozin_fire_lord_sozin.txt +++ b/forge-gui/res/cardsfolder/t/the_rise_of_sozin_fire_lord_sozin.txt @@ -8,7 +8,7 @@ SVar:DBExile:DB$ ChangeZone | ValidTgts$ Opponent | ChangeType$ Card.NamedCard | SVar:DBTransform:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DBReturn | SpellDescription$ Exile this Saga, then return it to the battlefield transformed under your control. SVar:DBReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | Transformed$ True | GainControl$ True | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -Oracle: (As this Saga enters and after your draw step, add a lore counter.)\nI — Destroy all creatures.\nII — Choose a card name. Search target opponent's graveyard, hand, and library for up to four cards with that name and exile them. Then that player shuffles.\nIII — Exile this Saga, then return it to the battlefield transformed under your control. +Oracle:(As this Saga enters and after your draw step, add a lore counter.)\nI — Destroy all creatures.\nII — Choose a card name. Search target opponent's graveyard, hand, and library for up to four cards with that name and exile them. Then that player shuffles.\nIII — Exile this Saga, then return it to the battlefield transformed under your control. ALTERNATE From b50cdea5df8566af1d3e700a1d7913721f739484 Mon Sep 17 00:00:00 2001 From: kevlahnota Date: Mon, 22 Sep 2025 06:37:26 +0800 Subject: [PATCH 232/355] Update drop_tower.txt --- forge-gui/res/cardsfolder/d/drop_tower.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/d/drop_tower.txt b/forge-gui/res/cardsfolder/d/drop_tower.txt index ed5b5ada6db..329ae1b915a 100644 --- a/forge-gui/res/cardsfolder/d/drop_tower.txt +++ b/forge-gui/res/cardsfolder/d/drop_tower.txt @@ -5,7 +5,7 @@ K:Visit:TrigPump SVar:TrigPump:DB$ Effect | StaticAbilities$ Pump | ValidTgts$ Creature | Triggers$ ExileSelf | RememberObjects$ Targeted | SpellDescription$ Target creature gains flying until end of turn, or until any player rolls a 1, whichever comes first. SVar:Pump:Mode$ Continuous | Affected$ Card.IsRemembered | AddKeyword$ Flying | Description$ This creature gains flying until end of turn, or until any player rolls a 1. SVar:ExileSelf:Mode$ RolledDie | Execute$ TrigRemove | ValidResult$ EQ1 | Static$ True -SVar:TrigRemove:DB$ ChangeZone | Origin$ Command | Defined$ Self | Destination$ Exiled +SVar:TrigRemove:DB$ ChangeZone | Origin$ Command | Defined$ Self | Destination$ Exile Oracle:Visit — Target creature gains flying until end of turn, or until any player rolls a 1, whichever comes first. # --- VARIANTS --- From 8f7a77354aab65df1e125a3709162e660e825086 Mon Sep 17 00:00:00 2001 From: Chris H Date: Sun, 21 Sep 2025 19:07:55 -0400 Subject: [PATCH 233/355] Update apt-get so latest libxml2-utils is available --- .github/workflows/maven-publish.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/maven-publish.yml b/.github/workflows/maven-publish.yml index 808043bb503..877b16b0f1e 100644 --- a/.github/workflows/maven-publish.yml +++ b/.github/workflows/maven-publish.yml @@ -129,7 +129,9 @@ jobs: makeLatest: true - name: 🔧 Install XML tools - run: sudo apt-get install -y libxml2-utils + run: | + sudo apt-get update + sudo apt-get install -y libxml2-utils - name: 🔼 Bump versionCode in root POM id: bump_version From a2c798ba865792c1d858c1594cb314bb904646e6 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Sun, 21 Sep 2025 23:31:36 +0000 Subject: [PATCH 234/355] [maven-release-plugin] prepare release forge-2.0.06 --- adventure-editor/pom.xml | 2 +- forge-ai/pom.xml | 2 +- forge-core/pom.xml | 2 +- forge-game/pom.xml | 2 +- forge-gui-android/pom.xml | 2 +- forge-gui-desktop/pom.xml | 2 +- forge-gui-ios/pom.xml | 2 +- forge-gui-mobile-dev/pom.xml | 2 +- forge-gui-mobile/pom.xml | 2 +- forge-gui/pom.xml | 2 +- forge-installer/pom.xml | 2 +- forge-lda/pom.xml | 2 +- pom.xml | 4 ++-- 13 files changed, 14 insertions(+), 14 deletions(-) diff --git a/adventure-editor/pom.xml b/adventure-editor/pom.xml index 542d52eb86c..4c79b3ea0b0 100644 --- a/adventure-editor/pom.xml +++ b/adventure-editor/pom.xml @@ -3,7 +3,7 @@ forge forge - ${revision} + 2.0.06 4.0.0 diff --git a/forge-ai/pom.xml b/forge-ai/pom.xml index b51460f8ce7..6ba8b474ba6 100644 --- a/forge-ai/pom.xml +++ b/forge-ai/pom.xml @@ -6,7 +6,7 @@ forge forge - ${revision} + 2.0.06 forge-ai diff --git a/forge-core/pom.xml b/forge-core/pom.xml index 4649f07e8ea..431caf3d3ef 100644 --- a/forge-core/pom.xml +++ b/forge-core/pom.xml @@ -6,7 +6,7 @@ forge forge - ${revision} + 2.0.06 forge-core diff --git a/forge-game/pom.xml b/forge-game/pom.xml index d4c360abda8..cd0c5952ed1 100644 --- a/forge-game/pom.xml +++ b/forge-game/pom.xml @@ -6,7 +6,7 @@ forge forge - ${revision} + 2.0.06 forge-game diff --git a/forge-gui-android/pom.xml b/forge-gui-android/pom.xml index 62059c01379..0626b6ffeaf 100644 --- a/forge-gui-android/pom.xml +++ b/forge-gui-android/pom.xml @@ -23,7 +23,7 @@ forge forge - ${revision} + 2.0.06 forge-gui-android diff --git a/forge-gui-desktop/pom.xml b/forge-gui-desktop/pom.xml index 4e6b5c911a9..c3d04e8f2e4 100644 --- a/forge-gui-desktop/pom.xml +++ b/forge-gui-desktop/pom.xml @@ -4,7 +4,7 @@ forge forge - ${revision} + 2.0.06 forge-gui-desktop diff --git a/forge-gui-ios/pom.xml b/forge-gui-ios/pom.xml index 6b62913cf8a..b09249da91b 100644 --- a/forge-gui-ios/pom.xml +++ b/forge-gui-ios/pom.xml @@ -11,7 +11,7 @@ forge forge - ${revision} + 2.0.06 forge-gui-ios diff --git a/forge-gui-mobile-dev/pom.xml b/forge-gui-mobile-dev/pom.xml index 1c287064cdb..155b6efe24d 100644 --- a/forge-gui-mobile-dev/pom.xml +++ b/forge-gui-mobile-dev/pom.xml @@ -9,7 +9,7 @@ forge forge - ${revision} + 2.0.06 forge-gui-mobile-dev diff --git a/forge-gui-mobile/pom.xml b/forge-gui-mobile/pom.xml index a9ea7c2fdde..8eaac263430 100644 --- a/forge-gui-mobile/pom.xml +++ b/forge-gui-mobile/pom.xml @@ -4,7 +4,7 @@ forge forge - ${revision} + 2.0.06 forge-gui-mobile diff --git a/forge-gui/pom.xml b/forge-gui/pom.xml index 140fe370904..e21d5682229 100644 --- a/forge-gui/pom.xml +++ b/forge-gui/pom.xml @@ -4,7 +4,7 @@ forge forge - ${revision} + 2.0.06 forge-gui diff --git a/forge-installer/pom.xml b/forge-installer/pom.xml index 27fdd666499..fb7a0054005 100644 --- a/forge-installer/pom.xml +++ b/forge-installer/pom.xml @@ -4,7 +4,7 @@ forge forge - ${revision} + 2.0.06 forge-installer diff --git a/forge-lda/pom.xml b/forge-lda/pom.xml index 7cc9377a9d1..c354ec0f326 100644 --- a/forge-lda/pom.xml +++ b/forge-lda/pom.xml @@ -4,7 +4,7 @@ forge forge - ${revision} + 2.0.06 forge-lda diff --git a/pom.xml b/pom.xml index 87d70446855..22541706e77 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ forge pom Forge Parent - ${revision} + 2.0.06 Forge lets you play the card game Magic: The Gathering against a computer opponent using all of the rules. @@ -43,7 +43,7 @@ scm:git:https://github.com/Card-Forge/forge.git scm:git:https://github.com/Card-Forge/forge.git - HEAD + forge-2.0.06 From 54f41a28cd39cd80dbe16869feec00ad8bb10f3f Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Sun, 21 Sep 2025 23:31:38 +0000 Subject: [PATCH 235/355] [maven-release-plugin] prepare for next development iteration --- adventure-editor/pom.xml | 2 +- forge-ai/pom.xml | 2 +- forge-core/pom.xml | 2 +- forge-game/pom.xml | 2 +- forge-gui-android/pom.xml | 2 +- forge-gui-desktop/pom.xml | 2 +- forge-gui-ios/pom.xml | 2 +- forge-gui-mobile-dev/pom.xml | 2 +- forge-gui-mobile/pom.xml | 2 +- forge-gui/pom.xml | 2 +- forge-installer/pom.xml | 2 +- forge-lda/pom.xml | 2 +- pom.xml | 4 ++-- 13 files changed, 14 insertions(+), 14 deletions(-) diff --git a/adventure-editor/pom.xml b/adventure-editor/pom.xml index 4c79b3ea0b0..f8e21f10959 100644 --- a/adventure-editor/pom.xml +++ b/adventure-editor/pom.xml @@ -3,7 +3,7 @@ forge forge - 2.0.06 + 2.0.07-SNAPSHOT 4.0.0 diff --git a/forge-ai/pom.xml b/forge-ai/pom.xml index 6ba8b474ba6..5d9c42cc10b 100644 --- a/forge-ai/pom.xml +++ b/forge-ai/pom.xml @@ -6,7 +6,7 @@ forge forge - 2.0.06 + 2.0.07-SNAPSHOT forge-ai diff --git a/forge-core/pom.xml b/forge-core/pom.xml index 431caf3d3ef..fa9aa85e79d 100644 --- a/forge-core/pom.xml +++ b/forge-core/pom.xml @@ -6,7 +6,7 @@ forge forge - 2.0.06 + 2.0.07-SNAPSHOT forge-core diff --git a/forge-game/pom.xml b/forge-game/pom.xml index cd0c5952ed1..9935aaf6869 100644 --- a/forge-game/pom.xml +++ b/forge-game/pom.xml @@ -6,7 +6,7 @@ forge forge - 2.0.06 + 2.0.07-SNAPSHOT forge-game diff --git a/forge-gui-android/pom.xml b/forge-gui-android/pom.xml index 0626b6ffeaf..87be2d52639 100644 --- a/forge-gui-android/pom.xml +++ b/forge-gui-android/pom.xml @@ -23,7 +23,7 @@ forge forge - 2.0.06 + 2.0.07-SNAPSHOT forge-gui-android diff --git a/forge-gui-desktop/pom.xml b/forge-gui-desktop/pom.xml index c3d04e8f2e4..ef8689270e4 100644 --- a/forge-gui-desktop/pom.xml +++ b/forge-gui-desktop/pom.xml @@ -4,7 +4,7 @@ forge forge - 2.0.06 + 2.0.07-SNAPSHOT forge-gui-desktop diff --git a/forge-gui-ios/pom.xml b/forge-gui-ios/pom.xml index b09249da91b..b4a4dabb846 100644 --- a/forge-gui-ios/pom.xml +++ b/forge-gui-ios/pom.xml @@ -11,7 +11,7 @@ forge forge - 2.0.06 + 2.0.07-SNAPSHOT forge-gui-ios diff --git a/forge-gui-mobile-dev/pom.xml b/forge-gui-mobile-dev/pom.xml index 155b6efe24d..90f4f179d95 100644 --- a/forge-gui-mobile-dev/pom.xml +++ b/forge-gui-mobile-dev/pom.xml @@ -9,7 +9,7 @@ forge forge - 2.0.06 + 2.0.07-SNAPSHOT forge-gui-mobile-dev diff --git a/forge-gui-mobile/pom.xml b/forge-gui-mobile/pom.xml index 8eaac263430..6a64b96c0c0 100644 --- a/forge-gui-mobile/pom.xml +++ b/forge-gui-mobile/pom.xml @@ -4,7 +4,7 @@ forge forge - 2.0.06 + 2.0.07-SNAPSHOT forge-gui-mobile diff --git a/forge-gui/pom.xml b/forge-gui/pom.xml index e21d5682229..32470332e03 100644 --- a/forge-gui/pom.xml +++ b/forge-gui/pom.xml @@ -4,7 +4,7 @@ forge forge - 2.0.06 + 2.0.07-SNAPSHOT forge-gui diff --git a/forge-installer/pom.xml b/forge-installer/pom.xml index fb7a0054005..00bae7832ae 100644 --- a/forge-installer/pom.xml +++ b/forge-installer/pom.xml @@ -4,7 +4,7 @@ forge forge - 2.0.06 + 2.0.07-SNAPSHOT forge-installer diff --git a/forge-lda/pom.xml b/forge-lda/pom.xml index c354ec0f326..ca72f2be079 100644 --- a/forge-lda/pom.xml +++ b/forge-lda/pom.xml @@ -4,7 +4,7 @@ forge forge - 2.0.06 + 2.0.07-SNAPSHOT forge-lda diff --git a/pom.xml b/pom.xml index 22541706e77..3580a61cd89 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ forge pom Forge Parent - 2.0.06 + 2.0.07-SNAPSHOT Forge lets you play the card game Magic: The Gathering against a computer opponent using all of the rules. @@ -43,7 +43,7 @@ scm:git:https://github.com/Card-Forge/forge.git scm:git:https://github.com/Card-Forge/forge.git - forge-2.0.06 + HEAD From a6395373f71301a4f59a96e28c370c57229997b3 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Sun, 21 Sep 2025 23:40:14 +0000 Subject: [PATCH 236/355] Restore POM files for preparation of next release --- adventure-editor/pom.xml | 2 +- forge-ai/pom.xml | 2 +- forge-core/pom.xml | 2 +- forge-game/pom.xml | 2 +- forge-gui-android/pom.xml | 2 +- forge-gui-desktop/pom.xml | 12 ++++++------ forge-gui-ios/pom.xml | 2 +- forge-gui-mobile-dev/pom.xml | 2 +- forge-gui-mobile/pom.xml | 2 +- forge-gui/pom.xml | 2 +- forge-installer/pom.xml | 2 +- forge-lda/pom.xml | 2 +- pom.xml | 2 +- 13 files changed, 18 insertions(+), 18 deletions(-) diff --git a/adventure-editor/pom.xml b/adventure-editor/pom.xml index f8e21f10959..542d52eb86c 100644 --- a/adventure-editor/pom.xml +++ b/adventure-editor/pom.xml @@ -3,7 +3,7 @@ forge forge - 2.0.07-SNAPSHOT + ${revision} 4.0.0 diff --git a/forge-ai/pom.xml b/forge-ai/pom.xml index 5d9c42cc10b..b51460f8ce7 100644 --- a/forge-ai/pom.xml +++ b/forge-ai/pom.xml @@ -6,7 +6,7 @@ forge forge - 2.0.07-SNAPSHOT + ${revision} forge-ai diff --git a/forge-core/pom.xml b/forge-core/pom.xml index fa9aa85e79d..4649f07e8ea 100644 --- a/forge-core/pom.xml +++ b/forge-core/pom.xml @@ -6,7 +6,7 @@ forge forge - 2.0.07-SNAPSHOT + ${revision} forge-core diff --git a/forge-game/pom.xml b/forge-game/pom.xml index 9935aaf6869..d4c360abda8 100644 --- a/forge-game/pom.xml +++ b/forge-game/pom.xml @@ -6,7 +6,7 @@ forge forge - 2.0.07-SNAPSHOT + ${revision} forge-game diff --git a/forge-gui-android/pom.xml b/forge-gui-android/pom.xml index 87be2d52639..62059c01379 100644 --- a/forge-gui-android/pom.xml +++ b/forge-gui-android/pom.xml @@ -23,7 +23,7 @@ forge forge - 2.0.07-SNAPSHOT + ${revision} forge-gui-android diff --git a/forge-gui-desktop/pom.xml b/forge-gui-desktop/pom.xml index ef8689270e4..e8c5220721e 100644 --- a/forge-gui-desktop/pom.xml +++ b/forge-gui-desktop/pom.xml @@ -4,7 +4,7 @@ forge forge - 2.0.07-SNAPSHOT + ${revision} forge-gui-desktop @@ -340,7 +340,7 @@ try { org.powermock powermock-module-testng-common - 2.0.9 + ${revision} com.beust @@ -380,7 +380,7 @@ try { org.powermock powermock-module-testng - 2.0.9 + ${revision} test @@ -392,7 +392,7 @@ try { org.powermock powermock-core - 2.0.9 + ${revision} test @@ -408,7 +408,7 @@ try { org.powermock powermock-api-mockito2 - 2.0.9 + ${revision} test @@ -420,7 +420,7 @@ try { org.powermock powermock-api-support - 2.0.9 + ${revision} test diff --git a/forge-gui-ios/pom.xml b/forge-gui-ios/pom.xml index b4a4dabb846..6b62913cf8a 100644 --- a/forge-gui-ios/pom.xml +++ b/forge-gui-ios/pom.xml @@ -11,7 +11,7 @@ forge forge - 2.0.07-SNAPSHOT + ${revision} forge-gui-ios diff --git a/forge-gui-mobile-dev/pom.xml b/forge-gui-mobile-dev/pom.xml index 90f4f179d95..1c287064cdb 100644 --- a/forge-gui-mobile-dev/pom.xml +++ b/forge-gui-mobile-dev/pom.xml @@ -9,7 +9,7 @@ forge forge - 2.0.07-SNAPSHOT + ${revision} forge-gui-mobile-dev diff --git a/forge-gui-mobile/pom.xml b/forge-gui-mobile/pom.xml index 6a64b96c0c0..a9ea7c2fdde 100644 --- a/forge-gui-mobile/pom.xml +++ b/forge-gui-mobile/pom.xml @@ -4,7 +4,7 @@ forge forge - 2.0.07-SNAPSHOT + ${revision} forge-gui-mobile diff --git a/forge-gui/pom.xml b/forge-gui/pom.xml index 32470332e03..140fe370904 100644 --- a/forge-gui/pom.xml +++ b/forge-gui/pom.xml @@ -4,7 +4,7 @@ forge forge - 2.0.07-SNAPSHOT + ${revision} forge-gui diff --git a/forge-installer/pom.xml b/forge-installer/pom.xml index 00bae7832ae..27fdd666499 100644 --- a/forge-installer/pom.xml +++ b/forge-installer/pom.xml @@ -4,7 +4,7 @@ forge forge - 2.0.07-SNAPSHOT + ${revision} forge-installer diff --git a/forge-lda/pom.xml b/forge-lda/pom.xml index ca72f2be079..7cc9377a9d1 100644 --- a/forge-lda/pom.xml +++ b/forge-lda/pom.xml @@ -4,7 +4,7 @@ forge forge - 2.0.07-SNAPSHOT + ${revision} forge-lda diff --git a/pom.xml b/pom.xml index 3580a61cd89..a5202d65929 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ src/main/config 17 - 2.0.06 + 2.0.07 -SNAPSHOT From a4378a20e5418a7449c9d1f435392561d9c86197 Mon Sep 17 00:00:00 2001 From: Chris H Date: Sun, 21 Sep 2025 20:46:30 -0400 Subject: [PATCH 237/355] Manually fixing version touches --- forge-gui-desktop/pom.xml | 10 +++++----- pom.xml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/forge-gui-desktop/pom.xml b/forge-gui-desktop/pom.xml index e8c5220721e..4e6b5c911a9 100644 --- a/forge-gui-desktop/pom.xml +++ b/forge-gui-desktop/pom.xml @@ -340,7 +340,7 @@ try { org.powermock powermock-module-testng-common - ${revision} + 2.0.9 com.beust @@ -380,7 +380,7 @@ try { org.powermock powermock-module-testng - ${revision} + 2.0.9 test @@ -392,7 +392,7 @@ try { org.powermock powermock-core - ${revision} + 2.0.9 test @@ -408,7 +408,7 @@ try { org.powermock powermock-api-mockito2 - ${revision} + 2.0.9 test @@ -420,7 +420,7 @@ try { org.powermock powermock-api-support - ${revision} + 2.0.9 test diff --git a/pom.xml b/pom.xml index a5202d65929..cd533232ab3 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ forge pom Forge Parent - 2.0.07-SNAPSHOT + ${revision} Forge lets you play the card game Magic: The Gathering against a computer opponent using all of the rules. From 50b7543933296d5f432fe720e7be46740f9496a0 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Sun, 21 Sep 2025 14:43:00 +0200 Subject: [PATCH 238/355] ColorEnum: use ITranslatable interface --- forge-core/src/main/java/forge/card/MagicColor.java | 12 ++++++------ .../src/main/java/forge/deck/DeckRecognizer.java | 6 +++--- forge-core/src/main/java/forge/item/IPaperCard.java | 5 ----- .../src/main/java/forge/util/ITranslatable.java | 8 +++----- forge-game/src/main/java/forge/game/card/Card.java | 4 ++-- .../src/main/java/forge/game/card/CardState.java | 5 +++-- .../src/main/java/forge/game/card/CardView.java | 4 ++-- .../java/forge/game/event/GameEventDoorChanged.java | 3 +-- .../forge/game/replacement/ReplacementEffect.java | 2 +- .../java/forge/game/spellability/SpellAbility.java | 2 +- .../java/forge/game/staticability/StaticAbility.java | 2 +- .../src/main/java/forge/game/trigger/Trigger.java | 4 ++-- .../src/main/java/forge/gui/card/CardDetailUtil.java | 2 +- 13 files changed, 26 insertions(+), 33 deletions(-) diff --git a/forge-core/src/main/java/forge/card/MagicColor.java b/forge-core/src/main/java/forge/card/MagicColor.java index 941a6a821f0..0eb9a7b6470 100644 --- a/forge-core/src/main/java/forge/card/MagicColor.java +++ b/forge-core/src/main/java/forge/card/MagicColor.java @@ -1,6 +1,8 @@ package forge.card; import com.google.common.collect.ImmutableList; + +import forge.util.ITranslatable; import forge.util.Localizer; /** @@ -157,7 +159,7 @@ public final class MagicColor { } } - public enum Color { + public enum Color implements ITranslatable { WHITE(Constant.WHITE, MagicColor.WHITE, "W", "lblWhite"), BLUE(Constant.BLUE, MagicColor.BLUE, "U", "lblBlue"), BLACK(Constant.BLACK, MagicColor.BLACK, "B", "lblBlack"), @@ -188,6 +190,7 @@ public final class MagicColor { } } + @Override public String getName() { return name; } @@ -195,7 +198,8 @@ public final class MagicColor { return shortName; } - public String getLocalizedName() { + @Override + public String getTranslatedName() { return Localizer.getInstance().getMessage(label); } @@ -205,10 +209,6 @@ public final class MagicColor { public String getSymbol() { return symbol; } - @Override - public String toString() { - return getLocalizedName(); - } } } diff --git a/forge-core/src/main/java/forge/deck/DeckRecognizer.java b/forge-core/src/main/java/forge/deck/DeckRecognizer.java index 0e486c85929..1723a1942e4 100644 --- a/forge-core/src/main/java/forge/deck/DeckRecognizer.java +++ b/forge-core/src/main/java/forge/deck/DeckRecognizer.java @@ -994,7 +994,7 @@ public class DeckRecognizer { private static String getMagicColourLabel(MagicColor.Color magicColor) { if (magicColor == null) // Multicolour return String.format("%s {W}{U}{B}{R}{G}", getLocalisedMagicColorName("Multicolour")); - return String.format("%s %s", magicColor.getLocalizedName(), magicColor.getSymbol()); + return String.format("%s %s", magicColor.getTranslatedName(), magicColor.getSymbol()); } private static final HashMap manaSymbolsMap = new HashMap() {{ @@ -1013,8 +1013,8 @@ public class DeckRecognizer { if (magicColor2 == null || magicColor2 == MagicColor.Color.COLORLESS || magicColor1 == MagicColor.Color.COLORLESS) return String.format("%s // %s", getMagicColourLabel(magicColor1), getMagicColourLabel(magicColor2)); - String localisedName1 = magicColor1.getLocalizedName(); - String localisedName2 = magicColor2.getLocalizedName(); + String localisedName1 = magicColor1.getTranslatedName(); + String localisedName2 = magicColor2.getTranslatedName(); String comboManaSymbol = manaSymbolsMap.get(magicColor1.getColorMask() | magicColor2.getColorMask()); return String.format("%s/%s {%s}", localisedName1, localisedName2, comboManaSymbol); } diff --git a/forge-core/src/main/java/forge/item/IPaperCard.java b/forge-core/src/main/java/forge/item/IPaperCard.java index 9d16618c2c4..af12c23c78e 100644 --- a/forge-core/src/main/java/forge/item/IPaperCard.java +++ b/forge-core/src/main/java/forge/item/IPaperCard.java @@ -52,9 +52,4 @@ public interface IPaperCard extends InventoryItem, Serializable { default String getUntranslatedType() { return getRules().getType().toString(); } - - @Override - default String getUntranslatedOracle() { - return getRules().getOracleText(); - } } \ No newline at end of file diff --git a/forge-core/src/main/java/forge/util/ITranslatable.java b/forge-core/src/main/java/forge/util/ITranslatable.java index 6bbba27afb3..6f75fcd96cc 100644 --- a/forge-core/src/main/java/forge/util/ITranslatable.java +++ b/forge-core/src/main/java/forge/util/ITranslatable.java @@ -10,13 +10,11 @@ public interface ITranslatable extends IHasName { default String getUntranslatedName() { return getName(); } + default String getTranslatedName() { + return getName(); + } default String getUntranslatedType() { return ""; } - - default String getUntranslatedOracle() { - return ""; - } - } diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 246b405263b..776f9f6a0ae 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -7849,8 +7849,8 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr return currentState.getUntranslatedType(); } @Override - public String getUntranslatedOracle() { - return currentState.getUntranslatedOracle(); + public String getTranslatedName() { + return CardTranslation.getTranslatedName(this); } @Override diff --git a/forge-game/src/main/java/forge/game/card/CardState.java b/forge-game/src/main/java/forge/game/card/CardState.java index bdc892d36b0..57f9cf39896 100644 --- a/forge-game/src/main/java/forge/game/card/CardState.java +++ b/forge-game/src/main/java/forge/game/card/CardState.java @@ -40,6 +40,7 @@ import forge.game.spellability.SpellAbilityPredicates; import forge.game.spellability.SpellPermanent; import forge.game.staticability.StaticAbility; import forge.game.trigger.Trigger; +import forge.util.CardTranslation; import forge.util.ITranslatable; import forge.util.IterableUtil; import forge.util.collect.FCollection; @@ -946,7 +947,7 @@ public class CardState extends GameObject implements IHasSVars, ITranslatable { } @Override - public String getUntranslatedOracle() { - return getOracleText(); + public String getTranslatedName() { + return CardTranslation.getTranslatedName(this); } } diff --git a/forge-game/src/main/java/forge/game/card/CardView.java b/forge-game/src/main/java/forge/game/card/CardView.java index ab00531d2e3..52fbf98b263 100644 --- a/forge-game/src/main/java/forge/game/card/CardView.java +++ b/forge-game/src/main/java/forge/game/card/CardView.java @@ -1841,8 +1841,8 @@ public class CardView extends GameEntityView { } @Override - public String getUntranslatedOracle() { - return getOracleText(); + public String getTranslatedName() { + return CardTranslation.getTranslatedName(this); } } diff --git a/forge-game/src/main/java/forge/game/event/GameEventDoorChanged.java b/forge-game/src/main/java/forge/game/event/GameEventDoorChanged.java index 1b5d0ba7874..bf846625b1f 100644 --- a/forge-game/src/main/java/forge/game/event/GameEventDoorChanged.java +++ b/forge-game/src/main/java/forge/game/event/GameEventDoorChanged.java @@ -3,7 +3,6 @@ package forge.game.event; import forge.card.CardStateName; import forge.game.card.Card; import forge.game.player.Player; -import forge.util.CardTranslation; import forge.util.Lang; public record GameEventDoorChanged(Player activatingPlayer, Card card, CardStateName state, boolean unlock) implements GameEvent { @@ -15,7 +14,7 @@ public record GameEventDoorChanged(Player activatingPlayer, Card card, CardState @Override public String toString() { - String doorName = CardTranslation.getTranslatedName(card.getState(state)); + String doorName = card.getState(state).getTranslatedName(); StringBuilder sb = new StringBuilder(); sb.append(activatingPlayer); diff --git a/forge-game/src/main/java/forge/game/replacement/ReplacementEffect.java b/forge-game/src/main/java/forge/game/replacement/ReplacementEffect.java index f81dbb8f47d..a1c82f30a5e 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplacementEffect.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplacementEffect.java @@ -242,7 +242,7 @@ public abstract class ReplacementEffect extends TriggerReplacementBase { String desc = AbilityUtils.applyDescriptionTextChangeEffects(getParam("Description"), this); ITranslatable nameSource = getHostName(this); desc = CardTranslation.translateMultipleDescriptionText(desc, nameSource); - String translatedName = CardTranslation.getTranslatedName(nameSource); + String translatedName = nameSource.getTranslatedName(); desc = TextUtil.fastReplace(desc, "CARDNAME", translatedName); desc = TextUtil.fastReplace(desc, "NICKNAME", Lang.getInstance().getNickName(translatedName)); if (desc.contains("EFFECTSOURCE")) { diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java index 2f91be78f11..f404a3bb148 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java @@ -1121,7 +1121,7 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit if (node.getHostCard() != null && !desc.isEmpty()) { ITranslatable nameSource = getHostName(node); desc = CardTranslation.translateMultipleDescriptionText(desc, nameSource); - String translatedName = CardTranslation.getTranslatedName(nameSource); + String translatedName = nameSource.getTranslatedName(); desc = TextUtil.fastReplace(desc, "CARDNAME", translatedName); desc = TextUtil.fastReplace(desc, "NICKNAME", Lang.getInstance().getNickName(translatedName)); if (node.getOriginalHost() != null) { diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbility.java b/forge-game/src/main/java/forge/game/staticability/StaticAbility.java index 957f10a494f..1d362b75a98 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbility.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbility.java @@ -206,7 +206,7 @@ public class StaticAbility extends CardTraitBase implements IIdentifiable, Clone if (hasParam("Description") && !this.isSuppressed()) { ITranslatable nameSource = getHostName(this); String desc = CardTranslation.translateSingleDescriptionText(getParam("Description"), nameSource); - String translatedName = CardTranslation.getTranslatedName(nameSource); + String translatedName = nameSource.getTranslatedName(); desc = TextUtil.fastReplace(desc, "CARDNAME", translatedName); desc = TextUtil.fastReplace(desc, "NICKNAME", Lang.getInstance().getNickName(translatedName)); diff --git a/forge-game/src/main/java/forge/game/trigger/Trigger.java b/forge-game/src/main/java/forge/game/trigger/Trigger.java index 926e12d18f8..21e3ce718ac 100644 --- a/forge-game/src/main/java/forge/game/trigger/Trigger.java +++ b/forge-game/src/main/java/forge/game/trigger/Trigger.java @@ -124,7 +124,7 @@ public abstract class Trigger extends TriggerReplacementBase { String desc = getParam("TriggerDescription"); if (!desc.contains("ABILITY")) { desc = CardTranslation.translateSingleDescriptionText(getParam("TriggerDescription"), nameSource); - String translatedName = CardTranslation.getTranslatedName(nameSource); + String translatedName = nameSource.getTranslatedName(); desc = TextUtil.fastReplace(desc,"CARDNAME", translatedName); desc = TextUtil.fastReplace(desc,"NICKNAME", Lang.getInstance().getNickName(translatedName)); if (desc.contains("ORIGINALHOST") && this.getOriginalHost() != null) { @@ -218,7 +218,7 @@ public abstract class Trigger extends TriggerReplacementBase { result = TextUtil.fastReplace(result, "ABILITY", saDesc); result = CardTranslation.translateMultipleDescriptionText(result, sa.getHostCard()); - String translatedName = CardTranslation.getTranslatedName(sa.getHostCard()); + String translatedName = sa.getHostCard().getTranslatedName(); result = TextUtil.fastReplace(result,"CARDNAME", translatedName); result = TextUtil.fastReplace(result,"NICKNAME", Lang.getInstance().getNickName(translatedName)); } diff --git a/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java b/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java index 988e762e765..335f37dcb50 100644 --- a/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java +++ b/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java @@ -451,7 +451,7 @@ public class CardDetailUtil { if (card.getMarkedColors() != null && !card.getMarkedColors().isColorless()) { area.append("\n"); area.append("(").append(Localizer.getInstance().getMessage("lblSelected")).append(": "); - area.append(Lang.joinHomogenous(card.getMarkedColors().stream().map(MagicColor.Color::getLocalizedName).collect(Collectors.toList()))); + area.append(Lang.joinHomogenous(card.getMarkedColors().stream().map(MagicColor.Color::getTranslatedName).collect(Collectors.toList()))); area.append(")"); } From da52bc17e873f5ca74f7bcf8ed640c9bd782d1b9 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Mon, 22 Sep 2025 16:16:57 +0200 Subject: [PATCH 239/355] GameEventAttachment: flip oldTarget and newTarget param (#8761) * GameEventAttachment: flip oldTarget and newTarget param --------- Co-authored-by: tool4EvEr --- forge-game/src/main/java/forge/game/GameEntity.java | 3 --- .../main/java/forge/game/event/GameEventCardAttachment.java | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/forge-game/src/main/java/forge/game/GameEntity.java b/forge-game/src/main/java/forge/game/GameEntity.java index fabfe363313..7e51c00234f 100644 --- a/forge-game/src/main/java/forge/game/GameEntity.java +++ b/forge-game/src/main/java/forge/game/GameEntity.java @@ -34,7 +34,6 @@ import forge.game.card.CardCollectionView; import forge.game.card.CardLists; import forge.game.card.CardPredicates; import forge.game.card.CounterType; -import forge.game.event.GameEventCardAttachment; import forge.game.keyword.Keyword; import forge.game.keyword.KeywordInterface; import forge.game.player.Player; @@ -196,14 +195,12 @@ public abstract class GameEntity extends GameObject implements IIdentifiable { public final void addAttachedCard(final Card c) { if (attachedCards.add(c)) { updateAttachedCards(); - getGame().fireEvent(new GameEventCardAttachment(c, null, this)); } } public final void removeAttachedCard(final Card c) { if (attachedCards.remove(c)) { updateAttachedCards(); - getGame().fireEvent(new GameEventCardAttachment(c, this, null)); } } diff --git a/forge-game/src/main/java/forge/game/event/GameEventCardAttachment.java b/forge-game/src/main/java/forge/game/event/GameEventCardAttachment.java index 4430a9f9357..c6acf10358b 100644 --- a/forge-game/src/main/java/forge/game/event/GameEventCardAttachment.java +++ b/forge-game/src/main/java/forge/game/event/GameEventCardAttachment.java @@ -3,7 +3,7 @@ package forge.game.event; import forge.game.GameEntity; import forge.game.card.Card; -public record GameEventCardAttachment(Card equipment, GameEntity newTarget, GameEntity oldEntity) implements GameEvent { +public record GameEventCardAttachment(Card equipment, GameEntity oldEntity, GameEntity newTarget) implements GameEvent { @Override public T visit(IGameEventVisitor visitor) { From f6bc6d6742d158913a0265a01ce000a48239781d Mon Sep 17 00:00:00 2001 From: squee1968 <105706641+squee1968@users.noreply.github.com> Date: Tue, 23 Sep 2025 03:00:33 -0500 Subject: [PATCH 240/355] Fix Lady Octopus, Inspired Inventor (#8766) * Fix Lady Octopus, Inspired Inventor --- forge-gui/res/cardsfolder/l/lady_octopus_inspired_inventor.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/l/lady_octopus_inspired_inventor.txt b/forge-gui/res/cardsfolder/l/lady_octopus_inspired_inventor.txt index b12afee52b3..2c6bace341c 100644 --- a/forge-gui/res/cardsfolder/l/lady_octopus_inspired_inventor.txt +++ b/forge-gui/res/cardsfolder/l/lady_octopus_inspired_inventor.txt @@ -5,6 +5,6 @@ PT:0/2 T:Mode$ Drawn | ValidCard$ Card.YouCtrl | Number$ 1 | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever you draw your first or second card each turn, put an ingenuity counter on NICKNAME. T:Mode$ Drawn | ValidCard$ Card.YouCtrl | Number$ 2 | TriggerZones$ Battlefield | Execute$ TrigPutCounter | Secondary$ True | TriggerDescription$ Whenever you draw your first or second card each turn, put an ingenuity counter on NICKNAME. SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ INGENUITY | CounterNum$ 1 -A:AB$ Play | Cost$ T | Valid$ Artifact | ValidSA$ Spell.cmcLEX | ValidZone$ Hand | WithoutManaCost$ True | Amount$ 1 | Controller$ You | Optional$ True | SpellDescription$ You may cast an artifact spell from your hand with mana value less than or equal to the number of ingenuity counters on NICKNAME without paying its mana cost. +A:AB$ Play | Cost$ T | Valid$ Artifact.YouOwn | ValidSA$ Spell.cmcLEX | ValidZone$ Hand | WithoutManaCost$ True | Amount$ 1 | Controller$ You | Optional$ True | SpellDescription$ You may cast an artifact spell from your hand with mana value less than or equal to the number of ingenuity counters on NICKNAME without paying its mana cost. SVar:X:Count$CardCounters.INGENUITY Oracle:Whenever you draw your first or second card each turn, put an ingenuity counter on Lady Octopus.\n{T}: You may cast an artifact spell from your hand with mana value less than or equal to the number of ingenuity counters on Lady Octopus without paying its mana cost. From 40629a72a9a3ba0da6e6d947fef5050583838007 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Tue, 23 Sep 2025 19:09:15 +0800 Subject: [PATCH 241/355] update Sentry, update oshi, update android-all, npe prevention --- forge-game/pom.xml | 2 +- forge-gui-android/pom.xml | 8 ++++---- forge-gui-mobile-dev/pom.xml | 2 +- .../src/forge/itemmanager/views/ImageView.java | 18 ++++++++++++++++-- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/forge-game/pom.xml b/forge-game/pom.xml index d4c360abda8..ce1a3dd95a5 100644 --- a/forge-game/pom.xml +++ b/forge-game/pom.xml @@ -32,7 +32,7 @@ io.sentry sentry-logback - 8.19.1 + 8.21.1 org.jgrapht diff --git a/forge-gui-android/pom.xml b/forge-gui-android/pom.xml index 62059c01379..0de3daae9eb 100644 --- a/forge-gui-android/pom.xml +++ b/forge-gui-android/pom.xml @@ -97,7 +97,7 @@ org.robolectric android-all - 15-robolectric-12650502 + 15-robolectric-13954326 provided @@ -156,7 +156,7 @@ io.sentry sentry-android - 8.19.1 + 8.21.1 aar @@ -177,7 +177,7 @@ io.sentry sentry-android-core - 8.19.1 + 8.21.1 aar @@ -201,7 +201,7 @@ io.sentry sentry-android-ndk - 8.19.1 + 8.21.1 aar diff --git a/forge-gui-mobile-dev/pom.xml b/forge-gui-mobile-dev/pom.xml index 1c287064cdb..34ac5a2cfca 100644 --- a/forge-gui-mobile-dev/pom.xml +++ b/forge-gui-mobile-dev/pom.xml @@ -242,7 +242,7 @@ com.github.oshi oshi-core - 6.8.3 + 6.9.0 diff --git a/forge-gui-mobile/src/forge/itemmanager/views/ImageView.java b/forge-gui-mobile/src/forge/itemmanager/views/ImageView.java index 18b921f1bae..324a6460923 100644 --- a/forge-gui-mobile/src/forge/itemmanager/views/ImageView.java +++ b/forge-gui-mobile/src/forge/itemmanager/views/ImageView.java @@ -92,7 +92,12 @@ public class ImageView extends ItemView { private T get(int index) { synchronized (lock) { - return internalList.get(index); + try { + // TODO: Find cause why index is invalid on some cases... + return internalList.get(index); + } catch (Exception e) { + return null; + } } } @@ -579,6 +584,8 @@ public class ImageView extends ItemView { maxPileHeight = 0; for (int j = 0; j < group.piles.size(); j++) { Pile pile = group.piles.get(j); + if (pile == null) + continue; y = pileY; for (int k = 0; k < pile.items.size(); k++) { ItemInfo itemInfo = pile.items.get(k); @@ -588,7 +595,10 @@ public class ImageView extends ItemView { itemInfo.setBounds(x, y, itemWidth, itemHeight); y += dy; } - pile.items.get(pile.items.size() - 1).pos = CardStackPosition.Top; + ItemInfo itemInfo = pile.items.get(pile.items.size() - 1); + if (itemInfo == null) + continue; + itemInfo.pos = CardStackPosition.Top; pileHeight = y + itemHeight - dy - pileY; if (pileHeight > maxPileHeight) { maxPileHeight = pileHeight; @@ -705,9 +715,13 @@ public class ImageView extends ItemView { float relX = x + group.getScrollLeft() - group.getLeft(); float relY = y + getScrollValue(); Pile pile = group.piles.get(j); + if (pile == null) + continue; if (pile.contains(relX, relY)) { for (int k = pile.items.size() - 1; k >= 0; k--) { ItemInfo item = pile.items.get(k); + if (item == null) + continue; if (item.contains(relX, relY)) { return item; } From ab3b00cb656a85881c0a72beae5496bb134a0590 Mon Sep 17 00:00:00 2001 From: Renato Filipe Vidal Santos <45150760+dracontes@users.noreply.github.com> Date: Tue, 23 Sep 2025 17:26:25 +0100 Subject: [PATCH 242/355] Cleanup 2025-09-23 --- .../cardsfolder/a/avatar_aang_aang_master_of_elements.txt | 2 +- forge-gui/res/cardsfolder/b/bagel_and_schmear.txt | 4 ++-- forge-gui/res/cardsfolder/b/ballad_of_the_black_flag.txt | 4 ++-- forge-gui/res/cardsfolder/b/bloodpyre_elemental.txt | 2 +- forge-gui/res/cardsfolder/b/bound_determined.txt | 4 ++-- forge-gui/res/cardsfolder/c/cloakwood_swarmkeeper.txt | 4 ++-- forge-gui/res/cardsfolder/c/corpse_traders.txt | 2 +- forge-gui/res/cardsfolder/d/daily_bugle_building.txt | 2 +- forge-gui/res/cardsfolder/d/draining_whelk.txt | 4 ++-- forge-gui/res/cardsfolder/e/eliminate_the_impossible.txt | 4 ++-- forge-gui/res/cardsfolder/e/eye_for_an_eye.txt | 4 ++-- .../res/cardsfolder/f/flaxen_intruder_welcome_home.txt | 4 ++-- forge-gui/res/cardsfolder/f/frankensteins_monster.txt | 4 ++-- forge-gui/res/cardsfolder/g/gryffs_boon.txt | 4 ++-- forge-gui/res/cardsfolder/i/ignoble_soldier.txt | 4 ++-- forge-gui/res/cardsfolder/i/immersturm_skullcairn.txt | 2 +- forge-gui/res/cardsfolder/i/izzet_steam_maze.txt | 4 ++-- forge-gui/res/cardsfolder/l/luminescent_rain.txt | 4 ++-- forge-gui/res/cardsfolder/m/march_toward_perfection.txt | 2 +- forge-gui/res/cardsfolder/m/mindwhip_sliver.txt | 2 +- forge-gui/res/cardsfolder/m/molten_collapse.txt | 4 ++-- .../res/cardsfolder/o/ob_nixilis_of_the_black_oath.txt | 4 ++-- forge-gui/res/cardsfolder/p/perish_the_thought.txt | 4 ++-- forge-gui/res/cardsfolder/p/pilfering_imp.txt | 2 +- forge-gui/res/cardsfolder/r/rakshasa_vizier.txt | 4 ++-- .../cardsfolder/rebalanced/a-zar_ojanen_scion_of_efrava.txt | 6 +++--- forge-gui/res/cardsfolder/s/shimatsu_the_bloodcloaked.txt | 4 ++-- forge-gui/res/cardsfolder/s/skygames.txt | 2 +- forge-gui/res/cardsfolder/s/smoldering_tar.txt | 2 +- forge-gui/res/cardsfolder/s/squees_revenge.txt | 4 ++-- forge-gui/res/cardsfolder/s/stalking_yeti.txt | 2 +- .../cardsfolder/s/startled_awake_persistent_nightmare.txt | 2 +- forge-gui/res/cardsfolder/s/stonebinders_familiar.txt | 4 ++-- forge-gui/res/cardsfolder/s/surtland_frostpyre.txt | 2 +- forge-gui/res/cardsfolder/t/tahngarths_glare.txt | 4 ++-- forge-gui/res/cardsfolder/t/the_soul_stone.txt | 2 +- .../t/titania_voice_of_gaea_titania_gaea_incarnate.txt | 4 ++-- forge-gui/res/cardsfolder/t/transmogrifying_wand.txt | 2 +- forge-gui/res/cardsfolder/t/trap_essence.txt | 4 ++-- forge-gui/res/cardsfolder/t/trickery_charm.txt | 4 ++-- forge-gui/res/cardsfolder/u/undercity_necrolisk.txt | 2 +- forge-gui/res/cardsfolder/u/urza_academy_headmaster.txt | 4 ++-- forge-gui/res/cardsfolder/v/ventifact_bottle.txt | 2 +- forge-gui/res/cardsfolder/w/woodland_champion.txt | 4 ++-- forge-gui/res/cardsfolder/z/zar_ojanen_scion_of_efrava.txt | 4 ++-- .../tokenscripts/g_x_x_treefolk_warrior_total_forests.txt | 4 ++-- 46 files changed, 76 insertions(+), 76 deletions(-) diff --git a/forge-gui/res/cardsfolder/a/avatar_aang_aang_master_of_elements.txt b/forge-gui/res/cardsfolder/a/avatar_aang_aang_master_of_elements.txt index a3072cef049..8e4e9a77b46 100644 --- a/forge-gui/res/cardsfolder/a/avatar_aang_aang_master_of_elements.txt +++ b/forge-gui/res/cardsfolder/a/avatar_aang_aang_master_of_elements.txt @@ -7,7 +7,7 @@ K:Firebending:2 T:Mode$ ElementalBend | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ Whenever you waterbend, earthbend, firebend, or airbend, draw a card. Then if you've done all four this turn, transform CARDNAME. SVar:TrigDraw:DB$ Draw | SubAbility$ DBTransform SVar:DBTransform:DB$ SetState | Defined$ Self | Mode$ Transform | ConditionCheckSVar$ X -X:Count$AllFourBend.1.0 +SVar:X:Count$AllFourBend.1.0 Oracle:Flying, firebending 2\nWhenever you waterbend, earthbend, firebend, or airbend, draw a card. Then if you've done all four this turn, transform Avatar Aang. ALTERNATE diff --git a/forge-gui/res/cardsfolder/b/bagel_and_schmear.txt b/forge-gui/res/cardsfolder/b/bagel_and_schmear.txt index ecaa11ff2e2..66285ca9f29 100644 --- a/forge-gui/res/cardsfolder/b/bagel_and_schmear.txt +++ b/forge-gui/res/cardsfolder/b/bagel_and_schmear.txt @@ -1,8 +1,8 @@ Name:Bagel and Schmear ManaCost:1 Types:Artifact Food -A:AB$ PutCounter | PreCostDesc$ Share — | Cost$ W T Sac<1/CARDNAME> | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBDraw | SorcerySpeed$ True | SpellDescription$ Put a +1/+1 counter on up to one target creature. Draw a card. Activate only as a sorcery. -A:AB$ GainLife | PreCostDesc$ Nosh — | Cost$ 2 T Sac<1/CARDNAME> | LifeAmount$ 3 | SubAbility$ DBDraw | SpellDescription$ You gain 3 life and draw a card. +A:AB$ PutCounter | PrecostDesc$ Share — | Cost$ W T Sac<1/CARDNAME> | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBDraw | SorcerySpeed$ True | SpellDescription$ Put a +1/+1 counter on up to one target creature. Draw a card. Activate only as a sorcery. +A:AB$ GainLife | PrecostDesc$ Nosh — | Cost$ 2 T Sac<1/CARDNAME> | LifeAmount$ 3 | SubAbility$ DBDraw | SpellDescription$ You gain 3 life and draw a card. SVar:DBDraw:DB$ Draw DeckHas:Ability$LifeGain|Sacrifice|Counters Oracle:Share — {W}, {T}, Sacrifice this artifact: Put a +1/+1 counter on up to one target creature. Draw a card. Activate only as a sorcery.\nNosh — {2}, {T}, Sacrifice this artifact: You gain 3 life and draw a card. diff --git a/forge-gui/res/cardsfolder/b/ballad_of_the_black_flag.txt b/forge-gui/res/cardsfolder/b/ballad_of_the_black_flag.txt index e0135e23caa..214905940b1 100644 --- a/forge-gui/res/cardsfolder/b/ballad_of_the_black_flag.txt +++ b/forge-gui/res/cardsfolder/b/ballad_of_the_black_flag.txt @@ -5,6 +5,6 @@ K:Chapter:4:DBMill,DBMill,DBMill,DBCostReduction SVar:DBMill:DB$ Mill | NumCards$ 3 | Defined$ You | Imprint$ True | SubAbility$ DBChangeZone SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard,Exile | Destination$ Hand | ChangeType$ Card.Historic+YouOwn+IsImprinted | Hidden$ True | Optional$ True | SubAbility$ DBCleanup | SpellDescription$ Mill three cards. You may put a historic card from among them into your hand. (Artifacts, legendaries, and Sagas are historic.) SVar:DBCleanup:DB$ Cleanup | ClearImprinted$ True -SVar:DBCostReduction:DB$ Effect | StaticAbilities$ ReduceSPcost -SVar:ReduceSPcost:Mode$ ReduceCost | ValidCard$ Card.Historic | Type$ Spell | Activator$ You | Amount$ 2 | Description$ Historic spells you cast this turn cost {2} less to cast. +SVar:DBCostReduction:DB$ Effect | StaticAbilities$ ReduceSPCost +SVar:ReduceSPCost:Mode$ ReduceCost | ValidCard$ Card.Historic | Type$ Spell | Activator$ You | Amount$ 2 | Description$ Historic spells you cast this turn cost {2} less to cast. Oracle:(As this Saga enters and after your draw step, add a lore counter. Sacrifice after IV.)\nI, II, III — Mill three cards. You may put a historic card from among them into your hand. (Artifacts, legendaries, and Sagas are historic.)\nIV — Historic spells you cast this turn cost {2} less to cast. diff --git a/forge-gui/res/cardsfolder/b/bloodpyre_elemental.txt b/forge-gui/res/cardsfolder/b/bloodpyre_elemental.txt index 0025d902e7d..fcc0db5613d 100644 --- a/forge-gui/res/cardsfolder/b/bloodpyre_elemental.txt +++ b/forge-gui/res/cardsfolder/b/bloodpyre_elemental.txt @@ -2,6 +2,6 @@ Name:Bloodpyre Elemental ManaCost:4 R Types:Creature Elemental PT:4/1 -A:AB$ DealDamage | Cost$ Sac<1/CARDNAME> | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 4 | SorcerySpeed$ True | SpellDescription$ It deals 4 damage to target creature. Activate only any time you could cast a sorcery. +A:AB$ DealDamage | Cost$ Sac<1/CARDNAME> | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 4 | SorcerySpeed$ True | SpellDescription$ It deals 4 damage to target creature. Activate only as a sorcery. DeckHas:Ability$Sacrifice Oracle:Sacrifice Bloodpyre Elemental: It deals 4 damage to target creature. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/b/bound_determined.txt b/forge-gui/res/cardsfolder/b/bound_determined.txt index 4930864f9da..6ae44ecde59 100644 --- a/forge-gui/res/cardsfolder/b/bound_determined.txt +++ b/forge-gui/res/cardsfolder/b/bound_determined.txt @@ -15,7 +15,7 @@ ALTERNATE Name:Determined ManaCost:G U Types:Instant -A:SP$ Effect | ReplacementEffects$ CantbeCountered | SubAbility$ DBDraw | SpellDescription$ Other spells you control can't be countered this turn. Draw a card. -SVar:CantbeCountered:Event$ Counter | ValidSA$ Spell.YouCtrl | Layer$ CantHappen | Description$ Other spells you control can't be countered this turn. +A:SP$ Effect | ReplacementEffects$ CantBeCountered | SubAbility$ DBDraw | SpellDescription$ Other spells you control can't be countered this turn. Draw a card. +SVar:CantBeCountered:Event$ Counter | ValidSA$ Spell.YouCtrl | Layer$ CantHappen | Description$ Other spells you control can't be countered this turn. SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 1 Oracle:Other spells you control can't be countered this turn.\nDraw a card. diff --git a/forge-gui/res/cardsfolder/c/cloakwood_swarmkeeper.txt b/forge-gui/res/cardsfolder/c/cloakwood_swarmkeeper.txt index 16eeb056faa..e542d0eb53f 100644 --- a/forge-gui/res/cardsfolder/c/cloakwood_swarmkeeper.txt +++ b/forge-gui/res/cardsfolder/c/cloakwood_swarmkeeper.txt @@ -2,8 +2,8 @@ Name:Cloakwood Swarmkeeper ManaCost:G Types:Creature Elf Ranger PT:1/1 -T:Mode$ ChangesZoneAll | ValidCards$ Card.token+YouCtrl | Destination$ Battlefield | TriggerZones$ Battlefield | Execute$ TrigPutcounter | TriggerDescription$ Gathered Swarm — Whenever one or more tokens you control enter, put a +1/+1 counter on CARDNAME. -SVar:TrigPutcounter:DB$ PutCounter | CounterType$ P1P1 | Defined$ Self | CounterNum$ 1 +T:Mode$ ChangesZoneAll | ValidCards$ Card.token+YouCtrl | Destination$ Battlefield | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Gathered Swarm — Whenever one or more tokens you control enter, put a +1/+1 counter on CARDNAME. +SVar:TrigPutCounter:DB$ PutCounter | CounterType$ P1P1 | Defined$ Self | CounterNum$ 1 DeckHints:Ability$Token DeckHas:Ability$Counters Oracle:Gathered Swarm — Whenever one or more tokens you control enter, put a +1/+1 counter on Cloakwood Swarmkeeper. diff --git a/forge-gui/res/cardsfolder/c/corpse_traders.txt b/forge-gui/res/cardsfolder/c/corpse_traders.txt index 27aadf2f91b..bbc5544c279 100644 --- a/forge-gui/res/cardsfolder/c/corpse_traders.txt +++ b/forge-gui/res/cardsfolder/c/corpse_traders.txt @@ -2,6 +2,6 @@ Name:Corpse Traders ManaCost:3 B Types:Creature Human Rogue PT:3/3 -A:AB$ Discard | Cost$ 2 B Sac<1/Creature> | ValidTgts$ Player | Mode$ RevealYouChoose | NumCards$ 1 | SorcerySpeed$ True | SpellDescription$ Target player reveals their hand. You choose a card from it. That player discards that card. Activate only any time you could cast a sorcery. +A:AB$ Discard | Cost$ 2 B Sac<1/Creature> | ValidTgts$ Player | Mode$ RevealYouChoose | NumCards$ 1 | SorcerySpeed$ True | SpellDescription$ Target player reveals their hand. You choose a card from it. That player discards that card. Activate only as a sorcery. AI:RemoveDeck:All Oracle:{2}{B}, Sacrifice a creature: Target opponent reveals their hand. You choose a card from it. That player discards that card. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/d/daily_bugle_building.txt b/forge-gui/res/cardsfolder/d/daily_bugle_building.txt index b4991b7747a..fe1ae148c0e 100644 --- a/forge-gui/res/cardsfolder/d/daily_bugle_building.txt +++ b/forge-gui/res/cardsfolder/d/daily_bugle_building.txt @@ -3,6 +3,6 @@ ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. A:AB$ Mana | Cost$ 1 T | Produced$ Any | Amount$ 1 | SpellDescription$ Add one mana of any color. -A:AB$ Pump | PreCostDesc$ Smear Campaign — | Cost$ 1 T | ValidTgts$ Creature.Legendary | TgtPrompt$ Select target legendary creature | KW$ Menace | SorcerySpeed$ True | SpellDescription$ Target legendary creature gains menace until end of turn. Activate only as a sorcery. +A:AB$ Pump | PrecostDesc$ Smear Campaign — | Cost$ 1 T | ValidTgts$ Creature.Legendary | TgtPrompt$ Select target legendary creature | KW$ Menace | SorcerySpeed$ True | SpellDescription$ Target legendary creature gains menace until end of turn. Activate only as a sorcery. DeckHints:Type$Legendary Oracle:{T}: Add {C}.\n{1}, {T}: Add one mana of any color.\nSmear Campaign — {1}, {T}: Target legendary creature gains menace until end of turn. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/d/draining_whelk.txt b/forge-gui/res/cardsfolder/d/draining_whelk.txt index fbf48502e5f..07d32022cb7 100644 --- a/forge-gui/res/cardsfolder/d/draining_whelk.txt +++ b/forge-gui/res/cardsfolder/d/draining_whelk.txt @@ -5,8 +5,8 @@ PT:1/1 K:Flash K:Flying T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigCounter | TriggerDescription$ When CARDNAME enters, counter target spell. Put X +1/+1 counters on CARDNAME, where X is that spell's mana value. -SVar:TrigCounter:DB$ Counter | TargetType$ Spell | ValidTgts$ Card | TgtPrompt$ Select target spell | RememberCounteredCMC$ True | SubAbility$ DBPutcounter -SVar:DBPutcounter:DB$ PutCounter | CounterType$ P1P1 | Defined$ Self | CounterNum$ X | SubAbility$ DBCleanup +SVar:TrigCounter:DB$ Counter | TargetType$ Spell | ValidTgts$ Card | TgtPrompt$ Select target spell | RememberCounteredCMC$ True | SubAbility$ DBPutCounter +SVar:DBPutCounter:DB$ PutCounter | CounterType$ P1P1 | Defined$ Self | CounterNum$ X | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Count$RememberedNumber Oracle:Flash\nFlying\nWhen Draining Whelk enters, counter target spell. Put X +1/+1 counters on Draining Whelk, where X is that spell's mana value. diff --git a/forge-gui/res/cardsfolder/e/eliminate_the_impossible.txt b/forge-gui/res/cardsfolder/e/eliminate_the_impossible.txt index 56a84754772..5461b41ed77 100644 --- a/forge-gui/res/cardsfolder/e/eliminate_the_impossible.txt +++ b/forge-gui/res/cardsfolder/e/eliminate_the_impossible.txt @@ -2,7 +2,7 @@ Name:Eliminate the Impossible ManaCost:1 U Types:Instant A:SP$ Investigate | SubAbility$ DBDebuff | SpellDescription$ Investigate. Creatures your opponents control get -2/-0 until end of turn. If any of them are suspected, they're no longer suspected. (To investigate, create a Clue token. It's an artifact with "{2}, Sacrifice this artifact: Draw a card.") -SVar:DBDebuff:DB$ PumpAll | ValidCards$ Creature.OppCtrl | NumAtt$ -2 | SubAbility$ DBAlterAtribute -SVar:DBAlterAtribute:DB$ AlterAttribute | Defined$ Valid Creature.OppCtrl+IsSuspected | Attributes$ Suspected | Activate$ False +SVar:DBDebuff:DB$ PumpAll | ValidCards$ Creature.OppCtrl | NumAtt$ -2 | SubAbility$ DBAlterAttribute +SVar:DBAlterAttribute:DB$ AlterAttribute | Defined$ Valid Creature.OppCtrl+IsSuspected | Attributes$ Suspected | Activate$ False DeckHas:Ability$Token & Type$Artifact|Clue Oracle:Investigate. Creatures your opponents control get -2/-0 until end of turn. If any of them are suspected, they're no longer suspected. (To investigate, create a Clue token. It's an artifact with "{2}, Sacrifice this artifact: Draw a card.") diff --git a/forge-gui/res/cardsfolder/e/eye_for_an_eye.txt b/forge-gui/res/cardsfolder/e/eye_for_an_eye.txt index 906d10f13ea..c60cd0bbb48 100644 --- a/forge-gui/res/cardsfolder/e/eye_for_an_eye.txt +++ b/forge-gui/res/cardsfolder/e/eye_for_an_eye.txt @@ -4,8 +4,8 @@ Types:Instant A:SP$ ChooseSource | Choices$ Card,Emblem | AILogic$ NeedsPrevention | SubAbility$ DBEffect | SpellDescription$ The next time a source of your choice would deal damage to you this turn, instead that source deals that much damage to you and CARDNAME deals that much damage to that source's controller. SVar:DBEffect:DB$ Effect | ReplacementEffects$ SelflessDamage | ImprintCards$ Self | ConditionDefined$ ChosenCard | ConditionPresent$ Card,Emblem | ConditionCompare$ GE1 SVar:SelflessDamage:Event$ DamageDone | ValidTarget$ You | ValidSource$ Card.ChosenCardStrict,Emblem.ChosenCard | ReplaceWith$ SelflessDmg | Description$ The next time a source of your choice would deal damage to you this turn, instead that source deals that much damage to you and this card deals that much damage to that source's controller. -SVar:SelflessDmg:DB$ ReplaceEffect | VarName$ Affected | VarValue$ You | VarType$ Player | SubAbility$ EyeforEye -SVar:EyeforEye:DB$ DealDamage | Defined$ ReplacedSourceController | DamageSource$ EffectSource | NumDmg$ X | SubAbility$ ExileEffect +SVar:SelflessDmg:DB$ ReplaceEffect | VarName$ Affected | VarValue$ You | VarType$ Player | SubAbility$ EyeForEye +SVar:EyeForEye:DB$ DealDamage | Defined$ ReplacedSourceController | DamageSource$ EffectSource | NumDmg$ X | SubAbility$ ExileEffect SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile SVar:X:ReplaceCount$DamageAmount Oracle:The next time a source of your choice would deal damage to you this turn, instead that source deals that much damage to you and Eye for an Eye deals that much damage to that source's controller. diff --git a/forge-gui/res/cardsfolder/f/flaxen_intruder_welcome_home.txt b/forge-gui/res/cardsfolder/f/flaxen_intruder_welcome_home.txt index 24f2f60d9b1..0960e36a934 100644 --- a/forge-gui/res/cardsfolder/f/flaxen_intruder_welcome_home.txt +++ b/forge-gui/res/cardsfolder/f/flaxen_intruder_welcome_home.txt @@ -2,8 +2,8 @@ Name:Flaxen Intruder ManaCost:G Types:Creature Human Berserker PT:1/2 -T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ Trigtrig | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you may sacrifice it. When you do, destroy target artifact or enchantment. -SVar:Trigtrig:AB$ ImmediateTrigger | Cost$ Sac<1/CARDNAME> | Execute$ TrigDestroy | TriggerDescription$ When you do, destroy target artifact or enchantment. +T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigTrig | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you may sacrifice it. When you do, destroy target artifact or enchantment. +SVar:TrigTrig:AB$ ImmediateTrigger | Cost$ Sac<1/CARDNAME> | Execute$ TrigDestroy | TriggerDescription$ When you do, destroy target artifact or enchantment. SVar:TrigDestroy:DB$ Destroy | ValidTgts$ Artifact,Enchantment | TgtPrompt$ Select target artifact or enchantment AlternateMode:Adventure Oracle:Whenever Flaxen Intruder deals combat damage to a player, you may sacrifice it. When you do, destroy target artifact or enchantment. diff --git a/forge-gui/res/cardsfolder/f/frankensteins_monster.txt b/forge-gui/res/cardsfolder/f/frankensteins_monster.txt index dd2d294c307..2a666c18e96 100644 --- a/forge-gui/res/cardsfolder/f/frankensteins_monster.txt +++ b/forge-gui/res/cardsfolder/f/frankensteins_monster.txt @@ -4,8 +4,8 @@ Types:Creature Zombie PT:0/1 R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplaceWith$ ExileCreature | Description$ As CARDNAME enters, exile X creature cards from your graveyard. If you can't, put CARDNAME into its owner's graveyard instead of onto the battlefield. For each creature card exiled this way, CARDNAME enters with a +2/+0, +1/+1, or +0/+2 counter on it. SVar:ExileCreature:DB$ ChooseCard | ETB$ True | Choices$ Creature.YouOwn+NotDefinedReplacedSimultaneousETB | ChoiceZone$ Graveyard | Amount$ X | Mandatory$ True | ConditionCheckSVar$ CheckYard | ConditionSVarCompare$ GEX | SubAbility$ DBExile -SVar:DBExile:DB$ ChangeZone | Defined$ ChosenCard | Origin$ Graveyard | Destination$ Exile | RememberChanged$ True | SubAbility$ Movetoyard -SVar:Movetoyard:DB$ ChangeZone | Hidden$ True | Origin$ All | Destination$ Graveyard | Defined$ Self | ConditionCheckSVar$ CheckExiled | ConditionSVarCompare$ LTX | Imprint$ True | ETB$ True | SubAbility$ DBChooseCounter +SVar:DBExile:DB$ ChangeZone | Defined$ ChosenCard | Origin$ Graveyard | Destination$ Exile | RememberChanged$ True | SubAbility$ MoveToYard +SVar:MoveToYard:DB$ ChangeZone | Hidden$ True | Origin$ All | Destination$ Graveyard | Defined$ Self | ConditionCheckSVar$ CheckExiled | ConditionSVarCompare$ LTX | Imprint$ True | ETB$ True | SubAbility$ DBChooseCounter SVar:DBChooseCounter:DB$ PutCounter | CounterTypes$ P2P0,P1P1,P0P2 | CounterNum$ X | SplitAmount$ True | ETB$ True | ConditionDefined$ Imprinted | ConditionPresent$ Card | ConditionCompare$ EQ0 | SubAbility$ DBUpdate SVar:DBUpdate:DB$ ReplaceEffect | ConditionDefined$ Imprinted | ConditionPresent$ Card | ConditionCompare$ EQ0 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True diff --git a/forge-gui/res/cardsfolder/g/gryffs_boon.txt b/forge-gui/res/cardsfolder/g/gryffs_boon.txt index 0aadaff4fb1..323abdef6fb 100644 --- a/forge-gui/res/cardsfolder/g/gryffs_boon.txt +++ b/forge-gui/res/cardsfolder/g/gryffs_boon.txt @@ -4,6 +4,6 @@ Types:Enchantment Aura K:Enchant:Creature SVar:AttachAILogic:Pump S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 1 | AddKeyword$ Flying | Description$ Enchanted creature gets +1/+0 and has flying. -A:AB$ Pump | Cost$ 3 W | ActivationZone$ Graveyard | ValidTgts$ Creature | SorcerySpeed$ True | TgtPrompt$ Choose a creature | SubAbility$ DBChange | SpellDescription$ Return CARDNAME from your graveyard to the battlefield attached to target creature. Activate only any time you could cast a sorcery. | StackDescription$ SpellDescription -SVar:DBChange:DB$ ChangeZone | Defined$ Self | Origin$ Graveyard | Destination$ Battlefield | AttachedTo$ ParentTarget | SpellDescription$ | StackDescription$ SpellDescription +A:AB$ Pump | Cost$ 3 W | ActivationZone$ Graveyard | ValidTgts$ Creature | SorcerySpeed$ True | TgtPrompt$ Choose a creature | SubAbility$ DBChange | StackDescription$ REP Return_{p:You} returns & from your_from their & to target creature. Activate only as a sorcery._to {c:Targeted}. | SpellDescription$ Return CARDNAME from your graveyard to the battlefield attached to target creature. Activate only as a sorcery. +SVar:DBChange:DB$ ChangeZone | Defined$ Self | Origin$ Graveyard | Destination$ Battlefield | AttachedTo$ ParentTarget | StackDescription$ None Oracle:Enchant creature\nEnchanted creature gets +1/+0 and has flying.\n{3}{W}: Return Gryff's Boon from your graveyard to the battlefield attached to target creature. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/i/ignoble_soldier.txt b/forge-gui/res/cardsfolder/i/ignoble_soldier.txt index d38c4b07914..b8930c03711 100644 --- a/forge-gui/res/cardsfolder/i/ignoble_soldier.txt +++ b/forge-gui/res/cardsfolder/i/ignoble_soldier.txt @@ -2,8 +2,8 @@ Name:Ignoble Soldier ManaCost:2 W Types:Creature Human Soldier PT:3/1 -T:Mode$ AttackerBlocked | ValidCard$ Card.Self | Execute$ TrigNodamage | TriggerDescription$ Whenever CARDNAME becomes blocked, prevent all combat damage that would be dealt by it this turn. -SVar:TrigNodamage:DB$ Effect | ReplacementEffects$ RPrevent | RememberObjects$ TriggeredAttackerLKICopy | ExileOnMoved$ Battlefield +T:Mode$ AttackerBlocked | ValidCard$ Card.Self | Execute$ TrigNoDamage | TriggerDescription$ Whenever CARDNAME becomes blocked, prevent all combat damage that would be dealt by it this turn. +SVar:TrigNoDamage:DB$ Effect | ReplacementEffects$ RPrevent | RememberObjects$ TriggeredAttackerLKICopy | ExileOnMoved$ Battlefield SVar:RPrevent:Event$ DamageDone | Prevent$ True | IsCombat$ True | ValidSource$ Card.IsRemembered | Description$ Prevent all combat damage that would be dealt by it this turn. SVar:MustBeBlocked:True Oracle:Whenever Ignoble Soldier becomes blocked, prevent all combat damage that would be dealt by it this turn. diff --git a/forge-gui/res/cardsfolder/i/immersturm_skullcairn.txt b/forge-gui/res/cardsfolder/i/immersturm_skullcairn.txt index 80dfd030e84..6d2a6eb4ff7 100644 --- a/forge-gui/res/cardsfolder/i/immersturm_skullcairn.txt +++ b/forge-gui/res/cardsfolder/i/immersturm_skullcairn.txt @@ -4,7 +4,7 @@ Types:Land R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementResult$ Updated | ReplaceWith$ ETBTapped | Description$ CARDNAME enters tapped. SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True A:AB$ Mana | Cost$ T | Produced$ B | SpellDescription$ Add {B}. -A:AB$ DealDamage | Cost$ 1 B R R T Sac<1/CARDNAME> | ValidTgts$ Player | TgtPrompt$ Select target player | NumDmg$ 3 | SubAbility$ DBDiscard | SorcerySpeed$ True | SpellDescription$ It deals 3 damage to target player. That player discards a card. Activate only any time you could cast a sorcery. +A:AB$ DealDamage | Cost$ 1 B R R T Sac<1/CARDNAME> | ValidTgts$ Player | TgtPrompt$ Select target player | NumDmg$ 3 | SubAbility$ DBDiscard | SorcerySpeed$ True | SpellDescription$ It deals 3 damage to target player. That player discards a card. Activate only as a sorcery. SVar:DBDiscard:DB$ Discard | Defined$ TargetedPlayer | NumCards$ 1 | Mode$ TgtChoose DeckHas:Ability$Sacrifice Oracle:Immersturm Skullcairn enters tapped.\n{T}: Add {B}.\n{1}{B}{R}{R}, {T}, Sacrifice Immersturm Skullcairn: It deals 3 damage to target player. That player discards a card. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/i/izzet_steam_maze.txt b/forge-gui/res/cardsfolder/i/izzet_steam_maze.txt index 4ce5a51f885..4b2571dcd38 100644 --- a/forge-gui/res/cardsfolder/i/izzet_steam_maze.txt +++ b/forge-gui/res/cardsfolder/i/izzet_steam_maze.txt @@ -4,7 +4,7 @@ Types:Plane Ravnica T:Mode$ SpellCast | ValidCard$ Instant,Sorcery | ValidActivatingPlayer$ Player | Execute$ TrigCopy | TriggerZones$ Command | TriggerDescription$ Whenever a player casts an instant or sorcery spell, that player copies it. The player may choose new targets for the copy. SVar:TrigCopy:DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | Controller$ TriggeredActivator | MayChooseTarget$ True T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever chaos ensues, instant and sorcery spells you cast this turn cost {3} less to cast. -SVar:RolledChaos:DB$ Effect | StaticAbilities$ ReduceSPcost -SVar:ReduceSPcost:Mode$ ReduceCost | ValidCard$ Instant,Sorcery | Type$ Spell | Activator$ You | Amount$ 3 | Description$ Instant and sorcery spells you cast this turn cost {3} less to cast. +SVar:RolledChaos:DB$ Effect | StaticAbilities$ ReduceSPCost +SVar:ReduceSPCost:Mode$ ReduceCost | ValidCard$ Instant,Sorcery | Type$ Spell | Activator$ You | Amount$ 3 | Description$ Instant and sorcery spells you cast this turn cost {3} less to cast. SVar:AIRollPlanarDieParams:Mode$ Always | RollInMain1$ True Oracle:Whenever a player casts an instant or sorcery spell, that player copies it. The player may choose new targets for the copy.\nWhenever chaos ensues, instant and sorcery spells you cast this turn cost {3} less to cast. diff --git a/forge-gui/res/cardsfolder/l/luminescent_rain.txt b/forge-gui/res/cardsfolder/l/luminescent_rain.txt index 8839c36b53d..f3180e33614 100644 --- a/forge-gui/res/cardsfolder/l/luminescent_rain.txt +++ b/forge-gui/res/cardsfolder/l/luminescent_rain.txt @@ -1,8 +1,8 @@ Name:Luminescent Rain ManaCost:2 G Types:Instant -A:SP$ ChooseType | Defined$ You | Type$ Creature | AILogic$ MostProminentComputerControls | SubAbility$ DBGainlife | SpellDescription$ Choose a creature type. You gain 2 life for each permanent you control of that type. -SVar:DBGainlife:DB$ Gainlife | LifeAmount$ X | StackDescription$ You gain 2 life for each permanent you control of that type. +A:SP$ ChooseType | Defined$ You | Type$ Creature | AILogic$ MostProminentComputerControls | SubAbility$ DBGainLife | SpellDescription$ Choose a creature type. You gain 2 life for each permanent you control of that type. +SVar:DBGainLife:DB$ GainLife | LifeAmount$ X | StackDescription$ You gain 2 life for each permanent you control of that type. SVar:X:Count$Valid Permanent.ChosenType+YouCtrl/Times.2 SVar:NeedsToPlay:Creature Oracle:Choose a creature type. You gain 2 life for each permanent you control of that type. diff --git a/forge-gui/res/cardsfolder/m/march_toward_perfection.txt b/forge-gui/res/cardsfolder/m/march_toward_perfection.txt index 8aedc9d06fd..870985aa2b7 100644 --- a/forge-gui/res/cardsfolder/m/march_toward_perfection.txt +++ b/forge-gui/res/cardsfolder/m/march_toward_perfection.txt @@ -7,6 +7,6 @@ SVar:ReplEffAddCounter:DB$ Effect | ReplacementEffects$ ETBAddCounter | Remember SVar:ETBAddCounter:Event$ Moved | Origin$ Stack | Destination$ Battlefield | ValidCard$ Card.IsRemembered | ReplaceWith$ ETBAddExtraCounter | ReplacementResult$ Updated SVar:ETBAddExtraCounter:DB$ PutCounter | ETB$ True | Defined$ ReplacedCard | CounterTypes$ P1P1,Deathtouch | CounterNum$ 1 SVar:DBDraft:DB$ Draft | Spellbook$ Entomber Exarch,Phyrexian Fleshgorger,Phyrexian Gargantua,Phyrexian Obliterator,Phyrexian Rager,Phyrexian Revoker,Toxic Abomination,Vault Skirge,Scrapwork Rager,Bilious Skulldweller,Archfiend of the Dross,Myr Convert,Zenith Chronicler,Soulless Jailer,Diminished Returner | SpellDescription$ Draft a card from CARDNAME's spellbook. -DeckHas:Ability$Counters|Lifegain|Graveyard & Type$Phyrexian|Horror|Imp|Zombie|Insect|Demon|Insect +DeckHas:Ability$Counters|LifeGain|Graveyard & Type$Phyrexian|Horror|Imp|Zombie|Insect|Demon|Insect DeckNeeds:Type$Phyrexian Oracle:You get a boon with "When you cast your next Phyrexian creature spell, that creature enters with an additional +1/+1 counter and deathtouch counter on it."\nDraft a card from March Toward Perfection's spellbook. diff --git a/forge-gui/res/cardsfolder/m/mindwhip_sliver.txt b/forge-gui/res/cardsfolder/m/mindwhip_sliver.txt index 12a690a3adb..753f09f017d 100644 --- a/forge-gui/res/cardsfolder/m/mindwhip_sliver.txt +++ b/forge-gui/res/cardsfolder/m/mindwhip_sliver.txt @@ -3,5 +3,5 @@ ManaCost:2 B Types:Creature Sliver PT:2/2 S:Mode$ Continuous | Affected$ Sliver | AddAbility$ Discard | Description$ All Slivers have "{2}, Sacrifice this permanent: Target player discards a card at random. Activate only as a sorcery." -SVar:Discard:AB$ Discard | Cost$ 2 Sac<1/CARDNAME> | ValidTgts$ Player | TgtPrompt$ Select target player | NumCards$ 1 | Mode$ Random | SpellDescription$ Target player discards a card at random. Activate only any time you could cast a sorcery. +SVar:Discard:AB$ Discard | Cost$ 2 Sac<1/CARDNAME> | ValidTgts$ Player | TgtPrompt$ Select target player | NumCards$ 1 | Mode$ Random | SpellDescription$ Target player discards a card at random. Activate only as a sorcery. Oracle:All Slivers have "{2}, Sacrifice this permanent: Target player discards a card at random. Activate only as a sorcery." diff --git a/forge-gui/res/cardsfolder/m/molten_collapse.txt b/forge-gui/res/cardsfolder/m/molten_collapse.txt index 3a94f2fd44b..ab49c22cd30 100644 --- a/forge-gui/res/cardsfolder/m/molten_collapse.txt +++ b/forge-gui/res/cardsfolder/m/molten_collapse.txt @@ -1,9 +1,9 @@ Name:Molten Collapse ManaCost:B R Types:Sorcery -A:SP$ Charm | MinCharmNum$ 1 | CharmNum$ Count$Compare Y GE1.2.1 | Choices$ DBDestroy,DBDsestroynoncreatue | AdditionalDescription$ . If you descended this turn, you may choose both instead. (You descended if a permanent card was put into your graveyard from anywhere.) +A:SP$ Charm | MinCharmNum$ 1 | CharmNum$ Count$Compare Y GE1.2.1 | Choices$ DBDestroy,DBDestroyNonCreature | AdditionalDescription$ . If you descended this turn, you may choose both instead. (You descended if a permanent card was put into your graveyard from anywhere.) SVar:DBDestroy:DB$ Destroy | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | SpellDescription$ Destroy target creature or planeswalker. -SVar:DBDsestroynoncreatue:DB$ Destroy | ValidTgts$ Permanent.nonCreature+nonLand+cmcLE1 | TgtPrompt$ Select target noncreature, nonland permanent with mana value 1 or less | SpellDescription$ Destroy target noncreature, nonland permanent with mana value 1 or less. +SVar:DBDestroyNonCreature:DB$ Destroy | ValidTgts$ Permanent.nonCreature+nonLand+cmcLE1 | TgtPrompt$ Select target noncreature, nonland permanent with mana value 1 or less | SpellDescription$ Destroy target noncreature, nonland permanent with mana value 1 or less. SVar:Y:Count$YouDescendedThisTurn DeckHints:Ability$Mill|Graveyard|Dredge|Sacrifice Oracle:Choose one. If you descended this turn, you may choose both instead. (You descended if a permanent card was put into your graveyard from anywhere.)\n• Destroy target creature or planeswalker.\n• Destroy target noncreature, nonland permanent with mana value 1 or less. diff --git a/forge-gui/res/cardsfolder/o/ob_nixilis_of_the_black_oath.txt b/forge-gui/res/cardsfolder/o/ob_nixilis_of_the_black_oath.txt index 0bb6222a19c..28265705d08 100644 --- a/forge-gui/res/cardsfolder/o/ob_nixilis_of_the_black_oath.txt +++ b/forge-gui/res/cardsfolder/o/ob_nixilis_of_the_black_oath.txt @@ -6,8 +6,8 @@ Text:CARDNAME can be your commander. A:AB$ LoseLife | Cost$ AddCounter<2/LOYALTY> | Planeswalker$ True | Defined$ Player.Opponent | LifeAmount$ 1 | SubAbility$ DBGainLife | SpellDescription$ Each opponent loses 1 life. You gain life equal to the life lost this way. | StackDescription$ SpellDescription SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ AFLifeLost | StackDescription$ None SVar:AFLifeLost:Number$0 -A:AB$ Token | Cost$ SubCounter<2/LOYALTY> | Planeswalker$ True | TokenAmount$ 1 | TokenScript$ b_5_5_demon_flying | TokenOwner$ You | SubAbility$ DBLoselife | SpellDescription$ Create a 5/5 black Demon creature token with flying. You lose 2 life. -SVar:DBLoselife:DB$ LoseLife | LifeAmount$ 2 +A:AB$ Token | Cost$ SubCounter<2/LOYALTY> | Planeswalker$ True | TokenAmount$ 1 | TokenScript$ b_5_5_demon_flying | TokenOwner$ You | SubAbility$ DBLoseLife | SpellDescription$ Create a 5/5 black Demon creature token with flying. You lose 2 life. +SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ 2 A:AB$ Effect | Cost$ SubCounter<8/LOYALTY> | Planeswalker$ True | Ultimate$ True | Name$ Emblem — Ob Nixilis of the Black Oath | Image$ emblem_ob_nixilis_of_the_black_oath | Stackable$ False | Abilities$ ObGainLife | Duration$ Permanent | SpellDescription$ You get an emblem with "{1}{B}, Sacrifice a creature: You gain X life and draw X cards, where X is the sacrificed creature's power." SVar:ObGainLife:AB$ GainLife | Cost$ 1 B Sac<1/Creature> | ActivationZone$ Command | LifeAmount$ X | SubAbility$ DBDraw | SpellDescription$ You gain X life and draw X cards, where X is the sacrificed creature's power. SVar:DBDraw:DB$ Draw | NumCards$ X diff --git a/forge-gui/res/cardsfolder/p/perish_the_thought.txt b/forge-gui/res/cardsfolder/p/perish_the_thought.txt index 06b70ed0a78..8bc23bd9df2 100644 --- a/forge-gui/res/cardsfolder/p/perish_the_thought.txt +++ b/forge-gui/res/cardsfolder/p/perish_the_thought.txt @@ -1,6 +1,6 @@ Name:Perish the Thought ManaCost:2 B Types:Sorcery -A:SP$ RevealHand | Defined$ Targeted | ValidTgts$ Opponent | SubAbility$ ShuffleCardtoLib | StackDescription$ SpellDescription | SpellDescription$ Target opponent reveals their hand. -SVar:ShuffleCardtoLib:DB$ ChangeZone | Origin$ Hand | Destination$ Library | DefinedPlayer$ Targeted | Chooser$ You | ChangeType$ Card | ChangeNum$ 1 | IsCurse$ True | Shuffle$ True | Mandatory$ True | AlreadyRevealed$ True | StackDescription$ SpellDescription | SpellDescription$ You choose a card from it. That player shuffles that card into their library. +A:SP$ RevealHand | Defined$ Targeted | ValidTgts$ Opponent | SubAbility$ ShuffleCardToLib | StackDescription$ SpellDescription | SpellDescription$ Target opponent reveals their hand. +SVar:ShuffleCardToLib:DB$ ChangeZone | Origin$ Hand | Destination$ Library | DefinedPlayer$ Targeted | Chooser$ You | ChangeType$ Card | ChangeNum$ 1 | IsCurse$ True | Shuffle$ True | Mandatory$ True | AlreadyRevealed$ True | StackDescription$ SpellDescription | SpellDescription$ You choose a card from it. That player shuffles that card into their library. Oracle:Target opponent reveals their hand. You choose a card from it. That player shuffles that card into their library. diff --git a/forge-gui/res/cardsfolder/p/pilfering_imp.txt b/forge-gui/res/cardsfolder/p/pilfering_imp.txt index 68057c35d4c..316556ee8a5 100644 --- a/forge-gui/res/cardsfolder/p/pilfering_imp.txt +++ b/forge-gui/res/cardsfolder/p/pilfering_imp.txt @@ -3,5 +3,5 @@ ManaCost:B Types:Creature Imp PT:1/1 K:Flying -A:AB$ Discard | Cost$ 1 B T Sac<1/CARDNAME> | ValidTgts$ Player | Mode$ RevealYouChoose | DiscardValid$ Card.nonLand | NumCards$ 1 | SorcerySpeed$ True | SpellDescription$ Target player reveals their hand. You choose a nonland card from it. That player discards that card. Activate only any time you could cast a sorcery. +A:AB$ Discard | Cost$ 1 B T Sac<1/CARDNAME> | ValidTgts$ Player | Mode$ RevealYouChoose | DiscardValid$ Card.nonLand | NumCards$ 1 | SorcerySpeed$ True | SpellDescription$ Target player reveals their hand. You choose a nonland card from it. That player discards that card. Activate only as a sorcery. Oracle:Flying\n{1}{B}, {T}, Sacrifice Pilfering Imp: Target opponent reveals their hand. You choose a nonland card from it. That player discards that card. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/r/rakshasa_vizier.txt b/forge-gui/res/cardsfolder/r/rakshasa_vizier.txt index be1ac83fccb..a61dbc88dfc 100644 --- a/forge-gui/res/cardsfolder/r/rakshasa_vizier.txt +++ b/forge-gui/res/cardsfolder/r/rakshasa_vizier.txt @@ -2,7 +2,7 @@ Name:Rakshasa Vizier ManaCost:2 B G U Types:Creature Demon PT:4/4 -T:Mode$ ChangesZoneAll | ValidCards$ Card.YouOwn | Origin$ Graveyard | Destination$ Exile | TriggerZones$ Battlefield | Execute$ TrigPutcounter | TriggerDescription$ Whenever one or more cards are put into exile from your graveyard, put that many +1/+1 counters on CARDNAME. -SVar:TrigPutcounter:DB$ PutCounter | CounterType$ P1P1 | Defined$ Self | CounterNum$ X +T:Mode$ ChangesZoneAll | ValidCards$ Card.YouOwn | Origin$ Graveyard | Destination$ Exile | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever one or more cards are put into exile from your graveyard, put that many +1/+1 counters on CARDNAME. +SVar:TrigPutCounter:DB$ PutCounter | CounterType$ P1P1 | Defined$ Self | CounterNum$ X SVar:X:TriggerCount$Amount Oracle:Whenever one or more cards are put into exile from your graveyard, put that many +1/+1 counters on Rakshasa Vizier. diff --git a/forge-gui/res/cardsfolder/rebalanced/a-zar_ojanen_scion_of_efrava.txt b/forge-gui/res/cardsfolder/rebalanced/a-zar_ojanen_scion_of_efrava.txt index fe607d000bb..b3d0ceaa8b6 100644 --- a/forge-gui/res/cardsfolder/rebalanced/a-zar_ojanen_scion_of_efrava.txt +++ b/forge-gui/res/cardsfolder/rebalanced/a-zar_ojanen_scion_of_efrava.txt @@ -2,9 +2,9 @@ Name:A-Zar Ojanen, Scion of Efrava ManaCost:3 G W Types:Legendary Creature Cat Warrior PT:4/4 -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPutcounter | TriggerDescription$ Domain — Whenever CARDNAME enters or becomes tapped, put a +1/+1 counter on each creature you control with toughness less than the number of basic land types among lands you control. -T:Mode$ Taps | ValidCard$ Card.Self | Execute$ TrigPutcounter | TriggerZones$ Battlefield | TriggerDescription$ Domain — Whenever CARDNAME enters or becomes tapped, put a +1/+1 counter on each creature you control with toughness less than the number of basic land types among lands you control. -SVar:TrigPutcounter:DB$ PutCounterAll | ValidCards$ Creature.YouCtrl+toughnessLTX | CounterType$ P1P1 | CounterNum$ 1 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPutCounter | TriggerDescription$ Domain — Whenever CARDNAME enters or becomes tapped, put a +1/+1 counter on each creature you control with toughness less than the number of basic land types among lands you control. +T:Mode$ Taps | ValidCard$ Card.Self | Execute$ TrigPutCounter | TriggerZones$ Battlefield | TriggerDescription$ Domain — Whenever CARDNAME enters or becomes tapped, put a +1/+1 counter on each creature you control with toughness less than the number of basic land types among lands you control. +SVar:TrigPutCounter:DB$ PutCounterAll | ValidCards$ Creature.YouCtrl+toughnessLTX | CounterType$ P1P1 | CounterNum$ 1 SVar:X:Count$Domain DeckHas:Ability$Counters Oracle:Domain — Whenever Zar Ojanen, Scion of Efrava enters or becomes tapped, put a +1/+1 counter on each creature you control with toughness less than the number of basic land types among lands you control. diff --git a/forge-gui/res/cardsfolder/s/shimatsu_the_bloodcloaked.txt b/forge-gui/res/cardsfolder/s/shimatsu_the_bloodcloaked.txt index db6d38ae3f8..5cbbdc4910e 100644 --- a/forge-gui/res/cardsfolder/s/shimatsu_the_bloodcloaked.txt +++ b/forge-gui/res/cardsfolder/s/shimatsu_the_bloodcloaked.txt @@ -3,8 +3,8 @@ ManaCost:3 R Types:Legendary Creature Demon Spirit PT:0/0 R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplaceWith$ TrigSac | ReplacementResult$ Updated | Description$ As CARDNAME enters, sacrifice any number of permanents. NICKNAME enters with that many +1/+1 counters on it. -SVar:TrigSac:DB$ Sacrifice | Amount$ SacX | SacValid$ Permanent | Defined$ You | RememberSacrificed$ True | Optional$ True | SubAbility$ DBPutcounter -SVar:DBPutcounter:DB$ PutCounter | ETB$ True | CounterType$ P1P1 | Defined$ Self | CounterNum$ X | SubAbility$ DBCleanup +SVar:TrigSac:DB$ Sacrifice | Amount$ SacX | SacValid$ Permanent | Defined$ You | RememberSacrificed$ True | Optional$ True | SubAbility$ DBPutCounter +SVar:DBPutCounter:DB$ PutCounter | ETB$ True | CounterType$ P1P1 | Defined$ Self | CounterNum$ X | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:SacX:Count$Valid Permanent.YouCtrl SVar:X:Remembered$Amount diff --git a/forge-gui/res/cardsfolder/s/skygames.txt b/forge-gui/res/cardsfolder/s/skygames.txt index 790a323d3f2..af7b5503f94 100644 --- a/forge-gui/res/cardsfolder/s/skygames.txt +++ b/forge-gui/res/cardsfolder/s/skygames.txt @@ -4,6 +4,6 @@ Types:Enchantment Aura K:Enchant:Land SVar:AttachAILogic:Pump S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddAbility$ DPTapCreature | Description$ Enchanted land has "{T}: Target creature gains flying until end of turn. Activate only as a sorcery." -SVar:DPTapCreature:AB$ Pump | Cost$ T | ValidTgts$ Creature | TgtPrompt$ Choose target creature. | KW$ Flying | SorcerySpeed$ True | SpellDescription$ Target creature gains flying until end of turn. Activate only any time you could cast a sorcery. +SVar:DPTapCreature:AB$ Pump | Cost$ T | ValidTgts$ Creature | TgtPrompt$ Choose target creature. | KW$ Flying | SorcerySpeed$ True | SpellDescription$ Target creature gains flying until end of turn. Activate only as a sorcery. SVar:NonStackingAttachEffect:True Oracle:Enchant land\nEnchanted land has "{T}: Target creature gains flying until end of turn. Activate only as a sorcery." diff --git a/forge-gui/res/cardsfolder/s/smoldering_tar.txt b/forge-gui/res/cardsfolder/s/smoldering_tar.txt index 9c9d6d4328a..cbf2486ad3f 100644 --- a/forge-gui/res/cardsfolder/s/smoldering_tar.txt +++ b/forge-gui/res/cardsfolder/s/smoldering_tar.txt @@ -3,6 +3,6 @@ ManaCost:2 B R Types:Enchantment T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigLoseLife | TriggerDescription$ At the beginning of your upkeep, target player loses 1 life. SVar:TrigLoseLife:DB$ LoseLife | ValidTgts$ Player | TgtPrompt$ Select a player | LifeAmount$ 1 -A:AB$ DealDamage | Cost$ Sac<1/CARDNAME> | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 4 | SorcerySpeed$ True | SpellDescription$ It deals 4 damage to target creature. Activate only any time you could cast a sorcery. +A:AB$ DealDamage | Cost$ Sac<1/CARDNAME> | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 4 | SorcerySpeed$ True | SpellDescription$ It deals 4 damage to target creature. Activate only as a sorcery. DeckHas:Ability$Sacrifice Oracle:At the beginning of your upkeep, target player loses 1 life.\nSacrifice Smoldering Tar: It deals 4 damage to target creature. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/s/squees_revenge.txt b/forge-gui/res/cardsfolder/s/squees_revenge.txt index 35f3bf4d2b1..80260f2a412 100644 --- a/forge-gui/res/cardsfolder/s/squees_revenge.txt +++ b/forge-gui/res/cardsfolder/s/squees_revenge.txt @@ -6,8 +6,8 @@ A:SP$ ChooseNumber | SubAbility$ RepeatFlip | SpellDescription$ Choose a number. SVar:RepeatFlip:DB$ Repeat | RepeatSubAbility$ FlipAgain | ConditionCheckSVar$ TimesToFlip | ConditionSVarCompare$ GT0 | RepeatCheckSVar$ FlipsDone | RepeatSVarCompare$ LTTimesToFlip | SubAbility$ DrawIfWin SVar:FlipAgain:DB$ FlipACoin | WinSubAbility$ IncrementFlips | LoseSubAbility$ IncrementLoss SVar:IncrementFlips:DB$ StoreSVar | SVar$ FlipsDone | Type$ CountSVar | Expression$ FlipsDone/Plus.1 -SVar:IncrementLoss:DB$ StoreSVar | SVar$ Loss | Type$ CountSVar | Expression$ Loss/Plus.1 | SubAbility$ SetFilpsDone -SVar:SetFilpsDone:DB$ StoreSVar | SVar$ FlipsDone | Type$ CountSVar | Expression$ TimesToFlip +SVar:IncrementLoss:DB$ StoreSVar | SVar$ Loss | Type$ CountSVar | Expression$ Loss/Plus.1 | SubAbility$ SetFlipsDone +SVar:SetFlipsDone:DB$ StoreSVar | SVar$ FlipsDone | Type$ CountSVar | Expression$ TimesToFlip # Draw cards SVar:DrawIfWin:DB$ Draw | Defined$ You | NumCards$ CardsToDraw | ConditionCheckSVar$ Loss | ConditionSVarCompare$ EQ0 SVar:TimesToFlip:Count$ChosenNumber diff --git a/forge-gui/res/cardsfolder/s/stalking_yeti.txt b/forge-gui/res/cardsfolder/s/stalking_yeti.txt index 54abd085f97..2dd00d061b5 100644 --- a/forge-gui/res/cardsfolder/s/stalking_yeti.txt +++ b/forge-gui/res/cardsfolder/s/stalking_yeti.txt @@ -5,7 +5,7 @@ PT:3/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | IsPresent$ Card.StrictlySelf | Execute$ TrigDamage | TriggerDescription$ When CARDNAME enters, if it's on the battlefield, it deals damage equal to its power to target creature an opponent controls and that creature deals damage equal to its power to CARDNAME. SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select target creature an opponent controls | NumDmg$ X | SubAbility$ DBDamage SVar:DBDamage:DB$ DealDamage | Defined$ Self | DamageSource$ Targeted | NumDmg$ Y -A:AB$ ChangeZone | Cost$ 2 S | Origin$ Battlefield | Destination$ Hand | SorcerySpeed$ True | SpellDescription$ Return CARDNAME to its owner's hand. Activate only any time you could cast a sorcery. +A:AB$ ChangeZone | Cost$ 2 S | Origin$ Battlefield | Destination$ Hand | SorcerySpeed$ True | SpellDescription$ Return CARDNAME to its owner's hand. Activate only as a sorcery. SVar:X:Count$CardPower SVar:Y:Targeted$CardPower AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/s/startled_awake_persistent_nightmare.txt b/forge-gui/res/cardsfolder/s/startled_awake_persistent_nightmare.txt index ac37d1ff808..4d6babaffd6 100644 --- a/forge-gui/res/cardsfolder/s/startled_awake_persistent_nightmare.txt +++ b/forge-gui/res/cardsfolder/s/startled_awake_persistent_nightmare.txt @@ -2,7 +2,7 @@ Name:Startled Awake ManaCost:2 U U Types:Sorcery A:SP$ Mill | NumCards$ 13 | ValidTgts$ Opponent | TgtPrompt$ Choose an opponent | SpellDescription$ Target opponent mills thirteen cards. -A:AB$ ChangeZone | Cost$ 3 U U | Origin$ Graveyard | Destination$ Battlefield | Transformed$ True | ActivationZone$ Graveyard | SorcerySpeed$ True | SpellDescription$ Return CARDNAME from your graveyard onto the battlefield transformed. Activate only any time you could cast a sorcery. +A:AB$ ChangeZone | Cost$ 3 U U | Origin$ Graveyard | Destination$ Battlefield | Transformed$ True | ActivationZone$ Graveyard | SorcerySpeed$ True | SpellDescription$ Return CARDNAME from your graveyard onto the battlefield transformed. Activate only as a sorcery. AlternateMode:DoubleFaced Oracle:Target opponent mills thirteen cards.\n{3}{U}{U}: Put Startled Awake from your graveyard onto the battlefield transformed. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/s/stonebinders_familiar.txt b/forge-gui/res/cardsfolder/s/stonebinders_familiar.txt index db5c746e8f2..e7da54007f4 100644 --- a/forge-gui/res/cardsfolder/s/stonebinders_familiar.txt +++ b/forge-gui/res/cardsfolder/s/stonebinders_familiar.txt @@ -2,7 +2,7 @@ Name:Stonebinder's Familiar ManaCost:W Types:Creature Spirit Dog PT:1/1 -T:Mode$ ChangesZoneAll | ValidCards$ Card.!token+!copiedSpell | Destination$ Exile | TriggerZones$ Battlefield | Execute$ TrigPutcounter | PlayerTurn$ True | ActivationLimit$ 1 | TriggerDescription$ Whenever one or more cards are put into exile during your turn, put a +1/+1 counter on CARDNAME. This ability triggers only once each turn. -SVar:TrigPutcounter:DB$ PutCounter | CounterType$ P1P1 | Defined$ Self | CounterNum$ 1 +T:Mode$ ChangesZoneAll | ValidCards$ Card.!token+!copiedSpell | Destination$ Exile | TriggerZones$ Battlefield | Execute$ TrigPutCounter | PlayerTurn$ True | ActivationLimit$ 1 | TriggerDescription$ Whenever one or more cards are put into exile during your turn, put a +1/+1 counter on CARDNAME. This ability triggers only once each turn. +SVar:TrigPutCounter:DB$ PutCounter | CounterType$ P1P1 | Defined$ Self | CounterNum$ 1 DeckHas:Ability$Counters Oracle:Whenever one or more cards are put into exile during your turn, put a +1/+1 counter on Stonebinder's Familiar. This ability triggers only once each turn. diff --git a/forge-gui/res/cardsfolder/s/surtland_frostpyre.txt b/forge-gui/res/cardsfolder/s/surtland_frostpyre.txt index cee470a24f3..16560ea7eb7 100644 --- a/forge-gui/res/cardsfolder/s/surtland_frostpyre.txt +++ b/forge-gui/res/cardsfolder/s/surtland_frostpyre.txt @@ -4,6 +4,6 @@ Types:Land R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementResult$ Updated | ReplaceWith$ ETBTapped | Description$ CARDNAME enters tapped. SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True A:AB$ Mana | Cost$ T | Produced$ R | SpellDescription$ Add {R}. -A:AB$ Scry | Cost$ 2 U U R T Sac<1/CARDNAME> | ScryNum$ 2 | SubAbility$ DBDamageAll | SorcerySpeed$ True | SpellDescription$ Scry 2. CARDNAME deals 2 damage to each creature. Activate only any time you could cast a sorcery. +A:AB$ Scry | Cost$ 2 U U R T Sac<1/CARDNAME> | ScryNum$ 2 | SubAbility$ DBDamageAll | SorcerySpeed$ True | SpellDescription$ Scry 2. CARDNAME deals 2 damage to each creature. Activate only as a sorcery. SVar:DBDamageAll:DB$ DamageAll | ValidCards$ Creature | NumDmg$ 2 Oracle:Surtland Frostpyre enters tapped.\n{T}: Add {R}.\n{2}{U}{U}{R}, {T}, Sacrifice Surtland Frostpyre: Scry 2. Surtland Frostpyre deals 2 damage to each creature. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/t/tahngarths_glare.txt b/forge-gui/res/cardsfolder/t/tahngarths_glare.txt index 3cd5f6a913f..597acb9369c 100644 --- a/forge-gui/res/cardsfolder/t/tahngarths_glare.txt +++ b/forge-gui/res/cardsfolder/t/tahngarths_glare.txt @@ -1,6 +1,6 @@ Name:Tahngarth's Glare ManaCost:R Types:Sorcery -A:SP$ RearrangeTopOfLibrary | ValidTgts$ Opponent | NumCards$ 3 | SubAbility$ DBRearange | SpellDescription$ Look at the top three cards of target opponent's library, then put them back in any order. That player looks at the top three cards of your library, then puts them back in any order. -SVar:DBRearange:DB$ RearrangeTopOfLibrary | Defined$ You | RearrangePlayer$ Targeted | NumCards$ 3 +A:SP$ RearrangeTopOfLibrary | ValidTgts$ Opponent | NumCards$ 3 | SubAbility$ DBRearrange | SpellDescription$ Look at the top three cards of target opponent's library, then put them back in any order. That player looks at the top three cards of your library, then puts them back in any order. +SVar:DBRearrange:DB$ RearrangeTopOfLibrary | Defined$ You | RearrangePlayer$ Targeted | NumCards$ 3 Oracle:Look at the top three cards of target opponent's library, then put them back in any order. That player looks at the top three cards of your library, then puts them back in any order. diff --git a/forge-gui/res/cardsfolder/t/the_soul_stone.txt b/forge-gui/res/cardsfolder/t/the_soul_stone.txt index 2cae4876a67..10c9e9a55ef 100644 --- a/forge-gui/res/cardsfolder/t/the_soul_stone.txt +++ b/forge-gui/res/cardsfolder/t/the_soul_stone.txt @@ -5,7 +5,7 @@ K:Indestructible A:AB$ Mana | Cost$ T | Produced$ B | SpellDescription$ Add {B}. A:AB$ AlterAttribute | Cost$ 6 B Exile<1/Creature> | Defined$ Self | Attributes$ Harnessed | StackDescription$ SpellDescription | SpellDescription$ Harness CARDNAME. (Once harnessed, its ∞ ability is active.) T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | IsPresent$ Card.Self+harnessed | TriggerZones$ Battlefield | Execute$ TrigReturn | TriggerDescription$ ∞ — At the beginning of your upkeep, return target creature card from your graveyard to the battlefield. -SVar:TrigReturn:DB$ Changezone | ValidTgts$ Creature.YouOwn | Origin$ Graveyard | Destination$ Battlefield +SVar:TrigReturn:DB$ ChangeZone | ValidTgts$ Creature.YouOwn | Origin$ Graveyard | Destination$ Battlefield SVar:PlayMain1:TRUE DeckHints:Ability$Graveyard Oracle:Indestructible\n{T}: Add {B}.\n{6}{B}, {T}, Exile a creature you control: Harness The Soul Stone. (Once harnessed, its ∞ ability is active.)\n∞ — At the beginning of your upkeep, return target creature card from your graveyard to the battlefield. diff --git a/forge-gui/res/cardsfolder/t/titania_voice_of_gaea_titania_gaea_incarnate.txt b/forge-gui/res/cardsfolder/t/titania_voice_of_gaea_titania_gaea_incarnate.txt index ee9a9c52e0e..bf8991d88c2 100644 --- a/forge-gui/res/cardsfolder/t/titania_voice_of_gaea_titania_gaea_incarnate.txt +++ b/forge-gui/res/cardsfolder/t/titania_voice_of_gaea_titania_gaea_incarnate.txt @@ -3,8 +3,8 @@ ManaCost:1 G G Types:Legendary Creature Elemental PT:3/4 K:Reach -T:Mode$ ChangesZoneAll | ValidCards$ Land.YouOwn+!token | Origin$ Any | Destination$ Graveyard | TriggerZones$ Battlefield | Execute$ TrigLifegain | TriggerDescription$ Whenever one or more land cards are put into your graveyard from anywhere, you gain 2 life. -SVar:TrigLifegain:DB$ GainLife | LifeAmount$ 2 +T:Mode$ ChangesZoneAll | ValidCards$ Land.YouOwn+!token | Origin$ Any | Destination$ Graveyard | TriggerZones$ Battlefield | Execute$ TrigGainLife | TriggerDescription$ Whenever one or more land cards are put into your graveyard from anywhere, you gain 2 life. +SVar:TrigGainLife:DB$ GainLife | LifeAmount$ 2 T:Mode$ Phase | Phase$ Upkeep | CheckSVar$ X | SVarCompare$ GE4 | IsPresent$ Card.Self+YouCtrl+YouOwn | IsPresent2$ Land.YouCtrl+YouOwn+namedArgoth; Sanctum of Nature | ValidPlayer$ You | Execute$ Meld | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of your upkeep, if there are four or more land cards in your graveyard and you both own and control CARDNAME and a land named Argoth, Sanctum of Nature, exile them, then meld them into Titania, Gaea Incarnate. SVar:Meld:DB$ Meld | Name$ Titania, Gaea Incarnate | Primary$ Titania, Voice of Gaea | Secondary$ Argoth, Sanctum of Nature | SecondaryType$ Land SVar:X:Count$ValidGraveyard Land.YouOwn diff --git a/forge-gui/res/cardsfolder/t/transmogrifying_wand.txt b/forge-gui/res/cardsfolder/t/transmogrifying_wand.txt index 680277fe296..4dfa65e6cbb 100644 --- a/forge-gui/res/cardsfolder/t/transmogrifying_wand.txt +++ b/forge-gui/res/cardsfolder/t/transmogrifying_wand.txt @@ -3,5 +3,5 @@ ManaCost:3 Types:Artifact K:etbCounter:CHARGE:3 A:AB$ Destroy | Cost$ 1 T SubCounter<1/CHARGE> | ValidTgts$ Creature | AITgts$ BetterThanEvalRating.130 | TgtPrompt$ Select target creature | SorcerySpeed$ True | SubAbility$ OxToken | SpellDescription$ Destroy target creature. -SVar:OxToken:DB$ Token | TokenAmount$ 1 | TokenScript$ w_2_4_ox | TokenOwner$ TargetedController | SpellDescription$ Its controller creates a 2/4 white Ox creature token. Activate only any time you could cast a sorcery. +SVar:OxToken:DB$ Token | TokenAmount$ 1 | TokenScript$ w_2_4_ox | TokenOwner$ TargetedController | SpellDescription$ Its controller creates a 2/4 white Ox creature token. Activate only as a sorcery. Oracle:Transmogrifying Wand enters with three charge counters on it.\n{1}, {T}, Remove a charge counter from Transmogrifying Wand: Destroy target creature. Its controller creates a 2/4 white Ox creature token. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/t/trap_essence.txt b/forge-gui/res/cardsfolder/t/trap_essence.txt index 26ae2c1706e..d763d7b5bb5 100644 --- a/forge-gui/res/cardsfolder/t/trap_essence.txt +++ b/forge-gui/res/cardsfolder/t/trap_essence.txt @@ -1,7 +1,7 @@ Name:Trap Essence ManaCost:G U R Types:Instant -A:SP$ Counter | TargetType$ Spell | ValidTgts$ Card.Creature | TgtPrompt$ Select target creature spell | SpellDescription$ Counter target creature spell. Put two +1/+1 counters on up to one target creature. | SubAbility$ DBPutcounter -SVar:DBPutcounter:DB$ PutCounter | CounterType$ P1P1 | CounterNum$ 2 | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one target creature | ValidTgts$ Creature +A:SP$ Counter | TargetType$ Spell | ValidTgts$ Card.Creature | TgtPrompt$ Select target creature spell | SpellDescription$ Counter target creature spell. Put two +1/+1 counters on up to one target creature. | SubAbility$ DBPutCounter +SVar:DBPutCounter:DB$ PutCounter | CounterType$ P1P1 | CounterNum$ 2 | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one target creature | ValidTgts$ Creature DeckHas:Ability$Counters Oracle:Counter target creature spell. Put two +1/+1 counters on up to one target creature. diff --git a/forge-gui/res/cardsfolder/t/trickery_charm.txt b/forge-gui/res/cardsfolder/t/trickery_charm.txt index aa554e7fd87..bc715abef65 100644 --- a/forge-gui/res/cardsfolder/t/trickery_charm.txt +++ b/forge-gui/res/cardsfolder/t/trickery_charm.txt @@ -1,10 +1,10 @@ Name:Trickery Charm ManaCost:U Types:Instant -A:SP$ Charm | Choices$ DBPump,DBChooseType,DBRearrage +A:SP$ Charm | Choices$ DBPump,DBChooseType,DBRearrange SVar:DBPump:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ Flying | SpellDescription$ Target creature gains flying until end of turn. SVar:DBChooseType:DB$ ChooseType | Type$ Creature | Defined$ You | SubAbility$ DBAnimate | SpellDescription$ Target creature becomes the creature type of your choice until end of turn. SVar:DBAnimate:DB$ Animate | ValidTgts$ Creature | TgtPrompt$ Select target creature | Types$ ChosenType | RemoveCreatureTypes$ True -SVar:DBRearrage:DB$ RearrangeTopOfLibrary | Defined$ You | NumCards$ 4 | SpellDescription$ Look at the top four cards of your library, then put them back in any order. +SVar:DBRearrange:DB$ RearrangeTopOfLibrary | Defined$ You | NumCards$ 4 | SpellDescription$ Look at the top four cards of your library, then put them back in any order. AI:RemoveDeck:All Oracle:Choose one —\n• Target creature gains flying until end of turn.\n• Target creature becomes the creature type of your choice until end of turn.\n• Look at the top four cards of your library, then put them back in any order. diff --git a/forge-gui/res/cardsfolder/u/undercity_necrolisk.txt b/forge-gui/res/cardsfolder/u/undercity_necrolisk.txt index 1dd0c6fd6d9..e24de68e287 100644 --- a/forge-gui/res/cardsfolder/u/undercity_necrolisk.txt +++ b/forge-gui/res/cardsfolder/u/undercity_necrolisk.txt @@ -2,6 +2,6 @@ Name:Undercity Necrolisk ManaCost:3 B Types:Creature Zombie Lizard PT:3/3 -A:AB$ PutCounter | Cost$ 1 Sac<1/Creature.Other/another creature> | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBPump | SorcerySpeed$ True | SpellDescription$ Put a +1/+1 counter on CARDNAME. It gains menace until end of turn. Activate only any time you could cast a sorcery. +A:AB$ PutCounter | Cost$ 1 Sac<1/Creature.Other/another creature> | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBPump | SorcerySpeed$ True | SpellDescription$ Put a +1/+1 counter on CARDNAME. It gains menace until end of turn. Activate only as a sorcery. SVar:DBPump:DB$ Pump | KW$ Menace | Defined$ Self Oracle:{1}, Sacrifice another creature: Put a +1/+1 counter on Undercity Necrolisk. It gains menace until end of turn. Activate only as a sorcery. (It can't be blocked except by two or more creatures.) diff --git a/forge-gui/res/cardsfolder/u/urza_academy_headmaster.txt b/forge-gui/res/cardsfolder/u/urza_academy_headmaster.txt index 7c3ff24de56..3c3804f783b 100644 --- a/forge-gui/res/cardsfolder/u/urza_academy_headmaster.txt +++ b/forge-gui/res/cardsfolder/u/urza_academy_headmaster.txt @@ -58,8 +58,8 @@ SVar:DBChangeLands11M:DB$ ChangeZoneAll | ChangeType$ Card.Land+IsRemembered | O SVar:DBChangeRest11M:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered | Origin$ Library | Destination$ Graveyard | ForgetChanged$ True SVar:Tutor12M:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Card | ChangeNum$ 1 | Mandatory$ True | SpellDescription$ Search your library for a card and put that card into your hand. Then shuffle your library. SVar:Sacrifice13M:DB$ Sacrifice | ValidTgts$ Player | Amount$ 2 | SacValid$ Creature | SpellDescription$ Target player sacrifices two creatures. -SVar:Token14M:DB$ Token | TokenScript$ b_5_5_demon_flying | SubAbility$ DBLoselife14M | SpellDescription$ Create a 5/5 black Demon creature token with flying. You lose 2 life. -SVar:DBLoselife14M:DB$ LoseLife | LifeAmount$ 2 +SVar:Token14M:DB$ Token | TokenScript$ b_5_5_demon_flying | SubAbility$ DBLoseLife14M | SpellDescription$ Create a 5/5 black Demon creature token with flying. You lose 2 life. +SVar:DBLoseLife14M:DB$ LoseLife | LifeAmount$ 2 SVar:Token15M:DB$ Token | TokenScript$ c_4_4_dragon_flying | SpellDescription$ Create a 4/4 gold Dragon creature token with flying. SVar:SetLife16M:DB$ SetLife | ValidTgts$ Player | TgtPrompt$ Select target player | LifeAmount$ 10 | SpellDescription$ Target player's life total becomes 10. SVar:Destroy17M:DB$ Destroy | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent | SpellDescription$ Destroy target nonland permanent. diff --git a/forge-gui/res/cardsfolder/v/ventifact_bottle.txt b/forge-gui/res/cardsfolder/v/ventifact_bottle.txt index 123b6adc22a..3460e3acb7b 100644 --- a/forge-gui/res/cardsfolder/v/ventifact_bottle.txt +++ b/forge-gui/res/cardsfolder/v/ventifact_bottle.txt @@ -1,7 +1,7 @@ Name:Ventifact Bottle ManaCost:3 Types:Artifact -A:AB$ PutCounter | Cost$ X 1 T | CounterType$ CHARGE | CounterNum$ X | SorcerySpeed$ True | SpellDescription$ Put X charge counters on CARDNAME. Activate only any time you could cast a sorcery. +A:AB$ PutCounter | Cost$ X 1 T | CounterType$ CHARGE | CounterNum$ X | SorcerySpeed$ True | SpellDescription$ Put X charge counters on CARDNAME. Activate only as a sorcery. T:Mode$ Phase | Phase$ Main1 | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigGetMana | CheckSVar$ Y | SVarCompare$ GE1 | TriggerDescription$ At the beginning of your first main phase, if CARDNAME has a charge counter on it, tap it and remove all charge counters from it. Add {C} for each charge counter removed this way. SVar:TrigGetMana:DB$ Mana | Produced$ C | Amount$ Y | SubAbility$ TrigRemove SVar:TrigRemove:DB$ RemoveCounter | CounterType$ CHARGE | CounterNum$ Y | SubAbility$ DBTap diff --git a/forge-gui/res/cardsfolder/w/woodland_champion.txt b/forge-gui/res/cardsfolder/w/woodland_champion.txt index dea1d487785..0d393b2dc98 100644 --- a/forge-gui/res/cardsfolder/w/woodland_champion.txt +++ b/forge-gui/res/cardsfolder/w/woodland_champion.txt @@ -2,8 +2,8 @@ Name:Woodland Champion ManaCost:1 G Types:Creature Elf Scout PT:2/2 -T:Mode$ ChangesZoneAll | ValidCards$ Card.token+YouCtrl | Destination$ Battlefield | TriggerZones$ Battlefield | Execute$ TrigPutcounter | TriggerDescription$ Whenever one or more tokens you control enter, put that many +1/+1 counters on CARDNAME. -SVar:TrigPutcounter:DB$ PutCounter | CounterType$ P1P1 | Defined$ Self | CounterNum$ X +T:Mode$ ChangesZoneAll | ValidCards$ Card.token+YouCtrl | Destination$ Battlefield | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever one or more tokens you control enter, put that many +1/+1 counters on CARDNAME. +SVar:TrigPutCounter:DB$ PutCounter | CounterType$ P1P1 | Defined$ Self | CounterNum$ X SVar:X:TriggerCount$Amount DeckHints:Ability$Token DeckHas:Ability$Counters diff --git a/forge-gui/res/cardsfolder/z/zar_ojanen_scion_of_efrava.txt b/forge-gui/res/cardsfolder/z/zar_ojanen_scion_of_efrava.txt index d9a947d6470..e37c07c77c3 100644 --- a/forge-gui/res/cardsfolder/z/zar_ojanen_scion_of_efrava.txt +++ b/forge-gui/res/cardsfolder/z/zar_ojanen_scion_of_efrava.txt @@ -2,8 +2,8 @@ Name:Zar Ojanen, Scion of Efrava ManaCost:3 G W Types:Legendary Creature Cat Warrior PT:4/4 -T:Mode$ Taps | ValidCard$ Card.Self | Execute$ TrigPutcounter | TriggerZones$ Battlefield | TriggerDescription$ Domain — Whenever CARDNAME becomes tapped, put a +1/+1 counter on each creature you control with toughness less than the number of basic land types among lands you control. -SVar:TrigPutcounter:DB$ PutCounterAll | ValidCards$ Creature.YouCtrl+toughnessLTX | CounterType$ P1P1 | CounterNum$ 1 +T:Mode$ Taps | ValidCard$ Card.Self | Execute$ TrigPutCounter | TriggerZones$ Battlefield | TriggerDescription$ Domain — Whenever CARDNAME becomes tapped, put a +1/+1 counter on each creature you control with toughness less than the number of basic land types among lands you control. +SVar:TrigPutCounter:DB$ PutCounterAll | ValidCards$ Creature.YouCtrl+toughnessLTX | CounterType$ P1P1 | CounterNum$ 1 SVar:X:Count$Domain DeckHas:Ability$Counters Oracle:Domain — Whenever Zar Ojanen, Scion of Efrava becomes tapped, put a +1/+1 counter on each creature you control with toughness less than the number of basic land types among lands you control. diff --git a/forge-gui/res/tokenscripts/g_x_x_treefolk_warrior_total_forests.txt b/forge-gui/res/tokenscripts/g_x_x_treefolk_warrior_total_forests.txt index 88c2145b493..86d29bd7081 100644 --- a/forge-gui/res/tokenscripts/g_x_x_treefolk_warrior_total_forests.txt +++ b/forge-gui/res/tokenscripts/g_x_x_treefolk_warrior_total_forests.txt @@ -3,7 +3,7 @@ ManaCost:no cost Colors:green Types:Creature Treefolk Warrior PT:*/* -S:Mode$ Continuous | CharacteristicDefining$ True | SetPower$ X | SetToughness$ X | Description$ CARDNAME's power and toughness are each equal to the number of Forests you control. +S:Mode$ Continuous | CharacteristicDefining$ True | SetPower$ X | SetToughness$ X | Description$ This creature's power and toughness are each equal to the number of Forests you control. SVar:X:Count$Valid Forest.YouCtrl SVar:BuffedBy:Forest -Oracle:CARDNAMEs power and toughness are each equal to the number of Forests you control. +Oracle:This creature's power and toughness are each equal to the number of Forests you control. From f4e90e1d389729c820e75b14aa110648eee7decd Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Wed, 24 Sep 2025 13:47:12 +0800 Subject: [PATCH 243/355] fix NoSuchMethodError on older Android - closes #8771 - closes #8770 --- .../forge/gamemodes/planarconquest/ConquestData.java | 4 ++-- .../forge/gamemodes/planarconquest/ConquestUtil.java | 10 ++++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestData.java b/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestData.java index 0ed47c54c12..778f989cab3 100644 --- a/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestData.java +++ b/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestData.java @@ -294,8 +294,8 @@ public final class ConquestData { commandersUsingCard.append("\n").append(CardTranslation.getTranslatedName(commander.getName())); } } - - if (!commandersUsingCard.isEmpty()) { + // Android API StringBuilder isEmpty() is unavailable. https://developer.android.com/reference/java/lang/StringBuilder + if (commandersUsingCard.length() != 0) { SOptionPane.showMessageDialog(Localizer.getInstance().getMessage("lblCommandersCardCannotBeExiledByCard", CardTranslation.getTranslatedName(card.getName()), commandersUsingCard), title, SOptionPane.INFORMATION_ICON); return false; } diff --git a/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java b/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java index 59b3221349f..19912f1e05f 100644 --- a/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java +++ b/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java @@ -147,11 +147,13 @@ public class ConquestUtil { } //Move editions of cards already in the deck to the front. Map editionStats = currentDeck.getAllCardsInASinglePool().getCardEditionStatistics(true); + // use flatMap instead of mapMulti for Android 13 and below + //https://developer.android.com/reference/java/util/stream/Stream#mapMulti List out = planes.stream() - .mapMulti((p, c) -> p.getEditions().forEach(c)) - .filter(CardEdition::hasBasicLands) - .sorted(Comparator.comparing(e -> editionStats.getOrDefault(e, 0))) - .collect(Collectors.toList()); + .flatMap(p -> p.getEditions().stream()) + .filter(CardEdition::hasBasicLands) + .sorted(Comparator.comparing(e -> editionStats.getOrDefault(e, 0))) + .collect(Collectors.toList()); return out; } From 7325443da57c8dc8eaee20f29ad9c53e29ca5c1a Mon Sep 17 00:00:00 2001 From: Paul Hammerton <18243520+paulsnoops@users.noreply.github.com> Date: Wed, 24 Sep 2025 08:29:33 +0100 Subject: [PATCH 244/355] Create Lorwyn Eclipsed.txt --- forge-gui/res/editions/Lorwyn Eclipsed.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 forge-gui/res/editions/Lorwyn Eclipsed.txt diff --git a/forge-gui/res/editions/Lorwyn Eclipsed.txt b/forge-gui/res/editions/Lorwyn Eclipsed.txt new file mode 100644 index 00000000000..f2d0f93df0b --- /dev/null +++ b/forge-gui/res/editions/Lorwyn Eclipsed.txt @@ -0,0 +1,12 @@ +[metadata] +Code=ECL +Date=2026-01-23 +Name=Lorwyn Eclipsed +Type=Expansion +ScryfallCode=ECL + +[cards] +224 R Figure of Fable @Omar Rayyan +288 R Sygg, Wanderwine Wisdom @Warren Mahy +310 M Bitterbloom Bearer @Taryn Knight +327 R Mutable Explorer @Felicita Sala From 0036c274707a1d077bbd0a0f20ca87d7e1428703 Mon Sep 17 00:00:00 2001 From: Paul Hammerton <18243520+paulsnoops@users.noreply.github.com> Date: Wed, 24 Sep 2025 08:50:46 +0100 Subject: [PATCH 245/355] Create Arena Anthology 3.txt --- forge-gui/res/editions/Arena Anthology 3.txt | 33 ++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 forge-gui/res/editions/Arena Anthology 3.txt diff --git a/forge-gui/res/editions/Arena Anthology 3.txt b/forge-gui/res/editions/Arena Anthology 3.txt new file mode 100644 index 00000000000..0f43f948c99 --- /dev/null +++ b/forge-gui/res/editions/Arena Anthology 3.txt @@ -0,0 +1,33 @@ +[metadata] +Code=AA3 +Date=2025-09-23 +Name=Arena Anthology 3 +Type=Online +ScryfallCode=AA3 + +[cards] +1 U Flickerwisp @Jeremy Enecio +2 R Staff of the Storyteller @Dan Scott +3 C Force Spike @Nelson DeCastro +4 C Miscalculation @Jeff Laubenstein +5 C Peek @Adam Rex +6 R Dauthi Voidwalker @Sidharth Chaturyedi +7 U Necromancy @Pete Venters +8 C Assault Strobe @Kev Walker +9 R Broadside Bombardiers @Tomek Larek +10 C Chain Lightning @Christopher Moeller +11 U Gut, True Soul Zealot @Wayne Reynolds +12 U Oxidda Scrapmelter @Igor Kieryluk +13 C Ambush Viper @Alan Pollack +14 C Crop Rotation @DiTerlizzi +15 R Exploration @Lindsey Look +16 R Noble Hierarch @Mark Zug +17 R Fallen Shinobi @Dmitry Burmak +18 M Batterskull @Mark Zug +19 M Emrakul, the Aeons Torn @Mark Tedin +20 M Kaldra Compleat @Vincent Proce +21 R Memory Jar @Donato Giancola +22 M Ulamog, the Infinite Gyre @Aleksi Briclot +23 R Umezawa's Jitte @Christopher Moeller +24 R Shelldock Isle @Mark Tedin +25 R Yavimaya, Cradle of Growth @Sarah Finnigan From 5999909d32f13053cff3af89f80646850f5ccb6e Mon Sep 17 00:00:00 2001 From: Paul Hammerton <18243520+paulsnoops@users.noreply.github.com> Date: Wed, 24 Sep 2025 09:19:15 +0100 Subject: [PATCH 246/355] Create Arena Anthology 4.txt --- forge-gui/res/editions/Arena Anthology 4.txt | 36 ++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 forge-gui/res/editions/Arena Anthology 4.txt diff --git a/forge-gui/res/editions/Arena Anthology 4.txt b/forge-gui/res/editions/Arena Anthology 4.txt new file mode 100644 index 00000000000..d2b9897d48a --- /dev/null +++ b/forge-gui/res/editions/Arena Anthology 4.txt @@ -0,0 +1,36 @@ +[metadata] +Code=AA4 +Date=2025-09-23 +Name=Arena Anthology 4 +Type=Online +ScryfallCode=AA4 + +[cards] +1 R Blazing Archon @Zoltan Boros & Gabor Szikszai +2 R Bringer of the White Dawn @Kev Walker +3 M Iona, Shield of Emeria @Jason Chan +4 C Scaled Wurm @Wayne England +5 C Stormfront Pegasus @rk post +6 R Bringer of the Blue Dawn @Greg Staples +7 R Chromescale Drake @Ben Thompson +8 R Hoverguard Sweepers @Mark A. Nelson +9 C Kraken Hatchling @Jason Felix +10 R Thing from the Deep @Parente +11 R Tidespout Tyrant @Dany Orizio +12 R Baleful Force @Eytan Zana +13 R Bringer of the Black Dawn @Carl Critchlow +14 M Demon of Death's Gate @Vance Kovacs +15 R Dread Cacodemon @Izzy +16 R Kuro, Pitlord @Jon Foster +17 R Bringer of the Red Dawn @Christopher Moeller +18 R Dragon Tyrant @Kev Walker +19 R Fire Dragon @William Simpson +20 R Furnace Dragon @Matthew D. Wilson +21 R Magmatic Force @Jung Park +22 R Bringer of the Green Dawn @Jim Murray +23 C Crash of Rhinos @Steve White +24 R Gigantomancer @Chippy +25 R Regal Force @Brandon Kitkouski +26 R Wolf Pack @Yang Jun Kwon +27 R Colossus of Sardia @Greg Staples +28 U Stratadon @Brian Snoddy From 28dcdf6ddf8c40689ce7ddcd8b3acf7ae1bfa586 Mon Sep 17 00:00:00 2001 From: Paul Hammerton <18243520+paulsnoops@users.noreply.github.com> Date: Wed, 24 Sep 2025 09:21:44 +0100 Subject: [PATCH 247/355] Update Secret Lair Drop Series.txt --- forge-gui/res/editions/Secret Lair Drop Series.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/forge-gui/res/editions/Secret Lair Drop Series.txt b/forge-gui/res/editions/Secret Lair Drop Series.txt index 25f454ce23f..a929bd211bf 100644 --- a/forge-gui/res/editions/Secret Lair Drop Series.txt +++ b/forge-gui/res/editions/Secret Lair Drop Series.txt @@ -2062,6 +2062,10 @@ F1540 M Rainbow Dash @John Thacker 2109 R Sylvan Safekeeper @Ian Permana 2110 M Crucible of Worlds @Ian Permana 2111 R Zuran Orb @Ian Permana +2193 M Greensleeves, Maro-Sorcerer @Jason Loik & Matthew Cohen +2194 M Polyraptor @Ben Millar +2195 R Academy Manufactor @Ben Millar +2196 M Wurmcoil Engine @Jason Loik & Matthew Cohen 7001 R Feed the Swarm @Stanislav Sherbakov 7002 R Forge Anew @Yongjae Choi 7003 R Silence @Evyn Fong From e4a83de6cf35b6abd3694a851dbee697cee4db62 Mon Sep 17 00:00:00 2001 From: Paul Hammerton Date: Wed, 24 Sep 2025 17:52:33 +0100 Subject: [PATCH 248/355] Format updates: AA3, AA4 --- forge-gui/res/formats/Archived/Alchemy/2025-07-29.txt | 1 - forge-gui/res/formats/Archived/Alchemy/2025-08-19.txt | 1 - forge-gui/res/formats/Archived/Alchemy/2025-09-23.txt | 1 - forge-gui/res/formats/Archived/Historic/2025-09-23.txt | 4 ++-- forge-gui/res/formats/Archived/Timeless/2025-09-23.txt | 4 ++-- forge-gui/res/formats/Sanctioned/Historic.txt | 4 ++-- 6 files changed, 6 insertions(+), 9 deletions(-) diff --git a/forge-gui/res/formats/Archived/Alchemy/2025-07-29.txt b/forge-gui/res/formats/Archived/Alchemy/2025-07-29.txt index f0de8ec816c..77cfe09943c 100644 --- a/forge-gui/res/formats/Archived/Alchemy/2025-07-29.txt +++ b/forge-gui/res/formats/Archived/Alchemy/2025-07-29.txt @@ -4,6 +4,5 @@ Type:Archived Subtype:Arena Effective:2025-07-29 Sets:ANA, ANB, BLB, YBLB, DSK, YDSK, FDN, DFT, YDFT, TDM, YTDM, FIN, EOE -Banned:Monstrous Rage // Due to format rotation, Alchemy loses access to several mana-fixing lands. Therefore, the following cards are legal ahead of schedule due to their inclusion in YEOE on 19 August 2025. Additional:Clifftop Retreat; Dragonskull Summit; Drowned Catacomb; Glacial Fortress; Hinterland Harbor; Isolated Chapel; Rootbound Crag; Sulfur Falls; Sunpetal Grove; Woodland Cemetery diff --git a/forge-gui/res/formats/Archived/Alchemy/2025-08-19.txt b/forge-gui/res/formats/Archived/Alchemy/2025-08-19.txt index 1dc6d843e90..758501395b3 100644 --- a/forge-gui/res/formats/Archived/Alchemy/2025-08-19.txt +++ b/forge-gui/res/formats/Archived/Alchemy/2025-08-19.txt @@ -4,4 +4,3 @@ Type:Archived Subtype:Arena Effective:2025-08-19 Sets:ANA, ANB, BLB, YBLB, DSK, YDSK, FDN, DFT, YDFT, TDM, YTDM, FIN, EOE, YEOE -Banned:Monstrous Rage diff --git a/forge-gui/res/formats/Archived/Alchemy/2025-09-23.txt b/forge-gui/res/formats/Archived/Alchemy/2025-09-23.txt index 4389cc84e95..dc1af079cdd 100644 --- a/forge-gui/res/formats/Archived/Alchemy/2025-09-23.txt +++ b/forge-gui/res/formats/Archived/Alchemy/2025-09-23.txt @@ -4,4 +4,3 @@ Type:Archived Subtype:Arena Effective:2025-09-23 Sets:ANA, ANB, BLB, YBLB, DSK, YDSK, FDN, DFT, YDFT, TDM, YTDM, FIN, EOE, YEOE, OM1 -Banned:Monstrous Rage diff --git a/forge-gui/res/formats/Archived/Historic/2025-09-23.txt b/forge-gui/res/formats/Archived/Historic/2025-09-23.txt index 05c50382658..dc175f25ab4 100644 --- a/forge-gui/res/formats/Archived/Historic/2025-09-23.txt +++ b/forge-gui/res/formats/Archived/Historic/2025-09-23.txt @@ -3,6 +3,6 @@ Name:Historic (OM1) Type:Archived Subtype:Arena Effective:2025-09-23 -Sets:KTK, XLN, RIX, DOM, M19, ANA, PANA, GRN, G18, RNA, WAR, M20, ELD, HA1, THB, HA2, IKO, HA3, M21, JMP, AJMP, AKR, ANB, ZNR, KLR, KHM, HA4, STX, STA, HA5, AFR, J21, MID, VOW, YMID, NEO, YNEO, SNC, YSNC, HBG, HA6, EA1, DMU, YDMU, BRO, BRR, YBRO, EA2, ONE, YONE, SIR, SIS, MOM, MUL, MAT, LTR, HA7, EA3, WOE, WOT, YWOE, LCI, YLCI, MKM, YMKM, OTJ, OTP, BIG, YOTJ, MH3, BLB, YBLB, DSK, YDSK, FDN, J25, PIO, DFT, YDFT, TDM, YTDM, PA1, FIN, FCA, EOE, EOS, YEOE, AA1, AA2, OM1, OMB +Sets:KTK, XLN, RIX, DOM, M19, ANA, PANA, GRN, G18, RNA, WAR, M20, ELD, HA1, THB, HA2, IKO, HA3, M21, JMP, AJMP, AKR, ANB, ZNR, KLR, KHM, HA4, STX, STA, HA5, AFR, J21, MID, VOW, YMID, NEO, YNEO, SNC, YSNC, HBG, HA6, EA1, DMU, YDMU, BRO, BRR, YBRO, EA2, ONE, YONE, SIR, SIS, MOM, MUL, MAT, LTR, HA7, EA3, WOE, WOT, YWOE, LCI, YLCI, MKM, YMKM, OTJ, OTP, BIG, YOTJ, MH3, BLB, YBLB, DSK, YDSK, FDN, J25, PIO, DFT, YDFT, TDM, YTDM, PA1, FIN, FCA, EOE, EOS, YEOE, AA1, AA2, OM1, OMB, AA3, AA4 Banned:Agent of Treachery; Ancient Tomb; Arid Mesa; Blood Moon; Bloodstained Mire; Brainstorm; Channel; Chrome Mox; Commandeer; Dark Ritual; Demonic Tutor; Endurance; Field of the Dead; Flare of Cultivation; Flare of Denial; Flare of Duplication; Flare of Fortitude; Flare of Malice; Flooded Strand; Force of Vigor; Fury; Grief; Harbinger of the Seas; Intruder Alarm; Land Tax; Lightning Bolt; Magus of the Moon; Mana Drain; Marsh Flats; Memory Lapse; Mishra's Bauble; Misty Rainforest; Mox Opal; Natural Order; Necropotence; Nexus of Fate; Oko, Thief of Crowns; Once Upon a Time; Polluted Delta; Ragavan, Nimble Pilferer; Reanimate; Scalding Tarn; Show and Tell; Sneak Attack; Solitude; Spreading Seas; Strip Mine; Subtlety; Swords to Plowshares; Temporal Manipulation; Thassa's Oracle; Tibalt's Trickery; Time Warp; Uro, Titan of Nature's Wrath; Veil of Summer; Verdant Catacombs; Wilderness Reclamation; Windswept Heath; Winter Moon; Wooded Foothills -Additional:Admiral Brass, Unsinkable; Burden of Guilt; Clavileño, First of the Blessed; Crashing Footfalls; Desert; Desertion; Dismember; Duskmantle, House of Shadow; Enlisted Wurm; Evolutionary Leap; Fabricate; Gamble; Ghostly Prison; Gonti, Canny Acquisitor; Goro-Goro and Satoru; Ixidor, Reality Sculptor; Katilda and Lier; Kuldotha Rebirth; Leonin Relic-Warder; Magmaw; Mass Hysteria; Metalspinner's Puzzleknot; Mistveil Plains; Molten Psyche; Monologue Tax; Mystery Key; Mystic Snake; Notion Thief; Nyx Weaver; Olivia, Opulent Outlaw; Pantlaza, Sun-Favored; Persist; Port Razer; Possibility Storm; Prismatic Ending; Prismatic Vista; Putrid Warrior; Shard of Broken Glass; Slimefoot and Squee; Smuggler's Copter; Spell Snare; Stella Lee, Wild Card; Stoneforge Mystic; Timeless Dragon; Treacherous Terrain; Victimize; Xolatoyac, the Smiling Flood; Yuma, Proud Protector +Additional:Admiral Brass, Unsinkable; Burden of Guilt; Clavileño, First of the Blessed; Crashing Footfalls; Crumbling Vestige; Desert; Desertion; Dismember; Duskmantle, House of Shadow; Enlisted Wurm; Evolutionary Leap; Fabricate; Gamble; Ghostly Prison; Gonti, Canny Acquisitor; Goro-Goro and Satoru; Ixidor, Reality Sculptor; Katilda and Lier; Kuldotha Rebirth; Leonin Relic-Warder; Magmaw; Mass Hysteria; Metalspinner's Puzzleknot; Mistveil Plains; Molten Psyche; Monologue Tax; Mystery Key; Mystic Snake; Notion Thief; Nyx Weaver; Olivia, Opulent Outlaw; Pantlaza, Sun-Favored; Persist; Port Razer; Possibility Storm; Prismatic Ending; Prismatic Vista; Putrid Warrior; Shard of Broken Glass; Slimefoot and Squee; Smuggler's Copter; Spell Snare; Stella Lee, Wild Card; Stoneforge Mystic; Timeless Dragon; Treacherous Terrain; Victimize; Xolatoyac, the Smiling Flood; Yuma, Proud Protector diff --git a/forge-gui/res/formats/Archived/Timeless/2025-09-23.txt b/forge-gui/res/formats/Archived/Timeless/2025-09-23.txt index dac7c9da5ba..d0c0a1053d4 100644 --- a/forge-gui/res/formats/Archived/Timeless/2025-09-23.txt +++ b/forge-gui/res/formats/Archived/Timeless/2025-09-23.txt @@ -3,6 +3,6 @@ Name:Timeless (OM1) Type:Archived Subtype:Vintage Effective:2025-09-23 -Sets:KTK, XLN, RIX, DOM, M19, ANA, PANA, GRN, G18, RNA, WAR, M20, ELD, HA1, THB, HA2, IKO, HA3, M21, JMP, AJMP, AKR, ANB, ZNR, KLR, KHM, HA4, STX, STA, HA5, AFR, J21, MID, VOW, YMID, NEO, YNEO, SNC, YSNC, HBG, HA6, EA1, DMU, YDMU, BRO, BRR, YBRO, EA2, ONE, YONE, SIR, SIS, MOM, MUL, MAT, LTR, HA7, EA3, WOE, WOT, YWOE, LCI, YLCI, MKM, YMKM, OTJ, OTP, BIG, YOTJ, MH3, BLB, YBLB, DSK, YDSK, FDN, J25, PIO, DFT, YDFT, TDM, YTDM, PA1, FIN, FCA, EOE, EOS, YEOE, AA1, AA2, OM1, OMB +Sets:KTK, XLN, RIX, DOM, M19, ANA, PANA, GRN, G18, RNA, WAR, M20, ELD, HA1, THB, HA2, IKO, HA3, M21, JMP, AJMP, AKR, ANB, ZNR, KLR, KHM, HA4, STX, STA, HA5, AFR, J21, MID, VOW, YMID, NEO, YNEO, SNC, YSNC, HBG, HA6, EA1, DMU, YDMU, BRO, BRR, YBRO, EA2, ONE, YONE, SIR, SIS, MOM, MUL, MAT, LTR, HA7, EA3, WOE, WOT, YWOE, LCI, YLCI, MKM, YMKM, OTJ, OTP, BIG, YOTJ, MH3, BLB, YBLB, DSK, YDSK, FDN, J25, PIO, DFT, YDFT, TDM, YTDM, PA1, FIN, FCA, EOE, EOS, YEOE, AA1, AA2, OM1, OMB, AA3, AA4 Restricted:Channel; Demonic Tutor; Tibalt's Trickery -Additional:Admiral Brass, Unsinkable; Burden of Guilt; Clavileño, First of the Blessed; Crashing Footfalls; Desert; Desertion; Dismember; Duskmantle, House of Shadow; Endurance; Enlisted Wurm; Evolutionary Leap; Fabricate; Fury; Gamble; Ghostly Prison; Gonti, Canny Acquisitor; Goro-Goro and Satoru; Grief; Ixidor, Reality Sculptor; Katilda and Lier; Kuldotha Rebirth; Leonin Relic-Warder; Magmaw; Mass Hysteria; Metalspinner's Puzzleknot; Mistveil Plains; Molten Psyche; Monologue Tax; Mystery Key; Mystic Snake; Notion Thief; Nyx Weaver; Olivia, Opulent Outlaw; Pantlaza, Sun-Favored; Persist; Port Razer; Possibility Storm; Prismatic Ending; Prismatic Vista; Putrid Warrior; Shard of Broken Glass; Show and Tell; Slimefoot and Squee; Smuggler's Copter; Solitude; Spell Snare; Stella Lee, Wild Card; Stoneforge Mystic; Subtlety; Timeless Dragon; Treacherous Terrain; Victimize; Xolatoyac, the Smiling Flood; Yuma, Proud Protector +Additional:Admiral Brass, Unsinkable; Burden of Guilt; Clavileño, First of the Blessed; Crashing Footfalls; Crumbling Vestige; Desert; Desertion; Dismember; Duskmantle, House of Shadow; Endurance; Enlisted Wurm; Evolutionary Leap; Fabricate; Fury; Gamble; Ghostly Prison; Gonti, Canny Acquisitor; Goro-Goro and Satoru; Grief; Ixidor, Reality Sculptor; Katilda and Lier; Kuldotha Rebirth; Leonin Relic-Warder; Magmaw; Mass Hysteria; Metalspinner's Puzzleknot; Mistveil Plains; Molten Psyche; Monologue Tax; Mystery Key; Mystic Snake; Notion Thief; Nyx Weaver; Olivia, Opulent Outlaw; Pantlaza, Sun-Favored; Persist; Port Razer; Possibility Storm; Prismatic Ending; Prismatic Vista; Putrid Warrior; Shard of Broken Glass; Show and Tell; Slimefoot and Squee; Smuggler's Copter; Solitude; Spell Snare; Stella Lee, Wild Card; Stoneforge Mystic; Subtlety; Timeless Dragon; Treacherous Terrain; Victimize; Xolatoyac, the Smiling Flood; Yuma, Proud Protector diff --git a/forge-gui/res/formats/Sanctioned/Historic.txt b/forge-gui/res/formats/Sanctioned/Historic.txt index d028fab2e0c..dac663817b9 100644 --- a/forge-gui/res/formats/Sanctioned/Historic.txt +++ b/forge-gui/res/formats/Sanctioned/Historic.txt @@ -4,6 +4,6 @@ Type:Digital Subtype:Arena Effective:2019-11-21 Order:142 -Sets:KTK, XLN, RIX, DOM, M19, ANA, PANA, GRN, G18, RNA, WAR, M20, ELD, HA1, THB, HA2, IKO, HA3, M21, JMP, AJMP, AKR, ANB, ZNR, KLR, KHM, HA4, STX, STA, HA5, AFR, J21, MID, VOW, YMID, NEO, YNEO, SNC, YSNC, HBG, HA6, EA1, DMU, YDMU, BRO, BRR, YBRO, EA2, ONE, YONE, SIR, SIS, MOM, MUL, MAT, LTR, HA7, EA3, WOE, WOT, YWOE, LCI, YLCI, MKM, YMKM, OTJ, OTP, BIG, YOTJ, MH3, BLB, YBLB, DSK, YDSK, FDN, J25, PIO, DFT, YDFT, TDM, YTDM, PA1, FIN, FCA, EOE, EOS, YEOE, AA1, AA2, OM1, OMB +Sets:KTK, XLN, RIX, DOM, M19, ANA, PANA, GRN, G18, RNA, WAR, M20, ELD, HA1, THB, HA2, IKO, HA3, M21, JMP, AJMP, AKR, ANB, ZNR, KLR, KHM, HA4, STX, STA, HA5, AFR, J21, MID, VOW, YMID, NEO, YNEO, SNC, YSNC, HBG, HA6, EA1, DMU, YDMU, BRO, BRR, YBRO, EA2, ONE, YONE, SIR, SIS, MOM, MUL, MAT, LTR, HA7, EA3, WOE, WOT, YWOE, LCI, YLCI, MKM, YMKM, OTJ, OTP, BIG, YOTJ, MH3, BLB, YBLB, DSK, YDSK, FDN, J25, PIO, DFT, YDFT, TDM, YTDM, PA1, FIN, FCA, EOE, EOS, YEOE, AA1, AA2, OM1, OMB, AA3, AA4 Banned:Agent of Treachery; Ancient Tomb; Arid Mesa; Blood Moon; Bloodstained Mire; Brainstorm; Channel; Chrome Mox; Commandeer; Dark Ritual; Demonic Tutor; Endurance; Field of the Dead; Flare of Cultivation; Flare of Denial; Flare of Duplication; Flare of Fortitude; Flare of Malice; Flooded Strand; Force of Vigor; Fury; Grief; Harbinger of the Seas; Intruder Alarm; Land Tax; Lightning Bolt; Magus of the Moon; Mana Drain; Marsh Flats; Memory Lapse; Mishra's Bauble; Misty Rainforest; Mox Opal; Natural Order; Necropotence; Nexus of Fate; Oko, Thief of Crowns; Once Upon a Time; Polluted Delta; Ragavan, Nimble Pilferer; Reanimate; Scalding Tarn; Show and Tell; Sneak Attack; Solitude; Spreading Seas; Strip Mine; Subtlety; Swords to Plowshares; Temporal Manipulation; Thassa's Oracle; Tibalt's Trickery; Time Warp; Uro, Titan of Nature's Wrath; Veil of Summer; Verdant Catacombs; Wilderness Reclamation; Windswept Heath; Winter Moon; Wooded Foothills -Additional:Admiral Brass, Unsinkable; Burden of Guilt; Clavileño, First of the Blessed; Crashing Footfalls; Desert; Desertion; Dismember; Duskmantle, House of Shadow; Enlisted Wurm; Evolutionary Leap; Fabricate; Gamble; Ghostly Prison; Gonti, Canny Acquisitor; Goro-Goro and Satoru; Ixidor, Reality Sculptor; Katilda and Lier; Kuldotha Rebirth; Leonin Relic-Warder; Magmaw; Mass Hysteria; Metalspinner's Puzzleknot; Mistveil Plains; Molten Psyche; Monologue Tax; Mystery Key; Mystic Snake; Notion Thief; Nyx Weaver; Olivia, Opulent Outlaw; Pantlaza, Sun-Favored; Persist; Port Razer; Possibility Storm; Prismatic Ending; Prismatic Vista; Putrid Warrior; Shard of Broken Glass; Slimefoot and Squee; Smuggler's Copter; Spell Snare; Stella Lee, Wild Card; Stoneforge Mystic; Timeless Dragon; Treacherous Terrain; Victimize; Xolatoyac, the Smiling Flood; Yuma, Proud Protector +Additional:Admiral Brass, Unsinkable; Burden of Guilt; Clavileño, First of the Blessed; Crashing Footfalls; Crumbling Vestige; Desert; Desertion; Dismember; Duskmantle, House of Shadow; Enlisted Wurm; Evolutionary Leap; Fabricate; Gamble; Ghostly Prison; Gonti, Canny Acquisitor; Goro-Goro and Satoru; Ixidor, Reality Sculptor; Katilda and Lier; Kuldotha Rebirth; Leonin Relic-Warder; Magmaw; Mass Hysteria; Metalspinner's Puzzleknot; Mistveil Plains; Molten Psyche; Monologue Tax; Mystery Key; Mystic Snake; Notion Thief; Nyx Weaver; Olivia, Opulent Outlaw; Pantlaza, Sun-Favored; Persist; Port Razer; Possibility Storm; Prismatic Ending; Prismatic Vista; Putrid Warrior; Shard of Broken Glass; Slimefoot and Squee; Smuggler's Copter; Spell Snare; Stella Lee, Wild Card; Stoneforge Mystic; Timeless Dragon; Treacherous Terrain; Victimize; Xolatoyac, the Smiling Flood; Yuma, Proud Protector From 2d1fe88d324e23630df164d17741427fced9634e Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Wed, 24 Sep 2025 19:52:58 +0200 Subject: [PATCH 249/355] FSkinProp: unify Enum to SkinProp places (#8764) * FSkinProp: unify Enum to SkinProp places * FSkinProp: add iconFromDeckSection --- .../toolbox/special/PlayerDetailsPanel.java | 17 +------ .../src/forge/deck/FDeckEditor.java | 14 +----- .../screens/match/views/VPlayerPanel.java | 22 ++------- .../forge/localinstance/skin/FSkinProp.java | 48 +++++++++++++++++++ 4 files changed, 56 insertions(+), 45 deletions(-) diff --git a/forge-gui-desktop/src/main/java/forge/toolbox/special/PlayerDetailsPanel.java b/forge-gui-desktop/src/main/java/forge/toolbox/special/PlayerDetailsPanel.java index d04d889a77d..df0d987c483 100644 --- a/forge-gui-desktop/src/main/java/forge/toolbox/special/PlayerDetailsPanel.java +++ b/forge-gui-desktop/src/main/java/forge/toolbox/special/PlayerDetailsPanel.java @@ -69,22 +69,7 @@ public class PlayerDetailsPanel extends JPanel { } public static FSkinProp iconFromZone(ZoneType zoneType) { - switch (zoneType) { - case Hand: return FSkinProp.IMG_ZONE_HAND; - case Library: return FSkinProp.IMG_ZONE_LIBRARY; - case Graveyard: return FSkinProp.IMG_ZONE_GRAVEYARD; - case Exile: return FSkinProp.IMG_ZONE_EXILE; - case Sideboard: return FSkinProp.IMG_ZONE_SIDEBOARD; - case Flashback: return FSkinProp.IMG_ZONE_FLASHBACK; - case Command: return FSkinProp.IMG_ZONE_COMMAND; //IMG_PLANESWALKER - case PlanarDeck: return FSkinProp.IMG_ZONE_PLANAR; - case SchemeDeck: return FSkinProp.IMG_ZONE_SCHEME; - case AttractionDeck: return FSkinProp.IMG_ZONE_ATTRACTION; - case ContraptionDeck: return FSkinProp.IMG_ZONE_CONTRAPTION; - case Ante: return FSkinProp.IMG_ZONE_ANTE; - case Junkyard: return FSkinProp.IMG_ZONE_JUNKYARD; - default: return FSkinProp.IMG_HDZONE_LIBRARY; - } + return FSkinProp.iconFromZone(zoneType, false); } /** Adds various labels to pool area JPanel container. */ diff --git a/forge-gui-mobile/src/forge/deck/FDeckEditor.java b/forge-gui-mobile/src/forge/deck/FDeckEditor.java index eff2481bff0..0307b1a9f7d 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckEditor.java +++ b/forge-gui-mobile/src/forge/deck/FDeckEditor.java @@ -30,6 +30,7 @@ import forge.itemmanager.ItemManager.ContextMenuBuilder; import forge.itemmanager.ItemManagerConfig; import forge.itemmanager.filters.ItemFilter; import forge.localinstance.properties.ForgePreferences.FPref; +import forge.localinstance.skin.FSkinProp; import forge.menu.*; import forge.model.FModel; import forge.screens.FScreen; @@ -409,18 +410,7 @@ public class FDeckEditor extends TabPageScreen { } public static FImage iconFromDeckSection(DeckSection deckSection) { - return switch (deckSection) { - case Main -> MAIN_DECK_ICON; - case Sideboard -> SIDEBOARD_ICON; - case Commander -> FSkinImage.COMMAND; - case Avatar -> FSkinImage.AVATAR; - case Conspiracy -> FSkinImage.CONSPIRACY; - case Planes -> FSkinImage.PLANAR; - case Schemes -> FSkinImage.SCHEME; - case Attractions -> FSkinImage.ATTRACTION; - case Contraptions -> FSkinImage.CONTRAPTION; - default -> FSkinImage.HDSIDEBOARD; - }; + return FSkin.getImages().get(FSkinProp.iconFromDeckSection(deckSection, Forge.hdbuttons)); } private final DeckEditorConfig editorConfig; diff --git a/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java b/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java index 477ad165d8c..b80b3ce3930 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java @@ -9,6 +9,7 @@ import com.badlogic.gdx.utils.Align; import forge.Forge; import forge.Graphics; +import forge.assets.FSkin; import forge.assets.FSkinColor; import forge.assets.FSkinColor.Colors; import forge.assets.FSkinFont; @@ -19,6 +20,7 @@ import forge.game.card.CounterEnumType; import forge.game.player.PlayerView; import forge.game.zone.ZoneType; import forge.localinstance.properties.ForgePreferences.FPref; +import forge.localinstance.skin.FSkinProp; import forge.menu.FMenuBar; import forge.menu.FMenuItem; import forge.menu.FPopupMenu; @@ -139,23 +141,8 @@ public class VPlayerPanel extends FContainer { tabs.add(zoneTab); } - public static FSkinImage iconFromZone(ZoneType zoneType) { - return switch (zoneType) { - case Hand -> Forge.hdbuttons ? FSkinImage.HDHAND : FSkinImage.HAND; - case Library -> Forge.hdbuttons ? FSkinImage.HDLIBRARY : FSkinImage.LIBRARY; - case Graveyard -> Forge.hdbuttons ? FSkinImage.HDGRAVEYARD : FSkinImage.GRAVEYARD; - case Exile -> Forge.hdbuttons ? FSkinImage.HDEXILE : FSkinImage.EXILE; - case Sideboard -> Forge.hdbuttons ? FSkinImage.HDSIDEBOARD : FSkinImage.SIDEBOARD; - case Flashback -> Forge.hdbuttons ? FSkinImage.HDFLASHBACK : FSkinImage.FLASHBACK; - case Command -> FSkinImage.COMMAND; - case PlanarDeck -> FSkinImage.PLANAR; - case SchemeDeck -> FSkinImage.SCHEME; - case AttractionDeck -> FSkinImage.ATTRACTION; - case ContraptionDeck -> FSkinImage.CONTRAPTION; - case Ante -> FSkinImage.ANTE; - case Junkyard -> FSkinImage.JUNKYARD; - default -> FSkinImage.HDLIBRARY; - }; + public static FSkinImageInterface iconFromZone(ZoneType zoneType) { + return FSkin.getImages().get(FSkinProp.iconFromZone(zoneType, Forge.hdbuttons)); } public Iterable getTabs() { @@ -308,6 +295,7 @@ public class VPlayerPanel extends FContainer { tabManaPool.update(); } + @SuppressWarnings("incomplete-switch") public void updateZone(ZoneType zoneType) { if (zoneType == ZoneType.Battlefield) { field.update(true); diff --git a/forge-gui/src/main/java/forge/localinstance/skin/FSkinProp.java b/forge-gui/src/main/java/forge/localinstance/skin/FSkinProp.java index 99d9fb683ce..66cf630f5a6 100644 --- a/forge-gui/src/main/java/forge/localinstance/skin/FSkinProp.java +++ b/forge-gui/src/main/java/forge/localinstance/skin/FSkinProp.java @@ -22,7 +22,10 @@ import java.util.Map; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; +import forge.card.MagicColor; import forge.card.mana.ManaCostShard; +import forge.deck.DeckSection; +import forge.game.zone.ZoneType; import forge.localinstance.properties.ForgeConstants; /** @@ -705,6 +708,51 @@ public enum FSkinProp { MANA_IMG.put("AL6OFF", FSkinProp.IMG_ATTR_6_OFF); } + public static FSkinProp iconFromColor(MagicColor.Color color) { + return switch (color) { + case WHITE -> IMG_MANA_W; + case BLUE -> IMG_MANA_U; + case BLACK -> IMG_MANA_B; + case RED -> IMG_MANA_R; + case GREEN -> IMG_MANA_G; + case COLORLESS -> IMG_MANA_COLORLESS; + }; + } + + public static FSkinProp iconFromZone(ZoneType zoneType, boolean hdbuttons) { + return switch (zoneType) { + case Hand -> hdbuttons ? IMG_HDZONE_HAND : IMG_ZONE_HAND; + case Library -> hdbuttons ? IMG_HDZONE_LIBRARY : IMG_ZONE_LIBRARY; + case Graveyard -> hdbuttons ? IMG_HDZONE_GRAVEYARD : IMG_ZONE_GRAVEYARD; + case Exile -> hdbuttons ? IMG_HDZONE_EXILE : IMG_ZONE_EXILE; + case Sideboard -> hdbuttons ? IMG_HDZONE_SIDEBOARD : IMG_ZONE_SIDEBOARD; + case Flashback -> hdbuttons ? IMG_HDZONE_FLASHBACK : IMG_ZONE_FLASHBACK; + case Command -> IMG_ZONE_COMMAND; //IMG_PLANESWALKER + case PlanarDeck -> IMG_ZONE_PLANAR; + case SchemeDeck -> IMG_ZONE_SCHEME; + case AttractionDeck -> IMG_ZONE_ATTRACTION; + case ContraptionDeck -> IMG_ZONE_CONTRAPTION; + case Ante -> IMG_ZONE_ANTE; + case Junkyard ->IMG_ZONE_JUNKYARD; + default -> IMG_HDZONE_LIBRARY; + }; + } + + public static FSkinProp iconFromDeckSection(DeckSection deckSection, boolean hdbuttons) { + return switch (deckSection) { + case Main -> hdbuttons ? IMG_HDZONE_LIBRARY : ICO_DECKLIST; + case Sideboard -> hdbuttons ? IMG_HDZONE_SIDEBOARD : IMG_ZONE_SIDEBOARD; + case Commander -> IMG_ZONE_COMMAND; + case Avatar -> IMG_ZONE_AVATAR; + case Conspiracy -> IMG_ZONE_CONSPIRACY; + case Planes -> IMG_ZONE_PLANAR; + case Schemes -> IMG_ZONE_SCHEME; + case Attractions -> IMG_ZONE_ATTRACTION; + case Contraptions -> IMG_ZONE_CONTRAPTION; + default -> IMG_HDZONE_SIDEBOARD; + }; + } + public enum PropType { BACKGROUND(null), COLOR(null), From 1ded8fe5da1c48b419aa6cbc8fef56e5736cc52d Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Thu, 25 Sep 2025 06:51:02 +0800 Subject: [PATCH 250/355] fix removing item by name --- .../src/forge/adventure/player/AdventurePlayer.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java index cc3e7979482..ebc4ae17e1a 100644 --- a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java +++ b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java @@ -1194,9 +1194,7 @@ public class AdventurePlayer implements Serializable, SaveFileContent { } public void removeItem(String name) { - ItemData item = ItemListData.getItem(name); - if (item != null) - removeItem(item); + inventoryItems.stream().filter(itemData -> name.equalsIgnoreCase(itemData.name)).findFirst().ifPresent(this::removeItem); } public void removeItem(ItemData item) { From f11c2ad8a490c8ef91a4a3fae85274f3d2c558e3 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Fri, 26 Sep 2025 08:29:07 +0800 Subject: [PATCH 251/355] fix Vertical layout for VManaPool --- forge-gui-mobile/src/forge/screens/match/views/VManaPool.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui-mobile/src/forge/screens/match/views/VManaPool.java b/forge-gui-mobile/src/forge/screens/match/views/VManaPool.java index 57a13b759d0..b5e601b8dd4 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VManaPool.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VManaPool.java @@ -70,7 +70,7 @@ public class VManaPool extends VDisplayArea { float x = 0; float y = 0; - if (Forge.isLandscapeMode() && !Forge.altZoneTabs) { + if (Forge.isLandscapeMode() && (!Forge.altZoneTabs || !"Horizontal".equalsIgnoreCase(Forge.altZoneTabMode))) { float labelWidth = visibleWidth / 2; float labelHeight = visibleHeight / 3; From c10b5706f1bc79a8b9475c22cd73cacd68005e5b Mon Sep 17 00:00:00 2001 From: tool4ever Date: Fri, 26 Sep 2025 08:48:22 +0200 Subject: [PATCH 252/355] Some fixes (#8779) --- .../src/main/java/forge/ai/ComputerUtil.java | 63 ++++---- .../main/java/forge/ai/ComputerUtilMana.java | 9 +- .../java/forge/ai/ability/ChangeZoneAi.java | 3 - .../ability/effects/RestartGameEffect.java | 3 +- .../java/forge/game/card/CardFactory.java | 147 +++++++++--------- .../game/spellability/AbilityActivated.java | 2 +- .../k/kami_of_twisted_reflection.txt | 2 +- forge-gui/res/cardsfolder/p/parker_luck.txt | 1 + .../res/cardsfolder/s/spider_man_2099.txt | 2 +- 9 files changed, 113 insertions(+), 119 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtil.java b/forge-ai/src/main/java/forge/ai/ComputerUtil.java index ca942690ab9..bad4b3c3bbc 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtil.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtil.java @@ -3104,41 +3104,38 @@ public class ComputerUtil { public static CardCollection filterAITgts(SpellAbility sa, Player ai, CardCollection srcList, boolean alwaysStrict) { final Card source = sa.getHostCard(); - if (source == null) { return srcList; } - - if (sa.hasParam("AITgts")) { - CardCollection list; - String aiTgts = sa.getParam("AITgts"); - if (aiTgts.startsWith("BetterThan")) { - int value = 0; - if (aiTgts.endsWith("Source")) { - value = ComputerUtilCard.evaluateCreature(source); - if (source.isEnchanted()) { - for (Card enc : source.getEnchantedBy()) { - if (enc.getController().equals(ai)) { - value += 100; // is 100 per AI's own aura enough? - } - } - } - } else if (aiTgts.contains("EvalRating.")) { - value = AbilityUtils.calculateAmount(source, aiTgts.substring(aiTgts.indexOf(".") + 1), sa); - } else { - System.err.println("Warning: Unspecified AI target evaluation rating for SA " + sa); - value = ComputerUtilCard.evaluateCreature(source); - } - final int totalValue = value; - list = CardLists.filter(srcList, c -> ComputerUtilCard.evaluateCreature(c) > totalValue + 30); - } else { - list = CardLists.getValidCards(srcList, sa.getParam("AITgts"), sa.getActivatingPlayer(), source, sa); - } - - if (!list.isEmpty() || sa.hasParam("AITgtsStrict") || alwaysStrict) { - return list; - } else { - return srcList; - } + if (source == null || !sa.hasParam("AITgts")) { + return srcList; } + CardCollection list; + String aiTgts = sa.getParam("AITgts"); + if (aiTgts.startsWith("BetterThan")) { + int value = 0; + if (aiTgts.endsWith("Source")) { + value = ComputerUtilCard.evaluateCreature(source); + if (source.isEnchanted()) { + for (Card enc : source.getEnchantedBy()) { + if (enc.getController().equals(ai)) { + value += 100; // is 100 per AI's own aura enough? + } + } + } + } else if (aiTgts.contains("EvalRating.")) { + value = AbilityUtils.calculateAmount(source, aiTgts.substring(aiTgts.indexOf(".") + 1), sa); + } else { + System.err.println("Warning: Unspecified AI target evaluation rating for SA " + sa); + value = ComputerUtilCard.evaluateCreature(source); + } + final int totalValue = value; + list = CardLists.filter(srcList, c -> ComputerUtilCard.evaluateCreature(c) > totalValue + 30); + } else { + list = CardLists.getValidCards(srcList, sa.getParam("AITgts"), sa.getActivatingPlayer(), source, sa); + } + + if (!list.isEmpty() || sa.hasParam("AITgtsStrict") || alwaysStrict) { + return list; + } return srcList; } diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java b/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java index 52cacd0283d..9518b852d63 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java @@ -815,7 +815,7 @@ public class ComputerUtilMana { String manaProduced = predictManafromSpellAbility(saPayment, ai, toPay); payMultipleMana(cost, manaProduced, ai); - // remove from available lists + // remove to prevent re-usage since resources don't get consumed sourcesForShards.values().removeIf(CardTraitPredicates.isHostCard(saPayment.getHostCard())); } else { final CostPayment pay = new CostPayment(saPayment.getPayCosts(), saPayment); @@ -828,8 +828,10 @@ public class ComputerUtilMana { // subtract mana from mana pool manapool.payManaFromAbility(sa, cost, saPayment); - // no need to remove abilities from resource map, - // once their costs are paid and consume resources, they can not be used again + // need to consider if another use is now prevented + if (!cost.isPaid() && saPayment.isActivatedAbility() && !saPayment.getRestrictions().canPlay(saPayment.getHostCard(), saPayment)) { + sourcesForShards.values().removeIf(s -> s == saPayment); + } if (hasConverge) { // hack to prevent converge re-using sources @@ -1662,7 +1664,6 @@ public class ComputerUtilMana { if (replaced.contains("C")) { manaMap.put(ManaAtom.COLORLESS, m); } - } } } 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 6cfc0b0600c..f964381fa5f 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java @@ -891,9 +891,6 @@ public class ChangeZoneAi extends SpellAbilityAi { CardCollection list = CardLists.getTargetableCards(game.getCardsIn(origin), sa); list = ComputerUtil.filterAITgts(sa, ai, list, true); - if (sa.hasParam("AITgtsOnlyBetterThanSelf")) { - list = CardLists.filter(list, card -> ComputerUtilCard.evaluateCreature(card) > ComputerUtilCard.evaluateCreature(source) + 30); - } if (source.isInZone(ZoneType.Hand)) { list = CardLists.filter(list, CardPredicates.nameNotEquals(source.getName())); // Don't get the same card back. diff --git a/forge-game/src/main/java/forge/game/ability/effects/RestartGameEffect.java b/forge-game/src/main/java/forge/game/ability/effects/RestartGameEffect.java index 32bb7126c0e..92fbc180d36 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/RestartGameEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/RestartGameEffect.java @@ -75,9 +75,8 @@ public class RestartGameEffect extends SpellAbilityEffect { p.clearController(); CardCollection newLibrary = new CardCollection(p.getCardsIn(restartZones, false)); - List filteredCards = null; if (leaveZone != null) { - filteredCards = CardLists.getValidCards(p.getCardsIn(leaveZone), leaveRestriction, p, sa.getHostCard(), sa); + List filteredCards = CardLists.getValidCards(p.getCardsIn(leaveZone), leaveRestriction, p, sa.getHostCard(), sa); newLibrary.addAll(filteredCards); } diff --git a/forge-game/src/main/java/forge/game/card/CardFactory.java b/forge-game/src/main/java/forge/game/card/CardFactory.java index 690b1535942..b800d8e0a25 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactory.java +++ b/forge-game/src/main/java/forge/game/card/CardFactory.java @@ -466,29 +466,29 @@ public class CardFactory { return new WrappedAbility(sa.getTrigger(), sa.getWrappedAbility().copy(newHost, controller, false), sa.getDecider()); } - public static CardCloneStates getCloneStates(final Card in, final Card out, final CardTraitBase sa) { - final Card host = sa.getHostCard(); + public static CardCloneStates getCloneStates(final Card in, final Card out, final CardTraitBase cause) { + final Card host = cause.getHostCard(); final Map origSVars = host.getSVars(); final List types = Lists.newArrayList(); final List keywords = Lists.newArrayList(); boolean KWifNew = false; final List removeKeywords = Lists.newArrayList(); List creatureTypes = null; - final CardCloneStates result = new CardCloneStates(in, sa); + final CardCloneStates result = new CardCloneStates(in, cause); - final String newName = sa.getParam("NewName"); + final String newName = cause.getParam("NewName"); ColorSet colors = null; - if (sa.hasParam("AddTypes")) { - types.addAll(Arrays.asList(sa.getParam("AddTypes").split(" & "))); + if (cause.hasParam("AddTypes")) { + types.addAll(Arrays.asList(cause.getParam("AddTypes").split(" & "))); } - if (sa.hasParam("SetCreatureTypes")) { - creatureTypes = ImmutableList.copyOf(sa.getParam("SetCreatureTypes").split(" ")); + if (cause.hasParam("SetCreatureTypes")) { + creatureTypes = ImmutableList.copyOf(cause.getParam("SetCreatureTypes").split(" ")); } - if (sa.hasParam("AddKeywords")) { - String kwString = sa.getParam("AddKeywords"); + if (cause.hasParam("AddKeywords")) { + String kwString = cause.getParam("AddKeywords"); if (kwString.startsWith("IfNew ")) { KWifNew = true; kwString = kwString.substring(6); @@ -496,21 +496,21 @@ public class CardFactory { keywords.addAll(Arrays.asList(kwString.split(" & "))); } - if (sa.hasParam("RemoveKeywords")) { - removeKeywords.addAll(Arrays.asList(sa.getParam("RemoveKeywords").split(" & "))); + if (cause.hasParam("RemoveKeywords")) { + removeKeywords.addAll(Arrays.asList(cause.getParam("RemoveKeywords").split(" & "))); } - if (sa.hasParam("AddColors")) { - colors = ColorSet.fromNames(sa.getParam("AddColors").split(",")); + if (cause.hasParam("AddColors")) { + colors = ColorSet.fromNames(cause.getParam("AddColors").split(",")); } - if (sa.hasParam("SetColor")) { - colors = ColorSet.fromNames(sa.getParam("SetColor").split(",")); + if (cause.hasParam("SetColor")) { + colors = ColorSet.fromNames(cause.getParam("SetColor").split(",")); } - if (sa.hasParam("SetColorByManaCost")) { - if (sa.hasParam("SetManaCost")) { - colors = ColorSet.fromManaCost(new ManaCost(new ManaCostParser(sa.getParam("SetManaCost")))); + if (cause.hasParam("SetColorByManaCost")) { + if (cause.hasParam("SetManaCost")) { + colors = ColorSet.fromManaCost(new ManaCost(new ManaCostParser(cause.getParam("SetManaCost")))); } else { colors = ColorSet.fromManaCost(host.getManaCost()); } @@ -522,56 +522,55 @@ public class CardFactory { // if something is cloning a facedown card, it only clones the // facedown state into original final CardState ret = new CardState(out, CardStateName.Original); - ret.copyFrom(in.getFaceDownState(), false, sa); + ret.copyFrom(in.getFaceDownState(), false, cause); result.put(CardStateName.Original, ret); } else if (in.isFlipCard()) { // if something is cloning a flip card, copy both original and // flipped state final CardState ret1 = new CardState(out, CardStateName.Original); - ret1.copyFrom(in.getState(CardStateName.Original), false, sa); + ret1.copyFrom(in.getState(CardStateName.Original), false, cause); result.put(CardStateName.Original, ret1); final CardState ret2 = new CardState(out, CardStateName.Flipped); - ret2.copyFrom(in.getState(CardStateName.Flipped), false, sa); + ret2.copyFrom(in.getState(CardStateName.Flipped), false, cause); result.put(CardStateName.Flipped, ret2); } else if (in.hasState(CardStateName.Secondary)) { final CardState ret1 = new CardState(out, CardStateName.Original); - ret1.copyFrom(in.getState(CardStateName.Original), false, sa); + ret1.copyFrom(in.getState(CardStateName.Original), false, cause); result.put(CardStateName.Original, ret1); final CardState ret2 = new CardState(out, CardStateName.Secondary); - ret2.copyFrom(in.getState(CardStateName.Secondary), false, sa); + ret2.copyFrom(in.getState(CardStateName.Secondary), false, cause); result.put(CardStateName.Secondary, ret2); - } else if (in.isTransformable() && sa instanceof SpellAbility && ( - ApiType.CopyPermanent.equals(((SpellAbility)sa).getApi()) || - ApiType.CopySpellAbility.equals(((SpellAbility)sa).getApi()) || - ApiType.ReplaceToken.equals(((SpellAbility)sa).getApi()) - )) { + } else if (in.isTransformable() && cause instanceof SpellAbility sa && ( + ApiType.CopyPermanent.equals(sa.getApi()) || + ApiType.CopySpellAbility.equals(sa.getApi()) || + ApiType.ReplaceToken.equals(sa.getApi()))) { // CopyPermanent can copy token final CardState ret1 = new CardState(out, CardStateName.Original); - ret1.copyFrom(in.getState(CardStateName.Original), false, sa); + ret1.copyFrom(in.getState(CardStateName.Original), false, cause); result.put(CardStateName.Original, ret1); final CardState ret2 = new CardState(out, CardStateName.Backside); - ret2.copyFrom(in.getState(CardStateName.Backside), false, sa); + ret2.copyFrom(in.getState(CardStateName.Backside), false, cause); result.put(CardStateName.Backside, ret2); } else if (in.isSplitCard()) { // for split cards, copy all three states final CardState ret1 = new CardState(out, CardStateName.Original); - ret1.copyFrom(in.getState(CardStateName.Original), false, sa); + ret1.copyFrom(in.getState(CardStateName.Original), false, cause); result.put(CardStateName.Original, ret1); final CardState ret2 = new CardState(out, CardStateName.LeftSplit); - ret2.copyFrom(in.getState(CardStateName.LeftSplit), false, sa); + ret2.copyFrom(in.getState(CardStateName.LeftSplit), false, cause); result.put(CardStateName.LeftSplit, ret2); final CardState ret3 = new CardState(out, CardStateName.RightSplit); - ret3.copyFrom(in.getState(CardStateName.RightSplit), false, sa); + ret3.copyFrom(in.getState(CardStateName.RightSplit), false, cause); result.put(CardStateName.RightSplit, ret3); } else { // in all other cases just copy the current state to original final CardState ret = new CardState(out, CardStateName.Original); - ret.copyFrom(in.getState(in.getCurrentStateName()), false, sa); + ret.copyFrom(in.getState(in.getCurrentStateName()), false, cause); result.put(CardStateName.Original, ret); } @@ -581,32 +580,32 @@ public class CardFactory { final CardState state = e.getValue(); // has Embalm Condition for extra changes of Vizier of Many Faces - if (sa.hasParam("Embalm") && !out.isEmbalmed()) { + if (cause.hasParam("Embalm") && !out.isEmbalmed()) { continue; } // update the names for the states - if (sa.hasParam("KeepName")) { + if (cause.hasParam("KeepName")) { state.setName(originalState.getName()); } else if (newName != null) { // convert NICKNAME descriptions? state.setName(newName); } - if (sa.hasParam("AddColors")) { + if (cause.hasParam("AddColors")) { state.addColor(colors.getColor()); } - if (sa.hasParam("SetColor") || sa.hasParam("SetColorByManaCost")) { + if (cause.hasParam("SetColor") || cause.hasParam("SetColorByManaCost")) { state.setColor(colors.getColor()); } - if (sa.hasParam("NonLegendary")) { + if (cause.hasParam("NonLegendary")) { state.removeType(CardType.Supertype.Legendary); } - if (sa.hasParam("RemoveCardTypes")) { - state.removeCardTypes(sa.hasParam("RemoveSubTypes")); + if (cause.hasParam("RemoveCardTypes")) { + state.removeCardTypes(cause.hasParam("RemoveSubTypes")); } state.addType(types); @@ -638,31 +637,31 @@ public class CardFactory { // CR 208.3 A noncreature object not on the battlefield has power or toughness only if it has a power and toughness printed on it. // currently only LKI can be trusted? - if ((sa.hasParam("SetPower") || sa.hasParam("SetToughness")) && + if ((cause.hasParam("SetPower") || cause.hasParam("SetToughness")) && (state.getType().isCreature() || (originalState != null && in.getOriginalState(originalState.getStateName()).getBasePowerString() != null))) { - if (sa.hasParam("SetPower")) { - state.setBasePower(AbilityUtils.calculateAmount(host, sa.getParam("SetPower"), sa)); + if (cause.hasParam("SetPower")) { + state.setBasePower(AbilityUtils.calculateAmount(host, cause.getParam("SetPower"), cause)); } - if (sa.hasParam("SetToughness")) { - state.setBaseToughness(AbilityUtils.calculateAmount(host, sa.getParam("SetToughness"), sa)); + if (cause.hasParam("SetToughness")) { + state.setBaseToughness(AbilityUtils.calculateAmount(host, cause.getParam("SetToughness"), cause)); } } - if (state.getType().isPlaneswalker() && sa.hasParam("SetLoyalty")) { - state.setBaseLoyalty(String.valueOf(AbilityUtils.calculateAmount(host, sa.getParam("SetLoyalty"), sa))); + if (state.getType().isPlaneswalker() && cause.hasParam("SetLoyalty")) { + state.setBaseLoyalty(String.valueOf(AbilityUtils.calculateAmount(host, cause.getParam("SetLoyalty"), cause))); } - if (sa.hasParam("RemoveCost")) { + if (cause.hasParam("RemoveCost")) { state.setManaCost(ManaCost.NO_COST); } - if (sa.hasParam("SetManaCost")) { - state.setManaCost(new ManaCost(new ManaCostParser(sa.getParam("SetManaCost")))); + if (cause.hasParam("SetManaCost")) { + state.setManaCost(new ManaCost(new ManaCostParser(cause.getParam("SetManaCost")))); } // SVars to add to clone - if (sa.hasParam("AddSVars") || sa.hasParam("GainTextSVars")) { - final String str = sa.getParamOrDefault("GainTextSVars", sa.getParam("AddSVars")); + if (cause.hasParam("AddSVars") || cause.hasParam("GainTextSVars")) { + final String str = cause.getParamOrDefault("GainTextSVars", cause.getParam("AddSVars")); for (final String s : str.split(",")) { if (origSVars.containsKey(s)) { final String actualsVar = origSVars.get(s); @@ -672,8 +671,8 @@ public class CardFactory { } // triggers to add to clone - if (sa.hasParam("AddTriggers")) { - for (final String s : sa.getParam("AddTriggers").split(",")) { + if (cause.hasParam("AddTriggers")) { + for (final String s : cause.getParam("AddTriggers").split(",")) { if (origSVars.containsKey(s)) { final String actualTrigger = origSVars.get(s); final Trigger parsedTrigger = TriggerHandler.parseTrigger(actualTrigger, out, true, state); @@ -683,8 +682,8 @@ public class CardFactory { } // abilities to add to clone - if (sa.hasParam("AddAbilities") || sa.hasParam("GainTextAbilities")) { - final String str = sa.getParamOrDefault("GainTextAbilities", sa.getParam("AddAbilities")); + if (cause.hasParam("AddAbilities") || cause.hasParam("GainTextAbilities")) { + final String str = cause.getParamOrDefault("GainTextAbilities", cause.getParam("AddAbilities")); for (final String s : str.split(",")) { if (origSVars.containsKey(s)) { final String actualAbility = origSVars.get(s); @@ -696,18 +695,18 @@ public class CardFactory { } // static abilities to add to clone - if (sa.hasParam("AddStaticAbilities")) { - final String str = sa.getParam("AddStaticAbilities"); + if (cause.hasParam("AddStaticAbilities")) { + final String str = cause.getParam("AddStaticAbilities"); for (final String s : str.split(",")) { if (origSVars.containsKey(s)) { final String actualStatic = origSVars.get(s); - state.addStaticAbility(StaticAbility.create(actualStatic, out, sa.getCardState(), true)); + state.addStaticAbility(StaticAbility.create(actualStatic, out, cause.getCardState(), true)); } } } - if (sa.hasParam("GainThisAbility") && sa instanceof SpellAbility) { - SpellAbility root = ((SpellAbility) sa).getRootAbility(); + if (cause.hasParam("GainThisAbility") && cause instanceof SpellAbility sa) { + SpellAbility root = sa.getRootAbility(); // Aurora Shifter if (root.isTrigger() && root.getTrigger().getSpawningAbility() != null) { @@ -724,35 +723,35 @@ public class CardFactory { } // Special Rules for Embalm and Eternalize - if (sa.isEmbalm() && sa.isIntrinsic()) { + if (cause.isEmbalm() && cause.isIntrinsic()) { String name = "embalm_" + TextUtil.fastReplace( TextUtil.fastReplace(host.getName(), ",", ""), " ", "_").toLowerCase(); state.setImageKey(StaticData.instance().getOtherImageKey(name, host.getSetCode())); } - if (sa.isEternalize() && sa.isIntrinsic()) { + if (cause.isEternalize() && cause.isIntrinsic()) { String name = "eternalize_" + TextUtil.fastReplace( TextUtil.fastReplace(host.getName(), ",", ""), " ", "_").toLowerCase(); state.setImageKey(StaticData.instance().getOtherImageKey(name, host.getSetCode())); } - if (sa.isKeyword(Keyword.OFFSPRING) && sa.isIntrinsic()) { + if (cause.isKeyword(Keyword.OFFSPRING) && cause.isIntrinsic()) { String name = "offspring_" + TextUtil.fastReplace( TextUtil.fastReplace(host.getName(), ",", ""), " ", "_").toLowerCase(); state.setImageKey(StaticData.instance().getOtherImageKey(name, host.getSetCode())); } - if (sa.isKeyword(Keyword.SQUAD) && sa.isIntrinsic()) { + if (cause.isKeyword(Keyword.SQUAD) && cause.isIntrinsic()) { String name = "squad_" + TextUtil.fastReplace( TextUtil.fastReplace(host.getName(), ",", ""), " ", "_").toLowerCase(); state.setImageKey(StaticData.instance().getOtherImageKey(name, host.getSetCode())); } - if (sa.hasParam("GainTextOf") && originalState != null) { + if (cause.hasParam("GainTextOf") && originalState != null) { state.setSetCode(originalState.getSetCode()); state.setRarity(originalState.getRarity()); state.setImageKey(originalState.getImageKey()); @@ -764,27 +763,27 @@ public class CardFactory { continue; } - if (sa.hasParam("SetPower") && sta.hasParam("SetPower")) + if (cause.hasParam("SetPower") && sta.hasParam("SetPower")) state.removeStaticAbility(sta); - if (sa.hasParam("SetToughness") && sta.hasParam("SetToughness")) + if (cause.hasParam("SetToughness") && sta.hasParam("SetToughness")) state.removeStaticAbility(sta); // currently only Changeling and similar should be affected by that // other cards using AddType$ ChosenType should not - if (sa.hasParam("SetCreatureTypes") && sta.hasParam("AddAllCreatureTypes")) { + if (cause.hasParam("SetCreatureTypes") && sta.hasParam("AddAllCreatureTypes")) { state.removeStaticAbility(sta); } - if ((sa.hasParam("SetColor") || sa.hasParam("SetColorByManaCost")) && sta.hasParam("SetColor")) { + if ((cause.hasParam("SetColor") || cause.hasParam("SetColorByManaCost")) && sta.hasParam("SetColor")) { state.removeStaticAbility(sta); } } // remove some keywords - if (sa.hasParam("SetCreatureTypes")) { + if (cause.hasParam("SetCreatureTypes")) { state.removeIntrinsicKeyword(Keyword.CHANGELING); } - if (sa.hasParam("SetColor") || sa.hasParam("SetColorByManaCost")) { + if (cause.hasParam("SetColor") || cause.hasParam("SetColorByManaCost")) { state.removeIntrinsicKeyword(Keyword.DEVOID); } } diff --git a/forge-game/src/main/java/forge/game/spellability/AbilityActivated.java b/forge-game/src/main/java/forge/game/spellability/AbilityActivated.java index ce10ab07de9..fcdc1b77f54 100644 --- a/forge-game/src/main/java/forge/game/spellability/AbilityActivated.java +++ b/forge-game/src/main/java/forge/game/spellability/AbilityActivated.java @@ -92,7 +92,7 @@ public abstract class AbilityActivated extends SpellAbility implements Cloneable return false; } - if (!(this.getRestrictions().canPlay(c, this))) { + if (!getRestrictions().canPlay(c, this)) { return false; } diff --git a/forge-gui/res/cardsfolder/k/kami_of_twisted_reflection.txt b/forge-gui/res/cardsfolder/k/kami_of_twisted_reflection.txt index 5d531b281ea..a2dfd611327 100644 --- a/forge-gui/res/cardsfolder/k/kami_of_twisted_reflection.txt +++ b/forge-gui/res/cardsfolder/k/kami_of_twisted_reflection.txt @@ -2,5 +2,5 @@ Name:Kami of Twisted Reflection ManaCost:1 U U Types:Creature Spirit PT:2/2 -A:AB$ ChangeZone | Cost$ Sac<1/CARDNAME> | ValidTgts$ Creature.YouCtrl | AITgts$ Creature.Other+YouCtrl | AITgtsOnlyBetterThanSelf$ True | TgtPrompt$ Select target creature you control | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return target creature you control to its owner's hand. +A:AB$ ChangeZone | Cost$ Sac<1/CARDNAME> | ValidTgts$ Creature.YouCtrl | AITgts$ BetterThanSource | TgtPrompt$ Select target creature you control | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return target creature you control to its owner's hand. Oracle:Sacrifice Kami of Twisted Reflection: Return target creature you control to its owner's hand. diff --git a/forge-gui/res/cardsfolder/p/parker_luck.txt b/forge-gui/res/cardsfolder/p/parker_luck.txt index a7fac4e599b..802200a0944 100644 --- a/forge-gui/res/cardsfolder/p/parker_luck.txt +++ b/forge-gui/res/cardsfolder/p/parker_luck.txt @@ -8,4 +8,5 @@ SVar:DBLoseLife:DB$ LoseLife | Defined$ Player.IsRemembered | LifeAmount$ X SVar:DBChangeZoneAll:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered | Origin$ Library | Destination$ Hand | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Count$ValidLibrary Card.IsRemembered+!RememberedPlayerOwn$CardManaCost +AI:RemoveDeck:All Oracle:At the beginning of your end step, two target players each reveal the top card of their library. They each lose life equal to the mana value of the card revealed by the other player. Then they each put the card they revealed into their hand. diff --git a/forge-gui/res/cardsfolder/s/spider_man_2099.txt b/forge-gui/res/cardsfolder/s/spider_man_2099.txt index e9c82d77279..3023ae58621 100644 --- a/forge-gui/res/cardsfolder/s/spider_man_2099.txt +++ b/forge-gui/res/cardsfolder/s/spider_man_2099.txt @@ -6,7 +6,7 @@ K:Double Strike K:Vigilance S:Mode$ CantBeCast | ValidCard$ Card.Self | EffectZone$ All | Caster$ Player.Active | CheckSVar$ Z | SVarCompare$ LE3 | Description$ You can't cast CARDNAME during your first, second, or third turns of the game. SVar:Z:Count$YourTurns -T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | CheckSVar$ Y | SVarCompare$ EQ1 | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ At the beginning of your end step, if you've played a land or cast a spell this turn from anywhere other than your hand, CARDNAME deals damage equal to his power to any target. +T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | CheckSVar$ Y | SVarCompare$ GE1 | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ At the beginning of your end step, if you've played a land or cast a spell this turn from anywhere other than your hand, CARDNAME deals damage equal to his power to any target. SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Any | NumDmg$ X | AILogic$ PowerDmg SVar:X:Count$CardPower T:Mode$ LandPlayed | Origin$ Exile,Library,Graveyard | ValidCard$ Land.YouCtrl | Execute$ StoreVar | Static$ True From c0f56158859d6359b0267999dda2a8a9a0902955 Mon Sep 17 00:00:00 2001 From: Chris H Date: Thu, 25 Sep 2025 23:37:42 -0400 Subject: [PATCH 253/355] Manually fixing version touches --- .../adventure/data/AdventureEventData.java | 408 +++++++++++------- .../src/forge/adventure/scene/DuelScene.java | 2 +- .../src/forge/adventure/scene/EventScene.java | 5 +- .../util/AdventureEventController.java | 29 +- 4 files changed, 269 insertions(+), 175 deletions(-) diff --git a/forge-gui-mobile/src/forge/adventure/data/AdventureEventData.java b/forge-gui-mobile/src/forge/adventure/data/AdventureEventData.java index a47591b6684..b5d45a4c92a 100644 --- a/forge-gui-mobile/src/forge/adventure/data/AdventureEventData.java +++ b/forge-gui-mobile/src/forge/adventure/data/AdventureEventData.java @@ -32,6 +32,7 @@ import java.util.stream.Collectors; public class AdventureEventData implements Serializable { private static final long serialVersionUID = 1L; + private static final int JUMPSTART_TO_PICK_FROM = 6; public transient BoosterDraft draft; public AdventureEventParticipant[] participants; public int rounds; @@ -78,7 +79,6 @@ public class AdventureEventData implements Serializable { matchesLost = other.matchesLost; } - public Deck[] getRewardPacks(int count) { Deck[] ret = new Deck[count]; for (int i = 0; i < count; i++) { @@ -104,173 +104,17 @@ public class AdventureEventData implements Serializable { return; cardBlockName = cardBlock.getName(); - //Below all to be fully generated in later release - rewardPacks = getRewardPacks(3); - generateParticipants(7); - if (cardBlock != null) { - packConfiguration = getBoosterConfiguration(cardBlock); - - rewards = new AdventureEventData.AdventureEventReward[4]; - AdventureEventData.AdventureEventReward r0 = new AdventureEventData.AdventureEventReward(); - AdventureEventData.AdventureEventReward r1 = new AdventureEventData.AdventureEventReward(); - AdventureEventData.AdventureEventReward r2 = new AdventureEventData.AdventureEventReward(); - AdventureEventData.AdventureEventReward r3 = new AdventureEventData.AdventureEventReward(); - r0.minWins = 0; - r0.maxWins = 0; - r0.cardRewards = new Deck[]{rewardPacks[0]}; - rewards[0] = r0; - r1.minWins = 1; - r1.maxWins = 3; - r1.cardRewards = new Deck[]{rewardPacks[1], rewardPacks[2]}; - rewards[1] = r1; - r2.minWins = 2; - r2.maxWins = 3; - r2.itemRewards = new String[]{"Challenge Coin"}; - rewards[2] = r2; - } + setupDraftRewards(); } else if (format == AdventureEventController.EventFormat.Jumpstart) { - int numPacksToPickFrom = 6; - generateParticipants(7); - cardBlock = pickJumpstartCardBlock(); if (cardBlock == null) return; cardBlockName = cardBlock.getName(); - jumpstartBoosters = AdventureEventController.instance().getJumpstartBoosters(cardBlock, numPacksToPickFrom); - + jumpstartBoosters = AdventureEventController.instance().getJumpstartBoosters(cardBlock, JUMPSTART_TO_PICK_FROM); packConfiguration = new String[]{cardBlock.getLandSet().getCode(), cardBlock.getLandSet().getCode(), cardBlock.getLandSet().getCode()}; - for (AdventureEventParticipant participant : participants) { - List availableOptions = AdventureEventController.instance().getJumpstartBoosters(cardBlock, numPacksToPickFrom); - List chosenPacks = new ArrayList<>(); - - Map> themeMap = new HashMap<>(); - - //1. Search for matching themes from deck names, fill deck with them if possible - for (Deck option : availableOptions) { - // This matches up theme for all except DMU - with only 2 per color the next part will handle that - String theme = option.getName().replaceAll("\\d$", "").trim(); - if (!themeMap.containsKey(theme)) { - themeMap.put(theme, new ArrayList<>()); - } - themeMap.get(theme).add(option); - } - - String themeAdded = ""; - boolean done = false; - while (!done) { - for (int i = packConfiguration.length - chosenPacks.size(); i > 1; i--) { - if (themeAdded.isEmpty()) { - for (String theme : themeMap.keySet()) { - if (themeMap.get(theme).size() >= i) { - themeAdded = theme; - break; - } - } - } - } - if (themeAdded.isEmpty()) { - done = true; - } else { - chosenPacks.addAll(themeMap.get(themeAdded).subList(0, Math.min(themeMap.get(themeAdded).size(), packConfiguration.length - chosenPacks.size()))); - availableOptions.removeAll(themeMap.get(themeAdded)); - themeMap.remove(themeAdded); - themeAdded = ""; - } - } - - //2. Fill remaining slots with colors already picked whenever possible - Map> colorMap = new HashMap<>(); - for (Deck option : availableOptions) { - if (option.getTags().contains("black")) - colorMap.computeIfAbsent("black", (k) -> new ArrayList<>()).add(option); - if (option.getTags().contains("blue")) - colorMap.computeIfAbsent("blue", (k) -> new ArrayList<>()).add(option); - if (option.getTags().contains("green")) - colorMap.computeIfAbsent("green", (k) -> new ArrayList<>()).add(option); - if (option.getTags().contains("red")) - colorMap.computeIfAbsent("red", (k) -> new ArrayList<>()).add(option); - if (option.getTags().contains("white")) - colorMap.computeIfAbsent("white", (k) -> new ArrayList<>()).add(option); - if (option.getTags().contains("multicolor")) - colorMap.computeIfAbsent("multicolor", (k) -> new ArrayList<>()).add(option); - if (option.getTags().contains("colorless")) - colorMap.computeIfAbsent("colorless", (k) -> new ArrayList<>()).add(option); - } - - done = false; - String colorAdded = ""; - while (!done) { - List colorsAlreadyPicked = new ArrayList<>(); - for (Deck picked : chosenPacks) { - if (picked.getTags().contains("black")) colorsAlreadyPicked.add("black"); - if (picked.getTags().contains("blue")) colorsAlreadyPicked.add("blue"); - if (picked.getTags().contains("green")) colorsAlreadyPicked.add("green"); - if (picked.getTags().contains("red")) colorsAlreadyPicked.add("red"); - if (picked.getTags().contains("white")) colorsAlreadyPicked.add("white"); - if (picked.getTags().contains("multicolor")) colorsAlreadyPicked.add("multicolor"); - if (picked.getTags().contains("colorless")) colorsAlreadyPicked.add("colorless"); - } - - while (colorAdded.isEmpty() && !colorsAlreadyPicked.isEmpty()) { - String colorToTry = Aggregates.removeRandom(colorsAlreadyPicked); - for (Deck toCheck : availableOptions) { - if (toCheck.getTags().contains(colorToTry)) { - colorAdded = colorToTry; - chosenPacks.add(toCheck); - availableOptions.remove(toCheck); - break; - } - } - } - //3. If no matching color found and need more packs, add any available at random. - if (packConfiguration.length > chosenPacks.size() && colorAdded.isEmpty() && !availableOptions.isEmpty()) { - chosenPacks.add(Aggregates.removeRandom(availableOptions)); - colorAdded = ""; - } else { - done = colorAdded.isEmpty() || packConfiguration.length <= chosenPacks.size(); - colorAdded = ""; - } - - } - participant.registeredDeck = new Deck(); - for (Deck chosen : chosenPacks) { - participant.registeredDeck.getMain().addAllFlat(chosen.getMain().toFlatList()); - } - } - - rewards = new AdventureEventData.AdventureEventReward[4]; - AdventureEventData.AdventureEventReward r0 = new AdventureEventData.AdventureEventReward(); - AdventureEventData.AdventureEventReward r1 = new AdventureEventData.AdventureEventReward(); - AdventureEventData.AdventureEventReward r2 = new AdventureEventData.AdventureEventReward(); - AdventureEventData.AdventureEventReward r3 = new AdventureEventData.AdventureEventReward(); - - RewardData r0gold = new RewardData(); - r0gold.count = 100; - r0gold.type = "gold"; - r0.rewards = new RewardData[]{r0gold}; - r0.minWins = 1; - r0.maxWins = 1; - rewards[0] = r0; - RewardData r1gold = new RewardData(); - r1gold.count = 200; - r1gold.type = "gold"; - r1.rewards = new RewardData[]{r1gold}; - r1.minWins = 2; - r1.maxWins = 2; - rewards[1] = r1; - r2.minWins = 3; - r2.maxWins = 3; - RewardData r2gold = new RewardData(); - r2gold.count = 500; - r2gold.type = "gold"; - r2.rewards = new RewardData[]{r2gold}; - rewards[2] = r2; - r3.minWins = 0; - r3.maxWins = 3; - rewards[3] = r3; - //r3 will be the selected card packs + setupJumpstartRewards(); } } @@ -292,7 +136,7 @@ public class AdventureEventData implements Serializable { Random placeholder = MyRandom.getRandom(); MyRandom.setRandom(getEventRandom()); if (draft == null && (eventStatus == AdventureEventController.EventStatus.Available || eventStatus == AdventureEventController.EventStatus.Entered)) { - draft = BoosterDraft.createDraft(LimitedPoolType.Block, getCardBlock(), packConfiguration, 8); + draft = BoosterDraft.createDraft(LimitedPoolType.Block, getCardBlock(), packConfiguration, participants.length); registeredDeck = draft.getHumanPlayer().getDeck(); assignPlayerNames(draft); } @@ -309,6 +153,7 @@ public class AdventureEventData implements Serializable { private static final Predicate filterStandard = FModel.getFormats().getStandard().editionLegalPredicate; public static Predicate selectSetPool() { + // Should we negate any of these to avoid overlap? final int rollD100 = MyRandom.getRandom().nextInt(100); Predicate rolledFilter; if (rollD100 < 30) { @@ -323,7 +168,6 @@ public class AdventureEventData implements Serializable { return rolledFilter; } - private CardBlock pickWeightedCardBlock() { CardEdition.Collection editions = FModel.getMagicDb().getEditions(); ConfigData configData = Config.instance().getConfigData(); @@ -432,6 +276,66 @@ public class AdventureEventData implements Serializable { return legalBlocks.isEmpty() ? null : Aggregates.random(legalBlocks); } + private void setupDraftRewards() { + //Below all to be fully generated in later release + rewardPacks = getRewardPacks(3); + if (cardBlock != null) { + packConfiguration = getBoosterConfiguration(cardBlock); + + rewards = new AdventureEventData.AdventureEventReward[4]; + AdventureEventData.AdventureEventReward r0 = new AdventureEventData.AdventureEventReward(); + AdventureEventData.AdventureEventReward r1 = new AdventureEventData.AdventureEventReward(); + AdventureEventData.AdventureEventReward r2 = new AdventureEventData.AdventureEventReward(); + AdventureEventData.AdventureEventReward r3 = new AdventureEventData.AdventureEventReward(); + r0.minWins = 0; + r0.maxWins = 0; + r0.cardRewards = new Deck[]{rewardPacks[0]}; + rewards[0] = r0; + r1.minWins = 1; + r1.maxWins = 3; + r1.cardRewards = new Deck[]{rewardPacks[1], rewardPacks[2]}; + rewards[1] = r1; + r2.minWins = 2; + r2.maxWins = 3; + r2.itemRewards = new String[]{"Challenge Coin"}; + rewards[2] = r2; + } + } + + private void setupJumpstartRewards() { + rewards = new AdventureEventData.AdventureEventReward[4]; + AdventureEventData.AdventureEventReward r0 = new AdventureEventData.AdventureEventReward(); + AdventureEventData.AdventureEventReward r1 = new AdventureEventData.AdventureEventReward(); + AdventureEventData.AdventureEventReward r2 = new AdventureEventData.AdventureEventReward(); + AdventureEventData.AdventureEventReward r3 = new AdventureEventData.AdventureEventReward(); + + RewardData r0gold = new RewardData(); + r0gold.count = 100; + r0gold.type = "gold"; + r0.rewards = new RewardData[]{r0gold}; + r0.minWins = 1; + r0.maxWins = 1; + rewards[0] = r0; + RewardData r1gold = new RewardData(); + r1gold.count = 200; + r1gold.type = "gold"; + r1.rewards = new RewardData[]{r1gold}; + r1.minWins = 2; + r1.maxWins = 2; + rewards[1] = r1; + r2.minWins = 3; + r2.maxWins = 3; + RewardData r2gold = new RewardData(); + r2gold.count = 500; + r2gold.type = "gold"; + r2.rewards = new RewardData[]{r2gold}; + rewards[2] = r2; + r3.minWins = 0; + r3.maxWins = 3; + rewards[3] = r3; + //r3 will be the selected card packs + } + public String[] getBoosterConfiguration(CardBlock selectedBlock) { Random placeholder = MyRandom.getRandom(); @@ -465,6 +369,106 @@ public class AdventureEventData implements Serializable { } participants[numberOfOpponents] = getHumanPlayer(); + + if (format == AdventureEventController.EventFormat.Jumpstart) { + for (AdventureEventParticipant participant : participants) { + List availableOptions = AdventureEventController.instance().getJumpstartBoosters(cardBlock, JUMPSTART_TO_PICK_FROM); + List chosenPacks = new ArrayList<>(); + + Map> themeMap = new HashMap<>(); + + //1. Search for matching themes from deck names, fill deck with them if possible + for (Deck option : availableOptions) { + // This matches up theme for all except DMU - with only 2 per color the next part will handle that + String theme = option.getName().replaceAll("\\d$", "").trim(); + if (!themeMap.containsKey(theme)) { + themeMap.put(theme, new ArrayList<>()); + } + themeMap.get(theme).add(option); + } + + String themeAdded = ""; + boolean done = false; + while (!done) { + for (int i = packConfiguration.length - chosenPacks.size(); i > 1; i--) { + if (themeAdded.isEmpty()) { + for (String theme : themeMap.keySet()) { + if (themeMap.get(theme).size() >= i) { + themeAdded = theme; + break; + } + } + } + } + if (themeAdded.isEmpty()) { + done = true; + } else { + chosenPacks.addAll(themeMap.get(themeAdded).subList(0, Math.min(themeMap.get(themeAdded).size(), packConfiguration.length - chosenPacks.size()))); + availableOptions.removeAll(themeMap.get(themeAdded)); + themeMap.remove(themeAdded); + themeAdded = ""; + } + } + + //2. Fill remaining slots with colors already picked whenever possible + Map> colorMap = new HashMap<>(); + for (Deck option : availableOptions) { + if (option.getTags().contains("black")) + colorMap.computeIfAbsent("black", (k) -> new ArrayList<>()).add(option); + if (option.getTags().contains("blue")) + colorMap.computeIfAbsent("blue", (k) -> new ArrayList<>()).add(option); + if (option.getTags().contains("green")) + colorMap.computeIfAbsent("green", (k) -> new ArrayList<>()).add(option); + if (option.getTags().contains("red")) + colorMap.computeIfAbsent("red", (k) -> new ArrayList<>()).add(option); + if (option.getTags().contains("white")) + colorMap.computeIfAbsent("white", (k) -> new ArrayList<>()).add(option); + if (option.getTags().contains("multicolor")) + colorMap.computeIfAbsent("multicolor", (k) -> new ArrayList<>()).add(option); + if (option.getTags().contains("colorless")) + colorMap.computeIfAbsent("colorless", (k) -> new ArrayList<>()).add(option); + } + + done = false; + String colorAdded = ""; + while (!done) { + List colorsAlreadyPicked = new ArrayList<>(); + for (Deck picked : chosenPacks) { + if (picked.getTags().contains("black")) colorsAlreadyPicked.add("black"); + if (picked.getTags().contains("blue")) colorsAlreadyPicked.add("blue"); + if (picked.getTags().contains("green")) colorsAlreadyPicked.add("green"); + if (picked.getTags().contains("red")) colorsAlreadyPicked.add("red"); + if (picked.getTags().contains("white")) colorsAlreadyPicked.add("white"); + if (picked.getTags().contains("multicolor")) colorsAlreadyPicked.add("multicolor"); + if (picked.getTags().contains("colorless")) colorsAlreadyPicked.add("colorless"); + } + + while (colorAdded.isEmpty() && !colorsAlreadyPicked.isEmpty()) { + String colorToTry = Aggregates.removeRandom(colorsAlreadyPicked); + for (Deck toCheck : availableOptions) { + if (toCheck.getTags().contains(colorToTry)) { + colorAdded = colorToTry; + chosenPacks.add(toCheck); + availableOptions.remove(toCheck); + break; + } + } + } + //3. If no matching color found and need more packs, add any available at random. + if (packConfiguration.length > chosenPacks.size() && colorAdded.isEmpty() && !availableOptions.isEmpty()) { + chosenPacks.add(Aggregates.removeRandom(availableOptions)); + colorAdded = ""; + } else { + done = colorAdded.isEmpty() || packConfiguration.length <= chosenPacks.size(); + colorAdded = ""; + } + } + participant.registeredDeck = new Deck(); + for (Deck chosen : chosenPacks) { + participant.registeredDeck.getMain().addAllFlat(chosen.getMain().toFlatList()); + } + } + } } private void assignPlayerNames(BoosterDraft draft) { @@ -517,6 +521,31 @@ public class AdventureEventData implements Serializable { } matches.get(round).add(match); } + } else if (style == AdventureEventController.EventStyle.RoundRobin) { + // In a roundrobin everyone plays everyone else once + // We do have this logic already in ForgeTOurnament, we should see if we could reuse it + matches.put(round, new ArrayList<>()); + activePlayers = Arrays.stream(participants).collect(Collectors.toList()); + + if (round > 1) { + AdventureEventParticipant pivot = activePlayers.remove(0); + for(int i = 1; i < round; i++) { + // Rotate X amount of players, where X is the current round-1 + AdventureEventParticipant rotate = activePlayers.remove(0); + activePlayers.add(rotate); + } + activePlayers.add(0, pivot); + } + + int numPlayers = activePlayers.size(); + for (int i = 0; i < numPlayers / 2; i++) { + AdventureEventMatch match = new AdventureEventMatch(); + match.p1 = activePlayers.get(i); + match.p2 = activePlayers.get(numPlayers - i - 1); + matches.get(round).add(match); + } + } else { + System.out.println(style + " not yet implemented!!!"); } return matches.get(currentRound); } @@ -579,7 +608,58 @@ public class AdventureEventData implements Serializable { } //todo: more robust logic for event types that can be won without perfect record (Swiss w/cut, round robin) - playerWon = matchesLost == 0 || matchesWon == rounds; + if (style == AdventureEventController.EventStyle.Bracket) { + playerWon = matchesLost == 0 || matchesWon == rounds; + } else if (style == AdventureEventController.EventStyle.RoundRobin) { + if (matchesWon == rounds) { + playerWon = true; + } else { + //If multiple players are tied for first, only the one with the best tiebreaker wins + List topPlayers = new ArrayList<>(); + int bestRecord = 0; + for (AdventureEventParticipant p : participants) { + if (p.wins > bestRecord) { + bestRecord = p.wins; + topPlayers.clear(); + topPlayers.add(p); + } else if (p.wins == bestRecord) { + topPlayers.add(p); + } + } + if (topPlayers.size() == 1) { + playerWon = topPlayers.get(0).getName().equals(getHumanPlayer().getName()); + } else { + //multiple players tied for first, use tiebreaker + Map tiebreakers = new HashMap<>(); + for (AdventureEventParticipant p : topPlayers) { + int tb = 0; + for (AdventureEventMatch m : matches.values().stream().flatMap(List::stream).collect(Collectors.toList())) { + if (m.p1 == p && m.winner != null && m.winner != p) { + tb += m.p2.wins; + } else if (m.p2 == p && m.winner != null && m.winner != p) { + tb += m.p1.wins; + } + } + tiebreakers.put(p, tb); + } + int bestTiebreaker = 0; + AdventureEventParticipant winner = null; + boolean tie = false; + for (AdventureEventParticipant p : tiebreakers.keySet()) { + if (tiebreakers.get(p) > bestTiebreaker) { + bestTiebreaker = tiebreakers.get(p); + winner = p; + tie = false; + } else if (tiebreakers.get(p) == bestTiebreaker) { + tie = true; + } + } + playerWon = !tie && winner != null && winner.getName().equals(getHumanPlayer().getName()); + } + } + } else { + playerWon = false; + } eventStatus = AdventureEventController.EventStatus.Awarded; } @@ -809,7 +889,7 @@ public class AdventureEventData implements Serializable { public boolean isNoSell = false; } - enum PairingStyle { + public enum PairingStyle { SingleElimination, DoubleElimination, Swiss, diff --git a/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java b/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java index f7f1b0e77c1..c974b02e9c1 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java @@ -277,7 +277,7 @@ public class DuelScene extends ForgeScene { currentEnemy = enemy.getData(); boolean bossBattle = currentEnemy.boss; - for (int i = 0; i < 8 && currentEnemy != null; i++) { + for (int i = 0; i < playerCount && currentEnemy != null; i++) { Deck deck; if (this.chaosBattle) { //random challenge for chaos mode diff --git a/forge-gui-mobile/src/forge/adventure/scene/EventScene.java b/forge-gui-mobile/src/forge/adventure/scene/EventScene.java index efa8ea274b6..1c7c1828d6b 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/EventScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/EventScene.java @@ -51,6 +51,7 @@ public class EventScene extends MenuScene implements IAfterMatch { static PointOfInterestChanges changes; private Array entryDialog; + private AdventureEventData.AdventureEventMatch humanMatch = null; private int packsSelected = 0; //Used for meta drafts, booster drafts will use existing logic. @@ -490,7 +491,7 @@ public class EventScene extends MenuScene implements IAfterMatch { } public void startRound() { - for (AdventureEventData.AdventureEventMatch match : currentEvent.matches.get(currentEvent.currentRound)) { + for (AdventureEventData.AdventureEventMatch match : currentEvent.getMatches(currentEvent.currentRound)) { match.round = currentEvent.currentRound; if (match.winner != null) continue; @@ -539,8 +540,6 @@ public class EventScene extends MenuScene implements IAfterMatch { } } - AdventureEventData.AdventureEventMatch humanMatch = null; - public void setWinner(boolean winner, boolean isArena) { if (winner) { humanMatch.winner = humanMatch.p1; diff --git a/forge-gui-mobile/src/forge/adventure/util/AdventureEventController.java b/forge-gui-mobile/src/forge/adventure/util/AdventureEventController.java index 2e6c1c1d1d5..15a3b2100c5 100644 --- a/forge-gui-mobile/src/forge/adventure/util/AdventureEventController.java +++ b/forge-gui-mobile/src/forge/adventure/util/AdventureEventController.java @@ -5,6 +5,7 @@ import forge.StaticData; import forge.adventure.data.AdventureEventData; import forge.adventure.player.AdventurePlayer; import forge.adventure.pointofintrest.PointOfInterestChanges; +import forge.card.CardEdition; import forge.deck.Deck; import forge.item.BoosterPack; import forge.item.PaperCard; @@ -99,8 +100,9 @@ public class AdventureEventController implements Serializable { AdventureEventData e; - // TODO After a certain amount of wins, stop offering jump start events - if (random.nextInt(10) <= 2) { + // After a certain amount of wins, stop offering jump start events + if (Current.player().getStatistic().totalWins() < 10 && + random.nextInt(10) <= 2) { e = new AdventureEventData(eventSeed, EventFormat.Jumpstart); } else { e = new AdventureEventData(eventSeed, EventFormat.Draft); @@ -110,12 +112,26 @@ public class AdventureEventController implements Serializable { //covers cases where (somehow) editions that do not match the event style have been picked up return null; } + + // If chosen event seed recommends a 4 person pod, run it as a RoundRobin + CardEdition firstSet = e.cardBlock.getSets().get(0); + int podSize = firstSet.getDraftOptions().getRecommendedPodSize(); + e.sourceID = pointID; e.eventOrigin = eventOrigin; - e.eventRules = new AdventureEventData.AdventureEventRules(e.format, changes == null ? 1f : changes.getTownPriceModifier()); - e.style = style; + e.style = podSize == 4 ? EventStyle.RoundRobin : style; - switch (style) { + AdventureEventData.PairingStyle pairingStyle; + if (e.style == EventStyle.RoundRobin) { + pairingStyle = AdventureEventData.PairingStyle.RoundRobin; + } else { + pairingStyle = AdventureEventData.PairingStyle.SingleElimination; + } + + e.eventRules = new AdventureEventData.AdventureEventRules(e.format, pairingStyle, changes == null ? 1f : changes.getTownPriceModifier()); + e.generateParticipants(podSize - 1); //-1 to account for the player + + switch (e.style) { case Swiss: case Bracket: e.rounds = (e.participants.length / 2) - 1; @@ -139,9 +155,8 @@ public class AdventureEventController implements Serializable { output.setComment(setCode); return output; } - public Deck generateBoosterByColor(String color) - { + public Deck generateBoosterByColor(String color) { List cards = BoosterPack.fromColor(color).getCards(); Deck output = new Deck(); output.getMain().add(cards); From 1b419a13e8837bb48bd766095d1aa215687ff390 Mon Sep 17 00:00:00 2001 From: Agetian Date: Fri, 26 Sep 2025 16:58:37 +0300 Subject: [PATCH 254/355] - Fix isWebSligned in Card. - Add puzzleds PS_SPM1 and PS_TLA1. --- .../src/main/java/forge/game/card/Card.java | 2 +- forge-gui/res/puzzle/PS_SPM1.pzl | 16 ++++++++++++++++ forge-gui/res/puzzle/PS_TLA1.pzl | 17 +++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 forge-gui/res/puzzle/PS_SPM1.pzl create mode 100644 forge-gui/res/puzzle/PS_TLA1.pzl diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 776f9f6a0ae..37722d54e81 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -6861,7 +6861,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr } public boolean isWebSlinged() { - return getCastSA() != null & getCastSA().isAlternativeCost(AlternativeCost.WebSlinging); + return getCastSA() != null && getCastSA().isAlternativeCost(AlternativeCost.WebSlinging); } public boolean isSpecialized() { diff --git a/forge-gui/res/puzzle/PS_SPM1.pzl b/forge-gui/res/puzzle/PS_SPM1.pzl new file mode 100644 index 00000000000..84014ec7896 --- /dev/null +++ b/forge-gui/res/puzzle/PS_SPM1.pzl @@ -0,0 +1,16 @@ +[metadata] +Name:Possibility Storm - Marvel's Spider-Man #01 +URL:https://i1.wp.com/www.possibilitystorm.com/wp-content/uploads/2025/09/latest-1-scaled.jpg?ssl=1 +Goal:Win +Turns:1 +Difficulty:Uncommon +Description:Win this turn. Ensure your solution satisfies all possible blocks. Good luck! +[state] +turn=1 +activeplayer=p0 +activephase=MAIN1 +p0life=20 +p0hand=Rhino, Barreling Brute;Spider-Man India;Daily Bugle Reporters;Become Brutes;Lurking Lizards +p0battlefield=Scarlet Spider, Ben Reilly;Spider Manifestation;Gene Pollinator;Forest;Forest;Forest;Plains;Plains;Kavaron, Memorial World|Counters:CHARGE=2 +p1life=14 +p1battlefield=Carnage, Crimson Chaos diff --git a/forge-gui/res/puzzle/PS_TLA1.pzl b/forge-gui/res/puzzle/PS_TLA1.pzl new file mode 100644 index 00000000000..63ccd26d299 --- /dev/null +++ b/forge-gui/res/puzzle/PS_TLA1.pzl @@ -0,0 +1,17 @@ +[metadata] +Name:Possibility Storm - Avatar the Last Airbender #01 +URL:https://i2.wp.com/www.possibilitystorm.com/wp-content/uploads/2025/08/latest-3-scaled.jpg?ssl=1 +Goal:Win +Turns:1 +Difficulty:Rare +Description:Win this turn. Your Forest is a 0/0 creature (with one +1/+1 counter on it.) Ensure your solution satisfies all blocks. Good luck! +[state] +turn=1 +activeplayer=p0 +activephase=MAIN1 +p0life=3 +p0hand=Jeong Jeong's Deserters;Earthbending Student;Bulk Up;How to Start a Riot +p0battlefield=Haru, Hidden Talent;Garruk's Uprising;Forest|Id:1;Forgotten Monument;Forgotten Monument;Forgotten Monument;Restless Ridgeline;Cavernous Maw +p1life=11 +p1battlefield=Vindictive Warden;Vindictive Warden +p0precast=Haru, Hidden Talent:TrigEarthbend->1 From 6dd10be044733f0cc06ca1df4947b471524602f2 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Fri, 26 Sep 2025 17:00:33 +0200 Subject: [PATCH 255/355] Update wild_pack_squad.txt Closes #8786 --- forge-gui/res/cardsfolder/w/wild_pack_squad.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/w/wild_pack_squad.txt b/forge-gui/res/cardsfolder/w/wild_pack_squad.txt index 65b255a3f89..d950b866108 100644 --- a/forge-gui/res/cardsfolder/w/wild_pack_squad.txt +++ b/forge-gui/res/cardsfolder/w/wild_pack_squad.txt @@ -1,7 +1,7 @@ Name:Wild Pack Squad ManaCost:2 W Types:Creature Human Mercenary -PT:2/2 +PT:2/3 T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ At the beginning of combat on your turn, up to one target creature gains first strike and vigilance until end of turn. SVar:TrigPump:DB$ Pump | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one target creature | KW$ First Strike & Vigilance SVar:PlayMain1:TRUE From fd5555fdd6fc891243ed4a6096eccc0f13322781 Mon Sep 17 00:00:00 2001 From: Paul Hammerton Date: Fri, 26 Sep 2025 17:46:48 +0100 Subject: [PATCH 256/355] Edition updates: AA3, AA4, ECL, MAR, PMEI, SLD, TLE --- forge-gui/res/editions/Arena Anthology 3.txt | 44 +++++++++--------- forge-gui/res/editions/Arena Anthology 4.txt | 46 +++++++++---------- .../Avatar The Last Airbender Eternal.txt | 2 +- forge-gui/res/editions/Lorwyn Eclipsed.txt | 1 + forge-gui/res/editions/Marvel Universe.txt | 2 +- .../Media and Collaboration Promos.txt | 2 + .../res/editions/Secret Lair Drop Series.txt | 5 ++ 7 files changed, 55 insertions(+), 47 deletions(-) diff --git a/forge-gui/res/editions/Arena Anthology 3.txt b/forge-gui/res/editions/Arena Anthology 3.txt index 0f43f948c99..dc2cdd155be 100644 --- a/forge-gui/res/editions/Arena Anthology 3.txt +++ b/forge-gui/res/editions/Arena Anthology 3.txt @@ -6,28 +6,28 @@ Type=Online ScryfallCode=AA3 [cards] -1 U Flickerwisp @Jeremy Enecio -2 R Staff of the Storyteller @Dan Scott -3 C Force Spike @Nelson DeCastro -4 C Miscalculation @Jeff Laubenstein -5 C Peek @Adam Rex -6 R Dauthi Voidwalker @Sidharth Chaturyedi -7 U Necromancy @Pete Venters -8 C Assault Strobe @Kev Walker -9 R Broadside Bombardiers @Tomek Larek -10 C Chain Lightning @Christopher Moeller -11 U Gut, True Soul Zealot @Wayne Reynolds -12 U Oxidda Scrapmelter @Igor Kieryluk -13 C Ambush Viper @Alan Pollack -14 C Crop Rotation @DiTerlizzi -15 R Exploration @Lindsey Look -16 R Noble Hierarch @Mark Zug -17 R Fallen Shinobi @Dmitry Burmak -18 M Batterskull @Mark Zug -19 M Emrakul, the Aeons Torn @Mark Tedin -20 M Kaldra Compleat @Vincent Proce -21 R Memory Jar @Donato Giancola -22 M Ulamog, the Infinite Gyre @Aleksi Briclot +1 M Emrakul, the Aeons Torn @Mark Tedin +2 M Ulamog, the Infinite Gyre @Aleksi Briclot +3 U Flickerwisp @Jeremy Enecio +4 R Staff of the Storyteller @Dan Murayama Scott +5 C Force Spike @Nelson DeCastro +6 C Miscalculation @Jeff Laubenstein +7 C Peek @Adam Rex +8 R Dauthi Voidwalker @Sidharth Chaturvedi +9 U Necromancy @Pete Venters +10 C Assault Strobe @Kev Walker +11 R Broadside Bombardiers @Tomek Larek +12 C Chain Lightning @Christopher Moeller +13 U Gut, True Soul Zealot @Wayne Reynolds +14 U Oxidda Scrapmelter @Igor Kieryluk +15 C Ambush Viper @Alan Pollack +16 C Crop Rotation @DiTerlizzi +17 R Exploration @Lindsey Look +18 R Noble Hierarch @Mark Zug +19 R Fallen Shinobi @Dmitry Burmak +20 M Batterskull @Mark Zug +21 M Kaldra Compleat @Vincent Proce +22 R Memory Jar @Donato Giancola 23 R Umezawa's Jitte @Christopher Moeller 24 R Shelldock Isle @Mark Tedin 25 R Yavimaya, Cradle of Growth @Sarah Finnigan diff --git a/forge-gui/res/editions/Arena Anthology 4.txt b/forge-gui/res/editions/Arena Anthology 4.txt index d2b9897d48a..54a5e0b8bcb 100644 --- a/forge-gui/res/editions/Arena Anthology 4.txt +++ b/forge-gui/res/editions/Arena Anthology 4.txt @@ -9,28 +9,28 @@ ScryfallCode=AA4 1 R Blazing Archon @Zoltan Boros & Gabor Szikszai 2 R Bringer of the White Dawn @Kev Walker 3 M Iona, Shield of Emeria @Jason Chan -4 C Scaled Wurm @Wayne England -5 C Stormfront Pegasus @rk post -6 R Bringer of the Blue Dawn @Greg Staples -7 R Chromescale Drake @Ben Thompson -8 R Hoverguard Sweepers @Mark A. Nelson -9 C Kraken Hatchling @Jason Felix -10 R Thing from the Deep @Parente -11 R Tidespout Tyrant @Dany Orizio -12 R Baleful Force @Eytan Zana -13 R Bringer of the Black Dawn @Carl Critchlow -14 M Demon of Death's Gate @Vance Kovacs -15 R Dread Cacodemon @Izzy -16 R Kuro, Pitlord @Jon Foster -17 R Bringer of the Red Dawn @Christopher Moeller -18 R Dragon Tyrant @Kev Walker -19 R Fire Dragon @William Simpson -20 R Furnace Dragon @Matthew D. Wilson -21 R Magmatic Force @Jung Park -22 R Bringer of the Green Dawn @Jim Murray -23 C Crash of Rhinos @Steve White -24 R Gigantomancer @Chippy -25 R Regal Force @Brandon Kitkouski +4 C Stormfront Pegasus @rk post +5 R Bringer of the Blue Dawn @Greg Staples +6 R Chromescale Drake @Ben Thompson +7 R Hoverguard Sweepers @Mark A. Nelson +8 C Kraken Hatchling @Jason Felix +9 R Thing from the Deep @Paolo Parente +10 R Tidespout Tyrant @Dany Orizio +11 R Baleful Force @Eytan Zana +12 R Bringer of the Black Dawn @Carl Critchlow +13 M Demon of Death's Gate @Vance Kovacs +14 R Dread Cacodemon @Izzy +15 R Kuro, Pitlord @Jon Foster +16 R Bringer of the Red Dawn @Christopher Moeller +17 R Dragon Tyrant @Kev Walker +18 R Fire Dragon @William Simpson +19 R Furnace Dragon @Matthew D. Wilson +20 R Magmatic Force @Jung Park +21 R Bringer of the Green Dawn @Jim Murray +22 C Crash of Rhinos @Steve White +23 R Gigantomancer @Chippy +24 R Regal Force @Brandon Kitkouski +25 C Scaled Wurm @Wayne England 26 R Wolf Pack @Yang Jun Kwon 27 R Colossus of Sardia @Greg Staples -28 U Stratadon @Brian Snoddy +28 U Stratadon @Brian Snõddy diff --git a/forge-gui/res/editions/Avatar The Last Airbender Eternal.txt b/forge-gui/res/editions/Avatar The Last Airbender Eternal.txt index 5cab223e390..2bd102bd231 100644 --- a/forge-gui/res/editions/Avatar The Last Airbender Eternal.txt +++ b/forge-gui/res/editions/Avatar The Last Airbender Eternal.txt @@ -56,7 +56,7 @@ ScryfallCode=TLE 251 C Frog-Squirrels @Daniel Romanovsky 252 C Hippo-Cows @Brandon L. Hunt 253 U Match the Odds @Eilene Cherie -254 R Seismic Tutelage +254 R Seismic Tutelage @Florent Lebrun 255 U Hog-Monkey Rampage @Daniel Romanovsky 256 C Mechanical Glider @Salvatorre Zee Yazzie 257 C Feed the Swarm @Kotakan diff --git a/forge-gui/res/editions/Lorwyn Eclipsed.txt b/forge-gui/res/editions/Lorwyn Eclipsed.txt index f2d0f93df0b..af4067d14c1 100644 --- a/forge-gui/res/editions/Lorwyn Eclipsed.txt +++ b/forge-gui/res/editions/Lorwyn Eclipsed.txt @@ -6,6 +6,7 @@ Type=Expansion ScryfallCode=ECL [cards] +88 M Bitterbloom Bearer @Chris Rahn 224 R Figure of Fable @Omar Rayyan 288 R Sygg, Wanderwine Wisdom @Warren Mahy 310 M Bitterbloom Bearer @Taryn Knight diff --git a/forge-gui/res/editions/Marvel Universe.txt b/forge-gui/res/editions/Marvel Universe.txt index c413e66a41b..679e31df132 100644 --- a/forge-gui/res/editions/Marvel Universe.txt +++ b/forge-gui/res/editions/Marvel Universe.txt @@ -10,7 +10,7 @@ ScryfallCode=MAR 2 M Leyline Binding @Ron Frenz & Joe Rubinstein 3 M Nine Lives @C.F. Villa & Brian Reber 4 M Path to Exile @John Romita Sr. -5 M Reprieve @Alex Ross & Frank Giacola +5 M Reprieve @Alex Ross & Frank Giacoia 6 M Rest in Peace @Mark Buckingham & D'Israeli 7 M Wedding Ring @John Romita Sr. 8 M Clever Impersonator @Mark Bagley & Andrew Hennessy diff --git a/forge-gui/res/editions/Media and Collaboration Promos.txt b/forge-gui/res/editions/Media and Collaboration Promos.txt index 592f12e7a92..bc83dc17c83 100644 --- a/forge-gui/res/editions/Media and Collaboration Promos.txt +++ b/forge-gui/res/editions/Media and Collaboration Promos.txt @@ -83,3 +83,5 @@ ScryfallCode=PMEI 2025-16 R Spectacular Spider-Man @Alex Horley-Orlandelli 2025-17 R Huntmaster of the Fells @Mark Spears 2025-18 R Iron Spider, Stark Upgrade @Bachzim +2025-19 M Kaalia of the Vast @Justyna Dura +2025-20 R Chrome Host Seedshark @Donato Giancola diff --git a/forge-gui/res/editions/Secret Lair Drop Series.txt b/forge-gui/res/editions/Secret Lair Drop Series.txt index a929bd211bf..348a5b9bace 100644 --- a/forge-gui/res/editions/Secret Lair Drop Series.txt +++ b/forge-gui/res/editions/Secret Lair Drop Series.txt @@ -1909,6 +1909,11 @@ F1540 M Rainbow Dash @John Thacker 1942 R Mountain @Jon Vermilyea 1943 R Forest @Jon Vermilyea 1944 M Morophon, the Boundless @Natalie Andrewson +1945 R Plains @Ashley Dreyfus +1946 R Island @Ashley Dreyfus +1947 R Swamp @Ashley Dreyfus +1948 R Mountain @Ashley Dreyfus +1949 R Forest @Ashley Dreyfus 1950 R Plains @Pedro Potier 1951 R Island @Pedro Potier 1952 R Swamp @Pedro Potier From 0d020070a240f2bf03d17679a4998e3414c0fff8 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Sat, 27 Sep 2025 01:20:04 +0200 Subject: [PATCH 257/355] Fix tapped cost parts blocking real payment (#8789) --- forge-ai/src/main/java/forge/ai/AiController.java | 2 +- forge-ai/src/main/java/forge/ai/AiCostDecision.java | 5 ++++- forge-ai/src/main/java/forge/ai/ComputerUtilMana.java | 11 ++++++----- forge-gui/res/cardsfolder/k/karns_sylex.txt | 3 +-- forge-gui/res/cardsfolder/s/spider_man_india.txt | 2 +- 5 files changed, 13 insertions(+), 10 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/AiController.java b/forge-ai/src/main/java/forge/ai/AiController.java index 98f8608f8d3..00beb693357 100644 --- a/forge-ai/src/main/java/forge/ai/AiController.java +++ b/forge-ai/src/main/java/forge/ai/AiController.java @@ -925,7 +925,7 @@ public class AiController { // check if enough left (pass memory indirectly because we don't want to include those) Set tappedForMana = AiCardMemory.getMemorySet(player, MemorySet.PAYS_TAP_COST); - if (tappedForMana != null && tappedForMana.isEmpty() && + if (tappedForMana != null && !tappedForMana.isEmpty() && !ComputerUtilCost.checkTapTypeCost(player, sa.getPayCosts(), host, sa, new CardCollection(tappedForMana))) { return AiPlayDecision.CantAfford; } diff --git a/forge-ai/src/main/java/forge/ai/AiCostDecision.java b/forge-ai/src/main/java/forge/ai/AiCostDecision.java index 626e8898c67..65d59b3c534 100644 --- a/forge-ai/src/main/java/forge/ai/AiCostDecision.java +++ b/forge-ai/src/main/java/forge/ai/AiCostDecision.java @@ -29,12 +29,15 @@ public class AiCostDecision extends CostDecisionMakerBase { private final CardCollection tapped; public AiCostDecision(Player ai0, SpellAbility sa, final boolean effect) { + this(ai0, sa, effect, false); + } + public AiCostDecision(Player ai0, SpellAbility sa, final boolean effect, final boolean payMana) { super(ai0, effect, sa, sa.getHostCard()); discarded = new CardCollection(); tapped = new CardCollection(); Set tappedForMana = AiCardMemory.getMemorySet(ai0, MemorySet.PAYS_TAP_COST); - if (tappedForMana != null) { + if (!payMana && tappedForMana != null) { tapped.addAll(tappedForMana); } } diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java b/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java index 9518b852d63..dad9e7a2f4e 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java @@ -287,10 +287,6 @@ public class ComputerUtilMana { continue; } - if (!ComputerUtilCost.checkTapTypeCost(ai, ma.getPayCosts(), ma.getHostCard(), sa, AiCardMemory.getMemorySet(ai, MemorySet.PAYS_TAP_COST))) { - continue; - } - int amount = ma.hasParam("Amount") ? AbilityUtils.calculateAmount(ma.getHostCard(), ma.getParam("Amount"), ma) : 1; if (amount <= 0) { // wrong gamestate for variable amount @@ -357,9 +353,14 @@ public class ComputerUtilMana { continue; } + // these should come last since they reserve the paying cards + // (this means if a mana ability has both parts it doesn't currently undo reservations if the second part fails) if (!ComputerUtilCost.checkForManaSacrificeCost(ai, ma.getPayCosts(), ma, ma.isTrigger())) { continue; } + if (!ComputerUtilCost.checkTapTypeCost(ai, ma.getPayCosts(), ma.getHostCard(), sa, AiCardMemory.getMemorySet(ai, MemorySet.PAYS_TAP_COST))) { + continue; + } return paymentChoice; } @@ -819,7 +820,7 @@ public class ComputerUtilMana { sourcesForShards.values().removeIf(CardTraitPredicates.isHostCard(saPayment.getHostCard())); } else { final CostPayment pay = new CostPayment(saPayment.getPayCosts(), saPayment); - if (!pay.payComputerCosts(new AiCostDecision(ai, saPayment, effect))) { + if (!pay.payComputerCosts(new AiCostDecision(ai, saPayment, effect, true))) { saList.remove(saPayment); continue; } diff --git a/forge-gui/res/cardsfolder/k/karns_sylex.txt b/forge-gui/res/cardsfolder/k/karns_sylex.txt index 68580d91e56..a852ea06373 100644 --- a/forge-gui/res/cardsfolder/k/karns_sylex.txt +++ b/forge-gui/res/cardsfolder/k/karns_sylex.txt @@ -3,8 +3,7 @@ ManaCost:3 Types:Legendary Artifact R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementResult$ Updated | ReplaceWith$ ETBTapped | Description$ CARDNAME enters tapped. SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True -S:Mode$ CantPayLife | ValidPlayer$ Player | ValidCause$ Spell,Activated.nonManaAbility | ForCost$ True | Description$ Players can't pay life or sacrifice creatures to cast spells or activate abilities that aren't mana abilities. -S:Mode$ CantSacrifice | ValidCard$ Creature | ValidCause$ Spell,Activated.nonManaAbility | ForCost$ True | Secondary$ True | Description$ Players can't pay life or sacrifice creatures to cast spells or activate abilities that aren't mana abilities. +S:Mode$ CantPayLife | ValidPlayer$ Player | ValidCause$ Spell,Activated.nonManaAbility | ForCost$ True | Description$ Players can't pay life to cast spells or activate abilities that aren't mana abilities. A:AB$ DestroyAll | Cost$ X T Exile<1/CARDNAME> | ValidCards$ Permanent.nonLand+cmcLEX | SorcerySpeed$ True | SpellDescription$ Destroy each nonland permanent with mana value X or less. Activate only as a sorcery. SVar:X:Count$xPaid Oracle:Karn's Sylex enters tapped.\nPlayers can't pay life to cast spells or to activate abilities that aren't mana abilities.\n{X}, {T}, Exile Karn's Sylex: Destroy each nonland permanent with mana value X or less. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/s/spider_man_india.txt b/forge-gui/res/cardsfolder/s/spider_man_india.txt index 9066e790705..73dd5b52d25 100644 --- a/forge-gui/res/cardsfolder/s/spider_man_india.txt +++ b/forge-gui/res/cardsfolder/s/spider_man_india.txt @@ -1,7 +1,7 @@ Name:Spider-Man India ManaCost:3 G W Types:Legendary Creature Spider Human Hero -PT:4/3 +PT:4/4 K:Web-slinging:1 G W T:Mode$ SpellCast | ValidCard$ Card.Creature | ValidActivatingPlayer$ You | Execute$ TrigPutCounter | TriggerZones$ Battlefield | TriggerDescription$ Pavitr's Sevā — Whenever you cast a creature spell, put a +1/+1 counter on target creature you control. It gains flying until end of turn. SVar:TrigPutCounter:DB$ PutCounter | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBPump From 4ed06fae87a077d35038d11075d4e4e71f4596d7 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Sat, 27 Sep 2025 08:08:53 +0800 Subject: [PATCH 258/355] add breadcrumb to GameAction moveTo --- .../src/main/java/forge/game/GameAction.java | 45 ++++++++++--------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index b759be95564..dd35bf5ad53 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -57,6 +57,8 @@ import forge.item.PaperCard; import forge.util.*; import forge.util.collect.FCollection; import forge.util.collect.FCollectionView; +import io.sentry.Breadcrumb; +import io.sentry.Sentry; import org.apache.commons.lang3.tuple.ImmutablePair; import org.jgrapht.alg.cycle.SzwarcfiterLauerSimpleCycles; import org.jgrapht.graph.DefaultDirectedGraph; @@ -749,26 +751,29 @@ public class GameAction { public final Card moveTo(final ZoneType name, final Card c, final int libPosition, SpellAbility cause, Map params) { // Call specific functions to set PlayerZone, then move onto moveTo - switch(name) { - case Hand: return moveToHand(c, cause, params); - case Library: return moveToLibrary(c, libPosition, cause, params); - case Battlefield: return moveToPlay(c, c.getController(), cause, params); - case Graveyard: return moveToGraveyard(c, cause, params); - case Exile: - if (!c.canExiledBy(cause, true)) { - return null; - } - return exile(c, cause, params); - case Stack: return moveToStack(c, cause, params); - case PlanarDeck: - case SchemeDeck: - case AttractionDeck: - case ContraptionDeck: - return moveToVariantDeck(c, name, libPosition, cause, params); - case Junkyard: - return moveToJunkyard(c, cause, params); - default: // sideboard will also get there - return moveTo(c.getOwner().getZone(name), c, cause); + try { + return switch (name) { + case Hand -> moveToHand(c, cause, params); + case Library -> moveToLibrary(c, libPosition, cause, params); + case Battlefield -> moveToPlay(c, c.getController(), cause, params); + case Graveyard -> moveToGraveyard(c, cause, params); + case Exile -> !c.canExiledBy(cause, true) ? null : exile(c, cause, params); + case Stack -> moveToStack(c, cause, params); + case PlanarDeck, SchemeDeck, AttractionDeck, ContraptionDeck -> moveToVariantDeck(c, name, libPosition, cause, params); + case Junkyard -> moveToJunkyard(c, cause, params); + default -> moveTo(c.getOwner().getZone(name), c, cause); // sideboard will also get there + }; + } catch (Exception e) { + String msg = "GameAction:moveTo: Exception occured"; + + Breadcrumb bread = new Breadcrumb(msg); + bread.setData("Card", c.getName()); + bread.setData("SA", cause.toString()); + bread.setData("ZoneType", name.name()); + bread.setData("Player", c.getOwner()); + Sentry.addBreadcrumb(bread); + + throw new RuntimeException("Error in GameAction moveTo " + c.getName() + " to Player Zone " + name.name(), e); } } From a9c42fb340b44ef0e755ddd3b072631241ed2981 Mon Sep 17 00:00:00 2001 From: Paul Hammerton Date: Sat, 27 Sep 2025 10:40:42 +0100 Subject: [PATCH 259/355] Edition updates: ECL, OLGC, OVNT, SLD --- .../res/editions/Legacy Championship.txt | 6 +- forge-gui/res/editions/Lorwyn Eclipsed.txt | 31 +++++++++ .../res/editions/Secret Lair Drop Series.txt | 69 +++++++++++++++++++ .../res/editions/Vintage Championship.txt | 32 ++++----- 4 files changed, 119 insertions(+), 19 deletions(-) diff --git a/forge-gui/res/editions/Legacy Championship.txt b/forge-gui/res/editions/Legacy Championship.txt index 17215fc70c0..bfdafe4b4fa 100644 --- a/forge-gui/res/editions/Legacy Championship.txt +++ b/forge-gui/res/editions/Legacy Championship.txt @@ -30,6 +30,6 @@ ScryfallCode=OLGC 2022A S Gaea's Cradle @Ralph Horsley 2022B S Scrubland @Raoul Vitale 2022C S The Tabernacle at Pendrell Vale @Milivoj Ćeran -2023 M Lightning Bolt @rk post -2023A M Volcanic Island @Mark Tedin -2023EU M Force of Will @Alan Pollack +2023 S Lightning Bolt @rk post +2023A S Volcanic Island @Mark Tedin +2023EU S Force of Will @Alan Pollack diff --git a/forge-gui/res/editions/Lorwyn Eclipsed.txt b/forge-gui/res/editions/Lorwyn Eclipsed.txt index af4067d14c1..7018bb2668d 100644 --- a/forge-gui/res/editions/Lorwyn Eclipsed.txt +++ b/forge-gui/res/editions/Lorwyn Eclipsed.txt @@ -6,8 +6,39 @@ Type=Expansion ScryfallCode=ECL [cards] +13 M Eirdu, Carrier of Dawn @Lucas Graciano +27 M Morningtide's Light @Mark Poole +76 R Sygg, Wanderwine Wisdom @Justin Gerard 88 M Bitterbloom Bearer @Chris Rahn +124 R Ashling, Rekindled @Ilse Gort +186 R Mutable Explorer @Wayne Reynolds +205 R Ashling's Command @Iris Compiet +212 M Deceit @Svetlin Velinov +222 M Emptiness @Ryan Pancoast 224 R Figure of Fable @Omar Rayyan +262 R Blood Crypt @Adam Paquette +265 R Hallowed Fountain @Adam Paquette +266 R Overgrown Tomb @Adam Paquette +267 R Steam Vents @Adam Paquette +268 R Temple Garden @Adam Paquette +286 M Eirdu, Carrier of Dawn @Omar Rayyan 288 R Sygg, Wanderwine Wisdom @Warren Mahy +290 R Ashling, Rekindled @Chuck Lukacs +293 M Deceit @Kev Walker +294 M Emptiness @Jeff Miracola +301 M Morningtide's Light @adelinaillustration 310 M Bitterbloom Bearer @Taryn Knight 327 R Mutable Explorer @Felicita Sala +330 R Ashling's Command @adelinaillustration +347 R Hallowed Fountain @Justin Gerard +347☇ R Hallowed Fountain @Justin Gerard +348 R Steam Vents @Raoul Vitale +348☇ R Steam Vents @Raoul Vitale +349 R Blood Crypt @Valera Lutfullina +349☇ R Blood Crypt @Valera Lutfullina +350 R Overgrown Tomb @Matt Stewart +350☇ R Overgrown Tomb @Matt Stewart +351 R Temple Garden @Annie Stegg +351☇ R Temple Garden @Annie Stegg +352 M Bitterbloom Bearer @Rebecca Guay +372 R Figure of Fable @Omar Rayyan diff --git a/forge-gui/res/editions/Secret Lair Drop Series.txt b/forge-gui/res/editions/Secret Lair Drop Series.txt index 348a5b9bace..7414e0e9e27 100644 --- a/forge-gui/res/editions/Secret Lair Drop Series.txt +++ b/forge-gui/res/editions/Secret Lair Drop Series.txt @@ -870,6 +870,7 @@ F869 R Blacker Lotus @Scott Okumura 902 R Deadeye Navigator @Jon Vermilyea 903 M The Locust God @See Machine 904 M The Scorpion God @Ricardo Cavolo +905 R Cryptic Command @Alexander Khabbazi 906 R Ignoble Hierarch @John F. Malta 907 R Seedborn Muse @Princess Hidir 908 R Arcane Signet @Alexander Forssberg @@ -1829,6 +1830,10 @@ F1540 M Rainbow Dash @John Thacker 1850 U Crib Swap @Brandon Dorman 1851 R Homeward Path @Franz Vohwinkel 1853 M Go-Shintai of Life's Origin @Yuko Shimizu +1854 M Armageddon @Kieran Yanner +1855 R Northern Paladin @Kieran Yanner +1856 M Demonic Tutor @Kieran Yanner +1857 R Lord of the Pit @Kieran Yanner 1858 R Day of Judgment @Néstor Ossandón Leal 1859 R Temporal Extortion @Aurore Folny 1860 R Toxic Deluge @Evyn Fong @@ -2067,10 +2072,73 @@ F1540 M Rainbow Dash @John Thacker 2109 R Sylvan Safekeeper @Ian Permana 2110 M Crucible of Worlds @Ian Permana 2111 R Zuran Orb @Ian Permana +2138 R Dandân @Kelogsloops +2139 R Dandân @Kelogsloops +2140 R Accumulated Knowledge @Ed He +2141 R Magical Hack @Samuele Bandini +2142 R Memory Lapse @Wylie Beckert +2143 R Mystic Sanctuary @Amélie Flechais +2165 M Heliod, Sun-Crowned @Magali Villeneuve +2166 R Steelshaper's Gift @Greg Staples +2167 R Swords to Plowshares @Lie Setiawan +2168 R Baral, Chief of Compliance @Kieran Yanner +2169 M Garruk Relentless @Justyna Dura +2170 R Reaper King @Alexander Mokhov +2171 R Glen Elendra Archmage @Jim Woodring +2172 M Guardian Project @Jim Woodring +2173 R Roon of the Hidden Realm @Jim Woodring +2174 R Soulherder @Jim Woodring +2175 M Jaws, Relentless Predator @Stephen Andrade +2176 R Descent into Avernus @Stephen Andrade +2177 R Reckless Endeavor @Stephen Andrade +2178 M Sneak Attack @Stephen Andrade +2179 R Abrade @Stephen Andrade +2181 M Bruvac the Grandiloquent @Akirant +2182 R Windfall @Dan Mumford +2183 M Captain N'ghathrod @Akirant +2184 R Nekusar, the Mindrazer @Akirant +2185 R Iron Maiden @Dan Mumford +2186 R Mindcrank @Dan Mumford +2187 R Lethal Scheme @Iron Maiden +2188 M Grave Titan @Iron Maiden +2189 R Animate Dead @Iron Maiden +2190 M Temporal Tresspass @Iron Maiden +2191 R Unearth @Iron Maiden +2192 R Lignify @Iron Maiden 2193 M Greensleeves, Maro-Sorcerer @Jason Loik & Matthew Cohen 2194 M Polyraptor @Ben Millar 2195 R Academy Manufactor @Ben Millar 2196 M Wurmcoil Engine @Jason Loik & Matthew Cohen +2197 M Ellie, Brick Master @Irvin Rodriguez +2198 M Joel, Resolute Survivor @Yongjae Choi +2202 M Abby, Merciless Soldier @Wayne Wu +2203 M Ellie, Vengeful Hunter @Irvin Rodriguez +2207 M Kratos, God of War @Magali Villeneuve +2212 M Atreus, Impulsive Son @Nathaniel Himawan +2213 M Kratos, Stoic Father @Nathaniel Himawan +2216 M Nathan Drake, Treasure Hunter @Piotr Dura +2221 M Aloy, Savior of Meridian @Crystal Fae +2226 M Jin Sakai, Ghost of Tsushima @Dominik Mayer +2282 R Vito, Thorn of the Dusk Rose @Sam Heimer +2283 R Satoru Umezawa @Sam Heimer +2284 M Voja, Jaws of the Conclave @Ryan Roadkill +2285 M Wilhelt, the Rotcleaver @Sam Heimer +2286 R Liberator, Urza's Battlethopter @Ryan Roadkill +2311 R Distant Melody @Paul Scott Canavan +2312 R Explore @Natalie Andrewson +2313 R Inspiring Call @Rian Gonzales +2314 R Chromatic Lantern @Rian Gonzales +2315 R Sol Ring @Nathan Jurevicius +2316 R Sphere of Safety @Evyn Fong +2317 R Miscast @Justyna Dura +2318 R Phyrexian Arena @Daarken +2319 R Tormenting Voice @Igor Krstic +2320 R Tamiyo's Safekeeping @Evyn Fong +2321 R Hullbreaker Horror @Narendra Bintara Adi +2322 R Maddening Cacophony @Nathaniel Himawan +2323 R Serum Visions @Justin Gerard +2324 M Umbris, Fear Manifest @Antonio José Manzanedo +2325 R Spellskite @Madeline Boni 7001 R Feed the Swarm @Stanislav Sherbakov 7002 R Forge Anew @Yongjae Choi 7003 R Silence @Evyn Fong @@ -2163,3 +2231,4 @@ VS C Viscera Seer @John Stanko 2065 c_a_treasure_sac @Josu Hernaiz 2094 c_a_treasure_sac @John Thacker 2101 c_1_1_a_myr @Caleb Meurer +2180 c_a_blood_draw @Stephen Andrade diff --git a/forge-gui/res/editions/Vintage Championship.txt b/forge-gui/res/editions/Vintage Championship.txt index 4623dadd3f5..d369647653d 100644 --- a/forge-gui/res/editions/Vintage Championship.txt +++ b/forge-gui/res/editions/Vintage Championship.txt @@ -17,27 +17,27 @@ ScryfallCode=OVNT 2011 R Time Walk @Chris Rahn 2012 R Timetwister @Matt Stewart 2013 R Ancestral Recall @Ryan Pancoast -2014 M Mox Pearl @Raoul Vitale -2015 M Mox Emerald @Raoul Vitale -2016EU M Mox Jet @Raoul Vitale -2016NA M Mox Sapphire @Raoul Vitale -2017EU M Mox Ruby @Raoul Vitale -2017NA M Black Lotus @Steven Belledin -2018 M Ancestral Recall @Raoul Vitale -2018A M Timetwister @Ralph Horsley -2018NA M Time Walk @Chris Seaman +2014 S Mox Pearl @Raoul Vitale +2015 S Mox Emerald @Raoul Vitale +2016EU S Mox Jet @Raoul Vitale +2016NA S Mox Sapphire @Raoul Vitale +2017EU S Mox Ruby @Raoul Vitale +2017NA S Black Lotus @Steven Belledin +2018 S Ancestral Recall @Raoul Vitale +2018A S Timetwister @Ralph Horsley +2018NA S Time Walk @Chris Seaman 2019 M Mox Pearl @Sidharth Chaturvedi 2019A M Mox Sapphire @Tyler Walpole -2019NA M Mox Jet @Filip Burburan +2019NA S Mox Jet @Filip Burburan 2020A M Tolarian Academy @Raoul Vitale 2020B M Library of Alexandria @Volkan Baǵa 2020C M Mishra's Workshop @Drew Baker 2021A M Mox Emerald @Eric Wilkerson 2021B M Timetwister @Chris Seaman 2021C M Mox Ruby @Jarel Threat -2022A M Bazaar of Baghdad @Chris Seaman -2022B M Time Walk @Tyler Walpole -2022C M Ancestral Recall @Volkan Baǵa -2023A M Black Lotus @Jarel Threat -2023EU M Black Lotus @Raoul Vitale -2023NA M Black Lotus @Scott M. Fischer +2022A S Bazaar of Baghdad @Chris Seaman +2022B S Time Walk @Tyler Walpole +2022C S Ancestral Recall @Volkan Baǵa +2023A S Black Lotus @Jarel Threat +2023EU S Black Lotus @Raoul Vitale +2023NA S Black Lotus @Scott M. Fischer From 4eccfa8177069bfc38da384fa7b835aaad8e0fea Mon Sep 17 00:00:00 2001 From: tool4ever Date: Sun, 28 Sep 2025 09:09:47 +0200 Subject: [PATCH 260/355] Restore fixes (#8800) --- .../main/java/forge/ai/ability/ConniveAi.java | 2 +- .../forge/ai/ability/ControlExchangeAi.java | 18 ++++++++--------- .../java/forge/ai/ability/MustBlockAi.java | 20 ++++--------------- .../main/java/forge/ai/ability/PhasesAi.java | 4 +--- .../res/cardsfolder/a/axelrod_gunnarson.txt | 2 +- .../b/brudiclad_telchor_engineer.txt | 4 ++-- .../cardsfolder/c/caesar_legions_emperor.txt | 2 +- .../cardsfolder/c/crisis_of_conscience.txt | 2 +- .../g/grishnakh_brash_instigator.txt | 2 +- .../res/cardsfolder/p/prosperity_tycoon.txt | 2 +- .../res/cardsfolder/s/soul_collector.txt | 2 +- 11 files changed, 22 insertions(+), 38 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/ConniveAi.java b/forge-ai/src/main/java/forge/ai/ability/ConniveAi.java index 3beb8d09463..dc7abc8cdf0 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ConniveAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ConniveAi.java @@ -119,7 +119,7 @@ public class ConniveAi extends SpellAbilityAi { } } return new AiAbilityDecision( - sa.isTargetNumberValid() && !sa.getTargets().isEmpty() ? 100 : 0, + sa.isTargetNumberValid() ? 100 : 0, sa.isTargetNumberValid() ? AiPlayDecision.WillPlay : AiPlayDecision.TargetingFailed ); } diff --git a/forge-ai/src/main/java/forge/ai/ability/ControlExchangeAi.java b/forge-ai/src/main/java/forge/ai/ability/ControlExchangeAi.java index 09faaaee18c..57262dd602a 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ControlExchangeAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ControlExchangeAi.java @@ -53,17 +53,15 @@ public class ControlExchangeAi extends SpellAbilityAi { if (mandatory) { return new AiAbilityDecision(100, AiPlayDecision.WillPlay); } - } else { - if (mandatory) { - AiAbilityDecision decision = chkDrawback(sa, aiPlayer); - if (sa.isTargetNumberValid()) { - return new AiAbilityDecision(100, AiPlayDecision.WillPlay); - } - - return decision; - } else { - return canPlay(aiPlayer, sa); + } else if (mandatory) { + AiAbilityDecision decision = chkDrawback(sa, aiPlayer); + if (sa.isTargetNumberValid()) { + return new AiAbilityDecision(100, AiPlayDecision.WillPlay); } + + return decision; + } else { + return canPlay(aiPlayer, sa); } return new AiAbilityDecision(100, AiPlayDecision.WillPlay); } diff --git a/forge-ai/src/main/java/forge/ai/ability/MustBlockAi.java b/forge-ai/src/main/java/forge/ai/ability/MustBlockAi.java index 407f3e00eb0..e98c6924426 100644 --- a/forge-ai/src/main/java/forge/ai/ability/MustBlockAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/MustBlockAi.java @@ -6,10 +6,10 @@ import forge.game.Game; import forge.game.ability.AbilityUtils; import forge.game.card.Card; import forge.game.card.CardLists; +import forge.game.card.CardUtil; import forge.game.combat.Combat; import forge.game.combat.CombatUtil; import forge.game.keyword.Keyword; -import forge.game.phase.PhaseType; import forge.game.player.Player; import forge.game.spellability.SpellAbility; @@ -38,9 +38,6 @@ public class MustBlockAi extends SpellAbilityAi { if (!list.isEmpty()) { final Card blocker = ComputerUtilCard.getBestCreatureAI(list); - if (blocker == null) { - return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi); - } sa.getTargets().add(blocker); return new AiAbilityDecision(100, AiPlayDecision.WillPlay); } @@ -63,11 +60,6 @@ public class MustBlockAi extends SpellAbilityAi { protected AiAbilityDecision doTriggerNoCost(final Player ai, SpellAbility sa, boolean mandatory) { final Card source = sa.getHostCard(); - // only use on creatures that can attack - if (!ai.getGame().getPhaseHandler().getPhase().isBefore(PhaseType.MAIN2)) { - return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi); - } - Card attacker = source; if (sa.hasParam("DefinedAttacker")) { final List cards = AbilityUtils.getDefinedCards(source, sa.getParam("DefinedAttacker"), sa); @@ -81,13 +73,9 @@ public class MustBlockAi extends SpellAbilityAi { boolean chance = false; if (sa.usesTargeting()) { - final List list = determineGoodBlockers(attacker, ai, ai.getWeakestOpponent(), sa, true, true); - if (list.isEmpty()) { - if (sa.isTargetNumberValid()) { - return new AiAbilityDecision(100, AiPlayDecision.WillPlay); - } else { - return new AiAbilityDecision(0, AiPlayDecision.TargetingFailed); - } + List list = determineGoodBlockers(attacker, ai, ai.getWeakestOpponent(), sa, true, true); + if (list.isEmpty() && mandatory) { + list = CardUtil.getValidCardsToTarget(sa); } final Card blocker = ComputerUtilCard.getBestCreatureAI(list); if (blocker == null) { diff --git a/forge-ai/src/main/java/forge/ai/ability/PhasesAi.java b/forge-ai/src/main/java/forge/ai/ability/PhasesAi.java index 5cdbaafdc06..02ae927180f 100644 --- a/forge-ai/src/main/java/forge/ai/ability/PhasesAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/PhasesAi.java @@ -33,10 +33,8 @@ public class PhasesAi extends SpellAbilityAi { final boolean isThreatened = ComputerUtil.predictThreatenedObjects(aiPlayer, null, true).contains(source); if (isThreatened) { return new AiAbilityDecision(100, AiPlayDecision.WillPlay); - } else { - return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi); - } + return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi); } return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi); diff --git a/forge-gui/res/cardsfolder/a/axelrod_gunnarson.txt b/forge-gui/res/cardsfolder/a/axelrod_gunnarson.txt index b1e0d76711c..ce0610e463e 100644 --- a/forge-gui/res/cardsfolder/a/axelrod_gunnarson.txt +++ b/forge-gui/res/cardsfolder/a/axelrod_gunnarson.txt @@ -3,7 +3,7 @@ ManaCost:4 B B R R Types:Legendary Creature Giant PT:5/5 K:Trample -T:Mode$ ChangesZone | Origin$ Any | Destination$ Graveyard | ValidCard$ Creature.DamagedBy | Execute$ DBGainLife | TriggerDescription$ Whenever a creature dealt damage by CARDNAME this turn dies, you gain 1 life and NICKNAME deals 1 damage to target player or planeswalker. +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.DamagedBy | Execute$ DBGainLife | TriggerDescription$ Whenever a creature dealt damage by CARDNAME this turn dies, you gain 1 life and NICKNAME deals 1 damage to target player or planeswalker. SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1 | SubAbility$ DBDealDamage SVar:DBDealDamage:DB$ DealDamage | ValidTgts$ Player,Planeswalker | TgtPrompt$ Select target player or planeswalker | NumDmg$ 1 DeckHas:Ability$LifeGain diff --git a/forge-gui/res/cardsfolder/b/brudiclad_telchor_engineer.txt b/forge-gui/res/cardsfolder/b/brudiclad_telchor_engineer.txt index bc3b3bbdcfd..62967b12daa 100644 --- a/forge-gui/res/cardsfolder/b/brudiclad_telchor_engineer.txt +++ b/forge-gui/res/cardsfolder/b/brudiclad_telchor_engineer.txt @@ -7,6 +7,6 @@ SVar:PlayMain1:TRUE T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ At the beginning of combat on your turn, create a 2/1 blue Phyrexian Myr artifact creature token. Then you may choose a token you control. If you do, each other token you control becomes a copy of that token. SVar:TrigToken:DB$ Token | TokenScript$ u_2_1_a_phyrexian_myr | SubAbility$ DBClone SVar:DBClone:DB$ Clone | Choices$ Card.token+YouCtrl | ChoiceTitle$ You may choose a token you control | ChoiceOptional$ True | ExcludeChosen$ True | CloneTarget$ Valid Card.token+YouCtrl -DeckHints:Type$Token -DeckHas:Type$Token & Type$Artifact|Myr +DeckHints:Ability$Token +DeckHas:Ability$Token & Type$Artifact|Myr Oracle:Creature tokens you control have haste.\nAt the beginning of combat on your turn, create a 2/1 blue Phyrexian Myr artifact creature token. Then you may choose a token you control. If you do, each other token you control becomes a copy of that token. diff --git a/forge-gui/res/cardsfolder/c/caesar_legions_emperor.txt b/forge-gui/res/cardsfolder/c/caesar_legions_emperor.txt index 7bffc1bd003..e42009cd035 100644 --- a/forge-gui/res/cardsfolder/c/caesar_legions_emperor.txt +++ b/forge-gui/res/cardsfolder/c/caesar_legions_emperor.txt @@ -11,5 +11,5 @@ SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ 1 SVar:DBDamage:DB$ DealDamage | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | NumDmg$ X | SpellDescription$ CARDNAME deals damage equal to the number of creature tokens you control to target opponent. SVar:X:Count$Valid Creature.token+YouCtrl DeckHas:Ability$Token|Sacrifice -DeckHints:Type$Token +DeckHints:Ability$Token Oracle:Whenever you attack, you may sacrifice another creature. When you do, choose two —\n• Create two 1/1 red and white Soldier creature tokens with haste that are tapped and attacking.\n• You draw a card and you lose 1 life.\n• Caesar, Legion's Emperor deals damage equal to the number of creature tokens you control to target opponent. diff --git a/forge-gui/res/cardsfolder/c/crisis_of_conscience.txt b/forge-gui/res/cardsfolder/c/crisis_of_conscience.txt index 2b901551689..4269209413e 100644 --- a/forge-gui/res/cardsfolder/c/crisis_of_conscience.txt +++ b/forge-gui/res/cardsfolder/c/crisis_of_conscience.txt @@ -4,5 +4,5 @@ Types:Sorcery A:SP$ Charm | Choices$ DBDestroyAllTokens,DBDestroyAllNonlandNontokenPermanents | CharmNum$ 1 SVar:DBDestroyAllTokens:DB$ DestroyAll | ValidCards$ Card.token | SpellDescription$ Destroy all tokens. SVar:DBDestroyAllNonlandNontokenPermanents:DB$ DestroyAll | ValidCards$ Permanent.nonLand+!token | SpellDescription$ Destroy all nonland, nontoken permanents. -DeckHints:Type$Token +DeckHints:Ability$Token Oracle:Choose one —\n• Destroy all tokens.\n• Destroy all nonland, nontoken permanents. diff --git a/forge-gui/res/cardsfolder/g/grishnakh_brash_instigator.txt b/forge-gui/res/cardsfolder/g/grishnakh_brash_instigator.txt index d3123cc9d83..16869bce724 100644 --- a/forge-gui/res/cardsfolder/g/grishnakh_brash_instigator.txt +++ b/forge-gui/res/cardsfolder/g/grishnakh_brash_instigator.txt @@ -9,5 +9,5 @@ SVar:TrigGainControl:DB$ GainControl | ValidTgts$ Creature.nonLegendary+powerLEX SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:TriggerRemembered$CardPower DeckHas:Ability$Token|Counters & Type$Orc|Army -DeckHints:Type$Token +DeckHints:Ability$Token Oracle:When Grishnákh, Brash Instigator enters, amass Orcs 2. When you do, until end of turn, gain control of target nonlegendary creature an opponent controls with power less than or equal to the amassed Army's power. Untap that creature. It gains haste until end of turn. diff --git a/forge-gui/res/cardsfolder/p/prosperity_tycoon.txt b/forge-gui/res/cardsfolder/p/prosperity_tycoon.txt index 810d7051b69..6ca2cade710 100644 --- a/forge-gui/res/cardsfolder/p/prosperity_tycoon.txt +++ b/forge-gui/res/cardsfolder/p/prosperity_tycoon.txt @@ -7,5 +7,5 @@ SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ r_1_1_mercenary_tappump A:AB$ Pump | Cost$ 2 Sac<1/Card.token/token> | Defined$ Self | KW$ Indestructible | SubAbility$ DBTap | SpellDescription$ CARDNAME gains indestructible until end of turn. Tap it. (Damage and effects that say "destroy" don't destroy it.) SVar:DBTap:DB$ Tap | Defined$ Self DeckHas:Ability$Token|Sacrifice & Type$Mercenary -DeckHints:Type$Token +DeckHints:Ability$Token Oracle:When Prosperity Tycoon enters, create a 1/1 red Mercenary creature token with "{T}: Target creature you control gets +1/+0 until end of turn. Activate only as a sorcery."\n{2}, Sacrifice a token: Prosperity Tycoon gains indestructible until end of turn. Tap it. (Damage and effects that say "destroy" don't destroy it.) diff --git a/forge-gui/res/cardsfolder/s/soul_collector.txt b/forge-gui/res/cardsfolder/s/soul_collector.txt index 61dc9eb60bf..7be64f067d7 100644 --- a/forge-gui/res/cardsfolder/s/soul_collector.txt +++ b/forge-gui/res/cardsfolder/s/soul_collector.txt @@ -4,6 +4,6 @@ Types:Creature Vampire PT:3/4 K:Flying K:Morph:B B B -T:Mode$ ChangesZone | Origin$ Any | Destination$ Graveyard | ValidCard$ Creature.DamagedBy | Execute$ TrigBounce | TriggerDescription$ Whenever a creature dealt damage by CARDNAME this turn dies, return that card to the battlefield under your control. +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.DamagedBy | Execute$ TrigBounce | TriggerDescription$ Whenever a creature dealt damage by CARDNAME this turn dies, return that card to the battlefield under your control. SVar:TrigBounce:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | Defined$ TriggeredCardLKICopy Oracle:Flying\nWhenever a creature dealt damage by Soul Collector this turn dies, return that card to the battlefield under your control.\nMorph {B}{B}{B} (You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.) From 4d2b634e4fbd09446dbca7d4a90bb5199edfb88e Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Sun, 28 Sep 2025 15:35:19 +0200 Subject: [PATCH 261/355] cantBeEnchantedByMsg and cantAttach StaticAbility (#8772) * cantBeEnchantedByMsg and cantAttach StaticAbility * finish cantBeAttachedMsg --- .../src/main/java/forge/game/GameEntity.java | 91 ++++++++++++------- .../src/main/java/forge/game/card/Card.java | 78 ++++++++-------- .../main/java/forge/game/card/CardState.java | 12 +-- .../main/java/forge/game/keyword/Equip.java | 2 + .../forge/game/keyword/KeywordWithType.java | 44 +++++---- .../StaticAbilityCantAttach.java | 6 +- .../match/input/InputSelectTargets.java | 9 +- 7 files changed, 139 insertions(+), 103 deletions(-) diff --git a/forge-game/src/main/java/forge/game/GameEntity.java b/forge-game/src/main/java/forge/game/GameEntity.java index 7e51c00234f..1447b1d78ad 100644 --- a/forge-game/src/main/java/forge/game/GameEntity.java +++ b/forge-game/src/main/java/forge/game/GameEntity.java @@ -36,12 +36,15 @@ import forge.game.card.CardPredicates; import forge.game.card.CounterType; import forge.game.keyword.Keyword; import forge.game.keyword.KeywordInterface; +import forge.game.keyword.KeywordWithType; import forge.game.player.Player; import forge.game.replacement.ReplacementEffect; import forge.game.replacement.ReplacementType; import forge.game.spellability.SpellAbility; +import forge.game.staticability.StaticAbility; import forge.game.staticability.StaticAbilityCantAttach; import forge.game.zone.ZoneType; +import forge.util.Lang; public abstract class GameEntity extends GameObject implements IIdentifiable { protected int id; @@ -218,63 +221,83 @@ public abstract class GameEntity extends GameObject implements IIdentifiable { return canBeAttached(attach, sa, false); } public boolean canBeAttached(final Card attach, SpellAbility sa, boolean checkSBA) { - // master mode - if (!attach.isAttachment() || (attach.isCreature() && !attach.hasKeyword(Keyword.RECONFIGURE)) - || equals(attach)) { - return false; + return cantBeAttachedMsg(attach, sa, checkSBA) == null; + } + + public String cantBeAttachedMsg(final Card attach, SpellAbility sa) { + return cantBeAttachedMsg(attach, sa, false); + } + public String cantBeAttachedMsg(final Card attach, SpellAbility sa, boolean checkSBA) { + if (!attach.isAttachment()) { + return attach.getName() + " is not an attachment"; + } + if (equals(attach)) { + return attach.getName() + " can't attach to itself"; + } + + if (attach.isCreature() && !attach.hasKeyword(Keyword.RECONFIGURE)) { + return attach.getName() + " is a creature without reconfigure"; } if (attach.isPhasedOut()) { - return false; + return attach.getName() + " is phased out"; } - // check for rules - if (attach.isAura() && !canBeEnchantedBy(attach)) { - return false; + if (attach.isAura()) { + String msg = cantBeEnchantedByMsg(attach); + if (msg != null) { + return msg; + } } - if (attach.isEquipment() && !canBeEquippedBy(attach, sa)) { - return false; + if (attach.isEquipment()) { + String msg = cantBeEquippedByMsg(attach, sa); + if (msg != null) { + return msg; + } } - if (attach.isFortification() && !canBeFortifiedBy(attach)) { - return false; + if (attach.isFortification()) { + String msg = cantBeFortifiedByMsg(attach); + if (msg != null) { + return msg; + } } - // check for can't attach static - if (StaticAbilityCantAttach.cantAttach(this, attach, checkSBA)) { - return false; + StaticAbility stAb = StaticAbilityCantAttach.cantAttach(this, attach, checkSBA); + if (stAb != null) { + return stAb.toString(); } - // true for all - return true; + return null; } - protected boolean canBeEquippedBy(final Card aura, SpellAbility sa) { - /** - * Equip only to Creatures which are cards - */ - return false; - } - - protected boolean canBeFortifiedBy(final Card aura) { + protected String cantBeEquippedByMsg(final Card aura, SpellAbility sa) { /** * Equip only to Lands which are cards */ - return false; + return getName() + " is not a Creature"; } - protected boolean canBeEnchantedBy(final Card aura) { + protected String cantBeFortifiedByMsg(final Card fort) { + /** + * Equip only to Lands which are cards + */ + return getName() + " is not a Land"; + } + + protected String cantBeEnchantedByMsg(final Card aura) { if (!aura.hasKeyword(Keyword.ENCHANT)) { - return false; + return "No Enchant Keyword"; } for (KeywordInterface ki : aura.getKeywords(Keyword.ENCHANT)) { - String k = ki.getOriginal(); - String m[] = k.split(":"); - String v = m[1]; - if (!isValid(v.split(","), aura.getController(), aura, null)) { - return false; + if (ki instanceof KeywordWithType kwt) { + String v = kwt.getValidType(); + String desc = kwt.getTypeDescription(); + if (!isValid(v.split(","), aura.getController(), aura, null)) { + return getName() + " is not " + Lang.nounWithAmount(1, desc); + } } } - return true; + return null; } public boolean hasCounters() { diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 37722d54e81..49894c670aa 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -2453,17 +2453,8 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr } else if (keyword.startsWith("DeckLimit")) { final String[] k = keyword.split(":"); sbLong.append(k[2]).append("\r\n"); - } else if (keyword.startsWith("Enchant")) { - String m[] = keyword.split(":"); - String desc; - if (m.length > 2) { - desc = m[2]; - } else { - desc = m[1]; - if (CardType.isACardType(desc) || "Permanent".equals(desc) || "Player".equals(desc) || "Opponent".equals(desc)) { - desc = desc.toLowerCase(); - } - } + } else if (keyword.startsWith("Enchant") && inst instanceof KeywordWithType kwt) { + String desc = kwt.getTypeDescription(); sbLong.append("Enchant ").append(desc).append("\r\n"); } else if (keyword.startsWith("Morph") || keyword.startsWith("Megamorph") || keyword.startsWith("Disguise") || keyword.startsWith("Reflect") @@ -3797,7 +3788,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr public final void addLeavesPlayCommand(final GameCommand c) { leavePlayCommandList.add(c); } - + public void addStaticCommandList(Object[] objects) { staticCommandList.add(objects); } @@ -4812,7 +4803,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr public void addDraftAction(String s) { draftActions.add(s); } - + private int intensity = 0; public final void addIntensity(final int n) { intensity += n; @@ -7171,51 +7162,62 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr } @Override - protected final boolean canBeEnchantedBy(final Card aura) { + protected final String cantBeEnchantedByMsg(final Card aura) { if (!aura.hasKeyword(Keyword.ENCHANT)) { - return false; + return "No Enchant Keyword"; } for (KeywordInterface ki : aura.getKeywords(Keyword.ENCHANT)) { - String k = ki.getOriginal(); - String m[] = k.split(":"); - String v = m[1]; - if (!isValid(v.split(","), aura.getController(), aura, null)) { - return false; - } - if (!v.contains("inZone") && !isInPlay()) { - return false; + if (ki instanceof KeywordWithType kwt) { + String v = kwt.getValidType(); + String desc = kwt.getTypeDescription(); + if (!isValid(v.split(","), aura.getController(), aura, null) || (!v.contains("inZone") && !isInPlay())) { + return getName() + " is not " + Lang.nounWithAmount(1, desc); + } } } - return true; + return null; } + @Override - protected final boolean canBeEquippedBy(final Card equip, SpellAbility sa) { + protected String cantBeEquippedByMsg(final Card equip, SpellAbility sa) { if (!isInPlay()) { - return false; + return getName() + " is not in play"; } if (sa != null && sa.isEquip()) { - return isValid(sa.getTargetRestrictions().getValidTgts(), sa.getActivatingPlayer(), equip, sa); + if (!isValid(sa.getTargetRestrictions().getValidTgts(), sa.getActivatingPlayer(), equip, sa)) { + Equip eq = (Equip) sa.getKeyword(); + return getName() + " is not " + Lang.nounWithAmount(1, eq.getValidDescription()); + } + return null; } - return isCreature(); + if (!isCreature()) { + return getName() + " is not a creature"; + } + return null; } @Override - protected boolean canBeFortifiedBy(final Card fort) { - return isLand() && isInPlay() && !fort.isLand(); + protected String cantBeFortifiedByMsg(final Card fort) { + if (!isLand()) { + return getName() + " is not a Land"; + } + if (!isInPlay()) { + return getName() + " is not in play"; + } + if (fort.isLand()) { + return fort.getName() + " is a Land"; + } + + return null; } - /* (non-Javadoc) - * @see forge.game.GameEntity#canBeAttached(forge.game.card.Card, boolean) - */ @Override - public boolean canBeAttached(Card attach, SpellAbility sa, boolean checkSBA) { - // phase check there + public String cantBeAttachedMsg(final Card attach, SpellAbility sa, boolean checkSBA) { if (isPhasedOut() && !attach.isPhasedOut()) { - return false; + return getName() + " is phased out"; } - - return super.canBeAttached(attach, sa, checkSBA); + return super.cantBeAttachedMsg(attach, sa, checkSBA); } public final boolean canBeSacrificedBy(final SpellAbility source, final boolean effect) { diff --git a/forge-game/src/main/java/forge/game/card/CardState.java b/forge-game/src/main/java/forge/game/card/CardState.java index 57f9cf39896..289520ecf28 100644 --- a/forge-game/src/main/java/forge/game/card/CardState.java +++ b/forge-game/src/main/java/forge/game/card/CardState.java @@ -32,6 +32,7 @@ import forge.game.card.CardView.CardStateView; import forge.game.keyword.Keyword; import forge.game.keyword.KeywordCollection; import forge.game.keyword.KeywordInterface; +import forge.game.keyword.KeywordWithType; import forge.game.player.Player; import forge.game.replacement.ReplacementEffect; import forge.game.spellability.LandAbility; @@ -501,15 +502,8 @@ public class CardState extends GameObject implements IHasSVars, ITranslatable { String desc = ""; String extra = ""; for (KeywordInterface ki : this.getCachedKeyword(Keyword.ENCHANT)) { - String o = ki.getOriginal(); - String m[] = o.split(":"); - if (m.length > 2) { - desc = m[2]; - } else { - desc = m[1]; - if (CardType.isACardType(desc) || "Permanent".equals(desc) || "Player".equals(desc) || "Opponent".equals(desc)) { - desc = desc.toLowerCase(); - } + if (ki instanceof KeywordWithType kwt) { + desc = kwt.getTypeDescription(); } break; } diff --git a/forge-game/src/main/java/forge/game/keyword/Equip.java b/forge-game/src/main/java/forge/game/keyword/Equip.java index 66a5c2ad65d..bf7313943f1 100644 --- a/forge-game/src/main/java/forge/game/keyword/Equip.java +++ b/forge-game/src/main/java/forge/game/keyword/Equip.java @@ -7,6 +7,8 @@ public class Equip extends KeywordWithCost { public Equip() { } + public String getValidDescription() { return type; } + @Override protected void parse(String details) { String[] k = details.split(":"); diff --git a/forge-game/src/main/java/forge/game/keyword/KeywordWithType.java b/forge-game/src/main/java/forge/game/keyword/KeywordWithType.java index a31ace72781..2bf274f1272 100644 --- a/forge-game/src/main/java/forge/game/keyword/KeywordWithType.java +++ b/forge-game/src/main/java/forge/game/keyword/KeywordWithType.java @@ -3,38 +3,50 @@ package forge.game.keyword; import forge.card.CardType; public class KeywordWithType extends KeywordInstance { - protected String type; + protected String type = null; + protected String descType = null; + protected String reminderType = null; + + public String getValidType() { return type; } + public String getTypeDescription() { return descType; } @Override protected void parse(String details) { - if (CardType.isACardType(details)) { - type = details.toLowerCase(); - } else if (details.contains(":")) { + String k[]; + if (details.contains(":")) { switch (getKeyword()) { case AFFINITY: - type = details.split(":")[1]; - // type lists defined by rules should not be changed by TextChange in reminder text - if (type.equalsIgnoreCase("Outlaw")) { - type = "Assassin, Mercenary, Pirate, Rogue, and/or Warlock"; - } else if (type.equalsIgnoreCase("historic permanent")) { - type = "artifact, legendary, and/or Saga permanent"; - } - break; case BANDSWITH: + case ENCHANT: case HEXPROOF: case LANDWALK: - type = details.split(":")[1]; + k = details.split(":"); + type = k[0]; + descType = k[1]; break; default: - type = details.split(":")[0]; + k = details.split(":"); + type = k[1]; + descType = k[0]; } } else { - type = details; + descType = type = details; + } + + if (CardType.isACardType(descType) || "Permanent".equals(descType) || "Player".equals(descType) || "Opponent".equals(descType)) { + descType = descType.toLowerCase(); + } else if (descType.equalsIgnoreCase("Outlaw")) { + reminderType = "Assassin, Mercenary, Pirate, Rogue, and/or Warlock"; + } else if (type.equalsIgnoreCase("historic permanent")) { + reminderType = "artifact, legendary, and/or Saga permanent"; + } + if (reminderType == null) { + reminderType = type; } } @Override protected String formatReminderText(String reminderText) { - return String.format(reminderText, type); + return String.format(reminderText, reminderType); } } diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantAttach.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantAttach.java index 8b2ba2bda27..70704f3ac95 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantAttach.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantAttach.java @@ -6,7 +6,7 @@ import forge.game.zone.ZoneType; public class StaticAbilityCantAttach { - public static boolean cantAttach(final GameEntity target, final Card card, boolean checkSBA) { + public static StaticAbility cantAttach(final GameEntity target, final Card card, boolean checkSBA) { // CantTarget static abilities for (final Card ca : target.getGame().getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { @@ -15,11 +15,11 @@ public class StaticAbilityCantAttach { } if (applyCantAttachAbility(stAb, card, target, checkSBA)) { - return true; + return stAb; } } } - return false; + return null; } public static boolean applyCantAttachAbility(final StaticAbility stAb, final Card card, final GameEntity target, boolean checkSBA) { diff --git a/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectTargets.java b/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectTargets.java index 95b09fa716e..6861b922ddd 100644 --- a/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectTargets.java +++ b/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectTargets.java @@ -169,9 +169,12 @@ public final class InputSelectTargets extends InputSyncronizedBase { // TODO should use sa.canTarget(card) instead? // it doesn't have messages - if (sa.isSpell() && sa.getHostCard().isAura() && !card.canBeAttached(sa.getHostCard(), sa)) { - showMessage(sa.getHostCard() + " - Cannot enchant this card (Shroud? Protection? Restrictions?)."); - return false; + if (sa.isSpell() && sa.getHostCard().isAura()) { + String msg = card.cantBeAttachedMsg(sa.getHostCard(), sa); + if (msg != null) { + showMessage(sa.getHostCard() + " - " + msg); + return false; + } } //If the card is not a valid target if (!card.canBeTargetedBy(sa)) { From cd84663beddb9d1d2fccf41f02db029d1553420a Mon Sep 17 00:00:00 2001 From: Simisays <67333662+Simisays@users.noreply.github.com> Date: Sun, 28 Sep 2025 15:55:52 +0200 Subject: [PATCH 262/355] [ECL] 10 cards (#8794) --- .../ashling_rekindled_ashling_rimebound.txt | 26 +++++++++++++++++ .../cardsfolder/upcoming/ashlings_command.txt | 11 ++++++++ .../upcoming/bitterbloom_bearer.txt | 12 ++++++++ forge-gui/res/cardsfolder/upcoming/deceit.txt | 11 ++++++++ ...rier_of_dawn_isilu_carrier_of_twilight.txt | 26 +++++++++++++++++ .../res/cardsfolder/upcoming/emptiness.txt | 11 ++++++++ .../cardsfolder/upcoming/figure_of_fable.txt | 9 ++++++ .../upcoming/morningtides_light.txt | 12 ++++++++ .../cardsfolder/upcoming/mutable_explorer.txt | 9 ++++++ ...derwine_wisdom_sygg_wanderbrine_shield.txt | 28 +++++++++++++++++++ 10 files changed, 155 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/ashling_rekindled_ashling_rimebound.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/ashlings_command.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/bitterbloom_bearer.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/deceit.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/eirdu_carrier_of_dawn_isilu_carrier_of_twilight.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/emptiness.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/figure_of_fable.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/morningtides_light.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/mutable_explorer.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/sygg_wanderwine_wisdom_sygg_wanderbrine_shield.txt diff --git a/forge-gui/res/cardsfolder/upcoming/ashling_rekindled_ashling_rimebound.txt b/forge-gui/res/cardsfolder/upcoming/ashling_rekindled_ashling_rimebound.txt new file mode 100644 index 00000000000..92a3e55badf --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/ashling_rekindled_ashling_rimebound.txt @@ -0,0 +1,26 @@ +Name:Ashling, Rekindled +ManaCost:1 R +Types:Legendary Creature Elemental Sorcerer +PT:1/3 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ Whenever this creature enters or transforms into CARDNAME, you may discard a card. If you do, draw a card. +T:Mode$ Transformed | ValidCard$ Card.Self | Execute$ TrigDraw | Secondary$ True | TriggerDescription$ Whenever this creature enters or transforms into CARDNAME, you may discard a card. If you do, draw a card. +SVar:TrigDraw:AB$ Draw | Cost$ Discard<1/Card> | NumCards$ 1 +T:Mode$ Phase | Phase$ Main1 | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of your first main phase, you may pay {U}. If you do, transform NICKNAME. +SVar:TrigTransform:AB$ SetState | Cost$ U | Defined$ Self | Mode$ Transform +DeckHas:Ability$Discard +AlternateMode:DoubleFaced +Oracle:Whenever this creature enters or transforms into Ashling, Rekindled, you may discard a card. If you do, draw a card.\nAt the beginning of your first main phase, you may pay {U}. If you do, transform Ashling. + +ALTERNATE + +Name:Ashling, Rimebound +ManaCost:no cost +Colors:blue +Types:Legendary Creature Elemental Wizard +PT:1/3 +T:Mode$ Transformed | ValidCard$ Card.Self | Execute$ TrigMana | TriggerDescription$Whenever this creature transforms into CARDNAME and at the beginning of your first main phase, add two mana of any one color. Spend this mana only to cast spells with mana value 4 or greater. +T:Mode$ Phase | Phase$ Main1 | Secondary$ True | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigMana | TriggerDescription$ Whenever this creature transforms into CARDNAME and at the beginning of your first main phase, add two mana of any one color. Spend this mana only to cast spells with mana value 4 or greater. +SVar:TrigMana:DB$ Mana | Produced$ Any | Amount$ 2 | RestrictValid$ Spell.cmcGE4 +T:Mode$ Phase | Phase$ Main1 | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of your first main phase, you may pay {R}. If you do, transform NICKNAME. +SVar:TrigTransform:AB$ SetState | Cost$ R | Defined$ Self | Mode$ Transform +Oracle:Whenever this creature transforms into Ashling, Rimebound and at the beginning of your first main phase, add two mana of any one color. Spend this mana only to cast spells with mana value 4 or greater.\nAt the beginning of your first main phase, you may pay {R}. If you do, transform Ashling. diff --git a/forge-gui/res/cardsfolder/upcoming/ashlings_command.txt b/forge-gui/res/cardsfolder/upcoming/ashlings_command.txt new file mode 100644 index 00000000000..835e8692ed9 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/ashlings_command.txt @@ -0,0 +1,11 @@ +Name:Ashling's Command +ManaCost:3 U R +Types:Kindred Instant Elemental +A:SP$ Charm | Choices$ DBToken,DBDraw,DBDamage,DBTreasure | CharmNum$ 2 +SVar:DBToken:DB$ CopyPermanent | ValidTgts$ Card.Elemental+YouCtrl | TgtPrompt$ Select target Elemental you control | SpellDescription$ Create a token that's a copy of target Elemental you control. +SVar:DBDraw:DB$ Draw | NumCards$ 2 | ValidTgts$ Player | TgtPrompt$ Choose a player | SpellDescription$ Target player draws two cards. +SVar:DBDamage:DB$ DamageAll | ValidTgts$ Player | NumDmg$ 2 | ValidCards$ Creature | ValidDescription$ each creature target player controls | SpellDescription$ CARDNAME deals 2 damage to each creature target player controls. +SVar:DBTreasure:DB$ Token | ValidTgts$ Player | TokenOwner$ ThisTargetedPlayer | TokenAmount$ 2 | TokenScript$ c_a_treasure_sac | SpellDescription$ Target player creates two Treasure tokens. +DeckHas:Ability$Token & Type$Treasure|Artifact +DeckHints:Type$Elemental +Oracle:Choose two —\n• Create a token that's a copy of target Elemental you control.\n• Target player draws two cards.\n• Ashling's Command deals 2 damage to each creature target player controls.\n• Target player creates two Treasure tokens. diff --git a/forge-gui/res/cardsfolder/upcoming/bitterbloom_bearer.txt b/forge-gui/res/cardsfolder/upcoming/bitterbloom_bearer.txt new file mode 100644 index 00000000000..7e1c1cfa47d --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/bitterbloom_bearer.txt @@ -0,0 +1,12 @@ +Name:Bitterbloom Bearer +ManaCost:B B +Types:Creature Faerie Rogue +PT:1/1 +K:Flash +K:Flying +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigLoseLife | TriggerDescription$ At the beginning of your upkeep, you lose 1 life and create a 1/1 black Faerie Rogue creature token with flying. +SVar:TrigLoseLife:DB$ LoseLife | LifeAmount$ 1 | SubAbility$ DBToken +SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ b_1_1_faerie_rogue_flying | TokenOwner$ You +SVar:AICastPreference:NeverCastIfLifeBelow$ 4 +DeckHas:Ability$Token +Oracle:Flash\nFlying\nAt the beginning of your upkeep, you lose 1 life and create a 1/1 blue and black Faerie creature token with flying. diff --git a/forge-gui/res/cardsfolder/upcoming/deceit.txt b/forge-gui/res/cardsfolder/upcoming/deceit.txt new file mode 100644 index 00000000000..772e70b7ea3 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/deceit.txt @@ -0,0 +1,11 @@ +Name:Deceit +ManaCost:4 UB UB +Types:Creature Elemental Incarnation +PT:5/5 +K:Evoke:UB UB +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | CheckSVar$ CastSA>Count$Adamant_2.Blue.2.0 | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When this creature enters, if {U}{U} was spent to cast it, return up to one other target nonland permanent to its owner's hand. +SVar:TrigChange:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Permanent.nonLand+Other | TgtPrompt$ Select up to one other target nonland permanent +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | CheckSVar$ CastSA>Count$Adamant_2.Black.2.0 | ValidCard$ Card.Self | Execute$ TrigDiscard | TriggerDescription$ When this creature enters, if {B}{B} was spent to cast it, target opponent reveals their hand. You choose a nonland card from it. That player discards that card. +SVar:TrigDiscard:DB$ Discard | ValidTgts$ Opponent | Mode$ RevealYouChoose | DiscardValid$ Card.nonLand | NumCards$ 1 +DeckHas:Ability$Discard +Oracle:When this creature enters, if {U}{U} was spent to cast it, return up to one other target nonland permanent to its owner's hand.\nWhen this creature enters, if {B}{B} was spent to cast it, target opponent reveals their hand. You choose a nonland card from it. That player discards that card.\nEvoke {U/B}{U/B} diff --git a/forge-gui/res/cardsfolder/upcoming/eirdu_carrier_of_dawn_isilu_carrier_of_twilight.txt b/forge-gui/res/cardsfolder/upcoming/eirdu_carrier_of_dawn_isilu_carrier_of_twilight.txt new file mode 100644 index 00000000000..c7bffe073be --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/eirdu_carrier_of_dawn_isilu_carrier_of_twilight.txt @@ -0,0 +1,26 @@ +Name:Eirdu, Carrier of Dawn +ManaCost:3 W W +Types:Legendary Creature Elemental God +PT:5/5 +K:Flying +K:Lifelink +S:Mode$ Continuous | Affected$ Card.Creature+YouCtrl+wasCast | AffectedZone$ Stack | AddKeyword$ Convoke | Description$ Creature spells you cast have convoke. (Your creatures can help cast those spells. Each creature you tap while casting a creature spell pays for {1} or one mana of that creature's color.) +T:Mode$ Phase | Phase$ Main1 | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of your first main phase, you may pay {B}. If you do, transform NICKNAME. +SVar:TrigTransform:AB$ SetState | Cost$ B | Defined$ Self | Mode$ Transform +AlternateMode:DoubleFaced +DeckHas:Ability$LifeGain|Counters +Oracle:Flying, lifelink\nCreature spells you cast have convoke. (Your creatures can help cast those spells. Each creature you tap while casting a creature spell pays for {1} or one mana of that creature's color.)\nAt the beginning of your first main phase, you may pay {B}. If you do, transform Eirdu. + +ALTERNATE + +Name:Isilu, Carrier of Twilight +ManaCost:no cost +Colors:black +Types:Legendary Creature Elemental God +PT:5/5 +K:Flying +K:Lifelink +S:Mode$ Continuous | Affected$ Card.Creature+YouCtrl+nonToken+Other | AffectedZone$ Battlefield | AddKeyword$ Persist | Description$ Each other nontoken creature you control has persist. (When it dies, if it had no -1/-1 counters on it, return it to the battlefield under its owner’s control with a -1/-1 counter on it.) +T:Mode$ Phase | Phase$ Main1 | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of your first main phase, you may pay {W}. If you do, transform NICKNAME. +SVar:TrigTransform:AB$ SetState | Cost$ W | Defined$ Self | Mode$ Transform +Oracle:Flying, lifelink\nEach other nontoken creature you control has persist. (When it dies, if it had no -1/-1 counters on it, return it to the battlefield under its owner's control with a -1/-1 counter on it.) At the beginning of your first main phase, you may pay {W}. If you do, transform Isilu. diff --git a/forge-gui/res/cardsfolder/upcoming/emptiness.txt b/forge-gui/res/cardsfolder/upcoming/emptiness.txt new file mode 100644 index 00000000000..d754b8efb9b --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/emptiness.txt @@ -0,0 +1,11 @@ +Name:Emptiness +ManaCost:4 WB WB +Types:Creature Elemental Incarnation +PT:3/5 +K:Evoke:WB WB +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | CheckSVar$ CastSA>Count$Adamant_2.White.2.0 | ValidCard$ Card.Self | Execute$ TrigReturn | TriggerDescription$ When this creature enters, if {W}{W} was spent to cast it, return target creature card with mana value 3 or less from your graveyard to the battlefield. +SVar:TrigReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ValidTgts$ Creature.YouCtrl+cmcLE3 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | CheckSVar$ CastSA>Count$Adamant_2.Black.2.0 | ValidCard$ Card.Self | Execute$ TrigPutCounters | TriggerDescription$ When this creature enters, if {B}{B} was spent to cast it, put three -1/-1 counters on up to one target creature. +SVar:TrigPutCounters:DB$ PutCounter | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ 1 | CounterNum$ 3 | TgtPrompt$ Select up to one target creature | CounterType$ M1M1 +DeckHas:Ability$Graveyard|Counters +Oracle:When this creature enters, if {W}{W} was spent to cast it, return target creature card with mana value 3 or less from your graveyard to the battlefield.\nWhen this creature enters, if {B}{B} was spent to cast it, put three -1/-1 counters on up to one target creature.\nEvoke {W/B}{W/B} diff --git a/forge-gui/res/cardsfolder/upcoming/figure_of_fable.txt b/forge-gui/res/cardsfolder/upcoming/figure_of_fable.txt new file mode 100644 index 00000000000..a9e20245eeb --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/figure_of_fable.txt @@ -0,0 +1,9 @@ +Name:Figure of Fable +ManaCost:GW +Types:Creature Kithkin +PT:1/1 +A:AB$ Animate | Cost$ GW | Types$ Kithkin,Scout | RemoveCreatureTypes$ True | Duration$ Permanent | Power$ 2 | Toughness$ 3 | SpellDescription$ This creature becomes a Kithkin Scout with base power and toughness 2/3. +A:AB$ Animate | Cost$ 1 GW GW | ConditionPresent$ Card.Self+Scout | Types$ Kithkin,Soldier | RemoveCreatureTypes$ True | Duration$ Permanent | Power$ 4 | Toughness$ 5 | SpellDescription$ If this creature is a Scout, it becomes a Kithkin Soldier with base power and toughness 4/5. +A:AB$ Animate | Cost$ 3 GW GW GW | ConditionPresent$ Card.Self+Soldier | Types$ Kithkin,Avatar | RemoveCreatureTypes$ True | Duration$ Permanent | Power$ 7 | Toughness$ 8 | Keywords$ Protection:Player.Opponent:each of your opponents | SpellDescription$ If this creature is a Soldier, it becomes a Kithkin Avatar with base power and toughness 7/8 and protection from each of your opponents. +DeckHas:Type$Soldier|Scout|Avatar +Oracle:{G/W}: This creature becomes a Kithkin Scout with base power and toughness 2/3.\n{1}{G/W}{G/W}: If this creature is a Scout, it becomes a Kithkin Soldier with base power and toughness 4/5.\n{3}{G/W}{G/W}{G/W}: If this creature is a Soldier, it becomes a Kithkin Avatar with base power and toughness 7/8 and protection from each of your opponents. diff --git a/forge-gui/res/cardsfolder/upcoming/morningtides_light.txt b/forge-gui/res/cardsfolder/upcoming/morningtides_light.txt new file mode 100644 index 00000000000..38c22e865a5 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/morningtides_light.txt @@ -0,0 +1,12 @@ +Name:Morningtide's Light +ManaCost:3 W +Types:Sorcery +A:SP$ ChangeZone | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ X | Origin$ Battlefield | Destination$ Exile | TgtPrompt$ Select any number of target creatures | SubAbility$ DelTrig | RememberChanged$ True | SpellDescription$ Exile any number of target creatures. At the beginning of the next end step, return those cards to the battlefield tapped under their owners' control. +SVar:DelTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigReturn | RememberObjects$ RememberedLKI | TriggerDescription$ Return exiled permanent to the battlefield under their owner's control | SubAbility$ DBCleanup +SVar:TrigReturn:DB$ ChangeZone | Origin$ Exile | Destination$ Battlefield | Tapped$ True | Defined$ DelayTriggerRememberedLKI +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | SubAbility$ DBEffect +SVar:DBEffect:DB$ Effect | ReplacementEffects$ PreventDamage | AILogic$ Fog | Duration$ UntilYourNextTurn | SubAbility$ DBExileSelf | SpellDescription$ Until your next turn, prevent all damage that would be dealt to you. +SVar:PreventDamage:Event$ DamageDone | Prevent$ True | ActiveZones$ Command | ValidTarget$ You | Description$ Until your next turn, prevent all damage that would be dealt to you. +SVar:DBExileSelf:DB$ ChangeZone | Origin$ Stack | Destination$ Exile | StackDescription$ None | SpellDescription$ Exile CARDNAME. +SVar:X:Count$Valid Creature +Oracle:Exile any number of target creatures. At the beginning of the next end step, return those cards to the battlefield tapped under their owners' control.\nUntil your next turn, prevent all damage that would be dealt to you.\nExile Morningtide's Light. diff --git a/forge-gui/res/cardsfolder/upcoming/mutable_explorer.txt b/forge-gui/res/cardsfolder/upcoming/mutable_explorer.txt new file mode 100644 index 00000000000..db04d9a1fd7 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/mutable_explorer.txt @@ -0,0 +1,9 @@ +Name:Mutable Explorer +ManaCost:2 G +Types:Creature Shapeshifter +PT:1/1 +K:Changeling +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When this creature enters, create a tapped Mutavault token. (It's a land with "{T}: Add {C}" and "{1}: This token becomes a 2/2 creature with all creature types until end of turn. It's still a land.") +SVar:TrigToken:DB$ CopyPermanent | DefinedName$ Mutavault | TokenTapped$ True +DeckHas:Ability$Token & Type$Land +Oracle:Changeling (This card is every creature type.)\nWhen this creature enters, create a tapped Mutavault token. (It's a land with "{T}: Add {C}" and "{1}: This token becomes a 2/2 creature with all creature types until end of turn. It's still a land.") diff --git a/forge-gui/res/cardsfolder/upcoming/sygg_wanderwine_wisdom_sygg_wanderbrine_shield.txt b/forge-gui/res/cardsfolder/upcoming/sygg_wanderwine_wisdom_sygg_wanderbrine_shield.txt new file mode 100644 index 00000000000..11d6dcce0b5 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/sygg_wanderwine_wisdom_sygg_wanderbrine_shield.txt @@ -0,0 +1,28 @@ +Name:Sygg, Wanderwine Wisdom +ManaCost:1 U +Types:Legendary Creature Merfolk Wizard +PT:2/2 +S:Mode$ CantBlockBy | ValidAttacker$ Creature.Self | Description$ CARDNAME can't be blocked. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigAnimate | TriggerDescription$ Whenever this creature enters or transforms into CARDNAME, target creature gains "Whenever this creature deals combat damage to a player or planeswalker, draw a card" until end of turn. +T:Mode$ Transformed | ValidCard$ Card.Self | Execute$ TrigAnimate | Secondary$ True | TriggerDescription$ Whenever this creature enters or transforms into CARDNAME, target creature gains "Whenever this creature deals combat damage to a player or planeswalker, draw a card" until end of turn. +SVar:TrigAnimate:DB$ Animate | ValidTgts$ Creature | Triggers$ DamageTrig +SVar:DamageTrig:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player,Planeswalker | Execute$ TrigDraw | CombatDamage$ True | TriggerDescription$ Whenever this creature deals combat damage to a player or planeswalker, draw a card +SVar:TrigDraw:DB$ Draw | NumCards$ 1 +T:Mode$ Phase | Phase$ Main1 | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of your first main phase, you may pay {W}. If you do, transform NICKNAME. +SVar:TrigTransform:AB$ SetState | Cost$ W | Defined$ Self | Mode$ Transform +AlternateMode:DoubleFaced +Oracle:Sygg can't be blocked.\nWhenever this creature enters or transforms into Sygg, Wanderwine Wisdom, target creature gains "Whenever this creature deals combat damage to a player or planeswalker, draw a card" until end of turn.\nAt the beginning of your first main phase, you may pay {W}. If you do, transform Sygg. + +ALTERNATE + +Name:Sygg, Wanderbrine Shield +ManaCost:no cost +Colors:white +Types:Legendary Creature Merfolk Rogue +PT:2/2 +S:Mode$ CantBlockBy | ValidAttacker$ Creature.Self | Description$ CARDNAME can't be blocked. +T:Mode$ Transformed | ValidCard$ Card.Self | Execute$ TrigProt | TriggerDescription$ Whenever this creature transforms into CARDNAME, target creature you control gains protection from each color until your next turn. +SVar:TrigProt:DB$ Pump | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | KW$ Protection from each color | Duration$ UntilYourNextTurn +T:Mode$ Phase | Phase$ Main1 | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of your first main phase, you may pay {U}. If you do, transform NICKNAME. +SVar:TrigTransform:AB$ SetState | Cost$ U | Defined$ Self | Mode$ Transform +Oracle:Sygg can't be blocked.\nWhenever this creature transforms into Sygg, Wanderbrine Shield, target creature you control gains protection from each color until your next turn.\nAt the beginning of your first main phase, you may pay {U}. If you do, transform Sygg. From a21a61cb051dfb12500762f596ba1deec50df675 Mon Sep 17 00:00:00 2001 From: Simisays <67333662+Simisays@users.noreply.github.com> Date: Sun, 28 Sep 2025 21:07:54 +0200 Subject: [PATCH 263/355] SLD 11 cards + support for new partner variants (#8797) --- .../src/main/java/forge/card/CardRules.java | 7 +++++++ .../src/main/java/forge/game/card/Card.java | 1 + .../src/main/java/forge/game/keyword/Keyword.java | 2 ++ .../upcoming/abby_merciless_soldier.txt | 13 +++++++++++++ .../upcoming/aloy_savior_of_meridian.txt | 11 +++++++++++ .../cardsfolder/upcoming/atreus_impulsive_son.txt | 10 ++++++++++ .../cardsfolder/upcoming/ellie_brick_master.txt | 9 +++++++++ .../upcoming/ellie_vengeful_hunter.txt | 9 +++++++++ .../upcoming/jaws_relentless_predator.txt | 15 +++++++++++++++ .../upcoming/jin_sakai_ghost_of_tsushima.txt | 12 ++++++++++++ .../upcoming/joel_resolute_survivor.txt | 12 ++++++++++++ .../cardsfolder/upcoming/kratos_god_of_war.txt | 10 ++++++++++ .../cardsfolder/upcoming/kratos_stoic_father.txt | 14 ++++++++++++++ .../upcoming/nathan_drake_treasure_hunter.txt | 11 +++++++++++ forge-gui/res/tokenscripts/cordyceps_infected.txt | 6 ++++++ 15 files changed, 142 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/abby_merciless_soldier.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/aloy_savior_of_meridian.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/atreus_impulsive_son.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/ellie_brick_master.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/ellie_vengeful_hunter.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/jaws_relentless_predator.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/jin_sakai_ghost_of_tsushima.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/joel_resolute_survivor.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/kratos_god_of_war.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/kratos_stoic_father.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/nathan_drake_treasure_hunter.txt create mode 100644 forge-gui/res/tokenscripts/cordyceps_infected.txt diff --git a/forge-core/src/main/java/forge/card/CardRules.java b/forge-core/src/main/java/forge/card/CardRules.java index 2a9bb30ba4b..450f727c3e4 100644 --- a/forge-core/src/main/java/forge/card/CardRules.java +++ b/forge-core/src/main/java/forge/card/CardRules.java @@ -324,6 +324,12 @@ public final class CardRules implements ICardCharacteristics { } if (hasKeyword("Friends forever") && b.hasKeyword("Friends forever")) { legal = true; // Stranger Things Secret Lair gimmick partner commander + } + if (hasKeyword("Partner - Survivors") && b.hasKeyword("Partner - Survivors")) { + legal = true; // The Last of Us Secret Lair gimmick partner commander + } + if (hasKeyword("Partner - Father & Son") && b.hasKeyword("Partner - Father & Son")) { + legal = true; // God of War Secret Lair gimmick partner commander } if (hasKeyword("Choose a Background") && b.canBeBackground() || b.hasKeyword("Choose a Background") && canBeBackground()) { @@ -342,6 +348,7 @@ public final class CardRules implements ICardCharacteristics { } return canBeCommander() && (hasKeyword("Partner") || !this.partnerWith.isEmpty() || hasKeyword("Friends forever") || hasKeyword("Choose a Background") || + hasKeyword("Partner - Father & Son") || hasKeyword("Partner - Survivors") || hasKeyword("Doctor's companion") || isDoctor()); } diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 49894c670aa..35acfe1de7a 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -2598,6 +2598,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr || keyword.equals("Battle cry") || keyword.equals("Devoid") || keyword.equals("Riot") || keyword.equals("Daybound") || keyword.equals("Nightbound") || keyword.equals("Friends forever") || keyword.equals("Choose a Background") + || keyword.equals("Partner - Father & Son") || keyword.equals("Partner - Survivors") || keyword.equals("Space sculptor") || keyword.equals("Doctor's companion") || keyword.equals("Start your engines")) { sbLong.append(keyword).append(" (").append(inst.getReminderText()).append(")"); diff --git a/forge-game/src/main/java/forge/game/keyword/Keyword.java b/forge-game/src/main/java/forge/game/keyword/Keyword.java index 8a28b77cf5c..809b824c07f 100644 --- a/forge-game/src/main/java/forge/game/keyword/Keyword.java +++ b/forge-game/src/main/java/forge/game/keyword/Keyword.java @@ -141,6 +141,8 @@ public enum Keyword { OFFSPRING("Offspring", KeywordWithCost.class, false, "You may pay an additional %s as you cast this spell. If you do, when this creature enters, create a 1/1 token copy of it."), OVERLOAD("Overload", KeywordWithCost.class, false, "You may cast this spell for its overload cost. If you do, change its text by replacing all instances of \"target\" with \"each.\""), PARTNER("Partner", Partner.class, true, "You can have two commanders if both have partner."), + PARTNER_SURVIVOR("Partner - Survivors", Partner.class, true, "You can have two commanders if both have this ability."), + PARTNER_FATHER_AND_SON("Partner - Father & Son", Partner.class, true, "You can have two commanders if both have this ability."), PERSIST("Persist", SimpleKeyword.class, false, "When this creature dies, if it had no -1/-1 counters on it, return it to the battlefield under its owner's control with a -1/-1 counter on it."), PHASING("Phasing", SimpleKeyword.class, true, "This phases in or out before you untap during each of your untap steps. While it's phased out, it's treated as though it doesn't exist."), PLOT("Plot", KeywordWithCost.class, false, "You may pay %s and exile this card from your hand. Cast it as a sorcery on a later turn without paying its mana cost. Plot only as a sorcery."), diff --git a/forge-gui/res/cardsfolder/upcoming/abby_merciless_soldier.txt b/forge-gui/res/cardsfolder/upcoming/abby_merciless_soldier.txt new file mode 100644 index 00000000000..d83e8604560 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/abby_merciless_soldier.txt @@ -0,0 +1,13 @@ +Name:Abby, Merciless Soldier +ManaCost:1 R G +Types:Legendary Creature Human Survivor +PT:4/4 +K:Partner - Survivors +T:Mode$ SpellCast | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When you cast this spell, create a number of 1/1 black Fungus Zombie creature tokens named Cordyceps Infected equal to the amount of mana spent to cast it. +SVar:TrigToken:DB$ Token | TokenAmount$ X | TokenScript$ cordyceps_infected | TokenOwner$ You +SVar:X:Count$CastTotalManaSpent +R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplaceWith$ DBChooseOpp | Layer$ Control | Description$ NICKNAME enters under the control of an opponent of your choice. +SVar:DBChooseOpp:DB$ ChoosePlayer | Defined$ You | Choices$ Player.Opponent | ChoiceTitle$ Choose an opponent to give control to | AILogic$ Curse | SubAbility$ MoveToPlay +SVar:MoveToPlay:DB$ ChangeZone | Hidden$ True | Origin$ All | Destination$ Battlefield | Defined$ ReplacedCard | GainControl$ ChosenPlayer +DeckHas:Ability$Token & Type$Zombie|Fungus +Oracle:When you cast this spell, create a number of 1/1 black Fungus Zombie creature tokens named Cordyceps Infected equal to the amount of mana spent to cast it.\nAbby enters under the control of an opponent of your choice.\nPartner—Survivors (You can have two commanders if both have this ability.) diff --git a/forge-gui/res/cardsfolder/upcoming/aloy_savior_of_meridian.txt b/forge-gui/res/cardsfolder/upcoming/aloy_savior_of_meridian.txt new file mode 100644 index 00000000000..ae6ec383090 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/aloy_savior_of_meridian.txt @@ -0,0 +1,11 @@ +Name:Aloy, Savior of Meridian +ManaCost:3 G U +Types:Legendary Creature Human Warrior +PT:3/5 +K:Vigilance +K:Reach +T:Mode$ AttackersDeclared | AttackingPlayer$ You | ValidAttackers$ Creature.Artifact+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigDiscover | TriggerDescription$ In You, All Things Are Possible — Whenever one or more artifact creatures you control attack, discover X, where X is the greatest power among them. (Exile cards from the top of your library until you exile a nonland card with that mana value or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.) +SVar:TrigDiscover:DB$ Discover | Num$ X +SVar:X:TriggerObjectsAttackers$GreatestPower +DeckNeeds:Type$Artifact & Type$Creature +Oracle:Vigilance, reach\nIn You, All Things Are Possible — Whenever one or more artifact creatures you control attack, discover X, where X is the greatest power among them. (Exile cards from the top of your library until you exile a nonland card with that mana value or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.) diff --git a/forge-gui/res/cardsfolder/upcoming/atreus_impulsive_son.txt b/forge-gui/res/cardsfolder/upcoming/atreus_impulsive_son.txt new file mode 100644 index 00000000000..b6fc41bbc8d --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/atreus_impulsive_son.txt @@ -0,0 +1,10 @@ +Name:Atreus, Impulsive Son +ManaCost:1 U R +Types:Legendary Creature God Archer +PT:2/4 +K:Reach +K:Partner - Father & Son +A:AB$ Draw | Cost$ 3 T | NumCards$ X | SubAbility$ DBDamage | SpellDescription$ Draw a card for each experience counter you have, then discard a card. +SVar:DBDamage:DB$ DealDamage | NumDmg$ 2 | Defined$ Opponent | SpellDescription$ CARDNAME deals 2 damage to each opponent. +SVar:X:Count$YourCountersExperience +Oracle:Reach\n{3}, {T}: Draw a card for each experience counter you have, then discard a card. Atreus, Impulsive Son deals 2 damage to each opponent.\nPartner-Father & son diff --git a/forge-gui/res/cardsfolder/upcoming/ellie_brick_master.txt b/forge-gui/res/cardsfolder/upcoming/ellie_brick_master.txt new file mode 100644 index 00000000000..2823c85f96f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/ellie_brick_master.txt @@ -0,0 +1,9 @@ +Name:Ellie, Brick Master +ManaCost:1 R +Types:Legendary Creature Human Survivor +PT:2/1 +K:Partner - Survivors +T:Mode$ AttackersDeclaredOneTarget | AttackedTarget$ Opponent | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Distract the Horde - Whenever a player attacks one of your opponents, that attacking player creates a tapped 1/1 black Fungus Zombie creature token named Cordyceps Infected that's attacking that opponent. +SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ cordyceps_infected | TokenOwner$ TriggeredAttackingPlayer | TokenTapped$ True | TokenAttacking$ TriggeredAttackedTarget +DeckHas:Ability$Token & Type$Zombie|Fungus +Oracle:Distract the Horde - Whenever a player attacks one of your opponents, that attacking player creates a tapped 1/1 black Fungus Zombie creature token named Cordyceps Infected that's attacking that opponent.\nPartner — Survivors (You can have two commanders if both have this ability.) diff --git a/forge-gui/res/cardsfolder/upcoming/ellie_vengeful_hunter.txt b/forge-gui/res/cardsfolder/upcoming/ellie_vengeful_hunter.txt new file mode 100644 index 00000000000..30b5001b11c --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/ellie_vengeful_hunter.txt @@ -0,0 +1,9 @@ +Name:Ellie, Vengeful Hunter +ManaCost:1 B R +Types:Legendary Creature Human Survivor +PT:3/1 +K:Partner - Survivors +A:AB$ DealDamage | Cost$ PayLife<2> Sac<1/Creature.Other/another creature> | NumDmg$ 2 | ValidTgts$ Player | SubAbility$ DBPump | SpellDescription$ NICKNAME deals 2 damage to target player and gains indestructible until end of turn. +SVar:DBPump:DB$ Pump | Defined$ Self | KW$ Indestructible +DeckHas:Ability$Sacrifice +Oracle:Pay 2 life, Sacrifice another creature: Ellie deals 2 damage to target player and gains indestructible until end of turn.\nPartner - Survivors (You can have two commanders if both have this ability.) diff --git a/forge-gui/res/cardsfolder/upcoming/jaws_relentless_predator.txt b/forge-gui/res/cardsfolder/upcoming/jaws_relentless_predator.txt new file mode 100644 index 00000000000..f54416fbd56 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/jaws_relentless_predator.txt @@ -0,0 +1,15 @@ +Name:Jaws, Relentless Predator +ManaCost:3 R R +Types:Legendary Creature Shark +PT:5/5 +K:Trample +K:Haste +T:Mode$ DamageDone | ValidSource$ Creature.YouCtrl | ValidTarget$ Player | CombatDamage$ True | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever NICKNAME deals combat damage to a player, create that many Blood tokens. +SVar:TrigToken:DB$ Token | TokenAmount$ X | TokenScript$ c_a_blood_draw | TokenOwner$ You +SVar:X:TriggerCount$DamageAmount +T:Mode$ Sacrificed | ValidCard$ Artifact.nonCreature | Execute$ TrigDamage | TriggerZones$ Battlefield | TriggerDescription$ Whenever a noncreature artifact is sacrificed or destroyed, NICKNAME deals 1 damage to each opponent. +T:Mode$ Destroyed | ValidCard$ Artifact.nonCreature | Execute$ TrigDamage | TriggerZones$ Battlefield | Secondary$ True | TriggerDescription$ Whenever a noncreature artifact is sacrificed or destroyed, NICKNAME deals 1 damage to each opponent. +SVar:TrigDamage:DB$ DealDamage | NumDmg$ 1 | Defined$ Opponent +DeckHints:Ability$Sacrifice|Token & Type$Blood|Treasure|Map|Clue +DeckHas:Ability$Token|Sacrifice & Type$Artifact|Blood +Oracle:Trample, haste\nWhenever Jaws deals combat damage to a player, create that many Blood tokens.\nWhenever a noncreature artifact is sacrificed or destroyed, Jaws deals 1 damage to each opponent. diff --git a/forge-gui/res/cardsfolder/upcoming/jin_sakai_ghost_of_tsushima.txt b/forge-gui/res/cardsfolder/upcoming/jin_sakai_ghost_of_tsushima.txt new file mode 100644 index 00000000000..28c9904ee1b --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/jin_sakai_ghost_of_tsushima.txt @@ -0,0 +1,12 @@ +Name:Jin Sakai, Ghost of Tsushima +ManaCost:1 W U B +Types:Legendary Creature Human Samurai +PT:2/4 +T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigDraw | TriggerDescription$ Whenever NICKNAME deals combat damage to a player, draw a card. +SVar:TrigDraw:DB$ Draw | NumCards$ 1 +T:Mode$ Attacks | ValidCard$ Creature.YouCtrl | Alone$ True | TriggerZones$ Battlefield | Execute$ TrigCharm | IsPresent$ Creature.attacking+Other | NoResolvingCheck$ True | PresentCompare$ EQ0 | TriggerDescription$ Whenever a creature you control attacks a player, if no other creatures are attacking that player, ABILITY +SVar:TrigCharm:DB$ Charm | Choices$ Standoff,Ghost +SVar:Standoff:DB$ Pump | Defined$ TriggeredAttackerLKICopy | KW$ Double Strike | SpellDescription$ Standoff — It gains double strike until end of turn. +SVar:Ghost:DB$ Effect | RememberObjects$ Self | ExileOnMoved$ Battlefield | StaticAbilities$ Unblockable | SpellDescription$ Ghost — It can't be blocked this turn. +SVar:Unblockable:Mode$ CantBlockBy | ValidAttacker$ Card.IsRemembered | Description$ EFFECTSOURCE can't be blocked this turn. +Oracle:Whenever Jin Sakai deals combat damage to a player, draw a card.\nWhenever a creature you control attacks a player, if no other creatures are attacking that player, choose one —-\n• Standoff — It gains double strike until end of turn.\n• Ghost — It can't be blocked this turn. diff --git a/forge-gui/res/cardsfolder/upcoming/joel_resolute_survivor.txt b/forge-gui/res/cardsfolder/upcoming/joel_resolute_survivor.txt new file mode 100644 index 00000000000..d95aa4ce05d --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/joel_resolute_survivor.txt @@ -0,0 +1,12 @@ +Name:Joel, Resolute Survivor +ManaCost:3 B G +Types:Legendary Creature Human Survivor +PT:4/4 +K:Menace +K:Partner - Survivors +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.token | Execute$ TrigPutCounter | ActivationLimit$ 1 | TriggerDescription$ Whenever a creature token dies, put a +1/+1 counter on NICKNAME and draw a card. This ability triggers only once each turn. +SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterNum$ 1 | CounterType$ P1P1 | SubAbility$ DBDraw +SVar:TrigDraw:DB$ Draw +DeckHas:Ability$Counters +DeckHints:Ability$Sacrifice|Token +Oracle:Menace\nWhenever a creature token dies, put a +1/+1 counter on Joel and draw a card. This ability triggers only once each turn.\nPartner — Survivors (You can have two commanders if both have this ability.) diff --git a/forge-gui/res/cardsfolder/upcoming/kratos_god_of_war.txt b/forge-gui/res/cardsfolder/upcoming/kratos_god_of_war.txt new file mode 100644 index 00000000000..ebdc6fd9082 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/kratos_god_of_war.txt @@ -0,0 +1,10 @@ +Name:Kratos, God of War +ManaCost:R R R +Types:Legendary Creature God Warrior +PT:2/3 +K:Double Strike +S:Mode$ Continuous | Affected$ Creature | AddKeyword$ Haste | Description$ All creatures have haste. +T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ Player | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ At the beginning of each player's end step, NICKNAME deals damage to that player equal to the number of creatures that player controls that didn't attack this turn. +SVar:TrigDamage:DB$ DealDamage | Defined$ TriggeredPlayer | NumDmg$ X +SVar:X:Count$Valid Creature.!attackedThisTurn+ActivePlayerCtrl +Oracle:Double strike\nAll creatures have haste.\nAt the beginning of each player's end step, Kratos deals damage to that player equal to the number of creatures that player controls that didn't attack this turn. diff --git a/forge-gui/res/cardsfolder/upcoming/kratos_stoic_father.txt b/forge-gui/res/cardsfolder/upcoming/kratos_stoic_father.txt new file mode 100644 index 00000000000..c1cba612160 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/kratos_stoic_father.txt @@ -0,0 +1,14 @@ +Name:Kratos, Stoic Father +ManaCost:2 R W +Types:Legendary Creature God Warrior +PT:4/4 +K:Partner - Father & Son +T:Mode$ AttackersDeclared | ValidAttackers$ God.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigExperience | TriggerDescription$ Whenever you attack with one or more Gods and whenever a God dies, you get an experience counter. +T:Mode$ ChangesZone | ValidCard$ God | TriggerZones$ Battlefield | Secondary$ True | Destination$ Graveyard | Execute$ TrigExperience | TriggerDescription$ Whenever you attack with one or more Gods and whenever a God dies, you get an experience counter. +SVar:TrigExperience:DB$ PutCounter | Defined$ You | CounterType$ Experience | CounterNum$ 1 +T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ At the beginning of your end step, put a number of +1/+1 counters on target creature equal to the number of experience counters you have. +SVar:TrigPutCounter:DB$ PutCounter | ValidTgts$ Creature | CounterType$ P1P1 | CounterNum$ X +SVar:X:Count$YourCountersExperience +DeckHas:Ability$Counters +DeckHints:Type$God +Oracle:Whenever you attack with one or more Gods and whenever a God dies, you get an experience counter.\nAt the beginning of your end step, put a number of +1/+1 counters on target creature equal to the number of experience counters you have.\nPartner-Father & son (You can have two commanders if both have this ability.) diff --git a/forge-gui/res/cardsfolder/upcoming/nathan_drake_treasure_hunter.txt b/forge-gui/res/cardsfolder/upcoming/nathan_drake_treasure_hunter.txt new file mode 100644 index 00000000000..2a035bb2972 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/nathan_drake_treasure_hunter.txt @@ -0,0 +1,11 @@ +Name:Nathan Drake, Treasure Hunter +ManaCost:U B R +Types:Legendary Creature Human Rogue +PT:3/2 +K:First Strike +S:Mode$ ManaConvert | ValidPlayer$ You | ValidCard$ Card.YouDontOwn+YouCtrl | ValidSA$ Spell,Activated | ManaConversion$ AnyType->AnyColor | Description$ You may spend mana as though it were mana of any color to cast spells you don't own or to activate abilities of permanents you control but don't own. +T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigExile | TriggerDescription$ Whenever NICKNAME attacks, exile the top card of each player's library. You may cast a spell from among those cards. +SVar:TrigExile:DB$ Dig | Defined$ Player | DigNum$ 1 | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True | SubAbility$ DBPlay +SVar:DBPlay:DB$ Play | Valid$ Card.IsRemembered | ValidSA$ Spell | ValidZone$ Exile | Controller$ You | Optional$ True | Amount$ 1 | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +Oracle:First strike\nYou may spend mana as though it were mana of any color to cast spells you don't own or to activate abilities of permanents you control but don't own.\nWhenever Nathan Drake attacks, exile the top card of each player's library. You may cast a spell from among those cards. diff --git a/forge-gui/res/tokenscripts/cordyceps_infected.txt b/forge-gui/res/tokenscripts/cordyceps_infected.txt new file mode 100644 index 00000000000..52dad650b09 --- /dev/null +++ b/forge-gui/res/tokenscripts/cordyceps_infected.txt @@ -0,0 +1,6 @@ +Name:Cordyceps Infected +ManaCost:no cost +Colors:black +Types:Creature Fungus Zombie +PT:1/1 +Oracle: From 1d97a4ec7e2e4731ef1f57bc69f742e99e190dc3 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Sun, 28 Sep 2025 21:20:22 +0200 Subject: [PATCH 264/355] Update eirdu_carrier_of_dawn_isilu_carrier_of_twilight.txt --- .../eirdu_carrier_of_dawn_isilu_carrier_of_twilight.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/upcoming/eirdu_carrier_of_dawn_isilu_carrier_of_twilight.txt b/forge-gui/res/cardsfolder/upcoming/eirdu_carrier_of_dawn_isilu_carrier_of_twilight.txt index c7bffe073be..a74137a872a 100644 --- a/forge-gui/res/cardsfolder/upcoming/eirdu_carrier_of_dawn_isilu_carrier_of_twilight.txt +++ b/forge-gui/res/cardsfolder/upcoming/eirdu_carrier_of_dawn_isilu_carrier_of_twilight.txt @@ -20,7 +20,7 @@ Types:Legendary Creature Elemental God PT:5/5 K:Flying K:Lifelink -S:Mode$ Continuous | Affected$ Card.Creature+YouCtrl+nonToken+Other | AffectedZone$ Battlefield | AddKeyword$ Persist | Description$ Each other nontoken creature you control has persist. (When it dies, if it had no -1/-1 counters on it, return it to the battlefield under its owner’s control with a -1/-1 counter on it.) +S:Mode$ Continuous | Affected$ Card.Creature+YouCtrl+!token+Other | AffectedZone$ Battlefield | AddKeyword$ Persist | Description$ Each other nontoken creature you control has persist. (When it dies, if it had no -1/-1 counters on it, return it to the battlefield under its owner’s control with a -1/-1 counter on it.) T:Mode$ Phase | Phase$ Main1 | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of your first main phase, you may pay {W}. If you do, transform NICKNAME. SVar:TrigTransform:AB$ SetState | Cost$ W | Defined$ Self | Mode$ Transform Oracle:Flying, lifelink\nEach other nontoken creature you control has persist. (When it dies, if it had no -1/-1 counters on it, return it to the battlefield under its owner's control with a -1/-1 counter on it.) At the beginning of your first main phase, you may pay {W}. If you do, transform Isilu. From a390284b8e965deaf72a9860a88458fb222315af Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Sun, 28 Sep 2025 21:55:25 +0200 Subject: [PATCH 265/355] Property cleanup (#8804) * remove NotTriggeredCard * remove nonManaAbility * remove notattacking and notblocking * remove notnamed --- .../main/java/forge/ai/ability/CloneAi.java | 2 +- .../src/main/java/forge/game/ForgeScript.java | 2 -- .../java/forge/game/card/CardProperty.java | 20 ------------------- forge-gui/res/cardsfolder/a/abeyance.txt | 2 +- .../res/cardsfolder/a/akron_legionnaire.txt | 2 +- forge-gui/res/cardsfolder/a/alarum.txt | 2 +- forge-gui/res/cardsfolder/a/animate_dead.txt | 2 +- .../cardsfolder/a/anointed_peacekeeper.txt | 2 +- .../res/cardsfolder/a/arcades_sabboth.txt | 2 +- .../res/cardsfolder/a/ashnod_the_uncaring.txt | 2 +- forge-gui/res/cardsfolder/a/atog.txt | 2 +- .../res/cardsfolder/b/battlemages_bracers.txt | 2 +- .../cardsfolder/b/blade_of_shared_souls.txt | 2 +- forge-gui/res/cardsfolder/b/bound_in_gold.txt | 2 +- .../res/cardsfolder/b/burning_rune_demon.txt | 2 +- .../res/cardsfolder/b/burning_tree_shaman.txt | 2 +- forge-gui/res/cardsfolder/c/caged_sun.txt | 2 +- .../res/cardsfolder/c/clever_conjurer.txt | 2 +- .../cardsfolder/c/colfenor_the_last_yew.txt | 2 +- .../res/cardsfolder/c/crackdown_construct.txt | 2 +- .../res/cardsfolder/c/cutthroat_centurion.txt | 2 +- .../res/cardsfolder/d/damping_matrix.txt | 2 +- .../res/cardsfolder/d/dance_of_the_dead.txt | 2 +- .../res/cardsfolder/d/detention_sphere.txt | 2 +- .../d/dhalsim_pliable_pacifist.txt | 2 +- .../res/cardsfolder/d/disruptor_flute.txt | 2 +- .../res/cardsfolder/d/domineering_will.txt | 2 +- .../res/cardsfolder/d/dutiful_replicator.txt | 2 +- .../cardsfolder/d/dynaheir_invoker_adept.txt | 2 +- .../res/cardsfolder/e/ebondeath_dracolich.txt | 2 +- .../res/cardsfolder/e/eye_of_singularity.txt | 2 +- .../res/cardsfolder/f/faiths_fetters.txt | 2 +- .../res/cardsfolder/f/farrels_mantle.txt | 2 +- ...flamescroll_celebrant_revel_in_silence.txt | 2 +- forge-gui/res/cardsfolder/g/gaeas_liege.txt | 2 +- .../cardsfolder/g/geralf_the_fleshwright.txt | 2 +- forge-gui/res/cardsfolder/g/grip_of_chaos.txt | 2 +- .../res/cardsfolder/g/guildsworn_prowler.txt | 2 +- forge-gui/res/cardsfolder/h/hand_to_hand.txt | 2 +- forge-gui/res/cardsfolder/h/harsh_mentor.txt | 2 +- .../res/cardsfolder/h/hollow_warrior.txt | 4 ++-- forge-gui/res/cardsfolder/h/horned_kavu.txt | 2 +- .../res/cardsfolder/i/illicit_masquerade.txt | 2 +- .../cardsfolder/i/illusionists_bracers.txt | 2 +- .../res/cardsfolder/i/immolation_shaman.txt | 2 +- forge-gui/res/cardsfolder/i/imprison.txt | 2 +- .../res/cardsfolder/i/intercessors_arrest.txt | 2 +- forge-gui/res/cardsfolder/k/karns_sylex.txt | 2 +- .../cardsfolder/k/kurkesh_onakke_ancient.txt | 2 +- forge-gui/res/cardsfolder/k/kusari_gama.txt | 2 +- .../res/cardsfolder/m/martial_impetus.txt | 2 +- .../cardsfolder/m/mondassian_colony_ship.txt | 2 +- .../res/cardsfolder/m/mothrider_cavalry.txt | 2 +- .../cardsfolder/o/overwhelming_splendor.txt | 2 +- .../cardsfolder/p/phyrexian_dreadnought.txt | 2 +- forge-gui/res/cardsfolder/p/pit_automaton.txt | 2 +- .../res/cardsfolder/p/pithing_needle.txt | 2 +- .../res/cardsfolder/p/psychic_battle.txt | 2 +- .../res/cardsfolder/r/realmbreakers_grasp.txt | 2 +- .../cardsfolder/r/rings_of_brighthearth.txt | 2 +- forge-gui/res/cardsfolder/r/rowan_kenrith.txt | 2 +- .../res/cardsfolder/r/runic_armasaur.txt | 2 +- .../res/cardsfolder/r/ruthless_instincts.txt | 2 +- .../rebalanced/a-earthquake_dragon.txt | 2 +- .../rebalanced/a-guildsworn_prowler.txt | 2 +- .../res/cardsfolder/s/sala_deck_boss.txt | 2 +- ...asaya_orochi_ascendant_sasayas_essence.txt | 2 +- .../res/cardsfolder/s/sculpting_steel.txt | 2 +- .../res/cardsfolder/s/shared_animosity.txt | 2 +- .../s/sharkey_tyrant_of_the_shire.txt | 4 ++-- .../res/cardsfolder/s/sigil_of_valor.txt | 2 +- .../res/cardsfolder/s/sorcerous_spyglass.txt | 2 +- .../s/staff_of_eden_vaults_key.txt | 2 +- .../res/cardsfolder/s/suppression_field.txt | 2 +- .../res/cardsfolder/t/tahngarths_rage.txt | 2 +- ...he_enigma_jewel_locus_of_enlightenment.txt | 2 +- .../res/cardsfolder/t/the_flood_of_mars.txt | 2 +- forge-gui/res/cardsfolder/t/tiamat.txt | 2 +- forge-gui/res/cardsfolder/t/tinker.txt | 2 +- forge-gui/res/cardsfolder/t/tithe_taker.txt | 2 +- .../t/toralf_god_of_fury_toralfs_hammer.txt | 2 +- forge-gui/res/cardsfolder/t/total_war.txt | 2 +- forge-gui/res/cardsfolder/t/tromokratis.txt | 2 +- .../res/cardsfolder/u/unlikely_alliance.txt | 2 +- .../v/valakut_the_molten_pinnacle.txt | 2 +- .../cardsfolder/v/verrak_warped_sengir.txt | 2 +- forge-gui/res/cardsfolder/v/vesuva.txt | 2 +- .../res/cardsfolder/w/wheel_of_fortune.txt | 2 +- .../res/cardsfolder/w/wizened_mentor.txt | 2 +- .../res/cardsfolder/z/zirda_the_dawnwaker.txt | 2 +- .../java/forge/gui/card/CardScriptParser.java | 8 ++++---- 91 files changed, 94 insertions(+), 116 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/CloneAi.java b/forge-ai/src/main/java/forge/ai/ability/CloneAi.java index 519f26bdd3b..942bde1491f 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CloneAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CloneAi.java @@ -188,7 +188,7 @@ public class CloneAi extends SpellAbilityAi { final boolean canCloneLegendary = "True".equalsIgnoreCase(sa.getParam("NonLegendary")); String filter = !isVesuva ? "Permanent.YouDontCtrl,Permanent.nonLegendary" - : "Permanent.YouDontCtrl+notnamed" + name + ",Permanent.nonLegendary+notnamed" + name; + : "Permanent.YouDontCtrl+!named" + name + ",Permanent.nonLegendary+!named" + name; // TODO: rewrite this block so that this is done somehow more elegantly if (canCloneLegendary) { diff --git a/forge-game/src/main/java/forge/game/ForgeScript.java b/forge-game/src/main/java/forge/game/ForgeScript.java index 5ce1b116732..9c462d9e22c 100644 --- a/forge-game/src/main/java/forge/game/ForgeScript.java +++ b/forge-game/src/main/java/forge/game/ForgeScript.java @@ -166,8 +166,6 @@ public class ForgeScript { Card source, CardTraitBase spellAbility) { if (property.equals("ManaAbility")) { return sa.isManaAbility(); - } else if (property.equals("nonManaAbility")) { - return !sa.isManaAbility(); } else if (property.equals("withoutXCost")) { return !sa.costHasManaX(); } else if (property.startsWith("XCost")) { diff --git a/forge-game/src/main/java/forge/game/card/CardProperty.java b/forge-game/src/main/java/forge/game/card/CardProperty.java index db8c2e94a33..e27a4f8fed7 100644 --- a/forge-game/src/main/java/forge/game/card/CardProperty.java +++ b/forge-game/src/main/java/forge/game/card/CardProperty.java @@ -66,12 +66,6 @@ public class CardProperty { if (!card.sharesNameWith(name)) { return false; } - } else if (property.startsWith("notnamed")) { - String name = TextUtil.fastReplace(property.substring(8), ";", ","); // workaround for card name with "," - name = TextUtil.fastReplace(name, "_", " "); - if (card.sharesNameWith(name)) { - return false; - } } else if (property.equals("NamedCard")) { boolean found = false; for (String name : source.getNamedCards()) { @@ -1564,8 +1558,6 @@ public class CardProperty { return false; } } - } else if (property.startsWith("notattacking")) { - return null == combat || !combat.isAttacking(card); } else if (property.startsWith("enlistedThisCombat")) { if (card.getEnlistedThisCombat() == false) return false; } else if (property.startsWith("attackedThisCombat")) { @@ -1619,8 +1611,6 @@ public class CardProperty { if (Collections.disjoint(combat.getAttackersBlockedBy(source), combat.getAttackersBlockedBy(card))) { return false; } - } else if (property.startsWith("notblocking")) { - return null == combat || !combat.isBlocking(card); } // Nex predicates refer to past combat and don't need a reference to actual combat else if (property.equals("blocked")) { @@ -2073,16 +2063,6 @@ public class CardProperty { } else { return false; } - } else if (property.startsWith("NotTriggered")) { - final String key = property.substring("NotTriggered".length()); - if (spellAbility instanceof SpellAbility) { - SpellAbility sa = (SpellAbility) spellAbility; - if (card.equals(sa.getRootAbility().getTriggeringObject(AbilityKey.fromString(key)))) { - return false; - } - } else { - return false; - } } else if (property.startsWith("NotDefined")) { final String key = property.substring("NotDefined".length()); if (AbilityUtils.getDefinedCards(source, key, spellAbility).contains(card)) { diff --git a/forge-gui/res/cardsfolder/a/abeyance.txt b/forge-gui/res/cardsfolder/a/abeyance.txt index 4a02b1bb11a..7d482d121a6 100644 --- a/forge-gui/res/cardsfolder/a/abeyance.txt +++ b/forge-gui/res/cardsfolder/a/abeyance.txt @@ -3,6 +3,6 @@ ManaCost:1 W Types:Instant A:SP$ Effect | ValidTgts$ Player | StaticAbilities$ STCantBeCast,STCantBeActivated | RememberObjects$ Targeted | AILogic$ BeginningOfOppTurn | SubAbility$ DBDraw | SpellDescription$ Until end of turn, target player can't cast instant or sorcery spells, and that player can't activate abilities that aren't mana abilities. SVar:STCantBeCast:Mode$ CantBeCast | ValidCard$ Instant,Sorcery | Caster$ Player.IsRemembered | Description$ Target player can't cast instant or sorcery spells, and that player can't activate abilities that aren't mana abilities. -SVar:STCantBeActivated:Mode$ CantBeActivated | ValidCard$ Card | ValidSA$ Activated.nonManaAbility | Activator$ Player.IsRemembered +SVar:STCantBeActivated:Mode$ CantBeActivated | ValidCard$ Card | ValidSA$ Activated.!ManaAbility | Activator$ Player.IsRemembered SVar:DBDraw:DB$ Draw | SpellDescription$ Draw a card. Oracle:Until end of turn, target player can't cast instant or sorcery spells, and that player can't activate abilities that aren't mana abilities.\nDraw a card. diff --git a/forge-gui/res/cardsfolder/a/akron_legionnaire.txt b/forge-gui/res/cardsfolder/a/akron_legionnaire.txt index 6a7a67319e4..e5c8b392416 100644 --- a/forge-gui/res/cardsfolder/a/akron_legionnaire.txt +++ b/forge-gui/res/cardsfolder/a/akron_legionnaire.txt @@ -2,7 +2,7 @@ Name:Akron Legionnaire ManaCost:6 W W Types:Creature Giant Soldier PT:8/4 -S:Mode$ CantAttack | ValidCard$ Creature.YouCtrl+nonArtifact+notnamedAkron Legionnaire | Description$ Except for creatures named Akron Legionnaire and artifact creatures, creatures you control can't attack. +S:Mode$ CantAttack | ValidCard$ Creature.YouCtrl+nonArtifact+!namedAkron Legionnaire | Description$ Except for creatures named Akron Legionnaire and artifact creatures, creatures you control can't attack. DeckHints:Type$Artifact DeckNeeds:Name$Akron Legionnaire Oracle:Except for creatures named Akron Legionnaire and artifact creatures, creatures you control can't attack. diff --git a/forge-gui/res/cardsfolder/a/alarum.txt b/forge-gui/res/cardsfolder/a/alarum.txt index 4e903cf80bb..8576991c091 100644 --- a/forge-gui/res/cardsfolder/a/alarum.txt +++ b/forge-gui/res/cardsfolder/a/alarum.txt @@ -1,6 +1,6 @@ Name:Alarum ManaCost:1 W Types:Instant -A:SP$ Pump | ValidTgts$ Creature.notattacking | TgtPrompt$ Select target nonattacking creature | NumAtt$ +1 | NumDef$ +3 | SubAbility$ DBUntap | SpellDescription$ Untap target nonattacking creature. It gets +1/+3 until end of turn. +A:SP$ Pump | ValidTgts$ Creature.!attacking | TgtPrompt$ Select target nonattacking creature | NumAtt$ +1 | NumDef$ +3 | SubAbility$ DBUntap | SpellDescription$ Untap target nonattacking creature. It gets +1/+3 until end of turn. SVar:DBUntap:DB$ Untap | Defined$ Targeted Oracle:Untap target nonattacking creature. It gets +1/+3 until end of turn. diff --git a/forge-gui/res/cardsfolder/a/animate_dead.txt b/forge-gui/res/cardsfolder/a/animate_dead.txt index f505055471f..884f653dc7b 100644 --- a/forge-gui/res/cardsfolder/a/animate_dead.txt +++ b/forge-gui/res/cardsfolder/a/animate_dead.txt @@ -3,7 +3,7 @@ ManaCost:1 B Types:Enchantment Aura K:Enchant:Creature.inZoneGraveyard:creature card in a graveyard SVar:AttachAILogic:Reanimate -SVar:AttachAITgts:Creature.notnamedWorldgorger Dragon +SVar:AttachAITgts:Creature.!namedWorldgorger Dragon T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | IsPresent$ Card.StrictlySelf | Execute$ TrigReanimate | TriggerDescription$ When CARDNAME enters, if it's on the battlefield, it loses "enchant creature card in a graveyard" and gains "enchant creature put onto the battlefield with CARDNAME." Return enchanted creature card to the battlefield under your control and attach CARDNAME to it. When CARDNAME leaves the battlefield, that creature's controller sacrifices it. SVar:TrigReanimate:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ Enchanted | RememberChanged$ True | GainControl$ True | SubAbility$ DBAnimate SVar:DBAnimate:DB$ Animate | Defined$ Self | Keywords$ Enchant:Creature.IsRemembered:creature put onto the battlefield with CARDNAME | RemoveKeywords$ Enchant:Creature.inZoneGraveyard:creature card in a graveyard | Duration$ Permanent | SubAbility$ DBAttach diff --git a/forge-gui/res/cardsfolder/a/anointed_peacekeeper.txt b/forge-gui/res/cardsfolder/a/anointed_peacekeeper.txt index e63e2720ae6..3e2abd91e46 100644 --- a/forge-gui/res/cardsfolder/a/anointed_peacekeeper.txt +++ b/forge-gui/res/cardsfolder/a/anointed_peacekeeper.txt @@ -9,6 +9,6 @@ SVar:DBLook:DB$ RevealHand | Defined$ ChosenPlayer | Look$ True | SubAbility$ DB SVar:DBNameCard:DB$ NameCard | Defined$ You | SubAbility$ DBClear SVar:DBClear:DB$ Cleanup | ClearChosenPlayer$ True S:Mode$ RaiseCost | EffectZone$ Battlefield | ValidCard$ Card.NamedCard | Type$ Spell | Amount$ 2 | Activator$ Opponent | Description$ Spells your opponents cast with the chosen name cost {2} more to cast. -S:Mode$ RaiseCost | EffectZone$ Battlefield | ValidCard$ Card.NamedCard | ValidSpell$ Activated.nonManaAbility | Amount$ 2 | Description$ Activated abilities of sources with the chosen name cost {2} more to activate unless they're mana abilities. +S:Mode$ RaiseCost | EffectZone$ Battlefield | ValidCard$ Card.NamedCard | ValidSpell$ Activated.!ManaAbility | Amount$ 2 | Description$ Activated abilities of sources with the chosen name cost {2} more to activate unless they're mana abilities. AI:RemoveDeck:Random Oracle:Vigilance\nAs Anointed Peacekeeper enters, look at an opponent's hand, then choose any card name.\nSpells your opponents cast with the chosen name cost {2} more to cast.\nActivated abilities of sources with the chosen name cost {2} more to activate unless they're mana abilities. diff --git a/forge-gui/res/cardsfolder/a/arcades_sabboth.txt b/forge-gui/res/cardsfolder/a/arcades_sabboth.txt index 593cecef1fc..bf316d4dccf 100644 --- a/forge-gui/res/cardsfolder/a/arcades_sabboth.txt +++ b/forge-gui/res/cardsfolder/a/arcades_sabboth.txt @@ -5,7 +5,7 @@ PT:7/7 K:Flying T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigUpkeep | TriggerDescription$ At the beginning of your upkeep, sacrifice CARDNAME unless you pay {G}{W}{U}. SVar:TrigUpkeep:DB$ Sacrifice | UnlessPayer$ You | UnlessCost$ G W U -S:Mode$ Continuous | Affected$ Creature.notattacking+untapped+YouCtrl | AddToughness$ 2 | Description$ Each untapped creature you control gets +0/+2 as long as it's not attacking. +S:Mode$ Continuous | Affected$ Creature.!attacking+untapped+YouCtrl | AddToughness$ 2 | Description$ Each untapped creature you control gets +0/+2 as long as it's not attacking. A:AB$ Pump | Cost$ W | Defined$ Self | NumDef$ +1 | SpellDescription$ CARDNAME gets +0/+1 until end of turn. DeckHints:Type$Wall & Keyword$Defender Oracle:Flying\nAt the beginning of your upkeep, sacrifice Arcades Sabboth unless you pay {G}{W}{U}.\nEach untapped creature you control gets +0/+2 as long as it's not attacking.\n{W}: Arcades Sabboth gets +0/+1 until end of turn. diff --git a/forge-gui/res/cardsfolder/a/ashnod_the_uncaring.txt b/forge-gui/res/cardsfolder/a/ashnod_the_uncaring.txt index 7a60eef2554..94634e668d9 100644 --- a/forge-gui/res/cardsfolder/a/ashnod_the_uncaring.txt +++ b/forge-gui/res/cardsfolder/a/ashnod_the_uncaring.txt @@ -3,7 +3,7 @@ ManaCost:2 U B R Types:Legendary Creature Human Artificer PT:1/4 K:Deathtouch -T:Mode$ AbilityCast | ValidCard$ Artifact.inZoneBattlefield,Creature.inZoneBattlefield | ValidSA$ SpellAbility.nonManaAbility | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Condition$ Sacrificed | Execute$ TrigCopy | OptionalDecider$ You | TriggerDescription$ Whenever you activate an ability of an artifact or creature that isn't a mana ability, if one or more permanents were sacrificed to activate it, you may copy that ability. You may choose new targets for the copy. (Sacrificing an artifact for mana to activate an ability doesn't count.) +T:Mode$ AbilityCast | ValidCard$ Artifact.inZoneBattlefield,Creature.inZoneBattlefield | ValidSA$ SpellAbility.!ManaAbility | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Condition$ Sacrificed | Execute$ TrigCopy | OptionalDecider$ You | TriggerDescription$ Whenever you activate an ability of an artifact or creature that isn't a mana ability, if one or more permanents were sacrificed to activate it, you may copy that ability. You may choose new targets for the copy. (Sacrificing an artifact for mana to activate an ability doesn't count.) SVar:TrigCopy:DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | MayChooseTarget$ True DeckNeeds:Ability$Sacrifice DeckHints:Type$Artifact diff --git a/forge-gui/res/cardsfolder/a/atog.txt b/forge-gui/res/cardsfolder/a/atog.txt index f0415a1ac9e..0a5913d0972 100644 --- a/forge-gui/res/cardsfolder/a/atog.txt +++ b/forge-gui/res/cardsfolder/a/atog.txt @@ -3,7 +3,7 @@ ManaCost:1 R Types:Creature Atog PT:1/2 A:AB$ Pump | Cost$ Sac<1/Artifact> | Defined$ Self | NumAtt$ +2 | NumDef$ +2 | SpellDescription$ CARDNAME gets +2/+2 until end of turn. -SVar:AIPreference:SacCost$Artifact.token,Artifact.cmcEQ0+nonLegendary+notnamedBlack Lotus,Artifact.cmcEQ1,Artifact.cmcEQ2,Artifact.cmcEQ3 +SVar:AIPreference:SacCost$Artifact.token,Artifact.cmcEQ0+nonLegendary+!namedBlack Lotus,Artifact.cmcEQ1,Artifact.cmcEQ2,Artifact.cmcEQ3 DeckHas:Ability$Sacrifice DeckNeeds:Type$Artifact Oracle:Sacrifice an artifact: Atog gets +2/+2 until end of turn. diff --git a/forge-gui/res/cardsfolder/b/battlemages_bracers.txt b/forge-gui/res/cardsfolder/b/battlemages_bracers.txt index 548265d91b5..56455252b62 100644 --- a/forge-gui/res/cardsfolder/b/battlemages_bracers.txt +++ b/forge-gui/res/cardsfolder/b/battlemages_bracers.txt @@ -3,6 +3,6 @@ ManaCost:2 R Types:Artifact Equipment K:Equip:2 S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddKeyword$ Haste | Description$ Equipped creature has haste. -T:Mode$ AbilityCast | ValidCard$ Creature.EquippedBy+inRealZoneBattlefield | ValidSA$ SpellAbility.nonManaAbility | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigCopyAbility | TriggerDescription$ Whenever an ability of equipped creature is activated, if it isn't a mana ability, you may pay {1}. If you do, copy that ability. You may choose new targets for the copy. +T:Mode$ AbilityCast | ValidCard$ Creature.EquippedBy+inRealZoneBattlefield | ValidSA$ SpellAbility.!ManaAbility | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigCopyAbility | TriggerDescription$ Whenever an ability of equipped creature is activated, if it isn't a mana ability, you may pay {1}. If you do, copy that ability. You may choose new targets for the copy. SVar:TrigCopyAbility:AB$ CopySpellAbility | Cost$ 1 | Defined$ TriggeredSpellAbility | MayChooseTarget$ True Oracle:Equipped creature has haste.\nWhenever an ability of equipped creature is activated, if it isn't a mana ability, you may pay {1}. If you do, copy that ability. You may choose new targets for the copy.\nEquip {2} diff --git a/forge-gui/res/cardsfolder/b/blade_of_shared_souls.txt b/forge-gui/res/cardsfolder/b/blade_of_shared_souls.txt index 83370e5ef21..7c380c8dd34 100644 --- a/forge-gui/res/cardsfolder/b/blade_of_shared_souls.txt +++ b/forge-gui/res/cardsfolder/b/blade_of_shared_souls.txt @@ -3,7 +3,7 @@ ManaCost:2 U Types:Artifact Equipment K:For Mirrodin T:Mode$ Attached | ValidSource$ Card.Self | TriggerZones$ Battlefield | ValidTarget$ Creature | Execute$ TrigCopy | TriggerDescription$ Whenever CARDNAME becomes attached to a creature, for as long as CARDNAME remains attached to it, you may have that creature become a copy of another target creature you control. -SVar:TrigCopy:DB$ Clone | ValidTgts$ Creature.YouCtrl+NotTriggeredTarget | Optional$ True | TgtPrompt$ Choose another target creature you control | CloneTarget$ TriggeredTargetLKICopy | Duration$ UntilUnattached +SVar:TrigCopy:DB$ Clone | ValidTgts$ Creature.YouCtrl+!TriggeredTarget | Optional$ True | TgtPrompt$ Choose another target creature you control | CloneTarget$ TriggeredTargetLKICopy | Duration$ UntilUnattached K:Equip:2 DeckHas:Ability$Token & Type$Rebel & Color$Red Oracle:For Mirrodin! (When this Equipment enters, create a 2/2 red Rebel creature token, then attach this to it.)\nWhenever Blade of Shared Souls becomes attached to a creature, for as long as Blade of Shared Souls remains attached to it, you may have that creature become a copy of another target creature you control.\nEquip {2} diff --git a/forge-gui/res/cardsfolder/b/bound_in_gold.txt b/forge-gui/res/cardsfolder/b/bound_in_gold.txt index 468a68290ef..7f6a7eb0dd9 100644 --- a/forge-gui/res/cardsfolder/b/bound_in_gold.txt +++ b/forge-gui/res/cardsfolder/b/bound_in_gold.txt @@ -3,5 +3,5 @@ ManaCost:2 W Types:Enchantment Aura K:Enchant:Permanent SVar:AttachAILogic:Curse -S:Mode$ CantAttack,CantBlock,CantCrew,CantBeActivated | ValidCard$ Card.EnchantedBy | ValidSA$ Activated.nonManaAbility | Description$ Enchanted permanent can't attack, block, or crew Vehicles, and its activated abilities can't be activated unless they're mana abilities. +S:Mode$ CantAttack,CantBlock,CantCrew,CantBeActivated | ValidCard$ Card.EnchantedBy | ValidSA$ Activated.!ManaAbility | Description$ Enchanted permanent can't attack, block, or crew Vehicles, and its activated abilities can't be activated unless they're mana abilities. Oracle:Enchant permanent\nEnchanted permanent can't attack, block, or crew Vehicles, and its activated abilities can't be activated unless they're mana abilities. diff --git a/forge-gui/res/cardsfolder/b/burning_rune_demon.txt b/forge-gui/res/cardsfolder/b/burning_rune_demon.txt index 0cef5dcc70a..8520c561a04 100644 --- a/forge-gui/res/cardsfolder/b/burning_rune_demon.txt +++ b/forge-gui/res/cardsfolder/b/burning_rune_demon.txt @@ -4,7 +4,7 @@ Types:Creature Demon Berserker PT:6/6 K:Flying T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, you may search your library for exactly two cards not named Burning-Rune Demon that have different names. If you do, reveal those cards. An opponent chooses one of them. Put the chosen card into your hand and the other into your graveyard, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Card.notnamedBurning-Rune Demon | ChangeNum$ 2 | DifferentNames$ True | RememberChanged$ True | Reveal$ True | Shuffle$ False | AILogic$ Intuition | SubAbility$ DBChoosePlayer +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Card.!namedBurning-Rune Demon | ChangeNum$ 2 | DifferentNames$ True | RememberChanged$ True | Reveal$ True | Shuffle$ False | AILogic$ Intuition | SubAbility$ DBChoosePlayer SVar:DBChoosePlayer:DB$ ChoosePlayer | Defined$ You | Choices$ Player.Opponent | ChoiceTitle$ Choose an opponent | SubAbility$ DBChangeZone1 SVar:DBChangeZone1:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Card.IsRemembered | Chooser$ ChosenPlayer | ChangeNum$ 1 | Mandatory$ True | NoLooking$ True | SelectPrompt$ Select a card to be put into the hand of CARDNAME's controller | Shuffle$ False | SubAbility$ DBChangeZone2 | StackDescription$ None SVar:DBChangeZone2:DB$ ChangeZoneAll | Origin$ Library | Destination$ Graveyard | ChangeType$ Card.IsRemembered | Shuffle$ True | StackDescription$ None | SubAbility$ DBCleanup diff --git a/forge-gui/res/cardsfolder/b/burning_tree_shaman.txt b/forge-gui/res/cardsfolder/b/burning_tree_shaman.txt index 3643336923d..df3170e5738 100644 --- a/forge-gui/res/cardsfolder/b/burning_tree_shaman.txt +++ b/forge-gui/res/cardsfolder/b/burning_tree_shaman.txt @@ -2,6 +2,6 @@ Name:Burning-Tree Shaman ManaCost:1 R G Types:Creature Centaur Shaman PT:3/4 -T:Mode$ AbilityCast | ValidActivatingPlayer$ Player | ValidSA$ SpellAbility.nonManaAbility | TriggerZones$ Battlefield | Execute$ TrigDmg | TriggerDescription$ Whenever a player activates an ability that isn't a mana ability, CARDNAME deals 1 damage to that player. +T:Mode$ AbilityCast | ValidActivatingPlayer$ Player | ValidSA$ SpellAbility.!ManaAbility | TriggerZones$ Battlefield | Execute$ TrigDmg | TriggerDescription$ Whenever a player activates an ability that isn't a mana ability, CARDNAME deals 1 damage to that player. SVar:TrigDmg:DB$ DealDamage | NumDmg$ 1 | Defined$ TriggeredActivator Oracle:Whenever a player activates an ability that isn't a mana ability, Burning-Tree Shaman deals 1 damage to that player. diff --git a/forge-gui/res/cardsfolder/c/caged_sun.txt b/forge-gui/res/cardsfolder/c/caged_sun.txt index 49199b27327..40c41f94581 100644 --- a/forge-gui/res/cardsfolder/c/caged_sun.txt +++ b/forge-gui/res/cardsfolder/c/caged_sun.txt @@ -5,6 +5,6 @@ K:ETBReplacement:Other:ChooseColor SVar:ChooseColor:DB$ ChooseColor | Defined$ You | AILogic$ MostProminentInComputerDeck | SpellDescription$ As CARDNAME enters, choose a color. S:Mode$ Continuous | Affected$ Creature.ChosenColor+YouCtrl | AddPower$ 1 | AddToughness$ 1 | Description$ Creatures you control of the chosen color get +1/+1. T:Mode$ ManaAdded | ValidSource$ Land | ValidSA$ SpellAbility.ManaAbility | Produced$ ChosenColor | Player$ You | Execute$ TrigMana | TriggerZones$ Battlefield | Static$ True | TriggerDescription$ Whenever a land's ability causes you to add one or more mana of the chosen color, add an additional one mana of that color. -T:Mode$ ManaAdded | ValidSource$ Land | ValidSA$ SpellAbility.nonManaAbility | Produced$ ChosenColor | Player$ You | Execute$ TrigMana | TriggerZones$ Battlefield | Secondary$ True | TriggerDescription$ Whenever a land's ability causes you to add one or more mana of the chosen color, add an additional one mana of that color. +T:Mode$ ManaAdded | ValidSource$ Land | ValidSA$ SpellAbility.!ManaAbility | Produced$ ChosenColor | Player$ You | Execute$ TrigMana | TriggerZones$ Battlefield | Secondary$ True | TriggerDescription$ Whenever a land's ability causes you to add one or more mana of the chosen color, add an additional one mana of that color. SVar:TrigMana:DB$ Mana | Produced$ Chosen | Amount$ 1 Oracle:As Caged Sun enters, choose a color.\nCreatures you control of the chosen color get +1/+1.\nWhenever a land's ability causes you to add one or more mana of the chosen color, add an additional one mana of that color. diff --git a/forge-gui/res/cardsfolder/c/clever_conjurer.txt b/forge-gui/res/cardsfolder/c/clever_conjurer.txt index 6b1d34d72c8..72bb957603d 100644 --- a/forge-gui/res/cardsfolder/c/clever_conjurer.txt +++ b/forge-gui/res/cardsfolder/c/clever_conjurer.txt @@ -2,5 +2,5 @@ Name:Clever Conjurer ManaCost:2 U Types:Creature Gnome Wizard PT:2/3 -A:AB$ Untap | Cost$ T | ValidTgts$ Permanent.Other+notnamedClever Conjurer | TgtPrompt$ Select another target permanent not named Clever Conjurer | SorcerySpeed$ True | PrecostDesc$ Mage Hand — | SpellDescription$ Untap target permanent not named Clever Conjurer. Activate only as a sorcery. +A:AB$ Untap | Cost$ T | ValidTgts$ Permanent.Other+!namedClever Conjurer | TgtPrompt$ Select another target permanent not named Clever Conjurer | SorcerySpeed$ True | PrecostDesc$ Mage Hand — | SpellDescription$ Untap target permanent not named Clever Conjurer. Activate only as a sorcery. Oracle:Mage Hand — {T}: Untap target permanent not named Clever Conjurer. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/c/colfenor_the_last_yew.txt b/forge-gui/res/cardsfolder/c/colfenor_the_last_yew.txt index f3ffdab8922..ed65290a80e 100644 --- a/forge-gui/res/cardsfolder/c/colfenor_the_last_yew.txt +++ b/forge-gui/res/cardsfolder/c/colfenor_the_last_yew.txt @@ -5,7 +5,7 @@ PT:3/7 K:Vigilance K:Reach T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self,Creature.Other+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigChange | TriggerDescription$ Whenever CARDNAME or another creature you control dies, return up to one other target creature card with lesser toughness from your graveyard to your hand. -SVar:TrigChange:DB$ ChangeZone | TargetMin$ 0 | TargetMax$ 1 | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Creature.Other+NotTriggeredNewCard+toughnessLTX+YouOwn | TgtPrompt$ Select up to one other target creature card with lesser toughness from your graveyard to return to your hand +SVar:TrigChange:DB$ ChangeZone | TargetMin$ 0 | TargetMax$ 1 | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Creature.Other+!TriggeredNewCard+toughnessLTX+YouOwn | TgtPrompt$ Select up to one other target creature card with lesser toughness from your graveyard to return to your hand SVar:X:TriggeredCard$CardToughness DeckHas:Ability$Graveyard Oracle:Vigilance, reach\nWhenever Colfenor, the Last Yew or another creature you control dies, return up to one other target creature card with lesser toughness from your graveyard to your hand. diff --git a/forge-gui/res/cardsfolder/c/crackdown_construct.txt b/forge-gui/res/cardsfolder/c/crackdown_construct.txt index bc4abab45dd..e57f5824825 100644 --- a/forge-gui/res/cardsfolder/c/crackdown_construct.txt +++ b/forge-gui/res/cardsfolder/c/crackdown_construct.txt @@ -2,6 +2,6 @@ Name:Crackdown Construct ManaCost:4 Types:Artifact Creature Construct PT:2/2 -T:Mode$ AbilityCast | ValidCard$ Artifact.inZoneBattlefield,Creature.inZoneBattlefield | ValidSA$ SpellAbility.nonManaAbility | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever you activate an ability of an artifact or creature that isn't a mana ability, CARDNAME gets +1/+1 until end of turn. +T:Mode$ AbilityCast | ValidCard$ Artifact.inZoneBattlefield,Creature.inZoneBattlefield | ValidSA$ SpellAbility.!ManaAbility | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever you activate an ability of an artifact or creature that isn't a mana ability, CARDNAME gets +1/+1 until end of turn. SVar:TrigPump:DB$ Pump | Defined$ Self | NumAtt$ +1 | NumDef$ +1 Oracle:Whenever you activate an ability of an artifact or creature that isn't a mana ability, Crackdown Construct gets +1/+1 until end of turn. diff --git a/forge-gui/res/cardsfolder/c/cutthroat_centurion.txt b/forge-gui/res/cardsfolder/c/cutthroat_centurion.txt index ab918836983..1f8ef783805 100644 --- a/forge-gui/res/cardsfolder/c/cutthroat_centurion.txt +++ b/forge-gui/res/cardsfolder/c/cutthroat_centurion.txt @@ -3,6 +3,6 @@ ManaCost:2 B Types:Artifact Creature Phyrexian Warrior PT:2/2 A:AB$ Pump | Cost$ Sac<1/Creature.Other;Artifact.Other/another creature or artifact> | Defined$ Self | NumDef$ +2 | NumAtt$ +2 | AILogic$ Aristocrat | ActivationLimit$ 1 | SpellDescription$ CARDNAME gets +2/+2 until end of turn. Activate only once each turn. -SVar:AIPreference:SacCost$Artifact.token,Creature.token,Artifact.cmcEQ0+nonLegendary+notnamedBlack Lotus,Artifact.cmcEQ1,Artifact.cmcEQ2,Artifact.cmcEQ3,Creature.cmcLE3 +SVar:AIPreference:SacCost$Artifact.token,Creature.token,Artifact.cmcEQ0+nonLegendary+!namedBlack Lotus,Artifact.cmcEQ1,Artifact.cmcEQ2,Artifact.cmcEQ3,Creature.cmcLE3 DeckHas:Ability$Sacrifice Oracle:Sacrifice another artifact or creature: Cutthroat Centurion gets +2/+2 until end of turn. Activate only once each turn. diff --git a/forge-gui/res/cardsfolder/d/damping_matrix.txt b/forge-gui/res/cardsfolder/d/damping_matrix.txt index 6ecddcea24f..a45be1a203a 100644 --- a/forge-gui/res/cardsfolder/d/damping_matrix.txt +++ b/forge-gui/res/cardsfolder/d/damping_matrix.txt @@ -1,7 +1,7 @@ Name:Damping Matrix ManaCost:3 Types:Artifact -S:Mode$ CantBeActivated | ValidCard$ Artifact,Creature | ValidSA$ Activated.nonManaAbility | AffectedZone$ Battlefield | Description$ Activated abilities of artifacts and creatures can't be activated unless they're mana abilities. +S:Mode$ CantBeActivated | ValidCard$ Artifact,Creature | ValidSA$ Activated.!ManaAbility | AffectedZone$ Battlefield | Description$ Activated abilities of artifacts and creatures can't be activated unless they're mana abilities. SVar:NonStackingEffect:True AI:RemoveDeck:Random Oracle:Activated abilities of artifacts and creatures can't be activated unless they're mana abilities. diff --git a/forge-gui/res/cardsfolder/d/dance_of_the_dead.txt b/forge-gui/res/cardsfolder/d/dance_of_the_dead.txt index 1477bb7f2b7..4fa2167fea8 100644 --- a/forge-gui/res/cardsfolder/d/dance_of_the_dead.txt +++ b/forge-gui/res/cardsfolder/d/dance_of_the_dead.txt @@ -3,7 +3,7 @@ ManaCost:1 B Types:Enchantment Aura K:Enchant:Creature.inZoneGraveyard:creature card in a graveyard SVar:AttachAILogic:Reanimate -SVar:AttachAITgts:Creature.notnamedWorldgorger Dragon +SVar:AttachAITgts:Creature.!namedWorldgorger Dragon T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | IsPresent$ Card.StrictlySelf | Execute$ TrigReanimate | TriggerDescription$ When CARDNAME enters, if it's on the battlefield, it loses "enchant creature card in a graveyard" and gains "enchant creature put onto the battlefield with CARDNAME." Put enchanted creature card onto the battlefield tapped under your control and attach CARDNAME to it. When CARDNAME leaves the battlefield, that creature's controller sacrifices it. SVar:TrigReanimate:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ Enchanted | RememberChanged$ True | GainControl$ True | Tapped$ True | SubAbility$ DBAnimate SVar:DBAnimate:DB$ Animate | Defined$ Self | OverwriteSpells$ True | Keywords$ Enchant:Creature.IsRemembered:creature put onto the battlefield with CARDNAME | RemoveKeywords$ Enchant:Creature.inZoneGraveyard:creature card in a graveyard | Duration$ Permanent | SubAbility$ DBAttach diff --git a/forge-gui/res/cardsfolder/d/detention_sphere.txt b/forge-gui/res/cardsfolder/d/detention_sphere.txt index b50d472dcc0..eb0667d23b6 100644 --- a/forge-gui/res/cardsfolder/d/detention_sphere.txt +++ b/forge-gui/res/cardsfolder/d/detention_sphere.txt @@ -2,7 +2,7 @@ Name:Detention Sphere ManaCost:1 W U Types:Enchantment T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | OptionalDecider$ You | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters, you may exile target nonland permanent not named Detention Sphere and all other permanents with the same name as that permanent. -SVar:TrigExile:DB$ Pump | ValidTgts$ Permanent.nonLand+notnamedDetention Sphere | IsCurse$ True | TgtPrompt$ Choose target nonland permanent not named Detention Sphere | SubAbility$ DBChangeZoneAll +SVar:TrigExile:DB$ Pump | ValidTgts$ Permanent.nonLand+!namedDetention Sphere | IsCurse$ True | TgtPrompt$ Choose target nonland permanent not named Detention Sphere | SubAbility$ DBChangeZoneAll SVar:DBChangeZoneAll:DB$ ChangeZoneAll | ChangeType$ Targeted.Self,Targeted.sameName | Origin$ Battlefield | Destination$ Exile T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigReturn | TriggerDescription$ When CARDNAME leaves the battlefield, return the exiled cards to the battlefield under their owner's control. SVar:TrigReturn:DB$ ChangeZoneAll | ChangeType$ Card.ExiledWithSource | Origin$ Exile | Destination$ Battlefield diff --git a/forge-gui/res/cardsfolder/d/dhalsim_pliable_pacifist.txt b/forge-gui/res/cardsfolder/d/dhalsim_pliable_pacifist.txt index 8799de32013..98403677176 100644 --- a/forge-gui/res/cardsfolder/d/dhalsim_pliable_pacifist.txt +++ b/forge-gui/res/cardsfolder/d/dhalsim_pliable_pacifist.txt @@ -4,7 +4,7 @@ ManaCost:2 G W Types:Legendary Creature Human Monk PT:1/3 K:Reach -S:Mode$ Continuous | Affected$ Card.Self+notattacking | AddKeyword$ Hexproof | Description$ Teleport — CARDNAME has hexproof unless he's attacking. +S:Mode$ Continuous | Affected$ Card.Self+!attacking | AddKeyword$ Hexproof | Description$ Teleport — CARDNAME has hexproof unless he's attacking. T:Mode$ Attacks | ValidCard$ Creature.YouCtrl+withReach | TriggerZones$ Battlefield | Execute$ TrigUntap | TriggerDescription$ Whenever a creature you control with reach attacks, untap it and it can't be blocked by creatures with greater power this combat. SVar:TrigUntap:DB$ Untap | Defined$ TriggeredAttackerLKICopy | SubAbility$ DBEffect SVar:DBEffect:DB$ Effect | RememberObjects$ TriggeredAttacker | StaticAbilities$ CantBeBlockedPow | ForgetOnMoved$ Battlefield | Duration$ UntilEndOfCombat diff --git a/forge-gui/res/cardsfolder/d/disruptor_flute.txt b/forge-gui/res/cardsfolder/d/disruptor_flute.txt index 27c819e214b..9891e5e8d69 100644 --- a/forge-gui/res/cardsfolder/d/disruptor_flute.txt +++ b/forge-gui/res/cardsfolder/d/disruptor_flute.txt @@ -5,6 +5,6 @@ K:Flash K:ETBReplacement:Other:DBNameCard SVar:DBNameCard:DB$ NameCard | Defined$ You | SpellDescription$ As CARDNAME enters, choose a card name. S:Mode$ RaiseCost | EffectZone$ Battlefield | ValidCard$ Card.NamedCard | Type$ Spell | Activator$ Player | Amount$ 3 | Description$ Spells with the chosen name cost 3 more to cast. -S:Mode$ CantBeActivated | ValidCard$ Card.NamedCard | ValidSA$ Activated.nonManaAbility | Description$ Activated abilities of sources with the chosen name can't be activated unless they're mana abilities. +S:Mode$ CantBeActivated | ValidCard$ Card.NamedCard | ValidSA$ Activated.!ManaAbility | Description$ Activated abilities of sources with the chosen name can't be activated unless they're mana abilities. AI:RemoveDeck:Random Oracle:Flash\nAs Disruptor Flute enters, choose a card name.\nSpells with the chosen name cost 3 more to cast.\nActivated abilities of sources with the chosen name can't be activated unless they're mana abilities. diff --git a/forge-gui/res/cardsfolder/d/domineering_will.txt b/forge-gui/res/cardsfolder/d/domineering_will.txt index 1a5649f406c..d35ee6879a0 100644 --- a/forge-gui/res/cardsfolder/d/domineering_will.txt +++ b/forge-gui/res/cardsfolder/d/domineering_will.txt @@ -2,7 +2,7 @@ Name:Domineering Will ManaCost:3 U Types:Instant A:SP$ Pump | ValidTgts$ Player | StackDescription$ None | SubAbility$ DBGainControl | SpellDescription$ Target player gains control of up to three target nonattacking creatures until end of turn. Untap those creatures. They block this turn if able. -SVar:DBGainControl:DB$ GainControl | ValidTgts$ Creature.notattacking | TgtPrompt$ Select up to three target nonattacking creatures | LoseControl$ EOT | TargetMin$ 0 | TargetMax$ 3 | NewController$ ParentTarget | Untap$ True | SubAbility$ DBEffect +SVar:DBGainControl:DB$ GainControl | ValidTgts$ Creature.!attacking | TgtPrompt$ Select up to three target nonattacking creatures | LoseControl$ EOT | TargetMin$ 0 | TargetMax$ 3 | NewController$ ParentTarget | Untap$ True | SubAbility$ DBEffect SVar:DBEffect:DB$ Effect | RememberObjects$ Targeted | ForgetOnMoved$ Battlefield | StaticAbilities$ MustBlock | SpellDescription$ They block this turn if able. SVar:MustBlock:Mode$ MustBlock | ValidCreature$ Card.IsRemembered | Description$ Those creatures block this turn if able. AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/d/dutiful_replicator.txt b/forge-gui/res/cardsfolder/d/dutiful_replicator.txt index def1c64cbae..c99c1f66045 100644 --- a/forge-gui/res/cardsfolder/d/dutiful_replicator.txt +++ b/forge-gui/res/cardsfolder/d/dutiful_replicator.txt @@ -4,7 +4,7 @@ Types:Artifact Creature Assembly-Worker PT:3/2 T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | TriggerZones$ Battlefield | Execute$ TrigImmediate | TriggerDescription$ When CARDNAME enters, you may pay {1}. When you do, create a token that's a copy of target token you control not named Dutiful Replicator. SVar:TrigImmediate:AB$ ImmediateTrigger | Cost$ 1 | Execute$ TrigClone | TriggerDescription$ When you do, create a token that's a copy of target token you control not named Dutiful Replicator. -SVar:TrigClone:DB$ CopyPermanent | ValidTgts$ Permanent.token+YouCtrl+notnamedDutiful Replicator | TgtPrompt$ Select target token you control not named Dutiful Replicator +SVar:TrigClone:DB$ CopyPermanent | ValidTgts$ Permanent.token+YouCtrl+!namedDutiful Replicator | TgtPrompt$ Select target token you control not named Dutiful Replicator DeckHas:Ability$Token DeckNeeds:Ability$Token Oracle:When Dutiful Replicator enters, you may pay {1}. When you do, create a token that's a copy of target token you control not named Dutiful Replicator. diff --git a/forge-gui/res/cardsfolder/d/dynaheir_invoker_adept.txt b/forge-gui/res/cardsfolder/d/dynaheir_invoker_adept.txt index 6f25676575d..bbda52be4d7 100644 --- a/forge-gui/res/cardsfolder/d/dynaheir_invoker_adept.txt +++ b/forge-gui/res/cardsfolder/d/dynaheir_invoker_adept.txt @@ -5,7 +5,7 @@ PT:4/4 K:Haste S:Mode$ ActivateAbilityAsIfHaste | ValidCard$ Creature.Other+YouCtrl+inZoneBattlefield | Description$ You may activate abilities of other creatures you control as though those creatures had haste. A:AB$ Effect | Cost$ T | Triggers$ ActivateTrig | SpellDescription$ When you next activate an ability that isn't a mana ability this turn by spending four or more mana to activate it, copy that ability. You may choose new targets for the copy. -SVar:ActivateTrig:Mode$ AbilityCast | ValidSA$ SpellAbility.nonManaAbility+ManaSpent GE4 | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigCopy | OneOff$ True | TriggerDescription$ When you next activate an ability that isn't a mana ability this turn by spending four or more mana to activate it, copy that ability. You may choose new targets for the copy. +SVar:ActivateTrig:Mode$ AbilityCast | ValidSA$ SpellAbility.!ManaAbility+ManaSpent GE4 | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigCopy | OneOff$ True | TriggerDescription$ When you next activate an ability that isn't a mana ability this turn by spending four or more mana to activate it, copy that ability. You may choose new targets for the copy. SVar:TrigCopy:DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | MayChooseTarget$ True SVar:BuffedBy:Creature.hasAbility Activated Oracle:Haste\nYou may activate abilities of other creatures you control as though those creatures had haste.\n{T}: When you next activate an ability that isn't a mana ability this turn by spending four or more mana to activate it, copy that ability. You may choose new targets for the copy. diff --git a/forge-gui/res/cardsfolder/e/ebondeath_dracolich.txt b/forge-gui/res/cardsfolder/e/ebondeath_dracolich.txt index c69ad0b624e..9b5da7c7a22 100644 --- a/forge-gui/res/cardsfolder/e/ebondeath_dracolich.txt +++ b/forge-gui/res/cardsfolder/e/ebondeath_dracolich.txt @@ -7,7 +7,7 @@ K:Flying R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementResult$ Updated | ReplaceWith$ ETBTapped | Description$ CARDNAME enters tapped. SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ Graveyard | AffectedZone$ Graveyard | MayPlay$ True | CheckSVar$ X | SVarCompare$ GE1 | Description$ You may cast CARDNAME from your graveyard if a creature not named Ebondeath, Dracolich died this turn. -SVar:X:Count$ThisTurnEntered_Graveyard_from_Battlefield_Creature.notnamedEbondeath; Dracolich +SVar:X:Count$ThisTurnEntered_Graveyard_from_Battlefield_Creature.!namedEbondeath; Dracolich SVar:SacMe:3 SVar:DiscardMe:3 Oracle:Flash\nFlying\nEbondeath, Dracolich enters tapped.\nYou may cast Ebondeath, Dracolich from your graveyard if a creature not named Ebondeath, Dracolich died this turn. diff --git a/forge-gui/res/cardsfolder/e/eye_of_singularity.txt b/forge-gui/res/cardsfolder/e/eye_of_singularity.txt index 212994fcf74..d568f846d66 100644 --- a/forge-gui/res/cardsfolder/e/eye_of_singularity.txt +++ b/forge-gui/res/cardsfolder/e/eye_of_singularity.txt @@ -7,6 +7,6 @@ SVar:DBRem:DB$ Pump | ImprintCards$ Valid Permanent.sharesNameWith Remembered+Is SVar:DBDestroy:DB$ DestroyAll | ValidCards$ Card.IsImprinted | NoRegen$ True | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearImprinted$ True T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Permanent.nonBasic | TriggerZones$ Battlefield | Execute$ TrigDestroy | TriggerDescription$ Whenever a permanent other than a basic land enters, destroy all other permanents with that name. They can't be regenerated. -SVar:TrigDestroy:DB$ DestroyAll | ValidCards$ Permanent.NotTriggeredCard+sharesNameWith TriggeredCard | NoRegen$ True +SVar:TrigDestroy:DB$ DestroyAll | ValidCards$ Permanent.!TriggeredCard+sharesNameWith TriggeredCard | NoRegen$ True AI:RemoveDeck:All Oracle:When Eye of Singularity enters, destroy each permanent with the same name as another permanent, except for basic lands. They can't be regenerated.\nWhenever a permanent other than a basic land enters, destroy all other permanents with that name. They can't be regenerated. diff --git a/forge-gui/res/cardsfolder/f/faiths_fetters.txt b/forge-gui/res/cardsfolder/f/faiths_fetters.txt index 0c286bdecda..9cf396d4677 100644 --- a/forge-gui/res/cardsfolder/f/faiths_fetters.txt +++ b/forge-gui/res/cardsfolder/f/faiths_fetters.txt @@ -6,6 +6,6 @@ SVar:AttachAITgts:Creature SVar:AttachAILogic:Curse T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigGainLife | TriggerDescription$ When CARDNAME enters, you gain 4 life. SVar:TrigGainLife:DB$ GainLife | LifeAmount$ 4 -S:Mode$ CantAttack,CantBlock,CantBeActivated | ValidCard$ Card.EnchantedBy | ValidSA$ Activated.nonManaAbility | Description$ Enchanted permanent can't attack or block, and its activated abilities can't be activated unless they're mana abilities. +S:Mode$ CantAttack,CantBlock,CantBeActivated | ValidCard$ Card.EnchantedBy | ValidSA$ Activated.!ManaAbility | Description$ Enchanted permanent can't attack or block, and its activated abilities can't be activated unless they're mana abilities. DeckHas:Ability$LifeGain Oracle:Enchant permanent\nWhen Faith's Fetters enters, you gain 4 life.\nEnchanted permanent can't attack or block, and its activated abilities can't be activated unless they're mana abilities. diff --git a/forge-gui/res/cardsfolder/f/farrels_mantle.txt b/forge-gui/res/cardsfolder/f/farrels_mantle.txt index ceb3ee09044..3b5bb7e3d17 100644 --- a/forge-gui/res/cardsfolder/f/farrels_mantle.txt +++ b/forge-gui/res/cardsfolder/f/farrels_mantle.txt @@ -4,7 +4,7 @@ Types:Enchantment Aura K:Enchant:Creature SVar:AttachAILogic:Pump T:Mode$ AttackerUnblocked | ValidCard$ Creature.EnchantedBy | Execute$ FarrelDmg | OptionalDecider$ EnchantedController | TriggerDescription$ Whenever enchanted creature attacks and isn't blocked, its controller may have it deal damage equal to its power plus 2 to another target creature. If that player does, the attacking creature assigns no combat damage this turn. -SVar:FarrelDmg:DB$ DealDamage | ValidTgts$ Creature.NotTriggeredAttacker | TgtPrompt$ Select another target creature | NumDmg$ FarrelX | DamageSource$ TriggeredAttackerLKICopy | SubAbility$ DBNoCombatDamage +SVar:FarrelDmg:DB$ DealDamage | ValidTgts$ Creature.!TriggeredAttacker | TgtPrompt$ Select another target creature | NumDmg$ FarrelX | DamageSource$ TriggeredAttackerLKICopy | SubAbility$ DBNoCombatDamage SVar:DBNoCombatDamage:DB$ Effect | RememberObjects$ TriggeredAttackerLKICopy | StaticAbilities$ SNoCombatDamage | ForgetOnMoved$ Battlefield SVar:SNoCombatDamage:Mode$ AssignNoCombatDamage | ValidCard$ Card.IsRemembered | Description$ Remembered creature assigns no combat damage this turn. SVar:FarrelX:TriggeredAttacker$CardPower/Plus.2 diff --git a/forge-gui/res/cardsfolder/f/flamescroll_celebrant_revel_in_silence.txt b/forge-gui/res/cardsfolder/f/flamescroll_celebrant_revel_in_silence.txt index 1ff11b2e485..bd2c8391d85 100644 --- a/forge-gui/res/cardsfolder/f/flamescroll_celebrant_revel_in_silence.txt +++ b/forge-gui/res/cardsfolder/f/flamescroll_celebrant_revel_in_silence.txt @@ -2,7 +2,7 @@ Name:Flamescroll Celebrant ManaCost:1 R Types:Creature Human Shaman PT:2/1 -T:Mode$ AbilityCast | ValidActivatingPlayer$ Opponent | ValidSA$ SpellAbility.nonManaAbility | TriggerZones$ Battlefield | Execute$ TrigDmg | TriggerDescription$ Whenever an opponent activates an ability that isn't a mana ability, CARDNAME deals 1 damage to that player. +T:Mode$ AbilityCast | ValidActivatingPlayer$ Opponent | ValidSA$ SpellAbility.!ManaAbility | TriggerZones$ Battlefield | Execute$ TrigDmg | TriggerDescription$ Whenever an opponent activates an ability that isn't a mana ability, CARDNAME deals 1 damage to that player. SVar:TrigDmg:DB$ DealDamage | NumDmg$ 1 | Defined$ TriggeredActivator A:AB$ Pump | Cost$ 1 R | Defined$ Self | NumAtt$ +2 | SpellDescription$ CARDNAME gets +2/+0 until end of turn. AlternateMode:Modal diff --git a/forge-gui/res/cardsfolder/g/gaeas_liege.txt b/forge-gui/res/cardsfolder/g/gaeas_liege.txt index a39be798793..74135634aba 100644 --- a/forge-gui/res/cardsfolder/g/gaeas_liege.txt +++ b/forge-gui/res/cardsfolder/g/gaeas_liege.txt @@ -2,7 +2,7 @@ Name:Gaea's Liege ManaCost:3 G G G Types:Creature Avatar PT:*/* -S:Mode$ Continuous | CharacteristicDefining$ True | IsPresent$ Card.Self+notattacking | SetPower$ X | SetToughness$ X | Description$ As long as CARDNAME isn't attacking, its power and toughness are each equal to the number of Forests you control. As long as CARDNAME is attacking, its power and toughness are each equal to the number of Forests defending player controls. +S:Mode$ Continuous | CharacteristicDefining$ True | IsPresent$ Card.Self+!attacking | SetPower$ X | SetToughness$ X | Description$ As long as CARDNAME isn't attacking, its power and toughness are each equal to the number of Forests you control. As long as CARDNAME is attacking, its power and toughness are each equal to the number of Forests defending player controls. SVar:X:Count$Valid Forest.YouCtrl S:Mode$ Continuous | CharacteristicDefining$ True | IsPresent$ Card.Self+attacking | SetPower$ Y | SetToughness$ Y SVar:Y:Count$Valid Forest.DefenderCtrl diff --git a/forge-gui/res/cardsfolder/g/geralf_the_fleshwright.txt b/forge-gui/res/cardsfolder/g/geralf_the_fleshwright.txt index 6537785e945..8776f598cf7 100644 --- a/forge-gui/res/cardsfolder/g/geralf_the_fleshwright.txt +++ b/forge-gui/res/cardsfolder/g/geralf_the_fleshwright.txt @@ -6,7 +6,7 @@ T:Mode$ SpellCast | ValidCard$ Card.YouCtrl | ValidActivatingPlayer$ You | Trigg SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ ub_2_2_zombie_rogue | TokenOwner$ You T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | TriggerZones$ Battlefield | ValidCard$ Zombie.YouCtrl | Execute$ DBPutCounter | TriggerDescription$ Whenever a Zombie you control enters, put a +1/+1 counter on it for each other Zombie that entered the battlefield under your control this turn. SVar:DBPutCounter:DB$ PutCounter | Defined$ TriggeredCard | CounterNum$ X | CounterType$ P1P1 -SVar:X:Count$ThisTurnEntered_Battlefield_Zombie.YouCtrl+NotTriggeredCard +SVar:X:Count$ThisTurnEntered_Battlefield_Zombie.YouCtrl+!TriggeredCard DeckHas:Ability$Token|Counters & Type$Zombie|Rogue & Color$Black DeckHints:Type$Zombie Oracle:Whenever you cast a spell during your turn other than your first spell that turn, create a 2/2 blue and black Zombie Rogue creature token.\nWhenever a Zombie you control enters, put a +1/+1 counter on it for each other Zombie that entered the battlefield under your control this turn. diff --git a/forge-gui/res/cardsfolder/g/grip_of_chaos.txt b/forge-gui/res/cardsfolder/g/grip_of_chaos.txt index ed2aa2199f1..a0ad6cc5d69 100644 --- a/forge-gui/res/cardsfolder/g/grip_of_chaos.txt +++ b/forge-gui/res/cardsfolder/g/grip_of_chaos.txt @@ -1,7 +1,7 @@ Name:Grip of Chaos ManaCost:4 R R Types:Enchantment -T:Mode$ SpellAbilityCast | ValidSA$ SpellAbility.nonManaAbility | IsSingleTarget$ True | TriggerZones$ Battlefield | Execute$ TrigChangeTarget | TriggerDescription$ Whenever a spell or ability is put onto the stack, if it has a single target, reselect its target at random. (Select from among all legal targets.) +T:Mode$ SpellAbilityCast | ValidSA$ SpellAbility.!ManaAbility | IsSingleTarget$ True | TriggerZones$ Battlefield | Execute$ TrigChangeTarget | TriggerDescription$ Whenever a spell or ability is put onto the stack, if it has a single target, reselect its target at random. (Select from among all legal targets.) T:Mode$ SpellAbilityCopy | IsSingleTarget$ True | TriggerZones$ Battlefield | Execute$ TrigChangeTarget | Secondary$ True | TriggerDescription$ Whenever a spell or ability is put onto the stack, if it has a single target, reselect its target at random. (Select from among all legal targets.) SVar:TrigChangeTarget:DB$ ChangeTargets | Defined$ TriggeredSpellAbility | RandomTarget$ True AI:RemoveDeck:Random diff --git a/forge-gui/res/cardsfolder/g/guildsworn_prowler.txt b/forge-gui/res/cardsfolder/g/guildsworn_prowler.txt index 70060ab91d8..64884b3d96f 100644 --- a/forge-gui/res/cardsfolder/g/guildsworn_prowler.txt +++ b/forge-gui/res/cardsfolder/g/guildsworn_prowler.txt @@ -3,6 +3,6 @@ ManaCost:1 B Types:Creature Tiefling Rogue Assassin PT:2/1 K:Deathtouch -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self+notblocking | Execute$ TrigDraw | TriggerDescription$ When CARDNAME dies, if it wasn't blocking, draw a card. +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self+!blocking | Execute$ TrigDraw | TriggerDescription$ When CARDNAME dies, if it wasn't blocking, draw a card. SVar:TrigDraw:DB$ Draw Oracle:Deathtouch\nWhen Guildsworn Prowler dies, if it wasn't blocking, draw a card. diff --git a/forge-gui/res/cardsfolder/h/hand_to_hand.txt b/forge-gui/res/cardsfolder/h/hand_to_hand.txt index a72f994596c..9fca1411c01 100644 --- a/forge-gui/res/cardsfolder/h/hand_to_hand.txt +++ b/forge-gui/res/cardsfolder/h/hand_to_hand.txt @@ -2,7 +2,7 @@ Name:Hand to Hand ManaCost:2 R Types:Enchantment S:Mode$ CantBeCast | ValidCard$ Instant | Phases$ BeginCombat->EndCombat | Description$ During combat, players can't cast instant spells or activate abilities that aren't mana abilities. -S:Mode$ CantBeActivated | ValidCard$ Card | Phases$ BeginCombat->EndCombat | ValidSA$ Activated.nonManaAbility +S:Mode$ CantBeActivated | ValidCard$ Card | Phases$ BeginCombat->EndCombat | ValidSA$ Activated.!ManaAbility SVar:NonStackingEffect:True AI:RemoveDeck:Random Oracle:During combat, players can't cast instant spells or activate abilities that aren't mana abilities. diff --git a/forge-gui/res/cardsfolder/h/harsh_mentor.txt b/forge-gui/res/cardsfolder/h/harsh_mentor.txt index e0dbfa32f87..643cb4079df 100644 --- a/forge-gui/res/cardsfolder/h/harsh_mentor.txt +++ b/forge-gui/res/cardsfolder/h/harsh_mentor.txt @@ -2,6 +2,6 @@ Name:Harsh Mentor ManaCost:1 R Types:Creature Human Cleric PT:2/2 -T:Mode$ AbilityCast | ValidActivatingPlayer$ Opponent | ValidCard$ Artifact.inZoneBattlefield,Creature.inZoneBattlefield,Land.inZoneBattlefield | ValidSA$ SpellAbility.nonManaAbility | TriggerZones$ Battlefield | Execute$ TrigDmg | TriggerDescription$ Whenever an opponent activates an ability of an artifact, creature, or land on the battlefield, if it isn't a mana ability, CARDNAME deals 2 damage to that player. +T:Mode$ AbilityCast | ValidActivatingPlayer$ Opponent | ValidCard$ Artifact.inZoneBattlefield,Creature.inZoneBattlefield,Land.inZoneBattlefield | ValidSA$ SpellAbility.!ManaAbility | TriggerZones$ Battlefield | Execute$ TrigDmg | TriggerDescription$ Whenever an opponent activates an ability of an artifact, creature, or land on the battlefield, if it isn't a mana ability, CARDNAME deals 2 damage to that player. SVar:TrigDmg:DB$ DealDamage | NumDmg$ 2 | Defined$ TriggeredActivator Oracle:Whenever an opponent activates an ability of an artifact, creature, or land on the battlefield, if it isn't a mana ability, Harsh Mentor deals 2 damage to that player. diff --git a/forge-gui/res/cardsfolder/h/hollow_warrior.txt b/forge-gui/res/cardsfolder/h/hollow_warrior.txt index a199895c1f1..9328cf70a8b 100644 --- a/forge-gui/res/cardsfolder/h/hollow_warrior.txt +++ b/forge-gui/res/cardsfolder/h/hollow_warrior.txt @@ -2,7 +2,7 @@ Name:Hollow Warrior ManaCost:4 Types:Artifact Creature Golem Warrior PT:4/4 -S:Mode$ CantAttackUnless | ValidCard$ Card.Self | Cost$ tapXType<1/Creature.notattacking> | Description$ CARDNAME can't attack or block unless you tap an untapped creature you control not declared as an attacking or blocking creature this combat. (This cost is paid as attackers or blockers are declared.) -S:Mode$ CantBlockUnless | ValidCard$ Card.Self | Cost$ tapXType<1/Creature.notblocking> +S:Mode$ CantAttackUnless | ValidCard$ Card.Self | Cost$ tapXType<1/Creature.!attacking> | Description$ CARDNAME can't attack or block unless you tap an untapped creature you control not declared as an attacking or blocking creature this combat. (This cost is paid as attackers or blockers are declared.) +S:Mode$ CantBlockUnless | ValidCard$ Card.Self | Cost$ tapXType<1/Creature.!blocking> AI:RemoveDeck:Random Oracle:Hollow Warrior can't attack or block unless you tap an untapped creature you control not declared as an attacking or blocking creature this combat. (This cost is paid as attackers or blockers are declared.) diff --git a/forge-gui/res/cardsfolder/h/horned_kavu.txt b/forge-gui/res/cardsfolder/h/horned_kavu.txt index a806934093b..ca755dd82fb 100644 --- a/forge-gui/res/cardsfolder/h/horned_kavu.txt +++ b/forge-gui/res/cardsfolder/h/horned_kavu.txt @@ -4,5 +4,5 @@ Types:Creature Kavu PT:3/4 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters, return a red or green creature you control to its owner's hand. SVar:TrigChange:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Hidden$ True | Mandatory$ True | ChangeType$ Creature.Red+YouCtrl,Creature.Green+YouCtrl | AILogic$ NeverBounceItself -SVar:NeedsToPlay:Creature.Red+YouCtrl+cmcLE3+notnamedHorned Kavu,Creature.Green+YouCtrl+cmcLE3+notnamedHorned Kavu +SVar:NeedsToPlay:Creature.Red+YouCtrl+cmcLE3+!namedHorned Kavu,Creature.Green+YouCtrl+cmcLE3+!namedHorned Kavu Oracle:When Horned Kavu enters, return a red or green creature you control to its owner's hand. diff --git a/forge-gui/res/cardsfolder/i/illicit_masquerade.txt b/forge-gui/res/cardsfolder/i/illicit_masquerade.txt index af756efa2da..095b6666c95 100644 --- a/forge-gui/res/cardsfolder/i/illicit_masquerade.txt +++ b/forge-gui/res/cardsfolder/i/illicit_masquerade.txt @@ -6,7 +6,7 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S SVar:TrigPutCountersAll:DB$ PutCounterAll | ValidCards$ Creature.YouCtrl | CounterType$ IMPOSTOR | CounterNum$ 1 T:Mode$ ChangesZone | ValidCard$ Creature.YouCtrl+counters_GE1_IMPOSTOR | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigExile | TriggerZones$ Battlefield | TriggerDescription$ Whenever a creature you control with an impostor counter on it dies, exile it. Return up to one other target creature card from your graveyard to the battlefield. SVar:TrigExile:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | Defined$ TriggeredCard | SubAbility$ DBReturn -SVar:DBReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | TgtPrompt$ Choose up to one other target creature card in your graveyard | ValidTgts$ Creature.YouOwn+NotTriggeredCard | TargetMin$ 0 | TargetMax$ 1 +SVar:DBReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | TgtPrompt$ Choose up to one other target creature card in your graveyard | ValidTgts$ Creature.YouOwn+!TriggeredCard | TargetMin$ 0 | TargetMax$ 1 DeckHas:Ability$Counters|Graveyard DeckHints:Ability$Graveyard|Discard|Mill Oracle:Flash\nWhen Illicit Masquerade enters, put an impostor counter on each creature you control.\nWhenever a creature you control with an impostor counter on it dies, exile it. Return up to one other target creature card from your graveyard to the battlefield. diff --git a/forge-gui/res/cardsfolder/i/illusionists_bracers.txt b/forge-gui/res/cardsfolder/i/illusionists_bracers.txt index 8e57678e6fb..24eefef8a9e 100644 --- a/forge-gui/res/cardsfolder/i/illusionists_bracers.txt +++ b/forge-gui/res/cardsfolder/i/illusionists_bracers.txt @@ -2,6 +2,6 @@ Name:Illusionist's Bracers ManaCost:2 Types:Artifact Equipment K:Equip:3 -T:Mode$ AbilityCast | ValidCard$ Creature.EquippedBy+inRealZoneBattlefield | ValidSA$ SpellAbility.nonManaAbility | TriggerZones$ Battlefield | Execute$ TrigCopyAbility | OptionalDecider$ You | TriggerDescription$ Whenever an ability of equipped creature is activated, if it isn't a mana ability, copy that ability. You may choose new targets for the copy. +T:Mode$ AbilityCast | ValidCard$ Creature.EquippedBy+inRealZoneBattlefield | ValidSA$ SpellAbility.!ManaAbility | TriggerZones$ Battlefield | Execute$ TrigCopyAbility | OptionalDecider$ You | TriggerDescription$ Whenever an ability of equipped creature is activated, if it isn't a mana ability, copy that ability. You may choose new targets for the copy. SVar:TrigCopyAbility:DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | MayChooseTarget$ True Oracle:Whenever an ability of equipped creature is activated, if it isn't a mana ability, copy that ability. You may choose new targets for the copy.\nEquip {3} diff --git a/forge-gui/res/cardsfolder/i/immolation_shaman.txt b/forge-gui/res/cardsfolder/i/immolation_shaman.txt index b4e991f382f..16574414388 100644 --- a/forge-gui/res/cardsfolder/i/immolation_shaman.txt +++ b/forge-gui/res/cardsfolder/i/immolation_shaman.txt @@ -2,7 +2,7 @@ Name:Immolation Shaman ManaCost:1 R Types:Creature Lizard Shaman PT:1/3 -T:Mode$ AbilityCast | ValidActivatingPlayer$ Opponent | ValidCard$ Artifact.inZoneBattlefield,Creature.inZoneBattlefield,Land.inZoneBattlefield | ValidSA$ SpellAbility.nonManaAbility | TriggerZones$ Battlefield | Execute$ TrigDmg | TriggerDescription$ Whenever an opponent activates an ability of an artifact, creature, or land that isn't a mana ability, CARDNAME deals 1 damage to that player. +T:Mode$ AbilityCast | ValidActivatingPlayer$ Opponent | ValidCard$ Artifact.inZoneBattlefield,Creature.inZoneBattlefield,Land.inZoneBattlefield | ValidSA$ SpellAbility.!ManaAbility | TriggerZones$ Battlefield | Execute$ TrigDmg | TriggerDescription$ Whenever an opponent activates an ability of an artifact, creature, or land that isn't a mana ability, CARDNAME deals 1 damage to that player. SVar:TrigDmg:DB$ DealDamage | NumDmg$ 1 | Defined$ TriggeredActivator A:AB$ Pump | Cost$ 3 R R | Defined$ Self | NumAtt$ +3 | NumDef$ +3 | KW$ Menace | SpellDescription$ CARDNAME gets +3/+3 and gains menace until end of turn. Oracle:Whenever an opponent activates an ability of an artifact, creature, or land that isn't a mana ability, Immolation Shaman deals 1 damage to that player.\n{3}{R}{R}: Immolation Shaman gets +3/+3 and gains menace until end of turn. diff --git a/forge-gui/res/cardsfolder/i/imprison.txt b/forge-gui/res/cardsfolder/i/imprison.txt index e1fecafc969..4796490c95e 100644 --- a/forge-gui/res/cardsfolder/i/imprison.txt +++ b/forge-gui/res/cardsfolder/i/imprison.txt @@ -3,7 +3,7 @@ ManaCost:B Types:Enchantment Aura K:Enchant:Creature SVar:AttachAILogic:Curse -T:Mode$ AbilityCast | ValidCard$ Creature.EnchantedBy | ValidSA$ SpellAbility.nonManaAbility+hasTapCost | TriggerZones$ Battlefield | Execute$ TrigDestroy1 | TriggerDescription$ Whenever a player activates an ability of enchanted creature with {T} in its activation cost that isn't a mana ability, you may pay {1}. If you do, counter that ability. If you don't, destroy CARDNAME. +T:Mode$ AbilityCast | ValidCard$ Creature.EnchantedBy | ValidSA$ SpellAbility.!ManaAbility+hasTapCost | TriggerZones$ Battlefield | Execute$ TrigDestroy1 | TriggerDescription$ Whenever a player activates an ability of enchanted creature with {T} in its activation cost that isn't a mana ability, you may pay {1}. If you do, counter that ability. If you don't, destroy CARDNAME. SVar:TrigDestroy1:DB$ Destroy | Defined$ Self | UnlessCost$ 1 | UnlessPayer$ You | UnlessResolveSubs$ WhenPaid | SubAbility$ DBCounter SVar:DBCounter:DB$ Counter | Defined$ TriggeredSpellAbility T:Mode$ Attacks | ValidCard$ Card.EnchantedBy | TriggerZones$ Battlefield | Execute$ TrigDestroy2 | TriggerDescription$ Whenever enchanted creature attacks or blocks, you may pay {1}. If you do, tap the creature, remove it from combat, and creatures it was blocking that had become blocked by only that creature this combat become unblocked. If you don't, destroy CARDNAME. diff --git a/forge-gui/res/cardsfolder/i/intercessors_arrest.txt b/forge-gui/res/cardsfolder/i/intercessors_arrest.txt index a4c9f0207c7..68a9c929216 100644 --- a/forge-gui/res/cardsfolder/i/intercessors_arrest.txt +++ b/forge-gui/res/cardsfolder/i/intercessors_arrest.txt @@ -3,5 +3,5 @@ ManaCost:2 W Types:Enchantment Aura K:Enchant:Permanent SVar:AttachAILogic:Curse -S:Mode$ CantAttack,CantBlock,CantCrew,CantBeActivated | ValidCard$ Card.EnchantedBy | ValidSA$ Activated.nonManaAbility | Description$ Enchanted permanent can't attack, block, or crew Vehicles. Its activated abilities can't be activated unless they're mana abilities. +S:Mode$ CantAttack,CantBlock,CantCrew,CantBeActivated | ValidCard$ Card.EnchantedBy | ValidSA$ Activated.!ManaAbility | Description$ Enchanted permanent can't attack, block, or crew Vehicles. Its activated abilities can't be activated unless they're mana abilities. Oracle:Enchant permanent\nEnchanted permanent can't attack, block, or crew Vehicles. Its activated abilities can't be activated unless they're mana abilities. diff --git a/forge-gui/res/cardsfolder/k/karns_sylex.txt b/forge-gui/res/cardsfolder/k/karns_sylex.txt index a852ea06373..3d75b39feef 100644 --- a/forge-gui/res/cardsfolder/k/karns_sylex.txt +++ b/forge-gui/res/cardsfolder/k/karns_sylex.txt @@ -3,7 +3,7 @@ ManaCost:3 Types:Legendary Artifact R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementResult$ Updated | ReplaceWith$ ETBTapped | Description$ CARDNAME enters tapped. SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True -S:Mode$ CantPayLife | ValidPlayer$ Player | ValidCause$ Spell,Activated.nonManaAbility | ForCost$ True | Description$ Players can't pay life to cast spells or activate abilities that aren't mana abilities. +S:Mode$ CantPayLife | ValidPlayer$ Player | ValidCause$ Spell,Activated.!ManaAbility | ForCost$ True | Description$ Players can't pay life to cast spells or activate abilities that aren't mana abilities. A:AB$ DestroyAll | Cost$ X T Exile<1/CARDNAME> | ValidCards$ Permanent.nonLand+cmcLEX | SorcerySpeed$ True | SpellDescription$ Destroy each nonland permanent with mana value X or less. Activate only as a sorcery. SVar:X:Count$xPaid Oracle:Karn's Sylex enters tapped.\nPlayers can't pay life to cast spells or to activate abilities that aren't mana abilities.\n{X}, {T}, Exile Karn's Sylex: Destroy each nonland permanent with mana value X or less. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/k/kurkesh_onakke_ancient.txt b/forge-gui/res/cardsfolder/k/kurkesh_onakke_ancient.txt index 355d05f4206..9a50c74e3c3 100644 --- a/forge-gui/res/cardsfolder/k/kurkesh_onakke_ancient.txt +++ b/forge-gui/res/cardsfolder/k/kurkesh_onakke_ancient.txt @@ -2,6 +2,6 @@ Name:Kurkesh, Onakke Ancient ManaCost:2 R R Types:Legendary Creature Ogre Spirit PT:4/3 -T:Mode$ AbilityCast | ValidCard$ Artifact | ValidSA$ SpellAbility.nonManaAbility | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigCopyAbility | TriggerDescription$ Whenever you activate an ability of an artifact, if it isn't a mana ability, you may pay {R}. If you do, copy that ability. You may choose new targets for the copy. +T:Mode$ AbilityCast | ValidCard$ Artifact | ValidSA$ SpellAbility.!ManaAbility | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigCopyAbility | TriggerDescription$ Whenever you activate an ability of an artifact, if it isn't a mana ability, you may pay {R}. If you do, copy that ability. You may choose new targets for the copy. SVar:TrigCopyAbility:AB$ CopySpellAbility | Cost$ R | Defined$ TriggeredSpellAbility | MayChooseTarget$ True Oracle:Whenever you activate an ability of an artifact, if it isn't a mana ability, you may pay {R}. If you do, copy that ability. You may choose new targets for the copy. diff --git a/forge-gui/res/cardsfolder/k/kusari_gama.txt b/forge-gui/res/cardsfolder/k/kusari_gama.txt index 1234de9ebe1..f7c4d914371 100644 --- a/forge-gui/res/cardsfolder/k/kusari_gama.txt +++ b/forge-gui/res/cardsfolder/k/kusari_gama.txt @@ -5,6 +5,6 @@ K:Equip:3 S:Mode$ Continuous | Affected$ Card.EquippedBy | AddAbility$ GamaPump | Description$ Equipped creature has "{2}: This creature gets +1/+0 until end of turn." SVar:GamaPump:AB$ Pump | Cost$ 2 | Defined$ Self | NumAtt$ +1 | SpellDescription$ CARDNAME gets +1/+0 until end of turn. T:Mode$ DamageDone | ValidSource$ Card.EquippedBy | ValidTarget$ Creature.blocking | Execute$ GamaDamage | TriggerZones$ Battlefield | TriggerDescription$ Whenever equipped creature deals damage to a blocking creature, CARDNAME deals that much damage to each other creature defending player controls. -SVar:GamaDamage:DB$ DamageAll | NumDmg$ X | ValidCards$ Creature.NotTriggeredTarget+ControlledBy TriggeredTargetController +SVar:GamaDamage:DB$ DamageAll | NumDmg$ X | ValidCards$ Creature.!TriggeredTarget+ControlledBy TriggeredTargetController SVar:X:TriggerCount$DamageAmount Oracle:Equipped creature has "{2}: This creature gets +1/+0 until end of turn."\nWhenever equipped creature deals damage to a blocking creature, Kusari-Gama deals that much damage to each other creature defending player controls.\nEquip {3} ({3}: Attach to target creature you control. Equip only as a sorcery.) diff --git a/forge-gui/res/cardsfolder/m/martial_impetus.txt b/forge-gui/res/cardsfolder/m/martial_impetus.txt index f4838e951c7..351d24c6d1a 100644 --- a/forge-gui/res/cardsfolder/m/martial_impetus.txt +++ b/forge-gui/res/cardsfolder/m/martial_impetus.txt @@ -5,5 +5,5 @@ K:Enchant:Creature SVar:AttachAILogic:Pump S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 1 | AddToughness$ 1 | Goad$ True | Description$ Enchanted creature gets +1/+1 and is goaded. (It attacks each combat if able and attacks a player other than you if able.) T:Mode$ Attacks | ValidCard$ Card.AttachedBy | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever enchanted creature attacks, each other creature that's attacking one of your opponents gets +1/+1 until end of turn. -SVar:TrigPump:DB$ PumpAll | ValidCards$ Creature.NotTriggeredAttacker+attacking Opponent | NumAtt$ +1 | NumDef$ +1 +SVar:TrigPump:DB$ PumpAll | ValidCards$ Creature.!TriggeredAttacker+attacking Opponent | NumAtt$ +1 | NumDef$ +1 Oracle:Enchant creature\nEnchanted creature gets +1/+1 and is goaded. (It attacks each combat if able and attacks a player other than you if able.)\nWhenever enchanted creature attacks, each other creature that's attacking one of your opponents gets +1/+1 until end of turn. diff --git a/forge-gui/res/cardsfolder/m/mondassian_colony_ship.txt b/forge-gui/res/cardsfolder/m/mondassian_colony_ship.txt index b296cec7daa..93ab698e38a 100644 --- a/forge-gui/res/cardsfolder/m/mondassian_colony_ship.txt +++ b/forge-gui/res/cardsfolder/m/mondassian_colony_ship.txt @@ -3,7 +3,7 @@ ManaCost:no cost Types:Plane Spacecraft T:Mode$ Attacks | ValidCard$ Creature | TriggerZones$ Command | Execute$ AnimosityPump | TriggerDescription$ Whenever a creature attacks, it gets +1/+1 until end of turn for each other creature its controller controls that shares a creature type with it. SVar:AnimosityPump:DB$ Pump | Defined$ TriggeredAttackerLKICopy | NumAtt$ +X | NumDef$ +X -SVar:X:Count$Valid Creature.NotTriggeredAttacker+ControlledBy AttackingPlayer+sharesCreatureTypeWith TriggeredAttacker +SVar:X:Count$Valid Creature.!TriggeredAttacker+ControlledBy AttackingPlayer+sharesCreatureTypeWith TriggeredAttacker T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ TrigSetState | TriggerDescription$ Whenever chaos ensues, turn target creature face down. It becomes a 2/2 Cyberman artifact creature. SVar:TrigSetState:DB$ SetState | ValidTgts$ Creature | Mode$ TurnFaceDown | FaceDownSetType$ Artifact & Creature & Cyberman | FaceDownPower$ 2 | FaceDownToughness$ 2 DeckHas:Type$Cyberman diff --git a/forge-gui/res/cardsfolder/m/mothrider_cavalry.txt b/forge-gui/res/cardsfolder/m/mothrider_cavalry.txt index d82b74142a4..1b77fe6e639 100644 --- a/forge-gui/res/cardsfolder/m/mothrider_cavalry.txt +++ b/forge-gui/res/cardsfolder/m/mothrider_cavalry.txt @@ -3,7 +3,7 @@ ManaCost:2 W W Types:Creature Human Samurai PT:2/2 K:Flying -S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 2 | EffectZone$ All | IsPresent$ Creature.YouOwn+notnamedMothrider Cavalry | PresentZone$ Hand | PresentCompare$ EQ0 | Description$ This spell costs {2} less to cast if you have no other creature cards in hand or if the only other creature cards in your hand are named Mothrider Cavalry. +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 2 | EffectZone$ All | IsPresent$ Creature.YouOwn+!namedMothrider Cavalry | PresentZone$ Hand | PresentCompare$ EQ0 | Description$ This spell costs {2} less to cast if you have no other creature cards in hand or if the only other creature cards in your hand are named Mothrider Cavalry. S:Mode$ Continuous | Affected$ Creature.Other+YouCtrl | AddPower$ 1 | AddToughness$ 1 | Description$ Other creatures you control get +1/+1. DeckNeeds:Name$Mothrider Cavalry Oracle:This spell costs {2} less to cast if you have no other creature cards in hand or if the only other creature cards in your hand are named Mothrider Cavalry.\nFlying\nOther creatures you control get +1/+1. diff --git a/forge-gui/res/cardsfolder/o/overwhelming_splendor.txt b/forge-gui/res/cardsfolder/o/overwhelming_splendor.txt index 55017f773f2..1520f75730a 100644 --- a/forge-gui/res/cardsfolder/o/overwhelming_splendor.txt +++ b/forge-gui/res/cardsfolder/o/overwhelming_splendor.txt @@ -4,5 +4,5 @@ Types:Enchantment Aura Curse K:Enchant:Player SVar:AttachAILogic:Curse S:Mode$ Continuous | Affected$ Creature.EnchantedPlayerCtrl | SetPower$ 1 | SetToughness$ 1 | RemoveAllAbilities$ True | Description$ Creatures enchanted player controls lose all abilities and have base power and toughness 1/1. -S:Mode$ CantBeActivated | Activator$ Player.EnchantedBy | ValidSA$ Activated.nonManaAbility+!Loyalty | Description$ Enchanted player can't activate abilities that aren't mana abilities or loyalty abilities. +S:Mode$ CantBeActivated | Activator$ Player.EnchantedBy | ValidSA$ Activated.!ManaAbility+!Loyalty | Description$ Enchanted player can't activate abilities that aren't mana abilities or loyalty abilities. Oracle:Enchant player\nCreatures enchanted player controls lose all abilities and have base power and toughness 1/1.\nEnchanted player can't activate abilities that aren't mana abilities or loyalty abilities. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_dreadnought.txt b/forge-gui/res/cardsfolder/p/phyrexian_dreadnought.txt index 24550a572d9..a3058a7ba2f 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_dreadnought.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_dreadnought.txt @@ -11,7 +11,7 @@ SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:TotalPower:Remembered$CardPower SVar:X:Count$Valid Creature.YouCtrl SVar:NeedsToPlayVar:Y GE12 -SVar:Y:Count$SumPower_Creature.YouCtrl+notnamedPhyrexian Dreadnought +SVar:Y:Count$SumPower_Creature.YouCtrl+!namedPhyrexian Dreadnought AI:RemoveDeck:Random DeckHas:Ability$Sacrifice Oracle:Trample\nWhen Phyrexian Dreadnought enters, sacrifice it unless you sacrifice any number of creatures with total power 12 or greater. diff --git a/forge-gui/res/cardsfolder/p/pit_automaton.txt b/forge-gui/res/cardsfolder/p/pit_automaton.txt index be8a8afa095..5e1393f4066 100644 --- a/forge-gui/res/cardsfolder/p/pit_automaton.txt +++ b/forge-gui/res/cardsfolder/p/pit_automaton.txt @@ -4,6 +4,6 @@ Types:Artifact Creature Construct PT:0/4 K:Defender A:AB$ Mana | Cost$ T | Produced$ C | Amount$ 2 | RestrictValid$ Activated | SpellDescription$ Add {C}{C}. Spend this mana only to activate abilities. -A:AB$ DelayedTrigger | Cost$ 2 T | AILogic$ SpellCopy | Mode$ AbilityCast | ValidSA$ Activated.Exhaust+nonManaAbility | ValidActivatingPlayer$ You | ThisTurn$ True | Execute$ EffTrigCopy | SpellDescription$ When you next activate an exhaust ability that isn't a mana ability this turn, copy it. You may choose new targets for the copy. +A:AB$ DelayedTrigger | Cost$ 2 T | AILogic$ SpellCopy | Mode$ AbilityCast | ValidSA$ Activated.Exhaust+!ManaAbility | ValidActivatingPlayer$ You | ThisTurn$ True | Execute$ EffTrigCopy | SpellDescription$ When you next activate an exhaust ability that isn't a mana ability this turn, copy it. You may choose new targets for the copy. SVar:EffTrigCopy:DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | MayChooseTarget$ True Oracle:Defender\n{T}: Add {C}{C}. Spend this mana only to activate abilities.\n{2}, {T}: When you next activate an exhaust ability that isn't a mana ability this turn, copy it. You may choose new targets for the copy. diff --git a/forge-gui/res/cardsfolder/p/pithing_needle.txt b/forge-gui/res/cardsfolder/p/pithing_needle.txt index 1ac4895d24f..a75c2631bc1 100644 --- a/forge-gui/res/cardsfolder/p/pithing_needle.txt +++ b/forge-gui/res/cardsfolder/p/pithing_needle.txt @@ -3,6 +3,6 @@ ManaCost:1 Types:Artifact K:ETBReplacement:Other:DBNameCard SVar:DBNameCard:DB$ NameCard | Defined$ You | AILogic$ PithingNeedle | SpellDescription$ As CARDNAME enters, choose a card name. -S:Mode$ CantBeActivated | ValidCard$ Card.NamedCard | ValidSA$ Activated.nonManaAbility | Description$ Activated abilities of sources with the chosen name can't be activated unless they're mana abilities. +S:Mode$ CantBeActivated | ValidCard$ Card.NamedCard | ValidSA$ Activated.!ManaAbility | Description$ Activated abilities of sources with the chosen name can't be activated unless they're mana abilities. AI:RemoveDeck:Random Oracle:As Pithing Needle enters, choose a card name.\nActivated abilities of sources with the chosen name can't be activated unless they're mana abilities. diff --git a/forge-gui/res/cardsfolder/p/psychic_battle.txt b/forge-gui/res/cardsfolder/p/psychic_battle.txt index 7c96b64007c..71775f6f770 100644 --- a/forge-gui/res/cardsfolder/p/psychic_battle.txt +++ b/forge-gui/res/cardsfolder/p/psychic_battle.txt @@ -1,7 +1,7 @@ Name:Psychic Battle ManaCost:3 U U Types:Enchantment -T:Mode$ BecomesTargetOnce | ValidCause$ Card.notnamedPsychic Battle | TriggerZones$ Battlefield | Execute$ TrigReveal | TriggerDescription$ Whenever a player chooses one or more targets, each player reveals the top card of their library. The player who reveals the card with the highest mana value may change the target or targets. If two or more cards are tied for highest cost, the target or targets remain unchanged. Changing targets this way doesn't trigger abilities of permanents named Psychic Battle. +T:Mode$ BecomesTargetOnce | ValidCause$ Card.!namedPsychic Battle | TriggerZones$ Battlefield | Execute$ TrigReveal | TriggerDescription$ Whenever a player chooses one or more targets, each player reveals the top card of their library. The player who reveals the card with the highest mana value may change the target or targets. If two or more cards are tied for highest cost, the target or targets remain unchanged. Changing targets this way doesn't trigger abilities of permanents named Psychic Battle. SVar:TrigReveal:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBReveal | SubAbility$ DBChangeTargets SVar:DBReveal:DB$ PeekAndReveal | Defined$ Remembered | RememberRevealed$ True | SubAbility$ DBCheckLibrary SVar:DBCheckLibrary:DB$ Branch | BranchConditionSVar$ NumRememberedCard | TrueSubAbility$ DBCheckImprinted diff --git a/forge-gui/res/cardsfolder/r/realmbreakers_grasp.txt b/forge-gui/res/cardsfolder/r/realmbreakers_grasp.txt index 2a9fa93ea6d..60a48443c17 100644 --- a/forge-gui/res/cardsfolder/r/realmbreakers_grasp.txt +++ b/forge-gui/res/cardsfolder/r/realmbreakers_grasp.txt @@ -3,5 +3,5 @@ ManaCost:1 W Types:Enchantment Aura K:Enchant:Artifact,Creature:artifact or creature SVar:AttachAILogic:Curse -S:Mode$ CantAttack,CantBlock,CantBeActivated | ValidCard$ Card.EnchantedBy | ValidSA$ Activated.nonManaAbility | Description$ Enchanted permanent can't attack or block, and its activated abilities can't be activated unless they're mana abilities. +S:Mode$ CantAttack,CantBlock,CantBeActivated | ValidCard$ Card.EnchantedBy | ValidSA$ Activated.!ManaAbility | Description$ Enchanted permanent can't attack or block, and its activated abilities can't be activated unless they're mana abilities. Oracle:Enchant artifact or creature\nEnchanted permanent can't attack or block, and its activated abilities can't be activated unless they're mana abilities. diff --git a/forge-gui/res/cardsfolder/r/rings_of_brighthearth.txt b/forge-gui/res/cardsfolder/r/rings_of_brighthearth.txt index 5e1edfdf780..fbc5c863705 100644 --- a/forge-gui/res/cardsfolder/r/rings_of_brighthearth.txt +++ b/forge-gui/res/cardsfolder/r/rings_of_brighthearth.txt @@ -1,6 +1,6 @@ Name:Rings of Brighthearth ManaCost:3 Types:Artifact -T:Mode$ AbilityCast | ValidActivatingPlayer$ You | ValidSA$ SpellAbility.nonManaAbility | TriggerZones$ Battlefield | Execute$ TrigCopySpell | OptionalDecider$ You | TriggerDescription$ Whenever you activate an ability, if it isn't a mana ability, you may pay {2}. If you do, copy that ability. You may choose new targets for the copy. +T:Mode$ AbilityCast | ValidActivatingPlayer$ You | ValidSA$ SpellAbility.!ManaAbility | TriggerZones$ Battlefield | Execute$ TrigCopySpell | OptionalDecider$ You | TriggerDescription$ Whenever you activate an ability, if it isn't a mana ability, you may pay {2}. If you do, copy that ability. You may choose new targets for the copy. SVar:TrigCopySpell:AB$ CopySpellAbility | Cost$ 2 | Defined$ TriggeredSpellAbility | MayChooseTarget$ True Oracle:Whenever you activate an ability, if it isn't a mana ability, you may pay {2}. If you do, copy that ability. You may choose new targets for the copy. diff --git a/forge-gui/res/cardsfolder/r/rowan_kenrith.txt b/forge-gui/res/cardsfolder/r/rowan_kenrith.txt index bc53b45708e..9efa223c332 100644 --- a/forge-gui/res/cardsfolder/r/rowan_kenrith.txt +++ b/forge-gui/res/cardsfolder/r/rowan_kenrith.txt @@ -11,7 +11,7 @@ SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True A:AB$ DamageAll | Cost$ SubCounter<2/LOYALTY> | ValidTgts$ Player | TgtPrompt$ Select target player | NumDmg$ 3 | ValidCards$ Creature.tapped | Planeswalker$ True | ValidDescription$ each tapped creature target player controls. | SpellDescription$ CARDNAME deals 3 damage to each tapped creature target player controls. A:AB$ Effect | Cost$ SubCounter<8/LOYALTY> | Planeswalker$ True | Ultimate$ True | ValidTgts$ Player | EffectOwner$ Targeted | Name$ Emblem — Rowan Kenrith | Image$ emblem_rowan_kenrith | Triggers$ CopyAbility | Duration$ Permanent | AILogic$ Always | SpellDescription$ Target player gets an emblem with "Whenever you activate an ability that isn't a mana ability, copy it. You may choose new targets for the copy." -SVar:CopyAbility:Mode$ AbilityCast | ValidActivatingPlayer$ You | ValidSA$ SpellAbility.nonManaAbility | TriggerZones$ Command | Execute$ TrigCopy | TriggerDescription$ Whenever you activate an ability that isn't a mana ability, copy it. You may choose new targets for the copy. +SVar:CopyAbility:Mode$ AbilityCast | ValidActivatingPlayer$ You | ValidSA$ SpellAbility.!ManaAbility | TriggerZones$ Command | Execute$ TrigCopy | TriggerDescription$ Whenever you activate an ability that isn't a mana ability, copy it. You may choose new targets for the copy. SVar:TrigCopy:DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | MayChooseTarget$ True DeckHints:Name$Will Kenrith Oracle:[+2]: During target player's next turn, each creature that player controls attacks if able.\n[-2]: Rowan Kenrith deals 3 damage to each tapped creature target player controls.\n[-8]: Target player gets an emblem with "Whenever you activate an ability that isn't a mana ability, copy it. You may choose new targets for the copy."\nPartner with Will Kenrith\nRowan Kenrith can be your commander. diff --git a/forge-gui/res/cardsfolder/r/runic_armasaur.txt b/forge-gui/res/cardsfolder/r/runic_armasaur.txt index d685168bdc0..4f86002588f 100644 --- a/forge-gui/res/cardsfolder/r/runic_armasaur.txt +++ b/forge-gui/res/cardsfolder/r/runic_armasaur.txt @@ -2,6 +2,6 @@ Name:Runic Armasaur ManaCost:1 G G Types:Creature Dinosaur PT:2/5 -T:Mode$ AbilityCast | ValidActivatingPlayer$ Opponent | ValidCard$ Creature.inZoneBattlefield,Land.inZoneBattlefield | ValidSA$ SpellAbility.nonManaAbility | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigDraw | TriggerDescription$ Whenever an opponent activates an ability of a creature or land that isn't a mana ability, you may draw a card. +T:Mode$ AbilityCast | ValidActivatingPlayer$ Opponent | ValidCard$ Creature.inZoneBattlefield,Land.inZoneBattlefield | ValidSA$ SpellAbility.!ManaAbility | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigDraw | TriggerDescription$ Whenever an opponent activates an ability of a creature or land that isn't a mana ability, you may draw a card. SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 Oracle:Whenever an opponent activates an ability of a creature or land that isn't a mana ability, you may draw a card. diff --git a/forge-gui/res/cardsfolder/r/ruthless_instincts.txt b/forge-gui/res/cardsfolder/r/ruthless_instincts.txt index 95ca1c3d546..6d16f3f02fd 100644 --- a/forge-gui/res/cardsfolder/r/ruthless_instincts.txt +++ b/forge-gui/res/cardsfolder/r/ruthless_instincts.txt @@ -2,7 +2,7 @@ Name:Ruthless Instincts ManaCost:2 G Types:Instant A:SP$ Charm | Choices$ DBPump1,DBPump2 -SVar:DBPump1:DB$ Pump | ValidTgts$ Creature.notattacking | TgtPrompt$ Select target nonattacking creature | KW$ Reach & Deathtouch | SubAbility$ DBUntap | SpellDescription$ Target nonattacking creature gains reach and deathtouch until end of turn. Untap it. +SVar:DBPump1:DB$ Pump | ValidTgts$ Creature.!attacking | TgtPrompt$ Select target nonattacking creature | KW$ Reach & Deathtouch | SubAbility$ DBUntap | SpellDescription$ Target nonattacking creature gains reach and deathtouch until end of turn. Untap it. SVar:DBUntap:DB$ Untap | Defined$ Targeted SVar:DBPump2:DB$ Pump | ValidTgts$ Creature.attacking | TgtPrompt$ Select target attacking creature | NumAtt$ +2 | NumDef$ +2 | KW$ Trample | SpellDescription$ Target attacking creature gets +2/+2 and gains trample until end of turn. Oracle:Choose one —\n• Target nonattacking creature gains reach and deathtouch until end of turn. Untap it.\n• Target attacking creature gets +2/+2 and gains trample until end of turn. diff --git a/forge-gui/res/cardsfolder/rebalanced/a-earthquake_dragon.txt b/forge-gui/res/cardsfolder/rebalanced/a-earthquake_dragon.txt index bdf88028444..dbc247c5834 100644 --- a/forge-gui/res/cardsfolder/rebalanced/a-earthquake_dragon.txt +++ b/forge-gui/res/cardsfolder/rebalanced/a-earthquake_dragon.txt @@ -8,6 +8,6 @@ S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ X | EffectZone A:AB$ ChangeZone | Cost$ 2 G Sac<1/Land> | Origin$ Graveyard | Destination$ Hand | ActivationZone$ Graveyard | SpellDescription$ Return CARDNAME from your graveyard to your hand. SVar:DiscardMe:1 SVar:PlayMain1:TRUE -SVar:X:Count$Valid Creature.Dragon+notnamedEarthquake Dragon+notnamedA-Earthquake Dragon+YouCtrl$SumCMC +SVar:X:Count$Valid Creature.Dragon+!namedEarthquake Dragon+!namedA-Earthquake Dragon+YouCtrl$SumCMC DeckHints:Type$Dragon Oracle:This spell costs {X} less to cast, where X is the total mana value of Dragons you control not named Earthquake Dragon.\nFlying, trample\n{2}{G}, Sacrifice a land: Return Earthquake Dragon from your graveyard to your hand. diff --git a/forge-gui/res/cardsfolder/rebalanced/a-guildsworn_prowler.txt b/forge-gui/res/cardsfolder/rebalanced/a-guildsworn_prowler.txt index d2e075214a3..5927d7dd35b 100644 --- a/forge-gui/res/cardsfolder/rebalanced/a-guildsworn_prowler.txt +++ b/forge-gui/res/cardsfolder/rebalanced/a-guildsworn_prowler.txt @@ -3,6 +3,6 @@ ManaCost:1 B Types:Creature Tiefling Rogue Assassin PT:1/1 K:Deathtouch -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self+notblocking | Execute$ TrigDraw | TriggerDescription$ When CARDNAME dies, if it wasn't blocking, draw a card. +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self+!blocking | Execute$ TrigDraw | TriggerDescription$ When CARDNAME dies, if it wasn't blocking, draw a card. SVar:TrigDraw:DB$ Draw Oracle:Deathtouch\nWhen Guildsworn Prowler dies, if it wasn't blocking, draw a card. diff --git a/forge-gui/res/cardsfolder/s/sala_deck_boss.txt b/forge-gui/res/cardsfolder/s/sala_deck_boss.txt index dca5a955b01..d0becccfce9 100644 --- a/forge-gui/res/cardsfolder/s/sala_deck_boss.txt +++ b/forge-gui/res/cardsfolder/s/sala_deck_boss.txt @@ -3,6 +3,6 @@ ManaCost:1 U R Types:Legendary Creature Squid Pirate PT:3/3 S:Mode$ Continuous | Affected$ Creature.YouCtrl+hasAbility Activated.Exhaust | AddKeyword$ Haste | Description$ Each creature you control with an exhaust ability has haste. -T:Mode$ AbilityCast | ValidActivatingPlayer$ You | ValidSA$ Activated.Exhaust+nonManaAbility | TriggerZones$ Battlefield | Execute$ TrigCopy | TriggerDescription$ Whenever you activate an exhaust ability that isn't a mana ability, copy it. You may choose new targets for the copy. +T:Mode$ AbilityCast | ValidActivatingPlayer$ You | ValidSA$ Activated.Exhaust+!ManaAbility | TriggerZones$ Battlefield | Execute$ TrigCopy | TriggerDescription$ Whenever you activate an exhaust ability that isn't a mana ability, copy it. You may choose new targets for the copy. SVar:TrigCopy:DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | MayChooseTarget$ True Oracle:Each creature you control with an exhaust ability has haste.\nWhenever you activate an exhaust ability that isn't a mana ability, copy it. You may choose new targets for the copy. diff --git a/forge-gui/res/cardsfolder/s/sasaya_orochi_ascendant_sasayas_essence.txt b/forge-gui/res/cardsfolder/s/sasaya_orochi_ascendant_sasayas_essence.txt index 88e48cb6f6f..57f31c7f729 100644 --- a/forge-gui/res/cardsfolder/s/sasaya_orochi_ascendant_sasayas_essence.txt +++ b/forge-gui/res/cardsfolder/s/sasaya_orochi_ascendant_sasayas_essence.txt @@ -14,6 +14,6 @@ ManaCost:1 G G Colors:green Types:Legendary Enchantment T:Mode$ TapsForMana | ValidCard$ Land.YouCtrl | TriggerZones$ Battlefield | Execute$ DBRepeat | Static$ True | TriggerDescription$ Whenever a land you control is tapped for mana, add an additional one mana of any type that land produced for each other land you control with the same name as it. -SVar:DBRepeat:DB$ RepeatEach | RepeatCards$ Land.YouCtrl+NotTriggeredCard+sharesNameWith TriggeredCard | RepeatSubAbility$ DBManaReflect +SVar:DBRepeat:DB$ RepeatEach | RepeatCards$ Land.YouCtrl+!TriggeredCard+sharesNameWith TriggeredCard | RepeatSubAbility$ DBManaReflect SVar:DBManaReflect:DB$ ManaReflected | ColorOrType$ Type | ReflectProperty$ Produced | Defined$ You Oracle:Whenever a land you control is tapped for mana, add an additional one mana of any type that land produced for each other land you control with the same name as it. diff --git a/forge-gui/res/cardsfolder/s/sculpting_steel.txt b/forge-gui/res/cardsfolder/s/sculpting_steel.txt index 1863839700b..50adb17d6e3 100644 --- a/forge-gui/res/cardsfolder/s/sculpting_steel.txt +++ b/forge-gui/res/cardsfolder/s/sculpting_steel.txt @@ -3,5 +3,5 @@ ManaCost:3 Types:Artifact K:ETBReplacement:Copy:DBCopy:Optional SVar:DBCopy:DB$ Clone | Choices$ Artifact.Other | SpellDescription$ You may have CARDNAME enter as a copy of any artifact on the battlefield. -SVar:NeedsToPlay:Artifact.YouDontCtrl+notnamedSculpting Steel,Artifact.YouCtrl+nonLegendary+notnamedSculpting Steel +SVar:NeedsToPlay:Artifact.YouDontCtrl+!namedSculpting Steel,Artifact.YouCtrl+nonLegendary+!namedSculpting Steel Oracle:You may have Sculpting Steel enter as a copy of any artifact on the battlefield. diff --git a/forge-gui/res/cardsfolder/s/shared_animosity.txt b/forge-gui/res/cardsfolder/s/shared_animosity.txt index 73b8536a799..8c313794f73 100644 --- a/forge-gui/res/cardsfolder/s/shared_animosity.txt +++ b/forge-gui/res/cardsfolder/s/shared_animosity.txt @@ -3,6 +3,6 @@ ManaCost:2 R Types:Enchantment T:Mode$ Attacks | ValidCard$ Creature.YouCtrl | TriggerZones$ Battlefield | Execute$ AnimosityPump | TriggerDescription$ Whenever a creature you control attacks, it gets +1/+0 until end of turn for each other attacking creature that shares a creature type with it. SVar:AnimosityPump:DB$ Pump | Defined$ TriggeredAttackerLKICopy | NumAtt$ +X -SVar:X:Count$Valid Creature.attacking+NotTriggeredAttacker+sharesCreatureTypeWith TriggeredAttacker +SVar:X:Count$Valid Creature.attacking+!TriggeredAttacker+sharesCreatureTypeWith TriggeredAttacker AI:RemoveDeck:Random Oracle:Whenever a creature you control attacks, it gets +1/+0 until end of turn for each other attacking creature that shares a creature type with it. diff --git a/forge-gui/res/cardsfolder/s/sharkey_tyrant_of_the_shire.txt b/forge-gui/res/cardsfolder/s/sharkey_tyrant_of_the_shire.txt index 922e79e84c1..289f5293502 100644 --- a/forge-gui/res/cardsfolder/s/sharkey_tyrant_of_the_shire.txt +++ b/forge-gui/res/cardsfolder/s/sharkey_tyrant_of_the_shire.txt @@ -2,8 +2,8 @@ Name:Sharkey, Tyrant of the Shire ManaCost:2 U B Types:Legendary Creature Avatar Rogue PT:2/4 -S:Mode$ CantBeActivated | AffectedZone$ Battlefield | ValidCard$ Land.OppCtrl | ValidSA$ Activated.nonManaAbility | Description$ Activated abilities of lands your opponents control can't be activated unless they're mana abilities. -S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ Battlefield | GainsAbilitiesOf$ Land.OppCtrl | GainsValidAbilities$ Activated.nonManaAbility | Description$ CARDNAME has all activated abilities of lands your opponents control except mana abilities. +S:Mode$ CantBeActivated | AffectedZone$ Battlefield | ValidCard$ Land.OppCtrl | ValidSA$ Activated.!ManaAbility | Description$ Activated abilities of lands your opponents control can't be activated unless they're mana abilities. +S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ Battlefield | GainsAbilitiesOf$ Land.OppCtrl | GainsValidAbilities$ Activated.!ManaAbility | Description$ CARDNAME has all activated abilities of lands your opponents control except mana abilities. S:Mode$ ManaConvert | ValidPlayer$ You | ValidCard$ Card.Self | ValidSA$ Activated | ManaConversion$ AnyType->AnyType | Description$ Mana of any type can be spent to activate NICKNAME's abilities. SVar:PlayMain1:TRUE Oracle:Activated abilities of lands your opponents control can't be activated unless they're mana abilities.\nSharkey, Tyrant of the Shire has all activated abilities of lands your opponents control except mana abilities.\nMana of any type can be spent to activate Sharkey's abilities. diff --git a/forge-gui/res/cardsfolder/s/sigil_of_valor.txt b/forge-gui/res/cardsfolder/s/sigil_of_valor.txt index ff317a2a6c3..0c8383322cd 100644 --- a/forge-gui/res/cardsfolder/s/sigil_of_valor.txt +++ b/forge-gui/res/cardsfolder/s/sigil_of_valor.txt @@ -4,5 +4,5 @@ Types:Artifact Equipment K:Equip:1 T:Mode$ Attacks | ValidCard$ Card.EquippedBy | Alone$ True | Execute$ TrigPump | TriggerDescription$ Whenever equipped creature attacks alone, it gets +1/+1 until end of turn for each other creature you control. SVar:TrigPump:DB$ Pump | Defined$ TriggeredAttackerLKICopy | NumAtt$ +X | NumDef$ +X -SVar:X:Count$Valid Creature.YouCtrl+NotTriggeredAttacker +SVar:X:Count$Valid Creature.YouCtrl+!TriggeredAttacker Oracle:Whenever equipped creature attacks alone, it gets +1/+1 until end of turn for each other creature you control.\nEquip {1} ({1}: Attach to target creature you control. Equip only as a sorcery.) diff --git a/forge-gui/res/cardsfolder/s/sorcerous_spyglass.txt b/forge-gui/res/cardsfolder/s/sorcerous_spyglass.txt index 2280d79249b..528e5fd49b7 100644 --- a/forge-gui/res/cardsfolder/s/sorcerous_spyglass.txt +++ b/forge-gui/res/cardsfolder/s/sorcerous_spyglass.txt @@ -6,7 +6,7 @@ SVar:ChoosePlayer:DB$ ChoosePlayer | Defined$ You | Choices$ Player.Opponent | C SVar:DBLook:DB$ RevealHand | Defined$ ChosenPlayer | Look$ True | SubAbility$ DBNameCard SVar:DBNameCard:DB$ NameCard | Defined$ You | SubAbility$ DBClear SVar:DBClear:DB$ Cleanup | ClearChosenPlayer$ True -S:Mode$ CantBeActivated | ValidCard$ Card.NamedCard | ValidSA$ Activated.nonManaAbility | Description$ Activated abilities of sources with the chosen name can't be activated unless they're mana abilities. +S:Mode$ CantBeActivated | ValidCard$ Card.NamedCard | ValidSA$ Activated.!ManaAbility | Description$ Activated abilities of sources with the chosen name can't be activated unless they're mana abilities. AI:RemoveDeck:Random # TODO: Might improve AI logic to support it (the AI needs to pick cards that actually have activated nonmana abilities on them) AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/s/staff_of_eden_vaults_key.txt b/forge-gui/res/cardsfolder/s/staff_of_eden_vaults_key.txt index 0e12ca3a513..d4befdfb6c3 100644 --- a/forge-gui/res/cardsfolder/s/staff_of_eden_vaults_key.txt +++ b/forge-gui/res/cardsfolder/s/staff_of_eden_vaults_key.txt @@ -2,7 +2,7 @@ Name:Staff of Eden, Vault's Key ManaCost:6 Types:Legendary Artifact T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When CARDNAME enters, put target legendary permanent card not named Staff of Eden, Vault's Key from a graveyard onto the battlefield under your control. -SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ValidTgts$ Permanent.Legendary+notnamedStaff of Eden; Vault's Key | GainControl$ True | ChangeNum$ 1 | Mandatory$ True | TgtPrompt$ Choose target legendary permanent card not named Staff of Eden, Vault's Key in a graveyard +SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ValidTgts$ Permanent.Legendary+!namedStaff of Eden; Vault's Key | GainControl$ True | ChangeNum$ 1 | Mandatory$ True | TgtPrompt$ Choose target legendary permanent card not named Staff of Eden, Vault's Key in a graveyard A:AB$ Draw | Cost$ T | NumCards$ Count$Valid Permanent.YouCtrl+YouDontOwn | SpellDescription$ Draw a card for each permanent you control but don't own. SVar:X:Count$Valid Permanent.YouCtrl$Colors Oracle:When Staff of Eden, Vault's Key enters, put target legendary permanent card not named Staff of Eden, Vault's Key from a graveyard onto the battlefield under your control.\n{T}: Draw a card for each permanent you control but don't own. diff --git a/forge-gui/res/cardsfolder/s/suppression_field.txt b/forge-gui/res/cardsfolder/s/suppression_field.txt index 7ae4ff55f04..7b9a84967f3 100644 --- a/forge-gui/res/cardsfolder/s/suppression_field.txt +++ b/forge-gui/res/cardsfolder/s/suppression_field.txt @@ -1,6 +1,6 @@ Name:Suppression Field ManaCost:1 W Types:Enchantment -S:Mode$ RaiseCost | ValidCard$ Card | ValidSpell$ Activated.nonManaAbility | Amount$ 2 | Description$ Activated abilities cost {2} more to activate unless they're mana abilities. +S:Mode$ RaiseCost | ValidCard$ Card | ValidSpell$ Activated.!ManaAbility | Amount$ 2 | Description$ Activated abilities cost {2} more to activate unless they're mana abilities. AI:RemoveDeck:Random Oracle:Activated abilities cost {2} more to activate unless they're mana abilities. diff --git a/forge-gui/res/cardsfolder/t/tahngarths_rage.txt b/forge-gui/res/cardsfolder/t/tahngarths_rage.txt index d891554a897..8935b0e0d13 100644 --- a/forge-gui/res/cardsfolder/t/tahngarths_rage.txt +++ b/forge-gui/res/cardsfolder/t/tahngarths_rage.txt @@ -4,6 +4,6 @@ Types:Enchantment Aura K:Enchant:Creature SVar:AttachAILogic:Pump S:Mode$ Continuous | Affected$ Creature.EnchantedBy+attacking | AddPower$ 3 | Description$ Enchanted creature gets +3/+0 as long as it's attacking. Otherwise, it gets -2/-1. -S:Mode$ Continuous | Affected$ Creature.EnchantedBy+notattacking | AddPower$ -2 | AddToughness$ -1 +S:Mode$ Continuous | Affected$ Creature.EnchantedBy+!attacking | AddPower$ -2 | AddToughness$ -1 AI:RemoveDeck:All Oracle:Enchant creature\nEnchanted creature gets +3/+0 as long as it's attacking. Otherwise, it gets -2/-1. diff --git a/forge-gui/res/cardsfolder/t/the_enigma_jewel_locus_of_enlightenment.txt b/forge-gui/res/cardsfolder/t/the_enigma_jewel_locus_of_enlightenment.txt index 52214ec4c21..52eb62a0420 100644 --- a/forge-gui/res/cardsfolder/t/the_enigma_jewel_locus_of_enlightenment.txt +++ b/forge-gui/res/cardsfolder/t/the_enigma_jewel_locus_of_enlightenment.txt @@ -19,6 +19,6 @@ ManaCost:no cost Colors:blue Types:Legendary Artifact S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ Battlefield | GainsAbilitiesOfDefined$ ExiledWith | GainsAbilitiesLimitPerTurn$ 1 | Description$ CARDNAME has each activated ability of the exiled cards used to craft it. You may activate each of those abilities only once each turn. -T:Mode$ AbilityCast | ValidActivatingPlayer$ You | ValidSA$ SpellAbility.nonManaAbility | TriggerZones$ Battlefield | Execute$ TrigCopy | TriggerDescription$ Whenever you activate an ability that isn't a mana ability, copy it. You may choose new targets for the copy. +T:Mode$ AbilityCast | ValidActivatingPlayer$ You | ValidSA$ SpellAbility.!ManaAbility | TriggerZones$ Battlefield | Execute$ TrigCopy | TriggerDescription$ Whenever you activate an ability that isn't a mana ability, copy it. You may choose new targets for the copy. SVar:TrigCopy:DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | MayChooseTarget$ True Oracle:Locus of Enlightenment has each activated ability of the exiled cards used to craft it. You may activate each of those abilities only once each turn.\nWhenever you activate an ability that isn't a mana ability, copy it. You may choose new targets for the copy. diff --git a/forge-gui/res/cardsfolder/t/the_flood_of_mars.txt b/forge-gui/res/cardsfolder/t/the_flood_of_mars.txt index 74d9d85f5d5..def601ca0d7 100644 --- a/forge-gui/res/cardsfolder/t/the_flood_of_mars.txt +++ b/forge-gui/res/cardsfolder/t/the_flood_of_mars.txt @@ -4,7 +4,7 @@ Types:Creature Alien Zombie Horror PT:3/3 K:Landwalk:Island T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ DBCounter | TriggerDescription$ Water Always Wins — Whenever CARDNAME attacks, put a flood counter on another target creature or land. If it's a creature, it becomes a copy of CARDNAME. If it's a land, it becomes an Island in addition to its other types. -SVar:DBCounter:DB$ PutCounter | ValidTgts$ Creature.Other,Land.Other | AITgts$ Creature.OppCtrl+notnamedThe Flood of Mars,Land.OppCtrl+nonIsland | TgtPrompt$ Select target creature or land | CounterType$ FLOOD | SubAbility$ DBCopy +SVar:DBCounter:DB$ PutCounter | ValidTgts$ Creature.Other,Land.Other | AITgts$ Creature.OppCtrl+!namedThe Flood of Mars,Land.OppCtrl+nonIsland | TgtPrompt$ Select target creature or land | CounterType$ FLOOD | SubAbility$ DBCopy SVar:DBCopy:DB$ Clone | ConditionDefined$ ParentTarget | ConditionPresent$ Creature | Defined$ Self | CloneZone$ Battlefield | CloneTarget$ ParentTarget | SubAbility$ DBAnimate SVar:DBAnimate:DB$ Animate | ConditionDefined$ ParentTarget | ConditionPresent$ Land | Defined$ ParentTarget | Types$ Island | Duration$ Permanent | IsCurse$ True SVar:HasAttackEffect:TRUE diff --git a/forge-gui/res/cardsfolder/t/tiamat.txt b/forge-gui/res/cardsfolder/t/tiamat.txt index 70850d10e36..500ae7cf09e 100644 --- a/forge-gui/res/cardsfolder/t/tiamat.txt +++ b/forge-gui/res/cardsfolder/t/tiamat.txt @@ -4,6 +4,6 @@ Types:Legendary Creature Dragon God PT:7/7 K:Flying T:Mode$ ChangesZone | ValidCard$ Card.Self+wasCastByYou | Destination$ Battlefield | Execute$ TrigChangeZone | TriggerDescription$ When CARDNAME enters, if you cast it, search your library for up to five Dragon cards not named Tiamat that each have different names, reveal them, put them into your hand, then shuffle. -SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Dragon.notnamedTiamat | ChangeNum$ 5 | DifferentNames$ True +SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Dragon.!namedTiamat | ChangeNum$ 5 | DifferentNames$ True DeckNeeds:Type$Dragon Oracle:Flying\nWhen Tiamat enters, if you cast it, search your library for up to five Dragon cards not named Tiamat that each have different names, reveal them, put them into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/t/tinker.txt b/forge-gui/res/cardsfolder/t/tinker.txt index 6f09b31821b..c521cec5abc 100644 --- a/forge-gui/res/cardsfolder/t/tinker.txt +++ b/forge-gui/res/cardsfolder/t/tinker.txt @@ -3,5 +3,5 @@ ManaCost:2 U Types:Sorcery A:SP$ ChangeZone | Cost$ 2 U Sac<1/Artifact> | Origin$ Library | Destination$ Battlefield | ChangeType$ Artifact | ChangeNum$ 1 | SpellDescription$ Search your library for an artifact card, put that card onto the battlefield, then shuffle. AI:RemoveDeck:Random -SVar:AIPreference:SacCost$Artifact.token,Artifact.cmcEQ0+nonLegendary+notnamedMox Pearl+notnamedMox Sapphire+notnamedMox Ruby+notnamedMox Emerald+notnamedMox Jet+notnamedBlack Lotus+notnamedLotus Petal,Artifact.cmcEQ1,Artifact.cmcEQ2,Artifact.cmcEQ3 +SVar:AIPreference:SacCost$Artifact.token,Artifact.cmcEQ0+nonLegendary+!namedMox Pearl+!namedMox Sapphire+!namedMox Ruby+!namedMox Emerald+!namedMox Jet+!namedBlack Lotus+!namedLotus Petal,Artifact.cmcEQ1,Artifact.cmcEQ2,Artifact.cmcEQ3 Oracle:As an additional cost to cast this spell, sacrifice an artifact.\nSearch your library for an artifact card, put that card onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/t/tithe_taker.txt b/forge-gui/res/cardsfolder/t/tithe_taker.txt index 1f4f33dae51..f5bccde22da 100644 --- a/forge-gui/res/cardsfolder/t/tithe_taker.txt +++ b/forge-gui/res/cardsfolder/t/tithe_taker.txt @@ -3,6 +3,6 @@ ManaCost:1 W Types:Creature Human Soldier PT:2/1 K:Afterlife:1 -S:Mode$ RaiseCost | ValidCard$ Card | Activator$ Opponent | ValidSpell$ Spell,Activated.nonManaAbility | Amount$ 1 | Condition$ PlayerTurn | Description$ During your turn, spells your opponents cast cost {1} more to cast and abilities your opponents activate cost {1} more to activate unless they're mana abilities. +S:Mode$ RaiseCost | ValidCard$ Card | Activator$ Opponent | ValidSpell$ Spell,Activated.!ManaAbility | Amount$ 1 | Condition$ PlayerTurn | Description$ During your turn, spells your opponents cast cost {1} more to cast and abilities your opponents activate cost {1} more to activate unless they're mana abilities. DeckHas:Ability$Token Oracle:During your turn, spells your opponents cast cost {1} more to cast and abilities your opponents activate cost {1} more to activate unless they're mana abilities.\nAfterlife 1 (When this creature dies, create a 1/1 white and black Spirit creature token with flying.) diff --git a/forge-gui/res/cardsfolder/t/toralf_god_of_fury_toralfs_hammer.txt b/forge-gui/res/cardsfolder/t/toralf_god_of_fury_toralfs_hammer.txt index e4b00532551..37b2bd7c1cf 100644 --- a/forge-gui/res/cardsfolder/t/toralf_god_of_fury_toralfs_hammer.txt +++ b/forge-gui/res/cardsfolder/t/toralf_god_of_fury_toralfs_hammer.txt @@ -4,7 +4,7 @@ Types:Legendary Creature God PT:5/4 K:Trample T:Mode$ ExcessDamage | ValidTarget$ Creature.OppCtrl,Planeswalker.OppCtrl | CombatDamage$ False | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ Whenever a creature or planeswalker an opponent controls is dealt excess noncombat damage, NICKNAME deals damage equal to the excess to any target other than that permanent. -SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Creature.NotTriggeredTarget,Player,Planeswalker.NotTriggeredTarget | TgtPrompt$ Select any target | NumDmg$ X +SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Creature.!TriggeredTarget,Player,Planeswalker.!TriggeredTarget | TgtPrompt$ Select any target | NumDmg$ X SVar:X:TriggerCount$DamageAmount AlternateMode:Modal Oracle:Trample\nWhenever a creature or planeswalker an opponent controls is dealt excess noncombat damage, Toralf deals damage equal to the excess to any target other than that permanent. diff --git a/forge-gui/res/cardsfolder/t/total_war.txt b/forge-gui/res/cardsfolder/t/total_war.txt index 8f02f7cd756..1e3f9e89bb0 100644 --- a/forge-gui/res/cardsfolder/t/total_war.txt +++ b/forge-gui/res/cardsfolder/t/total_war.txt @@ -2,7 +2,7 @@ Name:Total War ManaCost:3 R Types:Enchantment T:Mode$ AttackersDeclared | Execute$ TrigDestroy | TriggerZones$ Battlefield | AttackingPlayer$ Player | TriggerDescription$ Whenever a player attacks with one or more creatures, destroy all untapped non-Wall creatures that player controls that didn't attack, except for creatures the player hasn't controlled continuously since the beginning of the turn. -SVar:TrigDestroy:DB$ DestroyAll | ValidCards$ Creature.nonWall+!firstTurnControlled+untapped+ActivePlayerCtrl+notattacking +SVar:TrigDestroy:DB$ DestroyAll | ValidCards$ Creature.nonWall+!firstTurnControlled+untapped+ActivePlayerCtrl+!attacking AI:RemoveDeck:All AI:RemoveDeck:Random Oracle:Whenever a player attacks with one or more creatures, destroy all untapped non-Wall creatures that player controls that didn't attack, except for creatures the player hasn't controlled continuously since the beginning of the turn. diff --git a/forge-gui/res/cardsfolder/t/tromokratis.txt b/forge-gui/res/cardsfolder/t/tromokratis.txt index 50838ce2c12..a264303dfbc 100644 --- a/forge-gui/res/cardsfolder/t/tromokratis.txt +++ b/forge-gui/res/cardsfolder/t/tromokratis.txt @@ -2,6 +2,6 @@ Name:Tromokratis ManaCost:5 U U Types:Legendary Creature Kraken PT:8/8 -S:Mode$ Continuous | Affected$ Card.Self+notattacking+notblocking | AddKeyword$ Hexproof | Description$ CARDNAME has hexproof unless it's attacking or blocking. +S:Mode$ Continuous | Affected$ Card.Self+!attacking+!blocking | AddKeyword$ Hexproof | Description$ CARDNAME has hexproof unless it's attacking or blocking. S:Mode$ MinMaxBlocker | ValidCard$ Card.Self | Min$ All | Description$ CARDNAME can't be blocked unless all creatures defending player controls block it. (If any creature that player controls doesn't block this creature, it can't be blocked.) Oracle:Tromokratis has hexproof unless it's attacking or blocking.\nTromokratis can't be blocked unless all creatures defending player controls block it. (If any creature that player controls doesn't block this creature, it can't be blocked.) diff --git a/forge-gui/res/cardsfolder/u/unlikely_alliance.txt b/forge-gui/res/cardsfolder/u/unlikely_alliance.txt index c89f5ae5336..b8f376742f7 100644 --- a/forge-gui/res/cardsfolder/u/unlikely_alliance.txt +++ b/forge-gui/res/cardsfolder/u/unlikely_alliance.txt @@ -1,6 +1,6 @@ Name:Unlikely Alliance ManaCost:1 W Types:Enchantment -A:AB$ Pump | Cost$ 1 W | ValidTgts$ Creature.notattacking+notblocking | TgtPrompt$ Select target nonattacking, nonblocking creature | NumDef$ +2 | SpellDescription$ Target nonattacking, nonblocking creature gets +0/+2 until end of turn. +A:AB$ Pump | Cost$ 1 W | ValidTgts$ Creature.!attacking+!blocking | TgtPrompt$ Select target nonattacking, nonblocking creature | NumDef$ +2 | SpellDescription$ Target nonattacking, nonblocking creature gets +0/+2 until end of turn. AI:RemoveDeck:All Oracle:{1}{W}: Target nonattacking, nonblocking creature gets +0/+2 until end of turn. diff --git a/forge-gui/res/cardsfolder/v/valakut_the_molten_pinnacle.txt b/forge-gui/res/cardsfolder/v/valakut_the_molten_pinnacle.txt index 3fae1dd8263..e97d901375a 100644 --- a/forge-gui/res/cardsfolder/v/valakut_the_molten_pinnacle.txt +++ b/forge-gui/res/cardsfolder/v/valakut_the_molten_pinnacle.txt @@ -4,6 +4,6 @@ Types:Land R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementResult$ Updated | ReplaceWith$ ETBTapped | Description$ CARDNAME enters tapped. SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True T:Mode$ ChangesZone | ValidCard$ Mountain.YouCtrl | Origin$ Any | Destination$ Battlefield | Execute$ TrigDamage | IsPresent$ Mountain.YouCtrl | PresentCompare$ GE6 | NoResolvingCheck$ True | TriggerZones$ Battlefield | TriggerDescription$ Whenever a Mountain you control enters, if you control at least five other Mountains, you may have CARDNAME deal 3 damage to any target. -SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Any | NumDmg$ 3 | ConditionPresent$ Mountain.YouCtrl+NotTriggeredCard | ConditionCompare$ GE5 | OptionalDecider$ You +SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Any | NumDmg$ 3 | ConditionPresent$ Mountain.YouCtrl+!TriggeredCard | ConditionCompare$ GE5 | OptionalDecider$ You A:AB$ Mana | Cost$ T | Produced$ R | SpellDescription$ Add {R}. Oracle:Valakut, the Molten Pinnacle enters tapped.\nWhenever a Mountain you control enters, if you control at least five other Mountains, you may have Valakut, the Molten Pinnacle deal 3 damage to any target.\n{T}: Add {R}. diff --git a/forge-gui/res/cardsfolder/v/verrak_warped_sengir.txt b/forge-gui/res/cardsfolder/v/verrak_warped_sengir.txt index 89c4ee547fb..84c4a28a1fc 100644 --- a/forge-gui/res/cardsfolder/v/verrak_warped_sengir.txt +++ b/forge-gui/res/cardsfolder/v/verrak_warped_sengir.txt @@ -5,7 +5,7 @@ PT:2/2 K:Flying K:Deathtouch K:Lifelink -T:Mode$ AbilityCast | ValidActivatingPlayer$ You | ValidSA$ SpellAbility.nonManaAbility | Condition$ LifePaid | TriggerZones$ Battlefield | Execute$ TrigCopySpell | TriggerDescription$ Whenever you activate an ability that isn't a mana ability, if life was paid to activate it, you may pay that much life again. If you do, copy that ability. You may choose new targets for the copy. +T:Mode$ AbilityCast | ValidActivatingPlayer$ You | ValidSA$ SpellAbility.!ManaAbility | Condition$ LifePaid | TriggerZones$ Battlefield | Execute$ TrigCopySpell | TriggerDescription$ Whenever you activate an ability that isn't a mana ability, if life was paid to activate it, you may pay that much life again. If you do, copy that ability. You may choose new targets for the copy. SVar:TrigCopySpell:AB$ CopySpellAbility | Cost$ PayLife | Defined$ TriggeredSpellAbility | MayChooseTarget$ True SVar:X:TriggerCount$LifeAmount Oracle:Flying, deathtouch, lifelink\nWhenever you activate an ability that isn't a mana ability, if life was paid to activate it, you may pay that much life again. If you do, copy that ability. You may choose new targets for the copy. diff --git a/forge-gui/res/cardsfolder/v/vesuva.txt b/forge-gui/res/cardsfolder/v/vesuva.txt index 95dfe9dbf7f..8a73c32230c 100644 --- a/forge-gui/res/cardsfolder/v/vesuva.txt +++ b/forge-gui/res/cardsfolder/v/vesuva.txt @@ -3,5 +3,5 @@ ManaCost:no cost Types:Land K:ETBReplacement:Copy:DBCopy:Optional SVar:DBCopy:DB$ Clone | Choices$ Land.Other | IntoPlayTapped$ True | SpellDescription$ You may have CARDNAME enter tapped as a copy of any land on the battlefield. -SVar:NeedsToPlay:Land.YouDontCtrl+notnamedVesuva,Land.YouCtrl+nonLegendary+notnamedVesuva +SVar:NeedsToPlay:Land.YouDontCtrl+!namedVesuva,Land.YouCtrl+nonLegendary+!namedVesuva Oracle:You may have Vesuva enter tapped as a copy of any land on the battlefield. diff --git a/forge-gui/res/cardsfolder/w/wheel_of_fortune.txt b/forge-gui/res/cardsfolder/w/wheel_of_fortune.txt index 592a3c65c59..dda2fa73ceb 100644 --- a/forge-gui/res/cardsfolder/w/wheel_of_fortune.txt +++ b/forge-gui/res/cardsfolder/w/wheel_of_fortune.txt @@ -4,5 +4,5 @@ Types:Sorcery A:SP$ Discard | Mode$ Hand | Defined$ Player | SubAbility$ DBEachDraw | SpellDescription$ Each player discards their hand, then draws seven cards. SVar:DBEachDraw:DB$ Draw | Defined$ Player | NumCards$ 7 SVar:NeedsToPlayVar:Y LE2 -SVar:Y:Count$ValidHand Card.YouOwn+notnamedWheel of Fortune +SVar:Y:Count$ValidHand Card.YouOwn+!namedWheel of Fortune Oracle:Each player discards their hand, then draws seven cards. diff --git a/forge-gui/res/cardsfolder/w/wizened_mentor.txt b/forge-gui/res/cardsfolder/w/wizened_mentor.txt index c159c94a484..2ed3cf369e0 100644 --- a/forge-gui/res/cardsfolder/w/wizened_mentor.txt +++ b/forge-gui/res/cardsfolder/w/wizened_mentor.txt @@ -2,6 +2,6 @@ Name:Wizened Mentor ManaCost:1 W Types:Creature Zombie Cleric PT:2/2 -T:Mode$ AbilityCast | ValidActivatingPlayer$ Opponent | ValidSA$ Activated.nonManaAbility | ActivationLimit$ 1 | TriggerZones$ Battlefield | ValidCard$ Permanent.inZoneBattlefield | Execute$ TrigToken | TriggerDescription$ Whenever an opponent activates an ability of a permanent that isn't a mana ability, you create a 1/1 white Zombie creature token. This ability triggers only once each turn. +T:Mode$ AbilityCast | ValidActivatingPlayer$ Opponent | ValidSA$ Activated.!ManaAbility | ActivationLimit$ 1 | TriggerZones$ Battlefield | ValidCard$ Permanent.inZoneBattlefield | Execute$ TrigToken | TriggerDescription$ Whenever an opponent activates an ability of a permanent that isn't a mana ability, you create a 1/1 white Zombie creature token. This ability triggers only once each turn. SVar:TrigToken:DB$ Token | TokenScript$ w_1_1_zombie Oracle:Whenever an opponent activates an ability of a permanent that isn't a mana ability, you create a 1/1 white Zombie creature token. This ability triggers only once each turn. diff --git a/forge-gui/res/cardsfolder/z/zirda_the_dawnwaker.txt b/forge-gui/res/cardsfolder/z/zirda_the_dawnwaker.txt index 3919feeb886..71af28fe384 100644 --- a/forge-gui/res/cardsfolder/z/zirda_the_dawnwaker.txt +++ b/forge-gui/res/cardsfolder/z/zirda_the_dawnwaker.txt @@ -3,6 +3,6 @@ ManaCost:1 RW RW Types:Legendary Creature Elemental Fox PT:3/3 K:Companion:Permanent.hasAbility Activated,Instant,Sorcery:Each permanent card in your starting deck has an activated ability. -S:Mode$ ReduceCost | ValidCard$ Card | Activator$ You | ValidSpell$ Activated.nonManaAbility | Amount$ 2 | MinMana$ 1 | Description$ Abilities you activate that aren't mana abilities cost {2} less to activate. This effect can't reduce the mana in that cost to less than one mana. +S:Mode$ ReduceCost | ValidCard$ Card | Activator$ You | ValidSpell$ Activated.!ManaAbility | Amount$ 2 | MinMana$ 1 | Description$ Abilities you activate that aren't mana abilities cost {2} less to activate. This effect can't reduce the mana in that cost to less than one mana. A:AB$ Pump | Cost$ 1 T | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ HIDDEN CARDNAME can't block. | IsCurse$ True | SpellDescription$ Target creature can't block this turn. Oracle:Companion — Each permanent card in your starting deck has an activated ability. (If this card is your chosen companion, you may put it into your hand from outside the game for {3} any time you could cast a sorcery.)\nAbilities you activate that aren't mana abilities cost {2} less to activate. This effect can't reduce the mana in that cost to less than one mana.\n{1}, {T}: Target creature can't block this turn. diff --git a/forge-gui/src/main/java/forge/gui/card/CardScriptParser.java b/forge-gui/src/main/java/forge/gui/card/CardScriptParser.java index 6f80e3165b9..9a4eadd99df 100644 --- a/forge-gui/src/main/java/forge/gui/card/CardScriptParser.java +++ b/forge-gui/src/main/java/forge/gui/card/CardScriptParser.java @@ -469,11 +469,11 @@ public final class CardScriptParser { "leastPower", "leastToughness", "greatestCMC", "greatestRememberedCMC", "lowestRememberedCMC", "lowestCMC", "enchanted", "enchanting", "equipped", - "equipping", "modified", "token", "nonToken", "hasXCost", "suspended", - "delved", "attacking", "attackingYou", "notattacking", + "equipping", "modified", "token", "hasXCost", "suspended", + "delved", "attacking", "attackingYou", "attackedBySourceThisCombat", "blocking", "blockingSource", "blockingCreatureYouCtrl", "blockingRemembered", - "sharesBlockingAssignmentWith", "notblocking", "blocked", + "sharesBlockingAssignmentWith", "blocked", "blockedBySource", "blockedThisTurn", "blockedByThisTurn", "blockedBySourceThisTurn", "isBlockedByRemembered", "blockedRemembered", "blockedByRemembered", "unblocked", "attackersBandedWith", @@ -485,7 +485,7 @@ public final class CardScriptParser { "wasNotCast", "ChosenType", "IsNotChosenType", "IsCommander", "IsRenowned"); private static final Set VALID_EXCLUSIVE_STARTSWITH = ImmutableSortedSet - .of("named", "notnamed", "OwnedBy", "ControlledBy", + .of("named", "OwnedBy", "ControlledBy", "ControllerControls", "AttachedTo", "EnchantedBy", "TopGraveyard", "SharesColorWith", "MostProminentColor", "notSharesColorWith", From 8dc9a18c4ffe45316fb122a6967b7142b52b3f22 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Mon, 29 Sep 2025 16:31:21 +0200 Subject: [PATCH 266/355] Card: addColor use internal Record (#8793) --- .../ability/effects/AnimateEffectBase.java | 2 +- .../src/main/java/forge/game/card/Card.java | 38 ++++++++-------- .../main/java/forge/game/card/CardColor.java | 45 ------------------- .../main/java/forge/game/card/CardView.java | 2 +- .../game/card/perpetual/PerpetualColors.java | 2 +- .../card/perpetual/PerpetualIncorporate.java | 2 +- .../StaticAbilityContinuous.java | 4 +- 7 files changed, 24 insertions(+), 71 deletions(-) delete mode 100644 forge-game/src/main/java/forge/game/card/CardColor.java diff --git a/forge-game/src/main/java/forge/game/ability/effects/AnimateEffectBase.java b/forge-game/src/main/java/forge/game/ability/effects/AnimateEffectBase.java index 561d2978d5b..efdfb6b197e 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/AnimateEffectBase.java +++ b/forge-game/src/main/java/forge/game/ability/effects/AnimateEffectBase.java @@ -138,7 +138,7 @@ public abstract class AnimateEffectBase extends SpellAbilityEffect { if (perpetual) { c.addPerpetual(new PerpetualColors(timestamp, colors, overwrite)); } - c.addColor(colors, !overwrite, timestamp, 0, false); + c.addColor(colors, !overwrite, timestamp, null); } if (sa.hasParam("LeaveBattlefield")) { diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 35acfe1de7a..5033e19a81b 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -449,7 +449,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr public final void updateColorForView() { currentState.getView().updateColors(this); - currentState.getView().updateHasChangeColors(!Iterables.isEmpty(getChangedCardColors())); + currentState.getView().updateHasChangeColors(hasChangedCardColors()); } public void updateAttackingForView() { @@ -4291,18 +4291,10 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr } public boolean clearChangedCardColors() { - boolean changed = false; + boolean changed = hasChangedCardColors(); - if (!changedCardColorsByText.isEmpty()) - changed = true; changedCardColorsByText.clear(); - - if (!changedCardTypesCharacterDefining.isEmpty()) - changed = true; changedCardTypesCharacterDefining.clear(); - - if (!changedCardColors.isEmpty()) - changed = true; changedCardColors.clear(); return changed; @@ -4388,17 +4380,19 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr } } - public Iterable getChangedCardColors() { - return Iterables.concat(changedCardColorsByText.values(), changedCardColorsCharacterDefining.values(), changedCardColors.values()); + public boolean hasChangedCardColors() { + return !changedCardColorsByText.isEmpty() || !changedCardColorsCharacterDefining.isEmpty() || !changedCardColors.isEmpty(); } - public void addColorByText(final ColorSet color, final long timestamp, final long staticId) { - changedCardColorsByText.put(timestamp, staticId, new CardColor(color, false)); + public void addColorByText(final ColorSet color, final long timestamp, final StaticAbility stAb) { + changedCardColorsByText.put(timestamp, (long)stAb.getId(), new CardColor(color, false)); updateColorForView(); } - public final void addColor(final ColorSet color, final boolean addToColors, final long timestamp, final long staticId, final boolean cda) { - (cda ? changedCardColorsCharacterDefining : changedCardColors).put(timestamp, staticId, new CardColor(color, addToColors)); + public final void addColor(final ColorSet color, final boolean addToColors, final long timestamp, final StaticAbility stAb) { + (stAb != null && stAb.isCharacteristicDefining() ? changedCardColorsCharacterDefining : changedCardColors).put( + timestamp, stAb != null ? stAb.getId() : (long)0, new CardColor(color, addToColors) + ); updateColorForView(); } @@ -4425,16 +4419,20 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr } public final ColorSet getColor(CardState state) { byte colors = state.getColor(); - for (final CardColor cc : getChangedCardColors()) { - if (cc.isAdditional()) { - colors |= cc.getColorMask(); + for (final CardColor cc : Iterables.concat(changedCardColorsByText.values(), changedCardColorsCharacterDefining.values(), changedCardColors.values())) { + if (cc.additional()) { + colors |= cc.color().getColor(); } else { - colors = cc.getColorMask(); + colors = cc.color().getColor(); } } return ColorSet.fromMask(colors); } + private record CardColor(ColorSet color, boolean additional) { + + } + public final int getCurrentLoyalty() { return getCounters(CounterEnumType.LOYALTY); } diff --git a/forge-game/src/main/java/forge/game/card/CardColor.java b/forge-game/src/main/java/forge/game/card/CardColor.java deleted file mode 100644 index c37460a4128..00000000000 --- a/forge-game/src/main/java/forge/game/card/CardColor.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Forge: Play Magic: the Gathering. - * Copyright (C) 2011 Forge Team - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package forge.game.card; - -import forge.card.ColorSet; - -/** - *

    - * Card_Color class. - *

    - * - * @author Forge - * @version $Id$ - */ -public class CardColor { - private final byte colorMask; - public final byte getColorMask() { - return colorMask; - } - - private final boolean additional; - public final boolean isAdditional() { - return this.additional; - } - - CardColor(final ColorSet colors, final boolean addToColors) { - this.colorMask = colors.getColor(); - this.additional = addToColors; - } -} diff --git a/forge-game/src/main/java/forge/game/card/CardView.java b/forge-game/src/main/java/forge/game/card/CardView.java index 52fbf98b263..773b82204aa 100644 --- a/forge-game/src/main/java/forge/game/card/CardView.java +++ b/forge-game/src/main/java/forge/game/card/CardView.java @@ -1095,7 +1095,7 @@ public class CardView extends GameEntityView { if (c.getGame() != null) { if (c.hasPerpetual()) currentStateView.updateColors(c); else currentStateView.updateColors(currentState); - currentStateView.updateHasChangeColors(!Iterables.isEmpty(c.getChangedCardColors())); + currentStateView.updateHasChangeColors(c.hasChangedCardColors()); } } else { currentStateView.updateLoyalty(currentState); diff --git a/forge-game/src/main/java/forge/game/card/perpetual/PerpetualColors.java b/forge-game/src/main/java/forge/game/card/perpetual/PerpetualColors.java index ecdf4f287cb..20c999c65c5 100644 --- a/forge-game/src/main/java/forge/game/card/perpetual/PerpetualColors.java +++ b/forge-game/src/main/java/forge/game/card/perpetual/PerpetualColors.java @@ -12,7 +12,7 @@ public record PerpetualColors(long timestamp, ColorSet colors, boolean overwrite @Override public void applyEffect(Card c) { - c.addColor(colors, !overwrite, timestamp, (long) 0, false); + c.addColor(colors, !overwrite, timestamp, null); } } diff --git a/forge-game/src/main/java/forge/game/card/perpetual/PerpetualIncorporate.java b/forge-game/src/main/java/forge/game/card/perpetual/PerpetualIncorporate.java index 0b647fe1f5d..386b7c2c588 100644 --- a/forge-game/src/main/java/forge/game/card/perpetual/PerpetualIncorporate.java +++ b/forge-game/src/main/java/forge/game/card/perpetual/PerpetualIncorporate.java @@ -17,7 +17,7 @@ public record PerpetualIncorporate(long timestamp, ManaCost incorporate) impleme ColorSet colors = ColorSet.fromMask(incorporate.getColorProfile()); final ManaCost newCost = ManaCost.combine(c.getManaCost(), incorporate); c.addChangedManaCost(newCost, timestamp, (long) 0); - c.addColor(colors, true, timestamp, (long) 0, false); + c.addColor(colors, true, timestamp, null); c.updateManaCostForView(); if (c.getFirstSpellAbility() != null) { diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java index 64c755f6810..e53361d4ce8 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java @@ -623,7 +623,7 @@ public final class StaticAbilityContinuous { // Mana cost affectedCard.addChangedManaCost(state.getManaCost(), se.getTimestamp(), stAb.getId()); // color - affectedCard.addColorByText(ColorSet.fromMask(state.getColor()), se.getTimestamp(), stAb.getId()); + affectedCard.addColorByText(ColorSet.fromMask(state.getColor()), se.getTimestamp(), stAb); // type affectedCard.addChangedCardTypesByText(new CardType(state.getType()), se.getTimestamp(), stAb.getId()); // abilities @@ -856,7 +856,7 @@ public final class StaticAbilityContinuous { // add colors if (addColors != null) { - affectedCard.addColor(addColors, !overwriteColors, se.getTimestamp(), stAb.getId(), stAb.isCharacteristicDefining()); + affectedCard.addColor(addColors, !overwriteColors, se.getTimestamp(), stAb); } if (layer == StaticAbilityLayer.RULES) { From 74dc09b2e521681c5bfe65ad491ca1625d1ca8c5 Mon Sep 17 00:00:00 2001 From: Fulgur14 <54345051+Fulgur14@users.noreply.github.com> Date: Mon, 29 Sep 2025 20:07:43 +0200 Subject: [PATCH 267/355] 12 FIC Scene cards + Formidable Speaker (#8808) --- .../game/trigger/TriggerAttackerBlocked.java | 13 +++++++++++-- forge-gui/res/cardsfolder/s/soul_shredder.txt | 2 +- .../cardsfolder/upcoming/formidable_speaker.txt | 8 ++++++++ .../res/cardsfolder/upcoming/mega_flare.txt | 10 ++++++++++ .../upcoming/noctis_heir_apparent.txt | 14 ++++++++++++++ .../cardsfolder/upcoming/rinoa_angel_wing.txt | 9 +++++++++ .../cardsfolder/upcoming/search_for_dagger.txt | 7 +++++++ .../upcoming/seifer_balamb_rival.txt | 11 +++++++++++ .../upcoming/squall_gunblade_duelist.txt | 12 ++++++++++++ .../upcoming/the_destined_black_mage.txt | 14 ++++++++++++++ .../cardsfolder/upcoming/the_destined_thief.txt | 17 +++++++++++++++++ .../upcoming/the_destined_warrior.txt | 16 ++++++++++++++++ .../upcoming/the_destined_white_mage.txt | 14 ++++++++++++++ .../cardsfolder/upcoming/vivis_persistence.txt | 9 +++++++++ .../cardsfolder/upcoming/warriors_resolve.txt | 8 ++++++++ 15 files changed, 161 insertions(+), 3 deletions(-) create mode 100644 forge-gui/res/cardsfolder/upcoming/formidable_speaker.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/mega_flare.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/noctis_heir_apparent.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/rinoa_angel_wing.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/search_for_dagger.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/seifer_balamb_rival.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/squall_gunblade_duelist.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/the_destined_black_mage.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/the_destined_thief.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/the_destined_warrior.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/the_destined_white_mage.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/vivis_persistence.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/warriors_resolve.txt diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerAttackerBlocked.java b/forge-game/src/main/java/forge/game/trigger/TriggerAttackerBlocked.java index 23fa0b0b5b3..676283cfffd 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerAttackerBlocked.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerAttackerBlocked.java @@ -21,8 +21,12 @@ import java.util.Map; import com.google.common.collect.Iterables; import forge.game.ability.AbilityKey; +import forge.game.ability.AbilityUtils; import forge.game.card.Card; +import forge.game.card.CardCollection; +import forge.game.card.CardLists; import forge.game.spellability.SpellAbility; +import forge.util.Expressions; import forge.util.Localizer; /** @@ -59,8 +63,13 @@ public class TriggerAttackerBlocked extends Trigger { return false; } - if (!matchesValidParam("ValidBlocker", runParams.get(AbilityKey.Blockers))) { - return false; + if (hasParam("ValidBlocker")) { + String param = getParamOrDefault("ValidBlockerAmount", "GE1"); + int attackers = CardLists.getValidCardCount((CardCollection) runParams.get(AbilityKey.Blockers), getParam("ValidBlocker"), getHostCard().getController(), getHostCard(), this); + int amount = AbilityUtils.calculateAmount(getHostCard(), param.substring(2), this); + if (!Expressions.compare(attackers, param, amount)) { + return false; + } } return true; diff --git a/forge-gui/res/cardsfolder/s/soul_shredder.txt b/forge-gui/res/cardsfolder/s/soul_shredder.txt index 2f4d2c10369..ecdf073e8f8 100644 --- a/forge-gui/res/cardsfolder/s/soul_shredder.txt +++ b/forge-gui/res/cardsfolder/s/soul_shredder.txt @@ -7,4 +7,4 @@ K:Crew:1 T:Mode$ ChangesZoneAll | TriggerZones$ Battlefield,Graveyard | ValidCards$ Creature.Other | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigPump | TriggerDescription$ Whenever one or more other creatures die, CARDNAME perpetually gets +1/+1. This ability also triggers if CARDNAME is in your graveyard. SVar:TrigPump:DB$ Pump | Defined$ Self | NumAtt$ +1 | NumDef$ +1 | Duration$ Perpetual A:AB$ ChangeZone | Cost$ 1 Sac<2/Creature> | Origin$ Graveyard | Destination$ Battlefield | ActivationZone$ Graveyard | SorcerySpeed$ True | SpellDescription$ Return CARDNAME from your graveyard to the battlefield. -Oracle:Haste\nWhenever one or more other creatures die, Soul Shredder perpetually gets +1/+1. This ability also triggers if Sould Shredder is in your graveyard.\nCrew 1\n{1}, Sacrifice two creatures: Return Soul Shredder from your graveyard to the battlefield. Activate only as a sorcery. +Oracle:Haste\nWhenever one or more other creatures die, Soul Shredder perpetually gets +1/+1. This ability also triggers if Soul Shredder is in your graveyard.\nCrew 1\n{1}, Sacrifice two creatures: Return Soul Shredder from your graveyard to the battlefield. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/upcoming/formidable_speaker.txt b/forge-gui/res/cardsfolder/upcoming/formidable_speaker.txt new file mode 100644 index 00000000000..c929e42c203 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/formidable_speaker.txt @@ -0,0 +1,8 @@ +Name:Formidable Speaker +ManaCost:2 G +Types:Creature Elf Druid +PT:2/4 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSearch | TriggerDescription$ When this creature enters, you may discard a card. If you do, search your library for a creature card, reveal it, put it into your hand, then shuffle. +SVar:TrigSearch:AB$ ChangeZone | Cost$ Discard<1/Card> | Origin$ Library | Destination$ Hand | ChangeType$ Creature | ChangeNum$ 1 +A:AB$ Untap | Cost$ 1 T | ValidTgts$ Permanent.Other | TgtPrompt$ Select another target permanent. | SpellDescription$ Untap another target permanent. +Oracle:When this creature enters, you may discard a card. If you do, search your library for a creature card, reveal it, put it into your hand, then shuffle.\n{1}, {T}: Untap another target permanent. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/mega_flare.txt b/forge-gui/res/cardsfolder/upcoming/mega_flare.txt new file mode 100644 index 00000000000..01f128f6e89 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/mega_flare.txt @@ -0,0 +1,10 @@ +Name:Mega Flare +ManaCost:2 R +Types:Sorcery +K:Kicker:3 R R +A:SP$ Token | Condition$ Kicked | TokenScript$ r_6_6_dragon_flying | SubAbility$ DBDamage | SpellDescription$ If this spell was kicked, create a 6/6 red Dragon creature token with flying. For each opponent, choose up to one target creature that player controls. CARDNAME deals damage equal to the greatest power among creatures you control to each of the chosen creatures. +SVar:DBDamage:DB$ DealDamage | ValidTgts$ Creature.OppCtrl | TgtPrompt$ For each opponent, choose up to one target creature that player controls | TargetMin$ 0 | TargetMax$ OneEach | TargetsForEachPlayer$ True | NumDmg$ X +SVar:X:Count$Valid Creature.YouCtrl$GreatestPower +SVar:OneEach:PlayerCountOpponents$Amount +DeckHas:Ability$Token +Oracle:Kicker {3}{R}{R}\nIf this spell was kicked, create a 6/6 red Dragon creature token with flying.\nFor each opponent, choose up to one target creature that player controls. Mega Flare deals damage equal to the greatest power among creatures you control to each of the chosen creatures. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/noctis_heir_apparent.txt b/forge-gui/res/cardsfolder/upcoming/noctis_heir_apparent.txt new file mode 100644 index 00000000000..d3605fb39c6 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/noctis_heir_apparent.txt @@ -0,0 +1,14 @@ +Name:Noctis, Heir Apparent +ManaCost:W U B +Types:Legendary Creature Human Noble +PT:2/3 +T:Mode$ ChangesZone | Phase$ BeginCombat->EndCombat | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.YouCtrl | Execute$ EquipmentSelection | OptionalDecider$ You | TriggerDescription$ Whenever a creature you control enters during combat, you may attach target Equipment you control to target creature you control. +SVar:EquipmentSelection:DB$ Pump | ValidTgts$ Equipment.YouCtrl | TgtPrompt$ Select target equipment you control | SubAbility$ DBAttach | StackDescription$ None +SVar:DBAttach:DB$ Attach | Object$ ParentTarget | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control. +A:AB$ ChangeZone | PrecostDesc$ Warp-Strike — | Cost$ 3 | Defined$ Self | Origin$ Battlefield | Destination$ Exile | SubAbility$ DelTrig | RememberChanged$ True | SpellDescription$ Exile NICKNAME. Return it to the battlefield under its owner's control tapped and attacking at the beginning of that player's next declare attackers step. It can't be blocked that combat. +SVar:DelTrig:DB$ DelayedTrigger | Mode$ Phase | ValidPlayer$ Player.CardOwner | Phase$ Declare Attackers | Execute$ TrigReturn | ConditionDefined$ Remembered | ConditionPresent$ Card | RememberObjects$ Remembered | SubAbility$ DBCleanup | TriggerDescription$ Return NICKNAME to the battlefield under its owner's control tapped and attacking at the beginning of that player's next declare attackers step. It can't be blocked that combat. +SVar:TrigReturn:DB$ ChangeZone | Defined$ DelayTriggerRememberedLKI | Origin$ Exile | Destination$ Battlefield | Tapped$ True | Attacking$ True | RememberChanged$ True | SubAbility$ DBEffect +SVar:DBEffect:DB$ Effect | RememberObjects$ RememberedLKI | StaticAbilities$ STUnblockable | Duration$ UntilEndOfCombat | ExileOnMoved$ Battlefield | SubAbility$ DBCleanup +SVar:STUnblockable:Mode$ CantBlockBy | ValidAttacker$ Card.IsRemembered | Description$ EFFECTSOURCE can't be blocked this combat. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +Oracle:Whenever a creature you control enters during combat, you may attach target Equipment you control to target creature you control.\nWarp-Strike — {3}: Exile Noctis. Return it to the battlefield under its owner's control tapped and attacking at the beginning of that player's next declare attackers step. It can't be blocked that combat. diff --git a/forge-gui/res/cardsfolder/upcoming/rinoa_angel_wing.txt b/forge-gui/res/cardsfolder/upcoming/rinoa_angel_wing.txt new file mode 100644 index 00000000000..c36355c5c03 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/rinoa_angel_wing.txt @@ -0,0 +1,9 @@ +Name:Rinoa, Angel Wing +ManaCost:2 W +Types:Legendary Creature Human Rebel Warlock +PT:2/4 +T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPumpAll | TriggerDescription$ At the beginning of combat on your turn, creatures you control with flying get +1/+1 and gain vigilance until end of turn. +SVar:TrigPumpAll:DB$ PumpAll | ValidCards$ Creature.YouCtrl+withFlying | NumAtt$ +1 | NumDef$ +1 | KW$ Vigilance +T:Mode$ ChangesZoneAll | ValidCards$ Creature.attacking+YouCtrl | Origin$ Battlefield | Destination$ Graveyard | TriggerZones$ Battlefield | OptionalDecider$ You | ResolvedLimit$ 1 | Execute$ TrigChangeZone | TriggerDescription$ Whenever one or more attacking creatures you control die, you may return one of them to the battlefield tapped under its owner's control with a flying counter on it. Do this only once each turn. +SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | ChangeNum$ 1 | Destination$ Battlefield | Hidden$ True | Tapped$ True | ChooseFromDefined$ TriggeredCards | Mandatory$ True | WithCountersType$ Flying +Oracle:At the beginning of combat on your turn, creatures you control with flying get +1/+1 and gain vigilance until end of turn.\nWhenever one or more attacking creatures you control die, you may return one of them to the battlefield tapped under its owner's control with a flying counter on it. Do this only once each turn. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/search_for_dagger.txt b/forge-gui/res/cardsfolder/upcoming/search_for_dagger.txt new file mode 100644 index 00000000000..63722e79fc8 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/search_for_dagger.txt @@ -0,0 +1,7 @@ +Name:Search for Dagger +ManaCost:1 W +Types:Enchantment +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.IsCommander+YouOwn | Execute$ TrigDig | TriggerZones$ Battlefield | TriggerDescription$ Whenever your commander enters or attacks, look at the top six cards of your library. You may reveal a legendary creature card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. +T:Mode$ Attacks | ValidCard$ Card.IsCommander+YouOwn | Execute$ TrigDig | TriggerZones$ Battlefield | Secondary$ True | TriggerDescription$ Whenever your commander enters or attacks, look at the top six cards of your library. You may reveal a legendary creature card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. +SVar:TrigDig:DB$ Dig | DigNum$ 6 | ChangeNum$ 1 | Optional$ True | ForceRevealToController$ True | ChangeValid$ Creature.Legendary | RestRandomOrder$ True +Oracle:Whenever your commander enters or attacks, look at the top six cards of your library. You may reveal a legendary creature card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/seifer_balamb_rival.txt b/forge-gui/res/cardsfolder/upcoming/seifer_balamb_rival.txt new file mode 100644 index 00000000000..782ee963b4a --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/seifer_balamb_rival.txt @@ -0,0 +1,11 @@ +Name:Seifer, Balamb Rival +ManaCost:2 B R +Types:Legendary Creature Human Mercenary +PT:4/3 +K:First Strike +T:Mode$ AttackersDeclaredOneTarget | AttackedTarget$ Player | ValidAttackers$ Creature.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigGoad | TriggerDescription$ Whenever you attack a player, goad target creature that player controls. +SVar:TrigGoad:DB$ Goad | ValidTgts$ Creature | TargetsWithDefinedController$ TriggeredAttackedTarget | TgtPrompt$ Select target creature that player controls +T:Mode$ AttackerBlocked | ValidCard$ Creature.attacking Opponent | ValidBlocker$ Creature | Execute$ TrigPump | ValidBlockerAmount$ GE2 | TriggerDescription$ Whenever a creature attacking one of your opponents becomes blocked by two or more creatures, that attacking creature gains deathtouch until end of turn. +SVar:TrigPump:DB$ Pump | Defined$ TriggeredAttacker | KW$ Deathtouch +SVar:PlayMain1:TRUE +Oracle:First strike\nWhenever you attack a player, goad target creature that player controls.\nWhenever a creature attacking one of your opponents becomes blocked by two or more creatures, that attacking creature gains deathtouch until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/squall_gunblade_duelist.txt b/forge-gui/res/cardsfolder/upcoming/squall_gunblade_duelist.txt new file mode 100644 index 00000000000..2a310097f3a --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/squall_gunblade_duelist.txt @@ -0,0 +1,12 @@ +Name:Squall, Gunblade Duelist +ManaCost:R W B +Types:Legendary Creature Human Mercenary +PT:3/2 +K:First Strike +K:ETBReplacement:Other:ChooseNumber +SVar:ChooseNumber:DB$ ChooseNumber | Defined$ You | SpellDescription$ As NICKNAME enters, choose a number. +T:Mode$ AttackersDeclaredOneTarget | AttackedTarget$ Opponent | ValidAttackers$ Creature.powerEQChosen,Creature.toughnessEQChosen | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ Whenever one or more creatures attack one of your opponents, if any of those creatures have power or toughness equal to the chosen number, NICKNAME deals damage equal to its power to defending player. +SVar:TrigDealDamage:DB$ DealDamage | Defined$ TriggeredAttackedTarget | NumDmg$ X | ConditionCheckSVar$ Y | ConditionSVarCompare$ GE1 +SVar:X:Count$CardPower +SVar:Y:Count$Valid Creature.TriggeredAttackers+powerEQChosen,Creature.TriggeredAttackers+toughnessEQChosen +Oracle:First strike\nAs Squall enters, choose a number.\nWhenever one or more creatures attack one of your opponents, if any of those creatures have power or toughness equal to the chosen number, Squall deals damage equal to its power to defending player. diff --git a/forge-gui/res/cardsfolder/upcoming/the_destined_black_mage.txt b/forge-gui/res/cardsfolder/upcoming/the_destined_black_mage.txt new file mode 100644 index 00000000000..ac77619e6f1 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/the_destined_black_mage.txt @@ -0,0 +1,14 @@ +Name:The Destined Black Mage +ManaCost:2 B +Types:Legendary Creature Human Wizard +PT:3/2 +K:Deathtouch +A:AB$ Pump | Cost$ B T | ValidTgts$ Creature.Other+YouCtrl | TgtPrompt$ Select another target creature you control | KW$ Deathtouch | SpellDescription$ Another target creature you control gains deathtouch until end of turn. +T:Mode$ SpellCast | ValidCard$ Card.nonCreature | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ Whenever you cast a noncreature spell, CARDNAME deals 1 damage to each opponent. If you have a full party, it deals 3 damage to each opponent instead. +SVar:TrigDamage:DB$ DealDamage | Defined$ Player.Opponent | NumDmg$ X +SVar:X:Count$Compare Y EQ4.3.1 +SVar:Y:Count$Party +SVar:BuffedBy:Cleric,Rogue,Warrior +DeckHas:Ability$Party +DeckHints:Type$Cleric|Rogue|Warrior +Oracle:Deathtouch\n{B}, {T}: Another target creature you control gains deathtouch until end of turn.\nWhenever you cast a noncreature spell, The Destined Black Mage deals 1 damage to each opponent. If you have a full party, it deals 3 damage to each opponent instead. diff --git a/forge-gui/res/cardsfolder/upcoming/the_destined_thief.txt b/forge-gui/res/cardsfolder/upcoming/the_destined_thief.txt new file mode 100644 index 00000000000..0aafcd628ac --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/the_destined_thief.txt @@ -0,0 +1,17 @@ +Name:The Destined Thief +ManaCost:2 U +Types:Legendary Creature Human Rogue +PT:2/2 +S:Mode$ CantBlockBy | ValidAttacker$ Creature.Self | Description$ CARDNAME can't be blocked. +A:AB$ Effect | Cost$ U T | ValidTgts$ Creature.Other+YouCtrl | TgtPrompt$ Select another target creature you control | RememberObjects$ Targeted | ExileOnMoved$ Battlefield | StaticAbilities$ Unblockable | AILogic$ Pump | StackDescription$ {c:Targeted} can't be blocked this turn. | SpellDescription$ Another target creature you control can't be blocked this turn. +SVar:Unblockable:Mode$ CantBlockBy | ValidAttacker$ Card.IsRemembered | Description$ This creature can't be blocked this turn. +T:Mode$ DamageAll | CombatDamage$ True | ValidSource$ Creature.YouCtrl | ValidTarget$ Player | TriggerZones$ Battlefield | Execute$ TrigBranch | TriggerDescription$ Whenever one or more creatures you control deal combat damage to one or more players, draw a card, then discard a card. If you have a full party, instead draw three cards. +SVar:TrigBranch:DB$ Branch | BranchConditionSVar$ X | BranchConditionSVarCompare$EQ4 | TrueSubAbility$ DBDraw1 | FalseSubAbility$ DBDraw2 +SVar:TrigDraw1:DB$ Draw | NumCards$ 3 +SVar:TrigDraw2:DB$ Draw | SubAbility$ DBDiscard +SVar:DBDiscard:DB$ Discard | Defined$ You | Mode$ TgtChoose | NumCards$ 1 +SVar:X:Count$Party +SVar:BuffedBy:Cleric,Warrior,Wizard +DeckHas:Ability$Party +DeckHints:Type$Cleric|Warrior|Wizard +Oracle:The Destined Thief can't be blocked.\n{U}, {T}: Another target creature you control can't be blocked this turn.\nWhenever one or more creatures you control deal combat damage to one or more players, draw a card, then discard a card. If you have a full party, instead draw three cards. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/the_destined_warrior.txt b/forge-gui/res/cardsfolder/upcoming/the_destined_warrior.txt new file mode 100644 index 00000000000..8c9cf62f330 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/the_destined_warrior.txt @@ -0,0 +1,16 @@ +Name:The Destined Warrior +ManaCost:1 W U B +Types:Legendary Creature Human Warrior +PT:3/3 +K:First Strike +K:Vigilance +K:Menace +S:Mode$ ReduceCost | ValidCard$ Cleric,Rogue,Warrior,Wizard | Type$ Spell | Activator$ You | Amount$ 1 | Description$ Cleric, Rogue, Warrior, and Wizard spells you cast cost {1} less to cast. +T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPumpAll | TriggerDescription$ At the beginning of combat on your turn, creatures you control get +1/+0 until end of turn. If you have a full party, creatures you control get +3/+0 until end of turn instead. +SVar:TrigPumpAll:DB$ PumpAll | ValidCards$ Creature.YouCtrl | NumAtt$ +X +SVar:X:Count$Compare Y EQ4.3.1 +SVar:Y:Count$Party +SVar:BuffedBy:Cleric,Rogue,Wizard +DeckHas:Ability$Party +DeckHints:Type$Cleric|Rogue|Warrior|Wizard +Oracle:First strike, vigilance, menace\nCleric, Rogue, Warrior, and Wizard spells you cast cost {1} less to cast.\nAt the beginning of combat on your turn, creatures you control get +1/+0 until end of turn. If you have a full party, creatures you control get +3/+0 until end of turn instead. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/the_destined_white_mage.txt b/forge-gui/res/cardsfolder/upcoming/the_destined_white_mage.txt new file mode 100644 index 00000000000..5621c7503dc --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/the_destined_white_mage.txt @@ -0,0 +1,14 @@ +Name:The Destined White Mage +ManaCost:2 W +Types:Legendary Creature Human Cleric +PT:2/3 +K:Lifelink +A:AB$ Pump | Cost$ W T | ValidTgts$ Creature.Other+YouCtrl | TgtPrompt$ Select another target creature you control | KW$ Lifelink | SpellDescription$ Another target creature you control gains lifelink until end of turn. +T:Mode$ LifeGained | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever you gain life, put a +1/+1 counter on target creature you control. If you have a full party, put three +1/+1 counters on that creature instead. +SVar:TrigPutCounter:DB$ PutCounter | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | CounterType$ P1P1 | CounterNum$ X +SVar:X:Count$Compare Y EQ4.3.1 +SVar:Y:Count$Party +SVar:BuffedBy:Rogue,Warrior,Wizard +DeckHas:Ability$Party +DeckHints:Type$Rogue|Warrior|Wizard +Oracle:Lifelink\n{W}, {T}: Another target creature you control gains lifelink until end of turn.\nWhenever you gain life, put a +1/+1 counter on target creature you control. If you have a full party, put three +1/+1 counters on that creature instead. diff --git a/forge-gui/res/cardsfolder/upcoming/vivis_persistence.txt b/forge-gui/res/cardsfolder/upcoming/vivis_persistence.txt new file mode 100644 index 00000000000..f0ba1f67b23 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/vivis_persistence.txt @@ -0,0 +1,9 @@ +Name:Vivi's Persistence +ManaCost:1 R +Types:Instant +A:SP$ Token | TokenScript$ b_0_1_wizard_snipe | TokenAmount$ 1 | TokenOwner$ You | SpellDescription$ Create a 0/1 black Wizard creature token with "Whenever you cast a noncreature spell, this token deals 1 damage to each opponent." +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.IsCommander+YouOwn | Execute$ TrigChangeZone | TriggerZones$ Graveyard | TriggerDescription$ Whenever your commander enters or attacks, you may pay {2}. If you do, return this card from your graveyard to your hand. +T:Mode$ Attacks | ValidCard$ Card.IsCommander+YouOwn | Execute$ TrigChangeZone | TriggerZones$ Graveyard | Secondary$ True | TriggerDescription$ Whenever your commander enters or attacks, you may pay {2}. If you do, return this card from your graveyard to your hand. +SVar:TrigChangeZone:AB$ ChangeZone | Cost$ 2 | Defined$ Self | Origin$ Graveyard | Destination$ Hand +DeckHas:Ability$Token +Oracle:Create a 0/1 black Wizard creature token with "Whenever you cast a noncreature spell, this token deals 1 damage to each opponent."\nWhenever your commander enters or attacks, you may pay {2}. If you do, return this card from your graveyard to your hand. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/warriors_resolve.txt b/forge-gui/res/cardsfolder/upcoming/warriors_resolve.txt new file mode 100644 index 00000000000..17b6338b4e6 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/warriors_resolve.txt @@ -0,0 +1,8 @@ +Name:Warrior's Resolve +ManaCost:2 W +Types:Enchantment +S:Mode$ Continuous | Affected$ Creature.YouCtrl | AddKeyword$ Training | Description$ Creatures you control have training. (Whenever a creature you control attacks with another creature with greater power, put a +1/+1 counter on the creature with lesser power.) +T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | Execute$ TrigDraw | TriggerZones$ Battlefield | IsPresent$ Creature.YouCtrl+counters_GE1_P1P1+attackedThisTurn | PresentCompare$ GE1 | TriggerDescription$ At the beginning of your end step, if you control a creature with a +1/+1 counter on it that attacked this turn, draw a card. +SVar:TrigDraw:DB$ Draw +SVar:PlayMain1:TRUE +Oracle:Creatures you control have training. (Whenever a creature you control attacks with another creature with greater power, put a +1/+1 counter on the creature with lesser power.)\nAt the beginning of your end step, if you control a creature with a +1/+1 counter on it that attacked this turn, draw a card. \ No newline at end of file From dab01c9b86a0c357280b254b77750f9fbb4947b4 Mon Sep 17 00:00:00 2001 From: Renato Filipe Vidal Santos <45150760+dracontes@users.noreply.github.com> Date: Tue, 30 Sep 2025 06:48:49 +0100 Subject: [PATCH 268/355] YEOE: 4 cards, batch 2 (#8451) --- .../cardsfolder/upcoming/hydroponics_architect.txt | 12 ++++++++++++ .../res/cardsfolder/upcoming/kavaron_consumed.txt | 7 +++++++ .../cardsfolder/upcoming/machinists_dismissal.txt | 7 +++++++ forge-gui/res/cardsfolder/upcoming/mine_security.txt | 11 +++++++++++ 4 files changed, 37 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/hydroponics_architect.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/kavaron_consumed.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/machinists_dismissal.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/mine_security.txt diff --git a/forge-gui/res/cardsfolder/upcoming/hydroponics_architect.txt b/forge-gui/res/cardsfolder/upcoming/hydroponics_architect.txt new file mode 100644 index 00000000000..c84afd5041e --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/hydroponics_architect.txt @@ -0,0 +1,12 @@ +Name:Hydroponics Architect +ManaCost:U +Types:Creature Insect +PT:1/2 +K:Flying +T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigRandom | TriggerDescription$ Whenever this creature attacks, a random land card in your library perpetually becomes a basic Island in addition to its other types and gains "When this land enters, draw a card." +SVar:TrigRandom:DB$ ChooseCard | Choices$ Land.YouOwn | ChoiceZone$ Library | AtRandom$ True | Amount$ 1 | SubAbility$ DBAnimate +SVar:DBAnimate:DB$ Animate | Defined$ ChosenCard | Types$ Basic,Island | Triggers$ LandETBDraw | Duration$ Perpetual | SubAbility$ DBCleanup +SVar:LandETBDraw:Mode$ ChangesZone | ValidCard$ Card.Self | Execute$ TrigDraw | Origin$ Any | Destination$ Battlefield | TriggerDescription$ When this land enters, draw a card. +SVar:TrigDraw:DB$ Draw +SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True +Oracle:Flying\nWhenever this creature attacks, a random land card in your library perpetually becomes a basic Island in addition to its other types and gains "When this land enters, draw a card." diff --git a/forge-gui/res/cardsfolder/upcoming/kavaron_consumed.txt b/forge-gui/res/cardsfolder/upcoming/kavaron_consumed.txt new file mode 100644 index 00000000000..f7d3e3faa2c --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/kavaron_consumed.txt @@ -0,0 +1,7 @@ +Name:Kavaron Consumed +ManaCost:3 R R +Types:Sorcery +A:SP$ ChangeZone | Hidden$ True | Origin$ Hand | Destination$ Battlefield | ChangeType$ Artifact.YouOwn,Creature.YouOwn | SelectPrompt$ Select an artifact or creature card in your hand | RememberChanged$ True | AtEOT$ Sacrifice | Optional$ True | SubAbility$ DBAnimatePerpetual | StackDescription$ REP You_{p:You} & your hand_their hand & Sacrifice_{p:You} sacrifices | SpellDescription$ You may put an artifact or creature card from your hand onto the battlefield. It perpetually becomes an artifact creature with base power and toughness 4/4 and gains haste. Sacrifice it at the beginning of the next end step. +SVar:DBAnimatePerpetual:DB$ Animate | Defined$ Remembered | Types$ Creature,Artifact | Keywords$ Haste | Power$ 4 | Toughness$ 4 | Duration$ Perpetual | SubAbility$ DBCleanup | StackDescription$ None +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +Oracle:You may put an artifact or creature card from your hand onto the battlefield. It perpetually becomes an artifact creature with base power and toughness 4/4 and gains haste. Sacrifice it at the beginning of the next end step. diff --git a/forge-gui/res/cardsfolder/upcoming/machinists_dismissal.txt b/forge-gui/res/cardsfolder/upcoming/machinists_dismissal.txt new file mode 100644 index 00000000000..3df073978a1 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/machinists_dismissal.txt @@ -0,0 +1,7 @@ +Name:Machinist's Dismissal +ManaCost:4 U +Types:Instant +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ X | EffectZone$ All | Description$ This spell costs {1} less to cast for each artifact you control and each artifact card in your hand. +SVar:X:Count$ValidBattlefield,Hand Artifact.YouCtrl +A:SP$ Counter | TargetType$ Spell | TgtPrompt$ Select target noncreature spell | ValidTgts$ Card.nonCreature | SpellDescription$ Counter target noncreature spell. +Oracle:This spell costs {1} less to cast for each artifact you control and each artifact card in your hand.\nCounter target noncreature spell. diff --git a/forge-gui/res/cardsfolder/upcoming/mine_security.txt b/forge-gui/res/cardsfolder/upcoming/mine_security.txt new file mode 100644 index 00000000000..4d3038f8db9 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/mine_security.txt @@ -0,0 +1,11 @@ +Name:Mine Security +ManaCost:1 R +Types:Creature Kavu Soldier +PT:3/1 +K:Trample +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigConjure | TriggerDescription$ When this creature enters, conjure a card named Flametongue Kavu into the top eight cards of your library at random. It perpetually gains "You may pay {0} rather than pay this spell's mana cost." +SVar:TrigConjure:DB$ MakeCard | Conjure$ True | Name$ Flametongue Kavu | Zone$ Library | LibraryPosition$ Count$Random.0.8 | RememberMade$ True | SubAbility$ DBAnimate +SVar:DBAnimate:DB$ Animate | Defined$ Remembered | staticAbilities$ FreeCast | Duration$ Perpetual | SubAbility$ DBCleanup +SVar:FreeCast:Mode$ Continuous | MayPlay$ True | MayPlayAltManaCost$ 0 | MayPlayDontGrantZonePermissions$ True | Affected$ Card.Self | AffectedZone$ Hand,Graveyard,Exile,Library,Command | EffectZone$ All | Description$ You may pay {0} rather than pay this spell's mana cost. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +Oracle:Trample\nWhen this creature enters, conjure a card named Flametongue Kavu into the top eight cards of your library at random. It perpetually gains "You may pay {0} rather than pay this spell's mana cost." From dcdf2b6e7aae931e2b1a2e04778354f375d6d5ed Mon Sep 17 00:00:00 2001 From: Renato Filipe Vidal Santos <45150760+dracontes@users.noreply.github.com> Date: Tue, 30 Sep 2025 07:35:08 +0100 Subject: [PATCH 269/355] YEOE: 4 cards, batch 3 (#8499) --- .../main/java/forge/game/trigger/TriggerType.java | 1 + .../src/main/java/forge/game/zone/MagicStack.java | 10 ++++++++++ .../res/cardsfolder/upcoming/monoist_gravliner.txt | 9 +++++++++ .../res/cardsfolder/upcoming/spirited_simulacrum.txt | 12 ++++++++++++ .../res/cardsfolder/upcoming/squadron_carrier.txt | 10 ++++++++++ .../res/cardsfolder/upcoming/thought_partition.txt | 8 ++++++++ 6 files changed, 50 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/monoist_gravliner.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/spirited_simulacrum.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/squadron_carrier.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/thought_partition.txt diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerType.java b/forge-game/src/main/java/forge/game/trigger/TriggerType.java index 4059b28d8d4..241712e5dc4 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerType.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerType.java @@ -139,6 +139,7 @@ public enum TriggerType { SpellCast(TriggerSpellAbilityCastOrCopy.class), SpellCastOrCopy(TriggerSpellAbilityCastOrCopy.class), SpellCopy(TriggerSpellAbilityCastOrCopy.class), + Stationed(TriggerCrewedSaddled.class), Surveil(TriggerSurveil.class), TakesInitiative(TriggerTakesInitiative.class), TapAll(TriggerTapAll.class), diff --git a/forge-game/src/main/java/forge/game/zone/MagicStack.java b/forge-game/src/main/java/forge/game/zone/MagicStack.java index 2ef9d3cddb8..37f0eec264b 100644 --- a/forge-game/src/main/java/forge/game/zone/MagicStack.java +++ b/forge-game/src/main/java/forge/game/zone/MagicStack.java @@ -453,6 +453,16 @@ public class MagicStack /* extends MyObservable */ implements Iterable crews = sp.getPaidList("Tapped", true); + if (crews != null) { + for (Card c : crews) { + Map stationParams = AbilityKey.mapFromCard(sp.getHostCard()); + stationParams.put(AbilityKey.Crew, c); + game.getTriggerHandler().runTrigger(TriggerType.Stationed, stationParams, false); + } + } + } } else { // Run Copy triggers if (sp.isSpell()) { diff --git a/forge-gui/res/cardsfolder/upcoming/monoist_gravliner.txt b/forge-gui/res/cardsfolder/upcoming/monoist_gravliner.txt new file mode 100644 index 00000000000..d56da20c2db --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/monoist_gravliner.txt @@ -0,0 +1,9 @@ +Name:Monoist Gravliner +ManaCost:1 B +Types:Artifact Spacecraft +PT:2/3 +K:Station:6 +T:Mode$ Stationed | ValidCard$ Card.Self | ValidCrew$ Creature | Execute$ TrigPump | TriggerZones$ Battlefield | TriggerDescription$ Whenever a creature stations this Spacecraft, that creature perpetually gains deathtouch and lifelink. +SVar:TrigPump:DB$ Pump | Defined$ Valid Creature.TriggeredCrew | KW$ Deathtouch & Lifelink | Duration$ Perpetual +S:Mode$ Continuous | Affected$ Card.Self+counters_GE6_CHARGE | AddType$ Creature | AddKeyword$ Flying & Deathtouch & Lifelink | Description$ STATION 6+ Flying, deathtouch, lifelink +Oracle:Whenever a creature stations this Spacecraft, that creature perpetually gains deathtouch and lifelink.\nStation\nSTATION 6+\nFlying, deathtouch, lifelink diff --git a/forge-gui/res/cardsfolder/upcoming/spirited_simulacrum.txt b/forge-gui/res/cardsfolder/upcoming/spirited_simulacrum.txt new file mode 100644 index 00000000000..aae28d246c9 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/spirited_simulacrum.txt @@ -0,0 +1,12 @@ +Name:Spirited Simulacrum +ManaCost:4 +Types:Artifact Creature Robot +PT:2/1 +K:Warp:4 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSeekLand | TriggerDescription$ When this creature enters, seek a land card and put it onto the battlefield tapped. +SVar:TrigSeekLand:DB$ Seek | Type$ Card.Land | RememberFound$ True | SubAbility$ DBPut +SVar:DBPut:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | Defined$ Remembered | Tapped$ True | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigSeekNonLand | TriggerDescription$ When this creature leaves the battlefield, seek a nonland card. +SVar:TrigSeekNonLand:DB$ Seek | Type$ Card.nonLand +Oracle:When this creature enters, seek a land card and put it onto the battlefield tapped.\nWhen this creature leaves the battlefield, seek a nonland card.\nWarp {4} diff --git a/forge-gui/res/cardsfolder/upcoming/squadron_carrier.txt b/forge-gui/res/cardsfolder/upcoming/squadron_carrier.txt new file mode 100644 index 00000000000..18ffa7c260c --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/squadron_carrier.txt @@ -0,0 +1,10 @@ +Name:Squadron Carrier +ManaCost:2 W +Types:Artifact Spacecraft +PT:4/4 +K:Station:10 +S:Mode$ Continuous | Affected$ Spacecraft.YouCtrl | AddAbility$ ABConjureExh | Description$ Spacecraft you control have "Exhaust — {W}: Conjure a card named Starfighter Pilot onto the battlefield." +SVar:ABConjureExh:AB$ MakeCard | Cost$ W | Conjure$ True | Name$ Starfighter Pilot | Zone$ Battlefield | Exhaust$ True | SpellDescription$ Conjure a card named Starfighter Pilot onto the battlefield. +S:Mode$ Continuous | Affected$ Card.Self+counters_GE10_CHARGE | AddType$ Creature | AddStaticAbility$ CarrierStatic | Description$ STATION 10+ Creatures you control have flying. +SVar:CarrierStatic:Mode$ Continuous | Affected$ Creature.YouCtrl | AddKeyword$ Flying | Description$ Creatures you control have flying. +Oracle:Spacecraft you control have "Exhaust — {W}: Conjure a card named Starfighter Pilot onto the battlefield."\nStation\nSTATION 10+\nCreatures you control have flying. diff --git a/forge-gui/res/cardsfolder/upcoming/thought_partition.txt b/forge-gui/res/cardsfolder/upcoming/thought_partition.txt new file mode 100644 index 00000000000..3344644497f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/thought_partition.txt @@ -0,0 +1,8 @@ +Name:Thought Partition +ManaCost:W +Types:Sorcery +A:SP$ Reveal | ValidTgts$ Opponent | RevealAllValid$ Card.nonLand+TargetedPlayerCtrl | RememberRevealed$ True | SubAbility$ DBChooseCard | StackDescription$ REP Target opponent_{p:Targeted} & You may_{p:You} may & If you_If they | SpellDescription$ Target opponent reveals all nonland cards in their hand. You may choose one of those cards. If you do, it perpetually becomes white and its mana cost perpetually becomes {5}. +SVar:DBChooseCard:DB$ ChooseCard | Defined$ You | ChoiceZone$ Hand | Choices$ Card.IsRemembered | ChoiceTitle$ Choose a card that was revealed in targeted player's hand | SubAbility$ DBAnimate | StackDescription$ None +SVar:DBAnimate:DB$ Animate | Defined$ ChosenCard | Colors$ White | OverwriteColors$ True | ManaCost$ 5 | Duration$ Perpetual | SubAbility$ DBCleanup | StackDescription$ None +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +Oracle:Target opponent reveals all nonland cards in their hand. You may choose one of those cards. If you do, it perpetually becomes white and its mana cost perpetually becomes {5}. From eeac0272ab4e520a692a98798411248817ce4ef8 Mon Sep 17 00:00:00 2001 From: Renato Filipe Vidal Santos <45150760+dracontes@users.noreply.github.com> Date: Tue, 30 Sep 2025 07:42:50 +0100 Subject: [PATCH 270/355] YEOE: 7 cards (#8476) --- .../java/forge/game/ability/effects/DraftEffect.java | 5 +++++ .../res/cardsfolder/upcoming/brood_astronomer.txt | 10 ++++++++++ .../res/cardsfolder/upcoming/eumidian_lifeseed.txt | 7 +++++++ forge-gui/res/cardsfolder/upcoming/mutable_pupa.txt | 8 ++++++++ .../res/cardsfolder/upcoming/network_marauder.txt | 8 ++++++++ forge-gui/res/cardsfolder/upcoming/prototype_x_8.txt | 12 ++++++++++++ .../res/cardsfolder/upcoming/sliver_weftwinder.txt | 11 +++++++++++ .../res/cardsfolder/upcoming/volatile_orbit.txt | 7 +++++++ 8 files changed, 68 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/brood_astronomer.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/eumidian_lifeseed.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/mutable_pupa.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/network_marauder.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/prototype_x_8.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/sliver_weftwinder.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/volatile_orbit.txt diff --git a/forge-game/src/main/java/forge/game/ability/effects/DraftEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DraftEffect.java index 8c2ff61c0e8..e1a707bd1d8 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DraftEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DraftEffect.java @@ -73,6 +73,11 @@ import java.util.*; } Card made = game.getAction().moveTo(zone, c, sa, moveParams); + if (zone.equals(ZoneType.Battlefield)) { + if (sa.hasParam("Tapped")) { + made.setTapped(true); + } + } if (zone.equals(ZoneType.Exile)) { handleExiledWith(made, sa); if (sa.hasParam("ExileFaceDown")) { diff --git a/forge-gui/res/cardsfolder/upcoming/brood_astronomer.txt b/forge-gui/res/cardsfolder/upcoming/brood_astronomer.txt new file mode 100644 index 00000000000..2fb9cab7566 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/brood_astronomer.txt @@ -0,0 +1,10 @@ +Name:Brood Astronomer +ManaCost:1 G +Types:Creature Insect Scientist +PT:2/2 +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigDraft | TriggerDescription$ When this creature enters, you may sacrifice a land. If you do, draft a card from the Planets spellbook and put it onto the battlefield tapped. +SVar:TrigDraft:AB$ Draft | Cost$ Sac<1/Land> | SpellbookName$ Planets | Spellbook$ Adagia; Windswept Bastion,Evendo; Waking Haven,Kavaron; Memorial World,Susur Secundi; Void Altar,Uthros; Titanic Godcore | Zone$ Battlefield | Tapped$ True +A:AB$ Mana | Cost$ T | Produced$ Any | Amount$ X | SpellDescription$ Add one mana of any color. If you control a Planet with twelve or more charge counters on it, add three mana of any one color instead. +SVar:X:Count$Compare Y GE1.3.1 +SVar:Y:Count$Valid Planet.YouCtrl+counters_GE12_CHARGE +Oracle:When this creature enters, you may sacrifice a land. If you do, draft a card from the Planets spellbook and put it onto the battlefield tapped.\n{T}: Add one mana of any color. If you control a Planet with twelve or more charge counters on it, add three mana of any one color instead. diff --git a/forge-gui/res/cardsfolder/upcoming/eumidian_lifeseed.txt b/forge-gui/res/cardsfolder/upcoming/eumidian_lifeseed.txt new file mode 100644 index 00000000000..d1131611ef8 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/eumidian_lifeseed.txt @@ -0,0 +1,7 @@ +Name:Eumidian Lifeseed +ManaCost:G +Types:Artifact +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigDraft | TriggerDescription$ When this artifact enters, draft a card from CARDNAME's spellbook. +SVar:TrigDraft:DB$ Draft | Spellbook$ Adagia; Windswept Bastion,Blast Zone,Cascading Cataracts,Contested War Zone,Deserted Temple,Dust Bowl,Kavaron; Memorial World,Mutavault,Nesting Grounds,Plaza of Heroes,Sunken Citadel,Susur Secundi; Void Altar,Terrain Generator,Uthros; Titanic Godcore +A:AB$ Mana | Cost$ T | Produced$ Any | Amount$ 1 | RestrictValid$ Activated.Land | SpellDescription$ Add one mana of any color. Spend this mana only to activate abilities of land sources. +Oracle:When this artifact enters, draft a card from Eumidian Lifeseed's spellbook.\n{T}: Add one mana of any color. Spend this mana only to activate abilities of land sources. diff --git a/forge-gui/res/cardsfolder/upcoming/mutable_pupa.txt b/forge-gui/res/cardsfolder/upcoming/mutable_pupa.txt new file mode 100644 index 00000000000..a0710448992 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/mutable_pupa.txt @@ -0,0 +1,8 @@ +Name:Mutable Pupa +ManaCost:G +Types:Creature Insect +PT:1/1 +K:Evolve +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Other+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever another creature you control enters, this creature perpetually gains flying if that creature has flying. The same is true for first strike, double strike, deathtouch, haste, hexproof, indestructible, lifelink, menace, reach, trample, and vigilance. +SVar:TrigPump:DB$ Pump | Defined$ Self | KW$ First Strike & Flying & Deathtouch & Double Strike & Haste & Hexproof & Indestructible & Lifelink & Menace & Reach & Trample & Vigilance | SharedKeywordsZone$ Battlefield,Hand,Graveyard,Exile,Library,Command | SharedRestrictions$ Card.TriggeredCard | Duration$ Perpetual +Oracle:Evolve\nWhenever another creature you control enters, this creature perpetually gains flying if that creature has flying. The same is true for first strike, double strike, deathtouch, haste, hexproof, indestructible, lifelink, menace, reach, trample, and vigilance. diff --git a/forge-gui/res/cardsfolder/upcoming/network_marauder.txt b/forge-gui/res/cardsfolder/upcoming/network_marauder.txt new file mode 100644 index 00000000000..f9fd4c5afe9 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/network_marauder.txt @@ -0,0 +1,8 @@ +Name:Network Marauder +ManaCost:2 U +Types:Artifact Creature Robot Pirate +PT:1/2 +K:Warp:1 U +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self,Artifact.YouCtrl+cmcGE3 | Execute$ TrigPump | TriggerDescription$ When this creature enters and whenever another artifact you control with mana value 3 or greater enters, all artifact creature cards and Spacecraft cards you own perpetually get +1/+0. +SVar:TrigPump:DB$ PumpAll | ValidCards$ Artifact.Creature+YouOwn+!token,Spacecraft.YouOwn+!token | PumpZone$ All | NumAtt$ +1 | Duration$ Perpetual +Oracle:When this creature enters and whenever another artifact you control with mana value 3 or greater enters, all artifact creature cards and Spacecraft cards you own perpetually get +1/+0.\nWarp {1}{U} diff --git a/forge-gui/res/cardsfolder/upcoming/prototype_x_8.txt b/forge-gui/res/cardsfolder/upcoming/prototype_x_8.txt new file mode 100644 index 00000000000..c543c1e3498 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/prototype_x_8.txt @@ -0,0 +1,12 @@ +Name:Prototype X-8 +ManaCost:6 U B +Types:Legendary Artifact Creature Robot Octopus +PT:8/8 +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ X | EffectZone$ All | Description$ This spell costs {1} less to cast for each creature card in your graveyard. +SVar:X:Count$ValidGraveyard Creature.YouOwn +T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Creature.wasCastByYou+YouCtrl+Other | Execute$ TrigSac | TriggerZones$ Battlefield | TriggerDescription$ Whenever another creature you control enters, if you cast it, sacrifice it. Conjure a duplicate of it onto the battlefield. The duplicate perpetually becomes a Robot artifact in addition to its other types. +SVar:TrigSac:DB$ SacrificeAll | Defined$ TriggeredCardLKICopy | SubAbility$ DBConjure +SVar:DBConjure:DB$ MakeCard | Conjure$ True | DefinedName$ TriggeredCardLKICopy | Zone$ Battlefield | RememberMade$ True | SubAbility$ DBAnimate +SVar:DBAnimate:DB$ Animate | Defined$ Remembered | Types$ Artifact,Robot | Duration$ Perpetual | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +Oracle:This spell costs {1} less to cast for each creature card in your graveyard.\nWhenever another creature you control enters, if you cast it, sacrifice it. Conjure a duplicate of it onto the battlefield. The duplicate perpetually becomes a Robot artifact in addition to its other types. diff --git a/forge-gui/res/cardsfolder/upcoming/sliver_weftwinder.txt b/forge-gui/res/cardsfolder/upcoming/sliver_weftwinder.txt new file mode 100644 index 00000000000..ca92378651b --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/sliver_weftwinder.txt @@ -0,0 +1,11 @@ +Name:Sliver Weftwinder +ManaCost:W U B R G +Types:Legendary Creature Sliver +PT:6/6 +K:Warp:3 +S:Mode$ Continuous | Affected$ Sliver.YouOwn | AffectedZone$ Hand | AddKeyword$ Warp:3 | Description$ Sliver cards in your hand have warp {3}. +S:Mode$ Continuous | Affected$ Creature.Sliver+YouCtrl | AddTrigger$ WeftwinderTrig | Description$ Sliver creatures you control have "When this creature enters, conjure a random card from the Slivers spellbook into the top ten cards of your library at random, then draw a card." +SVar:WeftwinderTrig:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ WeftwinderConjure | TriggerDescription$ When this creature enters, conjure a random card from the Slivers spellbook into the top ten cards of your library at random, then draw a card. +SVar:WeftwinderConjure:DB$ MakeCard | Conjure$ True | AtRandom$ True | Zone$ Library | LibraryPosition$ Count$Random.0.10 | SpellbookName$ Slivers | Spellbook$ Belligerent Sliver,Bladeback Sliver,Blur Sliver,Bonescythe Sliver,Cleaving Sliver,Cloudshredder Sliver,Diffusion Sliver,Dregscape Sliver,Enduring Sliver,First Sliver's Chosen,Hollowhead Sliver,Lancer Sliver,Lavabelly Sliver,Leeching Sliver,Manaweft Sliver,Predatory Sliver,Scuttling Sliver,Sentinel Sliver,Sliver Hivelord,Spiteful Sliver,Steelform Sliver,Striking Sliver,Tempered Sliver,The First Sliver | SubAbility$ WeftwinderDraw +SVar:WeftwinderDraw:DB$ Draw +Oracle:Sliver cards in your hand have warp {3}.\nSliver creatures you control have "When this creature enters, conjure a random card from the Slivers spellbook into the top ten cards of your library at random, then draw a card."\nWarp {3} diff --git a/forge-gui/res/cardsfolder/upcoming/volatile_orbit.txt b/forge-gui/res/cardsfolder/upcoming/volatile_orbit.txt new file mode 100644 index 00000000000..093afb64140 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/volatile_orbit.txt @@ -0,0 +1,7 @@ +Name:Volatile Orbit +ManaCost:R G +Types:Enchantment +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDamage | IsPresent$ Planet.YouCtrl | TriggerDescription$ When this enchantment enters, if you control a Planet, this enchantment deals 4 damage to any target. +SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Any | NumDmg$ 4 +A:AB$ MakeCard | Cost$ 1 R G Sac<1/CARDNAME/this enchantment> | Conjure$ True | SorcerySpeed$ True | SpellbookName$ Planets | Spellbook$ Adagia; Windswept Bastion,Evendo; Waking Haven,Kavaron; Memorial World,Susur Secundi; Void Altar,Uthros; Titanic Godcore | Zone$ Battlefield | Tapped$ True | WithCounter$ CHARGE | WithCounterNum$ 8 | SpellDescription$ Conjure a card of your choice from the Planets spellbook onto the battlefield tapped with eight charge counters on it. Activate only as a sorcery. +Oracle:When this enchantment enters, if you control a Planet, this enchantment deals 4 damage to any target.\n{1}{R}{G}, Sacrifice this enchantment: Conjure a card of your choice from the Planets spellbook onto the battlefield tapped with eight charge counters on it. Activate only as a sorcery. From b90c14660cc28d66670f0f0dd4d621e3cc956469 Mon Sep 17 00:00:00 2001 From: Simisays <67333662+Simisays@users.noreply.github.com> Date: Tue, 30 Sep 2025 16:22:24 +0200 Subject: [PATCH 271/355] FIC 12 Panorama/Holiday box cards (#8803) --- .../res/cardsfolder/upcoming/amarant_coral.txt | 10 ++++++++++ .../res/cardsfolder/upcoming/brilliant_wings.txt | 9 +++++++++ .../cardsfolder/upcoming/campsite_cuisine.txt | 12 ++++++++++++ .../upcoming/chaos_shrines_black_crystal.txt | 8 ++++++++ .../res/cardsfolder/upcoming/chocobo_camp.txt | 16 ++++++++++++++++ .../res/cardsfolder/upcoming/duelists_flame.txt | 12 ++++++++++++ .../upcoming/edea_possessed_sorceress.txt | 11 +++++++++++ .../res/cardsfolder/upcoming/fated_clash.txt | 8 ++++++++ .../res/cardsfolder/upcoming/fishing_gear.txt | 11 +++++++++++ .../cardsfolder/upcoming/flash_photography.txt | 8 ++++++++ .../upcoming/garland_royal_kidnapper.txt | 15 +++++++++++++++ .../upcoming/judgment_of_alexander.txt | 11 +++++++++++ forge-gui/res/lists/TypeLists.txt | 1 + 13 files changed, 132 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/amarant_coral.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/brilliant_wings.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/campsite_cuisine.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/chaos_shrines_black_crystal.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/chocobo_camp.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/duelists_flame.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/edea_possessed_sorceress.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/fated_clash.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/fishing_gear.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/flash_photography.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/garland_royal_kidnapper.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/judgment_of_alexander.txt diff --git a/forge-gui/res/cardsfolder/upcoming/amarant_coral.txt b/forge-gui/res/cardsfolder/upcoming/amarant_coral.txt new file mode 100644 index 00000000000..0f31bca6ea6 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/amarant_coral.txt @@ -0,0 +1,10 @@ +Name:Amarant Coral +ManaCost:2 R G +Types:Legendary Creature Human Monk +PT:5/4 +K:Trample +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. +T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Opponent | CombatDamage$ True | Execute$ TrigDmg | TriggerDescription$ No Mercy - Whenever CARDNAME deals combat damage to an opponent, it deals that much damage to each other opponent +SVar:TrigDmg:DB$ DamageAll | ValidPlayers$ OppNonTriggeredTarget | NumDmg$ X +SVar:X:TriggerCount$DamageAmount +Oracle:Trample\nAmarant Coral attacks each combat if able.\nNo Mercy - Whenever Amarant Coral deals combat damage to an opponent, it deals that much damage to each other opponent. diff --git a/forge-gui/res/cardsfolder/upcoming/brilliant_wings.txt b/forge-gui/res/cardsfolder/upcoming/brilliant_wings.txt new file mode 100644 index 00000000000..f61f68cb633 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/brilliant_wings.txt @@ -0,0 +1,9 @@ +Name:Brilliant Wings +ManaCost:1 W +Types:Enchantment Aura +K:Flash +K:Enchant:Creature.YouCtrl:creature you control +S:Mode$ Continuous | Affected$ Permanent.EnchantedBy | AddKeyword$ Flying & Hexproof | Description$ Enchanted permanent has flying and hexproof. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigAttach | TriggerDescription$ Whenever a creature you control enters, you may pay {1}. If you do, attach this Aura to that creature. +SVar:TrigAttach:AB$ Attach | Cost$ 1 | Defined$ TriggeredCardLKICopy +Oracle:Flash\nEnchant creature you control\nEnchanted permanent has flying and hexproof.\nWhenever a creature you control enters, you may pay {1}. If you do, attach this Aura to that creature. diff --git a/forge-gui/res/cardsfolder/upcoming/campsite_cuisine.txt b/forge-gui/res/cardsfolder/upcoming/campsite_cuisine.txt new file mode 100644 index 00000000000..7df4eacd01b --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/campsite_cuisine.txt @@ -0,0 +1,12 @@ +Name:Campsite Cuisine +ManaCost:1 G +Types:Enchantment +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self,Creature.Legendary+YouCtrl | Execute$ TrigFood | TriggerDescription$ Whenever this enchantment or a legendary creature you control enters, create a Food token. +SVar:TrigFood:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_food_sac | TokenOwner$ You +T:Mode$ AttackersDeclared | Execute$ TrigImmediateTrig | TriggerZones$ Battlefield | AttackingPlayer$ You | TriggerDescription$ Whenever you attack, you may sacrifice X Foods. When you do, up to X target attacking creatures each get +3/+3 and gain trample and indestructible until end of turn. +SVar:TrigImmediateTrig:AB$ ImmediateTrigger | Cost$ Sac | Execute$ TrigPump | TriggerDescription$ When you do, up to X target attacking creatures each get +3/+3 and gain trample and indestructible until end of turn. +SVar:TrigPump:DB$ Pump | ValidTgts$ Creature.attacking | TargetMin$ 0 | TargetMax$ X | TgtPrompt$ Select up to X target attacking creatures | NumAtt$ +3 | NumDef$ +3 | KW$ Trample & Indestructible +SVar:X:Count$xPaid +DeckHas:Ability$Token|Sacrifice & Type$Artifact|Food +DeckHints:Type$Legendary & Type$Creature +Oracle:Whenever this enchantment or a legendary creature you control enters, create a Food token.\nWhenever you attack, you may sacrifice X Foods. When you do, up to X target attacking creatures each get +3/+3 and gain trample and indestructible until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/chaos_shrines_black_crystal.txt b/forge-gui/res/cardsfolder/upcoming/chaos_shrines_black_crystal.txt new file mode 100644 index 00000000000..0b4bf7a07d0 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/chaos_shrines_black_crystal.txt @@ -0,0 +1,8 @@ +Name:Chaos Shrine's Black Crystal +ManaCost:3 B +Types:Legendary Artifact +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.YouCtrl+!token | TriggerZones$ Battlefield | Execute$ TrigChange | TriggerDescription$ Whenever a nontoken creature you control dies, exile it. +SVar:TrigChange:DB$ ChangeZone | Defined$ TriggeredCard | Origin$ Graveyard | Destination$ Exile +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigReturn | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of your upkeep, you may put a creature card exiled with CARDNAME onto the battlefield under your control with a finality counter on it. +SVar:TrigReturn:DB$ ChangeZone | Origin$ Exile | Destination$ Battlefield | Hidden$ True | ChangeType$ Creature.ExiledWithSource | GainControl$ True | WithCountersType$ FINALITY | WithCountersAmount$ 1 | ChangeNum$ 1 +Oracle:Whenever a nontoken creature you control dies, exile it.\nAt the beginning of your upkeep, you may put a creature card exiled with Chaos Shrine's Black Crystal onto the battlefield under your control with a finality counter on it. diff --git a/forge-gui/res/cardsfolder/upcoming/chocobo_camp.txt b/forge-gui/res/cardsfolder/upcoming/chocobo_camp.txt new file mode 100644 index 00000000000..80a452c8ac7 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/chocobo_camp.txt @@ -0,0 +1,16 @@ +Name:Chocobo Camp +ManaCost:no cost +Types:Land +Types:Legendary Land +R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplaceWith$ LandTapped | ReplacementResult$ Updated | Description$ CARDNAME enters tapped unless you control a legendary creature. +SVar:LandTapped:DB$ Tap | Defined$ Self | ETB$ True | ConditionPresent$ Creature.Legendary+YouCtrl | ConditionCompare$ EQ0 +A:AB$ Mana | Cost$ T | Produced$ G | SubAbility$ DBEffect | SpellDescription$ Add {G}. +SVar:DBEffect:DB$ Effect | Triggers$ SpellCastTrig | SpellDescription$ When you next cast a Bird creature spell this turn, it enters with an additional +1/+1 counter on it. +SVar:SpellCastTrig:Mode$ SpellCast | ValidCard$ Bird | ValidActivatingPlayer$ You | Execute$ TrigCounter | OneOff$ True | TriggerDescription$ When you next cast a Bird creature spell this turn, it enters with an additional +1/+1 counter on it. +SVar:TrigCounter:DB$ Effect | ReplacementEffects$ ETBCounters | RememberObjects$ TriggeredCard | ForgetOnMoved$ Stack +SVar:ETBCounters:Event$ Moved | Origin$ Stack | Destination$ Battlefield | ValidCard$ Card.IsRemembered | ReplaceWith$ ETBAddExtraCounter | ReplacementResult$ Updated | Description$ That creature enters with an additional +1/+1 counters on it. +SVar:ETBAddExtraCounter:DB$ PutCounter | ETB$ True | Defined$ ReplacedCard | CounterType$ P1P1 | CounterNum$ 1 +A:AB$ Token | Cost$ 4 G G T | TokenScript$ g_2_2_bird_landfall | SpellDescription$ Creature a 2/2 green Bird creature token with "Whenever a land you control enters, this token gets +1/+0 until end of turn". +DeckHas:Ability$Token & Type$Artifact|Bird +DeckHints:Type$Legendary +Oracle:This Land enters tapped unless you control a legendary creature.\n{T}: Add {G}. When you next cast a Bird creature spell this turn, it enters with an additional +1/+1 counter on it.\n{4}{G}{G}, {T}, Creature a 2/2 green Bird creature token with "Whenever a land you control enters, this token gets +1/+0 until end of turn". diff --git a/forge-gui/res/cardsfolder/upcoming/duelists_flame.txt b/forge-gui/res/cardsfolder/upcoming/duelists_flame.txt new file mode 100644 index 00000000000..50fc69fe260 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/duelists_flame.txt @@ -0,0 +1,12 @@ +Name:Duelist's Flame +ManaCost:X R R +Types:Instant +A:SP$ Pump | ValidTgts$ Creature.blocked+YouCtrl | TgtPrompt$ Select target blocked creature you control | NumAtt$ +X | KW$ Trample | SubAbility$ DBAnimate | SpellDescription$ Until end of turn, target blocked creature you control gets +X/+0 and gains trample and "Whenever this creature deals combat damage to a player, look at that many cards from the top of your library. Exile up to one nonland card from among them and put the rest on the bottom of your library in a random order. You may cast the exiled card without paying its mana cost." +SVar:DBAnimate:DB$ Animate | Defined$ Targeted | Triggers$ DamageTrig +SVar:DamageTrig:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | Execute$ TrigDig | CombatDamage$ True | TriggerDescription$ Whenever this creature deals combat damage to a player, look at that many cards from the top of your library. Exile up to one nonland card from among them and put the rest on the bottom of your library in a random order. You may cast the exiled card without paying its mana cost. +SVar:TrigDig:DB$ Dig | DigNum$ Y | ChangeNum$ 1 | ChangeValid$ Card.nonLand | Optional$ True | RememberChanged$ True | DestinationZone$ Exile | RestRandomOrder$ True | SubAbility$ DBCast +SVar:DBCast:DB$ Play | Valid$ Card.IsRemembered | ValidZone$ Exile | ValidSA$ Spell | WithoutManaCost$ True | Optional$ True | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:Y:TriggerCount$DamageAmount +SVar:X:Count$xPaid +Oracle:Until end of turn, target blocked creature you control gets +X/+0 and gains trample and "Whenever this creature deals combat damage to a player, look at that many cards from the top of your library. Exile up to one nonland card from among them and put the rest on the bottom of your library in a random order. You may cast the exiled card without paying its mana cost." diff --git a/forge-gui/res/cardsfolder/upcoming/edea_possessed_sorceress.txt b/forge-gui/res/cardsfolder/upcoming/edea_possessed_sorceress.txt new file mode 100644 index 00000000000..3956b438c52 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/edea_possessed_sorceress.txt @@ -0,0 +1,11 @@ +Name:Edea, Possessed Sorceress +ManaCost:2 U B R +Types:Legendary Creature Human Warlock +PT:2/5 +K:Ward:2 +T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | Execute$ TrigGainControl | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of combat on your turn, gain control of target creature an opponent controls until end of turn. Untap that creature. It gains haste until end of turn. +SVar:TrigGainControl:DB$ GainControl | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select target creature an opponent controls | LoseControl$ EOT | Untap$ True | AddKWs$ Haste +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | TriggerZones$ Battlefield | ValidCard$ Creature.YouDontOwn+YouCtrl | Execute$ TrigReturn | TriggerDescription$ Whenever a creature you control but don't own dies, return it to the battlefield under it's owner's control and you draw a card. +SVar:TrigReturn:DB$ ChangeZone | Defined$ TriggeredNewCardLKICopy | Origin$ All | Destination$ Battlefield | SubAbility$ TrigDraw +SVar:TrigDraw:DB$ Draw | NumCards$ 1 +Oracle:Ward {2}\nAt the beginning of combat on your turn, gain control of target creature an opponent controls until end of turn. Untap that creature. It gains haste until end of turn.\nWhenever a creature you control but don't own dies, return it to the battlefield under it's owner's control and you draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/fated_clash.txt b/forge-gui/res/cardsfolder/upcoming/fated_clash.txt new file mode 100644 index 00000000000..0f7d9d0da34 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/fated_clash.txt @@ -0,0 +1,8 @@ +Name:Fated Clash +ManaCost:3 W W +Types:Sorcery +S:Mode$ CastWithFlash | ValidCard$ Card.Self | ValidSA$ Spell | IsPresent$ Creature.attacking | IsPresent2$ Creature.blocking | EffectZone$ All | Caster$ You | Description$ You may cast this spell as though it had flash if a creature is attacking and a creature is blocking. +A:SP$ Pump | KW$ Indestructible | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | SubAbility$ DBPumpOpp | SpellDescription$ Target creature you control and target creature an opponent controls each gain indestructible until end of turn. +SVar:DBPumpOpp:DB$ Pump | KW$ Indestructible | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select target creature an opponent controls | SubAbility$ DBDestroyAll +SVar:DBDestroyAll:DB$ DestroyAll | ValidCards$ Creature | SpellDescription$ Then destroy all creatures. +Oracle:You may cast this spell as though it had flash if a creature is attacking and a creature is blocking.\nTarget creature you control and target creature an opponent controls each gain indestructible until end of turn. Then destoy all creatures. diff --git a/forge-gui/res/cardsfolder/upcoming/fishing_gear.txt b/forge-gui/res/cardsfolder/upcoming/fishing_gear.txt new file mode 100644 index 00000000000..34453ba2dcc --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/fishing_gear.txt @@ -0,0 +1,11 @@ +Name:Fishing Gear +ManaCost:3 +Types:Artifact Equipment +K:Equip:2 +T:Mode$ DamageDone | ValidSource$ Creature.EquippedBy | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigExile | TriggerZones$ Battlefield | TriggerDescription$ Whenever equipped creature deals combat damage to a player, exile the top card of that player's library. If it's a permanent card, you may put it onto the battlefield under your control. If you don't, create a 1/1 blue Fish creature token. +SVar:TrigExile:DB$ Dig | Defined$ TriggeredTarget | DigNum$ 1 | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True | SubAbility$ DBChange +SVar:DBChange:DB$ ChangeZone | ConditionDefined$ Remembered | ConditionPresent$ Permanent | GainControl$ True | Defined$ Remembered | Origin$ Exile | Optional$ True | Imprint$ True | Destination$ Battlefield | SubAbility$ DBToken +SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ u_1_1_fish | TokenOwner$ You | ConditionDefined$ Imprinted | ConditionPresent$ Card | ConditionCompare$ EQ0 | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearImprinted$ True | ClearRemembered$ True +DeckHas:Ability$Token & Type$Fish +Oracle:Whenever equipped creature deals combat damage to a player, exile the top card of that player's library. If it's a permanent card, you may put it onto the battlefield under your control. If you don't, create a 1/1 blue Fish creature token.\nEquip {2} diff --git a/forge-gui/res/cardsfolder/upcoming/flash_photography.txt b/forge-gui/res/cardsfolder/upcoming/flash_photography.txt new file mode 100644 index 00000000000..9a46cfeed1c --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/flash_photography.txt @@ -0,0 +1,8 @@ +Name:Flash Photography +ManaCost:2 U U +Types:Sorcery +K:Flashback:4 U U +S:Mode$ CastWithFlash | ValidCard$ Card.Self | ValidSA$ Spell.IsTargeting Valid Permanent.YouCtrl | EffectZone$ All | Caster$ You | Description$ You may cast this spell as though it had flash if it targets a permanent you control. +A:SP$ CopyPermanent | ValidTgts$ Permanent | TgtPrompt$ Select target permanent | StackDescription$ SpellDescription | SpellDescription$ Create a token that's a copy of target permanent. +DeckHas:Ability$Token +Oracle:You may cast this spell as though it had flash if it targets a permanent you control.\nCreate a token that's a copy of target permanent.\nFlashback {4}{U)}U) diff --git a/forge-gui/res/cardsfolder/upcoming/garland_royal_kidnapper.txt b/forge-gui/res/cardsfolder/upcoming/garland_royal_kidnapper.txt new file mode 100644 index 00000000000..8f7fb85ac3e --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/garland_royal_kidnapper.txt @@ -0,0 +1,15 @@ +Name:Garland, Royal Kidnapper +ManaCost:2 U B +Types:Legendary Creature Human Knight +PT:3/4 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigMonarch | TriggerDescription$ When NICKNAME enters, you become the monarch. +SVar:TrigMonarch:DB$ BecomeMonarch | Defined$ You +T:Mode$ BecomeMonarch | ValidPlayer$ Opponent | TriggerZones$ Battlefield | Execute$ TrigEffect | TriggerDescription$ Whenever an opponent becomes the monarch, gain control of target creature that player controls for as long as they're the monarch. +SVar:TrigEffect:DB$ Effect | ImprintCards$ Targeted | ValidTgts$ Creature.ControlledBy TriggeredPlayer | TgtPrompt$ Choose target creature that player controls | RememberObjects$ TriggeredPlayer | Triggers$ ExileMe | StaticAbilities$ GainControl | Duration$ Permanent +SVar:GainControl:Mode$ Continuous | Affected$ Card.IsImprinted | CheckSVar$ X | SVarCompare$ EQ1 | GainControl$ You | Description$ You gain control of that creature for as long as that player is the monarch. +SVar:ExileMe:Mode$ Always | Static$ True | Execute$ ExileEffect | CheckSVar$ X | SVarCompare$ EQ0 +SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile +SVar:X:PlayerCountRememberedPlayer$HasPropertyisMonarch +S:Mode$ Continuous | Affected$ Creature.YouCtrl+YouDontOwn| AddPower$ 2 | AddToughness$ 2 | Description$ Creatures you control but don't own get +2/+2 and can't be sacrificed. +S:Mode$ CantSacrifice | ValidCard$ Creature.YouCtrl+YouDontOwn | Secondary$ True | SpellDescription$ Creatures you control but don't own get +2/+2 and can't be sacrificed. +Oracle:When Garland enters, you become the monarch.\nWhenever an opponent becomes the monarch, gain control of target creature that player controls for as long as they're the monarch.\nCreatures you control but don't own get +2/+2 and can't be sacrificed. diff --git a/forge-gui/res/cardsfolder/upcoming/judgment_of_alexander.txt b/forge-gui/res/cardsfolder/upcoming/judgment_of_alexander.txt new file mode 100644 index 00000000000..8674cdf8c81 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/judgment_of_alexander.txt @@ -0,0 +1,11 @@ +Name:Judgment of Alexander +ManaCost:2 W +Types:Instant +A:SP$ Effect | ReplacementEffects$ PreventDamage | AILogic$ Fog | SpellDescription$ Prevent all damage that would be dealt to you this turn by sources your opponents control. Whenever damage from a creature is prevented this way, each commander creature you control deals damage equal to its power to that creature. +SVar:PreventDamage:Event$ DamageDone | ActiveZones$ Command | ValidTarget$ You | ValidSource$ Card.OppCtrl,Emblem.OppCtrl | ReplaceWith$ DBTrigger | PreventionEffect$ True | ExecuteMode$ PerSource | Description$ Prevent all damage that would be dealt to you this turn by sources your opponents control. Whenever damage from a creature is prevented this way, each commander creature you control deals damage equal to its power to that creature. +SVar:DBTrigger:DB$ ImmediateTrigger | Execute$ TrigDamageCreature | RememberObjects$ ReplacedSource | ConditionCheckSVar$ Y | TriggerDescription$ Whenever damage from a creature is prevented this way, each commander creature you control deals damage equal to its power to that creature. +SVar:TrigDamageCreature:DB$ DealDamage | Defined$ DelayTriggerRemembered | DamageSource$ Valid Card.IsCommander+YouCtrl | NumDmg$ X +SVar:X:Count$Valid Card.IsCommander+YouCtrl$CardPower +SVar:Y:ReplacedSource$Valid Card.Creature +AI:RemoveDeck:NonCommander +Oracle:Prevent all damage that would be dealt to you this turn by sources your opponents control.\nWhenever damage from a creature is prevented this way, each commander creature you control deals damage equal to its power to that creature. diff --git a/forge-gui/res/lists/TypeLists.txt b/forge-gui/res/lists/TypeLists.txt index 89fabc6c904..02d36c77629 100644 --- a/forge-gui/res/lists/TypeLists.txt +++ b/forge-gui/res/lists/TypeLists.txt @@ -283,6 +283,7 @@ Snail:Snails Snake:Snakes Soldier:Soldiers Soltari:Soltaris +Sorcerer:Sorcerers Spawn:Spawns Specter:Specters Spellshaper:Spellshapers From bc6eed5c7d3d2e2570bf68c0f72006ad226d3abe Mon Sep 17 00:00:00 2001 From: Simisays <67333662+Simisays@users.noreply.github.com> Date: Tue, 30 Sep 2025 19:32:21 +0200 Subject: [PATCH 272/355] Update joel_resolute_survivor.txt (#8814) --- forge-gui/res/cardsfolder/upcoming/joel_resolute_survivor.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/upcoming/joel_resolute_survivor.txt b/forge-gui/res/cardsfolder/upcoming/joel_resolute_survivor.txt index d95aa4ce05d..698539d3352 100644 --- a/forge-gui/res/cardsfolder/upcoming/joel_resolute_survivor.txt +++ b/forge-gui/res/cardsfolder/upcoming/joel_resolute_survivor.txt @@ -6,7 +6,7 @@ K:Menace K:Partner - Survivors T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.token | Execute$ TrigPutCounter | ActivationLimit$ 1 | TriggerDescription$ Whenever a creature token dies, put a +1/+1 counter on NICKNAME and draw a card. This ability triggers only once each turn. SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterNum$ 1 | CounterType$ P1P1 | SubAbility$ DBDraw -SVar:TrigDraw:DB$ Draw +SVar:DBDraw:DB$ Draw DeckHas:Ability$Counters DeckHints:Ability$Sacrifice|Token Oracle:Menace\nWhenever a creature token dies, put a +1/+1 counter on Joel and draw a card. This ability triggers only once each turn.\nPartner — Survivors (You can have two commanders if both have this ability.) From cdbf10f1f7acf8c7855573161994279ab0ac181a Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Tue, 30 Sep 2025 20:43:42 +0200 Subject: [PATCH 273/355] Change type desc (#8809) * add ChangeTypeDesc for basic land * Search N is up to * add some more ChangeTypeDesc * add some more ChangeTypeDesc * add some more ChangeTypeDesc * Update panorama * update landscape * Update Clan Monuments * Small Monument to Perfection change * update capenna fetchers * remove ChangeNum from basic Land searchers * better desc for fetch lands * remove uneeded ChangeTypeDesc --- forge-game/src/main/java/forge/game/CardTraitBase.java | 4 +++- .../forge/game/ability/effects/ChangeZoneEffect.java | 10 +++++++--- forge-gui/res/cardsfolder/a/aangs_journey.txt | 4 ++-- forge-gui/res/cardsfolder/a/abzan_monument.txt | 2 +- forge-gui/res/cardsfolder/a/ainok_guide.txt | 2 +- forge-gui/res/cardsfolder/a/analyze_the_pollen.txt | 2 +- forge-gui/res/cardsfolder/a/anchor_to_reality.txt | 2 +- forge-gui/res/cardsfolder/a/armillary_sphere.txt | 2 +- forge-gui/res/cardsfolder/a/assassins_trophy.txt | 2 +- forge-gui/res/cardsfolder/a/atalan_jackal.txt | 2 +- forge-gui/res/cardsfolder/a/attune_with_aether.txt | 2 +- forge-gui/res/cardsfolder/a/avatar_of_growth.txt | 2 +- forge-gui/res/cardsfolder/b/bad_river.txt | 2 +- forge-gui/res/cardsfolder/b/bant_panorama.txt | 2 +- .../b/beanstalk_giant_fertile_footsteps.txt | 2 +- forge-gui/res/cardsfolder/b/beneath_the_sands.txt | 2 +- .../res/cardsfolder/b/bitterthorn_nissas_animus.txt | 2 +- forge-gui/res/cardsfolder/b/blighted_woodland.txt | 2 +- forge-gui/res/cardsfolder/b/bloodstained_mire.txt | 2 +- .../cardsfolder/b/bloomvine_regent_claim_territory.txt | 2 +- forge-gui/res/cardsfolder/b/borderland_explorer.txt | 2 +- forge-gui/res/cardsfolder/b/borderland_ranger.txt | 2 +- forge-gui/res/cardsfolder/b/boundless_realms.txt | 2 +- forge-gui/res/cardsfolder/b/bountiful_landscape.txt | 2 +- forge-gui/res/cardsfolder/b/braidwood_sextant.txt | 2 +- forge-gui/res/cardsfolder/b/brave_the_wilds.txt | 2 +- forge-gui/res/cardsfolder/b/brokers_hideout.txt | 2 +- forge-gui/res/cardsfolder/b/burnished_hart.txt | 2 +- forge-gui/res/cardsfolder/b/bushwhack.txt | 2 +- forge-gui/res/cardsfolder/c/cabaretti_courtyard.txt | 2 +- forge-gui/res/cardsfolder/c/campus_guide.txt | 2 +- forge-gui/res/cardsfolder/c/caravan_vigil.txt | 2 +- forge-gui/res/cardsfolder/c/celebrate_the_harvest.txt | 2 +- forge-gui/res/cardsfolder/c/centaur_rootcaster.txt | 2 +- forge-gui/res/cardsfolder/c/civic_wayfinder.txt | 2 +- forge-gui/res/cardsfolder/c/cleansing_wildfire.txt | 2 +- forge-gui/res/cardsfolder/c/collective_voyage.txt | 2 +- forge-gui/res/cardsfolder/c/coming_attraction.txt | 2 +- forge-gui/res/cardsfolder/c/contaminated_landscape.txt | 2 +- forge-gui/res/cardsfolder/c/cultivate.txt | 2 +- forge-gui/res/cardsfolder/d/dawntreader_elk.txt | 2 +- forge-gui/res/cardsfolder/d/deathbellow_war_cry.txt | 2 +- forge-gui/res/cardsfolder/d/deathsprout.txt | 2 +- forge-gui/res/cardsfolder/d/deceptive_landscape.txt | 2 +- forge-gui/res/cardsfolder/d/deep_reconnaissance.txt | 2 +- forge-gui/res/cardsfolder/d/demolition_field.txt | 4 ++-- forge-gui/res/cardsfolder/d/dig_up.txt | 2 +- forge-gui/res/cardsfolder/d/diligent_farmhand.txt | 2 +- forge-gui/res/cardsfolder/d/dire_strain_rampage.txt | 2 +- forge-gui/res/cardsfolder/d/dragonstorm.txt | 2 +- forge-gui/res/cardsfolder/d/dreamscape_artist.txt | 2 +- .../res/cardsfolder/d/druid_of_the_emerald_grove.txt | 2 +- forge-gui/res/cardsfolder/e/ecologists_terrarium.txt | 2 +- forge-gui/res/cardsfolder/e/edge_of_autumn.txt | 2 +- forge-gui/res/cardsfolder/e/elanor_gardner.txt | 2 +- forge-gui/res/cardsfolder/e/elfhame_sanctuary.txt | 2 +- forge-gui/res/cardsfolder/e/elvish_pioneer.txt | 2 +- forge-gui/res/cardsfolder/e/embermouth_sentinel.txt | 4 ++-- forge-gui/res/cardsfolder/e/embodiment_of_spring.txt | 2 +- forge-gui/res/cardsfolder/e/emergent_sequence.txt | 2 +- .../res/cardsfolder/e/encroaching_dragonstorm.txt | 2 +- forge-gui/res/cardsfolder/e/enigma_ridges.txt | 2 +- forge-gui/res/cardsfolder/e/enlightened_tutor.txt | 2 +- forge-gui/res/cardsfolder/e/entish_restoration.txt | 2 +- forge-gui/res/cardsfolder/e/environmental_sciences.txt | 2 +- forge-gui/res/cardsfolder/e/escape_tunnel.txt | 2 +- forge-gui/res/cardsfolder/e/esper_panorama.txt | 2 +- forge-gui/res/cardsfolder/e/evolution_charm.txt | 2 +- forge-gui/res/cardsfolder/e/evolving_wilds.txt | 2 +- forge-gui/res/cardsfolder/e/exploding_borders.txt | 2 +- forge-gui/res/cardsfolder/e/explosive_vegetation.txt | 2 +- forge-gui/res/cardsfolder/f/fabled_passage.txt | 2 +- forge-gui/res/cardsfolder/f/far_wanderings.txt | 2 +- forge-gui/res/cardsfolder/f/farfinder.txt | 2 +- forge-gui/res/cardsfolder/f/farhaven_elf.txt | 2 +- forge-gui/res/cardsfolder/f/fertilid.txt | 2 +- forge-gui/res/cardsfolder/f/fertilids_favor.txt | 2 +- forge-gui/res/cardsfolder/f/field_of_ruin.txt | 2 +- forge-gui/res/cardsfolder/f/firebrand_ranger.txt | 2 +- forge-gui/res/cardsfolder/f/flare_of_cultivation.txt | 2 +- forge-gui/res/cardsfolder/f/flood_plain.txt | 2 +- forge-gui/res/cardsfolder/f/flooded_strand.txt | 2 +- forge-gui/res/cardsfolder/f/flower_flourish.txt | 2 +- forge-gui/res/cardsfolder/f/font_of_fertility.txt | 2 +- forge-gui/res/cardsfolder/f/forceful_cultivator.txt | 2 +- forge-gui/res/cardsfolder/f/foreboding_landscape.txt | 2 +- forge-gui/res/cardsfolder/f/forestfolk.txt | 2 +- forge-gui/res/cardsfolder/f/fork_in_the_road.txt | 2 +- forge-gui/res/cardsfolder/f/fountainport_bell.txt | 2 +- forge-gui/res/cardsfolder/f/frenzied_tilling.txt | 2 +- forge-gui/res/cardsfolder/f/from_the_ashes.txt | 2 +- forge-gui/res/cardsfolder/f/frontier_guide.txt | 2 +- forge-gui/res/cardsfolder/g/geomancers_gambit.txt | 2 +- forge-gui/res/cardsfolder/g/ghost_quarter.txt | 2 +- forge-gui/res/cardsfolder/g/giant_ladybug.txt | 2 +- forge-gui/res/cardsfolder/g/go_forth.txt | 2 +- forge-gui/res/cardsfolder/g/grasslands.txt | 2 +- forge-gui/res/cardsfolder/g/greater_tanuki.txt | 2 +- forge-gui/res/cardsfolder/g/greenseeker.txt | 2 +- forge-gui/res/cardsfolder/g/grixis_panorama.txt | 2 +- forge-gui/res/cardsfolder/g/grow_from_the_ashes.txt | 2 +- forge-gui/res/cardsfolder/g/growth_charm.txt | 2 +- forge-gui/res/cardsfolder/g/growth_spasm.txt | 2 +- forge-gui/res/cardsfolder/h/harrow.txt | 2 +- forge-gui/res/cardsfolder/h/harvest_season.txt | 2 +- forge-gui/res/cardsfolder/h/heaped_harvest.txt | 2 +- forge-gui/res/cardsfolder/h/herd_migration.txt | 2 +- forge-gui/res/cardsfolder/h/hithlain_rope.txt | 2 +- forge-gui/res/cardsfolder/h/horizon_boughs.txt | 2 +- forge-gui/res/cardsfolder/h/horizon_seeker.txt | 2 +- forge-gui/res/cardsfolder/h/horizon_spellbomb.txt | 2 +- .../huatli_poet_of_unity_roar_of_the_fifth_people.txt | 2 +- .../i/invasion_of_zendikar_awakened_skyclave.txt | 2 +- forge-gui/res/cardsfolder/j/jaheiras_respite.txt | 2 +- forge-gui/res/cardsfolder/j/jeskai_monument.txt | 2 +- forge-gui/res/cardsfolder/j/journey_for_the_elixir.txt | 2 +- forge-gui/res/cardsfolder/j/journey_of_discovery.txt | 2 +- forge-gui/res/cardsfolder/j/journeyers_kite.txt | 2 +- forge-gui/res/cardsfolder/j/jund_panorama.txt | 2 +- forge-gui/res/cardsfolder/j/jungle_wayfinder.txt | 2 +- forge-gui/res/cardsfolder/k/kamigawa_charm.txt | 2 +- .../k/kellan_the_fae_blooded_birthright_boon.txt | 2 +- forge-gui/res/cardsfolder/k/keys_to_the_house.txt | 2 +- .../res/cardsfolder/k/khalni_heart_expedition.txt | 2 +- forge-gui/res/cardsfolder/k/knowledge_exploitation.txt | 2 +- .../res/cardsfolder/k/kodama_of_the_west_tree.txt | 2 +- forge-gui/res/cardsfolder/k/kodamas_reach.txt | 2 +- forge-gui/res/cardsfolder/k/krenkos_buzzcrusher.txt | 2 +- forge-gui/res/cardsfolder/k/krosan_tusker.txt | 2 +- forge-gui/res/cardsfolder/l/land_tax.txt | 2 +- forge-gui/res/cardsfolder/l/larval_scoutlander.txt | 2 +- forge-gui/res/cardsfolder/l/lay_of_the_land.txt | 2 +- forge-gui/res/cardsfolder/l/loam_larva.txt | 2 +- forge-gui/res/cardsfolder/l/lumbering_worldwagon.txt | 2 +- forge-gui/res/cardsfolder/m/maestros_theater.txt | 2 +- forge-gui/res/cardsfolder/m/magmatic_hellkite.txt | 2 +- forge-gui/res/cardsfolder/m/many_partings.txt | 2 +- forge-gui/res/cardsfolder/m/map_the_wastes.txt | 2 +- forge-gui/res/cardsfolder/m/mardu_monument.txt | 2 +- forge-gui/res/cardsfolder/m/marsh_flats.txt | 2 +- forge-gui/res/cardsfolder/m/merchant_scroll.txt | 2 +- forge-gui/res/cardsfolder/m/migration_path.txt | 2 +- forge-gui/res/cardsfolder/m/migratory_greathorn.txt | 2 +- forge-gui/res/cardsfolder/m/misty_rainforest.txt | 2 +- forge-gui/res/cardsfolder/m/moggcatcher.txt | 2 +- .../res/cardsfolder/m/moldering_gym_weight_room.txt | 2 +- forge-gui/res/cardsfolder/m/monument_to_perfection.txt | 2 +- forge-gui/res/cardsfolder/m/mountain_valley.txt | 2 +- forge-gui/res/cardsfolder/m/murasa.txt | 2 +- forge-gui/res/cardsfolder/m/murasa_rootgrazer.txt | 2 +- forge-gui/res/cardsfolder/m/mycosynth_wellspring.txt | 2 +- forge-gui/res/cardsfolder/m/myr_turbine.txt | 2 +- forge-gui/res/cardsfolder/m/myriad_landscape.txt | 2 +- forge-gui/res/cardsfolder/m/mystical_tutor.txt | 2 +- forge-gui/res/cardsfolder/n/nahiri_the_harbinger.txt | 2 +- forge-gui/res/cardsfolder/n/natural_balance.txt | 2 +- forge-gui/res/cardsfolder/n/natural_connection.txt | 2 +- forge-gui/res/cardsfolder/n/naya_panorama.txt | 2 +- forge-gui/res/cardsfolder/n/new_frontiers.txt | 2 +- forge-gui/res/cardsfolder/n/nissa_worldwaker.txt | 2 +- forge-gui/res/cardsfolder/n/nissas_expedition.txt | 2 +- forge-gui/res/cardsfolder/n/nissas_renewal.txt | 2 +- forge-gui/res/cardsfolder/o/oashra_cultivator.txt | 2 +- forge-gui/res/cardsfolder/o/oath_of_lieges.txt | 2 +- forge-gui/res/cardsfolder/o/obscura_storefront.txt | 2 +- forge-gui/res/cardsfolder/o/old_growth_dryads.txt | 2 +- forge-gui/res/cardsfolder/o/omen_of_the_hunt.txt | 2 +- forge-gui/res/cardsfolder/o/ominous_parcel.txt | 2 +- forge-gui/res/cardsfolder/o/ondu_giant.txt | 2 +- forge-gui/res/cardsfolder/o/one_with_nature.txt | 2 +- forge-gui/res/cardsfolder/o/open_the_armory.txt | 2 +- forge-gui/res/cardsfolder/o/ordeal_of_nylea.txt | 2 +- forge-gui/res/cardsfolder/o/orochi_colony.txt | 2 +- forge-gui/res/cardsfolder/p/path_of_the_animist.txt | 2 +- forge-gui/res/cardsfolder/p/path_to_exile.txt | 2 +- forge-gui/res/cardsfolder/p/path_to_the_festival.txt | 2 +- forge-gui/res/cardsfolder/p/path_to_the_world_tree.txt | 2 +- forge-gui/res/cardsfolder/p/peregrination.txt | 2 +- forge-gui/res/cardsfolder/p/perilous_landscape.txt | 2 +- forge-gui/res/cardsfolder/p/pilgrims_eye.txt | 2 +- forge-gui/res/cardsfolder/p/planar_birth.txt | 2 +- forge-gui/res/cardsfolder/p/point_the_way.txt | 2 +- forge-gui/res/cardsfolder/p/polluted_delta.txt | 2 +- .../res/cardsfolder/p/priest_of_the_wakening_sun.txt | 2 +- forge-gui/res/cardsfolder/p/primal_druid.txt | 2 +- forge-gui/res/cardsfolder/p/primal_growth.txt | 2 +- forge-gui/res/cardsfolder/p/primeval_herald.txt | 2 +- forge-gui/res/cardsfolder/p/prismatic_vista.txt | 2 +- forge-gui/res/cardsfolder/p/promising_vein.txt | 2 +- forge-gui/res/cardsfolder/p/purestrain_genestealer.txt | 2 +- forge-gui/res/cardsfolder/q/quiet_speculation.txt | 2 +- forge-gui/res/cardsfolder/q/quirion_trailblazer.txt | 2 +- forge-gui/res/cardsfolder/r/radioactive_spider.txt | 3 +-- forge-gui/res/cardsfolder/r/rampaging_growth.txt | 2 +- forge-gui/res/cardsfolder/r/rampant_growth.txt | 2 +- forge-gui/res/cardsfolder/r/rampant_rejuvenator.txt | 2 +- forge-gui/res/cardsfolder/r/rampart_architect.txt | 2 +- forge-gui/res/cardsfolder/r/ranging_raptors.txt | 2 +- .../res/cardsfolder/r/realms_befitting_my_majesty.txt | 2 +- forge-gui/res/cardsfolder/r/reckless_handling.txt | 2 +- forge-gui/res/cardsfolder/r/renegade_map.txt | 2 +- forge-gui/res/cardsfolder/r/renewal.txt | 2 +- forge-gui/res/cardsfolder/r/return_from_the_wilds.txt | 2 +- forge-gui/res/cardsfolder/r/rites_of_spring.txt | 2 +- forge-gui/res/cardsfolder/r/riveteers_overlook.txt | 2 +- forge-gui/res/cardsfolder/r/road_ruin.txt | 2 +- forge-gui/res/cardsfolder/r/roamers_routine.txt | 2 +- forge-gui/res/cardsfolder/r/rocky_tar_pit.txt | 2 +- forge-gui/res/cardsfolder/r/roiling_regrowth.txt | 2 +- forge-gui/res/cardsfolder/r/ruin_in_their_wake.txt | 2 +- .../res/cardsfolder/rebalanced/a-ominous_parcel.txt | 2 +- .../cardsfolder/rebalanced/a-scout_the_wilderness.txt | 2 +- forge-gui/res/cardsfolder/s/safewright_quest.txt | 2 +- .../res/cardsfolder/s/sagu_wildling_roost_seek.txt | 2 +- forge-gui/res/cardsfolder/s/sakura_tribe_elder.txt | 2 +- forge-gui/res/cardsfolder/s/samut_the_tested.txt | 6 +++--- forge-gui/res/cardsfolder/s/sandworm.txt | 2 +- forge-gui/res/cardsfolder/s/sarkhans_triumph.txt | 2 +- forge-gui/res/cardsfolder/s/scalding_tarn.txt | 2 +- forge-gui/res/cardsfolder/s/scholarship_sponsor.txt | 2 +- forge-gui/res/cardsfolder/s/scout_the_wilderness.txt | 2 +- forge-gui/res/cardsfolder/s/scouting_trek.txt | 2 +- forge-gui/res/cardsfolder/s/scrapyard_recombiner.txt | 2 +- forge-gui/res/cardsfolder/s/seahunter.txt | 2 +- forge-gui/res/cardsfolder/s/search_for_tomorrow.txt | 2 +- forge-gui/res/cardsfolder/s/seek_the_horizon.txt | 2 +- forge-gui/res/cardsfolder/s/seething_landscape.txt | 2 +- forge-gui/res/cardsfolder/s/settle_the_wreckage.txt | 2 +- forge-gui/res/cardsfolder/s/shadow_rite_priest.txt | 2 +- forge-gui/res/cardsfolder/s/shattered_landscape.txt | 2 +- forge-gui/res/cardsfolder/s/sheltering_landscape.txt | 2 +- forge-gui/res/cardsfolder/s/shire_terrace.txt | 2 +- forge-gui/res/cardsfolder/s/silkwing_scout.txt | 2 +- forge-gui/res/cardsfolder/s/silverglade_pathfinder.txt | 2 +- forge-gui/res/cardsfolder/s/skittering_surveyor.txt | 2 +- forge-gui/res/cardsfolder/s/skyshroud_poacher.txt | 2 +- forge-gui/res/cardsfolder/s/solemn_simulacrum.txt | 2 +- forge-gui/res/cardsfolder/s/solve_the_equation.txt | 2 +- forge-gui/res/cardsfolder/s/spider_bot.txt | 2 +- .../cardsfolder/s/spider_man_brooklyn_visionary.txt | 2 +- forge-gui/res/cardsfolder/s/spineseeker_centipede.txt | 2 +- forge-gui/res/cardsfolder/s/sporocyst.txt | 2 +- forge-gui/res/cardsfolder/s/spring_mind.txt | 2 +- forge-gui/res/cardsfolder/s/springbloom_druid.txt | 2 +- forge-gui/res/cardsfolder/s/sprouting_vines.txt | 2 +- forge-gui/res/cardsfolder/s/subway_train.txt | 2 +- forge-gui/res/cardsfolder/s/sultai_monument.txt | 2 +- forge-gui/res/cardsfolder/s/summon_fenrir.txt | 2 +- .../s/sundering_eruption_volcanic_fissure.txt | 2 +- forge-gui/res/cardsfolder/s/supply_demand.txt | 2 +- forge-gui/res/cardsfolder/s/surveyors_scope.txt | 2 +- .../res/cardsfolder/s/sutina_speaker_of_the_tajuru.txt | 2 +- .../res/cardsfolder/s/sword_of_hearth_and_home.txt | 2 +- forge-gui/res/cardsfolder/s/sword_of_the_animist.txt | 2 +- forge-gui/res/cardsfolder/s/sylvan_ranger.txt | 2 +- forge-gui/res/cardsfolder/t/temur_monument.txt | 2 +- forge-gui/res/cardsfolder/t/terminal_moraine.txt | 2 +- forge-gui/res/cardsfolder/t/terramorph.txt | 2 +- forge-gui/res/cardsfolder/t/terramorphic_expanse.txt | 2 +- .../t/thaumatic_compass_spires_of_orazca.txt | 2 +- forge-gui/res/cardsfolder/t/thawing_glaciers.txt | 2 +- forge-gui/res/cardsfolder/t/the_weatherseed_treaty.txt | 2 +- forge-gui/res/cardsfolder/t/they_went_this_way.txt | 2 +- forge-gui/res/cardsfolder/t/thirsting_roots.txt | 2 +- .../res/cardsfolder/t/threats_around_every_corner.txt | 2 +- forge-gui/res/cardsfolder/t/thunderherd_migration.txt | 2 +- forge-gui/res/cardsfolder/t/time_of_need.txt | 2 +- forge-gui/res/cardsfolder/t/topiary_stomper.txt | 2 +- forge-gui/res/cardsfolder/t/trail_of_mystery.txt | 2 +- forge-gui/res/cardsfolder/t/tranquil_landscape.txt | 2 +- .../res/cardsfolder/t/travel_through_caradhras.txt | 2 +- forge-gui/res/cardsfolder/t/travelers_amulet.txt | 2 +- forge-gui/res/cardsfolder/t/traverse_the_outlands.txt | 2 +- forge-gui/res/cardsfolder/t/traverse_the_ulvenwald.txt | 2 +- forge-gui/res/cardsfolder/t/twisted_landscape.txt | 2 +- forge-gui/res/cardsfolder/u/undercity.txt | 2 +- forge-gui/res/cardsfolder/u/unmarked_grave.txt | 2 +- forge-gui/res/cardsfolder/u/untamed_wilds.txt | 2 +- forge-gui/res/cardsfolder/v/vastwood_surge.txt | 2 +- forge-gui/res/cardsfolder/v/verdant_catacombs.txt | 2 +- forge-gui/res/cardsfolder/v/verdant_confluence.txt | 2 +- forge-gui/res/cardsfolder/v/verdant_crescendo.txt | 2 +- forge-gui/res/cardsfolder/v/verdant_mastery.txt | 2 +- forge-gui/res/cardsfolder/v/veteran_explorer.txt | 2 +- forge-gui/res/cardsfolder/v/vibrant_cityscape.txt | 2 +- .../res/cardsfolder/v/viewpoint_synchronization.txt | 2 +- forge-gui/res/cardsfolder/v/viridian_emissary.txt | 2 +- forge-gui/res/cardsfolder/v/volatile_fault.txt | 2 +- forge-gui/res/cardsfolder/w/wanderers_twig.txt | 2 +- forge-gui/res/cardsfolder/w/warped_landscape.txt | 2 +- forge-gui/res/cardsfolder/w/wave_of_vitriol.txt | 2 +- forge-gui/res/cardsfolder/w/wayfarers_bauble.txt | 2 +- forge-gui/res/cardsfolder/w/weird_harvest.txt | 2 +- forge-gui/res/cardsfolder/w/white_orchid_phantom.txt | 2 +- forge-gui/res/cardsfolder/w/wild_crocodile.txt | 2 +- forge-gui/res/cardsfolder/w/wild_endeavor.txt | 2 +- forge-gui/res/cardsfolder/w/wild_field_scarecrow.txt | 2 +- forge-gui/res/cardsfolder/w/wild_wanderer.txt | 2 +- forge-gui/res/cardsfolder/w/winds_of_abandon.txt | 2 +- forge-gui/res/cardsfolder/w/windswept_heath.txt | 2 +- forge-gui/res/cardsfolder/w/wooded_foothills.txt | 2 +- forge-gui/res/cardsfolder/w/woodland_investigation.txt | 2 +- forge-gui/res/cardsfolder/w/world_map.txt | 2 +- forge-gui/res/cardsfolder/y/yavimaya_elder.txt | 2 +- forge-gui/res/cardsfolder/y/yavimaya_granger.txt | 2 +- forge-gui/res/cardsfolder/y/you_happen_on_a_glade.txt | 2 +- forge-gui/res/tokenscripts/c_a_lander_sac_search.txt | 2 +- 307 files changed, 320 insertions(+), 315 deletions(-) diff --git a/forge-game/src/main/java/forge/game/CardTraitBase.java b/forge-game/src/main/java/forge/game/CardTraitBase.java index f707f2b0aea..4d84640e782 100644 --- a/forge-game/src/main/java/forge/game/CardTraitBase.java +++ b/forge-game/src/main/java/forge/game/CardTraitBase.java @@ -62,7 +62,9 @@ public abstract class CardTraitBase extends GameObject implements IHasCardView, /** Keys of descriptive (text) parameters. */ private static final ImmutableList descriptiveKeys = ImmutableList.builder() - .add("Description", "SpellDescription", "StackDescription", "TriggerDescription").build(); + .add("Description", "SpellDescription", "StackDescription", "TriggerDescription") + .add("ChangeTypeDesc") + .build(); /** * Keys that should not changed diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java index 948d3a23bda..d2ef0a58164 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java @@ -31,6 +31,7 @@ import org.apache.commons.lang3.tuple.Pair; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; public class ChangeZoneEffect extends SpellAbilityEffect { @@ -103,6 +104,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect { } final String destination = sa.getParam("Destination"); + final int num = sa.hasParam("ChangeNum") ? AbilityUtils.calculateAmount(host, sa.getParam("ChangeNum"), sa) : 1; String type = "card"; boolean defined = false; if (sa.hasParam("ChangeTypeDesc")) { @@ -117,12 +119,11 @@ public class ChangeZoneEffect extends SpellAbilityEffect { type = Lang.joinHomogenous(tgts); defined = true; } else if (sa.hasParam("ChangeType") && !sa.getParam("ChangeType").equals("Card")) { - final String ct = sa.getParam("ChangeType"); - type = CardType.CoreType.isValidEnum(ct) ? ct.toLowerCase() : ct; + List typeList = Arrays.stream(sa.getParam("ChangeType").split(",")).map(ct -> CardType.isACardType(ct) ? ct.toLowerCase() : ct).collect(Collectors.toList()); + type = Lang.joinHomogenous(typeList, null, num == 1 ? "or" : "and/or"); } final String cardTag = type.contains("card") ? "" : " card"; - final int num = sa.hasParam("ChangeNum") ? AbilityUtils.calculateAmount(host, sa.getParam("ChangeNum"), sa) : 1; boolean tapped = sa.hasParam("Tapped"); boolean attacking = sa.hasParam("Attacking"); if (sa.isNinjutsu()) { @@ -152,6 +153,9 @@ public class ChangeZoneEffect extends SpellAbilityEffect { } else { sb.append(" for "); } + if (num != 1) { + sb.append(" up to "); + } sb.append(Lang.nounWithNumeralExceptOne(num, type + cardTag)).append(", "); if (!sa.hasParam("NoReveal") && ZoneType.smartValueOf(destination) != null && ZoneType.smartValueOf(destination).isHidden()) { if (choosers.size() == 1) { diff --git a/forge-gui/res/cardsfolder/a/aangs_journey.txt b/forge-gui/res/cardsfolder/a/aangs_journey.txt index 160b3dc006a..2766c7431d6 100644 --- a/forge-gui/res/cardsfolder/a/aangs_journey.txt +++ b/forge-gui/res/cardsfolder/a/aangs_journey.txt @@ -2,8 +2,8 @@ Name:Aang's Journey ManaCost:2 Types:Sorcery Lesson K:Kicker:2 -A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ0 | SubAbility$ DBChangeZone | SpellDescription$ Search your library for a basic land card. If this spell was kicked, instead search your library for a basic land card and a Shrine card. Reveal those cards, put them into your hand, then shuffle. You gain 2 life. -SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ EACH Land.Basic & Shrine | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ1 | SubAbility$ DBGainLife +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ0 | SubAbility$ DBChangeZone | SpellDescription$ Search your library for a basic land card. If this spell was kicked, instead search your library for a basic land card and a Shrine card. Reveal those cards, put them into your hand, then shuffle. You gain 2 life. +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ EACH Land.Basic & Shrine | ChangeTypeDesc$ basic land card and a Shrine card | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ1 | SubAbility$ DBGainLife SVar:DBGainLife:DB$ GainLife | LifeAmount$ 2 SVar:X:Count$TimesKicked Oracle:Kicker {2} (You may pay an additional {2} as you cast this spell.)\nSearch your library for a basic land card. If this spell was kicked, instead search your library for a basic land card and a Shrine card. Reveal those cards, put them into your hand, then shuffle.\nYou gain 2 life. diff --git a/forge-gui/res/cardsfolder/a/abzan_monument.txt b/forge-gui/res/cardsfolder/a/abzan_monument.txt index 9a098358311..d328c9cc84e 100644 --- a/forge-gui/res/cardsfolder/a/abzan_monument.txt +++ b/forge-gui/res/cardsfolder/a/abzan_monument.txt @@ -2,7 +2,7 @@ Name:Abzan Monument ManaCost:2 Types:Artifact T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When this artifact enters, search your library for a basic Plains, Swamp, or Forest card, reveal it, put it into your hand, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Plains+Basic,Land.Swamp+Basic,Land.Forest+Basic +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Plains.Basic,Swamp.Basic,Forest.Basic | ChangeTypeDesc$ basic Plains, Swamp, or Forest A:AB$ Token | Cost$ 1 W B G T Sac<1/CARDNAME> | TokenAmount$ 1 | TokenPower$ X | TokenToughness$ X | TokenScript$ w_x_x_spirit | TokenOwner$ You | SorcerySpeed$ True | SpellDescription$ Create an X/X white Spirit creature token, where X is the greatest toughness among creatures you control. Activate only as a sorcery. SVar:X:Count$Valid Creature.YouCtrl$GreatestToughness DeckHas:Ability$Token diff --git a/forge-gui/res/cardsfolder/a/ainok_guide.txt b/forge-gui/res/cardsfolder/a/ainok_guide.txt index 5584544da28..8733314caf3 100644 --- a/forge-gui/res/cardsfolder/a/ainok_guide.txt +++ b/forge-gui/res/cardsfolder/a/ainok_guide.txt @@ -5,6 +5,6 @@ PT:1/1 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigCharm | TriggerDescription$ When CARDNAME enters, ABILITY SVar:TrigCharm:DB$ Charm | Choices$ DBCounter,DBSearch SVar:DBCounter:DB$ PutCounter | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Put a +1/+1 counter on CARDNAME. -SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Library | LibraryPosition$ 0 | ChangeType$ Land.Basic | SpellDescription$ Search your library for a basic land card, reveal it, then shuffle and put that card on top. +SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Library | LibraryPosition$ 0 | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, reveal it, then shuffle and put that card on top. DeckHas:Ability$Counters Oracle:When Ainok Guide enters, choose one —\n• Put a +1/+1 counter on Ainok Guide.\n• Search your library for a basic land card, reveal it, then shuffle and put that card on top. diff --git a/forge-gui/res/cardsfolder/a/analyze_the_pollen.txt b/forge-gui/res/cardsfolder/a/analyze_the_pollen.txt index a8daf21e612..55d24cbae5b 100644 --- a/forge-gui/res/cardsfolder/a/analyze_the_pollen.txt +++ b/forge-gui/res/cardsfolder/a/analyze_the_pollen.txt @@ -2,7 +2,7 @@ Name:Analyze the Pollen ManaCost:G Types:Sorcery S:Mode$ OptionalCost | EffectZone$ All | ValidCard$ Card.Self | ValidSA$ Spell | Cost$ CollectEvidence<8> | Description$ As an additional cost to cast this spell, you may collect evidence 8. (Exile cards with total mana value 8 or greater from your graveyard.) -A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ConditionDefined$ Collected | ConditionPresent$ Card | ConditionCompare$ EQ0 | ChangeType$ Land.Basic | ChangeNum$ 1 | SubAbility$ DBChangeZone | SpellDescription$ Search your library for a basic land card. If evidence was collected, instead search your library for a creature or land card. Reveal that card, put it into your hand, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ConditionDefined$ Collected | ConditionPresent$ Card | ConditionCompare$ EQ0 | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SubAbility$ DBChangeZone | SpellDescription$ Search your library for a basic land card. If evidence was collected, instead search your library for a creature or land card. Reveal that card, put it into your hand, then shuffle. SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land,Creature | ChangeNum$ 1 | ConditionDefined$ Collected | ConditionPresent$ Card DeckHints:Ability$Graveyard|Discard|Dredge|Mill Oracle:As an additional cost to cast this spell, you may collect evidence 8. (Exile cards with total mana value 8 or greater from your graveyard.)\nSearch your library for a basic land card. If evidence was collected, instead search your library for a creature or land card. Reveal that card, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/a/anchor_to_reality.txt b/forge-gui/res/cardsfolder/a/anchor_to_reality.txt index 0c7da6ef690..82f76244f1d 100644 --- a/forge-gui/res/cardsfolder/a/anchor_to_reality.txt +++ b/forge-gui/res/cardsfolder/a/anchor_to_reality.txt @@ -1,7 +1,7 @@ Name:Anchor to Reality ManaCost:2 U U Types:Sorcery -A:SP$ ChangeZone | Cost$ 2 U U Sac<1/Artifact;Creature/artifact or creature> | Origin$ Library | Destination$ Battlefield | ChangeType$ Equipment,Vehicle | ChangeTypeDesc$ Equipment or Vehicle card | ChangeNum$ 1 | RememberChanged$ True | SubAbility$ DBScry | SpellDescription$ Search your library for an Equipment or Vehicle card, put that card onto the battlefield, then shuffle. +A:SP$ ChangeZone | Cost$ 2 U U Sac<1/Artifact;Creature/artifact or creature> | Origin$ Library | Destination$ Battlefield | ChangeType$ Equipment,Vehicle | RememberChanged$ True | SubAbility$ DBScry | SpellDescription$ Search your library for an Equipment or Vehicle card, put that card onto the battlefield, then shuffle. SVar:DBScry:DB$ Scry | ConditionDefined$ Remembered | ConditionPresent$ Card | ScryNum$ X | SubAbility$ DBCleanup | SpellDescription$ If it has mana value less than the sacrificed permanent's mana value, scry 2. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Count$Compare Y LTZ.2.0 diff --git a/forge-gui/res/cardsfolder/a/armillary_sphere.txt b/forge-gui/res/cardsfolder/a/armillary_sphere.txt index 492127ba6f4..4d173118d17 100644 --- a/forge-gui/res/cardsfolder/a/armillary_sphere.txt +++ b/forge-gui/res/cardsfolder/a/armillary_sphere.txt @@ -1,5 +1,5 @@ Name:Armillary Sphere ManaCost:2 Types:Artifact -A:AB$ ChangeZone | Cost$ 2 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 2 | SpellDescription$ Search your library for up to two basic land cards, reveal them, put them into your hand, then shuffle. +A:AB$ ChangeZone | Cost$ 2 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 | SpellDescription$ Search your library for up to two basic land cards, reveal them, put them into your hand, then shuffle. Oracle:{2}, {T}, Sacrifice Armillary Sphere: Search your library for up to two basic land cards, reveal them, put them into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/a/assassins_trophy.txt b/forge-gui/res/cardsfolder/a/assassins_trophy.txt index 3c0683f5a46..cca766e449d 100644 --- a/forge-gui/res/cardsfolder/a/assassins_trophy.txt +++ b/forge-gui/res/cardsfolder/a/assassins_trophy.txt @@ -2,5 +2,5 @@ Name:Assassin's Trophy ManaCost:B G Types:Instant A:SP$ Destroy | ValidTgts$ Permanent.OppCtrl | AITgts$ Permanent.nonLand,Land.nonBasic | TgtPrompt$ Select target permanent an opponent controls | SubAbility$ DBChange | SpellDescription$ Destroy target permanent an opponent controls. Its controller may search their library for a basic land card, put it onto the battlefield, then shuffle. -SVar:DBChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | DefinedPlayer$ TargetedController | ShuffleNonMandatory$ True +SVar:DBChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | DefinedPlayer$ TargetedController | ShuffleNonMandatory$ True Oracle:Destroy target permanent an opponent controls. Its controller may search their library for a basic land card, put it onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/a/atalan_jackal.txt b/forge-gui/res/cardsfolder/a/atalan_jackal.txt index f83d9b42e5d..4a18df48eba 100644 --- a/forge-gui/res/cardsfolder/a/atalan_jackal.txt +++ b/forge-gui/res/cardsfolder/a/atalan_jackal.txt @@ -5,5 +5,5 @@ PT:2/2 K:Trample K:Haste T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | TriggerZones$ Battlefield | Execute$ TrigSearch | CombatDamage$ True | OptionalDecider$ You | TriggerDescription$ Skilled Outrider — Whenever CARDNAME deals combat damage to a player, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 +SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land Oracle:Trample, haste\nSkilled Outrider — Whenever Atalan Jackal deals combat damage to a player, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/a/attune_with_aether.txt b/forge-gui/res/cardsfolder/a/attune_with_aether.txt index 9ffce915781..e5f92d54ef6 100644 --- a/forge-gui/res/cardsfolder/a/attune_with_aether.txt +++ b/forge-gui/res/cardsfolder/a/attune_with_aether.txt @@ -1,6 +1,6 @@ Name:Attune with Aether ManaCost:G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | SubAbility$ DBEnergy | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. You get {E}{E} (two energy counters). +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SubAbility$ DBEnergy | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. You get {E}{E} (two energy counters). SVar:DBEnergy:DB$ PutCounter | Defined$ You | CounterType$ ENERGY | CounterNum$ 2 Oracle:Search your library for a basic land card, reveal it, put it into your hand, then shuffle. You get {E}{E} (two energy counters). diff --git a/forge-gui/res/cardsfolder/a/avatar_of_growth.txt b/forge-gui/res/cardsfolder/a/avatar_of_growth.txt index 66acf4c56be..cc9adb68f04 100644 --- a/forge-gui/res/cardsfolder/a/avatar_of_growth.txt +++ b/forge-gui/res/cardsfolder/a/avatar_of_growth.txt @@ -5,6 +5,6 @@ PT:4/4 K:Trample S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ X | EffectZone$ All | Description$ Trample T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSearch | TriggerDescription$ When CARDNAME enters, each player searches their library for up to two basic land cards, puts them onto the battlefield, then shuffles. -SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | DefinedPlayer$ Player | ChangeNum$ 2 | Shuffle$ True +SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | DefinedPlayer$ Player | ChangeNum$ 2 | Shuffle$ True SVar:X:PlayerCountOpponents$Amount Oracle:This spell costs {1} less to cast for each opponent you have.\nTrample\nWhen Avatar of Growth enters, each player searches their library for up to two basic land cards, puts them onto the battlefield, then shuffles. diff --git a/forge-gui/res/cardsfolder/b/bad_river.txt b/forge-gui/res/cardsfolder/b/bad_river.txt index 2a72590f0b2..fb59485d270 100644 --- a/forge-gui/res/cardsfolder/b/bad_river.txt +++ b/forge-gui/res/cardsfolder/b/bad_river.txt @@ -3,5 +3,5 @@ ManaCost:no cost Types:Land R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementResult$ Updated | ReplaceWith$ ETBTapped | Description$ CARDNAME enters tapped. SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True -A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Island,Swamp | ChangeNum$ 1 | SpellDescription$ Search your library for an Island or Swamp card, put it onto the battlefield, then shuffle. +A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Island,Swamp | SpellDescription$ Search your library for an Island or Swamp card, put it onto the battlefield, then shuffle. Oracle:Bad River enters tapped.\n{T}, Sacrifice Bad River: Search your library for an Island or Swamp card, put it onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/b/bant_panorama.txt b/forge-gui/res/cardsfolder/b/bant_panorama.txt index 5daf89d4ec4..a09855b7170 100644 --- a/forge-gui/res/cardsfolder/b/bant_panorama.txt +++ b/forge-gui/res/cardsfolder/b/bant_panorama.txt @@ -2,5 +2,5 @@ Name:Bant Panorama ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. -A:AB$ ChangeZone | Cost$ 1 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Forest+Basic,Land.Plains+Basic,Land.Island+Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic Forest, Plains, or Island card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ 1 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Forest.Basic,Plains.Basic,Island.Basic | ChangeTypeDesc$ basic Forest, Plains, or Island | SpellDescription$ Search your library for a basic Forest, Plains, or Island card, put it onto the battlefield tapped, then shuffle. Oracle:{T}: Add {C}.\n{1}, {T}, Sacrifice Bant Panorama: Search your library for a basic Forest, Plains, or Island card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/b/beanstalk_giant_fertile_footsteps.txt b/forge-gui/res/cardsfolder/b/beanstalk_giant_fertile_footsteps.txt index 2595f2063b8..21a1ca529e0 100644 --- a/forge-gui/res/cardsfolder/b/beanstalk_giant_fertile_footsteps.txt +++ b/forge-gui/res/cardsfolder/b/beanstalk_giant_fertile_footsteps.txt @@ -12,5 +12,5 @@ ALTERNATE Name:Fertile Footsteps ManaCost:2 G Types:Sorcery Adventure -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put it onto the battlefield, then shuffle. (Then exile this card. You may cast the creature later from exile.) +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, put it onto the battlefield, then shuffle. (Then exile this card. You may cast the creature later from exile.) Oracle:Search your library for a basic land card, put it onto the battlefield, then shuffle. (Then exile this card. You may cast the creature later from exile.) diff --git a/forge-gui/res/cardsfolder/b/beneath_the_sands.txt b/forge-gui/res/cardsfolder/b/beneath_the_sands.txt index c9b45dc14be..acccfbfb97b 100644 --- a/forge-gui/res/cardsfolder/b/beneath_the_sands.txt +++ b/forge-gui/res/cardsfolder/b/beneath_the_sands.txt @@ -1,6 +1,6 @@ Name:Beneath the Sands ManaCost:2 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. K:Cycling:2 Oracle:Search your library for a basic land card, put it onto the battlefield tapped, then shuffle.\nCycling {2} ({2}, Discard this card: Draw a card.) diff --git a/forge-gui/res/cardsfolder/b/bitterthorn_nissas_animus.txt b/forge-gui/res/cardsfolder/b/bitterthorn_nissas_animus.txt index 1ff84d6e33d..f46c48d1a78 100644 --- a/forge-gui/res/cardsfolder/b/bitterthorn_nissas_animus.txt +++ b/forge-gui/res/cardsfolder/b/bitterthorn_nissas_animus.txt @@ -5,7 +5,7 @@ K:Living Weapon K:Equip:3 S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 1 | AddToughness$ 1 | Description$ Equipped creature gets +1/+1. T:Mode$ Attacks | ValidCard$ Creature.EquippedBy | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ Whenever equipped creature attacks, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | Tapped$ True | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ShuffleNonMandatory$ True S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddSVar$ AE SVar:AE:SVar:HasAttackEffect:TRUE DeckHas:Ability$Token & Type$Germ|Phyrexian diff --git a/forge-gui/res/cardsfolder/b/blighted_woodland.txt b/forge-gui/res/cardsfolder/b/blighted_woodland.txt index e26fc88f742..679f0fc48e8 100644 --- a/forge-gui/res/cardsfolder/b/blighted_woodland.txt +++ b/forge-gui/res/cardsfolder/b/blighted_woodland.txt @@ -2,7 +2,7 @@ Name:Blighted Woodland ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. -A:AB$ ChangeZone | Cost$ 3 G T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 2 | SpellDescription$ Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ 3 G T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 | SpellDescription$ Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. DeckHas:Ability$Mana.Colorless DeckNeeds:Color$Green Oracle:{T}: Add {C}.\n{3}{G}, {T}, Sacrifice Blighted Woodland: Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/b/bloodstained_mire.txt b/forge-gui/res/cardsfolder/b/bloodstained_mire.txt index e0a517c1d9f..990998d5125 100644 --- a/forge-gui/res/cardsfolder/b/bloodstained_mire.txt +++ b/forge-gui/res/cardsfolder/b/bloodstained_mire.txt @@ -1,5 +1,5 @@ Name:Bloodstained Mire ManaCost:no cost Types:Land -A:AB$ ChangeZone | Cost$ T PayLife<1> Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Swamp,Mountain | ChangeNum$ 1 | SpellDescription$ Search your library for a Swamp or Mountain card, put it onto the battlefield, then shuffle. +A:AB$ ChangeZone | Cost$ T PayLife<1> Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Swamp,Mountain | SpellDescription$ Search your library for a Swamp or Mountain card, put it onto the battlefield, then shuffle. Oracle:{T}, Pay 1 life, Sacrifice Bloodstained Mire: Search your library for a Swamp or Mountain card, put it onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/b/bloomvine_regent_claim_territory.txt b/forge-gui/res/cardsfolder/b/bloomvine_regent_claim_territory.txt index 8cb3e6667fe..bc1d52ee98c 100644 --- a/forge-gui/res/cardsfolder/b/bloomvine_regent_claim_territory.txt +++ b/forge-gui/res/cardsfolder/b/bloomvine_regent_claim_territory.txt @@ -13,7 +13,7 @@ ALTERNATE Name:Claim Territory ManaCost:2 G Types:Sorcery Omen -A:SP$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Forest.Basic | ChangeNum$ 2 | RememberChanged$ True | Reveal$ True | Shuffle$ False | StackDescription$ SpellDescription | SubAbility$ DBChangeZone1 | SpellDescription$ Search your library for up to two basic Forest cards, reveal them, put one onto the battlefield tapped and the other into your hand, then shuffle. (Also shuffle this card.) +A:SP$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Forest.Basic | ChangeTypeDesc$ basic Forest | ChangeNum$ 2 | RememberChanged$ True | Reveal$ True | Shuffle$ False | StackDescription$ SpellDescription | SubAbility$ DBChangeZone1 | SpellDescription$ Search your library for up to two basic Forest cards, reveal them, put one onto the battlefield tapped and the other into your hand, then shuffle. (Also shuffle this card.) SVar:DBChangeZone1:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.IsRemembered | Mandatory$ True | NoLooking$ True | SelectPrompt$ Select a card to put onto the battlefield | Tapped$ True | Shuffle$ False | SubAbility$ DBChangeZone2 | StackDescription$ None SVar:DBChangeZone2:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.IsRemembered | Mandatory$ True | NoLooking$ True | StackDescription$ None | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/b/borderland_explorer.txt b/forge-gui/res/cardsfolder/b/borderland_explorer.txt index 3317a6cdd73..b8634b348b5 100644 --- a/forge-gui/res/cardsfolder/b/borderland_explorer.txt +++ b/forge-gui/res/cardsfolder/b/borderland_explorer.txt @@ -7,7 +7,7 @@ SVar:TrigChoose:DB$ GenericChoice | TempRemember$ Chooser | ShowChoice$ ExceptSe SVar:Discard:DB$ Pump | Defined$ Remembered | NoteCards$ Self | NoteCardsFor$ Discard | SpellDescription$ Discard a card. SVar:No:DB$ Pump | SpellDescription$ Do not discard a card. SVar:DBDiscard:DB$ Discard | Defined$ Player.NotedForDiscard | Mode$ TgtChoose | RememberDiscarded$ True | SubAbility$ DBSearch -SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | DefinedPlayer$ RememberedOwner | SubAbility$ DBCleanup +SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | DefinedPlayer$ RememberedOwner | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | SubAbility$ DBClearNotes SVar:DBClearNotes:DB$ Pump | Defined$ Player | ClearNotedCardsFor$ Discard DeckHas:Ability$Discard diff --git a/forge-gui/res/cardsfolder/b/borderland_ranger.txt b/forge-gui/res/cardsfolder/b/borderland_ranger.txt index 53dded29539..e1424daa819 100644 --- a/forge-gui/res/cardsfolder/b/borderland_ranger.txt +++ b/forge-gui/res/cardsfolder/b/borderland_ranger.txt @@ -3,5 +3,5 @@ ManaCost:2 G Types:Creature Human Scout Ranger PT:2/2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True Oracle:When Borderland Ranger enters, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/b/boundless_realms.txt b/forge-gui/res/cardsfolder/b/boundless_realms.txt index c0214c85fcb..f2ddd045565 100644 --- a/forge-gui/res/cardsfolder/b/boundless_realms.txt +++ b/forge-gui/res/cardsfolder/b/boundless_realms.txt @@ -1,6 +1,6 @@ Name:Boundless Realms ManaCost:6 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ X | Tapped$ True | SpellDescription$ Search your library for X basic land cards, where X is the number of lands you control, put them onto the battlefield tapped, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ X | Tapped$ True | SpellDescription$ Search your library for X basic land cards, where X is the number of lands you control, put them onto the battlefield tapped, then shuffle. SVar:X:Count$Valid Land.YouCtrl Oracle:Search your library for up to X basic land cards, where X is the number of lands you control, put them onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/b/bountiful_landscape.txt b/forge-gui/res/cardsfolder/b/bountiful_landscape.txt index 0f37325a33f..0ab9fbe599c 100644 --- a/forge-gui/res/cardsfolder/b/bountiful_landscape.txt +++ b/forge-gui/res/cardsfolder/b/bountiful_landscape.txt @@ -2,6 +2,6 @@ Name:Bountiful Landscape ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. -A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Forest+Basic,Land.Island+Basic,Land.Mountain+Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic Forest, Island, or Mountain card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Forest.Basic,Island.Basic,Mountain.Basic | ChangeTypeDesc$ basic Forest, Island, or Mountain | SpellDescription$ Search your library for a basic Forest, Island, or Mountain card, put it onto the battlefield tapped, then shuffle. K:Cycling:G U R Oracle:{T}: Add {C}.\n{T}, Sacrifice Bountiful Landscape: Search your library for a basic Forest, Island, or Mountain card, put it onto the battlefield tapped, then shuffle.\nCycling {G}{U}{R} ({G}{U}{R}, Discard this card: Draw a card.) diff --git a/forge-gui/res/cardsfolder/b/braidwood_sextant.txt b/forge-gui/res/cardsfolder/b/braidwood_sextant.txt index fdd8bb376e8..5ce8628811d 100644 --- a/forge-gui/res/cardsfolder/b/braidwood_sextant.txt +++ b/forge-gui/res/cardsfolder/b/braidwood_sextant.txt @@ -1,5 +1,5 @@ Name:Braidwood Sextant ManaCost:1 Types:Artifact -A:AB$ ChangeZone | Cost$ 2 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, reveal that card, put it into your hand, then shuffle. +A:AB$ ChangeZone | Cost$ 2 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, reveal that card, put it into your hand, then shuffle. Oracle:{2}, {T}, Sacrifice Braidwood Sextant: Search your library for a basic land card, reveal that card, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/b/brave_the_wilds.txt b/forge-gui/res/cardsfolder/b/brave_the_wilds.txt index aaf01d66563..9ba9962a721 100644 --- a/forge-gui/res/cardsfolder/b/brave_the_wilds.txt +++ b/forge-gui/res/cardsfolder/b/brave_the_wilds.txt @@ -3,7 +3,7 @@ ManaCost:G Types:Sorcery K:Bargain A:SP$ Animate | ValidTgts$ Land.YouCtrl | TargetMin$ X | TargetMax$ X | TgtPrompt$ Select target land you control | Power$ 3 | Toughness$ 3 | Types$ Creature,Elemental | Duration$ Permanent | SubAbility$ DBChangeZone | Condition$ Bargain | Keywords$ Haste | SpellDescription$ If this spell was bargained, target land you control becomes a 3/3 Elemental creature with haste that's still a land. -SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. SVar:X:Count$Bargained.1.0 DeckHints:Type$Artifact|Enchantment & Ability$Token DeckHas:Ability$Sacrifice & Type$Elemental diff --git a/forge-gui/res/cardsfolder/b/brokers_hideout.txt b/forge-gui/res/cardsfolder/b/brokers_hideout.txt index a0d7090667a..63020480f2c 100644 --- a/forge-gui/res/cardsfolder/b/brokers_hideout.txt +++ b/forge-gui/res/cardsfolder/b/brokers_hideout.txt @@ -4,7 +4,7 @@ Types:Land T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBSacrifice | TriggerDescription$ When CARDNAME enters, sacrifice it. When you do, search your library for a basic Forest, Plains, or Island card, put it onto the battlefield tapped, then shuffle and you gain 1 life. SVar:DBSacrifice:DB$ Sacrifice | Defined$ Self | RememberSacrificed$ True | SubAbility$ DBImmediateTrigger SVar:DBImmediateTrigger:DB$ ImmediateTrigger | ConditionDefined$ Remembered | ConditionPresent$ Card | Execute$ DBChangeZone | SubAbility$ DBCleanup | TriggerDescription$ Search your library for a basic Forest, Plains, or Island card, put it onto the battlefield tapped, then shuffle and you gain 1 life. -SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Forest+Basic,Land.Plains+Basic,Land.Island+Basic | ChangeNum$ 1 | SubAbility$ DBGainLife +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Forest.Basic,Plains.Basic,Island.Basic | ChangeTypeDesc$ basic Forest, Plains, or Island | SubAbility$ DBGainLife SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1 SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Sacrifice|LifeGain diff --git a/forge-gui/res/cardsfolder/b/burnished_hart.txt b/forge-gui/res/cardsfolder/b/burnished_hart.txt index 7abe85f1b23..986c995bb44 100644 --- a/forge-gui/res/cardsfolder/b/burnished_hart.txt +++ b/forge-gui/res/cardsfolder/b/burnished_hart.txt @@ -2,5 +2,5 @@ Name:Burnished Hart ManaCost:3 Types:Artifact Creature Elk PT:2/2 -A:AB$ ChangeZone | Cost$ 3 Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 2 | Tapped$ True | SpellDescription$ Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ 3 Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 | Tapped$ True | SpellDescription$ Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. Oracle:{3}, Sacrifice Burnished Hart: Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/b/bushwhack.txt b/forge-gui/res/cardsfolder/b/bushwhack.txt index d1659b41e0c..8e9b441bc71 100644 --- a/forge-gui/res/cardsfolder/b/bushwhack.txt +++ b/forge-gui/res/cardsfolder/b/bushwhack.txt @@ -2,7 +2,7 @@ Name:Bushwhack ManaCost:G Types:Sorcery A:SP$ Charm | Choices$ FetchBasic,Fight -SVar:FetchBasic:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. +SVar:FetchBasic:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. SVar:Fight:DB$ Pump | AILogic$ Fight | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Choose target creature you control | SubAbility$ DBFight | SpellDescription$ Target creature you control fights target creature you don't control. SVar:DBFight:DB$ Fight | Defined$ ParentTarget | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Choose target creature you don't control Oracle:Choose one —\n• Search your library for a basic land card, reveal it, put it into your hand, then shuffle.\n• Target creature you control fights target creature you don't control. (Each deals damage equal to its power to the other.) diff --git a/forge-gui/res/cardsfolder/c/cabaretti_courtyard.txt b/forge-gui/res/cardsfolder/c/cabaretti_courtyard.txt index 151bbed9c44..65eb5b0ca06 100644 --- a/forge-gui/res/cardsfolder/c/cabaretti_courtyard.txt +++ b/forge-gui/res/cardsfolder/c/cabaretti_courtyard.txt @@ -4,7 +4,7 @@ Types:Land T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBSacrifice | TriggerDescription$ When CARDNAME enters, sacrifice it. When you do, search your library for a basic Mountain, Forest, or Plains card, put it onto the battlefield tapped, then shuffle and you gain 1 life. SVar:DBSacrifice:DB$ Sacrifice | RememberSacrificed$ True | SubAbility$ DBImmediateTrigger SVar:DBImmediateTrigger:DB$ ImmediateTrigger | ConditionDefined$ Remembered | ConditionPresent$ Card | Execute$ DBChangeZone | SubAbility$ DBCleanup | TriggerDescription$ Search your library for a basic Mountain, Forest, or Plains card, put it onto the battlefield tapped, then shuffle and you gain 1 life. -SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Mountain+Basic,Land.Forest+Basic,Land.Plains+Basic | ChangeNum$ 1 | SubAbility$ DBGainLife +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Mountain.Basic,Forest.Basic,Plains.Basic | ChangeTypeDesc$ basic Mountain, Forest, or Plains | SubAbility$ DBGainLife SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1 SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Sacrifice|LifeGain diff --git a/forge-gui/res/cardsfolder/c/campus_guide.txt b/forge-gui/res/cardsfolder/c/campus_guide.txt index 40079635200..ae6fd598c03 100644 --- a/forge-gui/res/cardsfolder/c/campus_guide.txt +++ b/forge-gui/res/cardsfolder/c/campus_guide.txt @@ -3,5 +3,5 @@ ManaCost:2 Types:Artifact Creature Golem PT:2/1 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, you may search your library for a basic land card, reveal it, then shuffle and put that card on top. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Library | LibraryPosition$ 0 | ChangeType$ Land.Basic | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Library | LibraryPosition$ 0 | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True Oracle:When Campus Guide enters, you may search your library for a basic land card, reveal it, then shuffle and put that card on top. diff --git a/forge-gui/res/cardsfolder/c/caravan_vigil.txt b/forge-gui/res/cardsfolder/c/caravan_vigil.txt index a223a83018a..ee5396a550c 100644 --- a/forge-gui/res/cardsfolder/c/caravan_vigil.txt +++ b/forge-gui/res/cardsfolder/c/caravan_vigil.txt @@ -1,5 +1,5 @@ Name:Caravan Vigil ManaCost:G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | DestinationAlternative$ Battlefield | DestAltSVar$ Count$ThisTurnEntered_Graveyard_from_Battlefield_Creature | ChangeType$ Land.Basic | StackDescription$ SpellDescription | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle.,,,,,,Morbid — You may put that card onto the battlefield instead of putting it into your hand if a creature died this turn. +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | DestinationAlternative$ Battlefield | DestAltSVar$ Count$ThisTurnEntered_Graveyard_from_Battlefield_Creature | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | StackDescription$ SpellDescription | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle.,,,,,,Morbid — You may put that card onto the battlefield instead of putting it into your hand if a creature died this turn. Oracle:Search your library for a basic land card, reveal it, put it into your hand, then shuffle.\nMorbid — You may put that card onto the battlefield instead of putting it into your hand if a creature died this turn. diff --git a/forge-gui/res/cardsfolder/c/celebrate_the_harvest.txt b/forge-gui/res/cardsfolder/c/celebrate_the_harvest.txt index 597c7c979e0..51703eea0b1 100644 --- a/forge-gui/res/cardsfolder/c/celebrate_the_harvest.txt +++ b/forge-gui/res/cardsfolder/c/celebrate_the_harvest.txt @@ -1,6 +1,6 @@ Name:Celebrate the Harvest ManaCost:3 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ X | Tapped$ True | SelectPrompt$ Select up to X basic land cards | StackDescription$ SpellDescription | SpellDescription$ Search your library for up to X basic land cards, where X is the number of different powers among creatures you control. Put those cards onto the battlefield tapped, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ X | Tapped$ True | SelectPrompt$ Select up to X basic land cards | StackDescription$ SpellDescription | SpellDescription$ Search your library for up to X basic land cards, where X is the number of different powers among creatures you control. Put those cards onto the battlefield tapped, then shuffle. SVar:X:Count$DifferentPower_Creature.YouCtrl Oracle:Search your library for up to X basic land cards, where X is the number of different powers among creatures you control. Put those cards onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/c/centaur_rootcaster.txt b/forge-gui/res/cardsfolder/c/centaur_rootcaster.txt index 3369e75cd15..7abdbb30b30 100644 --- a/forge-gui/res/cardsfolder/c/centaur_rootcaster.txt +++ b/forge-gui/res/cardsfolder/c/centaur_rootcaster.txt @@ -3,5 +3,5 @@ ManaCost:3 G Types:Creature Centaur Druid PT:2/2 T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | Execute$ TrigChange | CombatDamage$ True | OptionalDecider$ You | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you may search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True Oracle:Whenever Centaur Rootcaster deals combat damage to a player, you may search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/c/civic_wayfinder.txt b/forge-gui/res/cardsfolder/c/civic_wayfinder.txt index 7a2c0a2e0d6..55960c76f66 100644 --- a/forge-gui/res/cardsfolder/c/civic_wayfinder.txt +++ b/forge-gui/res/cardsfolder/c/civic_wayfinder.txt @@ -3,5 +3,5 @@ ManaCost:2 G Types:Creature Elf Druid Warrior PT:2/2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True Oracle:When Civic Wayfinder enters, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/c/cleansing_wildfire.txt b/forge-gui/res/cardsfolder/c/cleansing_wildfire.txt index 30200a18783..b9adf47bce0 100644 --- a/forge-gui/res/cardsfolder/c/cleansing_wildfire.txt +++ b/forge-gui/res/cardsfolder/c/cleansing_wildfire.txt @@ -2,6 +2,6 @@ Name:Cleansing Wildfire ManaCost:1 R Types:Sorcery A:SP$ Destroy | ValidTgts$ Land | TgtPrompt$ Select target land | SubAbility$ DBChange | SpellDescription$ Destroy target land. Its controller may search their library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:DBChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ 1 | DefinedPlayer$ TargetedController | ShuffleNonMandatory$ True | SubAbility$ DBDraw | StackDescription$ Its controller may search their library for a basic land card, put it onto the battlefield tapped, then shuffle their library. +SVar:DBChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ChangeNum$ 1 | DefinedPlayer$ TargetedController | ShuffleNonMandatory$ True | SubAbility$ DBDraw | StackDescription$ Its controller may search their library for a basic land card, put it onto the battlefield tapped, then shuffle their library. SVar:DBDraw:DB$ Draw | NumCards$ 1 | SpellDescription$ Draw a card. Oracle:Destroy target land. Its controller may search their library for a basic land card, put it onto the battlefield tapped, then shuffle.\nDraw a card. diff --git a/forge-gui/res/cardsfolder/c/collective_voyage.txt b/forge-gui/res/cardsfolder/c/collective_voyage.txt index 76c99008032..ed6990b00e6 100644 --- a/forge-gui/res/cardsfolder/c/collective_voyage.txt +++ b/forge-gui/res/cardsfolder/c/collective_voyage.txt @@ -4,7 +4,7 @@ Types:Sorcery A:SP$ RepeatEach | RepeatPlayers$ Player | StartingWith$ You | RepeatSubAbility$ DBPay | SubAbility$ DBSearch | StackDescription$ SpellDescription | SpellDescription$ Join forces — Starting with you, each player may pay any amount of mana. Each player searches their library for up to X basic land cards, where X is the total amount of mana paid this way, puts them onto the battlefield tapped, then shuffles. SVar:DBPay:DB$ ChooseNumber | Defined$ Player.IsRemembered | ChooseAnyNumber$ True | ListTitle$ amount of mana to pay | SubAbility$ DBStore SVar:DBStore:DB$ StoreSVar | SVar$ JoinForcesAmount | Type$ CountSVar | Expression$ JoinForcesAmount/Plus.Y | UnlessCost$ Y | UnlessPayer$ Player.IsRemembered | UnlessSwitched$ True -SVar:DBSearch:DB$ ChangeZone | DefinedPlayer$ Player | ChangeType$ Land.Basic | ChangeNum$ JoinForcesAmount | Origin$ Library | Destination$ Battlefield | Tapped$ True | SubAbility$ DBReset | StackDescription$ None +SVar:DBSearch:DB$ ChangeZone | DefinedPlayer$ Player | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ JoinForcesAmount | Origin$ Library | Destination$ Battlefield | Tapped$ True | SubAbility$ DBReset | StackDescription$ None SVar:DBReset:DB$ StoreSVar | SVar$ JoinForcesAmount | Type$ Number | Expression$ 0 SVar:Y:Count$ChosenNumber SVar:JoinForcesAmount:Number$0 diff --git a/forge-gui/res/cardsfolder/c/coming_attraction.txt b/forge-gui/res/cardsfolder/c/coming_attraction.txt index de226a42e04..30d23397f88 100644 --- a/forge-gui/res/cardsfolder/c/coming_attraction.txt +++ b/forge-gui/res/cardsfolder/c/coming_attraction.txt @@ -1,6 +1,6 @@ Name:Coming Attraction ManaCost:2 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ 1 | SubAbility$ DBOpenAttraction | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ChangeNum$ 1 | SubAbility$ DBOpenAttraction | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. SVar:DBOpenAttraction:DB$ OpenAttraction | SpellDescription$ Open an Attraction. (Put the top card of your Attraction deck onto the battlefield.) Oracle:Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. Open an Attraction. (Put the top card of your Attraction deck onto the battlefield.) diff --git a/forge-gui/res/cardsfolder/c/contaminated_landscape.txt b/forge-gui/res/cardsfolder/c/contaminated_landscape.txt index 0cabd4643c0..f5766fee496 100644 --- a/forge-gui/res/cardsfolder/c/contaminated_landscape.txt +++ b/forge-gui/res/cardsfolder/c/contaminated_landscape.txt @@ -2,6 +2,6 @@ Name:Contaminated Landscape ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. -A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Plains+Basic,Land.Island+Basic,Land.Swamp+Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic Plains, Island, or Swamp card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Plains.Basic,Island.Basic,Swamp.Basic | ChangeTypeDesc$ basic Plains, Island, or Swamp | SpellDescription$ Search your library for a basic Plains, Island, or Swamp card, put it onto the battlefield tapped, then shuffle. K:Cycling:W U B Oracle:{T}: Add {C}.\n{T}, Sacrifice Contaminated Landscape: Search your library for a basic Plains, Island, or Swamp card, put it onto the battlefield tapped, then shuffle.\nCycling {W}{U}{B} ({W}{U}{B}, Discard this card: Draw a card.) diff --git a/forge-gui/res/cardsfolder/c/cultivate.txt b/forge-gui/res/cardsfolder/c/cultivate.txt index dc93f59004d..59f81d0da0b 100644 --- a/forge-gui/res/cardsfolder/c/cultivate.txt +++ b/forge-gui/res/cardsfolder/c/cultivate.txt @@ -1,7 +1,7 @@ Name:Cultivate ManaCost:2 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Land.Basic | ChangeNum$ 2 | RememberChanged$ True | Reveal$ True | Shuffle$ False | StackDescription$ SpellDescription | SubAbility$ DBChangeZone1 | SpellDescription$ Search your library for up to two basic land cards, reveal those cards, put one onto the battlefield tapped and the other into your hand, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 | RememberChanged$ True | Reveal$ True | Shuffle$ False | StackDescription$ SpellDescription | SubAbility$ DBChangeZone1 | SpellDescription$ Search your library for up to two basic land cards, reveal those cards, put one onto the battlefield tapped and the other into your hand, then shuffle. SVar:DBChangeZone1:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.IsRemembered | ChangeNum$ 1 | Mandatory$ True | NoLooking$ True | SelectPrompt$ Select a card to put onto the battlefield | Tapped$ True | Shuffle$ False | SubAbility$ DBChangeZone2 | StackDescription$ None SVar:DBChangeZone2:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.IsRemembered | Mandatory$ True | NoLooking$ True | SelectPrompt$ Select a card to put into your hand | StackDescription$ None | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/d/dawntreader_elk.txt b/forge-gui/res/cardsfolder/d/dawntreader_elk.txt index 46e562a72d5..fd5b73dfae4 100644 --- a/forge-gui/res/cardsfolder/d/dawntreader_elk.txt +++ b/forge-gui/res/cardsfolder/d/dawntreader_elk.txt @@ -2,5 +2,5 @@ Name:Dawntreader Elk ManaCost:1 G Types:Creature Elk PT:2/2 -A:AB$ ChangeZone | Cost$ G Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card and put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ G Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card and put it onto the battlefield tapped, then shuffle. Oracle:{G}, Sacrifice Dawntreader Elk: Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/d/deathbellow_war_cry.txt b/forge-gui/res/cardsfolder/d/deathbellow_war_cry.txt index c2efa4c6a94..3fc257fdc23 100644 --- a/forge-gui/res/cardsfolder/d/deathbellow_war_cry.txt +++ b/forge-gui/res/cardsfolder/d/deathbellow_war_cry.txt @@ -1,6 +1,6 @@ Name:Deathbellow War Cry ManaCost:5 R R R Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Creature.Minotaur | ChangeNum$ 4 | DifferentNames$ True | SpellDescription$ Search your library for up to four Minotaur creature cards with different names, put them onto the battlefield, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Creature.Minotaur | ChangeTypeDesc$ Minotaur creature | ChangeNum$ 4 | DifferentNames$ True | SpellDescription$ Search your library for up to four Minotaur creature cards with different names, put them onto the battlefield, then shuffle. DeckNeeds:Type$Minotaur Oracle:Search your library for up to four Minotaur creature cards with different names, put them onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/d/deathsprout.txt b/forge-gui/res/cardsfolder/d/deathsprout.txt index e92c0bae6b1..a75d44f89e9 100644 --- a/forge-gui/res/cardsfolder/d/deathsprout.txt +++ b/forge-gui/res/cardsfolder/d/deathsprout.txt @@ -2,5 +2,5 @@ Name:Deathsprout ManaCost:1 B B G Types:Instant A:SP$ Destroy | ValidTgts$ Creature | TgtPrompt$ Select target creature | SubAbility$ DBSearch | SpellDescription$ Destroy target creature. Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | Tapped$ True +SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True Oracle:Destroy target creature. Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/d/deceptive_landscape.txt b/forge-gui/res/cardsfolder/d/deceptive_landscape.txt index 09a7742f151..6691ccfd006 100644 --- a/forge-gui/res/cardsfolder/d/deceptive_landscape.txt +++ b/forge-gui/res/cardsfolder/d/deceptive_landscape.txt @@ -2,6 +2,6 @@ Name:Deceptive Landscape ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. -A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Plains+Basic,Land.Swamp+Basic,Land.Forest+Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic Plains, Swamp, or Forest card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Plains.Basic,Swamp.Basic,Forest.Basic | ChangeTypeDesc$ basic Plains, Swamp, or Forest | SpellDescription$ Search your library for a basic Plains, Swamp, or Forest card, put it onto the battlefield tapped, then shuffle. K:Cycling:W B G Oracle:{T}: Add {C}.\n{T}, Sacrifice Deceptive Landscape: Search your library for a basic Plains, Swamp, or Forest card, put it onto the battlefield tapped, then shuffle.\nCycling {W}{B}{G} ({W}{B}{G}, Discard this card: Draw a card.) diff --git a/forge-gui/res/cardsfolder/d/deep_reconnaissance.txt b/forge-gui/res/cardsfolder/d/deep_reconnaissance.txt index f594afa0312..46a5fdd5ee0 100644 --- a/forge-gui/res/cardsfolder/d/deep_reconnaissance.txt +++ b/forge-gui/res/cardsfolder/d/deep_reconnaissance.txt @@ -2,5 +2,5 @@ Name:Deep Reconnaissance ManaCost:2 G Types:Sorcery K:Flashback:4 G -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | Tapped$ True | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. Oracle:Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle.\nFlashback {4}{G} (You may cast this card from your graveyard for its flashback cost. Then exile it.) diff --git a/forge-gui/res/cardsfolder/d/demolition_field.txt b/forge-gui/res/cardsfolder/d/demolition_field.txt index b562926b74f..b8669e4b60d 100644 --- a/forge-gui/res/cardsfolder/d/demolition_field.txt +++ b/forge-gui/res/cardsfolder/d/demolition_field.txt @@ -3,8 +3,8 @@ ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. A:AB$ Destroy | Cost$ 2 T Sac<1/CARDNAME> | ValidTgts$ Land.nonBasic+OppCtrl | TgtPrompt$ Select target nonbasic land an opponent controls | SubAbility$ DBSearch | AILogic$ GhostQuarter | SpellDescription$ Destroy target nonbasic land an opponent controls. That land's controller may search their library for a basic land card, put it onto the battlefield, then shuffle. You may search your library for a basic land card, put it onto the battlefield, then shuffle. -SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | DefinedPlayer$ TargetedController | ChangeType$ Land.Basic | ChangeNum$ 1 | SubAbility$ DBSearchBis | StackDescription$ That land's controller may search their library for a basic land card, put it onto the battlefield, then shuffle. You may search your library for a basic land card, put it onto the battlefield, then shuffle. -SVar:DBSearchBis:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | DefinedPlayer$ You | ChangeType$ Land.Basic | ChangeNum$ 1 +SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | DefinedPlayer$ TargetedController | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SubAbility$ DBSearchBis | StackDescription$ That land's controller may search their library for a basic land card, put it onto the battlefield, then shuffle. You may search your library for a basic land card, put it onto the battlefield, then shuffle. +SVar:DBSearchBis:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | DefinedPlayer$ You | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land AI:RemoveDeck:Random DeckHas:Ability$Sacrifice Oracle:{T}: Add {C}.\n{2}, {T}, Sacrifice Demolition Field: Destroy target nonbasic land an opponent controls. That land's controller may search their library for a basic land card, put it onto the battlefield, then shuffle. You may search your library for a basic land card, put it onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/d/dig_up.txt b/forge-gui/res/cardsfolder/d/dig_up.txt index a761e641864..cb39edcb029 100644 --- a/forge-gui/res/cardsfolder/d/dig_up.txt +++ b/forge-gui/res/cardsfolder/d/dig_up.txt @@ -1,6 +1,6 @@ Name:Dig Up ManaCost:G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | StackDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. | SpellDescription$ Search your library for a [basic land] card, [reveal it,] put it into your hand, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | StackDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. | SpellDescription$ Search your library for a [basic land] card, [reveal it,] put it into your hand, then shuffle. A:SP$ ChangeZone | Cost$ 1 B B G | Origin$ Library | Destination$ Hand | ChangeType$ Card | ChangeNum$ 1 | Mandatory$ True | NoReveal$ True | PrecostDesc$ Cleave | CostDesc$ {1}{B}{B}{G} | NonBasicSpell$ True | SpellDescription$ (You may cast this spell for its cleave cost. If you do, remove the words in square brackets.) | StackDescription$ Search your library for a card, put it into your hand, then shuffle. Oracle:Cleave {1}{B}{B}{G} (You may cast this spell for its cleave cost. If you do, remove the words in square brackets.)\nSearch your library for a [basic land] card, [reveal it,] put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/d/diligent_farmhand.txt b/forge-gui/res/cardsfolder/d/diligent_farmhand.txt index 8caa48a1342..8411519dbf9 100644 --- a/forge-gui/res/cardsfolder/d/diligent_farmhand.txt +++ b/forge-gui/res/cardsfolder/d/diligent_farmhand.txt @@ -2,7 +2,7 @@ Name:Diligent Farmhand ManaCost:G Types:Creature Human Druid PT:1/1 -A:AB$ ChangeZone | Cost$ 1 G Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ 1 G Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ Graveyard | AffectedZone$ Graveyard | AddHiddenKeyword$ CARDNAME count as Muscle Burst. | Description$ If CARDNAME is in a graveyard, effects from spells named Muscle Burst count it as a card named Muscle Burst. DeckHints:Name$Diligent Farmhand|Muscle Burst Oracle:{1}{G}, Sacrifice Diligent Farmhand: Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle.\nIf Diligent Farmhand is in a graveyard, effects from spells named Muscle Burst count it as a card named Muscle Burst. diff --git a/forge-gui/res/cardsfolder/d/dire_strain_rampage.txt b/forge-gui/res/cardsfolder/d/dire_strain_rampage.txt index ab685face2e..6219e99691c 100644 --- a/forge-gui/res/cardsfolder/d/dire_strain_rampage.txt +++ b/forge-gui/res/cardsfolder/d/dire_strain_rampage.txt @@ -2,7 +2,7 @@ Name:Dire-Strain Rampage ManaCost:1 R G Types:Sorcery A:SP$ Destroy | ValidTgts$ Artifact,Enchantment,Land | TgtPrompt$ Select target artifact, enchantment, or land | RememberDestroyed$ True | SubAbility$ DBChangeZone | SpellDescription$ Destroy target artifact, enchantment, or land. If a land was destroyed this way, its controller may search their library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. Otherwise, its controller may search their library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:DBChangeZone:DB$ ChangeZone | DefinedPlayer$ TargetedController | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeNum$ X | ChangeType$ Land.Basic | Optional$ True | ShuffleNonMandatory$ True | SubAbility$ DBCleanup | StackDescription$ If a land was destroyed this way, its controller may search their library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. Otherwise, its controller may search their library for a basic land card, put it onto the battlefield tapped, then shuffle. +SVar:DBChangeZone:DB$ ChangeZone | DefinedPlayer$ TargetedController | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeNum$ X | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Optional$ True | ShuffleNonMandatory$ True | SubAbility$ DBCleanup | StackDescription$ If a land was destroyed this way, its controller may search their library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. Otherwise, its controller may search their library for a basic land card, put it onto the battlefield tapped, then shuffle. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Remembered$Valid Land/Plus.1 K:Flashback:3 R G diff --git a/forge-gui/res/cardsfolder/d/dragonstorm.txt b/forge-gui/res/cardsfolder/d/dragonstorm.txt index 478234ef013..97474badc4f 100644 --- a/forge-gui/res/cardsfolder/d/dragonstorm.txt +++ b/forge-gui/res/cardsfolder/d/dragonstorm.txt @@ -1,7 +1,7 @@ Name:Dragonstorm ManaCost:8 R Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Permanent.Dragon | ChangeNum$ 1 | SpellDescription$ Search your library for a Dragon permanent card, put it onto the battlefield, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Permanent.Dragon | ChangeTypeDesc$ Dragon permanent | SpellDescription$ Search your library for a Dragon permanent card, put it onto the battlefield, then shuffle. K:Storm AI:RemoveDeck:Random Oracle:Search your library for a Dragon permanent card, put it onto the battlefield, then shuffle.\nStorm (When you cast this spell, copy it for each spell cast before it this turn.) diff --git a/forge-gui/res/cardsfolder/d/dreamscape_artist.txt b/forge-gui/res/cardsfolder/d/dreamscape_artist.txt index 4f45f4ec745..a6816674ee4 100644 --- a/forge-gui/res/cardsfolder/d/dreamscape_artist.txt +++ b/forge-gui/res/cardsfolder/d/dreamscape_artist.txt @@ -2,5 +2,5 @@ Name:Dreamscape Artist ManaCost:1 U Types:Creature Human Spellshaper PT:1/1 -A:AB$ ChangeZone | Cost$ 2 U T Discard<1/Card> Sac<1/Land> | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 2 | SpellDescription$ Search your library for up to two basic land cards, put them onto the battlefield, then shuffle. +A:AB$ ChangeZone | Cost$ 2 U T Discard<1/Card> Sac<1/Land> | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 | SpellDescription$ Search your library for up to two basic land cards, put them onto the battlefield, then shuffle. Oracle:{2}{U}, {T}, Discard a card, Sacrifice a land: Search your library for up to two basic land cards, put them onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/d/druid_of_the_emerald_grove.txt b/forge-gui/res/cardsfolder/d/druid_of_the_emerald_grove.txt index b33c765faaf..b3c9038475a 100644 --- a/forge-gui/res/cardsfolder/d/druid_of_the_emerald_grove.txt +++ b/forge-gui/res/cardsfolder/d/druid_of_the_emerald_grove.txt @@ -3,7 +3,7 @@ ManaCost:3 G Types:Creature Dwarf Druid PT:2/2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBChangeZone | TriggerDescription$ When CARDNAME enters, search your library for up to two basic land cards and reveal them, then ABILITY -SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Hidden$ True | ChangeNum$ 2 | ChangeType$ Land.Basic | Destination$ Library | RememberChanged$ True | Reveal$ True | Shuffle$ False | SubAbility$ DBRollDice +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Hidden$ True | ChangeNum$ 2 | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Destination$ Library | RememberChanged$ True | Reveal$ True | Shuffle$ False | SubAbility$ DBRollDice SVar:DBRollDice:DB$ RollDice | Sides$ 20 | ResultSubAbilities$ 1-9:TutuDaDome,10-19:WonTwoField,Else:ToFourField | SpellDescription$ then roll a d20. SVar:TutuDaDome:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Card.IsRemembered | ChangeNum$ 2 | SubAbility$ DBCleanup | SpellDescription$ 1-9 VERT Put those cards into your hand, then shuffle. SVar:WonTwoField:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Card.IsRemembered | ChangeNum$ 1 | ForgetChanged$ True | NoShuffle$ True | SubAbility$ WonTwoDome | SpellDescription$ 10-19 VERT Put one of those cards onto the battlefield tapped and the other into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/e/ecologists_terrarium.txt b/forge-gui/res/cardsfolder/e/ecologists_terrarium.txt index 8052be300f3..d566d13be3b 100644 --- a/forge-gui/res/cardsfolder/e/ecologists_terrarium.txt +++ b/forge-gui/res/cardsfolder/e/ecologists_terrarium.txt @@ -2,7 +2,7 @@ Name:Ecologist's Terrarium ManaCost:2 Types:Artifact T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | ChangeTypeDesc$ basic land card | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True A:AB$ PutCounter | Cost$ 2 T Sac<1/CARDNAME> | ValidTgts$ Creature | SorcerySpeed$ True | TgtPrompt$ Select target creature | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Put a +1/+1 counter on target creature. Activate only as a sorcery. DeckHas:Ability$Counters Oracle:When Ecologist's Terrarium enters, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle.\n{2}, {T}, Sacrifice Ecologist's Terrarium: Put a +1/+1 counter on target creature. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/e/edge_of_autumn.txt b/forge-gui/res/cardsfolder/e/edge_of_autumn.txt index fe4ec6832de..d948e7d15ad 100644 --- a/forge-gui/res/cardsfolder/e/edge_of_autumn.txt +++ b/forge-gui/res/cardsfolder/e/edge_of_autumn.txt @@ -1,7 +1,7 @@ Name:Edge of Autumn ManaCost:1 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ 1 | ConditionPresent$ Land.YouCtrl | ConditionCompare$ LE4 | ConditionDescription$ If you control four or fewer lands, | SpellDescription$ If you control four or fewer lands, search your library for a basic land card, put it onto the battlefield tapped, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ChangeNum$ 1 | ConditionPresent$ Land.YouCtrl | ConditionCompare$ LE4 | ConditionDescription$ If you control four or fewer lands, | SpellDescription$ If you control four or fewer lands, search your library for a basic land card, put it onto the battlefield tapped, then shuffle. K:Cycling:Sac<1/Land> AI:RemoveDeck:All Oracle:If you control four or fewer lands, search your library for a basic land card, put it onto the battlefield tapped, then shuffle.\nCycling—Sacrifice a land. (Sacrifice a land, Discard this card: Draw a card.) diff --git a/forge-gui/res/cardsfolder/e/elanor_gardner.txt b/forge-gui/res/cardsfolder/e/elanor_gardner.txt index 1c00c4cbd4a..85c55a7d1cf 100644 --- a/forge-gui/res/cardsfolder/e/elanor_gardner.txt +++ b/forge-gui/res/cardsfolder/e/elanor_gardner.txt @@ -5,7 +5,7 @@ PT:2/4 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigFood | TriggerDescription$ When CARDNAME enters, create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") SVar:TrigFood:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_food_sac | TokenOwner$ You T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | ValidPlayer$ You | CheckSVar$ FoodCheck | SVarCompare$ GE1 | OptionalDecider$ You | Execute$ TrigSearch | TriggerDescription$ At the beginning of your end step, if you sacrificed a Food this turn, you may search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. -SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ 1 +SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ChangeNum$ 1 SVar:FoodCheck:PlayerCountPropertyYou$SacrificedThisTurn Food DeckHas:Ability$LifeGain|Token|Food DeckHints:Ability$Food diff --git a/forge-gui/res/cardsfolder/e/elfhame_sanctuary.txt b/forge-gui/res/cardsfolder/e/elfhame_sanctuary.txt index 2ec4413a10a..b15e1809cab 100644 --- a/forge-gui/res/cardsfolder/e/elfhame_sanctuary.txt +++ b/forge-gui/res/cardsfolder/e/elfhame_sanctuary.txt @@ -2,7 +2,7 @@ Name:Elfhame Sanctuary ManaCost:1 G Types:Enchantment T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigChange | TriggerDescription$ At the beginning of your upkeep, you may search your library for a basic land card, reveal that card, put it into your hand, then shuffle. If you do, you skip your draw step this turn. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | SubAbility$ DBSkipDraw | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SubAbility$ DBSkipDraw | ShuffleNonMandatory$ True SVar:DBSkipDraw:DB$ SkipPhase | Defined$ You | Step$ Draw | Duration$ EndOfTurn AI:RemoveDeck:All Oracle:At the beginning of your upkeep, you may search your library for a basic land card, reveal that card, put it into your hand, then shuffle. If you do, you skip your draw step this turn. diff --git a/forge-gui/res/cardsfolder/e/elvish_pioneer.txt b/forge-gui/res/cardsfolder/e/elvish_pioneer.txt index 8dbbe0d047a..319a84d7141 100644 --- a/forge-gui/res/cardsfolder/e/elvish_pioneer.txt +++ b/forge-gui/res/cardsfolder/e/elvish_pioneer.txt @@ -3,5 +3,5 @@ ManaCost:G Types:Creature Elf Druid PT:1/1 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, you may put a basic land card from your hand onto the battlefield tapped. -SVar:TrigChange:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 +SVar:TrigChange:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land Oracle:When Elvish Pioneer enters, you may put a basic land card from your hand onto the battlefield tapped. diff --git a/forge-gui/res/cardsfolder/e/embermouth_sentinel.txt b/forge-gui/res/cardsfolder/e/embermouth_sentinel.txt index bd6c8475e2f..84c2a0dcc9b 100644 --- a/forge-gui/res/cardsfolder/e/embermouth_sentinel.txt +++ b/forge-gui/res/cardsfolder/e/embermouth_sentinel.txt @@ -4,7 +4,7 @@ Types:Artifact Creature Chimera PT:2/1 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigBranch | OptionalDecider$ You | TriggerDescription$ When this creature enters, you may search your library for a basic land card, reveal it, then shuffle and put that card on top. If you control a Dragon, put that card onto the battlefield tapped instead. SVar:TrigBranch:DB$ Branch | BranchConditionSVar$ X | BranchConditionSVarCompare$ GE1 | TrueSubAbility$ RampantLand | FalseSubAbility$ GuidedLand -SVar:GuidedLand:DB$ ChangeZone | Origin$ Library | Destination$ Library | LibraryPosition$ 0 | ChangeType$ Land.Basic | ShuffleNonMandatory$ True -SVar:RampantLand:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ShuffleNonMandatory$ True +SVar:GuidedLand:DB$ ChangeZone | Origin$ Library | Destination$ Library | LibraryPosition$ 0 | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True +SVar:RampantLand:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ShuffleNonMandatory$ True SVar:X:Count$Valid Dragon.YouCtrl Oracle:When this creature enters, you may search your library for a basic land card, reveal it, then shuffle and put that card on top. If you control a Dragon, put that card onto the battlefield tapped instead. diff --git a/forge-gui/res/cardsfolder/e/embodiment_of_spring.txt b/forge-gui/res/cardsfolder/e/embodiment_of_spring.txt index 7eada395913..5a41521d3ac 100644 --- a/forge-gui/res/cardsfolder/e/embodiment_of_spring.txt +++ b/forge-gui/res/cardsfolder/e/embodiment_of_spring.txt @@ -2,7 +2,7 @@ Name:Embodiment of Spring ManaCost:U Types:Creature Elemental PT:0/3 -A:AB$ ChangeZone | Cost$ 1 G T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card and put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ 1 G T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card and put it onto the battlefield tapped, then shuffle. DeckHints:Color$Green # TODO: Just like with Sakura-Tribe Elder, the AI will sac it at its earliest convenience to search for a land. Might improve conditions for when the AI might not want to do that. Oracle:{1}{G}, {T}, Sacrifice Embodiment of Spring: Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/e/emergent_sequence.txt b/forge-gui/res/cardsfolder/e/emergent_sequence.txt index 3c7d5465fc7..10f21f5001f 100644 --- a/forge-gui/res/cardsfolder/e/emergent_sequence.txt +++ b/forge-gui/res/cardsfolder/e/emergent_sequence.txt @@ -1,7 +1,7 @@ Name:Emergent Sequence ManaCost:1 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | RememberChanged$ True | ChangeNum$ 1 | SubAbility$ DBAnimate | StackDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. That land becomes a 0/0 green and blue Fractal creature that's still a land. Put a +1/+1 counter on it for each land you had enter the battlefield under your control this turn. | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. That land becomes a 0/0 green and blue Fractal creature that's still a land. Put a +1/+1 counter on it for each land you had enter the battlefield under your control this turn. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | RememberChanged$ True | ChangeNum$ 1 | SubAbility$ DBAnimate | StackDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. That land becomes a 0/0 green and blue Fractal creature that's still a land. Put a +1/+1 counter on it for each land you had enter the battlefield under your control this turn. | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. That land becomes a 0/0 green and blue Fractal creature that's still a land. Put a +1/+1 counter on it for each land you had enter the battlefield under your control this turn. SVar:DBAnimate:DB$ Animate | Defined$ Remembered | Power$ 0 | Toughness$ 0 | Colors$ Green,Blue | OverwriteColors$ True | Types$ Creature,Fractal | Duration$ Permanent | SubAbility$ DBPutCounter SVar:DBPutCounter:DB$ PutCounter | Defined$ Remembered | CounterType$ P1P1 | CounterNum$ X | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/e/encroaching_dragonstorm.txt b/forge-gui/res/cardsfolder/e/encroaching_dragonstorm.txt index 5373a953ae6..dd24492e9fd 100644 --- a/forge-gui/res/cardsfolder/e/encroaching_dragonstorm.txt +++ b/forge-gui/res/cardsfolder/e/encroaching_dragonstorm.txt @@ -2,7 +2,7 @@ Name:Encroaching Dragonstorm ManaCost:3 G Types:Enchantment T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSearch | TriggerDescription$ When this enchantment enters, search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. -SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 2 +SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | TriggerZones$ Battlefield | ValidCard$ Dragon.YouCtrl | Execute$ TrigReturn | TriggerDescription$ When a Dragon you control enters, return this enchantment to its owner's hand. SVar:TrigReturn:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Defined$ Self DeckHints:Type$Dragon diff --git a/forge-gui/res/cardsfolder/e/enigma_ridges.txt b/forge-gui/res/cardsfolder/e/enigma_ridges.txt index ab6a4851cd5..f024a503d35 100644 --- a/forge-gui/res/cardsfolder/e/enigma_ridges.txt +++ b/forge-gui/res/cardsfolder/e/enigma_ridges.txt @@ -3,7 +3,7 @@ ManaCost:no cost Types:Plane Echoir T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ TrigRepeatEach | TriggerDescription$ When you planeswalk to CARDNAME, each player who controls fewer lands than the player who controls the most lands searches their library for a number of basic land cards less than or equal to the difference, reveals them, puts them into their hand, then shuffles. SVar:TrigRepeatEach:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBChangeZone -SVar:DBChangeZone:DB$ ChangeZone | ConditionCheckSVar$ X | ConditionSVarCompare$ LTY | DefinedPlayer$ Remembered | Chooser$ Remembered | ChangeType$ Land.Basic | ChangeNum$ Z | Origin$ Library | Destination$ Hand +SVar:DBChangeZone:DB$ ChangeZone | ConditionCheckSVar$ X | ConditionSVarCompare$ LTY | DefinedPlayer$ Remembered | Chooser$ Remembered | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ Z | Origin$ Library | Destination$ Hand SVar:X:Count$Valid Land.RememberedPlayerCtrl SVar:Y:PlayerCountPlayers$HighestValid Land.YouCtrl SVar:Z:SVar$Y/Minus.X diff --git a/forge-gui/res/cardsfolder/e/enlightened_tutor.txt b/forge-gui/res/cardsfolder/e/enlightened_tutor.txt index f6e98e8bd09..bd185b8bfa0 100644 --- a/forge-gui/res/cardsfolder/e/enlightened_tutor.txt +++ b/forge-gui/res/cardsfolder/e/enlightened_tutor.txt @@ -1,6 +1,6 @@ Name:Enlightened Tutor ManaCost:W Types:Instant -A:SP$ ChangeZone | Origin$ Library | Destination$ Library | LibraryPosition$ 0 | ChangeType$ Artifact,Enchantment | ChangeNum$ 1 | SpellDescription$ Search your library for an artifact or enchantment card, reveal it, then shuffle and put that card on top. +A:SP$ ChangeZone | Origin$ Library | Destination$ Library | LibraryPosition$ 0 | ChangeType$ Artifact,Enchantment | SpellDescription$ Search your library for an artifact or enchantment card, reveal it, then shuffle and put that card on top. AI:RemoveDeck:Random Oracle:Search your library for an artifact or enchantment card, reveal it, then shuffle and put that card on top. diff --git a/forge-gui/res/cardsfolder/e/entish_restoration.txt b/forge-gui/res/cardsfolder/e/entish_restoration.txt index 00db588e562..e7ce321079e 100644 --- a/forge-gui/res/cardsfolder/e/entish_restoration.txt +++ b/forge-gui/res/cardsfolder/e/entish_restoration.txt @@ -2,7 +2,7 @@ Name:Entish Restoration ManaCost:2 G Types:Instant A:SP$ Sacrifice | Defined$ You | SacValid$ Land | SubAbility$ DBChangeZone | SpellDescription$ Sacrifice a land. Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. If you control a creature with power 4 or greater, instead search your library for up to three basic land cards, put them onto the battlefield tapped, then shuffle. -SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ X | Tapped$ True +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ X | Tapped$ True SVar:AIPreference:SacCost$Land.Basic+tapped SVar:X:Count$Compare Y GE1.3.2 SVar:Y:Count$Valid Creature.YouCtrl+powerGE4 diff --git a/forge-gui/res/cardsfolder/e/environmental_sciences.txt b/forge-gui/res/cardsfolder/e/environmental_sciences.txt index ec41b822cb2..69fabb0e0bc 100644 --- a/forge-gui/res/cardsfolder/e/environmental_sciences.txt +++ b/forge-gui/res/cardsfolder/e/environmental_sciences.txt @@ -1,7 +1,7 @@ Name:Environmental Sciences ManaCost:2 Types:Sorcery Lesson -A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | SubAbility$ DBGainLife | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. You gain 2 life. +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SubAbility$ DBGainLife | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. You gain 2 life. SVar:DBGainLife:DB$ GainLife | LifeAmount$ 2 DeckHas:Ability$LifeGain Oracle:Search your library for a basic land card, reveal it, put it into your hand, then shuffle. You gain 2 life. diff --git a/forge-gui/res/cardsfolder/e/escape_tunnel.txt b/forge-gui/res/cardsfolder/e/escape_tunnel.txt index 6ff53b6e1ff..9cd28e00f2f 100644 --- a/forge-gui/res/cardsfolder/e/escape_tunnel.txt +++ b/forge-gui/res/cardsfolder/e/escape_tunnel.txt @@ -1,7 +1,7 @@ Name:Escape Tunnel ManaCost:no cost Types:Land -A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. A:AB$ Effect | Cost$ T Sac<1/CARDNAME> | ValidTgts$ Creature.powerLE2 | TgtPrompt$ Select target creature with power 2 or less | RememberObjects$ Targeted | ExileOnMoved$ Battlefield | StaticAbilities$ Unblockable | AILogic$ Pump | StackDescription$ {c:Targeted} can't be blocked this turn. | SpellDescription$ Target creature with power 2 or less can't be blocked this turn. SVar:Unblockable:Mode$ CantBlockBy | ValidAttacker$ Card.IsRemembered | Description$ This creature can't be blocked this turn. DeckHas:Ability$Sacrifice diff --git a/forge-gui/res/cardsfolder/e/esper_panorama.txt b/forge-gui/res/cardsfolder/e/esper_panorama.txt index fc623cba812..087e7d0c5c9 100644 --- a/forge-gui/res/cardsfolder/e/esper_panorama.txt +++ b/forge-gui/res/cardsfolder/e/esper_panorama.txt @@ -2,5 +2,5 @@ Name:Esper Panorama ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. -A:AB$ ChangeZone | Cost$ 1 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Plains+Basic,Land.Island+Basic,Land.Swamp+Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic Plains, Island, or Swamp card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ 1 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Plains.Basic,Island.Basic,Swamp.Basic | ChangeTypeDesc$ basic Plains, Island, or Swamp | SpellDescription$ Search your library for a basic Plains, Island, or Swamp card, put it onto the battlefield tapped, then shuffle. Oracle:{T}: Add {C}.\n{1}, {T}, Sacrifice Esper Panorama: Search your library for a basic Plains, Island, or Swamp card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/e/evolution_charm.txt b/forge-gui/res/cardsfolder/e/evolution_charm.txt index 8946fd1b636..28b8fd342fb 100644 --- a/forge-gui/res/cardsfolder/e/evolution_charm.txt +++ b/forge-gui/res/cardsfolder/e/evolution_charm.txt @@ -2,7 +2,7 @@ Name:Evolution Charm ManaCost:1 G Types:Instant A:SP$ Charm | Choices$ SearchLand,Return,DoPump | CharmNum$ 1 -SVar:SearchLand:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. +SVar:SearchLand:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. SVar:Return:DB$ ChangeZone | TgtPrompt$ Choose target creature card in your graveyard | ValidTgts$ Creature.YouCtrl | Origin$ Graveyard | Destination$ Hand | SpellDescription$ Return target creature card from your graveyard to your hand. SVar:DoPump:DB$ Pump | ValidTgts$ Creature | KW$ Flying | TgtPrompt$ Select target creature | SpellDescription$ Target creature gains flying until end of turn. AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/e/evolving_wilds.txt b/forge-gui/res/cardsfolder/e/evolving_wilds.txt index 15e0f5fe8af..0ec71745caf 100644 --- a/forge-gui/res/cardsfolder/e/evolving_wilds.txt +++ b/forge-gui/res/cardsfolder/e/evolving_wilds.txt @@ -1,5 +1,5 @@ Name:Evolving Wilds ManaCost:no cost Types:Land -A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. Oracle:{T}, Sacrifice Evolving Wilds: Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/e/exploding_borders.txt b/forge-gui/res/cardsfolder/e/exploding_borders.txt index 06f98408353..47dd36b8c58 100644 --- a/forge-gui/res/cardsfolder/e/exploding_borders.txt +++ b/forge-gui/res/cardsfolder/e/exploding_borders.txt @@ -1,7 +1,7 @@ Name:Exploding Borders ManaCost:2 R G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ 1 | SubAbility$ DBDealDamage | SpellDescription$ Domain — Search your library for a basic land card and put that card onto the battlefield tapped. Then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ChangeNum$ 1 | SubAbility$ DBDealDamage | SpellDescription$ Domain — Search your library for a basic land card and put that card onto the battlefield tapped. Then shuffle. SVar:DBDealDamage:DB$ DealDamage | ValidTgts$ Player,Planeswalker | TgtPrompt$ Select target player or planeswalker | NumDmg$ X | SpellDescription$ CARDNAME deals X damage to target player or planeswalker, where X is the number of basic land types among lands you control. SVar:X:Count$Domain Oracle:Domain — Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. Exploding Borders deals X damage to target player or planeswalker, where X is the number of basic land types among lands you control. diff --git a/forge-gui/res/cardsfolder/e/explosive_vegetation.txt b/forge-gui/res/cardsfolder/e/explosive_vegetation.txt index 58ff4299097..627f2f6acf1 100644 --- a/forge-gui/res/cardsfolder/e/explosive_vegetation.txt +++ b/forge-gui/res/cardsfolder/e/explosive_vegetation.txt @@ -1,5 +1,5 @@ Name:Explosive Vegetation ManaCost:3 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 2 | SpellDescription$ Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 | SpellDescription$ Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. Oracle:Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/f/fabled_passage.txt b/forge-gui/res/cardsfolder/f/fabled_passage.txt index e51b36ab511..82434537b09 100644 --- a/forge-gui/res/cardsfolder/f/fabled_passage.txt +++ b/forge-gui/res/cardsfolder/f/fabled_passage.txt @@ -1,7 +1,7 @@ Name:Fabled Passage ManaCost:no cost Types:Land -A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | RememberChanged$ True | SubAbility$ DBUntap | StackDescription$ SpellDescription | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. Then if you control four or more lands, untap that land. +A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | RememberChanged$ True | SubAbility$ DBUntap | StackDescription$ SpellDescription | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. Then if you control four or more lands, untap that land. SVar:DBUntap:DB$ Untap | Defined$ Remembered | ConditionPresent$ Land.YouCtrl | ConditionCompare$ GE4 | ConditionDescription$ If you control four or more lands, untap that land. | SubAbility$ DBCleanup | StackDescription$ None SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True Oracle:{T}, Sacrifice Fabled Passage: Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. Then if you control four or more lands, untap that land. diff --git a/forge-gui/res/cardsfolder/f/far_wanderings.txt b/forge-gui/res/cardsfolder/f/far_wanderings.txt index d32ecf108c6..96c324381fc 100644 --- a/forge-gui/res/cardsfolder/f/far_wanderings.txt +++ b/forge-gui/res/cardsfolder/f/far_wanderings.txt @@ -1,6 +1,6 @@ Name:Far Wanderings ManaCost:2 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ X | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. Threshold — If there are seven or more cards in your graveyard, instead search your library for up to three basic land cards, put them onto the battlefield tapped, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ChangeNum$ X | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. Threshold — If there are seven or more cards in your graveyard, instead search your library for up to three basic land cards, put them onto the battlefield tapped, then shuffle. SVar:X:Count$Threshold.3.1 Oracle:Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle.\nThreshold — If there are seven or more cards in your graveyard, instead search your library for up to three basic land cards, put them onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/f/farfinder.txt b/forge-gui/res/cardsfolder/f/farfinder.txt index 02484e75c9b..4b262a19a68 100644 --- a/forge-gui/res/cardsfolder/f/farfinder.txt +++ b/forge-gui/res/cardsfolder/f/farfinder.txt @@ -4,5 +4,5 @@ Types:Creature Fox PT:1/1 K:Vigilance T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True Oracle:Vigilance\nWhen Farfinder enters, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/f/farhaven_elf.txt b/forge-gui/res/cardsfolder/f/farhaven_elf.txt index 2e531f3c1aa..32691b84bd2 100644 --- a/forge-gui/res/cardsfolder/f/farhaven_elf.txt +++ b/forge-gui/res/cardsfolder/f/farhaven_elf.txt @@ -3,5 +3,5 @@ ManaCost:2 G Types:Creature Elf Druid PT:1/1 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True Oracle:When Farhaven Elf enters, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/f/fertilid.txt b/forge-gui/res/cardsfolder/f/fertilid.txt index 8c8f6218f6c..f2cf6ef916f 100644 --- a/forge-gui/res/cardsfolder/f/fertilid.txt +++ b/forge-gui/res/cardsfolder/f/fertilid.txt @@ -3,6 +3,6 @@ ManaCost:2 G Types:Creature Elemental PT:0/0 K:etbCounter:P1P1:2 -A:AB$ ChangeZone | Cost$ 1 G SubCounter<1/P1P1> | ValidTgts$ Player | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | Chooser$ Targeted | SpellDescription$ Target player searches their library for a basic land card, puts it onto the battlefield tapped, then shuffles. +A:AB$ ChangeZone | Cost$ 1 G SubCounter<1/P1P1> | ValidTgts$ Player | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Chooser$ Targeted | SpellDescription$ Target player searches their library for a basic land card, puts it onto the battlefield tapped, then shuffles. DeckHas:Ability$Counters Oracle:Fertilid enters with two +1/+1 counters on it.\n{1}{G}, Remove a +1/+1 counter from Fertilid: Target player searches their library for a basic land card, puts it onto the battlefield tapped, then shuffles. diff --git a/forge-gui/res/cardsfolder/f/fertilids_favor.txt b/forge-gui/res/cardsfolder/f/fertilids_favor.txt index 454c67933b3..375bc0a836f 100644 --- a/forge-gui/res/cardsfolder/f/fertilids_favor.txt +++ b/forge-gui/res/cardsfolder/f/fertilids_favor.txt @@ -1,7 +1,7 @@ Name:Fertilid's Favor ManaCost:3 G Types:Instant -A:SP$ ChangeZone | ValidTgts$ Player | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | SubAbility$ DBCounter | Chooser$ Targeted | SpellDescription$ Target player searches their library for a basic land card, puts it onto the battlefield tapped, then shuffles. Put two +1/+1 counters on up to one target artifact or creature. +A:SP$ ChangeZone | ValidTgts$ Player | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SubAbility$ DBCounter | Chooser$ Targeted | SpellDescription$ Target player searches their library for a basic land card, puts it onto the battlefield tapped, then shuffles. Put two +1/+1 counters on up to one target artifact or creature. SVar:DBCounter:DB$ PutCounter | ValidTgts$ Creature,Artifact | TgtPrompt$ Select up to one target creature or artifact | TargetMin$ 0 | TargetMax$ 1 | CounterType$ P1P1 | CounterNum$ 2 DeckHas:Ability$Counters Oracle:Target player searches their library for a basic land card, puts it onto the battlefield tapped, then shuffles. Put two +1/+1 counters on up to one target artifact or creature. diff --git a/forge-gui/res/cardsfolder/f/field_of_ruin.txt b/forge-gui/res/cardsfolder/f/field_of_ruin.txt index c7bf2aa8719..7c5b47b1a27 100644 --- a/forge-gui/res/cardsfolder/f/field_of_ruin.txt +++ b/forge-gui/res/cardsfolder/f/field_of_ruin.txt @@ -3,6 +3,6 @@ ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. A:AB$ Destroy | Cost$ 2 T Sac<1/CARDNAME> | ValidTgts$ Land.nonBasic+OppCtrl | TgtPrompt$ Select target nonbasic land an opponent controls. | SubAbility$ DBSearch | AILogic$ GhostQuarter | SpellDescription$ Destroy target nonbasic land an opponent controls. Each player searches their library for a basic land card, puts it onto the battlefield, then shuffles. -SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | DefinedPlayer$ Player | ChangeType$ Land.Basic | ChangeNum$ 1 | StackDescription$ Each player searches their library for a basic land card, puts it onto the battlefield, then shuffles their library. +SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | DefinedPlayer$ Player | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | StackDescription$ Each player searches their library for a basic land card, puts it onto the battlefield, then shuffles their library. AI:RemoveDeck:Random Oracle:{T}: Add {C}.\n{2}, {T}, Sacrifice Field of Ruin: Destroy target nonbasic land an opponent controls. Each player searches their library for a basic land card, puts it onto the battlefield, then shuffles. diff --git a/forge-gui/res/cardsfolder/f/firebrand_ranger.txt b/forge-gui/res/cardsfolder/f/firebrand_ranger.txt index 7777bcbea11..2ff329505f3 100644 --- a/forge-gui/res/cardsfolder/f/firebrand_ranger.txt +++ b/forge-gui/res/cardsfolder/f/firebrand_ranger.txt @@ -2,5 +2,5 @@ Name:Firebrand Ranger ManaCost:1 R Types:Creature Human Soldier Ranger PT:2/1 -A:AB$ ChangeZone | Cost$ G T | Origin$ Hand | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | Optional$ You | AILogic$ AtOppEOT | SpellDescription$ You may put a basic land card from your hand onto the battlefield. +A:AB$ ChangeZone | Cost$ G T | Origin$ Hand | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Optional$ You | AILogic$ AtOppEOT | SpellDescription$ You may put a basic land card from your hand onto the battlefield. Oracle:{G}, {T}: You may put a basic land card from your hand onto the battlefield. diff --git a/forge-gui/res/cardsfolder/f/flare_of_cultivation.txt b/forge-gui/res/cardsfolder/f/flare_of_cultivation.txt index 5a8b310ac30..f6a12c40603 100644 --- a/forge-gui/res/cardsfolder/f/flare_of_cultivation.txt +++ b/forge-gui/res/cardsfolder/f/flare_of_cultivation.txt @@ -2,7 +2,7 @@ Name:Flare of Cultivation ManaCost:1 G G Types:Sorcery S:Mode$ AlternativeCost | ValidSA$ Spell.Self | EffectZone$ All | Cost$ Sac<1/Creature.Green+!token/a nontoken green creature> | Description$ You may sacrifice a nontoken green creature rather than pay this spell's mana cost. -A:SP$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Land.Basic | ChangeNum$ 2 | RememberChanged$ True | Reveal$ True | Shuffle$ False | StackDescription$ SpellDescription | SubAbility$ DBChangeZone1 | SpellDescription$ Search your library for up to two basic land cards, reveal those cards, put one onto the battlefield tapped and the other into your hand, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 | RememberChanged$ True | Reveal$ True | Shuffle$ False | StackDescription$ SpellDescription | SubAbility$ DBChangeZone1 | SpellDescription$ Search your library for up to two basic land cards, reveal those cards, put one onto the battlefield tapped and the other into your hand, then shuffle. SVar:DBChangeZone1:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.IsRemembered | ChangeNum$ 1 | Mandatory$ True | NoLooking$ True | SelectPrompt$ Select a card to put onto the battlefield | Tapped$ True | Shuffle$ False | SubAbility$ DBChangeZone2 | StackDescription$ None SVar:DBChangeZone2:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.IsRemembered | Mandatory$ True | NoLooking$ True | SelectPrompt$ Select a card to put into your hand | StackDescription$ None | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/f/flood_plain.txt b/forge-gui/res/cardsfolder/f/flood_plain.txt index af5e7da885d..848180bfe24 100644 --- a/forge-gui/res/cardsfolder/f/flood_plain.txt +++ b/forge-gui/res/cardsfolder/f/flood_plain.txt @@ -3,5 +3,5 @@ ManaCost:no cost Types:Land R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementResult$ Updated | ReplaceWith$ ETBTapped | Description$ CARDNAME enters tapped. SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True -A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Plains,Island | ChangeNum$ 1 | SpellDescription$ Search your library for a Plains or Island card, put it onto the battlefield, then shuffle. +A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Plains,Island | SpellDescription$ Search your library for a Plains or Island card, put it onto the battlefield, then shuffle. Oracle:Flood Plain enters tapped.\n{T}, Sacrifice Flood Plain: Search your library for a Plains or Island card, put it onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/f/flooded_strand.txt b/forge-gui/res/cardsfolder/f/flooded_strand.txt index f27bf84964c..7861fce53b1 100644 --- a/forge-gui/res/cardsfolder/f/flooded_strand.txt +++ b/forge-gui/res/cardsfolder/f/flooded_strand.txt @@ -1,5 +1,5 @@ Name:Flooded Strand ManaCost:no cost Types:Land -A:AB$ ChangeZone | Cost$ T PayLife<1> Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Plains,Island | ChangeNum$ 1 | SpellDescription$ Search your library for a Plains or Island card, put it onto the battlefield, then shuffle. +A:AB$ ChangeZone | Cost$ T PayLife<1> Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Plains,Island | SpellDescription$ Search your library for a Plains or Island card, put it onto the battlefield, then shuffle. Oracle:{T}, Pay 1 life, Sacrifice Flooded Strand: Search your library for a Plains or Island card, put it onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/f/flower_flourish.txt b/forge-gui/res/cardsfolder/f/flower_flourish.txt index 0c541acd6c9..6fde17b50d0 100644 --- a/forge-gui/res/cardsfolder/f/flower_flourish.txt +++ b/forge-gui/res/cardsfolder/f/flower_flourish.txt @@ -1,7 +1,7 @@ Name:Flower ManaCost:GW Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Forest+Basic,Land.Plains+Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic Forest or Plains card, reveal it, put it into your hand, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Forest.Basic,Plains.Basic | ChangeTypeDesc$ basic Forest or Plains | SpellDescription$ Search your library for a basic Forest or Plains card, reveal it, put it into your hand, then shuffle. AlternateMode:Split Oracle:Search your library for a basic Forest or Plains card, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/f/font_of_fertility.txt b/forge-gui/res/cardsfolder/f/font_of_fertility.txt index 0a5b76a6873..fe2736142ee 100644 --- a/forge-gui/res/cardsfolder/f/font_of_fertility.txt +++ b/forge-gui/res/cardsfolder/f/font_of_fertility.txt @@ -1,5 +1,5 @@ Name:Font of Fertility ManaCost:G Types:Enchantment -A:AB$ ChangeZone | Cost$ 1 G Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card and put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ 1 G Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card and put it onto the battlefield tapped, then shuffle. Oracle:{1}{G}, Sacrifice Font of Fertility: Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/f/forceful_cultivator.txt b/forge-gui/res/cardsfolder/f/forceful_cultivator.txt index 61d74845f10..42b203bdf6e 100644 --- a/forge-gui/res/cardsfolder/f/forceful_cultivator.txt +++ b/forge-gui/res/cardsfolder/f/forceful_cultivator.txt @@ -4,5 +4,5 @@ Types:Creature Snake Shaman PT:2/3 S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 2 | EffectZone$ All | IsPresent$ Land.YouOwn | PresentZone$ Hand | PresentCompare$ EQ0 | Description$ This spell costs {2} less to cast if there are no land cards in your hand. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters, search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land Oracle:This spell costs {2} less to cast if there are no land cards in your hand.\nWhen Forceful Cultivator enters, search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/f/foreboding_landscape.txt b/forge-gui/res/cardsfolder/f/foreboding_landscape.txt index 34b38bcd9f5..fac61eea1f9 100644 --- a/forge-gui/res/cardsfolder/f/foreboding_landscape.txt +++ b/forge-gui/res/cardsfolder/f/foreboding_landscape.txt @@ -2,6 +2,6 @@ Name:Foreboding Landscape ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. -A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Swamp+Basic,Land.Forest+Basic,Land.Island+Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic Swamp, Forest, or Island card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Swamp.Basic,Forest.Basic,Island.Basic | ChangeTypeDesc$ basic Swamp, Forest, or Island | SpellDescription$ Search your library for a basic Swamp, Forest, or Island card, put it onto the battlefield tapped, then shuffle. K:Cycling:B G U Oracle:{T}: Add {C}.\n{T}, Sacrifice Foreboding Landscape: Search your library for a basic Swamp, Forest, or Island card, put it onto the battlefield tapped, then shuffle.\nCycling {B}{G}{U} ({B}{G}{U}, Discard this card: Draw a card.) diff --git a/forge-gui/res/cardsfolder/f/forestfolk.txt b/forge-gui/res/cardsfolder/f/forestfolk.txt index 8b6286097c4..c5daf467c49 100644 --- a/forge-gui/res/cardsfolder/f/forestfolk.txt +++ b/forge-gui/res/cardsfolder/f/forestfolk.txt @@ -3,7 +3,7 @@ ManaCost:2 G U Types:Creature Elf Wizard PT:2/2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME leaves the battlefield, draw a card. SVar:TrigDraw:DB$ Draw | Defined$ TriggeredCardController | NumCards$ 1 SVar:SacMe:1 diff --git a/forge-gui/res/cardsfolder/f/fork_in_the_road.txt b/forge-gui/res/cardsfolder/f/fork_in_the_road.txt index 4c28cc25c8a..5d093a7b355 100644 --- a/forge-gui/res/cardsfolder/f/fork_in_the_road.txt +++ b/forge-gui/res/cardsfolder/f/fork_in_the_road.txt @@ -1,7 +1,7 @@ Name:Fork in the Road ManaCost:1 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Land.Basic | ChangeNum$ 2 | RememberChanged$ True | Reveal$ True | Shuffle$ False | StackDescription$ SpellDescription | SubAbility$ DBChangeZone1 | SpellDescription$ Search your library for up to two basic land cards and reveal them. Put one into your hand and the other into your graveyard. Then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 | RememberChanged$ True | Reveal$ True | Shuffle$ False | StackDescription$ SpellDescription | SubAbility$ DBChangeZone1 | SpellDescription$ Search your library for up to two basic land cards and reveal them. Put one into your hand and the other into your graveyard. Then shuffle. SVar:DBChangeZone1:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic+IsRemembered | ChangeNum$ 1 | Mandatory$ True | NoLooking$ True | SelectPrompt$ Select a card to put into your hand | Shuffle$ False | SubAbility$ DBChangeZone2 | StackDescription$ None SVar:DBChangeZone2:DB$ ChangeZone | Origin$ Library | Destination$ Graveyard | ChangeType$ Land.Basic+IsRemembered | Mandatory$ True | NoLooking$ True | SelectPrompt$ Select a card to put into your graveyard | StackDescription$ None | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/f/fountainport_bell.txt b/forge-gui/res/cardsfolder/f/fountainport_bell.txt index d8cf86af6ce..d7bfe43acd8 100644 --- a/forge-gui/res/cardsfolder/f/fountainport_bell.txt +++ b/forge-gui/res/cardsfolder/f/fountainport_bell.txt @@ -2,6 +2,6 @@ Name:Fountainport Bell ManaCost:1 Types:Artifact T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, you may search your library for a basic land card, reveal it, then shuffle and put that card on top. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Library | LibraryPosition$ 0 | ChangeType$ Land.Basic | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Library | LibraryPosition$ 0 | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True A:AB$ Draw | Cost$ 1 Sac<1/CARDNAME> | NumCards$ 1 | SpellDescription$ Draw a card. Oracle:When Fountainport Bell enters, you may search your library for a basic land card, reveal it, then shuffle and put that card on top.\n{1}, Sacrifice Fountainport Bell: Draw a card. diff --git a/forge-gui/res/cardsfolder/f/frenzied_tilling.txt b/forge-gui/res/cardsfolder/f/frenzied_tilling.txt index 20952793f12..d7597aec863 100644 --- a/forge-gui/res/cardsfolder/f/frenzied_tilling.txt +++ b/forge-gui/res/cardsfolder/f/frenzied_tilling.txt @@ -2,5 +2,5 @@ Name:Frenzied Tilling ManaCost:3 R G Types:Sorcery A:SP$ Destroy | ValidTgts$ Land | TgtPrompt$ Select target land | SubAbility$ DBSearch | SpellDescription$ Destroy target land. Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. -SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | Tapped$ True +SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True Oracle:Destroy target land. Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/f/from_the_ashes.txt b/forge-gui/res/cardsfolder/f/from_the_ashes.txt index 90107398379..06a2707881b 100644 --- a/forge-gui/res/cardsfolder/f/from_the_ashes.txt +++ b/forge-gui/res/cardsfolder/f/from_the_ashes.txt @@ -3,7 +3,7 @@ ManaCost:3 R Types:Sorcery A:SP$ DestroyAll | ValidCards$ Land.nonBasic | RememberDestroyed$ True | SubAbility$ DBRepeat | SpellDescription$ Destroy all nonbasic lands. For each land destroyed this way, its controller may search their library for a basic land card and put it onto the battlefield. Then each player who searched their library this way shuffles. SVar:DBRepeat:DB$ RepeatEach | UseImprinted$ True | DefinedCards$ DirectRemembered | RepeatSubAbility$ DBSearch | SubAbility$ DBShuffle -SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | RememberChanged$ True | DefinedPlayer$ ImprintedController | Chooser$ ImprintedController | NoShuffle$ True | Optional$ True +SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | RememberChanged$ True | DefinedPlayer$ ImprintedController | Chooser$ ImprintedController | NoShuffle$ True | Optional$ True SVar:DBShuffle:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ ShuffleSearched | SubAbility$ DBCleanup SVar:ShuffleSearched:DB$ Shuffle | Defined$ Player.IsRemembered | ConditionCheckSVar$ X | ConditionSVarCompare$ GE1 SVar:X:Count$Valid Card.IsRemembered+RememberedPlayerCtrl diff --git a/forge-gui/res/cardsfolder/f/frontier_guide.txt b/forge-gui/res/cardsfolder/f/frontier_guide.txt index d127259f69f..f2f9b6cd5e8 100644 --- a/forge-gui/res/cardsfolder/f/frontier_guide.txt +++ b/forge-gui/res/cardsfolder/f/frontier_guide.txt @@ -2,5 +2,5 @@ Name:Frontier Guide ManaCost:1 G Types:Creature Elf Scout PT:1/1 -A:AB$ ChangeZone | Cost$ 3 G T | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ 3 G T | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. Oracle:{3}{G}, {T}: Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/g/geomancers_gambit.txt b/forge-gui/res/cardsfolder/g/geomancers_gambit.txt index 69bf863a9f1..8a6d5783574 100644 --- a/forge-gui/res/cardsfolder/g/geomancers_gambit.txt +++ b/forge-gui/res/cardsfolder/g/geomancers_gambit.txt @@ -2,6 +2,6 @@ Name:Geomancer's Gambit ManaCost:2 R Types:Sorcery A:SP$ Destroy | ValidTgts$ Land | TgtPrompt$ Select target land | SubAbility$ DBChange | SpellDescription$ Destroy target land. Its controller may search their library for a basic land card, put it onto the battlefield, then shuffle. -SVar:DBChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | DefinedPlayer$ TargetedController | ShuffleNonMandatory$ True | SubAbility$ DBDraw +SVar:DBChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | DefinedPlayer$ TargetedController | ShuffleNonMandatory$ True | SubAbility$ DBDraw SVar:DBDraw:DB$ Draw | NumCards$ 1 | SpellDescription$ Draw a card. Oracle:Destroy target land. Its controller may search their library for a basic land card, put it onto the battlefield, then shuffle.\nDraw a card. diff --git a/forge-gui/res/cardsfolder/g/ghost_quarter.txt b/forge-gui/res/cardsfolder/g/ghost_quarter.txt index f239fef961c..a785783c29c 100644 --- a/forge-gui/res/cardsfolder/g/ghost_quarter.txt +++ b/forge-gui/res/cardsfolder/g/ghost_quarter.txt @@ -3,6 +3,6 @@ ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. A:AB$ Destroy | Cost$ T Sac<1/CARDNAME> | ValidTgts$ Land | TgtPrompt$ Select target land. | SubAbility$ DBChange | AILogic$ GhostQuarter | AITgts$ Land.nonBasic | SpellDescription$ Destroy target land. Its controller may search their library for a basic land card, put it onto the battlefield, then shuffle. -SVar:DBChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | DefinedPlayer$ TargetedController | ShuffleNonMandatory$ True +SVar:DBChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | DefinedPlayer$ TargetedController | ShuffleNonMandatory$ True AI:RemoveDeck:Random Oracle:{T}: Add {C}.\n{T}, Sacrifice Ghost Quarter: Destroy target land. Its controller may search their library for a basic land card, put it onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/g/giant_ladybug.txt b/forge-gui/res/cardsfolder/g/giant_ladybug.txt index bab6095c03c..5c430428883 100644 --- a/forge-gui/res/cardsfolder/g/giant_ladybug.txt +++ b/forge-gui/res/cardsfolder/g/giant_ladybug.txt @@ -4,5 +4,5 @@ Types:Creature Insect PT:4/1 K:Reach T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, you may search your library for a basic land card, reveal it, then shuffle and put that card on top. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Library | LibraryPosition$ 0 | ChangeType$ Land.Basic | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Library | LibraryPosition$ 0 | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True Oracle:Reach\nWhen Giant Ladybug enters, you may search your library for a basic land card, reveal it, then shuffle and put that card on top. diff --git a/forge-gui/res/cardsfolder/g/go_forth.txt b/forge-gui/res/cardsfolder/g/go_forth.txt index 230607bacf7..4fa42016702 100644 --- a/forge-gui/res/cardsfolder/g/go_forth.txt +++ b/forge-gui/res/cardsfolder/g/go_forth.txt @@ -2,6 +2,6 @@ Name:Go Forth ManaCost:G Types:Instant A:SP$ Charm | Choices$ DBSearch,DBPump | CharmNum$ 1 -SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. +SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. SVar:DBPump:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +2 | NumDef$ +2 | SpellDescription$ Target creature gets +2/+2 until end of turn. Oracle:Choose one —\n• Search your library for a basic land card, reveal it, put it into your hand, then shuffle.\n• Target creature gets +2/+2 until end of turn. diff --git a/forge-gui/res/cardsfolder/g/grasslands.txt b/forge-gui/res/cardsfolder/g/grasslands.txt index 74bd3afc184..de704bdb6f0 100644 --- a/forge-gui/res/cardsfolder/g/grasslands.txt +++ b/forge-gui/res/cardsfolder/g/grasslands.txt @@ -3,5 +3,5 @@ ManaCost:no cost Types:Land R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementResult$ Updated | ReplaceWith$ ETBTapped | Description$ CARDNAME enters tapped. SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True -A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Forest,Plains | ChangeNum$ 1 | SpellDescription$ Search your library for a Forest or Plains card, put it onto the battlefield, then shuffle. +A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Forest,Plains | SpellDescription$ Search your library for a Forest or Plains card, put it onto the battlefield, then shuffle. Oracle:Grasslands enters tapped.\n{T}, Sacrifice Grasslands: Search your library for a Forest or Plains card, put it onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/g/greater_tanuki.txt b/forge-gui/res/cardsfolder/g/greater_tanuki.txt index d86c1786efa..948fb996178 100644 --- a/forge-gui/res/cardsfolder/g/greater_tanuki.txt +++ b/forge-gui/res/cardsfolder/g/greater_tanuki.txt @@ -3,6 +3,6 @@ ManaCost:4 G G Types:Enchantment Creature Dog PT:6/5 K:Trample -A:AB$ ChangeZone | PrecostDesc$ Channel — | Cost$ 2 G Discard<1/CARDNAME> | ActivationZone$ Hand | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | StackDescription$ SpellDescription | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | PrecostDesc$ Channel — | Cost$ 2 G Discard<1/CARDNAME> | ActivationZone$ Hand | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | StackDescription$ SpellDescription | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. DeckHas:Ability$Discard Oracle:Trample\nChannel — {2}{G}, Discard Greater Tanuki: Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/g/greenseeker.txt b/forge-gui/res/cardsfolder/g/greenseeker.txt index 8f0bfc2533e..f717290a627 100644 --- a/forge-gui/res/cardsfolder/g/greenseeker.txt +++ b/forge-gui/res/cardsfolder/g/greenseeker.txt @@ -2,6 +2,6 @@ Name:Greenseeker ManaCost:G Types:Creature Elf Spellshaper PT:1/1 -A:AB$ ChangeZone | Cost$ G T Discard<1/Card> | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. +A:AB$ ChangeZone | Cost$ G T Discard<1/Card> | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. AI:RemoveDeck:All Oracle:{G}, {T}, Discard a card: Search your library for a basic land card, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/g/grixis_panorama.txt b/forge-gui/res/cardsfolder/g/grixis_panorama.txt index 9128052e71e..1e46036959f 100644 --- a/forge-gui/res/cardsfolder/g/grixis_panorama.txt +++ b/forge-gui/res/cardsfolder/g/grixis_panorama.txt @@ -2,5 +2,5 @@ Name:Grixis Panorama ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. -A:AB$ ChangeZone | Cost$ 1 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Island+Basic,Land.Swamp+Basic,Land.Mountain+Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic Island, Swamp, or Mountain card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ 1 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Island.Basic,Swamp.Basic,Mountain.Basic | ChangeTypeDesc$ basic Island, Swamp, or Mountain | SpellDescription$ Search your library for a basic Island, Swamp, or Mountain card, put it onto the battlefield tapped, then shuffle. Oracle:{T}: Add {C}.\n{1}, {T}, Sacrifice Grixis Panorama: Search your library for a basic Island, Swamp, or Mountain card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/g/grow_from_the_ashes.txt b/forge-gui/res/cardsfolder/g/grow_from_the_ashes.txt index 5d65cc68226..eb7d1eb63ae 100644 --- a/forge-gui/res/cardsfolder/g/grow_from_the_ashes.txt +++ b/forge-gui/res/cardsfolder/g/grow_from_the_ashes.txt @@ -2,6 +2,6 @@ Name:Grow from the Ashes ManaCost:2 G Types:Sorcery K:Kicker:2 -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ X | SpellDescription$ Search your library for a basic land card, put it onto the battlefield, then shuffle. If this spell was kicked, instead search your library for two basic land cards, put them onto the battlefield, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ X | SpellDescription$ Search your library for a basic land card, put it onto the battlefield, then shuffle. If this spell was kicked, instead search your library for two basic land cards, put them onto the battlefield, then shuffle. SVar:X:Count$Kicked.2.1 Oracle:Kicker {2} (You may pay an additional {2} as you cast this spell.)\nSearch your library for a basic land card, put it onto the battlefield, then shuffle. If this spell was kicked, instead search your library for two basic land cards, put them onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/g/growth_charm.txt b/forge-gui/res/cardsfolder/g/growth_charm.txt index 9336bc70fdb..db5fd0d4bb7 100644 --- a/forge-gui/res/cardsfolder/g/growth_charm.txt +++ b/forge-gui/res/cardsfolder/g/growth_charm.txt @@ -2,7 +2,7 @@ Name:Growth Charm ManaCost:1 G G Types:Instant A:SP$ Charm | Choices$ DBRamp,DBGiant,DBRegrow | Defined$ You -SVar:DBRamp:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card and put that card onto the battlefield tapped. Then shuffle. +SVar:DBRamp:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card and put that card onto the battlefield tapped. Then shuffle. SVar:DBGiant:DB$ Pump | Cost$ G | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +3 | NumDef$ +3 | SpellDescription$ Target creature gets +3/+3 until end of turn. SVar:DBRegrow:DB$ ChangeZone | Cost$ 1 G | Origin$ Graveyard | Destination$ Hand | TgtPrompt$ Select target card in your graveyard | ValidTgts$ Card.YouCtrl | SpellDescription$ Return target card from your graveyard to your hand. Oracle:Choose one —\n• Rampant Growth\n• Giant Growth\n• Regrowth diff --git a/forge-gui/res/cardsfolder/g/growth_spasm.txt b/forge-gui/res/cardsfolder/g/growth_spasm.txt index 242a42e4c01..e0aeec9d04e 100644 --- a/forge-gui/res/cardsfolder/g/growth_spasm.txt +++ b/forge-gui/res/cardsfolder/g/growth_spasm.txt @@ -1,7 +1,7 @@ Name:Growth Spasm ManaCost:2 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | Tapped$ True | SubAbility$ DBToken | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | SubAbility$ DBToken | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_0_1_eldrazi_spawn_sac | TokenOwner$ You | SpellDescription$ Create a 0/1 colorless Eldrazi Spawn creature token. It has "Sacrifice this creature: Add {C}." DeckHints:Type$Eldrazi DeckHas:Ability$Mana.Colorless|Token diff --git a/forge-gui/res/cardsfolder/h/harrow.txt b/forge-gui/res/cardsfolder/h/harrow.txt index 33569b4e841..3b2e4d12777 100644 --- a/forge-gui/res/cardsfolder/h/harrow.txt +++ b/forge-gui/res/cardsfolder/h/harrow.txt @@ -1,6 +1,6 @@ Name:Harrow ManaCost:2 G Types:Instant -A:SP$ ChangeZone | Cost$ 2 G Sac<1/Land> | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 2 | SpellDescription$ Search your library for up to two basic land cards, put them onto the battlefield, then shuffle. +A:SP$ ChangeZone | Cost$ 2 G Sac<1/Land> | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 | SpellDescription$ Search your library for up to two basic land cards, put them onto the battlefield, then shuffle. SVar:AIPreference:SacCost$Land.Basic Oracle:As an additional cost to cast this spell, sacrifice a land.\nSearch your library for up to two basic land cards, put them onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/h/harvest_season.txt b/forge-gui/res/cardsfolder/h/harvest_season.txt index f3a644cf5d6..c488d62ea4b 100644 --- a/forge-gui/res/cardsfolder/h/harvest_season.txt +++ b/forge-gui/res/cardsfolder/h/harvest_season.txt @@ -1,6 +1,6 @@ Name:Harvest Season ManaCost:2 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ X | Tapped$ True | SpellDescription$ Search your library for up to X basic land cards, where X is the number of tapped creatures you control, put those cards onto the battlefield tapped, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ X | Tapped$ True | SpellDescription$ Search your library for up to X basic land cards, where X is the number of tapped creatures you control, put those cards onto the battlefield tapped, then shuffle. SVar:X:Count$Valid Creature.tapped+YouCtrl Oracle:Search your library for up to X basic land cards, where X is the number of tapped creatures you control, put those cards onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/h/heaped_harvest.txt b/forge-gui/res/cardsfolder/h/heaped_harvest.txt index 696a3e01720..2b86377d262 100644 --- a/forge-gui/res/cardsfolder/h/heaped_harvest.txt +++ b/forge-gui/res/cardsfolder/h/heaped_harvest.txt @@ -3,7 +3,7 @@ ManaCost:2 G Types:Artifact Food T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters and when you sacrifice it, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle. T:Mode$ Sacrificed | ValidPlayer$ You | ValidCard$ Card.Self | Execute$ TrigChange | Secondary$ True | TriggerZones$ Battlefield | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters and when you sacrifice it, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True A:AB$ GainLife | Cost$ 2 T Sac<1/CARDNAME> | Defined$ You | LifeAmount$ 3 | SpellDescription$ You gain 3 life. SVar:SacMe:5 DeckHas:Ability$LifeGain|Food diff --git a/forge-gui/res/cardsfolder/h/herd_migration.txt b/forge-gui/res/cardsfolder/h/herd_migration.txt index df23cd8cc77..0abc160a05f 100644 --- a/forge-gui/res/cardsfolder/h/herd_migration.txt +++ b/forge-gui/res/cardsfolder/h/herd_migration.txt @@ -2,7 +2,7 @@ Name:Herd Migration ManaCost:6 G Types:Sorcery A:SP$ Token | TokenAmount$ X | TokenScript$ g_3_3_beast | TokenOwner$ You | SpellDescription$ Domain — Create a 3/3 green Beast creature token for each basic land type among lands you control. -A:AB$ ChangeZone | Cost$ 1 G Discard<1/CARDNAME> | ActivationZone$ Hand | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | ChangeTypeDesc$ basic land card | SubAbility$ DBGainLife | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. You gain 3 life. +A:AB$ ChangeZone | Cost$ 1 G Discard<1/CARDNAME> | ActivationZone$ Hand | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SubAbility$ DBGainLife | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. You gain 3 life. SVar:DBGainLife:DB$ GainLife | LifeAmount$ 3 DeckHas:Ability$Discard|LifeGain|Token & Type$Beast SVar:X:Count$Domain diff --git a/forge-gui/res/cardsfolder/h/hithlain_rope.txt b/forge-gui/res/cardsfolder/h/hithlain_rope.txt index 9af07ee80d1..90167d48ef1 100644 --- a/forge-gui/res/cardsfolder/h/hithlain_rope.txt +++ b/forge-gui/res/cardsfolder/h/hithlain_rope.txt @@ -2,7 +2,7 @@ Name:Hithlain Rope ManaCost:2 Types:Artifact S:Mode$ CantSacrifice | ValidCard$ Card.Self | Description$ CARDNAME can't be sacrificed. -A:AB$ ChangeZone | Cost$ 1 T | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | SubAbility$ DBPass | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. The player to your right gains control of CARDNAME. +A:AB$ ChangeZone | Cost$ 1 T | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SubAbility$ DBPass | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. The player to your right gains control of CARDNAME. A:AB$ Draw | Cost$ 2 T | SubAbility$ DBPass | SpellDescription$ Draw a card. The player to your right gains control of CARDNAME. SVar:DBPass:DB$ GainControl | Defined$ Self | NewController$ NextPlayerToYourRight Oracle:Hithlain Rope can't be sacrificed.\n{1}, {T}: Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. The player to your right gains control of Hithlain Rope.\n{2}, {T}: Draw a card. The player to your right gains control of Hithlain Rope. diff --git a/forge-gui/res/cardsfolder/h/horizon_boughs.txt b/forge-gui/res/cardsfolder/h/horizon_boughs.txt index 06fad108964..b23646bd126 100644 --- a/forge-gui/res/cardsfolder/h/horizon_boughs.txt +++ b/forge-gui/res/cardsfolder/h/horizon_boughs.txt @@ -3,6 +3,6 @@ ManaCost:no cost Types:Plane Pyrulea S:Mode$ Continuous | EffectZone$ Command | Affected$ Permanent | AddHiddenKeyword$ CARDNAME untaps during each other player's untap step. | Description$ All permanents untap during each player's untap step. T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ DBFetch | TriggerDescription$ Whenever chaos ensues, you may search your library for up to three basic land cards, put them onto the battlefield tapped, then shuffle. -SVar:DBFetch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 3 | ShuffleNonMandatory$ True +SVar:DBFetch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 3 | ShuffleNonMandatory$ True SVar:AIRollPlanarDieParams:Mode$ Always | LowPriority$ True | MaxRollsPerTurn$ 9 Oracle:All permanents untap during each player's untap step.\nWhenever chaos ensues, you may search your library for up to three basic land cards, put them onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/h/horizon_seeker.txt b/forge-gui/res/cardsfolder/h/horizon_seeker.txt index 89aa71d133e..b3766d6fe1d 100644 --- a/forge-gui/res/cardsfolder/h/horizon_seeker.txt +++ b/forge-gui/res/cardsfolder/h/horizon_seeker.txt @@ -2,5 +2,5 @@ Name:Horizon Seeker ManaCost:2 G Types:Creature Human Warrior PT:3/2 -A:AB$ ChangeZone | Cost$ 1 G | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | Boast$ True | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. +A:AB$ ChangeZone | Cost$ 1 G | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Boast$ True | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. Oracle:Boast — {1}{G}: Search your library for a basic land card, reveal it, put it into your hand, then shuffle. (Activate only if this creature attacked this turn and only once each turn.) diff --git a/forge-gui/res/cardsfolder/h/horizon_spellbomb.txt b/forge-gui/res/cardsfolder/h/horizon_spellbomb.txt index 12a27333533..8fb54f10863 100644 --- a/forge-gui/res/cardsfolder/h/horizon_spellbomb.txt +++ b/forge-gui/res/cardsfolder/h/horizon_spellbomb.txt @@ -1,7 +1,7 @@ Name:Horizon Spellbomb ManaCost:1 Types:Artifact -A:AB$ ChangeZone | Cost$ 2 T Sac<1/CARDNAME> | ChangeType$ Land.Basic | Origin$ Library | Destination$ Hand | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. +A:AB$ ChangeZone | Cost$ 2 T Sac<1/CARDNAME> | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Origin$ Library | Destination$ Hand | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | OptionalDecider$ TriggeredCardController | Execute$ TrigDraw | TriggerDescription$ When CARDNAME is put into a graveyard from the battlefield, you may pay {G}. If you do, draw a card. SVar:TrigDraw:AB$ Draw | Cost$ G | NumCards$ 1 Oracle:{2}, {T}, Sacrifice Horizon Spellbomb: Search your library for a basic land card, reveal it, put it into your hand, then shuffle.\nWhen Horizon Spellbomb is put into a graveyard from the battlefield, you may pay {G}. If you do, draw a card. diff --git a/forge-gui/res/cardsfolder/h/huatli_poet_of_unity_roar_of_the_fifth_people.txt b/forge-gui/res/cardsfolder/h/huatli_poet_of_unity_roar_of_the_fifth_people.txt index c9729cef42d..8b4fc6eed77 100644 --- a/forge-gui/res/cardsfolder/h/huatli_poet_of_unity_roar_of_the_fifth_people.txt +++ b/forge-gui/res/cardsfolder/h/huatli_poet_of_unity_roar_of_the_fifth_people.txt @@ -3,7 +3,7 @@ ManaCost:2 G Types:Legendary Creature Human Warrior Bard PT:2/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters, search your library for a basic land card, reveal it, put it into your hand, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land A:AB$ ChangeZone | Cost$ 3 RW RW | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DBReturn | SorcerySpeed$ True | StackDescription$ SpellDescription | SpellDescription$ Exile NICKNAME, then return it to the battlefield transformed under its owner's control. Activate only as a sorcery. SVar:DBReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | Transformed$ True | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/i/invasion_of_zendikar_awakened_skyclave.txt b/forge-gui/res/cardsfolder/i/invasion_of_zendikar_awakened_skyclave.txt index ba44ec75b89..6348ab29f33 100644 --- a/forge-gui/res/cardsfolder/i/invasion_of_zendikar_awakened_skyclave.txt +++ b/forge-gui/res/cardsfolder/i/invasion_of_zendikar_awakened_skyclave.txt @@ -3,7 +3,7 @@ ManaCost:3 G Types:Battle Siege Defense:3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSearch | TriggerDescription$ When CARDNAME enters, search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. -SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 2 +SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 AlternateMode:DoubleFaced Oracle:(As a Siege enters, choose an opponent to protect it. You and others can attack it. When it's defeated, exile it, then cast it transformed.)\nWhen Invasion of Zendikar enters, search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/j/jaheiras_respite.txt b/forge-gui/res/cardsfolder/j/jaheiras_respite.txt index 929ef0dc8a7..277f4266867 100644 --- a/forge-gui/res/cardsfolder/j/jaheiras_respite.txt +++ b/forge-gui/res/cardsfolder/j/jaheiras_respite.txt @@ -1,7 +1,7 @@ Name:Jaheira's Respite ManaCost:4 G Types:Instant -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ X | Tapped$ True | SubAbility$ DBFog | SpellDescription$ Search your library for up to X basic land cards, where X is the number of creatures attacking you, put those cards onto the battlefield tapped, then shuffle. Prevent all combat damage that would be dealt this turn. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ X | Tapped$ True | SubAbility$ DBFog | SpellDescription$ Search your library for up to X basic land cards, where X is the number of creatures attacking you, put those cards onto the battlefield tapped, then shuffle. Prevent all combat damage that would be dealt this turn. SVar:X:Count$Valid Creature.attackingYou SVar:DBFog:DB$ Fog Oracle:Search your library for up to X basic land cards, where X is the number of creatures attacking you, put those cards onto the battlefield tapped, then shuffle.\nPrevent all combat damage that would be dealt this turn. diff --git a/forge-gui/res/cardsfolder/j/jeskai_monument.txt b/forge-gui/res/cardsfolder/j/jeskai_monument.txt index 3a8d4b26062..ef93bb8e4af 100644 --- a/forge-gui/res/cardsfolder/j/jeskai_monument.txt +++ b/forge-gui/res/cardsfolder/j/jeskai_monument.txt @@ -2,7 +2,7 @@ Name:Jeskai Monument ManaCost:2 Types:Artifact T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When this artifact enters, search your library for a basic Island, Mountain, or Plains card, reveal it, put it into your hand, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Island+Basic,Land.Mountain+Basic,Land.Plains+Basic +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Island.Basic,Mountain.Basic,Plains.Basic | ChangeTypeDesc$ basic Island, Mountain, or Plains A:AB$ Token | Cost$ 1 U R W T Sac<1/CARDNAME> | TokenAmount$ 2 | TokenScript$ w_1_1_bird_flying | TokenOwner$ You | SorcerySpeed$ True | SpellDescription$ Create two 1/1 white Bird creature tokens with flying. Activate only as a sorcery. DeckHas:Ability$Token Oracle:When this artifact enters, search your library for a basic Island, Mountain, or Plains card, reveal it, put it into your hand, then shuffle.\n{1}{U}{R}{W}, {T}, Sacrifice this artifact: Create two 1/1 white Bird creature tokens with flying. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/j/journey_for_the_elixir.txt b/forge-gui/res/cardsfolder/j/journey_for_the_elixir.txt index b46c05ca583..5a97df45598 100644 --- a/forge-gui/res/cardsfolder/j/journey_for_the_elixir.txt +++ b/forge-gui/res/cardsfolder/j/journey_for_the_elixir.txt @@ -1,7 +1,7 @@ Name:Journey for the Elixir ManaCost:2 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library,Graveyard | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | Shuffle$ False | SubAbility$ DBSearch1 | SpellDescription$ Search your library and graveyard for a basic land card and a card named Jiang Yanggu, reveal them, put them into your hand, then shuffle. +A:SP$ ChangeZone | Origin$ Library,Graveyard | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Shuffle$ False | SubAbility$ DBSearch1 | SpellDescription$ Search your library and graveyard for a basic land card and a card named Jiang Yanggu, reveal them, put them into your hand, then shuffle. SVar:DBSearch1:DB$ ChangeZone | Origin$ Library,Graveyard | Destination$ Hand | ChangeType$ Card.namedJiang Yanggu | ChangeNum$ 1 DeckNeeds:Name$Jiang Yanggu Oracle:Search your library and graveyard for a basic land card and a card named Jiang Yanggu, reveal them, put them into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/j/journey_of_discovery.txt b/forge-gui/res/cardsfolder/j/journey_of_discovery.txt index 60aea28cebb..fb098ac74b9 100644 --- a/forge-gui/res/cardsfolder/j/journey_of_discovery.txt +++ b/forge-gui/res/cardsfolder/j/journey_of_discovery.txt @@ -3,7 +3,7 @@ ManaCost:2 G Types:Sorcery K:Entwine:2 G A:SP$ Charm | Choices$ DBChangeZone,DBEffect | CharmNum$ 1 -SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 2 | SpellDescription$ Search your library for up to two basic land cards, reveal them, put them into your hand, then shuffle. +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 | SpellDescription$ Search your library for up to two basic land cards, reveal them, put them into your hand, then shuffle. SVar:DBEffect:DB$ Effect | StaticAbilities$ JourneyOfDis | AILogic$ Always | SpellDescription$ You may play up to two additional lands this turn. SVar:JourneyOfDis:Mode$ Continuous | Affected$ You | AdjustLandPlays$ 2 | Description$ You may play two additional lands this turn. AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/j/journeyers_kite.txt b/forge-gui/res/cardsfolder/j/journeyers_kite.txt index 5c238d3d792..467fd70d729 100644 --- a/forge-gui/res/cardsfolder/j/journeyers_kite.txt +++ b/forge-gui/res/cardsfolder/j/journeyers_kite.txt @@ -1,5 +1,5 @@ Name:Journeyer's Kite ManaCost:2 Types:Artifact -A:AB$ ChangeZone | Cost$ 3 T | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. +A:AB$ ChangeZone | Cost$ 3 T | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. Oracle:{3}, {T}: Search your library for a basic land card, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/j/jund_panorama.txt b/forge-gui/res/cardsfolder/j/jund_panorama.txt index cf66eee31c9..a114281d878 100644 --- a/forge-gui/res/cardsfolder/j/jund_panorama.txt +++ b/forge-gui/res/cardsfolder/j/jund_panorama.txt @@ -2,5 +2,5 @@ Name:Jund Panorama ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. -A:AB$ ChangeZone | Cost$ 1 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Swamp+Basic,Land.Mountain+Basic,Land.Forest+Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic Swamp, Mountain, or Forest card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ 1 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Swamp.Basic,Mountain.Basic,Forest.Basic | ChangeTypeDesc$ basic Swamp, Mountain, or Forest | SpellDescription$ Search your library for a basic Swamp, Mountain, or Forest card, put it onto the battlefield tapped, then shuffle. Oracle:{T}: Add {C}.\n{1}, {T}, Sacrifice Jund Panorama: Search your library for a basic Swamp, Mountain, or Forest card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/j/jungle_wayfinder.txt b/forge-gui/res/cardsfolder/j/jungle_wayfinder.txt index a42476effec..695b1f4b121 100644 --- a/forge-gui/res/cardsfolder/j/jungle_wayfinder.txt +++ b/forge-gui/res/cardsfolder/j/jungle_wayfinder.txt @@ -3,5 +3,5 @@ ManaCost:2 G Types:Creature Elf Warrior PT:3/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters, each player may search their library for a basic land card, reveal it, put it into their hand, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | DefinedPlayer$ Player | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | DefinedPlayer$ Player | ChangeNum$ 1 | ShuffleNonMandatory$ True Oracle:When Jungle Wayfinder enters, each player may search their library for a basic land card, reveal it, put it into their hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/k/kamigawa_charm.txt b/forge-gui/res/cardsfolder/k/kamigawa_charm.txt index 385cd100663..23bcaad437e 100644 --- a/forge-gui/res/cardsfolder/k/kamigawa_charm.txt +++ b/forge-gui/res/cardsfolder/k/kamigawa_charm.txt @@ -4,7 +4,7 @@ Types:Sorcery A:SP$ Charm | Choices$ DosansOldestChant,KodamasReach,TimeOfNeed | Defined$ You SVar:DosansOldestChant:DB$ GainLife | LifeAmount$ 6 | SubAbility$ DBDraw | SpellDescription$ You gain 6 life. Draw a card. SVar:DBDraw:DB$ Draw | NumCards$ 1 -SVar:KodamasReach:DB$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Land.Basic | ChangeNum$ 2 | RememberChanged$ True | Reveal$ True | Shuffle$ False | StackDescription$ SpellDescription | SubAbility$ DBChangeZone1 | SpellDescription$ Search your library for up to two basic land cards, reveal those cards, put one onto the battlefield tapped and the other into your hand, then shuffle. +SVar:KodamasReach:DB$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 | RememberChanged$ True | Reveal$ True | Shuffle$ False | StackDescription$ SpellDescription | SubAbility$ DBChangeZone1 | SpellDescription$ Search your library for up to two basic land cards, reveal those cards, put one onto the battlefield tapped and the other into your hand, then shuffle. SVar:DBChangeZone1:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.IsRemembered | ChangeNum$ 1 | Mandatory$ True | NoLooking$ True | SelectPrompt$ Select a card to put onto the battlefield | Tapped$ True | Shuffle$ False | SubAbility$ DBChangeZone2 | StackDescription$ None SVar:DBChangeZone2:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.IsRemembered | Mandatory$ True | NoLooking$ True | SelectPrompt$ Select a card to put into your hand | StackDescription$ None | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/k/kellan_the_fae_blooded_birthright_boon.txt b/forge-gui/res/cardsfolder/k/kellan_the_fae_blooded_birthright_boon.txt index ba9f7bd4989..62bb5b3a2e7 100644 --- a/forge-gui/res/cardsfolder/k/kellan_the_fae_blooded_birthright_boon.txt +++ b/forge-gui/res/cardsfolder/k/kellan_the_fae_blooded_birthright_boon.txt @@ -16,5 +16,5 @@ ALTERNATE Name:Birthright Boon ManaCost:1 W Types:Sorcery Adventure -A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Aura,Equipment | ChangeNum$ 1 | SpellDescription$ Search your library for an Aura or Equipment card, reveal it, put it into your hand, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Aura,Equipment | SpellDescription$ Search your library for an Aura or Equipment card, reveal it, put it into your hand, then shuffle. Oracle:Search your library for an Aura or Equipment card, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/k/keys_to_the_house.txt b/forge-gui/res/cardsfolder/k/keys_to_the_house.txt index e11d451871e..e831128c6ac 100644 --- a/forge-gui/res/cardsfolder/k/keys_to_the_house.txt +++ b/forge-gui/res/cardsfolder/k/keys_to_the_house.txt @@ -1,6 +1,6 @@ Name:Keys to the House ManaCost:1 Types:Artifact -A:AB$ ChangeZone | Cost$ 1 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. +A:AB$ ChangeZone | Cost$ 1 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. A:AB$ UnlockDoor | Cost$ 3 T Sac<1/CARDNAME> | Mode$ LockOrUnlock | ValidTgts$ Room.YouCtrl | TgtPrompt$ Choose target Room you control | SorcerySpeed$ True | SpellDescription$ Lock or unlock a door of target Room you control. Activate only as a sorcery. Oracle:{1}, {T}, Sacrifice Keys to the House: Search your library for a basic land card, reveal it, put it into your hand, then shuffle.\n{3}, {T}, Sacrifice Keys to the House: Lock or unlock a door of target Room you control. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/k/khalni_heart_expedition.txt b/forge-gui/res/cardsfolder/k/khalni_heart_expedition.txt index 93fd55fd29c..6c7502ed0b9 100644 --- a/forge-gui/res/cardsfolder/k/khalni_heart_expedition.txt +++ b/forge-gui/res/cardsfolder/k/khalni_heart_expedition.txt @@ -3,7 +3,7 @@ ManaCost:1 G Types:Enchantment T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Land.YouCtrl | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigPutCounter | TriggerDescription$ Landfall — Whenever a land you control enters, you may put a quest counter on CARDNAME. SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ QUEST | CounterNum$ 1 -A:AB$ ChangeZone | Cost$ SubCounter<3/QUEST> Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 2 | Tapped$ True | SpellDescription$ Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ SubCounter<3/QUEST> Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 | Tapped$ True | SpellDescription$ Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. SVar:MaxQuestEffect:3 DeckHas:Ability$Counters Oracle:Landfall — Whenever a land you control enters, you may put a quest counter on Khalni Heart Expedition.\nRemove three quest counters from Khalni Heart Expedition and sacrifice it: Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/k/knowledge_exploitation.txt b/forge-gui/res/cardsfolder/k/knowledge_exploitation.txt index 21bfa1d8ddc..295efb2fe38 100644 --- a/forge-gui/res/cardsfolder/k/knowledge_exploitation.txt +++ b/forge-gui/res/cardsfolder/k/knowledge_exploitation.txt @@ -2,7 +2,7 @@ Name:Knowledge Exploitation ManaCost:5 U U Types:Kindred Sorcery Rogue K:Prowl:3 U -A:SP$ ChangeZone | ValidTgts$ Opponent | Origin$ Library | Destination$ Library | ChangeType$ Instant,Sorcery | ChangeNum$ 1 | RememberChanged$ True | Reveal$ True | Shuffle$ False | DefinedPlayer$ Targeted | Chooser$ You | SubAbility$ DBPlay | StackDescription$ Search {p:Targeted}'s library for an instant or sorcery card | SpellDescription$ Search target opponent's library for an instant or sorcery card. You may cast that card without paying its mana cost. Then that player shuffles. +A:SP$ ChangeZone | ValidTgts$ Opponent | Origin$ Library | Destination$ Library | ChangeType$ Instant,Sorcery | RememberChanged$ True | Reveal$ True | Shuffle$ False | DefinedPlayer$ Targeted | Chooser$ You | SubAbility$ DBPlay | StackDescription$ Search {p:Targeted}'s library for an instant or sorcery card | SpellDescription$ Search target opponent's library for an instant or sorcery card. You may cast that card without paying its mana cost. Then that player shuffles. SVar:DBPlay:DB$ Play | Defined$ Remembered | Controller$ You | WithoutManaCost$ True | ValidSA$ Spell | Optional$ True | SubAbility$ DBShuffle SVar:DBShuffle:DB$ Shuffle | Defined$ RememberedController | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/k/kodama_of_the_west_tree.txt b/forge-gui/res/cardsfolder/k/kodama_of_the_west_tree.txt index 967aaaf12e3..54382f36e51 100644 --- a/forge-gui/res/cardsfolder/k/kodama_of_the_west_tree.txt +++ b/forge-gui/res/cardsfolder/k/kodama_of_the_west_tree.txt @@ -5,6 +5,6 @@ PT:3/3 K:Reach S:Mode$ Continuous | Affected$ Creature.modified+YouCtrl | AddKeyword$ Trample | Description$ Modified creatures you control have trample. T:Mode$ DamageDone | ValidSource$ Creature.modified+YouCtrl | ValidTarget$ Opponent | TriggerZones$ Battlefield | CombatDamage$ True | Execute$ TrigSearch | TriggerDescription$ Whenever a modified creature you control deals combat damage to an opponent, search your library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ 1 +SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ChangeNum$ 1 DeckHints:Type$Aura|Equipment & Ability$Counters Oracle:Reach\nModified creatures you control have trample. (Equipment, Auras you control, and counters are modifications.)\nWhenever a modified creature you control deals combat damage to an opponent, search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/k/kodamas_reach.txt b/forge-gui/res/cardsfolder/k/kodamas_reach.txt index dc9f6bd9453..0b550bd16cf 100644 --- a/forge-gui/res/cardsfolder/k/kodamas_reach.txt +++ b/forge-gui/res/cardsfolder/k/kodamas_reach.txt @@ -1,7 +1,7 @@ Name:Kodama's Reach ManaCost:2 G Types:Sorcery Arcane -A:SP$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Land.Basic | ChangeNum$ 2 | RememberChanged$ True | Reveal$ True | Shuffle$ False | StackDescription$ SpellDescription | SubAbility$ DBChangeZone1 | SpellDescription$ Search your library for up to two basic land cards, reveal those cards, put one onto the battlefield tapped and the other into your hand, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 | RememberChanged$ True | Reveal$ True | Shuffle$ False | StackDescription$ SpellDescription | SubAbility$ DBChangeZone1 | SpellDescription$ Search your library for up to two basic land cards, reveal those cards, put one onto the battlefield tapped and the other into your hand, then shuffle. SVar:DBChangeZone1:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.IsRemembered | ChangeNum$ 1 | Mandatory$ True | NoLooking$ True | SelectPrompt$ Select a card to put onto the battlefield | Tapped$ True | Shuffle$ False | SubAbility$ DBChangeZone2 | StackDescription$ None SVar:DBChangeZone2:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.IsRemembered | Mandatory$ True | NoLooking$ True | SelectPrompt$ Select a card to put into your hand | StackDescription$ None | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/k/krenkos_buzzcrusher.txt b/forge-gui/res/cardsfolder/k/krenkos_buzzcrusher.txt index 3ac3d15e3fa..fef54fe87ea 100644 --- a/forge-gui/res/cardsfolder/k/krenkos_buzzcrusher.txt +++ b/forge-gui/res/cardsfolder/k/krenkos_buzzcrusher.txt @@ -8,6 +8,6 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S SVar:DBForEach:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBChoose | SubAbility$ DBDestroy SVar:DBChoose:DB$ ChooseCard | ChoiceZone$ Battlefield | Amount$ 1 | Choices$ Land.nonBasic+RememberedPlayerCtrl | Optional$ True | ImprintChosen$ True | ChoiceTitle$ Choose up to one nonbasic land this player controls SVar:DBDestroy:DB$ Destroy | Defined$ Imprinted | RememberDestroyed$ True | SubAbility$ DBSearch -SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | DefinedPlayer$ RememberedController | Optional$ True | SubAbility$ DBCleanup +SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | DefinedPlayer$ RememberedController | Optional$ True | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True Oracle:Flying, trample\nWhen Krenko's Buzzcrusher enters, for each player, destroy up to one nonbasic land that player controls. For each land destroyed this way, its controller may search their library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/k/krosan_tusker.txt b/forge-gui/res/cardsfolder/k/krosan_tusker.txt index dd7945c5401..f4b6207f5d0 100644 --- a/forge-gui/res/cardsfolder/k/krosan_tusker.txt +++ b/forge-gui/res/cardsfolder/k/krosan_tusker.txt @@ -4,5 +4,5 @@ Types:Creature Boar Beast PT:6/5 K:Cycling:2 G T:Mode$ Cycled | ValidCard$ Card.Self | Execute$ TrigChangeZone | OptionalDecider$ You | TriggerDescription$ When you cycle CARDNAME, you may search your library for a basic land card, reveal that card, put it into your hand, then shuffle. (Do this before you draw.) -SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True Oracle:Cycling {2}{G} ({2}{G}, Discard this card: Draw a card.)\nWhen you cycle Krosan Tusker, you may search your library for a basic land card, reveal that card, put it into your hand, then shuffle. (Do this before you draw.) diff --git a/forge-gui/res/cardsfolder/l/land_tax.txt b/forge-gui/res/cardsfolder/l/land_tax.txt index b0ae1f05747..6cdc628e643 100644 --- a/forge-gui/res/cardsfolder/l/land_tax.txt +++ b/forge-gui/res/cardsfolder/l/land_tax.txt @@ -2,7 +2,7 @@ Name:Land Tax ManaCost:W Types:Enchantment T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigChange | CheckSVar$ Y | SVarCompare$ GTX | TriggerDescription$ At the beginning of your upkeep, if an opponent controls more lands than you, you may search your library for up to three basic land cards, reveal them, put them into your hand, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 3 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 3 | ShuffleNonMandatory$ True SVar:X:Count$Valid Land.YouCtrl SVar:Y:PlayerCountOpponents$HighestValid Land.YouCtrl Oracle:At the beginning of your upkeep, if an opponent controls more lands than you, you may search your library for up to three basic land cards, reveal them, put them into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/l/larval_scoutlander.txt b/forge-gui/res/cardsfolder/l/larval_scoutlander.txt index 17c76aa646b..4b65c5a4255 100644 --- a/forge-gui/res/cardsfolder/l/larval_scoutlander.txt +++ b/forge-gui/res/cardsfolder/l/larval_scoutlander.txt @@ -3,7 +3,7 @@ ManaCost:2 G Types:Artifact Spacecraft PT:3/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When this Spacecraft enters, you may sacrifice a land or Lander. If you do, search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. -SVar:TrigChangeZone:AB$ ChangeZone | Cost$ Sac<1/Land;Lander/land or Lander> | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 2 | Tapped$ True +SVar:TrigChangeZone:AB$ ChangeZone | Cost$ Sac<1/Land;Lander/land or Lander> | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 | Tapped$ True K:Station:7 S:Mode$ Continuous | Affected$ Card.Self+counters_GE7_CHARGE | AddType$ Creature | AddKeyword$ Flying | Description$ STATION 7+ Flying Oracle:When this Spacecraft enters, you may sacrifice a land or Lander. If you do, search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle.\nStation (Tap another creature you control: Put charge counters equal to its power on this Spacecraft. Station only as a sorcery. It's an artifact creature at 7+.)\nSTATION 7+\nFlying diff --git a/forge-gui/res/cardsfolder/l/lay_of_the_land.txt b/forge-gui/res/cardsfolder/l/lay_of_the_land.txt index 1ea27c89f9e..b5310fb8b4b 100644 --- a/forge-gui/res/cardsfolder/l/lay_of_the_land.txt +++ b/forge-gui/res/cardsfolder/l/lay_of_the_land.txt @@ -1,5 +1,5 @@ Name:Lay of the Land ManaCost:G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. Oracle:Search your library for a basic land card, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/l/loam_larva.txt b/forge-gui/res/cardsfolder/l/loam_larva.txt index 8fcad11cae0..d1394e63b79 100644 --- a/forge-gui/res/cardsfolder/l/loam_larva.txt +++ b/forge-gui/res/cardsfolder/l/loam_larva.txt @@ -3,5 +3,5 @@ ManaCost:1 G Types:Creature Insect PT:1/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, you may search your library for a basic land card, reveal it, then shuffle and put that card on top. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Library | LibraryPosition$ 0 | ChangeType$ Land.Basic | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Library | LibraryPosition$ 0 | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True Oracle:When Loam Larva enters, you may search your library for a basic land card, reveal it, then shuffle and put that card on top. diff --git a/forge-gui/res/cardsfolder/l/lumbering_worldwagon.txt b/forge-gui/res/cardsfolder/l/lumbering_worldwagon.txt index 71014d3d590..ea2cef8462e 100644 --- a/forge-gui/res/cardsfolder/l/lumbering_worldwagon.txt +++ b/forge-gui/res/cardsfolder/l/lumbering_worldwagon.txt @@ -5,7 +5,7 @@ PT:*/4 S:Mode$ Continuous | CharacteristicDefining$ True | SetPower$ X | Description$ This Vehicle's power is equal to the number of lands you control. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChangeZone | OptionalDecider$ You | TriggerDescription$ Whenever this Vehicle enters or attacks, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle. T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerZones$ Battlefield | OptionalDecider$ You | Secondary$ True | TriggerDescription$ Whenever this Vehicle enters or attacks, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 +SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land K:Crew:4 SVar:X:Count$Valid Land.YouCtrl SVar:BuffedBy:Land diff --git a/forge-gui/res/cardsfolder/m/maestros_theater.txt b/forge-gui/res/cardsfolder/m/maestros_theater.txt index 738c72e7533..f3d1652be63 100644 --- a/forge-gui/res/cardsfolder/m/maestros_theater.txt +++ b/forge-gui/res/cardsfolder/m/maestros_theater.txt @@ -4,7 +4,7 @@ Types:Land T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBSacrifice | TriggerDescription$ When CARDNAME enters, sacrifice it. When you do, search your library for a basic Island, Swamp, or Mountain card, put it onto the battlefield tapped, then shuffle and you gain 1 life. SVar:DBSacrifice:DB$ Sacrifice | RememberSacrificed$ True | SubAbility$ DBImmediateTrigger SVar:DBImmediateTrigger:DB$ ImmediateTrigger | ConditionDefined$ Remembered | ConditionPresent$ Card | Execute$ DBChangeZone | SubAbility$ DBCleanup | TriggerDescription$ Search your library for a basic Island, Swamp, or Mountain card, put it onto the battlefield tapped, then shuffle and you gain 1 life. -SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Island+Basic,Land.Swamp+Basic,Land.Mountain+Basic | ChangeNum$ 1 | SubAbility$ DBGainLife +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Island.Basic,Swamp.Basic,Mountain.Basic | ChangeTypeDesc$ basic Island, Swamp, or Mountain | SubAbility$ DBGainLife SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1 SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Sacrifice|LifeGain diff --git a/forge-gui/res/cardsfolder/m/magmatic_hellkite.txt b/forge-gui/res/cardsfolder/m/magmatic_hellkite.txt index 99ceec4e7a4..0d954cbeefd 100644 --- a/forge-gui/res/cardsfolder/m/magmatic_hellkite.txt +++ b/forge-gui/res/cardsfolder/m/magmatic_hellkite.txt @@ -5,5 +5,5 @@ PT:4/5 K:Flying T:Mode$ ChangesZone | ValidCard$ Card.Self | Destination$ Battlefield | Execute$ TrigDestroy | TriggerDescription$ When this creature enters, destroy target nonbasic land an opponent controls. Its controller searches their library for a basic land card, puts it on the battlefield tapped with a stun counter on it, then shuffles. (If a permanent with a stun counter would become untapped, remove one from it instead.) SVar:TrigDestroy:DB$ Destroy | ValidTgts$ Land.nonBasic+OppCtrl | TgtPrompt$ Select target nonbasic land an opponent controls | SubAbility$ DBChange -SVar:DBChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | DefinedPlayer$ TargetedController | Tapped$ True | WithCountersType$ STUN +SVar:DBChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | DefinedPlayer$ TargetedController | Tapped$ True | WithCountersType$ STUN Oracle:Flying\nWhen this creature enters, destroy target nonbasic land an opponent controls. Its controller searches their library for a basic land card, puts it on the battlefield tapped with a stun counter on it, then shuffles. (If a permanent with a stun counter would become untapped, remove one from it instead.) diff --git a/forge-gui/res/cardsfolder/m/many_partings.txt b/forge-gui/res/cardsfolder/m/many_partings.txt index f51fdc39d29..b59bc04dcac 100644 --- a/forge-gui/res/cardsfolder/m/many_partings.txt +++ b/forge-gui/res/cardsfolder/m/many_partings.txt @@ -1,7 +1,7 @@ Name:Many Partings ManaCost:G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | SubAbility$ DBToken | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. Create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SubAbility$ DBToken | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. Create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") SVar:DBToken:DB$ Token | TokenScript$ c_a_food_sac DeckHas:Ability$Token|LifeGain|Sacrifice & Type$Artifact|Food Oracle:Search your library for a basic land card, reveal it, put it into your hand, then shuffle. Create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") diff --git a/forge-gui/res/cardsfolder/m/map_the_wastes.txt b/forge-gui/res/cardsfolder/m/map_the_wastes.txt index f6ca95af749..a059b1f63e8 100644 --- a/forge-gui/res/cardsfolder/m/map_the_wastes.txt +++ b/forge-gui/res/cardsfolder/m/map_the_wastes.txt @@ -1,7 +1,7 @@ Name:Map the Wastes ManaCost:2 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ 1 | SubAbility$ DBBolster | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. Bolster 1. (Choose a creature with the least toughness among creatures you control and put a +1/+1 counter on it.) +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ChangeNum$ 1 | SubAbility$ DBBolster | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. Bolster 1. (Choose a creature with the least toughness among creatures you control and put a +1/+1 counter on it.) SVar:DBBolster:DB$ PutCounter | Bolster$ True | CounterNum$ 1 | CounterType$ P1P1 DeckHas:Ability$Counters Oracle:Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. Bolster 1. (Choose a creature with the least toughness among creatures you control and put a +1/+1 counter on it.) diff --git a/forge-gui/res/cardsfolder/m/mardu_monument.txt b/forge-gui/res/cardsfolder/m/mardu_monument.txt index 8b569e78f20..fd56ce66f3e 100644 --- a/forge-gui/res/cardsfolder/m/mardu_monument.txt +++ b/forge-gui/res/cardsfolder/m/mardu_monument.txt @@ -2,7 +2,7 @@ Name:Mardu Monument ManaCost:2 Types:Artifact T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When this artifact enters, search your library for a basic Mountain, Plains, or Swamp card, reveal it, put it into your hand, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Mountain+Basic,Land.Plains+Basic,Land.Swamp+Basic +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Mountain.Basic,Plains.Basic,Swamp.Basic | ChangeTypeDesc$ basic Mountain, Plains, or Swamp A:AB$ Token | Cost$ 2 R W B T Sac<1/CARDNAME> | TokenAmount$ 3 | TokenScript$ r_1_1_warrior | TokenOwner$ You | PumpKeywords$ Menace & Haste | PumpDuration$ EOT | SorcerySpeed$ True | SpellDescription$ Create three 1/1 red Warrior creature tokens. They gain menace and haste until end of turn. Activate only as a sorcery. (A creature with menace can't be blocked except by two or more creatures.) DeckHas:Ability$Token Oracle:When this artifact enters, search your library for a basic Mountain, Plains, or Swamp card, reveal it, put it into your hand, then shuffle.\n{2}{R}{W}{B}, {T}, Sacrifice this artifact: Create three 1/1 red Warrior creature tokens. They gain menace and haste until end of turn. Activate only as a sorcery. (A creature with menace can't be blocked except by two or more creatures.) diff --git a/forge-gui/res/cardsfolder/m/marsh_flats.txt b/forge-gui/res/cardsfolder/m/marsh_flats.txt index ff67cc21ae2..2a455802e98 100644 --- a/forge-gui/res/cardsfolder/m/marsh_flats.txt +++ b/forge-gui/res/cardsfolder/m/marsh_flats.txt @@ -1,5 +1,5 @@ Name:Marsh Flats ManaCost:no cost Types:Land -A:AB$ ChangeZone | Cost$ T PayLife<1> Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Plains,Swamp | ChangeNum$ 1 | SpellDescription$ Search your library for a Plains or Swamp card, put it onto the battlefield, then shuffle. +A:AB$ ChangeZone | Cost$ T PayLife<1> Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Plains,Swamp | SpellDescription$ Search your library for a Plains or Swamp card, put it onto the battlefield, then shuffle. Oracle:{T}, Pay 1 life, Sacrifice Marsh Flats: Search your library for a Plains or Swamp card, put it onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/m/merchant_scroll.txt b/forge-gui/res/cardsfolder/m/merchant_scroll.txt index 2c630b6def4..ba1690e0c71 100644 --- a/forge-gui/res/cardsfolder/m/merchant_scroll.txt +++ b/forge-gui/res/cardsfolder/m/merchant_scroll.txt @@ -1,6 +1,6 @@ Name:Merchant Scroll ManaCost:1 U Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Instant.Blue | ChangeNum$ 1 | SpellDescription$ Search your library for a blue instant card, reveal that card, put it into your hand, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Instant.Blue | ChangeTypeDesc$ blue instant | SpellDescription$ Search your library for a blue instant card, reveal that card, put it into your hand, then shuffle. AI:RemoveDeck:All Oracle:Search your library for a blue instant card, reveal that card, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/m/migration_path.txt b/forge-gui/res/cardsfolder/m/migration_path.txt index 08becc0292d..64abc1e8909 100644 --- a/forge-gui/res/cardsfolder/m/migration_path.txt +++ b/forge-gui/res/cardsfolder/m/migration_path.txt @@ -1,6 +1,6 @@ Name:Migration Path ManaCost:3 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 2 | StackDescription$ SpellDescription | SpellDescription$ Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 | StackDescription$ SpellDescription | SpellDescription$ Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. K:Cycling:2 Oracle:Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle.\nCycling {2} ({2}, Discard this card: Draw a card.) diff --git a/forge-gui/res/cardsfolder/m/migratory_greathorn.txt b/forge-gui/res/cardsfolder/m/migratory_greathorn.txt index 5ab769dd426..18002e002c4 100644 --- a/forge-gui/res/cardsfolder/m/migratory_greathorn.txt +++ b/forge-gui/res/cardsfolder/m/migratory_greathorn.txt @@ -4,5 +4,5 @@ Types:Creature Beast PT:3/4 K:Mutate:2 G T:Mode$ Mutates | ValidCard$ Card.Self | Execute$ TrigChange | TriggerZones$ Battlefield | TriggerDescription$ Whenever this creature mutates, search your library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land Oracle:Mutate {2}{G} (If you cast this spell for its mutate cost, put it over or under target non-Human creature you own. They mutate into the creature on top plus all abilities from under it.)\nWhenever this creature mutates, search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/m/misty_rainforest.txt b/forge-gui/res/cardsfolder/m/misty_rainforest.txt index 367dd6e6aee..0207fab6398 100644 --- a/forge-gui/res/cardsfolder/m/misty_rainforest.txt +++ b/forge-gui/res/cardsfolder/m/misty_rainforest.txt @@ -1,5 +1,5 @@ Name:Misty Rainforest ManaCost:no cost Types:Land -A:AB$ ChangeZone | Cost$ T PayLife<1> Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Forest,Island | ChangeNum$ 1 | SpellDescription$ Search your library for a Forest or Island card, put it onto the battlefield, then shuffle. +A:AB$ ChangeZone | Cost$ T PayLife<1> Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Forest,Island | SpellDescription$ Search your library for a Forest or Island card, put it onto the battlefield, then shuffle. Oracle:{T}, Pay 1 life, Sacrifice Misty Rainforest: Search your library for a Forest or Island card, put it onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/m/moggcatcher.txt b/forge-gui/res/cardsfolder/m/moggcatcher.txt index d4a59f15253..b694bac10fe 100644 --- a/forge-gui/res/cardsfolder/m/moggcatcher.txt +++ b/forge-gui/res/cardsfolder/m/moggcatcher.txt @@ -2,7 +2,7 @@ Name:Moggcatcher ManaCost:2 R R Types:Creature Human Mercenary PT:2/2 -A:AB$ ChangeZone | Cost$ 3 T | Origin$ Library | Destination$ Battlefield | ChangeType$ Permanent.Goblin | ChangeNum$ 1 | SpellDescription$ Search your library for a Goblin permanent card, put it onto the battlefield, then shuffle. +A:AB$ ChangeZone | Cost$ 3 T | Origin$ Library | Destination$ Battlefield | ChangeType$ Permanent.Goblin | ChangeTypeDesc$ Goblin permanent | SpellDescription$ Search your library for a Goblin permanent card, put it onto the battlefield, then shuffle. AI:RemoveDeck:Random SVar:NonCombatPriority:3 Oracle:{3}, {T}: Search your library for a Goblin permanent card, put it onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/m/moldering_gym_weight_room.txt b/forge-gui/res/cardsfolder/m/moldering_gym_weight_room.txt index 194b112c79a..d5cef8a1722 100644 --- a/forge-gui/res/cardsfolder/m/moldering_gym_weight_room.txt +++ b/forge-gui/res/cardsfolder/m/moldering_gym_weight_room.txt @@ -2,7 +2,7 @@ Name:Moldering Gym ManaCost:2 G Types:Enchantment Room T:Mode$ UnlockDoor | ValidPlayer$ You | ValidCard$ Card.Self | ThisDoor$ True | Execute$ TrigSearch | TriggerDescription$ When you unlock this door, search your library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 +SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land AlternateMode:Split Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nWhen you unlock this door, search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/m/monument_to_perfection.txt b/forge-gui/res/cardsfolder/m/monument_to_perfection.txt index a4df800d0e8..8de4eb6e0c1 100644 --- a/forge-gui/res/cardsfolder/m/monument_to_perfection.txt +++ b/forge-gui/res/cardsfolder/m/monument_to_perfection.txt @@ -3,7 +3,7 @@ ManaCost:2 Types:Artifact A:AB$ ChangeZone | Cost$ 3 T | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic,Land.Locus,Land.Sphere | ChangeTypeDesc$ basic, Sphere, or Locus land card | SpellDescription$ Search your library for a basic, Sphere, or Locus land card, reveal it, put it into your hand, then shuffle. A:AB$ Animate | Cost$ 3 | CheckSVar$ CountAll | SVarCompare$ GE9 | Power$ 9 | Toughness$ 9 | Types$ Artifact,Creature,Phyrexian,Construct | RemoveCreatureTypes$ True | RemoveAllAbilities$ True | Defined$ Self | Keywords$ Indestructible & Toxic:9 | Duration$ Permanent | SpellDescription$ CARDNAME becomes a 9/9 Phyrexian Construct artifact creature, loses all abilities, and gains indestructible and toxic 9. Activate only if there are nine or more lands with different names among the basic, Sphere, and Locus lands you control. -SVar:CountAll:Count$DifferentCardNames_Land.YouCtrl+inZoneBattlefield+Basic,Land.YouCtrl+inZoneBattlefield+Sphere,Land.YouCtrl+inZoneBattlefield+Locus +SVar:CountAll:Count$DifferentCardNames_Land.YouCtrl+inZoneBattlefield+Basic,Sphere.YouCtrl+inZoneBattlefield,Locus.YouCtrl+inZoneBattlefield DeckHas:Type$Phyrexian|Construct|Artifact DeckNeeds:Type$Locus|Sphere Oracle:{3}, {T}: Search your library for a basic, Sphere, or Locus land card, reveal it, put it into your hand, then shuffle.\n{3}: Monument to Perfection becomes a 9/9 Phyrexian Construct artifact creature, loses all abilities, and gains indestructible and toxic 9. Activate only if there are nine or more lands with different names among the basic, Sphere, and Locus lands you control. diff --git a/forge-gui/res/cardsfolder/m/mountain_valley.txt b/forge-gui/res/cardsfolder/m/mountain_valley.txt index 9bb7cea6777..ec612427231 100644 --- a/forge-gui/res/cardsfolder/m/mountain_valley.txt +++ b/forge-gui/res/cardsfolder/m/mountain_valley.txt @@ -3,5 +3,5 @@ ManaCost:no cost Types:Land R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementResult$ Updated | ReplaceWith$ ETBTapped | Description$ CARDNAME enters tapped. SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True -A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Mountain,Forest | ChangeNum$ 1 | SpellDescription$ Search your library for a Mountain or Forest card, put it onto the battlefield, then shuffle. +A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Mountain,Forest | SpellDescription$ Search your library for a Mountain or Forest card, put it onto the battlefield, then shuffle. Oracle:Mountain Valley enters tapped.\n{T}, Sacrifice Mountain Valley: Search your library for a Mountain or Forest card, put it onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/m/murasa.txt b/forge-gui/res/cardsfolder/m/murasa.txt index aae59b2230b..85eb4f93a64 100644 --- a/forge-gui/res/cardsfolder/m/murasa.txt +++ b/forge-gui/res/cardsfolder/m/murasa.txt @@ -2,7 +2,7 @@ Name:Murasa ManaCost:no cost Types:Plane Zendikar T:Mode$ ChangesZone | ValidCard$ Creature.!token | Origin$ Any | Destination$ Battlefield | TriggerZones$ Command | Execute$ TrigRamp | OptionalDecider$ TriggeredCardController | TriggerDescription$ Whenever a nontoken creature enters, its controller may search their library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:TrigRamp:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | DefinedPlayer$ TriggeredCardController | ShuffleNonMandatory$ True +SVar:TrigRamp:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | DefinedPlayer$ TriggeredCardController | ShuffleNonMandatory$ True T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever chaos ensues, target land becomes a 4/4 creature that's still a land. SVar:RolledChaos:DB$ Animate | ValidTgts$ Land | Power$ 4 | Toughness$ 4 | Types$ Creature | Duration$ Permanent SVar:AIRollPlanarDieParams:Mode$ Always diff --git a/forge-gui/res/cardsfolder/m/murasa_rootgrazer.txt b/forge-gui/res/cardsfolder/m/murasa_rootgrazer.txt index a983ffdd9ff..d1c5c2bb2d9 100644 --- a/forge-gui/res/cardsfolder/m/murasa_rootgrazer.txt +++ b/forge-gui/res/cardsfolder/m/murasa_rootgrazer.txt @@ -3,6 +3,6 @@ ManaCost:G W Types:Creature Beast PT:2/3 K:Vigilance -A:AB$ ChangeZone | Cost$ T | Origin$ Hand | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | Optional$ You | AILogic$ AtOppEOT | SpellDescription$ You may put a basic land card from your hand onto the battlefield. +A:AB$ ChangeZone | Cost$ T | Origin$ Hand | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Optional$ You | AILogic$ AtOppEOT | SpellDescription$ You may put a basic land card from your hand onto the battlefield. A:AB$ ChangeZone | Cost$ T | ValidTgts$ Land.Basic+YouCtrl | TgtPrompt$ Select target basic land you control | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return target basic land you control to its owner's hand. Oracle:Vigilance\n{T}: You may put a basic land card from your hand onto the battlefield.\n{T}: Return target basic land you control to its owner's hand. diff --git a/forge-gui/res/cardsfolder/m/mycosynth_wellspring.txt b/forge-gui/res/cardsfolder/m/mycosynth_wellspring.txt index 4545ca508f3..78bdb3d269b 100644 --- a/forge-gui/res/cardsfolder/m/mycosynth_wellspring.txt +++ b/forge-gui/res/cardsfolder/m/mycosynth_wellspring.txt @@ -3,6 +3,6 @@ ManaCost:2 Types:Artifact T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters or is put into a graveyard from the battlefield, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | Secondary$ True | TriggerDescription$ When CARDNAME enters or is put into a graveyard from the battlefield, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True SVar:SacMe:5 Oracle:When Mycosynth Wellspring enters or is put into a graveyard from the battlefield, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/m/myr_turbine.txt b/forge-gui/res/cardsfolder/m/myr_turbine.txt index a49c136919a..9b534156113 100644 --- a/forge-gui/res/cardsfolder/m/myr_turbine.txt +++ b/forge-gui/res/cardsfolder/m/myr_turbine.txt @@ -2,7 +2,7 @@ Name:Myr Turbine ManaCost:5 Types:Artifact A:AB$ Token | Cost$ T | TokenAmount$ 1 | TokenScript$ c_1_1_a_myr | TokenOwner$ You | SpellDescription$ Create a 1/1 colorless Myr artifact creature token. -A:AB$ ChangeZone | Cost$ T tapXType<5/Myr> | Origin$ Library | Destination$ Battlefield | ChangeType$ Creature.Myr | ChangeNum$ 1 | SpellDescription$ Search your library for a Myr creature card, put it onto the battlefield, then shuffle. +A:AB$ ChangeZone | Cost$ T tapXType<5/Myr> | Origin$ Library | Destination$ Battlefield | ChangeType$ Creature.Myr | ChangeTypeDesc$ Myr creature | SpellDescription$ Search your library for a Myr creature card, put it onto the battlefield, then shuffle. DeckHints:Type$Myr DeckHas:Ability$Token Oracle:{T}: Create a 1/1 colorless Myr artifact creature token.\n{T}, Tap five untapped Myr you control: Search your library for a Myr creature card, put it onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/m/myriad_landscape.txt b/forge-gui/res/cardsfolder/m/myriad_landscape.txt index b45e8fab1e5..6b46cf526ac 100644 --- a/forge-gui/res/cardsfolder/m/myriad_landscape.txt +++ b/forge-gui/res/cardsfolder/m/myriad_landscape.txt @@ -4,5 +4,5 @@ Types:Land R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementResult$ Updated | ReplaceWith$ ETBTapped | Description$ CARDNAME enters tapped. SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. -A:AB$ ChangeZone | Cost$ 2 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ 2 | ShareLandType$ True | SpellDescription$ Search your library for up to two basic land cards that share a land type, put them onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ 2 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ChangeNum$ 2 | ShareLandType$ True | SpellDescription$ Search your library for up to two basic land cards that share a land type, put them onto the battlefield tapped, then shuffle. Oracle:Myriad Landscape enters tapped.\n{T}: Add {C}.\n{2}, {T}, Sacrifice Myriad Landscape: Search your library for up to two basic land cards that share a land type, put them onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/m/mystical_tutor.txt b/forge-gui/res/cardsfolder/m/mystical_tutor.txt index 3983fe82e67..d2a344e9bb4 100644 --- a/forge-gui/res/cardsfolder/m/mystical_tutor.txt +++ b/forge-gui/res/cardsfolder/m/mystical_tutor.txt @@ -1,7 +1,7 @@ Name:Mystical Tutor ManaCost:U Types:Instant -A:SP$ ChangeZone | Origin$ Library | Destination$ Library | LibraryPosition$ 0 | ChangeType$ Instant,Sorcery | ChangeNum$ 1 | SpellDescription$ Search your library for an instant or sorcery card, reveal it, then shuffle and put that card on top. +A:SP$ ChangeZone | Origin$ Library | Destination$ Library | LibraryPosition$ 0 | ChangeType$ Instant,Sorcery | SpellDescription$ Search your library for an instant or sorcery card, reveal it, then shuffle and put that card on top. # TODO: The AI will currently search for the most expensive valid card in the library. This can be used to the AI's advantage with careful deck design (which is why this card only works in properly designed AI decks). Consider improving tutoring logic with priorities. AI:RemoveDeck:Random Oracle:Search your library for an instant or sorcery card, reveal it, then shuffle and put that card on top. diff --git a/forge-gui/res/cardsfolder/n/nahiri_the_harbinger.txt b/forge-gui/res/cardsfolder/n/nahiri_the_harbinger.txt index a21ab759b1d..5e3f685b58d 100644 --- a/forge-gui/res/cardsfolder/n/nahiri_the_harbinger.txt +++ b/forge-gui/res/cardsfolder/n/nahiri_the_harbinger.txt @@ -4,7 +4,7 @@ Types:Legendary Planeswalker Nahiri Loyalty:4 A:AB$ Draw | Cost$ AddCounter<2/LOYALTY> | Planeswalker$ True | Defined$ You | NumCards$ 1 | UnlessCost$ Discard<1/Card> | UnlessSwitched$ True | UnlessPayer$ You | SpellDescription$ You may discard a card. If you do, draw a card. A:AB$ ChangeZone | Cost$ SubCounter<2/LOYALTY> | Planeswalker$ True | ValidTgts$ Enchantment,Artifact.tapped,Creature.tapped | TgtPrompt$ Select target enchantment, tapped artifact, or tapped creature | Origin$ Battlefield | Destination$ Exile | SpellDescription$ Exile target enchantment, tapped artifact, or tapped creature. -A:AB$ ChangeZone | Cost$ SubCounter<8/LOYALTY> | Planeswalker$ True | Ultimate$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Artifact,Creature | ChangeNum$ 1 | RememberChanged$ True | SubAbility$ DBPump | SpellDescription$ Search your library for an artifact or creature card, put it onto the battlefield, then shuffle. It gains haste. Return it to your hand at the beginning of the next end step. +A:AB$ ChangeZone | Cost$ SubCounter<8/LOYALTY> | Planeswalker$ True | Ultimate$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Artifact,Creature | RememberChanged$ True | SubAbility$ DBPump | SpellDescription$ Search your library for an artifact or creature card, put it onto the battlefield, then shuffle. It gains haste. Return it to your hand at the beginning of the next end step. SVar:DBPump:DB$ Animate | Keywords$ Haste | Duration$ Permanent | AtEOT$ Hand | Defined$ Remembered | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Discard diff --git a/forge-gui/res/cardsfolder/n/natural_balance.txt b/forge-gui/res/cardsfolder/n/natural_balance.txt index c84abcd92f3..cc0c1aec172 100644 --- a/forge-gui/res/cardsfolder/n/natural_balance.txt +++ b/forge-gui/res/cardsfolder/n/natural_balance.txt @@ -3,7 +3,7 @@ ManaCost:2 G G Types:Sorcery A:SP$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ BalanceLands | AILogic$ BalanceLands | SpellDescription$ Each player who controls six or more lands chooses five lands they control and sacrifices the rest. Each player who controls four or fewer lands may search their library for up to X basic land cards and put them onto the battlefield, where X is five minus the number of lands they control. Then each player who searched their library this way shuffles. SVar:BalanceLands:DB$ Sacrifice | SacValid$ Land | Amount$ SacX | Defined$ Remembered | ConditionCheckSVar$ SacX | ConditionSVarCompare$ GT0 | SubAbility$ FetchLands -SVar:FetchLands:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ FetchX | DefinedPlayer$ Remembered | ConditionCheckSVar$ FetchX | ConditionSVarCompare$ GT0 | ShuffleNonMandatory$ True +SVar:FetchLands:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ FetchX | DefinedPlayer$ Remembered | ConditionCheckSVar$ FetchX | ConditionSVarCompare$ GT0 | ShuffleNonMandatory$ True SVar:LandsControlled:Count$Valid Land.RememberedPlayerCtrl SVar:SacX:SVar$LandsControlled/Minus.5 SVar:FetchX:Number$5/Minus.LandsControlled diff --git a/forge-gui/res/cardsfolder/n/natural_connection.txt b/forge-gui/res/cardsfolder/n/natural_connection.txt index 7ba9871a690..c92bff4a33c 100644 --- a/forge-gui/res/cardsfolder/n/natural_connection.txt +++ b/forge-gui/res/cardsfolder/n/natural_connection.txt @@ -1,5 +1,5 @@ Name:Natural Connection ManaCost:2 G Types:Instant -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | Tapped$ True | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. Oracle:Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/n/naya_panorama.txt b/forge-gui/res/cardsfolder/n/naya_panorama.txt index 4f5a74afc75..be8209b8fb9 100644 --- a/forge-gui/res/cardsfolder/n/naya_panorama.txt +++ b/forge-gui/res/cardsfolder/n/naya_panorama.txt @@ -2,5 +2,5 @@ Name:Naya Panorama ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. -A:AB$ ChangeZone | Cost$ 1 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Mountain+Basic,Land.Forest+Basic,Land.Plains+Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic Mountain, Forest, or Plains card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ 1 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Mountain.Basic,Forest.Basic,Plains.Basic | ChangeTypeDesc$ basic Mountain, Forest, or Plains | SpellDescription$ Search your library for a basic Mountain, Forest, or Plains card, put it onto the battlefield tapped, then shuffle. Oracle:{T}: Add {C}.\n{1}, {T}, Sacrifice Naya Panorama: Search your library for a basic Mountain, Forest, or Plains card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/n/new_frontiers.txt b/forge-gui/res/cardsfolder/n/new_frontiers.txt index 90ea5f9a449..fd8881bcb69 100644 --- a/forge-gui/res/cardsfolder/n/new_frontiers.txt +++ b/forge-gui/res/cardsfolder/n/new_frontiers.txt @@ -1,7 +1,7 @@ Name:New Frontiers ManaCost:X G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | DefinedPlayer$ Player | ChangeNum$ X | Optional$ True | Tapped$ True | ShuffleNonMandatory$ True | SpellDescription$ Each player may search their library for up to X basic land cards and put them onto the battlefield tapped. Then each player who searched their library this way shuffles. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | DefinedPlayer$ Player | ChangeNum$ X | Optional$ True | Tapped$ True | ShuffleNonMandatory$ True | SpellDescription$ Each player may search their library for up to X basic land cards and put them onto the battlefield tapped. Then each player who searched their library this way shuffles. SVar:X:Count$xPaid AI:RemoveDeck:All Oracle:Each player may search their library for up to X basic land cards and put them onto the battlefield tapped. Then each player who searched their library this way shuffles. diff --git a/forge-gui/res/cardsfolder/n/nissa_worldwaker.txt b/forge-gui/res/cardsfolder/n/nissa_worldwaker.txt index a4d3a4f5036..ba0aa0bcabc 100644 --- a/forge-gui/res/cardsfolder/n/nissa_worldwaker.txt +++ b/forge-gui/res/cardsfolder/n/nissa_worldwaker.txt @@ -4,7 +4,7 @@ Types:Legendary Planeswalker Nissa Loyalty:3 A:AB$ Animate | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | ValidTgts$ Land.YouCtrl | TgtPrompt$ Select target land you control | Power$ 4 | Toughness$ 4 | Types$ Creature,Elemental | Duration$ Permanent | Keywords$ Trample | SpellDescription$ Target land you control becomes a 4/4 Elemental creature with trample. It's still a land. A:AB$ Untap | Cost$ AddCounter<1/LOYALTY> | ValidTgts$ Forest | TgtPrompt$ Choose target forest | TargetMin$ 0 | TargetMax$ 4 | Planeswalker$ True | SpellDescription$ Untap up to four target Forests. -A:AB$ ChangeZone | Cost$ SubCounter<7/LOYALTY> | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ XFetch | Planeswalker$ True | Ultimate$ True | StackDescription$ SpellDescription | RememberChanged$ True | SubAbility$ DBAnimate | SpellDescription$ Search your library for any number of basic land cards, put them onto the battlefield, then shuffle. Those lands become 4/4 Elemental creatures with trample. They're still lands. +A:AB$ ChangeZone | Cost$ SubCounter<7/LOYALTY> | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ XFetch | Planeswalker$ True | Ultimate$ True | StackDescription$ SpellDescription | RememberChanged$ True | SubAbility$ DBAnimate | SpellDescription$ Search your library for any number of basic land cards, put them onto the battlefield, then shuffle. Those lands become 4/4 Elemental creatures with trample. They're still lands. SVar:DBAnimate:DB$ Animate | Defined$ Remembered | Power$ 4 | Toughness$ 4 | Types$ Creature,Elemental | Duration$ Permanent | Keywords$ Trample | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:XFetch:Count$ValidLibrary Land.Basic+YouCtrl diff --git a/forge-gui/res/cardsfolder/n/nissas_expedition.txt b/forge-gui/res/cardsfolder/n/nissas_expedition.txt index 28b476ed43b..137c3086ed9 100644 --- a/forge-gui/res/cardsfolder/n/nissas_expedition.txt +++ b/forge-gui/res/cardsfolder/n/nissas_expedition.txt @@ -2,5 +2,5 @@ Name:Nissa's Expedition ManaCost:4 G Types:Sorcery K:Convoke -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 2 | Tapped$ True | SpellDescription$ Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 | Tapped$ True | SpellDescription$ Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. Oracle:Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.)\nSearch your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/n/nissas_renewal.txt b/forge-gui/res/cardsfolder/n/nissas_renewal.txt index f032639f788..a56ad80cdce 100644 --- a/forge-gui/res/cardsfolder/n/nissas_renewal.txt +++ b/forge-gui/res/cardsfolder/n/nissas_renewal.txt @@ -1,6 +1,6 @@ Name:Nissa's Renewal ManaCost:5 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 3 | SubAbility$ DBGainLife | SpellDescription$ Search your library for up to three basic land cards, put them onto the battlefield tapped, then shuffle. You gain 7 life. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 3 | SubAbility$ DBGainLife | SpellDescription$ Search your library for up to three basic land cards, put them onto the battlefield tapped, then shuffle. You gain 7 life. SVar:DBGainLife:DB$ GainLife | LifeAmount$ 7 Oracle:Search your library for up to three basic land cards, put them onto the battlefield tapped, then shuffle. You gain 7 life. diff --git a/forge-gui/res/cardsfolder/o/oashra_cultivator.txt b/forge-gui/res/cardsfolder/o/oashra_cultivator.txt index fc120716bea..fb0c00ac813 100644 --- a/forge-gui/res/cardsfolder/o/oashra_cultivator.txt +++ b/forge-gui/res/cardsfolder/o/oashra_cultivator.txt @@ -2,5 +2,5 @@ Name:Oashra Cultivator ManaCost:G Types:Creature Human Druid PT:0/3 -A:AB$ ChangeZone | Cost$ 2 G T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ 2 G T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. Oracle:{2}{G}, {T}, Sacrifice Oashra Cultivator: Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/o/oath_of_lieges.txt b/forge-gui/res/cardsfolder/o/oath_of_lieges.txt index e174fdcd218..2b20bfc53a9 100644 --- a/forge-gui/res/cardsfolder/o/oath_of_lieges.txt +++ b/forge-gui/res/cardsfolder/o/oath_of_lieges.txt @@ -2,7 +2,7 @@ Name:Oath of Lieges ManaCost:1 W Types:Enchantment T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | Execute$ LiegesSearch | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of each player's upkeep, that player chooses target player who controls more lands than they do and is their opponent. The first player may search their library for a basic land card, put that card onto the battlefield, then shuffle. -SVar:LiegesSearch:DB$ ChangeZone | TargetingPlayer$ TriggeredPlayer | ValidTgts$ Player.OpponentToActive+withMoreLandsThanActive | TgtPrompt$ Choose target opponent who controls more land than you | DefinedPlayer$ TriggeredPlayer | Chooser$ TriggeredPlayer | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | Optional$ True | ShuffleNonMandatory$ True +SVar:LiegesSearch:DB$ ChangeZone | TargetingPlayer$ TriggeredPlayer | ValidTgts$ Player.OpponentToActive+withMoreLandsThanActive | TgtPrompt$ Choose target opponent who controls more land than you | DefinedPlayer$ TriggeredPlayer | Chooser$ TriggeredPlayer | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Optional$ True | ShuffleNonMandatory$ True SVar:NeedsToPlayVar:Z GEY SVar:Z:Count$Valid Land.YouDontCtrl+inZoneBattlefield SVar:Y:Count$Valid Land.YouCtrl+inZoneBattlefield diff --git a/forge-gui/res/cardsfolder/o/obscura_storefront.txt b/forge-gui/res/cardsfolder/o/obscura_storefront.txt index 03373ed06b7..591f4f8ee84 100644 --- a/forge-gui/res/cardsfolder/o/obscura_storefront.txt +++ b/forge-gui/res/cardsfolder/o/obscura_storefront.txt @@ -4,7 +4,7 @@ Types:Land T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBSacrifice | TriggerDescription$ When CARDNAME enters, sacrifice it. When you do, search your library for a basic Plains, Island, or Swamp card, put it onto the battlefield tapped, then shuffle and you gain 1 life. SVar:DBSacrifice:DB$ Sacrifice | RememberSacrificed$ True | SubAbility$ DBImmediateTrigger SVar:DBImmediateTrigger:DB$ ImmediateTrigger | ConditionDefined$ Remembered | ConditionPresent$ Card | Execute$ DBChangeZone | SubAbility$ DBCleanup | TriggerDescription$ Search your library for a basic Plains, Island, or Swamp card, put it onto the battlefield tapped, then shuffle and you gain 1 life. -SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Plains+Basic,Land.Island+Basic,Land.Swamp+Basic | ChangeNum$ 1 | SubAbility$ DBGainLife +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Plains.Basic,Island.Basic,Swamp.Basic | ChangeTypeDesc$ basic Plains, Island, or Swamp | SubAbility$ DBGainLife SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1 SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Sacrifice|LifeGain diff --git a/forge-gui/res/cardsfolder/o/old_growth_dryads.txt b/forge-gui/res/cardsfolder/o/old_growth_dryads.txt index b11bf4391b0..980fe24cdb9 100644 --- a/forge-gui/res/cardsfolder/o/old_growth_dryads.txt +++ b/forge-gui/res/cardsfolder/o/old_growth_dryads.txt @@ -3,5 +3,5 @@ ManaCost:G Types:Creature Dryad PT:3/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters, each opponent may search their library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | DefinedPlayer$ Player.Opponent | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | DefinedPlayer$ Player.Opponent | ChangeNum$ 1 | ShuffleNonMandatory$ True Oracle:When Old-Growth Dryads enters, each opponent may search their library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/o/omen_of_the_hunt.txt b/forge-gui/res/cardsfolder/o/omen_of_the_hunt.txt index df869ad556c..239b6021929 100644 --- a/forge-gui/res/cardsfolder/o/omen_of_the_hunt.txt +++ b/forge-gui/res/cardsfolder/o/omen_of_the_hunt.txt @@ -3,6 +3,6 @@ ManaCost:2 G Types:Enchantment K:Flash T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSearch | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ChangeNum$ 1 | ShuffleNonMandatory$ True A:AB$ Scry | Cost$ 2 G Sac<1/CARDNAME> | ScryNum$ 2 | AILogic$ BestOpportunity | SpellDescription$ Scry 2. Oracle:Flash\nWhen Omen of the Hunt enters, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle.\n{2}{G}, Sacrifice Omen of the Hunt: Scry 2. diff --git a/forge-gui/res/cardsfolder/o/ominous_parcel.txt b/forge-gui/res/cardsfolder/o/ominous_parcel.txt index feea1c008e8..1309ee5e763 100644 --- a/forge-gui/res/cardsfolder/o/ominous_parcel.txt +++ b/forge-gui/res/cardsfolder/o/ominous_parcel.txt @@ -1,6 +1,6 @@ Name:Ominous Parcel ManaCost:1 Types:Artifact -A:AB$ ChangeZone | Cost$ 2 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. +A:AB$ ChangeZone | Cost$ 2 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. A:AB$ DealDamage | Cost$ 5 T Sac<1/CARDNAME> | ValidTgts$ Creature | NumDmg$ 4 | SpellDescription$ It deals 4 damage to target creature. Oracle:{2}, {T}, Sacrifice Ominous Parcel: Search your library for a basic land card, reveal it, put it into your hand, then shuffle.\n{5}, {T}, Sacrifice Ominous Parcel: It deals 4 damage to target creature. diff --git a/forge-gui/res/cardsfolder/o/ondu_giant.txt b/forge-gui/res/cardsfolder/o/ondu_giant.txt index 5889a7f30bd..7ef64a2b588 100644 --- a/forge-gui/res/cardsfolder/o/ondu_giant.txt +++ b/forge-gui/res/cardsfolder/o/ondu_giant.txt @@ -3,5 +3,5 @@ ManaCost:3 G Types:Creature Giant Druid PT:2/4 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, you may search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | Tapped$ True | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ShuffleNonMandatory$ True Oracle:When Ondu Giant enters, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/o/one_with_nature.txt b/forge-gui/res/cardsfolder/o/one_with_nature.txt index 76a2a6aca03..7baa3e00694 100644 --- a/forge-gui/res/cardsfolder/o/one_with_nature.txt +++ b/forge-gui/res/cardsfolder/o/one_with_nature.txt @@ -5,5 +5,5 @@ K:Enchant:Creature SVar:AttachAITgts:Card.powerGE1 SVar:AttachAILogic:Pump T:Mode$ DamageDone | ValidSource$ Card.AttachedBy | ValidTarget$ Player | TriggerZones$ Battlefield | Execute$ TrigChange | CombatDamage$ True | TriggerDescription$ Whenever enchanted creature deals combat damage to a player, you may search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True Oracle:Enchant creature\nWhenever enchanted creature deals combat damage to a player, you may search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/o/open_the_armory.txt b/forge-gui/res/cardsfolder/o/open_the_armory.txt index 085ca9dd571..73a5e1ddaf6 100644 --- a/forge-gui/res/cardsfolder/o/open_the_armory.txt +++ b/forge-gui/res/cardsfolder/o/open_the_armory.txt @@ -1,6 +1,6 @@ Name:Open the Armory ManaCost:1 W Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Aura,Equipment | ChangeNum$ 1 | SpellDescription$ Search your library for an Aura or Equipment card, reveal it, put it into your hand, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Aura,Equipment | SpellDescription$ Search your library for an Aura or Equipment card, reveal it, put it into your hand, then shuffle. AI:RemoveDeck:Random Oracle:Search your library for an Aura or Equipment card, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/o/ordeal_of_nylea.txt b/forge-gui/res/cardsfolder/o/ordeal_of_nylea.txt index 4698a3e9830..b89fe747183 100644 --- a/forge-gui/res/cardsfolder/o/ordeal_of_nylea.txt +++ b/forge-gui/res/cardsfolder/o/ordeal_of_nylea.txt @@ -7,7 +7,7 @@ T:Mode$ Attacks | ValidCard$ Card.AttachedBy | Execute$ TrigPutCounter | Trigger SVar:TrigPutCounter:DB$ PutCounter | Defined$ TriggeredAttackerLKICopy | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBSac SVar:DBSac:DB$ Sacrifice | ConditionDefined$ TriggeredAttackerLKICopy | ConditionPresent$ Card.counters_GE3_P1P1 T:Mode$ Sacrificed | ValidPlayer$ You | ValidCard$ Card.Self | Execute$ TrigDiscard | TriggerZones$ Battlefield | TriggerDescription$ When you sacrifice CARDNAME, search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. -SVar:TrigDiscard:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 2 +SVar:TrigDiscard:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 S:Mode$ Continuous | Affected$ Creature.AttachedBy | AddSVar$ AE SVar:AE:SVar:HasAttackEffect:TRUE SVar:SacMe:4 diff --git a/forge-gui/res/cardsfolder/o/orochi_colony.txt b/forge-gui/res/cardsfolder/o/orochi_colony.txt index 65da5a78198..ad0da2087ef 100644 --- a/forge-gui/res/cardsfolder/o/orochi_colony.txt +++ b/forge-gui/res/cardsfolder/o/orochi_colony.txt @@ -2,7 +2,7 @@ Name:Orochi Colony ManaCost:no cost Types:Plane Kamigawa T:Mode$ DamageDone | ValidSource$ Creature.YouCtrl | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigRamp | TriggerZones$ Command | TriggerDescription$ Whenever a creature you control deals combat damage to a player, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:TrigRamp:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigRamp:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever chaos ensues, target creature can't be blocked this turn. SVar:RolledChaos:DB$ Effect | ValidTgts$ Creature | RememberObjects$ Targeted | ExileOnMoved$ Battlefield | StaticAbilities$ Unblockable | AILogic$ Pump SVar:Unblockable:Mode$ CantBlockBy | ValidAttacker$ Card.IsRemembered | Description$ This creature can't be blocked this turn. diff --git a/forge-gui/res/cardsfolder/p/path_of_the_animist.txt b/forge-gui/res/cardsfolder/p/path_of_the_animist.txt index c5bbead63b2..de0fa4933b4 100644 --- a/forge-gui/res/cardsfolder/p/path_of_the_animist.txt +++ b/forge-gui/res/cardsfolder/p/path_of_the_animist.txt @@ -1,7 +1,7 @@ Name:Path of the Animist ManaCost:3 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 2 | Tapped$ True | SubAbility$ DBSpace | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 | Tapped$ True | SubAbility$ DBSpace | SpellDescription$ Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. SVar:DBSpace:DB$ BlankLine | SubAbility$ DBVote | SpellDescription$ ,,,,,, SVar:DBVote:DB$ Vote | Defined$ Player | Choices$ DBPlaneswalk,DBChaos | VoteTiedAbility$ DBChaos | StackDescription$ SpellDescription | SpellDescription$ Will of the Planeswalkers — Starting with you, each player votes for planeswalk or chaos. If planeswalk gets more votes, planeswalk. If chaos gets more votes or the vote is tied, chaos ensues. SVar:DBPlaneswalk:DB$ Planeswalk | SpellDescription$ Planeswalk diff --git a/forge-gui/res/cardsfolder/p/path_to_exile.txt b/forge-gui/res/cardsfolder/p/path_to_exile.txt index 0f64e9a4ef6..d688dfa4553 100644 --- a/forge-gui/res/cardsfolder/p/path_to_exile.txt +++ b/forge-gui/res/cardsfolder/p/path_to_exile.txt @@ -2,5 +2,5 @@ Name:Path to Exile ManaCost:W Types:Instant A:SP$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Creature | SubAbility$ DBChange | StackDescription$ Exile {c:Targeted}. {p:TargetedController} may search their library for a basic land card, put that card onto the battlefield tapped, then shuffle their library. | SpellDescription$ Exile target creature. Its controller may search their library for a basic land card, put that card onto the battlefield tapped, then shuffle. -SVar:DBChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | DefinedPlayer$ TargetedController | ShuffleNonMandatory$ True | StackDescription$ None +SVar:DBChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | DefinedPlayer$ TargetedController | ShuffleNonMandatory$ True | StackDescription$ None Oracle:Exile target creature. Its controller may search their library for a basic land card, put that card onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/p/path_to_the_festival.txt b/forge-gui/res/cardsfolder/p/path_to_the_festival.txt index 8cbb222daf7..de048866373 100644 --- a/forge-gui/res/cardsfolder/p/path_to_the_festival.txt +++ b/forge-gui/res/cardsfolder/p/path_to_the_festival.txt @@ -1,7 +1,7 @@ Name:Path to the Festival ManaCost:2 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | RememberChanged$ True | SubAbility$ DBScry | StackDescription$ SpellDescription | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. Then if there are three or more basic land types among lands you control, scry 1. (Look at the top card of your library. You may put that card on the bottom of your library.) +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | RememberChanged$ True | SubAbility$ DBScry | StackDescription$ SpellDescription | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. Then if there are three or more basic land types among lands you control, scry 1. (Look at the top card of your library. You may put that card on the bottom of your library.) SVar:DBScry:DB$ Scry | ConditionCheckSVar$ X | ConditionSVarCompare$ GE3 | ScryNum$ 1 SVar:X:PlayerCountPropertyYou$DomainPlayer K:Flashback:4 G diff --git a/forge-gui/res/cardsfolder/p/path_to_the_world_tree.txt b/forge-gui/res/cardsfolder/p/path_to_the_world_tree.txt index 6efc1b9aea4..279e9043ff5 100644 --- a/forge-gui/res/cardsfolder/p/path_to_the_world_tree.txt +++ b/forge-gui/res/cardsfolder/p/path_to_the_world_tree.txt @@ -2,7 +2,7 @@ Name:Path to the World Tree ManaCost:1 G Types:Enchantment T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters, search your library for a basic land card, reveal it, put it into your hand, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land A:AB$ GainLife | Cost$ 2 W U B R G Sac<1/CARDNAME> | Defined$ You | LifeAmount$ 2 | SubAbility$ DBDraw | SpellDescription$ You gain 2 life and draw two cards. Target opponent loses 2 life. CARDNAME deals 2 damage to up to one target creature. You create a 2/2 green Bear creature token. SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 2 | SubAbility$ DBLoseLife SVar:DBLoseLife:DB$ LoseLife | ValidTgts$ Player.Opponent | TgtPrompt$ Choose an opponent | LifeAmount$ 2 | SubAbility$ DBDamage diff --git a/forge-gui/res/cardsfolder/p/peregrination.txt b/forge-gui/res/cardsfolder/p/peregrination.txt index 7c2a934fa4b..fc3fb85d0b3 100644 --- a/forge-gui/res/cardsfolder/p/peregrination.txt +++ b/forge-gui/res/cardsfolder/p/peregrination.txt @@ -1,7 +1,7 @@ Name:Peregrination ManaCost:3 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Land.Basic | ChangeNum$ 2 | RememberChanged$ True | Reveal$ True | Shuffle$ False | StackDescription$ SpellDescription | SubAbility$ DBChangeZone1 | SpellDescription$ Search your library for up to two basic land cards, reveal those cards, and put one onto the battlefield tapped and the other into your hand. Shuffle, then scry 1. (Look at the top card of your library. You may put that card on the bottom of your library.) +A:SP$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 | RememberChanged$ True | Reveal$ True | Shuffle$ False | StackDescription$ SpellDescription | SubAbility$ DBChangeZone1 | SpellDescription$ Search your library for up to two basic land cards, reveal those cards, and put one onto the battlefield tapped and the other into your hand. Shuffle, then scry 1. (Look at the top card of your library. You may put that card on the bottom of your library.) SVar:DBChangeZone1:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.IsRemembered | ChangeNum$ 1 | Mandatory$ True | NoLooking$ True | SelectPrompt$ Select a card to put onto the battlefield | Tapped$ True | Shuffle$ False | SubAbility$ DBChangeZone2 | StackDescription$ None SVar:DBChangeZone2:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.IsRemembered | Mandatory$ True | NoLooking$ True | SelectPrompt$ Select a card to put into your hand | StackDescription$ None | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | SubAbility$ DBScry diff --git a/forge-gui/res/cardsfolder/p/perilous_landscape.txt b/forge-gui/res/cardsfolder/p/perilous_landscape.txt index cd2635a4da7..cfed140ef59 100644 --- a/forge-gui/res/cardsfolder/p/perilous_landscape.txt +++ b/forge-gui/res/cardsfolder/p/perilous_landscape.txt @@ -2,6 +2,6 @@ Name:Perilous Landscape ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. -A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Island+Basic,Land.Mountain+Basic,Land.Plains+Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic Island, Mountain, or Plains card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Island.Basic,Mountain.Basic,Plains.Basic | ChangeTypeDesc$ basic Island, Mountain, or Plains | SpellDescription$ Search your library for a basic Island, Mountain, or Plains card, put it onto the battlefield tapped, then shuffle. K:Cycling:U R W Oracle:{T}: Add {C}.\n{T}, Sacrifice Perilous Landscape: Search your library for a basic Island, Mountain, or Plains card, put it onto the battlefield tapped, then shuffle.\nCycling {U}{R}{W} ({U}{R}{W}, Discard this card: Draw a card.) diff --git a/forge-gui/res/cardsfolder/p/pilgrims_eye.txt b/forge-gui/res/cardsfolder/p/pilgrims_eye.txt index 1c7d14ba92a..b2e290bf9b3 100644 --- a/forge-gui/res/cardsfolder/p/pilgrims_eye.txt +++ b/forge-gui/res/cardsfolder/p/pilgrims_eye.txt @@ -4,5 +4,5 @@ Types:Artifact Creature Thopter PT:1/1 K:Flying T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True Oracle:Flying\nWhen Pilgrim's Eye enters, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/p/planar_birth.txt b/forge-gui/res/cardsfolder/p/planar_birth.txt index f84f4434ebc..04019bc427f 100644 --- a/forge-gui/res/cardsfolder/p/planar_birth.txt +++ b/forge-gui/res/cardsfolder/p/planar_birth.txt @@ -1,6 +1,6 @@ Name:Planar Birth ManaCost:1 W Types:Sorcery -A:SP$ ChangeZoneAll | ChangeType$ Land.Basic | Origin$ Graveyard | Destination$ Battlefield | Tapped$ True | SpellDescription$ Return all basic land cards from all graveyards to the battlefield tapped under their owners' control. +A:SP$ ChangeZoneAll | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Origin$ Graveyard | Destination$ Battlefield | Tapped$ True | SpellDescription$ Return all basic land cards from all graveyards to the battlefield tapped under their owners' control. AI:RemoveDeck:Random Oracle:Return all basic land cards from all graveyards to the battlefield tapped under their owners' control. diff --git a/forge-gui/res/cardsfolder/p/point_the_way.txt b/forge-gui/res/cardsfolder/p/point_the_way.txt index 0ca1ed000f4..11dee17d0eb 100644 --- a/forge-gui/res/cardsfolder/p/point_the_way.txt +++ b/forge-gui/res/cardsfolder/p/point_the_way.txt @@ -2,6 +2,6 @@ Name:Point the Way ManaCost:G Types:Enchantment K:Start your engines -A:AB$ ChangeZone | Cost$ 3 G Sac<1/CARDNAME/this enchantment> | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ Count$YourSpeed | Tapped$ True | SpellDescription$ Search your library for up to X basic land cards, where X is your speed. Put those cards onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ 3 G Sac<1/CARDNAME/this enchantment> | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ Count$YourSpeed | Tapped$ True | SpellDescription$ Search your library for up to X basic land cards, where X is your speed. Put those cards onto the battlefield tapped, then shuffle. DeckHas:Ability$Sacrifice Oracle:Start your engines! (If you have no speed, it starts at 1. It increases once on each of your turns when an opponent loses life. Max speed is 4.)\n{3}{G}, Sacrifice this enchantment: Search your library for up to X basic land cards, where X is your speed. Put those cards onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/p/polluted_delta.txt b/forge-gui/res/cardsfolder/p/polluted_delta.txt index b2aa5893acf..7717ce7c8b4 100644 --- a/forge-gui/res/cardsfolder/p/polluted_delta.txt +++ b/forge-gui/res/cardsfolder/p/polluted_delta.txt @@ -1,5 +1,5 @@ Name:Polluted Delta ManaCost:no cost Types:Land -A:AB$ ChangeZone | Cost$ T PayLife<1> Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Island,Swamp | ChangeNum$ 1 | SpellDescription$ Search your library for a Island or Swamp card, put it onto the battlefield, then shuffle. +A:AB$ ChangeZone | Cost$ T PayLife<1> Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Island,Swamp | SpellDescription$ Search your library for a Island or Swamp card, put it onto the battlefield, then shuffle. Oracle:{T}, Pay 1 life, Sacrifice Polluted Delta: Search your library for an Island or Swamp card, put it onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/p/priest_of_the_wakening_sun.txt b/forge-gui/res/cardsfolder/p/priest_of_the_wakening_sun.txt index 2d65952968d..9781f933a1e 100644 --- a/forge-gui/res/cardsfolder/p/priest_of_the_wakening_sun.txt +++ b/forge-gui/res/cardsfolder/p/priest_of_the_wakening_sun.txt @@ -4,6 +4,6 @@ Types:Creature Human Cleric PT:1/1 T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ ABGainLife | OptionalDecider$ You | TriggerDescription$ At the beginning of your upkeep, you may reveal a Dinosaur card from your hand. If you do, you gain 2 life. SVar:ABGainLife:DB$ GainLife | UnlessCost$ Reveal<1/Creature.Dinosaur> | UnlessPayer$ You | UnlessSwitched$ True | LifeAmount$ 2 | StackDescription$ you gain 2 life. | SpellDescription$ You gain 2 life. -A:AB$ ChangeZone | Cost$ 3 W W Sac<1/CARDNAME> | Origin$ Library | Destination$ Hand | ChangeType$ Creature.Dinosaur | ChangeNum$ 1 | SpellDescription$ Search your library for a Dinosaur card, reveal it, put it into your hand, then shuffle. +A:AB$ ChangeZone | Cost$ 3 W W Sac<1/CARDNAME> | Origin$ Library | Destination$ Hand | ChangeType$ Dinosaur | SpellDescription$ Search your library for a Dinosaur card, reveal it, put it into your hand, then shuffle. DeckHints:Type$Dinosaur Oracle:At the beginning of your upkeep, you may reveal a Dinosaur card from your hand. If you do, you gain 2 life.\n{3}{W}{W}, Sacrifice Priest of the Wakening Sun: Search your library for a Dinosaur card, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/p/primal_druid.txt b/forge-gui/res/cardsfolder/p/primal_druid.txt index 3cbdc004467..5d3a80146fe 100644 --- a/forge-gui/res/cardsfolder/p/primal_druid.txt +++ b/forge-gui/res/cardsfolder/p/primal_druid.txt @@ -3,5 +3,5 @@ ManaCost:1 G Types:Creature Human Druid PT:0/3 T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ChangeNum$ 1 | ShuffleNonMandatory$ True Oracle:When Primal Druid dies, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/p/primal_growth.txt b/forge-gui/res/cardsfolder/p/primal_growth.txt index 6a29c53f1db..24866d2cdf5 100644 --- a/forge-gui/res/cardsfolder/p/primal_growth.txt +++ b/forge-gui/res/cardsfolder/p/primal_growth.txt @@ -2,6 +2,6 @@ Name:Primal Growth ManaCost:2 G Types:Sorcery K:Kicker:Sac<1/Creature> -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ X | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield, then shuffle. If this spell was kicked, instead search your library for up to two basic land cards, put them onto the battlefield, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ X | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield, then shuffle. If this spell was kicked, instead search your library for up to two basic land cards, put them onto the battlefield, then shuffle. SVar:X:Count$Kicked.2.1 Oracle:Kicker—Sacrifice a creature. (You may sacrifice a creature in addition to any other costs as you cast this spell.)\nSearch your library for a basic land card, put that card onto the battlefield, then shuffle. If this spell was kicked, instead search your library for up to two basic land cards, put them onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/p/primeval_herald.txt b/forge-gui/res/cardsfolder/p/primeval_herald.txt index 3af4b74e16c..af2ad5d9bea 100644 --- a/forge-gui/res/cardsfolder/p/primeval_herald.txt +++ b/forge-gui/res/cardsfolder/p/primeval_herald.txt @@ -5,6 +5,6 @@ PT:3/1 K:Trample T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ Whenever CARDNAME enters or attacks, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle. T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigChange | TriggerZones$ Battlefield | OptionalDecider$ You | Secondary$ True | TriggerDescription$ Whenever CARDNAME enters or attacks, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True SVar:HasAttackEffect:TRUE Oracle:Trample\nWhenever Primeval Herald enters or attacks, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/p/prismatic_vista.txt b/forge-gui/res/cardsfolder/p/prismatic_vista.txt index 8782d31f4a2..d78221a64b1 100644 --- a/forge-gui/res/cardsfolder/p/prismatic_vista.txt +++ b/forge-gui/res/cardsfolder/p/prismatic_vista.txt @@ -1,6 +1,6 @@ Name:Prismatic Vista ManaCost:no cost Types:Land -A:AB$ ChangeZone | Cost$ T PayLife<1> Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put it onto the battlefield, then shuffle. +A:AB$ ChangeZone | Cost$ T PayLife<1> Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, put it onto the battlefield, then shuffle. DeckHas:Ability$Sacrifice Oracle:{T}, Pay 1 life, Sacrifice Prismatic Vista: Search your library for a basic land card, put it onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/p/promising_vein.txt b/forge-gui/res/cardsfolder/p/promising_vein.txt index e1a0d4be938..4b9316f7bcb 100644 --- a/forge-gui/res/cardsfolder/p/promising_vein.txt +++ b/forge-gui/res/cardsfolder/p/promising_vein.txt @@ -2,6 +2,6 @@ Name:Promising Vein ManaCost:no cost Types:Land Cave A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. -A:AB$ ChangeZone | Cost$ 1 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ 1 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. DeckHas:Ability$Sacrifice Oracle:{T}: Add {C}.\n{1}, {T}, Sacrifice Promising Vein: Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/p/purestrain_genestealer.txt b/forge-gui/res/cardsfolder/p/purestrain_genestealer.txt index 5504a3c55c1..5ce9d72497b 100644 --- a/forge-gui/res/cardsfolder/p/purestrain_genestealer.txt +++ b/forge-gui/res/cardsfolder/p/purestrain_genestealer.txt @@ -4,7 +4,7 @@ Types:Creature Tyranid PT:1/1 K:etbCounter:P1P1:2 T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigRamp | TriggerDescription$ Vanguard Species — Whenever CARDNAME attacks, you may remove a +1/+1 counter from it. If you do, search your library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:TrigRamp:AB$ ChangeZone | Cost$ SubCounter<1/P1P1> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 +SVar:TrigRamp:AB$ ChangeZone | Cost$ SubCounter<1/P1P1> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land SVar:HasAttackEffect:TRUE DeckHas:Ability$Counters Oracle:Purestrain Genestealer enters with two +1/+1 counters on it.\nVanguard Species — Whenever Purestrain Genestealer attacks, you may remove a +1/+1 counter from it. If you do, search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/q/quiet_speculation.txt b/forge-gui/res/cardsfolder/q/quiet_speculation.txt index 84cf709db8a..56f9380da1b 100644 --- a/forge-gui/res/cardsfolder/q/quiet_speculation.txt +++ b/forge-gui/res/cardsfolder/q/quiet_speculation.txt @@ -1,6 +1,6 @@ Name:Quiet Speculation ManaCost:1 U Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Graveyard | ValidTgts$ Player | ChangeType$ Card.withFlashback | ChangeNum$ 3 | SpellDescription$ Search target player's library for up to three cards with flashback and put them into that player's graveyard. Then the player shuffles. +A:SP$ ChangeZone | Origin$ Library | Destination$ Graveyard | ValidTgts$ Player | ChangeType$ Card.withFlashback | ChangeTypeDesc$ cards with flashback | ChangeNum$ 3 | SpellDescription$ Search target player's library for up to three cards with flashback and put them into that player's graveyard. Then the player shuffles. AI:RemoveDeck:All Oracle:Search target player's library for up to three cards with flashback and put them into that player's graveyard. Then the player shuffles. diff --git a/forge-gui/res/cardsfolder/q/quirion_trailblazer.txt b/forge-gui/res/cardsfolder/q/quirion_trailblazer.txt index b9252fdc99d..ac82e18531e 100644 --- a/forge-gui/res/cardsfolder/q/quirion_trailblazer.txt +++ b/forge-gui/res/cardsfolder/q/quirion_trailblazer.txt @@ -3,5 +3,5 @@ ManaCost:3 G Types:Creature Elf Scout PT:1/2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, you may search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | Tapped$ True | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ShuffleNonMandatory$ True Oracle:When Quirion Trailblazer enters, you may search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/r/radioactive_spider.txt b/forge-gui/res/cardsfolder/r/radioactive_spider.txt index aa26f8325ef..9d180549e85 100644 --- a/forge-gui/res/cardsfolder/r/radioactive_spider.txt +++ b/forge-gui/res/cardsfolder/r/radioactive_spider.txt @@ -4,6 +4,5 @@ Types:Creature Spider PT:1/1 K:Reach K:Deathtouch -A:AB$ ChangeZone | Cost$ 2 Sac<1/CARDNAME> | Origin$ Library | Destination$ Hand | ChangeType$ Spider.Hero | ChangeNum$ 1 | SorcerySpeed$ True | SpellDescription$ Search your libary for a Spider Hero card, reveal it, put it into your hand, then shuffle. Activate only as a sorcery. -DeckHints:Type$Spider|Hero +A:AB$ ChangeZone | Cost$ 2 Sac<1/CARDNAME> | Origin$ Library | Destination$ Hand | ChangeType$ Spider.Hero | ChangeTypeDesc$ Spider Hero | SorcerySpeed$ True | SpellDescription$ Search your libary for a Spider Hero card, reveal it, put it into your hand, then shuffle. Activate only as a sorcery. Oracle:Reach, deathtouch\nFateful Bite — {2}, Sacrifice this creature: Search your libary for a Spider Hero card, reveal it, put it into your hand, then shuffle. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/r/rampaging_growth.txt b/forge-gui/res/cardsfolder/r/rampaging_growth.txt index 7ea2b4cd5a8..238f23875f0 100644 --- a/forge-gui/res/cardsfolder/r/rampaging_growth.txt +++ b/forge-gui/res/cardsfolder/r/rampaging_growth.txt @@ -1,7 +1,7 @@ Name:Rampaging Growth ManaCost:3 G Types:Instant -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | RememberChanged$ True | ChangeNum$ 1 | SubAbility$ DBAnimate | SpellDescription$ Search your library for a basic land card and put that card onto the battlefield, then shuffle. Until end of turn, that land becomes a 4/3 Insect creature with reach and haste. It's still a land. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | RememberChanged$ True | ChangeNum$ 1 | SubAbility$ DBAnimate | SpellDescription$ Search your library for a basic land card and put that card onto the battlefield, then shuffle. Until end of turn, that land becomes a 4/3 Insect creature with reach and haste. It's still a land. SVar:DBAnimate:DB$ Animate | Defined$ Remembered | Power$ 4 | Toughness$ 3 | Types$ Creature,Insect | Keywords$ Haste & Reach | StackDescription$ None | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Type$Insect diff --git a/forge-gui/res/cardsfolder/r/rampant_growth.txt b/forge-gui/res/cardsfolder/r/rampant_growth.txt index 0d87977e68b..ebf1e1e8372 100644 --- a/forge-gui/res/cardsfolder/r/rampant_growth.txt +++ b/forge-gui/res/cardsfolder/r/rampant_growth.txt @@ -1,5 +1,5 @@ Name:Rampant Growth ManaCost:1 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ 1 | StackDescription$ Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ChangeNum$ 1 | StackDescription$ Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. Oracle:Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/r/rampant_rejuvenator.txt b/forge-gui/res/cardsfolder/r/rampant_rejuvenator.txt index 94940aec976..978a5c61b43 100644 --- a/forge-gui/res/cardsfolder/r/rampant_rejuvenator.txt +++ b/forge-gui/res/cardsfolder/r/rampant_rejuvenator.txt @@ -4,7 +4,7 @@ Types:Creature Plant Hydra PT:0/0 K:etbCounter:P1P1:2 T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME dies, search your library for up to X basic land cards, where X is CARDNAME's power, put them onto the battlefield, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ X +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ X SVar:X:TriggeredCard$CardPower DeckHas:Ability$Counters Oracle:Rampant Rejuvenator enters with two +1/+1 counters on it.\nWhen Rampant Rejuvenator dies, search your library for up to X basic land cards, where X is Rampant Rejuvenator's power, put them onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/r/rampart_architect.txt b/forge-gui/res/cardsfolder/r/rampart_architect.txt index 9bd128ad0a5..97bfc7df8f5 100644 --- a/forge-gui/res/cardsfolder/r/rampart_architect.txt +++ b/forge-gui/res/cardsfolder/r/rampart_architect.txt @@ -6,6 +6,6 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigToken | Secondary$ True | TriggerDescription$ Whenever this creature enters or attacks, create a 1/3 white Wall creature token with defender. SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ w_1_3_wall_defender | TokenOwner$ You T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.YouCtrl+withDefender | TriggerZones$ Battlefield | Execute$ TrigChangeZone | OptionalDecider$ You | TriggerDescription$ Whenever a creature you control with defender dies, you may search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. -SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True DeckHas:Ability$Token Oracle:Whenever this creature enters or attacks, create a 1/3 white Wall creature token with defender.\nWhenever a creature you control with defender dies, you may search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/r/ranging_raptors.txt b/forge-gui/res/cardsfolder/r/ranging_raptors.txt index fd4379096ab..eeb4e1bf388 100644 --- a/forge-gui/res/cardsfolder/r/ranging_raptors.txt +++ b/forge-gui/res/cardsfolder/r/ranging_raptors.txt @@ -3,6 +3,6 @@ ManaCost:2 G Types:Creature Dinosaur PT:2/3 T:Mode$ DamageDoneOnce | Execute$ TrigSearchLand | ValidTarget$ Card.Self | TriggerZones$ Battlefield | OptionalDecider$ You | TriggerDescription$ Enrage — Whenever CARDNAME is dealt damage, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:TrigSearchLand:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | Tapped$ True | ShuffleNonMandatory$ True +SVar:TrigSearchLand:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ShuffleNonMandatory$ True SVar:HasCombatEffect:TRUE Oracle:Enrage — Whenever Ranging Raptors is dealt damage, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/r/realms_befitting_my_majesty.txt b/forge-gui/res/cardsfolder/r/realms_befitting_my_majesty.txt index f719f55fa24..5653729c842 100644 --- a/forge-gui/res/cardsfolder/r/realms_befitting_my_majesty.txt +++ b/forge-gui/res/cardsfolder/r/realms_befitting_my_majesty.txt @@ -2,5 +2,5 @@ Name:Realms Befitting My Majesty ManaCost:no cost Types:Scheme T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ GetRealms | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. -SVar:GetRealms:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 2 +SVar:GetRealms:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 Oracle:When you set this scheme in motion, search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/r/reckless_handling.txt b/forge-gui/res/cardsfolder/r/reckless_handling.txt index ed24c2f4aba..77d1b262ce5 100644 --- a/forge-gui/res/cardsfolder/r/reckless_handling.txt +++ b/forge-gui/res/cardsfolder/r/reckless_handling.txt @@ -1,7 +1,7 @@ Name:Reckless Handling ManaCost:1 R Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Card.Artifact | ChangeNum$ 1 | SubAbility$ DBDiscard | SpellDescription$ Search your library for an artifact card, reveal it, put it into your hand, shuffle, then discard a card at random. If an artifact card was discarded this way, CARDNAME deals 2 damage to each opponent. +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Artifact | SubAbility$ DBDiscard | SpellDescription$ Search your library for an artifact card, reveal it, put it into your hand, shuffle, then discard a card at random. If an artifact card was discarded this way, CARDNAME deals 2 damage to each opponent. SVar:DBDiscard:DB$ Discard | Defined$ You | NumCards$ 1 | Mode$ Random | SubAbility$ DBDealDamage | RememberDiscarded$ True SVar:DBDealDamage:DB$ DamageAll | ConditionDefined$ Remembered | ConditionPresent$ Card.Artifact | ConditionCompare$ EQ1 | StackDescription$ If an artifact card was discarded this way, CARDNAME deals 2 damage to each opponent | ValidPlayers$ Opponent | NumDmg$ 2 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/r/renegade_map.txt b/forge-gui/res/cardsfolder/r/renegade_map.txt index 5ef3471d431..5c8590cee59 100644 --- a/forge-gui/res/cardsfolder/r/renegade_map.txt +++ b/forge-gui/res/cardsfolder/r/renegade_map.txt @@ -3,5 +3,5 @@ ManaCost:1 Types:Artifact R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementResult$ Updated | ReplaceWith$ ETBTapped | Description$ CARDNAME enters tapped. SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True -A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. +A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. Oracle:Renegade Map enters tapped.\n{T}, Sacrifice Renegade Map: Search your library for a basic land card, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/r/renewal.txt b/forge-gui/res/cardsfolder/r/renewal.txt index 9bfd94d3911..c5a978bba17 100644 --- a/forge-gui/res/cardsfolder/r/renewal.txt +++ b/forge-gui/res/cardsfolder/r/renewal.txt @@ -1,7 +1,7 @@ Name:Renewal ManaCost:2 G Types:Sorcery -A:SP$ ChangeZone | Cost$ 2 G Sac<1/Land> | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield, then shuffle. Draw a card at the beginning of the next turn's upkeep. | SubAbility$ DelTrigSlowtrip +A:SP$ ChangeZone | Cost$ 2 G Sac<1/Land> | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield, then shuffle. Draw a card at the beginning of the next turn's upkeep. | SubAbility$ DelTrigSlowtrip SVar:DelTrigSlowtrip:DB$ DelayedTrigger | NextTurn$ True | Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | Execute$ DrawSlowtrip | TriggerDescription$ Draw a card. SVar:DrawSlowtrip:DB$ Draw | NumCards$ 1 | Defined$ You DeckHas:Ability$Sacrifice diff --git a/forge-gui/res/cardsfolder/r/return_from_the_wilds.txt b/forge-gui/res/cardsfolder/r/return_from_the_wilds.txt index fe35b971cc4..00e20d14600 100644 --- a/forge-gui/res/cardsfolder/r/return_from_the_wilds.txt +++ b/forge-gui/res/cardsfolder/r/return_from_the_wilds.txt @@ -2,7 +2,7 @@ Name:Return from the Wilds ManaCost:2 G Types:Sorcery A:SP$ Charm | Choices$ DBSearch,DBHuman,DBFood | CharmNum$ 2 -SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. +SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. SVar:DBHuman:DB$ Token | TokenAmount$ 1 | TokenScript$ w_1_1_human | TokenOwner$ You | SpellDescription$ Create a 1/1 white Human creature token. SVar:DBFood:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_food_sac | TokenOwner$ You | SpellDescription$ Create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") DeckHas:Ability$Token & Type$Artifact|Food|Human diff --git a/forge-gui/res/cardsfolder/r/rites_of_spring.txt b/forge-gui/res/cardsfolder/r/rites_of_spring.txt index 90f1604e7dd..947c5867285 100644 --- a/forge-gui/res/cardsfolder/r/rites_of_spring.txt +++ b/forge-gui/res/cardsfolder/r/rites_of_spring.txt @@ -2,7 +2,7 @@ Name:Rites of Spring ManaCost:1 G Types:Sorcery A:SP$ Discard | Defined$ You | AnyNumber$ True | Mode$ TgtChoose | Optional$ True | RememberDiscarded$ True | SubAbility$ DBChangeZone | SpellDescription$ Discard any number of cards. Search your library for up to that many basic land cards, reveal them, put them into your hand, then shuffle. -SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ X | SubAbility$ DBCleanup +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ X | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Remembered$Amount AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/r/riveteers_overlook.txt b/forge-gui/res/cardsfolder/r/riveteers_overlook.txt index 0e0e398b032..daf01410757 100644 --- a/forge-gui/res/cardsfolder/r/riveteers_overlook.txt +++ b/forge-gui/res/cardsfolder/r/riveteers_overlook.txt @@ -4,7 +4,7 @@ Types:Land T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBSacrifice | TriggerDescription$ When CARDNAME enters, sacrifice it. When you do, search your library for a basic Swamp, Mountain, or Forest card, put it onto the battlefield tapped, then shuffle and you gain 1 life. SVar:DBSacrifice:DB$ Sacrifice | RememberSacrificed$ True | SubAbility$ DBImmediateTrigger SVar:DBImmediateTrigger:DB$ ImmediateTrigger | ConditionDefined$ Remembered | ConditionPresent$ Card | Execute$ DBChangeZone | SubAbility$ DBCleanup | TriggerDescription$ Search your library for a basic Swamp, Mountain, or Forest card, put it onto the battlefield tapped, then shuffle and you gain 1 life. -SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Swamp+Basic,Land.Mountain+Basic,Land.Forest+Basic | ChangeNum$ 1 | SubAbility$ DBGainLife +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Swamp.Basic,Mountain.Basic,Forest.Basic | ChangeTypeDesc$ basic Swamp, Mountain, or Forest | SubAbility$ DBGainLife SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1 SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Sacrifice|LifeGain diff --git a/forge-gui/res/cardsfolder/r/road_ruin.txt b/forge-gui/res/cardsfolder/r/road_ruin.txt index c0b68918718..1d2977c474a 100644 --- a/forge-gui/res/cardsfolder/r/road_ruin.txt +++ b/forge-gui/res/cardsfolder/r/road_ruin.txt @@ -1,7 +1,7 @@ Name:Road ManaCost:2 G Types:Instant -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | Tapped$ True | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. AlternateMode:Split Oracle:Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/r/roamers_routine.txt b/forge-gui/res/cardsfolder/r/roamers_routine.txt index e484ca42d42..76631ebee96 100644 --- a/forge-gui/res/cardsfolder/r/roamers_routine.txt +++ b/forge-gui/res/cardsfolder/r/roamers_routine.txt @@ -1,6 +1,6 @@ Name:Roamer's Routine ManaCost:2 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. K:Harmonize:4 G Oracle:Search your library for a basic land card, put it onto the battlefield tapped, then shuffle.\nHarmonize {4}{G} (You may cast this card from your graveyard for its harmonize cost. You may tap a creature you control to reduce that cost by {X}, where X is its power. Then exile this spell.) diff --git a/forge-gui/res/cardsfolder/r/rocky_tar_pit.txt b/forge-gui/res/cardsfolder/r/rocky_tar_pit.txt index c30766dd2d9..0d8eb9e7e9d 100644 --- a/forge-gui/res/cardsfolder/r/rocky_tar_pit.txt +++ b/forge-gui/res/cardsfolder/r/rocky_tar_pit.txt @@ -3,5 +3,5 @@ ManaCost:no cost Types:Land R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementResult$ Updated | ReplaceWith$ ETBTapped | Description$ CARDNAME enters tapped. SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True -A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Swamp,Mountain | ChangeNum$ 1 | SpellDescription$ Search your library for a Swamp or Mountain card, put it onto the battlefield, then shuffle. +A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Swamp,Mountain | SpellDescription$ Search your library for a Swamp or Mountain card, put it onto the battlefield, then shuffle. Oracle:Rocky Tar Pit enters tapped.\n{T}, Sacrifice Rocky Tar Pit: Search your library for a Swamp or Mountain card, put it onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/r/roiling_regrowth.txt b/forge-gui/res/cardsfolder/r/roiling_regrowth.txt index 15c8b8be7a0..428bbf00f43 100644 --- a/forge-gui/res/cardsfolder/r/roiling_regrowth.txt +++ b/forge-gui/res/cardsfolder/r/roiling_regrowth.txt @@ -2,6 +2,6 @@ Name:Roiling Regrowth ManaCost:2 G Types:Instant A:SP$ Sacrifice | Defined$ You | SacValid$ Land | SubAbility$ DBChangeZone | StackDescription$ SpellDescription | SpellDescription$ Sacrifice a land. Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. -SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 2 | Tapped$ True | StackDescription$ None +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 | Tapped$ True | StackDescription$ None SVar:AIPreference:SacCost$Land.Basic+tapped Oracle:Sacrifice a land. Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/r/ruin_in_their_wake.txt b/forge-gui/res/cardsfolder/r/ruin_in_their_wake.txt index 9037fb7a22d..60701cbf1d8 100644 --- a/forge-gui/res/cardsfolder/r/ruin_in_their_wake.txt +++ b/forge-gui/res/cardsfolder/r/ruin_in_their_wake.txt @@ -2,7 +2,7 @@ Name:Ruin in Their Wake ManaCost:1 G Types:Sorcery K:Devoid -A:SP$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Land.Basic | ChangeNum$ 1 | Reveal$ True | Shuffle$ False | RememberChanged$ True | SubAbility$ DBChangeZone | SpellDescription$ Search your library for a basic land card and reveal it. You may put that card onto the battlefield tapped if you control a land named Wastes. Otherwise, put that card into your hand. Then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Reveal$ True | Shuffle$ False | RememberChanged$ True | SubAbility$ DBChangeZone | SpellDescription$ Search your library for a basic land card and reveal it. You may put that card onto the battlefield tapped if you control a land named Wastes. Otherwise, put that card into your hand. Then shuffle. SVar:DBChangeZone:DB$ ChangeZone | Defined$ Remembered | Origin$ Library | Destination$ Battlefield | Tapped$ True | ConditionPresent$ Land.namedWastes+YouCtrl | ForgetChanged$ True | Optional$ True | SubAbility$ DBChangeZone2 SVar:DBChangeZone2:DB$ ChangeZone | Defined$ Remembered | Origin$ Library | Destination$ Hand | SubAbility$ DBShuffle SVar:DBShuffle:DB$ Shuffle | Defined$ You | SubAbility$ DBCleanup diff --git a/forge-gui/res/cardsfolder/rebalanced/a-ominous_parcel.txt b/forge-gui/res/cardsfolder/rebalanced/a-ominous_parcel.txt index 828df989baf..e85023326dc 100644 --- a/forge-gui/res/cardsfolder/rebalanced/a-ominous_parcel.txt +++ b/forge-gui/res/cardsfolder/rebalanced/a-ominous_parcel.txt @@ -1,6 +1,6 @@ Name:A-Ominous Parcel ManaCost:1 Types:Artifact -A:AB$ ChangeZone | Cost$ 1 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. +A:AB$ ChangeZone | Cost$ 1 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. A:AB$ DealDamage | Cost$ 5 T Sac<1/CARDNAME> | ValidTgts$ Creature | NumDmg$ 4 | SpellDescription$ It deals 4 damage to target creature. Oracle:{1}, {T}, Sacrifice Ominous Parcel: Search your library for a basic land card, reveal it, put it into your hand, then shuffle.\n{5}, {T}, Sacrifice Ominous Parcel: It deals 4 damage to target creature. diff --git a/forge-gui/res/cardsfolder/rebalanced/a-scout_the_wilderness.txt b/forge-gui/res/cardsfolder/rebalanced/a-scout_the_wilderness.txt index f7d05ab4cdd..ba0e5db4b5d 100644 --- a/forge-gui/res/cardsfolder/rebalanced/a-scout_the_wilderness.txt +++ b/forge-gui/res/cardsfolder/rebalanced/a-scout_the_wilderness.txt @@ -2,7 +2,7 @@ Name:A-Scout the Wilderness ManaCost:2 G Types:Sorcery K:Kicker:W -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | SubAbility$ DBToken | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. If this spell was kicked, create two 1/1 white Soldier creature tokens. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SubAbility$ DBToken | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. If this spell was kicked, create two 1/1 white Soldier creature tokens. SVar:DBToken:DB$ Token | TokenAmount$ 2 | TokenScript$ w_1_1_soldier | Condition$ Kicked DeckHints:Color$White DeckHas:Ability$Token & Type$Soldier diff --git a/forge-gui/res/cardsfolder/s/safewright_quest.txt b/forge-gui/res/cardsfolder/s/safewright_quest.txt index 70d86dabc66..b9a9c289d78 100644 --- a/forge-gui/res/cardsfolder/s/safewright_quest.txt +++ b/forge-gui/res/cardsfolder/s/safewright_quest.txt @@ -1,5 +1,5 @@ Name:Safewright Quest ManaCost:GW Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Forest,Plains | ChangeNum$ 1 | SpellDescription$ Search your library for a Forest or Plains card, reveal it, put it into your hand, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Forest,Plains | SpellDescription$ Search your library for a Forest or Plains card, reveal it, put it into your hand, then shuffle. Oracle:Search your library for a Forest or Plains card, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/s/sagu_wildling_roost_seek.txt b/forge-gui/res/cardsfolder/s/sagu_wildling_roost_seek.txt index fb30d49e8b7..810bcaf8db6 100644 --- a/forge-gui/res/cardsfolder/s/sagu_wildling_roost_seek.txt +++ b/forge-gui/res/cardsfolder/s/sagu_wildling_roost_seek.txt @@ -13,5 +13,5 @@ ALTERNATE Name:Roost Seek ManaCost:G Types:Sorcery Omen -A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. (Also shuffle this card.) +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. (Also shuffle this card.) Oracle:Search your library for a basic land card, reveal it, put it into your hand, then shuffle. (Also shuffle this card.) diff --git a/forge-gui/res/cardsfolder/s/sakura_tribe_elder.txt b/forge-gui/res/cardsfolder/s/sakura_tribe_elder.txt index ea4f8a93127..d91ab8389ef 100644 --- a/forge-gui/res/cardsfolder/s/sakura_tribe_elder.txt +++ b/forge-gui/res/cardsfolder/s/sakura_tribe_elder.txt @@ -2,6 +2,6 @@ Name:Sakura-Tribe Elder ManaCost:1 G Types:Creature Snake Shaman PT:1/1 -A:AB$ ChangeZone | Cost$ Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. SVar:SacMeAfterBlock:TRUE Oracle:Sacrifice Sakura-Tribe Elder: Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/s/samut_the_tested.txt b/forge-gui/res/cardsfolder/s/samut_the_tested.txt index aa66779e6aa..c4cef24be38 100644 --- a/forge-gui/res/cardsfolder/s/samut_the_tested.txt +++ b/forge-gui/res/cardsfolder/s/samut_the_tested.txt @@ -2,7 +2,7 @@ Name:Samut, the Tested ManaCost:2 R G Types:Legendary Planeswalker Samut Loyalty:4 -A:AB$ Pump | Cost$ AddCounter<1/LOYALTY> | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Creature | Planeswalker$ True | KW$ Double Strike | SpellDescription$ Up to one target creature gains double strike until end of turn. -A:AB$ DealDamage | Cost$ SubCounter<2/LOYALTY> | ValidTgts$ Any | TgtPrompt$ Select any target to distribute damage to | NumDmg$ 2 | TargetMin$ 1 | TargetMax$ 2 | DividedAsYouChoose$ 2 | Planeswalker$ True | SpellDescription$ CARDNAME deals 2 damage divided as you choose among one or two targets. -A:AB$ ChangeZone | Cost$ SubCounter<7/LOYALTY> | Origin$ Library | Destination$ Battlefield | ChangeType$ Creature,Planeswalker | ChangeNum$ 2 | Planeswalker$ True | Ultimate$ True | SpellDescription$ Search your library for up to two creature and/or planeswalker cards, put them onto the battlefield, then shuffle. +A:AB$ Pump | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Creature | KW$ Double Strike | SpellDescription$ Up to one target creature gains double strike until end of turn. +A:AB$ DealDamage | Cost$ SubCounter<2/LOYALTY> | Planeswalker$ True | ValidTgts$ Any | TgtPrompt$ Select any target to distribute damage to | NumDmg$ 2 | TargetMin$ 1 | TargetMax$ 2 | DividedAsYouChoose$ 2 | SpellDescription$ CARDNAME deals 2 damage divided as you choose among one or two targets. +A:AB$ ChangeZone | Cost$ SubCounter<7/LOYALTY> | Planeswalker$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Creature,Planeswalker | ChangeNum$ 2 | Ultimate$ True | SpellDescription$ Search your library for up to two creature and/or planeswalker cards, put them onto the battlefield, then shuffle. Oracle:[+1]: Up to one target creature gains double strike until end of turn.\n[-2]: Samut, the Tested deals 2 damage divided as you choose among one or two targets.\n[-7]: Search your library for up to two creature and/or planeswalker cards, put them onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/s/sandworm.txt b/forge-gui/res/cardsfolder/s/sandworm.txt index dcb4837ae2c..cd6303d589c 100644 --- a/forge-gui/res/cardsfolder/s/sandworm.txt +++ b/forge-gui/res/cardsfolder/s/sandworm.txt @@ -5,5 +5,5 @@ PT:5/4 K:Haste T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDestroy | TriggerDescription$ When this creature enters, destroy target land. Its controller may search their library for a basic land card, put it onto the battlefield tapped, then shuffle. SVar:TrigDestroy:DB$ Destroy | ValidTgts$ Land | SubAbility$ DBChange | AITgts$ Land.nonBasic | SpellDescription$ Destroy target land. Its controller may search their library for a basic land card, put it onto the battlefield, then shuffle. -SVar:DBChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | Tapped$ True | DefinedPlayer$ TargetedController | ShuffleNonMandatory$ True +SVar:DBChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | DefinedPlayer$ TargetedController | ShuffleNonMandatory$ True Oracle:Haste\nWhen this creature enters, destroy target land. Its controller may search their library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/s/sarkhans_triumph.txt b/forge-gui/res/cardsfolder/s/sarkhans_triumph.txt index fa9abec458c..2d152a6fd25 100644 --- a/forge-gui/res/cardsfolder/s/sarkhans_triumph.txt +++ b/forge-gui/res/cardsfolder/s/sarkhans_triumph.txt @@ -1,7 +1,7 @@ Name:Sarkhan's Triumph ManaCost:2 R Types:Instant -A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Creature.Dragon | ChangeNum$ 1 | SpellDescription$ Search your library for a Dragon creature card, reveal it, put it into your hand, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Creature.Dragon | ChangeTypeDesc$ Dragon creature | SpellDescription$ Search your library for a Dragon creature card, reveal it, put it into your hand, then shuffle. AI:RemoveDeck:Random DeckNeeds:Type$Dragon Oracle:Search your library for a Dragon creature card, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/s/scalding_tarn.txt b/forge-gui/res/cardsfolder/s/scalding_tarn.txt index a61dd110d4a..abbba1590b9 100644 --- a/forge-gui/res/cardsfolder/s/scalding_tarn.txt +++ b/forge-gui/res/cardsfolder/s/scalding_tarn.txt @@ -1,5 +1,5 @@ Name:Scalding Tarn ManaCost:no cost Types:Land -A:AB$ ChangeZone | Cost$ T PayLife<1> Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Island,Mountain | ChangeNum$ 1 | SpellDescription$ Search your library for a Island or Mountain card, put it onto the battlefield, then shuffle. +A:AB$ ChangeZone | Cost$ T PayLife<1> Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Island,Mountain | SpellDescription$ Search your library for a Island or Mountain card, put it onto the battlefield, then shuffle. Oracle:{T}, Pay 1 life, Sacrifice Scalding Tarn: Search your library for an Island or Mountain card, put it onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/s/scholarship_sponsor.txt b/forge-gui/res/cardsfolder/s/scholarship_sponsor.txt index bf9ad1d46a5..5869b37f1ac 100644 --- a/forge-gui/res/cardsfolder/s/scholarship_sponsor.txt +++ b/forge-gui/res/cardsfolder/s/scholarship_sponsor.txt @@ -4,7 +4,7 @@ Types:Creature Human Advisor PT:3/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigRepeatEach | TriggerDescription$ When CARDNAME enters, each player who controls fewer lands than the player who controls the most lands searches their library for a number of basic land cards less than or equal to the difference, puts those cards onto the battlefield tapped, then shuffles. SVar:TrigRepeatEach:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBChangeZone -SVar:DBChangeZone:DB$ ChangeZone | ConditionCheckSVar$ X | ConditionSVarCompare$ LTY | DefinedPlayer$ Remembered | Chooser$ Remembered | ChangeType$ Land.Basic | ChangeNum$ Z | Origin$ Library | Destination$ Battlefield | Tapped$ True +SVar:DBChangeZone:DB$ ChangeZone | ConditionCheckSVar$ X | ConditionSVarCompare$ LTY | DefinedPlayer$ Remembered | Chooser$ Remembered | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ Z | Origin$ Library | Destination$ Battlefield | Tapped$ True SVar:X:Count$Valid Land.RememberedPlayerCtrl SVar:Y:PlayerCountPlayers$HighestValid Land.YouCtrl SVar:Z:SVar$Y/Minus.X diff --git a/forge-gui/res/cardsfolder/s/scout_the_wilderness.txt b/forge-gui/res/cardsfolder/s/scout_the_wilderness.txt index 6df041b89f6..5c126ccddcb 100644 --- a/forge-gui/res/cardsfolder/s/scout_the_wilderness.txt +++ b/forge-gui/res/cardsfolder/s/scout_the_wilderness.txt @@ -2,7 +2,7 @@ Name:Scout the Wilderness ManaCost:2 G Types:Sorcery K:Kicker:1 W -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | SubAbility$ DBToken | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. If this spell was kicked, create two 1/1 white Soldier creature tokens. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SubAbility$ DBToken | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. If this spell was kicked, create two 1/1 white Soldier creature tokens. SVar:DBToken:DB$ Token | TokenAmount$ 2 | TokenScript$ w_1_1_soldier | Condition$ Kicked DeckHints:Color$White DeckHas:Ability$Token & Type$Soldier diff --git a/forge-gui/res/cardsfolder/s/scouting_trek.txt b/forge-gui/res/cardsfolder/s/scouting_trek.txt index 9b5a435812f..138c5e18dbf 100644 --- a/forge-gui/res/cardsfolder/s/scouting_trek.txt +++ b/forge-gui/res/cardsfolder/s/scouting_trek.txt @@ -1,7 +1,7 @@ Name:Scouting Trek ManaCost:1 G Types:Sorcery -A:SP$ ChangeZone | ChangeNum$ X | ChangeType$ Land.Basic | Origin$ Library | Destination$ Library | Reorder$ True | LibraryPosition$ 0 | SpellDescription$ Search your library for any number of basic land cards, reveal those cards, then shuffle and put them on top. +A:SP$ ChangeZone | ChangeNum$ X | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Origin$ Library | Destination$ Library | Reorder$ True | LibraryPosition$ 0 | SpellDescription$ Search your library for any number of basic land cards, reveal those cards, then shuffle and put them on top. SVar:X:Count$ValidLibrary Land.Basic+YouOwn AI:RemoveDeck:All Oracle:Search your library for any number of basic land cards, reveal those cards, then shuffle and put them on top. diff --git a/forge-gui/res/cardsfolder/s/scrapyard_recombiner.txt b/forge-gui/res/cardsfolder/s/scrapyard_recombiner.txt index 6889d8d2ecd..893699ffd64 100644 --- a/forge-gui/res/cardsfolder/s/scrapyard_recombiner.txt +++ b/forge-gui/res/cardsfolder/s/scrapyard_recombiner.txt @@ -3,7 +3,7 @@ ManaCost:3 Types:Artifact Creature Construct PT:0/0 K:Modular:2 -A:AB$ ChangeZone | Cost$ T Sac<1/Artifact> | Origin$ Library | Destination$ Hand | ChangeType$ Card.Construct | ChangeNum$ 1 | SpellDescription$ Search your library for a Construct card, reveal it, put it into your hand, then shuffle. +A:AB$ ChangeZone | Cost$ T Sac<1/Artifact> | Origin$ Library | Destination$ Hand | ChangeType$ Construct | SpellDescription$ Search your library for a Construct card, reveal it, put it into your hand, then shuffle. SVar:AIPreference:SacCost$Artifact.token,Artifact.cmcEQ1 AI:RemoveDeck:Random DeckHas:Ability$Counters diff --git a/forge-gui/res/cardsfolder/s/seahunter.txt b/forge-gui/res/cardsfolder/s/seahunter.txt index e71ad422ed8..7690383325a 100644 --- a/forge-gui/res/cardsfolder/s/seahunter.txt +++ b/forge-gui/res/cardsfolder/s/seahunter.txt @@ -2,7 +2,7 @@ Name:Seahunter ManaCost:2 U U Types:Creature Human Mercenary PT:2/2 -A:AB$ ChangeZone | Cost$ 3 T | Origin$ Library | Destination$ Battlefield | ChangeType$ Permanent.Merfolk | ChangeNum$ 1 | SpellDescription$ Search your library for a Merfolk permanent card, put it onto the battlefield, then shuffle. +A:AB$ ChangeZone | Cost$ 3 T | Origin$ Library | Destination$ Battlefield | ChangeType$ Permanent.Merfolk | ChangeTypeDesc$ Merfolk permanent | SpellDescription$ Search your library for a Merfolk permanent card, put it onto the battlefield, then shuffle. AI:RemoveDeck:Random SVar:NonCombatPriority:3 Oracle:{3}, {T}: Search your library for a Merfolk permanent card, put it onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/s/search_for_tomorrow.txt b/forge-gui/res/cardsfolder/s/search_for_tomorrow.txt index 4e919bb158a..ffdae0d4465 100644 --- a/forge-gui/res/cardsfolder/s/search_for_tomorrow.txt +++ b/forge-gui/res/cardsfolder/s/search_for_tomorrow.txt @@ -2,5 +2,5 @@ Name:Search for Tomorrow ManaCost:2 G Types:Sorcery K:Suspend:2:G -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put it onto the battlefield, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, put it onto the battlefield, then shuffle. Oracle:Search your library for a basic land card, put it onto the battlefield, then shuffle.\nSuspend 2—{G} (Rather than cast this card from your hand, you may pay {G} and exile it with two time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, you may cast it without paying its mana cost.) diff --git a/forge-gui/res/cardsfolder/s/seek_the_horizon.txt b/forge-gui/res/cardsfolder/s/seek_the_horizon.txt index 861e1826ab5..b6136d48f27 100644 --- a/forge-gui/res/cardsfolder/s/seek_the_horizon.txt +++ b/forge-gui/res/cardsfolder/s/seek_the_horizon.txt @@ -1,5 +1,5 @@ Name:Seek the Horizon ManaCost:3 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 3 | SpellDescription$ Search your library for up to three basic land cards, reveal them, put them into your hand, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 3 | SpellDescription$ Search your library for up to three basic land cards, reveal them, put them into your hand, then shuffle. Oracle:Search your library for up to three basic land cards, reveal them, put them into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/s/seething_landscape.txt b/forge-gui/res/cardsfolder/s/seething_landscape.txt index ba1d733d929..de8939f0a2f 100644 --- a/forge-gui/res/cardsfolder/s/seething_landscape.txt +++ b/forge-gui/res/cardsfolder/s/seething_landscape.txt @@ -2,6 +2,6 @@ Name:Seething Landscape ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. -A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Island+Basic,Land.Swamp+Basic,Land.Mountain+Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic Island, Swamp, or Mountain card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Island.Basic,Swamp.Basic,Mountain.Basic | ChangeTypeDesc$ basic Island, Swamp, or Mountain | SpellDescription$ Search your library for a basic Island, Swamp, or Mountain card, put it onto the battlefield tapped, then shuffle. K:Cycling:U B R Oracle:{T}: Add {C}.\n{T}, Sacrifice Seething Landscape: Search your library for a basic Island, Swamp, or Mountain card, put it onto the battlefield tapped, then shuffle.\nCycling {U}{B}{R} ({U}{B}{R}, Discard this card: Draw a card.) diff --git a/forge-gui/res/cardsfolder/s/settle_the_wreckage.txt b/forge-gui/res/cardsfolder/s/settle_the_wreckage.txt index b7c1ccbe580..db0a8ffd91b 100644 --- a/forge-gui/res/cardsfolder/s/settle_the_wreckage.txt +++ b/forge-gui/res/cardsfolder/s/settle_the_wreckage.txt @@ -2,7 +2,7 @@ Name:Settle the Wreckage ManaCost:2 W W Types:Instant A:SP$ ChangeZoneAll | ValidTgts$ Player | ChangeType$ Creature.attacking | TgtPrompt$ Select target player | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DBGetLands | SpellDescription$ Exile all attacking creatures target player controls. That player may search their library for that many basic land cards, put those cards onto the battlefield tapped, then shuffle. -SVar:DBGetLands:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ X | DefinedPlayer$ TargetedPlayer | ShuffleNonMandatory$ True | SubAbility$ DBCleanup +SVar:DBGetLands:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ X | DefinedPlayer$ TargetedPlayer | ShuffleNonMandatory$ True | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Count$RememberedSize Oracle:Exile all attacking creatures target player controls. That player may search their library for that many basic land cards, put those cards onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/s/shadow_rite_priest.txt b/forge-gui/res/cardsfolder/s/shadow_rite_priest.txt index 9f10a079aec..cecc223384d 100644 --- a/forge-gui/res/cardsfolder/s/shadow_rite_priest.txt +++ b/forge-gui/res/cardsfolder/s/shadow_rite_priest.txt @@ -3,7 +3,7 @@ ManaCost:1 B Types:Creature Human Cleric PT:2/2 S:Mode$ Continuous | Affected$ Cleric.Other+YouCtrl | AddPower$ 1 | AddToughness$ 1 | Description$ Other Clerics you control get +1/+1. -A:AB$ ChangeZone | Cost$ T 3 B B Sac<1/Cleric.Other> | Origin$ Library | Destination$ Battlefield | ChangeType$ Creature.Black | SpellDescription$ Search your library for a black creature card, put it onto the battlefield, then shuffle. +A:AB$ ChangeZone | Cost$ T 3 B B Sac<1/Cleric.Other> | Origin$ Library | Destination$ Battlefield | ChangeType$ Creature.Black | ChangeTypeDesc$ black creature | SpellDescription$ Search your library for a black creature card, put it onto the battlefield, then shuffle. DeckHas:Ability$Sacrifice DeckNeeds:Type$Cleric Oracle:Other Clerics you control get +1/+1.\n{3}{B}{B}, {T}, Sacrifice another Cleric: Search your library for a black creature card, put it onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/s/shattered_landscape.txt b/forge-gui/res/cardsfolder/s/shattered_landscape.txt index d699fa72878..7f49d7df92a 100644 --- a/forge-gui/res/cardsfolder/s/shattered_landscape.txt +++ b/forge-gui/res/cardsfolder/s/shattered_landscape.txt @@ -2,6 +2,6 @@ Name:Shattered Landscape ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. -A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Mountain+Basic,Land.Plains+Basic,Land.Swamp+Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic Mountain, Plains, or Swamp card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Mountain.Basic,Plains.Basic,Swamp.Basic | ChangeTypeDesc$ basic Mountain, Plains, or Swamp | SpellDescription$ Search your library for a basic Mountain, Plains, or Swamp card, put it onto the battlefield tapped, then shuffle. K:Cycling:R W B Oracle:{T}: Add {C}.\n{T}, Sacrifice Shattered Landscape: Search your library for a basic Mountain, Plains, or Swamp card, put it onto the battlefield tapped, then shuffle.\nCycling {R}{W}{B} ({R}{W}{B}, Discard this card: Draw a card.) diff --git a/forge-gui/res/cardsfolder/s/sheltering_landscape.txt b/forge-gui/res/cardsfolder/s/sheltering_landscape.txt index 72c47ebc740..15bfa78f4e0 100644 --- a/forge-gui/res/cardsfolder/s/sheltering_landscape.txt +++ b/forge-gui/res/cardsfolder/s/sheltering_landscape.txt @@ -2,6 +2,6 @@ Name:Sheltering Landscape ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. -A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Mountain+Basic,Land.Forest+Basic,Land.Plains+Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic Mountain, Forest, or Plains card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Mountain.Basic,Forest.Basic,Plains.Basic | ChangeTypeDesc$ basic Mountain, Forest, or Plains | SpellDescription$ Search your library for a basic Mountain, Forest, or Plains card, put it onto the battlefield tapped, then shuffle. K:Cycling:R G W Oracle:{T}: Add {C}.\n{T}, Sacrifice Sheltering Landscape: Search your library for a basic Mountain, Forest, or Plains card, put it onto the battlefield tapped, then shuffle.\nCycling {R}{G}{W} ({R}{G}{W}, Discard this card: Draw a card.) diff --git a/forge-gui/res/cardsfolder/s/shire_terrace.txt b/forge-gui/res/cardsfolder/s/shire_terrace.txt index 8acd308d15a..0b2f3d81e57 100644 --- a/forge-gui/res/cardsfolder/s/shire_terrace.txt +++ b/forge-gui/res/cardsfolder/s/shire_terrace.txt @@ -2,6 +2,6 @@ Name:Shire Terrace ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. -A:AB$ ChangeZone | Cost$ 1 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ 1 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. DeckHas:Ability$Sacrifice Oracle:{T}: Add {C}.\n{1}, {T}, Sacrifice Shire Terrace: Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/s/silkwing_scout.txt b/forge-gui/res/cardsfolder/s/silkwing_scout.txt index 0a33db69925..e43a52167ba 100644 --- a/forge-gui/res/cardsfolder/s/silkwing_scout.txt +++ b/forge-gui/res/cardsfolder/s/silkwing_scout.txt @@ -3,5 +3,5 @@ ManaCost:2 U Types:Creature Faerie Scout PT:2/1 K:Flying -A:AB$ ChangeZone | Cost$ G Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ G Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. Oracle:Flying\n{G}, Sacrifice Silkwing Scout: Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/s/silverglade_pathfinder.txt b/forge-gui/res/cardsfolder/s/silverglade_pathfinder.txt index 2f8b41bea4b..7dda6656dba 100644 --- a/forge-gui/res/cardsfolder/s/silverglade_pathfinder.txt +++ b/forge-gui/res/cardsfolder/s/silverglade_pathfinder.txt @@ -2,6 +2,6 @@ Name:Silverglade Pathfinder ManaCost:1 G Types:Creature Dryad Spellshaper PT:1/1 -A:AB$ ChangeZone | Cost$ 1 G T Discard<1/Card> | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | Tapped$ True | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ 1 G T Discard<1/Card> | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. AI:RemoveDeck:All Oracle:{1}{G}, {T}, Discard a card: Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/s/skittering_surveyor.txt b/forge-gui/res/cardsfolder/s/skittering_surveyor.txt index d0477f7a883..5821745a2a8 100644 --- a/forge-gui/res/cardsfolder/s/skittering_surveyor.txt +++ b/forge-gui/res/cardsfolder/s/skittering_surveyor.txt @@ -3,5 +3,5 @@ ManaCost:3 Types:Artifact Creature Construct PT:1/2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True Oracle:When Skittering Surveyor enters, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/s/skyshroud_poacher.txt b/forge-gui/res/cardsfolder/s/skyshroud_poacher.txt index 61645cbe9c7..21ade090a31 100644 --- a/forge-gui/res/cardsfolder/s/skyshroud_poacher.txt +++ b/forge-gui/res/cardsfolder/s/skyshroud_poacher.txt @@ -2,7 +2,7 @@ Name:Skyshroud Poacher ManaCost:2 G G Types:Creature Human Rebel PT:2/2 -A:AB$ ChangeZone | Cost$ 3 T | Origin$ Library | Destination$ Battlefield | ChangeType$ Permanent.Elf | ChangeNum$ 1 | SpellDescription$ Search your library for an Elf permanent card, put it onto the battlefield, then shuffle. +A:AB$ ChangeZone | Cost$ 3 T | Origin$ Library | Destination$ Battlefield | ChangeType$ Permanent.Elf | ChangeTypeDesc$ Elf permanent | SpellDescription$ Search your library for an Elf permanent card, put it onto the battlefield, then shuffle. AI:RemoveDeck:Random SVar:NonCombatPriority:3 Oracle:{3}, {T}: Search your library for an Elf permanent card, put it onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/s/solemn_simulacrum.txt b/forge-gui/res/cardsfolder/s/solemn_simulacrum.txt index 53fa9ded52d..7546753c02d 100644 --- a/forge-gui/res/cardsfolder/s/solemn_simulacrum.txt +++ b/forge-gui/res/cardsfolder/s/solemn_simulacrum.txt @@ -3,7 +3,7 @@ ManaCost:4 Types:Artifact Creature Golem PT:2/2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, you may search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDraw | OptionalDecider$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, you may draw a card. SVar:TrigDraw:DB$ Draw | Defined$ TriggeredCardController | NumCards$ 1 SVar:SacMe:1 diff --git a/forge-gui/res/cardsfolder/s/solve_the_equation.txt b/forge-gui/res/cardsfolder/s/solve_the_equation.txt index 23f2c6d3ce2..b693c30609b 100644 --- a/forge-gui/res/cardsfolder/s/solve_the_equation.txt +++ b/forge-gui/res/cardsfolder/s/solve_the_equation.txt @@ -1,5 +1,5 @@ Name:Solve the Equation ManaCost:2 U Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Instant,Sorcery | ChangeNum$ 1 | SpellDescription$ Search your library for an instant or sorcery card, reveal it, put it into your hand, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Instant,Sorcery | SpellDescription$ Search your library for an instant or sorcery card, reveal it, put it into your hand, then shuffle. Oracle:Search your library for an instant or sorcery card, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/s/spider_bot.txt b/forge-gui/res/cardsfolder/s/spider_bot.txt index 610fcc1f4c9..16b7c1fcb4d 100644 --- a/forge-gui/res/cardsfolder/s/spider_bot.txt +++ b/forge-gui/res/cardsfolder/s/spider_bot.txt @@ -4,5 +4,5 @@ Types:Artifact Creature Spider Robot Scout PT:2/1 K:Reach T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When this creature enters, you may search your library for a basic land card, reveal it, then shuffle and put that card on top. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Library | LibraryPosition$ 0 | ChangeType$ Land.Basic | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Library | LibraryPosition$ 0 | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True Oracle:Reach\nWhen this creature enters, you may search your library for a basic land card, reveal it, then shuffle and put that card on top. diff --git a/forge-gui/res/cardsfolder/s/spider_man_brooklyn_visionary.txt b/forge-gui/res/cardsfolder/s/spider_man_brooklyn_visionary.txt index e8e3c9ed39f..f0931bbc73e 100644 --- a/forge-gui/res/cardsfolder/s/spider_man_brooklyn_visionary.txt +++ b/forge-gui/res/cardsfolder/s/spider_man_brooklyn_visionary.txt @@ -4,6 +4,6 @@ Types:Legendary Creature Spider Human Hero PT:4/3 K:Web-slinging:2 G T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When NICKNAME enters, search your library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land Oracle:Web-slinging {2}{G} (You may cast this spell for {2}{G} if you also return a tapped creature you control to its owner's hand.)\nWhen Spider-Man enters, search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/s/spineseeker_centipede.txt b/forge-gui/res/cardsfolder/s/spineseeker_centipede.txt index b68d24a3faa..3e8a0972211 100644 --- a/forge-gui/res/cardsfolder/s/spineseeker_centipede.txt +++ b/forge-gui/res/cardsfolder/s/spineseeker_centipede.txt @@ -3,7 +3,7 @@ ManaCost:2 G Types:Creature Insect PT:2/1 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters, search your library for a basic land card, reveal it, put it into your hand, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 1 | AddToughness$ 2 | AddKeyword$ Vigilance | Condition$ Delirium | Description$ Delirium — CARDNAME gets +1/+2 and has vigilance as long as there are four or more card types among cards in your graveyard. DeckHints:Ability$Graveyard|Discard DeckHas:Ability$Delirium diff --git a/forge-gui/res/cardsfolder/s/sporocyst.txt b/forge-gui/res/cardsfolder/s/sporocyst.txt index c6daf2606fa..2b6a57eb3e0 100644 --- a/forge-gui/res/cardsfolder/s/sporocyst.txt +++ b/forge-gui/res/cardsfolder/s/sporocyst.txt @@ -5,7 +5,7 @@ PT:0/0 K:Ravenous K:Defender T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ Spore Chimney — When CARDNAME enters, search your library for up to X basic land cards, put them onto the battlefield tapped, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ X | Tapped$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ X | Tapped$ True SVar:X:Count$xPaid DeckHas:Ability$Counters Oracle:Ravenous (This creature enters with X +1/+1 counters on it. If X is 5 or more, draw a card when it enters.)\nDefender\nSpore Chimney — When Sporocyst enters, search your library for up to X basic land cards, put them onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/s/spring_mind.txt b/forge-gui/res/cardsfolder/s/spring_mind.txt index 5c2880400da..d8cc44f1a25 100644 --- a/forge-gui/res/cardsfolder/s/spring_mind.txt +++ b/forge-gui/res/cardsfolder/s/spring_mind.txt @@ -1,7 +1,7 @@ Name:Spring ManaCost:2 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. AlternateMode:Split Oracle:Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/s/springbloom_druid.txt b/forge-gui/res/cardsfolder/s/springbloom_druid.txt index 23b30810f80..e24814b102e 100644 --- a/forge-gui/res/cardsfolder/s/springbloom_druid.txt +++ b/forge-gui/res/cardsfolder/s/springbloom_druid.txt @@ -3,5 +3,5 @@ ManaCost:2 G Types:Creature Elf Druid PT:1/1 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigRamp | TriggerDescription$ When CARDNAME enters, you may sacrifice a land. If you do, search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. -SVar:TrigRamp:AB$ ChangeZone | Cost$ Sac<1/Land> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 2 | ShuffleNonMandatory$ True +SVar:TrigRamp:AB$ ChangeZone | Cost$ Sac<1/Land> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 | ShuffleNonMandatory$ True Oracle:When Springbloom Druid enters, you may sacrifice a land. If you do, search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/s/sprouting_vines.txt b/forge-gui/res/cardsfolder/s/sprouting_vines.txt index 63cafa6128c..7c014082652 100644 --- a/forge-gui/res/cardsfolder/s/sprouting_vines.txt +++ b/forge-gui/res/cardsfolder/s/sprouting_vines.txt @@ -1,6 +1,6 @@ Name:Sprouting Vines ManaCost:2 G Types:Instant -A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, reveal that card, put it into your hand, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, reveal that card, put it into your hand, then shuffle. K:Storm Oracle:Search your library for a basic land card, reveal that card, put it into your hand, then shuffle.\nStorm (When you cast this spell, copy it for each spell cast before it this turn.) diff --git a/forge-gui/res/cardsfolder/s/subway_train.txt b/forge-gui/res/cardsfolder/s/subway_train.txt index 93e2eacaec0..18947379674 100644 --- a/forge-gui/res/cardsfolder/s/subway_train.txt +++ b/forge-gui/res/cardsfolder/s/subway_train.txt @@ -3,6 +3,6 @@ ManaCost:2 Types:Artifact Vehicle PT:3/1 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When this Vehicle enters, you may pay {G}. If you do, search your library for a basic land card, reveal it, put it into your hand, then shuffle. -SVar:TrigChangeZone:AB$ ChangeZone | Cost$ G | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 +SVar:TrigChangeZone:AB$ ChangeZone | Cost$ G | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land K:Crew:2 Oracle:When this Vehicle enters, you may pay {G}. If you do, search your library for a basic land card, reveal it, put it into your hand, then shuffle.\nCrew 2 (Tap any number of creatures you control with total power 2 or more: This Vehicle becomes an artifact creature until end of turn.) diff --git a/forge-gui/res/cardsfolder/s/sultai_monument.txt b/forge-gui/res/cardsfolder/s/sultai_monument.txt index 23515beb47f..1b6035a57e5 100644 --- a/forge-gui/res/cardsfolder/s/sultai_monument.txt +++ b/forge-gui/res/cardsfolder/s/sultai_monument.txt @@ -2,7 +2,7 @@ Name:Sultai Monument ManaCost:2 Types:Artifact T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When this artifact enters, search your library for a basic Swamp, Forest, or Island card, reveal it, put it into your hand, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Swamp+Basic,Land.Forest+Basic,Land.Island+Basic +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Swamp.Basic,Forest.Basic,Island.Basic | ChangeTypeDesc$ basic Swamp, Forest, or Island A:AB$ Token | Cost$ 2 B G U T Sac<1/CARDNAME> | TokenAmount$ 2 | TokenScript$ b_2_2_zombie_druid | TokenOwner$ You | SorcerySpeed$ True | SpellDescription$ Create two 2/2 black Zombie Druid creature tokens. Activate only as a sorcery. DeckHas:Ability$Token Oracle:When this artifact enters, search your library for a basic Swamp, Forest, or Island card, reveal it, put it into your hand, then shuffle.\n{2}{B}{G}{U}, {T}, Sacrifice this artifact: Create two 2/2 black Zombie Druid creature tokens. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/s/summon_fenrir.txt b/forge-gui/res/cardsfolder/s/summon_fenrir.txt index 68ece48b7c4..af42a1bb574 100644 --- a/forge-gui/res/cardsfolder/s/summon_fenrir.txt +++ b/forge-gui/res/cardsfolder/s/summon_fenrir.txt @@ -3,7 +3,7 @@ ManaCost:2 G Types:Enchantment Creature Saga Wolf PT:3/2 K:Chapter:3:DBFetch,DBCast,DBDraw -SVar:DBFetch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ 1 | SpellDescription$ Crescent Fang — Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. +SVar:DBFetch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ChangeNum$ 1 | SpellDescription$ Crescent Fang — Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. SVar:DBCast:DB$ Effect | Triggers$ SpellCast | SpellDescription$ Heavenward Howl — When you next cast a creature spell this turn, that creature enters with an additional +1/+1 counter on it. SVar:SpellCast:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ You | OneOff$ True | Execute$ TrigEffect | TriggerDescription$ When you next cast a creature spell this turn, that creature enters with an additional +1/+1 counter on it. SVar:TrigEffect:DB$ Effect | RememberObjects$ TriggeredCard | ReplacementEffects$ ETBCreat | ExileOnMoved$ Stack diff --git a/forge-gui/res/cardsfolder/s/sundering_eruption_volcanic_fissure.txt b/forge-gui/res/cardsfolder/s/sundering_eruption_volcanic_fissure.txt index 340283ac564..75ff7b5a9f8 100644 --- a/forge-gui/res/cardsfolder/s/sundering_eruption_volcanic_fissure.txt +++ b/forge-gui/res/cardsfolder/s/sundering_eruption_volcanic_fissure.txt @@ -2,7 +2,7 @@ Name:Sundering Eruption ManaCost:2 R Types:Sorcery A:SP$ Destroy | ValidTgts$ Land | TgtPrompt$ Select target land | SubAbility$ DBChange | SpellDescription$ Destroy target land. Its controller may search their library for a basic land card, put it onto the battlefield tapped, then shuffle. Creatures without flying can't block this turn. -SVar:DBChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ 1 | DefinedPlayer$ TargetedController | ShuffleNonMandatory$ True | SubAbility$ CantBlockEffect +SVar:DBChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ChangeNum$ 1 | DefinedPlayer$ TargetedController | ShuffleNonMandatory$ True | SubAbility$ CantBlockEffect SVar:CantBlockEffect:DB$ Effect | StaticAbilities$ KWPump | AILogic$ Evasion | SpellDescription$ Creatures without flying can't block this turn. SVar:KWPump:Mode$ Continuous | AffectedZone$ Battlefield | Affected$ Creature.withoutFlying | AddHiddenKeyword$ CARDNAME can't block. | Description$ Creatures without flying can't block this turn. SVar:PlayMain1:TRUE diff --git a/forge-gui/res/cardsfolder/s/supply_demand.txt b/forge-gui/res/cardsfolder/s/supply_demand.txt index 292da85b4a7..02bec1a233c 100644 --- a/forge-gui/res/cardsfolder/s/supply_demand.txt +++ b/forge-gui/res/cardsfolder/s/supply_demand.txt @@ -12,5 +12,5 @@ ALTERNATE Name:Demand ManaCost:1 W U Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Card.MultiColor | ChangeNum$ 1 | SpellDescription$ Search your library for a multicolored card, reveal it, put it into your hand, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Card.MultiColor | ChangeTypeDesc$ multicolored | SpellDescription$ Search your library for a multicolored card, reveal it, put it into your hand, then shuffle. Oracle:Search your library for a multicolored card, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/s/surveyors_scope.txt b/forge-gui/res/cardsfolder/s/surveyors_scope.txt index 57f3a33c646..34fe105b7a3 100644 --- a/forge-gui/res/cardsfolder/s/surveyors_scope.txt +++ b/forge-gui/res/cardsfolder/s/surveyors_scope.txt @@ -1,7 +1,7 @@ Name:Surveyor's Scope ManaCost:2 Types:Artifact -A:AB$ ChangeZone | Cost$ T Exile<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ X | SpellDescription$ Search your library for up to X basic land cards, where X is the number of players who control at least two more lands than you. Put those lands onto the battlefield, then shuffle. +A:AB$ ChangeZone | Cost$ T Exile<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ X | SpellDescription$ Search your library for up to X basic land cards, where X is the number of players who control at least two more lands than you. Put those lands onto the battlefield, then shuffle. SVar:X:PlayerCountPropertywithAtLeast2MoreLandsThanYou$Amount AI:RemoveDeck:All AI:RemoveDeck:Random diff --git a/forge-gui/res/cardsfolder/s/sutina_speaker_of_the_tajuru.txt b/forge-gui/res/cardsfolder/s/sutina_speaker_of_the_tajuru.txt index cf081b4e1a2..1441c8e6ed0 100644 --- a/forge-gui/res/cardsfolder/s/sutina_speaker_of_the_tajuru.txt +++ b/forge-gui/res/cardsfolder/s/sutina_speaker_of_the_tajuru.txt @@ -3,7 +3,7 @@ ManaCost:2 G Types:Legendary Creature Elf Scout PT:2/2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters, search your library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigImmediateTrig | TriggerDescription$ Whenever NICKNAME attacks, you may return a land you control to its owner's hand. When you do, put a +1/+1 counter on target creature. SVar:TrigImmediateTrig:AB$ ImmediateTrigger | Cost$ Return<1/Land> | Execute$ TrigPutCounter | TriggerDescription$ When you do, put a +1/+1 counter on target creature. SVar:TrigPutCounter:DB$ PutCounter | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ P1P1 | CounterNum$ 1 diff --git a/forge-gui/res/cardsfolder/s/sword_of_hearth_and_home.txt b/forge-gui/res/cardsfolder/s/sword_of_hearth_and_home.txt index 0afa6aef4ab..4c1e92eefae 100644 --- a/forge-gui/res/cardsfolder/s/sword_of_hearth_and_home.txt +++ b/forge-gui/res/cardsfolder/s/sword_of_hearth_and_home.txt @@ -5,7 +5,7 @@ K:Equip:2 S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 2 | AddToughness$ 2 | AddSVar$ SwordOfHearthAndHomeCE | AddKeyword$ Protection from green & Protection from white | Description$ Equipped creature gets +2/+2 and has protection from green and from white. T:Mode$ DamageDone | ValidSource$ Creature.EquippedBy | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigBlink | TriggerZones$ Battlefield | TriggerDescription$ Whenever equipped creature deals combat damage to a player, exile up to one target creature you own, then search your library for a basic land card. Put both cards onto the battlefield under your control, then shuffle. SVar:TrigBlink:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | ValidTgts$ Creature.YouOwn | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select target creature you own | SubAbility$ DBLand -SVar:DBLand:DB$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Land.Basic | ChangeNum$ 1 | RememberChanged$ True | SubAbility$ DBReturn +SVar:DBLand:DB$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | RememberChanged$ True | SubAbility$ DBReturn SVar:DBReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ All | Destination$ Battlefield | GainControl$ True | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:SwordOfHearthAndHomeCE:SVar:MustBeBlocked:AttackingPlayerConservative diff --git a/forge-gui/res/cardsfolder/s/sword_of_the_animist.txt b/forge-gui/res/cardsfolder/s/sword_of_the_animist.txt index 55f07dcf52e..b7ec40ac387 100644 --- a/forge-gui/res/cardsfolder/s/sword_of_the_animist.txt +++ b/forge-gui/res/cardsfolder/s/sword_of_the_animist.txt @@ -4,5 +4,5 @@ Types:Legendary Artifact Equipment K:Equip:2 S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 1 | AddToughness$ 1 | Description$ Equipped creature gets +1/+1. T:Mode$ Attacks | ValidCard$ Card.EquippedBy | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ Whenever equipped creature attacks, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | Tapped$ True | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ShuffleNonMandatory$ True Oracle:Equipped creature gets +1/+1.\nWhenever equipped creature attacks, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle.\nEquip {2} diff --git a/forge-gui/res/cardsfolder/s/sylvan_ranger.txt b/forge-gui/res/cardsfolder/s/sylvan_ranger.txt index b57972684ad..5d995bd8711 100644 --- a/forge-gui/res/cardsfolder/s/sylvan_ranger.txt +++ b/forge-gui/res/cardsfolder/s/sylvan_ranger.txt @@ -3,5 +3,5 @@ ManaCost:1 G Types:Creature Elf Scout Ranger PT:1/1 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True Oracle:When Sylvan Ranger enters, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/t/temur_monument.txt b/forge-gui/res/cardsfolder/t/temur_monument.txt index 1b8e2059014..745ea9e6ee8 100644 --- a/forge-gui/res/cardsfolder/t/temur_monument.txt +++ b/forge-gui/res/cardsfolder/t/temur_monument.txt @@ -2,7 +2,7 @@ Name:Temur Monument ManaCost:2 Types:Artifact T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When this artifact enters, search your library for a basic Forest, Island, or Mountain card, reveal it, put it into your hand, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Forest+Basic,Land.Island+Basic,Land.Mountain+Basic +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Forest.Basic,Island.Basic,Mountain.Basic | ChangeTypeDesc$ basic Forest, Island, or Mountain A:AB$ Token | Cost$ 3 G U R T Sac<1/CARDNAME> | TokenAmount$ 1 | TokenScript$ g_5_5_elephant | TokenOwner$ You | SorcerySpeed$ True | SpellDescription$ Create a 5/5 green Elephant creature token. Activate only as a sorcery. DeckHas:Ability$Token Oracle:When this artifact enters, search your library for a basic Forest, Island, or Mountain card, reveal it, put it into your hand, then shuffle.\n{3}{G}{U}{R}, {T}, Sacrifice this artifact: Create a 5/5 green Elephant creature token. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/t/terminal_moraine.txt b/forge-gui/res/cardsfolder/t/terminal_moraine.txt index 16327fc7f84..334f41ad784 100644 --- a/forge-gui/res/cardsfolder/t/terminal_moraine.txt +++ b/forge-gui/res/cardsfolder/t/terminal_moraine.txt @@ -2,5 +2,5 @@ Name:Terminal Moraine ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. -A:AB$ ChangeZone | Cost$ 2 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ 2 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. Oracle:{T}: Add {C}.\n{2}, {T}, Sacrifice Terminal Moraine: Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/t/terramorph.txt b/forge-gui/res/cardsfolder/t/terramorph.txt index 676ed36f43e..9c0e4ed9502 100644 --- a/forge-gui/res/cardsfolder/t/terramorph.txt +++ b/forge-gui/res/cardsfolder/t/terramorph.txt @@ -2,5 +2,5 @@ Name:Terramorph ManaCost:3 G Types:Sorcery K:Rebound -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put it onto the battlefield, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, put it onto the battlefield, then shuffle. Oracle:Search your library for a basic land card, put it onto the battlefield, then shuffle.\nRebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) diff --git a/forge-gui/res/cardsfolder/t/terramorphic_expanse.txt b/forge-gui/res/cardsfolder/t/terramorphic_expanse.txt index ff6396b3f52..19e121a2391 100644 --- a/forge-gui/res/cardsfolder/t/terramorphic_expanse.txt +++ b/forge-gui/res/cardsfolder/t/terramorphic_expanse.txt @@ -1,5 +1,5 @@ Name:Terramorphic Expanse ManaCost:no cost Types:Land -A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. Oracle:{T}, Sacrifice Terramorphic Expanse: Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/t/thaumatic_compass_spires_of_orazca.txt b/forge-gui/res/cardsfolder/t/thaumatic_compass_spires_of_orazca.txt index a06ff1473ba..cc416023b52 100644 --- a/forge-gui/res/cardsfolder/t/thaumatic_compass_spires_of_orazca.txt +++ b/forge-gui/res/cardsfolder/t/thaumatic_compass_spires_of_orazca.txt @@ -1,7 +1,7 @@ Name:Thaumatic Compass ManaCost:2 Types:Artifact -A:AB$ ChangeZone | Cost$ 3 T | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card and put that card into your hand, then shuffle. +A:AB$ ChangeZone | Cost$ 3 T | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card and put that card into your hand, then shuffle. T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | IsPresent$ Land.YouCtrl | PresentCompare$ GE7 | Execute$ DBTransform | TriggerDescription$ At the beginning of your end step, if you control seven or more lands, transform CARDNAME. SVar:DBTransform:DB$ SetState | Defined$ Self | Mode$ Transform AlternateMode:DoubleFaced diff --git a/forge-gui/res/cardsfolder/t/thawing_glaciers.txt b/forge-gui/res/cardsfolder/t/thawing_glaciers.txt index 3c4d2ea40f1..df175601ca1 100644 --- a/forge-gui/res/cardsfolder/t/thawing_glaciers.txt +++ b/forge-gui/res/cardsfolder/t/thawing_glaciers.txt @@ -3,7 +3,7 @@ ManaCost:no cost Types:Land R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementResult$ Updated | ReplaceWith$ ETBTapped | Description$ CARDNAME enters tapped. SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True -A:AB$ ChangeZone | Cost$ 1 T | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | Tapped$ True | Shuffle$ True | SubAbility$ DBDelTrig | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. Return CARDNAME to its owner's hand at the beginning of the next cleanup step. +A:AB$ ChangeZone | Cost$ 1 T | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | Shuffle$ True | SubAbility$ DBDelTrig | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. Return CARDNAME to its owner's hand at the beginning of the next cleanup step. SVar:DBDelTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ Cleanup | ValidPlayer$ Player | Execute$ TrigBounce | TriggerDescription$ Return CARDNAME to its owner's hand at the beginning of the next cleanup step. SVar:TrigBounce:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Defined$ Self Oracle:Thawing Glaciers enters tapped.\n{1}, {T}: Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. Return Thawing Glaciers to its owner's hand at the beginning of the next cleanup step. diff --git a/forge-gui/res/cardsfolder/t/the_weatherseed_treaty.txt b/forge-gui/res/cardsfolder/t/the_weatherseed_treaty.txt index 2a591a67fa3..d05ba70ac3e 100644 --- a/forge-gui/res/cardsfolder/t/the_weatherseed_treaty.txt +++ b/forge-gui/res/cardsfolder/t/the_weatherseed_treaty.txt @@ -3,7 +3,7 @@ ManaCost:2 G Types:Enchantment Saga K:Read ahead K:Chapter:3:DBChangeZone,DBToken,DBDomain -SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card and put that card onto the battlefield tapped. Then shuffle. +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card and put that card onto the battlefield tapped. Then shuffle. SVar:DBToken:DB$ Token | TokenScript$ g_1_1_saproling | SpellDescription$ Create a 1/1 green Saproling creature token. SVar:DBDomain:DB$ Pump | ValidTgts$ Creature.YouCtrl | NumAtt$ +X | NumDef$ +X | KW$ Trample | TgtPrompt$ Select target creature you control | SpellDescription$ Domain — Target creature you control gets +X/+X and gains trample until end of turn, where X is the number of basic land types among lands you control. SVar:X:Count$Domain diff --git a/forge-gui/res/cardsfolder/t/they_went_this_way.txt b/forge-gui/res/cardsfolder/t/they_went_this_way.txt index 04937564b6a..0a881c5d54e 100644 --- a/forge-gui/res/cardsfolder/t/they_went_this_way.txt +++ b/forge-gui/res/cardsfolder/t/they_went_this_way.txt @@ -1,7 +1,7 @@ Name:They Went This Way ManaCost:2 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | Tapped$ True | SubAbility$ DBInvestigate | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | SubAbility$ DBInvestigate | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. SVar:DBInvestigate:DB$ Investigate | SpellDescription$ Investigate. (Create a Clue token. It's an artifact with "{2}, Sacrifice this artifact: Draw a card.") DeckHas:Ability$Investigate|Token|Sacrifice & Type$Artifact|Clue Oracle:Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. Investigate. (Create a Clue token. It's an artifact with "{2}, Sacrifice this artifact: Draw a card.") diff --git a/forge-gui/res/cardsfolder/t/thirsting_roots.txt b/forge-gui/res/cardsfolder/t/thirsting_roots.txt index fa43cdfcec3..32e27b9afe4 100644 --- a/forge-gui/res/cardsfolder/t/thirsting_roots.txt +++ b/forge-gui/res/cardsfolder/t/thirsting_roots.txt @@ -2,7 +2,7 @@ Name:Thirsting Roots ManaCost:G Types:Sorcery A:SP$ Charm | Choices$ DBSearch,DBProliferate | CharmNum$ 1 -SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. +SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. SVar:DBProliferate:DB$ Proliferate | SpellDescription$ Proliferate. (Choose any number of permanents and/or players, then give each another counter of each kind already there.) DeckHas:Ability$Proliferate Oracle:Choose one —\n• Search your library for a basic land card, reveal it, put it into your hand, then shuffle.\n• Proliferate. (Choose any number of permanents and/or players, then give each another counter of each kind already there.) diff --git a/forge-gui/res/cardsfolder/t/threats_around_every_corner.txt b/forge-gui/res/cardsfolder/t/threats_around_every_corner.txt index 7225071fc54..139fa1931f6 100644 --- a/forge-gui/res/cardsfolder/t/threats_around_every_corner.txt +++ b/forge-gui/res/cardsfolder/t/threats_around_every_corner.txt @@ -4,5 +4,5 @@ Types:Enchantment T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDread | TriggerDescription$ When CARDNAME enters, manifest dread. SVar:TrigDread:DB$ ManifestDread T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Permanent.faceDown+YouCtrl | Execute$ TrigChange | TriggerZones$ Battlefield | TriggerDescription$ Whenever a face-down permanent you control enters, search your library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land Oracle:When Threats Around Every Corner enters, manifest dread.\nWhenever a face-down permanent you control enters, search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/t/thunderherd_migration.txt b/forge-gui/res/cardsfolder/t/thunderherd_migration.txt index ff46f48b8c1..6bce7b88b9d 100644 --- a/forge-gui/res/cardsfolder/t/thunderherd_migration.txt +++ b/forge-gui/res/cardsfolder/t/thunderherd_migration.txt @@ -2,5 +2,5 @@ Name:Thunderherd Migration ManaCost:1 G Types:Sorcery K:AlternateAdditionalCost:Reveal<1/Dinosaur>:1 -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ 1 | StackDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ChangeNum$ 1 | StackDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. Oracle:As an additional cost to cast this spell, reveal a Dinosaur card from your hand or pay {1}.\nSearch your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/t/time_of_need.txt b/forge-gui/res/cardsfolder/t/time_of_need.txt index b7bb4760c26..5b90a7b7381 100644 --- a/forge-gui/res/cardsfolder/t/time_of_need.txt +++ b/forge-gui/res/cardsfolder/t/time_of_need.txt @@ -1,7 +1,7 @@ Name:Time of Need ManaCost:1 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Creature.Legendary | ChangeNum$ 1 | SpellDescription$ Search your library for a legendary creature card, reveal it, put it into your hand, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Creature.Legendary | ChangeTypeDesc$ legendary creature | SpellDescription$ Search your library for a legendary creature card, reveal it, put it into your hand, then shuffle. AI:RemoveDeck:Random DeckHints:Type$Legendary Oracle:Search your library for a legendary creature card, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/t/topiary_stomper.txt b/forge-gui/res/cardsfolder/t/topiary_stomper.txt index efea016190b..427c1b6c000 100644 --- a/forge-gui/res/cardsfolder/t/topiary_stomper.txt +++ b/forge-gui/res/cardsfolder/t/topiary_stomper.txt @@ -4,7 +4,7 @@ Types:Creature Plant Dinosaur PT:4/4 K:Vigilance T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSearch | TriggerDescription$ When CARDNAME enters, search your library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | Tapped$ True +SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True S:Mode$ CantAttack,CantBlock | ValidCard$ Card.Self | IsPresent$ Land.YouCtrl | PresentCompare$ LT7 | Description$ CARDNAME can't attack or block unless you control seven or more lands. SVar:BuffedBy:Land Oracle:Vigilance\nWhen Topiary Stomper enters, search your library for a basic land card, put it onto the battlefield tapped, then shuffle.\nTopiary Stomper can't attack or block unless you control seven or more lands. diff --git a/forge-gui/res/cardsfolder/t/trail_of_mystery.txt b/forge-gui/res/cardsfolder/t/trail_of_mystery.txt index 5bfa3a806a0..8130d559d29 100644 --- a/forge-gui/res/cardsfolder/t/trail_of_mystery.txt +++ b/forge-gui/res/cardsfolder/t/trail_of_mystery.txt @@ -2,7 +2,7 @@ Name:Trail of Mystery ManaCost:1 G Types:Enchantment T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.faceDown+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ Whenever a face-down creature you control enters, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True T:Mode$ TurnFaceUp | ValidCard$ Permanent.Creature+YouCtrl | Execute$ TrigPump | TriggerZones$ Battlefield | TriggerDescription$ Whenever a permanent you control is turned face up, if it's a creature, it gets +2/+2 until end of turn. SVar:TrigPump:DB$ Pump | Defined$ TriggeredCard | NumAtt$ +2 | NumDef$ +2 | ConditionDefined$ TriggeredCard | ConditionPresent$ Creature | ConditionCompare$ GE1 AI:RemoveDeck:Random diff --git a/forge-gui/res/cardsfolder/t/tranquil_landscape.txt b/forge-gui/res/cardsfolder/t/tranquil_landscape.txt index c54d74eb18b..cad4c454115 100644 --- a/forge-gui/res/cardsfolder/t/tranquil_landscape.txt +++ b/forge-gui/res/cardsfolder/t/tranquil_landscape.txt @@ -2,6 +2,6 @@ Name:Tranquil Landscape ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. -A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Forest+Basic,Land.Plains+Basic,Land.Island+Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic Forest, Plains, or Island card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Forest.Basic,Plains.Basic,Island.Basic | ChangeTypeDesc$ basic Forest, Plains, or Island | SpellDescription$ Search your library for a basic Forest, Plains, or Island card, put it onto the battlefield tapped, then shuffle. K:Cycling:G W U Oracle:{T}: Add {C}.\n{T}, Sacrifice Tranquil Landscape: Search your library for a basic Forest, Plains, or Island card, put it onto the battlefield tapped, then shuffle.\nCycling {G}{W}{U} ({G}{W}{U}, Discard this card: Draw a card.) diff --git a/forge-gui/res/cardsfolder/t/travel_through_caradhras.txt b/forge-gui/res/cardsfolder/t/travel_through_caradhras.txt index 4756dd5e1f5..3db5f1f5d95 100644 --- a/forge-gui/res/cardsfolder/t/travel_through_caradhras.txt +++ b/forge-gui/res/cardsfolder/t/travel_through_caradhras.txt @@ -2,7 +2,7 @@ Name:Travel Through Caradhras ManaCost:5 G Types:Sorcery A:SP$ Vote | Defined$ Player | Choices$ VoteRedhornPass,VoteMinesofMoria | StoreVoteNum$ True | SubAbility$ DBExile | SpellDescription$ Council's dilemma — Starting with you, each player votes for Redhorn Pass or Mines of Moria. For each Redhorn Pass vote, search your library for a basic land card and put it onto the battlefield tapped. If you search your library this way, shuffle. For each Mines of Moria vote, return a card from your graveyard to your hand. -SVar:VoteRedhornPass:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ VoteNum | Tapped$ True | SpellDescription$ Redhorn Pass +SVar:VoteRedhornPass:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ VoteNum | Tapped$ True | SpellDescription$ Redhorn Pass SVar:VoteMinesofMoria:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ChangeType$ Card.YouOwn | Mandatory$ True | SelectPrompt$ Return a card from your graveyard to your hand for each Mines of Moria vote | Hidden$ True | ChangeNum$ VoteNum | SpellDescription$ Mines of Moria SVar:DBExile:DB$ ChangeZone | Origin$ Stack | Destination$ Exile | SpellDescription$ Exile CARDNAME. DeckHas:Ability$Graveyard diff --git a/forge-gui/res/cardsfolder/t/travelers_amulet.txt b/forge-gui/res/cardsfolder/t/travelers_amulet.txt index 6fee0e30ee6..8d32a22dd34 100644 --- a/forge-gui/res/cardsfolder/t/travelers_amulet.txt +++ b/forge-gui/res/cardsfolder/t/travelers_amulet.txt @@ -1,5 +1,5 @@ Name:Traveler's Amulet ManaCost:1 Types:Artifact -A:AB$ ChangeZone | Cost$ 1 Sac<1/CARDNAME> | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. +A:AB$ ChangeZone | Cost$ 1 Sac<1/CARDNAME> | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. Oracle:{1}, Sacrifice Traveler's Amulet: Search your library for a basic land card, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/t/traverse_the_outlands.txt b/forge-gui/res/cardsfolder/t/traverse_the_outlands.txt index cca0f270473..66a59a9940f 100644 --- a/forge-gui/res/cardsfolder/t/traverse_the_outlands.txt +++ b/forge-gui/res/cardsfolder/t/traverse_the_outlands.txt @@ -1,7 +1,7 @@ Name:Traverse the Outlands ManaCost:4 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ X | Tapped$ True | SpellDescription$ Search your library for up to X basic land cards, where X is the greatest power among creatures you control. Put those cards onto the battlefield tapped, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ X | Tapped$ True | SpellDescription$ Search your library for up to X basic land cards, where X is the greatest power among creatures you control. Put those cards onto the battlefield tapped, then shuffle. SVar:X:Count$Valid Creature.YouCtrl$GreatestPower SVar:NeedsToPlay:Creature.YouCtrl+powerGE2 Oracle:Search your library for up to X basic land cards, where X is the greatest power among creatures you control. Put those cards onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/t/traverse_the_ulvenwald.txt b/forge-gui/res/cardsfolder/t/traverse_the_ulvenwald.txt index fdaa29bf962..87ea20b7db4 100644 --- a/forge-gui/res/cardsfolder/t/traverse_the_ulvenwald.txt +++ b/forge-gui/res/cardsfolder/t/traverse_the_ulvenwald.txt @@ -1,7 +1,7 @@ Name:Traverse the Ulvenwald ManaCost:G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ0 | SubAbility$ DBChangeZone | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. Delirium — If there are four or more card types among cards in your graveyard, instead search your library for a creature or land card, reveal it, put it into your hand, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ0 | SubAbility$ DBChangeZone | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. Delirium — If there are four or more card types among cards in your graveyard, instead search your library for a creature or land card, reveal it, put it into your hand, then shuffle. SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land,Creature | ChangeNum$ 1 | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ1 SVar:X:Count$Delirium.1.0 DeckHints:Ability$Graveyard|Discard diff --git a/forge-gui/res/cardsfolder/t/twisted_landscape.txt b/forge-gui/res/cardsfolder/t/twisted_landscape.txt index 7a0e2ec5a06..ab99137d4b3 100644 --- a/forge-gui/res/cardsfolder/t/twisted_landscape.txt +++ b/forge-gui/res/cardsfolder/t/twisted_landscape.txt @@ -2,6 +2,6 @@ Name:Twisted Landscape ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. -A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Swamp+Basic,Land.Mountain+Basic,Land.Forest+Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic Swamp, Mountain, or Forest card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Swamp.Basic,Mountain.Basic,Forest.Basic | ChangeTypeDesc$ basic Swamp, Mountain, or Forest | SpellDescription$ Search your library for a basic Swamp, Mountain, or Forest card, put it onto the battlefield tapped, then shuffle. K:Cycling:B R G Oracle:{T}: Add {C}.\n{T}, Sacrifice Twisted Landscape: Search your library for a basic Swamp, Mountain, or Forest card, put it onto the battlefield tapped, then shuffle.\nCycling {B}{R}{G} ({B}{R}{G}, Discard this card: Draw a card.) diff --git a/forge-gui/res/cardsfolder/u/undercity.txt b/forge-gui/res/cardsfolder/u/undercity.txt index 2127bb7c615..686173ae02b 100644 --- a/forge-gui/res/cardsfolder/u/undercity.txt +++ b/forge-gui/res/cardsfolder/u/undercity.txt @@ -3,7 +3,7 @@ ManaCost:no cost Types:Dungeon Undercity K:You can't enter this dungeon unless you "venture into Undercity". K:Dungeon:Entrance,Forge,Well,Trap,Arena,Stash,Archives,Catacombs,Throne -SVar:Entrance:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | RoomName$ Secret Entrance | NextRoom$ Forge,Well | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. +SVar:Entrance:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | RoomName$ Secret Entrance | NextRoom$ Forge,Well | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. SVar:Forge:DB$ PutCounter | ValidTgts$ Creature | CounterType$ P1P1 | CounterNum$ 2 | RoomName$ Forge | NextRoom$ Trap,Arena | SpellDescription$ Put two +1/+1 counters on target creature. SVar:Well:DB$ Scry | ScryNum$ 2 | RoomName$ Lost Well | NextRoom$ Arena,Stash | SpellDescription$ Scry 2. SVar:Trap:DB$ LoseLife | ValidTgts$ Player | LifeAmount$ 5 | RoomName$ Trap! | NextRoom$ Archives | SpellDescription$ Target player loses 5 life. diff --git a/forge-gui/res/cardsfolder/u/unmarked_grave.txt b/forge-gui/res/cardsfolder/u/unmarked_grave.txt index dab2d334e6b..2c2f0ce8908 100644 --- a/forge-gui/res/cardsfolder/u/unmarked_grave.txt +++ b/forge-gui/res/cardsfolder/u/unmarked_grave.txt @@ -1,7 +1,7 @@ Name:Unmarked Grave ManaCost:1 B Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Graveyard | ChangeType$ Card.nonLegendary | ChangeNum$ 1 | SpellDescription$ Search your library for a nonlegendary card, put that card into your graveyard, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Graveyard | ChangeType$ Card.!Legendary | ChangeTypeDesc$ nonlegendary | SpellDescription$ Search your library for a nonlegendary card, put that card into your graveyard, then shuffle. AI:RemoveDeck:Random DeckHas:Ability$Graveyard Oracle:Search your library for a nonlegendary card, put that card into your graveyard, then shuffle. diff --git a/forge-gui/res/cardsfolder/u/untamed_wilds.txt b/forge-gui/res/cardsfolder/u/untamed_wilds.txt index 81d2b9c56f4..a0d142adc7c 100644 --- a/forge-gui/res/cardsfolder/u/untamed_wilds.txt +++ b/forge-gui/res/cardsfolder/u/untamed_wilds.txt @@ -1,5 +1,5 @@ Name:Untamed Wilds ManaCost:2 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield, then shuffle. Oracle:Search your library for a basic land card, put that card onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/v/vastwood_surge.txt b/forge-gui/res/cardsfolder/v/vastwood_surge.txt index 3386505c769..4bcb308f651 100644 --- a/forge-gui/res/cardsfolder/v/vastwood_surge.txt +++ b/forge-gui/res/cardsfolder/v/vastwood_surge.txt @@ -2,7 +2,7 @@ Name:Vastwood Surge ManaCost:3 G Types:Sorcery K:Kicker:4 -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 2 | Tapped$ True | SubAbility$ DBPutCounterAll | StackDescription$ SpellDescription | SpellDescription$ Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. If this spell was kicked, put two +1/+1 counters on each creature you control. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 | Tapped$ True | SubAbility$ DBPutCounterAll | StackDescription$ SpellDescription | SpellDescription$ Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. If this spell was kicked, put two +1/+1 counters on each creature you control. SVar:DBPutCounterAll:DB$ PutCounterAll | ValidCards$ Creature.YouCtrl | CounterType$ P1P1 | CounterNum$ 2 | Condition$ Kicked | StackDescription$ None DeckHas:Ability$Counters Oracle:Kicker {4} (You may pay an additional {4} as you cast this spell.)\nSearch your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. If this spell was kicked, put two +1/+1 counters on each creature you control. diff --git a/forge-gui/res/cardsfolder/v/verdant_catacombs.txt b/forge-gui/res/cardsfolder/v/verdant_catacombs.txt index 89420bcd044..7b82954e7a8 100644 --- a/forge-gui/res/cardsfolder/v/verdant_catacombs.txt +++ b/forge-gui/res/cardsfolder/v/verdant_catacombs.txt @@ -1,5 +1,5 @@ Name:Verdant Catacombs ManaCost:no cost Types:Land -A:AB$ ChangeZone | Cost$ T PayLife<1> Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Swamp,Forest | ChangeNum$ 1 | SpellDescription$ Search your library for a Swamp or Forest card, put it onto the battlefield, then shuffle. +A:AB$ ChangeZone | Cost$ T PayLife<1> Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Swamp,Forest | SpellDescription$ Search your library for a Swamp or Forest card, put it onto the battlefield, then shuffle. Oracle:{T}, Pay 1 life, Sacrifice Verdant Catacombs: Search your library for a Swamp or Forest card, put it onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/v/verdant_confluence.txt b/forge-gui/res/cardsfolder/v/verdant_confluence.txt index 1571878ba23..edc8d290804 100644 --- a/forge-gui/res/cardsfolder/v/verdant_confluence.txt +++ b/forge-gui/res/cardsfolder/v/verdant_confluence.txt @@ -4,5 +4,5 @@ Types:Sorcery A:SP$ Charm | Choices$ DBPutCounter,DBChangeZone1,DBChangeZone2 | CharmNum$ 3 | CanRepeatModes$ True SVar:DBPutCounter:DB$ PutCounter | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ P1P1 | CounterNum$ 2 | SpellDescription$ Put two +1/+1 counters on target creature. SVar:DBChangeZone1:DB$ ChangeZone | TgtPrompt$ Choose target permanent card in your graveyard | ValidTgts$ Permanent.YouOwn | Origin$ Graveyard | Destination$ Hand | SpellDescription$ Return target permanent card from your graveyard to your hand. -SVar:DBChangeZone2:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. +SVar:DBChangeZone2:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. Oracle:Choose three. You may choose the same mode more than once.\n• Put two +1/+1 counters on target creature.\n• Return target permanent card from your graveyard to your hand.\n• Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/v/verdant_crescendo.txt b/forge-gui/res/cardsfolder/v/verdant_crescendo.txt index f4de7e8a0b4..1db3073a687 100644 --- a/forge-gui/res/cardsfolder/v/verdant_crescendo.txt +++ b/forge-gui/res/cardsfolder/v/verdant_crescendo.txt @@ -1,7 +1,7 @@ Name:Verdant Crescendo ManaCost:3 G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | Shuffle$ False | SubAbility$ DBSearch | SpellDescription$ Search your library for a basic land card and put it onto the battlefield tapped. Search your library and graveyard for a card named Nissa, Nature's Artisan, reveal it, put it into your hand, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Shuffle$ False | SubAbility$ DBSearch | SpellDescription$ Search your library for a basic land card and put it onto the battlefield tapped. Search your library and graveyard for a card named Nissa, Nature's Artisan, reveal it, put it into your hand, then shuffle. SVar:DBSearch:DB$ ChangeZone | Origin$ Library,Graveyard | Destination$ Hand | ChangeType$ Card.namedNissa; Nature's Artisan | ChangeNum$ 1 DeckHints:Name$Nissa, Nature's Artisan Oracle:Search your library for a basic land card and put it onto the battlefield tapped. Search your library and graveyard for a card named Nissa, Nature's Artisan, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/v/verdant_mastery.txt b/forge-gui/res/cardsfolder/v/verdant_mastery.txt index 66bbc7cb3a6..230ea585e83 100644 --- a/forge-gui/res/cardsfolder/v/verdant_mastery.txt +++ b/forge-gui/res/cardsfolder/v/verdant_mastery.txt @@ -2,7 +2,7 @@ Name:Verdant Mastery ManaCost:5 G Types:Sorcery S:Mode$ AlternativeCost | ValidSA$ Spell.Self | EffectZone$ All | Cost$ 3 G | Description$ You may pay {3}{G} rather than pay this spell's mana cost. | StackDescription$ Search your library for up to four basic land cards and reveal them. Put one of them onto the battlefield tapped under an opponent's control if the {3}{G} cost was paid. Put two of them onto the battlefield tapped under your control and the rest into your hand. Then shuffle. -A:SP$ ChangeZone | Origin$ Library | Hidden$ True | ChangeNum$ 4 | ChangeType$ Land.Basic | Destination$ Library | RememberChanged$ True | Reveal$ True | Shuffle$ False | SubAbility$ DBBranch | StackDescription$ Search your library for up to four basic land cards and reveal them. Put two of them onto the battlefield tapped under your control and the rest into your hand. Then shuffle. | SpellDescription$ Search your library for up to four basic land cards and reveal them. Put one of them onto the battlefield tapped under an opponent's control if the {3}{G} cost was paid. Put two of them onto the battlefield tapped under your control and the rest into your hand. Then shuffle. +A:SP$ ChangeZone | Origin$ Library | Hidden$ True | ChangeNum$ 4 | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Destination$ Library | RememberChanged$ True | Reveal$ True | Shuffle$ False | SubAbility$ DBBranch | StackDescription$ Search your library for up to four basic land cards and reveal them. Put two of them onto the battlefield tapped under your control and the rest into your hand. Then shuffle. | SpellDescription$ Search your library for up to four basic land cards and reveal them. Put one of them onto the battlefield tapped under an opponent's control if the {3}{G} cost was paid. Put two of them onto the battlefield tapped under your control and the rest into your hand. Then shuffle. SVar:DBBranch:DB$ Branch | BranchConditionSVar$ AltCostPaid | BranchConditionSVarCompare$ GE1 | TrueSubAbility$ OppShare | FalseSubAbility$ DBChangeZone2 SVar:OppShare:DB$ ChoosePlayer | Defined$ You | Choices$ Player.Opponent | ChoiceTitle$ Choose an opponent | SubAbility$ DBChangeZone SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Card.IsRemembered | ChangeNum$ 1 | Mandatory$ True | SelectPrompt$ Select a land to put onto the battlefield tapped under an opponent's control | GainControl$ ChosenPlayer | ForgetChanged$ True | NoShuffle$ True | SubAbility$ DBChangeZone2 diff --git a/forge-gui/res/cardsfolder/v/veteran_explorer.txt b/forge-gui/res/cardsfolder/v/veteran_explorer.txt index 76fee79cbd2..b72b63d14e6 100644 --- a/forge-gui/res/cardsfolder/v/veteran_explorer.txt +++ b/forge-gui/res/cardsfolder/v/veteran_explorer.txt @@ -3,5 +3,5 @@ ManaCost:G Types:Creature Human Soldier Scout PT:1/1 T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME dies, each player may search their library for up to two basic land cards, put them onto the battlefield, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | DefinedPlayer$ Player | ChangeNum$ 2 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | DefinedPlayer$ Player | ChangeNum$ 2 | ShuffleNonMandatory$ True Oracle:When Veteran Explorer dies, each player may search their library for up to two basic land cards, put them onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/v/vibrant_cityscape.txt b/forge-gui/res/cardsfolder/v/vibrant_cityscape.txt index c0fcf81fb41..118b71918cc 100644 --- a/forge-gui/res/cardsfolder/v/vibrant_cityscape.txt +++ b/forge-gui/res/cardsfolder/v/vibrant_cityscape.txt @@ -1,5 +1,5 @@ Name:Vibrant Cityscape ManaCost:no cost Types:Land -A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. Oracle:{T}, Sacrifice this land: Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/v/viewpoint_synchronization.txt b/forge-gui/res/cardsfolder/v/viewpoint_synchronization.txt index fe202451d2b..c6a663a3ff2 100644 --- a/forge-gui/res/cardsfolder/v/viewpoint_synchronization.txt +++ b/forge-gui/res/cardsfolder/v/viewpoint_synchronization.txt @@ -2,7 +2,7 @@ Name:Viewpoint Synchronization ManaCost:4 G Types:Sorcery K:Freerunning:2 G -A:SP$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Land.Basic | ChangeNum$ 3 | RememberChanged$ True | Reveal$ True | Shuffle$ False | StackDescription$ SpellDescription | SubAbility$ DBChangeZone1 | SpellDescription$ Search your library for up to three basic land cards and reveal them. Put two of them onto the battlefield tapped and the other into your hand, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 3 | RememberChanged$ True | Reveal$ True | Shuffle$ False | StackDescription$ SpellDescription | SubAbility$ DBChangeZone1 | SpellDescription$ Search your library for up to three basic land cards and reveal them. Put two of them onto the battlefield tapped and the other into your hand, then shuffle. SVar:DBChangeZone1:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.IsRemembered | ChangeNum$ 2 | Mandatory$ True | NoLooking$ True | SelectPrompt$ Select a card to put onto the battlefield | Tapped$ True | Shuffle$ False | SubAbility$ DBChangeZone2 | StackDescription$ None SVar:DBChangeZone2:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.IsRemembered | Mandatory$ True | NoLooking$ True | SelectPrompt$ Select a card to put into your hand | StackDescription$ None | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/v/viridian_emissary.txt b/forge-gui/res/cardsfolder/v/viridian_emissary.txt index e73166fe97b..efc60a40b3d 100644 --- a/forge-gui/res/cardsfolder/v/viridian_emissary.txt +++ b/forge-gui/res/cardsfolder/v/viridian_emissary.txt @@ -3,5 +3,5 @@ ManaCost:1 G Types:Creature Phyrexian Elf Scout PT:2/1 T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True Oracle:When Viridian Emissary dies, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/v/volatile_fault.txt b/forge-gui/res/cardsfolder/v/volatile_fault.txt index 2f335b71539..f6b76ac11a1 100644 --- a/forge-gui/res/cardsfolder/v/volatile_fault.txt +++ b/forge-gui/res/cardsfolder/v/volatile_fault.txt @@ -3,7 +3,7 @@ ManaCost:no cost Types:Land Cave A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. A:AB$ Destroy | Cost$ 1 T Sac<1/CARDNAME> | ValidTgts$ Land.nonBasic+OppCtrl | TgtPrompt$ Select target nonbasic land an opponent controls | SubAbility$ DBSearch | AILogic$ GhostQuarter | SpellDescription$ Destroy target nonbasic land an opponent controls. That player may search their library for a basic land card, put it onto the battlefield, then shuffle. You create a Treasure token. -SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | DefinedPlayer$ TargetedController | ChangeType$ Land.Basic | ChangeNum$ 1 | SubAbility$ DBTreasure | StackDescription$ That land's controller may search their library for a basic land card, put it onto the battlefield, then shuffle. You create a Treasure token. +SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | DefinedPlayer$ TargetedController | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SubAbility$ DBTreasure | StackDescription$ That land's controller may search their library for a basic land card, put it onto the battlefield, then shuffle. You create a Treasure token. SVar:DBTreasure:DB$ Token | TokenScript$ c_a_treasure_sac DeckHas:Ability$Sacrifice|Token & Type$Treasure|Artifact Oracle:{T}: Add {C}.\n{1}, {T}, Sacrifice Volatile Fault: Destroy target nonbasic land an opponent controls. That player may search their library for a basic land card, put it onto the battlefield, then shuffle. You create a Treasure token. diff --git a/forge-gui/res/cardsfolder/w/wanderers_twig.txt b/forge-gui/res/cardsfolder/w/wanderers_twig.txt index fd2b863e2d3..f3b910ce4ce 100644 --- a/forge-gui/res/cardsfolder/w/wanderers_twig.txt +++ b/forge-gui/res/cardsfolder/w/wanderers_twig.txt @@ -1,5 +1,5 @@ Name:Wanderer's Twig ManaCost:1 Types:Artifact -A:AB$ ChangeZone | Cost$ 1 Sac<1/CARDNAME> | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, reveal that card, and put it into your hand. Then shuffle. +A:AB$ ChangeZone | Cost$ 1 Sac<1/CARDNAME> | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, reveal that card, and put it into your hand. Then shuffle. Oracle:{1}, Sacrifice Wanderer's Twig: Search your library for a basic land card, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/w/warped_landscape.txt b/forge-gui/res/cardsfolder/w/warped_landscape.txt index 790a70854f1..ef0f4fb95b1 100644 --- a/forge-gui/res/cardsfolder/w/warped_landscape.txt +++ b/forge-gui/res/cardsfolder/w/warped_landscape.txt @@ -2,5 +2,5 @@ Name:Warped Landscape ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. -A:AB$ ChangeZone | Cost$ 2 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ 2 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. Oracle:{T}: Add {C}.\n{2}, {T}, Sacrifice Warped Landscape: Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/w/wave_of_vitriol.txt b/forge-gui/res/cardsfolder/w/wave_of_vitriol.txt index 5556d6f296f..f4864796cfd 100644 --- a/forge-gui/res/cardsfolder/w/wave_of_vitriol.txt +++ b/forge-gui/res/cardsfolder/w/wave_of_vitriol.txt @@ -3,7 +3,7 @@ ManaCost:5 G G Types:Sorcery A:SP$ SacrificeAll | ValidCards$ Artifact,Enchantment,Land.nonBasic | RememberSacrificed$ True | SubAbility$ DBRepeat | SpellDescription$ Each player sacrifices all artifacts, enchantments, and nonbasic lands they control. For each land sacrificed this way, its controller may search their library for a basic land card and put it onto the battlefield tapped. Then each player who searched their library this way shuffles. SVar:DBRepeat:DB$ RepeatEach | DefinedCards$ DirectRemembered.Land | UseImprinted$ True | RepeatSubAbility$ DBSearch | ClearRemembered$ True | SubAbility$ DBShuffle -SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | Tapped$ True | RememberSearched$ True | DefinedPlayer$ ImprintedController | Chooser$ ImprintedController | NoShuffle$ True | Optional$ True +SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | RememberSearched$ True | DefinedPlayer$ ImprintedController | Chooser$ ImprintedController | NoShuffle$ True | Optional$ True SVar:DBShuffle:DB$ Shuffle | Defined$ Player.IsRemembered | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True AI:RemoveDeck:Random diff --git a/forge-gui/res/cardsfolder/w/wayfarers_bauble.txt b/forge-gui/res/cardsfolder/w/wayfarers_bauble.txt index 333b41df7c6..7d4e5d3673a 100644 --- a/forge-gui/res/cardsfolder/w/wayfarers_bauble.txt +++ b/forge-gui/res/cardsfolder/w/wayfarers_bauble.txt @@ -1,5 +1,5 @@ Name:Wayfarer's Bauble ManaCost:1 Types:Artifact -A:AB$ ChangeZone | Cost$ 2 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ 2 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. Oracle:{2}, {T}, Sacrifice Wayfarer's Bauble: Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/w/weird_harvest.txt b/forge-gui/res/cardsfolder/w/weird_harvest.txt index fb8db36e313..b5966efd3e5 100644 --- a/forge-gui/res/cardsfolder/w/weird_harvest.txt +++ b/forge-gui/res/cardsfolder/w/weird_harvest.txt @@ -1,7 +1,7 @@ Name:Weird Harvest ManaCost:X G G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | DefinedPlayer$ Player | ChangeType$ Card.Creature | Reveal$ True | Optional$ True | ShuffleNonMandatory$ True | ChangeNum$ X | SpellDescription$ Each player may search their library for up to X creature cards, reveal those cards, put them into their hand, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | DefinedPlayer$ Player | ChangeType$ Creature | Reveal$ True | Optional$ True | ShuffleNonMandatory$ True | ChangeNum$ X | SpellDescription$ Each player may search their library for up to X creature cards, reveal those cards, put them into their hand, then shuffle. SVar:X:Count$xPaid AI:RemoveDeck:All Oracle:Each player may search their library for up to X creature cards, reveal those cards, put them into their hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/w/white_orchid_phantom.txt b/forge-gui/res/cardsfolder/w/white_orchid_phantom.txt index 1e2d4e58252..8940a099e7e 100644 --- a/forge-gui/res/cardsfolder/w/white_orchid_phantom.txt +++ b/forge-gui/res/cardsfolder/w/white_orchid_phantom.txt @@ -6,5 +6,5 @@ K:Flying K:First Strike T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDestroy | TriggerDescription$ When CARDNAME enters, destroy up to one target nonbasic land. Its controller may search their library for a basic land card, put it onto the battlefield tapped, then shuffle. SVar:TrigDestroy:DB$ Destroy | ValidTgts$ Land.nonBasic | TgtPrompt$ Select up to one target nonbasic land | TargetMin$ 0 | TargetMax$ 1 | SubAbility$ DBSearch | AILogic$ GhostQuarter -SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | DefinedPlayer$ TargetedController | ChangeType$ Land.Basic | ChangeNum$ 1 | Tapped$ True +SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | DefinedPlayer$ TargetedController | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True Oracle:Flying, first strike\nWhen White Orchid Phantom enters, destroy up to one target nonbasic land. Its controller may search their library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/w/wild_crocodile.txt b/forge-gui/res/cardsfolder/w/wild_crocodile.txt index a31753e29e7..49d36be5464 100644 --- a/forge-gui/res/cardsfolder/w/wild_crocodile.txt +++ b/forge-gui/res/cardsfolder/w/wild_crocodile.txt @@ -3,5 +3,5 @@ ManaCost:1 G Types:Host Creature Crocodile PT:1/1 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | Host$ True | TriggerDescription$ When this creature enters, search your library for a basic land card, reveal it, put it into your hand, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land Oracle:When this creature enters, search your library for a basic land card, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/w/wild_endeavor.txt b/forge-gui/res/cardsfolder/w/wild_endeavor.txt index c777509bae9..65cd84be586 100644 --- a/forge-gui/res/cardsfolder/w/wild_endeavor.txt +++ b/forge-gui/res/cardsfolder/w/wild_endeavor.txt @@ -3,6 +3,6 @@ ManaCost:4 G G Types:Sorcery A:SP$ RollDice | Amount$ 2 | Sides$ 4 | ChosenSVar$ X | OtherSVar$ Y | SubAbility$ DBToken | StackDescription$ SpellDescription | SpellDescription$ Roll two d4 and choose one result. Create a number of 3/3 green Beast creature tokens equal to that result. Then search your library for a number of basic land cards equal to the other result, put them onto the battlefield tapped, then shuffle. SVar:DBToken:DB$ Token | TokenAmount$ X | TokenScript$ g_3_3_beast | SubAbility$ DBChangeZone -SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | ChangeNum$ Y | ChangeType$ Land.Basic | Destination$ Battlefield | Tapped$ True | StackDescription$ None +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | ChangeNum$ Y | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Destination$ Battlefield | Tapped$ True | StackDescription$ None DeckHas:Ability$Token Oracle:Roll two d4 and choose one result. Create a number of 3/3 green Beast creature tokens equal to that result. Then search your library for a number of basic land cards equal to the other result, put them onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/w/wild_field_scarecrow.txt b/forge-gui/res/cardsfolder/w/wild_field_scarecrow.txt index 65d534edb1c..2166d0c21fc 100644 --- a/forge-gui/res/cardsfolder/w/wild_field_scarecrow.txt +++ b/forge-gui/res/cardsfolder/w/wild_field_scarecrow.txt @@ -3,5 +3,5 @@ ManaCost:3 Types:Artifact Creature Scarecrow PT:1/4 K:Defender -A:AB$ ChangeZone | Cost$ 2 Sac<1/CARDNAME> | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 2 | SpellDescription$ Search your library for up to two basic land cards, reveal them, put them into your hand, then shuffle. +A:AB$ ChangeZone | Cost$ 2 Sac<1/CARDNAME> | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 | SpellDescription$ Search your library for up to two basic land cards, reveal them, put them into your hand, then shuffle. Oracle:Defender\n{2}, Sacrifice Wild-Field Scarecrow: Search your library for up to two basic land cards, reveal them, put them into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/w/wild_wanderer.txt b/forge-gui/res/cardsfolder/w/wild_wanderer.txt index d2fdfbfc414..0ea0c69ec85 100644 --- a/forge-gui/res/cardsfolder/w/wild_wanderer.txt +++ b/forge-gui/res/cardsfolder/w/wild_wanderer.txt @@ -3,5 +3,5 @@ ManaCost:3 G Types:Creature Elf Druid PT:3/2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | OptionalDecider$ You | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land Oracle:When Wild Wanderer enters, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/w/winds_of_abandon.txt b/forge-gui/res/cardsfolder/w/winds_of_abandon.txt index 202b5843423..5ce0a168546 100644 --- a/forge-gui/res/cardsfolder/w/winds_of_abandon.txt +++ b/forge-gui/res/cardsfolder/w/winds_of_abandon.txt @@ -4,7 +4,7 @@ Types:Sorcery A:SP$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Select target creature you don't control | SubAbility$ DBGetLandsAll | RememberLKI$ True | SpellDescription$ Exile target creature you don't control. For each creature exiled this way, its controller searches their library for a basic land card. Those players put those cards onto the battlefield tapped, then shuffle. SVar:DBGetLandsAll:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBGetLandsOne | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -SVar:DBGetLandsOne:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ X | DefinedPlayer$ Player.IsRemembered | ConditionCheckSVar$ X | ConditionSVarCompare$ GE1 +SVar:DBGetLandsOne:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ X | DefinedPlayer$ Player.IsRemembered | ConditionCheckSVar$ X | ConditionSVarCompare$ GE1 SVar:X:RememberedLKI$FilterControlledByRemembered_Number$1 K:Overload:4 W W Oracle:Exile target creature you don't control. For each creature exiled this way, its controller searches their library for a basic land card. Those players put those cards onto the battlefield tapped, then shuffle.\nOverload {4}{W}{W} (You may cast this spell for its overload cost. If you do, change its text by replacing all instances of "target" with "each.") diff --git a/forge-gui/res/cardsfolder/w/windswept_heath.txt b/forge-gui/res/cardsfolder/w/windswept_heath.txt index 3f654c895c6..b9b85aabc94 100644 --- a/forge-gui/res/cardsfolder/w/windswept_heath.txt +++ b/forge-gui/res/cardsfolder/w/windswept_heath.txt @@ -1,5 +1,5 @@ Name:Windswept Heath ManaCost:no cost Types:Land -A:AB$ ChangeZone | Cost$ T PayLife<1> Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Forest,Plains | ChangeNum$ 1 | SpellDescription$ Search your library for a Forest or Plains card, put it onto the battlefield, then shuffle. +A:AB$ ChangeZone | Cost$ T PayLife<1> Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Forest,Plains | SpellDescription$ Search your library for a Forest or Plains card, put it onto the battlefield, then shuffle. Oracle:{T}, Pay 1 life, Sacrifice Windswept Heath: Search your library for a Forest or Plains card, put it onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/w/wooded_foothills.txt b/forge-gui/res/cardsfolder/w/wooded_foothills.txt index 48ba0218285..fb49cea9c94 100644 --- a/forge-gui/res/cardsfolder/w/wooded_foothills.txt +++ b/forge-gui/res/cardsfolder/w/wooded_foothills.txt @@ -1,5 +1,5 @@ Name:Wooded Foothills ManaCost:no cost Types:Land -A:AB$ ChangeZone | Cost$ T PayLife<1> Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Mountain,Forest | ChangeNum$ 1 | SpellDescription$ Search your library for a Mountain or Forest card, put it onto the battlefield, then shuffle. +A:AB$ ChangeZone | Cost$ T PayLife<1> Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Mountain,Forest | SpellDescription$ Search your library for a Mountain or Forest card, put it onto the battlefield, then shuffle. Oracle:{T}, Pay 1 life, Sacrifice Wooded Foothills: Search your library for a Mountain or Forest card, put it onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/w/woodland_investigation.txt b/forge-gui/res/cardsfolder/w/woodland_investigation.txt index 4c3098a4a69..11139a5c75c 100644 --- a/forge-gui/res/cardsfolder/w/woodland_investigation.txt +++ b/forge-gui/res/cardsfolder/w/woodland_investigation.txt @@ -1,7 +1,7 @@ Name:Woodland Investigation ManaCost:G Types:Sorcery -A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | RememberChanged$ True | SubAbility$ DBAnimate | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | RememberChanged$ True | SubAbility$ DBAnimate | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. SVar:DBAnimate:DB$ Animate | Types$ Clue,Artifact | Duration$ Perpetual | Abilities$ ClueSac | Defined$ Remembered | SubAbility$ DBCleanup | SpellDescription$ It perpetually becomes a Clue artifact in addition to its other types and gains "{2}, Sacrifice this permanent: Draw a card." SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:ClueSac:AB$ Draw | Cost$ 2 Sac<1/CARDNAME/this permanent> | NumCards$ 1 | SpellDescription$ Draw a card. diff --git a/forge-gui/res/cardsfolder/w/world_map.txt b/forge-gui/res/cardsfolder/w/world_map.txt index cc25adc9bb3..a3cb6c9d1ac 100644 --- a/forge-gui/res/cardsfolder/w/world_map.txt +++ b/forge-gui/res/cardsfolder/w/world_map.txt @@ -1,6 +1,6 @@ Name:World Map ManaCost:1 Types:Artifact -A:AB$ ChangeZone | Cost$ 1 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. +A:AB$ ChangeZone | Cost$ 1 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. A:AB$ ChangeZone | Cost$ 3 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Hand | ChangeType$ Land | ChangeNum$ 1 | SpellDescription$ Search your library for a land card, reveal it, put it into your hand, then shuffle. Oracle:{1}, {T}, Sacrifice this artifact: Search your library for a basic land card, reveal it, put it into your hand, then shuffle.\n{3}, {T}, Sacrifice this artifact: Search your library for a land card, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/y/yavimaya_elder.txt b/forge-gui/res/cardsfolder/y/yavimaya_elder.txt index cf09af3c89e..077f3e093ce 100644 --- a/forge-gui/res/cardsfolder/y/yavimaya_elder.txt +++ b/forge-gui/res/cardsfolder/y/yavimaya_elder.txt @@ -3,6 +3,6 @@ ManaCost:1 G G Types:Creature Human Druid PT:2/1 T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigFetch | OptionalDecider$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, you may search your library for up to two basic land cards, reveal them, put them into your hand, then shuffle. -SVar:TrigFetch:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 2 | ShuffleNonMandatory$ True +SVar:TrigFetch:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 | ShuffleNonMandatory$ True A:AB$ Draw | Cost$ 2 Sac<1/CARDNAME> | NumCards$ 1 | SpellDescription$ Draw a card. Oracle:When Yavimaya Elder dies, you may search your library for up to two basic land cards, reveal them, put them into your hand, then shuffle.\n{2}, Sacrifice Yavimaya Elder: Draw a card. diff --git a/forge-gui/res/cardsfolder/y/yavimaya_granger.txt b/forge-gui/res/cardsfolder/y/yavimaya_granger.txt index ae41326e259..00126f4288c 100644 --- a/forge-gui/res/cardsfolder/y/yavimaya_granger.txt +++ b/forge-gui/res/cardsfolder/y/yavimaya_granger.txt @@ -4,5 +4,5 @@ Types:Creature Elf PT:2/2 K:Echo:2 G T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, you may search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ShuffleNonMandatory$ True Oracle:Echo {2}{G} (At the beginning of your upkeep, if this came under your control since the beginning of your last upkeep, sacrifice it unless you pay its echo cost.)\nWhen Yavimaya Granger enters, you may search your library for a basic land card, put that card onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/y/you_happen_on_a_glade.txt b/forge-gui/res/cardsfolder/y/you_happen_on_a_glade.txt index 5cce37a5ed4..8d7f5974f85 100644 --- a/forge-gui/res/cardsfolder/y/you_happen_on_a_glade.txt +++ b/forge-gui/res/cardsfolder/y/you_happen_on_a_glade.txt @@ -2,6 +2,6 @@ Name:You Happen On a Glade ManaCost:2 G Types:Instant A:SP$ Charm | Choices$ JourneyOn,MakeCamp -SVar:JourneyOn:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 2 | Reveal$ True | StackDescription$ SpellDescription | SpellDescription$ Journey On — Search your library for up to two basic land cards, reveal them, put them into your hand, then shuffle. +SVar:JourneyOn:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | ChangeNum$ 2 | Reveal$ True | StackDescription$ SpellDescription | SpellDescription$ Journey On — Search your library for up to two basic land cards, reveal them, put them into your hand, then shuffle. SVar:MakeCamp:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | TgtPrompt$ Choose target permanent card in your graveyard | ValidTgts$ Permanent.YouOwn | SpellDescription$ Make Camp — Return target permanent card from your graveyard to your hand. Oracle:Choose one —\n• Journey On — Search your library for up to two basic land cards, reveal them, put them into your hand, then shuffle.\n• Make Camp — Return target permanent card from your graveyard to your hand. diff --git a/forge-gui/res/tokenscripts/c_a_lander_sac_search.txt b/forge-gui/res/tokenscripts/c_a_lander_sac_search.txt index a653f6ef453..45d3f1ff151 100644 --- a/forge-gui/res/tokenscripts/c_a_lander_sac_search.txt +++ b/forge-gui/res/tokenscripts/c_a_lander_sac_search.txt @@ -1,5 +1,5 @@ Name:Lander Token ManaCost:no cost Types:Artifact Lander -A:AB$ ChangeZone | Cost$ 2 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. +A:AB$ ChangeZone | Cost$ 2 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. Oracle:{2}, {T}, Sacrifice this token: Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. From a1042e0a1dfc3b4319a4940f922d36f95562f1cc Mon Sep 17 00:00:00 2001 From: Simisays <67333662+Simisays@users.noreply.github.com> Date: Tue, 30 Sep 2025 21:24:51 +0200 Subject: [PATCH 274/355] Update jin_sakai_ghost_of_tsushima.txt (#8815) --- .../cardsfolder/upcoming/jin_sakai_ghost_of_tsushima.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/forge-gui/res/cardsfolder/upcoming/jin_sakai_ghost_of_tsushima.txt b/forge-gui/res/cardsfolder/upcoming/jin_sakai_ghost_of_tsushima.txt index 28c9904ee1b..de33dbf3392 100644 --- a/forge-gui/res/cardsfolder/upcoming/jin_sakai_ghost_of_tsushima.txt +++ b/forge-gui/res/cardsfolder/upcoming/jin_sakai_ghost_of_tsushima.txt @@ -4,9 +4,9 @@ Types:Legendary Creature Human Samurai PT:2/4 T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigDraw | TriggerDescription$ Whenever NICKNAME deals combat damage to a player, draw a card. SVar:TrigDraw:DB$ Draw | NumCards$ 1 -T:Mode$ Attacks | ValidCard$ Creature.YouCtrl | Alone$ True | TriggerZones$ Battlefield | Execute$ TrigCharm | IsPresent$ Creature.attacking+Other | NoResolvingCheck$ True | PresentCompare$ EQ0 | TriggerDescription$ Whenever a creature you control attacks a player, if no other creatures are attacking that player, ABILITY +T:Mode$ AttackersDeclaredOneTarget | ValidAttackers$ Creature.YouCtrl | AttackedTarget$ Player | TriggerZones$ Battlefield | Execute$ TrigCharm | ValidAttackersAmount$ EQ1 | TriggerDescription$ Whenever a creature you control attacks a player, if no other creatures are attacking that player, ABILITY SVar:TrigCharm:DB$ Charm | Choices$ Standoff,Ghost -SVar:Standoff:DB$ Pump | Defined$ TriggeredAttackerLKICopy | KW$ Double Strike | SpellDescription$ Standoff — It gains double strike until end of turn. -SVar:Ghost:DB$ Effect | RememberObjects$ Self | ExileOnMoved$ Battlefield | StaticAbilities$ Unblockable | SpellDescription$ Ghost — It can't be blocked this turn. +SVar:Standoff:DB$ Pump | Defined$ TriggeredAttackers | KW$ Double Strike | SpellDescription$ Standoff — It gains double strike until end of turn. +SVar:Ghost:DB$ Effect | RememberObjects$ TriggeredAttackers | ExileOnMoved$ Battlefield | StaticAbilities$ Unblockable | SpellDescription$ Ghost — It can't be blocked this turn. SVar:Unblockable:Mode$ CantBlockBy | ValidAttacker$ Card.IsRemembered | Description$ EFFECTSOURCE can't be blocked this turn. Oracle:Whenever Jin Sakai deals combat damage to a player, draw a card.\nWhenever a creature you control attacks a player, if no other creatures are attacking that player, choose one —-\n• Standoff — It gains double strike until end of turn.\n• Ghost — It can't be blocked this turn. From c0fe93ee30f280b0043b4a6921e61be804d5f575 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Wed, 1 Oct 2025 11:39:31 +0200 Subject: [PATCH 275/355] Update the_destined_thief.txt fix DBDraw SVars --- forge-gui/res/cardsfolder/upcoming/the_destined_thief.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/forge-gui/res/cardsfolder/upcoming/the_destined_thief.txt b/forge-gui/res/cardsfolder/upcoming/the_destined_thief.txt index 0aafcd628ac..6c3dfac6341 100644 --- a/forge-gui/res/cardsfolder/upcoming/the_destined_thief.txt +++ b/forge-gui/res/cardsfolder/upcoming/the_destined_thief.txt @@ -7,11 +7,11 @@ A:AB$ Effect | Cost$ U T | ValidTgts$ Creature.Other+YouCtrl | TgtPrompt$ Select SVar:Unblockable:Mode$ CantBlockBy | ValidAttacker$ Card.IsRemembered | Description$ This creature can't be blocked this turn. T:Mode$ DamageAll | CombatDamage$ True | ValidSource$ Creature.YouCtrl | ValidTarget$ Player | TriggerZones$ Battlefield | Execute$ TrigBranch | TriggerDescription$ Whenever one or more creatures you control deal combat damage to one or more players, draw a card, then discard a card. If you have a full party, instead draw three cards. SVar:TrigBranch:DB$ Branch | BranchConditionSVar$ X | BranchConditionSVarCompare$EQ4 | TrueSubAbility$ DBDraw1 | FalseSubAbility$ DBDraw2 -SVar:TrigDraw1:DB$ Draw | NumCards$ 3 -SVar:TrigDraw2:DB$ Draw | SubAbility$ DBDiscard +SVar:DBDraw1:DB$ Draw | NumCards$ 3 +SVar:DBDraw2:DB$ Draw | SubAbility$ DBDiscard SVar:DBDiscard:DB$ Discard | Defined$ You | Mode$ TgtChoose | NumCards$ 1 SVar:X:Count$Party SVar:BuffedBy:Cleric,Warrior,Wizard DeckHas:Ability$Party DeckHints:Type$Cleric|Warrior|Wizard -Oracle:The Destined Thief can't be blocked.\n{U}, {T}: Another target creature you control can't be blocked this turn.\nWhenever one or more creatures you control deal combat damage to one or more players, draw a card, then discard a card. If you have a full party, instead draw three cards. \ No newline at end of file +Oracle:The Destined Thief can't be blocked.\n{U}, {T}: Another target creature you control can't be blocked this turn.\nWhenever one or more creatures you control deal combat damage to one or more players, draw a card, then discard a card. If you have a full party, instead draw three cards. From 31f8da56877d87d63c42b8dd69439709e72921d7 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Wed, 1 Oct 2025 16:54:46 +0200 Subject: [PATCH 276/355] Some fixes (#8816) --- .../src/main/java/forge/ai/AiController.java | 44 ++++--------------- .../java/forge/ai/PlayerControllerAi.java | 6 ++- .../main/java/forge/ai/ability/CloneAi.java | 4 ++ .../java/forge/ai/ability/CountersPutAi.java | 37 +++++----------- .../main/java/forge/ai/ability/EffectAi.java | 2 +- .../main/java/forge/ai/ability/FightAi.java | 2 +- .../main/java/forge/ai/ability/PumpAi.java | 2 +- .../game/ability/effects/EffectEffect.java | 10 ++--- .../java/forge/game/card/CardFactoryUtil.java | 2 +- .../res/cardsfolder/s/samite_ministration.txt | 8 ++-- .../upcoming/atreus_impulsive_son.txt | 3 +- 11 files changed, 43 insertions(+), 77 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/AiController.java b/forge-ai/src/main/java/forge/ai/AiController.java index 00beb693357..c9d698c7582 100644 --- a/forge-ai/src/main/java/forge/ai/AiController.java +++ b/forge-ai/src/main/java/forge/ai/AiController.java @@ -887,27 +887,8 @@ public class AiController { private AiPlayDecision canPlayAndPayForFace(final SpellAbility sa) { final Card host = sa.getHostCard(); - // Check a predefined condition - if (sa.hasParam("AICheckSVar")) { - final String svarToCheck = sa.getParam("AICheckSVar"); - String comparator = "GE"; - int compareTo = 1; - - if (sa.hasParam("AISVarCompare")) { - final String fullCmp = sa.getParam("AISVarCompare"); - comparator = fullCmp.substring(0, 2); - final String strCmpTo = fullCmp.substring(2); - try { - compareTo = Integer.parseInt(strCmpTo); - } catch (final Exception ignored) { - compareTo = AbilityUtils.calculateAmount(host, host.getSVar(strCmpTo), sa); - } - } - - int left = AbilityUtils.calculateAmount(host, svarToCheck, sa); - if (!Expressions.compare(left, comparator, compareTo)) { - return AiPlayDecision.AnotherTime; - } + if (sa.hasParam("AICheckSVar") && !aiShouldRun(sa, sa, host, null)) { + return AiPlayDecision.AnotherTime; } // this is the "heaviest" check, which also sets up targets, defines X, etc. @@ -1817,14 +1798,9 @@ public class AiController { * @param sa the sa * @return true, if successful */ - public final boolean aiShouldRun(final ReplacementEffect effect, final SpellAbility sa, GameEntity affected) { - Card hostCard = effect.getHostCard(); - if (hostCard.hasAlternateState()) { - hostCard = game.getCardState(hostCard); - } - + public final boolean aiShouldRun(final CardTraitBase effect, final SpellAbility sa, final Card host, final GameEntity affected) { if (effect.hasParam("AILogic") && effect.getParam("AILogic").equalsIgnoreCase("ProtectFriendly")) { - final Player controller = hostCard.getController(); + final Player controller = host.getController(); if (affected instanceof Player) { return !((Player) affected).isOpponentOf(controller); } @@ -1833,7 +1809,6 @@ public class AiController { } } if (effect.hasParam("AICheckSVar")) { - System.out.println("aiShouldRun?" + sa); final String svarToCheck = effect.getParam("AICheckSVar"); String comparator = "GE"; int compareTo = 1; @@ -1846,9 +1821,9 @@ public class AiController { compareTo = Integer.parseInt(strCmpTo); } catch (final Exception ignored) { if (sa == null) { - compareTo = AbilityUtils.calculateAmount(hostCard, hostCard.getSVar(strCmpTo), effect); + compareTo = AbilityUtils.calculateAmount(host, host.getSVar(strCmpTo), effect); } else { - compareTo = AbilityUtils.calculateAmount(hostCard, hostCard.getSVar(strCmpTo), sa); + compareTo = AbilityUtils.calculateAmount(host, host.getSVar(strCmpTo), sa); } } } @@ -1856,13 +1831,12 @@ public class AiController { int left = 0; if (sa == null) { - left = AbilityUtils.calculateAmount(hostCard, svarToCheck, effect); + left = AbilityUtils.calculateAmount(host, svarToCheck, effect); } else { - left = AbilityUtils.calculateAmount(hostCard, svarToCheck, sa); + left = AbilityUtils.calculateAmount(host, svarToCheck, sa); } - System.out.println("aiShouldRun?" + left + comparator + compareTo); return Expressions.compare(left, comparator, compareTo); - } else if (effect.hasParam("AICheckDredge")) { + } else if (effect.isKeyword(Keyword.DREDGE)) { return player.getCardsIn(ZoneType.Library).size() > 8 || player.isCardInPlay("Laboratory Maniac"); } else return sa != null && doTrigger(sa, false); } diff --git a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java index 1b94140f717..81bc75db880 100644 --- a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java +++ b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java @@ -460,7 +460,11 @@ public class PlayerControllerAi extends PlayerController { @Override public boolean confirmReplacementEffect(ReplacementEffect replacementEffect, SpellAbility effectSA, GameEntity affected, String question) { - return brains.aiShouldRun(replacementEffect, effectSA, affected); + Card host = replacementEffect.getHostCard(); + if (host.hasAlternateState()) { + host = host.getGame().getCardState(host); + } + return brains.aiShouldRun(replacementEffect, effectSA, host, affected); } @Override diff --git a/forge-ai/src/main/java/forge/ai/ability/CloneAi.java b/forge-ai/src/main/java/forge/ai/ability/CloneAi.java index 942bde1491f..b7199681f47 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CloneAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CloneAi.java @@ -96,6 +96,10 @@ public class CloneAi extends SpellAbilityAi { if (sa.usesTargeting()) { chance = cloneTgtAI(sa); } else { + if (sa.isReplacementAbility() && host.isCloned()) { + // prevent StackOverflow from infinite loop copying another ETB RE + return new AiAbilityDecision(0, AiPlayDecision.StopRunawayActivations); + } if (sa.hasParam("Choices")) { CardCollectionView choices = CardLists.getValidCards(host.getGame().getCardsIn(ZoneType.Battlefield), sa.getParam("Choices"), host.getController(), host, sa); diff --git a/forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java b/forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java index e8c18354697..77dfc9c9443 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java @@ -92,9 +92,8 @@ public class CountersPutAi extends CountersAi { return false; } return chance > MyRandom.getRandom().nextFloat(); - } else { - return false; } + return false; } if (sa.isKeyword(Keyword.LEVEL_UP)) { @@ -124,7 +123,6 @@ public class CountersPutAi extends CountersAi { final Cost abCost = sa.getPayCosts(); final Card source = sa.getHostCard(); final String sourceName = ComputerUtilAbility.getAbilitySourceName(sa); - CardCollection list; Card choice = null; final String amountStr = sa.getParamOrDefault("CounterNum", "1"); final boolean divided = sa.isDividedAsYouChoose(); @@ -292,10 +290,8 @@ public class CountersPutAi extends CountersAi { if (willActivate) { return new AiAbilityDecision(100, AiPlayDecision.WillPlay); - } else { - return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi); } - + return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi); } else if (logic.equals("ChargeToBestCMC")) { return doChargeToCMCLogic(ai, sa); } else if (logic.equals("ChargeToBestOppControlledCMC")) { @@ -348,7 +344,7 @@ public class CountersPutAi extends CountersAi { if (type.equals("P1P1")) { nPump = amount; } - return FightAi.canFightAi(ai, sa, nPump, nPump); + return FightAi.canFight(ai, sa, nPump, nPump); } if (amountStr.equals("X")) { @@ -451,6 +447,7 @@ public class CountersPutAi extends CountersAi { sa.resetTargets(); + CardCollection list; if (sa.isCurse()) { list = ai.getOpponents().getCardsIn(ZoneType.Battlefield); } else { @@ -746,7 +743,7 @@ public class CountersPutAi extends CountersAi { protected AiAbilityDecision doTriggerNoCost(Player ai, SpellAbility sa, boolean mandatory) { final SpellAbility root = sa.getRootAbility(); final Card source = sa.getHostCard(); - final String aiLogic = sa.getParamOrDefault("AILogic", ""); + final String aiLogic = sa.getParam("AILogic"); final String amountStr = sa.getParamOrDefault("CounterNum", "1"); final boolean divided = sa.isDividedAsYouChoose(); final int amount = AbilityUtils.calculateAmount(source, amountStr, sa); @@ -765,14 +762,10 @@ public class CountersPutAi extends CountersAi { } if ("ChargeToBestCMC".equals(aiLogic)) { - AiAbilityDecision decision = doChargeToCMCLogic(ai, sa); - if (decision.willingToPlay()) { - return decision; - } if (mandatory) { return new AiAbilityDecision(50, AiPlayDecision.MandatoryPlay); } - return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi); + return doChargeToCMCLogic(ai, sa); } if (!sa.usesTargeting()) { @@ -796,7 +789,6 @@ public class CountersPutAi extends CountersAi { // things like Powder Keg, which are way too complex for the AI } } else if (sa.getTargetRestrictions().canOnlyTgtOpponent() && !sa.getTargetRestrictions().canTgtCreature()) { - // can only target opponent PlayerCollection playerList = new PlayerCollection(IterableUtil.filter( sa.getTargetRestrictions().getAllCandidates(sa, true, true), Player.class)); @@ -811,13 +803,12 @@ public class CountersPutAi extends CountersAi { sa.getTargets().add(choice); } } else { - String logic = sa.getParam("AILogic"); - if ("Fight".equals(logic) || "PowerDmg".equals(logic)) { + if ("Fight".equals(aiLogic) || "PowerDmg".equals(aiLogic)) { int nPump = 0; if (type.equals("P1P1")) { nPump = amount; } - AiAbilityDecision decision = FightAi.canFightAi(ai, sa, nPump, nPump); + AiAbilityDecision decision = FightAi.canFight(ai, sa, nPump, nPump); if (decision.willingToPlay()) { return decision; } @@ -838,7 +829,6 @@ public class CountersPutAi extends CountersAi { while (sa.canAddMoreTarget()) { if (mandatory) { - // When things are mandatory, gotta handle a little differently if ((list.isEmpty() || !preferred) && sa.isTargetNumberValid()) { return new AiAbilityDecision(0, AiPlayDecision.TargetingFailed); } @@ -863,7 +853,7 @@ public class CountersPutAi extends CountersAi { return new AiAbilityDecision(sa.isTargetNumberValid() ? 100 : 0, sa.isTargetNumberValid() ? AiPlayDecision.WillPlay : AiPlayDecision.CantPlayAi); } - Card choice = null; + Card choice; // Choose targets here: if (sa.isCurse()) { @@ -889,10 +879,10 @@ public class CountersPutAi extends CountersAi { choice = Aggregates.random(list); } if (choice != null && divided) { - int alloc = Math.max(amount / totalTargets, 1); if (sa.getTargets().size() == Math.min(totalTargets, sa.getMaxTargets()) - 1) { sa.addDividedAllocation(choice, left); } else { + int alloc = Math.max(amount / totalTargets, 1); sa.addDividedAllocation(choice, alloc); left -= alloc; } @@ -982,9 +972,7 @@ public class CountersPutAi extends CountersAi { final String amountStr = sa.getParamOrDefault("CounterNum", "1"); final int amount = AbilityUtils.calculateAmount(sa.getHostCard(), amountStr, sa); - final boolean isCurse = sa.isCurse(); - - if (isCurse) { + if (sa.isCurse()) { final CardCollection opponents = CardLists.filterControlledBy(options, ai.getOpponents()); if (!opponents.isEmpty()) { @@ -1210,9 +1198,8 @@ public class CountersPutAi extends CountersAi { } if (numCtrs < optimalCMC) { return new AiAbilityDecision(100, AiPlayDecision.WillPlay); - } else { - return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi); } + return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi); } private AiAbilityDecision doChargeToOppCtrlCMCLogic(Player ai, SpellAbility sa) { diff --git a/forge-ai/src/main/java/forge/ai/ability/EffectAi.java b/forge-ai/src/main/java/forge/ai/ability/EffectAi.java index 746a5b7623f..8e7b0d073bc 100644 --- a/forge-ai/src/main/java/forge/ai/ability/EffectAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/EffectAi.java @@ -270,7 +270,7 @@ public class EffectAi extends SpellAbilityAi { } return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi); } else if (logic.equals("Fight")) { - return FightAi.canFightAi(ai, sa, 0,0); + return FightAi.canFight(ai, sa, 0,0); } else if (logic.equals("Pump")) { sa.resetTargets(); List options = CardUtil.getValidCardsToTarget(sa); diff --git a/forge-ai/src/main/java/forge/ai/ability/FightAi.java b/forge-ai/src/main/java/forge/ai/ability/FightAi.java index 083aa8c155b..ff15bb89907 100644 --- a/forge-ai/src/main/java/forge/ai/ability/FightAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/FightAi.java @@ -177,7 +177,7 @@ public class FightAi extends SpellAbilityAi { * @param power bonus to power * @return true if fight effect should be played, false otherwise */ - public static AiAbilityDecision canFightAi(final Player ai, final SpellAbility sa, int power, int toughness) { + public static AiAbilityDecision canFight(final Player ai, final SpellAbility sa, int power, int toughness) { final Card source = sa.getHostCard(); final String sourceName = ComputerUtilAbility.getAbilitySourceName(sa); AbilitySub tgtFight = sa.getSubAbility(); diff --git a/forge-ai/src/main/java/forge/ai/ability/PumpAi.java b/forge-ai/src/main/java/forge/ai/ability/PumpAi.java index 3c0cec2634d..bc7c4f8431e 100644 --- a/forge-ai/src/main/java/forge/ai/ability/PumpAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/PumpAi.java @@ -453,7 +453,7 @@ public class PumpAi extends PumpAiBase { } if (isFight) { - return FightAi.canFightAi(ai, sa, attack, defense).willingToPlay(); + return FightAi.canFight(ai, sa, attack, defense).willingToPlay(); } } diff --git a/forge-game/src/main/java/forge/game/ability/effects/EffectEffect.java b/forge-game/src/main/java/forge/game/ability/effects/EffectEffect.java index a7ca54bd0e2..954c833b7ab 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/EffectEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/EffectEffect.java @@ -269,22 +269,22 @@ public class EffectEffect extends SpellAbilityEffect { } } - // Set Chosen Color(s) if (hostCard.hasChosenColor()) { eff.setChosenColors(Lists.newArrayList(hostCard.getChosenColors())); } - // Set Chosen Cards if (hostCard.hasChosenCard()) { eff.setChosenCards(hostCard.getChosenCards()); } - // Set Chosen Player if (hostCard.hasChosenPlayer()) { eff.setChosenPlayer(hostCard.getChosenPlayer()); } - // Set Chosen Type + if (hostCard.getChosenDirection() != null) { + eff.setChosenDirection(hostCard.getChosenDirection()); + } + if (hostCard.hasChosenType()) { eff.setChosenType(hostCard.getChosenType()); } @@ -292,12 +292,10 @@ public class EffectEffect extends SpellAbilityEffect { eff.setChosenType2(hostCard.getChosenType2()); } - // Set Chosen name if (hostCard.hasNamedCard()) { eff.setNamedCards(Lists.newArrayList(hostCard.getNamedCards())); } - // chosen number if (sa.hasParam("SetChosenNumber")) { eff.setChosenNumber(AbilityUtils.calculateAmount(hostCard, sa.getParam("SetChosenNumber"), sa)); } else if (hostCard.hasChosenNumber()) { diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index 98a32ff3b00..f5a3c133177 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -2238,7 +2238,7 @@ public class CardFactoryUtil { final String actualRep = "Event$ Draw | ActiveZones$ Graveyard | ValidPlayer$ You | " + "Secondary$ True | Optional$ True | CheckSVar$ " + "DredgeCheckLib | SVarCompare$ GE" + dredgeAmount - + " | AICheckDredge$ True | Description$ CARDNAME - Dredge " + dredgeAmount; + + " | Description$ CARDNAME - Dredge " + dredgeAmount; final String abString = "DB$ Mill | Defined$ You | NumCards$ " + dredgeAmount; diff --git a/forge-gui/res/cardsfolder/s/samite_ministration.txt b/forge-gui/res/cardsfolder/s/samite_ministration.txt index dbd342c8b59..367118617af 100644 --- a/forge-gui/res/cardsfolder/s/samite_ministration.txt +++ b/forge-gui/res/cardsfolder/s/samite_ministration.txt @@ -3,11 +3,9 @@ ManaCost:1 W Types:Instant A:SP$ ChooseSource | Choices$ Card,Emblem | AILogic$ NeedsPrevention | SubAbility$ DBEffect | StackDescription$ SpellDescription | SpellDescription$ Prevent all damage that would be dealt to you this turn by a source of your choice. Whenever damage from a black or red source is prevented this way this turn, you gain that much life. SVar:DBEffect:DB$ Effect | ReplacementEffects$ RepDmg | ConditionDefined$ ChosenCard | ConditionPresent$ Card,Emblem | ConditionCompare$ GE1 -SVar:RepDmg:Event$ DamageDone | ValidTarget$ You | ValidSource$ Card.ChosenCardStrict,Emblem.ChosenCard | ReplaceWith$ DBStoreSVar | PreventionEffect$ True | Description$ Prevent all damage that would be dealt to you this turn by a source of your choice. Whenever damage from a black or red source is prevented this way this turn, you gain that much life. -SVar:DBStoreSVar:DB$ StoreSVar | SVar$ Z | Type$ Calculate | Expression$ X | SubAbility$ DBTrigger +SVar:RepDmg:Event$ DamageDone | ValidTarget$ You | ValidSource$ Card.ChosenCardStrict,Emblem.ChosenCard | ReplaceWith$ DBTrigger | PreventionEffect$ True | Description$ Prevent all damage that would be dealt to you this turn by a source of your choice. Whenever damage from a black or red source is prevented this way this turn, you gain that much life. SVar:DBTrigger:DB$ ImmediateTrigger | Execute$ GainLifeYou | ConditionCheckSVar$ Y | ConditionSVarCompare$ GE1 | TriggerDescription$ Whenever damage from a black or red source is prevented this way this turn, you gain that much life. -SVar:GainLifeYou:DB$ GainLife | Defined$ You | LifeAmount$ Z -SVar:X:ReplaceCount$DamageAmount +SVar:GainLifeYou:DB$ GainLife | Defined$ You | LifeAmount$ X +SVar:X:Spawner>ReplaceCount$DamageAmount SVar:Y:ReplacedSource$Valid Card.BlackSource,Card.RedSource -SVar:Z:Number$0 Oracle:Prevent all damage that would be dealt to you this turn by a source of your choice. Whenever damage from a black or red source is prevented this way this turn, you gain that much life. diff --git a/forge-gui/res/cardsfolder/upcoming/atreus_impulsive_son.txt b/forge-gui/res/cardsfolder/upcoming/atreus_impulsive_son.txt index b6fc41bbc8d..c6a78a975db 100644 --- a/forge-gui/res/cardsfolder/upcoming/atreus_impulsive_son.txt +++ b/forge-gui/res/cardsfolder/upcoming/atreus_impulsive_son.txt @@ -4,7 +4,8 @@ Types:Legendary Creature God Archer PT:2/4 K:Reach K:Partner - Father & Son -A:AB$ Draw | Cost$ 3 T | NumCards$ X | SubAbility$ DBDamage | SpellDescription$ Draw a card for each experience counter you have, then discard a card. +A:AB$ Draw | Cost$ 3 T | NumCards$ X | SubAbility$ DBDiscard | SpellDescription$ Draw a card for each experience counter you have, then discard a card. +SVar:DBDiscard:DB$ Discard | Mode$ YouChoose | SubAbility$ DBDamage SVar:DBDamage:DB$ DealDamage | NumDmg$ 2 | Defined$ Opponent | SpellDescription$ CARDNAME deals 2 damage to each opponent. SVar:X:Count$YourCountersExperience Oracle:Reach\n{3}, {T}: Draw a card for each experience counter you have, then discard a card. Atreus, Impulsive Son deals 2 damage to each opponent.\nPartner-Father & son From 04fbe9fac3062b8f626cc01b35345e036aac1674 Mon Sep 17 00:00:00 2001 From: Paul Hammerton Date: Wed, 1 Oct 2025 18:12:16 +0100 Subject: [PATCH 277/355] Edition updates: ECL, FIC, FIN, SLD, SLP --- .../res/editions/Final Fantasy Commander.txt | 48 +++++++++++++- forge-gui/res/editions/Final Fantasy.txt | 8 +++ forge-gui/res/editions/Lorwyn Eclipsed.txt | 2 + .../res/editions/Secret Lair Drop Series.txt | 64 ++++++++++++++++--- .../res/editions/Secret Lair Showdown.txt | 3 + 5 files changed, 113 insertions(+), 12 deletions(-) diff --git a/forge-gui/res/editions/Final Fantasy Commander.txt b/forge-gui/res/editions/Final Fantasy Commander.txt index 27d4733e4ee..38511d0b529 100644 --- a/forge-gui/res/editions/Final Fantasy Commander.txt +++ b/forge-gui/res/editions/Final Fantasy Commander.txt @@ -202,7 +202,7 @@ ScryfallCode=FIC 194 R Summon: Good King Mog XII @Minoru 195 R Summon: Ixion @Yoshiya 196 R Summon: Yojimbo @Hisashi Momose -197 R Summon: Valefor @SENNSU +197 R Summon: Valefor @Maiko Aoji 198 R Summon: Esper Valigarmanda @TAKUMI 199 R Summon: Kujata @Yoshiya 200 R Summon: Magus Sisters @Karo ARAI @@ -254,7 +254,7 @@ ScryfallCode=FIC 246 M Luminous Broodmoth @Kazto Furuya 247 U Palace Jailer @Touge369 248 U Path to Exile @Yumi Yaoshida -249 R Promise of Loyalty @Lack +249 R Promise of Loyalty @KOHEI YAMADA 250 R Puresteel Paladin @Ignatius Budi 251 R Resourceful Defense @Shiyu 252 R Scholar of New Horizons @Allen Morris @@ -340,7 +340,7 @@ ScryfallCode=FIC 332 C Arcane Signet @Grace Zhu 333 C Arcane Signet @Randy Gallegos 334 C Arcane Signet @Russell Lu -335 C Arcane Signet @Russell Lu +335 C Arcane Signet @Madeline Boni 336 R Armory Automaton @Gas1 337 R Champion's Helm @Russell Lu 338 U Colossus Hammer @Kevin Sidharta @@ -447,6 +447,48 @@ ScryfallCode=FIC 439 R Underground River @Shahab Alizadeh 440 R Vineglimmer Snarl @Mauricio Calle 441 C Wooded Ridgeline @Hristo D. Chukov +442 R Garland, Royal Kidnapper @David Rapoza +443 R The Destined Warrior @David Rapoza +444 R The Destined White Mage @David Rapoza +445 R Chaos Shrine's Black Crystal @David Rapoza +446 R The Destined Thief @David Rapoza +447 R The Destined Black Mage @David Rapoza +448 R Edea, Possessed Sorceress @Lius Lasahido +449 R Fated Clash @Lius Lasahido +450 R Rinoa, Angel Wing @Lius Lasahido +451 R Seifer, Balamb Rival @Lius Lasahido +452 R Duelist's Flame @Lius Lasahido +453 R Squall, Gunblade Duelist @Lius Lasahido +454 R Brilliant Wings @Erion Makuo +455 R Judgment of Alexander @Erion Makuo +456 R Mega Flare @Erion Makuo +457 R Amarant Coral @Erion Makuo +458 R Vivi's Persistence @Erion Makuo +459 R Search for Dagger @Erion Makuo +460 R Noctis, Heir Apparent @Winona Nelson +461 R Fishing Gear @Winona Nelson +462 R Chocobo Camp @Winona Nelson +463 R Flash Photography @Winona Nelson +464 R Campsite Cuisine @Winona Nelson +465 R Warrior's Resolve @Winona Nelson +466 R Tataru Taru @Domco. +467 R Lulu, Stern Guardian @Hiromu +468 R Rikku, Resourceful Guardian @Ayuko +469 M Snapcaster Mage @Canata Katana +470 R Yuffie, Materia Hunter @Nijihayashi +471 R Aerith, Last Ancient @MiDQN +472 R Barret, Avalanche Leader @Dai-XT +473 R Emet-Selch of the Third Seat @Kuregure +474 R Estinien Varlineau @Yakotakos +475 R Locke, Treasure Hunter @Kato Ayaka +476 R Mog, Moogle Warrior @Rorubei +477 R Wakka, Devoted Guardian @Dai-XT +478 L Plains @Fuzichoco +479 L Island @Ai Nanahira +480 L Swamp @Ryuichi Sakuma +481 L Mountain @Nao Miyoshi +482 L Forest @ZOUNOSE +483 R Birds of Paradise @Takotto 484 C Command Tower @Anthony Devine 485 C Command Tower @Eduardo Francisco 486 C Command Tower @Jonas De Ro diff --git a/forge-gui/res/editions/Final Fantasy.txt b/forge-gui/res/editions/Final Fantasy.txt index c9d4e536a78..b43e27275d0 100644 --- a/forge-gui/res/editions/Final Fantasy.txt +++ b/forge-gui/res/editions/Final Fantasy.txt @@ -631,6 +631,14 @@ Replace=.18F BasicLand:fromSheet("FIN cards"):!fromSheet("FIN dual lands")+ 551c M Traveling Chocobo @Toni Infante 551d M Traveling Chocobo @Toni Infante 551f M Traveling Chocobo @Toni Infante +564 M Cloud, Midgar Mercenary @Inuchiyo Meimaru +565 R Stiltzkin, Moogle Merchant @Yukihiro Maruo +566 R A Realm Reborn @Susumu Kuroi +567 R Tifa Lockhart @Yoshiro Ambe +568 M Traveling Chocobo @Ishikawa Kenta +569 R Choco, Seeker of Paradise @Kemonomichi +570 M Vivi Ornitier @Ryanroro +571 M Yuna, Hope of Spira @Yuichi Murakami 572 L Plains @Jonas De Ro 573 L Island @Eddie Mendoza 574 L Swamp @Domenico Cava diff --git a/forge-gui/res/editions/Lorwyn Eclipsed.txt b/forge-gui/res/editions/Lorwyn Eclipsed.txt index 7018bb2668d..f33b3f8df99 100644 --- a/forge-gui/res/editions/Lorwyn Eclipsed.txt +++ b/forge-gui/res/editions/Lorwyn Eclipsed.txt @@ -11,6 +11,7 @@ ScryfallCode=ECL 76 R Sygg, Wanderwine Wisdom @Justin Gerard 88 M Bitterbloom Bearer @Chris Rahn 124 R Ashling, Rekindled @Ilse Gort +176 R Formidable Speaker @Aurore Folny 186 R Mutable Explorer @Wayne Reynolds 205 R Ashling's Command @Iris Compiet 212 M Deceit @Svetlin Velinov @@ -41,4 +42,5 @@ ScryfallCode=ECL 351 R Temple Garden @Annie Stegg 351☇ R Temple Garden @Annie Stegg 352 M Bitterbloom Bearer @Rebecca Guay +366 R Formidable Speaker @Aurore Folny 372 R Figure of Fable @Omar Rayyan diff --git a/forge-gui/res/editions/Secret Lair Drop Series.txt b/forge-gui/res/editions/Secret Lair Drop Series.txt index 7414e0e9e27..e54fd203057 100644 --- a/forge-gui/res/editions/Secret Lair Drop Series.txt +++ b/forge-gui/res/editions/Secret Lair Drop Series.txt @@ -1180,7 +1180,7 @@ F869 R Blacker Lotus @Scott Okumura 1305 M Worldspine Wurm @Ryan Alexander Lee 1307 R Pack Rat @Leonardo Santanna 1308 R Shared Summons @Leonardo Santanna -1309 R Sylvan Offering @Igor Krstic +1309 R Sylvan Offering @Jodie Muir 1310 M Sliver Legion @Igor Krstic 1311 R Goblin Lackey @Wizard of Barge 1311★ R Goblin Lackey @Wizard of Barge @@ -1497,7 +1497,7 @@ F1540 M Rainbow Dash @John Thacker 1548★ R Simian Spirit Guide @Graham Yarrington 1549 M Prince of Thralls @Graham Yarrington 1549★ M Prince of Thralls @Graham Yarrington -1550 R Sun Titan @Jesper Ejsing +1550 M Sun Titan @Jesper Ejsing 1551 R Breeches, Eager Pillager @Jesper Ejsing 1552 R Deflecting Swat @Jesper Ejsing 1553 R Llanowar Elves @Jesper Ejsing @@ -1959,7 +1959,7 @@ F1540 M Rainbow Dash @John Thacker 1983 R Aggravated Assault @Frank Frazetta 1984 R Desperate Ritual @Frank Frazetta 1985 R Deadly Dispute @Terry Dodson -1986 M Go for the Throat @Kael Ngu +1986 R Go for the Throat @Kael Ngu 1987 R Lightning Greaves @Todd Nauck 1988 R Sol Ring @Roberta Ingranata 1989 R Command Tower @Roberta Ingranata @@ -1988,11 +1988,11 @@ F1540 M Rainbow Dash @John Thacker 2016 R Harrow @Jordan Crane 2017 R World Shaper @Jordan Crane 2018 R Horn of Greed @Jordan Crane -2019 R Damnation @Mark Bagley & Jay David Ramos -2020 R Dark Ritual @Mark Bagley & Jay David Ramos -2021 R Peer into the Abyss @Mark Bagley & Jay David Ramos -2022 R Surgical Extraction @Mark Bagley & Jay David Ramos -2023 R Tendrils of Agony @Mark Bagley & Jay David Ramos +2019 R Damnation @Mark Bagley +2020 R Dark Ritual @Mark Bagley +2021 R Peer into the Abyss @Mark Bagley +2022 R Surgical Extraction @Mark Bagley +2023 R Tendrils of Agony @Mark Bagley 2024 R Goblin Bombardment @Phil Foglio 2025 R Orcish Lumberjack @Phil Foglio 2026 R Constant Mists @Phil Foglio @@ -2078,6 +2078,27 @@ F1540 M Rainbow Dash @John Thacker 2141 R Magical Hack @Samuele Bandini 2142 R Memory Lapse @Wylie Beckert 2143 R Mystic Sanctuary @Amélie Flechais +2144 R Island @Kelogsloops +2145 R Island @Kelogsloops +2146 R Island @Kelogsloops +2147 R Island @Kelogsloops +2148 C Brainstorm @DiTerlizzi +2149 M Capture of Jingzhou @Jack Wei +2150 U Chart a Course @Olena Richards +2151 U Control Magic @Clint Cearley +2152 R Crystal Spray @Jeff Miracola +2153 R Day's Undoing @Jonas De Ro +2154 C Mental Note @Bradley Williams +2155 U Metamorphose @Ron Spencer +2156 U Predict @Rebecca Guay +2157 U Telling Time @Scott M. Fischer +2158 U Unsubstantiate @Victor Adame Minguez +2159 C Halimar Depths @Volkan Baǵa +2160 C Haunted Fengraf @Adam Paquette +2161 C Lonely Sandbar @Heather Hudson +2162 C Remote Isle @Ciruelo +2163 C The Surgical Bay @Sarah Finnigan +2164 U Svyelunite Temple @Liz Danforth 2165 M Heliod, Sun-Crowned @Magali Villeneuve 2166 R Steelshaper's Gift @Greg Staples 2167 R Swords to Plowshares @Lie Setiawan @@ -2102,7 +2123,7 @@ F1540 M Rainbow Dash @John Thacker 2187 R Lethal Scheme @Iron Maiden 2188 M Grave Titan @Iron Maiden 2189 R Animate Dead @Iron Maiden -2190 M Temporal Tresspass @Iron Maiden +2190 M Temporal Trespass @Iron Maiden 2191 R Unearth @Iron Maiden 2192 R Lignify @Iron Maiden 2193 M Greensleeves, Maro-Sorcerer @Jason Loik & Matthew Cohen @@ -2111,14 +2132,36 @@ F1540 M Rainbow Dash @John Thacker 2196 M Wurmcoil Engine @Jason Loik & Matthew Cohen 2197 M Ellie, Brick Master @Irvin Rodriguez 2198 M Joel, Resolute Survivor @Yongjae Choi +2199 R Cabal Ritual @Bastien L. Deharme +2200 M Haunted One @Bastien L. Deharme 2202 M Abby, Merciless Soldier @Wayne Wu 2203 M Ellie, Vengeful Hunter @Irvin Rodriguez +2204 R Dictate of Erebos @Bastien L. Deharme +2205 R Mycoloth @Yongjae Choi 2207 M Kratos, God of War @Magali Villeneuve +2208 R World at War @Lie Setiawan +2209 R Rite of Flame @Johan Grenier +2210 R Sulfuric Vortex @Aleksi Briclot +2211 R Pyrohemia @Chris Rahn 2212 M Atreus, Impulsive Son @Nathaniel Himawan 2213 M Kratos, Stoic Father @Nathaniel Himawan +2214 R Teferi's Ageless Insight @Aleksi Briclot & Alix Branwyn +2215 M Iroas, God of Victory @Joshua Raphael 2216 M Nathan Drake, Treasure Hunter @Piotr Dura +2217 R Midnight Clock @Nereida +2218 R Whip of Erebos @Justyna Dura +2219 R Chain Reaction @Lie Setiawan +2220 M Passionate Archaeologist @Justyna Dura 2221 M Aloy, Savior of Meridian @Crystal Fae +2222 R Farseek @Toni Infante +2223 M Blightsteel Colossus @Narendra Bintara Adi +2224 R Tarrian's Soulcleaver @Gaboleps +2225 R Meteor Golem @Narendra Bintara Adi 2226 M Jin Sakai, Ghost of Tsushima @Dominik Mayer +2227 R Path to Exile @Dominik Mayer +2228 R Borne Upon a Wind @Matteo Bassini +2229 R Ghostly Flicker @Dominik Mayer +2230 R Eiganjo Castle @Matteo Bassini 2282 R Vito, Thorn of the Dusk Rose @Sam Heimer 2283 R Satoru Umezawa @Sam Heimer 2284 M Voja, Jaws of the Conclave @Ryan Roadkill @@ -2167,6 +2210,7 @@ F1540 M Rainbow Dash @John Thacker 7035 M Lotus Petal @Mike Burns 7036 M Lotus Petal @Mike Burns 7037 M Lotus Petal @Mike Burns +7040 R Vision Charm @ 8001 M Jace, the Mind Sculptor @Wizard of Barge 9990 R Doom Blade @Cynthia Sheppard 9991 R Massacre @Andrey Kuzinskiy @@ -2232,3 +2276,5 @@ VS C Viscera Seer @John Stanko 2094 c_a_treasure_sac @John Thacker 2101 c_1_1_a_myr @Caleb Meurer 2180 c_a_blood_draw @Stephen Andrade +2201 cordyceps_infected @Wayne Wu +2206 cordyceps_infected @Irvin Rodriguez diff --git a/forge-gui/res/editions/Secret Lair Showdown.txt b/forge-gui/res/editions/Secret Lair Showdown.txt index 585caaef160..dda2aafd701 100644 --- a/forge-gui/res/editions/Secret Lair Showdown.txt +++ b/forge-gui/res/editions/Secret Lair Showdown.txt @@ -49,3 +49,6 @@ ScryfallCode=SLP 42 M Garruk Wildspeaker @Merwan Chabane 43 R Shoot the Sheriff @Dan Black 44 R Laughing Jasper Flint @Ed Repka +45 R Innkeeper's Talent @Ben Newman +46 R Flowerfoot Swordmaster @Ampreh +47 R Manifold Mouse @Neo.G From 27a0a8f791f303f18eaa3f4b657add09d54d96eb Mon Sep 17 00:00:00 2001 From: tool4ever Date: Thu, 2 Oct 2025 19:48:54 +0000 Subject: [PATCH 278/355] Update the_spot_living_portal.txt Closes #8819 --- forge-gui/res/cardsfolder/t/the_spot_living_portal.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/t/the_spot_living_portal.txt b/forge-gui/res/cardsfolder/t/the_spot_living_portal.txt index aaf1d828e5c..307691abbcf 100644 --- a/forge-gui/res/cardsfolder/t/the_spot_living_portal.txt +++ b/forge-gui/res/cardsfolder/t/the_spot_living_portal.txt @@ -8,6 +8,6 @@ SVar:DBMarkGraveyard:DB$ Pump | ValidTgts$ Permanent.nonLand | TgtZone$ Graveyar SVar:DBExile:DB$ ChangeZone | Origin$ Battlefield,Graveyard | Destination$ Exile | Defined$ Targeted T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When NICKNAME dies, put him on the bottom of his owner's library. If you do, return the exiled cards to their owners' hands. SVar:TrigChangeZone:DB$ ChangeZone | Defined$ TriggeredNewCardLKICopy | Origin$ Graveyard | Destination$ Library | LibraryPosition$ -1 | RememberChanged$ True | SubAbility$ DBChangeZone -SVar:DBChangeZone:DB$ ChangeZone | Defined$ Card.ExiledWithSource | Origin$ Exile | Destination$ Hand | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ GE1 | SubAbility$ DBCleanup +SVar:DBChangeZone:DB$ ChangeZone | Defined$ ExiledWith | Origin$ Exile | Destination$ Hand | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ GE1 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True Oracle:When The Spot enters, exile up to one target nonland permanent and up to one target nonland permanent card from a graveyard.\nWhen The Spot dies, put him on the bottom of his owner's library. If you do, return the exiled cards to their owners' hands. From d46d7300b4fc722392994ecc7f8fe779440cad09 Mon Sep 17 00:00:00 2001 From: Chris H Date: Thu, 2 Oct 2025 23:37:06 -0400 Subject: [PATCH 279/355] Reduce cost of Bird creature token spell --- forge-gui/res/cardsfolder/upcoming/chocobo_camp.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/forge-gui/res/cardsfolder/upcoming/chocobo_camp.txt b/forge-gui/res/cardsfolder/upcoming/chocobo_camp.txt index 80a452c8ac7..f92f1baff6d 100644 --- a/forge-gui/res/cardsfolder/upcoming/chocobo_camp.txt +++ b/forge-gui/res/cardsfolder/upcoming/chocobo_camp.txt @@ -10,7 +10,7 @@ SVar:SpellCastTrig:Mode$ SpellCast | ValidCard$ Bird | ValidActivatingPlayer$ Yo SVar:TrigCounter:DB$ Effect | ReplacementEffects$ ETBCounters | RememberObjects$ TriggeredCard | ForgetOnMoved$ Stack SVar:ETBCounters:Event$ Moved | Origin$ Stack | Destination$ Battlefield | ValidCard$ Card.IsRemembered | ReplaceWith$ ETBAddExtraCounter | ReplacementResult$ Updated | Description$ That creature enters with an additional +1/+1 counters on it. SVar:ETBAddExtraCounter:DB$ PutCounter | ETB$ True | Defined$ ReplacedCard | CounterType$ P1P1 | CounterNum$ 1 -A:AB$ Token | Cost$ 4 G G T | TokenScript$ g_2_2_bird_landfall | SpellDescription$ Creature a 2/2 green Bird creature token with "Whenever a land you control enters, this token gets +1/+0 until end of turn". +A:AB$ Token | Cost$ 2 G G T | TokenScript$ g_2_2_bird_landfall | SpellDescription$ Creature a 2/2 green Bird creature token with "Whenever a land you control enters, this token gets +1/+0 until end of turn". DeckHas:Ability$Token & Type$Artifact|Bird DeckHints:Type$Legendary -Oracle:This Land enters tapped unless you control a legendary creature.\n{T}: Add {G}. When you next cast a Bird creature spell this turn, it enters with an additional +1/+1 counter on it.\n{4}{G}{G}, {T}, Creature a 2/2 green Bird creature token with "Whenever a land you control enters, this token gets +1/+0 until end of turn". +Oracle:This Land enters tapped unless you control a legendary creature.\n{T}: Add {G}. When you next cast a Bird creature spell this turn, it enters with an additional +1/+1 counter on it.\n{2}{G}{G}, {T}, Creature a 2/2 green Bird creature token with "Whenever a land you control enters, this token gets +1/+0 until end of turn". From 50c7188e0410240444408e46a195a4ff2b430aaa Mon Sep 17 00:00:00 2001 From: squee1968 Date: Fri, 3 Oct 2025 13:54:02 -0500 Subject: [PATCH 280/355] Update chocobo_camp.txt --- forge-gui/res/cardsfolder/upcoming/chocobo_camp.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/upcoming/chocobo_camp.txt b/forge-gui/res/cardsfolder/upcoming/chocobo_camp.txt index f92f1baff6d..ffa79a2783f 100644 --- a/forge-gui/res/cardsfolder/upcoming/chocobo_camp.txt +++ b/forge-gui/res/cardsfolder/upcoming/chocobo_camp.txt @@ -1,7 +1,6 @@ Name:Chocobo Camp ManaCost:no cost Types:Land -Types:Legendary Land R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplaceWith$ LandTapped | ReplacementResult$ Updated | Description$ CARDNAME enters tapped unless you control a legendary creature. SVar:LandTapped:DB$ Tap | Defined$ Self | ETB$ True | ConditionPresent$ Creature.Legendary+YouCtrl | ConditionCompare$ EQ0 A:AB$ Mana | Cost$ T | Produced$ G | SubAbility$ DBEffect | SpellDescription$ Add {G}. From 183100fbdcc353fff687e0c20e1c9bd5824cfa9d Mon Sep 17 00:00:00 2001 From: tool4ever Date: Fri, 3 Oct 2025 20:16:57 +0000 Subject: [PATCH 281/355] Update soul_collector.txt --- forge-gui/res/cardsfolder/s/soul_collector.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/s/soul_collector.txt b/forge-gui/res/cardsfolder/s/soul_collector.txt index 7be64f067d7..d076bac7562 100644 --- a/forge-gui/res/cardsfolder/s/soul_collector.txt +++ b/forge-gui/res/cardsfolder/s/soul_collector.txt @@ -5,5 +5,5 @@ PT:3/4 K:Flying K:Morph:B B B T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.DamagedBy | Execute$ TrigBounce | TriggerDescription$ Whenever a creature dealt damage by CARDNAME this turn dies, return that card to the battlefield under your control. -SVar:TrigBounce:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | Defined$ TriggeredCardLKICopy +SVar:TrigBounce:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | Defined$ TriggeredNewCardLKICopy Oracle:Flying\nWhenever a creature dealt damage by Soul Collector this turn dies, return that card to the battlefield under your control.\nMorph {B}{B}{B} (You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.) From 46df4cdb0d282918dee53335e4b68052b544f69b Mon Sep 17 00:00:00 2001 From: Paul Hammerton Date: Fri, 3 Oct 2025 21:28:30 +0100 Subject: [PATCH 282/355] Edition updates: SLD --- forge-gui/res/editions/Secret Lair Drop Series.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/forge-gui/res/editions/Secret Lair Drop Series.txt b/forge-gui/res/editions/Secret Lair Drop Series.txt index e54fd203057..00a50154195 100644 --- a/forge-gui/res/editions/Secret Lair Drop Series.txt +++ b/forge-gui/res/editions/Secret Lair Drop Series.txt @@ -2146,6 +2146,7 @@ F1540 M Rainbow Dash @John Thacker 2212 M Atreus, Impulsive Son @Nathaniel Himawan 2213 M Kratos, Stoic Father @Nathaniel Himawan 2214 R Teferi's Ageless Insight @Aleksi Briclot & Alix Branwyn +2214☇ R Teferi's Ageless Insight @Aleksi Briclot & Alix Branwyn 2215 M Iroas, God of Victory @Joshua Raphael 2216 M Nathan Drake, Treasure Hunter @Piotr Dura 2217 R Midnight Clock @Nereida From a2b324c9ce12bc3a3ca54fbaf11c42439a3f94eb Mon Sep 17 00:00:00 2001 From: kevlahnota Date: Sat, 4 Oct 2025 07:50:11 +0800 Subject: [PATCH 283/355] prevent NPE VAvatar.java --- forge-gui-mobile/src/forge/screens/match/views/VAvatar.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui-mobile/src/forge/screens/match/views/VAvatar.java b/forge-gui-mobile/src/forge/screens/match/views/VAvatar.java index 424f0ccfddd..0cd8d1da1d6 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VAvatar.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VAvatar.java @@ -124,7 +124,7 @@ public class VAvatar extends FDisplayObject { float w = isHovered() ? getWidth()/16f+getWidth() : getWidth(); float h = isHovered() ? getWidth()/16f+getHeight() : getHeight(); - if (avatarAnimation != null && !MatchController.instance.getGameView().isMatchOver()) { + if (avatarAnimation != null && MatchController.instance.getGameView() != null && !MatchController.instance.getGameView().isMatchOver()) { if (player.wasAvatarLifeChanged()) { avatarAnimation.start(); avatarAnimation.drawAvatar(g, image, 0, 0, w, h); From 091c61829bc9feb9f465e736c61630dcb012abcc Mon Sep 17 00:00:00 2001 From: Eradev Date: Sat, 4 Oct 2025 03:56:40 -0400 Subject: [PATCH 284/355] Fix Div by zero error --- .../src/main/java/forge/gamemodes/quest/QuestUtilCards.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/forge-gui/src/main/java/forge/gamemodes/quest/QuestUtilCards.java b/forge-gui/src/main/java/forge/gamemodes/quest/QuestUtilCards.java index 853751014e3..1d4e8efbc8c 100644 --- a/forge-gui/src/main/java/forge/gamemodes/quest/QuestUtilCards.java +++ b/forge-gui/src/main/java/forge/gamemodes/quest/QuestUtilCards.java @@ -792,6 +792,11 @@ public final class QuestUtilCards { Predicate filter = PaperCardPredicates.printedInSet(edition); Iterable editionCards = IterableUtil.filter(FModel.getMagicDb().getCommonCards().getAllCards(), filter); + // For editions such as MB1 which only contains PLST cards. + if (!editionCards.iterator().hasNext()) { + return 0; + } + ItemPool ownedCards = questAssets.getCardPool(); // 100% means at least one of every basic land and at least 4 of every other card in the set int completeCards = 0; From 66a8e1f04f14736ce7f94b7c3df21fd0d2654f68 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Sat, 4 Oct 2025 13:30:21 +0200 Subject: [PATCH 285/355] Fix Henzie + Gorex (#8829) --- forge-game/src/main/java/forge/game/GameAction.java | 8 +++++--- .../java/forge/game/ability/SpellAbilityEffect.java | 2 +- forge-game/src/main/java/forge/game/cost/Cost.java | 10 +++++----- forge-gui/res/cardsfolder/a/aladdins_lamp.txt | 6 ++---- forge-gui/res/cardsfolder/d/droning_bureaucrats.txt | 6 ++---- 5 files changed, 15 insertions(+), 17 deletions(-) diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index dd35bf5ad53..0c985d805ea 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -1602,9 +1602,7 @@ public class GameAction { } // recheck the game over condition at this point to make sure no other win conditions apply now. - if (!game.isGameOver()) { - checkGameOverCondition(); - } + checkGameOverCondition(); if (game.getAge() != GameStage.Play) { return false; @@ -1885,6 +1883,10 @@ public class GameAction { } public void checkGameOverCondition() { + if (game.isGameOver()) { + return; + } + // award loses as SBE GameEndReason reason = null; List losers = null; diff --git a/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java b/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java index 96bc1c9c6e1..f9e8358fa23 100644 --- a/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java +++ b/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java @@ -1069,7 +1069,7 @@ public abstract class SpellAbilityEffect { // if ability was granted use that source so they can be kept apart later if (cause.isCopiedTrait()) { exilingSource = cause.getOriginalHost(); - } else if (cause.getKeyword() != null && cause.getKeyword().getStatic() != null) { + } else if (!cause.isSpell() && cause.getKeyword() != null && cause.getKeyword().getStatic() != null) { exilingSource = cause.getKeyword().getStatic().getOriginalHost(); } movedCard.setExiledWith(exilingSource); diff --git a/forge-game/src/main/java/forge/game/cost/Cost.java b/forge-game/src/main/java/forge/game/cost/Cost.java index dec565a9282..8cf784c6e7e 100644 --- a/forge-game/src/main/java/forge/game/cost/Cost.java +++ b/forge-game/src/main/java/forge/game/cost/Cost.java @@ -237,17 +237,17 @@ public class Cost implements Serializable { CostPartMana parsedMana = null; for (String part : parts) { if (part.startsWith("XMin")) { - xMin = (part); + xMin = part; } else if ("Mandatory".equals(part)) { this.isMandatory = true; } else { CostPart cp = parseCostPart(part, tapCost, untapCost); if (null != cp) - if (cp instanceof CostPartMana) { - parsedMana = (CostPartMana) cp; + if (cp instanceof CostPartMana p) { + parsedMana = p; } else { - if (cp instanceof CostPartWithList) { - ((CostPartWithList)cp).setIntrinsic(intrinsic); + if (cp instanceof CostPartWithList p) { + p.setIntrinsic(intrinsic); } this.costParts.add(cp); } diff --git a/forge-gui/res/cardsfolder/a/aladdins_lamp.txt b/forge-gui/res/cardsfolder/a/aladdins_lamp.txt index 98413ef0f7d..fbc2487a83d 100644 --- a/forge-gui/res/cardsfolder/a/aladdins_lamp.txt +++ b/forge-gui/res/cardsfolder/a/aladdins_lamp.txt @@ -1,14 +1,12 @@ Name:Aladdin's Lamp ManaCost:10 Types:Artifact -A:AB$ StoreSVar | Cost$ XMin1 X T | SVar$ DigNum | Type$ Count | Expression$ xPaid | SubAbility$ TheMagic | SpellDescription$ The next time you would draw a card this turn, instead look at the top X cards of your library, put all but one of them on the bottom of your library in a random order, then draw a card. X can't be 0. -SVar:TheMagic:DB$ Effect | Name$ Aladdin's Wish | ReplacementEffects$ DrawReplace +A:AB$ Effect | Cost$ XMin1 X T | Name$ Aladdin's Wish | ReplacementEffects$ DrawReplace | SetChosenNumber$ X | SpellDescription$ The next time you would draw a card this turn, instead look at the top X cards of your library, put all but one of them on the bottom of your library in a random order, then draw a card. X can't be 0. SVar:DrawReplace:Event$ Draw | ValidPlayer$ You | ReplaceWith$ AladdinDraw | Description$ The next time you would draw a card this turn, instead look at the top X cards of your library, put all but one of them on the bottom of your library in a random order, then draw a card. -SVar:AladdinDraw:DB$ Dig | DigNum$ DigNum | ChangeNum$ 1 | RestRandomOrder$ True | DestinationZone$ Library | LibraryPosition$ 0 | SubAbility$ DBDraw +SVar:AladdinDraw:DB$ Dig | DigNum$ Count$ChosenNumber | ChangeNum$ 1 | RestRandomOrder$ True | DestinationZone$ Library | LibraryPosition$ 0 | SubAbility$ DBDraw SVar:DBDraw:DB$ Draw | SubAbility$ ExileEffect SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile SVar:X:Count$xPaid -SVar:DigNum:Number$0 AI:RemoveDeck:Random AI:RemoveDeck:All Oracle:{X}, {T}: The next time you would draw a card this turn, instead look at the top X cards of your library, put all but one of them on the bottom of your library in a random order, then draw a card. X can't be 0. diff --git a/forge-gui/res/cardsfolder/d/droning_bureaucrats.txt b/forge-gui/res/cardsfolder/d/droning_bureaucrats.txt index 57d193f3a96..31de2a29884 100644 --- a/forge-gui/res/cardsfolder/d/droning_bureaucrats.txt +++ b/forge-gui/res/cardsfolder/d/droning_bureaucrats.txt @@ -2,10 +2,8 @@ Name:Droning Bureaucrats ManaCost:3 W Types:Creature Human Advisor PT:1/4 -A:AB$ StoreSVar | Cost$ X T | SVar$ DroningX | Type$ Count | Expression$ xPaid | SubAbility$ CreateDroningEffect | SpellDescription$ Each creature with mana value X can't attack or block this turn. -SVar:CreateDroningEffect:DB$ Effect | StaticAbilities$ NoCombat -SVar:NoCombat:Mode$ Continuous | Affected$ Creature.cmcEQDroningX | AddHiddenKeyword$ CARDNAME can't attack or block. | Description$ Each creature with mana value X can't attack or block this turn. +A:AB$ Effect | Cost$ X T | StaticAbilities$ NoCombat | SetChosenNumber$ X | SpellDescription$ Each creature with mana value X can't attack or block this turn. +SVar:NoCombat:Mode$ Continuous | Affected$ Creature.cmcChosen | AddHiddenKeyword$ CARDNAME can't attack or block. | Description$ Each creature with mana value X can't attack or block this turn. SVar:X:Count$xPaid -SVar:DroningX:Number$0 AI:RemoveDeck:All Oracle:{X}, {T}: Each creature with mana value X can't attack or block this turn. From 7acfe6c2406fb32bf00c1e2a53ec0f105121ab51 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Sat, 4 Oct 2025 15:36:17 +0200 Subject: [PATCH 286/355] Different names rework (#8823) * turn CardChangedName into record * Add CardLists.getDifferentNamesCount * CostDiscard: rename to +WithDifferentNames * CostSacrifice: use getDifferentNamesCount * Refactor DifferentCardNames_ --- .../main/java/forge/ai/AiCostDecision.java | 2 +- .../java/forge/game/ability/AbilityUtils.java | 20 +++--------- .../src/main/java/forge/game/card/Card.java | 10 ++++-- .../java/forge/game/card/CardChangedName.java | 24 -------------- .../main/java/forge/game/card/CardLists.java | 27 ++++++++++++++++ .../java/forge/game/cost/CostDiscard.java | 31 ++++++++++++------- .../java/forge/game/cost/CostSacrifice.java | 13 +------- .../res/cardsfolder/a/all_fates_scroll.txt | 2 +- .../cardsfolder/a/audience_with_trostani.txt | 2 +- .../res/cardsfolder/a/awakened_amalgam.txt | 2 +- .../res/cardsfolder/e/eerie_ultimatum.txt | 2 +- forge-gui/res/cardsfolder/e/euroakus.txt | 2 +- .../res/cardsfolder/f/field_of_the_dead.txt | 2 +- .../res/cardsfolder/f/fungal_colossus.txt | 2 +- .../cardsfolder/g/gimbal_gremlin_prodigy.txt | 2 +- .../res/cardsfolder/l/lilianas_contract.txt | 2 +- forge-gui/res/cardsfolder/m/mazes_end.txt | 2 +- .../cardsfolder/m/monument_to_perfection.txt | 2 +- .../n/neriv_crackling_vanguard.txt | 2 +- .../cardsfolder/o/ormos_archive_keeper.txt | 2 +- .../cardsfolder/s/sandsteppe_war_riders.txt | 2 +- forge-gui/res/cardsfolder/s/scalpelexis.txt | 2 +- .../res/cardsfolder/s/signal_the_clans.txt | 2 +- forge-gui/res/cardsfolder/s/survey_mechan.txt | 2 +- .../res/cardsfolder/s/swine_rebellion.txt | 2 +- .../res/cardsfolder/t/the_necrobloom.txt | 2 +- .../java/forge/player/HumanCostDecision.java | 2 +- 27 files changed, 80 insertions(+), 87 deletions(-) delete mode 100644 forge-game/src/main/java/forge/game/card/CardChangedName.java diff --git a/forge-ai/src/main/java/forge/ai/AiCostDecision.java b/forge-ai/src/main/java/forge/ai/AiCostDecision.java index 65d59b3c534..88de7ba4eb4 100644 --- a/forge-ai/src/main/java/forge/ai/AiCostDecision.java +++ b/forge-ai/src/main/java/forge/ai/AiCostDecision.java @@ -113,7 +113,7 @@ public class AiCostDecision extends CostDecisionMakerBase { randomSubset = ability.getActivatingPlayer().getController().orderMoveToZoneList(randomSubset, ZoneType.Graveyard, ability); } return PaymentDecision.card(randomSubset); - } else if (type.equals("DifferentNames")) { + } else if (type.contains("+WithDifferentNames")) { CardCollection differentNames = new CardCollection(); CardCollection discardMe = CardLists.filter(hand, CardPredicates.hasSVar("DiscardMe")); while (c > 0) { diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index 78d13487b62..a7a4437854f 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -43,7 +43,6 @@ import java.util.Map.Entry; import java.util.regex.Matcher; import java.util.regex.Pattern; - public class AbilityUtils { private final static ImmutableList cmpList = ImmutableList.of("LT", "LE", "EQ", "GE", "GT", "NE"); @@ -2889,21 +2888,6 @@ public class AbilityUtils { return max; } - if (sq[0].startsWith("DifferentCardNames_")) { - final List crdname = Lists.newArrayList(); - final String restriction = l[0].substring(19); - CardCollection list = CardLists.getValidCards(game.getCardsInGame(), restriction, player, c, ctb); - // TODO rewrite with sharesName to respect Spy Kit - for (final Card card : list) { - String name = card.getName(); - // CR 201.2b Those objects have different names only if each of them has at least one name and no two objects in that group have a name in common - if (!crdname.contains(name) && !name.isEmpty()) { - crdname.add(name); - } - } - return doXMath(crdname.size(), expr, c, ctb); - } - if (sq[0].startsWith("MostProminentCreatureType")) { String restriction = l[0].split(" ")[1]; CardCollection list = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), restriction, player, c, ctb); @@ -3760,6 +3744,10 @@ public class AbilityUtils { return CardUtil.getColorsFromCards(paidList).countColors(); } + if (string.equals("DifferentCardNames")) { + return CardLists.getDifferentNamesCount(paidList); + } + if (string.equals("DifferentColorPair")) { final Set diffPair = new HashSet<>(); for (final Card card : paidList) { diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 5033e19a81b..d5ea3aaf3e5 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -965,7 +965,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr String name = state.getName(); for (CardChangedName change : this.changedCardNames.values()) { if (change.isOverwrite()) { - name = change.getNewName(); + name = change.newName(); } } return alt ? StaticData.instance().getCommonCards().getName(name, true) : name; @@ -980,7 +980,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr for (CardChangedName change : this.changedCardNames.values()) { if (change.isOverwrite()) { result = false; - } else if (change.isAddNonLegendaryCreatureNames()) { + } else if (change.addNonLegendaryCreatureNames()) { result = true; } } @@ -1013,6 +1013,12 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr currentState.getView().updateName(currentState); } + private record CardChangedName(String newName, boolean addNonLegendaryCreatureNames) { + public boolean isOverwrite() { + return newName != null; + } + } + public void setGamePieceType(GamePieceType gamePieceType) { this.gamePieceType = gamePieceType; this.view.updateGamePieceType(this); diff --git a/forge-game/src/main/java/forge/game/card/CardChangedName.java b/forge-game/src/main/java/forge/game/card/CardChangedName.java deleted file mode 100644 index 63dcd82ac8f..00000000000 --- a/forge-game/src/main/java/forge/game/card/CardChangedName.java +++ /dev/null @@ -1,24 +0,0 @@ -package forge.game.card; - -public class CardChangedName { - - protected String newName; - protected boolean addNonLegendaryCreatureNames = false; - - public CardChangedName(String newName, boolean addNonLegendaryCreatureNames) { - this.newName = newName; - this.addNonLegendaryCreatureNames = addNonLegendaryCreatureNames; - } - - public String getNewName() { - return newName; - } - - public boolean isOverwrite() { - return newName != null; - } - - public boolean isAddNonLegendaryCreatureNames() { - return addNonLegendaryCreatureNames; - } -} diff --git a/forge-game/src/main/java/forge/game/card/CardLists.java b/forge-game/src/main/java/forge/game/card/CardLists.java index 279499db015..8f91260b10d 100644 --- a/forge-game/src/main/java/forge/game/card/CardLists.java +++ b/forge-game/src/main/java/forge/game/card/CardLists.java @@ -26,12 +26,17 @@ import forge.game.spellability.TargetRestrictions; import forge.game.staticability.StaticAbilityTapPowerValue; import forge.util.IterableUtil; import forge.util.MyRandom; +import forge.util.StreamUtil; import forge.util.collect.FCollectionView; +import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; +import java.util.Map; import java.util.function.Predicate; +import java.util.stream.Collector; +import java.util.stream.Collectors; /** *

    @@ -480,4 +485,26 @@ public class CardLists { // (b) including the last element return isSubsetSum(numList, sum) || isSubsetSum(numList, sum - last); } + + public static int getDifferentNamesCount(Iterable cardList) { + // first part the ones with SpyKit, and already collect them via + Map> parted = StreamUtil.stream(cardList).collect(Collectors + .partitioningBy(Card::hasNonLegendaryCreatureNames, Collector.of(ArrayList::new, (list, c) -> { + if (!c.hasNoName() && list.stream().noneMatch(c2 -> c.sharesNameWith(c2))) { + list.add(c); + } + }, (l1, l2) -> { + l1.addAll(l2); + return l1; + }))); + List preList = parted.get(Boolean.FALSE); + + // then try to apply the SpyKit ones + for (Card c : parted.get(Boolean.TRUE)) { + if (preList.stream().noneMatch(c2 -> c.sharesNameWith(c2))) { + preList.add(c); + } + } + return preList.size(); + } } diff --git a/forge-game/src/main/java/forge/game/cost/CostDiscard.java b/forge-game/src/main/java/forge/game/cost/CostDiscard.java index e89a8213419..755c341ed14 100644 --- a/forge-game/src/main/java/forge/game/cost/CostDiscard.java +++ b/forge-game/src/main/java/forge/game/cost/CostDiscard.java @@ -18,7 +18,6 @@ package forge.game.cost; import com.google.common.collect.Lists; -import com.google.common.collect.Sets; import forge.game.ability.AbilityKey; import forge.game.card.*; import forge.game.player.Player; @@ -29,7 +28,6 @@ import forge.util.TextUtil; import java.util.List; import java.util.Map; -import java.util.Set; /** * The Class CostDiscard. @@ -63,11 +61,20 @@ public class CostDiscard extends CostPartWithList { public Integer getMaxAmountX(SpellAbility ability, Player payer, final boolean effect) { final Card source = ability.getHostCard(); String type = this.getType(); + + boolean differentNames = false; + if (type.contains("+WithDifferentNames")) { + type = type.replace("+WithDifferentNames", ""); + differentNames = true; + } CardCollectionView handList = payer.canDiscardBy(ability, effect) ? payer.getCardsIn(ZoneType.Hand) : CardCollection.EMPTY; if (!type.equals("Random")) { handList = CardLists.getValidCards(handList, type.split(";"), payer, source, ability); } + if (differentNames) { + return CardLists.getDifferentNamesCount(handList); + } return handList.size(); } @@ -92,7 +99,7 @@ public class CostDiscard extends CostPartWithList { else if (this.getType().equals("LastDrawn")) { sb.append("the last card you drew this turn"); } - else if (this.getType().equals("DifferentNames")) { + else if (this.getType().contains("+WithDifferentNames")) { sb.append(Cost.convertAmountTypeToWords(i, this.getAmount(), "Card")).append(" with different names"); } else { @@ -145,21 +152,17 @@ public class CostDiscard extends CostPartWithList { final Card c = payer.getLastDrawnCard(); return handList.contains(c); } - else if (type.equals("DifferentNames")) { - Set cardNames = Sets.newHashSet(); - for (Card c : handList) { - if (!c.hasNoName()) { - cardNames.add(c.getName()); - } - } - return cardNames.size() >= amount; - } else { boolean sameName = false; + boolean differentNames = false; if (type.contains("+WithSameName")) { sameName = true; type = TextUtil.fastReplace(type, "+WithSameName", ""); } + if (type.contains("+WithDifferentNames")) { + type = type.replace("+WithDifferentNames", ""); + differentNames = true; + } if (type.contains("ChosenColor") && !source.hasChosenColor()) { //color hasn't been chosen yet, so skip getValidCards } else if (!type.equals("Random") && !type.contains("X")) { @@ -173,6 +176,10 @@ public class CostDiscard extends CostPartWithList { } } return false; + } else if (differentNames) { + if (CardLists.getDifferentNamesCount(handList) < amount) { + return false; + } } int adjustment = 0; if (source.isInZone(ZoneType.Hand) && payer.equals(source.getOwner())) { diff --git a/forge-game/src/main/java/forge/game/cost/CostSacrifice.java b/forge-game/src/main/java/forge/game/cost/CostSacrifice.java index a99c3da8b2d..357235f88bc 100644 --- a/forge-game/src/main/java/forge/game/cost/CostSacrifice.java +++ b/forge-game/src/main/java/forge/game/cost/CostSacrifice.java @@ -17,7 +17,6 @@ */ package forge.game.cost; -import com.google.common.collect.Sets; import forge.card.CardType; import forge.game.Game; import forge.game.ability.AbilityKey; @@ -31,7 +30,6 @@ import forge.game.zone.ZoneType; import forge.util.Lang; import java.util.Map; -import java.util.Set; /** * The Class CostSacrifice. @@ -74,16 +72,7 @@ public class CostSacrifice extends CostPartWithList { } typeList = CardLists.filter(typeList, CardPredicates.canBeSacrificedBy(ability, effect)); if (differentNames) { - // TODO rewrite with sharesName to respect Spy Kit - final Set crdname = Sets.newHashSet(); - for (final Card card : typeList) { - String name = card.getName(); - // CR 201.2b Those objects have different names only if each of them has at least one name and no two objects in that group have a name in common - if (!card.hasNoName()) { - crdname.add(name); - } - } - return crdname.size(); + return CardLists.getDifferentNamesCount(typeList); } return typeList.size(); } diff --git a/forge-gui/res/cardsfolder/a/all_fates_scroll.txt b/forge-gui/res/cardsfolder/a/all_fates_scroll.txt index 1499d57f567..5b7a41b234f 100644 --- a/forge-gui/res/cardsfolder/a/all_fates_scroll.txt +++ b/forge-gui/res/cardsfolder/a/all_fates_scroll.txt @@ -3,5 +3,5 @@ ManaCost:3 Types:Artifact A:AB$ Mana | Cost$ T | Produced$ Any | SpellDescription$ Add one mana of any color. A:AB$ Draw | Cost$ 7 T Sac<1/CARDNAME> | NumCards$ X | SpellDescription$ Draw X cards, where X is the number of differently named lands you control. -SVar:X:Count$DifferentCardNames_Land.YouCtrl+inZoneBattlefield +SVar:X:Count$Valid Land.YouCtrl$DifferentCardNames Oracle:{T}: Add one mana of any color.\n{7}, {T}, Sacrifice this artifact: Draw X cards, where X is the number of differently named lands you control. diff --git a/forge-gui/res/cardsfolder/a/audience_with_trostani.txt b/forge-gui/res/cardsfolder/a/audience_with_trostani.txt index dd2ba9d7f0a..372fd29d0ff 100644 --- a/forge-gui/res/cardsfolder/a/audience_with_trostani.txt +++ b/forge-gui/res/cardsfolder/a/audience_with_trostani.txt @@ -3,7 +3,7 @@ ManaCost:2 G Types:Sorcery A:SP$ Token | TokenScript$ g_0_1_plant | SubAbility$ DBDraw | SpellDescription$ Create a 0/1 green Plant creature token, then draw cards equal to the number of differently named creature tokens you control. SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ X | StackDescription$ None -SVar:X:Count$DifferentCardNames_Creature.YouCtrl+token+inZoneBattlefield +SVar:X:Count$Valid Creature.YouCtrl+token$DifferentCardNames DeckHas:Ability$Token & Type$Plant DeckHints:Ability$Token Oracle:Create a 0/1 green Plant creature token, then draw cards equal to the number of differently named creature tokens you control. diff --git a/forge-gui/res/cardsfolder/a/awakened_amalgam.txt b/forge-gui/res/cardsfolder/a/awakened_amalgam.txt index c98e4b02b80..74720c705b9 100644 --- a/forge-gui/res/cardsfolder/a/awakened_amalgam.txt +++ b/forge-gui/res/cardsfolder/a/awakened_amalgam.txt @@ -3,5 +3,5 @@ ManaCost:4 Types:Artifact Creature Golem PT:*/* S:Mode$ Continuous | CharacteristicDefining$ True | SetPower$ X | SetToughness$ X | Description$ CARDNAME's power and toughness are each equal to the number of differently named lands you control. -SVar:X:Count$DifferentCardNames_Land.YouCtrl+inZoneBattlefield +SVar:X:Count$Valid Land.YouCtrl$DifferentCardNames Oracle:Awakened Amalgam's power and toughness are each equal to the number of differently named lands you control. diff --git a/forge-gui/res/cardsfolder/e/eerie_ultimatum.txt b/forge-gui/res/cardsfolder/e/eerie_ultimatum.txt index 355ff616eff..cba20ce6570 100644 --- a/forge-gui/res/cardsfolder/e/eerie_ultimatum.txt +++ b/forge-gui/res/cardsfolder/e/eerie_ultimatum.txt @@ -2,7 +2,7 @@ Name:Eerie Ultimatum ManaCost:W W B B B G G Types:Sorcery A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Permanent.YouOwn | ChangeNumDesc$ any number of | ChangeTypeDesc$ permanent cards with different names | DifferentNames$ True | ChangeNum$ X | Hidden$ True | SpellDescription$ Return any number of permanent cards with different names from your graveyard to the battlefield. -SVar:X:Count$DifferentCardNames_Permanent.YouOwn+inZoneGraveyard +SVar:X:Count$ValidGraveyard Permanent.YouOwn$DifferentCardNames SVar:IsReanimatorCard:TRUE DeckHas:Ability$Graveyard Oracle:Return any number of permanent cards with different names from your graveyard to the battlefield. diff --git a/forge-gui/res/cardsfolder/e/euroakus.txt b/forge-gui/res/cardsfolder/e/euroakus.txt index d1f03154637..262a250357b 100644 --- a/forge-gui/res/cardsfolder/e/euroakus.txt +++ b/forge-gui/res/cardsfolder/e/euroakus.txt @@ -4,7 +4,7 @@ Types:Legendary Creature Treefolk Wizard PT:6/6 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters, create a number of 1/1 blue Human Wizard creature tokens equal to the number of differently named lands you control. SVar:TrigToken:DB$ Token | TokenAmount$ X | TokenScript$ u_1_1_human_wizard -SVar:X:Count$DifferentCardNames_Land.YouCtrl+inZoneBattlefield +SVar:X:Count$Valid Land.YouCtrl$DifferentCardNames A:AB$ Draw | Cost$ 4 G U | NumCards$ Y | SubAbility$ PumpAll | SpellDescription$ Draw a card for each Wizard you control. They each get +1/+1 until end of turn for each card in your hand. SVar:Y:Count$Valid Wizard.YouCtrl SVar:PumpAll:DB$ PumpAll | ValidCards$ Wizard.YouCtrl | NumAtt$ +Z | NumDef$ +Z diff --git a/forge-gui/res/cardsfolder/f/field_of_the_dead.txt b/forge-gui/res/cardsfolder/f/field_of_the_dead.txt index 39bd2e04423..d941c9e4fd6 100644 --- a/forge-gui/res/cardsfolder/f/field_of_the_dead.txt +++ b/forge-gui/res/cardsfolder/f/field_of_the_dead.txt @@ -6,6 +6,6 @@ SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self,Land.Other+YouCtrl | CheckSVar$ X | SVarCompare$ GE7 | Execute$ TrigToken | TriggerDescription$ Whenever CARDNAME or another land you control enters, if you control seven or more lands with different names, create a 2/2 black Zombie creature token. SVar:TrigToken:DB$ Token | TokenScript$ b_2_2_zombie | TokenOwner$ You | TokenAmount$ 1 -SVar:X:Count$DifferentCardNames_Land.YouCtrl+inZoneBattlefield +SVar:X:Count$Valid Land.YouCtrl$DifferentCardNames DeckHas:Ability$Token Oracle:Field of the Dead enters tapped.\n{T}: Add {C}.\nWhenever Field of the Dead or another land you control enters, if you control seven or more lands with different names, create a 2/2 black Zombie creature token. diff --git a/forge-gui/res/cardsfolder/f/fungal_colossus.txt b/forge-gui/res/cardsfolder/f/fungal_colossus.txt index 54d0be698a6..0409a9e823e 100644 --- a/forge-gui/res/cardsfolder/f/fungal_colossus.txt +++ b/forge-gui/res/cardsfolder/f/fungal_colossus.txt @@ -3,5 +3,5 @@ ManaCost:6 G Types:Creature Fungus Beast PT:5/5 S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ X | EffectZone$ All | Description$ This spell costs {X} less to cast, where X is the number of differently named lands you control. -SVar:X:Count$DifferentCardNames_Land.YouCtrl+inZoneBattlefield +SVar:X:Count$Valid Land.YouCtrl$DifferentCardNames Oracle:This spell costs {X} less to cast, where X is the number of differently named lands you control. diff --git a/forge-gui/res/cardsfolder/g/gimbal_gremlin_prodigy.txt b/forge-gui/res/cardsfolder/g/gimbal_gremlin_prodigy.txt index 9aa3b8aa800..125325c25f2 100644 --- a/forge-gui/res/cardsfolder/g/gimbal_gremlin_prodigy.txt +++ b/forge-gui/res/cardsfolder/g/gimbal_gremlin_prodigy.txt @@ -7,7 +7,7 @@ T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefiel SVar:TrigToken:DB$ Token | TokenScript$ r_0_0_a_gremlin | RememberTokens$ True | SubAbility$ DBCounters SVar:DBCounters:DB$ PutCounter | Defined$ Remembered | CounterType$ P1P1 | CounterNum$ X | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -SVar:X:Count$DifferentCardNames_Artifact.YouCtrl+inZoneBattlefield+token +SVar:X:Count$Valid Artifact.YouCtrl+token$DifferentCardNames DeckHas:Ability$Token|Counters DeckHints:Type$Artifact & Ability$Token Oracle:Artifact creatures you control have trample.\nAt the beginning of your end step, create a 0/0 red Gremlin artifact creature token. Put X +1/+1 counters on it, where X is the number of differently named artifact tokens you control. diff --git a/forge-gui/res/cardsfolder/l/lilianas_contract.txt b/forge-gui/res/cardsfolder/l/lilianas_contract.txt index b6946fef4da..51abebdd572 100644 --- a/forge-gui/res/cardsfolder/l/lilianas_contract.txt +++ b/forge-gui/res/cardsfolder/l/lilianas_contract.txt @@ -3,7 +3,7 @@ ManaCost:3 B B Types:Enchantment T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ DBWin | TriggerZones$ Battlefield | CheckSVar$ Contractors | SVarCompare$ GE4 | TriggerDescription$ At the beginning of your upkeep, if you control four or more Demons with different names, you win the game. SVar:DBWin:DB$ WinsGame | Defined$ You | ConditionCheckSVar$ Contractors | ConditionSVarCompare$ GE4 -SVar:Contractors:Count$DifferentCardNames_Demon.YouCtrl+inRealZoneBattlefield +SVar:Contractors:Count$Valid Demon.YouCtrl$DifferentCardNames T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters, you draw four cards and you lose 4 life. SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 4 | SubAbility$ DBLoseLife SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ 4 diff --git a/forge-gui/res/cardsfolder/m/mazes_end.txt b/forge-gui/res/cardsfolder/m/mazes_end.txt index 5b0c03d6450..016ff08dcbd 100644 --- a/forge-gui/res/cardsfolder/m/mazes_end.txt +++ b/forge-gui/res/cardsfolder/m/mazes_end.txt @@ -6,6 +6,6 @@ SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. A:AB$ ChangeZone | Cost$ 3 T Return<1/CARDNAME> | ChangeType$ Gate | ChangeNum$ 1 | Origin$ Library | Destination$ Battlefield | AILogic$ MazesEnd | SubAbility$ DBWin | SpellDescription$ Search your library for a Gate card, put it onto the battlefield, then shuffle. If you control ten or more Gates with different names, you win the game. SVar:DBWin:DB$ WinsGame | Defined$ You | ConditionCheckSVar$ MazeGate | ConditionSVarCompare$ GE10 -SVar:MazeGate:Count$DifferentCardNames_Gate.YouCtrl+inZoneBattlefield +SVar:X:Count$Valid Gate.YouCtrl$DifferentCardNames AI:RemoveDeck:Random Oracle:Maze's End enters tapped.\n{T}: Add {C}.\n{3}, {T}, Return Maze's End to its owner's hand: Search your library for a Gate card, put it onto the battlefield, then shuffle. If you control ten or more Gates with different names, you win the game. diff --git a/forge-gui/res/cardsfolder/m/monument_to_perfection.txt b/forge-gui/res/cardsfolder/m/monument_to_perfection.txt index 8de4eb6e0c1..a39c9e3356b 100644 --- a/forge-gui/res/cardsfolder/m/monument_to_perfection.txt +++ b/forge-gui/res/cardsfolder/m/monument_to_perfection.txt @@ -3,7 +3,7 @@ ManaCost:2 Types:Artifact A:AB$ ChangeZone | Cost$ 3 T | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic,Land.Locus,Land.Sphere | ChangeTypeDesc$ basic, Sphere, or Locus land card | SpellDescription$ Search your library for a basic, Sphere, or Locus land card, reveal it, put it into your hand, then shuffle. A:AB$ Animate | Cost$ 3 | CheckSVar$ CountAll | SVarCompare$ GE9 | Power$ 9 | Toughness$ 9 | Types$ Artifact,Creature,Phyrexian,Construct | RemoveCreatureTypes$ True | RemoveAllAbilities$ True | Defined$ Self | Keywords$ Indestructible & Toxic:9 | Duration$ Permanent | SpellDescription$ CARDNAME becomes a 9/9 Phyrexian Construct artifact creature, loses all abilities, and gains indestructible and toxic 9. Activate only if there are nine or more lands with different names among the basic, Sphere, and Locus lands you control. -SVar:CountAll:Count$DifferentCardNames_Land.YouCtrl+inZoneBattlefield+Basic,Sphere.YouCtrl+inZoneBattlefield,Locus.YouCtrl+inZoneBattlefield +SVar:CountAll:Count$Valid Land.YouCtrl+Basic,Sphere.YouCtrl,Locus.YouCtrl$DifferentCardNames DeckHas:Type$Phyrexian|Construct|Artifact DeckNeeds:Type$Locus|Sphere Oracle:{3}, {T}: Search your library for a basic, Sphere, or Locus land card, reveal it, put it into your hand, then shuffle.\n{3}: Monument to Perfection becomes a 9/9 Phyrexian Construct artifact creature, loses all abilities, and gains indestructible and toxic 9. Activate only if there are nine or more lands with different names among the basic, Sphere, and Locus lands you control. diff --git a/forge-gui/res/cardsfolder/n/neriv_crackling_vanguard.txt b/forge-gui/res/cardsfolder/n/neriv_crackling_vanguard.txt index 943d36038bf..b5c3405fbe8 100644 --- a/forge-gui/res/cardsfolder/n/neriv_crackling_vanguard.txt +++ b/forge-gui/res/cardsfolder/n/neriv_crackling_vanguard.txt @@ -11,7 +11,7 @@ SVar:TrigExile:DB$ Dig | Defined$ You | DigNum$ X | ChangeNum$ All | Destination SVar:DBEffectYou:DB$ Effect | RememberObjects$ Remembered | StaticAbilities$ STPlay | SubAbility$ DBCleanup | ForgetOnMoved$ Exile | Duration$ Permanent SVar:STPlay:Mode$ Continuous | MayPlay$ True | Affected$ Card.IsRemembered | AffectedZone$ Exile | CheckSVar$ Y | Description$ During any turn you attacked with a commander, you may play those cards. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -SVar:X:Count$DifferentCardNames_Permanent.token+YouCtrl+inZoneBattlefield +SVar:X:Count$Valid Permanent.YouCtrl+token$DifferentCardNames SVar:Y:Count$CreaturesAttackedThisTurn Creature.IsCommander+YouCtrl SVar:HasAttackEffect:TRUE Oracle:Flying,deathtouch\nWhen Neriv enters, create two 1/1 red Goblin creature tokens.\nWhenever Neriv attacks, exile a number of cards from the top of your library equal to the number of differently named tokens you control. During any turn you attacked with a commander, you may play those cards. diff --git a/forge-gui/res/cardsfolder/o/ormos_archive_keeper.txt b/forge-gui/res/cardsfolder/o/ormos_archive_keeper.txt index a8162c859d5..417b4d2919c 100644 --- a/forge-gui/res/cardsfolder/o/ormos_archive_keeper.txt +++ b/forge-gui/res/cardsfolder/o/ormos_archive_keeper.txt @@ -5,6 +5,6 @@ PT:5/5 K:Flying R:Event$ Draw | ActiveZones$ Battlefield | ValidPlayer$ You | IsPresent$ Card.YouOwn | PresentZone$ Library | PresentCompare$ EQ0 | ReplaceWith$ AddCounters | Description$ If you would draw a card while your library has no cards in it, instead put five +1/+1 counters on CARDNAME. SVar:AddCounters:DB$ PutCounter | CounterType$ P1P1 | CounterNum$ 5 | Defined$ Self -A:AB$ Draw | Cost$ 1 U U Discard<3/DifferentNames> | NumCards$ 5 | SpellDescription$ Draw five cards. +A:AB$ Draw | Cost$ 1 U U Discard<3/Card+WithDifferentNames> | NumCards$ 5 | SpellDescription$ Draw five cards. AI:RemoveDeck:All Oracle:Flying\nIf you would draw a card while your library has no cards in it, instead put five +1/+1 counters on Ormos, Archive Keeper.\n{1}{U}{U}, Discard three cards with different names: Draw five cards. diff --git a/forge-gui/res/cardsfolder/s/sandsteppe_war_riders.txt b/forge-gui/res/cardsfolder/s/sandsteppe_war_riders.txt index 29f0206aa2c..05084018acc 100644 --- a/forge-gui/res/cardsfolder/s/sandsteppe_war_riders.txt +++ b/forge-gui/res/cardsfolder/s/sandsteppe_war_riders.txt @@ -5,6 +5,6 @@ PT:4/4 K:Trample T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ At the beginning of combat on your turn, bolster X, where X is the number of differently named artifact tokens you control. (Choose a creature with the least toughness among creatures you control and put X +1/+1 counters on it.) SVar:TrigPutCounter:DB$ PutCounter | CounterType$ P1P1 | CounterNum$ X | Bolster$ True -SVar:X:Count$DifferentCardNames_Artifact.YouCtrl+token+inZoneBattlefield +SVar:X:Count$Valid Artifact.YouCtrl+token$DifferentCardNames DeckHas:Ability$Counters Oracle:Trample\nAt the beginning of combat on your turn, bolster X, where X is the number of differently named artifact tokens you control. (Choose a creature with the least toughness among creatures you control and put X +1/+1 counters on it.) diff --git a/forge-gui/res/cardsfolder/s/scalpelexis.txt b/forge-gui/res/cardsfolder/s/scalpelexis.txt index 050f476d302..e6820f26a0e 100644 --- a/forge-gui/res/cardsfolder/s/scalpelexis.txt +++ b/forge-gui/res/cardsfolder/s/scalpelexis.txt @@ -8,6 +8,6 @@ SVar:TrigExile:DB$ Repeat | RepeatSubAbility$ DBExileCleanup | RepeatCheckSVar$ SVar:DBExileCleanup:DB$ Cleanup | ClearRemembered$ True | SubAbility$ DBExile SVar:DBExile:DB$ Dig | Defined$ TriggeredTarget | DigNum$ 4 | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -SVar:X:Count$DifferentCardNames_Card.IsRemembered +SVar:X:Remembered$DifferentCardNames SVar:Y:Count$RememberedSize Oracle:Flying (This creature can't be blocked except by creatures with flying or reach.)\nWhenever Scalpelexis deals combat damage to a player, that player exiles the top four cards of their library. If two or more of those cards have the same name, repeat this process. diff --git a/forge-gui/res/cardsfolder/s/signal_the_clans.txt b/forge-gui/res/cardsfolder/s/signal_the_clans.txt index d449618dc05..a0a4574f962 100644 --- a/forge-gui/res/cardsfolder/s/signal_the_clans.txt +++ b/forge-gui/res/cardsfolder/s/signal_the_clans.txt @@ -6,6 +6,6 @@ SVar:DBChoose:DB$ ChooseCard | Defined$ You | Amount$ 1 | AtRandom$ True | Choic SVar:DBChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | Defined$ ChosenCard | StackDescription$ None | SubAbility$ DBShuffle | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ3 SVar:DBShuffle:DB$ Shuffle | Defined$ You | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -SVar:X:Count$DifferentCardNames_Creature.IsRemembered +SVar:X:Remembered$DifferentCardNames AI:RemoveDeck:All Oracle:Search your library for three creature cards and reveal them. If you reveal three cards with different names, choose one of them at random and put that card into your hand. Shuffle the rest into your library. diff --git a/forge-gui/res/cardsfolder/s/survey_mechan.txt b/forge-gui/res/cardsfolder/s/survey_mechan.txt index aba0c2c2635..b87e31264cf 100644 --- a/forge-gui/res/cardsfolder/s/survey_mechan.txt +++ b/forge-gui/res/cardsfolder/s/survey_mechan.txt @@ -7,5 +7,5 @@ K:Hexproof A:AB$ DealDamage | Cost$ 10 Sac<1/CARDNAME> | ValidTgts$ Any | NumDmg$ 3 | ReduceCost$ X | SubAbility$ DBDraw | SpellDescription$ It deals 3 damage to any target. Target player draws three cards and gains 3 life. This ability costs {X} less to activate, where X is the number of differently named lands you control. SVar:DBDraw:DB$ Draw | NumCards$ 3 | ValidTgts$ Player | SubAbility$ DBGainLife SVar:DBGainLife:DB$ GainLife | Defined$ ParentTarget | LifeAmount$ 3 -SVar:X:Count$DifferentCardNames_Land.YouCtrl+inZoneBattlefield +SVar:X:Count$Valid Land.YouCtrl$DifferentCardNames Oracle:Flying\nHexproof (This creature can't be the target of spells or abilities your opponents control.)\n{10}, Sacrifice this creature: It deals 3 damage to any target. Target player draws three cards and gains 3 life. This ability costs {X} less to activate, where X is the number of differently named lands you control. diff --git a/forge-gui/res/cardsfolder/s/swine_rebellion.txt b/forge-gui/res/cardsfolder/s/swine_rebellion.txt index c740ec7f736..abb939ffff9 100644 --- a/forge-gui/res/cardsfolder/s/swine_rebellion.txt +++ b/forge-gui/res/cardsfolder/s/swine_rebellion.txt @@ -6,7 +6,7 @@ SVar:DBConjureAll:DB$ MakeCard | Conjure$ True | Names$ First Little Pig,Second SVar:DBConjureTwo:DB$ MakeCard | Conjure$ True | SpellbookName$ the Three Pigs | Spellbook$ First Little Pig,Second Little Pig,Third Little Pig | SpellbookAmount$ 2 | RememberMade$ True | Zone$ Hand | SubAbility$ DBPutBattlefield SVar:DBPutBattlefield:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | ChangeType$ Card.IsRemembered | ChangeNum$ 1 | Mandatory$ True | SelectPrompt$ Select a card to put onto the battlefield | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -SVar:X:Count$DifferentCardNames_Boar.YouCtrl+inRealZoneBattlefield +SVar:X:Count$Valid Boar.YouCtrl$DifferentCardNames DeckHints:Type$Boar DeckHas:Type$Boar Oracle:If you control three or more Boars with different names, conjure each card from the Three Pigs spellbook onto the battlefield.\nIf you control two or fewer Boars with different names, conjure two cards of your choice from the Three Pigs spellbook into your hand, then put one of them onto the battlefield. diff --git a/forge-gui/res/cardsfolder/t/the_necrobloom.txt b/forge-gui/res/cardsfolder/t/the_necrobloom.txt index b615362e816..bc8fc3cf677 100644 --- a/forge-gui/res/cardsfolder/t/the_necrobloom.txt +++ b/forge-gui/res/cardsfolder/t/the_necrobloom.txt @@ -6,7 +6,7 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Land.Y SVar:TrigBranch:DB$ Branch | BranchConditionSVar$ X | BranchConditionSVarCompare$ GE7 | TrueSubAbility$ DBZombie | FalseSubAbility$ DBPlant SVar:DBPlant:DB$ Token | TokenAmount$ 1 | TokenScript$ g_0_1_plant | TokenOwner$ You SVar:DBZombie:DB$ Token | TokenAmount$ 1 | TokenScript$ b_2_2_zombie | TokenOwner$ You -SVar:X:Count$DifferentCardNames_Land.YouCtrl+inZoneBattlefield +SVar:X:Count$Valid Land.YouCtrl$DifferentCardNames S:Mode$ Continuous | AffectedZone$ Graveyard | Affected$ Land.YouOwn | AddKeyword$ Dredge:2 | Description$ Land cards in your graveyard have dredge 2. (You may return a land card from your graveyard to your hand and mill two cards instead of drawing a card.) DeckHas:Ability$Token & Type$Zombie DeckHints:Ability$Mill diff --git a/forge-gui/src/main/java/forge/player/HumanCostDecision.java b/forge-gui/src/main/java/forge/player/HumanCostDecision.java index cab21c22947..b8824798392 100644 --- a/forge-gui/src/main/java/forge/player/HumanCostDecision.java +++ b/forge-gui/src/main/java/forge/player/HumanCostDecision.java @@ -113,7 +113,7 @@ public class HumanCostDecision extends CostDecisionMakerBase { } return PaymentDecision.card(randomSubset); } - if (discardType.equals("DifferentNames")) { + if (discardType.contains("+WithDifferentNames")) { final CardCollection discarded = new CardCollection(); while (c > 0) { final InputSelectCardsFromList inp = new InputSelectCardsFromList(controller, 1, 1, hand, ability); From c1e87334cd55132be94a48c58023f1a47665d398 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Sat, 4 Oct 2025 22:31:47 +0200 Subject: [PATCH 287/355] Some cleanup (#8833) --- .../src/main/java/forge/ai/ability/ChangeZoneAi.java | 8 +++----- .../main/java/forge/ai/ability/CopyPermanentAi.java | 4 ++-- forge-ai/src/main/java/forge/ai/ability/MillAi.java | 12 ++++-------- .../a/avatar_aang_aang_master_of_elements.txt | 1 + forge-gui/res/cardsfolder/c/cogwork_assembler.txt | 2 +- .../res/cardsfolder/c/colossal_badger_dig_deep.txt | 3 ++- forge-gui/res/cardsfolder/d/domri_city_smasher.txt | 2 +- forge-gui/res/cardsfolder/g/grave_strength.txt | 3 ++- forge-gui/res/cardsfolder/h/hate_mirage.txt | 2 +- .../res/cardsfolder/k/kiki_jiki_mirror_breaker.txt | 2 +- forge-gui/res/cardsfolder/r/red_suns_twilight.txt | 2 +- forge-gui/res/cardsfolder/t/the_fire_crystal.txt | 2 +- .../res/cardsfolder/t/the_jolly_balloon_man.txt | 2 +- .../upcoming/jaws_relentless_predator.txt | 2 +- 14 files changed, 22 insertions(+), 25 deletions(-) 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 f964381fa5f..4c922f348e0 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java @@ -101,11 +101,7 @@ public class ChangeZoneAi extends SpellAbilityAi { sa.getHostCard().removeSVar("AIPreferenceOverride"); } - if (aiLogic.equals("BeforeCombat")) { - if (ai.getGame().getPhaseHandler().getPhase().isAfter(PhaseType.COMBAT_BEGIN)) { - return false; - } - } else if (aiLogic.equals("SurpriseBlock")) { + if (aiLogic.equals("SurpriseBlock")) { if (ai.getGame().getPhaseHandler().getPhase().isBefore(PhaseType.COMBAT_DECLARE_ATTACKERS)) { return false; } @@ -765,6 +761,8 @@ public class ChangeZoneAi extends SpellAbilityAi { return ph.getNextTurn().equals(ai) && ph.is(PhaseType.END_OF_TURN); } else if (aiLogic.equals("Main1") && ph.is(PhaseType.MAIN1, ai)) { return true; + } else if (aiLogic.equals("BeforeCombat")) { + return ai.getGame().getPhaseHandler().getPhase().isAfter(PhaseType.COMBAT_BEGIN); } if (sa.isHidden()) { diff --git a/forge-ai/src/main/java/forge/ai/ability/CopyPermanentAi.java b/forge-ai/src/main/java/forge/ai/ability/CopyPermanentAi.java index 779d6a02e15..7fb91ce52d8 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CopyPermanentAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CopyPermanentAi.java @@ -44,7 +44,7 @@ public class CopyPermanentAi extends SpellAbilityAi { // Not at EOT phase return new AiAbilityDecision(0, AiPlayDecision.WaitForEndOfTurn); } - } if ("DuplicatePerms".equals(aiLogic)) { + } else if ("DuplicatePerms".equals(aiLogic)) { final List valid = AbilityUtils.getDefinedCards(source, sa.getParam("Defined"), sa); if (valid.size() < 2) { return new AiAbilityDecision(0, AiPlayDecision.MissingNeededCards); @@ -212,7 +212,7 @@ public class CopyPermanentAi extends SpellAbilityAi { if (mandatory) { return new AiAbilityDecision(100, AiPlayDecision.WillPlay); } else { - return new AiAbilityDecision(0, AiPlayDecision.TargetingFailed); + return new AiAbilityDecision(0, AiPlayDecision.MissingNeededCards); } } } diff --git a/forge-ai/src/main/java/forge/ai/ability/MillAi.java b/forge-ai/src/main/java/forge/ai/ability/MillAi.java index 2f6ae8947a0..4fe634834e0 100644 --- a/forge-ai/src/main/java/forge/ai/ability/MillAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/MillAi.java @@ -24,12 +24,7 @@ public class MillAi extends SpellAbilityAi { @Override protected boolean checkAiLogic(final Player ai, final SpellAbility sa, final String aiLogic) { - PhaseHandler ph = ai.getGame().getPhaseHandler(); - - if (aiLogic.equals("Main1")) { - return !ph.getPhase().isBefore(PhaseType.MAIN2) || sa.hasParam("ActivationPhases") - || ComputerUtil.castSpellInMain1(ai, sa); - } else if (aiLogic.equals("LilianaMill")) { + if (aiLogic.equals("LilianaMill")) { // TODO convert to AICheckSVar // Only mill if a "Raise Dead" target is available, in case of control decks with few creatures return CardLists.filter(ai.getCardsIn(ZoneType.Graveyard), CardPredicates.CREATURES).size() >= 1; @@ -55,9 +50,10 @@ public class MillAi extends SpellAbilityAi { // because they are also potentially useful for combat return ph.is(PhaseType.END_OF_TURN) && ph.getNextTurn().equals(ai); } - return true; + return !ph.getPhase().isBefore(PhaseType.MAIN2) || sa.hasParam("ActivationPhases") + || ComputerUtil.castSpellInMain1(ai, sa); } - + @Override protected AiAbilityDecision checkApiLogic(final Player ai, final SpellAbility sa) { /* diff --git a/forge-gui/res/cardsfolder/a/avatar_aang_aang_master_of_elements.txt b/forge-gui/res/cardsfolder/a/avatar_aang_aang_master_of_elements.txt index 8e4e9a77b46..6fda3cadd20 100644 --- a/forge-gui/res/cardsfolder/a/avatar_aang_aang_master_of_elements.txt +++ b/forge-gui/res/cardsfolder/a/avatar_aang_aang_master_of_elements.txt @@ -8,6 +8,7 @@ T:Mode$ ElementalBend | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerD SVar:TrigDraw:DB$ Draw | SubAbility$ DBTransform SVar:DBTransform:DB$ SetState | Defined$ Self | Mode$ Transform | ConditionCheckSVar$ X SVar:X:Count$AllFourBend.1.0 +AlternateMode:DoubleFaced Oracle:Flying, firebending 2\nWhenever you waterbend, earthbend, firebend, or airbend, draw a card. Then if you've done all four this turn, transform Avatar Aang. ALTERNATE diff --git a/forge-gui/res/cardsfolder/c/cogwork_assembler.txt b/forge-gui/res/cardsfolder/c/cogwork_assembler.txt index 5d60e998b0c..4904c95647a 100644 --- a/forge-gui/res/cardsfolder/c/cogwork_assembler.txt +++ b/forge-gui/res/cardsfolder/c/cogwork_assembler.txt @@ -2,5 +2,5 @@ Name:Cogwork Assembler ManaCost:3 Types:Artifact Creature Assembly-Worker PT:2/3 -A:AB$ CopyPermanent | Cost$ 7 | ValidTgts$ Artifact | TgtPrompt$ Select target artifact. | PumpKeywords$ Haste | AtEOT$ Exile | AILogic$ BeforeCombat | SpellDescription$ Create a token that's a copy of target artifact. That token gains haste. Exile it at the beginning of the next end step. +A:AB$ CopyPermanent | Cost$ 7 | ValidTgts$ Artifact | TgtPrompt$ Select target artifact. | PumpKeywords$ Haste | AtEOT$ Exile | SpellDescription$ Create a token that's a copy of target artifact. That token gains haste. Exile it at the beginning of the next end step. Oracle:{7}: Create a token that's a copy of target artifact. That token gains haste. Exile it at the beginning of the next end step. diff --git a/forge-gui/res/cardsfolder/c/colossal_badger_dig_deep.txt b/forge-gui/res/cardsfolder/c/colossal_badger_dig_deep.txt index 9e645ab3542..73e7e83cb0c 100644 --- a/forge-gui/res/cardsfolder/c/colossal_badger_dig_deep.txt +++ b/forge-gui/res/cardsfolder/c/colossal_badger_dig_deep.txt @@ -13,9 +13,10 @@ ALTERNATE Name:Dig Deep ManaCost:1 G Types:Sorcery Adventure -A:SP$ Mill | NumCards$ 4 | RememberMilled$ True | SubAbility$ DBPutCounter | AILogic$ Main1 | SpellDescription$ Choose target creature. Mill four cards, +A:SP$ Mill | NumCards$ 4 | RememberMilled$ True | SubAbility$ DBPutCounter | SpellDescription$ Choose target creature. Mill four cards, SVar:DBPutCounter:DB$ PutCounter | ValidTgts$ Creature | CounterType$ P1P1 | CounterNum$ X | SubAbility$ DBCleanup | SpellDescription$ then put a +1/+1 counter on that creature for each creature card milled this way. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Remembered$Valid Creature +SVar:PlayMain1:TRUE DeckHas:Ability$Counters Oracle:Choose target creature. Mill four cards, then put a +1/+1 counter on that creature for each creature card milled this way. diff --git a/forge-gui/res/cardsfolder/d/domri_city_smasher.txt b/forge-gui/res/cardsfolder/d/domri_city_smasher.txt index 6248c2c3d9b..f1d605bbcae 100644 --- a/forge-gui/res/cardsfolder/d/domri_city_smasher.txt +++ b/forge-gui/res/cardsfolder/d/domri_city_smasher.txt @@ -2,7 +2,7 @@ Name:Domri, City Smasher ManaCost:4 R G Types:Legendary Planeswalker Domri Loyalty:4 -A:AB$ PumpAll | Cost$ AddCounter<2/LOYALTY> | ValidCards$ Creature.YouCtrl | KW$ Haste | NumAtt$ +1 | NumDef$ +1 | Planeswalker$ True | AILogic$ Main1 | SpellDescription$ Creatures you control get +1/+1 and gain haste until end of turn. +A:AB$ PumpAll | Cost$ AddCounter<2/LOYALTY> | ValidCards$ Creature.YouCtrl | KW$ Haste | NumAtt$ +1 | NumDef$ +1 | Planeswalker$ True | SpellDescription$ Creatures you control get +1/+1 and gain haste until end of turn. A:AB$ DealDamage | Cost$ SubCounter<3/LOYALTY> | Planeswalker$ True | ValidTgts$ Any | NumDmg$ 3 | SpellDescription$ CARDNAME deals 3 damage to any target. A:AB$ PutCounterAll | Cost$ SubCounter<8/LOYALTY> | Planeswalker$ True | Ultimate$ True | ValidCards$ Creature.YouCtrl | CounterType$ P1P1 | CounterNum$ 3 | SubAbility$ DBPumpAll | SpellDescription$ Put three +1/+1 counters on each creature you control. Those creatures gain trample until end of turn. SVar:DBPumpAll:DB$ PumpAll | KW$ Trample | ValidCards$ Creature.YouCtrl diff --git a/forge-gui/res/cardsfolder/g/grave_strength.txt b/forge-gui/res/cardsfolder/g/grave_strength.txt index c21d32cd380..b8dc01cedef 100644 --- a/forge-gui/res/cardsfolder/g/grave_strength.txt +++ b/forge-gui/res/cardsfolder/g/grave_strength.txt @@ -1,8 +1,9 @@ Name:Grave Strength ManaCost:1 B Types:Sorcery -A:SP$ Mill | NumCards$ 3 | Defined$ You | SubAbility$ DBPutCounter | AILogic$ Main1 | SpellDescription$ Choose target creature. Mill three cards, then put a +1/+1 counter on that creature for each creature card in your graveyard. +A:SP$ Mill | NumCards$ 3 | Defined$ You | SubAbility$ DBPutCounter | SpellDescription$ Choose target creature. Mill three cards, then put a +1/+1 counter on that creature for each creature card in your graveyard. SVar:DBPutCounter:DB$ PutCounter | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ P1P1 | CounterNum$ X SVar:X:Count$ValidGraveyard Creature.YouOwn DeckHas:Ability$Graveyard +SVar:PlayMain1:TRUE Oracle:Choose target creature. Mill three cards, then put a +1/+1 counter on that creature for each creature card in your graveyard. diff --git a/forge-gui/res/cardsfolder/h/hate_mirage.txt b/forge-gui/res/cardsfolder/h/hate_mirage.txt index c5566f0e471..6d53d5b4eac 100644 --- a/forge-gui/res/cardsfolder/h/hate_mirage.txt +++ b/forge-gui/res/cardsfolder/h/hate_mirage.txt @@ -1,5 +1,5 @@ Name:Hate Mirage ManaCost:3 R Types:Sorcery -A:SP$ CopyPermanent | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Select up to two target creatures you don't control | TargetMin$ 0 | TargetMax$ 2 | PumpKeywords$ Haste | AtEOT$ Exile | AILogic$ BeforeCombat | SpellDescription$ Choose up to two target creatures you don't control. For each of those creatures, create a token that's a copy of that creature. Those tokens gain haste. Exile them at the beginning of the next end step. +A:SP$ CopyPermanent | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Select up to two target creatures you don't control | TargetMin$ 0 | TargetMax$ 2 | PumpKeywords$ Haste | AtEOT$ Exile | SpellDescription$ Choose up to two target creatures you don't control. For each of those creatures, create a token that's a copy of that creature. Those tokens gain haste. Exile them at the beginning of the next end step. Oracle:Choose up to two target creatures you don't control. For each of those creatures, create a token that's a copy of that creature. Those tokens gain haste. Exile them at the beginning of the next end step. diff --git a/forge-gui/res/cardsfolder/k/kiki_jiki_mirror_breaker.txt b/forge-gui/res/cardsfolder/k/kiki_jiki_mirror_breaker.txt index 13fd2d5e3d4..0836fe77007 100644 --- a/forge-gui/res/cardsfolder/k/kiki_jiki_mirror_breaker.txt +++ b/forge-gui/res/cardsfolder/k/kiki_jiki_mirror_breaker.txt @@ -3,6 +3,6 @@ ManaCost:2 R R R Types:Legendary Creature Goblin Shaman PT:2/2 K:Haste -A:AB$ CopyPermanent | Cost$ T | ValidTgts$ Creature.nonLegendary+YouCtrl | TgtPrompt$ Select target nonlegendary creature you control | AddKeywords$ Haste | AtEOT$ Sacrifice | AILogic$ BeforeCombat | SpellDescription$ Create a token that's a copy of target nonlegendary creature you control, except it has haste. Sacrifice it at the beginning of the next end step. +A:AB$ CopyPermanent | Cost$ T | ValidTgts$ Creature.nonLegendary+YouCtrl | TgtPrompt$ Select target nonlegendary creature you control | AddKeywords$ Haste | AtEOT$ Sacrifice | SpellDescription$ Create a token that's a copy of target nonlegendary creature you control, except it has haste. Sacrifice it at the beginning of the next end step. SVar:UntapMe:True Oracle:Haste\n{T}: Create a token that's a copy of target nonlegendary creature you control, except it has haste. Sacrifice it at the beginning of the next end step. diff --git a/forge-gui/res/cardsfolder/r/red_suns_twilight.txt b/forge-gui/res/cardsfolder/r/red_suns_twilight.txt index 56c289a9810..464b7c64538 100644 --- a/forge-gui/res/cardsfolder/r/red_suns_twilight.txt +++ b/forge-gui/res/cardsfolder/r/red_suns_twilight.txt @@ -2,7 +2,7 @@ Name:Red Sun's Twilight ManaCost:X R R Types:Sorcery A:SP$ Destroy | TargetMin$ 0 | TargetMax$ X | ValidTgts$ Artifact | TgtPrompt$ Select X target artifacts | RememberDestroyed$ True | SubAbility$ DBCopy | SpellDescription$ Destroy up to X target artifacts. -SVar:DBCopy:DB$ CopyPermanent | Defined$ Remembered | ConditionCheckSVar$ X | ConditionSVarCompare$ GE5 | PumpKeywords$ Haste | SubAbility$ DBCleanup | AtEOT$ Exile | AILogic$ BeforeCombat | SpellDescription$ If X is 5 or more, for each artifact destroyed this way, create a token that's a copy of it. Those tokens gain haste. Exile them at the beginning of the next end step. +SVar:DBCopy:DB$ CopyPermanent | Defined$ Remembered | ConditionCheckSVar$ X | ConditionSVarCompare$ GE5 | PumpKeywords$ Haste | SubAbility$ DBCleanup | AtEOT$ Exile | SpellDescription$ If X is 5 or more, for each artifact destroyed this way, create a token that's a copy of it. Those tokens gain haste. Exile them at the beginning of the next end step. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Count$xPaid DeckHas:Ability$Token diff --git a/forge-gui/res/cardsfolder/t/the_fire_crystal.txt b/forge-gui/res/cardsfolder/t/the_fire_crystal.txt index 07edfa20504..45dac1ddaaf 100644 --- a/forge-gui/res/cardsfolder/t/the_fire_crystal.txt +++ b/forge-gui/res/cardsfolder/t/the_fire_crystal.txt @@ -3,6 +3,6 @@ ManaCost:2 R R Types:Legendary Artifact S:Mode$ ReduceCost | ValidCard$ Card.Red | Type$ Spell | Activator$ You | Amount$ 1 | Description$ Red spells you cast cost {1} less to cast. S:Mode$ Continuous | Affected$ Creature.YouCtrl | AddKeyword$ Haste | Description$ Creatures you control have haste. -A:AB$ CopyPermanent | Cost$ 4 R R T | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | AtEOT$ Sacrifice | AILogic$ BeforeCombat | SpellDescription$ Create a token that's a copy of target creature you control. Sacrifice it at the beginning of the next end step. +A:AB$ CopyPermanent | Cost$ 4 R R T | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | AtEOT$ Sacrifice | SpellDescription$ Create a token that's a copy of target creature you control. Sacrifice it at the beginning of the next end step. SVar:PlayMain1:TRUE Oracle:Red spells you cast cost {1} less to cast.\nCreatures you control have haste.\n{4}{R}{R}, {T}: Create a token that's a copy of target creature you control. Sacrifice it at the beginning of the next end step. diff --git a/forge-gui/res/cardsfolder/t/the_jolly_balloon_man.txt b/forge-gui/res/cardsfolder/t/the_jolly_balloon_man.txt index f5e3c3dbd97..3be7a9e9855 100644 --- a/forge-gui/res/cardsfolder/t/the_jolly_balloon_man.txt +++ b/forge-gui/res/cardsfolder/t/the_jolly_balloon_man.txt @@ -3,6 +3,6 @@ ManaCost:1 R W Types:Legendary Creature Human Clown PT:1/4 K:Haste -A:AB$ CopyPermanent | Cost$ 1 T | ValidTgts$ Creature.Other+YouCtrl | TgtPrompt$ Select another target creature you control | SetPower$ 1 | SetToughness$ 1 | AddTypes$ Creature & Balloon | AddColors$ Red | AddKeywords$ Flying & Haste | SorcerySpeed$ True | AtEOT$ Sacrifice | AILogic$ BeforeCombat | SpellDescription$ Create a token that's a copy of another target creature you control, except it's a 1/1 red Balloon creature in addition to its other colors and types and it has flying and haste. Sacrifice it at the beginning of the next end step. Activate only as a sorcery. +A:AB$ CopyPermanent | Cost$ 1 T | ValidTgts$ Creature.Other+YouCtrl | TgtPrompt$ Select another target creature you control | SetPower$ 1 | SetToughness$ 1 | AddTypes$ Creature & Balloon | AddColors$ Red | AddKeywords$ Flying & Haste | SorcerySpeed$ True | AtEOT$ Sacrifice | SpellDescription$ Create a token that's a copy of another target creature you control, except it's a 1/1 red Balloon creature in addition to its other colors and types and it has flying and haste. Sacrifice it at the beginning of the next end step. Activate only as a sorcery. SVar:UntapMe:True Oracle:Haste\n{1}, {T}: Create a token that's a copy of another target creature you control, except it's a 1/1 red Balloon creature in addition to its other colors and types and it has flying and haste. Sacrifice it at the beginning of the next end step. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/upcoming/jaws_relentless_predator.txt b/forge-gui/res/cardsfolder/upcoming/jaws_relentless_predator.txt index f54416fbd56..e0343194db1 100644 --- a/forge-gui/res/cardsfolder/upcoming/jaws_relentless_predator.txt +++ b/forge-gui/res/cardsfolder/upcoming/jaws_relentless_predator.txt @@ -4,7 +4,7 @@ Types:Legendary Creature Shark PT:5/5 K:Trample K:Haste -T:Mode$ DamageDone | ValidSource$ Creature.YouCtrl | ValidTarget$ Player | CombatDamage$ True | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever NICKNAME deals combat damage to a player, create that many Blood tokens. +T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever NICKNAME deals combat damage to a player, create that many Blood tokens. SVar:TrigToken:DB$ Token | TokenAmount$ X | TokenScript$ c_a_blood_draw | TokenOwner$ You SVar:X:TriggerCount$DamageAmount T:Mode$ Sacrificed | ValidCard$ Artifact.nonCreature | Execute$ TrigDamage | TriggerZones$ Battlefield | TriggerDescription$ Whenever a noncreature artifact is sacrificed or destroyed, NICKNAME deals 1 damage to each opponent. From 8cd386b654f4ef07c2268c2c199a1522f0b2a1d3 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Sun, 5 Oct 2025 08:39:51 +0000 Subject: [PATCH 288/355] Update ChangeZoneAi.java --- forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 4c922f348e0..590c4285a96 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java @@ -762,7 +762,7 @@ public class ChangeZoneAi extends SpellAbilityAi { } else if (aiLogic.equals("Main1") && ph.is(PhaseType.MAIN1, ai)) { return true; } else if (aiLogic.equals("BeforeCombat")) { - return ai.getGame().getPhaseHandler().getPhase().isAfter(PhaseType.COMBAT_BEGIN); + return !ai.getGame().getPhaseHandler().getPhase().isAfter(PhaseType.COMBAT_BEGIN); } if (sa.isHidden()) { From 4cef049a1d93adb0aea59bc61c2c4f7f2297edf2 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Sun, 5 Oct 2025 11:27:21 +0200 Subject: [PATCH 289/355] AbilityUtils: move SumPower to handlePaid (#8838) * AbilityUtils: move SumPower to handlePaid * Replace SumPower with CardPower * Replace SumToughness with CardToughness --- .../main/java/forge/game/ability/AbilityUtils.java | 11 ----------- forge-gui/res/cardsfolder/a/adipose_offspring.txt | 2 +- forge-gui/res/cardsfolder/a/atarka_beastbreaker.txt | 2 +- forge-gui/res/cardsfolder/a/atarka_pummeler.txt | 2 +- forge-gui/res/cardsfolder/b/battle_cry_goblin.txt | 2 +- forge-gui/res/cardsfolder/b/betor_kin_to_all.txt | 2 +- forge-gui/res/cardsfolder/b/bow_to_my_command.txt | 2 +- .../res/cardsfolder/c/case_of_the_trampled_garden.txt | 2 +- forge-gui/res/cardsfolder/c/circle_of_elders.txt | 2 +- forge-gui/res/cardsfolder/c/crater_elemental.txt | 2 +- forge-gui/res/cardsfolder/d/dragon_scarred_bear.txt | 2 +- forge-gui/res/cardsfolder/d/dragon_whisperer.txt | 2 +- forge-gui/res/cardsfolder/f/finneas_ace_archer.txt | 2 +- forge-gui/res/cardsfolder/g/ghalta_primal_hunger.txt | 2 +- forge-gui/res/cardsfolder/g/gimlis_reckless_might.txt | 2 +- forge-gui/res/cardsfolder/g/glade_watcher.txt | 2 +- forge-gui/res/cardsfolder/g/gnoll_hunter.txt | 2 +- forge-gui/res/cardsfolder/h/hobgoblin_captain.txt | 2 +- forge-gui/res/cardsfolder/i/intrepid_outlander.txt | 2 +- .../res/cardsfolder/k/klauth_unrivaled_ancient.txt | 2 +- forge-gui/res/cardsfolder/l/loxodon_lifechanter.txt | 2 +- forge-gui/res/cardsfolder/l/lurking_arynx.txt | 2 +- forge-gui/res/cardsfolder/m/martial_coup.txt | 4 ++-- forge-gui/res/cardsfolder/m/minion_of_the_mighty.txt | 2 +- forge-gui/res/cardsfolder/m/mosswort_bridge.txt | 2 +- forge-gui/res/cardsfolder/o/owlbear_shepherd.txt | 2 +- forge-gui/res/cardsfolder/p/phyrexian_dreadnought.txt | 2 +- forge-gui/res/cardsfolder/s/sabertooth_outrider.txt | 2 +- .../res/cardsfolder/s/shaman_of_forgotten_ways.txt | 2 +- forge-gui/res/cardsfolder/s/stampeding_elk_herd.txt | 2 +- .../res/cardsfolder/s/surrak_the_hunt_caller.txt | 2 +- .../res/cardsfolder/t/targ_nar_demon_fang_gnoll.txt | 2 +- .../res/cardsfolder/t/the_pride_of_hull_clade.txt | 2 +- forge-gui/res/cardsfolder/t/tiger_tribe_hunter.txt | 2 +- forge-gui/res/cardsfolder/t/towering_titan.txt | 2 +- forge-gui/res/cardsfolder/u/ugins_mastery.txt | 2 +- ..._magnus_tactician_ultra_magnus_armored_carrier.txt | 2 +- forge-gui/res/cardsfolder/v/volcanic_salvo.txt | 2 +- forge-gui/res/cardsfolder/v/vulpine_harvester.txt | 2 +- forge-gui/res/cardsfolder/w/werewolf_pack_leader.txt | 2 +- 40 files changed, 40 insertions(+), 51 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index a7a4437854f..6c856609ec9 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -2902,13 +2902,6 @@ public class AbilityUtils { } // TODO move below to handlePaid - if (sq[0].startsWith("SumPower")) { - final String[] restrictions = l[0].split("_"); - int sumPower = game.getCardsIn(ZoneType.Battlefield).stream() - .filter(CardPredicates.restriction(restrictions[1], player, c, ctb)) - .mapToInt(Card::getNetPower).sum(); - return doXMath(sumPower, expr, c, ctb); - } if (sq[0].startsWith("DifferentPower_")) { final String restriction = l[0].substring(15); final int uniquePowers = (int) game.getCardsIn(ZoneType.Battlefield).stream() @@ -3732,10 +3725,6 @@ public class AbilityUtils { return CardLists.getTotalPower(paidList, ctb); } - if (string.startsWith("SumToughness")) { - return Aggregates.sum(paidList, Card::getNetToughness); - } - if (string.startsWith("GreatestCMC")) { return Aggregates.max(paidList, Card::getCMC); } diff --git a/forge-gui/res/cardsfolder/a/adipose_offspring.txt b/forge-gui/res/cardsfolder/a/adipose_offspring.txt index 700226388f9..bc141a219db 100644 --- a/forge-gui/res/cardsfolder/a/adipose_offspring.txt +++ b/forge-gui/res/cardsfolder/a/adipose_offspring.txt @@ -6,6 +6,6 @@ K:Emerge:5 W T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters, create a 2/2 white Alien creature token. If CARDNAME's emerge cost was paid, instead create X of those tokens, where X is the sacrificed creature's toughness. SVar:TrigToken:DB$ Token | TokenAmount$ N | TokenScript$ w_2_2_alien | TokenOwner$ You SVar:N:Count$Emerged.T.1 -SVar:T:Emerged$SumToughness +SVar:T:Emerged$CardToughness DeckHas:Ability$Token Oracle:Emerge {5}{W} (You may cast this spell by sacrificing a creature and paying the emerge cost reduced by that creature's mana value.)\nWhen Adipose Offspring enters, create a 2/2 white Alien creature token. If Adipose Offspring's emerge cost was paid, instead create X of those tokens, where X is the sacrificed creature's toughness. diff --git a/forge-gui/res/cardsfolder/a/atarka_beastbreaker.txt b/forge-gui/res/cardsfolder/a/atarka_beastbreaker.txt index 64d658a096c..9208d1f2716 100644 --- a/forge-gui/res/cardsfolder/a/atarka_beastbreaker.txt +++ b/forge-gui/res/cardsfolder/a/atarka_beastbreaker.txt @@ -3,5 +3,5 @@ ManaCost:1 G Types:Creature Human Warrior PT:2/2 A:AB$ Pump | Cost$ 4 G | Defined$ Self | NumAtt$ +4 | NumDef$ +4 | CheckSVar$ FormidableTest | SVarCompare$ GE8 | PrecostDesc$ Formidable — | SpellDescription$ CARDNAME gets +4/+4 until end of turn. Activate only if creatures you control have total power 8 or greater. -SVar:FormidableTest:Count$SumPower_Creature.YouCtrl +SVar:FormidableTest:Count$Valid Creature.YouCtrl$CardPower Oracle:Formidable — {4}{G}: Atarka Beastbreaker gets +4/+4 until end of turn. Activate only if creatures you control have total power 8 or greater. diff --git a/forge-gui/res/cardsfolder/a/atarka_pummeler.txt b/forge-gui/res/cardsfolder/a/atarka_pummeler.txt index a8101f9279a..f2af1db0584 100644 --- a/forge-gui/res/cardsfolder/a/atarka_pummeler.txt +++ b/forge-gui/res/cardsfolder/a/atarka_pummeler.txt @@ -3,5 +3,5 @@ ManaCost:4 R Types:Creature Ogre Warrior PT:4/5 A:AB$ PumpAll | Cost$ 3 R R | ValidCards$ Creature.YouCtrl | KW$ Menace | CheckSVar$ FormidableTest | SVarCompare$ GE8 | PrecostDesc$ Formidable — | SpellDescription$ Creatures you control gain menace until end of turn. Activate only if creatures you control have total power 8 or greater. -SVar:FormidableTest:Count$SumPower_Creature.YouCtrl +SVar:FormidableTest:Count$Valid Creature.YouCtrl$CardPower Oracle:Formidable — {3}{R}{R}: Creatures you control gain menace until end of turn. Activate only if creatures you control have total power 8 or greater. (They can't be blocked except by two or more creatures.) diff --git a/forge-gui/res/cardsfolder/b/battle_cry_goblin.txt b/forge-gui/res/cardsfolder/b/battle_cry_goblin.txt index 787b97c7d6a..2ad13695736 100644 --- a/forge-gui/res/cardsfolder/b/battle_cry_goblin.txt +++ b/forge-gui/res/cardsfolder/b/battle_cry_goblin.txt @@ -5,6 +5,6 @@ PT:2/2 A:AB$ PumpAll | Cost$ 1 R | ValidCards$ Creature.Goblin+YouCtrl | NumAtt$ +1 | KW$ Haste | SpellDescription$ Goblins you control get +1/+0 and gain haste until end of turn. T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigToken | TriggerZones$ Battlefield | CheckSVar$ PackTactics | SVarCompare$ GE6 | NoResolvingCheck$ True | TriggerDescription$ Pack tactics — Whenever CARDNAME attacks, if you attacked with creatures with total power 6 or greater this combat, create a 1/1 red Goblin creature token that's tapped and attacking. SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ r_1_1_goblin | TokenOwner$ You | TokenTapped$ True | TokenAttacking$ True -SVar:PackTactics:Count$SumPower_Creature.attacking +SVar:PackTactics:Count$Valid Creature.attacking$CardPower DeckHas:Ability$Token Oracle:{1}{R}: Goblins you control get +1/+0 and gain haste until end of turn.\nPack tactics — Whenever Battle Cry Goblin attacks, if you attacked with creatures with total power 6 or greater this combat, create a 1/1 red Goblin creature token that's tapped and attacking. diff --git a/forge-gui/res/cardsfolder/b/betor_kin_to_all.txt b/forge-gui/res/cardsfolder/b/betor_kin_to_all.txt index 9eba4f8c722..aac139ffbf1 100644 --- a/forge-gui/res/cardsfolder/b/betor_kin_to_all.txt +++ b/forge-gui/res/cardsfolder/b/betor_kin_to_all.txt @@ -9,5 +9,5 @@ SVar:DBUntapAll:DB$ UntapAll | ValidCards$ Creature.YouCtrl | ConditionCheckSVar SVar:RepeatLoseLife:DB$ RepeatEach | RepeatPlayers$ Opponent | RepeatSubAbility$ DBLoseLife | ConditionCheckSVar$ X | ConditionSVarCompare$ GE40 SVar:DBLoseLife:DB$ LoseLife | Defined$ Player.IsRemembered | LifeAmount$ HalfUp SVar:HalfUp:PlayerCountRemembered$LifeTotal/HalfUp -SVar:X:Count$Valid Creature.YouCtrl$SumToughness +SVar:X:Count$Valid Creature.YouCtrl$CardToughness Oracle:Flying\nAt the beginning of your end step, if creatures you control have total toughness 10 or greater, draw a card. Then if creatures you control have total toughness 20 or greater, untap each creature you control. Then if creatures you control have total toughness 40 or greater, each opponent loses half their life, rounded up. diff --git a/forge-gui/res/cardsfolder/b/bow_to_my_command.txt b/forge-gui/res/cardsfolder/b/bow_to_my_command.txt index 9df772014fc..ed1a944a9a9 100644 --- a/forge-gui/res/cardsfolder/b/bow_to_my_command.txt +++ b/forge-gui/res/cardsfolder/b/bow_to_my_command.txt @@ -16,5 +16,5 @@ SVar:AbandonSelf:DB$ Abandon | SubAbility$ DBCleanup | ConditionCheckSVar$ Tappe T:Mode$ Abandoned | ValidCard$ Card.Self | Execute$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenCard$ True SVar:NumCreatures:Count$Valid Creature.RememberedPlayerCtrl -SVar:TappedCreaturePower:Count$SumPower_Card.IsRemembered +SVar:TappedCreaturePower:Remembered$CardPower Oracle:(An ongoing scheme remains face up until it's abandoned.)\nAs you set this scheme in motion, choose an opponent.\nCreatures the chosen player controls can't attack you or planeswalkers you control.\nAt the beginning of your opponents' end step, they may tap any number of untapped creatures they control with total power 8 or greater. If they do, abandon this scheme. diff --git a/forge-gui/res/cardsfolder/c/case_of_the_trampled_garden.txt b/forge-gui/res/cardsfolder/c/case_of_the_trampled_garden.txt index 0d984f81a28..eeebb69b0ca 100644 --- a/forge-gui/res/cardsfolder/c/case_of_the_trampled_garden.txt +++ b/forge-gui/res/cardsfolder/c/case_of_the_trampled_garden.txt @@ -8,6 +8,6 @@ SVar:TrigSolve:DB$ AlterAttribute | Defined$ Self | Attributes$ Solved T:Mode$ AttackersDeclared | IsPresent$ Card.Self+IsSolved | AttackingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigCounterAttacker | TriggerDescription$ Solved — Whenever you attack, put a +1/+1 counter on target attacking creature. It gains trample until end of turn. SVar:TrigCounterAttacker:DB$ PutCounter | ValidTgts$ Creature.attacking | TgtPrompt$ Select target attacking creature | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBPump SVar:DBPump:DB$ Pump | Defined$ Targeted | KW$ Trample -SVar:X:Count$SumPower_Creature.YouCtrl +SVar:X:Count$Valid Creature.YouCtrl$CardPower DeckHas:Ability$Counters Oracle:When this Case enters, distribute two +1/+1 counters among one or two target creatures you control.\nTo solve — Creatures you control have total power 8 or greater. (If unsolved, solve at the beginning of your end step.)\nSolved — Whenever you attack, put a +1/+1 counter on target attacking creature. It gains trample until end of turn. diff --git a/forge-gui/res/cardsfolder/c/circle_of_elders.txt b/forge-gui/res/cardsfolder/c/circle_of_elders.txt index 9ba44f4ae35..9b82eb7f732 100644 --- a/forge-gui/res/cardsfolder/c/circle_of_elders.txt +++ b/forge-gui/res/cardsfolder/c/circle_of_elders.txt @@ -4,5 +4,5 @@ Types:Creature Human Shaman PT:2/4 K:Vigilance A:AB$ Mana | Cost$ T | Produced$ C | Amount$ 3 | CheckSVar$ FormidableTest | SVarCompare$ GE8 | PrecostDesc$ Formidable — | SpellDescription$ Add {C}{C}{C}. Activate only if creatures you control have total power 8 or greater. -SVar:FormidableTest:Count$SumPower_Creature.YouCtrl +SVar:FormidableTest:Count$Valid Creature.YouCtrl$CardPower Oracle:Vigilance\nFormidable — {T}: Add {C}{C}{C}. Activate only if creatures you control have total power 8 or greater. diff --git a/forge-gui/res/cardsfolder/c/crater_elemental.txt b/forge-gui/res/cardsfolder/c/crater_elemental.txt index 9a505f7f568..23b37c1d934 100644 --- a/forge-gui/res/cardsfolder/c/crater_elemental.txt +++ b/forge-gui/res/cardsfolder/c/crater_elemental.txt @@ -4,7 +4,7 @@ Types:Creature Elemental PT:0/6 A:AB$ DealDamage | Cost$ R T Sac<1/CARDNAME> | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 4 | SpellDescription$ It deals 4 damage to target creature. A:AB$ Animate | Cost$ 2 R | Defined$ Self | Power$ 8 | CheckSVar$ FormidableTest | SVarCompare$ GE8 | PrecostDesc$ Formidable — | SpellDescription$ CARDNAME has base power 8 until end of turn. Activate only if creatures you control have total power 8 or greater. -SVar:FormidableTest:Count$SumPower_Creature.YouCtrl +SVar:FormidableTest:Count$Valid Creature.YouCtrl$CardPower AI:RemoveDeck:All DeckHas:Ability$Sacrifice Oracle:{R}, {T}, Sacrifice Crater Elemental: It deals 4 damage to target creature.\nFormidable — {2}{R}: Crater Elemental has base power 8 until end of turn. Activate only if creatures you control have total power 8 or greater. diff --git a/forge-gui/res/cardsfolder/d/dragon_scarred_bear.txt b/forge-gui/res/cardsfolder/d/dragon_scarred_bear.txt index 93285bc960f..f955ecd30c1 100644 --- a/forge-gui/res/cardsfolder/d/dragon_scarred_bear.txt +++ b/forge-gui/res/cardsfolder/d/dragon_scarred_bear.txt @@ -3,5 +3,5 @@ ManaCost:2 G Types:Creature Bear PT:3/2 A:AB$ Regenerate | Cost$ 1 G | PrecostDesc$ Formidable — | CheckSVar$ FormidableTest | SVarCompare$ GE8 | SpellDescription$ Regenerate CARDNAME. Activate only if creatures you control have total power 8 or greater. -SVar:FormidableTest:Count$SumPower_Creature.YouCtrl +SVar:FormidableTest:Count$Valid Creature.YouCtrl$CardPower Oracle:Formidable — {1}{G}: Regenerate Dragon-Scarred Bear. Activate only if creatures you control have total power 8 or greater. diff --git a/forge-gui/res/cardsfolder/d/dragon_whisperer.txt b/forge-gui/res/cardsfolder/d/dragon_whisperer.txt index a1417ac2adb..cf987d3a42d 100644 --- a/forge-gui/res/cardsfolder/d/dragon_whisperer.txt +++ b/forge-gui/res/cardsfolder/d/dragon_whisperer.txt @@ -5,7 +5,7 @@ PT:2/2 A:AB$ Pump | Cost$ R | KW$ Flying | Defined$ Self | SpellDescription$ CARDNAME gains flying until end of turn. A:AB$ Pump | Cost$ 1 R | Defined$ Self | NumAtt$ +1 | SpellDescription$ CARDNAME gets +1/+0 until end of turn. A:AB$ Token | Cost$ 4 R R | TokenOwner$ You | TokenAmount$ 1 | TokenScript$ r_4_4_dragon_flying | CheckSVar$ FormidableTest | SVarCompare$ GE8 | PrecostDesc$ Formidable — | SpellDescription$ Create a 4/4 red Dragon creature token with flying. Activate only if creatures you control have total power 8 or greater. -SVar:FormidableTest:Count$SumPower_Creature.YouCtrl +SVar:FormidableTest:Count$Valid Creature.YouCtrl$CardPower DeckHas:Ability$Token DeckHints:Type$Dragon Oracle:{R}: Dragon Whisperer gains flying until end of turn.\n{1}{R}: Dragon Whisperer gets +1/+0 until end of turn.\nFormidable — {4}{R}{R}: Create a 4/4 red Dragon creature token with flying. Activate only if creatures you control have total power 8 or greater. diff --git a/forge-gui/res/cardsfolder/f/finneas_ace_archer.txt b/forge-gui/res/cardsfolder/f/finneas_ace_archer.txt index 89a2a7a1788..483b5239bc4 100644 --- a/forge-gui/res/cardsfolder/f/finneas_ace_archer.txt +++ b/forge-gui/res/cardsfolder/f/finneas_ace_archer.txt @@ -7,5 +7,5 @@ K:Reach T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPutCounterAll | TriggerDescription$ Whenever CARDNAME attacks, put a +1/+1 counter on each other creature you control that's a token or a Rabbit. Then if creatures you control have total power 10 or greater, draw a card. SVar:TrigPutCounterAll:DB$ PutCounterAll | ValidCards$ Creature.YouCtrl+StrictlyOther+token,Creature.YouCtrl+StrictlyOther+Rabbit | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBDraw SVar:DBDraw:DB$ Draw | ConditionCheckSVar$ X | ConditionSVarCompare$ GE10 -SVar:X:Count$SumPower_Creature.YouCtrl +SVar:X:Count$Valid Creature.YouCtrl$CardPower Oracle:Vigilance, reach\nWhenever Finneas, Ace Archer attacks, put a +1/+1 counter on each other creature you control that's a token or a Rabbit. Then if creatures you control have total power 10 or greater, draw a card. diff --git a/forge-gui/res/cardsfolder/g/ghalta_primal_hunger.txt b/forge-gui/res/cardsfolder/g/ghalta_primal_hunger.txt index 87a39b29bcd..1f60b409986 100644 --- a/forge-gui/res/cardsfolder/g/ghalta_primal_hunger.txt +++ b/forge-gui/res/cardsfolder/g/ghalta_primal_hunger.txt @@ -4,5 +4,5 @@ Types:Legendary Creature Elder Dinosaur PT:12/12 K:Trample S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ X | EffectZone$ All | Description$ This spell costs {X} less to cast, where X is the total power of creatures you control. -SVar:X:Count$SumPower_Creature.YouCtrl +SVar:X:Count$Valid Creature.YouCtrl$CardPower Oracle:This spell costs {X} less to cast, where X is the total power of creatures you control.\nTrample diff --git a/forge-gui/res/cardsfolder/g/gimlis_reckless_might.txt b/forge-gui/res/cardsfolder/g/gimlis_reckless_might.txt index 3d0b1c5fbc5..371f1e87d96 100644 --- a/forge-gui/res/cardsfolder/g/gimlis_reckless_might.txt +++ b/forge-gui/res/cardsfolder/g/gimlis_reckless_might.txt @@ -5,7 +5,7 @@ S:Mode$ Continuous | Affected$ Creature.YouCtrl | AddKeyword$ Haste | Descriptio T:Mode$ AttackersDeclared | AttackingPlayer$ You | TriggerZones$ Battlefield | CheckSVar$ X | SVarCompare$ GE8 | Execute$ TrigFight | TriggerDescription$ Formidable — Whenever you attack, if creatures you control have total power 8 or greater, target attacking creature you control fights up to one target creature you don't control. SVar:TrigFight:DB$ Pump | ValidTgts$ Creature.YouCtrl+attacking | AILogic$ Fight | TgtPrompt$ Select target attacking creature you control | SubAbility$ DBFight SVar:DBFight:DB$ Fight | Defined$ ParentTarget | ValidTgts$ Creature.YouDontCtrl | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one target creature you don't control -SVar:X:Count$SumPower_Creature.YouCtrl +SVar:X:Count$Valid Creature.YouCtrl$CardPower SVar:BuffedBy:Creature SVar:NonStackingEffect:True SVar:PlayMain1:TRUE diff --git a/forge-gui/res/cardsfolder/g/glade_watcher.txt b/forge-gui/res/cardsfolder/g/glade_watcher.txt index a657890ed4d..322c8000ff4 100644 --- a/forge-gui/res/cardsfolder/g/glade_watcher.txt +++ b/forge-gui/res/cardsfolder/g/glade_watcher.txt @@ -5,5 +5,5 @@ PT:3/3 K:Defender A:AB$ Effect | Cost$ G | StaticAbilities$ CanAttack | CheckSVar$ FormidableTest | SVarCompare$ GE8 | PrecostDesc$ Formidable — | SpellDescription$ CARDNAME can attack this turn as though it didn't have defender. Activate only if creatures you control have total power 8 or greater. SVar:CanAttack:Mode$ CanAttackDefender | ValidCard$ Card.EffectSource | Description$ EFFECTSOURCE can attack this turn as though it didn't have defender. -SVar:FormidableTest:Count$SumPower_Creature.YouCtrl +SVar:FormidableTest:Count$Valid Creature.YouCtrl$CardPower Oracle:Defender\nFormidable — {G}: Glade Watcher can attack this turn as though it didn't have defender. Activate only if creatures you control have total power 8 or greater. diff --git a/forge-gui/res/cardsfolder/g/gnoll_hunter.txt b/forge-gui/res/cardsfolder/g/gnoll_hunter.txt index a452f8ba51d..a8ffd3ef220 100644 --- a/forge-gui/res/cardsfolder/g/gnoll_hunter.txt +++ b/forge-gui/res/cardsfolder/g/gnoll_hunter.txt @@ -4,6 +4,6 @@ Types:Creature Gnoll PT:2/2 T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPutCounter | TriggerZones$ Battlefield | CheckSVar$ PackTactics | SVarCompare$ GE6 | NoResolvingCheck$ True | TriggerDescription$ Pack tactics — Whenever CARDNAME attacks, if you attacked with creatures with total power 6 or greater this combat, put a +1/+1 counter on CARDNAME. SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 -SVar:PackTactics:Count$SumPower_Creature.attacking +SVar:PackTactics:Count$Valid Creature.attacking$CardPower DeckHas:Ability$Counters Oracle:Pack tactics — Whenever Gnoll Hunter attacks, if you attacked with creatures with total power 6 or greater this combat, put a +1/+1 counter on Gnoll Hunter. diff --git a/forge-gui/res/cardsfolder/h/hobgoblin_captain.txt b/forge-gui/res/cardsfolder/h/hobgoblin_captain.txt index cf75d4df78f..ad4e5764345 100644 --- a/forge-gui/res/cardsfolder/h/hobgoblin_captain.txt +++ b/forge-gui/res/cardsfolder/h/hobgoblin_captain.txt @@ -4,5 +4,5 @@ Types:Creature Goblin Barbarian PT:3/1 T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPump | TriggerZones$ Battlefield | CheckSVar$ PackTactics | SVarCompare$ GE6 | NoResolvingCheck$ True | TriggerDescription$ Pack tactics — Whenever CARDNAME attacks, if you attacked with creatures with total power 6 or greater this combat, CARDNAME gains first strike until end of turn. SVar:TrigPump:DB$ Pump | Defined$ Self | KW$ First Strike -SVar:PackTactics:Count$SumPower_Creature.attacking +SVar:PackTactics:Count$Valid Creature.attacking$CardPower Oracle:Pack tactics — Whenever Hobgoblin Captain attacks, if you attacked with creatures with total power 6 or greater this combat, Hobgoblin Captain gains first strike until end of turn. diff --git a/forge-gui/res/cardsfolder/i/intrepid_outlander.txt b/forge-gui/res/cardsfolder/i/intrepid_outlander.txt index c475addc35d..83c180e1c96 100644 --- a/forge-gui/res/cardsfolder/i/intrepid_outlander.txt +++ b/forge-gui/res/cardsfolder/i/intrepid_outlander.txt @@ -5,5 +5,5 @@ PT:2/3 K:Reach T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigVenture | TriggerZones$ Battlefield | CheckSVar$ PackTactics | SVarCompare$ GE6 | NoResolvingCheck$ True | TriggerDescription$ Pack tactics — Whenever CARDNAME attacks, if you attacked with creatures with total power 6 or greater this combat, venture into the dungeon. (Enter the first room or advance to the next room.) SVar:TrigVenture:DB$ Venture -SVar:PackTactics:Count$SumPower_Creature.attacking +SVar:PackTactics:Count$Valid Creature.attacking$CardPower Oracle:Reach\nPack tactics — Whenever Intrepid Outlander attacks, if you attacked with creatures with total power 6 or greater this combat, venture into the dungeon. (Enter the first room or advance to the next room.) diff --git a/forge-gui/res/cardsfolder/k/klauth_unrivaled_ancient.txt b/forge-gui/res/cardsfolder/k/klauth_unrivaled_ancient.txt index 4de844dbb42..dc5306de016 100644 --- a/forge-gui/res/cardsfolder/k/klauth_unrivaled_ancient.txt +++ b/forge-gui/res/cardsfolder/k/klauth_unrivaled_ancient.txt @@ -6,6 +6,6 @@ K:Flying K:Haste T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigMana | TriggerDescription$ Whenever CARDNAME attacks, add X mana in any combination of colors, where X is the total power of attacking creatures. Spend this mana only to cast spells. Until end of turn, you don't lose this mana as steps and phases end. SVar:TrigMana:DB$ Mana | Produced$ Combo Any | Amount$ X | PersistentMana$ True | RestrictValid$ Spell -SVar:X:Count$SumPower_Creature.attacking +SVar:X:Count$Valid Creature.attacking$CardPower SVar:HasAttackEffect:TRUE Oracle:Flying, haste\nWhenever Klauth, Unrivaled Ancient attacks, add X mana in any combination of colors, where X is the total power of attacking creatures. Spend this mana only to cast spells. Until end of turn, you don't lose this mana as steps and phases end. diff --git a/forge-gui/res/cardsfolder/l/loxodon_lifechanter.txt b/forge-gui/res/cardsfolder/l/loxodon_lifechanter.txt index 18f139b27ee..fc4e3999064 100644 --- a/forge-gui/res/cardsfolder/l/loxodon_lifechanter.txt +++ b/forge-gui/res/cardsfolder/l/loxodon_lifechanter.txt @@ -4,7 +4,7 @@ Types:Creature Elephant Cleric PT:4/6 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigLife | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, you may have your life total become the total toughness of creatures you control. SVar:TrigLife:DB$ SetLife | Defined$ You | LifeAmount$ Y -SVar:Y:Count$Valid Creature.YouCtrl$SumToughness +SVar:Y:Count$Valid Creature.YouCtrl$CardToughness A:AB$ Pump | Cost$ 5 W | NumAtt$ +X | NumDef$ +X | SpellDescription$ CARDNAME gets +X/+X until end of turn, where X is your life total. SVar:X:Count$YourLifeTotal AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/l/lurking_arynx.txt b/forge-gui/res/cardsfolder/l/lurking_arynx.txt index 939d91a881a..66e0d11267e 100644 --- a/forge-gui/res/cardsfolder/l/lurking_arynx.txt +++ b/forge-gui/res/cardsfolder/l/lurking_arynx.txt @@ -3,5 +3,5 @@ ManaCost:4 G Types:Creature Cat Beast PT:3/5 A:AB$ MustBlock | Cost$ 2 G | ValidTgts$ Creature | CheckSVar$ FormidableTest | SVarCompare$ GE8 | PrecostDesc$ Formidable — | TgtPrompt$ Select target creature that must block this creature this turn | SpellDescription$ Target creature blocks CARDNAME this turn if able. Activate only if creatures you control have total power 8 or greater. -SVar:FormidableTest:Count$SumPower_Creature.YouCtrl +SVar:FormidableTest:Count$Valid Creature.YouCtrl$CardPower Oracle:Formidable — {2}{G}: Target creature blocks Lurking Arynx this turn if able. Activate only if creatures you control have total power 8 or greater. diff --git a/forge-gui/res/cardsfolder/m/martial_coup.txt b/forge-gui/res/cardsfolder/m/martial_coup.txt index 06e54384827..4f1c0612ba1 100644 --- a/forge-gui/res/cardsfolder/m/martial_coup.txt +++ b/forge-gui/res/cardsfolder/m/martial_coup.txt @@ -6,6 +6,6 @@ SVar:CoupDestroy:DB$ DestroyAll | ValidCards$ Creature.IsNotRemembered | Conditi SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Count$xPaid SVar:NeedsToPlayVar:OwnCreats LEOppCreats -SVar:OwnCreats:Count$SumPower_Creature.YouCtrl -SVar:OppCreats:Count$SumPower_Creature.OppCtrl +SVar:OwnCreats:Count$Valid Creature.YouCtrl$CardPower +SVar:OppCreats:Count$Valid Creature.OppCtrl$CardPower Oracle:Create X 1/1 white Soldier creature tokens. If X is 5 or more, destroy all other creatures. diff --git a/forge-gui/res/cardsfolder/m/minion_of_the_mighty.txt b/forge-gui/res/cardsfolder/m/minion_of_the_mighty.txt index 4e49a9eeec5..a30909b9999 100644 --- a/forge-gui/res/cardsfolder/m/minion_of_the_mighty.txt +++ b/forge-gui/res/cardsfolder/m/minion_of_the_mighty.txt @@ -5,6 +5,6 @@ PT:0/1 K:Menace T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigChange | TriggerZones$ Battlefield | CheckSVar$ PackTactics | SVarCompare$ GE6 | NoResolvingCheck$ True | TriggerDescription$ Pack tactics — Whenever CARDNAME attacks, if you attacked with creatures with total power 6 or greater this combat, you may put a Dragon creature card from your hand onto the battlefield tapped and attacking. SVar:TrigChange:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | ChangeType$ Creature.Dragon+YouCtrl | Tapped$ True | Attacking$ True -SVar:PackTactics:Count$SumPower_Creature.attacking +SVar:PackTactics:Count$Valid Creature.attacking$CardPower DeckHints:Type$Dragon Oracle:Menace\nPack tactics — Whenever Minion of the Mighty attacks, if you attacked with creatures with total power 6 or greater this combat, you may put a Dragon creature card from your hand onto the battlefield tapped and attacking. diff --git a/forge-gui/res/cardsfolder/m/mosswort_bridge.txt b/forge-gui/res/cardsfolder/m/mosswort_bridge.txt index 5507fbb4640..a84a1b62de8 100644 --- a/forge-gui/res/cardsfolder/m/mosswort_bridge.txt +++ b/forge-gui/res/cardsfolder/m/mosswort_bridge.txt @@ -6,5 +6,5 @@ R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementRe SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True A:AB$ Mana | Cost$ T | Produced$ G | SpellDescription$ Add {G}. A:AB$ Play | Cost$ G T | Defined$ ExiledWith | Amount$ All | Controller$ You | WithoutManaCost$ True | Optional$ True | ConditionCheckSVar$ X | ConditionSVarCompare$ GE10 | SpellDescription$ You may play the exiled card without paying its mana cost if creatures you control have total power 10 or greater. -SVar:X:Count$SumPower_Creature.YouCtrl +SVar:X:Count$Valid Creature.YouCtrl$CardPower Oracle:Hideaway 4 (When this permanent enters, look at the top four cards of your library, exile one face down, then put the rest on the bottom of your library.)\nMosswort Bridge enters tapped.\n{T}: Add {G}.\n{G}, {T}: You may play the exiled card without paying its mana cost if creatures you control have total power 10 or greater. diff --git a/forge-gui/res/cardsfolder/o/owlbear_shepherd.txt b/forge-gui/res/cardsfolder/o/owlbear_shepherd.txt index 263da52d739..0a7c297df69 100644 --- a/forge-gui/res/cardsfolder/o/owlbear_shepherd.txt +++ b/forge-gui/res/cardsfolder/o/owlbear_shepherd.txt @@ -3,6 +3,6 @@ ManaCost:2 G Types:Creature Goblin Druid PT:1/4 T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | Execute$ TrigDraw | TriggerZones$ Battlefield | CheckSVar$ X | SVarCompare$ GE8 | TriggerDescription$ At the beginning of your end step, if creatures you control have total power 8 or greater, draw a card. -SVar:X:Count$SumPower_Creature.YouCtrl +SVar:X:Count$Valid Creature.YouCtrl$CardPower SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 Oracle:At the beginning of your end step, if creatures you control have total power 8 or greater, draw a card. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_dreadnought.txt b/forge-gui/res/cardsfolder/p/phyrexian_dreadnought.txt index a3058a7ba2f..ef898fe7ea4 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_dreadnought.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_dreadnought.txt @@ -11,7 +11,7 @@ SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:TotalPower:Remembered$CardPower SVar:X:Count$Valid Creature.YouCtrl SVar:NeedsToPlayVar:Y GE12 -SVar:Y:Count$SumPower_Creature.YouCtrl+!namedPhyrexian Dreadnought +SVar:Y:Count$Valid Creature.YouCtrl+!namedPhyrexian Dreadnought$CardPower AI:RemoveDeck:Random DeckHas:Ability$Sacrifice Oracle:Trample\nWhen Phyrexian Dreadnought enters, sacrifice it unless you sacrifice any number of creatures with total power 12 or greater. diff --git a/forge-gui/res/cardsfolder/s/sabertooth_outrider.txt b/forge-gui/res/cardsfolder/s/sabertooth_outrider.txt index 2ab6765dafb..903e7de20da 100644 --- a/forge-gui/res/cardsfolder/s/sabertooth_outrider.txt +++ b/forge-gui/res/cardsfolder/s/sabertooth_outrider.txt @@ -5,5 +5,5 @@ PT:4/2 K:Trample T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | CheckSVar$ X | SVarCompare$ GE8 | Execute$ TrigFormidable | TriggerDescription$ Formidable — Whenever CARDNAME attacks, if creatures you control have total power 8 or greater, CARDNAME gains first strike until end of turn. SVar:TrigFormidable:DB$ Pump | Defined$ Self | KW$ First Strike -SVar:X:Count$SumPower_Creature.YouCtrl +SVar:X:Count$Valid Creature.YouCtrl$CardPower Oracle:Trample\nFormidable — Whenever Sabertooth Outrider attacks, if creatures you control have total power 8 or greater, Sabertooth Outrider gains first strike until end of turn. diff --git a/forge-gui/res/cardsfolder/s/shaman_of_forgotten_ways.txt b/forge-gui/res/cardsfolder/s/shaman_of_forgotten_ways.txt index 9d683f7ef4f..3616893e4ad 100644 --- a/forge-gui/res/cardsfolder/s/shaman_of_forgotten_ways.txt +++ b/forge-gui/res/cardsfolder/s/shaman_of_forgotten_ways.txt @@ -4,7 +4,7 @@ Types:Creature Human Shaman PT:2/3 A:AB$ Mana | Cost$ T | Produced$ Combo Any | Amount$ 2 | RestrictValid$ Spell.Creature | SpellDescription$ Add two mana in any combination of colors. Spend this mana only to cast creature spells. A:AB$ RepeatEach | Cost$ 9 G G T | PrecostDesc$ Formidable — | CheckSVar$ FormidableTest | SVarCompare$ GE8 | RepeatPlayers$ Player | RepeatSubAbility$ DBSetLife | SpellDescription$ Each player's life total becomes the number of creatures they control. Activate only if creatures you control have total power 8 or greater. -SVar:FormidableTest:Count$SumPower_Creature.YouCtrl +SVar:FormidableTest:Count$Valid Creature.YouCtrl$CardPower SVar:DBSetLife:DB$ SetLife | Defined$ Player.IsRemembered | LifeAmount$ X SVar:X:Count$Valid Creature.RememberedPlayerCtrl Oracle:{T}: Add two mana in any combination of colors. Spend this mana only to cast creature spells.\nFormidable — {9}{G}{G}, {T}: Each player's life total becomes the number of creatures they control. Activate only if creatures you control have total power 8 or greater. diff --git a/forge-gui/res/cardsfolder/s/stampeding_elk_herd.txt b/forge-gui/res/cardsfolder/s/stampeding_elk_herd.txt index f6464acbb80..9e46bb5fb2e 100644 --- a/forge-gui/res/cardsfolder/s/stampeding_elk_herd.txt +++ b/forge-gui/res/cardsfolder/s/stampeding_elk_herd.txt @@ -4,5 +4,5 @@ Types:Creature Elk PT:5/5 T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | CheckSVar$ X | SVarCompare$ GE8 | Execute$ TrigFormidable | TriggerDescription$ Formidable — Whenever CARDNAME attacks, if creatures you control have total power 8 or greater, creatures you control gain trample until end of turn. SVar:TrigFormidable:DB$ PumpAll | ValidCards$ Creature.YouCtrl | KW$ Trample -SVar:X:Count$SumPower_Creature.YouCtrl +SVar:X:Count$Valid Creature.YouCtrl$CardPower Oracle:Formidable — Whenever Stampeding Elk Herd attacks, if creatures you control have total power 8 or greater, creatures you control gain trample until end of turn. diff --git a/forge-gui/res/cardsfolder/s/surrak_the_hunt_caller.txt b/forge-gui/res/cardsfolder/s/surrak_the_hunt_caller.txt index 917c363bed9..81a79b1b7c9 100644 --- a/forge-gui/res/cardsfolder/s/surrak_the_hunt_caller.txt +++ b/forge-gui/res/cardsfolder/s/surrak_the_hunt_caller.txt @@ -3,6 +3,6 @@ ManaCost:2 G G Types:Legendary Creature Human Warrior PT:5/4 T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | CheckSVar$ X | SVarCompare$ GE8 | Execute$ TrigPump | TriggerDescription$ Formidable — At the beginning of combat on your turn, if creatures you control have total power 8 or greater, target creature you control gains haste until end of turn. -SVar:X:Count$SumPower_Creature.YouCtrl +SVar:X:Count$Valid Creature.YouCtrl$CardPower SVar:TrigPump:DB$ Pump | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | KW$ Haste Oracle:Formidable — At the beginning of combat on your turn, if creatures you control have total power 8 or greater, target creature you control gains haste until end of turn. diff --git a/forge-gui/res/cardsfolder/t/targ_nar_demon_fang_gnoll.txt b/forge-gui/res/cardsfolder/t/targ_nar_demon_fang_gnoll.txt index ca4bef9d990..724a26f227c 100644 --- a/forge-gui/res/cardsfolder/t/targ_nar_demon_fang_gnoll.txt +++ b/forge-gui/res/cardsfolder/t/targ_nar_demon_fang_gnoll.txt @@ -4,6 +4,6 @@ Types:Legendary Creature Gnoll PT:2/2 T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPumpAll | TriggerZones$ Battlefield | CheckSVar$ PackTactics | SVarCompare$ GE6 | NoResolvingCheck$ True | TriggerDescription$ Pack tactics — Whenever CARDNAME attacks, if you attacked with creatures with total power 6 or greater this combat, attacking creatures get +1/+0 until end of turn. SVar:TrigPumpAll:DB$ PumpAll | ValidCards$ Creature.attacking | NumAtt$ +1 -SVar:PackTactics:Count$SumPower_Creature.attacking +SVar:PackTactics:Count$Valid Creature.attacking$CardPower A:AB$ Pump | Cost$ 2 R G | NumAtt$ Double | NumDef$ Double | StackDescription$ SpellDescription | SpellDescription$ Double NICKNAME's power and toughness until end of turn. Oracle:Pack tactics — Whenever Targ Nar, Demon-Fang Gnoll attacks, if you attacked with creatures with total power 6 or greater this combat, attacking creatures get +1/+0 until end of turn.\n{2}{R}{G}: Double Targ Nar's power and toughness until end of turn. diff --git a/forge-gui/res/cardsfolder/t/the_pride_of_hull_clade.txt b/forge-gui/res/cardsfolder/t/the_pride_of_hull_clade.txt index 799cff950ce..1306042cd6a 100644 --- a/forge-gui/res/cardsfolder/t/the_pride_of_hull_clade.txt +++ b/forge-gui/res/cardsfolder/t/the_pride_of_hull_clade.txt @@ -4,7 +4,7 @@ Types:Legendary Creature Crocodile Elk Turtle PT:2/15 K:Defender S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ X | EffectZone$ All | Description$ This spell costs {X} less to cast, where X is the total toughness of creatures you control. -SVar:X:Count$Valid Creature.YouCtrl$SumToughness +SVar:X:Count$Valid Creature.YouCtrl$CardToughness A:AB$ Pump | Cost$ 2 U U | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | NumAtt$ +1 | SubAbility$ DBEffect | SpellDescription$ Until end of turn, target creature you control gets +1/+0, gains "Whenever this creature deals combat damage to a player, draw cards equal to its toughness," and can attack as though it didn't have defender. SVar:DBEffect:DB$ Effect | RememberObjects$ Targeted | Triggers$ TrigDamage | StaticAbilities$ CanAttack | ForgetOnMoved$ Battlefield | SubAbility$ DBAnimate SVar:CanAttack:Mode$ CanAttackDefender | ValidCard$ Card.IsRemembered | Description$ CARDNAME can attack as though it didn't have defender. diff --git a/forge-gui/res/cardsfolder/t/tiger_tribe_hunter.txt b/forge-gui/res/cardsfolder/t/tiger_tribe_hunter.txt index 3c41872f15a..165f60f22ca 100644 --- a/forge-gui/res/cardsfolder/t/tiger_tribe_hunter.txt +++ b/forge-gui/res/cardsfolder/t/tiger_tribe_hunter.txt @@ -7,6 +7,6 @@ T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigImmediate | TriggerZones$ SVar:TrigImmediate:AB$ ImmediateTrigger | Cost$ Sac<1/Creature.Other/another creature> | RememberObjects$ Sacrificed | Execute$ TrigDamage | TriggerDescription$ If you do, CARDNAME deals damage equal to the sacrificed creature's power to target creature. SVar:TrigDamage:DB$ DealDamage | ConditionDefined$ DelayTriggerRememberedLKI | ValidTgts$ Creature | NumDmg$ X SVar:X:TriggerRemembered$CardPower -SVar:PackTactics:Count$SumPower_Creature.attacking +SVar:PackTactics:Count$Valid Creature.attacking$CardPower DeckHas:Ability$Sacrifice Oracle:Trample\nPack tactics — Whenever Tiger-Tribe Hunter attacks, if you attacked with creatures with total power 6 or greater this combat, you may sacrifice another creature. When you do, Tiger-Tribe Hunter deals damage equal to the sacrificed creature's power to target creature. diff --git a/forge-gui/res/cardsfolder/t/towering_titan.txt b/forge-gui/res/cardsfolder/t/towering_titan.txt index c7e8a0ea5b6..a6e0610edf4 100644 --- a/forge-gui/res/cardsfolder/t/towering_titan.txt +++ b/forge-gui/res/cardsfolder/t/towering_titan.txt @@ -3,7 +3,7 @@ ManaCost:4 G G Types:Creature Giant PT:0/0 K:etbCounter:P1P1:X:no Condition:CARDNAME enters with X +1/+1 counters on it, where X is the total toughness of other creatures you control. -SVar:X:Count$Valid Creature.Other+YouCtrl$SumToughness +SVar:X:Count$Valid Creature.Other+YouCtrl$CardToughness A:AB$ PumpAll | Cost$ Sac<1/Creature.withDefender/creature with defender> | ValidCards$ Creature | KW$ Trample | SpellDescription$ All creatures gain trample until end of turn. SVar:NeedsToPlayVar:Z GE3 SVar:Z:Count$Valid Creature.YouCtrl+toughnessGE2 diff --git a/forge-gui/res/cardsfolder/u/ugins_mastery.txt b/forge-gui/res/cardsfolder/u/ugins_mastery.txt index fea95ec0a39..45be8ee3bdc 100644 --- a/forge-gui/res/cardsfolder/u/ugins_mastery.txt +++ b/forge-gui/res/cardsfolder/u/ugins_mastery.txt @@ -5,5 +5,5 @@ T:Mode$ SpellCast | ValidCard$ Creature.Colorless | ValidActivatingPlayer$ You | SVar:TrigManifest:DB$ Manifest T:Mode$ AttackersDeclared | ValidAttackers$ Creature.YouCtrl | Execute$ TrigState | TriggerZones$ Battlefield | CheckSVar$ PackTactics | SVarCompare$ GE6 | NoResolvingCheck$ True | TriggerDescription$ Whenever you attack with creatures with total power 6 or greater, you may turn a face-down creature you control face up. SVar:TrigState:DB$ SetState | Choices$ Creature.faceDown+YouCtrl | ChoiceTitle$ Select a face-down creature you control | Mode$ TurnFaceUp -SVar:PackTactics:Count$SumPower_Creature.attacking +SVar:PackTactics:Count$Valid Creature.attacking$CardPower Oracle:Whenever you cast a colorless creature spell, manifest the top card of your library. (Put it onto the battlefield face down as a 2/2 creature. Turn it face up any time for its mana cost if it's a creature card.)\nWhenever you attack with creatures with total power 6 or greater, you may turn a face-down creature you control face up. diff --git a/forge-gui/res/cardsfolder/u/ultra_magnus_tactician_ultra_magnus_armored_carrier.txt b/forge-gui/res/cardsfolder/u/ultra_magnus_tactician_ultra_magnus_armored_carrier.txt index 796f3d422fb..0133ddbdda7 100644 --- a/forge-gui/res/cardsfolder/u/ultra_magnus_tactician_ultra_magnus_armored_carrier.txt +++ b/forge-gui/res/cardsfolder/u/ultra_magnus_tactician_ultra_magnus_armored_carrier.txt @@ -25,6 +25,6 @@ K:Haste T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPump | TriggerZones$ Battlefield | TriggerDescription$ Formidable — Whenever NICKNAME attacks, attacking creatures you control gain indestructible until end of turn. If those creatures have total power 8 or greater, convert NICKNAME. SVar:TrigPump:DB$ PumpAll | ValidCards$ Creature.attacking+YouCtrl | KW$ Indestructible | SubAbility$ DBConvert SVar:DBConvert:DB$ SetState | Mode$ Transform | ConditionCheckSVar$ FormidableTest | ConditionSVarCompare$ GE8 -SVar:FormidableTest:Count$SumPower_Creature.attacking+YouCtrl +SVar:FormidableTest:Count$Valid Creature.attacking+YouCtrl$CardPower SVar:HasAttackEffect:TRUE Oracle:Living metal (During your turn, this Vehicle is also a creature.)\nHaste\nFormidable — Whenever Ultra Magnus attacks, attacking creatures you control gain indestructible until end of turn. If those creatures have total power 8 or greater, convert Ultra Magnus. diff --git a/forge-gui/res/cardsfolder/v/volcanic_salvo.txt b/forge-gui/res/cardsfolder/v/volcanic_salvo.txt index d4c7da8aca3..6d47bbd8c25 100644 --- a/forge-gui/res/cardsfolder/v/volcanic_salvo.txt +++ b/forge-gui/res/cardsfolder/v/volcanic_salvo.txt @@ -2,6 +2,6 @@ Name:Volcanic Salvo ManaCost:10 R R Types:Sorcery S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ X | EffectZone$ All | Description$ CARDNAME costs {X} less to cast, where X is the total power of creatures you control. -SVar:X:Count$SumPower_Creature.YouCtrl +SVar:X:Count$Valid Creature.YouCtrl$CardPower A:SP$ DealDamage | ValidTgts$ Creature,Planeswalker | TargetMin$ 0 | TargetMax$ 2 | TgtPrompt$ Select target creature and/or planeswalkers | NumDmg$ 6 | SpellDescription$ CARDNAME deals 6 damage to each of up to two target creatures and/or planeswalkers. Oracle:This spell costs {X} less to cast, where X is the total power of creatures you control.\nVolcanic Salvo deals 6 damage to each of up to two target creatures and/or planeswalkers. diff --git a/forge-gui/res/cardsfolder/v/vulpine_harvester.txt b/forge-gui/res/cardsfolder/v/vulpine_harvester.txt index 59b77e89ad2..83ecf16216d 100644 --- a/forge-gui/res/cardsfolder/v/vulpine_harvester.txt +++ b/forge-gui/res/cardsfolder/v/vulpine_harvester.txt @@ -4,7 +4,7 @@ Types:Creature Phyrexian Fox PT:3/3 T:Mode$ AttackersDeclared | ValidAttackers$ Phyrexian.YouCtrl | Execute$ TrigReturn | TriggerZones$ Battlefield | TriggerDescription$ Whenever one or more Phyrexians you control attack, return target artifact card from your graveyard to the battlefield if its mana value is less than or equal to their total power. SVar:TrigReturn:DB$ ChangeZone | ValidTgts$ Artifact.YouCtrl | ConditionDefined$ Targeted | ConditionPresent$ Card.cmcLEX | TgtPrompt$ Select target artifact in your graveyard | Origin$ Graveyard | Destination$ Battlefield -SVar:X:Count$SumPower_Phyrexian.YouCtrl+attacking +SVar:X:Count$Valid Phyrexian.YouCtrl+attacking$CardPower DeckHas:Ability$Graveyard DeckHints:Type$Artifact DeckNeeds:Type$Phyrexian diff --git a/forge-gui/res/cardsfolder/w/werewolf_pack_leader.txt b/forge-gui/res/cardsfolder/w/werewolf_pack_leader.txt index 75f0c997f1e..2a1d2a003c6 100644 --- a/forge-gui/res/cardsfolder/w/werewolf_pack_leader.txt +++ b/forge-gui/res/cardsfolder/w/werewolf_pack_leader.txt @@ -5,5 +5,5 @@ PT:3/3 T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerZones$ Battlefield | CheckSVar$ PackTactics | SVarCompare$ GE6 | NoResolvingCheck$ True | TriggerDescription$ Pack tactics — Whenever CARDNAME attacks, if you attacked with creatures with total power 6 or greater this combat, draw a card. A:AB$ Animate | Cost$ 3 G | Defined$ Self | Power$ 5 | Toughness$ 3 | Keywords$ Trample | RemoveTypes$ Human | SpellDescription$ Until end of turn, CARDNAME has base power and toughness 5/3, gains trample, and isn't a Human. SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 -SVar:PackTactics:Count$SumPower_Creature.attacking +SVar:PackTactics:Count$Valid Creature.attacking$CardPower Oracle:Pack tactics — Whenever Werewolf Pack Leader attacks, if you attacked with creatures with total power 6 or greater this combat, draw a card.\n{3}{G}: Until end of turn, Werewolf Pack Leader has base power and toughness 5/3, gains trample, and isn't a Human. From da8b77acf777bd1e4d4272a73005d64ce5aa6f31 Mon Sep 17 00:00:00 2001 From: Agetian Date: Sun, 5 Oct 2025 19:21:15 +0300 Subject: [PATCH 290/355] Add AtOppEOT logic to a couple lands that the AI misuses (#8839) * - AtOppEOT is automatic now (also tweak the FlipACoinAi template to make use of it) * - AILogic$ Never is now generic. --- forge-ai/src/main/java/forge/ai/ability/FlipACoinAi.java | 8 +++----- forge-gui/res/cardsfolder/b/bucolic_ranch.txt | 2 +- forge-gui/res/cardsfolder/t/the_gold_saucer.txt | 2 +- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/FlipACoinAi.java b/forge-ai/src/main/java/forge/ai/ability/FlipACoinAi.java index 885c09975a8..031f4077b9c 100644 --- a/forge-ai/src/main/java/forge/ai/ability/FlipACoinAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/FlipACoinAi.java @@ -12,15 +12,13 @@ import forge.game.spellability.SpellAbility; public class FlipACoinAi extends SpellAbilityAi { /* (non-Javadoc) - * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) + * @see forge.card.abilityfactory.SpellAiLogic#checkApiLogic(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected AiAbilityDecision canPlay(Player ai, SpellAbility sa) { + protected AiAbilityDecision checkApiLogic(Player ai, SpellAbility sa) { if (sa.hasParam("AILogic")) { String ailogic = sa.getParam("AILogic"); - if (ailogic.equals("Never")) { - return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi); - } else if (ailogic.equals("PhaseOut")) { + if (ailogic.equals("PhaseOut")) { if (!ComputerUtil.predictThreatenedObjects(sa.getActivatingPlayer(), sa).contains(sa.getHostCard())) { return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi); } diff --git a/forge-gui/res/cardsfolder/b/bucolic_ranch.txt b/forge-gui/res/cardsfolder/b/bucolic_ranch.txt index cc0b5e81e0a..5dcad48b6b9 100644 --- a/forge-gui/res/cardsfolder/b/bucolic_ranch.txt +++ b/forge-gui/res/cardsfolder/b/bucolic_ranch.txt @@ -3,7 +3,7 @@ ManaCost:no cost Types:Land Desert A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. A:AB$ Mana | Cost$ T | Produced$ Any | Amount$ 1 | RestrictValid$ Spell.Mount | SpellDescription$ Add one mana of any color. Spend this mana only to cast a Mount spell. -A:AB$ PeekAndReveal | Cost$ 3 T | PeekAmount$ 1 | RevealValid$ Card.Mount | RevealOptional$ True | RememberRevealed$ True | SubAbility$ DBChangeZone | SpellDescription$ Look at the top card of your library. If it's a Mount card, you may reveal it and put it into your hand. If you don't put it into your hand, you may put it on the bottom of your library. +A:AB$ PeekAndReveal | Cost$ 3 T | PeekAmount$ 1 | RevealValid$ Card.Mount | RevealOptional$ True | RememberRevealed$ True | SubAbility$ DBChangeZone | AILogic$ AtOppEOT | SpellDescription$ Look at the top card of your library. If it's a Mount card, you may reveal it and put it into your hand. If you don't put it into your hand, you may put it on the bottom of your library. SVar:DBChangeZone:DB$ ChangeZone | Defined$ Remembered | Origin$ Library | Destination$ Hand | SubAbility$ DBChangeZone2 SVar:DBChangeZone2:DB$ ChangeZone | Optional$ True | Defined$ TopOfLibrary | Origin$ Library | Destination$ Library | LibraryPosition$ -1 | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ EQ0 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/t/the_gold_saucer.txt b/forge-gui/res/cardsfolder/t/the_gold_saucer.txt index cb385f67d36..498e3de4eea 100644 --- a/forge-gui/res/cardsfolder/t/the_gold_saucer.txt +++ b/forge-gui/res/cardsfolder/t/the_gold_saucer.txt @@ -2,7 +2,7 @@ Name:The Gold Saucer ManaCost:no cost Types:Land Town A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. -A:AB$ FlipACoin | Cost$ 2 T | WinSubAbility$ DBToken | SpellDescription$ Flip a coin. If you win the flip, create a Treasure token. +A:AB$ FlipACoin | Cost$ 2 T | WinSubAbility$ DBToken | AILogic$ AtOppEOT | SpellDescription$ Flip a coin. If you win the flip, create a Treasure token. SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_treasure_sac | TokenOwner$ You A:AB$ Draw | Cost$ 3 T Sac<2/Artifact> | SpellDescription$ Draw a card. DeckHas:Ability$Token From 0af4be42c4f36abb16a74899c5e354d8ad5f61fa Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Sun, 5 Oct 2025 18:31:12 +0200 Subject: [PATCH 291/355] DungeonsCompleted with handlePaid (#8842) --- .../java/forge/game/ability/AbilityUtils.java | 44 +++---------------- .../cardsfolder/a/acererak_the_archlich.txt | 2 +- .../cardsfolder/b/barrowin_of_clan_undurr.txt | 2 +- .../c/caves_of_chaos_adventurer.txt | 2 +- .../res/cardsfolder/c/cloister_gargoyle.txt | 2 +- .../cardsfolder/e/eccentric_apprentice.txt | 2 +- .../cardsfolder/e/ellywick_tumblestrum.txt | 2 +- forge-gui/res/cardsfolder/g/gloom_stalker.txt | 2 +- .../cardsfolder/i/imoen_mystic_trickster.txt | 2 +- .../cardsfolder/n/nadaar_selfless_paladin.txt | 2 +- .../res/cardsfolder/p/precipitous_drop.txt | 2 +- .../cardsfolder/r/ravenloft_adventurer.txt | 2 +- .../res/cardsfolder/r/rilsa_rael_kingpin.txt | 2 +- .../rebalanced/a-acererak_the_archlich.txt | 2 +- .../rebalanced/a-cloister_gargoyle.txt | 2 +- .../rebalanced/a-ellywick_tumblestrum.txt | 2 +- .../rebalanced/a-precipitous_drop.txt | 2 +- .../s/safana_calimport_cutthroat.txt | 2 +- forge-gui/res/cardsfolder/s/sarevoks_tome.txt | 2 +- .../t/tomb_of_horrors_adventurer.txt | 2 +- .../u/undermountain_adventurer.txt | 2 +- .../cardsfolder/w/white_plume_adventurer.txt | 2 +- 22 files changed, 27 insertions(+), 59 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index 6c856609ec9..601f6df2d2a 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -522,6 +522,8 @@ public class AbilityUtils { } } else if (calcX[0].equals("OriginalHost")) { val = xCount(ability.getOriginalHost(), calcX[1], ability); + } else if (calcX[0].equals("DungeonsCompleted")) { + val = handlePaid(player.getCompletedDungeons(), calcX[1], card, ability); } else if (calcX[0].startsWith("ExiledWith")) { val = handlePaid(card.getExiledCards(), calcX[1], card, ability); } else if (calcX[0].startsWith("Convoked")) { @@ -3421,6 +3423,7 @@ public class AbilityUtils { } public static int playerXProperty(final Player player, final String s, final Card source, CardTraitBase ctb) { + final String[] l = s.split("/"); final String m = CardFactoryUtil.extractOperators(s); @@ -3472,6 +3475,7 @@ public class AbilityUtils { final String[] sq = l[0].split("\\."); final String value = sq[0]; + final String[] calcX = value.split("\\$", 2); if (value.contains("NumPowerSurgeLands")) { return doXMath(player.getNumPowerSurgeLands(), m, source, ctb); @@ -3607,46 +3611,10 @@ public class AbilityUtils { return doXMath(player.hasBeenDealtCombatDamageSinceLastTurn() ? 1 : 0, m, source, ctb); } - if (value.equals("DungeonsCompleted")) { - return doXMath(player.getCompletedDungeons().size(), m, source, ctb); - } - if (value.equals("RingTemptedYou")) { return doXMath(player.getNumRingTemptedYou(), m, source, ctb); } - if (value.startsWith("DungeonCompletedNamed")) { - String [] full = value.split("_"); - String name = full[1]; - int completed = 0; - List dungeons = player.getCompletedDungeons(); - for (Card c : dungeons) { - if (c.getName().equals(name)) { - ++completed; - } - } - return doXMath(completed, m, source, ctb); - } - if (value.equals("DifferentlyNamedDungeonsCompleted")) { - int amount = 0; - List dungeons = player.getCompletedDungeons(); - for (int i = 0; i < dungeons.size(); ++i) { - Card d1 = dungeons.get(i); - boolean hasSameName = false; - for (int j = i - 1; j >= 0; --j) { - Card d2 = dungeons.get(j); - if (d1.getName().equals(d2.getName())) { - hasSameName = true; - break; - } - } - if (!hasSameName) { - ++amount; - } - } - return doXMath(amount, m, source, ctb); - } - if (value.equals("AttractionsVisitedThisTurn")) { return doXMath(player.getAttractionsVisitedThisTurn(), m, source, ctb); } @@ -3733,8 +3701,8 @@ public class AbilityUtils { return CardUtil.getColorsFromCards(paidList).countColors(); } - if (string.equals("DifferentCardNames")) { - return CardLists.getDifferentNamesCount(paidList); + if (string.startsWith("DifferentCardNames")) { + return doXMath(CardLists.getDifferentNamesCount(paidList), CardFactoryUtil.extractOperators(string), source, ctb); } if (string.equals("DifferentColorPair")) { diff --git a/forge-gui/res/cardsfolder/a/acererak_the_archlich.txt b/forge-gui/res/cardsfolder/a/acererak_the_archlich.txt index fc1ef36c3ae..ff3b874fa66 100644 --- a/forge-gui/res/cardsfolder/a/acererak_the_archlich.txt +++ b/forge-gui/res/cardsfolder/a/acererak_the_archlich.txt @@ -5,7 +5,7 @@ PT:5/5 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | CheckSVar$ X | SVarCompare$ LT1 | Execute$ TrigBounce | TriggerDescription$ When CARDNAME enters, if you haven't completed Tomb of Annihilation, return CARDNAME to its owner's hand and venture into the dungeon. SVar:TrigBounce:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBVenture SVar:DBVenture:DB$ Venture -SVar:X:PlayerCountPropertyYou$DungeonCompletedNamed_Tomb of Annihilation +SVar:X:DungeonsCompleted$Valid Card.namedTomb of Annihilation T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigRepeat | TriggerDescription$ Whenever CARDNAME attacks, for each opponent, you create a 2/2 black Zombie creature token unless that player sacrifices a creature. SVar:TrigRepeat:DB$ RepeatEach | RepeatPlayers$ Opponent | RepeatSubAbility$ DBToken SVar:DBToken:DB$ Token | TokenScript$ b_2_2_zombie | UnlessCost$ Sac<1/Creature> | UnlessPayer$ Player.IsRemembered diff --git a/forge-gui/res/cardsfolder/b/barrowin_of_clan_undurr.txt b/forge-gui/res/cardsfolder/b/barrowin_of_clan_undurr.txt index f6a684d1191..2895b5144bd 100644 --- a/forge-gui/res/cardsfolder/b/barrowin_of_clan_undurr.txt +++ b/forge-gui/res/cardsfolder/b/barrowin_of_clan_undurr.txt @@ -6,7 +6,7 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S T:Mode$ Attacks | ValidCard$ Card.Self | CheckSVar$ X | SVarCompare$ GE1 | Execute$ DBChangeZone | TriggerDescription$ Whenever CARDNAME attacks, return up to one creature card with mana value 3 or less from your graveyard to the battlefield if you've completed a dungeon. SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Hidden$ True | ChangeType$ Creature.YouOwn+cmcLE3 SVar:DBVenture:DB$ Venture | Defined$ You -SVar:X:PlayerCountPropertyYou$DungeonsCompleted +SVar:X:DungeonsCompleted$Amount DeckHints:Ability$Mill|Discard DeckHas:Ability$Graveyard Oracle:When Barrowin of Clan Undurr enters, venture into the dungeon. (Enter the first room or advance to the next room.)\nWhenever Barrowin of Clan Undurr attacks, return up to one creature card with mana value 3 or less from your graveyard to the battlefield if you've completed a dungeon. diff --git a/forge-gui/res/cardsfolder/c/caves_of_chaos_adventurer.txt b/forge-gui/res/cardsfolder/c/caves_of_chaos_adventurer.txt index 87633e9a623..c7a84a87788 100644 --- a/forge-gui/res/cardsfolder/c/caves_of_chaos_adventurer.txt +++ b/forge-gui/res/cardsfolder/c/caves_of_chaos_adventurer.txt @@ -13,6 +13,6 @@ SVar:STPlay2:Mode$ Continuous | MayPlay$ True | MayPlayWithoutManaCost$ True | A SVar:DBEffect:DB$ Effect | StaticAbilities$ STPlay | RememberObjects$ Remembered | ForgetOnMoved$ Exile SVar:STPlay:Mode$ Continuous | MayPlay$ True | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ You may play that card this turn. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -SVar:X:PlayerCountPropertyYou$DungeonsCompleted +SVar:X:DungeonsCompleted$Amount SVar:HasAttackEffect:TRUE Oracle:Trample\nWhen Caves of Chaos Adventurer enters, you take the initiative.\nWhenever Caves of Chaos Adventurer attacks, exile the top card of your library. If you've completed a dungeon, you may play that card this turn without paying its mana cost. Otherwise, you may play that card this turn. diff --git a/forge-gui/res/cardsfolder/c/cloister_gargoyle.txt b/forge-gui/res/cardsfolder/c/cloister_gargoyle.txt index e2ff4417f81..07ea1913c59 100644 --- a/forge-gui/res/cardsfolder/c/cloister_gargoyle.txt +++ b/forge-gui/res/cardsfolder/c/cloister_gargoyle.txt @@ -5,5 +5,5 @@ PT:0/4 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBVenture | TriggerDescription$ When CARDNAME enters, venture into the dungeon. (Enter the first room or advance to the next room.) SVar:DBVenture:DB$ Venture | Defined$ You S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 3 | AddKeyword$ Flying | CheckSVar$ X | SVarCompare$ GE1 | Description$ As long as you've completed a dungeon, CARDNAME gets +3/+0 and has flying. -SVar:X:PlayerCountPropertyYou$DungeonsCompleted +SVar:X:DungeonsCompleted$Amount Oracle:When Cloister Gargoyle enters, venture into the dungeon. (Enter the first room or advance to the next room.)\nAs long as you've completed a dungeon, Cloister Gargoyle gets +3/+0 and has flying. diff --git a/forge-gui/res/cardsfolder/e/eccentric_apprentice.txt b/forge-gui/res/cardsfolder/e/eccentric_apprentice.txt index 4c24fa6ba13..3693371bab8 100644 --- a/forge-gui/res/cardsfolder/e/eccentric_apprentice.txt +++ b/forge-gui/res/cardsfolder/e/eccentric_apprentice.txt @@ -7,5 +7,5 @@ T:Mode$ ChangesZone | ValidCard$ Card.Self | Destination$ Battlefield | Execute$ SVar:TrigVenture:DB$ Venture T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | CheckSVar$ X | Execute$ TrigAnimate | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of combat on your turn, if you've completed a dungeon, up to one target creature becomes a Bird with base power and toughness 1/1 and flying until end of turn. SVar:TrigAnimate:DB$ Animate | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one target creature | Power$ 1 | Toughness$ 1 | Types$ Bird | RemoveCreatureTypes$ True | Keywords$ Flying -SVar:X:PlayerCountPropertyYou$DungeonsCompleted +SVar:X:DungeonsCompleted$Amount Oracle:Flying\nWhen Eccentric Apprentice enters, venture into the dungeon. (Enter the first room or advance to the next room.)\nAt the beginning of combat on your turn, if you've completed a dungeon, up to one target creature becomes a Bird with base power and toughness 1/1 and flying until end of turn. diff --git a/forge-gui/res/cardsfolder/e/ellywick_tumblestrum.txt b/forge-gui/res/cardsfolder/e/ellywick_tumblestrum.txt index 7dde30bfbd5..4241f683d8f 100644 --- a/forge-gui/res/cardsfolder/e/ellywick_tumblestrum.txt +++ b/forge-gui/res/cardsfolder/e/ellywick_tumblestrum.txt @@ -9,5 +9,5 @@ SVar:IsLegendary:Count$ValidHand Creature.Legendary+IsRemembered SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True A:AB$ Effect | Cost$ SubCounter<7/LOYALTY> | Planeswalker$ True | Ultimate$ True | Name$ Emblem — Ellywick Tumblestrum | Image$ emblem_ellywick_tumblestrum | StaticAbilities$ STOverrun | Duration$ Permanent | AILogic$ Always | SpellDescription$ You get an emblem with "Creatures you control have trample and haste and get +2/+2 for each differently named dungeon you've completed." SVar:STOverrun:Mode$ Continuous | Affected$ Creature.YouCtrl | AffectedZone$ Battlefield | AddPower$ X | AddToughness$ X | AddKeyword$ Trample & Haste | Description$ Creatures you control have trample and haste and get +2/+2 for each differently named dungeon you've completed. -SVar:X:PlayerCountPropertyYou$DifferentlyNamedDungeonsCompleted/Twice +SVar:X:DungeonsCompleted$DifferentCardNames/Twice Oracle:[+1]: Venture into the dungeon. (Enter the first room or advance to the next room.)\n[-2]: Look at the top six cards of your library. You may reveal a creature card from among them and put it into your hand. If it's legendary, you gain 3 life. Put the rest on the bottom of your library in a random order.\n[-7]: You get an emblem with "Creatures you control have trample and haste and get +2/+2 for each differently named dungeon you've completed." diff --git a/forge-gui/res/cardsfolder/g/gloom_stalker.txt b/forge-gui/res/cardsfolder/g/gloom_stalker.txt index c033e830b2a..455e3bcfcd1 100644 --- a/forge-gui/res/cardsfolder/g/gloom_stalker.txt +++ b/forge-gui/res/cardsfolder/g/gloom_stalker.txt @@ -3,5 +3,5 @@ ManaCost:2 W Types:Creature Dwarf Ranger PT:2/3 S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ Double Strike | CheckSVar$ X | SVarCompare$ GE1 | Description$ As long as you've completed a dungeon, CARDNAME has double strike. -SVar:X:PlayerCountPropertyYou$DungeonsCompleted +SVar:X:DungeonsCompleted$Amount Oracle:As long as you've completed a dungeon, Gloom Stalker has double strike. diff --git a/forge-gui/res/cardsfolder/i/imoen_mystic_trickster.txt b/forge-gui/res/cardsfolder/i/imoen_mystic_trickster.txt index 39346837310..3ea3c9d999d 100644 --- a/forge-gui/res/cardsfolder/i/imoen_mystic_trickster.txt +++ b/forge-gui/res/cardsfolder/i/imoen_mystic_trickster.txt @@ -7,5 +7,5 @@ T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefiel SVar:TrigDraw:DB$ Draw | SubAbility$ DBDraw SVar:DBDraw:DB$ Draw | ConditionCheckSVar$ X K:Choose a Background -SVar:X:PlayerCountPropertyYou$DungeonsCompleted +SVar:X:DungeonsCompleted$Amount Oracle:Ward {2} (Whenever this creature becomes the target of a spell or ability an opponent controls, counter it unless that player pays {2}.)\nAt the beginning of your end step, if you have the initiative, draw a card. Draw another card if you've completed a dungeon.\nChoose a Background (You can have a Background as a second commander.) diff --git a/forge-gui/res/cardsfolder/n/nadaar_selfless_paladin.txt b/forge-gui/res/cardsfolder/n/nadaar_selfless_paladin.txt index 75ab85f438e..41ae0d4a943 100644 --- a/forge-gui/res/cardsfolder/n/nadaar_selfless_paladin.txt +++ b/forge-gui/res/cardsfolder/n/nadaar_selfless_paladin.txt @@ -7,5 +7,5 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ DBVenture | Secondary$ True | TriggerDescription$ Whenever CARDNAME enters or attacks, venture into the dungeon. (Enter the first room or advance to the next room.) SVar:DBVenture:DB$ Venture | Defined$ You S:Mode$ Continuous | Affected$ Creature.YouCtrl+Other | AddPower$ 1 | AddToughness$ 1 | CheckSVar$ X | SVarCompare$ GE1 | Description$ Other creatures you control get +1/+1 as long as you've completed a dungeon. -SVar:X:PlayerCountPropertyYou$DungeonsCompleted +SVar:X:DungeonsCompleted$Amount Oracle:Vigilance\nWhenever Nadaar, Selfless Paladin enters or attacks, venture into the dungeon. (Enter the first room or advance to the next room.)\nOther creatures you control get +1/+1 as long as you've completed a dungeon. diff --git a/forge-gui/res/cardsfolder/p/precipitous_drop.txt b/forge-gui/res/cardsfolder/p/precipitous_drop.txt index 6291bd0ecab..c763fc18a6e 100644 --- a/forge-gui/res/cardsfolder/p/precipitous_drop.txt +++ b/forge-gui/res/cardsfolder/p/precipitous_drop.txt @@ -7,5 +7,5 @@ T:Mode$ ChangesZone | ValidCard$ Card.Self | Destination$ Battlefield | Execute$ SVar:TrigVenture:DB$ Venture S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ -X | AddToughness$ -X | Description$ Enchanted creature gets -2/-2. It gets -5/-5 instead as long as you've completed a dungeon. SVar:X:Count$Compare Y GE1.5.2 -SVar:Y:PlayerCountPropertyYou$DungeonsCompleted +SVar:Y:DungeonsCompleted$Amount Oracle:Enchant creature\nWhen Precipitous Drop enters, venture into the dungeon. (Enter the first room or advance to the next room.)\nEnchanted creature gets -2/-2. It gets -5/-5 instead as long as you've completed a dungeon. diff --git a/forge-gui/res/cardsfolder/r/ravenloft_adventurer.txt b/forge-gui/res/cardsfolder/r/ravenloft_adventurer.txt index d6eff347fad..e2634b39e1d 100644 --- a/forge-gui/res/cardsfolder/r/ravenloft_adventurer.txt +++ b/forge-gui/res/cardsfolder/r/ravenloft_adventurer.txt @@ -10,7 +10,7 @@ SVar:DBPutCounter:DB$ PutCounter | Defined$ Remembered | CounterType$ HIT | SubA SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigLoseLife | CheckSVar$ X | TriggerDescription$ Whenever CARDNAME attacks, if you've completed a dungeon, defending player loses 1 life for each card they own in exile with a hit counter on it. SVar:TrigLoseLife:DB$ LoseLife | Defined$ TriggeredDefendingPlayer | LifeAmount$ Y -SVar:X:PlayerCountPropertyYou$DungeonsCompleted +SVar:X:DungeonsCompleted$Amount SVar:Y:TriggeredDefendingPlayer$ValidExile Card.YouOwn+counters_GE1_HIT SVar:HasAttackEffect:TRUE DeckHints:Name$Etrata, the Silencer|Mari, the Killing Quill diff --git a/forge-gui/res/cardsfolder/r/rilsa_rael_kingpin.txt b/forge-gui/res/cardsfolder/r/rilsa_rael_kingpin.txt index 19118fa2a06..6f5614bccc6 100644 --- a/forge-gui/res/cardsfolder/r/rilsa_rael_kingpin.txt +++ b/forge-gui/res/cardsfolder/r/rilsa_rael_kingpin.txt @@ -8,5 +8,5 @@ SVar:TrigInitiative:DB$ TakeInitiative T:Mode$ AttackersDeclared | AttackingPlayer$ You | Execute$ TrigPump | TriggerZones$ Battlefield | TriggerDescription$ Whenever you attack, target attacking creature gains deathtouch until end of turn. If you've completed a dungeon, that creature also gets +5/+0 and gains first strike and menace until end of turn. SVar:TrigPump:DB$ Pump | KW$ Deathtouch | TgtPrompt$ Select target attacking creature | ValidTgts$ Creature.attacking | SubAbility$ DBPump SVar:DBPump:DB$ Pump | ConditionCheckSVar$ X | NumAtt$ +5 | KW$ First Strike & Menace | Defined$ Targeted -SVar:X:PlayerCountPropertyYou$DungeonsCompleted +SVar:X:DungeonsCompleted$Amount Oracle:Deathtouch\nWhen Rilsa Rael, Kingpin enters, you take the initiative.\nWhenever you attack, target attacking creature gains deathtouch until end of turn. If you've completed a dungeon, that creature also gets +5/+0 and gains first strike and menace until end of turn. diff --git a/forge-gui/res/cardsfolder/rebalanced/a-acererak_the_archlich.txt b/forge-gui/res/cardsfolder/rebalanced/a-acererak_the_archlich.txt index 6099cb71f11..7729f3e0ad5 100644 --- a/forge-gui/res/cardsfolder/rebalanced/a-acererak_the_archlich.txt +++ b/forge-gui/res/cardsfolder/rebalanced/a-acererak_the_archlich.txt @@ -5,7 +5,7 @@ PT:5/5 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | CheckSVar$ X | SVarCompare$ LT1 | Execute$ TrigBounce | TriggerDescription$ When CARDNAME enters, if you haven't completed Tomb of Annihilation, return CARDNAME to its owner's hand and venture into the dungeon. SVar:TrigBounce:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBVenture SVar:DBVenture:DB$ Venture -SVar:X:PlayerCountPropertyYou$DungeonCompletedNamed_Tomb of Annihilation +SVar:X:DungeonsCompleted$Valid Card.namedTomb of Annihilation T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ Whenever CARDNAME attacks, create a number of 2/2 black Zombie creature tokens equal to the number of opponents you have. SVar:TrigToken:DB$ Token | TokenAmount$ Y | TokenScript$ b_2_2_zombie | TokenOwner$ You SVar:Y:PlayerCountOpponents$Amount diff --git a/forge-gui/res/cardsfolder/rebalanced/a-cloister_gargoyle.txt b/forge-gui/res/cardsfolder/rebalanced/a-cloister_gargoyle.txt index 5518835c584..d662a29c699 100644 --- a/forge-gui/res/cardsfolder/rebalanced/a-cloister_gargoyle.txt +++ b/forge-gui/res/cardsfolder/rebalanced/a-cloister_gargoyle.txt @@ -5,5 +5,5 @@ PT:0/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBVenture | TriggerDescription$ When CARDNAME enters, venture into the dungeon. SVar:DBVenture:DB$ Venture | Defined$ You S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 3 | AddKeyword$ Flying | CheckSVar$ X | SVarCompare$ GE1 | Description$ As long as you've completed a dungeon, CARDNAME gets +3/+0 and has flying. -SVar:X:PlayerCountPropertyYou$DungeonsCompleted +SVar:X:DungeonsCompleted$Amount Oracle:When Cloister Gargoyle enters, venture into the dungeon.\nAs long as you've completed a dungeon, Cloister Gargoyle gets +3/+0 and has flying. diff --git a/forge-gui/res/cardsfolder/rebalanced/a-ellywick_tumblestrum.txt b/forge-gui/res/cardsfolder/rebalanced/a-ellywick_tumblestrum.txt index 6326cd1adfa..3a40b2cf6fc 100644 --- a/forge-gui/res/cardsfolder/rebalanced/a-ellywick_tumblestrum.txt +++ b/forge-gui/res/cardsfolder/rebalanced/a-ellywick_tumblestrum.txt @@ -9,5 +9,5 @@ SVar:IsLegendary:Count$ValidHand Creature.Legendary+IsRemembered SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True A:AB$ Effect | Cost$ SubCounter<6/LOYALTY> | Planeswalker$ True | Ultimate$ True | Name$ Emblem — Ellywick Tumblestrum | Image$ emblem_ellywick_tumblestrum | StaticAbilities$ STOverrun | Duration$ Permanent | AILogic$ Always | SpellDescription$ You get an emblem with "Creatures you control have trample and haste and get +2/+2 for each differently named dungeon you've completed." SVar:STOverrun:Mode$ Continuous | Affected$ Creature.YouCtrl | AffectedZone$ Battlefield | AddPower$ X | AddToughness$ X | AddKeyword$ Trample & Haste | Description$ Creatures you control have trample and haste and get +2/+2 for each differently named dungeon you've completed. -SVar:X:PlayerCountPropertyYou$DifferentlyNamedDungeonsCompleted/Twice +SVar:X:DungeonsCompleted$DifferentCardNames/Twice Oracle:[+1]: Venture into the dungeon.\n[-2]: Look at the top six cards of your library. You may reveal a creature card from among them and put it into your hand. If it's legendary, you gain 3 life. Put the rest on the bottom of your library in a random order.\n[-6]: You get an emblem with "Creatures you control have trample and haste and get +2/+2 for each differently named dungeon you've completed." diff --git a/forge-gui/res/cardsfolder/rebalanced/a-precipitous_drop.txt b/forge-gui/res/cardsfolder/rebalanced/a-precipitous_drop.txt index 964588d0ffc..d756a4a6086 100644 --- a/forge-gui/res/cardsfolder/rebalanced/a-precipitous_drop.txt +++ b/forge-gui/res/cardsfolder/rebalanced/a-precipitous_drop.txt @@ -7,5 +7,5 @@ T:Mode$ ChangesZone | ValidCard$ Card.Self | Destination$ Battlefield | Execute$ SVar:TrigVenture:DB$ Venture S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ -X | AddToughness$ -X | Description$ Enchanted creature gets -2/-2. It gets -5/-5 instead as long as you've completed a dungeon. SVar:X:Count$Compare Y GE1.5.2 -SVar:Y:PlayerCountPropertyYou$DungeonsCompleted +SVar:Y:DungeonsCompleted$Amount Oracle:Enchant creature\nWhen Precipitous Drop enters, venture into the dungeon.\nEnchanted creature gets -2/-2. It gets -5/-5 instead as long as you've completed a dungeon. diff --git a/forge-gui/res/cardsfolder/s/safana_calimport_cutthroat.txt b/forge-gui/res/cardsfolder/s/safana_calimport_cutthroat.txt index 854c04f066e..067da524e15 100644 --- a/forge-gui/res/cardsfolder/s/safana_calimport_cutthroat.txt +++ b/forge-gui/res/cardsfolder/s/safana_calimport_cutthroat.txt @@ -6,7 +6,7 @@ K:Menace T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | CheckDefinedPlayer$ You.hasInitiative | Execute$ TrigTreasure | TriggerDescription$ At the beginning of your end step, if you have the initiative, create a Treasure token. If you've completed a dungeon, create three of those tokens instead. SVar:TrigTreasure:DB$ Token | TokenAmount$ X | TokenScript$ c_a_treasure_sac SVar:X:Count$Compare Y GE1.3.1 -SVar:Y:PlayerCountPropertyYou$DungeonsCompleted +SVar:Y:DungeonsCompleted$Amount K:Choose a Background AI:RemoveDeck:Random DeckHas:Ability$Token|Sacrifice & Type$Artifact|Treasure diff --git a/forge-gui/res/cardsfolder/s/sarevoks_tome.txt b/forge-gui/res/cardsfolder/s/sarevoks_tome.txt index 7fc15162f11..13451e69f62 100644 --- a/forge-gui/res/cardsfolder/s/sarevoks_tome.txt +++ b/forge-gui/res/cardsfolder/s/sarevoks_tome.txt @@ -8,5 +8,5 @@ SVar:X:Count$Initiative.2.1 A:AB$ DigUntil | Cost$ 3 T | Valid$ Card.nonLand | ValidDescription$ nonland | FoundDestination$ Exile | RevealedDestination$ Exile | RememberFound$ True | SubAbility$ DBPlay | CheckSVar$ Y | NoPutDesc$ True | SpellDescription$ Exile cards from the top of your library until you exile a nonland card. You may cast that card without paying its mana cost. Activate only if you've completed a dungeon. SVar:DBPlay:DB$ Play | Defined$ Remembered | DefinedDesc$ that card | ValidSA$ Spell | WithoutManaCost$ True | Optional$ True | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -SVar:Y:PlayerCountPropertyYou$DungeonsCompleted +SVar:Y:DungeonsCompleted$Amount Oracle:When Sarevok's Tome enters, you take the initiative.\n{T}: Add {C}. If you have the initiative, add {C}{C} instead.\n{3}, {T}: Exile cards from the top of your library until you exile a nonland card. You may cast that card without paying its mana cost. Activate only if you've completed a dungeon. diff --git a/forge-gui/res/cardsfolder/t/tomb_of_horrors_adventurer.txt b/forge-gui/res/cardsfolder/t/tomb_of_horrors_adventurer.txt index af5eafc2d13..96b5c6982b1 100644 --- a/forge-gui/res/cardsfolder/t/tomb_of_horrors_adventurer.txt +++ b/forge-gui/res/cardsfolder/t/tomb_of_horrors_adventurer.txt @@ -6,7 +6,7 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S SVar:TrigInitiative:DB$ TakeInitiative T:Mode$ SpellCast | ValidCard$ Card.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigCopy | ActivatorThisTurnCast$ EQ2 | ValidActivatingPlayer$ You | TriggerDescription$ Whenever you cast your second spell each turn, copy it. If you've completed a dungeon, copy that spell twice instead. You may choose new targets for the copies. (A copy of a permanent spell becomes a token.) SVar:TrigCopy:DB$ CopySpellAbility | Amount$ Y | Defined$ TriggeredSpellAbility | MayChooseTarget$ True -SVar:X:PlayerCountPropertyYou$DungeonsCompleted +SVar:X:DungeonsCompleted$Amount SVar:Y:Count$Compare X GE1.2.1 DeckHas:Ability$Token Oracle:When Tomb of Horrors Adventurer enters, you take the initiative.\nWhenever you cast your second spell each turn, copy it. If you've completed a dungeon, copy that spell twice instead. You may choose new targets for the copies. (A copy of a permanent spell becomes a token.) diff --git a/forge-gui/res/cardsfolder/u/undermountain_adventurer.txt b/forge-gui/res/cardsfolder/u/undermountain_adventurer.txt index 2af00567659..363455136e2 100644 --- a/forge-gui/res/cardsfolder/u/undermountain_adventurer.txt +++ b/forge-gui/res/cardsfolder/u/undermountain_adventurer.txt @@ -6,6 +6,6 @@ K:Vigilance T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigInitiative | TriggerDescription$ When CARDNAME enters, you take the initiative. SVar:TrigInitiative:DB$ TakeInitiative A:AB$ Mana | Cost$ T | Produced$ G | Amount$ Y | SpellDescription$ Add {G}{G}. If you've completed a dungeon, add six {G} instead. -SVar:X:PlayerCountPropertyYou$DungeonsCompleted +SVar:X:DungeonsCompleted$Amount SVar:Y:Count$Compare X GE1.6.2 Oracle:Vigilance\nWhen Undermountain Adventurer enters, you take the initiative.\n{T}: Add {G}{G}. If you've completed a dungeon, add six {G} instead. diff --git a/forge-gui/res/cardsfolder/w/white_plume_adventurer.txt b/forge-gui/res/cardsfolder/w/white_plume_adventurer.txt index 0441ab0e7eb..4bd103e86a9 100644 --- a/forge-gui/res/cardsfolder/w/white_plume_adventurer.txt +++ b/forge-gui/res/cardsfolder/w/white_plume_adventurer.txt @@ -8,5 +8,5 @@ T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Opponent | TriggerZones$ Battlefiel SVar:TrigBranch:DB$ Branch | BranchConditionSVar$ X | TrueSubAbility$ DBUntapAll | FalseSubAbility$ DBUntap SVar:DBUntapAll:DB$ UntapAll | ValidCards$ Creature.YouCtrl SVar:DBUntap:DB$ Untap | UntapExactly$ True | UntapType$ Creature.YouCtrl+tapped | Amount$ 1 -SVar:X:PlayerCountPropertyYou$DungeonsCompleted +SVar:X:DungeonsCompleted$Amount Oracle:When White Plume Adventurer enters battlefield, you take the initiative.\nAt the beginning of each opponent's upkeep, untap a creature you control. If you've completed a dungeon, untap all creatures you control instead. From 39f6377f33da3d20336c460d9b394c704f1263cb Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Sun, 5 Oct 2025 19:12:38 +0200 Subject: [PATCH 292/355] remove leftover variable --- forge-game/src/main/java/forge/game/ability/AbilityUtils.java | 1 - 1 file changed, 1 deletion(-) diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index 601f6df2d2a..5738433e1c2 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -3475,7 +3475,6 @@ public class AbilityUtils { final String[] sq = l[0].split("\\."); final String value = sq[0]; - final String[] calcX = value.split("\\$", 2); if (value.contains("NumPowerSurgeLands")) { return doXMath(player.getNumPowerSurgeLands(), m, source, ctb); From 81e1306cd7228185e0ebb56cab9857594b3f05af Mon Sep 17 00:00:00 2001 From: tool4ever Date: Sun, 5 Oct 2025 18:31:42 +0000 Subject: [PATCH 293/355] Update garland_royal_kidnapper.txt --- .../res/cardsfolder/upcoming/garland_royal_kidnapper.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/forge-gui/res/cardsfolder/upcoming/garland_royal_kidnapper.txt b/forge-gui/res/cardsfolder/upcoming/garland_royal_kidnapper.txt index 8f7fb85ac3e..ea349288514 100644 --- a/forge-gui/res/cardsfolder/upcoming/garland_royal_kidnapper.txt +++ b/forge-gui/res/cardsfolder/upcoming/garland_royal_kidnapper.txt @@ -2,8 +2,8 @@ Name:Garland, Royal Kidnapper ManaCost:2 U B Types:Legendary Creature Human Knight PT:3/4 -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigMonarch | TriggerDescription$ When NICKNAME enters, you become the monarch. -SVar:TrigMonarch:DB$ BecomeMonarch | Defined$ You +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigMonarch | TriggerDescription$ When NICKNAME enters, target opponent becomes the monarch. +SVar:TrigMonarch:DB$ BecomeMonarch | ValidTgts$ Opponent T:Mode$ BecomeMonarch | ValidPlayer$ Opponent | TriggerZones$ Battlefield | Execute$ TrigEffect | TriggerDescription$ Whenever an opponent becomes the monarch, gain control of target creature that player controls for as long as they're the monarch. SVar:TrigEffect:DB$ Effect | ImprintCards$ Targeted | ValidTgts$ Creature.ControlledBy TriggeredPlayer | TgtPrompt$ Choose target creature that player controls | RememberObjects$ TriggeredPlayer | Triggers$ ExileMe | StaticAbilities$ GainControl | Duration$ Permanent SVar:GainControl:Mode$ Continuous | Affected$ Card.IsImprinted | CheckSVar$ X | SVarCompare$ EQ1 | GainControl$ You | Description$ You gain control of that creature for as long as that player is the monarch. @@ -12,4 +12,4 @@ SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ SVar:X:PlayerCountRememberedPlayer$HasPropertyisMonarch S:Mode$ Continuous | Affected$ Creature.YouCtrl+YouDontOwn| AddPower$ 2 | AddToughness$ 2 | Description$ Creatures you control but don't own get +2/+2 and can't be sacrificed. S:Mode$ CantSacrifice | ValidCard$ Creature.YouCtrl+YouDontOwn | Secondary$ True | SpellDescription$ Creatures you control but don't own get +2/+2 and can't be sacrificed. -Oracle:When Garland enters, you become the monarch.\nWhenever an opponent becomes the monarch, gain control of target creature that player controls for as long as they're the monarch.\nCreatures you control but don't own get +2/+2 and can't be sacrificed. +Oracle:When Garland enters, target opponent becomes the monarch.\nWhenever an opponent becomes the monarch, gain control of target creature that player controls for as long as they're the monarch.\nCreatures you control but don't own get +2/+2 and can't be sacrificed. From c4a3b5c5453f6a2753cc769a7407ab41297a6782 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Mon, 6 Oct 2025 13:01:37 +0200 Subject: [PATCH 294/355] Update avatar_aang_aang_master_of_elements.txt --- .../cardsfolder/a/avatar_aang_aang_master_of_elements.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/forge-gui/res/cardsfolder/a/avatar_aang_aang_master_of_elements.txt b/forge-gui/res/cardsfolder/a/avatar_aang_aang_master_of_elements.txt index 6fda3cadd20..52806599b90 100644 --- a/forge-gui/res/cardsfolder/a/avatar_aang_aang_master_of_elements.txt +++ b/forge-gui/res/cardsfolder/a/avatar_aang_aang_master_of_elements.txt @@ -19,9 +19,9 @@ Types:Legendary Creature Avatar Ally PT:6/6 K:Flying S:Mode$ ReduceCost | ValidCard$ Card | Type$ Spell | Activator$ You | Amount$ 1 | Color$ W U B R G | Description$ Spells you cast cost {W}{U}{B}{R}{G} less to cast. (This can reduce generic costs.) -T:Mode$ Phase | Phase$ Upkeep | TriggerZones$ Battlefield | Execute$ TrigToken | OptionalDecider$ You | TriggerDescription$ At the beginning of each upkeep, you may transform CARDNAME. If you do, you gain 4 life, draw four cards, put four +1/+1 counters on him, and he deals 4 damage to each opponent. -SVar:DBTransform:DB$ SetState | Defined$ Self | Mode$ Transform | RememberChanged$ True | SubAbility$ DBGainLife -SVar:TrigGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 4 | ConditionDefined$ Remembered | ConditionPresent$ Card | SubAbility$ DBDraw +T:Mode$ Phase | Phase$ Upkeep | TriggerZones$ Battlefield | Execute$ TrigTransform | OptionalDecider$ You | TriggerDescription$ At the beginning of each upkeep, you may transform CARDNAME. If you do, you gain 4 life, draw four cards, put four +1/+1 counters on him, and he deals 4 damage to each opponent. +SVar:TrigTransform:DB$ SetState | Defined$ Self | Mode$ Transform | RememberChanged$ True | SubAbility$ DBGainLife +SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 4 | ConditionDefined$ Remembered | ConditionPresent$ Card | SubAbility$ DBDraw SVar:DBDraw:DB$ Draw | NumCards$ 4 | ConditionDefined$ Remembered | ConditionPresent$ Card | SubAbility$ DBPutCounter SVar:DBPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 4 | ConditionDefined$ Remembered | ConditionPresent$ Card | SubAbility$ DBDamage SVar:DBDamage:DB$ DealDamage | Defined$ Player.Opponent | NumDmg$ 4 | CounterNum$ 4 | ConditionDefined$ Remembered | ConditionPresent$ Card | SubAbility$ DBCleanup From a5765905d81ac023871dfee16973a2e4ae85fbe5 Mon Sep 17 00:00:00 2001 From: Eradev Date: Sun, 5 Oct 2025 12:23:58 -0400 Subject: [PATCH 295/355] Fix Quest start with boosters and unsactionned pool --- .../src/main/java/forge/gamemodes/quest/BoosterUtils.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/forge-gui/src/main/java/forge/gamemodes/quest/BoosterUtils.java b/forge-gui/src/main/java/forge/gamemodes/quest/BoosterUtils.java index ceea7e594e9..5615effad3a 100644 --- a/forge-gui/src/main/java/forge/gamemodes/quest/BoosterUtils.java +++ b/forge-gui/src/main/java/forge/gamemodes/quest/BoosterUtils.java @@ -99,7 +99,10 @@ public final class BoosterUtils { if (userPrefs != null && userPrefs.getPoolType() == StartingPoolPreferences.PoolType.BOOSTERS) { - for (InventoryItem inventoryItem : generateRandomBoosterPacks(userPrefs.getNumberOfBoosters(), formatStartingPool.editionLegalPredicate)) { + Predicate editionLegalPredicate = formatStartingPool == null + ? cardEdition -> true + : formatStartingPool.editionLegalPredicate; + for (InventoryItem inventoryItem : generateRandomBoosterPacks(userPrefs.getNumberOfBoosters(), editionLegalPredicate)) { cards.addAll(((BoosterPack) inventoryItem).getCards()); } From 5bbc86c1a1449c3726fea643a5b2df5db6b78aa1 Mon Sep 17 00:00:00 2001 From: Eradev Date: Sun, 5 Oct 2025 12:30:03 -0400 Subject: [PATCH 296/355] Fix crash in Quest rewards screen --- .../gamemodes/quest/QuestEventDraft.java | 44 +++---------------- 1 file changed, 5 insertions(+), 39 deletions(-) diff --git a/forge-gui/src/main/java/forge/gamemodes/quest/QuestEventDraft.java b/forge-gui/src/main/java/forge/gamemodes/quest/QuestEventDraft.java index 0dc634a9d86..03d03970ffd 100644 --- a/forge-gui/src/main/java/forge/gamemodes/quest/QuestEventDraft.java +++ b/forge-gui/src/main/java/forge/gamemodes/quest/QuestEventDraft.java @@ -62,7 +62,6 @@ import forge.util.storage.IStorage; public class QuestEventDraft implements IQuestEvent { public static class QuestDraftPrizes { - public int credits; public List boosterPacks; public List individualCards; @@ -85,7 +84,6 @@ public class QuestEventDraft implements IQuestEvent { public void addSelectedCard(final PaperCard card) { FModel.getQuest().getCards().addSingleCard(card, 1); } - } public static final String UNDETERMINED = "quest_draft_undetermined_place"; @@ -233,7 +231,6 @@ public class QuestEventDraft implements IQuestEvent { } public void setWinner(final String playerName) { - if (QuestDraftUtils.TOURNAMENT_TOGGLE) { TournamentPairing pairing = bracket.getNextPairing(); for(TournamentPlayer player : pairing.getPairedPlayers()) { @@ -290,7 +287,6 @@ public class QuestEventDraft implements IQuestEvent { * Generates the prizes for the player and saves them to the current quest. */ public QuestDraftPrizes collectPrizes() { - final int place = getPlayerPlacement(); int prizePool = entryFee * 9; @@ -345,11 +341,9 @@ public class QuestEventDraft implements IQuestEvent { } return null; - } private QuestDraftPrizes generateFirstPlacePrizes(final int prizePool) { - int credits = 2 * (prizePool / 3); //First place gets 2/3 the total prize pool final List cards = new ArrayList<>(); final List boosters = new ArrayList<>(); @@ -366,11 +360,9 @@ public class QuestEventDraft implements IQuestEvent { awardSelectedRare(prizes); return prizes; - } private QuestDraftPrizes generateSecondPlacePrizes(final int prizePool) { - int credits = prizePool / 3; //Second place gets 1/3 the total prize pool final List cards = new ArrayList<>(); final List boosters = new ArrayList<>(); @@ -388,11 +380,9 @@ public class QuestEventDraft implements IQuestEvent { awardSelectedRare(prizes); return prizes; - } private QuestDraftPrizes generateThirdPlacePrizes() { - final int credits = 0; final List cards = new ArrayList<>(); @@ -407,11 +397,9 @@ public class QuestEventDraft implements IQuestEvent { prizes.individualCards = cards; return prizes; - } private QuestDraftPrizes generateFourthPlacePrizes() { - final int credits = 0; final List cards = new ArrayList<>(); @@ -440,7 +428,6 @@ public class QuestEventDraft implements IQuestEvent { } private void awardSelectedRare(final QuestDraftPrizes prizes) { - final List possibleCards = new ArrayList<>(); final List cardNames = new ArrayList<>(); @@ -466,7 +453,6 @@ public class QuestEventDraft implements IQuestEvent { } private PaperCard getPromoCard() { - final CardEdition randomEdition = getRandomEdition(); final List cardsInEdition = new ArrayList<>(); final List cardNames = new ArrayList<>(); @@ -480,6 +466,11 @@ public class QuestEventDraft implements IQuestEvent { } } + // For sets such as MB1 that only have cards from PLST. + if (cardsInEdition.isEmpty()) { + return FModel.getQuest().getCards().addRandomRare(); + } + EditionEntry randomCard; PaperCard promo = null; @@ -495,7 +486,6 @@ public class QuestEventDraft implements IQuestEvent { } return promo; - } private CardEdition getRandomEdition() { @@ -506,7 +496,6 @@ public class QuestEventDraft implements IQuestEvent { } return editions.get((int) (MyRandom.getRandom().nextDouble() * editions.size())); - } private Set getAllEditions() { @@ -517,7 +506,6 @@ public class QuestEventDraft implements IQuestEvent { } return editions; - } private static int getBoosterPrice(final BoosterPack booster) { @@ -528,11 +516,9 @@ public class QuestEventDraft implements IQuestEvent { value = MAP_PRICES.getOrDefault(boosterName, 395); return value; - } public boolean playerHasMatchesLeft() { - if (QuestDraftUtils.TOURNAMENT_TOGGLE) { return !bracket.isTournamentOver() && bracket.isPlayerRemaining(-1); } @@ -585,7 +571,6 @@ public class QuestEventDraft implements IQuestEvent { } return nextMatchIndex != -1 && standings[nextMatchIndex].equals(UNDETERMINED); - } public int getPlayerPlacement() { @@ -622,11 +607,9 @@ public class QuestEventDraft implements IQuestEvent { } return -1; - } public String getPlacementString() { - final int place = getPlayerPlacement(); String output; @@ -650,7 +633,6 @@ public class QuestEventDraft implements IQuestEvent { } return output; - } public boolean canEnter() { @@ -683,7 +665,6 @@ public class QuestEventDraft implements IQuestEvent { } public static class QuestDraftFormat implements Comparable { - private CardEdition edition; private CardBlock block; @@ -746,11 +727,9 @@ public class QuestEventDraft implements IQuestEvent { public int compareTo(final QuestDraftFormat other) { return toString().compareToIgnoreCase(other.toString()); } - } private static List getAllowedSets(final QuestController quest) { - final List allowedQuestSets = new ArrayList<>(); if (quest.getFormat() != null) { @@ -771,11 +750,9 @@ public class QuestEventDraft implements IQuestEvent { } return allowedQuestSets; - } private static List getBlocks() { - final List blocks = new ArrayList<>(); final IStorage storage = FModel.getBlocks(); @@ -786,11 +763,9 @@ public class QuestEventDraft implements IQuestEvent { } return blocks; - } public static List getAvailableFormats(final QuestController quest) { - final List allowedQuestSets = getAllowedSets(quest); final List possibleFormats = new ArrayList<>(); final List blocks = getBlocks(); @@ -812,7 +787,6 @@ public class QuestEventDraft implements IQuestEvent { if (blockAllowed) { possibleFormats.add(new QuestDraftFormat(block)); } - } for (CardEdition allowedQuestSet : allowedQuestSets) { @@ -840,7 +814,6 @@ public class QuestEventDraft implements IQuestEvent { Collections.sort(possibleFormats); return possibleFormats; - } /** @@ -849,7 +822,6 @@ public class QuestEventDraft implements IQuestEvent { * @return The created draft or null in the event no draft could be created. */ public static QuestEventDraft getRandomDraftOrNull(final QuestController quest) { - final List possibleFormats = getAvailableFormats(quest); if (possibleFormats.isEmpty()) { @@ -858,7 +830,6 @@ public class QuestEventDraft implements IQuestEvent { Collections.shuffle(possibleFormats); return getDraftOrNull(quest, possibleFormats.get(0)); - } /** @@ -866,7 +837,6 @@ public class QuestEventDraft implements IQuestEvent { * @return The created draft or null in the event no draft could be created. */ public static QuestEventDraft getDraftOrNull(final QuestController quest, final QuestDraftFormat format) { - final QuestEventDraft event = new QuestEventDraft(format.getName()); if (format.isSet()) { @@ -936,13 +906,11 @@ public class QuestEventDraft implements IQuestEvent { event.aiIcons[i] = icon; usedNames.add(event.aiNames[i]); usedIcons.add(icon); - } event.bracket = createBracketFromStandings(event.standings, event.aiNames, event.aiIcons); return event; - } private static int calculateEntryFee(final String[] boosters) { @@ -960,7 +928,6 @@ public class QuestEventDraft implements IQuestEvent { } return (int) (entryFee * 1.5); - } private static Set getSetCombos(final QuestController quest, final CardBlock block) { @@ -1041,7 +1008,6 @@ public class QuestEventDraft implements IQuestEvent { } return possibleCombinations; - } public static TournamentBracket createBracketFromStandings(String[] standings, String[] aiNames, int[] aiIcons) { From 5b2a56bd4d3f5bbdb400ac369b4a68220e7722a4 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Mon, 6 Oct 2025 17:52:18 +0000 Subject: [PATCH 297/355] Update the_rise_of_sozin_fire_lord_sozin.txt --- .../res/cardsfolder/t/the_rise_of_sozin_fire_lord_sozin.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/forge-gui/res/cardsfolder/t/the_rise_of_sozin_fire_lord_sozin.txt b/forge-gui/res/cardsfolder/t/the_rise_of_sozin_fire_lord_sozin.txt index dbf399f6d6b..5c28f921a82 100644 --- a/forge-gui/res/cardsfolder/t/the_rise_of_sozin_fire_lord_sozin.txt +++ b/forge-gui/res/cardsfolder/t/the_rise_of_sozin_fire_lord_sozin.txt @@ -8,6 +8,7 @@ SVar:DBExile:DB$ ChangeZone | ValidTgts$ Opponent | ChangeType$ Card.NamedCard | SVar:DBTransform:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DBReturn | SpellDescription$ Exile this Saga, then return it to the battlefield transformed under your control. SVar:DBReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | Transformed$ True | GainControl$ True | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +AlternateMode:DoubleFaced Oracle:(As this Saga enters and after your draw step, add a lore counter.)\nI — Destroy all creatures.\nII — Choose a card name. Search target opponent's graveyard, hand, and library for up to four cards with that name and exile them. Then that player shuffles.\nIII — Exile this Saga, then return it to the battlefield transformed under your control. ALTERNATE From 04f454ae8394d2ea8455770c48f1321ba81278e5 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Tue, 7 Oct 2025 05:32:41 +0800 Subject: [PATCH 298/355] prevent NPE --- forge-gui-mobile/src/forge/screens/match/views/VStack.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/forge-gui-mobile/src/forge/screens/match/views/VStack.java b/forge-gui-mobile/src/forge/screens/match/views/VStack.java index 6a88375b573..22fa22d1771 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VStack.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VStack.java @@ -224,17 +224,17 @@ public class VStack extends FDropDown { activeItem.getLeft() + VStack.CARD_WIDTH * FCardPanel.TARGET_ORIGIN_FACTOR_X + VStack.PADDING + VStack.BORDER_THICKNESS, activeItem.getTop() + VStack.CARD_HEIGHT * FCardPanel.TARGET_ORIGIN_FACTOR_Y + VStack.PADDING + VStack.BORDER_THICKNESS); - PlayerView activator = activeStackInstance.getActivatingPlayer(); + PlayerView activator = activeStackInstance == null ? null : activeStackInstance.getActivatingPlayer(); arrowOrigin = arrowOrigin.add(screenPos.x, screenPos.y); StackItemView instance = activeStackInstance; while (instance != null) { for (CardView c : instance.getTargetCards()) { - TargetingOverlay.ArcConnection conn = activator.isOpponentOf(c.getController()) ? TargetingOverlay.ArcConnection.FoesStackTargeting : TargetingOverlay.ArcConnection.FriendsStackTargeting; + TargetingOverlay.ArcConnection conn = activator != null && activator.isOpponentOf(c.getController()) ? TargetingOverlay.ArcConnection.FoesStackTargeting : TargetingOverlay.ArcConnection.FriendsStackTargeting; TargetingOverlay.drawArrow(g, arrowOrigin, VCardDisplayArea.CardAreaPanel.get(c).getTargetingArrowOrigin(), conn); } for (PlayerView p : instance.getTargetPlayers()) { - TargetingOverlay.ArcConnection conn = activator.isOpponentOf(p) ? TargetingOverlay.ArcConnection.FoesStackTargeting : TargetingOverlay.ArcConnection.FriendsStackTargeting; + TargetingOverlay.ArcConnection conn = activator != null && activator.isOpponentOf(p) ? TargetingOverlay.ArcConnection.FoesStackTargeting : TargetingOverlay.ArcConnection.FriendsStackTargeting; TargetingOverlay.drawArrow(g, arrowOrigin, MatchScreen.getPlayerPanel(p).getAvatar().getTargetingArrowOrigin(), conn); } instance = instance.getSubInstance(); From bbf7a2597986a8276af68defaa1caa60280f9376 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Mon, 6 Oct 2025 20:50:28 +0200 Subject: [PATCH 299/355] Refactor UnlockedDoors using PlayerProperty --- .../java/forge/game/ability/AbilityUtils.java | 29 +++---------------- .../c/central_elevator_promising_stairs.txt | 2 +- .../res/cardsfolder/r/rampaging_soulrager.txt | 2 +- .../s/smoky_lounge_misty_salon.txt | 2 +- 4 files changed, 7 insertions(+), 28 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index 5738433e1c2..2f8d310fcc7 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -2543,34 +2543,13 @@ public class AbilityUtils { return doXMath(CardLists.getValidCardCount(game.getLeftGraveyardThisTurn(), validFilter, player, c, ctb), expr, c, ctb); } - // Count$UnlockedDoors - if (sq[0].startsWith("UnlockedDoors")) { - final String[] workingCopy = l[0].split(" ", 2); - final String validFilter = workingCopy[1]; - - int unlocked = 0; - for (Card doorCard : CardLists.getValidCards(player.getCardsIn(ZoneType.Battlefield), validFilter, player, c, ctb)) { - unlocked += doorCard.getUnlockedRooms().size(); - } - - return doXMath(unlocked, expr, c, ctb); + if (sq[0].equals("UnlockedDoors")) { + return doXMath(player.getUnlockedDoors().size(), expr, c, ctb); } - // Count$DistinctUnlockedDoors // Counts the distinct names of unlocked doors. Used for the "Promising Stairs" - if (sq[0].startsWith("DistinctUnlockedDoors")) { - final String[] workingCopy = l[0].split(" ", 2); - final String validFilter = workingCopy[1]; - - Set viewedNames = new HashSet<>(); - for (Card doorCard : CardLists.getValidCards(player.getCardsIn(ZoneType.Battlefield), validFilter, player, c, ctb)) { - for(CardStateName stateName : doorCard.getUnlockedRooms()) { - viewedNames.add(doorCard.getState(stateName).getName()); - } - } - int distinctUnlocked = viewedNames.size(); - - return doXMath(distinctUnlocked, expr, c, ctb); + if (sq[0].equals("DistinctUnlockedDoors")) { + return doXMath(Sets.newHashSet(player.getUnlockedDoors()).size(), expr, c, ctb); } // Manapool diff --git a/forge-gui/res/cardsfolder/c/central_elevator_promising_stairs.txt b/forge-gui/res/cardsfolder/c/central_elevator_promising_stairs.txt index 26ca18797da..751dcb0cc7a 100644 --- a/forge-gui/res/cardsfolder/c/central_elevator_promising_stairs.txt +++ b/forge-gui/res/cardsfolder/c/central_elevator_promising_stairs.txt @@ -14,5 +14,5 @@ Types:Enchantment Room T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigSurveil | TriggerDescription$ At the beginning of your upkeep, surveil 1. You win the game if there are eight or more different names among unlocked doors of Rooms you control. SVar:TrigSurveil:DB$ Surveil | SubAbility$ DBWin SVar:DBWin:DB$ WinsGame | Defined$ You | ConditionCheckSVar$ RoomsUnlocked | ConditionSVarCompare$ GE8 -SVar:RoomsUnlocked:Count$DistinctUnlockedDoors Card.Room+YouCtrl +SVar:RoomsUnlocked:Count$DistinctUnlockedDoors Oracle:At the beginning of your upkeep, surveil 1. You win the game if there are eight or more different names among unlocked doors of Rooms you control. diff --git a/forge-gui/res/cardsfolder/r/rampaging_soulrager.txt b/forge-gui/res/cardsfolder/r/rampaging_soulrager.txt index af9fc947061..86f35bb255f 100644 --- a/forge-gui/res/cardsfolder/r/rampaging_soulrager.txt +++ b/forge-gui/res/cardsfolder/r/rampaging_soulrager.txt @@ -3,5 +3,5 @@ ManaCost:2 R Types:Creature Spirit PT:1/4 S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 3 | CheckSVar$ X | SVarCompare$ GE2 | Description$ CARDNAME gets +3/+0 as long as there are two or more unlocked doors among Rooms you control. -SVar:X:Count$UnlockedDoors Card.Room+YouCtrl +SVar:X:Count$UnlockedDoors Oracle:Rampaging Soulrager gets +3/+0 as long as there are two or more unlocked doors among Rooms you control. diff --git a/forge-gui/res/cardsfolder/s/smoky_lounge_misty_salon.txt b/forge-gui/res/cardsfolder/s/smoky_lounge_misty_salon.txt index 831b569d199..0f2b8e92648 100644 --- a/forge-gui/res/cardsfolder/s/smoky_lounge_misty_salon.txt +++ b/forge-gui/res/cardsfolder/s/smoky_lounge_misty_salon.txt @@ -13,5 +13,5 @@ ManaCost:3 U Types:Enchantment Room T:Mode$ UnlockDoor | ValidPlayer$ You | ValidCard$ Card.Self | ThisDoor$ True | Execute$ TrigToken | TriggerDescription$ When you unlock this door, create an X/X blue Spirit creature token with flying, where X is the number of unlocked doors among Rooms you control. SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ u_x_x_spirit_flying | TokenPower$ X | TokenToughness$ X | TokenOwner$ You -SVar:X:Count$UnlockedDoors Card.Room+YouCtrl +SVar:X:Count$UnlockedDoors Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nWhen you unlock this door, create an X/X blue Spirit creature token with flying, where X is the number of unlocked doors among Rooms you control. From 1b8c87e578171f7893bf6ca139c6730f25adea9c Mon Sep 17 00:00:00 2001 From: Eradev Date: Mon, 6 Oct 2025 23:52:17 -0400 Subject: [PATCH 300/355] Fix event init --- .../src/forge/adventure/util/AdventureEventController.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/forge-gui-mobile/src/forge/adventure/util/AdventureEventController.java b/forge-gui-mobile/src/forge/adventure/util/AdventureEventController.java index 15a3b2100c5..128ee1a92df 100644 --- a/forge-gui-mobile/src/forge/adventure/util/AdventureEventController.java +++ b/forge-gui-mobile/src/forge/adventure/util/AdventureEventController.java @@ -113,9 +113,10 @@ public class AdventureEventController implements Serializable { return null; } - // If chosen event seed recommends a 4 person pod, run it as a RoundRobin - CardEdition firstSet = e.cardBlock.getSets().get(0); - int podSize = firstSet.getDraftOptions().getRecommendedPodSize(); + // If the chosen event seed recommends a four-person pod, run it as a RoundRobin + // Set can be null when it is only a meta set such as some Jumpstart events. + CardEdition firstSet = e.cardBlock.getSets().isEmpty() ? null : e.cardBlock.getSets().get(0); + int podSize = firstSet == null ? 8 : firstSet.getDraftOptions().getRecommendedPodSize(); e.sourceID = pointID; e.eventOrigin = eventOrigin; From ab1d423e2801bbffb769a064d51511eddb2524a7 Mon Sep 17 00:00:00 2001 From: Eradev Date: Tue, 7 Oct 2025 00:31:55 -0400 Subject: [PATCH 301/355] Update the_soul_stone.txt (#8854) --- forge-gui/res/cardsfolder/t/the_soul_stone.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/t/the_soul_stone.txt b/forge-gui/res/cardsfolder/t/the_soul_stone.txt index 10c9e9a55ef..bda18d419c7 100644 --- a/forge-gui/res/cardsfolder/t/the_soul_stone.txt +++ b/forge-gui/res/cardsfolder/t/the_soul_stone.txt @@ -3,7 +3,7 @@ ManaCost:1 B Types:Legendary Artifact Infinity Stone K:Indestructible A:AB$ Mana | Cost$ T | Produced$ B | SpellDescription$ Add {B}. -A:AB$ AlterAttribute | Cost$ 6 B Exile<1/Creature> | Defined$ Self | Attributes$ Harnessed | StackDescription$ SpellDescription | SpellDescription$ Harness CARDNAME. (Once harnessed, its ∞ ability is active.) +A:AB$ AlterAttribute | Cost$ 6 B T Exile<1/Creature> | Defined$ Self | Attributes$ Harnessed | StackDescription$ SpellDescription | SpellDescription$ Harness CARDNAME. (Once harnessed, its ∞ ability is active.) T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | IsPresent$ Card.Self+harnessed | TriggerZones$ Battlefield | Execute$ TrigReturn | TriggerDescription$ ∞ — At the beginning of your upkeep, return target creature card from your graveyard to the battlefield. SVar:TrigReturn:DB$ ChangeZone | ValidTgts$ Creature.YouOwn | Origin$ Graveyard | Destination$ Battlefield SVar:PlayMain1:TRUE From 5fae32e048f789af6df02e7193bb81c673b80220 Mon Sep 17 00:00:00 2001 From: Renato Filipe Vidal Santos <45150760+dracontes@users.noreply.github.com> Date: Tue, 7 Oct 2025 15:58:21 +0000 Subject: [PATCH 302/355] Add files via upload (#8846) Co-authored-by: Agetian --- .../res/adventure/Amonkhet/world/shops.json | 6 +- .../Crystal_Kingdoms/world/quests.json | 2 +- .../Crystal_Kingdoms/world/shops.json | 2 +- .../world/town_names_blue.txt | 2 +- .../decks/shops/inn_Missionaries.dck | 4 +- .../Innistrad/decks/shops/inn_Peasants.dck | 2 +- .../decks/standard/INN/inn_peasant_easy.dck | 2 +- .../decks/standard/INN/inn_the_whisperers.dck | 2 +- .../starter/inn/Adventure - INN Low Red.dck | 2 +- .../cave/inn_cave_river_entrance.tmx | 2 +- .../map/Innistrad/library/inn_library.tmx | 2 +- .../res/adventure/Innistrad/world/items.json | 2 +- .../res/adventure/Innistrad/world/quests.json | 146 +++++++++--------- .../res/adventure/Innistrad/world/shops.json | 22 +-- .../Shandalar Old Border/world/enemies.json | 12 +- .../Shandalar Old Border/world/quests.json | 86 +++++------ .../Shandalar Old Border/world/shops.json | 10 +- .../Shandalar Old Border/world/shops.json.bak | 10 +- .../world/town_names_black.txt | 2 +- .../world/town_names_blue.txt | 2 +- .../world/town_names_green.txt | 2 +- .../world/town_names_waste.txt | 10 +- .../res/adventure/Shandalar/world/quests.json | 2 +- .../res/adventure/Shandalar/world/shops.json | 2 +- .../Shandalar/world/town_names_blue.txt | 2 +- .../common/maps/map/grove/grove_1_bears.tmx | 2 +- .../library_of_varsil_3.tmx | 2 +- .../adventure/common/maps/map/maze/maze_2.tmx | 2 +- 28 files changed, 172 insertions(+), 172 deletions(-) diff --git a/forge-gui/res/adventure/Amonkhet/world/shops.json b/forge-gui/res/adventure/Amonkhet/world/shops.json index 575c86f6a9e..cbbeff52fb3 100644 --- a/forge-gui/res/adventure/Amonkhet/world/shops.json +++ b/forge-gui/res/adventure/Amonkhet/world/shops.json @@ -170,13 +170,13 @@ "rewards": [ { "count":6, - "cardText": "draw(s)?|(exile|reveal|look|search).*library|scry|seek|conjure ", + "cardText": "draw(s)?|(exile|reveal|look|search).*library|scry|seek|conjure", "colors": ["blue"], "editions":["AKH","HOU","MP2","AKR"] }, { "count":2, - "cardText": "draw(s)?|(exile|reveal|look|search).*library|scry|seek|conjure ", + "cardText": "draw(s)?|(exile|reveal|look|search).*library|scry|seek|conjure", "editions":["AKH","HOU","MP2","AKR"] }] }, @@ -1391,7 +1391,7 @@ }] },{ "name":"Azorius", -"description":"Azorious Shop, LLC", +"description":"Azorius Shop, LLC", "spriteAtlas":"maps/tileset/buildings.atlas", "sprite":"AzoriusShop", "rewards": [ diff --git a/forge-gui/res/adventure/Crystal_Kingdoms/world/quests.json b/forge-gui/res/adventure/Crystal_Kingdoms/world/quests.json index fd558d2620a..69c57ac4ce4 100644 --- a/forge-gui/res/adventure/Crystal_Kingdoms/world/quests.json +++ b/forge-gui/res/adventure/Crystal_Kingdoms/world/quests.json @@ -6347,7 +6347,7 @@ "POIReference": "" } ], - "name": "I'll take care of it, note the location of the factory on my map.(Accept Quest) (WARNING HARD QUEST)", + "name": "I'll take care of it. If you'd note the location of the factory on my map... (Accept Quest) (WARNING HARD QUEST)", "text": "Once you have vanquished the mechanical threat and quelled the chaos within the factory, return to me, Maven the Alchemist, and you shall be rewarded handsomely for your bravery and service to our community. Be warned, however, for the path ahead will test your mettle, cunning, and combat prowess. May fortune favor you on this perilous undertaking!" }, { diff --git a/forge-gui/res/adventure/Crystal_Kingdoms/world/shops.json b/forge-gui/res/adventure/Crystal_Kingdoms/world/shops.json index c4daabc2a53..fda46190466 100644 --- a/forge-gui/res/adventure/Crystal_Kingdoms/world/shops.json +++ b/forge-gui/res/adventure/Crystal_Kingdoms/world/shops.json @@ -1439,7 +1439,7 @@ }] },{ "name":"Azorius", -"description":"Azorious Shop, LLC", +"description":"Azorius Shop, LLC", "spriteAtlas":"maps/tileset/buildings.atlas", "sprite":"AzoriusShop", "rewards": [ diff --git a/forge-gui/res/adventure/Crystal_Kingdoms/world/town_names_blue.txt b/forge-gui/res/adventure/Crystal_Kingdoms/world/town_names_blue.txt index c7bf62dbd28..565a46be16b 100644 --- a/forge-gui/res/adventure/Crystal_Kingdoms/world/town_names_blue.txt +++ b/forge-gui/res/adventure/Crystal_Kingdoms/world/town_names_blue.txt @@ -335,7 +335,7 @@ Fourmill Run Port Rachkham Cloudy Shallows Slumnis -Silver Pointe +Silver Point Abjuration Point Crow's Nest The Rookery diff --git a/forge-gui/res/adventure/Innistrad/decks/shops/inn_Missionaries.dck b/forge-gui/res/adventure/Innistrad/decks/shops/inn_Missionaries.dck index 6c0b5337885..1f58bf6f208 100644 --- a/forge-gui/res/adventure/Innistrad/decks/shops/inn_Missionaries.dck +++ b/forge-gui/res/adventure/Innistrad/decks/shops/inn_Missionaries.dck @@ -13,7 +13,7 @@ Name=INN_Missionaries 2 Blazing Torch|ISD|1 1 Burn at the Stake|AVR|1 1 Chapel Geist|ISD|1 -2 Chaplain of ALms|MID|1 +2 Chaplain of Alms|MID|1 1 Chaplain's Blessing|SOI|1 1 Cloistered Youth|ISD|1 2 Crossroads Consecrator|EMN|1 @@ -32,7 +32,7 @@ Name=INN_Missionaries 1 Forsaken Sanctuary|SOI|1 1 Geist of the Lonely Vigil|EMN|1 1 Isolated Chapel|ISD|1 -1 Jerren. Corrupted Bishop|MID|1 +1 Jerren, Corrupted Bishop|MID|1 1 Kindly Ancestor|VOW|1 1 Mad Prophet|SOI|1 1 Make a Wish|ISD|1 diff --git a/forge-gui/res/adventure/Innistrad/decks/shops/inn_Peasants.dck b/forge-gui/res/adventure/Innistrad/decks/shops/inn_Peasants.dck index 489270b1e9a..65e9743589d 100644 --- a/forge-gui/res/adventure/Innistrad/decks/shops/inn_Peasants.dck +++ b/forge-gui/res/adventure/Innistrad/decks/shops/inn_Peasants.dck @@ -1,7 +1,7 @@ [metadata] Name=INN_Peasants [Main] -1 Alchemists's Apprentice|AVR|1 +1 Alchemist's Apprentice|AVR|1 3 Ambitious Farmhand|MID|1 1 Apothecary Geist|SOI|1 3 Baithook Angler|MID|1 diff --git a/forge-gui/res/adventure/Innistrad/decks/standard/INN/inn_peasant_easy.dck b/forge-gui/res/adventure/Innistrad/decks/standard/INN/inn_peasant_easy.dck index f1d9c987a53..11bc4451108 100644 --- a/forge-gui/res/adventure/Innistrad/decks/standard/INN/inn_peasant_easy.dck +++ b/forge-gui/res/adventure/Innistrad/decks/standard/INN/inn_peasant_easy.dck @@ -6,7 +6,7 @@ Name=INN_peasant_easy 2 Angel's Mercy|AVR|1 3 Ambitious Farmhand|MID|1 2 Beloved Beggar|MID|1 -2 Berieved Survivor|MID|1 +2 Bereaved Survivor|MID|1 2 Doomed Traveler|ISD|1 2 Bar the Door|DKA|1 2 Gather the Townsfolk|DKA|1 diff --git a/forge-gui/res/adventure/Innistrad/decks/standard/INN/inn_the_whisperers.dck b/forge-gui/res/adventure/Innistrad/decks/standard/INN/inn_the_whisperers.dck index bd63094a76b..df72a6bc53c 100644 --- a/forge-gui/res/adventure/Innistrad/decks/standard/INN/inn_the_whisperers.dck +++ b/forge-gui/res/adventure/Innistrad/decks/standard/INN/inn_the_whisperers.dck @@ -11,7 +11,7 @@ Name=INN_The_Whisperers 2 Battleground Geist|ISD|1 2 Drogskol Captain|DKA|1 2 Gallows Warden|ISD|1 -2 Midknight Haunting|ISD|1 +2 Midnight Haunting|ISD|1 2 Malevolent Hermit|MID|1 2 Thing in the Ice|SOI|1 2 Ambitious Farmhand|MID|1 diff --git a/forge-gui/res/adventure/Innistrad/decks/starter/inn/Adventure - INN Low Red.dck b/forge-gui/res/adventure/Innistrad/decks/starter/inn/Adventure - INN Low Red.dck index 8ab672e7ea3..abcb735cc91 100644 --- a/forge-gui/res/adventure/Innistrad/decks/starter/inn/Adventure - INN Low Red.dck +++ b/forge-gui/res/adventure/Innistrad/decks/starter/inn/Adventure - INN Low Red.dck @@ -16,7 +16,7 @@ Name=Adventure - INN Low Red 1 Brimstone Vandal|MID|1 2 Festival Crasher|MID|1 2 Pyre Hound|SOI|1 -1 Curse of BLoodletting|DKA|1 +1 Curse of Bloodletting|DKA|1 1 Incendiary Flow|EMN|1 1 Rage Thrower|ISD|1 1 Spellrune Painter|MID|1 diff --git a/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/cave/inn_cave_river_entrance.tmx b/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/cave/inn_cave_river_entrance.tmx index a5e8167f30b..567fcfa8363 100644 --- a/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/cave/inn_cave_river_entrance.tmx +++ b/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/cave/inn_cave_river_entrance.tmx @@ -268,7 +268,7 @@ 0,4901,4902,4748,782,3146,1259,621,782,782,3146,1259,621,3146,1259,1259,1259,621,782,462,4743,4744,0,0,0,0,0,0,0,0,0,0 - + 0,0,22705,0,0,0,0,0,0,0,0,0,0,0,0,0,7082,0,0,22547,0,24596,0,0,0,0,0,0,0,0,0,0, 22550,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, diff --git a/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/library/inn_library.tmx b/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/library/inn_library.tmx index 0b9363732ff..45a693d0027 100644 --- a/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/library/inn_library.tmx +++ b/forge-gui/res/adventure/Innistrad/maps/map/Innistrad/library/inn_library.tmx @@ -199,7 +199,7 @@ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, diff --git a/forge-gui/res/adventure/Innistrad/world/items.json b/forge-gui/res/adventure/Innistrad/world/items.json index 3df7d3e1343..0b2cd30ee90 100644 --- a/forge-gui/res/adventure/Innistrad/world/items.json +++ b/forge-gui/res/adventure/Innistrad/world/items.json @@ -343,7 +343,7 @@ "questItem": true }, { - "name": "Grolnoks Key", + "name": "Grolnok's Key", "iconName": "StrangeKey", "questItem": true }, diff --git a/forge-gui/res/adventure/Innistrad/world/quests.json b/forge-gui/res/adventure/Innistrad/world/quests.json index d5f1d68ccc0..b84ce987936 100644 --- a/forge-gui/res/adventure/Innistrad/world/quests.json +++ b/forge-gui/res/adventure/Innistrad/world/quests.json @@ -41,7 +41,7 @@ }, { "name": "\"And what if I find the right people myself?\"", - "text": "He shrugs as though that wouldn't bother him. \"Then I'll have to find someone bigger, badder, and most importantly faster than you to work with.\"", + "text": "He shrugs as though that wouldn't bother him. \"Then I'll have to find someone bigger, badder, and, most importantly, faster than you to work with.\"", "options": [ { "name": "\"Good luck with that.\" (Decline Quest)" @@ -435,7 +435,7 @@ ], "objective": "Travel", "prologue": { - "text": "Nothing like a really long walk to strech the legs, right? You could likely save yourself some time with the right spells, but... is that going to be safe?", + "text": "Nothing like a really long walk to stretch the legs, right? You could likely save yourself some time with the right spells, but... is that going to be safe?", "options": [ { "name": "(Begin your quest)" @@ -592,7 +592,7 @@ ] } ], - "name": "Quickly and discretely help yourself to a spell before continuing", + "name": "Quickly and discreetly help yourself to a spell before continuing", "text": "You receive a spell of dubious quality.", "options": [ { @@ -849,7 +849,7 @@ "POIReference": "" } ], - "text": "Consciously or unconsciously, you brush your shoulders off as you walk back in to town. The locals appear delighted that you have taken care of their problem. (+3 local reputation)", + "text": "Consciously or unconsciously, you brush your shoulders off as you walk back into town. The locals appear delighted that you have taken care of their problem. (+3 local reputation)", "options": [ { "action": [ @@ -1047,7 +1047,7 @@ }, { "name": "\"Urgency is expensive.\"", - "text": "\"So is not being the next scheduled burial.\" As you're still processesing that statement, the figure continues. \"Ten mana shards. And you can keep the bones.\"", + "text": "\"So is not being the next scheduled burial.\" As you're still processing that statement, the figure continues. \"Ten mana shards. And you can keep the bones.\"", "options": [ { "action": [ @@ -1284,7 +1284,7 @@ } ], "name": "You shrug your shoulders. It's not your problem. (Decline Quest)", - "text": "The criminal glances at you and hurredly scampers off. (-1 Reputation)", + "text": "The criminal glances at you and hurriedly scampers off. (-1 Reputation)", "options": [ { "name": "(Continue)" @@ -1343,7 +1343,7 @@ ] }, { - "name": "You clear your throat in an exagerated manner.", + "name": "You clear your throat in an exaggerated manner.", "text": "The $(enemy_2) drops a small satchel as they begin to run away.", "options": [ { @@ -2225,7 +2225,7 @@ }, { "name": "Curious as to why this would be on the board, your gaze lingers for a moment.", - "text": "As you look at the wordless paper, words find their way in to your mind by unknown other means. 'FIND.' '{COLOR=red}KILL!{ENDCOLOR}' 'REWARD.'", + "text": "As you look at the wordless paper, words find their way into your mind by unknown means. 'FIND.' '{COLOR=red}KILL!{ENDCOLOR}' 'REWARD.'", "options": [ { "action": [ @@ -2275,7 +2275,7 @@ ] }, { - "name": "You decide that the invasive thoughts, if you can call them that, are unwelcomed, and you take a step back.", + "name": "You decide that the invasive thoughts, if you can call them that, are unwelcome, and you take a step back.", "text": "The thoughts urgently follow you for a moment. '{COLOR=red}KKKKiiiiill...{ENDCOLOR}' But as you take another step back, the words vanish from your mind.", "options": [ { @@ -2310,7 +2310,7 @@ "options": [ { "name": "You continue to read.", - "text": "Secondly, another handwriting has scrawled over what might have actually been a romantic bit with the following. \"Don't bother. I killed him yesterday\"", + "text": "Secondly, another's handwriting was scrawled over what might have actually been a romantic bit with the following. \"Don't bother. I killed him yesterday\"", "options": [ { "name": "You shake your head and walk away. (Decline Quest)" @@ -2727,7 +2727,7 @@ ] } ], - "name": "\"Almost. I believe there's a reward due to level the scales.\"", + "name": "\"Almost. I believe there's a reward due, to level the scales.\"", "text": "(-1 Local Reputation) The druid frowns slightly, but hands you a bundle wrapped in small vines.", "options": [ { @@ -2902,7 +2902,7 @@ "options": [ { "name": "\"Capable just so happens to be my middle name.\"", - "text": "He looks perplexed for a moment, but glances back at the wagon as though distracted by it. \"I was hoping you could handle some business for me\"", + "text": "He looks perplexed for a moment, but glances back at the wagon as though distracted by it. \"I was hoping you could handle some business for me.\"", "options": [ { "name": "Business? What sort of business?", @@ -3683,7 +3683,7 @@ "POIReference": "$(poi_2)" } ], - "text": "Despite the insistance of the needle you decide that you will not finish clearing the $(poi_2). As if it could sense this somehow, the onyx compass disappears. (-2 Local Reputation)", + "text": "Despite the insistence of the needle you decide that you will not finish clearing the $(poi_2). As if it could sense this somehow, the onyx compass disappears. (-2 Local Reputation)", "options": [ { "name": "(Quest Failed)" @@ -3790,7 +3790,7 @@ "name": "A Vision of Destruction", "description": "Clear out all enemies in the $(poi_1) and report back", "offerDialog": { - "text": "Walking in to the village, an old man looks up as if expecting you and rushes over (to the extent that he is able) \"$(playername). I need you to turn around and leave. NOW.\"", + "text": "Walking into the village, an old man looks up as if expecting you and rushes over (to the extent that he is able) \"$(playername). I need you to turn around and leave. NOW.\"", "options": [ { "name": "You take a good look at the old man, but do not recognize his features. \"Should I know you?\"", @@ -4003,7 +4003,7 @@ "text": "\"My vision was less than specific about whether or not it would be changed by your actions. So... yes.\"", "options": [ { - "name": "You glance around at a clear sky warily before going on in to town. (Complete Quest)" + "name": "You glance around at a clear sky warily before going on into town. (Complete Quest)" } ] } @@ -4139,7 +4139,7 @@ }, { "name": "\"I must decline. I respect the local inhabitants far more than faceless nobility.\" (Decline Quest)", - "text": "He gives you the smallest bow imaginable, just enough to say that one was given without indicating respect.", + "text": "He gives you the smallest bow imaginable, just enough to say that one was given, without indicating respect.", "options": [ { "name": "(Continue)" @@ -4174,7 +4174,7 @@ }, { "name": "You can't put your finger on it, but something seems off about the man. \"This isn't a good time.\" (Decline Quest)", - "text": "He gives you the smallest bow imaginable, just enough to say that one was given without indicating respect. (-1 Local Reputation)", + "text": "He gives you the smallest bow imaginable, just enough to say that one was given, without indicating respect. (-1 Local Reputation)", "options": [ { "name": "(Continue)" @@ -4345,7 +4345,7 @@ "options": [ { "name": "You wait for him to continue.", - "text": "\"I've come in to an inheritance of a small estate that I've been expecting for years. Recently, I've had some hard times, and I've convinced some individuals to let me borrow against the land.\" ", + "text": "\"I've come into an inheritance of a small estate that I've been expecting for years. Recently, I've had some hard times, and I've convinced some individuals to let me borrow against the land.\" ", "options": [ { "name": "\"I see.\" You think you know where this is headed.", @@ -4588,7 +4588,7 @@ "text": "Most of the ads are nondescript, weather worn, or written in an unfamiliar language. A few catch your eye, however.", "options": [ { - "name": "You look at what seems to be an advertisment of some sort off to one side.", + "name": "You look at what seems to be an advertisement of some sort off to one side.", "text": "It reads: \"Gimgee's self-replicating paper. When you need unlimited paper or to clear a forest from afar, it's got to be Gimgee's\".", "options": [ { @@ -4657,7 +4657,7 @@ }, "prologue": {}, "epilogue": { - "text": "You feel awkward pulling your $(enemy_1)s in to town, but it doesn't actually seem that out of place here with other macabre scenes around. (This quest will only given in black biome in the future).", + "text": "You feel awkward pulling your $(enemy_1)s into town, but it doesn't actually seem that out of place here with other macabre scenes around. (This quest will only given in black biome in the future).", "options": [ { "name": "You look around for someone that seems to be expecting bodies.", @@ -4708,7 +4708,7 @@ }, { "name": "You take a closer look at the carts.", - "text": "$(enemy_1)s and a few random creatures are filling most of one cart., while the other holds a few identical satchels of goods.", + "text": "$(enemy_1)s and a few random creatures are filling most of one cart, while the other holds a few identical satchels of goods.", "options": [ { "name": "Turn your attention to the carts' attendant.", @@ -4862,7 +4862,7 @@ "text": "Most of the ads are nondescript, weather worn, or written in an unfamiliar language. A few catch your eye, however.", "options": [ { - "name": "You look at what seems to be an advertisment of some sort off to one side.", + "name": "You look at what seems to be an advertisement of some sort off to one side.", "text": "\"A focused mind receives great rewards. Focus on defeating 3 $(enemy_2)s, and be rewarded.\"", "options": [ { @@ -4952,7 +4952,7 @@ } ], "name": "Warily take the items.", - "text": "No sooner than you do, the Djinn dissapears in a puff of smoke. When you turn back, the $(enemy_2) you just defeated has vanished as well.", + "text": "No sooner than you do, the Djinn disappears in a puff of smoke. When you turn back, the $(enemy_2) you just defeated has vanished as well.", "options": [ { "action": [ @@ -5150,7 +5150,7 @@ } ], "name": "\"And if I bring in six?\" (Accept Quest)", - "text": "\"Then you will have brought down too many.We're thinning them, not removing them.\"", + "text": "\"Then you will have brought down too many. We're thinning them, not removing them.\"", "options": [ { "name": "You nod and prepare to leave. (Continue)" @@ -5597,7 +5597,7 @@ "text": "With little hope of catching the damsel, he turns his attention to you. \"Can I interest you in assisting me with some scientific experiments?\"", "options": [ { - "name": "\"It really depends on what they are.\" You look at him suspsiciously.", + "name": "\"It really depends on what they are.\" You look at him suspiciously.", "text": "\"You're not a farmhand, so it will have to be.\" He thinks for a moment, pulling out a well worn notebook and flipping through the pages.", "options": [ { @@ -5633,7 +5633,7 @@ "name": "\"I can do that.\" (Accept Quest)" }, { - "name": "\"Sorry, I just decided that I'm more in to magic than science.\" (Decline Quest)" + "name": "\"Sorry, I just decided that I'm more into magic than science.\" (Decline Quest)" } ] } @@ -5749,7 +5749,7 @@ "text": "Most of the ads are nondescript, weather worn, or written in an unfamiliar language. A few catch your eye, however.", "options": [ { - "name": "You look at what seems to be an advertisment of some sort off to one side.", + "name": "You look at what seems to be an advertisement of some sort off to one side.", "text": "It reads: \"Gimgee's rocks. When you need a good rock, think Gimgee's\".", "options": [ { @@ -5905,7 +5905,7 @@ "name": "Heart of a Champion", "description": "Enter and win an upcoming arena event", "offerDialog": { - "text": "\"DO YOU HAVE WHAT IT TAKES? ARE YOU THE BEST IN SHANDALAR???\" A young girl yells at the top of her lungs at each passer by in the town. Most people come in to view already covering their ears, having heard this plenty of times before.", + "text": "\"DO YOU HAVE WHAT IT TAKES? ARE YOU THE BEST IN SHANDALAR???\" A young girl yells at the top of her lungs at each passer by in the town. Most people come into view already covering their ears, having heard this plenty of times before.", "options": [ { "name": "You walk over to her. \"Okay, kid, settle down, I heard you. What's this about?\"", @@ -6065,7 +6065,7 @@ "objective": "Travel", "prologue": {}, "epilogue": { - "text": "As you walk through the $(poi_1) gates, you can feel the excitement building, eminating, radiating from the city's arena. Most of the populace is already there or on their way. ", + "text": "As you walk through the $(poi_1) gates, you can feel the excitement building, emanating, radiating from the city's arena. Most of the populace is already there or on their way. ", "options": [ { "name": "(continue)", @@ -6127,7 +6127,7 @@ "POIReference": "" } ], - "name": "Giant bugs holding balls eh ? Count me out. (Decline quest)", + "name": "Giant bugs holding balls eh? Count me out. (Decline quest)", "text": "Figured you weren't up to the challenge, come back to me when you are.", "options": [ { @@ -6136,7 +6136,7 @@ ] }, { - "name": "Let me guess, you want to me to deal with this situation ?", + "name": "Let me guess, you want to me to deal with this situation?", "text": "Well Yes, Let me explain the situation; Xira's balls have become a bit of a problem. She has been hosting them every night, and they're becoming increasingly extravagant and disruptive. The townspeople are getting tired of the constant noise and commotion, and it's affecting their daily lives.", "options": [ { @@ -6228,7 +6228,7 @@ ] } ], - "name": "It's nothing I coudn't handle (Complete Quest)" + "name": "It's nothing I couldn't handle (Complete Quest)" } ] }, @@ -6331,7 +6331,7 @@ "POIReference": "" } ], - "name": "Sorry, I don't have to the time for this. (Decline quest)", + "name": "Sorry, I don't have the time for this. (Decline quest)", "text": "Figured you weren't up to the challenge, come back to me when you are.", "options": [ { @@ -6340,11 +6340,11 @@ ] }, { - "name": "Let me guess, you want to me to deal with this situation ?", + "name": "Let me guess, you want to me to deal with this situation?", "text": "The factory, now infested with an array of peculiar mechs and skilled artificers, poses a grave threat to our community and the delicate balance of technology. Slobad, once hailed as a genius, was known for his unorthodox creations and their volatile nature. However, a catastrophic incident occurred years ago, leading to the factory's abandonment. Now, the mechanical monstrosities have been reactivated, wreaking havoc on unsuspecting wanderers and nearby settlements.", "options": [ { - "name": "I see. So you want me to go to his factory and defeat him ?", + "name": "I see. So you want me to go to his factory and defeat him?", "text": "Your task, should you accept it, is to venture into Slobad's factory and cleanse it of its mechanical menaces. You will face a myriad of strange mechs, each with its unique capabilities and behaviors. Additionally, the factory's artificers, skilled engineers corrupted by their own creations, will fiercely defend their inventions, making your mission all the more challenging.", "options": [ { @@ -6364,7 +6364,7 @@ "POIReference": "" } ], - "name": "I'll take care of it, note the location of the factory on my map.(Accept Quest) (WARNING HARD QUEST)", + "name": "I'll take care of it. If you'd note the location of the factory on my map... (Accept Quest) (WARNING HARD QUEST)", "text": "Once you have vanquished the mechanical threat and quelled the chaos within the factory, return to me, Maven the Alchemist, and you shall be rewarded handsomely for your bravery and service to our community. Be warned, however, for the path ahead will test your mettle, cunning, and combat prowess. May fortune favor you on this perilous undertaking!" }, { @@ -6384,7 +6384,7 @@ "POIReference": "" } ], - "name": "\"Do you really think I have nothing better to do ? Find someone else to take care of it\" (Decline Quest)", + "name": "\"Do you really think I have nothing better to do? Find someone else to take care of it\" (Decline Quest)", "text": "Maven the Alchemist keeps a passive look on his face. \"Soon those things will be balanced as well.\"", "options": [ { @@ -6434,7 +6434,7 @@ ] } ], - "name": "It's nothing I coudn't handle (Complete Quest)" + "name": "It's nothing I couldn't handle (Complete Quest)" } ] }, @@ -6534,7 +6534,7 @@ "POIReference": "" } ], - "name": "Sorry, I don't have to the time for this. (Decline quest)", + "name": "Sorry, I don't have the time for this. (Decline quest)", "text": "Figured you weren't up to the challenge, come back to me when you are. (-1 local reputation)", "options": [ { @@ -6547,7 +6547,7 @@ "text": "Thank you, noble adventurer. Slimefoot is a creature of pure malevolence, a monstrous being that has taken root in the heart of the treacherous swamp. Its corrosive touch and toxic aura have brought devastation to our lands. To defeat it, you must journey through the perilous swamp, filled with treacherous terrain and deadly creatures lurking within.", "options": [ { - "name": "I see. So you want me to travel to Slimefoots swamp and defeat him ?", + "name": "I see. So you want me to travel to Slimefoot's swamp and defeat him?", "text": "Slimefoot is a formidable foe, adept at both offense and defense. Its body secretes a corrosive slime, and its tentacles strike with lightning speed. Prepare yourself for a challenging battle, my friend. Draw upon your combat skills, use potions and magical abilities wisely, and exploit any weaknesses you can find. Only then can you hope to overcome this vile creature.", "options": [ { @@ -6632,7 +6632,7 @@ ] } ], - "name": "It's nothing I coudn't handle (Complete Quest)" + "name": "It's nothing I couldn't handle (Complete Quest)" } ] }, @@ -6688,7 +6688,7 @@ { "id": 2, "name": "Travel", - "description": "Return to town and report your success in clearing Slimefoots Lair.", + "description": "Return to town and report your success in clearing Slimefoot's Lair.", "mapFlag": "", "mapFlagValue": 1, "here": true, @@ -6733,7 +6733,7 @@ "POIReference": "" } ], - "name": "Sorry, I don't have to the time for this. (Decline Quest)", + "name": "Sorry, I don't have the time for this. (Decline Quest)", "text": "Figured you weren't up to the challenge, come back to me when you are. ", "options": [ { @@ -6742,7 +6742,7 @@ ] }, { - "name": "Let me guess, you want to me to deal with this situation ?", + "name": "Let me guess, you want to me to deal with this situation?", "text": "The town council seeks the aid of a skilled and courageous individual like yourself to venture into the depths of the old sewer near this town and eradicate this slimy menace once and for all.", "options": [ { @@ -6766,7 +6766,7 @@ "POIReference": "" } ], - "name": "Consider it done, note the location of the old sewers on my map. (Accept Quest) (WARNING HARD QUEST)" + "name": "Consider it done. If you'd note the location of the old sewers on my map... (Accept Quest) (WARNING HARD QUEST)" }, { "action": [ @@ -6837,7 +6837,7 @@ ] } ], - "name": "It's nothing I coudn't handle (Complete Quest)" + "name": "It's nothing I couldn't handle (Complete Quest)" } ] }, @@ -6927,7 +6927,7 @@ "options": [ { "name": "I need answers..", - "text": "The only thing that stands clearly in your mind, is an unexplicable desire to march towards a strange structure in the nearby moonlight. You cannot explain the feeling, but it as if it's expecting your arrival.", + "text": "The only thing that stands clearly in your mind, is an inexplicable desire to march towards a strange structure in the nearby moonlight. You cannot explain the feeling, but it as if it's expecting your arrival.", "options": [ { "name": "(Approach)" @@ -7199,7 +7199,7 @@ }, { "name": "\"Cut to the chase already.\"", - "text": "\"Right. He and his hole dissapeared, then another appeared and beasties came out, and I ran. Simple enough?\"", + "text": "\"Right. He and his hole disappeared, then another appeared and beasties came out, and I ran. Simple enough?\"", "options": [ { "action": [ @@ -7402,7 +7402,7 @@ ], "objective": "Travel", "prologue": { - "text": "(Old Man's Voice) All major locations in Innistrad can be divided up in to one of two categories: towns and dungeons.", + "text": "(Old Man's Voice) All major locations in Innistrad can be divided up into one of two categories: towns and dungeons.", "options": [ { "name": "How are you speaking to me?", @@ -7410,7 +7410,7 @@ "options": [ { "name": "Thanks for the advice...", - "text": "As i'm so kind, have another hint: If you see one, follow a road. All roads lead to a town. You also move faster on roads and fewer enemies will appear.", + "text": "As I'm so kind, have another hint: If you see one, follow a road. All roads lead to a town. You also move faster on roads and fewer enemies will appear.", "options": [ { "name": "(Say nothing and set off)" @@ -7434,7 +7434,7 @@ "objective": "Leave", "anyPOI": true, "prologue": { - "text": "(Old Man's Voice) You will find the towns in a region of Innistrad will look similar to eachother, and offer many of the same services. Though larger towns will offer more...", + "text": "(Old Man's Voice) You will find the towns in a region of Innistrad will look similar to each other, and offer many of the same services. Though larger towns will offer more...", "options": [ { "name": "Will I ever be free of your voice?", @@ -7508,7 +7508,7 @@ "text": "*Chuckles again* You'll see... Unlike on the world map, an enemy that defeats you in a dungeon will remain on the map, to torment you; you can try to duel them again, or run away and seek out another opponent. If you need to heal yourself, go back to a town.", "options": [ { - "name": "*Reamain silent*", + "name": "*Remain silent*", "text": "Oh! Also, some quests like this one, have multiple objectives that can be achieved simultaneously. Your other objective is to find and enter a cave on the world map. An enemy defeated in a cave or on the way there I will count as the enemy to defeat. Just for you. So feel free to do these things in any order.", "options": [ { @@ -7600,7 +7600,7 @@ { "id": 31, "isTemplate": true, - "name": "Buillding A Collection", + "name": "Building A Collection", "offerDialog": {}, "prologue": {}, "epilogue": {}, @@ -7780,7 +7780,7 @@ "POIReference": "" } ], - "name": "Sorry, I don't have to the time for this. (Decline Quest)", + "name": "Sorry, I don't have the time for this. (Decline Quest)", "text": "Figured you weren't up to the challenge, come back to me when you are. ", "options": [ { @@ -7885,7 +7885,7 @@ ] } ], - "name": "It's nothing I coudn't handle (Complete Quest)" + "name": "It's nothing I couldn't handle (Complete Quest)" } ] }, @@ -7986,7 +7986,7 @@ "POIReference": "" } ], - "name": "Sorry, I don't have to the time for this. (Decline Quest)", + "name": "Sorry, I don't have the time for this. (Decline Quest)", "text": "Figured you weren't up to the challenge, come back to me when you are. ", "options": [ { @@ -8091,7 +8091,7 @@ ] } ], - "name": "It's nothing I coudn't handle (Complete Quest)" + "name": "It's nothing I couldn't handle (Complete Quest)" } ] }, @@ -8192,7 +8192,7 @@ "POIReference": "" } ], - "name": "Sorry, I don't have to the time for this. (Decline Quest)", + "name": "Sorry, I don't have the time for this. (Decline Quest)", "text": "Figured you weren't up to the challenge, come back to me when you are. ", "options": [ { @@ -8296,7 +8296,7 @@ ] } ], - "name": "It's nothing I coudn't handle (Complete Quest)" + "name": "It's nothing I couldn't handle (Complete Quest)" } ] }, @@ -8429,7 +8429,7 @@ "POIReference": "$(poi_3)" } ], - "name": "(Quest complete)" + "name": "(Quest Complete)" } ] }, @@ -8617,7 +8617,7 @@ "POIReference": "$(poi_3)" } ], - "name": "(Quest complete)" + "name": "(Quest Complete)" } ] }, @@ -8805,7 +8805,7 @@ "POIReference": "$(poi_3)" } ], - "name": "(Quest complete)" + "name": "(Quest Complete)" } ] }, @@ -8958,7 +8958,7 @@ ] }, { - "name": "\"It's just a tree, I can handle some elves, and I support your bansai hobby.\" (Accept Quest)", + "name": "\"It's just a tree, I can handle some elves, and I support your bonsai hobby.\" (Accept Quest)", "action": [ { "removeItem": "", @@ -8992,7 +8992,7 @@ "POIReference": "$(poi_3)" } ], - "name": "(Quest complete)" + "name": "(Quest Complete)" } ] }, @@ -9118,7 +9118,7 @@ "plains_town_tribal", "swamp_town_generic", "swamp_town_identity", - "swamo_town_tribal", + "swamp_town_tribal", "waste_town_generic", "waste_town_identity", "waste_town_tribal" @@ -9180,7 +9180,7 @@ "POIReference": "$(poi_3)" } ], - "name": "(Quest complete)" + "name": "(Quest Complete)" } ] }, @@ -9343,7 +9343,7 @@ ], "anyPOI": true, "prologue": { - "text": "You should note: Since this quest objective is to complete other quests, your navigation arrow will lead you to quest sources while you are tracking it. Once you accept a side quest, go in to your quest log and track that quest in order to update navigation hints.", + "text": "You should note: Since this quest objective is to complete other quests, your navigation arrow will lead you to quest sources while you are tracking it. Once you accept a side quest, go into your quest log and track that quest in order to update navigation hints.", "options": [ { "name": "Understood" @@ -9814,7 +9814,7 @@ ], "prologue": {}, "epilogue": { - "text": "Within moments of walking in to town, a wiry young elf approaches you. Or at least he looks young, it's so hard to tell with elves. He briefly holds out an amulet identical to the one Donovan gave you, and beckons you to follow him to the inn.", + "text": "Within moments of walking into town, a wiry young elf approaches you. Or at least he looks young, it's so hard to tell with elves. He briefly holds out an amulet identical to the one Donovan gave you, and beckons you to follow him to the inn.", "options": [ { "name": "(Continue)", @@ -9881,7 +9881,7 @@ "offerDialog": {}, "prologue": {}, "epilogue": { - "text": "A slight whistle alerts you to Acirxes' presence. You're not entirely sure if he has impeccible timing or if he watched you complete your most recent job, but it appears that Sir Donovan has more work for you.", + "text": "A slight whistle alerts you to Acirxes' presence. You're not entirely sure if he has impeccable timing or if he watched you complete your most recent job, but it appears that Sir Donovan has more work for you.", "options": [ { "name": "(Continue)", @@ -9968,7 +9968,7 @@ "options": [ { "name": "\"Consider it done.\"", - "text": "\"If you can handle that, it should be a short trip from there to $(poi_4) after. I've got some... 'buisiness' to take care of there. I'll meet you at the inn on the north end of the central peninsula.\"", + "text": "\"If you can handle that, it should be a short trip from there to $(poi_4) after. I've got some... 'business' to take care of there. I'll meet you at the inn on the north end of the central peninsula.\"", "action": [ { "setQuestFlag": { @@ -9984,7 +9984,7 @@ "options": [ { "name": "\"No, apparently not.\"", - "text": "\"So that's why we're sending you. Meet me in $(poi_4) after. I've got some... 'buisiness' to take care of there and I'll add a personal reward if you bring me back the head of whoever's running the show at the library.\" He looks away before walking off. \"I owe that much to Gwen...\"", + "text": "\"So that's why we're sending you. Meet me in $(poi_4) after. I've got some... 'business' to take care of there and I'll add a personal reward if you bring me back the head of whoever's running the show at the library.\" He looks away before walking off. \"I owe that much to Gwen...\"", "options": [ { "name": "(Continue)", @@ -10026,7 +10026,7 @@ "options": [ { "name": "(Continue)", - "text": "A small group of scholars carrying books around the entrance seems to confirm the building's purpose, but something odd about their manerisms has you on edge as you approach.", + "text": "A small group of scholars carrying books around the entrance seems to confirm the building's purpose, but something odd about their mannerisms has you on edge as you approach.", "options": [ { "name": "(Continue)" @@ -10590,7 +10590,7 @@ ] }, "epilogue": { - "text": "As you walk in to town, a familiar cloaked figure is waiting and watching for you.", + "text": "As you walk into town, a familiar cloaked figure is waiting and watching for you.", "options": [ { "name": "(Continue)" diff --git a/forge-gui/res/adventure/Innistrad/world/shops.json b/forge-gui/res/adventure/Innistrad/world/shops.json index 8012b9f33c7..0d2f1e9b8d1 100644 --- a/forge-gui/res/adventure/Innistrad/world/shops.json +++ b/forge-gui/res/adventure/Innistrad/world/shops.json @@ -171,12 +171,12 @@ "rewards": [ { "count":6, - "cardText": "draw(s)?|(exile|reveal|look|search).*library|scry|seek|conjure ", + "cardText": "draw(s)?|(exile|reveal|look|search).*library|scry|seek|conjure", "colors": ["blue"] }, { "count":2, - "cardText": "draw(s)?|(exile|reveal|look|search).*library|scry|seek|conjure " + "cardText": "draw(s)?|(exile|reveal|look|search).*library|scry|seek|conjure" }] }, { @@ -467,7 +467,7 @@ }] },{ "name":"White4", -"description":"Only mostly dead", +"description":"Only Mostly Dead", "spriteAtlas":"maps/tileset/buildings.atlas", "sprite":"RotatingShop", "overlaySprite":"Overlay6White", @@ -500,7 +500,7 @@ }] },{ "name":"White6", -"description":"Strict dogma", +"description":"Strict Dogma", "spriteAtlas":"maps/tileset/buildings.atlas", "sprite":"RotatingShop", "overlaySprite":"Overlay6White", @@ -982,7 +982,7 @@ }] },{ "name":"Creature2Eldrazi", -"description": "Eldritch Emissaries", +"description":"Eldritch Emissaries", "spriteAtlas":"maps/tileset/buildings.atlas", "sprite":"CreatureShop", "overlaySprite":"Overlay2Colorless", @@ -1429,7 +1429,7 @@ }] },{ "name":"Blue", -"description":"Hermitic Study", +"description":"Hermetic Study", "spriteAtlas":"maps/tileset/buildings.atlas", "sprite":"BlueShop", "rewards": [ @@ -1439,7 +1439,7 @@ }] },{ "name":"Azorius", -"description":"Azorious Shop, LLC", +"description":"Azorius Shop, LLC", "spriteAtlas":"maps/tileset/buildings.atlas", "sprite":"AzoriusShop", "rewards": [ @@ -1623,7 +1623,7 @@ }] },{ "name":"RWG", - "description":"Caberetti Curios", + "description":"Cabaretti Curios", "spriteAtlas":"maps/tileset/buildings.atlas", "sprite":"RWGShop", "rewards": [ @@ -1912,7 +1912,7 @@ }] },{ "name":"Angel", - "description":"Halos R' Us", + "description":"Halos 'R' Us", "spriteAtlas":"maps/tileset/buildings.atlas", "sprite":"AngelShop", "rewards": [ @@ -2231,7 +2231,7 @@ }] },{ "name":"Sliver4Green", - "description":"Venemous Hive", + "description":"Venomous Hive", "spriteAtlas":"maps/tileset/buildings.atlas", "sprite":"SliverShop", "overlaySprite":"Overlay4Green", @@ -4974,7 +4974,7 @@ ] },{ "name":"Shaman", - "description":"Shaman for ya man", + "description":"Shaman for Ya Man", "spriteAtlas":"maps/tileset/buildings.atlas", "sprite":"ShamanShop", "rewards": [ diff --git a/forge-gui/res/adventure/Shandalar Old Border/world/enemies.json b/forge-gui/res/adventure/Shandalar Old Border/world/enemies.json index 45317d55b0c..c2a664a0e40 100644 --- a/forge-gui/res/adventure/Shandalar Old Border/world/enemies.json +++ b/forge-gui/res/adventure/Shandalar Old Border/world/enemies.json @@ -5154,7 +5154,7 @@ "Aberration", "Animal", "Chandra", - "FIre", + "Fire", "IdentityRed" ] }, @@ -5259,7 +5259,7 @@ "Human", "Pyromancer", "Wizard", - "FIre", + "Fire", "IdentityRed" ] }, @@ -5364,7 +5364,7 @@ "Pyromancer", "Human", "Wizard", - "FIre", + "Fire", "IdentityRed" ] }, @@ -5469,7 +5469,7 @@ "Wizard", "Chandra", "Human", - "FIre", + "Fire", "IdentityRed" ] }, @@ -10837,7 +10837,7 @@ ], "colors": "R", "questTags": [ - "FIre", + "Fire", "Elemental", "Humanoid", "Flying", @@ -16103,7 +16103,7 @@ }, { "name": "Human elite", - "nameOverride": "Legionaire", + "nameOverride": "Legionnaire", "sprite": "sprites/enemy/humanoid/human/soldier/legionite.atlas", "deck": [ "decks/standard/human_good.json" diff --git a/forge-gui/res/adventure/Shandalar Old Border/world/quests.json b/forge-gui/res/adventure/Shandalar Old Border/world/quests.json index c63ff7fd6e0..b46fc46d9e4 100644 --- a/forge-gui/res/adventure/Shandalar Old Border/world/quests.json +++ b/forge-gui/res/adventure/Shandalar Old Border/world/quests.json @@ -41,7 +41,7 @@ }, { "name": "\"And what if I find the right people myself?\"", - "text": "He shrugs as though that wouldn't bother him. \"Then I'll have to find someone bigger, badder, and most importantly, faster than you to work with.\"", + "text": "He shrugs as though that wouldn't bother him. \"Then I'll have to find someone bigger, badder, and, most importantly, faster than you to work with.\"", "options": [ { "name": "\"Good luck with that.\" (Decline Quest)" @@ -591,7 +591,7 @@ ] } ], - "name": "Quickly and discretely help yourself to a spell before continuing.", + "name": "Quickly and discreetly help yourself to a spell before continuing.", "text": "You receive a spell of dubious quality.", "options": [ { @@ -1268,7 +1268,7 @@ } ], "name": "You shrug your shoulders. It's not your problem. (Decline Quest)", - "text": "The criminal glances at you and hurredly scampers off. (-1 Reputation)", + "text": "The criminal glances at you and hurriedly scampers off. (-1 Reputation)", "options": [ { "name": "(Continue)" @@ -1327,7 +1327,7 @@ ] }, { - "name": "You clear your throat in an exagerated manner.", + "name": "You clear your throat in an exaggerated manner.", "text": "The $(enemy_2) drops a small satchel as they begin to run away.", "options": [ { @@ -2200,7 +2200,7 @@ }, { "name": "Curious as to why this would be on the board, your gaze lingers for a moment.", - "text": "As you look at the wordless paper, words find their way into your mind by unknown, other, means. 'FIND.' '{COLOR=red}KILL!{ENDCOLOR}' 'REWARD.'", + "text": "As you look at the wordless paper, words find their way into your mind by unknown means. 'FIND.' '{COLOR=red}KILL!{ENDCOLOR}' 'REWARD.'", "options": [ { "action": [ @@ -2285,7 +2285,7 @@ "options": [ { "name": "You continue to read.", - "text": "Secondly, another's handwriting has scrawled over what might have actually been a romantic bit, with the following. \"Don't bother. I killed him yesterday\"", + "text": "Secondly, another's handwriting was scrawled over what might have actually been a romantic bit with the following. \"Don't bother. I killed him yesterday\"", "options": [ { "name": "You shake your head and walk away. (Decline Quest)" @@ -2870,7 +2870,7 @@ "options": [ { "name": "\"Capable just so happens to be my middle name.\"", - "text": "He looks perplexed for a moment, but glances back at the wagon as though distracted by it. \"I was hoping you could handle some business for me\"", + "text": "He looks perplexed for a moment, but glances back at the wagon as though distracted by it. \"I was hoping you could handle some business for me.\"", "options": [ { "name": "Business? What sort of business?", @@ -3646,7 +3646,7 @@ "POIReference": "$(poi_2)" } ], - "text": "Despite the insistance of the compass needle, you decide that you will not finish clearing the $(poi_2). As if it could sense this somehow, the onyx compass disappears. (-2 Local Reputation)", + "text": "Despite the insistence of the compass needle, you decide that you will not finish clearing the $(poi_2). As if it could sense this somehow, the onyx compass disappears. (-2 Local Reputation)", "options": [ { "name": "(Quest Failed)" @@ -3749,7 +3749,7 @@ "name": "A Vision of Destruction", "description": "Clear out all enemies in the $(poi_1) and report back.", "offerDialog": { - "text": "Walking in to the village, an old man looks up as if expecting you and rushes over (to the extent that he is able) \"$(playername). I need you to turn around and leave. NOW.\"", + "text": "Walking into the village, an old man looks up as if expecting you and rushes over (to the extent that he is able) \"$(playername). I need you to turn around and leave. NOW.\"", "options": [ { "name": "You take a good look at the old man, but do not recognize his features. \"Should I know you?\"", @@ -4339,7 +4339,7 @@ "POIReference": "" } ], - "name": "\"So long as I get to keep whatever I find along the way, too.\" (Accept Quest)." + "name": "\"So long as I get to keep whatever I find along the way too.\" (Accept Quest)." }, { "name": "\"I don't think I'm interested. Sorry.\" (Decline Quest)" @@ -4558,7 +4558,7 @@ "text": "Most of the ads are nondescript, weather worn, or written in an unfamiliar language. A few catch your eye, however.", "options": [ { - "name": "You look at what seems to be an advertisement of some sort, off to one side.", + "name": "You look at what seems to be an advertisement of some sort off to one side.", "text": "It reads: \"Gimgee's self-replicating paper. When you need unlimited paper or to clear a forest from afar, it's got to be Gimgee's.\"", "options": [ { @@ -4627,7 +4627,7 @@ }, "prologue": {}, "epilogue": { - "text": "You feel awkward pulling your $(enemy_1)s in to town, but it doesn't actually seem that out of place here with other macabre scenes around. (This quest will only given in black biome in the future).", + "text": "You feel awkward pulling your $(enemy_1)s into town, but it doesn't actually seem that out of place here with other macabre scenes around. (This quest will only given in black biome in the future).", "options": [ { "name": "You look around for someone that seems to be expecting bodies.", @@ -4678,7 +4678,7 @@ }, { "name": "You take a closer look at the carts.", - "text": "$(enemy_1)s and a few random creatures are filling most of one cart., while the other holds a few identical satchels of goods.", + "text": "$(enemy_1)s and a few random creatures are filling most of one cart, while the other holds a few identical satchels of goods.", "options": [ { "name": "Turn your attention to the carts' attendant.", @@ -5116,7 +5116,7 @@ } ], "name": "\"And if I bring in six?\" (Accept Quest)", - "text": "\"Then you will have brought down too many.We're thinning them, not removing them.\"", + "text": "\"Then you will have brought down too many. We're thinning them, not removing them.\"", "options": [ { "name": "You nod and prepare to leave. (Continue)" @@ -5600,7 +5600,7 @@ "name": "\"I can do that.\" (Accept Quest)" }, { - "name": "\"Sorry, I just decided that I'm more in to magic than science.\" (Decline Quest)" + "name": "\"Sorry, I just decided that I'm more into magic than science.\" (Decline Quest)" } ] } @@ -5892,7 +5892,7 @@ "name": "Heart of a Champion", "description": "Enter and win an upcoming arena event.", "offerDialog": { - "text": "\"DO YOU HAVE WHAT IT TAKES? ARE YOU THE BEST IN SHANDALAR???\" A young girl yells at the top of her lungs at each passer by in the town. Most people come in to view already covering their ears, having heard this plenty of times before.", + "text": "\"DO YOU HAVE WHAT IT TAKES? ARE YOU THE BEST IN SHANDALAR???\" A young girl yells at the top of her lungs at each passer by in the town. Most people come into view already covering their ears, having heard this plenty of times before.", "options": [ { "name": "You walk over to her. \"Okay kid, settle down, I heard you. What's this about?\"", @@ -6119,7 +6119,7 @@ ] }, { - "name": "Let me guess, you want to me to deal with this situation ?", + "name": "Let me guess, you want to me to deal with this situation?", "text": "Well yes. Let me explain the situation; Xira's balls have become a bit of a problem. She has been hosting them every night, and they're becoming increasingly extravagant and disruptive. The townspeople are getting tired of the constant noise and commotion, and it's affecting their daily lives.", "options": [ { @@ -6314,7 +6314,7 @@ "POIReference": "" } ], - "name": "Sorry, I don't have to the time for this. (Decline Quest)", + "name": "Sorry, I don't have the time for this. (Decline Quest)", "text": "Figured you weren't up to the challenge, come back to me when you are.", "options": [ { @@ -6323,11 +6323,11 @@ ] }, { - "name": "Let me guess, you want to me to deal with this situation ?", + "name": "Let me guess, you want to me to deal with this situation?", "text": "The factory, now infested with an array of peculiar mechs and skilled artificers, poses a grave threat to our community and the delicate balance of technology. Slobad, once hailed as a genius, was known for his unorthodox creations and their volatile nature. However, a catastrophic incident occurred years ago, leading to the factory's abandonment. Now, the mechanical monstrosities have been reactivated, wreaking havoc on unsuspecting wanderers and nearby settlements.", "options": [ { - "name": "I see. So you want me to go to his factory and defeat him ?", + "name": "I see. So you want me to go to his factory and defeat him?", "text": "Your task, should you accept it, is to venture into Slobad's factory and cleanse it of its mechanical menaces. You will face a myriad of strange mechs, each with its unique capabilities and behaviors. Additionally, the factory's artificers, skilled engineers corrupted by their own creations, will fiercely defend their inventions. Making your mission all the more challenging.", "options": [ { @@ -6347,7 +6347,7 @@ "POIReference": "" } ], - "name": "I'll take care of it, note the location of the factory on my map.(Accept Quest) (WARNING HARD QUEST)", + "name": "I'll take care of it. If you'd note the location of the factory on my map... (Accept Quest) (WARNING HARD QUEST)", "text": "Once you have vanquished the mechanical threat and quelled the chaos within the factory, return to me, Maven the Alchemist, and you shall be rewarded handsomely for your bravery and service to our community. Be warned, however, for the path ahead will test your mettle, cunning, and combat prowess. May fortune favor you on this perilous undertaking!" }, { @@ -6367,7 +6367,7 @@ "POIReference": "" } ], - "name": "\"Do you really think I have nothing better to do ? Find someone else to take care of it\" (Decline Quest)", + "name": "\"Do you really think I have nothing better to do? Find someone else to take care of it\" (Decline Quest)", "text": "Maven the Alchemist keeps a passive look on his face. \"Soon those things will be balanced as well.\"", "options": [ { @@ -6518,7 +6518,7 @@ "POIReference": "" } ], - "name": "Sorry, I don't have to the time for this. (Decline Quest)", + "name": "Sorry, I don't have the time for this. (Decline Quest)", "text": "Figured you weren't up to the challenge, come back to me when you are. (-1 Local Reputation)", "options": [ { @@ -6531,7 +6531,7 @@ "text": "Thank you, noble adventurer. Slimefoot is a creature of pure malevolence. A monstrous being that has taken root in the heart of the treacherous swamp. Its corrosive touch and toxic aura have brought devastation to our lands. To defeat it, you must journey through the perilous swamp, filled with treacherous terrain and deadly creatures lurking within.", "options": [ { - "name": "I see. So you want me to travel to Slimefoots swamp and defeat him ?", + "name": "I see. So you want me to travel to Slimefoot's swamp and defeat him?", "text": "Slimefoot is a formidable foe, adept at both offense and defense. Its body secretes a corrosive slime, and its tentacles strike with lightning speed. Prepare yourself for a challenging battle, my friend. Draw upon your combat skills, use potions and magical abilities wisely, and exploit any weaknesses you can find. Only then can you hope to overcome this vile creature.", "options": [ { @@ -6674,7 +6674,7 @@ { "id": 2, "name": "Travel", - "description": "Return to town and report your success in clearing Slimefoots Lair.", + "description": "Return to town and report your success in clearing Slimefoot's Lair.", "mapFlag": "", "mapFlagValue": 1, "here": true, @@ -6717,7 +6717,7 @@ "POIReference": "" } ], - "name": "Sorry, I don't have to the time for this. (Decline Quest)", + "name": "Sorry, I don't have the time for this. (Decline Quest)", "text": "Figured you weren't up to the challenge, come back to me when you are.", "options": [ { @@ -6726,7 +6726,7 @@ ] }, { - "name": "Let me guess, you want to me to deal with this situation ?", + "name": "Let me guess, you want to me to deal with this situation?", "text": "The town council seeks the aid of a skilled and courageous individual like yourself to venture into the depths of the old sewer near this town and eradicate this slimy menace once and for all.", "options": [ { @@ -6750,7 +6750,7 @@ "POIReference": "" } ], - "name": "Consider it done, note the location of the old sewers on my map. (Accept Quest) (WARNING HARD QUEST)" + "name": "Consider it done. If you'd note the location of the old sewers on my map... (Accept Quest) (WARNING HARD QUEST)" }, { "action": [ @@ -7344,7 +7344,7 @@ ], "objective": "Travel", "prologue": { - "text": "All major locations in Shandalar can be divided up in to one of two categories: towns and dungeons.", + "text": "All major locations in Shandalar can be divided up into one of two categories: towns and dungeons.", "options": [ { "name": "(Continue)", @@ -7381,7 +7381,7 @@ "options": [ { "name": "(Continue)", - "text": "The inn contains some special events. You can also sell extra cards there, or buy temporary extra health.\n\nThe '?' sign denotes a town square / job board where you can obtain side quests.\n\nAll of the other buildings with signs out front are shops, most of them sell cards.\n\nTo leave town, walk back toward the edge of the screen just below your current location.", + "text": "The inn contains some special events. You can also sell extra cards there, or buy temporary extra health.\n\nThe '?' sign denotes a town square or a job board where you can obtain side quests.\n\nAll of the other buildings with signs out front are shops, most of them sell cards.\n\nTo leave town, walk back toward the edge of the screen just below your current location.", "options": [ { "name": "(Continue)", @@ -7441,7 +7441,7 @@ "options": [ { "name": "(Continue)", - "text": "Your next objective is to defeat any single enemy in a duel. You can find them in a dungeon like this one, or wandering around outside on the world map. To begin a duel, simply walk in to the enemy.", + "text": "Your next objective is to defeat any single enemy in a duel. You can find them in a dungeon like this one, or wandering around outside on the world map. To begin a duel, simply walk into the enemy.", "options": [ { "name": "(Continue)", @@ -7713,7 +7713,7 @@ "POIReference": "" } ], - "name": "Sorry, I don't have to the time for this. (Decline Quest)", + "name": "Sorry, I don't have the time for this. (Decline Quest)", "text": "Figured you weren't up to the challenge, come back to me when you are.", "options": [ { @@ -7921,7 +7921,7 @@ "POIReference": "" } ], - "name": "Sorry, I don't have to the time for this. (Decline Quest)", + "name": "Sorry, I don't have the time for this. (Decline Quest)", "text": "Figured you weren't up to the challenge, come back to me when you are.", "options": [ { @@ -8127,7 +8127,7 @@ "POIReference": "" } ], - "name": "Sorry, I don't have to the time for this. (Decline Quest)", + "name": "Sorry, I don't have the time for this. (Decline Quest)", "text": "Figured you weren't up to the challenge, come back to me when you are.", "options": [ { @@ -8367,7 +8367,7 @@ "POIReference": "$(poi_3)" } ], - "name": "(Quest complete)" + "name": "(Quest Complete)" } ] }, @@ -8551,7 +8551,7 @@ "POIReference": "$(poi_3)" } ], - "name": "(Quest complete)" + "name": "(Quest Complete)" } ] }, @@ -8735,7 +8735,7 @@ "POIReference": "$(poi_3)" } ], - "name": "(Quest complete)" + "name": "(Quest Complete)" } ] }, @@ -8918,7 +8918,7 @@ "POIReference": "$(poi_3)" } ], - "name": "(Quest complete)" + "name": "(Quest Complete)" } ] }, @@ -9102,7 +9102,7 @@ "POIReference": "$(poi_3)" } ], - "name": "(Quest complete)" + "name": "(Quest Complete)" } ] }, @@ -9260,7 +9260,7 @@ ], "objective": "CompleteQuest", "prologue": { - "text": "Note: Since this quest objective is to complete other quests, your navigation arrow will lead you to quest sources while you are tracking it. Once you accept a side quest, go in to your quest log and track that quest in order to update navigation hints.", + "text": "Note: Since this quest objective is to complete other quests, your navigation arrow will lead you to quest sources while you are tracking it. Once you accept a side quest, go into your quest log and track that quest in order to update navigation hints.", "options": [ { "name": "(Continue)" @@ -9715,7 +9715,7 @@ "prerequisiteIDs": [ 4 ], "prologue": {}, "epilogue": { - "text": "Within moments of walking in to town, a wiry young elf approaches you. Or at least he looks young, it's so hard to tell with elves. He briefly holds out an amulet identical to the one Donovan gave you, and beckons you to follow him to the inn.", + "text": "Within moments of walking into town, a wiry young elf approaches you. Or at least he looks young, it's so hard to tell with elves. He briefly holds out an amulet identical to the one Donovan gave you, and beckons you to follow him to the inn.", "options": [ { "action": [ @@ -9925,7 +9925,7 @@ "options": [ { "name": "(Continue)", - "text": "A small group of scholars carrying books around the entrance seems to confirm the building's purpose, but something odd about their manerisms has you on edge as you approach.", + "text": "A small group of scholars carrying books around the entrance seems to confirm the building's purpose, but something odd about their mannerisms has you on edge as you approach.", "options": [ { "name": "(Continue)" @@ -10492,7 +10492,7 @@ "POIReference": "" } ], - "text": "As you walk in to town, a familiar cloaked figure is waiting and watching for you.", + "text": "As you walk into town, a familiar cloaked figure is waiting and watching for you.", "options": [ { "name": "(Continue)" diff --git a/forge-gui/res/adventure/Shandalar Old Border/world/shops.json b/forge-gui/res/adventure/Shandalar Old Border/world/shops.json index cd02a244a45..c702be7e517 100644 --- a/forge-gui/res/adventure/Shandalar Old Border/world/shops.json +++ b/forge-gui/res/adventure/Shandalar Old Border/world/shops.json @@ -467,7 +467,7 @@ }] },{ "name":"White4", - "description":"Only mostly dead", + "description":"Only Mostly Dead", "spriteAtlas":"maps/tileset/buildings.atlas", "sprite":"RotatingShop", "overlaySprite":"Overlay6White", @@ -1415,7 +1415,7 @@ }] },{ "name":"Blue", - "description":"Hermitic Study", + "description":"Hermetic Study", "spriteAtlas":"maps/tileset/buildings.atlas", "sprite":"BlueShop", "rewards": [ @@ -1830,7 +1830,7 @@ }] },{ "name":"Angel", - "description":"Halos R' Us", + "description":"Halos 'R' Us", "spriteAtlas":"maps/tileset/buildings.atlas", "sprite":"AngelShop", "rewards": [ { "count":8, "subTypes": ["Angel"] } ] @@ -2577,7 +2577,7 @@ "rewards": [ { "count":4, "type":"Union", "cardUnion": [ { "subTypes": ["Rogue"] }, { "cardText": "Rogue" } ] }, { "count":4, "type":"Union", "cardUnion": [ { "subTypes": ["Rogue"], "colors": ["blue"] }, { "cardText": "Rogue", "colors": ["blue"] } ] } ] },{ "name":"Shaman", - "description":"Shaman for ya man", + "description":"Shaman for Ya Man", "spriteAtlas":"maps/tileset/buildings.atlas", "sprite":"ShamanShop", "rewards": [ { "count":8, "type":"Union", "cardUnion": [ { "subTypes": ["Shaman"] }, { "cardText": "Shaman" } ] } ] @@ -2671,7 +2671,7 @@ }, { "name": "GreenBoosterPackShop", - "description":"Nature’s Nurture Packs", + "description":"Nature's Nurture Packs", "spriteAtlas":"maps/tileset/buildings.atlas", "overlaySprite": "Overlay4Green", "sprite": "BoosterShop", diff --git a/forge-gui/res/adventure/Shandalar Old Border/world/shops.json.bak b/forge-gui/res/adventure/Shandalar Old Border/world/shops.json.bak index 1eb639d23ca..1cfdd35ec43 100644 --- a/forge-gui/res/adventure/Shandalar Old Border/world/shops.json.bak +++ b/forge-gui/res/adventure/Shandalar Old Border/world/shops.json.bak @@ -467,7 +467,7 @@ }] },{ "name":"White4", - "description":"Only mostly dead", + "description":"Only Mostly Dead", "spriteAtlas":"maps/tileset/buildings.atlas", "sprite":"RotatingShop", "overlaySprite":"Overlay6White", @@ -1341,7 +1341,7 @@ }] },{ "name":"Blue", - "description":"Hermitic Study", + "description":"Hermetic Study", "spriteAtlas":"maps/tileset/buildings.atlas", "sprite":"BlueShop", "rewards": [ @@ -1756,7 +1756,7 @@ }] },{ "name":"Angel", - "description":"Halos R' Us", + "description":"Halos 'R' Us", "spriteAtlas":"maps/tileset/buildings.atlas", "sprite":"AngelShop", "rewards": [ { "count":8, "subTypes": ["Angel"] } ] @@ -2431,7 +2431,7 @@ "rewards": [ { "count":4, "type":"Union", "cardUnion": [ { "subTypes": ["Rogue"] }, { "cardText": "Rogue" } ] }, { "count":4, "type":"Union", "cardUnion": [ { "subTypes": ["Rogue"], "colors": ["blue"] }, { "cardText": "Rogue", "colors": ["blue"] } ] } ] },{ "name":"Shaman", - "description":"Shaman for ya man", + "description":"Shaman for Ya Man", "spriteAtlas":"maps/tileset/buildings.atlas", "sprite":"ShamanShop", "rewards": [ { "count":8, "type":"Union", "cardUnion": [ { "subTypes": ["Shaman"] }, { "cardText": "Shaman" } ] } ] @@ -2525,7 +2525,7 @@ }, { "name": "GreenBoosterPackShop", - "description":"Nature’s Nurture Packs", + "description":"Nature's Nurture Packs", "spriteAtlas":"maps/tileset/buildings.atlas", "overlaySprite": "Overlay4Green", "sprite": "BoosterShop", diff --git a/forge-gui/res/adventure/Shandalar Old Border/world/town_names_black.txt b/forge-gui/res/adventure/Shandalar Old Border/world/town_names_black.txt index 6389c96e9aa..0bcfe96935b 100644 --- a/forge-gui/res/adventure/Shandalar Old Border/world/town_names_black.txt +++ b/forge-gui/res/adventure/Shandalar Old Border/world/town_names_black.txt @@ -369,7 +369,7 @@ Mirelight Ravencrest Mill Korven's Tomb Gorgon's Gallery -Moldermnouth +Moudhrelmont The Three Sisters Moldermouth Reaver's Point diff --git a/forge-gui/res/adventure/Shandalar Old Border/world/town_names_blue.txt b/forge-gui/res/adventure/Shandalar Old Border/world/town_names_blue.txt index c7bf62dbd28..565a46be16b 100644 --- a/forge-gui/res/adventure/Shandalar Old Border/world/town_names_blue.txt +++ b/forge-gui/res/adventure/Shandalar Old Border/world/town_names_blue.txt @@ -335,7 +335,7 @@ Fourmill Run Port Rachkham Cloudy Shallows Slumnis -Silver Pointe +Silver Point Abjuration Point Crow's Nest The Rookery diff --git a/forge-gui/res/adventure/Shandalar Old Border/world/town_names_green.txt b/forge-gui/res/adventure/Shandalar Old Border/world/town_names_green.txt index 575e2e7d3e2..a339330f88c 100644 --- a/forge-gui/res/adventure/Shandalar Old Border/world/town_names_green.txt +++ b/forge-gui/res/adventure/Shandalar Old Border/world/town_names_green.txt @@ -333,7 +333,7 @@ Three Oaks Bowerglen Redwood Ford Ogre's Gate -Mandrake Hollow +Mandrake Hollow Irongate Mott Felden Pond Foxglove Point diff --git a/forge-gui/res/adventure/Shandalar Old Border/world/town_names_waste.txt b/forge-gui/res/adventure/Shandalar Old Border/world/town_names_waste.txt index c7b778d7b38..5e49b77af8c 100644 --- a/forge-gui/res/adventure/Shandalar Old Border/world/town_names_waste.txt +++ b/forge-gui/res/adventure/Shandalar Old Border/world/town_names_waste.txt @@ -45,7 +45,7 @@ Celestine Crossing Celestine Town Celestine Village Celestine Market -Camp Celestine +Camp Celestine Celestine Tower Celestine Bazaar Celestine Forge @@ -73,7 +73,7 @@ Eloren Crossing Eloren Town Eloren Village Eloren Market -Camp Eloren +Camp Eloren Eloren Tower Eloren Bazaar Eloren Forge @@ -87,7 +87,7 @@ Hornwall Crossing Hornwall Town Hornwall Village Hornwall Market -Camp Hornwall +Camp Hornwall Hornwall Tower Hornwall Bazaar Hornwall Forge @@ -101,7 +101,7 @@ Kraag Crossing Kraagtown Kraag Village Kraag Market -Camp Kraag +Camp Kraag Kraag Tower Kraag Bazaar Kraag Forge @@ -385,7 +385,7 @@ Merrowcreek Crookedbrook Warrior's Rest Golemstooth -Gobspike +Gobspike Rabbitsden Greyrock Rabbitpath diff --git a/forge-gui/res/adventure/Shandalar/world/quests.json b/forge-gui/res/adventure/Shandalar/world/quests.json index cc8eb1902ca..0571793f72f 100644 --- a/forge-gui/res/adventure/Shandalar/world/quests.json +++ b/forge-gui/res/adventure/Shandalar/world/quests.json @@ -6347,7 +6347,7 @@ "POIReference": "" } ], - "name": "I'll take care of it, note the location of the factory on my map.(Accept Quest) (WARNING HARD QUEST)", + "name": "I'll take care of it. If you'd note the location of the factory on my map... (Accept Quest) (WARNING HARD QUEST)", "text": "Once you have vanquished the mechanical threat and quelled the chaos within the factory, return to me, Maven the Alchemist, and you shall be rewarded handsomely for your bravery and service to our community. Be warned, however, for the path ahead will test your mettle, cunning, and combat prowess. May fortune favor you on this perilous undertaking!" }, { diff --git a/forge-gui/res/adventure/Shandalar/world/shops.json b/forge-gui/res/adventure/Shandalar/world/shops.json index c4daabc2a53..fda46190466 100644 --- a/forge-gui/res/adventure/Shandalar/world/shops.json +++ b/forge-gui/res/adventure/Shandalar/world/shops.json @@ -1439,7 +1439,7 @@ }] },{ "name":"Azorius", -"description":"Azorious Shop, LLC", +"description":"Azorius Shop, LLC", "spriteAtlas":"maps/tileset/buildings.atlas", "sprite":"AzoriusShop", "rewards": [ diff --git a/forge-gui/res/adventure/Shandalar/world/town_names_blue.txt b/forge-gui/res/adventure/Shandalar/world/town_names_blue.txt index c7bf62dbd28..565a46be16b 100644 --- a/forge-gui/res/adventure/Shandalar/world/town_names_blue.txt +++ b/forge-gui/res/adventure/Shandalar/world/town_names_blue.txt @@ -335,7 +335,7 @@ Fourmill Run Port Rachkham Cloudy Shallows Slumnis -Silver Pointe +Silver Point Abjuration Point Crow's Nest The Rookery diff --git a/forge-gui/res/adventure/common/maps/map/grove/grove_1_bears.tmx b/forge-gui/res/adventure/common/maps/map/grove/grove_1_bears.tmx index 8bf9638f732..73e8f3c27fd 100644 --- a/forge-gui/res/adventure/common/maps/map/grove/grove_1_bears.tmx +++ b/forge-gui/res/adventure/common/maps/map/grove/grove_1_bears.tmx @@ -142,7 +142,7 @@ [ { - "text": "Suddenly you hear strange sounds coming behind you. A coarse voice thunders behind you: HONEY MINE, YOU DIE !", + "text": "Suddenly you hear strange sounds coming behind you. A coarse voice thunders behind you: HONEY MINE, YOU DIE!", "options": [ { "name": "You have a bad feeling about this.", diff --git a/forge-gui/res/adventure/common/maps/map/main_story_explore/library_of_varsil_3.tmx b/forge-gui/res/adventure/common/maps/map/main_story_explore/library_of_varsil_3.tmx index 27a3d85c4db..39c0710a9d6 100644 --- a/forge-gui/res/adventure/common/maps/map/main_story_explore/library_of_varsil_3.tmx +++ b/forge-gui/res/adventure/common/maps/map/main_story_explore/library_of_varsil_3.tmx @@ -94,7 +94,7 @@ [ { - "text": "'Shandalaar’s Most Burnable Cities'. Well, this one sounds like light reading...", + "text": "'Shandalaar's Most Burnable Cities'. Well, this one sounds like light reading...", "options": [ { "name": "(Continue)", diff --git a/forge-gui/res/adventure/common/maps/map/maze/maze_2.tmx b/forge-gui/res/adventure/common/maps/map/maze/maze_2.tmx index be9fad594ed..583faa56ca2 100644 --- a/forge-gui/res/adventure/common/maps/map/maze/maze_2.tmx +++ b/forge-gui/res/adventure/common/maps/map/maze/maze_2.tmx @@ -63,7 +63,7 @@ [ { - "text": "Suddenly you hear strange sounds coming behind you. A strange voice calls out hoarsely: INTRUDER ! This is your final mistake ! ", + "text": "Suddenly you hear strange sounds coming behind you. A strange voice calls out hoarsely: INTRUDER! This is your final mistake!", "options": [ { "name": "You have a bad feeling about this.", From f6d33ed483d7444f4736409f90a9fdd7ce97d529 Mon Sep 17 00:00:00 2001 From: Jetz72 Date: Tue, 7 Oct 2025 14:51:51 -0400 Subject: [PATCH 303/355] Update bug_report.md Add issue type to template. --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index dd84ea7824f..6a8ca9e1859 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -4,6 +4,7 @@ about: Create a report to help us improve title: '' labels: '' assignees: '' +type: 'Bug' --- @@ -31,7 +32,6 @@ If applicable, add screenshots to help explain your problem. **Smartphone (please complete the following information):** - Device: [e.g. iPhone6] - OS: [e.g. iOS8.1] - - Browser [e.g. stock browser, safari] - Version [e.g. 22] **Additional context** From a22f28ef50299f90f788fa5775a42fbd778e60cd Mon Sep 17 00:00:00 2001 From: Jetz72 Date: Tue, 7 Oct 2025 14:53:15 -0400 Subject: [PATCH 304/355] Update feature_request.md --- .github/ISSUE_TEMPLATE/feature_request.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index bbcbbe7d615..8520249f9cb 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -4,6 +4,7 @@ about: Suggest an idea for this project title: '' labels: '' assignees: '' +type: 'Feature' --- From 6935f962d389dac845d9cef741ee89932eefbbe0 Mon Sep 17 00:00:00 2001 From: Eradev Date: Wed, 8 Oct 2025 05:39:43 -0400 Subject: [PATCH 305/355] Update AKH (#8863) --- forge-gui/res/editions/Amonkhet.txt | 32 ++++++++++++++--------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/forge-gui/res/editions/Amonkhet.txt b/forge-gui/res/editions/Amonkhet.txt index fb59b29580f..2859e50699a 100644 --- a/forge-gui/res/editions/Amonkhet.txt +++ b/forge-gui/res/editions/Amonkhet.txt @@ -2,7 +2,6 @@ Code=AKH Date=2017-04-28 Name=Amonkhet -Code2=AKH Type=Expansion BoosterCovers=5 Booster=10 Common:fromSheet("AKH cards"), 3 Uncommon:fromSheet("AKH cards"), 1 RareMythic:fromSheet("AKH cards"), 1 BasicLand AKH @@ -11,7 +10,6 @@ FatPack=10 FatPackExtraSlots=80 BasicLands AdditionalSetUnlockedInQuest=MPS_AKH ChaosDraftThemes=GRAVEYARD_MATTERS -ScryfallCode=AKH [cards] 1 M Angel of Sanctions @Min Yum @@ -316,18 +314,18 @@ ScryfallCode=AKH 24 g_5_5_wurm @Slawomir Maniak [other] -embalm_angel_of_sanctions -embalm_anointer_priest -embalm_aven_initiate -embalm_aven_wind_guide -embalm_glyph_keeper -embalm_heart-piercer_manticore -embalm_honored_hydra -embalm_labyrinth_guardian -embalm_oketra's_attendant -embalm_sacred_cat -embalm_tah-crop_skirmisher -embalm_temmet_vizier_of_naktamun -embalm_trueheart_duelist -embalm_unwavering_initiate -embalm_vizier_of_many_faces \ No newline at end of file +1 embalm_angel_of_sanctions @Min Yum +2 embalm_anointer_priest @Lake Hurwitz +3 embalm_aven_initiate @Jakub Kasper +4 embalm_aven_wind_guide @Sidharth Chaturvedi +5 embalm_glyph_keeper @Chris Rahn +6 embalm_heart-piercer_manticore @Scott Murphy +7 embalm_honored_hydra @Todd Lockwood +8 embalm_labyrinth_guardian @Yeong-Hao Han +9 embalm_oketra's_attendant @Lake Hurwitz +10 embalm_sacred_cat @Zezhou Chen +11 embalm_tah-crop_skirmisher @Victor Adame Minguez +12 embalm_temmet_vizier_of_naktamun @Anna Steinbauer +13 embalm_trueheart_duelist @Izzy +14 embalm_unwavering_initiate @Greg Opalinski +15 embalm_vizier_of_many_faces @Ryan Yee \ No newline at end of file From 5a59113d78d26a596a7d46efd07e11d2b611ab2d Mon Sep 17 00:00:00 2001 From: Agetian Date: Wed, 8 Oct 2025 14:08:24 +0300 Subject: [PATCH 306/355] - Fix MoveCounters with beneficial counters. (#8865) --- .../java/forge/ai/ability/CountersMoveAi.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/CountersMoveAi.java b/forge-ai/src/main/java/forge/ai/ability/CountersMoveAi.java index 6d6cc83b351..b6d88c8941b 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CountersMoveAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CountersMoveAi.java @@ -424,16 +424,22 @@ public class CountersMoveAi extends SpellAbilityAi { // move counter to opponents creature but only if you can not steal them // try to move to something useless or something that would leave play - List oppList = CardLists.filterControlledBy(tgtCards, ai.getOpponents()); - if (!oppList.isEmpty()) { - List best = CardLists.filter(oppList, card -> { + boolean isNegative = ComputerUtil.isNegativeCounter(cType, src); + List filteredTgtList; + if (isNegative) { + filteredTgtList = CardLists.filterControlledBy(tgtCards, ai.getOpponents()); + } else { + filteredTgtList = CardLists.filter(tgtCards, CardPredicates.isControlledByAnyOf(ai.getAllies()).or(CardPredicates.isController(ai))); + } + if (!filteredTgtList.isEmpty()) { + List best = CardLists.filter(filteredTgtList, card -> { // gain from useless - if (!ComputerUtilCard.isUselessCreature(ai, card)) { + if (isNegative && !ComputerUtilCard.isUselessCreature(ai, card)) { return true; } // source would leave the game - if (!card.hasSVar("EndOfTurnLeavePlay")) { + if (isNegative && !card.hasSVar("EndOfTurnLeavePlay")) { return true; } @@ -441,7 +447,7 @@ public class CountersMoveAi extends SpellAbilityAi { }); if (best.isEmpty()) { - best = oppList; + best = filteredTgtList; } Card card = ComputerUtilCard.getBestCreatureAI(best); From f0f1f5a1d4c4fa0c81c6392a6ea8949b62bfdbb7 Mon Sep 17 00:00:00 2001 From: Agetian Date: Wed, 8 Oct 2025 14:23:11 +0300 Subject: [PATCH 307/355] Slight cleanup amendment to the MoveCounters AI (#8866) * - Fix MoveCounters with beneficial counters. * - Slight cleanup. --- .../src/main/java/forge/ai/ability/CountersMoveAi.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/CountersMoveAi.java b/forge-ai/src/main/java/forge/ai/ability/CountersMoveAi.java index b6d88c8941b..5a8b2caf7d8 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CountersMoveAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CountersMoveAi.java @@ -426,11 +426,9 @@ public class CountersMoveAi extends SpellAbilityAi { // try to move to something useless or something that would leave play boolean isNegative = ComputerUtil.isNegativeCounter(cType, src); List filteredTgtList; - if (isNegative) { - filteredTgtList = CardLists.filterControlledBy(tgtCards, ai.getOpponents()); - } else { - filteredTgtList = CardLists.filter(tgtCards, CardPredicates.isControlledByAnyOf(ai.getAllies()).or(CardPredicates.isController(ai))); - } + filteredTgtList = isNegative ? CardLists.filterControlledBy(tgtCards, ai.getOpponents()) : + CardLists.filter(tgtCards, CardPredicates.isControlledByAnyOf(ai.getAllies()).or(CardPredicates.isController(ai))); + if (!filteredTgtList.isEmpty()) { List best = CardLists.filter(filteredTgtList, card -> { // gain from useless From 7f02c7309046b62951a12b71ad2a80ee1c4ce980 Mon Sep 17 00:00:00 2001 From: Agetian Date: Wed, 8 Oct 2025 20:55:55 +0300 Subject: [PATCH 308/355] Further amendment to AI MoveCounters (#8869) --- forge-ai/src/main/java/forge/ai/ability/CountersMoveAi.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/CountersMoveAi.java b/forge-ai/src/main/java/forge/ai/ability/CountersMoveAi.java index 5a8b2caf7d8..d102ea2065d 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CountersMoveAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CountersMoveAi.java @@ -427,7 +427,7 @@ public class CountersMoveAi extends SpellAbilityAi { boolean isNegative = ComputerUtil.isNegativeCounter(cType, src); List filteredTgtList; filteredTgtList = isNegative ? CardLists.filterControlledBy(tgtCards, ai.getOpponents()) : - CardLists.filter(tgtCards, CardPredicates.isControlledByAnyOf(ai.getAllies()).or(CardPredicates.isController(ai))); + CardLists.filterControlledBy(tgtCards, ai.getYourTeam()); if (!filteredTgtList.isEmpty()) { List best = CardLists.filter(filteredTgtList, card -> { From b844181c0b5b1b351633b2c18ef655fff7d802b6 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Wed, 8 Oct 2025 20:58:12 +0200 Subject: [PATCH 309/355] Benevolent Blessing: fix exception ignoring opponent auras (#8870) --- .../src/main/java/forge/ai/ComputerUtilCombat.java | 12 ++++++------ .../src/main/java/forge/ai/ability/CounterAi.java | 4 +--- .../main/java/forge/ai/ability/DigMultipleAi.java | 4 ---- .../game/staticability/StaticAbilityContinuous.java | 7 +++++-- forge-gui/res/cardsfolder/b/benevolent_blessing.txt | 2 +- .../res/cardsfolder/m/maralen_of_the_mornsong.txt | 2 +- forge-gui/res/cardsfolder/s/spinal_embrace.txt | 2 +- forge-gui/res/cardsfolder/s/steel_dromedary.txt | 2 +- 8 files changed, 16 insertions(+), 19 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java index 4e54a2b731a..5126f906227 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java @@ -177,16 +177,16 @@ public class ComputerUtilCombat { public static int damageIfUnblocked(final Card attacker, final GameEntity attacked, final Combat combat, boolean withoutAbilities) { int damage = attacker.getNetCombatDamage(); int sum = 0; - if (attacked instanceof Player player && !player.canLoseLife()) { - return 0; - } - - // ask ReplacementDamage directly - if (isCombatDamagePrevented(attacker, attacked, damage)) { + if (attacked instanceof Player p && !p.canLoseLife()) { return 0; } if (!attacker.hasKeyword(Keyword.INFECT)) { + // ask ReplacementDamage directly + if (isCombatDamagePrevented(attacker, attacked, damage)) { + return 0; + } + damage += predictPowerBonusOfAttacker(attacker, null, combat, withoutAbilities); sum = predictDamageTo(attacked, damage, attacker, true); if (attacker.hasDoubleStrike()) { diff --git a/forge-ai/src/main/java/forge/ai/ability/CounterAi.java b/forge-ai/src/main/java/forge/ai/ability/CounterAi.java index dc9f5b16e02..f8c6060117a 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CounterAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CounterAi.java @@ -135,9 +135,7 @@ public class CounterAi extends SpellAbilityAi { if (sa.hasParam("AILogic")) { String logic = sa.getParam("AILogic"); - if ("Never".equals(logic)) { - return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi); - } else if (logic.startsWith("MinCMC.")) { // TODO fix Daze and fold into AITgts + if (logic.startsWith("MinCMC.")) { // TODO fix Daze and fold into AITgts int minCMC = Integer.parseInt(logic.substring(7)); if (tgtCMC < minCMC) { return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi); diff --git a/forge-ai/src/main/java/forge/ai/ability/DigMultipleAi.java b/forge-ai/src/main/java/forge/ai/ability/DigMultipleAi.java index a6ff092ffbc..9a646b9e0d2 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DigMultipleAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DigMultipleAi.java @@ -37,10 +37,6 @@ public class DigMultipleAi extends SpellAbilityAi { return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi); } - if ("Never".equals(sa.getParam("AILogic"))) { - return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi); - } - // don't deck yourself if (sa.hasParam("DestinationZone2") && !"Library".equals(sa.getParam("DestinationZone2"))) { int numToDig = AbilityUtils.calculateAmount(host, sa.getParam("DigNum"), sa); diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java index e53361d4ce8..407e794ebd3 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java @@ -170,9 +170,11 @@ public final class StaticAbilityContinuous { addKeywords = Lists.newArrayList(Arrays.asList(params.get("AddKeyword").split(" & "))); final List newKeywords = Lists.newArrayList(); - // update keywords with Chosen parts - final String hostCardUID = Integer.toString(hostCard.getId()); // Protection with "doesn't remove" effect + // Protection with "doesn't remove" effect + final String hostCardUID = Integer.toString(hostCard.getId()); + final String hostCardControllerUID = Integer.toString(hostCard.getController().getId()); + // update keywords with Chosen parts addKeywords.removeIf(input -> { if (!hostCard.hasChosenColor() && input.contains("ChosenColor")) { return true; @@ -285,6 +287,7 @@ public final class StaticAbilityContinuous { input = input.replaceAll("chosenEvenOdd", hostCard.getChosenEvenOdd().toString().toLowerCase()); } input = input.replace("HostCardUID", hostCardUID); + input = input.replace("HostCardControllerUID", hostCardControllerUID); if (params.containsKey("CalcKeywordN")) { input = input.replace("N", String.valueOf(AbilityUtils.calculateAmount(hostCard, params.get("CalcKeywordN"), stAb))); } diff --git a/forge-gui/res/cardsfolder/b/benevolent_blessing.txt b/forge-gui/res/cardsfolder/b/benevolent_blessing.txt index c109b73970d..bea6937fef1 100644 --- a/forge-gui/res/cardsfolder/b/benevolent_blessing.txt +++ b/forge-gui/res/cardsfolder/b/benevolent_blessing.txt @@ -6,5 +6,5 @@ K:Enchant:Creature K:ETBReplacement:Other:ChooseColor SVar:ChooseColor:DB$ ChooseColor | Defined$ You | AILogic$ MostProminentInHumanDeck | SpellDescription$ As CARDNAME enters, choose a color. SVar:AttachAILogic:Pump -S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Protection:Card.ChosenColor:chosenColor:Aura.YouCtrl,Equipment.YouCtrl:SBA | Description$ Enchanted creature has protection from the chosen color. This effect doesn't remove Auras and Equipment you control that are already attached to it. +S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Protection:Card.ChosenColor:chosenColor:Aura.ControlledBy Player.PlayerUID_HostCardControllerUID,Equipment.ControlledBy Player.PlayerUID_HostCardControllerUID:SBA | Description$ Enchanted creature has protection from the chosen color. This effect doesn't remove Auras and Equipment you control that are already attached to it. Oracle:Flash\nEnchant creature\nAs Benevolent Blessing enters, choose a color.\nEnchanted creature has protection from the chosen color. This effect doesn't remove Auras and Equipment you control that are already attached to it. diff --git a/forge-gui/res/cardsfolder/m/maralen_of_the_mornsong.txt b/forge-gui/res/cardsfolder/m/maralen_of_the_mornsong.txt index 31c3678c2c0..0b86615bc6d 100644 --- a/forge-gui/res/cardsfolder/m/maralen_of_the_mornsong.txt +++ b/forge-gui/res/cardsfolder/m/maralen_of_the_mornsong.txt @@ -5,6 +5,6 @@ PT:2/3 S:Mode$ CantDraw | ValidPlayer$ Player | Description$ Players can't draw cards. T:Mode$ Phase | Phase$ Draw | ValidPlayer$ Player | TriggerZones$ Battlefield | Execute$ TrigDrain | TriggerDescription$ At the beginning of each player's draw step, that player loses 3 life, searches their library for a card, puts it into their hand, then shuffles. SVar:TrigDrain:DB$ LoseLife | Defined$ TriggeredPlayer | LifeAmount$ 3 | SubAbility$ DBTutor -SVar:DBTutor:DB$ ChangeZone | DefinedPlayer$ TriggeredPlayer | Origin$ Library | Destination$ Hand | ChangeType$ Card | ChangeNum$ 1 +SVar:DBTutor:DB$ ChangeZone | DefinedPlayer$ TriggeredPlayer | Origin$ Library | Destination$ Hand | ChangeType$ Card | ChangeNum$ 1 | Mandatory$ True AI:RemoveDeck:Random Oracle:Players can't draw cards.\nAt the beginning of each player's draw step, that player loses 3 life, searches their library for a card, puts it into their hand, then shuffles. diff --git a/forge-gui/res/cardsfolder/s/spinal_embrace.txt b/forge-gui/res/cardsfolder/s/spinal_embrace.txt index b3444c068c6..4d3b6fae407 100644 --- a/forge-gui/res/cardsfolder/s/spinal_embrace.txt +++ b/forge-gui/res/cardsfolder/s/spinal_embrace.txt @@ -2,7 +2,7 @@ Name:Spinal Embrace ManaCost:3 U U B Types:Instant A:SP$ Untap | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Select target creature you don't control | ActivationPhases$ BeginCombat->EndCombat | SubAbility$ DBChange | SpellDescription$ Cast this spell only during combat. Untap target creature you don't control and gain control of it. It gains haste until end of turn. At the beginning of the next end step, sacrifice it. If you do, you gain life equal to its toughness. -SVar:DBChange:DB$ GainControl | Defined$ Targeted | SubAbility$ DBAnimate +SVar:DBChange:DB$ GainControl | Defined$ Targeted | AddKWs$ Haste | SubAbility$ DBAnimate SVar:DBAnimate:DB$ Animate | Defined$ Targeted | sVars$ SneakAttackEOT | SubAbility$ DelTrig SVar:DelTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ End Of Turn | Execute$ TrigSac | RememberObjects$ Targeted | TriggerDescription$ At the beginning of the next end step, sacrifice it. If you do, you gain life equal to its toughness. | AILogic$ Always | ConditionDefined$ Targeted | ConditionPresent$ Card | ConditionCompare$ GE1 SVar:TrigSac:DB$ SacrificeAll | Defined$ DelayTriggerRememberedLKI | Controller$ You | RememberSacrificed$ True | SubAbility$ DBGainLife diff --git a/forge-gui/res/cardsfolder/s/steel_dromedary.txt b/forge-gui/res/cardsfolder/s/steel_dromedary.txt index 79ac5a7a8d8..f64b86b2a1b 100644 --- a/forge-gui/res/cardsfolder/s/steel_dromedary.txt +++ b/forge-gui/res/cardsfolder/s/steel_dromedary.txt @@ -7,6 +7,6 @@ SVar:CamelTapped:DB$ Tap | Defined$ Self | ETB$ True | SubAbility$ DBAddCounter SVar:DBAddCounter:DB$ PutCounter | ETB$ True | Defined$ Self | CounterType$ P1P1 | CounterNum$ 2 R:Event$ Untap | ActiveZones$ Battlefield | ValidCard$ Card.Self+counters_GE1_P1P1 | ValidStepTurnToController$ You | Layer$ CantHappen | Description$ CARDNAME doesn't untap during your untap step if it has a +1/+1 counter on it. T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigMoveCounter | TriggerDescription$ At the beginning of combat on your turn, you may move a +1/+1 counter from CARDNAME onto target creature. -SVar:TrigMoveCounter:DB$ MoveCounter | ValidTgts$ Creature.Other | TgtPrompt$ Select another target creature | Source$ Self | CounterType$ P1P1 | CounterNum$ 1 +SVar:TrigMoveCounter:DB$ MoveCounter | ValidTgts$ Creature | Source$ Self | CounterType$ P1P1 | CounterNum$ 1 DeckHas:Ability$Counters Oracle:Steel Dromedary enters tapped with two +1/+1 counters on it.\nSteel Dromedary doesn't untap during your untap step if it has a +1/+1 counter on it.\nAt the beginning of combat on your turn, you may move a +1/+1 counter from Steel Dromedary onto target creature. From f7c965de02a5e3c175776a3112f1deb220297e98 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Thu, 9 Oct 2025 06:06:59 +0800 Subject: [PATCH 310/355] prevent NPE --- .../adventure/scene/AdventureDeckEditor.java | 306 ++++++++++++------ 1 file changed, 201 insertions(+), 105 deletions(-) diff --git a/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java b/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java index 808b366c3ac..d3425a17e33 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java +++ b/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java @@ -43,10 +43,25 @@ import java.util.function.Predicate; public class AdventureDeckEditor extends FDeckEditor { protected static class AdventureEditorConfig extends DeckEditorConfig { - @Override public GameType getGameType() { return GameType.Adventure; } - @Override public DeckFormat getDeckFormat() { return DeckFormat.Adventure; } - @Override protected IDeckController getController() { return ADVENTURE_DECK_CONTROLLER; } - @Override public boolean usePlayerInventory() { return true; } + @Override + public GameType getGameType() { + return GameType.Adventure; + } + + @Override + public DeckFormat getDeckFormat() { + return DeckFormat.Adventure; + } + + @Override + protected IDeckController getController() { + return ADVENTURE_DECK_CONTROLLER; + } + + @Override + public boolean usePlayerInventory() { + return true; + } @Override protected DeckEditorPage[] getInitialPages() { @@ -110,18 +125,34 @@ public class AdventureDeckEditor extends FDeckEditor { protected static class DeckPreviewConfig extends AdventureEditorConfig { private final Deck deckToPreview; + public DeckPreviewConfig(Deck deckToPreview) { this.deckToPreview = deckToPreview; } - @Override public boolean usePlayerInventory() { return false; } - @Override public boolean isLimited() { return true; } - @Override public ItemPool getCardPool(boolean wantUnique) { return deckToPreview.getAllCardsInASinglePool(true, true); } - @Override public boolean allowsCardReplacement() { return false; } + @Override + public boolean usePlayerInventory() { + return false; + } + + @Override + public boolean isLimited() { + return true; + } + + @Override + public ItemPool getCardPool(boolean wantUnique) { + return deckToPreview.getAllCardsInASinglePool(true, true); + } + + @Override + public boolean allowsCardReplacement() { + return false; + } @Override protected DeckEditorPage[] getInitialPages() { - return new DeckEditorPage[] {new ContentPreviewPage(deckToPreview)}; + return new DeckEditorPage[]{new ContentPreviewPage(deckToPreview)}; } } @@ -134,20 +165,39 @@ public class AdventureDeckEditor extends FDeckEditor { this.controller = new AdventureEventDeckController(event); } - @Override public GameType getGameType() { return GameType.AdventureEvent; } - @Override public DeckFormat getDeckFormat() { return DeckFormat.Limited; } - @Override public boolean isLimited() { return true; } - @Override public boolean isDraft() { return event.getDraft() != null; } - @Override protected IDeckController getController() { return this.controller; } + @Override + public GameType getGameType() { + return GameType.AdventureEvent; + } + + @Override + public DeckFormat getDeckFormat() { + return DeckFormat.Limited; + } + + @Override + public boolean isLimited() { + return true; + } + + @Override + public boolean isDraft() { + return event.getDraft() != null; + } + + @Override + protected IDeckController getController() { + return this.controller; + } @Override public List getBasicLandSets(Deck currentDeck) { - if(event.cardBlock != null) { - if(event.cardBlock.getLandSet() != null) + if (event.cardBlock != null) { + if (event.cardBlock.getLandSet() != null) return List.of(event.cardBlock.getLandSet()); List eventSets = new ArrayList<>(event.cardBlock.getSets()); eventSets.removeIf(Predicate.not(CardEdition::hasBasicLands)); - if(!eventSets.isEmpty()) + if (!eventSets.isEmpty()) return eventSets; } return List.of(DeckProxy.getDefaultLandSet(event.registeredDeck)); @@ -170,9 +220,9 @@ public class AdventureDeckEditor extends FDeckEditor { case Entered: if (event.getDraft() != null) return new DeckEditorPage[]{ - new DraftPackPage(new AdventureCardManager()), - new AdventureDeckSectionPage(DeckSection.Main, ItemManagerConfig.DRAFT_POOL), - new AdventureDeckSectionPage(DeckSection.Sideboard, ItemManagerConfig.SIDEBOARD) + new DraftPackPage(new AdventureCardManager()), + new AdventureDeckSectionPage(DeckSection.Main, ItemManagerConfig.DRAFT_POOL), + new AdventureDeckSectionPage(DeckSection.Sideboard, ItemManagerConfig.SIDEBOARD) }; default: return new DeckEditorPage[]{ @@ -242,7 +292,7 @@ public class AdventureDeckEditor extends FDeckEditor { Localizer localizer = Forge.getLocalizer(); String label = localizer.getMessage("lblSellFor") + " " + Current.player().cardSellPrice(card); int sellable = cardManager.getItemCount(card); - if(sellable <= 0) + if (sellable <= 0) return; String prompt = card + " - " + label + " " + localizer.getMessage("lblHowMany"); @@ -250,7 +300,7 @@ public class AdventureDeckEditor extends FDeckEditor { int sold = Current.player().sellCard(card, result); removeCard(card, sold); })); - if(cardIsFavorite(card)) + if (cardIsFavorite(card)) sellItem.setTextColor(255, 0, 0); menu.addItem(sellItem); } @@ -292,7 +342,7 @@ public class AdventureDeckEditor extends FDeckEditor { value += Current.player().cardSellPrice(entry.getKey()) * entry.getValue(); } - if(toSell.isEmpty()) + if (toSell.isEmpty()) return; FOptionPane.showConfirmDialog(Forge.getLocalizer().getMessage("lblSellAllConfirm", toSell.countAll(), value), Forge.getLocalizer().getMessage("lblSellCurrentFilters"), Forge.getLocalizer().getMessage("lblSell"), Forge.getLocalizer().getMessage("lblCancel"), false, result -> { @@ -306,13 +356,21 @@ public class AdventureDeckEditor extends FDeckEditor { @Override public void setCardFavorited(PaperCard card, boolean isFavorite) { AdventurePlayer player = Current.player(); - if(isFavorite) + if (isFavorite) player.favoriteCards.add(card); else player.favoriteCards.remove(card); } - @Override protected boolean cardIsFavorite(PaperCard card) { return Current.player().favoriteCards.contains(card); } - @Override protected boolean allowFavoriteCards() { return true; } + + @Override + protected boolean cardIsFavorite(PaperCard card) { + return Current.player().favoriteCards.contains(card); + } + + @Override + protected boolean allowFavoriteCards() { + return true; + } } private static class CollectionCatalogPage extends CatalogPage { @@ -350,18 +408,19 @@ public class AdventureDeckEditor extends FDeckEditor { int safeToSellCount = amountInCollection - copiesUsedInDecks; //Number we can sell without losing cards from a deck. int autoSellCount = Current.player().autoSellCards.count(card); //Number currently in auto-sell. int canMoveToAutoSell = safeToSellCount - autoSellCount; //Number that can be moved to auto-sell from here. - + if (card.getRules().isUnsupported()) { menu.clearItems(); FMenuItem removeItem = new FMenuItem(localizer.getMessage("lblRemoveUnsupportedCard"), FSkinImage.HDDELETE, e -> - removeCard(card, safeToSellCount)); + removeCard(card, safeToSellCount)); menu.addItem(removeItem); return; } if (copiesUsedInDecks > 0) { String text = localizer.getMessage("lblCopiesInUse", copiesUsedInDecks); - FMenuItem usedHint = new FMenuItem(text, FSkinImage.HDLIBRARY, n -> {}); + FMenuItem usedHint = new FMenuItem(text, FSkinImage.HDLIBRARY, n -> { + }); usedHint.setEnabled(false); menu.addItem(usedHint); } @@ -398,13 +457,21 @@ public class AdventureDeckEditor extends FDeckEditor { @Override public void setCardFavorited(PaperCard card, boolean isFavorite) { AdventurePlayer player = Current.player(); - if(isFavorite) + if (isFavorite) player.favoriteCards.add(card); else player.favoriteCards.remove(card); } - @Override protected boolean cardIsFavorite(PaperCard card) { return Current.player().favoriteCards.contains(card); } - @Override protected boolean allowFavoriteCards() { return true; } + + @Override + protected boolean cardIsFavorite(PaperCard card) { + return Current.player().favoriteCards.contains(card); + } + + @Override + protected boolean allowFavoriteCards() { + return true; + } @Override public void buildDeckMenu(FPopupMenu menu) { @@ -425,7 +492,7 @@ public class AdventureDeckEditor extends FDeckEditor { continue; toMove.add(entry.getKey(), entry.getValue()); } - if(toMove.isEmpty()) + if (toMove.isEmpty()) return; FOptionPane.showConfirmDialog(Forge.getLocalizer().getMessage("lblAutoSellCurrentFiltersConfirm", toMove.countAll()), Forge.getLocalizer().getMessage("lblAutoSellCurrentFilters"), Forge.getLocalizer().getMessage("lblAutoSell"), Forge.getLocalizer().getMessage("lblCancel"), false, result -> { @@ -480,20 +547,20 @@ public class AdventureDeckEditor extends FDeckEditor { super.buildMenu(menu, card); Localizer localizer = Forge.getLocalizer(); AdventurePlayer player = Current.player(); - if(isShop()) { + if (isShop()) { String label = localizer.getMessage("lblSellFor") + " " + player.cardSellPrice(card); int sellable = cardManager.getItemCount(card); - if(sellable <= 0) + if (sellable <= 0) return; String prompt = card + " - " + label + " " + localizer.getMessage("lblHowMany"); menu.addItem(new FMenuItem(label, SIDEBOARD_ICON, new MoveQuantityPrompt(prompt, sellable, result -> { - int sold = player.sellCard(card, result); - removeCard(card, sold); - }) + int sold = player.sellCard(card, result); + removeCard(card, sold); + }) )); } - if(parentScreen instanceof AdventureDeckEditor adventureEditor && adventureEditor.getCatalogPage() != null) { + if (parentScreen instanceof AdventureDeckEditor adventureEditor && adventureEditor.getCatalogPage() != null) { CatalogPage catalogPage = adventureEditor.getCatalogPage(); int autoSellCount = cardManager.getItemCount(card); int amountInCollection = player.getCards().count(card); @@ -509,7 +576,7 @@ public class AdventureDeckEditor extends FDeckEditor { @Override protected void onCardActivated(PaperCard card) { - if(isShop()) { + if (isShop()) { Current.player().sellCard(card, 1); removeCard(card, 1); } @@ -519,7 +586,7 @@ public class AdventureDeckEditor extends FDeckEditor { public AdventureEventData getCurrentEvent() { IDeckController controller = getDeckController(); - if(!(controller instanceof AdventureEventDeckController eventController)) + if (!(controller instanceof AdventureEventDeckController eventController)) return null; return eventController.currentEvent; } @@ -527,7 +594,7 @@ public class AdventureDeckEditor extends FDeckEditor { @Override public BoosterDraft getDraft() { AdventureEventData currentEvent = getCurrentEvent(); - if(currentEvent == null) + if (currentEvent == null) return null; return currentEvent.getDraft(); } @@ -535,7 +602,7 @@ public class AdventureDeckEditor extends FDeckEditor { @Override public boolean isDrafting() { AdventureEventData currentEvent = getCurrentEvent(); - if(currentEvent == null) + if (currentEvent == null) return false; return currentEvent.draft != null && !currentEvent.isDraftComplete; } @@ -550,7 +617,7 @@ public class AdventureDeckEditor extends FDeckEditor { public void completeDraft() { super.completeDraft(); AdventureEventData currentEvent = getCurrentEvent(); - if(currentEvent == null) + if (currentEvent == null) return; currentEvent.isDraftComplete = true; Deck[] opponentDecks = currentEvent.getDraft().getComputerDecks(); @@ -624,9 +691,9 @@ public class AdventureDeckEditor extends FDeckEditor { private static final FImage AUTO_SELL_ICON = FSkinImage.HDEXILE; //to-maybe-do: Custom adventure icon for this? Adventure should really just have its own skin. public static FImage iconFromDeckSection(DeckSection deckSection) { - if(deckSection == DeckSection.Main) + if (deckSection == DeckSection.Main) return MAIN_DECK_ICON; - if(deckSection == DeckSection.Sideboard) + if (deckSection == DeckSection.Sideboard) return FDeckEditor.SIDEBOARD_ICON; return FDeckEditor.iconFromDeckSection(deckSection); } @@ -661,7 +728,7 @@ public class AdventureDeckEditor extends FDeckEditor { if (page instanceof CollectionCatalogPage) { if (!Current.player().getUnsupportedCards().isEmpty()) GuiChoose.getChoices(Forge.getLocalizer().getMessage("lblRemoveAllUnsupportedCards"), - -1, -1, Current.player().getUnsupportedCards(), result -> Current.player().getUnsupportedCards().clear()); + -1, -1, Current.player().getUnsupportedCards(), result -> Current.player().getUnsupportedCards().clear()); break; } } @@ -688,7 +755,7 @@ public class AdventureDeckEditor extends FDeckEditor { public AdventureDeckEditor(boolean createAsShop) { super(createAsShop ? new ShopConfig() : new AdventureEditorConfig(), createAsShop ? null : Current.player().getSelectedDeck()); - if(createAsShop) + if (createAsShop) setHeaderText(Forge.getLocalizer().getMessage("lblSell")); } @@ -696,7 +763,7 @@ public class AdventureDeckEditor extends FDeckEditor { super(new AdventureEventEditorConfig(event), event.registeredDeck); currentEvent = event; - if(event.getDraft() != null && event.getDraft().shouldShowDraftLog()) { + if (event.getDraft() != null && event.getDraft().shouldShowDraftLog()) { this.draftLog = new FDraftLog(); event.getDraft().setLogEntry(this.draftLog); deckHeader.initDraftLog(this.draftLog, this); @@ -715,33 +782,36 @@ public class AdventureDeckEditor extends FDeckEditor { @Override protected void addChosenBasicLands(CardPool landsToAdd) { - if(isLimitedEditor()) + if (isLimitedEditor()) super.addChosenBasicLands(landsToAdd); + //Take the basic lands from the player's collection if they have them. If they need more, create unsellable copies. - CardPool requiredNewLands = new CardPool(); - CardPool landsToMove = new CardPool(); CatalogPage catalog = getCatalogPage(); - ItemPool availablePool = catalog.getCardPool(); - for(Map.Entry entry : landsToAdd) { - int needed = entry.getValue(); - PaperCard card = entry.getKey(); - int moveableSellable = Math.min(availablePool.count(card), needed); - landsToMove.add(card, moveableSellable); - needed -= moveableSellable; - if(needed <= 0) - continue; - PaperCard unsellable = card.getNoSellVersion(); - //It'd probably be better to do some kind of fuzzy search that matches prints but ignores flags. - //But for now, unsellable is the only one that should matter here. - int moveableUnsellable = Math.min(availablePool.count(unsellable), needed); - landsToMove.add(unsellable, needed); //We'll acquire the rest later. - if(needed > moveableUnsellable) - requiredNewLands.add(unsellable, needed - moveableUnsellable); + if (catalog != null) { // TODO find out why this is null on some devices since it shouldn't be null + CardPool requiredNewLands = new CardPool(); + CardPool landsToMove = new CardPool(); + ItemPool availablePool = catalog.getCardPool(); + for (Map.Entry entry : landsToAdd) { + int needed = entry.getValue(); + PaperCard card = entry.getKey(); + int moveableSellable = Math.min(availablePool.count(card), needed); + landsToMove.add(card, moveableSellable); + needed -= moveableSellable; + if (needed <= 0) + continue; + PaperCard unsellable = card.getNoSellVersion(); + //It'd probably be better to do some kind of fuzzy search that matches prints but ignores flags. + //But for now, unsellable is the only one that should matter here. + int moveableUnsellable = Math.min(availablePool.count(unsellable), needed); + landsToMove.add(unsellable, needed); //We'll acquire the rest later. + if (needed > moveableUnsellable) + requiredNewLands.add(unsellable, needed - moveableUnsellable); + } + if (!requiredNewLands.isEmpty()) + Current.player().addCards(requiredNewLands); + catalog.refresh(); + catalog.moveCards(landsToMove, getMainDeckPage()); } - if(!requiredNewLands.isEmpty()) - Current.player().addCards(requiredNewLands); - catalog.refresh(); - catalog.moveCards(landsToMove, getMainDeckPage()); } @Override @@ -753,15 +823,15 @@ public class AdventureDeckEditor extends FDeckEditor { @Override protected void cacheTabPages() { super.cacheTabPages(); - for(TabPage page : tabPages) { - if(page instanceof CollectionAutoSellPage) + for (TabPage page : tabPages) { + if (page instanceof CollectionAutoSellPage) this.autoSellPage = (CollectionAutoSellPage) page; } } @Override protected boolean allowAddBasic() { - if(getEditorConfig() instanceof DeckPreviewConfig) + if (getEditorConfig() instanceof DeckPreviewConfig) return false; AdventureEventData currentEvent = getCurrentEvent(); if (currentEvent == null) @@ -812,7 +882,7 @@ public class AdventureDeckEditor extends FDeckEditor { @Override public void onClose(final Consumer canCloseCallback) { - if(canCloseCallback == null) { + if (canCloseCallback == null) { resolveClose(null, true); return; } @@ -821,8 +891,7 @@ public class AdventureDeckEditor extends FDeckEditor { if (isDrafting()) { FOptionPane.showConfirmDialog(localizer.getMessage("lblEndAdventureEventConfirm"), localizer.getMessage("lblLeaveDraft"), localizer.getMessage("lblLeave"), localizer.getMessage("lblCancel"), false, result -> resolveClose(canCloseCallback, result == true)); return; - } - else if(getEditorConfig().isLimited() || getDeck().isEmpty()) { + } else if (getEditorConfig().isLimited() || getDeck().isEmpty()) { resolveClose(canCloseCallback, true); return; } @@ -839,18 +908,18 @@ public class AdventureDeckEditor extends FDeckEditor { } private void resolveClose(final Consumer canCloseCallback, boolean result) { - if(result) { + if (result) { Current.player().newCards.clear(); - if(isDrafting()) + if (isDrafting()) getCurrentEvent().eventStatus = AdventureEventController.EventStatus.Abandoned; } - if(canCloseCallback != null) + if (canCloseCallback != null) canCloseCallback.accept(result); } @Override protected void devAddCards(CardPool cards) { - if(!getEditorConfig().usePlayerInventory()) { + if (!getEditorConfig().usePlayerInventory()) { //Drafting. super.devAddCards(cards); return; @@ -875,9 +944,9 @@ public class AdventureDeckEditor extends FDeckEditor { protected String getItemSuffix(Map.Entry item) { PaperCard card = item.getKey(); String parentSuffix = super.getItemSuffix(item); - if(card.hasNoSellValue()) { + if (card.hasNoSellValue()) { String valueText = " [NO VALUE]"; - if(parentSuffix == null) + if (parentSuffix == null) return valueText; return String.join(" ", valueText, parentSuffix); } @@ -891,7 +960,7 @@ public class AdventureDeckEditor extends FDeckEditor { public void drawValue(Graphics g, Map.Entry value, FSkinFont font, FSkinColor foreColor, FSkinColor backColor, boolean pressed, float x, float y, float w, float h) { super.drawValue(g, value, font, foreColor, backColor, pressed, x, y, w, h); - if(showPriceInfo()) { + if (showPriceInfo()) { float totalHeight = h + 2 * FList.PADDING; float cardArtWidth = totalHeight * CardRenderer.CARD_ART_RATIO; @@ -958,6 +1027,7 @@ public class AdventureDeckEditor extends FDeckEditor { } private static final AdventureDeckController ADVENTURE_DECK_CONTROLLER = new AdventureDeckController(); + /** * Barebones deck controller. Doesn't really need to do anything since Adventure Decks are updated in real time * while they're edited, and they're only saved when the adventure is saved. @@ -969,29 +1039,41 @@ public class AdventureDeckEditor extends FDeckEditor { @Override public void setEditor(FDeckEditor editor) { this.editor = editor; - if(editor != null) - editor.notifyNewControllerModel(); - } - - @Override public void setDeck(Deck deck) { - this.currentDeck = deck; - if(editor != null) + if (editor != null) editor.notifyNewControllerModel(); } - @Override public Deck getDeck() { return currentDeck; } - @Override public void newDeck() { + + @Override + public void setDeck(Deck deck) { + this.currentDeck = deck; + if (editor != null) + editor.notifyNewControllerModel(); + } + + @Override + public Deck getDeck() { + return currentDeck; + } + + @Override + public void newDeck() { setDeck(new Deck("Adventure Deck")); } @Override public String getDeckDisplayName() { - if(currentDeck == null) + if (currentDeck == null) return "New Deck"; return currentDeck.getName(); } - @Override public void notifyModelChanged() {} // - @Override public void exitWithoutSaving() {} //Too many external variables to just revert the deck. Not supported for now. + @Override + public void notifyModelChanged() { + } // + + @Override + public void exitWithoutSaving() { + } //Too many external variables to just revert the deck. Not supported for now. } private static class AdventureEventDeckController implements IDeckController { @@ -1005,26 +1087,40 @@ public class AdventureDeckEditor extends FDeckEditor { @Override public void setEditor(FDeckEditor editor) { this.editor = editor; - if(editor != null) + if (editor != null) editor.notifyNewControllerModel(); } - @Override public void setDeck(Deck deck) {this.newDeck();} //Deck is supplied by the event. - @Override public void newDeck() { - if(editor != null) + @Override + public void setDeck(Deck deck) { + this.newDeck(); + } //Deck is supplied by the event. + + @Override + public void newDeck() { + if (editor != null) editor.notifyNewControllerModel(); } - @Override public Deck getDeck() { return currentEvent.registeredDeck; } + + @Override + public Deck getDeck() { + return currentEvent.registeredDeck; + } @Override public String getDeckDisplayName() { - if(getDeck() == null) + if (getDeck() == null) return "Uninitialized Deck"; return getDeck().getName(); } - @Override public void notifyModelChanged() {} // - @Override public void exitWithoutSaving() {} //Too many external variables to just revert the deck. Not supported for now. + @Override + public void notifyModelChanged() { + } // + + @Override + public void exitWithoutSaving() { + } //Too many external variables to just revert the deck. Not supported for now. } } From 0ee3dc4e6727cee9f52e3826f4dd5c8549477540 Mon Sep 17 00:00:00 2001 From: Eradev Date: Wed, 8 Oct 2025 12:05:11 -0400 Subject: [PATCH 311/355] Check for Snow lands and Wastes when generating random decks --- .../java/forge/card/mana/ManaCostShard.java | 1 - .../src/forge/adventure/util/CardUtil.java | 121 ++++++++++-------- .../adventure/common/decks/standard/crab.json | 4 +- 3 files changed, 71 insertions(+), 55 deletions(-) diff --git a/forge-core/src/main/java/forge/card/mana/ManaCostShard.java b/forge-core/src/main/java/forge/card/mana/ManaCostShard.java index 1d558520a25..667ed3ba19d 100644 --- a/forge-core/src/main/java/forge/card/mana/ManaCostShard.java +++ b/forge-core/src/main/java/forge/card/mana/ManaCostShard.java @@ -63,7 +63,6 @@ public enum ManaCostShard { S(ManaAtom.IS_SNOW, "S"), GENERIC(ManaAtom.GENERIC, "1"), - /* Phyrexian */ WP(ManaAtom.WHITE | ManaAtom.OR_2_LIFE, "W/P", "WP"), UP(ManaAtom.BLUE | ManaAtom.OR_2_LIFE, "U/P", "UP"), diff --git a/forge-gui-mobile/src/forge/adventure/util/CardUtil.java b/forge-gui-mobile/src/forge/adventure/util/CardUtil.java index f25b3ba451b..6c38a8ee648 100644 --- a/forge-gui-mobile/src/forge/adventure/util/CardUtil.java +++ b/forge-gui-mobile/src/forge/adventure/util/CardUtil.java @@ -9,6 +9,7 @@ import forge.adventure.data.GeneratedDeckData; import forge.adventure.data.GeneratedDeckTemplateData; import forge.adventure.data.RewardData; import forge.card.*; +import forge.card.mana.ManaCost; import forge.card.mana.ManaCostShard; import forge.deck.Deck; import forge.deck.DeckSection; @@ -499,67 +500,83 @@ public class CardUtil { } private static List fillWithLands(List nonLands, GeneratedDeckTemplateData template) { - int red=0; - int blue=0; - int green=0; - int white=0; - int black=0; - int colorLess=0; - int cardCount=nonLands.size(); - List cards=new ArrayList<>(); - boolean allCardVariants=Config.instance().getSettingData().useAllCardVariants; + int red = 0, blue = 0, green = 0, white = 0, black = 0, colorless = 0; + int cardCount = nonLands.size(); + List cards = new ArrayList<>(); + boolean allCardVariants = Config.instance().getSettingData().useAllCardVariants; + boolean useSnowLands = false; - for(PaperCard nonLand:nonLands) - { - red+=nonLand.getRules().getManaCost().getShardCount(ManaCostShard.RED); - green+=nonLand.getRules().getManaCost().getShardCount(ManaCostShard.GREEN); - white+=nonLand.getRules().getManaCost().getShardCount(ManaCostShard.WHITE); - blue+=nonLand.getRules().getManaCost().getShardCount(ManaCostShard.BLUE); - black+=nonLand.getRules().getManaCost().getShardCount(ManaCostShard.BLACK); - colorLess+=nonLand.getRules().getManaCost().getShardCount(ManaCostShard.GENERIC); + for (PaperCard nonLand : nonLands) { + CardRules rules = nonLand.getRules(); + ManaCost manaCost = rules.getManaCost(); + + red += manaCost.getShardCount(ManaCostShard.RED); + green += manaCost.getShardCount(ManaCostShard.GREEN); + white += manaCost.getShardCount(ManaCostShard.WHITE); + blue += manaCost.getShardCount(ManaCostShard.BLUE); + black += manaCost.getShardCount(ManaCostShard.BLACK); + colorless += manaCost.getShardCount(ManaCostShard.COLORLESS); + + // Check for Snow lands requirement + if (!useSnowLands) { + if (manaCost.getShardCount(ManaCostShard.S) > 0) { + useSnowLands = true; + continue; + } + + if (rules.getAiHints() != null && rules.getAiHints().getDeckHints() != null) { + useSnowLands = rules.getAiHints().getDeckHints().contains(Type.TYPE, "Snow"); + } + } } - float sum= red+ blue+ green+ white+ black; - int neededLands=template.count-cardCount; - int neededDualLands= Math.round (neededLands*template.rares); - int neededBase=neededLands-neededDualLands; + + float sumColoredCost = red + blue + green + white + black; + int neededLands = template.count - cardCount; + int neededDualLands = Math.round(neededLands * template.rares); + int neededBase = neededLands - neededDualLands; String edition = ""; + if (allCardVariants) { PaperCard templateLand = CardUtil.getCardByName("Plains"); edition = templateLand.getEdition(); } - if(sum==0.) - { - cards.addAll(generateLands("Wastes",neededLands)); - } - else - { - int mount=Math.round(neededBase*(red/sum)); - int island=Math.round(neededBase*(blue/sum)); - int forest=Math.round(neededBase*(green/sum)); - int plains=Math.round(neededBase*(white/sum)); - int swamp=Math.round(neededBase*(black/sum)); - cards.addAll(generateLands("Plains",plains,edition)); - cards.addAll(generateLands("Island",island,edition)); - cards.addAll(generateLands("Forest",forest,edition)); - cards.addAll(generateLands("Mountain",mount,edition)); - cards.addAll(generateLands("Swamp",swamp,edition)); - List landTypes=new ArrayList<>(); - if(mount>0) - landTypes.add("Mountain"); - if(island>0) - landTypes.add("Island"); - if(plains>0) - landTypes.add("Plains"); - if(swamp>0) - landTypes.add("Swamp"); - if(forest>0) - landTypes.add("Forest"); - cards.addAll(generateDualLands(landTypes,neededDualLands)); + if (sumColoredCost == 0) { + cards.addAll(generateLands("Wastes", neededLands)); + } else { + float sumTotalCost = sumColoredCost + colorless; + + int mountain = Math.round(neededBase * (red / sumTotalCost)); + int island = Math.round(neededBase * (blue / sumTotalCost)); + int forest = Math.round(neededBase * (green / sumTotalCost)); + int plains = Math.round(neededBase * (white / sumTotalCost)); + int swamp = Math.round(neededBase * (black / sumTotalCost)); + int wastes = Math.round(neededBase * (colorless / sumTotalCost)); + + cards.addAll(generateLands(useSnowLands ? "Snow-Covered Plains" : "Plains", plains, edition)); + cards.addAll(generateLands(useSnowLands ? "Snow-Covered Island" : "Island", island, edition)); + cards.addAll(generateLands(useSnowLands ? "Snow-Covered Forest" : "Forest", forest, edition)); + cards.addAll(generateLands(useSnowLands ? "Snow-Covered Mountain" : "Mountain", mountain, edition)); + cards.addAll(generateLands(useSnowLands ? "Snow-Covered Swamp" : "Swamp", swamp, edition)); + cards.addAll(generateLands(useSnowLands ? "Snow-Covered Wastes" : "Wastes", wastes, edition)); + + List landTypes = new ArrayList<>(); + if (mountain > 0) + landTypes.add("Mountain"); + if (island > 0) + landTypes.add("Island"); + if (plains > 0) + landTypes.add("Plains"); + if (swamp > 0) + landTypes.add("Swamp"); + if (forest > 0) + landTypes.add("Forest"); + + cards.addAll(generateDualLands(landTypes, neededDualLands)); } + return cards; } - private static Collection generateDualLands(List landName, int count) { ArrayList rewards=new ArrayList<>(); RewardData base= new RewardData(); @@ -737,14 +754,14 @@ public class CardUtil { if (deck != null) return deck; } + Json json = new Json(); FileHandle handle = Config.instance().getFile(path); if (handle.exists()) return generateDeck(json.fromJson(GeneratedDeckData.class, handle), starterEdition, discourageDuplicates); Deck deck = DeckgenUtil.getRandomOrPreconOrThemeDeck(colors, true, false, true); - System.err.println("Error loading JSON: " + handle.path() + "\nGenerating random deck: "+deck.getName()); + System.err.println("Error loading JSON: " + handle.path() + "\nGenerating random deck: " + deck.getName()); return deck; - } private static final GameFormat.Collection formats = FModel.getFormats(); diff --git a/forge-gui/res/adventure/common/decks/standard/crab.json b/forge-gui/res/adventure/common/decks/standard/crab.json index 56a7d1a5522..8fcf24f389d 100644 --- a/forge-gui/res/adventure/common/decks/standard/crab.json +++ b/forge-gui/res/adventure/common/decks/standard/crab.json @@ -1,10 +1,10 @@ { -"name":"Crab", + "name":"Crab", "template": { "count":60, "colors":["Blue"], - "tribe":"Crab", + "tribe":"Crab", "tribeCards":1.0, "tribeSynergyCards":0.2, "rares":0.4 From caf8b0535fd4f24303c16d6aa3d0bee1b4d415ea Mon Sep 17 00:00:00 2001 From: Eradev Date: Wed, 8 Oct 2025 12:14:59 -0400 Subject: [PATCH 312/355] CardUtil File format --- .../src/forge/adventure/util/CardUtil.java | 684 ++++++++---------- 1 file changed, 312 insertions(+), 372 deletions(-) diff --git a/forge-gui-mobile/src/forge/adventure/util/CardUtil.java b/forge-gui-mobile/src/forge/adventure/util/CardUtil.java index 6c38a8ee648..ce55a815131 100644 --- a/forge-gui-mobile/src/forge/adventure/util/CardUtil.java +++ b/forge-gui-mobile/src/forge/adventure/util/CardUtil.java @@ -37,32 +37,32 @@ import static forge.adventure.data.RewardData.generateAllCards; */ public class CardUtil { public static final class CardPredicate implements Predicate { - enum ColorType - { + enum ColorType { Any, Colorless, MultiColor, MonoColor } - private final List rarities=new ArrayList<>(); - private final List editions=new ArrayList<>(); - private final List subType=new ArrayList<>(); - private final List keyWords=new ArrayList<>(); - private final List type=new ArrayList<>(); - private final List superType=new ArrayList<>(); - private final List manaCosts =new ArrayList<>(); + + private final List rarities = new ArrayList<>(); + private final List editions = new ArrayList<>(); + private final List subType = new ArrayList<>(); + private final List keyWords = new ArrayList<>(); + private final List type = new ArrayList<>(); + private final List superType = new ArrayList<>(); + private final List manaCosts = new ArrayList<>(); private final Pattern text; private final boolean matchAllSubTypes; private final boolean matchAllColors; - private int colors; + private int colors; private final ColorType colorType; private final boolean shouldBeEqual; - private final List deckNeeds=new ArrayList<>(); + private final List deckNeeds = new ArrayList<>(); private final String minDate; private final static SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); private static Date parseDate(String date) { - if( date.length() <= 7 ) + if (date.length() <= 7) date = date + "-01"; try { return formatter.parse(date); @@ -73,12 +73,12 @@ public class CardUtil { @Override public boolean test(final PaperCard card) { - if(!this.rarities.isEmpty()&&!this.rarities.contains(card.getRarity())) + if (!this.rarities.isEmpty() && !this.rarities.contains(card.getRarity())) return !this.shouldBeEqual; - if(!this.editions.isEmpty()&&!this.editions.contains(card.getEdition())) { + if (!this.editions.isEmpty() && !this.editions.contains(card.getEdition())) { boolean found = false; List allPrintings = FModel.getMagicDb().getCommonCards().getAllCards(card.getCardName()); - for (PaperCard c : allPrintings){ + for (PaperCard c : allPrintings) { if (this.editions.contains(c.getEdition())) { found = true; break; @@ -87,7 +87,7 @@ public class CardUtil { if (!found) return !this.shouldBeEqual; } - if(!this.minDate.isEmpty()) { + if (!this.minDate.isEmpty()) { boolean found = false; List allPrintings = FModel.getMagicDb().getCommonCards().getAllCards(card.getCardName()); List cardEditionList = new ArrayList<>(); @@ -100,7 +100,7 @@ public class CardUtil { cardEditionList.add(e); } - for (PaperCard c : allPrintings){ + for (PaperCard c : allPrintings) { for (CardEdition e : cardEditionList) { if (e.getCode().equals(c.getEdition())) { found = true; @@ -111,144 +111,120 @@ public class CardUtil { if (!found) return !this.shouldBeEqual; } - if(!this.manaCosts.isEmpty()&&!this.manaCosts.contains(card.getRules().getManaCost().getCMC())) + if (!this.manaCosts.isEmpty() && !this.manaCosts.contains(card.getRules().getManaCost().getCMC())) return !this.shouldBeEqual; - if(this.text!=null&& !this.text.matcher(card.getRules().getOracleText()).find()) + if (this.text != null && !this.text.matcher(card.getRules().getOracleText()).find()) return !this.shouldBeEqual; - if(this.matchAllColors) - { - if(!card.getRules().getColor().hasAllColors(this.colors)) - { + if (this.matchAllColors) { + if (!card.getRules().getColor().hasAllColors(this.colors)) { return !this.shouldBeEqual; } } - if(this.colors!= MagicColor.ALL_COLORS) - { - if(!card.getRules().getColor().hasNoColorsExcept(this.colors)||(this.colors != MagicColor.COLORLESS && card.getRules().getColor().isColorless())) + if (this.colors != MagicColor.ALL_COLORS) { + if (!card.getRules().getColor().hasNoColorsExcept(this.colors) + || (this.colors != MagicColor.COLORLESS && card.getRules().getColor().isColorless())) return !this.shouldBeEqual; } - if(colorType!=ColorType.Any) - { - switch (colorType) - { + if (colorType != ColorType.Any) { + switch (colorType) { case Colorless: - if(!card.getRules().getColor().isColorless()) + if (!card.getRules().getColor().isColorless()) return !this.shouldBeEqual; break; case MonoColor: - if(!card.getRules().getColor().isMonoColor()) + if (!card.getRules().getColor().isMonoColor()) return !this.shouldBeEqual; break; case MultiColor: - if(!card.getRules().getColor().isMulticolor()) + if (!card.getRules().getColor().isMulticolor()) return !this.shouldBeEqual; break; } } - if(!this.type.isEmpty()) - { - boolean found=false; - for(CardType.CoreType type:card.getRules().getType().getCoreTypes()) - { - if(this.type.contains(type)) - { - found=true; + if (!this.type.isEmpty()) { + boolean found = false; + for (CardType.CoreType type : card.getRules().getType().getCoreTypes()) { + if (this.type.contains(type)) { + found = true; break; } } - if(!found) + if (!found) return !this.shouldBeEqual; } - if(!this.superType.isEmpty()) - { - boolean found=false; - for(CardType.Supertype type:card.getRules().getType().getSupertypes()) - { - if(this.superType.contains(type)) - { - found=true; + if (!this.superType.isEmpty()) { + boolean found = false; + for (CardType.Supertype type : card.getRules().getType().getSupertypes()) { + if (this.superType.contains(type)) { + found = true; break; } } - if(!found) + if (!found) return !this.shouldBeEqual; } - if(this.matchAllSubTypes) - { - if(!this.subType.isEmpty()) - { - if(this.subType.size()!= Iterables.size(card.getRules().getType().getSubtypes())) + if (this.matchAllSubTypes) { + if (!this.subType.isEmpty()) { + if (this.subType.size() != Iterables.size(card.getRules().getType().getSubtypes())) return !this.shouldBeEqual; - for(String subtype:card.getRules().getType().getSubtypes()) - { - if(!this.subType.contains(subtype)) - { + for (String subtype : card.getRules().getType().getSubtypes()) { + if (!this.subType.contains(subtype)) { return !this.shouldBeEqual; } } } - } - else - { - if(!this.subType.isEmpty()) - { - boolean found=false; - for(String subtype:card.getRules().getType().getSubtypes()) - { - if(this.subType.contains(subtype)) - { - found=true; + } else { + if (!this.subType.isEmpty()) { + boolean found = false; + for (String subtype : card.getRules().getType().getSubtypes()) { + if (this.subType.contains(subtype)) { + found = true; break; } } - if(!found) + if (!found) return !this.shouldBeEqual; } } - if(!this.keyWords.isEmpty()) - { - boolean found=false; - for(String keyWord:this.keyWords) - { - if(card.getRules().hasKeyword(keyWord)) - { - found=true; + if (!this.keyWords.isEmpty()) { + boolean found = false; + for (String keyWord : this.keyWords) { + if (card.getRules().hasKeyword(keyWord)) { + found = true; break; } } - if(!found) + if (!found) return !this.shouldBeEqual; } - if(!this.deckNeeds.isEmpty()) - { + if (!this.deckNeeds.isEmpty()) { boolean found = false; - for(String need:this.deckNeeds) - { - //FormatExpected: X$Y, where X is DeckHints.Type and Y is a string descriptor + for (String need : this.deckNeeds) { + // FormatExpected: X$Y, where X is DeckHints.Type and Y is a string descriptor String[] parts = need.split("\\$"); - if (parts.length != 2){ + if (parts.length != 2) { continue; } DeckHints.Type t = DeckHints.Type.valueOf(parts[0].toUpperCase()); DeckHints hints = card.getRules().getAiHints().getDeckHints(); - if (hints != null && hints.contains(t, parts[1])){ - found=true; + if (hints != null && hints.contains(t, parts[1])) { + found = true; break; } } - if(!found) + if (!found) return !this.shouldBeEqual; } - return this.shouldBeEqual; } + private Pattern getPattern(RewardData type) { if (type.cardText == null || type.cardText.isEmpty()) return null; @@ -259,106 +235,89 @@ public class CardUtil { return null; } } + public CardPredicate(final RewardData type, final boolean wantEqual) { - this.matchAllSubTypes=type.matchAllSubTypes; - this.matchAllColors=type.matchAllColors; + this.matchAllSubTypes = type.matchAllSubTypes; + this.matchAllColors = type.matchAllColors; this.shouldBeEqual = wantEqual; - for(int i=0;type.manaCosts!=null&&i getPredicateResult(Iterable cards,final RewardData data) - { + public static List getPredicateResult(Iterable cards, final RewardData data) { List result = new ArrayList<>(); CardPredicate pre = new CardPredicate(data, true); - for (final PaperCard item : cards) - { - if(pre.test(item)) + for (final PaperCard item : cards) { + if (pre.test(item)) result.add(item); } return result; } - public static List generateCards(Iterable cards,final RewardData data, final int count, Random r) - { + public static List generateCards(Iterable cards, final RewardData data, final int count, + Random r) { boolean allCardVariants = Config.instance().getSettingData().useAllCardVariants; final List result = new ArrayList<>(); List pool = getPredicateResult(cards, data); - if (pool.size() > 0) { + if (!pool.isEmpty()) { for (int i = 0; i < count; i++) { PaperCard candidate = pool.get(r.nextInt(pool.size())); if (candidate != null) { if (allCardVariants) { - PaperCard finalCandidate = CardUtil.getCardByName(candidate.getCardName()); // get a random set variant + // Get a random set variant + PaperCard finalCandidate = CardUtil.getCardByName(candidate.getCardName()); result.add(finalCandidate); } else { result.add(candidate); @@ -368,113 +327,102 @@ public class CardUtil { } return result; } - public static int getCardPrice(PaperCard card) - { - if(card==null) - return 0; - switch (card.getRarity()) - { - case BasicLand: - return 5; - case Common: - return 50; - case Uncommon: - return 150; - case Rare: - return 300; - case MythicRare: - return 500; - default: - return 600; - } - } - public static int getRewardPrice(Reward reward) - { - PaperCard card=reward.getCard(); - if(card!=null) - return getCardPrice(card); - if(reward.getItem()!=null) - return reward.getItem().cost; - if(reward.getType()== Reward.Type.Life) - return reward.getCount()*500; - if(reward.getType()== Reward.Type.Shards) - return reward.getCount()*500; - if(reward.getType()== Reward.Type.Gold) - return reward.getCount(); - /*if(reward.getType() == Reward.Type.CardPack) - return reward.getDeck().get(DeckSection.Main).countAll()*70;*/ - //TODO: Heitor - Price by card count and type of boosterPack. + public static int getCardPrice(PaperCard card) { + if (card == null) + return 0; + + return switch (card.getRarity()) { + case BasicLand -> 5; + case Common -> 50; + case Uncommon -> 150; + case Rare -> 300; + case MythicRare -> 500; + default -> 600; + }; + } + + public static int getRewardPrice(Reward reward) { + PaperCard card = reward.getCard(); + if (card != null) + return getCardPrice(card); + if (reward.getItem() != null) + return reward.getItem().cost; + if (reward.getType() == Reward.Type.Life) + return reward.getCount() * 500; + if (reward.getType() == Reward.Type.Shards) + return reward.getCount() * 500; + if (reward.getType() == Reward.Type.Gold) + return reward.getCount(); + /* + * if(reward.getType() == Reward.Type.CardPack) + * return reward.getDeck().get(DeckSection.Main).countAll()*70; + */ + // TODO: Heitor - Price by card count and type of boosterPack. return 1000; } - public static Deck generateDeck(GeneratedDeckData data, CardEdition starterEdition, boolean discourageDuplicates) - { - List editionCodes = (starterEdition != null)?Arrays.asList(starterEdition.getCode(), starterEdition.getCode2()):Arrays.asList("JMP", "J22", "DMU", "BRO", "ONE", "MOM"); - Deck deck= new Deck(data.name); - if(data.mainDeck!=null) - { + public static Deck generateDeck(GeneratedDeckData data, CardEdition starterEdition, boolean discourageDuplicates) { + List editionCodes = (starterEdition != null) + ? Arrays.asList(starterEdition.getCode(), starterEdition.getCode2()) + : Arrays.asList("JMP", "J22", "DMU", "BRO", "ONE", "MOM"); + Deck deck = new Deck(data.name); + if (data.mainDeck != null) { deck.getOrCreate(DeckSection.Main).addAllFlat(generateAllCards(Arrays.asList(data.mainDeck), true)); - if(data.sideBoard!=null) - deck.getOrCreate(DeckSection.Sideboard).addAllFlat(generateAllCards(Arrays.asList(data.sideBoard), true)); + if (data.sideBoard != null) + deck.getOrCreate(DeckSection.Sideboard) + .addAllFlat(generateAllCards(Arrays.asList(data.sideBoard), true)); return deck; } - if(data.jumpstartPacks!=null) - { + if (data.jumpstartPacks != null) { deck.getOrCreate(DeckSection.Main); - Map > packCandidates=null; - List usedPackNames=new ArrayList(); - - for(int i=0;i> packCandidates = null; + List usedPackNames = new ArrayList(); + for (int i = 0; i < data.jumpstartPacks.length; i++) { final byte targetColor = MagicColor.fromName(data.jumpstartPacks[i]); - String targetName; - switch (targetColor) - { - default: - case MagicColor.WHITE: targetName = "Plains"; break; - case MagicColor.BLUE: targetName = "Island"; break; - case MagicColor.BLACK: targetName = "Swamp"; break; - case MagicColor.RED: targetName = "Mountain";break; - case MagicColor.GREEN: targetName = "Forest"; break; - } + String targetName = switch (targetColor) { + case MagicColor.BLUE -> "Island"; + case MagicColor.BLACK -> "Swamp"; + case MagicColor.RED -> "Mountain"; + case MagicColor.GREEN -> "Forest"; + default -> "Plains"; + }; - packCandidates=new HashMap<>(); - for(SealedTemplate template : StaticData.instance().getSpecialBoosters()) - { - if (!editionCodes.contains(template.getEdition().split("\\s",2)[0])) + packCandidates = new HashMap<>(); + for (SealedTemplate template : StaticData.instance().getSpecialBoosters()) { + if (!editionCodes.contains(template.getEdition().split("\\s", 2)[0])) continue; List packContents = new UnOpenedProduct(template).get(); if (packContents.size() < 18 | packContents.size() > 25) continue; - if (packContents.stream().filter(x -> x.getName().equals(targetName)).count() >=3) + if (packContents.stream().filter(x -> x.getName().equals(targetName)).count() >= 3) packCandidates.putIfAbsent(template.getEdition(), packContents); } List selectedPack; if (discourageDuplicates) { - Map > filteredPackCandidates= new HashMap<>(); - for (java.util.Map.Entry> entry: packCandidates.entrySet()){ - if (!usedPackNames.contains(entry.getKey())){ - filteredPackCandidates.put(entry.getKey(), entry.getValue()); //deep copy so that packCandidates can be used if filtered ends up being empty + Map> filteredPackCandidates = new HashMap<>(); + for (java.util.Map.Entry> entry : packCandidates.entrySet()) { + if (!usedPackNames.contains(entry.getKey())) { + // Deep copy so that packCandidates can be used if filtered ends up being empty + filteredPackCandidates.put(entry.getKey(), entry.getValue()); } } - //Only re-use a pack if all possibilities have already been chosen - if (filteredPackCandidates.size() == 0) + // Only re-use a pack if all possibilities have already been chosen + if (filteredPackCandidates.isEmpty()) filteredPackCandidates = packCandidates; Object[] keys = filteredPackCandidates.keySet().toArray(); - String keyName = (String)keys[Current.world().getRandom().nextInt(keys.length)]; + String keyName = (String) keys[Current.world().getRandom().nextInt(keys.length)]; usedPackNames.add(keyName); selectedPack = filteredPackCandidates.remove(keyName); - } - else{ + } else { Object[] keys = packCandidates.keySet().toArray(); - selectedPack = packCandidates.get((String)keys[Current.world().getRandom().nextInt(keys.length)]); + selectedPack = packCandidates.get((String) keys[Current.world().getRandom().nextInt(keys.length)]); } - //if the packContents size above is below 20, just get random card + // If the packContents size above is below 20, add random cards int size = 20 - selectedPack.size(); for (int c = 0; c < size; c++) { selectedPack.add(Aggregates.random(selectedPack)); @@ -483,19 +431,18 @@ public class CardUtil { } return deck; } - if(data.template!=null) - { - float count=data.template.count; - float lands=count*0.4f; - float spells=count-lands; - List dataArray= generateRewards(data.template,spells*0.5f,new int[]{1,2}); - dataArray.addAll(generateRewards(data.template,spells*0.3f,new int[]{3,4,5})); - dataArray.addAll(generateRewards(data.template,spells*0.2f,new int[]{6,7,8})); - List nonLand= generateAllCards(dataArray, true); + if (data.template != null) { + float count = data.template.count; + float lands = count * 0.4f; + float spells = count - lands; + List dataArray = generateRewards(data.template, spells * 0.5f, new int[] { 1, 2 }); + dataArray.addAll(generateRewards(data.template, spells * 0.3f, new int[] { 3, 4, 5 })); + dataArray.addAll(generateRewards(data.template, spells * 0.2f, new int[] { 6, 7, 8 })); + List nonLand = generateAllCards(dataArray, true); - nonLand.addAll(fillWithLands(nonLand,data.template)); - deck.getOrCreate(DeckSection.Main).addAllFlat(nonLand); - } + nonLand.addAll(fillWithLands(nonLand, data.template)); + deck.getOrCreate(DeckSection.Main).addAllFlat(nonLand); + } return deck; } @@ -577,102 +524,93 @@ public class CardUtil { return cards; } + private static Collection generateDualLands(List landName, int count) { - ArrayList rewards=new ArrayList<>(); - RewardData base= new RewardData(); + ArrayList rewards = new ArrayList<>(); + RewardData base = new RewardData(); rewards.add(base); - base.cardTypes=new String[]{"Land"}; - base.count=count; - base.matchAllSubTypes=true; - if(landName.size()==1) - { - base.subTypes=new String[]{landName.get(0)}; - } - else if(landName.size()==2) - { - base.subTypes=new String[]{landName.get(0),landName.get(1)}; - } - else if(landName.size()==3) - { - RewardData sub1= new RewardData(base); - RewardData sub2= new RewardData(base); - sub1.count/=3; - sub2.count/=3; - base.count-=sub1.count; - base.count-=sub2.count; + base.cardTypes = new String[] { "Land" }; + base.count = count; + base.matchAllSubTypes = true; + if (landName.size() == 1) { + base.subTypes = new String[] { landName.get(0) }; + } else if (landName.size() == 2) { + base.subTypes = new String[] { landName.get(0), landName.get(1) }; + } else if (landName.size() == 3) { + RewardData sub1 = new RewardData(base); + RewardData sub2 = new RewardData(base); + sub1.count /= 3; + sub2.count /= 3; + base.count -= sub1.count; + base.count -= sub2.count; - base.subTypes=new String[]{landName.get(0),landName.get(1)}; - sub1.subTypes=new String[]{landName.get(1),landName.get(2)}; - sub2.subTypes=new String[]{landName.get(0),landName.get(2)}; - rewards.addAll(Arrays.asList(sub1,sub2)); - } - else if(landName.size()==4) - { - RewardData sub1= new RewardData(base); - RewardData sub2= new RewardData(base); - RewardData sub3= new RewardData(base); - RewardData sub4= new RewardData(base); - sub1.count/=5; - sub2.count/=5; - sub3.count/=5; - sub4.count/=5; - base.count-=sub1.count; - base.count-=sub2.count; - base.count-=sub3.count; - base.count-=sub4.count; + base.subTypes = new String[] { landName.get(0), landName.get(1) }; + sub1.subTypes = new String[] { landName.get(1), landName.get(2) }; + sub2.subTypes = new String[] { landName.get(0), landName.get(2) }; + rewards.addAll(Arrays.asList(sub1, sub2)); + } else if (landName.size() == 4) { + RewardData sub1 = new RewardData(base); + RewardData sub2 = new RewardData(base); + RewardData sub3 = new RewardData(base); + RewardData sub4 = new RewardData(base); + sub1.count /= 5; + sub2.count /= 5; + sub3.count /= 5; + sub4.count /= 5; + base.count -= sub1.count; + base.count -= sub2.count; + base.count -= sub3.count; + base.count -= sub4.count; - base.subTypes = new String[]{landName.get(0),landName.get(1)}; - sub1.subTypes = new String[]{landName.get(0),landName.get(2)}; - sub2.subTypes = new String[]{landName.get(0),landName.get(3)}; - sub3.subTypes = new String[]{landName.get(1),landName.get(2)}; - sub4.subTypes = new String[]{landName.get(1),landName.get(3)}; - rewards.addAll(Arrays.asList(sub1,sub2,sub3,sub4)); - } - else if(landName.size()==5) - { - RewardData sub1= new RewardData(base); - RewardData sub2= new RewardData(base); - RewardData sub3= new RewardData(base); - RewardData sub4= new RewardData(base); - RewardData sub5= new RewardData(base); - RewardData sub6= new RewardData(base); - RewardData sub7= new RewardData(base); - RewardData sub8= new RewardData(base); - RewardData sub9= new RewardData(base); - sub1.count/=10; - sub2.count/=10; - sub3.count/=10; - sub4.count/=10; - sub5.count/=10; - sub6.count/=10; - sub7.count/=10; - sub8.count/=10; - sub9.count/=10; - base.count-=sub1.count; - base.count-=sub2.count; - base.count-=sub3.count; - base.count-=sub4.count; - base.count-=sub5.count; - base.count-=sub6.count; - base.count-=sub7.count; - base.count-=sub8.count; - base.count-=sub9.count; + base.subTypes = new String[] { landName.get(0), landName.get(1) }; + sub1.subTypes = new String[] { landName.get(0), landName.get(2) }; + sub2.subTypes = new String[] { landName.get(0), landName.get(3) }; + sub3.subTypes = new String[] { landName.get(1), landName.get(2) }; + sub4.subTypes = new String[] { landName.get(1), landName.get(3) }; + rewards.addAll(Arrays.asList(sub1, sub2, sub3, sub4)); + } else if (landName.size() == 5) { + RewardData sub1 = new RewardData(base); + RewardData sub2 = new RewardData(base); + RewardData sub3 = new RewardData(base); + RewardData sub4 = new RewardData(base); + RewardData sub5 = new RewardData(base); + RewardData sub6 = new RewardData(base); + RewardData sub7 = new RewardData(base); + RewardData sub8 = new RewardData(base); + RewardData sub9 = new RewardData(base); + sub1.count /= 10; + sub2.count /= 10; + sub3.count /= 10; + sub4.count /= 10; + sub5.count /= 10; + sub6.count /= 10; + sub7.count /= 10; + sub8.count /= 10; + sub9.count /= 10; + base.count -= sub1.count; + base.count -= sub2.count; + base.count -= sub3.count; + base.count -= sub4.count; + base.count -= sub5.count; + base.count -= sub6.count; + base.count -= sub7.count; + base.count -= sub8.count; + base.count -= sub9.count; - base.subTypes=new String[]{landName.get(0),landName.get(1)}; - sub1.subTypes=new String[]{landName.get(0),landName.get(2)}; - sub2.subTypes=new String[]{landName.get(0),landName.get(3)}; - sub3.subTypes=new String[]{landName.get(0),landName.get(4)}; - sub4.subTypes=new String[]{landName.get(1),landName.get(2)}; - sub5.subTypes=new String[]{landName.get(1),landName.get(3)}; - sub6.subTypes=new String[]{landName.get(1),landName.get(4)}; - sub7.subTypes=new String[]{landName.get(2),landName.get(3)}; - sub8.subTypes=new String[]{landName.get(2),landName.get(4)}; - sub9.subTypes=new String[]{landName.get(3),landName.get(4)}; - rewards.addAll(Arrays.asList(sub1,sub2,sub3,sub4,sub5,sub6,sub7,sub8,sub9)); + base.subTypes = new String[] { landName.get(0), landName.get(1) }; + sub1.subTypes = new String[] { landName.get(0), landName.get(2) }; + sub2.subTypes = new String[] { landName.get(0), landName.get(3) }; + sub3.subTypes = new String[] { landName.get(0), landName.get(4) }; + sub4.subTypes = new String[] { landName.get(1), landName.get(2) }; + sub5.subTypes = new String[] { landName.get(1), landName.get(3) }; + sub6.subTypes = new String[] { landName.get(1), landName.get(4) }; + sub7.subTypes = new String[] { landName.get(2), landName.get(3) }; + sub8.subTypes = new String[] { landName.get(2), landName.get(4) }; + sub9.subTypes = new String[] { landName.get(3), landName.get(4) }; + rewards.addAll(Arrays.asList(sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8, sub9)); } - Collection ret = new ArrayList<>(generateAllCards(rewards, true)); - return ret; + return new ArrayList<>(generateAllCards(rewards, true)); } private static Collection generateLands(String landName, int count) { @@ -700,43 +638,44 @@ public class CardUtil { } private static List generateRewards(GeneratedDeckTemplateData template, float count, int[] manaCosts) { - ArrayList ret=new ArrayList<>(); - ret.addAll(templateGenerate(template,count-(count*template.rares),manaCosts,new String[]{"Uncommon","Common"})); - ret.addAll(templateGenerate(template,count*template.rares,manaCosts,new String[]{"Rare","Mythic Rare"})); + ArrayList ret = new ArrayList<>(); + ret.addAll(templateGenerate(template, count - (count * template.rares), manaCosts, + new String[] { "Uncommon", "Common" })); + ret.addAll( + templateGenerate(template, count * template.rares, manaCosts, new String[] { "Rare", "Mythic Rare" })); return ret; } - private static ArrayList templateGenerate(GeneratedDeckTemplateData template, float count, int[] manaCosts, String[] strings) { - ArrayList ret=new ArrayList<>(); - RewardData base= new RewardData(); - base.manaCosts=manaCosts; - base.rarity=strings; - base.colors=template.colors; - if(template.tribe!=null&&!template.tribe.isEmpty()) - { - RewardData caresAbout= new RewardData(base); - caresAbout.cardText="\\b"+template.tribe+"\\b"; - caresAbout.count= Math.round(count*template.tribeSynergyCards); + private static ArrayList templateGenerate(GeneratedDeckTemplateData template, float count, + int[] manaCosts, String[] strings) { + ArrayList ret = new ArrayList<>(); + RewardData base = new RewardData(); + base.manaCosts = manaCosts; + base.rarity = strings; + base.colors = template.colors; + if (template.tribe != null && !template.tribe.isEmpty()) { + RewardData caresAbout = new RewardData(base); + caresAbout.cardText = "\\b" + template.tribe + "\\b"; + caresAbout.count = Math.round(count * template.tribeSynergyCards); ret.add(caresAbout); - base.subTypes=new String[]{template.tribe}; - base.count= Math.round(count*(1-template.tribeSynergyCards)); - } - else - { - base.count= Math.round(count); + base.subTypes = new String[] { template.tribe }; + base.count = Math.round(count * (1 - template.tribeSynergyCards)); + } else { + base.count = Math.round(count); } ret.add(base); - return ret; + return ret; } - public static Deck getDeck(String path, boolean forAI, boolean isFantasyMode, String colors, boolean isTheme, boolean useGeneticAI) { - return getDeck(path, forAI, isFantasyMode, colors, isTheme, useGeneticAI, null,true); + public static Deck getDeck(String path, boolean forAI, boolean isFantasyMode, String colors, boolean isTheme, + boolean useGeneticAI) { + return getDeck(path, forAI, isFantasyMode, colors, isTheme, useGeneticAI, null, true); } - public static Deck getDeck(String path, boolean forAI, boolean isFantasyMode, String colors, boolean isTheme, boolean useGeneticAI, CardEdition starterEdition, boolean discourageDuplicates) - { - if(path.endsWith(".dck")) { + public static Deck getDeck(String path, boolean forAI, boolean isFantasyMode, String colors, boolean isTheme, + boolean useGeneticAI, CardEdition starterEdition, boolean discourageDuplicates) { + if (path.endsWith(".dck")) { FileHandle fileHandle = Config.instance().getFile(path); Deck deck = null; if (fileHandle != null) { @@ -749,12 +688,10 @@ public class CardUtil { return deck; } - if(forAI && (isFantasyMode||useGeneticAI)) { - Deck deck = DeckgenUtil.getRandomOrPreconOrThemeDeck(colors, forAI, isTheme, useGeneticAI); - if (deck != null) - return deck; + if (forAI && (isFantasyMode || useGeneticAI)) { + return DeckgenUtil.getRandomOrPreconOrThemeDeck(colors, forAI, isTheme, useGeneticAI); } - + Json json = new Json(); FileHandle handle = Config.instance().getFile(path); if (handle.exists()) @@ -764,41 +701,41 @@ public class CardUtil { return deck; } - private static final GameFormat.Collection formats = FModel.getFormats(); - - - - + private static final GameFormat.Collection formats = FModel.getFormats(); private static final Predicate filterPioneer = formats.getPioneer().editionLegalPredicate; - private static final Predicate filterModern= formats.getModern().editionLegalPredicate; + private static final Predicate filterModern = formats.getModern().editionLegalPredicate; private static final Predicate filterVintage = formats.getVintage().editionLegalPredicate; private static final Predicate filterStandard = formats.getStandard().editionLegalPredicate; - public static Deck generateStandardBoosterAsDeck(){ + + public static Deck generateStandardBoosterAsDeck() { return generateRandomBoosterPackAsDeck(filterStandard); } - public static Deck generatePioneerBoosterAsDeck(){ + + public static Deck generatePioneerBoosterAsDeck() { return generateRandomBoosterPackAsDeck(filterPioneer); } - public static Deck generateModernBoosterAsDeck(){ + + public static Deck generateModernBoosterAsDeck() { return generateRandomBoosterPackAsDeck(filterModern); } - public static Deck generateVintageBoosterAsDeck(){ + + public static Deck generateVintageBoosterAsDeck() { return generateRandomBoosterPackAsDeck(filterVintage); } - public static Deck generateBoosterPackAsDeck(String code){ + public static Deck generateBoosterPackAsDeck(String code) { ConfigData configData = Config.instance().getConfigData(); if (configData.allowedEditions != null) { - if (!Arrays.asList(configData.allowedEditions).contains(code)){ + if (!Arrays.asList(configData.allowedEditions).contains(code)) { System.err.println("Cannot generate booster pack, '" + code + "' is not an allowed edition"); } - } else if (Arrays.asList(configData.restrictedEditions).contains(code)){ + } else if (Arrays.asList(configData.restrictedEditions).contains(code)) { System.err.println("Cannot generate booster pack, '" + code + "' is a restricted edition"); } CardEdition edition = StaticData.instance().getEditions().get(code); - if (edition == null){ + if (edition == null) { System.err.println("Set code '" + code + "' not found."); return new Deck(); } @@ -806,7 +743,7 @@ public class CardUtil { return generateBoosterPackAsDeck(edition); } - public static Deck generateBoosterPackAsDeck(CardEdition edition){ + public static Deck generateBoosterPackAsDeck(CardEdition edition) { Deck d = new Deck("Booster pack"); d.setComment(edition.getCode()); d.getMain().add(BoosterPack.fromSet(edition).getCards()); @@ -833,7 +770,7 @@ public class CardUtil { public static PaperCard getCardByName(String cardName) { List validCards; - //Faster to ask the CardDB for a card name than it is to search the pool. + // Faster to ask the CardDB for a card name than it is to search the pool. if (Config.instance().getSettingData().useAllCardVariants) validCards = FModel.getMagicDb().getCommonCards().getAllCards(cardName); else @@ -854,7 +791,9 @@ public class CardUtil { .filter(input -> input.getEdition().equals(edition)).collect(Collectors.toList()); if (validCards.isEmpty()) { - System.err.println("Unexpected behavior: tried to call getCardByNameAndEdition for card " + cardName + " from the edition " + edition + ", but didn't find it in the DB. A random existing instance will be returned if found."); + System.err.println("Unexpected behavior: tried to call getCardByNameAndEdition for card " + cardName + + " from the edition " + edition + + ", but didn't find it in the DB. A random existing instance will be returned if found."); return getCardByName(cardName); } @@ -862,7 +801,8 @@ public class CardUtil { } public static Collection getFullCardPool(boolean allCardVariants) { - return allCardVariants ? FModel.getMagicDb().getCommonCards().getAllCards() : FModel.getMagicDb().getCommonCards().getUniqueCardsNoAlt(); + return allCardVariants + ? FModel.getMagicDb().getCommonCards().getAllCards() + : FModel.getMagicDb().getCommonCards().getUniqueCardsNoAlt(); } } - From 4e17b4c9d2ae06e2f69269b39976f2102e459c01 Mon Sep 17 00:00:00 2001 From: Eradev Date: Wed, 8 Oct 2025 12:19:31 -0400 Subject: [PATCH 313/355] Missing import --- forge-gui-mobile/src/forge/adventure/util/CardUtil.java | 1 + 1 file changed, 1 insertion(+) diff --git a/forge-gui-mobile/src/forge/adventure/util/CardUtil.java b/forge-gui-mobile/src/forge/adventure/util/CardUtil.java index ce55a815131..3dbc5403951 100644 --- a/forge-gui-mobile/src/forge/adventure/util/CardUtil.java +++ b/forge-gui-mobile/src/forge/adventure/util/CardUtil.java @@ -9,6 +9,7 @@ import forge.adventure.data.GeneratedDeckData; import forge.adventure.data.GeneratedDeckTemplateData; import forge.adventure.data.RewardData; import forge.card.*; +import forge.card.DeckHints.Type; import forge.card.mana.ManaCost; import forge.card.mana.ManaCostShard; import forge.deck.Deck; From bbd9fb7c37ca09294fa312320dfdb564dc40946c Mon Sep 17 00:00:00 2001 From: Agetian Date: Wed, 8 Oct 2025 08:47:19 +0300 Subject: [PATCH 314/355] - Fix AI not ordering combatants for damage in non-legacy mode. --- forge-game/src/main/java/forge/game/combat/Combat.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/forge-game/src/main/java/forge/game/combat/Combat.java b/forge-game/src/main/java/forge/game/combat/Combat.java index 4f81d53ef7e..4797c94c038 100644 --- a/forge-game/src/main/java/forge/game/combat/Combat.java +++ b/forge-game/src/main/java/forge/game/combat/Combat.java @@ -492,7 +492,7 @@ public class Combat { /** If there are multiple blockers, the Attacker declares the Assignment Order */ public void orderBlockersForDamageAssignment(Card attacker, CardCollection blockers) { // this method performs controller's role - if (blockers.size() <= 1 || !this.legacyOrderCombatants) { + if (blockers.size() <= 1 || (!this.legacyOrderCombatants && !playerWhoAttacks.isAI())) { blockersOrderedForDamageAssignment.get().put(attacker, new CardCollection(blockers)); return; } @@ -529,7 +529,7 @@ public class Combat { final CardCollection oldBlockers = blockersOrderedForDamageAssignment.get().get(attacker); if (oldBlockers == null || oldBlockers.isEmpty()) { blockersOrderedForDamageAssignment.get().put(attacker, new CardCollection(blocker)); - } else if (this.legacyOrderCombatants) { + } else if (this.legacyOrderCombatants || playerWhoAttacks.isAI()) { CardCollection orderedBlockers = playerWhoAttacks.getController().orderBlocker(attacker, blocker, oldBlockers); blockersOrderedForDamageAssignment.get().put(attacker, orderedBlockers); } else { @@ -550,7 +550,7 @@ public class Combat { // They need a reverse map here: Blocker => List Player blockerCtrl = blocker.getController(); - CardCollection orderedAttacker = attackers.size() <= 1 || !this.legacyOrderCombatants ? attackers : blockerCtrl.getController().orderAttackers(blocker, attackers); + CardCollection orderedAttacker = attackers.size() <= 1 || (!this.legacyOrderCombatants && !blockerCtrl.getController().isAI()) ? attackers : blockerCtrl.getController().orderAttackers(blocker, attackers); // Damage Ordering needs to take cards like Melee into account, is that happening? attackersOrderedForDamageAssignment.get().put(blocker, orderedAttacker); From 5a19c9ed7e31c658cec4c52392a73422c5a6e24d Mon Sep 17 00:00:00 2001 From: Agetian Date: Wed, 8 Oct 2025 10:25:45 +0300 Subject: [PATCH 315/355] Revert "- Fix AI not ordering combatants for damage in non-legacy mode." This reverts commit ff784183dc1ca8c0e75d8231efb388360909a45a. --- forge-game/src/main/java/forge/game/combat/Combat.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/forge-game/src/main/java/forge/game/combat/Combat.java b/forge-game/src/main/java/forge/game/combat/Combat.java index 4797c94c038..4f81d53ef7e 100644 --- a/forge-game/src/main/java/forge/game/combat/Combat.java +++ b/forge-game/src/main/java/forge/game/combat/Combat.java @@ -492,7 +492,7 @@ public class Combat { /** If there are multiple blockers, the Attacker declares the Assignment Order */ public void orderBlockersForDamageAssignment(Card attacker, CardCollection blockers) { // this method performs controller's role - if (blockers.size() <= 1 || (!this.legacyOrderCombatants && !playerWhoAttacks.isAI())) { + if (blockers.size() <= 1 || !this.legacyOrderCombatants) { blockersOrderedForDamageAssignment.get().put(attacker, new CardCollection(blockers)); return; } @@ -529,7 +529,7 @@ public class Combat { final CardCollection oldBlockers = blockersOrderedForDamageAssignment.get().get(attacker); if (oldBlockers == null || oldBlockers.isEmpty()) { blockersOrderedForDamageAssignment.get().put(attacker, new CardCollection(blocker)); - } else if (this.legacyOrderCombatants || playerWhoAttacks.isAI()) { + } else if (this.legacyOrderCombatants) { CardCollection orderedBlockers = playerWhoAttacks.getController().orderBlocker(attacker, blocker, oldBlockers); blockersOrderedForDamageAssignment.get().put(attacker, orderedBlockers); } else { @@ -550,7 +550,7 @@ public class Combat { // They need a reverse map here: Blocker => List Player blockerCtrl = blocker.getController(); - CardCollection orderedAttacker = attackers.size() <= 1 || (!this.legacyOrderCombatants && !blockerCtrl.getController().isAI()) ? attackers : blockerCtrl.getController().orderAttackers(blocker, attackers); + CardCollection orderedAttacker = attackers.size() <= 1 || !this.legacyOrderCombatants ? attackers : blockerCtrl.getController().orderAttackers(blocker, attackers); // Damage Ordering needs to take cards like Melee into account, is that happening? attackersOrderedForDamageAssignment.get().put(blocker, orderedAttacker); From 7deb7b1ecc0eb2858baa897a45d979fefc9b5fea Mon Sep 17 00:00:00 2001 From: Agetian Date: Wed, 8 Oct 2025 10:32:04 +0300 Subject: [PATCH 316/355] - Fix AI not ordering combatants for damage in non-legacy mode - take two (inside distributeAIDamage) --- .../src/main/java/forge/ai/ComputerUtilCombat.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java index 5126f906227..87a45df1aaa 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java @@ -2020,6 +2020,7 @@ public class ComputerUtilCombat { Map damageMap = Maps.newHashMap(); Combat combat = attacker.getGame().getCombat(); + // Order the combatants in preferred order boolean isAttacking = defender != null; // Check for Banding, Defensive Formation @@ -2046,8 +2047,11 @@ public class ComputerUtilCombat { // TODO sort remaining tramplers for DamageDone triggers } - if (block.size() == 1) { - final Card blocker = block.getFirst(); + final CardCollection orderedBlockers = new CardCollection(block); + ComputerUtilCard.sortByEvaluateCreature(orderedBlockers); + + if (orderedBlockers.size() == 1) { + final Card blocker = orderedBlockers.getFirst(); int dmgToBlocker = dmgCanDeal; if (hasTrample && isAttacking && !aiDistributesBandingDmg) { // otherwise no entity to deliver damage via trample @@ -2070,7 +2074,7 @@ public class ComputerUtilCombat { // Does the attacker deal lethal damage to all blockers //Blocking Order now determined after declare blockers Card lastBlocker = null; - for (final Card b : block) { + for (final Card b : orderedBlockers) { lastBlocker = b; final int dmgToKill = getEnoughDamageToKill(b, dmgCanDeal, attacker, true); if (dmgToKill <= dmgCanDeal) { @@ -2097,7 +2101,7 @@ public class ComputerUtilCombat { } else { // In the event of Banding or Defensive Formation, assign max damage to the blocker who // can tank all the damage or to the worst blocker to lose as little as possible - for (final Card b : block) { + for (final Card b : orderedBlockers) { final int dmgToKill = getEnoughDamageToKill(b, dmgCanDeal, attacker, true); if (dmgToKill > dmgCanDeal) { damageMap.put(b, dmgCanDeal); @@ -2105,7 +2109,7 @@ public class ComputerUtilCombat { } } if (damageMap.isEmpty()) { - damageMap.put(ComputerUtilCard.getWorstCreatureAI(block), dmgCanDeal); + damageMap.put(ComputerUtilCard.getWorstCreatureAI(orderedBlockers), dmgCanDeal); } } return damageMap; From af947c9af507b3f203dcd43ca32155a07b1f4d19 Mon Sep 17 00:00:00 2001 From: Agetian Date: Wed, 8 Oct 2025 10:33:22 +0300 Subject: [PATCH 317/355] - Fix comment placement --- forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java index 87a45df1aaa..bef268d2092 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java @@ -2020,7 +2020,6 @@ public class ComputerUtilCombat { Map damageMap = Maps.newHashMap(); Combat combat = attacker.getGame().getCombat(); - // Order the combatants in preferred order boolean isAttacking = defender != null; // Check for Banding, Defensive Formation @@ -2047,6 +2046,7 @@ public class ComputerUtilCombat { // TODO sort remaining tramplers for DamageDone triggers } + // Order the combatants in preferred order final CardCollection orderedBlockers = new CardCollection(block); ComputerUtilCard.sortByEvaluateCreature(orderedBlockers); From 6152933766d5fc00c1e3e9ee334f6f3a03d5f901 Mon Sep 17 00:00:00 2001 From: Agetian Date: Wed, 8 Oct 2025 10:38:19 +0300 Subject: [PATCH 318/355] - Only call the sort command in case legacy ordering is disabled, assume sorted elsewhere otherwise. --- forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java index bef268d2092..e041d0ef8d2 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java @@ -2046,9 +2046,12 @@ public class ComputerUtilCombat { // TODO sort remaining tramplers for DamageDone triggers } - // Order the combatants in preferred order + // Order the combatants in preferred order in case legacy ordering is disabled + final boolean legacyOrderCombatants = self.getGame().getRules().hasOrderCombatants(); final CardCollection orderedBlockers = new CardCollection(block); - ComputerUtilCard.sortByEvaluateCreature(orderedBlockers); + if (!legacyOrderCombatants) { + ComputerUtilCard.sortByEvaluateCreature(orderedBlockers); // assume sorted in case the legacy option is enabled + } if (orderedBlockers.size() == 1) { final Card blocker = orderedBlockers.getFirst(); From 29fe1266d7b6116de591d656c1b76021cd926de1 Mon Sep 17 00:00:00 2001 From: Agetian Date: Wed, 8 Oct 2025 10:47:57 +0300 Subject: [PATCH 319/355] - Reuse AiBlockController.orderBlockers --- forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java index e041d0ef8d2..cb0933aea97 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java @@ -2050,7 +2050,7 @@ public class ComputerUtilCombat { final boolean legacyOrderCombatants = self.getGame().getRules().hasOrderCombatants(); final CardCollection orderedBlockers = new CardCollection(block); if (!legacyOrderCombatants) { - ComputerUtilCard.sortByEvaluateCreature(orderedBlockers); // assume sorted in case the legacy option is enabled + AiBlockController.orderBlockers(attacker, orderedBlockers); // assume sorted in case the legacy option is enabled } if (orderedBlockers.size() == 1) { From 590abbe8e67c0cda3f965536af819058cf262d68 Mon Sep 17 00:00:00 2001 From: Agetian Date: Wed, 8 Oct 2025 12:11:03 +0300 Subject: [PATCH 320/355] - Assign the result of the orderBlockers call. --- forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java index cb0933aea97..42a6d821390 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java @@ -2048,9 +2048,9 @@ public class ComputerUtilCombat { // Order the combatants in preferred order in case legacy ordering is disabled final boolean legacyOrderCombatants = self.getGame().getRules().hasOrderCombatants(); - final CardCollection orderedBlockers = new CardCollection(block); + CardCollection orderedBlockers = new CardCollection(block); if (!legacyOrderCombatants) { - AiBlockController.orderBlockers(attacker, orderedBlockers); // assume sorted in case the legacy option is enabled + orderedBlockers = AiBlockController.orderBlockers(attacker, orderedBlockers); // assume sorted in case the legacy option is enabled } if (orderedBlockers.size() == 1) { From 3a956c4e20f5ce64fb1db23d12b18a6333e17b98 Mon Sep 17 00:00:00 2001 From: Agetian Date: Wed, 8 Oct 2025 12:29:12 +0300 Subject: [PATCH 321/355] - Take 4. Avoid creating an extra CardCollection unless needed. --- .../main/java/forge/ai/ComputerUtilCombat.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java index 42a6d821390..d0868516d0a 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java @@ -2016,7 +2016,7 @@ public class ComputerUtilCombat { * @param defender * @param overrideOrder overriding combatant order */ - public static Map distributeAIDamage(final Player self, final Card attacker, final CardCollectionView block, final CardCollectionView remaining, int dmgCanDeal, GameEntity defender, boolean overrideOrder) { + public static Map distributeAIDamage(final Player self, final Card attacker, CardCollectionView block, final CardCollectionView remaining, int dmgCanDeal, GameEntity defender, boolean overrideOrder) { Map damageMap = Maps.newHashMap(); Combat combat = attacker.getGame().getCombat(); @@ -2047,14 +2047,12 @@ public class ComputerUtilCombat { } // Order the combatants in preferred order in case legacy ordering is disabled - final boolean legacyOrderCombatants = self.getGame().getRules().hasOrderCombatants(); - CardCollection orderedBlockers = new CardCollection(block); - if (!legacyOrderCombatants) { - orderedBlockers = AiBlockController.orderBlockers(attacker, orderedBlockers); // assume sorted in case the legacy option is enabled + if (!self.getGame().getRules().hasOrderCombatants()) { + block = AiBlockController.orderBlockers(attacker, new CardCollection(block)); // assume sorted in case the legacy option is enabled } - if (orderedBlockers.size() == 1) { - final Card blocker = orderedBlockers.getFirst(); + if (block.size() == 1) { + final Card blocker = block.getFirst(); int dmgToBlocker = dmgCanDeal; if (hasTrample && isAttacking && !aiDistributesBandingDmg) { // otherwise no entity to deliver damage via trample @@ -2077,7 +2075,7 @@ public class ComputerUtilCombat { // Does the attacker deal lethal damage to all blockers //Blocking Order now determined after declare blockers Card lastBlocker = null; - for (final Card b : orderedBlockers) { + for (final Card b : block) { lastBlocker = b; final int dmgToKill = getEnoughDamageToKill(b, dmgCanDeal, attacker, true); if (dmgToKill <= dmgCanDeal) { @@ -2104,7 +2102,7 @@ public class ComputerUtilCombat { } else { // In the event of Banding or Defensive Formation, assign max damage to the blocker who // can tank all the damage or to the worst blocker to lose as little as possible - for (final Card b : orderedBlockers) { + for (final Card b : block) { final int dmgToKill = getEnoughDamageToKill(b, dmgCanDeal, attacker, true); if (dmgToKill > dmgCanDeal) { damageMap.put(b, dmgCanDeal); @@ -2112,7 +2110,7 @@ public class ComputerUtilCombat { } } if (damageMap.isEmpty()) { - damageMap.put(ComputerUtilCard.getWorstCreatureAI(orderedBlockers), dmgCanDeal); + damageMap.put(ComputerUtilCard.getWorstCreatureAI(block), dmgCanDeal); } } return damageMap; From 4256d9ae1f4de2dfd39cfde7153dfaae3495f628 Mon Sep 17 00:00:00 2001 From: Agetian Date: Wed, 8 Oct 2025 12:32:09 +0300 Subject: [PATCH 322/355] - Add a TODO. --- forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java | 1 + 1 file changed, 1 insertion(+) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java index d0868516d0a..c63b2b06d4e 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java @@ -2048,6 +2048,7 @@ public class ComputerUtilCombat { // Order the combatants in preferred order in case legacy ordering is disabled if (!self.getGame().getRules().hasOrderCombatants()) { + // TODO: sometimes, orderAttackers needs to be called instead - differentiate this here somehow block = AiBlockController.orderBlockers(attacker, new CardCollection(block)); // assume sorted in case the legacy option is enabled } From 845969bc34d4c099b80cdf370ac34cf10df23c84 Mon Sep 17 00:00:00 2001 From: Agetian Date: Wed, 8 Oct 2025 20:41:02 +0300 Subject: [PATCH 323/355] Update forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java Co-authored-by: Chris H --- forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java index c63b2b06d4e..7af0f41188c 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java @@ -2048,7 +2048,11 @@ public class ComputerUtilCombat { // Order the combatants in preferred order in case legacy ordering is disabled if (!self.getGame().getRules().hasOrderCombatants()) { - // TODO: sometimes, orderAttackers needs to be called instead - differentiate this here somehow + if (combatant.isAttacking()) { + opposedCombatants = AiBlockController.orderBlockers(combatant, new CardCollection(opposedCombatants)); + } else { + opposedCombatants = AiBlockController.orderAttackers(combatant, opposedCombatants); + } block = AiBlockController.orderBlockers(attacker, new CardCollection(block)); // assume sorted in case the legacy option is enabled } From a0442e7c3e2657dfb4d0e4847ced8708aa9b3ff6 Mon Sep 17 00:00:00 2001 From: Agetian Date: Wed, 8 Oct 2025 20:45:04 +0300 Subject: [PATCH 324/355] - Tweak the parameter names. --- .../java/forge/ai/ComputerUtilCombat.java | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java index 7af0f41188c..8d0e3a950b0 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java @@ -2008,35 +2008,35 @@ public class ComputerUtilCombat { * * @param self * a {@link forge.game.player.Player} object. - * @param attacker + * @param combatant * a {@link forge.game.card.Card} object. - * @param block + * @param opposedCombatants * @param dmgCanDeal * a int. * @param defender * @param overrideOrder overriding combatant order */ - public static Map distributeAIDamage(final Player self, final Card attacker, CardCollectionView block, final CardCollectionView remaining, int dmgCanDeal, GameEntity defender, boolean overrideOrder) { + public static Map distributeAIDamage(final Player self, final Card combatant, CardCollectionView opposedCombatants, final CardCollectionView remaining, int dmgCanDeal, GameEntity defender, boolean overrideOrder) { Map damageMap = Maps.newHashMap(); - Combat combat = attacker.getGame().getCombat(); + Combat combat = combatant.getGame().getCombat(); boolean isAttacking = defender != null; // Check for Banding, Defensive Formation - boolean isAttackingMe = isAttacking && combat.getDefenderPlayerByAttacker(attacker).equals(self); - boolean isBlockingMyBand = attacker.getController().isOpponentOf(self) && AttackingBand.isValidBand(block, true); + boolean isAttackingMe = isAttacking && combat.getDefenderPlayerByAttacker(combatant).equals(self); + boolean isBlockingMyBand = combatant.getController().isOpponentOf(self) && AttackingBand.isValidBand(opposedCombatants, true); final boolean aiDistributesBandingDmg = isAttackingMe || isBlockingMyBand; - final boolean hasTrample = attacker.hasKeyword(Keyword.TRAMPLE); + final boolean hasTrample = combatant.hasKeyword(Keyword.TRAMPLE); - if (combat != null && remaining != null && hasTrample && attacker.isAttacking() && !aiDistributesBandingDmg) { + if (combat != null && remaining != null && hasTrample && combatant.isAttacking() && !aiDistributesBandingDmg) { // if attacker has trample and some of its blockers are also blocking others it's generally a good idea // to assign those without trample first so we can maximize the damage to the defender for (final Card c : remaining) { - if (c == attacker || c.hasKeyword(Keyword.TRAMPLE)) { + if (c == combatant || c.hasKeyword(Keyword.TRAMPLE)) { continue; } - final CardCollection sharedBlockers = new CardCollection(block); + final CardCollection sharedBlockers = new CardCollection(opposedCombatants); sharedBlockers.retainAll(combat.getBlockers(c)); if (!sharedBlockers.isEmpty()) { // signal skip for now @@ -2051,17 +2051,17 @@ public class ComputerUtilCombat { if (combatant.isAttacking()) { opposedCombatants = AiBlockController.orderBlockers(combatant, new CardCollection(opposedCombatants)); } else { - opposedCombatants = AiBlockController.orderAttackers(combatant, opposedCombatants); + opposedCombatants = AiBlockController.orderAttackers(combatant, new CardCollection(opposedCombatants)); } - block = AiBlockController.orderBlockers(attacker, new CardCollection(block)); // assume sorted in case the legacy option is enabled + opposedCombatants = AiBlockController.orderBlockers(combatant, new CardCollection(opposedCombatants)); // assume sorted in case the legacy option is enabled } - if (block.size() == 1) { - final Card blocker = block.getFirst(); + if (opposedCombatants.size() == 1) { + final Card blocker = opposedCombatants.getFirst(); int dmgToBlocker = dmgCanDeal; if (hasTrample && isAttacking && !aiDistributesBandingDmg) { // otherwise no entity to deliver damage via trample - dmgToBlocker = getEnoughDamageToKill(blocker, dmgCanDeal, attacker, true); + dmgToBlocker = getEnoughDamageToKill(blocker, dmgCanDeal, combatant, true); if (dmgCanDeal < dmgToBlocker) { // can't kill so just put the lowest legal amount @@ -2080,9 +2080,9 @@ public class ComputerUtilCombat { // Does the attacker deal lethal damage to all blockers //Blocking Order now determined after declare blockers Card lastBlocker = null; - for (final Card b : block) { + for (final Card b : opposedCombatants) { lastBlocker = b; - final int dmgToKill = getEnoughDamageToKill(b, dmgCanDeal, attacker, true); + final int dmgToKill = getEnoughDamageToKill(b, dmgCanDeal, combatant, true); if (dmgToKill <= dmgCanDeal) { damageMap.put(b, dmgToKill); dmgCanDeal -= dmgToKill; @@ -2107,15 +2107,15 @@ public class ComputerUtilCombat { } else { // In the event of Banding or Defensive Formation, assign max damage to the blocker who // can tank all the damage or to the worst blocker to lose as little as possible - for (final Card b : block) { - final int dmgToKill = getEnoughDamageToKill(b, dmgCanDeal, attacker, true); + for (final Card b : opposedCombatants) { + final int dmgToKill = getEnoughDamageToKill(b, dmgCanDeal, combatant, true); if (dmgToKill > dmgCanDeal) { damageMap.put(b, dmgCanDeal); break; } } if (damageMap.isEmpty()) { - damageMap.put(ComputerUtilCard.getWorstCreatureAI(block), dmgCanDeal); + damageMap.put(ComputerUtilCard.getWorstCreatureAI(opposedCombatants), dmgCanDeal); } } return damageMap; From 7b8f69a022a2a617cf64755b15ca42e76c740d09 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Wed, 8 Oct 2025 17:58:08 +0000 Subject: [PATCH 325/355] Update ComputerUtilCombat.java --- forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java index 8d0e3a950b0..602d8a23f07 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java @@ -2051,9 +2051,8 @@ public class ComputerUtilCombat { if (combatant.isAttacking()) { opposedCombatants = AiBlockController.orderBlockers(combatant, new CardCollection(opposedCombatants)); } else { - opposedCombatants = AiBlockController.orderAttackers(combatant, new CardCollection(opposedCombatants)); + opposedCombatants = AiBlockController.orderAttackers(combatant, new CardCollection(opposedCombatants)); } - opposedCombatants = AiBlockController.orderBlockers(combatant, new CardCollection(opposedCombatants)); // assume sorted in case the legacy option is enabled } if (opposedCombatants.size() == 1) { From 87977e836dda9019473c5b55bb5edf95dcf8afb2 Mon Sep 17 00:00:00 2001 From: Eradev Date: Wed, 8 Oct 2025 14:42:42 -0400 Subject: [PATCH 326/355] Update PLS --- forge-gui/res/editions/Planeshift.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/forge-gui/res/editions/Planeshift.txt b/forge-gui/res/editions/Planeshift.txt index 2ab5d8d4ecc..c176514da90 100644 --- a/forge-gui/res/editions/Planeshift.txt +++ b/forge-gui/res/editions/Planeshift.txt @@ -5,11 +5,10 @@ Name=Planeshift Code2=PS Type=Expansion BoosterCovers=1 -Booster=11 Common, 3 Uncommon, 1 Rare, 0 Special +Booster=11 Common, 3 Uncommon, 1 Rare FatPack=6 Foil=OldStyle FoilAlwaysInCommonSlot=False -ScryfallCode=PLS [cards] 1 C Aura Blast @Ron Walotsky From bceb3c450314e7ca45035a483fabdf824427064c Mon Sep 17 00:00:00 2001 From: Eradev Date: Wed, 8 Oct 2025 14:44:47 -0400 Subject: [PATCH 327/355] Check every edition of a card instead of just the first one --- .../java/forge/item/PaperCardPredicates.java | 36 +++++++++++++++++++ .../src/forge/adventure/data/RewardData.java | 35 +++++++++--------- 2 files changed, 55 insertions(+), 16 deletions(-) diff --git a/forge-core/src/main/java/forge/item/PaperCardPredicates.java b/forge-core/src/main/java/forge/item/PaperCardPredicates.java index b685885baa1..ec7f67d600c 100644 --- a/forge-core/src/main/java/forge/item/PaperCardPredicates.java +++ b/forge-core/src/main/java/forge/item/PaperCardPredicates.java @@ -57,6 +57,42 @@ public abstract class PaperCardPredicates { return new PredicateFoil(isFoil); } + /** + * Filters cards that were printed in any of the specified editions. + */ + public static Predicate printedInAnyEditions(final String[] editionCodes) { + Set editions = new HashSet<>(Arrays.asList(editionCodes)); + + return card -> StaticData.instance().getCommonCards().getAllCards(card.getName()).stream() + .map(PaperCard::getEdition).anyMatch(editionCode -> + editions.contains(editionCode) && + StaticData.instance().getCardEdition(editionCode).isCardObtainable(card.getName()) + ); + } + + /** + * Filters cards that only printed in any of the specified editions. + */ + public static Predicate onlyPrintedInEditions(final String[] editionCodes) { + Set editions = new HashSet<>(Arrays.asList(editionCodes)); + + return card -> StaticData.instance().getCommonCards().getAllCards(card.getName()).stream() + .map(PaperCard::getEdition).allMatch(editionCode -> + editions.contains(editionCode) && + StaticData.instance().getCardEdition(editionCode).isCardObtainable(card.getName()) + ); + } + + /** + * Filters cards that are obtainable in any edition. + */ + public static Predicate isObtainableAnyEdition() { + return card -> StaticData.instance().getCommonCards().getAllCards(card.getName()).stream() + .map(PaperCard::getEdition).anyMatch(editionCode -> + StaticData.instance().getCardEdition(editionCode).isCardObtainable(card.getName()) + ); + } + private static final class PredicatePrintedWithRarity implements Predicate { private final CardRarity matchingRarity; diff --git a/forge-gui-mobile/src/forge/adventure/data/RewardData.java b/forge-gui-mobile/src/forge/adventure/data/RewardData.java index 28447db939f..6ae9bbe6bda 100644 --- a/forge-gui-mobile/src/forge/adventure/data/RewardData.java +++ b/forge-gui-mobile/src/forge/adventure/data/RewardData.java @@ -9,6 +9,7 @@ import forge.adventure.world.WorldSave; import forge.card.CardEdition; import forge.deck.Deck; import forge.item.PaperCard; +import forge.item.PaperCardPredicates; import forge.model.FModel; import forge.util.IterableUtil; import forge.util.StreamUtil; @@ -17,7 +18,6 @@ import java.io.Serializable; import java.util.*; import java.util.function.Predicate; - /** * Data class that will be used to read Json configuration files * BiomeData @@ -97,11 +97,23 @@ public class RewardData implements Serializable { ConfigData configData = Config.instance().getConfigData(); RewardData legals = configData.legalCards; - if(legals==null) - allCards = CardUtil.getFullCardPool(false); // we need unique cards only here, so that a unique card can be chosen before a set variant is determined - else - allCards = IterableUtil.filter(CardUtil.getFullCardPool(false), new CardUtil.CardPredicate(legals, true)); - //Filter out specific cards. + allCards = CardUtil.getFullCardPool(false); + + if(legals != null) + allCards = IterableUtil.filter(allCards, new CardUtil.CardPredicate(legals, true)); + + // Filter out by editions and obtainability + if (configData.allowedEditions != null && configData.allowedEditions.length > 0) { + allCards = IterableUtil.filter(allCards, PaperCardPredicates.printedInAnyEditions(configData.allowedEditions)); + } else if (configData.restrictedEditions != null && configData.restrictedEditions.length > 0) { + allCards = IterableUtil.filter(allCards, PaperCardPredicates.onlyPrintedInEditions(configData.restrictedEditions).negate()); + } else { + allCards = IterableUtil.filter(allCards, PaperCardPredicates.isObtainableAnyEdition()); + } + + Set restrictedCards = new HashSet<>(Arrays.asList(configData.restrictedCards)); + + // Filter out specific cards. allCards = IterableUtil.filter(allCards, input -> { if (input == null) return false; @@ -109,23 +121,14 @@ public class RewardData implements Serializable { return false; if (input.getRules().getAiHints().getRemNonCommanderDecks()) return false; - if (configData.allowedEditions != null) { - if (!Arrays.asList(configData.allowedEditions).contains(input.getEdition())) - return false; - } else if (Arrays.asList(configData.restrictedEditions).contains(input.getEdition())) - return false; - if (input.getRules().isCustom() && input.getImageKey(false).startsWith(ImageKeys.ADVENTURECARD_PREFIX)) { return false; } - return !Arrays.asList(configData.restrictedCards).contains(input.getName()); + return !restrictedCards.contains(input.getName()); }); - // Only allow obtainable cards - allCards = IterableUtil.filter(allCards, input -> StaticData.instance().getCardEdition(input.getEdition()).isCardObtainable(input.getCardName())); - //Filter AI cards for enemies. allEnemyCards = IterableUtil.filter(allCards, input -> { if (input == null) return false; From f3ecd512535bc93f75b1b5f21ed21794748b4446 Mon Sep 17 00:00:00 2001 From: Eradev Date: Wed, 8 Oct 2025 14:46:05 -0400 Subject: [PATCH 328/355] Minor cleanup --- .../main/java/forge/card/ICardDatabase.java | 2 -- .../util/AdventureEventController.java | 36 +++++++------------ .../Shandalar Old Border/config.json | 4 +-- 3 files changed, 13 insertions(+), 29 deletions(-) diff --git a/forge-core/src/main/java/forge/card/ICardDatabase.java b/forge-core/src/main/java/forge/card/ICardDatabase.java index 1f516664621..537d3499648 100644 --- a/forge-core/src/main/java/forge/card/ICardDatabase.java +++ b/forge-core/src/main/java/forge/card/ICardDatabase.java @@ -75,8 +75,6 @@ public interface ICardDatabase extends Iterable { PaperCard getCardFromEditionsReleasedAfter(String cardName, CardArtPreference artPreference, int artIndex, Date releaseDate); PaperCard getCardFromEditionsReleasedAfter(String cardName, CardArtPreference artPreference, int artIndex, Date releaseDate, Predicate filter); - - /* CARDS COLLECTION RETRIEVAL METHODS * ================================== */ Collection getAllCards(); diff --git a/forge-gui-mobile/src/forge/adventure/util/AdventureEventController.java b/forge-gui-mobile/src/forge/adventure/util/AdventureEventController.java index 128ee1a92df..ed1fce30831 100644 --- a/forge-gui-mobile/src/forge/adventure/util/AdventureEventController.java +++ b/forge-gui-mobile/src/forge/adventure/util/AdventureEventController.java @@ -1,6 +1,5 @@ package forge.adventure.util; -import com.badlogic.gdx.utils.Array; import forge.StaticData; import forge.adventure.data.AdventureEventData; import forge.adventure.player.AdventurePlayer; @@ -21,11 +20,9 @@ import java.time.LocalDate; import java.util.*; public class AdventureEventController implements Serializable { - public void finalizeEvent(AdventureEventData completedEvent) { Current.player().getStatistic().setResult(completedEvent); Current.player().removeEvent(completedEvent); - } public enum EventFormat { @@ -42,13 +39,13 @@ public class AdventureEventController implements Serializable { } public enum EventStatus { - Available, //New event - Entered, //Entry fee paid, deck not locked in - Ready, //Deck is registered but can still be edited - Started, //Matches available - Completed, //All matches complete, rewards pending - Awarded, //Rewards distributed - Abandoned //Ended without completing all matches + Available, // New event + Entered, // Entry fee paid, deck not locked in + Ready, // Deck is registered but can still be edited + Started, // Matches available + Completed, // All matches complete, rewards pending + Awarded, // Rewards distributed + Abandoned // Ended without completing all matches } private static AdventureEventController object; @@ -64,16 +61,7 @@ public class AdventureEventController implements Serializable { } - private transient Array allEvents = new Array<>(); - private Map nextEventDate = new HashMap<>(); - - public AdventureEventController(AdventureEventController other) { - if (object == null) { - object = this; - } else { - System.out.println("Could not initialize AdventureEventController. An instance already exists and cannot be merged."); - } - } + private final Map nextEventDate = new HashMap<>(); public static void clear() { object = null; @@ -81,7 +69,7 @@ public class AdventureEventController implements Serializable { public AdventureEventData createEvent(EventStyle style, String pointID, int eventOrigin, PointOfInterestChanges changes) { if (nextEventDate.containsKey(pointID) && nextEventDate.get(pointID) >= LocalDate.now().toEpochDay()) { - //No event currently available here + // No event currently available here return null; } @@ -100,7 +88,7 @@ public class AdventureEventController implements Serializable { AdventureEventData e; - // After a certain amount of wins, stop offering jump start events + // After a certain number of wins, stop offering Jumpstart events if (Current.player().getStatistic().totalWins() < 10 && random.nextInt(10) <= 2) { e = new AdventureEventData(eventSeed, EventFormat.Jumpstart); @@ -168,8 +156,8 @@ public class AdventureEventController implements Serializable { } public List getJumpstartBoosters(CardBlock block, int count) { - //Get all candidates then remove at random until no more than count are included - //This will prevent duplicate choices within a round of a Jumpstart draft + // Get all candidates, then remove at random until no more than count are included + // This will prevent duplicate choices within a round of a Jumpstart draft List packsAsDecks = new ArrayList<>(); for (SealedTemplate template : StaticData.instance().getSpecialBoosters()) { if (!template.getEdition().contains(block.getLandSet().getCode())) diff --git a/forge-gui/res/adventure/Shandalar Old Border/config.json b/forge-gui/res/adventure/Shandalar Old Border/config.json index 5821f361163..541274739f7 100644 --- a/forge-gui/res/adventure/Shandalar Old Border/config.json +++ b/forge-gui/res/adventure/Shandalar Old Border/config.json @@ -70,9 +70,7 @@ "Underground Sea", "Volcanic Island" ], - "restrictedEditions": [ - - ], + "restrictedEditions": [], "allowedEditions": [ "LEA", "LEB", From 1962a8d28b1c6c805f45896a4638876fd829237e Mon Sep 17 00:00:00 2001 From: Eradev Date: Wed, 8 Oct 2025 14:52:46 -0400 Subject: [PATCH 329/355] Fix typo --- forge-gui-mobile/src/forge/adventure/scene/SpellSmithScene.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui-mobile/src/forge/adventure/scene/SpellSmithScene.java b/forge-gui-mobile/src/forge/adventure/scene/SpellSmithScene.java index 31d77f9e2dd..690d7cbc271 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/SpellSmithScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/SpellSmithScene.java @@ -401,7 +401,7 @@ public class SpellSmithScene extends UIScene { if (cost_low > -1) totalCost *= 2.5f; //And CMC cost multiplier. cardPool = StreamUtil.stream(P).collect(Collectors.toList()); - poolSize.setText(((cardPool.size() > 0 ? "[/][FOREST]" : "[/][RED]")) + cardPool.size() + " possible card" + (cardPool.size() != 1 ? "s" : "")); + poolSize.setText(((cardPool.size() > 0 ? "[/][FOREST]" : "[/][RED]")) + cardPool.size() + " possible card" + (cardPool.size() > 1 ? "s" : "")); currentPrice = (int) totalCost; currentShardPrice = (int) (totalCost * 0.2f); //Intentionally rounding up via the cast to int pullUsingGold.setText("[+Pull][+goldcoin] "+ currentPrice); From f8d883d91ff6fe770b97d4b7477eafd6aa1a9121 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Thu, 9 Oct 2025 15:03:45 +0200 Subject: [PATCH 330/355] ColorSet: turn Set into an Enum (#8757) --- .../main/java/forge/ai/ComputerUtilMana.java | 11 +- .../java/forge/ai/PlayerControllerAi.java | 6 +- .../src/main/java/forge/card/ColorSet.java | 209 ++++++------------ .../src/main/java/forge/item/PaperCard.java | 2 +- .../java/forge/item/PaperCardPredicates.java | 28 +-- .../src/main/java/forge/game/ForgeScript.java | 2 +- .../ability/effects/ChangeTextEffect.java | 4 +- .../game/ability/effects/ManaEffect.java | 2 +- .../game/ability/effects/ProtectEffect.java | 4 +- .../ability/effects/ReplaceManaEffect.java | 4 +- .../src/main/java/forge/game/card/Card.java | 2 +- .../forge/game/player/AchievementTracker.java | 2 +- .../game/spellability/AbilityManaPart.java | 7 +- .../StaticAbilityContinuous.java | 23 +- .../src/main/java/forge/game/zone/Zone.java | 2 +- .../java/forge/trackable/TrackableTypes.java | 2 +- .../itemmanager/views/ColorSetRenderer.java | 2 +- .../screens/match/VAssignGenericAmount.java | 18 +- .../util/PlayerControllerForTests.java | 4 +- .../adventure/player/AdventurePlayer.java | 6 +- .../src/forge/adventure/util/CardUtil.java | 3 +- .../match/views/VAssignGenericAmount.java | 22 +- .../gamemodes/match/input/InputPayMana.java | 2 +- .../planarconquest/ConquestRegion.java | 2 +- .../forge/gamemodes/quest/BoosterUtils.java | 2 +- .../java/forge/itemmanager/ColumnDef.java | 6 +- .../java/forge/itemmanager/SFilterUtil.java | 2 +- .../forge/player/PlayerControllerHuman.java | 13 +- 28 files changed, 138 insertions(+), 254 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java b/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java index dad9e7a2f4e..60af06cc6ba 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java @@ -710,9 +710,9 @@ public class ComputerUtilMana { if (hasConverge && (toPay == ManaCostShard.GENERIC || toPay == ManaCostShard.X)) { final int unpaidColors = cost.getUnpaidColors() + cost.getColorsPaid() ^ ManaCostShard.COLORS_SUPERPOSITION; - for (final byte b : ColorSet.fromMask(unpaidColors)) { + for (final MagicColor.Color b : ColorSet.fromMask(unpaidColors)) { // try and pay other colors for converge - final ManaCostShard shard = ManaCostShard.valueOf(b); + final ManaCostShard shard = ManaCostShard.valueOf(b.getColorMask()); saList = sourcesForShards.get(shard); if (saList != null && !saList.isEmpty()) { toPay = shard; @@ -896,7 +896,8 @@ public class ComputerUtilMana { if (hasConverge) { // add extra colors for paying converge final int unpaidColors = cost.getUnpaidColors() + cost.getColorsPaid() ^ ManaCostShard.COLORS_SUPERPOSITION; - for (final byte b : ColorSet.fromMask(unpaidColors)) { + for (final MagicColor.Color color : ColorSet.fromMask(unpaidColors)) { + final byte b = color.getColorMask(); final ManaCostShard shard = ManaCostShard.valueOf(b); if (!sourcesForShards.containsKey(shard)) { if (ai.getManaPool().canPayForShardWithColor(shard, b)) { @@ -923,7 +924,7 @@ public class ComputerUtilMana { ColorSet shared = ColorSet.fromMask(toPay.getColorMask()).getSharedColors(ColorSet.fromNames(m.getComboColors(saPayment).split(" "))); // but other effects might still lead to a more permissive payment if (!shared.isColorless()) { - m.setExpressChoice(ColorSet.fromMask(shared.iterator().next())); + m.setExpressChoice(shared.iterator().next().getShortName()); } getComboManaChoice(ai, saPayment, sa, cost); } @@ -1098,7 +1099,7 @@ public class ComputerUtilMana { // * pay hybrids // * pay phyrexian, keep mana for colorless // * pay generic - return cost.getShardToPayByPriority(shardsToPay, ColorSet.ALL_COLORS.getColor()); + return cost.getShardToPayByPriority(shardsToPay, ColorSet.WUBRG.getColor()); } private static void adjustManaCostToAvoidNegEffects(ManaCostBeingPaid cost, final Card card, Player ai) { diff --git a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java index 81bc75db880..05f92ee72f2 100644 --- a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java +++ b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java @@ -1028,13 +1028,13 @@ public class PlayerControllerAi extends PlayerController { if ((colors.getColor() & chosenColorMask) != 0) { return chosenColorMask; } - return Iterables.getFirst(colors, (byte)0); + return Iterables.getFirst(colors, MagicColor.Color.COLORLESS).getColorMask(); } @Override public byte chooseColor(String message, SpellAbility sa, ColorSet colors) { if (colors.countColors() < 2) { - return Iterables.getFirst(colors, MagicColor.WHITE); + return Iterables.getFirst(colors, MagicColor.Color.WHITE).getColorMask(); } // You may switch on sa.getApi() here and use sa.getParam("AILogic") CardCollectionView hand = player.getCardsIn(ZoneType.Hand); @@ -1047,7 +1047,7 @@ public class PlayerControllerAi extends PlayerController { if ((colors.getColor() & chosenColorMask) != 0) { return chosenColorMask; } - return Iterables.getFirst(colors, MagicColor.WHITE); + return Iterables.getFirst(colors, MagicColor.Color.WHITE).getColorMask(); } @Override diff --git a/forge-core/src/main/java/forge/card/ColorSet.java b/forge-core/src/main/java/forge/card/ColorSet.java index 74c67321d24..e4b3fe19a5f 100644 --- a/forge-core/src/main/java/forge/card/ColorSet.java +++ b/forge-core/src/main/java/forge/card/ColorSet.java @@ -17,14 +17,12 @@ */ package forge.card; -import com.google.common.collect.UnmodifiableIterator; import forge.card.MagicColor.Color; import forge.card.mana.ManaCost; import forge.util.BinaryUtil; import java.io.Serializable; import java.util.*; -import java.util.stream.Collectors; import java.util.stream.Stream; /** @@ -37,90 +35,56 @@ import java.util.stream.Stream; * * */ -public final class ColorSet implements Comparable, Iterable, Serializable { +public enum ColorSet implements Iterable, Serializable { + + C(Color.COLORLESS), + W(Color.WHITE), + U(Color.BLUE), + WU(Color.WHITE, Color.BLUE), + B(Color.BLACK), + WB(Color.WHITE, Color.BLACK), + UB(Color.BLUE, Color.BLACK), + WUB(Color.WHITE, Color.BLUE, Color.BLACK), + R(Color.RED), + RW(Color.RED, Color.WHITE), + UR(Color.BLUE, Color.RED), + URW(Color.BLUE, Color.RED, Color.WHITE), + BR(Color.BLACK, Color.RED), + RWB(Color.RED, Color.WHITE, Color.BLACK), + UBR(Color.BLUE, Color.BLACK, Color.RED), + WUBR(Color.WHITE, Color.BLUE, Color.BLACK, Color.RED), + G(Color.GREEN), + GW(Color.GREEN, Color.WHITE), + GU(Color.GREEN, Color.BLUE), + GWU(Color.GREEN, Color.WHITE, Color.BLUE), + BG(Color.BLACK, Color.GREEN), + WBG(Color.WHITE, Color.BLACK, Color.GREEN), + BGU(Color.BLACK, Color.GREEN, Color.BLUE), + GWUB(Color.GREEN, Color.WHITE, Color.BLUE, Color.BLACK), + RG(Color.RED, Color.GREEN), + RGW(Color.RED, Color.GREEN, Color.WHITE), + GUR(Color.GREEN, Color.BLUE, Color.RED), + RGWU(Color.RED, Color.GREEN, Color.WHITE, Color.BLUE), + BRG(Color.BLACK, Color.RED, Color.GREEN), + BRGW(Color.BLACK, Color.RED, Color.GREEN, Color.WHITE), + UBRG(Color.BLUE, Color.BLACK, Color.RED, Color.GREEN), + WUBRG(Color.WHITE, Color.BLUE, Color.BLACK, Color.RED, Color.GREEN) + ; + private static final long serialVersionUID = 794691267379929080L; - // needs to be before other static - private static final ColorSet[] cache = new ColorSet[MagicColor.ALL_COLORS + 1]; - static { - byte COLORLESS = MagicColor.COLORLESS; - byte WHITE = MagicColor.WHITE; - byte BLUE = MagicColor.BLUE; - byte BLACK = MagicColor.BLACK; - byte RED = MagicColor.RED; - byte GREEN = MagicColor.GREEN; - Color C = Color.COLORLESS; - Color W = Color.WHITE; - Color U = Color.BLUE; - Color B = Color.BLACK; - Color R = Color.RED; - Color G = Color.GREEN; - - //colorless - cache[COLORLESS] = new ColorSet(C); - - //mono-color - cache[WHITE] = new ColorSet(W); - cache[BLUE] = new ColorSet(U); - cache[BLACK] = new ColorSet(B); - cache[RED] = new ColorSet(R); - cache[GREEN] = new ColorSet(G); - - //two-color - cache[WHITE | BLUE] = new ColorSet(W, U); - cache[WHITE | BLACK] = new ColorSet(W, B); - cache[BLUE | BLACK] = new ColorSet(U, B); - cache[BLUE | RED] = new ColorSet(U, R); - cache[BLACK | RED] = new ColorSet(B, R); - cache[BLACK | GREEN] = new ColorSet(B, G); - cache[RED | GREEN] = new ColorSet(R, G); - cache[RED | WHITE] = new ColorSet(R, W); - cache[GREEN | WHITE] = new ColorSet(G, W); - cache[GREEN | BLUE] = new ColorSet(G, U); - - //three-color - cache[WHITE | BLUE | BLACK] = new ColorSet(W, U, B); - cache[WHITE | BLACK | GREEN] = new ColorSet(W, B, G); - cache[BLUE | BLACK | RED] = new ColorSet(U, B, R); - cache[BLUE | RED | WHITE] = new ColorSet(U, R, W); - cache[BLACK | RED | GREEN] = new ColorSet(B, R, G); - cache[BLACK | GREEN | BLUE] = new ColorSet(B, G, U); - cache[RED | GREEN | WHITE] = new ColorSet(R, G, W); - cache[RED | WHITE | BLACK] = new ColorSet(R, W, B); - cache[GREEN | WHITE | BLUE] = new ColorSet(G, W, U); - cache[GREEN | BLUE | RED] = new ColorSet(G, U, R); - - //four-color - cache[WHITE | BLUE | BLACK | RED] = new ColorSet(W, U, B, R); - cache[BLUE | BLACK | RED | GREEN] = new ColorSet(U, B, R, G); - cache[BLACK | RED | GREEN | WHITE] = new ColorSet(B, R, G, W); - cache[RED | GREEN | WHITE | BLUE] = new ColorSet(R, G, W, U); - cache[GREEN | WHITE | BLUE | BLACK] = new ColorSet(G, W, U, B); - - //five-color - cache[WHITE | BLUE | BLACK | RED | GREEN] = new ColorSet(W, U, B, R, G); - } private final Collection orderedShards; - private final byte myColor; private final float orderWeight; - private final Set enumSet; - private final String desc; - - public static final ColorSet ALL_COLORS = fromMask(MagicColor.ALL_COLORS); - public static final ColorSet NO_COLORS = fromMask(MagicColor.COLORLESS); private ColorSet(final Color... ordered) { this.orderedShards = Arrays.asList(ordered); - this.myColor = orderedShards.stream().map(Color::getColorMask).reduce((byte)0, (a, b) -> (byte)(a | b)); - this.orderWeight = this.getOrderWeight(); - this.enumSet = EnumSet.copyOf(orderedShards); - this.desc = orderedShards.stream().map(Color::getShortName).collect(Collectors.joining()); + this.orderWeight = this.calcOrderWeight(); } public static ColorSet fromMask(final int mask) { final int mask32 = mask & MagicColor.ALL_COLORS; - return cache[mask32]; + return values()[mask32]; } public static ColorSet fromEnums(final Color... colors) { @@ -167,7 +131,10 @@ public final class ColorSet implements Comparable, Iterable, Ser * @return true, if successful */ public boolean hasAnyColor(final int colormask) { - return (this.myColor & colormask) != 0; + return (this.ordinal() & colormask) != 0; + } + public boolean hasAnyColor(final Color c) { + return this.orderedShards.contains(c); } /** @@ -178,12 +145,12 @@ public final class ColorSet implements Comparable, Iterable, Ser * @return true, if successful */ public boolean hasAllColors(final int colormask) { - return (this.myColor & colormask) == colormask; + return (this.ordinal() & colormask) == colormask; } /** this has exactly the colors defined by operand. */ public boolean hasExactlyColor(final int colormask) { - return this.myColor == colormask; + return this.ordinal() == colormask; } /** this has no other colors except defined by operand. */ @@ -193,17 +160,17 @@ public final class ColorSet implements Comparable, Iterable, Ser /** this has no other colors except defined by operand. */ public boolean hasNoColorsExcept(final int colormask) { - return (this.myColor & ~colormask) == 0; + return (this.ordinal() & ~colormask) == 0; } /** This returns the colors that colormask contains that are not in color */ public ColorSet getMissingColors(final byte colormask) { - return fromMask(this.myColor & ~colormask); + return fromMask(this.ordinal() & ~colormask); } /** Operand has no other colors except defined by this. */ public boolean containsAllColorsFrom(final int colorProfile) { - return (~this.myColor & colorProfile) == 0; + return (~this.ordinal() & colorProfile) == 0; } /** @@ -212,7 +179,7 @@ public final class ColorSet implements Comparable, Iterable, Ser * @return the int */ public int countColors() { - return BinaryUtil.bitCount(this.myColor); + return BinaryUtil.bitCount(this.ordinal()); } // bit count // order has to be: W U B R G multi colorless - same as cards numbering @@ -222,7 +189,7 @@ public final class ColorSet implements Comparable, Iterable, Ser * * @return the order weight */ - private float getOrderWeight() { + private float calcOrderWeight() { float res = this.countColors(); if (hasWhite()) { res += 0.0005f; @@ -241,6 +208,10 @@ public final class ColorSet implements Comparable, Iterable, Ser } return res; } + public float getOrderWeight() + { + return orderWeight; + } /** * Checks if is colorless. @@ -248,7 +219,7 @@ public final class ColorSet implements Comparable, Iterable, Ser * @return true, if is colorless */ public boolean isColorless() { - return this.myColor == 0; + return this == C; } /** @@ -266,7 +237,7 @@ public final class ColorSet implements Comparable, Iterable, Ser * @return true, if is all colors */ public boolean isAllColors() { - return this == ALL_COLORS; + return this == WUBRG; } /** @@ -286,17 +257,7 @@ public final class ColorSet implements Comparable, Iterable, Ser * @return true, if is equal */ public boolean isEqual(final byte color) { - return color == this.myColor; - } - - /* - * (non-Javadoc) - * - * @see java.lang.Comparable#compareTo(java.lang.Object) - */ - @Override - public int compareTo(final ColorSet other) { - return Float.compare(this.orderWeight, other.orderWeight); + return color == this.ordinal(); } // Presets @@ -346,23 +307,13 @@ public final class ColorSet implements Comparable, Iterable, Ser } public ColorSet inverse() { - byte mask = this.myColor; + byte mask = (byte)this.ordinal(); mask ^= MagicColor.ALL_COLORS; return fromMask(mask); } public byte getColor() { - return myColor; - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return desc; + return (byte)ordinal(); } /** @@ -372,7 +323,7 @@ public final class ColorSet implements Comparable, Iterable, Ser * @return true, if successful */ public boolean sharesColorWith(final ColorSet ccOther) { - return (this.myColor & ccOther.myColor) != 0; + return (this.ordinal() & ccOther.ordinal()) != 0; } public ColorSet getSharedColors(final ColorSet ccOther) { @@ -380,50 +331,20 @@ public final class ColorSet implements Comparable, Iterable, Ser } public ColorSet getOffColors(final ColorSet ccOther) { - return fromMask(~this.myColor & ccOther.myColor); + return fromMask(~this.ordinal() & ccOther.ordinal()); } public Set toEnumSet() { - return EnumSet.copyOf(enumSet); + return EnumSet.copyOf(orderedShards); } - @Override - public Iterator iterator() { - return new ColorIterator(); - } - - private class ColorIterator extends UnmodifiableIterator { - int currentBit = -1; - - private int getIndexOfNextColor(){ - int nextBit = currentBit + 1; - while (nextBit < MagicColor.NUMBER_OR_COLORS) { - if ((myColor & MagicColor.WUBRG[nextBit]) != 0) { - break; - } - nextBit++; - } - return nextBit; - } - - @Override - public boolean hasNext() { - return getIndexOfNextColor() < MagicColor.NUMBER_OR_COLORS; - } - - @Override - public Byte next() { - currentBit = getIndexOfNextColor(); - if (currentBit >= MagicColor.NUMBER_OR_COLORS) { - throw new NoSuchElementException(); - } - - return MagicColor.WUBRG[currentBit]; - } + //@Override + public Iterator iterator() { + return this.orderedShards.iterator(); } public Stream stream() { - return this.toEnumSet().stream(); + return this.orderedShards.stream(); } //Get array of mana cost shards for color set in the proper order diff --git a/forge-core/src/main/java/forge/item/PaperCard.java b/forge-core/src/main/java/forge/item/PaperCard.java index 6d693af47b3..63e5642ba3e 100644 --- a/forge-core/src/main/java/forge/item/PaperCard.java +++ b/forge-core/src/main/java/forge/item/PaperCard.java @@ -593,7 +593,7 @@ public class PaperCard implements Comparable, InventoryItemFromSet, public PaperCardFlags withMarkedColors(ColorSet markedColors) { if(markedColors == null) - markedColors = ColorSet.NO_COLORS; + markedColors = ColorSet.C; return new PaperCardFlags(this, markedColors, null); } diff --git a/forge-core/src/main/java/forge/item/PaperCardPredicates.java b/forge-core/src/main/java/forge/item/PaperCardPredicates.java index ec7f67d600c..449d191b9c6 100644 --- a/forge-core/src/main/java/forge/item/PaperCardPredicates.java +++ b/forge-core/src/main/java/forge/item/PaperCardPredicates.java @@ -112,25 +112,19 @@ public abstract class PaperCardPredicates { } private static final class PredicateColor implements Predicate { - private final byte operand; + private final MagicColor.Color operand; - private PredicateColor(final byte color) { + private PredicateColor(final MagicColor.Color color) { this.operand = color; } @Override public boolean test(final PaperCard card) { - for (final byte color : card.getRules().getColor()) { - if (color == operand) { - return true; - } + if (card.getRules().getColor().hasAnyColor(operand)) { + return true; } - if (card.getRules().getType().hasType(CardType.CoreType.Land)) { - for (final byte color : card.getRules().getColorIdentity()) { - if (color == operand) { - return true; - } - } + if (card.getRules().getType().hasType(CardType.CoreType.Land) && card.getRules().getColorIdentity().hasAnyColor(operand)) { + return true; } return false; } @@ -235,11 +229,11 @@ public abstract class PaperCardPredicates { public static final Predicate IS_RARE_OR_MYTHIC = PaperCardPredicates.IS_RARE.or(PaperCardPredicates.IS_MYTHIC_RARE); public static final Predicate IS_SPECIAL = new PredicateRarity(CardRarity.Special); public static final Predicate IS_BASIC_LAND_RARITY = new PredicateRarity(CardRarity.BasicLand); - public static final Predicate IS_BLACK = new PredicateColor(MagicColor.BLACK); - public static final Predicate IS_BLUE = new PredicateColor(MagicColor.BLUE); - public static final Predicate IS_GREEN = new PredicateColor(MagicColor.GREEN); - public static final Predicate IS_RED = new PredicateColor(MagicColor.RED); - public static final Predicate IS_WHITE = new PredicateColor(MagicColor.WHITE); + public static final Predicate IS_BLACK = new PredicateColor(MagicColor.Color.BLACK); + public static final Predicate IS_BLUE = new PredicateColor(MagicColor.Color.BLUE); + public static final Predicate IS_GREEN = new PredicateColor(MagicColor.Color.GREEN); + public static final Predicate IS_RED = new PredicateColor(MagicColor.Color.RED); + public static final Predicate IS_WHITE = new PredicateColor(MagicColor.Color.WHITE); public static final Predicate IS_COLORLESS = paperCard -> paperCard.getRules().getColor().isColorless(); public static final Predicate IS_UNREBALANCED = PaperCard::isUnRebalanced; public static final Predicate IS_REBALANCED = PaperCard::isRebalanced; diff --git a/forge-game/src/main/java/forge/game/ForgeScript.java b/forge-game/src/main/java/forge/game/ForgeScript.java index 9c462d9e22c..cf7a461f92b 100644 --- a/forge-game/src/main/java/forge/game/ForgeScript.java +++ b/forge-game/src/main/java/forge/game/ForgeScript.java @@ -35,7 +35,7 @@ public class ForgeScript { boolean withSource = property.endsWith("Source"); final ColorSet colors; if (withSource && StaticAbilityColorlessDamageSource.colorlessDamageSource(cardState)) { - colors = ColorSet.NO_COLORS; + colors = ColorSet.C; } else { colors = cardState.getCard().getColor(cardState); } diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeTextEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeTextEffect.java index b425d41a6f8..74308bc66c7 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeTextEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeTextEffect.java @@ -34,7 +34,7 @@ public class ChangeTextEffect extends SpellAbilityEffect { final String[] changedColorWordsArray = sa.getParam("ChangeColorWord").split(" "); if (changedColorWordsArray[0].equals("Choose")) { originalColor = sa.getActivatingPlayer().getController().chooseColor( - Localizer.getInstance().getMessage("lblChooseColorReplace"), sa, ColorSet.ALL_COLORS); + Localizer.getInstance().getMessage("lblChooseColorReplace"), sa, ColorSet.WUBRG); changedColorWordOriginal = TextUtil.capitalize(MagicColor.toLongString(originalColor)); } else { changedColorWordOriginal = changedColorWordsArray[0]; @@ -44,7 +44,7 @@ public class ChangeTextEffect extends SpellAbilityEffect { if (changedColorWordsArray[1].equals("Choose")) { final ColorSet possibleNewColors; if (originalColor == 0) { // no original color (ie. any or absent) - possibleNewColors = ColorSet.ALL_COLORS; + possibleNewColors = ColorSet.WUBRG; } else { // may choose any except original color possibleNewColors = ColorSet.fromMask(originalColor).inverse(); } diff --git a/forge-game/src/main/java/forge/game/ability/effects/ManaEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ManaEffect.java index 00092734f13..b21b252e4cb 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ManaEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ManaEffect.java @@ -156,7 +156,7 @@ public class ManaEffect extends SpellAbilityEffect { for (int nChar = 0; nChar < colorsNeeded.length(); nChar++) { mask |= MagicColor.fromName(colorsNeeded.charAt(nChar)); } - colorMenu = mask == 0 ? ColorSet.ALL_COLORS : ColorSet.fromMask(mask); + colorMenu = mask == 0 ? ColorSet.WUBRG : ColorSet.fromMask(mask); byte val = chooser.getController().chooseColor(Localizer.getInstance().getMessage("lblSelectManaProduce"), sa, colorMenu); if (0 == val) { throw new RuntimeException("ManaEffect::resolve() /*any mana*/ - " + p + " color mana choice is empty for " + card.getName()); diff --git a/forge-game/src/main/java/forge/game/ability/effects/ProtectEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ProtectEffect.java index 278080894a4..bbcab86846e 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ProtectEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ProtectEffect.java @@ -124,8 +124,8 @@ public class ProtectEffect extends SpellAbilityEffect { } } else if (sa.getParam("Gains").startsWith("Defined")) { CardCollection def = AbilityUtils.getDefinedCards(host, sa.getParam("Gains").substring(8), sa); - for (final Byte color : def.get(0).getColor()) { - gains.add(MagicColor.toLongString(color)); + for (final MagicColor.Color color : def.get(0).getColor()) { + gains.add(color.getName()); } } else { gains.addAll(choices); diff --git a/forge-game/src/main/java/forge/game/ability/effects/ReplaceManaEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ReplaceManaEffect.java index 70ff51e0829..f754eedb5ad 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ReplaceManaEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ReplaceManaEffect.java @@ -34,14 +34,14 @@ public class ReplaceManaEffect extends SpellAbilityEffect { // replace type and amount replaced = sa.getParam("ReplaceMana"); if ("Any".equals(replaced)) { - byte rs = player.getController().chooseColor("Choose a color", sa, ColorSet.ALL_COLORS); + byte rs = player.getController().chooseColor("Choose a color", sa, ColorSet.WUBRG); replaced = MagicColor.toShortString(rs); } } else if (sa.hasParam("ReplaceType")) { // replace color and colorless String color = sa.getParam("ReplaceType"); if ("Any".equals(color)) { - byte rs = player.getController().chooseColor("Choose a color", sa, ColorSet.ALL_COLORS); + byte rs = player.getController().chooseColor("Choose a color", sa, ColorSet.WUBRG); color = MagicColor.toShortString(rs); } else { // convert in case Color Word used diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index d5ea3aaf3e5..b9cc50ede98 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -2271,7 +2271,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr public final ColorSet getMarkedColors() { if (markedColor == null) { - return ColorSet.NO_COLORS; + return ColorSet.C; } return markedColor; } diff --git a/forge-game/src/main/java/forge/game/player/AchievementTracker.java b/forge-game/src/main/java/forge/game/player/AchievementTracker.java index a597642ff08..457c75451a0 100644 --- a/forge-game/src/main/java/forge/game/player/AchievementTracker.java +++ b/forge-game/src/main/java/forge/game/player/AchievementTracker.java @@ -27,7 +27,7 @@ public class AchievementTracker { activatedNonPWUltimates.add(card.getName()); } } - if (card.getColor().equals(ColorSet.ALL_COLORS)) { + if (card.getColor().equals(ColorSet.WUBRG)) { challengesCompleted.add("Chromatic"); } } diff --git a/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java b/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java index 005fed45f76..fd1b57c2969 100644 --- a/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java +++ b/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java @@ -17,7 +17,6 @@ */ package forge.game.spellability; -import com.google.common.collect.Iterators; import com.google.common.collect.Lists; import forge.card.ColorSet; import forge.card.GamePieceType; @@ -49,9 +48,9 @@ import forge.game.zone.ZoneType; import forge.util.TextUtil; import org.apache.commons.lang3.StringUtils; -import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** *

    @@ -658,8 +657,8 @@ public class AbilityManaPart implements java.io.Serializable { } // replace Chosen for Spire colors if (origProduced.contains("ColorID")) { - Iterator colors = Iterators.transform(sa.getHostCard().getMarkedColors().iterator(), MagicColor::toLongString); - origProduced = origProduced.replace("ColorID", getChosenColor(sa, () -> colors)); + String str = sa.getHostCard().getMarkedColors().stream().map(c -> c.getShortName()).collect(Collectors.joining(" ")); + origProduced = origProduced.replace("ColorID", str); } if (origProduced.contains("NotedColors")) { // Should only be used for Paliano, the High City diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java index 407e794ebd3..bd394802db2 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java @@ -207,12 +207,12 @@ public final class StaticAbilityContinuous { if (input.contains("CommanderColorID")) { if (!hostCard.getController().getCommanders().isEmpty()) { if (input.contains("NotCommanderColorID")) { - for (Byte color : hostCard.getController().getNotCommanderColorID()) { - newKeywords.add(input.replace("NotCommanderColorID", MagicColor.toLongString(color))); + for (MagicColor.Color color : hostCard.getController().getNotCommanderColorID()) { + newKeywords.add(input.replace("NotCommanderColorID", color.getName())); } return true; - } else for (Byte color : hostCard.getController().getCommanderColorID()) { - newKeywords.add(input.replace("CommanderColorID", MagicColor.toLongString(color))); + } else for (MagicColor.Color color : hostCard.getController().getCommanderColorID()) { + newKeywords.add(input.replace("CommanderColorID", color.getName())); } return true; } @@ -220,12 +220,9 @@ public final class StaticAbilityContinuous { } // two variants for Red vs. red in keyword if (input.contains("ColorsYouCtrl") || input.contains("colorsYouCtrl")) { - final ColorSet colorsYouCtrl = CardUtil.getColorsFromCards(controller.getCardsIn(ZoneType.Battlefield)); - - for (byte color : colorsYouCtrl) { - final String colorWord = MagicColor.toLongString(color); - String y = input.replaceAll("ColorsYouCtrl", StringUtils.capitalize(colorWord)); - y = y.replaceAll("colorsYouCtrl", colorWord); + for (MagicColor.Color color : CardUtil.getColorsFromCards(controller.getCardsIn(ZoneType.Battlefield))) { + String y = input.replaceAll("ColorsYouCtrl", StringUtils.capitalize(color.getName())); + y = y.replaceAll("colorsYouCtrl", color.getName()); newKeywords.add(y); } return true; @@ -709,8 +706,8 @@ public final class StaticAbilityContinuous { newKeywords.removeIf(input -> { // replace one Keyword with list of keywords if (input.startsWith("Protection") && input.contains("CardColors")) { - for (Byte color : affectedCard.getColor()) { - extraKeywords.add(input.replace("CardColors", MagicColor.toLongString(color))); + for (MagicColor.Color color : affectedCard.getColor()) { + extraKeywords.add(input.replace("CardColors", color.getName())); } return true; } @@ -924,7 +921,7 @@ public final class StaticAbilityContinuous { addColors = ColorSet.fromNames(hostCard.getChosenColors()); } } else if (colors.equals("All")) { - addColors = ColorSet.ALL_COLORS; + addColors = ColorSet.WUBRG; } else { addColors = ColorSet.fromNames(colors.split(" & ")); } diff --git a/forge-game/src/main/java/forge/game/zone/Zone.java b/forge-game/src/main/java/forge/game/zone/Zone.java index 6f2d4a53d03..5d57174a4db 100644 --- a/forge-game/src/main/java/forge/game/zone/Zone.java +++ b/forge-game/src/main/java/forge/game/zone/Zone.java @@ -54,7 +54,7 @@ public class Zone implements java.io.Serializable, Iterable { // might support different order via preference later private static final Comparator COMPARATOR = Comparator.comparingInt((Card c) -> c.getCMC()) - .thenComparing(c -> c.getColor()) + .thenComparing(c -> c.getColor().getOrderWeight()) .thenComparing(Comparator.comparing(Card::getName)) .thenComparing(Card::hasPerpetual); diff --git a/forge-game/src/main/java/forge/trackable/TrackableTypes.java b/forge-game/src/main/java/forge/trackable/TrackableTypes.java index 5c81f403365..fe2464d90bf 100644 --- a/forge-game/src/main/java/forge/trackable/TrackableTypes.java +++ b/forge-game/src/main/java/forge/trackable/TrackableTypes.java @@ -464,7 +464,7 @@ public class TrackableTypes { public static final TrackableType ColorSetType = new TrackableType() { @Override public ColorSet getDefaultValue() { - return ColorSet.NO_COLORS; + return ColorSet.C; } @Override diff --git a/forge-gui-desktop/src/main/java/forge/itemmanager/views/ColorSetRenderer.java b/forge-gui-desktop/src/main/java/forge/itemmanager/views/ColorSetRenderer.java index 68903a583d6..f449f6e8418 100644 --- a/forge-gui-desktop/src/main/java/forge/itemmanager/views/ColorSetRenderer.java +++ b/forge-gui-desktop/src/main/java/forge/itemmanager/views/ColorSetRenderer.java @@ -33,7 +33,7 @@ public class ColorSetRenderer extends ItemCellRenderer { this.cs = (ColorSet) value; } else { - this.cs = ColorSet.NO_COLORS; + this.cs = ColorSet.C; } this.setToolTipText(cs.toString()); return super.getTableCellRendererComponent(table, "", isSelected, hasFocus, row, column); diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/VAssignGenericAmount.java b/forge-gui-desktop/src/main/java/forge/screens/match/VAssignGenericAmount.java index 07f46812b09..379a6604456 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/VAssignGenericAmount.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/VAssignGenericAmount.java @@ -214,22 +214,8 @@ public class VAssignGenericAmount { pnlTargets.add(mp, "w 145px!, h 170px!, gap 5px 5px 3px 3px, ax center"); mp.addMouseListener(mad); targetsMap.put(mp, at); - } else if (at.entity instanceof Byte) { - SkinImage manaSymbol; - byte color = (Byte) at.entity; - if (color == MagicColor.WHITE) { - manaSymbol = FSkin.getImage(FSkinProp.IMG_MANA_W); - } else if (color == MagicColor.BLUE) { - manaSymbol = FSkin.getImage(FSkinProp.IMG_MANA_U); - } else if (color == MagicColor.BLACK) { - manaSymbol = FSkin.getImage(FSkinProp.IMG_MANA_B); - } else if (color == MagicColor.RED) { - manaSymbol = FSkin.getImage(FSkinProp.IMG_MANA_R); - } else if (color == MagicColor.GREEN) { - manaSymbol = FSkin.getImage(FSkinProp.IMG_MANA_G); - } else { // Should never come here, but add this to avoid compile error - manaSymbol = FSkin.getImage(FSkinProp.IMG_MANA_COLORLESS); - } + } else if (at.entity instanceof MagicColor.Color color) { + SkinImage manaSymbol = FSkin.getImage(FSkinProp.MANA_IMG.get(color.getShortName())); final MiscCardPanel mp = new MiscCardPanel(matchUI, "", manaSymbol); mp.setCardBounds(0, 0, 70, 70); pnlTargets.add(mp, "w 100px!, h 150px!, gap 5px 5px 3px 3px, ax center"); diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java index 958d18eb986..4d84a599a72 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java @@ -471,12 +471,12 @@ public class PlayerControllerForTests extends PlayerController { @Override public byte chooseColor(String message, SpellAbility sa, ColorSet colors) { - return Iterables.getFirst(colors, MagicColor.WHITE); + return Iterables.getFirst(colors, MagicColor.Color.WHITE).getColorMask(); } @Override public byte chooseColorAllowColorless(String message, Card card, ColorSet colors) { - return Iterables.getFirst(colors, (byte)0); + return Iterables.getFirst(colors, MagicColor.Color.COLORLESS).getColorMask(); } private CardCollection chooseItems(CardCollectionView items, int amount) { diff --git a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java index ebc4ae17e1a..450d98d328e 100644 --- a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java +++ b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java @@ -45,7 +45,7 @@ public class AdventurePlayer implements Serializable, SaveFileContent { private int heroRace; private int avatarIndex; private boolean isFemale; - private ColorSet colorIdentity = ColorSet.ALL_COLORS; + private ColorSet colorIdentity = ColorSet.WUBRG; // Deck data private Deck deck; @@ -396,9 +396,9 @@ public class AdventurePlayer implements Serializable, SaveFileContent { if (temp != null) setColorIdentity(temp); else - colorIdentity = ColorSet.ALL_COLORS; + colorIdentity = ColorSet.WUBRG; } else - colorIdentity = ColorSet.ALL_COLORS; + colorIdentity = ColorSet.WUBRG; gold = data.readInt("gold"); maxLife = data.readInt("maxLife"); diff --git a/forge-gui-mobile/src/forge/adventure/util/CardUtil.java b/forge-gui-mobile/src/forge/adventure/util/CardUtil.java index 3dbc5403951..7e551f2f407 100644 --- a/forge-gui-mobile/src/forge/adventure/util/CardUtil.java +++ b/forge-gui-mobile/src/forge/adventure/util/CardUtil.java @@ -250,8 +250,7 @@ public class CardUtil { this.colors = 0; for (String color : type.colors) { if ("colorID".equals(color)) - for (byte c : Current.player().getColorIdentity()) - colors |= c; + colors |= Current.player().getColorIdentity().getColor(); else colors |= MagicColor.fromName(color.toLowerCase()); } diff --git a/forge-gui-mobile/src/forge/screens/match/views/VAssignGenericAmount.java b/forge-gui-mobile/src/forge/screens/match/views/VAssignGenericAmount.java index bd0d7946e1b..1b92d31e27f 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VAssignGenericAmount.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VAssignGenericAmount.java @@ -37,7 +37,6 @@ import forge.card.CardZoom; import forge.card.MagicColor; import forge.game.card.CardView; import forge.game.player.PlayerView; -import forge.localinstance.skin.FSkinProp; import forge.screens.match.MatchController; import forge.toolbox.FCardPanel; import forge.toolbox.FContainer; @@ -165,25 +164,10 @@ public class VAssignGenericAmount extends FDialog { max = max0; if (entity instanceof CardView) { obj = add(new EffectSourcePanel((CardView)entity)); - } else if (entity instanceof PlayerView) { - PlayerView player = (PlayerView)entity; + } else if (entity instanceof PlayerView player) { obj = add(new MiscTargetPanel(player.getName(), MatchController.getPlayerAvatar(player), null)); - } else if (entity instanceof Byte) { - FSkinImageInterface manaSymbol; - byte color = (Byte) entity; - if (color == MagicColor.WHITE) { - manaSymbol = Forge.getAssets().images().get(FSkinProp.IMG_MANA_W); - } else if (color == MagicColor.BLUE) { - manaSymbol = Forge.getAssets().images().get(FSkinProp.IMG_MANA_U); - } else if (color == MagicColor.BLACK) { - manaSymbol = Forge.getAssets().images().get(FSkinProp.IMG_MANA_B); - } else if (color == MagicColor.RED) { - manaSymbol = Forge.getAssets().images().get(FSkinProp.IMG_MANA_R); - } else if (color == MagicColor.GREEN) { - manaSymbol = Forge.getAssets().images().get(FSkinProp.IMG_MANA_G); - } else { // Should never come here, but add this to avoid compile error - manaSymbol = Forge.getAssets().images().get(FSkinProp.IMG_MANA_COLORLESS); - } + } else if (entity instanceof MagicColor.Color color) { + FSkinImageInterface manaSymbol = Forge.getAssets().manaImages().get(color.getShortName()); obj = add(new MiscTargetPanel("", manaSymbol, entity)); } else { obj = add(new MiscTargetPanel(entity.toString(), FSkinImage.UNKNOWN, null)); diff --git a/forge-gui/src/main/java/forge/gamemodes/match/input/InputPayMana.java b/forge-gui/src/main/java/forge/gamemodes/match/input/InputPayMana.java index 6cb1739caa7..ece5b77ad90 100644 --- a/forge-gui/src/main/java/forge/gamemodes/match/input/InputPayMana.java +++ b/forge-gui/src/main/java/forge/gamemodes/match/input/InputPayMana.java @@ -276,7 +276,7 @@ public abstract class InputPayMana extends InputSyncronizedBase { // If the card has any ability that tracks mana spent, skip express Mana choice if (saPaidFor.tracksManaSpent()) { - colorCanUse = ColorSet.ALL_COLORS.getColor(); + colorCanUse = ColorSet.WUBRG.getColor(); guessAbilityWithRequiredColors = false; } diff --git a/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestRegion.java b/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestRegion.java index 36481c91475..bcab7af219c 100644 --- a/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestRegion.java +++ b/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestRegion.java @@ -105,7 +105,7 @@ public class ConquestRegion { protected ConquestRegion read(String line) { String name = null; String artCardName = null; - ColorSet colorSet = ColorSet.ALL_COLORS; + ColorSet colorSet = ColorSet.WUBRG; Predicate pred = x -> true; String key, value; diff --git a/forge-gui/src/main/java/forge/gamemodes/quest/BoosterUtils.java b/forge-gui/src/main/java/forge/gamemodes/quest/BoosterUtils.java index 5615effad3a..8ffe5316f36 100644 --- a/forge-gui/src/main/java/forge/gamemodes/quest/BoosterUtils.java +++ b/forge-gui/src/main/java/forge/gamemodes/quest/BoosterUtils.java @@ -560,7 +560,7 @@ public final class BoosterUtils { public static void sort(List cards) { //sort cards alphabetically so colors appear together and rares appear on top cards.sort(Comparator.comparing(PaperCard::getName)); - cards.sort(Comparator.comparing(c -> c.getRules().getColor())); + cards.sort(Comparator.comparing(c -> c.getRules().getColor().getOrderWeight())); cards.sort(Comparator.comparing(PaperCard::getRarity).reversed()); } } diff --git a/forge-gui/src/main/java/forge/itemmanager/ColumnDef.java b/forge-gui/src/main/java/forge/itemmanager/ColumnDef.java index 97af782408d..f5c2f080810 100644 --- a/forge-gui/src/main/java/forge/itemmanager/ColumnDef.java +++ b/forge-gui/src/main/java/forge/itemmanager/ColumnDef.java @@ -91,7 +91,7 @@ public enum ColumnDef { * The color column. */ COLOR("lblColor", "ttColor", 46, true, SortState.ASC, - from -> toColor(from.getKey()), + from -> toColor(from.getKey()).getOrderWeight(), from -> toColor(from.getKey())), /** * The power column. @@ -271,7 +271,7 @@ public enum ColumnDef { * The deck color column. */ DECK_COLOR("lblColor", "ttColor", 70, true, SortState.ASC, - from -> toDeckColor(from.getKey()), + from -> toDeckColor(from.getKey()).getOrderWeight(), from -> toDeckColor(from.getKey())), /** * The deck format column. @@ -377,7 +377,7 @@ public enum ColumnDef { } private static ColorSet toColor(final InventoryItem i) { - return i instanceof IPaperCard ? ((IPaperCard) i).getRules().getColor() : ColorSet.NO_COLORS; + return i instanceof IPaperCard ? ((IPaperCard) i).getRules().getColor() : ColorSet.C; } private static Integer toPower(final InventoryItem i) { diff --git a/forge-gui/src/main/java/forge/itemmanager/SFilterUtil.java b/forge-gui/src/main/java/forge/itemmanager/SFilterUtil.java index ad37ae9afc9..6e97592adf8 100644 --- a/forge-gui/src/main/java/forge/itemmanager/SFilterUtil.java +++ b/forge-gui/src/main/java/forge/itemmanager/SFilterUtil.java @@ -441,7 +441,7 @@ public class SFilterUtil { final byte colors = colors0; final boolean wantColorless = buttonMap.get(StatTypes.COLORLESS).isSelected(); final boolean wantMulticolor = buttonMap.get(StatTypes.MULTICOLOR).isSelected(); - final boolean wantAllColors = colors == ColorSet.ALL_COLORS.getColor(); + final boolean wantAllColors = colors == ColorSet.WUBRG.getColor(); //Use color identity instead of color for lands, unless all colors are filtered out anyway. final boolean filterLandsByCI = colors != 0 && FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_FILTER_LANDS_BY_COLOR_IDENTITY); diff --git a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java index 224927bd9ba..9c4ff34ed04 100644 --- a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java @@ -353,16 +353,19 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont final CardView vSource = CardView.get(sa.getHostCard()); final Map vAffected = new LinkedHashMap<>(manaAmount); Integer maxAmount = different ? 1 : manaAmount; - for (Byte color : colorSet) { + for (MagicColor.Color color : colorSet) { + if (color == MagicColor.Color.COLORLESS) { + continue; + } vAffected.put(color, maxAmount); } final Map vResult = getGui().assignGenericAmount(vSource, vAffected, manaAmount, false, localizer.getMessage("lblMana").toLowerCase()); Map result = new HashMap<>(); if (vResult != null) { //fix for netplay - for (Byte color : colorSet) { + for (MagicColor.Color color : colorSet) { if (vResult.containsKey(color)) { - result.put(color, vResult.get(color)); + result.put(color.getColorMask(), vResult.get(color)); } } } @@ -1868,8 +1871,8 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont if (withColorless) { colorNamesBuilder.add(MagicColor.toLongString(MagicColor.COLORLESS)); } - for (final Byte b : colors) { - colorNamesBuilder.add(MagicColor.toLongString(b)); + for (final MagicColor.Color color : colors) { + colorNamesBuilder.add(color.getName()); } final ImmutableList colorNames = colorNamesBuilder.build(); if (colorNames.size() > 2) { From 327d60ed84605637455c377fcdf2bb72bcd3395e Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Thu, 9 Oct 2025 17:39:26 +0200 Subject: [PATCH 331/355] Update doctor_octopus_master_planner.txt Closes #8879 --- forge-gui/res/cardsfolder/d/doctor_octopus_master_planner.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/d/doctor_octopus_master_planner.txt b/forge-gui/res/cardsfolder/d/doctor_octopus_master_planner.txt index f0d00a5ba67..a69eb46bb0e 100644 --- a/forge-gui/res/cardsfolder/d/doctor_octopus_master_planner.txt +++ b/forge-gui/res/cardsfolder/d/doctor_octopus_master_planner.txt @@ -2,7 +2,7 @@ Name:Doctor Octopus, Master Planner ManaCost:5 U B Types:Legendary Creature Human Scientist Villain PT:4/8 -S:Mode$ Continuous | Affected$ Villain.Other | AddPower$ 2 | AddToughness$ 2 | Description$ Other Villains you control get +2/+2. +S:Mode$ Continuous | Affected$ Villain.Other+YouCtrl | AddPower$ 2 | AddToughness$ 2 | Description$ Other Villains you control get +2/+2. S:Mode$ Continuous | Affected$ You | SetMaxHandSize$ 8 | Description$ Your maximum hand size is eight. T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | CheckSVar$ X | SVarCompare$ LT8 | Execute$ TrigDraw | TriggerDescription$ At the beginning of your end step, if you have fewer than eight cards in hand, draw cards equal to the difference. SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ Difference From 02c865765bbae766fafbca2abba4d7f6a1527b67 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Fri, 10 Oct 2025 11:26:40 +0200 Subject: [PATCH 332/355] Update DeckRecognizer.java remove call to getLocalisedMagicColorName --- forge-core/src/main/java/forge/deck/DeckRecognizer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-core/src/main/java/forge/deck/DeckRecognizer.java b/forge-core/src/main/java/forge/deck/DeckRecognizer.java index 1723a1942e4..f62da14d13d 100644 --- a/forge-core/src/main/java/forge/deck/DeckRecognizer.java +++ b/forge-core/src/main/java/forge/deck/DeckRecognizer.java @@ -993,7 +993,7 @@ public class DeckRecognizer { private static String getMagicColourLabel(MagicColor.Color magicColor) { if (magicColor == null) // Multicolour - return String.format("%s {W}{U}{B}{R}{G}", getLocalisedMagicColorName("Multicolour")); + return String.format("%s {W}{U}{B}{R}{G}", Localizer.getInstance().getMessage("lblMulticolor")); return String.format("%s %s", magicColor.getTranslatedName(), magicColor.getSymbol()); } From 8478d3ce47da8f4e0a1d904b359417afac4d90d6 Mon Sep 17 00:00:00 2001 From: Renato Filipe Vidal Santos <45150760+dracontes@users.noreply.github.com> Date: Sat, 11 Oct 2025 06:03:43 +0000 Subject: [PATCH 333/355] Adventure cleanup: 2025-10-10 (#8896) * Update skep_outer.tmx * Update skep_outer.tmx * Update skep_outer.tmx * Update quests.json * Update quests.json * Update quests.json * Update quests.json --- forge-gui/res/adventure/Crystal_Kingdoms/world/quests.json | 2 +- forge-gui/res/adventure/Innistrad/world/quests.json | 4 ++-- .../res/adventure/Shandalar Old Border/world/quests.json | 2 +- forge-gui/res/adventure/Shandalar/world/quests.json | 2 +- forge-gui/res/adventure/common/maps/map/skep/skep_outer.tmx | 6 +++--- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/forge-gui/res/adventure/Crystal_Kingdoms/world/quests.json b/forge-gui/res/adventure/Crystal_Kingdoms/world/quests.json index 69c57ac4ce4..c0c6ab66522 100644 --- a/forge-gui/res/adventure/Crystal_Kingdoms/world/quests.json +++ b/forge-gui/res/adventure/Crystal_Kingdoms/world/quests.json @@ -7095,7 +7095,7 @@ "options": [ { "name": "\"What was the spell?\"", - "text": "\"I'm not an expert in the island magics, so I didn't recognize it until a hole opened in front of 'em, and through they swam.... Flopped...? Went. Anyhow, needless to say I was stunned.\"", + "text": "\"I'm not an expert in the island magics, so I didn't recognize it until a hole opened in front of 'em, and through they swam... Flopped...? Went. Anyhow, needless to say I was stunned.\"", "options": [ { "name": "\"So, a portal?\"", diff --git a/forge-gui/res/adventure/Innistrad/world/quests.json b/forge-gui/res/adventure/Innistrad/world/quests.json index b84ce987936..518cba15f4f 100644 --- a/forge-gui/res/adventure/Innistrad/world/quests.json +++ b/forge-gui/res/adventure/Innistrad/world/quests.json @@ -7150,7 +7150,7 @@ "options": [ { "name": "\"What was the spell?\"", - "text": "\"I'm not an expert in the island magics, so I didn't recognize it until a hole opened in front of 'em, and through they swam.... Flopped...? Went. Anyhow, needless to say I was stunned.\"", + "text": "\"I'm not an expert in the island magics, so I didn't recognize it until a hole opened in front of 'em, and through they swam... Flopped...? Went. Anyhow, needless to say I was stunned.\"", "options": [ { "name": "\"So, a portal?\"", @@ -11370,4 +11370,4 @@ } ] } -] \ No newline at end of file +] diff --git a/forge-gui/res/adventure/Shandalar Old Border/world/quests.json b/forge-gui/res/adventure/Shandalar Old Border/world/quests.json index b46fc46d9e4..ad349c6f70d 100644 --- a/forge-gui/res/adventure/Shandalar Old Border/world/quests.json +++ b/forge-gui/res/adventure/Shandalar Old Border/world/quests.json @@ -7095,7 +7095,7 @@ "options": [ { "name": "\"What was the spell?\"", - "text": "\"I'm not an expert in the island magics, so I didn't recognize it until a hole opened in front of 'em, and through they swam.... Flopped...? Went. Anyhow, needless to say I was stunned.\"", + "text": "\"I'm not an expert in the island magics, so I didn't recognize it until a hole opened in front of 'em, and through they swam... Flopped...? Went. Anyhow, needless to say I was stunned.\"", "options": [ { "name": "\"So, a portal?\"", diff --git a/forge-gui/res/adventure/Shandalar/world/quests.json b/forge-gui/res/adventure/Shandalar/world/quests.json index 0571793f72f..d5c74fef141 100644 --- a/forge-gui/res/adventure/Shandalar/world/quests.json +++ b/forge-gui/res/adventure/Shandalar/world/quests.json @@ -7096,7 +7096,7 @@ "options": [ { "name": "\"What was the spell?\"", - "text": "\"I'm not an expert in the island magics, so I didn't recognize it until a hole opened in front of 'em, and through they swam.... Flopped...? Went. Anyhow, needless to say I was stunned.\"", + "text": "\"I'm not an expert in the island magics, so I didn't recognize it until a hole opened in front of 'em, and through they swam... Flopped...? Went. Anyhow, needless to say I was stunned.\"", "options": [ { "name": "\"So, a portal?\"", diff --git a/forge-gui/res/adventure/common/maps/map/skep/skep_outer.tmx b/forge-gui/res/adventure/common/maps/map/skep/skep_outer.tmx index 5d24e16071f..c80736363fd 100644 --- a/forge-gui/res/adventure/common/maps/map/skep/skep_outer.tmx +++ b/forge-gui/res/adventure/common/maps/map/skep/skep_outer.tmx @@ -54,7 +54,7 @@ "options": [ { "name": "Usurped? What are you talking about?", - "text": "For millenia I've been keeping the Sliver of the Skep healthy and peaceful,keeping them under control to prevent them attacking outsiders. Everything changed when the Sliver Queen attacked the Skep. She attacked me and took control over this hive. As you can see, I was unable to defeat her.", + "text": "For millenia I've been keeping the Slivers of the Skep healthy and peaceful, keeping them under control to prevent them attacking outsiders. Everything changed when the Sliver Queen attacked the Skep. She attacked me and took control over this hive. As you can see, I was unable to defeat her.", "options": [ { "name": "So I guess the Sliver Queen is causing the Slivers of the Skep to be this aggressive? ", @@ -95,7 +95,7 @@ "not": true } ], - "text": "Weak, ... I am, defeat the Sliver Queen .... Before I lose the last of my strength.", + "text": "Weak, ... I am, defeat the Sliver Queen ... Before I lose the last of my strength.", "options": [ { "name": "(Continue)" @@ -108,7 +108,7 @@ { "checkQuestFlag": "SliverQueenDefeated" } ], "name": "The Sliver Queen has been defeated!", - "text": "My .... my gratitude to you stranger. I feel my strength slowly returning. As promised I'll take control of the Slivers again as her queen, the people of Shandalar shouldn't fear the Slivers of the Skep anymore. Though be warned adventurer, my children will still defend against any intruder why goes into the skep. Goodbye Adventurer", + "text": "My ... my gratitude to you stranger. I feel my strength slowly returning. As promised, I'll take control of the Slivers again as their queen. The people of Shandalar shouldn't fear the Slivers of the Skep anymore. Though be warned, adventurer, my children will still defend against any intruder who goes into the Skep. Goodbye, adventurer!", "options": [ { "name": "(Continue)", From 52adb2dc2be388133cb386615aa19d632fd6299d Mon Sep 17 00:00:00 2001 From: Eradev Date: Sat, 11 Oct 2025 02:05:08 -0400 Subject: [PATCH 334/355] Ensure you get the valid card (#8878) --- .../gamemodes/quest/QuestEventDraft.java | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/forge-gui/src/main/java/forge/gamemodes/quest/QuestEventDraft.java b/forge-gui/src/main/java/forge/gamemodes/quest/QuestEventDraft.java index 03d03970ffd..9681fa17fc8 100644 --- a/forge-gui/src/main/java/forge/gamemodes/quest/QuestEventDraft.java +++ b/forge-gui/src/main/java/forge/gamemodes/quest/QuestEventDraft.java @@ -429,15 +429,19 @@ public class QuestEventDraft implements IQuestEvent { private void awardSelectedRare(final QuestDraftPrizes prizes) { final List possibleCards = new ArrayList<>(); - final List cardNames = new ArrayList<>(); + final HashSet cardNames = new HashSet<>(); for (final CardEdition edition : getAllEditions()) { for (final EditionEntry card : edition.getObtainableCards()) { + if (cardNames.contains(card.name())) { + continue; + } + if (card.rarity() == CardRarity.Rare || card.rarity() == CardRarity.MythicRare) { - final PaperCard cardToAdd = FModel.getMagicDb().getCommonCards().getCard(card.name(), edition.getCode()); - if (cardToAdd != null && !cardNames.contains(cardToAdd.getName())) { + final PaperCard cardToAdd = FModel.getMagicDb().getCommonCards().getCard(card.name(), edition.getCode(), card.collectorNumber()); + if (cardToAdd != null) { possibleCards.add(cardToAdd); - cardNames.add(cardToAdd.getName()); + cardNames.add(card.name()); } } } @@ -455,18 +459,20 @@ public class QuestEventDraft implements IQuestEvent { private PaperCard getPromoCard() { final CardEdition randomEdition = getRandomEdition(); final List cardsInEdition = new ArrayList<>(); - final List cardNames = new ArrayList<>(); + final HashSet cardNames = new HashSet<>(); for (final EditionEntry card : randomEdition.getObtainableCards()) { + if (cardNames.contains(card.name())) { + continue; + } + if (card.rarity() == CardRarity.Rare || card.rarity() == CardRarity.MythicRare) { - if (!cardNames.contains(card.name())) { - cardsInEdition.add(card); - cardNames.add(card.name()); - } + cardsInEdition.add(card); + cardNames.add(card.name()); } } - // For sets such as MB1 that only have cards from PLST. + // For sets such as MB1 that only have cards from PLST, or without any rare+ at all if (cardsInEdition.isEmpty()) { return FModel.getQuest().getCards().addRandomRare(); } @@ -478,7 +484,7 @@ public class QuestEventDraft implements IQuestEvent { while (promo == null && attempts-- > 0) { randomCard = cardsInEdition.get((int) (MyRandom.getRandom().nextDouble() * cardsInEdition.size())); - promo = FModel.getMagicDb().getCommonCards().getCard(randomCard.name(), randomEdition.getCode()); + promo = FModel.getMagicDb().getCommonCards().getCard(randomCard.name(), randomEdition.getCode(), randomCard.collectorNumber()); } if (promo == null) { From 63002aba970b9bc93e1416716b2b2fc63e0c246d Mon Sep 17 00:00:00 2001 From: Eradev Date: Sat, 11 Oct 2025 02:05:20 -0400 Subject: [PATCH 335/355] Fix Ambitious Dragonborn (#8898) * Update IKO * Update Ambitious Dragonborn --- forge-gui/res/cardsfolder/a/ambitious_dragonborn.txt | 3 ++- forge-gui/res/editions/Ikoria Lair of Behemoths.txt | 4 +--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/forge-gui/res/cardsfolder/a/ambitious_dragonborn.txt b/forge-gui/res/cardsfolder/a/ambitious_dragonborn.txt index c641465c8a0..e4534b17834 100644 --- a/forge-gui/res/cardsfolder/a/ambitious_dragonborn.txt +++ b/forge-gui/res/cardsfolder/a/ambitious_dragonborn.txt @@ -5,4 +5,5 @@ PT:0/0 K:etbCounter:P1P1:X:no Condition:CARDNAME enters with X +1/+1 counters on it, where X is the greatest power among creatures you control and creature cards in your graveyard. SVar:X:Count$ValidGraveyard,Battlefield Creature.YouCtrl$GreatestPower DeckHas:Ability$Graveyard|Counters -Oracle:Ambitious Dragonborn enters with X +1/+1 counters on it, where X is the greatest power among creatures you control and creature cards in your graveyard. +SVar:NeedsToPlay:X GE1 +Oracle:Ambitious Dragonborn enters with X +1/+1 counters on it, where X is the greatest power among creatures you control and creature cards in your graveyard. \ No newline at end of file diff --git a/forge-gui/res/editions/Ikoria Lair of Behemoths.txt b/forge-gui/res/editions/Ikoria Lair of Behemoths.txt index d1970ad414b..dd3fbf2859f 100644 --- a/forge-gui/res/editions/Ikoria Lair of Behemoths.txt +++ b/forge-gui/res/editions/Ikoria Lair of Behemoths.txt @@ -7,8 +7,6 @@ BoosterCovers=3 Booster=10 Common:fromSheet("IKO cards"):!fromSheet("IKO Lands"), 3 Uncommon:fromSheet("IKO cards"), 1 RareMythic:fromSheet("IKO cards"), 1 fromSheet("IKO Lands") Prerelease=6 Boosters, 1 RareMythic+ FatPackExtraSlots=20 BasicLands, 20 BasicLands+ -#, 1 Colossification+|IKO|3 -ScryfallCode=IKO [cards] 1 C Adaptive Shimmerer @Jason Felix @@ -288,7 +286,7 @@ ScryfallCode=IKO [buy a box] 275 M Zilortha, Strength Incarnate @Antonio José Manzanedo -275a M Zilortha, Strength Incarnate @Chase Stone +275y M Zilortha, Strength Incarnate @Chase Stone [borderless] 276 M Lukka, Coppercoat Outcast @Kieran Yanner From 8bb15f6bbcb0b99d0fc6586f9c456ed8955d52e6 Mon Sep 17 00:00:00 2001 From: Paul Hammerton Date: Sat, 11 Oct 2025 10:25:52 +0100 Subject: [PATCH 336/355] Edition updates: PMEI, PZA, SLD, TMC, TMT --- .../Media and Collaboration Promos.txt | 1 + .../res/editions/Secret Lair Drop Series.txt | 9 +++++++ ...ge Mutant Hero Turtles Source Material.txt | 8 ++++++ .../Teenage Mutant Ninja Turtles Eternal.txt | 19 +++++++++++++ .../editions/Teenage Mutant Ninja Turtles.txt | 27 +++++++++++++++++++ 5 files changed, 64 insertions(+) create mode 100644 forge-gui/res/editions/Teenage Mutant Hero Turtles Source Material.txt create mode 100644 forge-gui/res/editions/Teenage Mutant Ninja Turtles Eternal.txt create mode 100644 forge-gui/res/editions/Teenage Mutant Ninja Turtles.txt diff --git a/forge-gui/res/editions/Media and Collaboration Promos.txt b/forge-gui/res/editions/Media and Collaboration Promos.txt index bc83dc17c83..13cf87faf04 100644 --- a/forge-gui/res/editions/Media and Collaboration Promos.txt +++ b/forge-gui/res/editions/Media and Collaboration Promos.txt @@ -85,3 +85,4 @@ ScryfallCode=PMEI 2025-18 R Iron Spider, Stark Upgrade @Bachzim 2025-19 M Kaalia of the Vast @Justyna Dura 2025-20 R Chrome Host Seedshark @Donato Giancola +2025-21 M Cloud, Midgar Mercenary @Square Enix diff --git a/forge-gui/res/editions/Secret Lair Drop Series.txt b/forge-gui/res/editions/Secret Lair Drop Series.txt index 00a50154195..d321805ff3d 100644 --- a/forge-gui/res/editions/Secret Lair Drop Series.txt +++ b/forge-gui/res/editions/Secret Lair Drop Series.txt @@ -2195,6 +2195,15 @@ F1540 M Rainbow Dash @John Thacker 7010 R Counterspell @Tyler Walpole 7011 R Dismember @Gregg Schigiel 7012 R Command Tower @Jon Vermilyea +7013 R Brainstorm @Roberta Ingranata +7014 R Fatal Push @Veronica Fish +7015 R Harmonize @Terry Dodson +7016 R Brainstorm @Roberta Ingranata +7017 R Fatal Push @Veronica Fish +7018 R Harmonize @Terry Dodson +7019 R Brainstorm @Roberta Ingranata +7020 R Fatal Push @Veronica Fish +7021 R Harmonize @Terry Dodson 7022 R Goblin Bombardment @Phil Foglio 7023 M Consecrated Sphinx @Imiri Sakabashira 7024 R Resculpt @Imiri Sakabashira diff --git a/forge-gui/res/editions/Teenage Mutant Hero Turtles Source Material.txt b/forge-gui/res/editions/Teenage Mutant Hero Turtles Source Material.txt new file mode 100644 index 00000000000..30cb0c7f5ca --- /dev/null +++ b/forge-gui/res/editions/Teenage Mutant Hero Turtles Source Material.txt @@ -0,0 +1,8 @@ +[metadata] +Code=PZA +Date=2026-03-06 +Name=Teenage Mutant Hero Turtles Source Material +Type=Collector_Edition + +[cards] +11 M Doubling Season @Kevin Eastman diff --git a/forge-gui/res/editions/Teenage Mutant Ninja Turtles Eternal.txt b/forge-gui/res/editions/Teenage Mutant Ninja Turtles Eternal.txt new file mode 100644 index 00000000000..c2a47d1028c --- /dev/null +++ b/forge-gui/res/editions/Teenage Mutant Ninja Turtles Eternal.txt @@ -0,0 +1,19 @@ +[metadata] +Code=TMC +Date=2026-03-06 +Name=Teenage Mutant Ninja Turtles Eternal +Type=Expansion + +[cards] +1 M Leonardo, the Balance @Inkognit +2 M Donatello, the Brains @Jason Rainville +3 M Splinter, the Mentor @Andrea Tentori Montalto +4 M Raphael, the Muscle @Ryan Pancoast +5 M Michelangelo, the Heart @Néstor Ossandón Leal +6 M Heroes in a Half Shell @Victor Maury +101 M Leonardo, Worldly Warrior @Nathaniel Himawan +109 M Donatello, Rad Scientist @Thomas Chamberlain-Keen +111 R Donnie & April, Adorkable Duo @Le Vuong +118 M Raphael, Tag Team Tough @Randy Vargas +124 M Michelangelo, On the Scene @Lie Setiawan +131 M Dark Ritual @Filipe Pagliuso diff --git a/forge-gui/res/editions/Teenage Mutant Ninja Turtles.txt b/forge-gui/res/editions/Teenage Mutant Ninja Turtles.txt new file mode 100644 index 00000000000..c3dc850faab --- /dev/null +++ b/forge-gui/res/editions/Teenage Mutant Ninja Turtles.txt @@ -0,0 +1,27 @@ +[metadata] +Code=TMT +Date=2026-03-06 +Name=Teenage Mutant Ninja Turtles +Type=Expansion + +[cards] +17 M Leonardo, Sewer Samurai @Ryan Pancoast +27 R Turtles Forever @Devin Elle Kurtz +29 R April O'Neil, Hacktivist @Xabi Gaztelua +43 R Krang, Master Mind @Narendra Bintara Adi +83 M Super Shredder @Néstor Ossandón Leal +87 U Casey Jones, Jury-Rig Justiciar @Lordigan +105 R Raphael's Technique @Andreas Zafiratos +140 R Bebop & Rocksteady @Néstor Ossandón Leal +253 L Plains @Gaboleps +254 L Island @Gaboleps +255 L Swamp @Gaboleps +256 L Mountain @Gaboleps +257 L Forest @Gaboleps +261 R Turtles Forever @Devin Elle Kurtz +301 M Leonardo, Sewer Samurai @Kevin Eastman +310 L Plains @Gaboleps +311 L Island @Gaboleps +312 L Swamp @Gaboleps +313 L Mountain @Gaboleps +314 L Forest @Gaboleps From 9147836f1a17726a443f939f3722f911b8e417b6 Mon Sep 17 00:00:00 2001 From: Eradev Date: Sat, 11 Oct 2025 18:49:48 -0400 Subject: [PATCH 337/355] Update MPS_RNA --- forge-gui/res/editions/Mythic Edition - Ravnica Allegiance.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/forge-gui/res/editions/Mythic Edition - Ravnica Allegiance.txt b/forge-gui/res/editions/Mythic Edition - Ravnica Allegiance.txt index 6f542e2f761..65147adc252 100644 --- a/forge-gui/res/editions/Mythic Edition - Ravnica Allegiance.txt +++ b/forge-gui/res/editions/Mythic Edition - Ravnica Allegiance.txt @@ -22,3 +22,4 @@ R1 c_0_0_a_construct_total_artifacts @Victor Adame Minguez R2 emblem_dack_fayden @Jason Rainville R3 emblem_domri_chaos_bringer @Jason Rainville R4 emblem_jaya_ballard @Kieran Yanner +R5 emblem_tamiyo_the_moon_sage @Lius Lasahido \ No newline at end of file From 3d15f743c36d750d7f26232e54e451e37fb4b430 Mon Sep 17 00:00:00 2001 From: Renato Filipe Vidal Santos <45150760+dracontes@users.noreply.github.com> Date: Sun, 12 Oct 2025 12:48:02 +0000 Subject: [PATCH 338/355] Update the_darkness_crystal.txt --- forge-gui/res/cardsfolder/t/the_darkness_crystal.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/t/the_darkness_crystal.txt b/forge-gui/res/cardsfolder/t/the_darkness_crystal.txt index 037d83d1d04..69492e03e51 100644 --- a/forge-gui/res/cardsfolder/t/the_darkness_crystal.txt +++ b/forge-gui/res/cardsfolder/t/the_darkness_crystal.txt @@ -2,7 +2,7 @@ Name:The Darkness Crystal ManaCost:2 B B Types:Legendary Artifact S:Mode$ ReduceCost | ValidCard$ Card.Black | Type$ Spell | Activator$ You | Amount$ 1 | Description$ Black spells you cast cost {1} less to cast. -R:Event$ Moved | ActiveZones$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Creature+!token+OppCtrl | ReplaceWith$ Exile | Description$ If a nontoken creature an opponent controls would die, instead exile it and you gain 2 life. +R:Event$ Moved | ActiveZones$ Battlefield | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Creature+!token+OppCtrl | ReplaceWith$ Exile | Description$ If a nontoken creature an opponent controls would die, instead exile it and you gain 2 life. SVar:Exile:DB$ ChangeZone | Hidden$ True | Origin$ All | Destination$ Exile | Defined$ ReplacedCard | SubAbility$ DBGainLife SVar:DBGainLife:DB$ GainLife | LifeAmount$ 2 A:AB$ ChangeZone | Cost$ 4 B B T | ValidTgts$ Creature.ExiledWithSource | TgtZone$ Exile | TgtPrompt$ Select target creature card exiled with CARDNAME | Tapped$ True | WithCountersType$ P1P1 | WithCountersAmount$ 2 | GainControl$ True | Origin$ Exile | Destination$ Battlefield | SpellDescription$ Put target creature card exiled with CARDNAME onto the battlefield tapped under your control with two additional +1/+1 counters on it. From 43cefed04802d965490592f876805a40abf252ad Mon Sep 17 00:00:00 2001 From: Renato Filipe Vidal Santos <45150760+dracontes@users.noreply.github.com> Date: Sun, 12 Oct 2025 13:04:38 +0000 Subject: [PATCH 339/355] Update lumbering_laundry.txt --- forge-gui/res/cardsfolder/l/lumbering_laundry.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/l/lumbering_laundry.txt b/forge-gui/res/cardsfolder/l/lumbering_laundry.txt index 2779a9255ba..ba58088ffeb 100644 --- a/forge-gui/res/cardsfolder/l/lumbering_laundry.txt +++ b/forge-gui/res/cardsfolder/l/lumbering_laundry.txt @@ -5,4 +5,4 @@ PT:4/5 A:AB$ Effect | Cost$ 2 | StaticAbilities$ MayLookFaceDown | SpellDescription$ Until end of turn, you may look at face-down creatures you don't control any time. SVar:MayLookFaceDown:Mode$ Continuous | Affected$ Creature.faceDown+YouDontCtrl | AffectedZone$ Battlefield | MayLookAt$ You | Description$ You may look at face-down creatures you don't control any time. K:Disguise:5 -Oracle:{2}: Until end of turn, you may look at face-down creatures you don't control any time. +Oracle:{2}: Until end of turn, you may look at face-down creatures you don't control any time.\nDisguise {5} (You may cast this card face down for {3} as a 2/2 creature with ward {2}. Turn it face up any time for its disguise cost.) From 010f9175506f6a71c331844f1ed48a51494932e3 Mon Sep 17 00:00:00 2001 From: Renato Filipe Vidal Santos <45150760+dracontes@users.noreply.github.com> Date: Sun, 12 Oct 2025 13:35:07 +0000 Subject: [PATCH 340/355] Update consuming_ferocity.txt --- forge-gui/res/cardsfolder/c/consuming_ferocity.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/c/consuming_ferocity.txt b/forge-gui/res/cardsfolder/c/consuming_ferocity.txt index f12ec9c6b67..435bb7b385e 100644 --- a/forge-gui/res/cardsfolder/c/consuming_ferocity.txt +++ b/forge-gui/res/cardsfolder/c/consuming_ferocity.txt @@ -6,7 +6,7 @@ SVar:AttachAILogic:Curse S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 1 | Description$ Enchanted creature gets +1/+0. T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ At the beginning of your upkeep, put a +1/+0 counter on enchanted creature. If that creature has three or more +1/+0 counters on it, it deals damage equal to its power to its controller, then destroy that creature and it can't be regenerated. SVar:TrigPutCounter:DB$ PutCounter | Defined$ Enchanted | CounterType$ P1P0 | CounterNum$ 1 | SubAbility$ DBDmg -SVar:DBDmg:DB$ DealDamage | Defined$ TriggeredPlayer | DamageSource$ Enchanted | NumDmg$ X | ConditionCheckSVar$ Y | ConditionSVarCompare$ GE3 | SubAbility$ DBDes +SVar:DBDmg:DB$ DealDamage | Defined$ EnchantedController | DamageSource$ Enchanted | NumDmg$ X | ConditionCheckSVar$ Y | ConditionSVarCompare$ GE3 | SubAbility$ DBDes SVar:DBDes:DB$ Destroy | Defined$ Enchanted | NoRegen$ True | ConditionCheckSVar$ Y | ConditionSVarCompare$ GE3 SVar:Y:Count$Valid Creature.EnchantedBy$CardCounters.P1P0 SVar:X:Enchanted$CardPower From fdbdffd874a414dfb1899d14fe41301c288ca21e Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Fri, 10 Oct 2025 12:25:30 +0200 Subject: [PATCH 341/355] Update DeckRecognizer.java Remove extra manaSymbolsMap --- .../main/java/forge/deck/DeckRecognizer.java | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/forge-core/src/main/java/forge/deck/DeckRecognizer.java b/forge-core/src/main/java/forge/deck/DeckRecognizer.java index f62da14d13d..8ea96e9847a 100644 --- a/forge-core/src/main/java/forge/deck/DeckRecognizer.java +++ b/forge-core/src/main/java/forge/deck/DeckRecognizer.java @@ -22,6 +22,7 @@ import forge.StaticData; import forge.card.CardDb; import forge.card.CardEdition; import forge.card.CardType; +import forge.card.ColorSet; import forge.card.MagicColor; import forge.item.IPaperCard; import forge.item.PaperCard; @@ -997,26 +998,13 @@ public class DeckRecognizer { return String.format("%s %s", magicColor.getTranslatedName(), magicColor.getSymbol()); } - private static final HashMap manaSymbolsMap = new HashMap() {{ - put(MagicColor.WHITE | MagicColor.BLUE, "WU"); - put(MagicColor.BLUE | MagicColor.BLACK, "UB"); - put(MagicColor.BLACK | MagicColor.RED, "BR"); - put(MagicColor.RED | MagicColor.GREEN, "RG"); - put(MagicColor.GREEN | MagicColor.WHITE, "GW"); - put(MagicColor.WHITE | MagicColor.BLACK, "WB"); - put(MagicColor.BLUE | MagicColor.RED, "UR"); - put(MagicColor.BLACK | MagicColor.GREEN, "BG"); - put(MagicColor.RED | MagicColor.WHITE, "RW"); - put(MagicColor.GREEN | MagicColor.BLUE, "GU"); - }}; - private static String getMagicColourLabel(MagicColor.Color magicColor1, MagicColor.Color magicColor2){ + private static String getMagicColourLabel(MagicColor.Color magicColor1, MagicColor.Color magicColor2) { if (magicColor2 == null || magicColor2 == MagicColor.Color.COLORLESS || magicColor1 == MagicColor.Color.COLORLESS) return String.format("%s // %s", getMagicColourLabel(magicColor1), getMagicColourLabel(magicColor2)); String localisedName1 = magicColor1.getTranslatedName(); String localisedName2 = magicColor2.getTranslatedName(); - String comboManaSymbol = manaSymbolsMap.get(magicColor1.getColorMask() | magicColor2.getColorMask()); - return String.format("%s/%s {%s}", localisedName1, localisedName2, comboManaSymbol); + return String.format("%s/%s {%s}", localisedName1, localisedName2, ColorSet.fromEnums(magicColor1, magicColor2)); } private static MagicColor.Color getMagicColor(String colorName){ From c454253d48ffc1e0dc9fef2fb739119060d3171c Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Fri, 10 Oct 2025 12:45:40 +0200 Subject: [PATCH 342/355] ManaCostShard: build imageKey Remove "/" dynamic for `imageKey` --- .../java/forge/card/mana/ManaCostShard.java | 91 +++++++++---------- 1 file changed, 41 insertions(+), 50 deletions(-) diff --git a/forge-core/src/main/java/forge/card/mana/ManaCostShard.java b/forge-core/src/main/java/forge/card/mana/ManaCostShard.java index 667ed3ba19d..41b9b667256 100644 --- a/forge-core/src/main/java/forge/card/mana/ManaCostShard.java +++ b/forge-core/src/main/java/forge/card/mana/ManaCostShard.java @@ -17,6 +17,7 @@ */ package forge.card.mana; +import forge.card.ColorSet; import forge.util.BinaryUtil; /** @@ -34,51 +35,51 @@ public enum ManaCostShard { COLORLESS(ManaAtom.COLORLESS, "C"), /* Hybrid */ - WU(ManaAtom.WHITE | ManaAtom.BLUE, "W/U", "WU"), - WB(ManaAtom.WHITE | ManaAtom.BLACK, "W/B", "WB"), - UB(ManaAtom.BLUE | ManaAtom.BLACK, "U/B", "UB"), - UR(ManaAtom.BLUE | ManaAtom.RED, "U/R", "UR"), - BR(ManaAtom.BLACK | ManaAtom.RED, "B/R", "BR"), - BG(ManaAtom.BLACK | ManaAtom.GREEN, "B/G", "BG"), - RW(ManaAtom.RED | ManaAtom.WHITE, "R/W", "RW"), - RG(ManaAtom.RED | ManaAtom.GREEN, "R/G", "RG"), - GW(ManaAtom.GREEN | ManaAtom.WHITE, "G/W", "GW"), - GU(ManaAtom.GREEN | ManaAtom.BLUE, "G/U", "GU"), + WU(ManaAtom.WHITE | ManaAtom.BLUE, "W/U"), + WB(ManaAtom.WHITE | ManaAtom.BLACK, "W/B"), + UB(ManaAtom.BLUE | ManaAtom.BLACK, "U/B"), + UR(ManaAtom.BLUE | ManaAtom.RED, "U/R"), + BR(ManaAtom.BLACK | ManaAtom.RED, "B/R"), + BG(ManaAtom.BLACK | ManaAtom.GREEN, "B/G"), + RW(ManaAtom.RED | ManaAtom.WHITE, "R/W"), + RG(ManaAtom.RED | ManaAtom.GREEN, "R/G"), + GW(ManaAtom.GREEN | ManaAtom.WHITE, "G/W"), + GU(ManaAtom.GREEN | ManaAtom.BLUE, "G/U"), /* Or 2 generic */ - W2(ManaAtom.WHITE | ManaAtom.OR_2_GENERIC, "2/W", "2W"), - U2(ManaAtom.BLUE | ManaAtom.OR_2_GENERIC, "2/U", "2U"), - B2(ManaAtom.BLACK | ManaAtom.OR_2_GENERIC, "2/B", "2B"), - R2(ManaAtom.RED | ManaAtom.OR_2_GENERIC, "2/R", "2R"), - G2(ManaAtom.GREEN | ManaAtom.OR_2_GENERIC, "2/G", "2G"), + W2(ManaAtom.WHITE | ManaAtom.OR_2_GENERIC, "2/W"), + U2(ManaAtom.BLUE | ManaAtom.OR_2_GENERIC, "2/U"), + B2(ManaAtom.BLACK | ManaAtom.OR_2_GENERIC, "2/B"), + R2(ManaAtom.RED | ManaAtom.OR_2_GENERIC, "2/R"), + G2(ManaAtom.GREEN | ManaAtom.OR_2_GENERIC, "2/G"), /* Or Colorless */ - CW(ManaAtom.WHITE | ManaAtom.COLORLESS, "C/W", "CW"), - CU(ManaAtom.BLUE | ManaAtom.COLORLESS, "C/U", "CU"), - CB(ManaAtom.BLACK | ManaAtom.COLORLESS, "C/B", "CB"), - CR(ManaAtom.RED | ManaAtom.COLORLESS, "C/R", "CR"), - CG(ManaAtom.GREEN | ManaAtom.COLORLESS, "C/G", "CG"), + CW(ManaAtom.WHITE | ManaAtom.COLORLESS, "C/W"), + CU(ManaAtom.BLUE | ManaAtom.COLORLESS, "C/U"), + CB(ManaAtom.BLACK | ManaAtom.COLORLESS, "C/B"), + CR(ManaAtom.RED | ManaAtom.COLORLESS, "C/R"), + CG(ManaAtom.GREEN | ManaAtom.COLORLESS, "C/G"), // Snow and colorless S(ManaAtom.IS_SNOW, "S"), GENERIC(ManaAtom.GENERIC, "1"), /* Phyrexian */ - WP(ManaAtom.WHITE | ManaAtom.OR_2_LIFE, "W/P", "WP"), - UP(ManaAtom.BLUE | ManaAtom.OR_2_LIFE, "U/P", "UP"), - BP(ManaAtom.BLACK | ManaAtom.OR_2_LIFE, "B/P", "BP"), - RP(ManaAtom.RED | ManaAtom.OR_2_LIFE, "R/P", "RP"), - GP(ManaAtom.GREEN | ManaAtom.OR_2_LIFE, "G/P", "GP"), - BGP(ManaAtom.BLACK | ManaAtom.GREEN | ManaAtom.OR_2_LIFE, "B/G/P", "BGP"), - BRP(ManaAtom.BLACK | ManaAtom.RED | ManaAtom.OR_2_LIFE, "B/R/P", "BRP"), - GUP(ManaAtom.GREEN | ManaAtom.BLUE | ManaAtom.OR_2_LIFE, "G/U/P", "GUP"), - GWP(ManaAtom.GREEN | ManaAtom.WHITE | ManaAtom.OR_2_LIFE, "G/W/P", "GWP"), - RGP(ManaAtom.RED | ManaAtom.GREEN | ManaAtom.OR_2_LIFE, "R/G/P", "RGP"), - RWP(ManaAtom.RED | ManaAtom.WHITE | ManaAtom.OR_2_LIFE, "R/W/P", "RWP"), - UBP(ManaAtom.BLUE | ManaAtom.BLACK | ManaAtom.OR_2_LIFE, "U/B/P", "UBP"), - URP(ManaAtom.BLUE | ManaAtom.RED | ManaAtom.OR_2_LIFE, "U/R/P", "URP"), - WBP(ManaAtom.WHITE | ManaAtom.BLACK | ManaAtom.OR_2_LIFE, "W/B/P", "WBP"), - WUP(ManaAtom.WHITE | ManaAtom.BLUE | ManaAtom.OR_2_LIFE, "W/U/P", "WUP"), + WP(ManaAtom.WHITE | ManaAtom.OR_2_LIFE, "W/P"), + UP(ManaAtom.BLUE | ManaAtom.OR_2_LIFE, "U/P"), + BP(ManaAtom.BLACK | ManaAtom.OR_2_LIFE, "B/P"), + RP(ManaAtom.RED | ManaAtom.OR_2_LIFE, "R/P"), + GP(ManaAtom.GREEN | ManaAtom.OR_2_LIFE, "G/P"), + BGP(ManaAtom.BLACK | ManaAtom.GREEN | ManaAtom.OR_2_LIFE, "B/G/P"), + BRP(ManaAtom.BLACK | ManaAtom.RED | ManaAtom.OR_2_LIFE, "B/R/P"), + GUP(ManaAtom.GREEN | ManaAtom.BLUE | ManaAtom.OR_2_LIFE, "G/U/P"), + GWP(ManaAtom.GREEN | ManaAtom.WHITE | ManaAtom.OR_2_LIFE, "G/W/P"), + RGP(ManaAtom.RED | ManaAtom.GREEN | ManaAtom.OR_2_LIFE, "R/G/P"), + RWP(ManaAtom.RED | ManaAtom.WHITE | ManaAtom.OR_2_LIFE, "R/W/P"), + UBP(ManaAtom.BLUE | ManaAtom.BLACK | ManaAtom.OR_2_LIFE, "U/B/P"), + URP(ManaAtom.BLUE | ManaAtom.RED | ManaAtom.OR_2_LIFE, "U/R/P"), + WBP(ManaAtom.WHITE | ManaAtom.BLACK | ManaAtom.OR_2_LIFE, "W/B/P"), + WUP(ManaAtom.WHITE | ManaAtom.BLUE | ManaAtom.OR_2_LIFE, "W/U/P"), X(ManaAtom.IS_X, "X"), @@ -107,26 +108,12 @@ public enum ManaCostShard { * the s value */ ManaCostShard(final int value, final String sValue) { - this(value, sValue, sValue); - } - - /** - * Instantiates a new card mana cost shard. - * - * @param value - * the value - * @param sValue - * the s value - * @param imgKey - * the img key - */ - ManaCostShard(final int value, final String sValue, final String imgKey) { this.shard = value; this.cmc = this.getCMC(); this.cmpc = this.getCmpCost(); this.stringValue = "{" + sValue + "}"; this.shortStringValue = sValue; - this.imageKey = imgKey; + this.imageKey = sValue.replace("/", ""); } public static final int COLORS_SUPERPOSITION = ManaAtom.WHITE | ManaAtom.BLUE | ManaAtom.BLACK | ManaAtom.RED | ManaAtom.GREEN; @@ -185,6 +172,10 @@ public enum ManaCostShard { return (byte)(this.shard & COLORS_SUPERPOSITION); } + public final ColorSet getColor() { + return ColorSet.fromMask(getColorMask()); + } + /** * Value of. * From 6ddb3124ac1f003d779be5ea5dede3bdb3b089a6 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Mon, 13 Oct 2025 19:49:05 +0200 Subject: [PATCH 343/355] Fix Pump / Draw AI half broken (#8918) --- forge-ai/src/main/java/forge/ai/ability/DrawAi.java | 11 +++++------ forge-ai/src/main/java/forge/ai/ability/PumpAi.java | 6 +++--- .../src/main/java/forge/ai/ability/PumpAllAi.java | 2 +- forge-gui/res/cardsfolder/n/not_dead_after_all.txt | 2 +- .../res/cardsfolder/s/sin_unending_cataclysm.txt | 2 +- 5 files changed, 11 insertions(+), 12 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/DrawAi.java b/forge-ai/src/main/java/forge/ai/ability/DrawAi.java index df4be1cd9a4..0a9cc6285b7 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DrawAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DrawAi.java @@ -54,7 +54,7 @@ public class DrawAi extends SpellAbilityAi { } if (ComputerUtil.playImmediately(ai, sa)) { - return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi); + return new AiAbilityDecision(100, AiPlayDecision.WillPlay); } // Don't tap creatures that may be able to block @@ -73,9 +73,10 @@ public class DrawAi extends SpellAbilityAi { // TODO: make this configurable in the AI profile return new AiAbilityDecision(100, AiPlayDecision.WillPlay); } + return new AiAbilityDecision(0, AiPlayDecision.CostNotAcceptable); } - return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi); + return new AiAbilityDecision(100, AiPlayDecision.WillPlay); } /* @@ -173,9 +174,8 @@ public class DrawAi extends SpellAbilityAi { public AiAbilityDecision chkDrawback(SpellAbility sa, Player ai) { if (targetAI(ai, sa, sa.isTrigger() && sa.getHostCard().isInPlay())) { return new AiAbilityDecision(100, AiPlayDecision.WillPlay); - } else { - return new AiAbilityDecision(0, AiPlayDecision.TargetingFailed); } + return new AiAbilityDecision(0, AiPlayDecision.TargetingFailed); } /** @@ -540,9 +540,8 @@ public class DrawAi extends SpellAbilityAi { if (targetAI(ai, sa, mandatory)) { return new AiAbilityDecision(100, AiPlayDecision.WillPlay); - } else { - return new AiAbilityDecision(0, AiPlayDecision.TargetingFailed); } + return new AiAbilityDecision(0, AiPlayDecision.TargetingFailed); } /* (non-Javadoc) diff --git a/forge-ai/src/main/java/forge/ai/ability/PumpAi.java b/forge-ai/src/main/java/forge/ai/ability/PumpAi.java index bc7c4f8431e..948337ed207 100644 --- a/forge-ai/src/main/java/forge/ai/ability/PumpAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/PumpAi.java @@ -339,11 +339,11 @@ public class PumpAi extends PumpAiBase { return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi); } - if (!pumpTgtAI(ai, sa, defense, attack, false, false)) { - return new AiAbilityDecision(0, AiPlayDecision.TargetingFailed); + if (pumpTgtAI(ai, sa, defense, attack, false, false)) { + return new AiAbilityDecision(100, AiPlayDecision.WillPlay); } - return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi); + return new AiAbilityDecision(0, AiPlayDecision.TargetingFailed); } private boolean pumpTgtAI(final Player ai, final SpellAbility sa, final int defense, final int attack, final boolean mandatory, diff --git a/forge-ai/src/main/java/forge/ai/ability/PumpAllAi.java b/forge-ai/src/main/java/forge/ai/ability/PumpAllAi.java index 83f74410723..c082ea153d6 100644 --- a/forge-ai/src/main/java/forge/ai/ability/PumpAllAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/PumpAllAi.java @@ -131,7 +131,7 @@ public class PumpAllAi extends PumpAiBase { boolean result = ai.getCreaturesInPlay().anyMatch(c -> c.isValid(valid, source.getController(), source, sa) && ComputerUtilCard.shouldPumpCard(ai, sa, c, defense, power, keywords)); return result ? new AiAbilityDecision(100, AiPlayDecision.WillPlay) : new AiAbilityDecision(0, AiPlayDecision.CantPlayAi); - } // pumpAllCanPlayAI() + } @Override public AiAbilityDecision chkDrawback(SpellAbility sa, Player aiPlayer) { diff --git a/forge-gui/res/cardsfolder/n/not_dead_after_all.txt b/forge-gui/res/cardsfolder/n/not_dead_after_all.txt index b7e77609139..5107a31ce99 100644 --- a/forge-gui/res/cardsfolder/n/not_dead_after_all.txt +++ b/forge-gui/res/cardsfolder/n/not_dead_after_all.txt @@ -3,7 +3,7 @@ ManaCost:B Types:Instant A:SP$ Animate | Triggers$ TrigChangeZone | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | SpellDescription$ Until end of turn, target creature you control gains "When this creature dies, return it to the battlefield tapped under its owner's control, then create a Wicked Role token attached to it." (Enchanted creature gets +1/+1. When this Aura is put into a graveyard, each opponent loses 1 life.) SVar:TrigChangeZone:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigChangeZone2 | TriggerController$ TriggeredCardController | TriggerDescription$ When this creature dies, return it to the battlefield tapped under its owner's control, then create a Wicked Role token attached to it. (Enchanted creature gets +1/+1. When this Aura is put into a graveyard, each opponent loses 1 life.) -SVar:TrigChangeZone2:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ TriggeredNewCardLKICopy | SubAbility$ DBToken +SVar:TrigChangeZone2:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ TriggeredNewCardLKICopy | Tapped$ True | SubAbility$ DBToken SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_wicked | TokenOwner$ You | AttachedTo$ TriggeredNewCardLKICopy DeckHas:Ability$Token & Type$Role|Aura Oracle:Until end of turn, target creature you control gains "When this creature dies, return it to the battlefield tapped under its owner's control, then create a Wicked Role token attached to it." (Enchanted creature gets +1/+1. When this Aura is put into a graveyard, each opponent loses 1 life.) diff --git a/forge-gui/res/cardsfolder/s/sin_unending_cataclysm.txt b/forge-gui/res/cardsfolder/s/sin_unending_cataclysm.txt index 346ebd68e10..5d6db9b352a 100644 --- a/forge-gui/res/cardsfolder/s/sin_unending_cataclysm.txt +++ b/forge-gui/res/cardsfolder/s/sin_unending_cataclysm.txt @@ -10,7 +10,7 @@ SVar:DBPutCounters:DB$ PutCounter | ETB$ True | Defined$ Self | CounterType$ P1P SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigPutCounter | TriggerDescription$ When NICKNAME dies, put its counters on target creature you control, then shuffle this card into its owner's library. SVar:TrigPutCounter:DB$ PutCounter | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | CounterType$ EachFromSource | EachFromSource$ TriggeredCardLKICopy | SubAbility$ DBChangeZone -SVar:DBChangeZone:DB$ ChangeZone | Defined$ Self | Origin$ Graveyard | Destination$ Library | LibraryPosition$ 0 | Shuffle$ True +SVar:DBChangeZone:DB$ ChangeZone | Defined$ TriggeredNewCardLKICopy | Origin$ Graveyard | Destination$ Library | LibraryPosition$ 0 | Shuffle$ True SVar:X:Count$RememberedNumber/Times.2 DeckHas:Ability$Counters Oracle:Flying, trample\nAs Sin enters, remove all counters from any number of artifacts, creatures, and enchantments. Sin enters with X +1/+1 counters on it, where X is twice the number of counters removed this way.\nWhen Sin dies, put its counters on target creature you control, then shuffle this card into its owner's library. From 7fb7c62fbe0823988004e2c5187cea04f28a5350 Mon Sep 17 00:00:00 2001 From: Fulgur14 <54345051+Fulgur14@users.noreply.github.com> Date: Mon, 13 Oct 2025 19:50:20 +0200 Subject: [PATCH 344/355] 15 TMT/TMC cards (#8895) --- forge-core/src/main/java/forge/card/CardRules.java | 5 ++++- .../src/main/java/forge/game/keyword/Keyword.java | 3 ++- .../cardsfolder/upcoming/april_oneil_hacktivist.txt | 8 ++++++++ .../cardsfolder/upcoming/atreus_impulsive_son.txt | 2 +- .../res/cardsfolder/upcoming/bebop_rocksteady.txt | 8 ++++++++ .../upcoming/casey_jones_jury_rig_justiciar.txt | 8 ++++++++ .../cardsfolder/upcoming/donatello_rad_scientist.txt | 9 +++++++++ .../cardsfolder/upcoming/donatello_the_brains.txt | 9 +++++++++ .../upcoming/donnie_april_adorkable_duo.txt | 9 +++++++++ .../res/cardsfolder/upcoming/ellie_brick_master.txt | 2 +- .../cardsfolder/upcoming/ellie_vengeful_hunter.txt | 2 +- .../cardsfolder/upcoming/heroes_in_a_half_shell.txt | 12 ++++++++++++ .../cardsfolder/upcoming/joel_resolute_survivor.txt | 2 +- .../res/cardsfolder/upcoming/krang_master_mind.txt | 12 ++++++++++++ .../res/cardsfolder/upcoming/kratos_stoic_father.txt | 2 +- .../cardsfolder/upcoming/leonardo_the_balance.txt | 10 ++++++++++ .../upcoming/leonardo_worldly_warrior.txt | 8 ++++++++ .../upcoming/michelangelo_on_the_scene.txt | 11 +++++++++++ .../cardsfolder/upcoming/michelangelo_the_heart.txt | 11 +++++++++++ .../res/cardsfolder/upcoming/raphael_the_muscle.txt | 11 +++++++++++ .../res/cardsfolder/upcoming/splinter_the_mentor.txt | 10 ++++++++++ .../res/cardsfolder/upcoming/super_shredder.txt | 9 +++++++++ forge-gui/res/lists/TypeLists.txt | 2 ++ forge-gui/res/tokenscripts/c_a_mutagen_sac.txt | 5 +++++ 24 files changed, 163 insertions(+), 7 deletions(-) create mode 100644 forge-gui/res/cardsfolder/upcoming/april_oneil_hacktivist.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/bebop_rocksteady.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/casey_jones_jury_rig_justiciar.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/donatello_rad_scientist.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/donatello_the_brains.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/donnie_april_adorkable_duo.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/heroes_in_a_half_shell.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/krang_master_mind.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/leonardo_the_balance.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/leonardo_worldly_warrior.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/michelangelo_on_the_scene.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/michelangelo_the_heart.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/raphael_the_muscle.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/splinter_the_mentor.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/super_shredder.txt create mode 100644 forge-gui/res/tokenscripts/c_a_mutagen_sac.txt diff --git a/forge-core/src/main/java/forge/card/CardRules.java b/forge-core/src/main/java/forge/card/CardRules.java index 450f727c3e4..3d3ffe0648c 100644 --- a/forge-core/src/main/java/forge/card/CardRules.java +++ b/forge-core/src/main/java/forge/card/CardRules.java @@ -331,6 +331,9 @@ public final class CardRules implements ICardCharacteristics { if (hasKeyword("Partner - Father & Son") && b.hasKeyword("Partner - Father & Son")) { legal = true; // God of War Secret Lair gimmick partner commander } + if (hasKeyword("Partner - Character select") && b.hasKeyword("Partner - Character select")) { + legal = true; // TMNT Commander deck gimmick partner commander + } if (hasKeyword("Choose a Background") && b.canBeBackground() || b.hasKeyword("Choose a Background") && canBeBackground()) { legal = true; // commander with background @@ -348,7 +351,7 @@ public final class CardRules implements ICardCharacteristics { } return canBeCommander() && (hasKeyword("Partner") || !this.partnerWith.isEmpty() || hasKeyword("Friends forever") || hasKeyword("Choose a Background") || - hasKeyword("Partner - Father & Son") || hasKeyword("Partner - Survivors") || + hasKeyword("Partner - Father & Son") || hasKeyword("Partner - Survivors") || hasKeyword("Partner - Character select") || hasKeyword("Doctor's companion") || isDoctor()); } diff --git a/forge-game/src/main/java/forge/game/keyword/Keyword.java b/forge-game/src/main/java/forge/game/keyword/Keyword.java index 809b824c07f..65b74ab7276 100644 --- a/forge-game/src/main/java/forge/game/keyword/Keyword.java +++ b/forge-game/src/main/java/forge/game/keyword/Keyword.java @@ -141,8 +141,9 @@ public enum Keyword { OFFSPRING("Offspring", KeywordWithCost.class, false, "You may pay an additional %s as you cast this spell. If you do, when this creature enters, create a 1/1 token copy of it."), OVERLOAD("Overload", KeywordWithCost.class, false, "You may cast this spell for its overload cost. If you do, change its text by replacing all instances of \"target\" with \"each.\""), PARTNER("Partner", Partner.class, true, "You can have two commanders if both have partner."), - PARTNER_SURVIVOR("Partner - Survivors", Partner.class, true, "You can have two commanders if both have this ability."), + PARTNER_SURVIVORS("Partner - Survivors", Partner.class, true, "You can have two commanders if both have this ability."), PARTNER_FATHER_AND_SON("Partner - Father & Son", Partner.class, true, "You can have two commanders if both have this ability."), + PARTNER_CHARACTER_SELECT("Partner - Character select", Partner.class, true, "You can have two commanders if both have this ability."), PERSIST("Persist", SimpleKeyword.class, false, "When this creature dies, if it had no -1/-1 counters on it, return it to the battlefield under its owner's control with a -1/-1 counter on it."), PHASING("Phasing", SimpleKeyword.class, true, "This phases in or out before you untap during each of your untap steps. While it's phased out, it's treated as though it doesn't exist."), PLOT("Plot", KeywordWithCost.class, false, "You may pay %s and exile this card from your hand. Cast it as a sorcery on a later turn without paying its mana cost. Plot only as a sorcery."), diff --git a/forge-gui/res/cardsfolder/upcoming/april_oneil_hacktivist.txt b/forge-gui/res/cardsfolder/upcoming/april_oneil_hacktivist.txt new file mode 100644 index 00000000000..35c0bcdb435 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/april_oneil_hacktivist.txt @@ -0,0 +1,8 @@ +Name:April O'Neil, Hacktivist +ManaCost:3 U +Types:Legendary Creature Human Scientist +PT:1/5 +T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ At the beginning of your end step, draw a card for each card type among spells you've cast this turn. +SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ X +SVar:X:Count$ThisTurnCast_Card.YouCtrl$CardTypes +Oracle:At the beginning of your end step, draw a card for each card type among spells you've cast this turn. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/atreus_impulsive_son.txt b/forge-gui/res/cardsfolder/upcoming/atreus_impulsive_son.txt index c6a78a975db..dd52b26a846 100644 --- a/forge-gui/res/cardsfolder/upcoming/atreus_impulsive_son.txt +++ b/forge-gui/res/cardsfolder/upcoming/atreus_impulsive_son.txt @@ -8,4 +8,4 @@ A:AB$ Draw | Cost$ 3 T | NumCards$ X | SubAbility$ DBDiscard | SpellDescription$ SVar:DBDiscard:DB$ Discard | Mode$ YouChoose | SubAbility$ DBDamage SVar:DBDamage:DB$ DealDamage | NumDmg$ 2 | Defined$ Opponent | SpellDescription$ CARDNAME deals 2 damage to each opponent. SVar:X:Count$YourCountersExperience -Oracle:Reach\n{3}, {T}: Draw a card for each experience counter you have, then discard a card. Atreus, Impulsive Son deals 2 damage to each opponent.\nPartner-Father & son +Oracle:Reach\n{3}, {T}: Draw a card for each experience counter you have, then discard a card. Atreus, Impulsive Son deals 2 damage to each opponent.\nPartner—Father & son diff --git a/forge-gui/res/cardsfolder/upcoming/bebop_rocksteady.txt b/forge-gui/res/cardsfolder/upcoming/bebop_rocksteady.txt new file mode 100644 index 00000000000..6ccc2948003 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/bebop_rocksteady.txt @@ -0,0 +1,8 @@ +Name:Bebop & Rocksteady +ManaCost:1 BG BG +Types:Legendary Creature Boar Rhino Mutant +PT:7/5 +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigSac | TriggerDescription$ Whenever CARDNAME attack or block, sacrifice a permanent unless you discard a card. +T:Mode$ Blocks | ValidCard$ Card.Self | Execute$ TrigSac | Secondary$ True | TriggerDescription$ Whenever CARDNAME attack or block, sacrifice a permanent unless you discard a card. +SVar:TrigSac:DB$ Sacrifice | SacValid$ Permanent | UnlessCost$ Discard<1/Card> | UnlessPayer$ You +Oracle:Whenever Bebop & Rocksteady attack or block, sacrifice a permanent unless you discard a card. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/casey_jones_jury_rig_justiciar.txt b/forge-gui/res/cardsfolder/upcoming/casey_jones_jury_rig_justiciar.txt new file mode 100644 index 00000000000..32ce76b9a98 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/casey_jones_jury_rig_justiciar.txt @@ -0,0 +1,8 @@ +Name:Casey Jones, Jury-Rig Justiciar +ManaCost:1 R +Types:Legendary Creature Human Berserker +PT:2/1 +K:Haste +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDig | TriggerDescription$ When NICKNAME enters, look at the top four cards of your library. You may reveal an artifact card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. +SVar:TrigDig:DB$ Dig | DigNum$ 4 | ChangeNum$ 1 | Optional$ True | ForceRevealToController$ True | ChangeValid$ Artifact | RestRandomOrder$ True +Oracle:Haste\nWhen Casey Jones enters, look at the top four cards of your library. You may reveal an artifact card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. diff --git a/forge-gui/res/cardsfolder/upcoming/donatello_rad_scientist.txt b/forge-gui/res/cardsfolder/upcoming/donatello_rad_scientist.txt new file mode 100644 index 00000000000..844b82add2f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/donatello_rad_scientist.txt @@ -0,0 +1,9 @@ +Name:Donatello, Rad Scientist +ManaCost:5 U +Types:Legendary Creature Mutant Ninja Turtle +PT:5/6 +K:Vigilance +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigTap | TriggerDescription$ When NICKNAME enters, tap up to three target creatures your opponents control. Put a stun counter on each of them. (If a permanent with a stun counter would become untapped, remove one from it instead.) +SVar:TrigTap:DB$ Tap | ValidTgts$ Creature.OppCtrl | TargetMin$ 0 | TargetMax$ 3 | TgtPrompt$ Select up to three target creatures your opponents control | SubAbility$ DBCounter +SVar:DBCounter:DB$ PutCounter | Defined$ Targeted | CounterType$ Stun | CounterNum$ 1 +Oracle:Vigilance (Attacking doesn't cause this creature to tap.)\nWhen Donatello enters, tap up to three target creatures your opponents control. Put a stun counter on each of them. (If a permanent with a stun counter would become untapped, remove one from it instead.) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/donatello_the_brains.txt b/forge-gui/res/cardsfolder/upcoming/donatello_the_brains.txt new file mode 100644 index 00000000000..28a6515d74e --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/donatello_the_brains.txt @@ -0,0 +1,9 @@ +Name:Donatello, the Brains +ManaCost:2 U +Types:Legendary Creature Mutant Ninja Turtle +PT:2/4 +R:Event$ CreateToken | ActiveZones$ Battlefield | ValidToken$ Card.YouCtrl | ReplaceWith$ DBReplace | Description$ If one or more tokens would be created under your control, those tokens plus an additional Mutagen token are created instead. +SVar:DBReplace:DB$ ReplaceToken | Type$ AddToken | Amount$ 1 | TokenScript$ c_a_mutagen_sac +K:Partner - Character select +DeckHas:Ability$Sacrifice|Token & Type$Mutagen +Oracle:If one or more tokens would be created under your control, those tokens plus an additional Mutagen token are created instead.\nPartner—Character select (You can have two commanders if both have this ability.) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/donnie_april_adorkable_duo.txt b/forge-gui/res/cardsfolder/upcoming/donnie_april_adorkable_duo.txt new file mode 100644 index 00000000000..8ecd5c994fe --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/donnie_april_adorkable_duo.txt @@ -0,0 +1,9 @@ +Name:Donnie & April, Adorkable Duo +ManaCost:4 U +Types:Legendary Creature Mutant Ninja Human Turtle +PT:3/3 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigCharm | TriggerDescription$ When NICKNAME enters, ABILITY +SVar:TrigCharm:DB$ Charm | MinCharmNum$ 1 | CharmNum$ 2 | Choices$ DBDraw,DBChangeZone | AdditionalDescription$ or both. Each mode must target a different player. +SVar:DBDraw:DB$ Draw | NumCards$ 2 | ValidTgts$ Player | TargetUnique$ True | SpellDescription$ Target player draws two cards. +SVar:DBChangeZone:DB$ ChangeZone | ValidTgts$ Player | TargetUnique$ True | Hidden$ True | Mandatory$ True | ChangeType$ Artifact.TargetedPlayerOwn,Instant.TargetedPlayerOwn,Sorcery.TargetedPlayerOwn | ChangeTypeDesc$ artifact, instant or sorcery | ChangeNum$ 1 | Origin$ Graveyard | Destination$ Hand | SpellDescription$ Target player returns an artifact, instant, or sorcery card from their graveyard to their hand. +Oracle:When Donnie & April enter, choose one or both. Each mode must target a different player.\n• Target player draws two cards.\n• Target player returns an artifact, instant, or sorcery card from their graveyard to their hand. diff --git a/forge-gui/res/cardsfolder/upcoming/ellie_brick_master.txt b/forge-gui/res/cardsfolder/upcoming/ellie_brick_master.txt index 2823c85f96f..dbf96050654 100644 --- a/forge-gui/res/cardsfolder/upcoming/ellie_brick_master.txt +++ b/forge-gui/res/cardsfolder/upcoming/ellie_brick_master.txt @@ -6,4 +6,4 @@ K:Partner - Survivors T:Mode$ AttackersDeclaredOneTarget | AttackedTarget$ Opponent | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Distract the Horde - Whenever a player attacks one of your opponents, that attacking player creates a tapped 1/1 black Fungus Zombie creature token named Cordyceps Infected that's attacking that opponent. SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ cordyceps_infected | TokenOwner$ TriggeredAttackingPlayer | TokenTapped$ True | TokenAttacking$ TriggeredAttackedTarget DeckHas:Ability$Token & Type$Zombie|Fungus -Oracle:Distract the Horde - Whenever a player attacks one of your opponents, that attacking player creates a tapped 1/1 black Fungus Zombie creature token named Cordyceps Infected that's attacking that opponent.\nPartner — Survivors (You can have two commanders if both have this ability.) +Oracle:Distract the Horde - Whenever a player attacks one of your opponents, that attacking player creates a tapped 1/1 black Fungus Zombie creature token named Cordyceps Infected that's attacking that opponent.\nPartner—Survivors (You can have two commanders if both have this ability.) diff --git a/forge-gui/res/cardsfolder/upcoming/ellie_vengeful_hunter.txt b/forge-gui/res/cardsfolder/upcoming/ellie_vengeful_hunter.txt index 30b5001b11c..b3a9548c401 100644 --- a/forge-gui/res/cardsfolder/upcoming/ellie_vengeful_hunter.txt +++ b/forge-gui/res/cardsfolder/upcoming/ellie_vengeful_hunter.txt @@ -6,4 +6,4 @@ K:Partner - Survivors A:AB$ DealDamage | Cost$ PayLife<2> Sac<1/Creature.Other/another creature> | NumDmg$ 2 | ValidTgts$ Player | SubAbility$ DBPump | SpellDescription$ NICKNAME deals 2 damage to target player and gains indestructible until end of turn. SVar:DBPump:DB$ Pump | Defined$ Self | KW$ Indestructible DeckHas:Ability$Sacrifice -Oracle:Pay 2 life, Sacrifice another creature: Ellie deals 2 damage to target player and gains indestructible until end of turn.\nPartner - Survivors (You can have two commanders if both have this ability.) +Oracle:Pay 2 life, Sacrifice another creature: Ellie deals 2 damage to target player and gains indestructible until end of turn.\nPartner—Survivors (You can have two commanders if both have this ability.) diff --git a/forge-gui/res/cardsfolder/upcoming/heroes_in_a_half_shell.txt b/forge-gui/res/cardsfolder/upcoming/heroes_in_a_half_shell.txt new file mode 100644 index 00000000000..dd8b61bddb8 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/heroes_in_a_half_shell.txt @@ -0,0 +1,12 @@ +Name:Heroes in a Half Shell +ManaCost:W U B R G +Types:Legendary Creature Mutant Ninja Turtle +PT:5/5 +K:Vigilance +K:Menace +K:Trample +K:Haste +T:Mode$ DamageDoneOnce | CombatDamage$ True | ValidSource$ Mutant.YouCtrl,Ninja.YouCtrl,Turtle.YouCtrl | ValidTarget$ Player | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever one or more Mutants, Ninjas, and/or Turtles you control deal combat damage to a player, put a +1/+1 counter on each of those creatures and draw a card. +SVar:DBPutCounter:DB$ PutCounter | Defined$ TriggeredSources | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBDraw +SVar:DBDraw:DB$ Draw +Oracle:Vigilance, menace, trample, haste\nWhenever one or more Mutants, Ninjas, and/or Turtles you control deal combat damage to a player, put a +1/+1 counter on each of those creatures and draw a card. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/joel_resolute_survivor.txt b/forge-gui/res/cardsfolder/upcoming/joel_resolute_survivor.txt index 698539d3352..ae7278635c5 100644 --- a/forge-gui/res/cardsfolder/upcoming/joel_resolute_survivor.txt +++ b/forge-gui/res/cardsfolder/upcoming/joel_resolute_survivor.txt @@ -9,4 +9,4 @@ SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterNum$ 1 | CounterType SVar:DBDraw:DB$ Draw DeckHas:Ability$Counters DeckHints:Ability$Sacrifice|Token -Oracle:Menace\nWhenever a creature token dies, put a +1/+1 counter on Joel and draw a card. This ability triggers only once each turn.\nPartner — Survivors (You can have two commanders if both have this ability.) +Oracle:Menace\nWhenever a creature token dies, put a +1/+1 counter on Joel and draw a card. This ability triggers only once each turn.\nPartner—Survivors (You can have two commanders if both have this ability.) diff --git a/forge-gui/res/cardsfolder/upcoming/krang_master_mind.txt b/forge-gui/res/cardsfolder/upcoming/krang_master_mind.txt new file mode 100644 index 00000000000..61ec7ef3607 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/krang_master_mind.txt @@ -0,0 +1,12 @@ +Name:Krang, Master Mind +ManaCost:6 U U +Types:Legendary Artifact Creature Utrom Warrior +PT:1/4 +K:Affinity:Artifact +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | CheckSVar$ X | SVarCompare$ LT4 | Execute$ TrigDraw | TriggerDescription$ When NICKNAME enters, if you have fewer than four cards in hand, draw cards equal to the difference. +SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ Y +S:Mode$ Continuous | Affected$ Card.Self | AddPower$ Z | Description$ NICKNAME gets +1/+0 for each other artifact you control. +SVar:X:Count$ValidHand Card.YouOwn +SVar:Y:Number$4/Minus.X +SVar:Z:Count$Valid Artifact.Other+YouCtrl +Oracle:Affinity for artifacts (This spell costs {1} less to cast for each artifact you control.)\nWhen Krang enters, if you have fewer than four cards in hand, draw cards equal to the difference.\nKrang gets +1/+0 for each other artifact you control. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/kratos_stoic_father.txt b/forge-gui/res/cardsfolder/upcoming/kratos_stoic_father.txt index c1cba612160..1bbaca1f92e 100644 --- a/forge-gui/res/cardsfolder/upcoming/kratos_stoic_father.txt +++ b/forge-gui/res/cardsfolder/upcoming/kratos_stoic_father.txt @@ -11,4 +11,4 @@ SVar:TrigPutCounter:DB$ PutCounter | ValidTgts$ Creature | CounterType$ P1P1 | C SVar:X:Count$YourCountersExperience DeckHas:Ability$Counters DeckHints:Type$God -Oracle:Whenever you attack with one or more Gods and whenever a God dies, you get an experience counter.\nAt the beginning of your end step, put a number of +1/+1 counters on target creature equal to the number of experience counters you have.\nPartner-Father & son (You can have two commanders if both have this ability.) +Oracle:Whenever you attack with one or more Gods and whenever a God dies, you get an experience counter.\nAt the beginning of your end step, put a number of +1/+1 counters on target creature equal to the number of experience counters you have.\nPartner—Father & son (You can have two commanders if both have this ability.) diff --git a/forge-gui/res/cardsfolder/upcoming/leonardo_the_balance.txt b/forge-gui/res/cardsfolder/upcoming/leonardo_the_balance.txt new file mode 100644 index 00000000000..0b73afc0598 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/leonardo_the_balance.txt @@ -0,0 +1,10 @@ +Name:Leonardo, the Balance +ManaCost:3 W +Types:Legendary Creature Mutant Ninja Turtle +PT:3/3 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.token+YouCtrl | TriggerZones$ Battlefield | Execute$ DBPutCounterAll | OptionalDecider$ You | ResolvedLimit$ 1 | TriggerDescription$ Whenever a token you control enters, you may put a +1/+1 counter on each creature you control. Do this only once each turn. +SVar:DBPutCounterAll:DB$ PutCounterAll | ValidCards$ Creature.YouCtrl | CounterType$ P1P1 | CounterNum$ 1 +A:AB$ PumpAll | Cost$ W U B R G | ValidCards$ Creature.YouCtrl | KW$ Menace & Trample & Lifelink | SpellDescription$ Creatures you control gain menace, trample, and lifelink until end of turn. +K:Partner - Character select +DeckHints:Ability$Token +Oracle:Whenever a token you control enters, you may put a +1/+1 counter on each creature you control. Do this only once each turn.\n{W}{U}{B}{R}{G}: Creatures you control gain menace, trample, and lifelink until end of turn.\nPartner—Character select (You can have two commanders if both have this ability.) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/leonardo_worldly_warrior.txt b/forge-gui/res/cardsfolder/upcoming/leonardo_worldly_warrior.txt new file mode 100644 index 00000000000..371df3dc65a --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/leonardo_worldly_warrior.txt @@ -0,0 +1,8 @@ +Name:Leonardo, Worldly Warrior +ManaCost:7 W +Types:Legendary Creature Mutant Ninja Turtle +PT:5/5 +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ X | EffectZone$ All | Description$ This spell costs {1} less to cast for each creature you control. +K:Double Strike +SVar:X:Count$Valid Creature.YouCtrl +Oracle:This spell costs {1} less to cast for each creature you control.\nDouble strike \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/michelangelo_on_the_scene.txt b/forge-gui/res/cardsfolder/upcoming/michelangelo_on_the_scene.txt new file mode 100644 index 00000000000..b8086d362ff --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/michelangelo_on_the_scene.txt @@ -0,0 +1,11 @@ +Name:Michelangelo, On the Scene +ManaCost:4 G G +Types:Legendary Creature Mutant Ninja Turtle +PT:2/2 +K:Trample +K:etbCounter:P1P1:X:no Condition:NICKNAME enters with a +1/+1 counter on him for each land you control. +SVar:X:Count$Valid Land.YouCtrl +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When NICKNAME dies, return this card to your hand. +SVar:TrigReturn:DB$ ChangeZone | Defined$ TriggeredNewCardLKICopy | Origin$ Graveyard | Destination$ Hand +DeckHas:Ability$Counters +Oracle:Trample (This creature can deal excess combat damage to the player it's attacking.)\nMichelangelo enters with a +1/+1 counter on him for each land you control.\nWhen Michelangelo dies, return this card to your hand. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/michelangelo_the_heart.txt b/forge-gui/res/cardsfolder/upcoming/michelangelo_the_heart.txt new file mode 100644 index 00000000000..d293cad68f2 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/michelangelo_the_heart.txt @@ -0,0 +1,11 @@ +Name:Michelangelo, the Heart +ManaCost:1 G +Types:Legendary Creature Mutant Ninja Turtle +PT:2/1 +K:Trample +T:Mode$ Phase | Phase$ Main | PhaseCount$ 2 | ValidPlayer$ You | CheckSVar$ RaidTest | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Raid (the Fridge) — At the beginning of your second main phase, if you attacked this turn, put a +1/+1 counter on target creature and create a Food token. +SVar:TrigPutCounter:DB$ PutCounter | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBToken +SVar:DBToken:DB$ Token | TokenScript$ c_a_food_sac +K:Partner - Character select +SVar:RaidTest:Count$AttackersDeclared +Oracle:Trample\nRaid (the Fridge) — At the beginning of your second main phase, if you attacked this turn, put a +1/+1 counter on target creature and create a Food token.\nPartner—Character select (You can have two commanders if both have this ability.) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/raphael_the_muscle.txt b/forge-gui/res/cardsfolder/upcoming/raphael_the_muscle.txt new file mode 100644 index 00000000000..bb3d8971ac8 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/raphael_the_muscle.txt @@ -0,0 +1,11 @@ +Name:Raphael, the Muscle +ManaCost:4 R +Types:Legendary Creature Mutant Ninja Turtle +PT:4/4 +R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Creature.YouCtrl+HasCounters | ValidTarget$ Permanent,Player | ReplaceWith$ DmgTwice | Description$ Double all damage that creatures you control with counters on them would deal. +SVar:DmgTwice:DB$ ReplaceEffect | VarName$ DamageAmount | VarValue$ X +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When NICKNAME enters, create a Mutagen token. +SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_mutagen_sac | TokenOwner$ You +K:Partner - Character select +SVar:X:ReplaceCount$DamageAmount/Twice +Oracle:Double all damage that creatures you control with counters on them would deal.\nWhen Raphael enters, create a Mutagen token.\nPartner—Character select (You can have two commanders if both have this ability.) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/splinter_the_mentor.txt b/forge-gui/res/cardsfolder/upcoming/splinter_the_mentor.txt new file mode 100644 index 00000000000..7bba6154b97 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/splinter_the_mentor.txt @@ -0,0 +1,10 @@ +Name:Splinter, the Mentor +ManaCost:1 B +Types:Legendary Creature Mutant Ninja Rat +PT:2/2 +K:Menace +T:Mode$ ChangesZone | ValidCard$ Card.Self,Creature.Other+!token+YouCtrl | Origin$ Battlefield | Destination$ Any | Execute$ TrigToken | TriggerZones$ Battlefield | TriggerDescription$ Whenever NICKNAME or another nontoken creature you control leaves the battlefield, create a Mutagen token. +SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_mutagen_sac | TokenOwner$ You +K:Partner - Character select +DeckHas:Ability$Token & Type$Artifact|Mutagen +Oracle:Menace\nWhenever Splinter or another nontoken creature you control leaves the battlefield, create a Mutagen token.\nPartner—Character select (You can have two commanders if both have this ability.) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/super_shredder.txt b/forge-gui/res/cardsfolder/upcoming/super_shredder.txt new file mode 100644 index 00000000000..e13fd94ded6 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/super_shredder.txt @@ -0,0 +1,9 @@ +Name:Super Shredder +ManaCost:1 B +Types:Legendary Creature Mutant Ninja Human +PT:1/1 +K:Menace +T:Mode$ ChangesZone | ValidCard$ Permanent.Other | Origin$ Battlefield | Destination$ Any | Execute$ TrigPutCounter | TriggerZones$ Battlefield | TriggerDescription$ Whenever another permanent leaves the battlefield, put a +1/+1 counter on CARDNAME. +SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 +DeckHas:Ability$Counters +Oracle:Menace\nWhenever another permanent leaves the battlefield, put a +1/+1 counter on Super Shredder. \ No newline at end of file diff --git a/forge-gui/res/lists/TypeLists.txt b/forge-gui/res/lists/TypeLists.txt index 02d36c77629..d3a368b2758 100644 --- a/forge-gui/res/lists/TypeLists.txt +++ b/forge-gui/res/lists/TypeLists.txt @@ -316,6 +316,7 @@ Troll:Trolls Turtle:Turtles Tyranid:Tyranids Unicorn:Unicorns +Utrom:Utroms Vampire:Vampires Varmint:Varmints Vedalken:Vedalkens @@ -374,6 +375,7 @@ Junk Key:Keys Lander:Landers Map +Mutagen Powerstone:Powerstones Spacecraft:Spacecraft Stone:Stones diff --git a/forge-gui/res/tokenscripts/c_a_mutagen_sac.txt b/forge-gui/res/tokenscripts/c_a_mutagen_sac.txt new file mode 100644 index 00000000000..51db6b5b78c --- /dev/null +++ b/forge-gui/res/tokenscripts/c_a_mutagen_sac.txt @@ -0,0 +1,5 @@ +Name:Mutagen Token +ManaCost:no cost +Types:Artifact Mutagen +A:AB$ PutCounter | Cost$ 1 T Sac<1/CARDNAME/this token> | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ P1P1 | CounterNum$ 1 | SorcerySpeed$ True | SpellDescription$ Put a +1/+1 counter on target creature. Activate only as a sorcery. +Oracle:{1}, {T}, Sacrifice this token: Put a +1/+1 counter on target creature. Activate only as a sorcery. \ No newline at end of file From 808ecde0c045045676178c928f843b510c832db1 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Tue, 14 Oct 2025 08:02:17 +0200 Subject: [PATCH 345/355] Update the_death_of_gwen_stacy.txt --- forge-gui/res/cardsfolder/t/the_death_of_gwen_stacy.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/t/the_death_of_gwen_stacy.txt b/forge-gui/res/cardsfolder/t/the_death_of_gwen_stacy.txt index 1a0f5e8bd23..cb60a96de5c 100644 --- a/forge-gui/res/cardsfolder/t/the_death_of_gwen_stacy.txt +++ b/forge-gui/res/cardsfolder/t/the_death_of_gwen_stacy.txt @@ -10,7 +10,7 @@ SVar:DBDiscard:DB$ Discard | Defined$ Player.NotedForDiscard | Mode$ TgtChoose | SVar:DBLoseLife:DB$ LoseLife | Defined$ NonRememberedOwner | LifeAmount$ 3 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | SubAbility$ DBClearNotes SVar:DBClearNotes:DB$ Pump | Defined$ Player | ClearNotedCardsFor$ Discard -SVar:DBExile:DB$ ChangeZoneAll | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Player | TgtPrompt$ Select any number of target players | TargetMin$ 0 | TargetMax$ MaxTgt | ChangeType$ Card | SubAbility$ DBDraw | StackDescription$ Exile graveyards ({p:Targeted}). | SpellDescription$ Exile any number of target players' graveyards. +SVar:DBExile:DB$ ChangeZoneAll | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Player | TgtPrompt$ Select any number of target players | TargetMin$ 0 | TargetMax$ MaxTgt | ChangeType$ Card | StackDescription$ Exile graveyards ({p:Targeted}). | SpellDescription$ Exile any number of target players' graveyards. DeckHas:Ability$Discard SVar:MaxTgt:PlayerCountPlayers$Amount Oracle:(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)\nI — Destroy target creature.\nII — Each player may discard a card. Each player who doesn't loses 3 life.\nIII — Exile any number of target players' graveyards. From 05a81d00fde84b7c7eb769c8ec2fca7d2f681d31 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Tue, 14 Oct 2025 06:58:59 +0000 Subject: [PATCH 346/355] Update rally_maneuver.txt Closes #8924 --- forge-gui/res/cardsfolder/r/rally_maneuver.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/r/rally_maneuver.txt b/forge-gui/res/cardsfolder/r/rally_maneuver.txt index 236d5786b88..b045f9139d6 100644 --- a/forge-gui/res/cardsfolder/r/rally_maneuver.txt +++ b/forge-gui/res/cardsfolder/r/rally_maneuver.txt @@ -2,6 +2,6 @@ Name:Rally Maneuver ManaCost:2 W Types:Instant A:SP$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature to get +2/+0 and first strike | TargetUnique$ True | NumAtt$ +2 | KW$ First Strike | SubAbility$ DBPumpOther | SpellDescription$ Target creature gets +2/+0 and gains first strike until end of turn. Up to one other target creature gets +0/+2 and gains lifelink until end of turn. -SVar:DBPumpOther:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select another target creature to get +0/+2 and lifelink | TargetUnique$ True | NumDef$ +2 | KW$ Lifelink +SVar:DBPumpOther:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select another target creature to get +0/+2 and lifelink | TargetUnique$ True | TargetMin$ 0 | NumDef$ +2 | KW$ Lifelink DeckHas:Ability$LifeGain Oracle:Target creature gets +2/+0 and gains first strike until end of turn. Up to one other target creature gets +0/+2 and gains lifelink until end of turn. From 17d361d62d0bab3c75ab0c5c524dc9ec9eac06f5 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Tue, 14 Oct 2025 08:53:07 +0000 Subject: [PATCH 347/355] ~ lf --- .../upcoming/april_oneil_hacktivist.txt | 14 ++++++------ .../cardsfolder/upcoming/bebop_rocksteady.txt | 14 ++++++------ .../casey_jones_jury_rig_justiciar.txt | 16 +++++++------- .../upcoming/donatello_rad_scientist.txt | 16 +++++++------- .../upcoming/donatello_the_brains.txt | 16 +++++++------- .../upcoming/donnie_april_adorkable_duo.txt | 18 +++++++-------- .../upcoming/heroes_in_a_half_shell.txt | 22 +++++++++---------- .../upcoming/krang_master_mind.txt | 22 +++++++++---------- .../upcoming/leonardo_the_balance.txt | 18 +++++++-------- .../upcoming/leonardo_worldly_warrior.txt | 14 ++++++------ .../upcoming/michelangelo_on_the_scene.txt | 20 ++++++++--------- .../upcoming/michelangelo_the_heart.txt | 20 ++++++++--------- .../upcoming/raphael_the_muscle.txt | 20 ++++++++--------- .../upcoming/splinter_the_mentor.txt | 18 +++++++-------- .../cardsfolder/upcoming/super_shredder.txt | 16 +++++++------- 15 files changed, 132 insertions(+), 132 deletions(-) diff --git a/forge-gui/res/cardsfolder/upcoming/april_oneil_hacktivist.txt b/forge-gui/res/cardsfolder/upcoming/april_oneil_hacktivist.txt index 35c0bcdb435..9d1b0387845 100644 --- a/forge-gui/res/cardsfolder/upcoming/april_oneil_hacktivist.txt +++ b/forge-gui/res/cardsfolder/upcoming/april_oneil_hacktivist.txt @@ -1,8 +1,8 @@ -Name:April O'Neil, Hacktivist -ManaCost:3 U -Types:Legendary Creature Human Scientist -PT:1/5 -T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ At the beginning of your end step, draw a card for each card type among spells you've cast this turn. -SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ X -SVar:X:Count$ThisTurnCast_Card.YouCtrl$CardTypes +Name:April O'Neil, Hacktivist +ManaCost:3 U +Types:Legendary Creature Human Scientist +PT:1/5 +T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ At the beginning of your end step, draw a card for each card type among spells you've cast this turn. +SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ X +SVar:X:Count$ThisTurnCast_Card.YouCtrl$CardTypes Oracle:At the beginning of your end step, draw a card for each card type among spells you've cast this turn. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/bebop_rocksteady.txt b/forge-gui/res/cardsfolder/upcoming/bebop_rocksteady.txt index 6ccc2948003..4dea5aa9e8b 100644 --- a/forge-gui/res/cardsfolder/upcoming/bebop_rocksteady.txt +++ b/forge-gui/res/cardsfolder/upcoming/bebop_rocksteady.txt @@ -1,8 +1,8 @@ -Name:Bebop & Rocksteady -ManaCost:1 BG BG -Types:Legendary Creature Boar Rhino Mutant -PT:7/5 -T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigSac | TriggerDescription$ Whenever CARDNAME attack or block, sacrifice a permanent unless you discard a card. -T:Mode$ Blocks | ValidCard$ Card.Self | Execute$ TrigSac | Secondary$ True | TriggerDescription$ Whenever CARDNAME attack or block, sacrifice a permanent unless you discard a card. -SVar:TrigSac:DB$ Sacrifice | SacValid$ Permanent | UnlessCost$ Discard<1/Card> | UnlessPayer$ You +Name:Bebop & Rocksteady +ManaCost:1 BG BG +Types:Legendary Creature Boar Rhino Mutant +PT:7/5 +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigSac | TriggerDescription$ Whenever CARDNAME attack or block, sacrifice a permanent unless you discard a card. +T:Mode$ Blocks | ValidCard$ Card.Self | Execute$ TrigSac | Secondary$ True | TriggerDescription$ Whenever CARDNAME attack or block, sacrifice a permanent unless you discard a card. +SVar:TrigSac:DB$ Sacrifice | SacValid$ Permanent | UnlessCost$ Discard<1/Card> | UnlessPayer$ You Oracle:Whenever Bebop & Rocksteady attack or block, sacrifice a permanent unless you discard a card. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/casey_jones_jury_rig_justiciar.txt b/forge-gui/res/cardsfolder/upcoming/casey_jones_jury_rig_justiciar.txt index 32ce76b9a98..97946251d1b 100644 --- a/forge-gui/res/cardsfolder/upcoming/casey_jones_jury_rig_justiciar.txt +++ b/forge-gui/res/cardsfolder/upcoming/casey_jones_jury_rig_justiciar.txt @@ -1,8 +1,8 @@ -Name:Casey Jones, Jury-Rig Justiciar -ManaCost:1 R -Types:Legendary Creature Human Berserker -PT:2/1 -K:Haste -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDig | TriggerDescription$ When NICKNAME enters, look at the top four cards of your library. You may reveal an artifact card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. -SVar:TrigDig:DB$ Dig | DigNum$ 4 | ChangeNum$ 1 | Optional$ True | ForceRevealToController$ True | ChangeValid$ Artifact | RestRandomOrder$ True -Oracle:Haste\nWhen Casey Jones enters, look at the top four cards of your library. You may reveal an artifact card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. +Name:Casey Jones, Jury-Rig Justiciar +ManaCost:1 R +Types:Legendary Creature Human Berserker +PT:2/1 +K:Haste +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDig | TriggerDescription$ When NICKNAME enters, look at the top four cards of your library. You may reveal an artifact card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. +SVar:TrigDig:DB$ Dig | DigNum$ 4 | ChangeNum$ 1 | Optional$ True | ForceRevealToController$ True | ChangeValid$ Artifact | RestRandomOrder$ True +Oracle:Haste\nWhen Casey Jones enters, look at the top four cards of your library. You may reveal an artifact card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. diff --git a/forge-gui/res/cardsfolder/upcoming/donatello_rad_scientist.txt b/forge-gui/res/cardsfolder/upcoming/donatello_rad_scientist.txt index 844b82add2f..fe2d6cdc19a 100644 --- a/forge-gui/res/cardsfolder/upcoming/donatello_rad_scientist.txt +++ b/forge-gui/res/cardsfolder/upcoming/donatello_rad_scientist.txt @@ -1,9 +1,9 @@ -Name:Donatello, Rad Scientist -ManaCost:5 U -Types:Legendary Creature Mutant Ninja Turtle -PT:5/6 -K:Vigilance -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigTap | TriggerDescription$ When NICKNAME enters, tap up to three target creatures your opponents control. Put a stun counter on each of them. (If a permanent with a stun counter would become untapped, remove one from it instead.) -SVar:TrigTap:DB$ Tap | ValidTgts$ Creature.OppCtrl | TargetMin$ 0 | TargetMax$ 3 | TgtPrompt$ Select up to three target creatures your opponents control | SubAbility$ DBCounter -SVar:DBCounter:DB$ PutCounter | Defined$ Targeted | CounterType$ Stun | CounterNum$ 1 +Name:Donatello, Rad Scientist +ManaCost:5 U +Types:Legendary Creature Mutant Ninja Turtle +PT:5/6 +K:Vigilance +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigTap | TriggerDescription$ When NICKNAME enters, tap up to three target creatures your opponents control. Put a stun counter on each of them. (If a permanent with a stun counter would become untapped, remove one from it instead.) +SVar:TrigTap:DB$ Tap | ValidTgts$ Creature.OppCtrl | TargetMin$ 0 | TargetMax$ 3 | TgtPrompt$ Select up to three target creatures your opponents control | SubAbility$ DBCounter +SVar:DBCounter:DB$ PutCounter | Defined$ Targeted | CounterType$ Stun | CounterNum$ 1 Oracle:Vigilance (Attacking doesn't cause this creature to tap.)\nWhen Donatello enters, tap up to three target creatures your opponents control. Put a stun counter on each of them. (If a permanent with a stun counter would become untapped, remove one from it instead.) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/donatello_the_brains.txt b/forge-gui/res/cardsfolder/upcoming/donatello_the_brains.txt index 28a6515d74e..f963d47fd9a 100644 --- a/forge-gui/res/cardsfolder/upcoming/donatello_the_brains.txt +++ b/forge-gui/res/cardsfolder/upcoming/donatello_the_brains.txt @@ -1,9 +1,9 @@ -Name:Donatello, the Brains -ManaCost:2 U -Types:Legendary Creature Mutant Ninja Turtle -PT:2/4 -R:Event$ CreateToken | ActiveZones$ Battlefield | ValidToken$ Card.YouCtrl | ReplaceWith$ DBReplace | Description$ If one or more tokens would be created under your control, those tokens plus an additional Mutagen token are created instead. -SVar:DBReplace:DB$ ReplaceToken | Type$ AddToken | Amount$ 1 | TokenScript$ c_a_mutagen_sac -K:Partner - Character select -DeckHas:Ability$Sacrifice|Token & Type$Mutagen +Name:Donatello, the Brains +ManaCost:2 U +Types:Legendary Creature Mutant Ninja Turtle +PT:2/4 +R:Event$ CreateToken | ActiveZones$ Battlefield | ValidToken$ Card.YouCtrl | ReplaceWith$ DBReplace | Description$ If one or more tokens would be created under your control, those tokens plus an additional Mutagen token are created instead. +SVar:DBReplace:DB$ ReplaceToken | Type$ AddToken | Amount$ 1 | TokenScript$ c_a_mutagen_sac +K:Partner - Character select +DeckHas:Ability$Sacrifice|Token & Type$Mutagen Oracle:If one or more tokens would be created under your control, those tokens plus an additional Mutagen token are created instead.\nPartner—Character select (You can have two commanders if both have this ability.) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/donnie_april_adorkable_duo.txt b/forge-gui/res/cardsfolder/upcoming/donnie_april_adorkable_duo.txt index 8ecd5c994fe..ba44bb71c86 100644 --- a/forge-gui/res/cardsfolder/upcoming/donnie_april_adorkable_duo.txt +++ b/forge-gui/res/cardsfolder/upcoming/donnie_april_adorkable_duo.txt @@ -1,9 +1,9 @@ -Name:Donnie & April, Adorkable Duo -ManaCost:4 U -Types:Legendary Creature Mutant Ninja Human Turtle -PT:3/3 -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigCharm | TriggerDescription$ When NICKNAME enters, ABILITY -SVar:TrigCharm:DB$ Charm | MinCharmNum$ 1 | CharmNum$ 2 | Choices$ DBDraw,DBChangeZone | AdditionalDescription$ or both. Each mode must target a different player. -SVar:DBDraw:DB$ Draw | NumCards$ 2 | ValidTgts$ Player | TargetUnique$ True | SpellDescription$ Target player draws two cards. -SVar:DBChangeZone:DB$ ChangeZone | ValidTgts$ Player | TargetUnique$ True | Hidden$ True | Mandatory$ True | ChangeType$ Artifact.TargetedPlayerOwn,Instant.TargetedPlayerOwn,Sorcery.TargetedPlayerOwn | ChangeTypeDesc$ artifact, instant or sorcery | ChangeNum$ 1 | Origin$ Graveyard | Destination$ Hand | SpellDescription$ Target player returns an artifact, instant, or sorcery card from their graveyard to their hand. -Oracle:When Donnie & April enter, choose one or both. Each mode must target a different player.\n• Target player draws two cards.\n• Target player returns an artifact, instant, or sorcery card from their graveyard to their hand. +Name:Donnie & April, Adorkable Duo +ManaCost:4 U +Types:Legendary Creature Mutant Ninja Human Turtle +PT:3/3 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigCharm | TriggerDescription$ When NICKNAME enters, ABILITY +SVar:TrigCharm:DB$ Charm | MinCharmNum$ 1 | CharmNum$ 2 | Choices$ DBDraw,DBChangeZone | AdditionalDescription$ or both. Each mode must target a different player. +SVar:DBDraw:DB$ Draw | NumCards$ 2 | ValidTgts$ Player | TargetUnique$ True | SpellDescription$ Target player draws two cards. +SVar:DBChangeZone:DB$ ChangeZone | ValidTgts$ Player | TargetUnique$ True | Hidden$ True | Mandatory$ True | ChangeType$ Artifact.TargetedPlayerOwn,Instant.TargetedPlayerOwn,Sorcery.TargetedPlayerOwn | ChangeTypeDesc$ artifact, instant or sorcery | ChangeNum$ 1 | Origin$ Graveyard | Destination$ Hand | SpellDescription$ Target player returns an artifact, instant, or sorcery card from their graveyard to their hand. +Oracle:When Donnie & April enter, choose one or both. Each mode must target a different player.\n• Target player draws two cards.\n• Target player returns an artifact, instant, or sorcery card from their graveyard to their hand. diff --git a/forge-gui/res/cardsfolder/upcoming/heroes_in_a_half_shell.txt b/forge-gui/res/cardsfolder/upcoming/heroes_in_a_half_shell.txt index dd8b61bddb8..61d5aed1558 100644 --- a/forge-gui/res/cardsfolder/upcoming/heroes_in_a_half_shell.txt +++ b/forge-gui/res/cardsfolder/upcoming/heroes_in_a_half_shell.txt @@ -1,12 +1,12 @@ -Name:Heroes in a Half Shell -ManaCost:W U B R G -Types:Legendary Creature Mutant Ninja Turtle -PT:5/5 -K:Vigilance -K:Menace -K:Trample -K:Haste -T:Mode$ DamageDoneOnce | CombatDamage$ True | ValidSource$ Mutant.YouCtrl,Ninja.YouCtrl,Turtle.YouCtrl | ValidTarget$ Player | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever one or more Mutants, Ninjas, and/or Turtles you control deal combat damage to a player, put a +1/+1 counter on each of those creatures and draw a card. -SVar:DBPutCounter:DB$ PutCounter | Defined$ TriggeredSources | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBDraw -SVar:DBDraw:DB$ Draw +Name:Heroes in a Half Shell +ManaCost:W U B R G +Types:Legendary Creature Mutant Ninja Turtle +PT:5/5 +K:Vigilance +K:Menace +K:Trample +K:Haste +T:Mode$ DamageDoneOnce | CombatDamage$ True | ValidSource$ Mutant.YouCtrl,Ninja.YouCtrl,Turtle.YouCtrl | ValidTarget$ Player | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever one or more Mutants, Ninjas, and/or Turtles you control deal combat damage to a player, put a +1/+1 counter on each of those creatures and draw a card. +SVar:DBPutCounter:DB$ PutCounter | Defined$ TriggeredSources | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBDraw +SVar:DBDraw:DB$ Draw Oracle:Vigilance, menace, trample, haste\nWhenever one or more Mutants, Ninjas, and/or Turtles you control deal combat damage to a player, put a +1/+1 counter on each of those creatures and draw a card. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/krang_master_mind.txt b/forge-gui/res/cardsfolder/upcoming/krang_master_mind.txt index 61ec7ef3607..4396b490a88 100644 --- a/forge-gui/res/cardsfolder/upcoming/krang_master_mind.txt +++ b/forge-gui/res/cardsfolder/upcoming/krang_master_mind.txt @@ -1,12 +1,12 @@ -Name:Krang, Master Mind -ManaCost:6 U U -Types:Legendary Artifact Creature Utrom Warrior -PT:1/4 -K:Affinity:Artifact -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | CheckSVar$ X | SVarCompare$ LT4 | Execute$ TrigDraw | TriggerDescription$ When NICKNAME enters, if you have fewer than four cards in hand, draw cards equal to the difference. -SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ Y -S:Mode$ Continuous | Affected$ Card.Self | AddPower$ Z | Description$ NICKNAME gets +1/+0 for each other artifact you control. -SVar:X:Count$ValidHand Card.YouOwn -SVar:Y:Number$4/Minus.X -SVar:Z:Count$Valid Artifact.Other+YouCtrl +Name:Krang, Master Mind +ManaCost:6 U U +Types:Legendary Artifact Creature Utrom Warrior +PT:1/4 +K:Affinity:Artifact +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | CheckSVar$ X | SVarCompare$ LT4 | Execute$ TrigDraw | TriggerDescription$ When NICKNAME enters, if you have fewer than four cards in hand, draw cards equal to the difference. +SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ Y +S:Mode$ Continuous | Affected$ Card.Self | AddPower$ Z | Description$ NICKNAME gets +1/+0 for each other artifact you control. +SVar:X:Count$ValidHand Card.YouOwn +SVar:Y:Number$4/Minus.X +SVar:Z:Count$Valid Artifact.Other+YouCtrl Oracle:Affinity for artifacts (This spell costs {1} less to cast for each artifact you control.)\nWhen Krang enters, if you have fewer than four cards in hand, draw cards equal to the difference.\nKrang gets +1/+0 for each other artifact you control. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/leonardo_the_balance.txt b/forge-gui/res/cardsfolder/upcoming/leonardo_the_balance.txt index 0b73afc0598..1c7b2d49070 100644 --- a/forge-gui/res/cardsfolder/upcoming/leonardo_the_balance.txt +++ b/forge-gui/res/cardsfolder/upcoming/leonardo_the_balance.txt @@ -1,10 +1,10 @@ -Name:Leonardo, the Balance -ManaCost:3 W -Types:Legendary Creature Mutant Ninja Turtle -PT:3/3 -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.token+YouCtrl | TriggerZones$ Battlefield | Execute$ DBPutCounterAll | OptionalDecider$ You | ResolvedLimit$ 1 | TriggerDescription$ Whenever a token you control enters, you may put a +1/+1 counter on each creature you control. Do this only once each turn. -SVar:DBPutCounterAll:DB$ PutCounterAll | ValidCards$ Creature.YouCtrl | CounterType$ P1P1 | CounterNum$ 1 -A:AB$ PumpAll | Cost$ W U B R G | ValidCards$ Creature.YouCtrl | KW$ Menace & Trample & Lifelink | SpellDescription$ Creatures you control gain menace, trample, and lifelink until end of turn. -K:Partner - Character select -DeckHints:Ability$Token +Name:Leonardo, the Balance +ManaCost:3 W +Types:Legendary Creature Mutant Ninja Turtle +PT:3/3 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.token+YouCtrl | TriggerZones$ Battlefield | Execute$ DBPutCounterAll | OptionalDecider$ You | ResolvedLimit$ 1 | TriggerDescription$ Whenever a token you control enters, you may put a +1/+1 counter on each creature you control. Do this only once each turn. +SVar:DBPutCounterAll:DB$ PutCounterAll | ValidCards$ Creature.YouCtrl | CounterType$ P1P1 | CounterNum$ 1 +A:AB$ PumpAll | Cost$ W U B R G | ValidCards$ Creature.YouCtrl | KW$ Menace & Trample & Lifelink | SpellDescription$ Creatures you control gain menace, trample, and lifelink until end of turn. +K:Partner - Character select +DeckHints:Ability$Token Oracle:Whenever a token you control enters, you may put a +1/+1 counter on each creature you control. Do this only once each turn.\n{W}{U}{B}{R}{G}: Creatures you control gain menace, trample, and lifelink until end of turn.\nPartner—Character select (You can have two commanders if both have this ability.) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/leonardo_worldly_warrior.txt b/forge-gui/res/cardsfolder/upcoming/leonardo_worldly_warrior.txt index 371df3dc65a..bf3b0ad8eb6 100644 --- a/forge-gui/res/cardsfolder/upcoming/leonardo_worldly_warrior.txt +++ b/forge-gui/res/cardsfolder/upcoming/leonardo_worldly_warrior.txt @@ -1,8 +1,8 @@ -Name:Leonardo, Worldly Warrior -ManaCost:7 W -Types:Legendary Creature Mutant Ninja Turtle -PT:5/5 -S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ X | EffectZone$ All | Description$ This spell costs {1} less to cast for each creature you control. -K:Double Strike -SVar:X:Count$Valid Creature.YouCtrl +Name:Leonardo, Worldly Warrior +ManaCost:7 W +Types:Legendary Creature Mutant Ninja Turtle +PT:5/5 +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ X | EffectZone$ All | Description$ This spell costs {1} less to cast for each creature you control. +K:Double Strike +SVar:X:Count$Valid Creature.YouCtrl Oracle:This spell costs {1} less to cast for each creature you control.\nDouble strike \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/michelangelo_on_the_scene.txt b/forge-gui/res/cardsfolder/upcoming/michelangelo_on_the_scene.txt index b8086d362ff..2f02e6215a7 100644 --- a/forge-gui/res/cardsfolder/upcoming/michelangelo_on_the_scene.txt +++ b/forge-gui/res/cardsfolder/upcoming/michelangelo_on_the_scene.txt @@ -1,11 +1,11 @@ -Name:Michelangelo, On the Scene -ManaCost:4 G G -Types:Legendary Creature Mutant Ninja Turtle -PT:2/2 -K:Trample -K:etbCounter:P1P1:X:no Condition:NICKNAME enters with a +1/+1 counter on him for each land you control. -SVar:X:Count$Valid Land.YouCtrl -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When NICKNAME dies, return this card to your hand. -SVar:TrigReturn:DB$ ChangeZone | Defined$ TriggeredNewCardLKICopy | Origin$ Graveyard | Destination$ Hand -DeckHas:Ability$Counters +Name:Michelangelo, On the Scene +ManaCost:4 G G +Types:Legendary Creature Mutant Ninja Turtle +PT:2/2 +K:Trample +K:etbCounter:P1P1:X:no Condition:NICKNAME enters with a +1/+1 counter on him for each land you control. +SVar:X:Count$Valid Land.YouCtrl +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When NICKNAME dies, return this card to your hand. +SVar:TrigReturn:DB$ ChangeZone | Defined$ TriggeredNewCardLKICopy | Origin$ Graveyard | Destination$ Hand +DeckHas:Ability$Counters Oracle:Trample (This creature can deal excess combat damage to the player it's attacking.)\nMichelangelo enters with a +1/+1 counter on him for each land you control.\nWhen Michelangelo dies, return this card to your hand. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/michelangelo_the_heart.txt b/forge-gui/res/cardsfolder/upcoming/michelangelo_the_heart.txt index d293cad68f2..f501f177008 100644 --- a/forge-gui/res/cardsfolder/upcoming/michelangelo_the_heart.txt +++ b/forge-gui/res/cardsfolder/upcoming/michelangelo_the_heart.txt @@ -1,11 +1,11 @@ -Name:Michelangelo, the Heart -ManaCost:1 G -Types:Legendary Creature Mutant Ninja Turtle -PT:2/1 -K:Trample -T:Mode$ Phase | Phase$ Main | PhaseCount$ 2 | ValidPlayer$ You | CheckSVar$ RaidTest | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Raid (the Fridge) — At the beginning of your second main phase, if you attacked this turn, put a +1/+1 counter on target creature and create a Food token. -SVar:TrigPutCounter:DB$ PutCounter | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBToken -SVar:DBToken:DB$ Token | TokenScript$ c_a_food_sac -K:Partner - Character select -SVar:RaidTest:Count$AttackersDeclared +Name:Michelangelo, the Heart +ManaCost:1 G +Types:Legendary Creature Mutant Ninja Turtle +PT:2/1 +K:Trample +T:Mode$ Phase | Phase$ Main | PhaseCount$ 2 | ValidPlayer$ You | CheckSVar$ RaidTest | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Raid (the Fridge) — At the beginning of your second main phase, if you attacked this turn, put a +1/+1 counter on target creature and create a Food token. +SVar:TrigPutCounter:DB$ PutCounter | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBToken +SVar:DBToken:DB$ Token | TokenScript$ c_a_food_sac +K:Partner - Character select +SVar:RaidTest:Count$AttackersDeclared Oracle:Trample\nRaid (the Fridge) — At the beginning of your second main phase, if you attacked this turn, put a +1/+1 counter on target creature and create a Food token.\nPartner—Character select (You can have two commanders if both have this ability.) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/raphael_the_muscle.txt b/forge-gui/res/cardsfolder/upcoming/raphael_the_muscle.txt index bb3d8971ac8..7c8b4212bec 100644 --- a/forge-gui/res/cardsfolder/upcoming/raphael_the_muscle.txt +++ b/forge-gui/res/cardsfolder/upcoming/raphael_the_muscle.txt @@ -1,11 +1,11 @@ -Name:Raphael, the Muscle -ManaCost:4 R -Types:Legendary Creature Mutant Ninja Turtle -PT:4/4 -R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Creature.YouCtrl+HasCounters | ValidTarget$ Permanent,Player | ReplaceWith$ DmgTwice | Description$ Double all damage that creatures you control with counters on them would deal. -SVar:DmgTwice:DB$ ReplaceEffect | VarName$ DamageAmount | VarValue$ X -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When NICKNAME enters, create a Mutagen token. -SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_mutagen_sac | TokenOwner$ You -K:Partner - Character select -SVar:X:ReplaceCount$DamageAmount/Twice +Name:Raphael, the Muscle +ManaCost:4 R +Types:Legendary Creature Mutant Ninja Turtle +PT:4/4 +R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Creature.YouCtrl+HasCounters | ValidTarget$ Permanent,Player | ReplaceWith$ DmgTwice | Description$ Double all damage that creatures you control with counters on them would deal. +SVar:DmgTwice:DB$ ReplaceEffect | VarName$ DamageAmount | VarValue$ X +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When NICKNAME enters, create a Mutagen token. +SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_mutagen_sac | TokenOwner$ You +K:Partner - Character select +SVar:X:ReplaceCount$DamageAmount/Twice Oracle:Double all damage that creatures you control with counters on them would deal.\nWhen Raphael enters, create a Mutagen token.\nPartner—Character select (You can have two commanders if both have this ability.) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/splinter_the_mentor.txt b/forge-gui/res/cardsfolder/upcoming/splinter_the_mentor.txt index 7bba6154b97..714f02dcdfd 100644 --- a/forge-gui/res/cardsfolder/upcoming/splinter_the_mentor.txt +++ b/forge-gui/res/cardsfolder/upcoming/splinter_the_mentor.txt @@ -1,10 +1,10 @@ -Name:Splinter, the Mentor -ManaCost:1 B -Types:Legendary Creature Mutant Ninja Rat -PT:2/2 -K:Menace -T:Mode$ ChangesZone | ValidCard$ Card.Self,Creature.Other+!token+YouCtrl | Origin$ Battlefield | Destination$ Any | Execute$ TrigToken | TriggerZones$ Battlefield | TriggerDescription$ Whenever NICKNAME or another nontoken creature you control leaves the battlefield, create a Mutagen token. -SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_mutagen_sac | TokenOwner$ You -K:Partner - Character select -DeckHas:Ability$Token & Type$Artifact|Mutagen +Name:Splinter, the Mentor +ManaCost:1 B +Types:Legendary Creature Mutant Ninja Rat +PT:2/2 +K:Menace +T:Mode$ ChangesZone | ValidCard$ Card.Self,Creature.Other+!token+YouCtrl | Origin$ Battlefield | Destination$ Any | Execute$ TrigToken | TriggerZones$ Battlefield | TriggerDescription$ Whenever NICKNAME or another nontoken creature you control leaves the battlefield, create a Mutagen token. +SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_mutagen_sac | TokenOwner$ You +K:Partner - Character select +DeckHas:Ability$Token & Type$Artifact|Mutagen Oracle:Menace\nWhenever Splinter or another nontoken creature you control leaves the battlefield, create a Mutagen token.\nPartner—Character select (You can have two commanders if both have this ability.) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/super_shredder.txt b/forge-gui/res/cardsfolder/upcoming/super_shredder.txt index e13fd94ded6..1b3164b9ea4 100644 --- a/forge-gui/res/cardsfolder/upcoming/super_shredder.txt +++ b/forge-gui/res/cardsfolder/upcoming/super_shredder.txt @@ -1,9 +1,9 @@ -Name:Super Shredder -ManaCost:1 B -Types:Legendary Creature Mutant Ninja Human -PT:1/1 -K:Menace -T:Mode$ ChangesZone | ValidCard$ Permanent.Other | Origin$ Battlefield | Destination$ Any | Execute$ TrigPutCounter | TriggerZones$ Battlefield | TriggerDescription$ Whenever another permanent leaves the battlefield, put a +1/+1 counter on CARDNAME. -SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 -DeckHas:Ability$Counters +Name:Super Shredder +ManaCost:1 B +Types:Legendary Creature Mutant Ninja Human +PT:1/1 +K:Menace +T:Mode$ ChangesZone | ValidCard$ Permanent.Other | Origin$ Battlefield | Destination$ Any | Execute$ TrigPutCounter | TriggerZones$ Battlefield | TriggerDescription$ Whenever another permanent leaves the battlefield, put a +1/+1 counter on CARDNAME. +SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 +DeckHas:Ability$Counters Oracle:Menace\nWhenever another permanent leaves the battlefield, put a +1/+1 counter on Super Shredder. \ No newline at end of file From 6617e2627c942427ccef592277694d8d3e6d1c3a Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Thu, 18 Sep 2025 07:25:15 +0200 Subject: [PATCH 348/355] Conquest: make ColorButton instead of ColorFilter --- .../src/forge/card/ColorSetImage.java | 38 --- .../planarconquest/ConquestAEtherScreen.java | 126 +++++--- .../planarconquest/ConquestUtil.java | 282 +++++------------- 3 files changed, 160 insertions(+), 286 deletions(-) delete mode 100644 forge-gui-mobile/src/forge/card/ColorSetImage.java diff --git a/forge-gui-mobile/src/forge/card/ColorSetImage.java b/forge-gui-mobile/src/forge/card/ColorSetImage.java deleted file mode 100644 index 8e874be9778..00000000000 --- a/forge-gui-mobile/src/forge/card/ColorSetImage.java +++ /dev/null @@ -1,38 +0,0 @@ -package forge.card; - -import forge.Forge; -import forge.Graphics; -import forge.assets.FImage; -import forge.localinstance.skin.FSkinProp; - -public class ColorSetImage implements FImage { - private final ColorSet colorSet; - private final int shardCount; - - public ColorSetImage(ColorSet colorSet0) { - colorSet = colorSet0; - shardCount = colorSet.getOrderedColors().size(); - } - - @Override - public float getWidth() { - return Forge.getAssets().images().get(FSkinProp.IMG_MANA_W).getWidth() * shardCount; - } - - @Override - public float getHeight() { - return Forge.getAssets().images().get(FSkinProp.IMG_MANA_W).getHeight(); - } - - @Override - public void draw(Graphics g, float x, float y, float w, float h) { - float imageSize = w / shardCount; - if (imageSize > h) { - imageSize = h; - float w0 = imageSize * shardCount; - x += (w - w0) / 2; - w = w0; - } - CardFaceSymbols.drawColorSet(g, colorSet, x, y, imageSize); - } -} diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestAEtherScreen.java b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestAEtherScreen.java index f13d3ceb3a1..797dc82bd62 100644 --- a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestAEtherScreen.java +++ b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestAEtherScreen.java @@ -1,9 +1,13 @@ package forge.screens.planarconquest; +import java.util.Arrays; +import java.util.Comparator; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.function.Function; import java.util.function.Predicate; +import java.util.stream.Collectors; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.Rectangle; @@ -14,25 +18,27 @@ import com.google.common.collect.Iterables; import forge.Forge; import forge.Graphics; import forge.animation.ForgeAnimation; +import forge.assets.FImage; import forge.assets.FSkin; import forge.assets.FSkinColor; import forge.assets.FSkinFont; import forge.assets.FSkinTexture; import forge.assets.TextRenderer; +import forge.card.CardFaceSymbols; import forge.card.CardRarity; import forge.card.CardRenderer; import forge.card.CardRenderer.CardStackPosition; import forge.card.CardZoom; import forge.card.ColorSet; -import forge.card.ColorSetImage; +import forge.card.MagicColor; import forge.gamemodes.planarconquest.ConquestCommander; import forge.gamemodes.planarconquest.ConquestData; import forge.gamemodes.planarconquest.ConquestPlane; import forge.gamemodes.planarconquest.ConquestPreferences.CQPref; import forge.gamemodes.planarconquest.ConquestUtil; -import forge.gamemodes.planarconquest.ConquestUtil.AEtherFilter; import forge.item.PaperCard; import forge.localinstance.skin.FSkinProp; +import forge.localinstance.skin.IHasSkinProp; import forge.model.FModel; import forge.screens.FScreen; import forge.toolbox.FCardPanel; @@ -54,10 +60,10 @@ public class ConquestAEtherScreen extends FScreen { private final Set filteredPool = new HashSet<>(); private final Set strictPool = new HashSet<>(); - private final FilterButton btnColorFilter = add(new FilterButton(Forge.getLocalizer().getMessage("lblColor"), ConquestUtil.COLOR_FILTERS)); - private final FilterButton btnTypeFilter = add(new FilterButton(Forge.getLocalizer().getMessage("lblType"), ConquestUtil.TYPE_FILTERS)); - private final FilterButton btnRarityFilter = add(new FilterButton(Forge.getLocalizer().getMessage("lblRarity"), ConquestUtil.RARITY_FILTERS)); - private final FilterButton btnCMCFilter = add(new FilterButton(Forge.getLocalizer().getMessage("lblCMC"), ConquestUtil.CMC_FILTERS)); + private final ColorButton btnColorFilter = add(new ColorButton(Forge.getLocalizer().getMessage("lblColor"))); + private final FilterButton btnTypeFilter = add(new FilterButton(Forge.getLocalizer().getMessage("lblType"), ConquestUtil.TypeFilter.values())); + private final FilterButton btnRarityFilter = add(new FilterButton(Forge.getLocalizer().getMessage("lblRarity"), ConquestUtil.RarityFilter.values())); + private final FilterButton btnCMCFilter = add(new FilterButton(Forge.getLocalizer().getMessage("lblCMC"), ConquestUtil.CMCFilter.values())); private final FLabel lblShards = add(new FLabel.Builder().font(LABEL_FONT).align(Align.center).parseSymbols().build()); @@ -93,10 +99,10 @@ public class ConquestAEtherScreen extends FScreen { } private void resetFilters() { - btnColorFilter.setSelectedOption(ConquestUtil.getColorFilter(commander.getCard().getRules().getColorIdentity())); - btnTypeFilter.setSelectedOption(AEtherFilter.CREATURE); - btnRarityFilter.setSelectedOption(AEtherFilter.COMMON); - btnCMCFilter.setSelectedOption(AEtherFilter.CMC_LOW_MID); + btnColorFilter.setSelectedOption(commander.getCard().getRules().getColorIdentity()); + btnTypeFilter.setSelectedOption(ConquestUtil.TypeFilter.CREATURE); + btnRarityFilter.setSelectedOption(ConquestUtil.RarityFilter.COMMON); + btnCMCFilter.setSelectedOption(ConquestUtil.CMCFilter.CMC_LOW_MID); } private void updateFilteredPool() { @@ -344,18 +350,18 @@ public class ConquestAEtherScreen extends FScreen { } } - private class FilterButton extends FLabel implements Predicate { + private abstract class AbstractFilterButton extends FLabel implements Predicate { private final String caption; - private final List options; - private AEtherFilter selectedOption; + private final List options; + protected T selectedOption; - private FilterButton(String caption0, AEtherFilter[] options0) { + private AbstractFilterButton(String caption0, T[] options0, final Function display) { super(new FLabel.Builder().iconInBackground().pressedColor(FILTER_BUTTON_PRESSED_COLOR) .textColor(FILTER_BUTTON_TEXT_COLOR).alphaComposite(1f).align(Align.center)); caption = caption0; options = ImmutableList.copyOf(options0); setSelectedOption(options.get(0)); - setCommand(e -> GuiChoose.getChoices(Forge.getLocalizer().getMessage("lblSelectCaptionFilter", caption), 0, 1, options, Set.of(selectedOption), null, result -> { + setCommand(e -> GuiChoose.getChoices(Forge.getLocalizer().getMessage("lblSelectCaptionFilter", caption), 0, 1, options, Set.of(selectedOption), display, result -> { if (!result.isEmpty()) { setSelectedOption(result.get(0)); updateFilteredPool(); @@ -363,30 +369,13 @@ public class ConquestAEtherScreen extends FScreen { })); } - private void setSelectedOption(AEtherFilter selectedOption0) { - if (selectedOption == selectedOption0) { return; } + public void setSelectedOption(T selectedOption0) { + if (selectedOption == selectedOption0) { + return; + } selectedOption = selectedOption0; - - FSkinProp skinProp = selectedOption.getSkinProp(); - if (skinProp != null) { - setIcon(FSkin.getImages().get(skinProp)); - } - else { - ColorSet color = selectedOption.getColor(); - if (color != null) { - setIcon(new ColorSetImage(color)); - } - else { - System.out.println("No icon for filter " + selectedOption.name()); - setIcon(null); - } - } } - @Override - public boolean test(PaperCard card) { - return selectedOption.test(card); - } @Override protected void drawContent(Graphics g, float w, float h, final boolean pressed) { @@ -396,4 +385,69 @@ public class ConquestAEtherScreen extends FScreen { super.drawContent(g, w, h, pressed); } } + + private class ColorButton extends AbstractFilterButton { + private ColorButton(String caption0) { + super(caption0, Arrays.stream(ColorSet.values()).sorted(Comparator.comparing(ColorSet::getOrderWeight)).toArray(ColorSet[]::new), + c -> "Playable in " + c.stream().map(MagicColor.Color::getSymbol).collect(Collectors.joining())); + } + + @Override + public void setSelectedOption(ColorSet selectedOption0) { + super.setSelectedOption(selectedOption0); + + setIcon(new ColorSetImage(selectedOption)); + } + + @Override + public boolean test(PaperCard card) { + return card.getRules().getColorIdentity().hasNoColorsExcept(selectedOption); + } + + private record ColorSetImage(ColorSet colorSet, int shardCount) implements FImage { + public ColorSetImage(ColorSet colorSet0) { + this(colorSet0, colorSet0.getOrderedColors().size()); + } + + @Override + public float getWidth() { + return Forge.getAssets().images().get(FSkinProp.IMG_MANA_W).getWidth() * shardCount; + } + + @Override + public float getHeight() { + return Forge.getAssets().images().get(FSkinProp.IMG_MANA_W).getHeight(); + } + + @Override + public void draw(Graphics g, float x, float y, float w, float h) { + float imageSize = w / shardCount; + if (imageSize > h) { + imageSize = h; + float w0 = imageSize * shardCount; + x += (w - w0) / 2; + w = w0; + } + CardFaceSymbols.drawColorSet(g, colorSet, x, y, imageSize); + } + } + } + + private class FilterButton & IHasSkinProp & Predicate> extends AbstractFilterButton { + private FilterButton(String caption0, T[] options0) { + super(caption0, options0, null); + } + + @Override + public void setSelectedOption(T selectedOption0) { + super.setSelectedOption(selectedOption0); + + setIcon(FSkin.getImages().get(selectedOption.getSkinProp())); + } + + @Override + public boolean test(PaperCard card) { + return selectedOption.test(card); + } + } } diff --git a/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java b/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java index 19912f1e05f..46a81c04541 100644 --- a/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java +++ b/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java @@ -215,220 +215,23 @@ public class ConquestUtil { }; } - public enum AEtherFilter implements IHasSkinProp, Predicate { - C (null, new ColorFilter(MagicColor.COLORLESS)), - W (null, new ColorFilter(MagicColor.WHITE)), - U (null, new ColorFilter(MagicColor.BLUE)), - B (null, new ColorFilter(MagicColor.BLACK)), - R (null, new ColorFilter(MagicColor.RED)), - G (null, new ColorFilter(MagicColor.GREEN)), - - WU (null, new ColorFilter(MagicColor.WHITE | MagicColor.BLUE)), - WB (null, new ColorFilter(MagicColor.WHITE | MagicColor.BLACK)), - UB (null, new ColorFilter(MagicColor.BLUE | MagicColor.BLACK)), - UR (null, new ColorFilter(MagicColor.BLUE | MagicColor.RED)), - BR (null, new ColorFilter(MagicColor.BLACK | MagicColor.RED)), - BG (null, new ColorFilter(MagicColor.BLACK | MagicColor.GREEN)), - RG (null, new ColorFilter(MagicColor.RED | MagicColor.GREEN)), - RW (null, new ColorFilter(MagicColor.RED | MagicColor.WHITE)), - GW (null, new ColorFilter(MagicColor.GREEN | MagicColor.WHITE)), - GU (null, new ColorFilter(MagicColor.GREEN | MagicColor.BLUE)), - - WUB (null, new ColorFilter(MagicColor.WHITE | MagicColor.BLUE | MagicColor.BLACK)), - WBG (null, new ColorFilter(MagicColor.WHITE | MagicColor.BLACK | MagicColor.GREEN)), - UBR (null, new ColorFilter(MagicColor.BLUE | MagicColor.BLACK | MagicColor.RED)), - URW (null, new ColorFilter(MagicColor.BLUE | MagicColor.RED | MagicColor.WHITE)), - BRG (null, new ColorFilter(MagicColor.BLACK | MagicColor.RED | MagicColor.GREEN)), - BGU (null, new ColorFilter(MagicColor.BLACK | MagicColor.GREEN | MagicColor.BLUE)), - RGW (null, new ColorFilter(MagicColor.RED | MagicColor.GREEN | MagicColor.WHITE)), - RWB (null, new ColorFilter(MagicColor.RED | MagicColor.WHITE | MagicColor.BLACK)), - GWU (null, new ColorFilter(MagicColor.GREEN | MagicColor.WHITE | MagicColor.BLUE)), - GUR (null, new ColorFilter(MagicColor.GREEN | MagicColor.BLUE | MagicColor.RED)), - - WUBR (null, new ColorFilter(MagicColor.WHITE | MagicColor.BLUE | MagicColor.BLACK | MagicColor.RED)), - WUBG (null, new ColorFilter(MagicColor.WHITE | MagicColor.BLUE | MagicColor.BLACK | MagicColor.GREEN)), - WURG (null, new ColorFilter(MagicColor.WHITE | MagicColor.BLUE | MagicColor.RED | MagicColor.GREEN)), - WBRG (null, new ColorFilter(MagicColor.WHITE | MagicColor.BLACK | MagicColor.RED | MagicColor.GREEN)), - UBRG (null, new ColorFilter(MagicColor.BLUE | MagicColor.BLACK | MagicColor.RED | MagicColor.GREEN)), - - WUBRG (null, new ColorFilter(MagicColor.ALL_COLORS)), - - CREATURE (FSkinProp.IMG_CREATURE, new TypeFilter(EnumSet.of(CoreType.Creature), "Creature")), - NONCREATURE_PERMANENT (FSkinProp.IMG_ENCHANTMENT, new TypeFilter(EnumSet.of(CoreType.Artifact, CoreType.Enchantment, CoreType.Planeswalker, CoreType.Land), EnumSet.of(CoreType.Creature), "Noncreature Permanent")), - INSTANT_SORCERY (FSkinProp.IMG_SORCERY, new TypeFilter(EnumSet.of(CoreType.Instant, CoreType.Sorcery), "Instant or Sorcery")), - - COMMON (FSkinProp.IMG_PW_BADGE_COMMON, new RarityFilter(EnumSet.of(CardRarity.Common, CardRarity.Uncommon, CardRarity.Rare, CardRarity.Special, CardRarity.MythicRare))), - UNCOMMON (FSkinProp.IMG_PW_BADGE_UNCOMMON, new RarityFilter(EnumSet.of(CardRarity.Uncommon, CardRarity.Rare, CardRarity.Special, CardRarity.MythicRare))), - RARE (FSkinProp.IMG_PW_BADGE_RARE, new RarityFilter(EnumSet.of(CardRarity.Rare, CardRarity.Special, CardRarity.MythicRare))), - MYTHIC (FSkinProp.IMG_PW_BADGE_MYTHIC, new RarityFilter(EnumSet.of(CardRarity.MythicRare))), - - CMC_LOW (FSkinProp.IMG_CMC_LOW, new CMCFilter(0, 3)), - CMC_LOW_MID (FSkinProp.IMG_CMC_LOW_MID, new CMCFilter(2, 5)), - CMC_MID_HIGH (FSkinProp.IMG_CMC_MID_HIGH, new CMCFilter(4, 7)), - CMC_HIGH (FSkinProp.IMG_CMC_HIGH, new CMCFilter(6, -1)); - + public enum TypeFilter implements IHasSkinProp, Predicate + { + CREATURE (FSkinProp.IMG_CREATURE, EnumSet.of(CoreType.Creature), "Creature"), + NONCREATURE_PERMANENT (FSkinProp.IMG_ENCHANTMENT, EnumSet.of(CoreType.Artifact, CoreType.Enchantment, CoreType.Planeswalker, CoreType.Land), EnumSet.of(CoreType.Creature), "Noncreature Permanent"), + INSTANT_SORCERY (FSkinProp.IMG_SORCERY, EnumSet.of(CoreType.Instant, CoreType.Sorcery), "Instant or Sorcery") + ; private final FSkinProp skinProp; - private final Predicate predicate; - - AEtherFilter(final FSkinProp skinProp0, final Predicate predicate0) { - skinProp = skinProp0; - predicate = predicate0; - } - - @Override - public FSkinProp getSkinProp() { - return skinProp; - } - - @Override - public boolean test(PaperCard card) { - return predicate.test(card); - } - - public ColorSet getColor() { - if (predicate instanceof ColorFilter cf) { - return cf.color; - } - return null; - } - - public CardRarity getRarity() { - return getRarity(0d); - } - public CardRarity getRarity(double random) { - if (predicate instanceof RarityFilter rf) { - return rf.getRarity(random); - } - return null; - } - - @Override - public String toString() { - return predicate.toString(); - } - } - - public static AEtherFilter getColorFilter(ColorSet color) { - StringBuilder name = new StringBuilder(); - for (MagicColor.Color s : color.getOrderedColors()) { - name.append(s.getShortName()); - } - try { - return AEtherFilter.valueOf(name.toString()); - } - catch (Exception e) { - System.err.println("No color filter with name " + name); - return AEtherFilter.WUBRG; //return 5-color filter as fallback - } - } - - public static void updateRarityFilterOdds(ConquestPreferences prefs) { - - Map odds = Maps.newEnumMap(CardRarity.class); - if (prefs.getPrefBoolean(CQPref.AETHER_USE_DEFAULT_RARITY_ODDS)) { - odds.put(CardRarity.Common, 1d); - odds.put(CardRarity.Uncommon, 0.17); - odds.put(CardRarity.Rare, 0.03); - odds.put(CardRarity.MythicRare, 0.005); - } else { - double commonsPerBooster = prefs.getPrefInt(CQPref.BOOSTER_COMMONS); - double uncommonPerBooster = prefs.getPrefInt(CQPref.BOOSTER_UNCOMMONS); - double raresPerBooster = prefs.getPrefInt(CQPref.BOOSTER_RARES); - double mythicsPerBooster = raresPerBooster / (double)prefs.getPrefInt(CQPref.BOOSTERS_PER_MYTHIC); - - odds.put(CardRarity.Common, 1d); - odds.put(CardRarity.Uncommon, uncommonPerBooster / commonsPerBooster); - odds.put(CardRarity.Rare, raresPerBooster / commonsPerBooster); - odds.put(CardRarity.MythicRare, mythicsPerBooster / commonsPerBooster); - } - - for (AEtherFilter filter : RARITY_FILTERS) { - ((RarityFilter)filter.predicate).updateOdds(odds); - } - } - - public static final AEtherFilter[] COLOR_FILTERS = new AEtherFilter[] { - AEtherFilter.C, - AEtherFilter.W, - AEtherFilter.U, - AEtherFilter.B, - AEtherFilter.R, - AEtherFilter.G, - AEtherFilter.WU, - AEtherFilter.WB, - AEtherFilter.UB, - AEtherFilter.UR, - AEtherFilter.BR, - AEtherFilter.BG, - AEtherFilter.RG, - AEtherFilter.RW, - AEtherFilter.GW, - AEtherFilter.GU, - AEtherFilter.WUB, - AEtherFilter.WBG, - AEtherFilter.UBR, - AEtherFilter.URW, - AEtherFilter.BRG, - AEtherFilter.BGU, - AEtherFilter.RGW, - AEtherFilter.RWB, - AEtherFilter.GWU, - AEtherFilter.GUR, - AEtherFilter.WUBR, - AEtherFilter.WUBG, - AEtherFilter.WURG, - AEtherFilter.WBRG, - AEtherFilter.UBRG, - AEtherFilter.WUBRG}; - - public static final AEtherFilter[] TYPE_FILTERS = new AEtherFilter[] { - AEtherFilter.CREATURE, - AEtherFilter.NONCREATURE_PERMANENT, - AEtherFilter.INSTANT_SORCERY }; - - public static final AEtherFilter[] RARITY_FILTERS = new AEtherFilter[] { - AEtherFilter.COMMON, - AEtherFilter.UNCOMMON, - AEtherFilter.RARE, - AEtherFilter.MYTHIC }; - - public static final AEtherFilter[] CMC_FILTERS = new AEtherFilter[] { - AEtherFilter.CMC_LOW, - AEtherFilter.CMC_LOW_MID, - AEtherFilter.CMC_MID_HIGH, - AEtherFilter.CMC_HIGH }; - - private static class ColorFilter implements Predicate { - private final ColorSet color; - - private ColorFilter(int colorMask0) { - color = ColorSet.fromMask(colorMask0); - } - - @Override - public boolean test(PaperCard card) { - return card.getRules().getColorIdentity().hasNoColorsExcept(color); - } - @Override - public String toString() { - StringBuilder sb = new StringBuilder("Playable in "); - for (MagicColor.Color c : color.getOrderedColors()) { - sb.append(c.getSymbol()); - } - return sb.toString(); - } - } - - private static class TypeFilter implements Predicate { private final Iterable types; private final Iterable nonTypes; private final String caption; - private TypeFilter(Iterable types0, final String caption0) { - this(types0, null, caption0); + private TypeFilter(FSkinProp skinProp, Iterable types0, final String caption0) { + this(skinProp, types0, null, caption0); } - private TypeFilter(Iterable types0, Iterable nonTypes0, final String caption0) { + private TypeFilter(FSkinProp skinProp0, Iterable types0, Iterable nonTypes0, final String caption0) { + skinProp = skinProp0; types = types0; nonTypes = nonTypes0; caption = caption0; @@ -452,22 +255,38 @@ public class ConquestUtil { return false; } @Override + public FSkinProp getSkinProp() { + return skinProp; + } + @Override public String toString() { return caption; } } - private static class RarityFilter implements Predicate { + + public enum RarityFilter implements IHasSkinProp, Predicate + { + COMMON (FSkinProp.IMG_PW_BADGE_COMMON, EnumSet.of(CardRarity.Common, CardRarity.Uncommon, CardRarity.Rare, CardRarity.Special, CardRarity.MythicRare)), + UNCOMMON (FSkinProp.IMG_PW_BADGE_UNCOMMON, EnumSet.of(CardRarity.Uncommon, CardRarity.Rare, CardRarity.Special, CardRarity.MythicRare)), + RARE (FSkinProp.IMG_PW_BADGE_RARE, EnumSet.of(CardRarity.Rare, CardRarity.Special, CardRarity.MythicRare)), + MYTHIC (FSkinProp.IMG_PW_BADGE_MYTHIC, EnumSet.of(CardRarity.MythicRare)), + ; + private final FSkinProp skinProp; private final Map rarityOdds; private String caption = ""; - private RarityFilter(Iterable rarities0) { + private RarityFilter(FSkinProp skinProp0, Iterable rarities0) { + skinProp = skinProp0; rarityOdds = Maps.newEnumMap(CardRarity.class); for (CardRarity rarity : rarities0) { rarityOdds.put(rarity, 0d); //values will be set later } } + public CardRarity getRarity() { + return getRarity(0d); + } public CardRarity getRarity(double random) { double total = 0d; CardRarity rarity = null; @@ -518,17 +337,52 @@ public class ConquestUtil { public boolean test(PaperCard card) { return rarityOdds.containsKey(card.getRarity()); } - + @Override + public FSkinProp getSkinProp() { + return skinProp; + } @Override public String toString() { return caption; } } - private static class CMCFilter implements Predicate { + public static void updateRarityFilterOdds(ConquestPreferences prefs) { + Map odds = Maps.newEnumMap(CardRarity.class); + if (prefs.getPrefBoolean(CQPref.AETHER_USE_DEFAULT_RARITY_ODDS)) { + odds.put(CardRarity.Common, 1d); + odds.put(CardRarity.Uncommon, 0.17); + odds.put(CardRarity.Rare, 0.03); + odds.put(CardRarity.MythicRare, 0.005); + } else { + double commonsPerBooster = prefs.getPrefInt(CQPref.BOOSTER_COMMONS); + double uncommonPerBooster = prefs.getPrefInt(CQPref.BOOSTER_UNCOMMONS); + double raresPerBooster = prefs.getPrefInt(CQPref.BOOSTER_RARES); + double mythicsPerBooster = raresPerBooster / (double)prefs.getPrefInt(CQPref.BOOSTERS_PER_MYTHIC); + + odds.put(CardRarity.Common, 1d); + odds.put(CardRarity.Uncommon, uncommonPerBooster / commonsPerBooster); + odds.put(CardRarity.Rare, raresPerBooster / commonsPerBooster); + odds.put(CardRarity.MythicRare, mythicsPerBooster / commonsPerBooster); + } + + for (RarityFilter filter : RarityFilter.values()) { + filter.updateOdds(odds); + } + } + + public enum CMCFilter implements IHasSkinProp, Predicate + { + CMC_LOW (FSkinProp.IMG_CMC_LOW, 0, 3), + CMC_LOW_MID (FSkinProp.IMG_CMC_LOW_MID, 2, 5), + CMC_MID_HIGH (FSkinProp.IMG_CMC_MID_HIGH, 4, 7), + CMC_HIGH (FSkinProp.IMG_CMC_HIGH, 6, -1); + + private final FSkinProp skinProp; private final int cmcMin, cmcMax; - private CMCFilter(int cmcMin0, int cmcMax0) { + private CMCFilter(FSkinProp skinProp0, int cmcMin0, int cmcMax0) { + skinProp = skinProp0; cmcMin = cmcMin0; cmcMax = cmcMax0; } @@ -539,6 +393,10 @@ public class ConquestUtil { if (cardCmc < cmcMin) { return false; } return cmcMax == -1 || cardCmc <= cmcMax; } + @Override + public FSkinProp getSkinProp() { + return skinProp; + } @Override public String toString() { From fac5b6c253a1eca505b5058f1571e5e7e9272112 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Tue, 14 Oct 2025 19:16:21 +0200 Subject: [PATCH 349/355] Support Turtles Forever (#8926) --- .../game/ability/effects/ChangeZoneEffect.java | 13 ++++++++++--- forge-gui/res/cardsfolder/b/burning_rune_demon.txt | 2 +- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java index d2ef0a58164..885b6ab442d 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java @@ -1103,7 +1103,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect { if (changeType.startsWith("EACH")) { String[] eachTypes = changeType.substring(5).split(" & "); for (String thisType : eachTypes) { - for (int i = 0; i < changeNum && destination != null; i++) { + for (int i = 0; i < changeNum; i++) { CardCollection thisList = (CardCollection) AbilityUtils.filterListByType(fetchList, thisType, sa); if (!chosenCards.isEmpty()) { thisList.removeAll(chosenCards); @@ -1138,7 +1138,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect { // maybe prompt the user if they selected fewer than the maximum possible? } else { // one at a time - for (int i = 0; i < changeNum && destination != null; i++) { + for (int i = 0; i < changeNum; i++) { if (sa.hasParam("DifferentNames")) { for (Card c : chosenCards) { fetchList = CardLists.filter(fetchList, CardPredicates.sharesNameWith(c).negate()); @@ -1252,6 +1252,10 @@ public class ChangeZoneEffect extends SpellAbilityEffect { player.removeController(controlTimestamp); } + if (sa.hasParam("Exactly") && chosenCards.size() < changeNum) { + continue; + } + HiddenOriginChoices choices = new HiddenOriginChoices(); choices.searchedLibrary = searchedLibrary; choices.shuffleMandatory = shuffleMandatory; @@ -1281,7 +1285,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect { Player decider = ObjectUtils.firstNonNull(chooser, player); for (final Card c : chosenCards) { - Card movedCard = null; + Card movedCard; final Zone originZone = game.getZoneOf(c); Map moveParams = AbilityKey.newMap(); moveParams.put(AbilityKey.FoundSearchingLibrary, searchedLibrary); @@ -1413,6 +1417,9 @@ public class ChangeZoneEffect extends SpellAbilityEffect { movedCard.addMayLookFaceDownExile(sa.getActivatingPlayer()); } } + else if (destination == null) { + movedCard = c; + } else { movedCard = game.getAction().moveTo(destination, c, 0, sa, moveParams); } diff --git a/forge-gui/res/cardsfolder/b/burning_rune_demon.txt b/forge-gui/res/cardsfolder/b/burning_rune_demon.txt index 8520c561a04..dc3310814a6 100644 --- a/forge-gui/res/cardsfolder/b/burning_rune_demon.txt +++ b/forge-gui/res/cardsfolder/b/burning_rune_demon.txt @@ -4,7 +4,7 @@ Types:Creature Demon Berserker PT:6/6 K:Flying T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, you may search your library for exactly two cards not named Burning-Rune Demon that have different names. If you do, reveal those cards. An opponent chooses one of them. Put the chosen card into your hand and the other into your graveyard, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Card.!namedBurning-Rune Demon | ChangeNum$ 2 | DifferentNames$ True | RememberChanged$ True | Reveal$ True | Shuffle$ False | AILogic$ Intuition | SubAbility$ DBChoosePlayer +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Card.!namedBurning-Rune Demon | ChangeNum$ 2 | DifferentNames$ True | Exactly$ True | RememberChanged$ True | Reveal$ True | Shuffle$ False | AILogic$ Intuition | SubAbility$ DBChoosePlayer SVar:DBChoosePlayer:DB$ ChoosePlayer | Defined$ You | Choices$ Player.Opponent | ChoiceTitle$ Choose an opponent | SubAbility$ DBChangeZone1 SVar:DBChangeZone1:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Card.IsRemembered | Chooser$ ChosenPlayer | ChangeNum$ 1 | Mandatory$ True | NoLooking$ True | SelectPrompt$ Select a card to be put into the hand of CARDNAME's controller | Shuffle$ False | SubAbility$ DBChangeZone2 | StackDescription$ None SVar:DBChangeZone2:DB$ ChangeZoneAll | Origin$ Library | Destination$ Graveyard | ChangeType$ Card.IsRemembered | Shuffle$ True | StackDescription$ None | SubAbility$ DBCleanup From 6b17b650844411a1dd2d4e2282293510ad158f4c Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Wed, 15 Oct 2025 04:55:59 +0200 Subject: [PATCH 350/355] Update shriek_treblemaker.txt Closes #8929 --- forge-gui/res/cardsfolder/s/shriek_treblemaker.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/s/shriek_treblemaker.txt b/forge-gui/res/cardsfolder/s/shriek_treblemaker.txt index cfc11c43140..8e41bff7069 100644 --- a/forge-gui/res/cardsfolder/s/shriek_treblemaker.txt +++ b/forge-gui/res/cardsfolder/s/shriek_treblemaker.txt @@ -2,7 +2,6 @@ Name:Shriek, Treblemaker ManaCost:2 BR Types:Legendary Creature Mutant Villain PT:2/3 -K:Menace T:Mode$ Phase | Phase$ Main1 | ValidPlayer$ You | Execute$ DBImmediateTrig | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of your first main phase, you may discard a card. When you do, target creature can't block this turn. SVar:DBImmediateTrig:AB$ ImmediateTrigger | Cost$ Discard<1/Card> | Execute$ TrigPump | TriggerDescription$ You may discard a card. When you do, target creature can't block this turn. SVar:TrigPump:DB$ Pump | ValidTgts$ Creature | KW$ HIDDEN CARDNAME can't block. | TgtPrompt$ Select target creature. | IsCurse$ True From da92a93d1d660c2d22291dc0e90c8e248ca5d3bd Mon Sep 17 00:00:00 2001 From: tool4ever Date: Wed, 15 Oct 2025 07:12:50 +0200 Subject: [PATCH 351/355] Fix The Lost and the Damned not triggering for tokens (#8928) Co-authored-by: tool4EvEr --- .../main/java/forge/game/trigger/TriggerChangesZone.java | 8 ++++++++ forge-gui/res/cardsfolder/n/name_sticker_goblin.txt | 2 +- forge-gui/res/cardsfolder/t/the_lost_and_the_damned.txt | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerChangesZone.java b/forge-game/src/main/java/forge/game/trigger/TriggerChangesZone.java index 59a55fe5fc2..5bf497ec3c7 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerChangesZone.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerChangesZone.java @@ -92,6 +92,14 @@ public class TriggerChangesZone extends Trigger { } } + if (hasParam("ExcludedOrigins")) { + if (ArrayUtils.contains( + getParam("ExcludedOrigins").split(","), runParams.get(AbilityKey.Origin) + )) { + return false; + } + } + if (hasParam("ExcludedDestinations")) { if (ArrayUtils.contains( getParam("ExcludedDestinations").split(","), runParams.get(AbilityKey.Destination) diff --git a/forge-gui/res/cardsfolder/n/name_sticker_goblin.txt b/forge-gui/res/cardsfolder/n/name_sticker_goblin.txt index cf0d2543e4d..4ebdf69da62 100644 --- a/forge-gui/res/cardsfolder/n/name_sticker_goblin.txt +++ b/forge-gui/res/cardsfolder/n/name_sticker_goblin.txt @@ -2,7 +2,7 @@ Name:"Name Sticker" Goblin ManaCost:2 R Types:Creature Goblin Guest PT:2/2 -T:Mode$ ChangesZone | Origin$ Hand,Stack,Library | Destination$ Battlefield | ValidCard$ Card.Self | IsPresent$ Creature.YouCtrl+named"Name Sticker" Goblin | PresentCompare$ LE9 | Execute$ TrigRollDice | TriggerDescription$ When CARDNAME enters from anywhere other than a graveyard or exile, if it's on the battlefield and you control 9 or fewer creatures named "Name Sticker" Goblin, roll a 20-sided die. +T:Mode$ ChangesZone | ExcludedOrigins$ Graveyard,Exile | Destination$ Battlefield | ValidCard$ Card.Self | IsPresent$ Creature.YouCtrl+named"Name Sticker" Goblin | IsPresent2$ Card.Self | PresentCompare$ LE9 | Execute$ TrigRollDice | TriggerDescription$ When CARDNAME enters from anywhere other than a graveyard or exile, if it's on the battlefield and you control 9 or fewer creatures named "Name Sticker" Goblin, roll a 20-sided die. SVar:TrigRollDice:DB$ RollDice | Sides$ 20 | ResultSubAbilities$ 1-6:DBMana1,7-14:DBMana2,15-20:DBMana3 SVar:DBMana1:DB$ Mana | Produced$ R | Amount$ 4 | SpellDescription$ 1-6 VERT Add {R}{R}{R}{R}. SVar:DBMana2:DB$ Mana | Produced$ R | Amount$ 5 | SpellDescription$ 7-14 VERT Add {R}{R}{R}{R}{R}. diff --git a/forge-gui/res/cardsfolder/t/the_lost_and_the_damned.txt b/forge-gui/res/cardsfolder/t/the_lost_and_the_damned.txt index 23f7d3498e7..9c7452b80fd 100644 --- a/forge-gui/res/cardsfolder/t/the_lost_and_the_damned.txt +++ b/forge-gui/res/cardsfolder/t/the_lost_and_the_damned.txt @@ -1,7 +1,7 @@ Name:The Lost and the Damned ManaCost:1 U R Types:Enchantment -T:Mode$ ChangesZone | Origin$ Graveyard,Exile,Command,Library | Destination$ Battlefield | ValidCard$ Land.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever a land you control enters from anywhere other than your hand or you cast a spell from anywhere other than your hand, create 3/3 red Spawn creature token. +T:Mode$ ChangesZone | ExcludedOrigins$ Hand | Destination$ Battlefield | ValidCard$ Land.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever a land you control enters from anywhere other than your hand or you cast a spell from anywhere other than your hand, create 3/3 red Spawn creature token. T:Mode$ SpellCast | ValidCard$ Card.!wasCastFromYourHand | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | Secondary$ True | TriggerDescription$ Whenever a land you control enters from anywhere other than your hand or you cast a spell from anywhere other than your hand, create 3/3 red Spawn creature token. SVar:TrigToken:DB$ Token | TokenScript$ r_3_3_spawn DeckHas:Ability$Token & Type$Spawn From 4827e10bd45e88d341fa0d5a01bffa2c4d6dbeaa Mon Sep 17 00:00:00 2001 From: Fulgur14 <54345051+Fulgur14@users.noreply.github.com> Date: Wed, 15 Oct 2025 08:10:15 +0200 Subject: [PATCH 352/355] Create turtles_forever.txt (#8927) --- forge-gui/res/cardsfolder/upcoming/turtles_forever.txt | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/turtles_forever.txt diff --git a/forge-gui/res/cardsfolder/upcoming/turtles_forever.txt b/forge-gui/res/cardsfolder/upcoming/turtles_forever.txt new file mode 100644 index 00000000000..3feabc1db18 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/turtles_forever.txt @@ -0,0 +1,8 @@ +Name:Turtles Forever +ManaCost:3 W +Types:Instant +A:SP$ ChangeZone | Origin$ Library,Sideboard | ChangeType$ Creature.Legendary | ChangeNum$ 4 | RememberChanged$ True | Exactly$ True | Reveal$ True | Shuffle$ False | DifferentNames$ True | SubAbility$ DBChangeZone | SpellDescription$ Search your library and/or outside the game for exactly four legendary creature cards you own with different names, then reveal those cards. An opponent chooses two of them. Put the chosen cards into your hand and shuffle the rest into your library. +SVar:DBChangeZone:DB$ ChangeZone | Chooser$ Opponent | SelectPrompt$ Choose two cards for the hand | NoLooking$ True | Hidden$ True | Origin$ Library,Sideboard | Destination$ Hand | ChangeType$ Card.IsRemembered | ChangeNum$ 2 | Mandatory$ True | SelectPrompt$ Select two cards for the hand | Shuffle$ False | ForgetChanged$ True | SubAbility$ DBChangeZoneAll +SVar:DBChangeZoneAll:DB$ ChangeZoneAll | Origin$ Library,Sideboard | Destination$ Library | ChangeType$ Card.IsRemembered | Shuffle$ True | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +Oracle:Search your library and/or outside the game for exactly four legendary creature cards you own with different names, then reveal those cards. An opponent chooses two of them. Put the chosen cards into your hand and shuffle the rest into your library. From 04186de39718727253c034b71c22c3263c43a139 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Wed, 15 Oct 2025 11:19:33 +0200 Subject: [PATCH 353/355] Update bitterbloom_bearer.txt --- forge-gui/res/cardsfolder/upcoming/bitterbloom_bearer.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/upcoming/bitterbloom_bearer.txt b/forge-gui/res/cardsfolder/upcoming/bitterbloom_bearer.txt index 7e1c1cfa47d..890ac68bffd 100644 --- a/forge-gui/res/cardsfolder/upcoming/bitterbloom_bearer.txt +++ b/forge-gui/res/cardsfolder/upcoming/bitterbloom_bearer.txt @@ -6,7 +6,7 @@ K:Flash K:Flying T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigLoseLife | TriggerDescription$ At the beginning of your upkeep, you lose 1 life and create a 1/1 black Faerie Rogue creature token with flying. SVar:TrigLoseLife:DB$ LoseLife | LifeAmount$ 1 | SubAbility$ DBToken -SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ b_1_1_faerie_rogue_flying | TokenOwner$ You +SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ ub_1_1_faerie_rogue_flying | TokenOwner$ You SVar:AICastPreference:NeverCastIfLifeBelow$ 4 DeckHas:Ability$Token Oracle:Flash\nFlying\nAt the beginning of your upkeep, you lose 1 life and create a 1/1 blue and black Faerie creature token with flying. From f9150bea34f9564284ef076c3e4748b31846dcaa Mon Sep 17 00:00:00 2001 From: tool4ever Date: Wed, 15 Oct 2025 11:30:41 +0200 Subject: [PATCH 354/355] Fix Bitterbloom Bearer (#8932) --- .../main/java/forge/game/ability/effects/MutateEffect.java | 2 +- forge-game/src/main/java/forge/game/zone/Zone.java | 3 +-- forge-gui/res/cardsfolder/upcoming/bitterbloom_bearer.txt | 4 ++-- forge-gui/res/tokenscripts/ub_1_1_faerie_flying.txt | 7 +++++++ 4 files changed, 11 insertions(+), 5 deletions(-) create mode 100644 forge-gui/res/tokenscripts/ub_1_1_faerie_flying.txt diff --git a/forge-game/src/main/java/forge/game/ability/effects/MutateEffect.java b/forge-game/src/main/java/forge/game/ability/effects/MutateEffect.java index 4cf4203da68..3500663e6cf 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/MutateEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/MutateEffect.java @@ -80,7 +80,7 @@ public class MutateEffect extends SpellAbilityEffect { game.getTriggerHandler().clearActiveTriggers(target, null); game.getTriggerHandler().registerActiveTrigger(target, false); - game.getAction().moveTo(p.getZone(ZoneType.Merged), host, sa, AbilityKey.newMap()); + game.getAction().moveTo(p.getZone(ZoneType.Merged), host, sa); host.setTapped(target.isTapped()); host.setFlipped(target.isFlipped()); diff --git a/forge-game/src/main/java/forge/game/zone/Zone.java b/forge-game/src/main/java/forge/game/zone/Zone.java index 5d57174a4db..04d17364f3c 100644 --- a/forge-game/src/main/java/forge/game/zone/Zone.java +++ b/forge-game/src/main/java/forge/game/zone/Zone.java @@ -111,8 +111,7 @@ public class Zone implements java.io.Serializable, Iterable { final Zone oldZone = game.getZoneOf(c); final ZoneType zt = oldZone == null ? ZoneType.Stack : oldZone.getZoneType(); - // only if the zoneType differs from this - // don't go in there is its a control change + // don't go in there if its a control change if (zt != zoneType) { c.setTurnInController(getPlayer()); c.setTurnInZone(game.getPhaseHandler().getTurn()); diff --git a/forge-gui/res/cardsfolder/upcoming/bitterbloom_bearer.txt b/forge-gui/res/cardsfolder/upcoming/bitterbloom_bearer.txt index 890ac68bffd..a0a74d7de4f 100644 --- a/forge-gui/res/cardsfolder/upcoming/bitterbloom_bearer.txt +++ b/forge-gui/res/cardsfolder/upcoming/bitterbloom_bearer.txt @@ -4,9 +4,9 @@ Types:Creature Faerie Rogue PT:1/1 K:Flash K:Flying -T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigLoseLife | TriggerDescription$ At the beginning of your upkeep, you lose 1 life and create a 1/1 black Faerie Rogue creature token with flying. +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigLoseLife | TriggerDescription$ At the beginning of your upkeep, you lose 1 life and create a 1/1 black Faerie creature token with flying. SVar:TrigLoseLife:DB$ LoseLife | LifeAmount$ 1 | SubAbility$ DBToken -SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ ub_1_1_faerie_rogue_flying | TokenOwner$ You +SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ ub_1_1_faerie_flying | TokenOwner$ You SVar:AICastPreference:NeverCastIfLifeBelow$ 4 DeckHas:Ability$Token Oracle:Flash\nFlying\nAt the beginning of your upkeep, you lose 1 life and create a 1/1 blue and black Faerie creature token with flying. diff --git a/forge-gui/res/tokenscripts/ub_1_1_faerie_flying.txt b/forge-gui/res/tokenscripts/ub_1_1_faerie_flying.txt new file mode 100644 index 00000000000..cc6178832c9 --- /dev/null +++ b/forge-gui/res/tokenscripts/ub_1_1_faerie_flying.txt @@ -0,0 +1,7 @@ +Name:Faerie Token +ManaCost:no cost +Colors:blue,black +Types:Creature Faerie +PT:1/1 +K:Flying +Oracle:Flying From 8ae1bcd2c53031fa24b9e000f2d20562398e0d7a Mon Sep 17 00:00:00 2001 From: tool4ever Date: Wed, 15 Oct 2025 13:22:00 +0200 Subject: [PATCH 355/355] Update mazes_end.txt Closes #8933 --- forge-gui/res/cardsfolder/m/mazes_end.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/m/mazes_end.txt b/forge-gui/res/cardsfolder/m/mazes_end.txt index 016ff08dcbd..ecee1c92509 100644 --- a/forge-gui/res/cardsfolder/m/mazes_end.txt +++ b/forge-gui/res/cardsfolder/m/mazes_end.txt @@ -6,6 +6,6 @@ SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. A:AB$ ChangeZone | Cost$ 3 T Return<1/CARDNAME> | ChangeType$ Gate | ChangeNum$ 1 | Origin$ Library | Destination$ Battlefield | AILogic$ MazesEnd | SubAbility$ DBWin | SpellDescription$ Search your library for a Gate card, put it onto the battlefield, then shuffle. If you control ten or more Gates with different names, you win the game. SVar:DBWin:DB$ WinsGame | Defined$ You | ConditionCheckSVar$ MazeGate | ConditionSVarCompare$ GE10 -SVar:X:Count$Valid Gate.YouCtrl$DifferentCardNames +SVar:MazeGate:Count$Valid Gate.YouCtrl$DifferentCardNames AI:RemoveDeck:Random Oracle:Maze's End enters tapped.\n{T}: Add {C}.\n{3}, {T}, Return Maze's End to its owner's hand: Search your library for a Gate card, put it onto the battlefield, then shuffle. If you control ten or more Gates with different names, you win the game.