Merge branch 'master' of git.cardforge.org:core-developers/forge into agetian-master

This commit is contained in:
Agetian
2019-11-07 08:10:19 +03:00
47 changed files with 380 additions and 171 deletions

View File

@@ -35,6 +35,7 @@ public class StaticData {
private Predicate<PaperCard> standardPredicate;
private Predicate<PaperCard> brawlPredicate;
private Predicate<PaperCard> pioneerPredicate;
private Predicate<PaperCard> modernPredicate;
private Predicate<PaperCard> commanderPredicate;
private Predicate<PaperCard> oathbreakerPredicate;
@@ -197,13 +198,13 @@ public class StaticData {
public TokenDb getAllTokens() { return allTokens; }
public Predicate<PaperCard> getStandardPredicate() {
return standardPredicate;
}
public void setStandardPredicate(Predicate<PaperCard> standardPredicate) { this.standardPredicate = standardPredicate; }
public void setModernPredicate(Predicate<PaperCard> modernPredicate) { this.modernPredicate = standardPredicate; }
public void setPioneerPredicate(Predicate<PaperCard> pioneerPredicate) { this.pioneerPredicate = pioneerPredicate; }
public void setModernPredicate(Predicate<PaperCard> modernPredicate) { this.modernPredicate = modernPredicate; }
public void setCommanderPredicate(Predicate<PaperCard> commanderPredicate) { this.commanderPredicate = commanderPredicate; }
@@ -211,9 +212,11 @@ public class StaticData {
public void setBrawlPredicate(Predicate<PaperCard> brawlPredicate) { this.brawlPredicate = brawlPredicate; }
public Predicate<PaperCard> getModernPredicate() {
return modernPredicate;
}
public Predicate<PaperCard> getStandardPredicate() { return standardPredicate; }
public Predicate<PaperCard> getPioneerPredicate() { return pioneerPredicate; }
public Predicate<PaperCard> getModernPredicate() { return modernPredicate; }
public Predicate<PaperCard> getCommanderPredicate() { return commanderPredicate; }

View File

@@ -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 <String, String> translatednames;
private static Map <String, String> translatedtypes;
private static Map <String, String> 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<String, String> getTranslationTexts(String cardname, String altcardname) {
HashMap<String, String> translations = new HashMap<String, String>();
HashMap<String, String> 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);
}
}
}

View File

@@ -47,7 +47,7 @@ import java.util.Map.Entry;
public class GameFormat implements Comparable<GameFormat> {
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<GameFormat> {
private List<String> 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<GameFormat> {
return this.map.get("Extended");
}
public GameFormat getPioneer() {
return this.map.get("Pioneer");
}
public GameFormat getModern() {
return this.map.get("Modern");
}

View File

@@ -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());

View File

@@ -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:

View File

@@ -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); }

View File

