diff --git a/forge-ai/src/main/java/forge/ai/GameState.java b/forge-ai/src/main/java/forge/ai/GameState.java index 653a31a799e..3d0c81eda1c 100644 --- a/forge-ai/src/main/java/forge/ai/GameState.java +++ b/forge-ai/src/main/java/forge/ai/GameState.java @@ -11,10 +11,7 @@ import forge.game.Game; import forge.game.GameEntity; import forge.game.ability.AbilityFactory; import forge.game.ability.effects.DetachedCardEffect; -import forge.game.card.Card; -import forge.game.card.CardCollection; -import forge.game.card.CardCollectionView; -import forge.game.card.CounterType; +import forge.game.card.*; import forge.game.card.token.TokenInfo; import forge.game.combat.Combat; import forge.game.combat.CombatUtil; @@ -24,6 +21,7 @@ import forge.game.mana.ManaPool; import forge.game.phase.PhaseType; import forge.game.player.Player; import forge.game.spellability.AbilityManaPart; +import forge.game.spellability.AbilitySub; import forge.game.spellability.SpellAbility; import forge.game.ability.AbilityKey; import forge.game.trigger.TriggerType; @@ -362,6 +360,12 @@ public abstract class GameState { if (c.isFaceDown()) { newText.append("|FaceDown"); // Exiled face down } + if (c.isAdventureCard() && c.getZone().is(ZoneType.Exile)) { + // TODO: this will basically default all exiled cards with Adventure to being "On Adventure". + // Need to figure out a better way to detect if it's actually on adventure. + newText.append("|OnAdventure"); + } + } if (zoneType == ZoneType.Battlefield || zoneType == ZoneType.Exile) { @@ -1202,6 +1206,16 @@ public abstract class GameState { c.setState(CardStateName.Flipped, true); } else if (info.startsWith("Meld")) { c.setState(CardStateName.Meld, true); + } else if (info.startsWith("OnAdventure")) { + String abAdventure = "DB$ Effect | RememberObjects$ Self | StaticAbilities$ Play | ExileOnMoved$ Exile | Duration$ Permanent | ConditionDefined$ Self | ConditionPresent$ Card.nonCopiedSpell"; + AbilitySub saAdventure = (AbilitySub)AbilityFactory.getAbility(abAdventure, c); + StringBuilder sbPlay = new StringBuilder(); + sbPlay.append("Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered+nonAdventure"); + sbPlay.append(" | AffectedZone$ Exile | Description$ You may cast the card."); + saAdventure.setSVar("Play", sbPlay.toString()); + saAdventure.setActivatingPlayer(c.getOwner()); + saAdventure.resolve(); + c.setExiledWith(c); // This seems to be the way it's set up internally. Potentially not needed here? } else if (info.startsWith("IsCommander")) { // TODO: This doesn't seem to properly restore the ability to play the commander. Why? c.setCommander(true); diff --git a/forge-core/src/main/java/forge/StaticData.java b/forge-core/src/main/java/forge/StaticData.java index d9d02dcc78b..6b65424daab 100644 --- a/forge-core/src/main/java/forge/StaticData.java +++ b/forge-core/src/main/java/forge/StaticData.java @@ -35,6 +35,7 @@ public class StaticData { private Predicate standardPredicate; private Predicate brawlPredicate; + private Predicate pioneerPredicate; private Predicate modernPredicate; private Predicate commanderPredicate; private Predicate oathbreakerPredicate; @@ -197,13 +198,13 @@ public class StaticData { public TokenDb getAllTokens() { return allTokens; } - public Predicate getStandardPredicate() { - return standardPredicate; - } + public void setStandardPredicate(Predicate standardPredicate) { this.standardPredicate = standardPredicate; } - public void setModernPredicate(Predicate modernPredicate) { this.modernPredicate = standardPredicate; } + public void setPioneerPredicate(Predicate pioneerPredicate) { this.pioneerPredicate = pioneerPredicate; } + + public void setModernPredicate(Predicate modernPredicate) { this.modernPredicate = modernPredicate; } public void setCommanderPredicate(Predicate commanderPredicate) { this.commanderPredicate = commanderPredicate; } @@ -211,9 +212,11 @@ public class StaticData { public void setBrawlPredicate(Predicate brawlPredicate) { this.brawlPredicate = brawlPredicate; } - public Predicate getModernPredicate() { - return modernPredicate; - } + public Predicate getStandardPredicate() { return standardPredicate; } + + public Predicate getPioneerPredicate() { return pioneerPredicate; } + + public Predicate getModernPredicate() { return modernPredicate; } public Predicate getCommanderPredicate() { return commanderPredicate; } diff --git a/forge-gui/src/main/java/forge/card/CardTranslation.java b/forge-core/src/main/java/forge/util/CardTranslation.java similarity index 81% rename from forge-gui/src/main/java/forge/card/CardTranslation.java rename to forge-core/src/main/java/forge/util/CardTranslation.java index babdb70d35d..7e6d7b3dfdb 100644 --- a/forge-gui/src/main/java/forge/card/CardTranslation.java +++ b/forge-core/src/main/java/forge/util/CardTranslation.java @@ -1,9 +1,6 @@ -package forge.card; +package forge.util; -import com.esotericsoftware.minlog.Log; import com.google.common.base.Charsets; -import forge.properties.ForgeConstants; -import forge.util.LineReader; import java.io.FileInputStream; import java.io.IOException; @@ -15,12 +12,12 @@ public class CardTranslation { private static Map translatednames; private static Map translatedtypes; private static Map translatedoracles; - private static String languageSelected; + private static String languageSelected = "en-US"; - private static void readTranslationFile(String language) { + private static void readTranslationFile(String language, String languagesDirectory) { String filename = "cardnames-" + language + ".txt"; - try (LineReader translationFile = new LineReader(new FileInputStream(ForgeConstants.LANG_DIR + filename), Charsets.UTF_8)) { + try (LineReader translationFile = new LineReader(new FileInputStream(languagesDirectory + filename), Charsets.UTF_8)) { for (String line : translationFile.readLines()) { String[] matches = line.split("\\|"); if (matches.length >= 2) { @@ -34,7 +31,7 @@ public class CardTranslation { } } } catch (IOException e) { - Log.error("Error reading translation file: cardnames-" + language + ".txt"); + System.err.println("Error reading translation file: cardnames-" + language + ".txt"); } } @@ -66,7 +63,7 @@ public class CardTranslation { } public static HashMap getTranslationTexts(String cardname, String altcardname) { - HashMap translations = new HashMap(); + HashMap translations = new HashMap<>(); translations.put("name", getTranslatedName(cardname)); translations.put("oracle", getTranslatedOracle(cardname)); translations.put("altname", getTranslatedName(altcardname)); @@ -78,14 +75,14 @@ public class CardTranslation { return !languageSelected.equals("en-US"); } - public static void preloadTranslation(String language) { + public static void preloadTranslation(String language, String languagesDirectory) { languageSelected = language; if (needsTranslation()) { translatednames = new HashMap<>(); translatedtypes = new HashMap<>(); translatedoracles = new HashMap<>(); - readTranslationFile(languageSelected); + readTranslationFile(languageSelected, languagesDirectory); } } } \ No newline at end of file diff --git a/forge-gui/src/main/java/forge/util/LineReader.java b/forge-core/src/main/java/forge/util/LineReader.java similarity index 100% rename from forge-gui/src/main/java/forge/util/LineReader.java rename to forge-core/src/main/java/forge/util/LineReader.java diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index 8396778b6be..683a6b297a9 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -701,7 +701,9 @@ public class GameAction { // Run triggers final Map runParams = AbilityKey.mapFromCard(c); runParams.put(AbilityKey.Cause, cause); - runParams.put(AbilityKey.Origin, origin.getZoneType().name()); + if (origin != null) { // is generally null when adding via dev mode + runParams.put(AbilityKey.Origin, origin.getZoneType().name()); + } if (params != null) { runParams.putAll(params); } diff --git a/forge-game/src/main/java/forge/game/GameFormat.java b/forge-game/src/main/java/forge/game/GameFormat.java index 8f714aac24a..9eb259404ea 100644 --- a/forge-game/src/main/java/forge/game/GameFormat.java +++ b/forge-game/src/main/java/forge/game/GameFormat.java @@ -47,7 +47,7 @@ import java.util.Map.Entry; public class GameFormat implements Comparable { private final String name; public enum FormatType {Sanctioned, Casual, Historic, Digital, Custom} - public enum FormatSubType {Block, Standard, Extended, Modern, Legacy, Vintage, Commander, Planechase, Videogame, MTGO, Custom} + public enum FormatSubType {Block, Standard, Extended, Pioneer, Modern, Legacy, Vintage, Commander, Planechase, Videogame, MTGO, Custom} // contains allowed sets, when empty allows all sets private FormatType formatType; @@ -290,6 +290,7 @@ public class GameFormat implements Comparable { private List coreFormats = new ArrayList<>(); { coreFormats.add("Standard.txt"); + coreFormats.add("Pioneer.txt"); coreFormats.add("Modern.txt"); coreFormats.add("Legacy.txt"); coreFormats.add("Vintage.txt"); @@ -468,6 +469,10 @@ public class GameFormat implements Comparable { return this.map.get("Extended"); } + public GameFormat getPioneer() { + return this.map.get("Pioneer"); + } + public GameFormat getModern() { return this.map.get("Modern"); } diff --git a/forge-gui-desktop/src/main/java/forge/deckchooser/FDeckChooser.java b/forge-gui-desktop/src/main/java/forge/deckchooser/FDeckChooser.java index 2c8b5b40eaf..48ea79c9fa6 100644 --- a/forge-gui-desktop/src/main/java/forge/deckchooser/FDeckChooser.java +++ b/forge-gui-desktop/src/main/java/forge/deckchooser/FDeckChooser.java @@ -383,6 +383,11 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener { updateMatrix(FModel.getFormats().getStandard()); } break; + case PIONEER_CARDGEN_DECK: + if(FModel.isdeckGenMatrixLoaded()) { + updateMatrix(FModel.getFormats().getPioneer()); + } + break; case MODERN_CARDGEN_DECK: if(FModel.isdeckGenMatrixLoaded()) { updateMatrix(FModel.getFormats().getModern()); diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/VLobby.java b/forge-gui-desktop/src/main/java/forge/screens/home/VLobby.java index cc24940921c..aebb0936bec 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/VLobby.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/VLobby.java @@ -223,6 +223,7 @@ public class VLobby implements ILobbyView { DeckType selectedDeckType = deckChooser.getSelectedDeckType(); switch (selectedDeckType){ case STANDARD_CARDGEN_DECK: + case PIONEER_CARDGEN_DECK: case MODERN_CARDGEN_DECK: case LEGACY_CARDGEN_DECK: case VINTAGE_CARDGEN_DECK: diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/CSubmenuGauntletQuick.java b/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/CSubmenuGauntletQuick.java index 237d7124593..d32dd9d2011 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/CSubmenuGauntletQuick.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/CSubmenuGauntletQuick.java @@ -72,6 +72,7 @@ public enum CSubmenuGauntletQuick implements ICDoc { if (view.getBoxColorDecks().isSelected()) { allowedDeckTypes.add(DeckType.COLOR_DECK); } if (view.getBoxStandardColorDecks().isSelected()) { allowedDeckTypes.add(DeckType.STANDARD_COLOR_DECK); } if (view.getBoxStandardGenDecks().isSelected()) { allowedDeckTypes.add(DeckType.STANDARD_CARDGEN_DECK); } + if (view.getBoxPioneerGenDecks().isSelected()) { allowedDeckTypes.add(DeckType.PIONEER_CARDGEN_DECK); } if (view.getBoxModernGenDecks().isSelected()) { allowedDeckTypes.add(DeckType.MODERN_CARDGEN_DECK); } if (view.getBoxLegacyGenDecks().isSelected()) { allowedDeckTypes.add(DeckType.LEGACY_CARDGEN_DECK); } if (view.getBoxVintageGenDecks().isSelected()) { allowedDeckTypes.add(DeckType.VINTAGE_CARDGEN_DECK); } diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/VSubmenuGauntletQuick.java b/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/VSubmenuGauntletQuick.java index 53d8b4ef1f7..b73bd4e1f32 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/VSubmenuGauntletQuick.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/VSubmenuGauntletQuick.java @@ -56,6 +56,7 @@ public enum VSubmenuGauntletQuick implements IVSubmenu { private final JCheckBox boxColorDecks = new FCheckBox(DeckType.COLOR_DECK.toString()); private final JCheckBox boxStandardColorDecks = new FCheckBox(DeckType.STANDARD_COLOR_DECK.toString()); private final JCheckBox boxStandardCardgenDecks = new FCheckBox(DeckType.STANDARD_CARDGEN_DECK.toString()); + private final JCheckBox boxPioneerCardgenDecks = new FCheckBox(DeckType.PIONEER_CARDGEN_DECK.toString()); private final JCheckBox boxModernCardgenDecks = new FCheckBox(DeckType.MODERN_CARDGEN_DECK.toString()); private final JCheckBox boxLegacyCardgenDecks = new FCheckBox(DeckType.LEGACY_CARDGEN_DECK.toString()); private final JCheckBox boxVintageCardgenDecks = new FCheckBox(DeckType.VINTAGE_CARDGEN_DECK.toString()); @@ -88,11 +89,13 @@ public enum VSubmenuGauntletQuick implements IVSubmenu { boxStandardColorDecks.setSelected(true); if(FModel.isdeckGenMatrixLoaded()) { boxStandardCardgenDecks.setSelected(true); + boxPioneerCardgenDecks.setSelected(true); boxModernCardgenDecks.setSelected(true); boxLegacyCardgenDecks.setSelected(true); boxVintageCardgenDecks.setSelected(true); }else{ boxStandardCardgenDecks.setSelected(false); + boxPioneerCardgenDecks.setSelected(false); boxModernCardgenDecks.setSelected(false); boxLegacyCardgenDecks.setSelected(false); boxVintageCardgenDecks.setSelected(false); @@ -121,6 +124,7 @@ public enum VSubmenuGauntletQuick implements IVSubmenu { pnlOptions.add(boxColorDecks, "w 96%!, h 30px!, gap 2% 0 0 5px"); if(FModel.isdeckGenMatrixLoaded()) { pnlOptions.add(boxStandardCardgenDecks, "w 96%!, h 30px!, gap 2% 0 0 5px"); + pnlOptions.add(boxPioneerCardgenDecks, "w 96%!, h 30px!, gap 2% 0 0 5px"); pnlOptions.add(boxModernCardgenDecks, "w 96%!, h 30px!, gap 2% 0 0 5px"); pnlOptions.add(boxLegacyCardgenDecks, "w 96%!, h 30px!, gap 2% 0 0 5px"); pnlOptions.add(boxVintageCardgenDecks, "w 96%!, h 30px!, gap 2% 0 0 5px"); @@ -221,6 +225,9 @@ public enum VSubmenuGauntletQuick implements IVSubmenu { public JCheckBox getBoxModernGenDecks() { return boxModernCardgenDecks; } + public JCheckBox getBoxPioneerGenDecks() { + return boxPioneerCardgenDecks; + } public JCheckBox getBoxLegacyGenDecks() { return boxLegacyCardgenDecks; } diff --git a/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanel.java b/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanel.java index 219ba5887b7..641619e9a9c 100644 --- a/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanel.java +++ b/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanel.java @@ -21,7 +21,6 @@ import forge.CachedCardImage; import forge.FThreads; import forge.StaticData; import forge.card.CardEdition; -import forge.card.CardTranslation; import forge.card.mana.ManaCost; import forge.game.card.Card; import forge.game.card.CardView; @@ -39,6 +38,7 @@ import forge.screens.match.CMatchUI; import forge.toolbox.CardFaceSymbols; import forge.toolbox.FSkin.SkinnedPanel; import forge.toolbox.IDisposable; +import forge.util.CardTranslation; import forge.view.arcane.util.OutlinedLabel; import javax.swing.*; diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index 068971c14c2..e56f31d3681 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -10,7 +10,6 @@ import forge.assets.AssetsDownloader; import forge.assets.FSkin; import forge.assets.FSkinFont; import forge.assets.ImageCache; -import forge.card.CardTranslation; import forge.error.BugReporter; import forge.error.ExceptionHandler; import forge.interfaces.IDeviceAdapter; @@ -31,6 +30,7 @@ import forge.toolbox.FGestureAdapter; import forge.toolbox.FOptionPane; import forge.toolbox.FOverlay; import forge.util.Callback; +import forge.util.CardTranslation; import forge.util.FileUtil; import forge.util.Localizer; import forge.util.Utils; @@ -130,13 +130,13 @@ public class Forge implements ApplicationListener { FSkinFont.preloadAll(locale); splashScreen.getProgressBar().setDescription(localizer.getMessage("lblLoadingCardTranslations")); - CardTranslation.preloadTranslation(locale); + CardTranslation.preloadTranslation(locale, ForgeConstants.LANG_DIR); splashScreen.getProgressBar().setDescription(localizer.getMessage("lblFinishingStartup")); //add reminder to preload if (enablePreloadExtendedArt) - splashScreen.getProgressBar().setDescription("Preload Extended Art..."); + splashScreen.getProgressBar().setDescription(localizer.getMessage("lblPreloadExtendedArt")); Gdx.app.postRunnable(new Runnable() { @Override public void run() { diff --git a/forge-gui-mobile/src/forge/card/CardImageRenderer.java b/forge-gui-mobile/src/forge/card/CardImageRenderer.java index e6b40f07938..d0970b271ca 100644 --- a/forge-gui-mobile/src/forge/card/CardImageRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardImageRenderer.java @@ -28,6 +28,7 @@ import forge.properties.ForgeConstants; import forge.properties.ForgePreferences; import forge.screens.FScreen; import forge.screens.match.MatchController; +import forge.util.CardTranslation; import forge.util.Utils; import org.apache.commons.lang3.StringUtils; diff --git a/forge-gui-mobile/src/forge/card/CardRenderer.java b/forge-gui-mobile/src/forge/card/CardRenderer.java index 113a7176796..2da8a09ee8f 100644 --- a/forge-gui-mobile/src/forge/card/CardRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardRenderer.java @@ -49,6 +49,7 @@ import forge.properties.ForgePreferences; import forge.properties.ForgePreferences.FPref; import forge.screens.match.MatchController; import forge.toolbox.FList; +import forge.util.CardTranslation; import forge.util.Utils; import org.apache.commons.lang3.StringUtils; import forge.util.TextBounds; diff --git a/forge-gui-mobile/src/forge/card/GameEntityPicker.java b/forge-gui-mobile/src/forge/card/GameEntityPicker.java index d26f262d259..d327202aac1 100644 --- a/forge-gui-mobile/src/forge/card/GameEntityPicker.java +++ b/forge-gui-mobile/src/forge/card/GameEntityPicker.java @@ -20,6 +20,7 @@ import forge.toolbox.FOptionPane; import forge.toolbox.FTextField; import forge.toolbox.FEvent.FEventHandler; import forge.util.Callback; +import forge.util.Localizer; public class GameEntityPicker extends TabPageScreen { private final FOptionPane optionPane; @@ -73,7 +74,7 @@ public class GameEntityPicker extends TabPageScreen { super(caption0 + " (" + items.size() + ")", icon0); txtSearch = add(new FTextField()); txtSearch.setFont(FSkinFont.get(12)); - txtSearch.setGhostText("Search"); + txtSearch.setGhostText(Localizer.getInstance().getMessage("lblSearch")); txtSearch.setChangedHandler(new FEventHandler() { @Override public void handleEvent(FEvent e) { diff --git a/forge-gui-mobile/src/forge/deck/FDeckChooser.java b/forge-gui-mobile/src/forge/deck/FDeckChooser.java index b62ea91d363..ccbe174bc3b 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckChooser.java +++ b/forge-gui-mobile/src/forge/deck/FDeckChooser.java @@ -149,6 +149,7 @@ public class FDeckChooser extends FScreen { @Override public void handleEvent(FEvent e) { if (selectedDeckType != DeckType.STANDARD_COLOR_DECK && selectedDeckType != DeckType.STANDARD_CARDGEN_DECK + && selectedDeckType != DeckType.PIONEER_CARDGEN_DECK && selectedDeckType != DeckType.MODERN_CARDGEN_DECK && selectedDeckType != DeckType.LEGACY_CARDGEN_DECK && selectedDeckType != DeckType.VINTAGE_CARDGEN_DECK && selectedDeckType != DeckType.MODERN_COLOR_DECK && selectedDeckType != DeckType.COLOR_DECK && selectedDeckType != DeckType.THEME_DECK @@ -172,6 +173,9 @@ public class FDeckChooser extends FScreen { else if (selectedDeckType == DeckType.STANDARD_CARDGEN_DECK){ DeckgenUtil.randomSelect(lstDecks); } + else if (selectedDeckType == DeckType.PIONEER_CARDGEN_DECK){ + DeckgenUtil.randomSelect(lstDecks); + } else if (selectedDeckType == DeckType.MODERN_CARDGEN_DECK){ DeckgenUtil.randomSelect(lstDecks); } @@ -296,6 +300,7 @@ public class FDeckChooser extends FScreen { case RANDOM_CARDGEN_COMMANDER_DECK: case RANDOM_COMMANDER_DECK: case MODERN_CARDGEN_DECK: + case PIONEER_CARDGEN_DECK: case LEGACY_CARDGEN_DECK: case VINTAGE_CARDGEN_DECK: case MODERN_COLOR_DECK: @@ -486,6 +491,7 @@ public class FDeckChooser extends FScreen { cmbDeckTypes.addItem(DeckType.STANDARD_COLOR_DECK); if(FModel.isdeckGenMatrixLoaded()) { cmbDeckTypes.addItem(DeckType.STANDARD_CARDGEN_DECK); + cmbDeckTypes.addItem(DeckType.PIONEER_CARDGEN_DECK); cmbDeckTypes.addItem(DeckType.MODERN_CARDGEN_DECK); cmbDeckTypes.addItem(DeckType.LEGACY_CARDGEN_DECK); cmbDeckTypes.addItem(DeckType.VINTAGE_CARDGEN_DECK); @@ -698,6 +704,14 @@ public class FDeckChooser extends FScreen { } config = ItemManagerConfig.STRING_ONLY; break; + case PIONEER_CARDGEN_DECK: + maxSelections = 1; + pool= new ArrayList<>(); + if(FModel.isdeckGenMatrixLoaded()) { + pool = ArchetypeDeckGenerator.getMatrixDecks(FModel.getFormats().getPioneer(), isAi); + } + config = ItemManagerConfig.STRING_ONLY; + break; case MODERN_CARDGEN_DECK: maxSelections = 1; pool= new ArrayList<>(); @@ -1077,6 +1091,7 @@ public class FDeckChooser extends FScreen { DeckType.STANDARD_COLOR_DECK, DeckType.STANDARD_CARDGEN_DECK, DeckType.MODERN_COLOR_DECK, + DeckType.PIONEER_CARDGEN_DECK, DeckType.MODERN_CARDGEN_DECK, DeckType.LEGACY_CARDGEN_DECK, DeckType.VINTAGE_CARDGEN_DECK, @@ -1085,6 +1100,7 @@ public class FDeckChooser extends FScreen { ); if (!FModel.isdeckGenMatrixLoaded()) { deckTypes.remove(DeckType.STANDARD_CARDGEN_DECK); + deckTypes.remove(DeckType.PIONEER_CARDGEN_DECK); deckTypes.remove(DeckType.MODERN_CARDGEN_DECK); deckTypes.remove(DeckType.LEGACY_CARDGEN_DECK); deckTypes.remove(DeckType.VINTAGE_CARDGEN_DECK); diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/TextSearchFilter.java b/forge-gui-mobile/src/forge/itemmanager/filters/TextSearchFilter.java index c2cac6fdcdf..b0f6b1844d5 100644 --- a/forge-gui-mobile/src/forge/itemmanager/filters/TextSearchFilter.java +++ b/forge-gui-mobile/src/forge/itemmanager/filters/TextSearchFilter.java @@ -13,6 +13,7 @@ import forge.toolbox.FDisplayObject; import forge.toolbox.FEvent; import forge.toolbox.FEvent.FEventHandler; import forge.toolbox.FTextField; +import forge.util.Localizer; public class TextSearchFilter extends ItemFilter { @@ -78,10 +79,10 @@ public class TextSearchFilter extends ItemFilter { } public String getCaption() { - return txtSearch.getGhostText().substring("Search ".length()); + return txtSearch.getGhostText().substring((Localizer.getInstance().getMessage("lblSearch") + " ").length()); } public void setCaption(String caption0) { - txtSearch.setGhostText("Search " + caption0); + txtSearch.setGhostText(Localizer.getInstance().getMessage("lblSearch") + " " + caption0); } protected class SearchField extends FTextField { @@ -89,7 +90,7 @@ public class TextSearchFilter extends ItemFilter { private SearchField() { setFont(FONT); - setGhostText("Search"); + setGhostText(Localizer.getInstance().getMessage("lblSearch")); setHeight(getDefaultHeight(DEFAULT_FONT)); //set height based on default filter font } diff --git a/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java b/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java index e196ac77237..7ecde4cd371 100644 --- a/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java +++ b/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java @@ -476,6 +476,7 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView { DeckType selectedDeckType = deckChooser.getSelectedDeckType(); switch (selectedDeckType){ case STANDARD_CARDGEN_DECK: + case PIONEER_CARDGEN_DECK: case MODERN_CARDGEN_DECK: case LEGACY_CARDGEN_DECK: case VINTAGE_CARDGEN_DECK: diff --git a/forge-gui-mobile/src/forge/screens/gauntlet/NewGauntletScreen.java b/forge-gui-mobile/src/forge/screens/gauntlet/NewGauntletScreen.java index 1278a1e34ac..2388dc0758f 100644 --- a/forge-gui-mobile/src/forge/screens/gauntlet/NewGauntletScreen.java +++ b/forge-gui-mobile/src/forge/screens/gauntlet/NewGauntletScreen.java @@ -88,6 +88,7 @@ public class NewGauntletScreen extends LaunchScreen { DeckType.STANDARD_COLOR_DECK, DeckType.STANDARD_CARDGEN_DECK, DeckType.MODERN_COLOR_DECK, + DeckType.PIONEER_CARDGEN_DECK, DeckType.MODERN_CARDGEN_DECK, DeckType.LEGACY_CARDGEN_DECK, DeckType.VINTAGE_CARDGEN_DECK, diff --git a/forge-gui-mobile/src/forge/screens/match/MatchScreen.java b/forge-gui-mobile/src/forge/screens/match/MatchScreen.java index 4682dec6ac8..d53cebb6ef1 100644 --- a/forge-gui-mobile/src/forge/screens/match/MatchScreen.java +++ b/forge-gui-mobile/src/forge/screens/match/MatchScreen.java @@ -395,7 +395,7 @@ public class MatchScreen extends FScreen { return getActivePrompt().getBtnCancel().trigger(); //trigger Cancel if can't trigger OK case Keys.ESCAPE: if (!FModel.getPreferences().getPrefBoolean(FPref.UI_ALLOW_ESC_TO_END_TURN)) { - if (getActivePrompt().getBtnCancel().getText().equals("End Turn")) { + if (getActivePrompt().getBtnCancel().getText().equals(Localizer.getInstance().getMessage("lblEndTurn"))) { return false; } } diff --git a/forge-gui/res/cardsfolder/d/dread_warlock.txt b/forge-gui/res/cardsfolder/d/dread_warlock.txt index 07a5d4d785f..aaacbfb9fb3 100644 --- a/forge-gui/res/cardsfolder/d/dread_warlock.txt +++ b/forge-gui/res/cardsfolder/d/dread_warlock.txt @@ -1,6 +1,6 @@ Name:Dread Warlock ManaCost:1 B B -Types:Creature Human Wizard +Types:Creature Human Wizard Warlock PT:2/2 K:CantBeBlockedBy Creature.nonBlack SVar:Picture:http://www.wizards.com/global/images/magic/general/dread_warlock.jpg diff --git a/forge-gui/res/deckgendecks/Modern.lda.dat b/forge-gui/res/deckgendecks/Modern.lda.dat index 480a9ac7021..eea4ae5a26f 100644 Binary files a/forge-gui/res/deckgendecks/Modern.lda.dat and b/forge-gui/res/deckgendecks/Modern.lda.dat differ diff --git a/forge-gui/res/deckgendecks/Modern.raw.dat b/forge-gui/res/deckgendecks/Modern.raw.dat index 2376da4ab0d..02144e71b62 100644 Binary files a/forge-gui/res/deckgendecks/Modern.raw.dat and b/forge-gui/res/deckgendecks/Modern.raw.dat differ diff --git a/forge-gui/res/deckgendecks/Pioneer.lda.dat b/forge-gui/res/deckgendecks/Pioneer.lda.dat new file mode 100644 index 00000000000..ca93fcd3304 Binary files /dev/null and b/forge-gui/res/deckgendecks/Pioneer.lda.dat differ diff --git a/forge-gui/res/deckgendecks/Pioneer.raw.dat b/forge-gui/res/deckgendecks/Pioneer.raw.dat new file mode 100644 index 00000000000..a6708549976 Binary files /dev/null and b/forge-gui/res/deckgendecks/Pioneer.raw.dat differ diff --git a/forge-gui/res/deckgendecks/Standard.lda.dat b/forge-gui/res/deckgendecks/Standard.lda.dat index b95d983a1f6..99de82c36b1 100644 Binary files a/forge-gui/res/deckgendecks/Standard.lda.dat and b/forge-gui/res/deckgendecks/Standard.lda.dat differ diff --git a/forge-gui/res/deckgendecks/Standard.raw.dat b/forge-gui/res/deckgendecks/Standard.raw.dat index 69a2206d8b1..b5316980d81 100644 Binary files a/forge-gui/res/deckgendecks/Standard.raw.dat and b/forge-gui/res/deckgendecks/Standard.raw.dat differ diff --git a/forge-gui/res/formats/Sanctioned/Modern.txt b/forge-gui/res/formats/Sanctioned/Modern.txt index 92e7a97a367..86de24b81fb 100644 --- a/forge-gui/res/formats/Sanctioned/Modern.txt +++ b/forge-gui/res/formats/Sanctioned/Modern.txt @@ -1,6 +1,6 @@ [format] Name:Modern -Order:102 +Order:103 Subtype:Modern Type:Sanctioned Sets:8ED, MRD, DST, 5DN, CHK, BOK, SOK, 9ED, RAV, GPT, DIS, CSP, TSP, TSB, PLC, FUT, 10E, LRW, EVE, SHM, MOR, ALA, CFX, ARB, M10, ZEN, WWK, ROE, M11, SOM, MBS, NPH, M12, ISD, DKA, AVR, M13, RTR, GTC, DGM, M14, THS, BNG, JOU, M15, KTK, FRF, DTK, MM2, ORI, BFZ, OGW, SOI, EMN, KLD, AER, AKH, W17, HOU, XLN, RIX, DOM, M19, G18, GRN, RNA, WAR, MH1, M20, ELD diff --git a/forge-gui/res/formats/Sanctioned/Pioneer.txt b/forge-gui/res/formats/Sanctioned/Pioneer.txt new file mode 100644 index 00000000000..f4486847e85 --- /dev/null +++ b/forge-gui/res/formats/Sanctioned/Pioneer.txt @@ -0,0 +1,7 @@ +[format] +Name:Pioneer +Order:102 +Subtype:Pioneer +Type:Sanctioned +Sets:RTR, GTC, DGM, M14, THS, BNG, JOU, M15, KTK, FRF, DTK, ORI, BFZ, OGW, SOI, EMN, KLD, AER, AKH, HOU, XLN, RIX, DOM, M19, GRN, RNA, WAR, M20, ELD +Banned:Bloodstained Mire; Flooded Strand; Polluted Delta; Windswept Heath; Wooded Foothills; Felidar Guardian; Leyline of Abundance; Oath of Nissa diff --git a/forge-gui/res/languages/de-DE.properties b/forge-gui/res/languages/de-DE.properties index 8c1a97153cd..52c6c7bafe0 100644 --- a/forge-gui/res/languages/de-DE.properties +++ b/forge-gui/res/languages/de-DE.properties @@ -102,7 +102,7 @@ cbpGameLogEntryType=Spielberichtsumfang cbpCloseAction=Beenden cbpDefaultFontSize=Standard Schriftgröße cbpAiProfiles=KI Persönlichkeit -cbpDisplayCurrentCardColors=Zeige detaillierte Kartenfarben +cbpDisplayCurrentCardColors=Zeige detailierte Kartenfarben cbpAutoYieldMode=Automatische Bestätigung cbpCounterDisplayType=Markeranzeige Art cbpCounterDisplayLocation=Markeranzeige Ort @@ -129,10 +129,10 @@ nlCloneImgSource=Zeige das originale Kartenbild des Klones statt der geklonten K nlPromptFreeBlocks=Wenn ein neuer Block nichts kosten würde, dann wird er automatisch bezahlt. nlPauseWhileMinimized=Wenn aktiviert, pausiert Forge im minimierten Zustand (betrifft hauptsächlich KI gegen KI). nlEscapeEndsTurn=Wenn aktiviert, funktioniert ESCape als Alternative um den Zug zu beenden. -nlDetailedPaymentDesc=Wenn aktiviert, werden detaillierte Spruch-/Fähigkeitsbeschreibungen beim Auswählen von Zielen bzw. Bezahlen von Kosten angezeigt. +nlDetailedPaymentDesc=Wenn aktiviert, werden deailierte Spruch-/Fähigkeitsbeschreibungen beim Auswählen von Zielen bzw. Bezahlen von Kosten angezeigt. nlShowStormCount=Wenn aktiviert,wird ein Sturmzähler angezeigt. nlRemindOnPriority=Wenn aktiviert, dann blinkt der Auswahlbereich des Spielers bei Erhalt der Priorität. -nlPreselectPrevAbOrder=Wenn aktiviert, wird die letzte genutzte Reihenfolge von Fähigkeiten im Auswahlfenster vorbelegt. +nlPreselectPrevAbOrder=Wenn aktiviert, wird die letzte genutze Reihenfolge von Fähigkeiten im Auswahlfenster vorbelegt. nlpGraveyardOrdering=Entscheidet, wann auf die Reihenfolge, in welcher Karten auf den Friedhof wandern, geachtet wird. (Niemals, immer oder nur wenn bestimmte Karten es nötig machen.) nlpAutoYieldMode=Definiert die Ebene der automatischen Bestätigung (pro Fähigkeit oder pro einzelner Karte). RandomDeckGeneration=Zufällige Deck-Erstellung @@ -146,7 +146,7 @@ AdvancedSettings=Erweiterte Optionen nlDevMode=Ativiert ein Menü mit Funktionen, welche das Testen vereinfachen. nlWorkshopSyntax=Aktiviert den Syntaxcheck für Kartenskripte im Workshop. Hinweis: Befindet sich noch in der Testphase! nlGameLogEntryType=Steuert den Umfang der Daten in der Protokolldatei. Sortiert vom geringsten zum gröten Umfang. -nlCloseAction=Steuert was passiert, wenn X oben rechts gedrückt wird. +nlCloseAction=Steuert was passiert, wenn X oben rechts gedückt wird. nlLoadCardsLazily=Wenn aktiviert, lädt Forge Kartenscripte erst wenn sie benötigt werden, nicht bei Programmstart. Warnung: Experimental!!! nlLoadHistoricFormats=Wenn aktiviert, lädt Forge auch ältere Spielformate. Verlängert den Programmstart. GraphicOptions=Grafik Optionen @@ -164,7 +164,7 @@ nlUiForTouchScreen=Vergrößert einige Elemente der Benutzeroberfläche zu besse nlCompactPrompt=Entfernt Überschriften und nutzt kleinere Schriftgröße um Bedienfenster kompakter zu machen. nlHideReminderText=Verstecke Erinnerungstext im Kartendetailfenster. nlOpenPacksIndiv=Beim Öffnen von FatPacks und Boosterboxen werden Booster einzeln nacheinander geöffnet. -nlTokensInSeparateRow=Zeige Spielsteine auf dem Spielfeld in einer separaten Reihe unter den Nicht-Spielsteinkreaturen. +nlTokensInSeparateRow=Zeige Spielsteinein auf dem Spielfeld in einer separaten Reihe unter den Nicht-Spielsteinkreaturen. nlStackCreatures=Stapelt identische Kreaturen auf dem Spielfeld, analog der Länder, Artefakte und Verzauberungen. nlTimedTargOverlay=Aktiviert eine Optimierung des Zielpfeil-Overlays. Nur bei Problemen/Rucklern auf älteren System deaktivieren. Erfordert den Neustart von laufenden Spielen. nlCounterDisplayType=Bestimmt im Spiel die Art der Anzeige von Markern auf Karten. Text-basiert zählt die Marker als Text auf. Bild-basiert zeigte die Marker als Punkte auf den Karten. Hybrid zeigt beides. @@ -179,8 +179,8 @@ KeyboardShortcuts=Tastenkombinationen lblAchievements=Errungenschaften # VSubmenuDownloaders.java btnDownloadSetPics=Bilder(LQ) Sets herunterladen +btnDownloadPicsHQ=Bilder(HQ Karten herunterladen (Sehr langsam!) btnDownloadPics=Bilder(LQ) Karten herunterladen -btnDownloadPicsHQ=Bilder(HQ) Karten herunterladen (Sehr langsam!) btnDownloadQuestImages=Bilder für Quests herunterladen btnDownloadAchievementImages=Bilder für Erfolge herunterladen btnReportBug=Einen Fehler melden @@ -221,7 +221,7 @@ AresetMatchScreenLayout=Dies wird das Spielfeldlayout zurücksetzen.\nFalls du v TresetMatchScreenLayout=Spielfeldlayout zurücksetzen OKresetMatchScreenLayout=Spielfeldlayout wurde zurückgesetzt. #EMenuGroup.java -lblSanctionedFormats=Gültige Spielformate +lblSanctionedFormats=gültige Spielformate lblOnlineMultiplayer=Mehrspieler (online) lblQuestMode=Quest-Modus lblPuzzleMode=Rätsel-Modus @@ -248,7 +248,7 @@ lblSelectaCommanderDeck=Wähle Commanderdeck lblSelectaPlanarDeck=Wähle Weltendeck lblPlanarDeckEditor=Weltendeck-Editor lblSelectaVanguardAvatar=Wähle Vanguard-Avatar -lblVanguardAvatar=Vanguard-Avatar +lblVanguardAvatar=Vanguard avatar lblDeck=Deck lblSchemeDeck=Komplottdeck lblCommanderDeck=Commanderdeck @@ -357,7 +357,7 @@ lblDraftText3=Dann spiele gegen einen oder alle KI-Gegner. lblNewBoosterDraftGame=Neues Spiel Booster Draft lblDraftDecks=Draft Decks #CSubmenuDraft.java -lblNoDeckSelected=Kein Spieler-Deck gewählt.\n(Du mußt eventuell ein neues Deck erstellen.) +lblNoDeckSelected=Kein Spieler-Deck gewählt.\n(Du muß eventuell ein neues Deck erstellen.) lblNoDeck=Kein Deck lblChooseDraftFormat=Wähle Draft Format #VSubmenuSealed.java @@ -400,7 +400,7 @@ lblVanguardDesc=Jeder Spieler hat eine eigene spielbeeinflussende \"Avatar\"-Kar lblCommander=Commander lblCommanderDesc=Jeder Spieler hat eine legendäre \"General\"-Karte, welche (fast) jederzeit gespielt werden kann und die Farben des Decks bestimmt. lblOathbreaker=Eidbrecher -lblOathbreakerDesc=Jeder Spieler hat eine Planeswalker-Karte als seinen "Eidbrecher", welche jederzeit gespielt werden kann und die Farben des Decks festlegt. Jeder Spieler hat außerdem noch einen "Signatur"-Spruch, welcher gespielt werden kann, solange der Eidbrecher im Spiel ist. +lblOathbreakerDesc=Jeder Spieler hat eine Plainswalker-Karte als seinen "Eidbrecher", welche jederzeit gespielt werdeb kann und die Farben des Decks festlegt. Jeder Spieler hat außerdem noch einnen "Signatur"-Spruch, welcher gespielt werden kann, solange der Eidbrecher im Spiel ist. lblTinyLeaders=Kleine Anführer lblTinyLeadersDesc=Jeder Spieler hat eine legendäre \"General\"-Karte, welche (fast) jederzeit gespielt werden kann und die Farben des Decks bestimmt. Alle Karten haben umgewandelte Manakosten von max. 3. lblBrawl=Brawl @@ -409,7 +409,7 @@ lblPlaneswalker=Planeswalker lblPlaneswalkerDesc=Jeder Spieler hat eine Planeswalker-Karte, welche (fast) jederzeit gespielt werden kann. lblPlanechase=Weltenjagd lblPlanechaseDesc=Weltenkarten haben globale Effekte. Wenn ein Spieler auf dem Weltenwürfel \"Planeswalk\"wirft, wechselt die Weltenkarte. -lblArchenemyDesc=Ein Spieler ist der Erzfeind und kämpft gegen die anderen Spieler. Er hat Komplottkarten.\nEiner gegen alle. +lblArchenemyDesc=Ein Spieler ist der Erzfeind und kämpft gegen die anderen Spieler. Er hat Komplottkarten.\NEiner gegen alle. lblArchenemyRumble=Erzfeind Rumble lblArchenemyRumbleDesc=Alle Spieler sind Erzfeinde und haben Komplottkarten.\nJeder gegen jeden. lblMomirBasic=Momir Basic @@ -453,7 +453,7 @@ lblStartingPoolDistribution=Verteilung der Startkarten lblChooseDistribution=Wähle Verteilung lblPrizedCards=Karten-Gewinn lblAllCardsAvailableWin=Alle Karten können gewonnen werden. -lblOnlySetsInStarting=Nur Karten aus den gewählten Startsets +lblOnlySetsInStarting=Nur Karten aus den gewählten Startssets lblAllowUnlockAdEd=Erlaube Freischaltung weiterer Blöcke lblEmbark=Aufbrechen! lblboxCompleteSet=Du startest mit je 4 Stück jeder Karte der gewählten Sets. @@ -497,7 +497,7 @@ lblColorless=Farblos lblIncludeArtifacts=mit Artefakten lblBalanced=Ausgeglichen lblTrueRandom=Wirklich zufällig -lblSurpriseMe=Überrasche mich +lblSurpriseMe=Überrasch mich lblBoosters=Booster lblClearAll=Alles löschen lblNumberofBoosters=Anzahl Booster @@ -508,11 +508,11 @@ lblHoverforDescription=Für ausführliche Beschreibung länger länger draufzeig lblradBalanced="Ausgeglichen" führt zu einer etwa gleichen Anzahl Karten der gewählten Farben. lblradRandom="Wirklich zufällig" führt zu einer zufällig Anzahl Karten pro Farbe. Ignoriert die Farbwahl. lblradSurpriseMe=Wie "Ausgeglichen", nur das auch die Farbwahl zufällig ist. -lblradBoosters=Ignoriert Farbwahl. Entnimmt die Karten einer gewählten Anzahl Booster. +lblradBoosters=IgnoriertFarbwahl. Entnimmt die Karten einer gewählten Anzahl Booster. lblcbxArtifacts=Wenn gewählt, werden Artefakte hinzugefügt, unabhängig von der Farbwahl. Imitiert das alte Erstellungsverhalten. #VSubmenuChallenges.java lblQuestChallenges=Quest Herausforderungen -htmlLaunchZeppelin=Starte
Zeppelin +htmlLaunchZeppelin=Starte
Zepelin lblQuestModeChallenges=Quest Modus: Herausforderungen lblWhichChallenge=Welche Herausforderung nimmst du an? #VSubmenuQuestDraft.java @@ -539,7 +539,7 @@ lblConstructedDecks=Konstruierte Decks lblCommanderDecks=Commander Decks lblRandomCommanderDecks=Zufälliges Commander Deck lblRandomCommanderCard-basedDecks=Zufälliges Commander Deck (kartenbasiert) -lblOathbreakerDecks=Eidbrecher-Decks +lblOathbreakerDecks=Oathbreaker-Decks lblTinyLeadersDecks=Kleine-Anführer-Decks lblBrawlDecks=Brawl Decks lblSchemeDecks=Komplott-Decks @@ -548,6 +548,7 @@ lblPreconstructedDecks=Vorkonstruiertes Deck lblQuestOpponentDecks=Quest-Gegner-Deck lblRandomColorDecks=Decks - zufällige Farben lblRandomStandardArchetypeDecks=Decks - zufälliger Standard-Archetyp +lblRandomPioneerArchetypeDecks=Decks - zufälliger Pioneer-Archetyp lblRandomModernArchetypeDecks=Decks - zufälliger Modern-Archetyp lblRandomLegacyArchetypeDecks=Decks - zufälliger Legacy-Archetyp lblRandomVintageArchetypeDecks=Decks - zufälliger Vintage-Archetyp @@ -587,7 +588,7 @@ lblGauntletDesc2=Die Pfeiltasten rauf/runter ändern die Reihenfolge der Gegner. lblDecklist=Doppelklicke auf Deck für Deckliste. btnUp=Bewege dieses Deck nach vorne. btnDown=Bewege dieses Deck nach hinten. -btnRight=Füge dieses Deck hinzu. +btnRight=Füge dieses Deck himzu. btnLeft=Entferne dieses Deck. btnSaveGauntlet=Sichere den Spießrutenlauf btnNewGauntlet=Erzeuge einen neuen Spießrutenlauf @@ -628,11 +629,11 @@ titleUnlocked=%n freigeschaltet! lblStartADuel=Starte eine Duell. lblSelectAQuestDeck=Wähle ein Quest-Deck lblInvalidDeck=Unzulässiges Deck -lblInvalidDeckDesc=Dein Deck %n. Bitte ändern oder anderes Deck wählen. +lblInvalidDeckDesc=Dein Deck %n\nBitte ändern oder anderes Deck wählen. #VSubmenuQuestPrefs.java lblQuestPreferences=Quest-Einstellungen lblRewardsError=Fehler bei Belohnungen -lblDifficultyError=Fehler bei Schwierigkeitsgrad +lblDifficultyError=Fehler bei Schwierigskeitsgrad lblBoosterError=Fehler bei Boostern lblShopError=Fehler im Laden lblDraftTournamentsError=Fehler im Draft-Turnier @@ -699,7 +700,7 @@ ttPlaysetSize=Die Anzahl Karten, welche behalten werden, bevor der Rest verkauft lblPlaysetSizeBasicLand=Playsetgröße: Standardland ttPlaysetSizeBasicLand=Die Anzahl Standardländer, welche behalten werden, bevor der Rest verkauft wird. lblPlaysetSizeAnyNumber=Playsetgröße: beliebige Anzahl -ttPlaysetSizeAnyNumber=Die Anzahl von Unbarmherzige Ratten oder ähnlicher Karten ohne Limit, welche behalten werden, bevor der Rest verkauft wird. +ttPlaysetSizeAnyNumber=Die Anzahl von Rstlose Ratten oder ähnlicher Karten ohne Limit, welche behalten werden, bevor der Rest verkauft wird. lblItemLevelRestriction=Einschränkung des Gegenstandsniveau lblFoilfilterAlwaysOn=Foil Filter immer an lblRatingsfilterAlwaysOn=Bewertungsfilter immer an @@ -709,7 +710,7 @@ lblWinsforNewDraft=Siege für neues Draft-Spiel lblWinsperDraftRotation=Siege pro Draft notwendig ttWinsperDraftRotation=Wenn ein Draft nicht soweit fertig gespielt wird, wird er entfernt oder ersetzt. lblRotationType=Austauschtyp -ttRotationType=Bei 0 verschwinden alte Drafts, bei 1 wird er durch einen neuen ersetzt. +ttRotationType=Bei 0 verschwinden alte Drafts, bei 1 wird er duch einen neuen ersetzt. #StatTypeFilter.java lblclicktotoogle=Klicke zum Umschalten des Filters, Rechtsklick für Einzelanzeige von: #SItemManagerUtil.java @@ -758,7 +759,7 @@ lblUniqueCardsOnly=Nur eine Version ttUniqueCardsOnly=Schaltet zwischen der Anzeige der neuesten oder aller Versionen einer Karte um. #ACEditorBase.java lblAddcard=Karten hinzufügen -ttAddcard=Fügt gewählte Karte dem Deck hinzu (oder Doppelklick oder Leertaste drücken) +ttAddcard=Fügt gewählte Karte dem Deck hinzu (oder Doppelklick oder Leertate drücken) lblAdd4ofcard=4 Karten hinzufügen ttAdd4ofcard=Fügt bis zu 4 Kopien der gewählten Karte dem Deck hinzu lblRemovecard=Entferne Karte @@ -795,7 +796,7 @@ lbltodeck=zum Deck lblfromdeck=vom Deck lbltosideboard=zum Sideboard lblfromsideboard=vom Sideboard -lblascommander=als Kommandeur +lblascommander=als General lblasoathbreaker=als "Eidbrecher" lblassignaturespell=als "Signatur"-Spruch lblasavatar=als Avatar @@ -807,7 +808,7 @@ lbltoplanardeck=zum Weltendeck lbltoconspiracydeck=zum Verschwörungsdeck lblMove=Verschieben #VDock.java -lblDock=Symbolleiste +lblDock=Anhängen lblViewDeckList=Zeige Deckliste lblRevertLayout=Layout zurücksetzen lblOpenLayout=Lade Layout @@ -827,7 +828,7 @@ lblMulticolor=Mehrfarbig #DeckFileMenu.java lblNewDeck=Neues Deck lblOpenDeck=Öffne Deck -lblImportDeck=Deck importieren +lblImportDeck=Deck importiren lblSaveDeck=Speichere Deck lblSaveDeckAs=Speichere Deck unter lblPrinttoHTMLfile=Speicher als HTML-Datei @@ -857,11 +858,11 @@ ttbtnRandDeck3=Erzeugt konstuiertes Deck in drei Farben btnRandDeck5=Constructed (5 Farben) ttbtnRandDeck5=Erzeugt konstuiertes Deck in fünf Farben #DeckCotroller.java -lblCurrentDeck2=Aktuelles Deck +lblCurrentDeck2=aktuelles Deck lblUntitled=Unbenannt #VPrompt.java -lblPrompt=Meldungen -lblGameSetup=Spielvorbereitung +lblPrompt=Abfrage +lblGameSetup=Spielaufbau #ColumnDef.java lblAIStatus=KI-Status lblCMC=UMK @@ -902,13 +903,13 @@ lblSettings=Einstellungen #SettingsPage.java lblAutomaticBugReports=Automatischer Fehlerbericht lblBattlefieldTextureFiltering=Texturenfilter Spielfeld -lblCompactListItems=Kompakte Liste -lblCompactTabs=Kompakte Tabs -lblCardOverlays=Karten-Einblendungen +lblCompactListItems=kompakte Liste +lblCompactTabs=kompakte Tabs +lblCardOverlays=Karten-Overlays lblDisableCardEffect=Karten-"Effekt"-Anzeige abschalten lblDynamicBackgroundPlanechase=Weltenjagd dynamischer Hintergrund lblGameplayOptions=Spiel-Optionen -lblGeneralSettings=Allgem. Einstellungen +lblGeneralSettings=allgem. Einstellungen lblHotSeatMode=Hot-Seat-Modus lblLandscapeMode=Querformat lblLater=Später @@ -944,18 +945,18 @@ nlShowAbilityIconsOverlays=Blendet kleine Bilder für Fähigkeiten über die Kar nlShowCardIDOverlays=Blendet die ID-Nummer über die Karten. nlShowCardManaCostOverlays=Blendet die Manakosten über die Karten. nlShowCardNameOverlays=Blendet die Namen über die Karten. -nlShowCardOverlays=Aktiviert die Einblendungen über den Karten. +nlShowCardOverlays=Aktiviert die Einblendungen übder den Karten. nlShowCardPTOverlays=Blendet die Stärke und Widerstand über die Karten. nlShowMatchBackground=Zeige Bilder im Spielfeldhintergrund. nlTheme=Wähle ein Thema um die Bildschirmanzeigen anzupassen. -nlVibrateAfterLongPress=Aktiviert Vibration bei langen Druck, z.B. beim Zoomen. -nlVibrateWhenLosingLife=Aktiviert Vibration bei Lebenspunktverlust. -lblEnableRoundBorder=Enable Round Border Mask -nlEnableRoundBorder=When enabled, the card corners are rounded (Preferably Card with Full Borders). -lblPreloadExtendedArtCards=Preload Extended Art Cards -nlPreloadExtendedArtCards=When enabled, Preloads Extended Art Cards to Cache on Startup. -lblShowFPSDisplay=Show FPS Display -nlShowFPSDisplay=When enabled, show the FPS Display (Experimental). +nlVibrateAfterLongPress=Aktiviert Vabration bei langen Druck, z.B. beim Zoomen. +nlVibrateWhenLosingLife=Aktiviert eine Vibration bei jedem Lebenspunktverlust. +lblEnableRoundBorder=Aktiviere Maske mit runden Ränder +nlEnableRoundBorder=Wenn aktiviert, werden Kartenecken abgerundet. Vorzugsweise bei Karten mit vollem Rand. +lblPreloadExtendedArtCards=Erw. Kartenbilder bei Start laden +nlPreloadExtendedArtCards=Wenn aktiviert, werden erweiterte Kartenbilder bereits beim Start in den Speicher geladen. +lblShowFPSDisplay=FPS-Anzeige +nlShowFPSDisplay=Aktiviert die Frames-per-second-Anzeige (Experimental). #MatchScreen.java lblPlayers=Spieler lblLog=Bericht @@ -986,12 +987,13 @@ lblToMainDeck=zum Haupt-Deck lblHowMany=wie viel? lblInventory=Inhaltsverzeichnis lblCollection=Sammlung -lblCommanders=Komandeure +lblCommanders=Generäle lblOathbreakers=Eidbrecher #Forge.java lblLoadingFonts=Lade Schriftarten... lblLoadingCardTranslations=Lade Karten-Übersetzungen... lblFinishingStartup=Letzte Vorbereitungen... +lblPreloadExtendedArt=Lade erweiterte Bilder... #LobbyScreen.java lblMore=Mehr... lblLoadingNewGame=Lade neues Spiel... @@ -1040,7 +1042,7 @@ lblSwipeUpTo=Wische hoch für %s lblSwipeDownDetailView=Wische runter für Detailansicht lblSwipeDownPictureView=Wische runter für Bildansicht #VGameMenu.java -lblNoPlayerPriorityNoDeckListViewed=Kein Spieler hat Priorität, daher keine Decklistenanzeige möglich. +lblNoPlayerPriorityNoDeckListViewed=Kein Spieler hat Prioriät, daher keine Decklistenanzeige möglich. #FilesPage.java lblFiles=Dateien lblStorageLocations=Speicherort @@ -1065,12 +1067,12 @@ lblImportLatestVersionCard=Importiere neueste Kartenversion lblUseOnlySetsReleasedBefore=Nur Sets verwenden vor: lblUseOnlyCoreAndExpansionSets=Nutze nur Haupt- u. Erweiterungssets lblFollowingCardsCannotBeImported=Folgende Karten können nicht importiert werden, wegen Tippfehlern, Seteinschränkungen oder weil nicht in Forge: -lblImportRemainingCards=Verbleibende Karten importieren? +lblImportRemainingCards=Verbleibende Karteen importieren? lblNoKnownCardsOnClipboard=Keine Karten in der Zwischenablage gefunden.\n\nKopiere eine Deckliste in die Zwischenablage und versuche es erneut. #FDeckViewer.java lblDeckListCopiedClipboard=Deckliste von "%s" in Zwischenablage kopiert. #FSideboardDialog.java -lblUpdateMainFromSideboard=Aktualisiere %s aus dem Sideboard +lblUpdateMainFromSideboard=Aktuallisiere %s aus dem Sideboard #FVanguardChooser.java lblRandomVanguard=Zufälliger Avatar #FOptionPane.java @@ -1094,7 +1096,7 @@ lblStormCount=Sturmzähler #PlayerControllerHuman.java lblYouHaveWonTheCoinToss=%s, du hast den Münzwurf gewonnen. lblYouLostTheLastGame=%s, du hast das letzte Spiel verloren. -lblWouldYouLiketoPlayorDraw=Willst du lieber zuerst spielen oder ziehen. +lblWouldYouLiketoPlayorDraw=Willst du lieber zuerst spielen oder ziehen? lblWhoWouldYouLiketoStartthisGame=Wer soll das Spiel beginnen? (Klicke auf das Portrait.) lblPlay=Spielen lblDraw=Ziehen @@ -1118,7 +1120,7 @@ lblYouMustHavePrioritytoUseThisFeature=Um diese Funktion zu nutzen brauchst du d lblNameTheCard=Nenne die Karte lblWhichPlayerShouldRoll=Welcher Spieler soll würfeln? lblChooseResult=Wähle Ergebnis -lblChosenCardNotPermanentorCantExistIndependentlyontheBattleground=Die gewählte Karte ist keine bleibende oder kann nicht alleine auf dem Spielfeld existieren.\nWenn du einen Nicht-bleibenden-Karte-Spruch sprechen, oder einen Bleibende-Karte-Spruch auf dem Stapel platzieren möchtest, nutze bitte den "Zauber wirken/Land spielen"-Knopf. +lblChosenCardNotPermanentorCantExistIndependentlyontheBattleground=Die gewählte Karte ist keine bleibende oder kann nicht alleine auf dem Spielfeld existieren.\nWenn du einen Nicht-bleibenden-Karte-Spruch sprechen, oder einen Bleibende-Karte-Spruch auf dem Stapel plazieren möchtest, nutze bitte den "Zauber wirken/Land spielen"-Knopf. lblError=Fehler lblWinGame=Gewinne Spiel lblSetLifetoWhat=Setze Lebenspunkte auf? @@ -1146,6 +1148,28 @@ lblArrangeCardsToBePutOnTopOfYourLibrary=Ordne Karten, welche unter die Biblioth lblTopOfLibrary=Oben auf Bibliothek lblSelectCardsToBePutIntoTheGraveyard=Wähle Karten, welche auf den Friedhof gelegt werden sollen lblCardsToPutInTheGraveyard=Karten, welche auf den Friedhof gelegt werden sollen +lblDiscardUpToNCards=Werfe bis zu %d Karte(n) ab +lblDiscardNCards=Werfe %d Karte(n) ab +lblSelectNCardsToDiscardUnlessDiscarduType=Wähle bis zu %d Karte(n) zum abwerfen, außer du wirfst eine %s ab. +lblCleanupPhase=Aufräumphase +lblSelectCardsToDiscardHandDownMaximum=Werfe %d Karte(n) ab um dein Handmaximum von %max Karte(n) zu erfüllen. +lblChooseMinCardToDiscard=Wähle %d Karte(n) zm Abwerfen +lblDiscarded=Abgeworfen +lblChooseDamageOrderFor=Wähle Schadensreihenfolge für %s +lblDamagedFirst=Zuerst geschädigt +lblChooseBlockerAfterWhichToPlaceAttackert=Wähle Blocker für Platz %s in der Schadensreihenfolge; Abbrechen für ersten Platz +lblPutCardOnTopOrBottomLibrary=Lege %s auf oder unter deine Bibliothek? +lblChooseOrderCardsPutIntoLibrary=Wähle die Reihenfolge der Karten, in der sie in die Bibliothek gelegt werden +lblClosestToTop=Zuoberst +lblChooseOrderCardsPutOntoBattlefield=Wähle die Reihenfolge der Karten, in der sie auf das Spielfeld gebracht werden +lblPutFirst=Lege zuerst +lblChooseOrderCardsPutIntoGraveyard=Wähle die Reihenfolge der Karten, in der sie in den Friedhof gelegt werden +lblClosestToBottom=Zuunterst +lblChooseOrderCardsPutIntoPlanarDeck=Wähle die Reihenfolge der Karten, in der sie in das Weltendeck gelegt werden +lblChooseOrderCardsPutIntoSchemeDeck=Wähle die Reihenfolge der Karten, in der sie in den Verschwörungsdeck gelegt werden +lblChooseOrderCopiesCast=Wähle die Reihenfolge für die Kopien +lblDelveHowManyCards=Wühlen - Wie viele Karten? +lblExileWhichCard=Schicke welche Karte ins Exil? #AbstractGuiGame.java lblConcedeCurrentGame=Das Spiel wird als verloren gewertet.\n\nTrotzdem aufgeben? lblConcedeTitle=Spiel verloren geben? @@ -1177,28 +1201,41 @@ btnQuitMatch=Beende Partie lblItsADraw=Es ist ein Unentschieden! lblTeamWon=Team %s hat gewonnen! lblWinnerWon=%s hat gewonnen! -lblGameLog=Spiel-Aufzeichnung +lblGameLog=Spiel-Bericht #NewDraftScreen.java -lblLoadingNewDraft=Loading new draft... +lblLoadingNewDraft=Lade neuen Draft... #LoadDraftScreen.java -lblDoubleTapToEditDeck=Double-tap to edit deck (Long-press to view) -lblMode=Mode: -lblYouMustSelectExistingDeck=You must select an existing deck or build a deck from a new booster draft game. -lblWhichOpponentWouldYouLikeToFace=Which opponent would you like to face? -lblSingleMatch=Single Match +lblDoubleTapToEditDeck=Doppelklick zum Bearbeiten. Lange drücken für Anzeige. +lblMode=Modus: +lblYouMustSelectExistingDeck=Du mußt eine bestehendes Deck wählen oder ein neues Draft-Deck erstellen. +lblWhichOpponentWouldYouLikeToFace=Wähle deinen Gegner! +lblSingleMatch=Einzelnes Spiel #NewGauntletScreen.java -lblGauntletText1=In Gauntlet mode, you select a deck and play against multiple opponents. -lblGauntletText2=Configure how many opponents you wish to face and what decks or types of decks they will play. -lblGauntletText3=Then, try to beat all AI opponents without losing a match. -lblSelectGauntletType=Select a Gauntlet Type -lblCustomGauntlet=Custom Gauntlet -lblGauntletContest=Gauntlet Contest -lblSelectYourDeck=Select Your Deck -lblSelectDeckForOpponent=Select Deck for Opponent -lblSelectGauntletContest=Select Gauntlet Contest +lblGauntletText1=Beim Spießrutenlauf wählst du ein Deck und tritts gegen mehrer Gegner an. +lblGauntletText2=Wähle die Anzahl der Gegener und welche Art Deck sie spielen sollen. +lblGauntletText3=Dann versuche alle Gegner zu besiegen auche ein Spiel zu verlieren. +lblSelectGauntletType=Wähle die Art des Spießrutenlaufs +lblCustomGauntlet=angepaßter Spießrutenlauf +lblGauntletContest=Wettbewerb +lblSelectYourDeck=Wähle dein Deck +lblSelectDeckForOpponent=Wähle Deck für Gegner +lblSelectGauntletContest=Wähle Wettbewerb #PuzzleScreen.java -lblPuzzleText1=Puzzle Mode loads in a puzzle that you have to win in a predetermined time/way. -lblPuzzleText2=To begin, press the Start button below, then select a puzzle from a list. -lblPuzzleText3=Your objective will be displayed in a pop-up window when the puzzle starts and also specified on a special effect card which will be placed in your command zone. -lblChooseAPuzzle=Choose a puzzle -lblLoadingThePuzzle=Loading the puzzle... \ No newline at end of file +lblPuzzleText1=Der puzzle-Modus lädt ein Puzzle, welches du auf eine bestimmte Art zu gewinnen hast. +lblPuzzleText2=Drücke Start und wähle ein Puzzle aus der Liste. +lblPuzzleText3=Zu Beginn wird dir in einem Fenster dein Ziel erklärt, und auch eventuelle spezielle Karten in deiner Kommandozone. +lblChooseAPuzzle=Wähle ein Puzzle +lblLoadingThePuzzle=Lade das Puzzle... +#InputPassPriority.java +lblCastSpell=Einen Zauberspruch sprechen +lblPlayLand=Spiele ein Land +lblActivateAbility=Aktiviere Fähigkeit +lblYouHaveManaFloatingInYourManaPoolCouldBeLostIfPassPriority=Du hast noch unverbrauchtes Mana, welches verloren geht, wenn du die Priorität abgibst. +lblYouWillTakeManaBurnDamageEqualAmountFloatingManaLostThisWay=Du wirst Manabrand erleiden, in Höhe des verlorenen Manas. +lblManaFloating=Unverbrauchtes Mana +#InputPayManaOfCostPayment.java +lblPayManaCost=Zahle die Spruchkosten: +lblLifePaidForPhyrexianMana=(%d Leben wurde bezahlt für phyrexianisches Mana) +lblClickOnYourLifeTotalToPayLifeForPhyrexianMana=Klicke auf deine Lebenspunkte um phyrexianisches Mana zu bezahlen. +lblClickOnYourLifeTotalToPayLifeForBlackMana=Klicke auf deine Lebenspunkte um schwarzes Mana zu bezahlen. +lblClickOnYourLifeTotalToPayLifeForPhyrexianOrBlackMana=Klicke auf deine Lebenspunkte um phyrexianisches oder schwarzes Mana zu bezahlen. \ 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 c4e19660003..7a73d4ccfb4 100644 --- a/forge-gui/res/languages/en-US.properties +++ b/forge-gui/res/languages/en-US.properties @@ -548,6 +548,7 @@ lblPreconstructedDecks=Preconstructed Decks lblQuestOpponentDecks=Quest Opponent Decks lblRandomColorDecks=Random Color Decks lblRandomStandardArchetypeDecks=Random Standard Archetype Decks +lblRandomPioneerArchetypeDecks=Random Pioneer Archetype Decks lblRandomModernArchetypeDecks=Random Modern Archetype Decks lblRandomLegacyArchetypeDecks=Random Legacy Archetype Decks lblRandomVintageArchetypeDecks=Random Vintage Archetype Decks @@ -992,6 +993,7 @@ lblOathbreakers=Oathbreakers lblLoadingFonts=Loading fonts... lblLoadingCardTranslations=Loading card translations... lblFinishingStartup=Finishing startup... +lblPreloadExtendedArt=Preload Extended Art... #LobbyScreen.java lblMore=More... lblLoadingNewGame=Loading new game... @@ -1146,6 +1148,28 @@ lblArrangeCardsToBePutOnTopOfYourLibrary=Arrange cards to be put on top of your lblTopOfLibrary=Top of Library lblSelectCardsToBePutIntoTheGraveyard=Select cards to be put into the graveyard lblCardsToPutInTheGraveyard=Cards to put in the graveyard +lblDiscardUpToNCards=Discard up to %d card(s) +lblDiscardNCards=Discard %d card(s) +lblSelectNCardsToDiscardUnlessDiscarduType=Select %d card(s) to discard, unless you discard a %s. +lblCleanupPhase=Cleanup Phase +lblSelectCardsToDiscardHandDownMaximum=Select %d card(s) to discard to bring your hand down to the maximum of %max cards. +lblChooseMinCardToDiscard=Choose %d card(s) to discard +lblDiscarded=Discarded +lblChooseDamageOrderFor=Choose Damage Order for %s +lblDamagedFirst=Damaged First +lblChooseBlockerAfterWhichToPlaceAttackert=Choose blocker after which to place %s in damage order; cancel to place it first +lblPutCardOnTopOrBottomLibrary=Put %s on the top or bottom of your library? +lblChooseOrderCardsPutIntoLibrary=Choose order of cards to put into the library +lblClosestToTop=Closest to top +lblChooseOrderCardsPutOntoBattlefield=Choose order of cards to put onto the battlefield +lblPutFirst=Put first +lblChooseOrderCardsPutIntoGraveyard=Choose order of cards to put into the graveyard +lblClosestToBottom=Closest to bottom +lblChooseOrderCardsPutIntoPlanarDeck=Choose order of cards to put into the planar deck +lblChooseOrderCardsPutIntoSchemeDeck=Choose order of cards to put into the scheme deck +lblChooseOrderCopiesCast=Choose order of copies to cast +lblDelveHowManyCards=Delve how many cards? +lblExileWhichCard=Exile which card? #AbstractGuiGame.java lblConcedeCurrentGame=This will concede the current game and you will lose.\n\nConcede anyway? lblConcedeTitle=Concede Game? @@ -1201,4 +1225,17 @@ lblPuzzleText1=Puzzle Mode loads in a puzzle that you have to win in a predeterm lblPuzzleText2=To begin, press the Start button below, then select a puzzle from a list. lblPuzzleText3=Your objective will be displayed in a pop-up window when the puzzle starts and also specified on a special effect card which will be placed in your command zone. lblChooseAPuzzle=Choose a puzzle -lblLoadingThePuzzle=Loading the puzzle... \ No newline at end of file +lblLoadingThePuzzle=Loading the puzzle... +#InputPassPriority.java +lblCastSpell=cast spell +lblPlayLand=play land +lblActivateAbility=activate ability +lblYouHaveManaFloatingInYourManaPoolCouldBeLostIfPassPriority=You have mana floating in your mana pool that could be lost if you pass priority now. +lblYouWillTakeManaBurnDamageEqualAmountFloatingManaLostThisWay=You will take mana burn damage equal to the amount of floating mana lost this way. +lblManaFloating=Mana Floating +#InputPayManaOfCostPayment.java +lblPayManaCost=Pay Mana Cost: +lblLifePaidForPhyrexianMana=(%d life paid for phyrexian mana) +lblClickOnYourLifeTotalToPayLifeForPhyrexianMana=Click on your life total to pay life for phyrexian mana. +lblClickOnYourLifeTotalToPayLifeForBlackMana=Click on your life total to pay life for black mana. +lblClickOnYourLifeTotalToPayLifeForPhyrexianOrBlackMana=Click on your life total to pay life for phyrexian mana or black mana. \ 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 392ad81affe..780387cb45a 100644 --- a/forge-gui/res/languages/es-ES.properties +++ b/forge-gui/res/languages/es-ES.properties @@ -548,6 +548,7 @@ lblPreconstructedDecks=Mazos Preconstruidos lblQuestOpponentDecks=Mazos de los Oponentes de la Aventura lblRandomColorDecks=Mazos Aleatorios por Color lblRandomStandardArchetypeDecks=Mazos Standard por Arquetipo +lblRandomPioneerArchetypeDecks=Random Pioneer Archetype Decks lblRandomModernArchetypeDecks=Mazos Modern por Arquetipo lblRandomLegacyArchetypeDecks=Mazos Legacy por Arquetipo lblRandomVintageArchetypeDecks=Mazos Vintage por Arquetipo @@ -950,12 +951,12 @@ nlShowMatchBackground=Muestra la imagen de fondo de la partida en el campo de ba nlTheme=Establece el tema que determina el aspecto global del juego. nlVibrateAfterLongPress=Habilita la vibración rápida cuando se realice una pulsación prolongada, como p.ej. al realizar zoom de la carta. nlVibrateWhenLosingLife=Habilita la vibración cuando tu jugador pierde vida o sufre daños durante un juego. -lblEnableRoundBorder=Enable Round Border Mask -nlEnableRoundBorder=When enabled, the card corners are rounded (Preferably Card with Full Borders). -lblPreloadExtendedArtCards=Preload Extended Art Cards -nlPreloadExtendedArtCards=When enabled, Preloads Extended Art Cards to Cache on Startup. -lblShowFPSDisplay=Show FPS Display -nlShowFPSDisplay=When enabled, show the FPS Display (Experimental). +lblEnableRoundBorder=Habilitar máscara de bordes redondeados +nlEnableRoundBorder=Cuando está habilitado, las esquinas de las cartas se redondean (Preferiblemente Cartas con bordes completos). +lblPreloadExtendedArtCards=Precargar Cartas de Arte Extendido +nlPreloadExtendedArtCards=Cuando está habilitado, carga previamente las cartas de arte ampliadas en la caché al iniciar el programa. +lblShowFPSDisplay=Mostrar FPS +nlShowFPSDisplay=Cuando está habilitado, muestra los FPS (Experimental). #MatchScreen.java lblPlayers=Jugadores lblLog=Log @@ -992,6 +993,7 @@ lblOathbreakers=Oathbreakers lblLoadingFonts=Cargando fuentes... lblLoadingCardTranslations=Cargando traducciones de cartas... lblFinishingStartup=Finalizando el arranque... +lblPreloadExtendedArt=Precargando Arte Extendido... #LobbyScreen.java lblMore=Más... lblLoadingNewGame=Cargando nueva partida... @@ -1146,6 +1148,28 @@ lblArrangeCardsToBePutOnTopOfYourLibrary=Organizar las cartas para colocarlas en lblTopOfLibrary=Parte Superior de la Biblioteca lblSelectCardsToBePutIntoTheGraveyard=Selecciona las cartas para ponerlas en el Cementerio lblCardsToPutInTheGraveyard=Cartas para poner en el Cementerio +lblDiscardUpToNCards=Descarta hasta %d carta(s) +lblDiscardNCards=Descarta %d carta(s) +lblSelectNCardsToDiscardUnlessDiscarduType=Selecciona %d carta(s) para descartar, a menos que descartes un %s. +lblCleanupPhase=Fase de Limpieza +lblSelectCardsToDiscardHandDownMaximum=Selecciona %d carta(s) a descartar para reducir tu mano al máximo de %max cartas. +lblChooseMinCardToDiscard=Elige %d carta(s) para descartar +lblDiscarded=Descartado +lblChooseDamageOrderFor=Selecciona el Orden de Daños para %s +lblDamagedFirst=Dañado Primero +lblChooseBlockerAfterWhichToPlaceAttackert=Elige un bloqueador después del cual colocar %s en el orden de daño; cancela para colocarlo primero. +lblPutCardOnTopOrBottomLibrary=¿Poner %s en la parte superior o inferior de tu biblioteca? +lblChooseOrderCardsPutIntoLibrary=Elige el orden de las cartas para poner en la biblioteca +lblClosestToTop=Más cerca de la parte superior +lblChooseOrderCardsPutOntoBattlefield=Elige el orden de las cartas que quieres poner en el campo de batalla +lblPutFirst=Poner en primer lugar +lblChooseOrderCardsPutIntoGraveyard=Elige el orden de las cartas para poner en el cementerio +lblClosestToBottom=Más cerca de la parte inferior +lblChooseOrderCardsPutIntoPlanarDeck=Elige el orden de las cartas que quieres poner en el mazo planar +lblChooseOrderCardsPutIntoSchemeDeck=Elige el orden de las cartas que quieres poner en el mazo scheme +lblChooseOrderCopiesCast=Elige el orden de las copias que se van a invocar +lblDelveHowManyCards=¿Excavar cuántas cartas? +lblExileWhichCard=¿Exiliar qué carta? #AbstractGuiGame.java lblConcedeCurrentGame=Esto concederá la partida actual y perderás.\n\n¿Conceder de todos modos? lblConcedeTitle=¿Conceder Partida? @@ -1201,4 +1225,17 @@ lblPuzzleText1=En el Modo Puzzle se carga un rompecabezas que tienes que ganar e lblPuzzleText2=Para comenzar, pulsa el botón Inicio y selecciona un puzzle de una lista. lblPuzzleText3=Tu objetivo se mostrará en una ventana emergente cuando se inicie el puzzle y también se especificará en una carta de efectos especiales que se colocará en tu zona de comandos. lblChooseAPuzzle=Elige un puzzle -lblLoadingThePuzzle=Cargando el puzzle... \ No newline at end of file +lblLoadingThePuzzle=Cargando el puzzle... +#InputPassPriority.java +lblCastSpell=lanzar hechizo +lblPlayLand=jugar tierra +lblActivateAbility=activar abilidad +lblYouHaveManaFloatingInYourManaPoolCouldBeLostIfPassPriority=Tienes maná flotando en tu pool de maná que podría perderse si pasas la prioridad ahora. +lblYouWillTakeManaBurnDamageEqualAmountFloatingManaLostThisWay=Recibirás un daño por quemadura de maná igual a la cantidad de maná flotante perdido de esta manera. +lblManaFloating=Maná Flotante +#InputPayManaOfCostPayment.java +lblPayManaCost=Paga el coste de maná: +lblLifePaidForPhyrexianMana=(%d de vida pagado por el maná filaxiano) +lblClickOnYourLifeTotalToPayLifeForPhyrexianMana=Haga clic en el total de su vida para pagar la vida por el maná filaxiano. +lblClickOnYourLifeTotalToPayLifeForBlackMana=Haga clic en el total de su vida para pagar la vida de maná negro. +lblClickOnYourLifeTotalToPayLifeForPhyrexianOrBlackMana=Haga clic en el total de su vida para pagar la vida por maná filoxiano o maná negro. \ 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 19fa169b2c9..ee47a32905a 100644 --- a/forge-gui/res/languages/zh-CN.properties +++ b/forge-gui/res/languages/zh-CN.properties @@ -548,6 +548,7 @@ lblPreconstructedDecks=预组套牌 lblQuestOpponentDecks=冒险之旅套牌 lblRandomColorDecks=随机颜色套牌 lblRandomStandardArchetypeDecks=随机标准原型套牌 +lblRandomPioneerArchetypeDecks=随机先驱原型套牌 lblRandomModernArchetypeDecks=随机摩登原型套牌 lblRandomLegacyArchetypeDecks=随机薪传原型套牌 lblRandomVintageArchetypeDecks=随机特选原型套牌 @@ -883,7 +884,7 @@ lblQty=数量 lblQuantity=数量 lblSide=备牌 lblSideboard=备牌 -lblNew=新建 +lblNew=新获得 lblOwned=拥有 lblPower=力量 ttPower=力量 @@ -992,6 +993,7 @@ lblOathbreakers=破誓者 lblLoadingFonts=加载字体中 lblLoadingCardTranslations=加载卡牌翻译中 lblFinishingStartup=完成启动 +lblPreloadExtendedArt=预加载拉伸卡图 #LobbyScreen.java lblMore=更多 lblLoadingNewGame=载入新游戏中 @@ -1146,6 +1148,28 @@ lblArrangeCardsToBePutOnTopOfYourLibrary=为放于牌库顶的卡牌排序 lblTopOfLibrary=牌库顶 lblSelectCardsToBePutIntoTheGraveyard=选择要放于坟场的卡牌 lblCardsToPutInTheGraveyard=放于坟场的卡牌 +lblDiscardUpToNCards=最多弃%d张牌 +lblDiscardNCards=弃%d张牌 +lblSelectNCardsToDiscardUnlessDiscarduType=选择要丢弃的%d张牌,除非你丢弃%s。 +lblCleanupPhase=清除步骤 +lblSelectCardsToDiscardHandDownMaximum=选择要丢弃的%d张牌,以使你的手牌数量减少到%max张。 +lblChooseMinCardToDiscard=选择%d张牌弃掉 +lblDiscarded=弃牌 +lblChooseDamageOrderFor=选择%s造成伤害的顺序 +lblDamagedFirst=先造成伤害 +lblChooseBlockerAfterWhichToPlaceAttackert=选择%s后造成伤害的阻挡者; cancel to place it first +lblPutCardOnTopOrBottomLibrary=将%s放到牌库顶还是底? +lblChooseOrderCardsPutIntoLibrary=选择要放入牌库中的牌的顺序 +lblClosestToTop=最接近顶部 +lblChooseOrderCardsPutOntoBattlefield=选择要放入战场中的牌的顺序 +lblPutFirst=放在最前 +lblChooseOrderCardsPutIntoGraveyard=选择要放入坟场中的牌的顺序 +lblClosestToBottom=最接近底部 +lblChooseOrderCardsPutIntoPlanarDeck=选择要放入时空竞逐套牌中的牌的顺序 +lblChooseOrderCardsPutIntoSchemeDeck=选择要放入魔王套牌中的牌的顺序 +lblChooseOrderCopiesCast=选择要复制品的释放顺序。 +lblDelveHowManyCards=掘穴多少张牌? +lblExileWhichCard=放逐哪张牌? #AbstractGuiGame.java lblConcedeCurrentGame=这局游戏认输。\n\n确认吗? lblConcedeTitle=这局游戏认输? @@ -1201,4 +1225,17 @@ lblPuzzleText1=解谜模式会加载一个谜题,你必须在预定的时间/ lblPuzzleText2=首先,按下面的开始按钮,然后从列表中选择一个谜题。 lblPuzzleText3=当解谜开始的时候,该谜题的要求将会显示在弹窗中,并且还会在指挥官区域放置一张特殊效应卡指示这个谜题的要求。 lblChooseAPuzzle=选择一个谜题 -lblLoadingThePuzzle=加载新的谜题中 \ No newline at end of file +lblLoadingThePuzzle=加载新的谜题中 +#InputPassPriority.java +lblCastSpell=释放咒语 +lblPlayLand=使用地 +lblActivateAbility=启动式异能 +lblYouHaveManaFloatingInYourManaPoolCouldBeLostIfPassPriority=你的法术力池中还有剩余的法术力,如果现在让过优先权,这些法术力可能会丢失。 +lblYouWillTakeManaBurnDamageEqualAmountFloatingManaLostThisWay=你将受到等同于通过这种方式失去的剩余法术力数量的法术力灼烧伤害。 +lblManaFloating=剩余法术力 +#InputPayManaOfCostPayment.java +lblPayManaCost=支付法术力: +lblLifePaidForPhyrexianMana=(以%d生命支付了非瑞克西亚法术力) +lblClickOnYourLifeTotalToPayLifeForPhyrexianMana=单击你的总生命,以生命值支付非瑞克西亚法术力。 +lblClickOnYourLifeTotalToPayLifeForBlackMana=单击你的总生命,以生命值支付黑色法术力。 +lblClickOnYourLifeTotalToPayLifeForPhyrexianOrBlackMana=单击你的总生命,以生命值支付黑色或非瑞克西亚法术力。 \ No newline at end of file diff --git a/forge-gui/res/puzzle/PS_ELD4.pzl b/forge-gui/res/puzzle/PS_ELD4.pzl new file mode 100644 index 00000000000..8c0588ab6ea --- /dev/null +++ b/forge-gui/res/puzzle/PS_ELD4.pzl @@ -0,0 +1,20 @@ +[metadata] +Name:Possibility Storm - Throne of Eldraine #04 +URL:http://www.possibilitystorm.com/wp-content/uploads/2019/10/135.-ELD4-1.jpg +Goal:Win +Turns:1 +Difficulty:Uncommon +Description:Win this turn. You have not played a land yet this turn. You own an Animating Faerie "on an adventure" in exile. Note that Bring to Life turned Enchanted Carriage into a 0/0 with four +1/+1 counters. +[state] +humanlife=20 +ailife=10 +humanlandsplayed=0 +turn=1 +activeplayer=human +activephase=MAIN1 +humanhand=Witch's Oven;Island;Taste of Death;Undercity Uprising +humanbattlefield=Wicked Wolf;Oko, Thief of Crowns|Counters:LOYALTY=1;Nullhide Ferox;Enchanted Carriage|Id:1;Breeding Pool|NoETBTrigs;Breeding Pool|NoETBTrigs;Breeding Pool|NoETBTrigs;Watery Grave|NoETBTrigs;Watery Grave|NoETBTrigs +humanexile=Animating Faerie|OnAdventure +aibattlefield=Loyal Pegasus;Gate Colossus;Dawning Angel +humanprecast=Enchanted Carriage:TrigToken;Bring To Life:1->1 +removesummoningsickness=true diff --git a/forge-gui/res/quest/world/worlds.txt b/forge-gui/res/quest/world/worlds.txt index 9a71672caec..243a2ff2d5e 100644 --- a/forge-gui/res/quest/world/worlds.txt +++ b/forge-gui/res/quest/world/worlds.txt @@ -1,5 +1,6 @@ Name:Main world Name:Random Standard +Name:Random Pioneer Name:Random Modern Name:Random Commander Name:Amonkhet|Dir:Amonkhet|Sets:AKH, HOU diff --git a/forge-gui/res/skins/darkred/bg_splash.png b/forge-gui/res/skins/darkred/bg_splash.png index 20bf087e1f2..880e3c2068d 100644 Binary files a/forge-gui/res/skins/darkred/bg_splash.png and b/forge-gui/res/skins/darkred/bg_splash.png differ diff --git a/forge-gui/res/skins/darkred/sprite_icons.png b/forge-gui/res/skins/darkred/sprite_icons.png index 2684a130faf..b1e19b256e3 100644 Binary files a/forge-gui/res/skins/darkred/sprite_icons.png and b/forge-gui/res/skins/darkred/sprite_icons.png differ diff --git a/forge-gui/src/main/java/forge/card/CardDetailUtil.java b/forge-gui/src/main/java/forge/card/CardDetailUtil.java index da99512137f..8694427ce53 100644 --- a/forge-gui/src/main/java/forge/card/CardDetailUtil.java +++ b/forge-gui/src/main/java/forge/card/CardDetailUtil.java @@ -14,6 +14,7 @@ import forge.item.SealedProduct; import forge.model.FModel; import forge.properties.ForgeConstants; import forge.properties.ForgePreferences; +import forge.util.CardTranslation; import forge.util.Lang; import org.apache.commons.lang3.StringUtils; diff --git a/forge-gui/src/main/java/forge/deck/CardArchetypeLDAGenerator.java b/forge-gui/src/main/java/forge/deck/CardArchetypeLDAGenerator.java index ddcc82a3e02..53c942a2adf 100644 --- a/forge-gui/src/main/java/forge/deck/CardArchetypeLDAGenerator.java +++ b/forge-gui/src/main/java/forge/deck/CardArchetypeLDAGenerator.java @@ -20,6 +20,7 @@ public final class CardArchetypeLDAGenerator { public static boolean initialize(){ List formatStrings = new ArrayList<>(); formatStrings.add(FModel.getFormats().getStandard().getName()); + formatStrings.add(FModel.getFormats().getPioneer().getName()); formatStrings.add(FModel.getFormats().getModern().getName()); formatStrings.add("Legacy"); formatStrings.add("Vintage"); diff --git a/forge-gui/src/main/java/forge/deck/DeckType.java b/forge-gui/src/main/java/forge/deck/DeckType.java index 83867dc6d50..ba1b8af9e72 100644 --- a/forge-gui/src/main/java/forge/deck/DeckType.java +++ b/forge-gui/src/main/java/forge/deck/DeckType.java @@ -20,6 +20,7 @@ public enum DeckType { QUEST_OPPONENT_DECK("lblQuestOpponentDecks"), COLOR_DECK("lblRandomColorDecks"), STANDARD_CARDGEN_DECK("lblRandomStandardArchetypeDecks"), + PIONEER_CARDGEN_DECK("lblRandomPioneerArchetypeDecks"), MODERN_CARDGEN_DECK("lblRandomModernArchetypeDecks"), LEGACY_CARDGEN_DECK("lblRandomLegacyArchetypeDecks"), VINTAGE_CARDGEN_DECK("lblRandomVintageArchetypeDecks"), @@ -41,6 +42,7 @@ public enum DeckType { DeckType.QUEST_OPPONENT_DECK, DeckType.COLOR_DECK, DeckType.STANDARD_CARDGEN_DECK, + DeckType.PIONEER_CARDGEN_DECK, DeckType.MODERN_CARDGEN_DECK, DeckType.LEGACY_CARDGEN_DECK, DeckType.VINTAGE_CARDGEN_DECK, diff --git a/forge-gui/src/main/java/forge/deck/RandomDeckGenerator.java b/forge-gui/src/main/java/forge/deck/RandomDeckGenerator.java index 8837c75ad1b..fe11a4cd0ea 100644 --- a/forge-gui/src/main/java/forge/deck/RandomDeckGenerator.java +++ b/forge-gui/src/main/java/forge/deck/RandomDeckGenerator.java @@ -104,6 +104,8 @@ public class RandomDeckGenerator extends DeckProxy implements Comparable 0) { - msg.append(" ("); - msg.append(this.phyLifeToLose); - msg.append(" life paid for phyrexian mana)"); + msg.append(" ").append(String.format(localizer.getMessage("lblLifePaidForPhyrexianMana"), this.phyLifeToLose)); } boolean isLifeInsteadBlack = player.hasKeyword("PayLifeInsteadOf:B") && manaCost.hasAnyKind(ManaAtom.BLACK); if (manaCost.containsPhyrexianMana() || isLifeInsteadBlack) { StringBuilder sb = new StringBuilder(); - sb.append("Click on your life total to pay life for "); - List list = Lists.newArrayList(); - if (manaCost.containsPhyrexianMana()) { - list.add("phyrexian mana"); + if (manaCost.containsPhyrexianMana() && !isLifeInsteadBlack) { + sb.append(localizer.getMessage("lblClickOnYourLifeTotalToPayLifeForPhyrexianMana")); + } else if (!manaCost.containsPhyrexianMana() && isLifeInsteadBlack) { + sb.append(localizer.getMessage("lblClickOnYourLifeTotalToPayLifeForBlackMana")); + } else if (manaCost.containsPhyrexianMana() && isLifeInsteadBlack) { + sb.append(localizer.getMessage("lblClickOnYourLifeTotalToPayLifeForPhyrexianOrBlackMana")); } - if (isLifeInsteadBlack) { - list.add("black mana"); - } - sb.append(Lang.joinHomogenous(list, null, "or")).append("."); msg.append("\n(").append(sb).append(")"); } diff --git a/forge-gui/src/main/java/forge/match/input/InputPayManaSimple.java b/forge-gui/src/main/java/forge/match/input/InputPayManaSimple.java index ea536eb9c1f..1f8be1adb47 100644 --- a/forge-gui/src/main/java/forge/match/input/InputPayManaSimple.java +++ b/forge-gui/src/main/java/forge/match/input/InputPayManaSimple.java @@ -17,10 +17,6 @@ */ package forge.match.input; -import java.util.List; - -import com.google.common.collect.Lists; - import forge.card.mana.ManaAtom; import forge.card.mana.ManaCost; import forge.card.mana.ManaCostShard; @@ -33,7 +29,7 @@ import forge.model.FModel; import forge.player.PlayerControllerHuman; import forge.properties.ForgePreferences; import forge.util.ITriggerEvent; -import forge.util.Lang; +import forge.util.Localizer; //pays the cost of a card played from the player's hand //the card is removed from the players hand if the cost is paid @@ -136,29 +132,26 @@ public class InputPayManaSimple extends InputPayMana { @Override protected String getMessage() { final StringBuilder msg = new StringBuilder(); + final Localizer localizer = Localizer.getInstance(); if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_DETAILED_SPELLDESC_IN_PROMPT)) { msg.append(saPaidFor.getStackDescription().replace("(Targeting ERROR)", "")).append("\n\n"); } - msg.append("Pay Mana Cost: ").append(this.manaCost.toString(false, player.getManaPool())); + msg.append(localizer.getMessage("lblPayManaCost")).append(" ").append(this.manaCost.toString(false, player.getManaPool())); if (this.phyLifeToLose > 0) { - msg.append(" ("); - msg.append(this.phyLifeToLose); - msg.append(" life paid for phyrexian mana)"); + msg.append(" ").append(String.format(localizer.getMessage("lblLifePaidForPhyrexianMana"), this.phyLifeToLose)); } boolean isLifeInsteadBlack = player.hasKeyword("PayLifeInsteadOf:B") && manaCost.hasAnyKind(ManaAtom.BLACK); if (manaCost.containsPhyrexianMana() || isLifeInsteadBlack) { StringBuilder sb = new StringBuilder(); - sb.append("Click on your life total to pay life for "); - List list = Lists.newArrayList(); - if (manaCost.containsPhyrexianMana()) { - list.add("phyrexian mana"); + if (manaCost.containsPhyrexianMana() && !isLifeInsteadBlack) { + sb.append(localizer.getMessage("lblClickOnYourLifeTotalToPayLifeForPhyrexianMana")); + } else if (!manaCost.containsPhyrexianMana() && isLifeInsteadBlack) { + sb.append(localizer.getMessage("lblClickOnYourLifeTotalToPayLifeForBlackMana")); + } else if (manaCost.containsPhyrexianMana() && isLifeInsteadBlack) { + sb.append(localizer.getMessage("lblClickOnYourLifeTotalToPayLifeForPhyrexianOrBlackMana")); } - if (isLifeInsteadBlack) { - list.add("black mana"); - } - sb.append(Lang.joinHomogenous(list, null, "or")).append("."); msg.append("\n(").append(sb).append(")"); } diff --git a/forge-gui/src/main/java/forge/model/FModel.java b/forge-gui/src/main/java/forge/model/FModel.java index d1732ab280b..27d0060413c 100644 --- a/forge-gui/src/main/java/forge/model/FModel.java +++ b/forge-gui/src/main/java/forge/model/FModel.java @@ -24,7 +24,6 @@ import forge.CardStorageReader.ProgressObserver; import forge.achievement.*; import forge.ai.AiProfileUtil; import forge.card.CardPreferences; -import forge.card.CardTranslation; import forge.card.CardType; import forge.deck.CardArchetypeLDAGenerator; import forge.deck.CardRelationMatrixGenerator; @@ -49,6 +48,7 @@ import forge.quest.QuestController; import forge.quest.QuestWorld; import forge.quest.data.QuestPreferences; import forge.tournament.TournamentData; +import forge.util.CardTranslation; import forge.util.FileUtil; import forge.util.Localizer; import forge.util.storage.IStorage; @@ -147,7 +147,7 @@ public final class FModel { final CardStorageReader tokenReader = new CardStorageReader(ForgeConstants.TOKEN_DATA_DIR, progressBarBridge, FModel.getPreferences().getPrefBoolean(FPref.LOAD_CARD_SCRIPTS_LAZILY)); magicDb = new StaticData(reader, tokenReader, ForgeConstants.EDITIONS_DIR, ForgeConstants.BLOCK_DATA_DIR); - CardTranslation.preloadTranslation(preferences.getPref(FPref.UI_LANGUAGE)); + CardTranslation.preloadTranslation(preferences.getPref(FPref.UI_LANGUAGE), ForgeConstants.LANG_DIR); //create profile dirs if they don't already exist for (final String dname : ForgeConstants.PROFILE_DIRS) { @@ -168,6 +168,7 @@ public final class FModel { new File(ForgeConstants.USER_FORMATS_DIR), preferences.getPrefBoolean(FPref.LOAD_HISTORIC_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()); diff --git a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java index 36dd6de0d00..37bcafa370d 100644 --- a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java @@ -678,7 +678,7 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont public CardCollection orderBlockers(final Card attacker, final CardCollection blockers) { final CardView vAttacker = CardView.get(attacker); getGui().setPanelSelection(vAttacker); - return game.getCardList(getGui().order("Choose Damage Order for " + vAttacker, "Damaged First", + return game.getCardList(getGui().order(localizer.getMessage("lblChooseDamageOrderFor").replace("%s", vAttacker.toString()), localizer.getMessage("lblDamagedFirst"), CardView.getCollection(blockers), vAttacker)); } @@ -703,7 +703,7 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont final CardView vAttacker = CardView.get(attacker); getGui().setPanelSelection(vAttacker); return game.getCardList(getGui().insertInList( - "Choose blocker after which to place " + vAttacker + " in damage order; cancel to place it first", + localizer.getMessage("lblChooseBlockerAfterWhichToPlaceAttackert").replace("%s", vAttacker.toString()), CardView.get(blocker), CardView.getCollection(oldBlockers))); } @@ -711,7 +711,7 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont public CardCollection orderAttackers(final Card blocker, final CardCollection attackers) { final CardView vBlocker = CardView.get(blocker); getGui().setPanelSelection(vBlocker); - return game.getCardList(getGui().order("Choose Damage Order for " + vBlocker, "Damaged First", + return game.getCardList(getGui().order(localizer.getMessage("lblChooseDamageOrderFor").replace("%s", vBlocker.toString()), localizer.getMessage("lblDamagedFirst"), CardView.getCollection(attackers), vBlocker)); } @@ -841,7 +841,7 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont getGui().setCard(c.getView()); boolean result = false; - result = InputConfirm.confirm(this, view, TextUtil.concatNoSpace("Put ", view.toString(), " on the top or bottom of your library?"), + result = InputConfirm.confirm(this, view, localizer.getMessage("lblPutCardOnTopOrBottomLibrary").replace("%s", view.toString()), true, ImmutableList.of("Top", "Bottom")); endTempShowCards(); @@ -876,27 +876,27 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont tempShowCards(cards); switch (destinationZone) { case Library: - choices = getGui().order("Choose order of cards to put into the library", "Closest to top", + choices = getGui().order(localizer.getMessage("lblChooseOrderCardsPutIntoLibrary"), localizer.getMessage("lblClosestToTop"), CardView.getCollection(cards), null); break; case Battlefield: - choices = getGui().order("Choose order of cards to put onto the battlefield", "Put first", + choices = getGui().order(localizer.getMessage("lblChooseOrderCardsPutOntoBattlefield"), localizer.getMessage("lblPutFirst"), CardView.getCollection(cards), null); break; case Graveyard: - choices = getGui().order("Choose order of cards to put into the graveyard", "Closest to bottom", + choices = getGui().order(localizer.getMessage("lblChooseOrderCardsPutIntoGraveyard"), localizer.getMessage("lblClosestToBottom"), CardView.getCollection(cards), null); break; case PlanarDeck: - choices = getGui().order("Choose order of cards to put into the planar deck", "Closest to top", + choices = getGui().order(localizer.getMessage("lblChooseOrderCardsPutIntoPlanarDeck"), localizer.getMessage("lblClosestToTop"), CardView.getCollection(cards), null); break; case SchemeDeck: - choices = getGui().order("Choose order of cards to put into the scheme deck", "Closest to top", + choices = getGui().order(localizer.getMessage("lblChooseOrderCardsPutIntoSchemeDeck"), localizer.getMessage("lblClosestToTop"), CardView.getCollection(cards), null); break; case Stack: - choices = getGui().order("Choose order of copies to cast", "Put first", CardView.getCollection(cards), + choices = getGui().order(localizer.getMessage("lblChooseOrderCopiesCast"), localizer.getMessage("lblPutFirst"), CardView.getCollection(cards), null); break; default: @@ -914,14 +914,14 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont if (p != player) { tempShowCards(valid); final CardCollection choices = game - .getCardList(getGui().many("Choose " + min + " card" + (min != 1 ? "s" : "") + " to discard", - "Discarded", min, min, CardView.getCollection(valid), null)); + .getCardList(getGui().many(String.format(localizer.getMessage("lblChooseMinCardToDiscard"), min), + localizer.getMessage("lblDiscarded"), min, min, CardView.getCollection(valid), null)); endTempShowCards(); return choices; } final InputSelectCardsFromList inp = new InputSelectCardsFromList(this, min, max, valid, sa); - inp.setMessage(sa.hasParam("AnyNumber") ? "Discard up to %d card(s)" : "Discard %d card(s)"); + inp.setMessage(sa.hasParam("AnyNumber") ? localizer.getMessage("lblDiscardUpToNCards") : localizer.getMessage("lblDiscardNCards")); inp.showAndWait(); return new CardCollection(inp.getSelected()); } @@ -938,9 +938,9 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont for (int i = 0; i <= cardsInGrave; i++) { cntChoice.add(Integer.valueOf(i)); } - final int chosenAmount = getGui().one("Delve how many cards?", cntChoice.build()).intValue(); + final int chosenAmount = getGui().one(localizer.getMessage("lblDelveHowManyCards"), cntChoice.build()).intValue(); for (int i = 0; i < chosenAmount; i++) { - final CardView nowChosen = getGui().oneOrNone("Exile which card?", CardView.getCollection(grave)); + final CardView nowChosen = getGui().oneOrNone(localizer.getMessage("lblExileWhichCard"), CardView.getCollection(grave)); if (nowChosen == null) { // User canceled,abort delving. @@ -1003,7 +1003,7 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont return super.hasAllTargets(); } }; - target.setMessage("Select %d card(s) to discard, unless you discard a " + uType + "."); + target.setMessage(localizer.getMessage("lblSelectNCardsToDiscardUnlessDiscarduType").replace("%s", uType)); target.showAndWait(); return new CardCollection(target.getSelected()); } @@ -1316,8 +1316,8 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont // opponent's next turn } }; - final String message = "Cleanup Phase\nSelect " + nDiscard + " card" + (nDiscard > 1 ? "s" : "") - + " to discard to bring your hand down to the maximum of " + max + " cards."; + final String message = localizer.getMessage("lblCleanupPhase") + "\n" + + localizer.getMessage("lblSelectCardsToDiscardHandDownMaximum").replace("%d", String.valueOf(nDiscard)).replace("%max", String.valueOf(max)); inp.setMessage(message); inp.setCancelAllowed(false); inp.showAndWait(); diff --git a/forge-gui/src/main/java/forge/quest/QuestController.java b/forge-gui/src/main/java/forge/quest/QuestController.java index 86fc937f89a..57ed852e5c8 100644 --- a/forge-gui/src/main/java/forge/quest/QuestController.java +++ b/forge-gui/src/main/java/forge/quest/QuestController.java @@ -448,7 +448,10 @@ public class QuestController { if (world.getName().equals(QuestWorld.STANDARDWORLDNAME)) { this.duelManager = new QuestEventLDADuelManager(FModel.getFormats().getStandard()); return; - } else if (world.getName().equals(QuestWorld.MODERNWORLDNAME)) { + } else if (world.getName().equals(QuestWorld.PIONEERWORLDNAME)) { + this.duelManager = new QuestEventLDADuelManager(FModel.getFormats().getPioneer()); + return; + }else if (world.getName().equals(QuestWorld.MODERNWORLDNAME)) { this.duelManager = new QuestEventLDADuelManager(FModel.getFormats().getModern()); return; }else if (world.isCustom()) { diff --git a/forge-gui/src/main/java/forge/quest/QuestWorld.java b/forge-gui/src/main/java/forge/quest/QuestWorld.java index b5a27b5b04c..52ad44988f0 100644 --- a/forge-gui/src/main/java/forge/quest/QuestWorld.java +++ b/forge-gui/src/main/java/forge/quest/QuestWorld.java @@ -40,6 +40,7 @@ public class QuestWorld implements Comparable{ private final String dir; private final GameFormatQuest format; public static final String STANDARDWORLDNAME = "Random Standard"; + public static final String PIONEERWORLDNAME = "Random Pioneer"; public static final String MODERNWORLDNAME = "Random Modern"; public static final String RANDOMCOMMANDERWORLDNAME = "Random Commander"; @@ -195,6 +196,12 @@ public class QuestWorld implements Comparable{ FModel.getFormats().getStandard().getBannedCardNames(),false); } + if (useName.equalsIgnoreCase(QuestWorld.PIONEERWORLDNAME)){ + useFormat = new GameFormatQuest(QuestWorld.PIONEERWORLDNAME, + FModel.getFormats().getPioneer().getAllowedSetCodes(), + FModel.getFormats().getPioneer().getBannedCardNames(),false); + } + if (useName.equalsIgnoreCase(QuestWorld.MODERNWORLDNAME)){ useFormat = new GameFormatQuest(QuestWorld.MODERNWORLDNAME, FModel.getFormats().getModern().getAllowedSetCodes(), diff --git a/forge-gui/src/main/java/forge/tournament/TournamentUtil.java b/forge-gui/src/main/java/forge/tournament/TournamentUtil.java index ebf1c426e60..08f99eed11b 100644 --- a/forge-gui/src/main/java/forge/tournament/TournamentUtil.java +++ b/forge-gui/src/main/java/forge/tournament/TournamentUtil.java @@ -36,6 +36,9 @@ public class TournamentUtil { case STANDARD_CARDGEN_DECK: deck = DeckgenUtil.buildCardGenDeck(FModel.getFormats().getStandard(),true); break; + case PIONEER_CARDGEN_DECK: + deck = DeckgenUtil.buildCardGenDeck(FModel.getFormats().getPioneer(),true); + break; case MODERN_CARDGEN_DECK: deck = DeckgenUtil.buildCardGenDeck(FModel.getFormats().getModern(),true); break;