@@ -56,6 +56,7 @@ public enum VSubmenuGauntletQuick implements IVSubmenu<CSubmenuGauntletQuick> {
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<CSubmenuGauntletQuick> {
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<CSubmenuGauntletQuick> {
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<CSubmenuGauntletQuick> {
public JCheckBox getBoxModernGenDecks() {
return boxModernCardgenDecks;
}
public JCheckBox getBoxPioneerGenDecks() {
return boxPioneerCardgenDecks;
}
public JCheckBox getBoxLegacyGenDecks() {
return boxLegacyCardgenDecks;
}

View File

@@ -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.*;

View File

@@ -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() {

View File

@@ -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;

View File

@@ -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;

View File

@@ -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<GameEntityPicker> {
private final FOptionPane optionPane;
@@ -73,7 +74,7 @@ public class GameEntityPicker extends TabPageScreen<GameEntityPicker> {
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) {

View File

@@ -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);

View File

@@ -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<T extends InventoryItem> extends ItemFilter<T> {
@@ -78,10 +79,10 @@ public class TextSearchFilter<T extends InventoryItem> extends ItemFilter<T> {
}
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<T extends InventoryItem> extends ItemFilter<T> {
private SearchField() {
setFont(FONT);
setGhostText("Search");
setGhostText(Localizer.getInstance().getMessage("lblSearch"));
setHeight(getDefaultHeight(DEFAULT_FONT)); //set height based on default filter font
}

View File

@@ -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:

View File

@@ -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,

View File

@@ -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;
}
}

View File

@@ -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

Binary file not shown.

Binary file not shown.

View File

@@ -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

View File

@@ -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

View File

@@ -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
@@ -512,7 +512,7 @@ lblradBoosters=Ignoriert Farbwahl. Entnimmt die Karten einer gewählten Anzahl B
lblcbxArtifacts=Wenn gewählt, werden Artefakte hinzugefügt, unabhängig von der Farbwahl. Imitiert das alte Erstellungsverhalten.
#VSubmenuChallenges.java
lblQuestChallenges=Quest Herausforderungen
htmlLaunchZeppelin=<html>Starte<br>Zeppelin</html>
htmlLaunchZeppelin=<html>Starte<br>Zepelin</html>
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...
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.

View File

@@ -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?
@@ -1202,3 +1226,16 @@ lblPuzzleText2=To begin, press the Start button below, then select a puzzle from
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...
#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.

View File

@@ -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?
@@ -1202,3 +1226,16 @@ lblPuzzleText2=Para comenzar, pulsa el botón Inicio y selecciona un puzzle de u
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...
#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.

View File

@@ -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=这局游戏认输?
@@ -1202,3 +1226,16 @@ lblPuzzleText2=首先,按下面的开始按钮,然后从列表中选择一
lblPuzzleText3=当解谜开始的时候,该谜题的要求将会显示在弹窗中,并且还会在指挥官区域放置一张特殊效应卡指示这个谜题的要求。
lblChooseAPuzzle=选择一个谜题
lblLoadingThePuzzle=加载新的谜题中
#InputPassPriority.java
lblCastSpell=释放咒语
lblPlayLand=使用地
lblActivateAbility=启动式异能
lblYouHaveManaFloatingInYourManaPoolCouldBeLostIfPassPriority=你的法术力池中还有剩余的法术力,如果现在让过优先权,这些法术力可能会丢失。
lblYouWillTakeManaBurnDamageEqualAmountFloatingManaLostThisWay=你将受到等同于通过这种方式失去的剩余法术力数量的法术力灼烧伤害。
lblManaFloating=剩余法术力
#InputPayManaOfCostPayment.java
lblPayManaCost=支付法术力:
lblLifePaidForPhyrexianMana=(以%d生命支付了非瑞克西亚法术力
lblClickOnYourLifeTotalToPayLifeForPhyrexianMana=单击你的总生命,以生命值支付非瑞克西亚法术力。
lblClickOnYourLifeTotalToPayLifeForBlackMana=单击你的总生命,以生命值支付黑色法术力。
lblClickOnYourLifeTotalToPayLifeForPhyrexianOrBlackMana=单击你的总生命,以生命值支付黑色或非瑞克西亚法术力。

View File

@@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 565 KiB

After

Width:  |  Height:  |  Size: 687 KiB

View File

@@ -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;

View File

@@ -20,6 +20,7 @@ public final class CardArchetypeLDAGenerator {
public static boolean initialize(){
List<String> 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");

View File

@@ -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,

View File

@@ -104,6 +104,8 @@ public class RandomDeckGenerator extends DeckProxy implements Comparable<RandomD
return DeckgenUtil.buildColorDeck(colors, null, isAi);
case STANDARD_CARDGEN_DECK:
return DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().getStandard(),isAi);
case PIONEER_CARDGEN_DECK:
return DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().getPioneer(),isAi);
case MODERN_CARDGEN_DECK:
return DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().getModern(),isAi);
case LEGACY_CARDGEN_DECK:

View File

@@ -36,6 +36,9 @@ public class GauntletUtil {
case STANDARD_CARDGEN_DECK:
deck = DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().getStandard(),true);
break;
case PIONEER_CARDGEN_DECK:
deck = DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().getPioneer(),true);
break;
case MODERN_CARDGEN_DECK:
deck = DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().getModern(),true);
break;

View File

@@ -30,6 +30,7 @@ import forge.player.GamePlayerUtil;
import forge.player.PlayerControllerHuman;
import forge.properties.ForgePreferences.FPref;
import forge.util.ITriggerEvent;
import forge.util.Localizer;
import forge.util.ThreadUtil;
/**
@@ -55,11 +56,12 @@ public class InputPassPriority extends InputSyncronizedBase {
public final void showMessage() {
showMessage(getTurnPhasePriorityMessage(getController().getGame()));
chosenSa = null;
Localizer localizer = Localizer.getInstance();
if (getController().canUndoLastAction()) { //allow undoing with cancel button if can undo last action
getController().getGui().updateButtons(getOwner(), "OK", "Undo", true, true, true);
getController().getGui().updateButtons(getOwner(), localizer.getMessage("lblOK"), localizer.getMessage("lblUndo"), true, true, true);
}
else { //otherwise allow ending turn with cancel button
getController().getGui().updateButtons(getOwner(), "OK", "End Turn", true, true, true);
getController().getGui().updateButtons(getOwner(), localizer.getMessage("lblOK"), localizer.getMessage("lblEndTurn"), true, true, true);
}
getController().getGui().alertUser();
@@ -106,11 +108,12 @@ public class InputPassPriority extends InputSyncronizedBase {
ThreadUtil.invokeInGameThread(new Runnable() { //must invoke in game thread so dialog can be shown on mobile game
@Override
public void run() {
String message = "You have mana floating in your mana pool that could be lost if you pass priority now.";
Localizer localizer = Localizer.getInstance();
String message = localizer.getMessage("lblYouHaveManaFloatingInYourManaPoolCouldBeLostIfPassPriority");
if (FModel.getPreferences().getPrefBoolean(FPref.UI_MANABURN)) {
message += " You will take mana burn damage equal to the amount of floating mana lost this way.";
message += " " + localizer.getMessage("lblYouWillTakeManaBurnDamageEqualAmountFloatingManaLostThisWay");
}
if (getController().getGui().showConfirmDialog(message, "Mana Floating", "Ok", "Cancel")) {
if (getController().getGui().showConfirmDialog(message, localizer.getMessage("lblManaFloating"), localizer.getMessage("lblOk"), localizer.getMessage("lblCancel"))) {
runnable.run();
}
}
@@ -161,12 +164,12 @@ public class InputPassPriority extends InputSyncronizedBase {
}
final SpellAbility sa = abilities.get(0);
if (sa.isSpell()) {
return "cast spell";
return Localizer.getInstance().getMessage("lblCastSpell");
}
if (sa instanceof LandAbility) {
return "play land";
return Localizer.getInstance().getMessage("lblPlayLand");
}
return "activate ability";
return Localizer.getInstance().getMessage("lblActivateAbility");
}
@Override

View File

@@ -1,9 +1,5 @@
package forge.match.input;
import java.util.List;
import com.google.common.collect.Lists;
import forge.card.mana.ManaAtom;
import forge.card.mana.ManaCostShard;
import forge.game.card.Card;
@@ -15,7 +11,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;
public class InputPayManaOfCostPayment extends InputPayMana {
public InputPayManaOfCostPayment(final PlayerControllerHuman controller, ManaCostBeingPaid cost, SpellAbility spellAbility, Player payer, ManaConversionMatrix matrix) {
@@ -64,6 +60,7 @@ public class InputPayManaOfCostPayment extends InputPayMana {
protected String getMessage() {
final String displayMana = manaCost.toString(false, player.getManaPool());
final StringBuilder msg = new StringBuilder();
final Localizer localizer = Localizer.getInstance();
applyMatrix();
@@ -78,26 +75,22 @@ public class InputPayManaOfCostPayment extends InputPayMana {
msg.append(saPaidFor.getHostCard()).append(" - ").append(saPaidFor.toString()).append("\n\n");
}
}
msg.append("Pay Mana Cost: ").append(displayMana);
msg.append(localizer.getMessage("lblPayManaCost")).append(" ").append(displayMana);
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<String> 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(")");
}

View File

@@ -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<String> 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(")");
}

View File

@@ -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());

View File

@@ -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();

View File

@@ -448,6 +448,9 @@ public class QuestController {
if (world.getName().equals(QuestWorld.STANDARDWORLDNAME)) {
this.duelManager = new QuestEventLDADuelManager(FModel.getFormats().getStandard());
return;
} 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;

View File

@@ -40,6 +40,7 @@ public class QuestWorld implements Comparable<QuestWorld>{
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<QuestWorld>{
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(),

View File

@@ -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;