mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 18:58:00 +00:00
Merge branch 'master' of git.cardforge.org:core-developers/forge into start_replacement_run_keys_refactor
This commit is contained in:
@@ -3653,6 +3653,8 @@ public class Card extends GameEntity implements Comparable<Card> {
|
||||
|
||||
if (updateView) {
|
||||
updateKeywords();
|
||||
if (isToken())
|
||||
game.fireEvent(new GameEventTokenStateUpdate(this));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3707,6 +3709,8 @@ public class Card extends GameEntity implements Comparable<Card> {
|
||||
KeywordsChange change = changedCardKeywords.remove(timestamp);
|
||||
if (change != null && updateView) {
|
||||
updateKeywords();
|
||||
if (isToken())
|
||||
game.fireEvent(new GameEventTokenStateUpdate(this));
|
||||
}
|
||||
return change;
|
||||
}
|
||||
@@ -5409,6 +5413,59 @@ public class Card extends GameEntity implements Comparable<Card> {
|
||||
}
|
||||
return protectKey;
|
||||
}
|
||||
public String getHexproofKey() {
|
||||
String hexproofKey = "";
|
||||
boolean hR = false; boolean hG = false; boolean hB = false; boolean hU = false; boolean hW = false;
|
||||
for (final KeywordInterface inst : getKeywords()) {
|
||||
String kw = inst.getOriginal();
|
||||
if (!kw.startsWith("Hexproof")) {
|
||||
continue;
|
||||
}
|
||||
if (kw.equals("Hexproof")) {
|
||||
hexproofKey += "generic:";
|
||||
}
|
||||
if (kw.startsWith("Hexproof:")) {
|
||||
String[] k = kw.split(":");
|
||||
if (k[2].toString().equals("red")) {
|
||||
if (!hR) {
|
||||
hR = true;
|
||||
hexproofKey += "R:";
|
||||
}
|
||||
} else if (k[2].toString().equals("green")) {
|
||||
if (!hG) {
|
||||
hG = true;
|
||||
hexproofKey += "G:";
|
||||
}
|
||||
} else if (k[2].toString().equals("black")) {
|
||||
if (!hB) {
|
||||
hB = true;
|
||||
hexproofKey += "B:";
|
||||
}
|
||||
} else if (k[2].toString().equals("blue")) {
|
||||
if (!hU) {
|
||||
hU = true;
|
||||
hexproofKey += "U:";
|
||||
}
|
||||
} else if (k[2].toString().equals("white")) {
|
||||
if (!hW) {
|
||||
hW = true;
|
||||
hexproofKey += "W:";
|
||||
}
|
||||
} else if (k[2].toString().equals("monocolored")) {
|
||||
hexproofKey += "monocolored:";
|
||||
}
|
||||
}
|
||||
}
|
||||
return hexproofKey;
|
||||
}
|
||||
public String getKeywordKey() {
|
||||
List<String> ability = new ArrayList<>();
|
||||
for (final KeywordInterface inst : getKeywords()) {
|
||||
ability.add(inst.getOriginal());
|
||||
}
|
||||
Collections.sort(ability);
|
||||
return String.join(",", ability);
|
||||
}
|
||||
public Zone getZone() {
|
||||
return currentZone;
|
||||
}
|
||||
|
||||
@@ -1017,7 +1017,9 @@ public class CardView extends GameEntityView {
|
||||
foilIndexOverride = index0;
|
||||
}
|
||||
|
||||
public String getKeywordKey() { return get(TrackableProperty.KeywordKey); }
|
||||
public String getProtectionKey() { return get(TrackableProperty.ProtectionKey); }
|
||||
public String getHexproofKey() { return get(TrackableProperty.HexproofKey); }
|
||||
public boolean hasDeathtouch() { return get(TrackableProperty.HasDeathtouch); }
|
||||
public boolean hasDefender() { return get(TrackableProperty.HasDefender); }
|
||||
public boolean hasDoubleStrike() { return get(TrackableProperty.HasDoubleStrike); }
|
||||
@@ -1031,12 +1033,8 @@ public class CardView extends GameEntityView {
|
||||
public boolean hasMenace() { return get(TrackableProperty.HasMenace); }
|
||||
public boolean hasReach() { return get(TrackableProperty.HasReach); }
|
||||
public boolean hasShroud() { return get(TrackableProperty.HasShroud); }
|
||||
public boolean hasTrample() {
|
||||
return get(TrackableProperty.HasTrample);
|
||||
}
|
||||
public boolean hasVigilance() {
|
||||
return get(TrackableProperty.HasVigilance);
|
||||
}
|
||||
public boolean hasTrample() { return get(TrackableProperty.HasTrample); }
|
||||
public boolean hasVigilance() { return get(TrackableProperty.HasVigilance); }
|
||||
|
||||
public boolean hasHaste() {
|
||||
return get(TrackableProperty.HasHaste);
|
||||
@@ -1077,6 +1075,10 @@ public class CardView extends GameEntityView {
|
||||
updateAbilityText(c, state);
|
||||
//set protectionKey for Icons
|
||||
set(TrackableProperty.ProtectionKey, c.getProtectionKey());
|
||||
//set hexproofKeys for Icons
|
||||
set(TrackableProperty.HexproofKey, c.getHexproofKey());
|
||||
//keywordkey
|
||||
set(TrackableProperty.KeywordKey, c.getKeywordKey());
|
||||
}
|
||||
|
||||
public boolean isBasicLand() {
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package forge.game.event;
|
||||
|
||||
import forge.game.card.Card;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public class GameEventTokenStateUpdate extends GameEvent {
|
||||
|
||||
public final Collection<Card> cards;
|
||||
public GameEventTokenStateUpdate(Card affected) {
|
||||
cards = Arrays.asList(affected);
|
||||
}
|
||||
|
||||
public GameEventTokenStateUpdate(List<Card> affected) {
|
||||
cards = affected;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T visit(IGameEventVisitor<T> visitor) {
|
||||
return visitor.visit(this);
|
||||
}
|
||||
}
|
||||
@@ -37,6 +37,7 @@ public interface IGameEventVisitor<T> {
|
||||
T visit(GameEventPlayerPoisoned event);
|
||||
T visit(GameEventPlayerPriority event);
|
||||
T visit(GameEventPlayerStatsChanged event);
|
||||
T visit(GameEventTokenStateUpdate event);
|
||||
T visit(GameEventScry event);
|
||||
T visit(GameEventShuffle event);
|
||||
T visit(GameEventSpellAbilityCast gameEventSpellAbilityCast);
|
||||
@@ -83,6 +84,7 @@ public interface IGameEventVisitor<T> {
|
||||
public T visit(GameEventPlayerPoisoned event) { return null; }
|
||||
public T visit(GameEventPlayerPriority event) { return null; }
|
||||
public T visit(GameEventPlayerStatsChanged event) { return null; }
|
||||
public T visit(GameEventTokenStateUpdate event) { return null; }
|
||||
public T visit(GameEventScry event) { return null; }
|
||||
public T visit(GameEventShuffle event) { return null; }
|
||||
public T visit(GameEventSpellResolved event) { return null; }
|
||||
|
||||
@@ -189,6 +189,8 @@ public class PhaseHandler implements java.io.Serializable {
|
||||
final List<Card> lands = CardLists.filter(playerTurn.getLandsInPlay(), Presets.UNTAPPED);
|
||||
playerTurn.setNumPowerSurgeLands(lands.size());
|
||||
}
|
||||
//update tokens
|
||||
game.fireEvent(new GameEventTokenStateUpdate(playerTurn.getTokensInPlay()));
|
||||
|
||||
game.fireEvent(new GameEventTurnPhase(playerTurn, phase, phaseType));
|
||||
}
|
||||
|
||||
@@ -2348,6 +2348,13 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
return CardLists.filter(getCardsIn(ZoneType.Battlefield), Presets.CREATURES);
|
||||
}
|
||||
|
||||
/**
|
||||
* use to get a list of tokens in play for a given player.
|
||||
*/
|
||||
public CardCollection getTokensInPlay() {
|
||||
return CardLists.filter(getCardsIn(ZoneType.Battlefield), Presets.TOKEN);
|
||||
}
|
||||
|
||||
/**
|
||||
* use to get a list of all lands a given player has on the battlefield.
|
||||
*/
|
||||
|
||||
@@ -82,6 +82,7 @@ public enum TrackableProperty {
|
||||
ChangedColorWords(TrackableTypes.StringMapType),
|
||||
ChangedTypes(TrackableTypes.StringMapType),
|
||||
|
||||
KeywordKey(TrackableTypes.StringType),
|
||||
HasDeathtouch(TrackableTypes.BooleanType),
|
||||
HasDefender(TrackableTypes.BooleanType),
|
||||
HasDoubleStrike(TrackableTypes.BooleanType),
|
||||
@@ -99,7 +100,8 @@ public enum TrackableProperty {
|
||||
HasVigilance(TrackableTypes.BooleanType),
|
||||
//protectionkey
|
||||
ProtectionKey(TrackableTypes.StringType),
|
||||
|
||||
//hexproofkey
|
||||
HexproofKey(TrackableTypes.StringType),
|
||||
HasHaste(TrackableTypes.BooleanType),
|
||||
HasInfect(TrackableTypes.BooleanType),
|
||||
HasStorm(TrackableTypes.BooleanType),
|
||||
|
||||
@@ -30,6 +30,7 @@ public final class CardOverlaysMenu {
|
||||
menu.add(getMenuItem_CardOverlay("Mana Cost", FPref.UI_OVERLAY_CARD_MANA_COST));
|
||||
menu.add(getMenuItem_CardOverlay("Power/Toughness", FPref.UI_OVERLAY_CARD_POWER));
|
||||
menu.add(getMenuItem_CardOverlay("Card Id", FPref.UI_OVERLAY_CARD_ID));
|
||||
menu.add(getMenuItem_CardOverlay("Ability Icon", FPref.UI_OVERLAY_ABILITY_ICONS));
|
||||
return menu;
|
||||
}
|
||||
|
||||
|
||||
@@ -135,7 +135,17 @@ public class CardFaceSymbols {
|
||||
MANA_IMAGES.put("shroud", FSkin.getImage(FSkinProp.IMG_ABILITY_SHROUD));
|
||||
MANA_IMAGES.put("trample", FSkin.getImage(FSkinProp.IMG_ABILITY_TRAMPLE));
|
||||
MANA_IMAGES.put("vigilance", FSkin.getImage(FSkinProp.IMG_ABILITY_VIGILANCE));
|
||||
|
||||
//hexproof from
|
||||
MANA_IMAGES.put("hexproofR", FSkin.getImage(FSkinProp.IMG_ABILITY_HEXPROOF_R));
|
||||
MANA_IMAGES.put("hexproofG", FSkin.getImage(FSkinProp.IMG_ABILITY_HEXPROOF_G));
|
||||
MANA_IMAGES.put("hexproofB", FSkin.getImage(FSkinProp.IMG_ABILITY_HEXPROOF_B));
|
||||
MANA_IMAGES.put("hexproofU", FSkin.getImage(FSkinProp.IMG_ABILITY_HEXPROOF_U));
|
||||
MANA_IMAGES.put("hexproofW", FSkin.getImage(FSkinProp.IMG_ABILITY_HEXPROOF_W));
|
||||
MANA_IMAGES.put("hexproofC", FSkin.getImage(FSkinProp.IMG_ABILITY_HEXPROOF_C));
|
||||
MANA_IMAGES.put("hexproofUB", FSkin.getImage(FSkinProp.IMG_ABILITY_HEXPROOF_UB));
|
||||
//token icon
|
||||
MANA_IMAGES.put("token", FSkin.getImage(FSkinProp.IMG_ABILITY_TOKEN));
|
||||
//protection from
|
||||
MANA_IMAGES.put("protectAll", FSkin.getImage(FSkinProp.IMG_ABILITY_PROTECT_ALL));
|
||||
MANA_IMAGES.put("protectB", FSkin.getImage(FSkinProp.IMG_ABILITY_PROTECT_B));
|
||||
MANA_IMAGES.put("protectBU", FSkin.getImage(FSkinProp.IMG_ABILITY_PROTECT_BU));
|
||||
|
||||
@@ -50,6 +50,7 @@ import java.awt.geom.RoundRectangle2D;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.Arrays;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@@ -511,7 +512,7 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
|
||||
int abiX = cardXOffset + (cardWidth / 2) + (cardWidth / 3);
|
||||
int abiSpace = (cardWidth / 7);
|
||||
int abiY = cardWidth < 200 ? cardYOffset + 25 : cardYOffset + 50;
|
||||
if (ZoneType.Battlefield.equals(card.getZone())){
|
||||
if (ZoneType.Battlefield.equals(card.getZone()) && showAbilityIcons()){
|
||||
if (card.getCurrentState().hasFlying()) {
|
||||
CardFaceSymbols.drawAbilitySymbol("flying", g, abiX, abiY, abiScale, abiScale);
|
||||
abiY += abiSpace;
|
||||
@@ -545,10 +546,43 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
|
||||
abiY += abiSpace;
|
||||
}
|
||||
if (card.getCurrentState().hasHexproof()) {
|
||||
CardFaceSymbols.drawAbilitySymbol("hexproof", g, abiX, abiY, abiScale, abiScale);
|
||||
abiY += abiSpace;
|
||||
if (!card.getCurrentState().getHexproofKey().isEmpty()){
|
||||
String[] splitK = card.getCurrentState().getHexproofKey().split(":");
|
||||
List<String> listHK = Arrays.asList(splitK);
|
||||
if (listHK.contains("generic")) {
|
||||
CardFaceSymbols.drawAbilitySymbol("hexproof", g, abiX, abiY, abiScale, abiScale);
|
||||
abiY += abiSpace;
|
||||
}
|
||||
if (listHK.contains("R")) {
|
||||
CardFaceSymbols.drawAbilitySymbol("hexproofR", g, abiX, abiY, abiScale, abiScale);
|
||||
abiY += abiSpace;
|
||||
}
|
||||
if (listHK.contains("B")) {
|
||||
CardFaceSymbols.drawAbilitySymbol("hexproofB", g, abiX, abiY, abiScale, abiScale);
|
||||
abiY += abiSpace;
|
||||
}
|
||||
if (listHK.contains("U")) {
|
||||
CardFaceSymbols.drawAbilitySymbol("hexproofU", g, abiX, abiY, abiScale, abiScale);
|
||||
abiY += abiSpace;
|
||||
}
|
||||
if (listHK.contains("G")) {
|
||||
CardFaceSymbols.drawAbilitySymbol("hexproofG", g, abiX, abiY, abiScale, abiScale);
|
||||
abiY += abiSpace;
|
||||
}
|
||||
if (listHK.contains("W")) {
|
||||
CardFaceSymbols.drawAbilitySymbol("hexproofW", g, abiX, abiY, abiScale, abiScale);
|
||||
abiY += abiSpace;
|
||||
}
|
||||
if (listHK.contains("monocolored")) {
|
||||
CardFaceSymbols.drawAbilitySymbol("hexproofC", g, abiX, abiY, abiScale, abiScale);
|
||||
abiY += abiSpace;
|
||||
}
|
||||
} else {
|
||||
CardFaceSymbols.drawAbilitySymbol("hexproof", g, abiX, abiY, abiScale, abiScale);
|
||||
abiY += abiSpace;
|
||||
}
|
||||
}
|
||||
if (card.getCurrentState().hasShroud()) {
|
||||
else if (card.getCurrentState().hasShroud()) {
|
||||
CardFaceSymbols.drawAbilitySymbol("shroud", g, abiX, abiY, abiScale, abiScale);
|
||||
abiY += abiSpace;
|
||||
}
|
||||
@@ -963,6 +997,10 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
|
||||
return isShowingOverlays() && isPreferenceEnabled(FPref.UI_OVERLAY_CARD_ID);
|
||||
}
|
||||
|
||||
private boolean showAbilityIcons() {
|
||||
return isShowingOverlays() && isPreferenceEnabled(FPref.UI_OVERLAY_ABILITY_ICONS);
|
||||
}
|
||||
|
||||
public void repaintOverlays() {
|
||||
repaint();
|
||||
doLayout();
|
||||
|
||||
@@ -25,7 +25,11 @@ import forge.screens.home.NewGameMenu;
|
||||
import forge.screens.match.MatchController;
|
||||
import forge.sound.MusicPlaylist;
|
||||
import forge.sound.SoundSystem;
|
||||
import forge.toolbox.*;
|
||||
import forge.toolbox.FContainer;
|
||||
import forge.toolbox.FDisplayObject;
|
||||
import forge.toolbox.FGestureAdapter;
|
||||
import forge.toolbox.FOptionPane;
|
||||
import forge.toolbox.FOverlay;
|
||||
import forge.util.Callback;
|
||||
import forge.util.FileUtil;
|
||||
import forge.util.Localizer;
|
||||
|
||||
@@ -37,7 +37,13 @@ import forge.sound.IAudioClip;
|
||||
import forge.sound.IAudioMusic;
|
||||
import forge.toolbox.FOptionPane;
|
||||
import forge.toolbox.GuiChoose;
|
||||
import forge.util.*;
|
||||
import forge.util.Callback;
|
||||
import forge.util.FileUtil;
|
||||
import forge.util.ImageFetcher;
|
||||
import forge.util.LibGDXImageFetcher;
|
||||
import forge.util.ThreadUtil;
|
||||
import forge.util.WaitCallback;
|
||||
import forge.util.WaitRunnable;
|
||||
|
||||
public class GuiMobile implements IGuiBase {
|
||||
private final String assetsDir;
|
||||
|
||||
@@ -265,9 +265,19 @@ public enum FSkinImage implements FImage {
|
||||
IMG_ABILITY_LIFELINK (FSkinProp.IMG_ABILITY_LIFELINK, SourceFile.ABILITIES),
|
||||
IMG_ABILITY_MENACE (FSkinProp.IMG_ABILITY_MENACE, SourceFile.ABILITIES),
|
||||
IMG_ABILITY_REACH (FSkinProp.IMG_ABILITY_REACH, SourceFile.ABILITIES),
|
||||
IMG_ABILITY_SHROUD (FSkinProp.IMG_ABILITY_SHROUD, SourceFile.ABILITIES),
|
||||
IMG_ABILITY_SHROUD (FSkinProp.IMG_ABILITY_SHROUD, SourceFile.ABILITIES),
|
||||
IMG_ABILITY_TRAMPLE (FSkinProp.IMG_ABILITY_TRAMPLE, SourceFile.ABILITIES),
|
||||
IMG_ABILITY_VIGILANCE (FSkinProp.IMG_ABILITY_VIGILANCE, SourceFile.ABILITIES),
|
||||
//HEXPROOF FROM
|
||||
IMG_ABILITY_HEXPROOF_R (FSkinProp.IMG_ABILITY_HEXPROOF_R, SourceFile.ABILITIES),
|
||||
IMG_ABILITY_HEXPROOF_G (FSkinProp.IMG_ABILITY_HEXPROOF_G, SourceFile.ABILITIES),
|
||||
IMG_ABILITY_HEXPROOF_B (FSkinProp.IMG_ABILITY_HEXPROOF_B, SourceFile.ABILITIES),
|
||||
IMG_ABILITY_HEXPROOF_U (FSkinProp.IMG_ABILITY_HEXPROOF_U, SourceFile.ABILITIES),
|
||||
IMG_ABILITY_HEXPROOF_W (FSkinProp.IMG_ABILITY_HEXPROOF_W, SourceFile.ABILITIES),
|
||||
IMG_ABILITY_HEXPROOF_C (FSkinProp.IMG_ABILITY_HEXPROOF_C, SourceFile.ABILITIES),
|
||||
IMG_ABILITY_HEXPROOF_UB (FSkinProp.IMG_ABILITY_HEXPROOF_UB, SourceFile.ABILITIES),
|
||||
//token icon
|
||||
IMG_ABILITY_TOKEN (FSkinProp.IMG_ABILITY_TOKEN, SourceFile.ABILITIES),
|
||||
//PROTECT ICONS
|
||||
IMG_ABILITY_PROTECT_ALL (FSkinProp.IMG_ABILITY_PROTECT_ALL, SourceFile.ABILITIES),
|
||||
IMG_ABILITY_PROTECT_B (FSkinProp.IMG_ABILITY_PROTECT_B, SourceFile.ABILITIES),
|
||||
|
||||
@@ -118,7 +118,17 @@ public class CardFaceSymbols {
|
||||
MANA_IMAGES.put("shroud", FSkinImage.IMG_ABILITY_SHROUD);
|
||||
MANA_IMAGES.put("trample", FSkinImage.IMG_ABILITY_TRAMPLE);
|
||||
MANA_IMAGES.put("vigilance", FSkinImage.IMG_ABILITY_VIGILANCE);
|
||||
|
||||
//hexproof from
|
||||
MANA_IMAGES.put("hexproofR", FSkinImage.IMG_ABILITY_HEXPROOF_R);
|
||||
MANA_IMAGES.put("hexproofG", FSkinImage.IMG_ABILITY_HEXPROOF_G);
|
||||
MANA_IMAGES.put("hexproofB", FSkinImage.IMG_ABILITY_HEXPROOF_B);
|
||||
MANA_IMAGES.put("hexproofU", FSkinImage.IMG_ABILITY_HEXPROOF_U);
|
||||
MANA_IMAGES.put("hexproofW", FSkinImage.IMG_ABILITY_HEXPROOF_W);
|
||||
MANA_IMAGES.put("hexproofC", FSkinImage.IMG_ABILITY_HEXPROOF_C);
|
||||
MANA_IMAGES.put("hexproofUB", FSkinImage.IMG_ABILITY_HEXPROOF_UB);
|
||||
//token icon
|
||||
MANA_IMAGES.put("token", FSkinImage.IMG_ABILITY_TOKEN);
|
||||
//protection from
|
||||
MANA_IMAGES.put("protectAll", FSkinImage.IMG_ABILITY_PROTECT_ALL);
|
||||
MANA_IMAGES.put("protectB", FSkinImage.IMG_ABILITY_PROTECT_B);
|
||||
MANA_IMAGES.put("protectBU", FSkinImage.IMG_ABILITY_PROTECT_BU);
|
||||
|
||||
@@ -5,13 +5,19 @@ import com.badlogic.gdx.graphics.Texture;
|
||||
import com.badlogic.gdx.utils.Align;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import forge.Graphics;
|
||||
import forge.assets.*;
|
||||
import forge.assets.FBufferedImage;
|
||||
import forge.assets.FSkinColor;
|
||||
import forge.assets.FSkinFont;
|
||||
import forge.assets.FSkinImage;
|
||||
import forge.assets.FSkinTexture;
|
||||
import forge.assets.ImageCache;
|
||||
import forge.assets.TextRenderer;
|
||||
import forge.card.CardDetailUtil.DetailColors;
|
||||
import forge.card.CardRenderer.CardStackPosition;
|
||||
import forge.card.mana.ManaCost;
|
||||
import forge.game.GameView;
|
||||
import forge.game.card.CardView;
|
||||
import forge.game.card.CardView.CardStateView;
|
||||
import forge.game.card.CardView;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.model.FModel;
|
||||
import forge.properties.ForgeConstants;
|
||||
|
||||
@@ -19,7 +19,13 @@ import forge.CachedCardImage;
|
||||
import forge.FThreads;
|
||||
import forge.Graphics;
|
||||
import forge.StaticData;
|
||||
import forge.assets.*;
|
||||
import forge.assets.FImageComplex;
|
||||
import forge.assets.FRotatedImage;
|
||||
import forge.assets.FSkinColor;
|
||||
import forge.assets.FSkinFont;
|
||||
import forge.assets.FSkinImage;
|
||||
import forge.assets.FTextureRegionImage;
|
||||
import forge.assets.ImageCache;
|
||||
import forge.card.CardDetailUtil.DetailColors;
|
||||
import forge.card.CardZoom.ActivateHandler;
|
||||
import forge.card.mana.ManaCost;
|
||||
@@ -42,6 +48,7 @@ import forge.toolbox.FList;
|
||||
import forge.util.Utils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import forge.util.TextBounds;
|
||||
import java.util.Arrays;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@@ -551,7 +558,11 @@ public class CardRenderer {
|
||||
float abiSpace = cw / 5.7f;
|
||||
float abiCount = 0;
|
||||
|
||||
if (onbattlefield && onTop) {
|
||||
if (onbattlefield && onTop && showAbilityIcons(card)) {
|
||||
if (card.isToken()){
|
||||
CardFaceSymbols.drawSymbol("token", g, abiX, abiY, abiScale, abiScale);
|
||||
abiY += abiSpace;
|
||||
}
|
||||
if (card.getCurrentState().hasFlying()) {
|
||||
CardFaceSymbols.drawSymbol("flying", g, abiX, abiY, abiScale, abiScale);
|
||||
if (unselectable){
|
||||
@@ -609,11 +620,65 @@ public class CardRenderer {
|
||||
abiCount += 1;
|
||||
}
|
||||
if (card.getCurrentState().hasHexproof()) {
|
||||
CardFaceSymbols.drawSymbol("hexproof", g, abiX, abiY, abiScale, abiScale);
|
||||
if (unselectable){
|
||||
g.setAlphaComposite(0.6f); g.fillRect(Color.BLACK, abiX, abiY, abiScale, abiScale ); g.setAlphaComposite(oldAlpha);}
|
||||
abiY += abiSpace;
|
||||
abiCount += 1;
|
||||
if (!card.getCurrentState().getHexproofKey().isEmpty()){
|
||||
String[] splitK = card.getCurrentState().getHexproofKey().split(":");
|
||||
List<String> listHK = Arrays.asList(splitK);
|
||||
if (listHK.contains("generic")) {
|
||||
CardFaceSymbols.drawSymbol("hexproof", g, abiX, abiY, abiScale, abiScale);
|
||||
if (unselectable){
|
||||
g.setAlphaComposite(0.6f); g.fillRect(Color.BLACK, abiX, abiY, abiScale, abiScale ); g.setAlphaComposite(oldAlpha);}
|
||||
abiY += abiSpace;
|
||||
abiCount += 1;
|
||||
}
|
||||
if (listHK.contains("R")) {
|
||||
CardFaceSymbols.drawSymbol("hexproofR", g, abiX, abiY, abiScale, abiScale);
|
||||
if (unselectable){
|
||||
g.setAlphaComposite(0.6f); g.fillRect(Color.BLACK, abiX, abiY, abiScale, abiScale ); g.setAlphaComposite(oldAlpha);}
|
||||
abiY += abiSpace;
|
||||
abiCount += 1;
|
||||
}
|
||||
if (listHK.contains("B")) {
|
||||
CardFaceSymbols.drawSymbol("hexproofB", g, abiX, abiY, abiScale, abiScale);
|
||||
if (unselectable){
|
||||
g.setAlphaComposite(0.6f); g.fillRect(Color.BLACK, abiX, abiY, abiScale, abiScale ); g.setAlphaComposite(oldAlpha);}
|
||||
abiY += abiSpace;
|
||||
abiCount += 1;
|
||||
}
|
||||
if (listHK.contains("U")) {
|
||||
CardFaceSymbols.drawSymbol("hexproofU", g, abiX, abiY, abiScale, abiScale);
|
||||
if (unselectable){
|
||||
g.setAlphaComposite(0.6f); g.fillRect(Color.BLACK, abiX, abiY, abiScale, abiScale ); g.setAlphaComposite(oldAlpha);}
|
||||
abiY += abiSpace;
|
||||
abiCount += 1;
|
||||
}
|
||||
if (listHK.contains("G")) {
|
||||
CardFaceSymbols.drawSymbol("hexproofG", g, abiX, abiY, abiScale, abiScale);
|
||||
if (unselectable){
|
||||
g.setAlphaComposite(0.6f); g.fillRect(Color.BLACK, abiX, abiY, abiScale, abiScale ); g.setAlphaComposite(oldAlpha);}
|
||||
abiY += abiSpace;
|
||||
abiCount += 1;
|
||||
}
|
||||
if (listHK.contains("W")) {
|
||||
CardFaceSymbols.drawSymbol("hexproofW", g, abiX, abiY, abiScale, abiScale);
|
||||
if (unselectable){
|
||||
g.setAlphaComposite(0.6f); g.fillRect(Color.BLACK, abiX, abiY, abiScale, abiScale ); g.setAlphaComposite(oldAlpha);}
|
||||
abiY += abiSpace;
|
||||
abiCount += 1;
|
||||
}
|
||||
if (listHK.contains("monocolored")) {
|
||||
CardFaceSymbols.drawSymbol("hexproofC", g, abiX, abiY, abiScale, abiScale);
|
||||
if (unselectable){
|
||||
g.setAlphaComposite(0.6f); g.fillRect(Color.BLACK, abiX, abiY, abiScale, abiScale ); g.setAlphaComposite(oldAlpha);}
|
||||
abiY += abiSpace;
|
||||
abiCount += 1;
|
||||
}
|
||||
} else {
|
||||
CardFaceSymbols.drawSymbol("hexproof", g, abiX, abiY, abiScale, abiScale);
|
||||
if (unselectable){
|
||||
g.setAlphaComposite(0.6f); g.fillRect(Color.BLACK, abiX, abiY, abiScale, abiScale ); g.setAlphaComposite(oldAlpha);}
|
||||
abiY += abiSpace;
|
||||
abiCount += 1;
|
||||
}
|
||||
}
|
||||
else if (card.getCurrentState().hasShroud()) {
|
||||
CardFaceSymbols.drawSymbol("shroud", g, abiX, abiY, abiScale, abiScale);
|
||||
@@ -1003,6 +1068,10 @@ public class CardRenderer {
|
||||
isPreferenceEnabled(FPref.UI_OVERLAY_CARD_MANA_COST);
|
||||
}
|
||||
|
||||
private static boolean showAbilityIcons(CardView card) {
|
||||
return isShowingOverlays(card) && isPreferenceEnabled(FPref.UI_OVERLAY_ABILITY_ICONS);
|
||||
}
|
||||
|
||||
private static boolean showCardIdOverlay(CardView card) {
|
||||
return card.getId() > 0 && isShowingOverlays(card) && isPreferenceEnabled(FPref.UI_OVERLAY_CARD_ID);
|
||||
}
|
||||
|
||||
@@ -10,8 +10,15 @@ import com.google.common.collect.ImmutableList;
|
||||
import forge.Forge;
|
||||
import forge.Forge.KeyInputAdapter;
|
||||
import forge.Graphics;
|
||||
import forge.assets.*;
|
||||
import forge.card.*;
|
||||
import forge.assets.FImage;
|
||||
import forge.assets.FSkin;
|
||||
import forge.assets.FSkinFont;
|
||||
import forge.assets.FSkinImage;
|
||||
import forge.assets.FTextureRegionImage;
|
||||
import forge.card.CardDb;
|
||||
import forge.card.CardEdition;
|
||||
import forge.card.CardPreferences;
|
||||
import forge.card.CardRulesPredicates;
|
||||
import forge.deck.io.DeckPreferences;
|
||||
import forge.item.PaperCard;
|
||||
import forge.itemmanager.CardManager;
|
||||
@@ -30,9 +37,13 @@ import forge.planarconquest.ConquestUtil;
|
||||
import forge.properties.ForgePreferences.FPref;
|
||||
import forge.screens.FScreen;
|
||||
import forge.screens.TabPageScreen;
|
||||
import forge.toolbox.*;
|
||||
import forge.toolbox.FContainer;
|
||||
import forge.toolbox.FEvent;
|
||||
import forge.toolbox.FEvent.FEventHandler;
|
||||
import forge.toolbox.FEvent.FEventType;
|
||||
import forge.toolbox.FLabel;
|
||||
import forge.toolbox.FOptionPane;
|
||||
import forge.toolbox.GuiChoose;
|
||||
import forge.util.Callback;
|
||||
import forge.util.ItemPool;
|
||||
import forge.util.Lang;
|
||||
@@ -41,7 +52,11 @@ import forge.util.Utils;
|
||||
import forge.util.storage.IStorage;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
public class FDeckEditor extends TabPageScreen<FDeckEditor> {
|
||||
|
||||
@@ -55,7 +55,14 @@ import forge.util.ItemPool;
|
||||
import forge.util.LayoutHelper;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.Arrays;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
|
||||
|
||||
@@ -22,7 +22,11 @@ import forge.util.Callback;
|
||||
import forge.util.TextUtil;
|
||||
import forge.util.Utils;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import com.badlogic.gdx.utils.Align;
|
||||
|
||||
|
||||
@@ -11,7 +11,11 @@ import forge.assets.ImageCache;
|
||||
import forge.card.CardRenderer;
|
||||
import forge.card.CardRenderer.CardStackPosition;
|
||||
import forge.card.CardZoom;
|
||||
import forge.deck.*;
|
||||
import forge.deck.ArchetypeDeckGenerator;
|
||||
import forge.deck.CardThemedDeckGenerator;
|
||||
import forge.deck.CommanderDeckGenerator;
|
||||
import forge.deck.DeckProxy;
|
||||
import forge.deck.FDeckViewer;
|
||||
import forge.item.InventoryItem;
|
||||
import forge.item.PaperCard;
|
||||
import forge.itemmanager.ColumnDef;
|
||||
@@ -33,8 +37,11 @@ import forge.toolbox.FScrollPane;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.Utils;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import com.badlogic.gdx.graphics.Color;
|
||||
import com.badlogic.gdx.graphics.Texture;
|
||||
|
||||
@@ -35,7 +35,10 @@ import forge.toolbox.FList;
|
||||
|
||||
import com.badlogic.gdx.math.Rectangle;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
|
||||
|
||||
@@ -1,9 +1,17 @@
|
||||
package forge.screens.constructed;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.Arrays;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import forge.deck.CardPool;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.DeckSection;
|
||||
import forge.deck.DeckType;
|
||||
import forge.deck.FDeckChooser;
|
||||
|
||||
import forge.deck.*;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.badlogic.gdx.Gdx;
|
||||
|
||||
@@ -4,7 +4,11 @@ import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import forge.util.*;
|
||||
import forge.util.Callback;
|
||||
import forge.util.Lang;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.NameGenerator;
|
||||
import forge.util.Utils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import com.badlogic.gdx.utils.Align;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
package forge.screens.match;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import com.badlogic.gdx.graphics.Color;
|
||||
|
||||
|
||||
@@ -110,6 +110,9 @@ public class VField extends FContainer {
|
||||
if (!c.hasCardAttachments() &&
|
||||
cardName.equals(c.getCurrentState().getName()) &&
|
||||
card.hasSameCounters(c) &&
|
||||
card.getCurrentState().getKeywordKey().equals(c.getCurrentState().getKeywordKey()) &&
|
||||
card.isTapped() == c.isTapped() && // don't stack tapped tokens on untapped tokens
|
||||
card.isSick() == c.isSick() && //don't stack sick tokens on non sick
|
||||
card.isToken() == c.isToken()) { //don't stack tokens on top of non-tokens
|
||||
CardAreaPanel cPanel = CardAreaPanel.get(c);
|
||||
while (cPanel.getNextPanelInStack() != null) {
|
||||
|
||||
@@ -15,8 +15,14 @@ import forge.interfaces.IWinLoseView;
|
||||
import forge.item.PaperCard;
|
||||
import forge.menu.FMagnifyView;
|
||||
import forge.model.FModel;
|
||||
import forge.toolbox.*;
|
||||
import forge.toolbox.FButton;
|
||||
import forge.toolbox.FContainer;
|
||||
import forge.toolbox.FDisplayObject;
|
||||
import forge.toolbox.FEvent;
|
||||
import forge.toolbox.FEvent.FEventHandler;
|
||||
import forge.toolbox.FLabel;
|
||||
import forge.toolbox.FOverlay;
|
||||
import forge.toolbox.FTextArea;
|
||||
import forge.util.TextUtil;
|
||||
import forge.util.Utils;
|
||||
import forge.util.gui.SGuiChoose;
|
||||
|
||||
@@ -2,7 +2,18 @@ package forge.screens.planarconquest;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import forge.planarconquest.*;
|
||||
import forge.planarconquest.ConquestAwardPool;
|
||||
import forge.planarconquest.ConquestBattle;
|
||||
import forge.planarconquest.ConquestChaosBattle;
|
||||
import forge.planarconquest.ConquestData;
|
||||
import forge.planarconquest.ConquestEvent;
|
||||
import forge.planarconquest.ConquestLocation;
|
||||
import forge.planarconquest.ConquestPlane;
|
||||
import forge.planarconquest.ConquestPlaneData;
|
||||
import forge.planarconquest.ConquestRegion;
|
||||
import forge.planarconquest.ConquestReward;
|
||||
import forge.planarconquest.ConquestUtil;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.badlogic.gdx.graphics.Color;
|
||||
|
||||
@@ -18,8 +18,13 @@ import forge.itemmanager.filters.HistoricFormatSelect;
|
||||
import forge.model.CardCollections;
|
||||
import forge.model.FModel;
|
||||
import forge.properties.ForgeConstants;
|
||||
import forge.quest.*;
|
||||
import forge.quest.QuestController;
|
||||
import forge.quest.QuestMode;
|
||||
import forge.quest.QuestUtil;
|
||||
import forge.quest.QuestWorld;
|
||||
import forge.quest.StartingPoolPreferences;
|
||||
import forge.quest.StartingPoolPreferences.PoolType;
|
||||
import forge.quest.StartingPoolType;
|
||||
import forge.quest.data.DeckConstructionRules;
|
||||
import forge.quest.data.GameFormatQuest;
|
||||
import forge.quest.data.QuestPreferences.QPref;
|
||||
@@ -27,9 +32,17 @@ import forge.screens.FScreen;
|
||||
import forge.screens.LoadingOverlay;
|
||||
import forge.screens.home.NewGameMenu;
|
||||
import forge.screens.quest.QuestMenu.LaunchReason;
|
||||
import forge.toolbox.*;
|
||||
import forge.toolbox.FCheckBox;
|
||||
import forge.toolbox.FComboBox;
|
||||
import forge.toolbox.FDisplayObject;
|
||||
import forge.toolbox.FEvent;
|
||||
import forge.toolbox.FEvent.FEventHandler;
|
||||
import forge.toolbox.FLabel;
|
||||
import forge.toolbox.FNumericTextField;
|
||||
import forge.toolbox.FOptionPane;
|
||||
import forge.toolbox.FRadioButton;
|
||||
import forge.toolbox.FRadioButton.RadioButtonGroup;
|
||||
import forge.toolbox.FScrollPane;
|
||||
import forge.util.FileUtil;
|
||||
import forge.util.ThreadUtil;
|
||||
import forge.util.Utils;
|
||||
@@ -38,8 +51,13 @@ import forge.util.storage.IStorage;
|
||||
|
||||
import org.apache.commons.lang3.text.WordUtils;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
public class NewQuestScreen extends FScreen {
|
||||
|
||||
|
||||
@@ -3,8 +3,12 @@ package forge.screens.quest;
|
||||
import com.badlogic.gdx.graphics.Color;
|
||||
import com.badlogic.gdx.utils.Align;
|
||||
import forge.Graphics;
|
||||
import forge.assets.*;
|
||||
import forge.assets.FImage;
|
||||
import forge.assets.FSkinColor;
|
||||
import forge.assets.FSkinColor.Colors;
|
||||
import forge.assets.FSkinFont;
|
||||
import forge.assets.FSkinImage;
|
||||
import forge.assets.ImageCache;
|
||||
import forge.quest.IQuestEvent;
|
||||
import forge.screens.settings.SettingsScreen;
|
||||
import forge.toolbox.FDisplayObject;
|
||||
|
||||
@@ -1,7 +1,14 @@
|
||||
package forge.screens.settings;
|
||||
|
||||
import forge.download.*;
|
||||
import forge.download.GuiDownloadAchievementImages;
|
||||
import forge.download.GuiDownloadPicturesLQ;
|
||||
import forge.download.GuiDownloadPrices;
|
||||
import forge.download.GuiDownloadQuestImages;
|
||||
import forge.download.GuiDownloadSetPicturesLQ;
|
||||
import forge.download.GuiDownloadService;
|
||||
|
||||
import forge.util.Localizer;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.badlogic.gdx.utils.Align;
|
||||
|
||||
@@ -331,6 +331,10 @@ public class SettingsPage extends TabPage<SettingsScreen> {
|
||||
localizer.getMessage("lblShowCardIDOverlays"),
|
||||
localizer.getMessage("nlShowCardIDOverlays")),
|
||||
5);
|
||||
lstSettings.addItem(new BooleanSetting(FPref.UI_OVERLAY_ABILITY_ICONS,
|
||||
"Show Ability Icons",
|
||||
"Show ability icons for cards, otherwise they're hidden."),
|
||||
5);
|
||||
|
||||
//Vibration Options
|
||||
lstSettings.addItem(new BooleanSetting(FPref.UI_VIBRATE_ON_LIFE_LOSS,
|
||||
|
||||
@@ -10,7 +10,8 @@ import forge.Graphics;
|
||||
import forge.interfaces.IComboBox;
|
||||
import forge.menu.FDropDownMenu;
|
||||
import forge.menu.FMenuItem;
|
||||
import forge.toolbox.FEvent.*;
|
||||
import forge.toolbox.FEvent.FEventHandler;
|
||||
import forge.toolbox.FEvent.FEventType;
|
||||
|
||||
public class FComboBox<T> extends FTextField implements IComboBox<T> {
|
||||
private final List<T> items = new ArrayList<>();
|
||||
|
||||
@@ -9,7 +9,12 @@ import forge.util.Callback;
|
||||
import forge.util.Localizer;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.Arrays;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
public class GuiChoose {
|
||||
|
||||
|
||||
@@ -12,5 +12,5 @@ ALTERNATE
|
||||
Name:Granted
|
||||
ManaCost:3 U
|
||||
Types:Sorcery Adventure
|
||||
A:SP$ ChangeZone | Cost$ 3 U | Origin$ Sideboard | Destination$ Hand | ChangeType$ Card.nonCreature | ChangeNum$ 1 | SpellDescription$ You may choose a noncreature card you own from outside the game, reveal it, and put it into your hand.
|
||||
A:SP$ ChangeZone | Cost$ 3 U | Origin$ Sideboard | Destination$ Hand | ChangeType$ Card.nonCreature+YouOwn | ChangeNum$ 1 | SpellDescription$ You may choose a noncreature card you own from outside the game, reveal it, and put it into your hand.
|
||||
Oracle:You may choose a noncreature card you own from outside the game, reveal it, and put it into your hand.
|
||||
|
||||
@@ -9,6 +9,6 @@ ALTERNATE
|
||||
|
||||
Name:Shield's Might
|
||||
ManaCost:1 G
|
||||
Types:Sorcery Adventure
|
||||
Types:Instant Adventure
|
||||
A:SP$ Pump | Cost$ 1 G | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +2 | NumDef$ +2 | SpellDescription$ Target creature gets +2/+2 until end of turn. (Then exile this card. You may cast the creature later from exile.)
|
||||
Oracle:Target creature gets +2/+2 until end of turn. (Then exile this card. You may cast the creature later from exile.)
|
||||
|
||||
@@ -9,5 +9,5 @@ SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ HOUR | Counter
|
||||
T:Mode$ CounterAdded | ValidCard$ Card.Self | TriggerZones$ Battlefield | CounterType$ HOUR | CounterAmount$ EQ12 | Execute$ TrigChangeAll | TriggerDescription$ When the twelfth hour counter is put on CARDNAME, shuffle your hand and graveyard into your library, then draw seven cards. Exile CARDNAME.
|
||||
SVar:TrigChangeAll:DB$ ChangeZoneAll | Origin$ Graveyard,Hand | Destination$ Library | ChangeType$ Card.YouOwn | Shuffle$ True | SubAbility$ DBDraw
|
||||
SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 7 | SubAbility$ DBExile
|
||||
SVar:DBExile:DB$ ChangeZone | Origin$ Stack | Destination$ Exile
|
||||
SVar:DBExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile
|
||||
Oracle:{T}: Add {U}.\n{2}{U}: Put an hour counter on Midnight Clock.\nAt the beginning of each upkeep, put an hour counter on Midnight Clock.\nWhen the twelfth hour counter is put on Midnight Clock, shuffle your hand and graveyard into your library, then draw seven cards. Exile Midnight Clock.
|
||||
|
||||
@@ -1080,61 +1080,61 @@ lblSearch=Suche
|
||||
lblPriority=Priorität
|
||||
lblTurn=Zug
|
||||
lblPhase=Phase
|
||||
lblEmpty=Empty
|
||||
lbltoResolve=to Resolve.
|
||||
lblStormCount=Storm Count
|
||||
lblEmpty=Leer
|
||||
lbltoResolve=zur Abwicklung.
|
||||
lblStormCount=Sturmzähler
|
||||
#PlayerControllerHuman.java
|
||||
lblYouHaveWonTheCoinToss=%s, you have won the coin toss.
|
||||
lblYouLostTheLastGame=%s, you lost the last game.
|
||||
lblWouldYouLiketoPlayorDraw=Would you like to play or draw?
|
||||
lblWhoWouldYouLiketoStartthisGame=Who would you like to start this game? (Click on the portrait.)
|
||||
lblPlay=Play
|
||||
lblDraw=Draw
|
||||
lblTooFewCardsMainDeck=Too few cards in your main deck (minimum %s), please make modifications to your deck again.
|
||||
lblTooManyCardsSideboard=Too many cards in your sideboard (maximum %s), please make modifications to your deck again.
|
||||
lblAssignCombatDamageWerentBlocked=Do you want to assign its combat damage as though it weren't blocked?
|
||||
lblChosenCards=Chosen Cards
|
||||
lblAttacker=Attacker
|
||||
lblTriggeredby=Triggered by
|
||||
lblChooseWhichCardstoReveal=Choose Which Cards to Reveal
|
||||
lblChooseCardsActivateOpeningHandandOrder=Choose cards to activate from opening hand and their order
|
||||
lblActivateFirst=Activate first
|
||||
lblChooseOptionalCosts=Choose optional Costs
|
||||
lblOptionalCosts=Optional Costs
|
||||
lblDoYouWanttoScry=Do you want to scry?
|
||||
lblChooseCardstoSpliceonto=Choose cards to Splice onto
|
||||
lblDoNextActioninSequence=Do Next Action in Sequence
|
||||
lblPleaseDefineanActionSequenceFirst=Please define an action sequence first.
|
||||
lblRememberActionSequence=Remember Action Sequence
|
||||
lblYouMustHavePrioritytoUseThisFeature=You must have priority to use this feature.
|
||||
lblNameTheCard=Name the card
|
||||
lblWhichPlayerShouldRoll=Which player should roll?
|
||||
lblChooseResult=Choose result
|
||||
lblChosenCardNotPermanentorCantExistIndependentlyontheBattleground=The chosen card is not a permanent or can't exist independently on the battlefield.\nIf you'd like to cast a non-permanent spell, or if you'd like to cast a permanent spell and place it on stack, please use the Cast Spell/Play Land button.
|
||||
lblError=Error
|
||||
lblWinGame=Win Game
|
||||
lblSetLifetoWhat=Set life to what?
|
||||
lblSetLifeforWhichPlayer=Set life for which player
|
||||
lblChoosePermanentstoTap=Choose permanents to tap
|
||||
lblChoosePermanentstoUntap=Choose permanents to untap
|
||||
lblWhichTypeofCounter=Which type of counter?
|
||||
lblHowManyCounters=How many counters?
|
||||
lblRemoveCountersFromWhichCard=Remove counters from which card?
|
||||
lblAddCountersToWhichCard=Add counters to which card?
|
||||
lblChooseaCard=Choose a card
|
||||
lblNoPlayerPriorityDeckCantBeTutoredFrom=No player has priority at the moment, so their deck can't be tutored from.
|
||||
lblNoPlayerPriorityGameStateCannotBeSetup=No player has priority at the moment, so game state cannot be setup.
|
||||
lblErrorLoadingBattleSetupFile=Error loading battle setup file!
|
||||
lblSelectCardstoAddtoYourDeck=Select cards to add to your deck
|
||||
lblAddTheseToMyDeck=Add these to my deck
|
||||
lblChooseaPile=Choose a pile
|
||||
lblSelectOrderForSimultaneousAbilities=Select order for simultaneous abilities
|
||||
lblReorderSimultaneousAbilities=Reorder simultaneous abilities
|
||||
lblResolveFirst=Resolve first
|
||||
lblMoveCardstoToporBbottomofLibrary=Move cards to top or bottom of library
|
||||
lblSelectCardsToBeOutOnTheBottomOfYourLibrary=Select cards to be put on the bottom of your library
|
||||
lblCardsToPutOnTheBottom=Cards to put on the bottom
|
||||
lblArrangeCardsToBePutOnTopOfYourLibrary=Arrange cards to be put on top of your library
|
||||
lblTopOfLibrary=Top of Library
|
||||
lblSelectCardsToBePutIntoTheGraveyard=Select cards to be put into the graveyard
|
||||
lblCardsToPutInTheGraveyard=Cards to put in the graveyard
|
||||
lblYouHaveWonTheCoinToss=%s, du hast den Münzwurf gewonnen.
|
||||
lblYouLostTheLastGame=%s, du hast das letzte Spiel verloren.
|
||||
lblWouldYouLiketoPlayorDraw=Willst du lieber zuerst spielen oder ziehen.
|
||||
lblWhoWouldYouLiketoStartthisGame=Wer soll das Spiel beginnen? (Klicke auf das Portrait.)
|
||||
lblPlay=Spielen
|
||||
lblDraw=Ziehen
|
||||
lblTooFewCardsMainDeck=Zu wenig Karten in deinem Deck (mindestens %s). Bitte passe dein Deck an.
|
||||
lblTooManyCardsSideboard=Zu viele Karten in deinem Deck (maximal %s). Bitte passe dein Deck an.
|
||||
lblAssignCombatDamageWerentBlocked=Möchtest du den Kampfschaden deklarieren, als wäre nicht geblockt worden?
|
||||
lblChosenCards=Wähle Karten
|
||||
lblAttacker=Angreifer
|
||||
lblTriggeredby=Ausgelöst durch
|
||||
lblChooseWhichCardstoReveal=Wähle die vorzuzeigenden Karten
|
||||
lblChooseCardsActivateOpeningHandandOrder=Wähle die aus der Starthand zu aktivierenden Karten und ihre Reihenfolge
|
||||
lblActivateFirst=Aktiviere zuerst
|
||||
lblChooseOptionalCosts=Wähle optionale Kosten
|
||||
lblOptionalCosts=Optionale Kosten
|
||||
lblDoYouWanttoScry=Hellsicht anwenden?
|
||||
lblChooseCardstoSpliceonto=Wähle Karte, an welche gekoppelt werden soll
|
||||
lblDoNextActioninSequence=Nächste Aktion ausführen
|
||||
lblPleaseDefineanActionSequenceFirst=Bitte lege erst die Aktionsreigefolge fest.
|
||||
lblRememberActionSequence=Merke Aktionsreihenfolge
|
||||
lblYouMustHavePrioritytoUseThisFeature=Um diese Funktion zu nutzen brauchst du die Priorität.
|
||||
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 plazieren möchtest, nutze bitte den "Zauber wirken/Land spielen"-Knopf.
|
||||
lblError=Fehler
|
||||
lblWinGame=Gewinne Spiel
|
||||
lblSetLifetoWhat=Setze Lebenspunkte auf?
|
||||
lblSetLifeforWhichPlayer=Setze Lebenspunkte für Spieler
|
||||
lblChoosePermanentstoTap=Wähle Karte zum Tappen
|
||||
lblChoosePermanentstoUntap=Wähle Karte zum Enttappen
|
||||
lblWhichTypeofCounter=Welche Art von Marken?
|
||||
lblHowManyCounters=Wie viele Marken?
|
||||
lblRemoveCountersFromWhichCard=Entferne Marken von welcher Karte?
|
||||
lblAddCountersToWhichCard=Lege Marken auf welche Karte?
|
||||
lblChooseaCard=Wähle eine Karte
|
||||
lblNoPlayerPriorityDeckCantBeTutoredFrom=Kein Spieler hat Priorität im Moment, daher kein Zugriff auf entsprechendes Deck.
|
||||
lblNoPlayerPriorityGameStateCannotBeSetup=Kein Spieler hat Priorität im Moment, daher der Spielstand nicht gesetzt werden.
|
||||
lblErrorLoadingBattleSetupFile=Fehler beim Laden der Spielvorgaben!
|
||||
lblSelectCardstoAddtoYourDeck=Wähle Karten, um sie deinem Deck hinzuzufügen.
|
||||
lblAddTheseToMyDeck=Zu meinem Deck hinzufügen
|
||||
lblChooseaPile=Wähle einen Stapel
|
||||
lblSelectOrderForSimultaneousAbilities=Wähle Reihenfolge für simultane Fähigkeiten
|
||||
lblReorderSimultaneousAbilities=Ordne Reihenfolge für simultane Fähigkeiten neu
|
||||
lblResolveFirst=Zuerst abwickeln
|
||||
lblMoveCardstoToporBbottomofLibrary=Bewege Karte an Anfang oder Ende der Bibliothek
|
||||
lblSelectCardsToBeOutOnTheBottomOfYourLibrary=Wähle Karte, welche unter die Bibliothek gelegt werden soll
|
||||
lblCardsToPutOnTheBottom=Karten, welche unter die Bibliothek gelegt werden sollen
|
||||
lblArrangeCardsToBePutOnTopOfYourLibrary=Ordne Karten, welche unter die Bibliothek gelegt werden sollen
|
||||
lblTopOfLibrary=Oben auf Bibliothek
|
||||
lblSelectCardsToBePutIntoTheGraveyard=Wähle Karten, welche auf den Friedhof gelegt werden sollen
|
||||
lblCardsToPutInTheGraveyard=Karten, welche auf den Friedhof gelegt werden sollen
|
||||
|
||||
@@ -58,15 +58,15 @@ cbSingletons=单张模式
|
||||
cbRemoveArtifacts=删除神器
|
||||
cbAnte=赌博模式
|
||||
cbAnteMatchRarity=赌注稀有度匹配
|
||||
cbEnableAICheats=允许AI作弊
|
||||
cbEnableAICheats=允许人工智能作弊
|
||||
cbManaBurn=法术力灼烧
|
||||
cbManaLostPrompt=提示法术力池将要清空
|
||||
cbDevMode=开发人员模式
|
||||
cbLoadCardsLazily=惰性加载卡牌脚本
|
||||
cbLoadCardsLazily=惰性加载牌张脚本
|
||||
cbLoadHistoricFormats=加载史记赛制
|
||||
cbWorkshopSyntax=作坊语法检查
|
||||
cbEnforceDeckLegality=套牌一致性
|
||||
cbSideboardForAI=玩家为AI换备
|
||||
cbSideboardForAI=玩家为人工智能换备
|
||||
cbPerformanceMode=性能模式
|
||||
cbFilteredHands=手牌过滤
|
||||
cbImageFetcher=自动下载缺失的图片
|
||||
@@ -101,7 +101,7 @@ cbUseSentry=自动提交错误报告
|
||||
cbpGameLogEntryType=游戏日志详细程度
|
||||
cbpCloseAction=关闭动作
|
||||
cbpDefaultFontSize=默认字体大小
|
||||
cbpAiProfiles=AI强度
|
||||
cbpAiProfiles=人工智能强度
|
||||
cbpDisplayCurrentCardColors=显示牌张颜色详情
|
||||
cbpAutoYieldMode=自动让过
|
||||
cbpCounterDisplayType=计数器显示类型
|
||||
@@ -115,19 +115,19 @@ nlCompactMainMenu=启用节省空间的侧边栏,一次只显示一个菜单
|
||||
nlUseSentry=启用后,会自动向开发人员提交错误报告。
|
||||
GamePlay=游戏
|
||||
nlpMulliganRule=选择调度规则
|
||||
nlpAiProfiles=选择你的AI对手
|
||||
nlpAiProfiles=选择你的人工智能对手
|
||||
nlAnte=确定游戏是否使用赌注
|
||||
nlAnteMatchRarity=尝试为所有玩家生成同稀有度赌注
|
||||
nlEnableAICheats=允许AI进行作弊以获得优势(对于已经设置了作弊洗牌的AI)。
|
||||
nlEnableAICheats=允许人工智能进行作弊以获得优势(对于已经设置了作弊洗牌的人工智能)。
|
||||
nlManaBurn=使用法术力灼烧(M10之前的规则)
|
||||
nlManaLostPrompt=启用后,如果让过优先权会导致法术力池清空,你将收到一个警告提示。
|
||||
nlEnforceDeckLegality=强制每个与环境相关的套牌合法性(最小单卡数,最大单卡数等)。
|
||||
nlSideboardForAI=允许用户在构筑赛制中为AI换备牌。
|
||||
nlSideboardForAI=允许用户在构筑赛制中为人工智能换备牌。
|
||||
nlPerformanceMode=禁止其他静态能力检查以加速游戏引擎(警告:对手手牌有闪现单卡能使用时可能会跳过)。
|
||||
nlFilteredHands=生成两个起手并发给你最接近套牌地比例的起手(需要重启)
|
||||
nlCloneImgSource=启用克隆的时候将使用原画而不是克隆牌的画
|
||||
nlPromptFreeBlocks=启用后如果你需要支付0来阻挡,则不会提示自动支付0。
|
||||
nlPauseWhileMinimized=启用后,Forge将在暂停时最小化(主要用于AI VS AI)。
|
||||
nlPauseWhileMinimized=启用后,Forge将在暂停时最小化(主要用于人工智能 VS 人工智能)。
|
||||
nlEscapeEndsTurn=启用后,空格键可以用于结束当前回合的替代按键。
|
||||
nlDetailedPaymentDesc=启用后,选择目标和支付费用的时候会显示详细的咒语/异能说明。
|
||||
nlShowStormCount=启用后,提示窗格将会显示当前的风暴计数
|
||||
@@ -144,10 +144,10 @@ DeckEditorOptions=套牌编辑器选项
|
||||
nlFilterLandsByColorId=当使用牌张颜色筛选器时,过滤地可以更容易找到产数相关法术力的地
|
||||
AdvancedSettings=高级设置
|
||||
nlDevMode=启用在开发期间进行测试的功能菜单
|
||||
nlWorkshopSyntax=在作坊中启用卡牌脚本检查。注意:该功能任在测试阶段。
|
||||
nlWorkshopSyntax=在作坊中启用牌张脚本检查。注意:该功能任在测试阶段。
|
||||
nlGameLogEntryType=更改游戏中日志显示的信息量。排序为最少到最详细。
|
||||
nlCloseAction=更改单击右上角X按钮时的行为
|
||||
nlLoadCardsLazily=如果打开该选项Forge将在使用到卡牌脚本时才加载(警告:实验状态)。
|
||||
nlLoadCardsLazily=如果打开该选项Forge将在使用到牌张脚本时才加载(警告:实验状态)。
|
||||
nlLoadHistoricFormats=如果打开,Forge将加载史记赛制,这个能会导致游戏载入时间变长。
|
||||
GraphicOptions=图形选项
|
||||
nlDefaultFontSize=UI中字体的默认大小。所有字体元素都相对于此缩放。(需要重启)
|
||||
@@ -155,21 +155,21 @@ cbpMulliganRule = 调度规则
|
||||
nlImageFetcher=允许从在线资源中实时获取缺失的图片
|
||||
nlDisplayFoil=显示闪卡
|
||||
nlRandomFoil=随机将牌设置为闪卡
|
||||
nlScaleLarger=允许卡牌图片缩放为初始大小
|
||||
nlScaleLarger=允许牌张图片缩放为初始大小
|
||||
nlRenderBlackCardBorders=为牌周围渲染黑色边框
|
||||
nlLargeCardViewers=是所有牌看起来更大以便高分辨率图片看起来更舒适,不适合低分辨率设备使用
|
||||
nlSmallDeckViewer=将套牌查看器设置为800X600而不是按屏幕大小等比缩放
|
||||
nlRandomArtInPools=限制赛生成的卡池中带有闪卡。
|
||||
nlUiForTouchScreen=增加一些UI元素以提高触屏体验(需要重启)。
|
||||
nlCompactPrompt=隐藏标题并在“提示”窗格中使用较小的字体使其更紧凑。
|
||||
nlHideReminderText=在“卡牌详情“窗格中隐藏提醒文本
|
||||
nlHideReminderText=在“牌张详情“窗格中隐藏提醒文本
|
||||
nlOpenPacksIndiv=打开肥包或者补充盒的时候一包一包开。
|
||||
nlTokensInSeparateRow=生物与衍生物分不同的行显示。
|
||||
nlStackCreatures=在战场上如同地、神器、结界一般堆叠一样的生物。
|
||||
nlTimedTargOverlay=启用基于限制目标的覆盖优化以减少CPU使用率(仅在旧设备上需要使用,需要重启游戏)。
|
||||
nlCounterDisplayType=选择指示物的样式。基于文本还是基于图片还是二者混合。
|
||||
nlCounterDisplayLocation=确定牌张上指示物的位置:靠近底部还是顶部
|
||||
nlDisplayCurrentCardColors=在卡牌详情窗格中显示当前牌的颜色
|
||||
nlDisplayCurrentCardColors=在牌张详情窗格中显示当前牌的颜色
|
||||
SoundOptions=声音选项
|
||||
nlEnableSounds=在游戏中启用声音效果
|
||||
nlEnableMusic=在游戏中启用背景音乐
|
||||
@@ -195,7 +195,7 @@ lblDownloadPicsHQ=下载缺省牌的高清图片
|
||||
lblDownloadSetPics=下载每张牌的图片(每张牌出现一次)
|
||||
lblDownloadQuestImages=下载冒险之旅里使用的衍生物与图标
|
||||
lblDownloadAchievementImages=下载成就图片,让你的奖杯更引人注目。
|
||||
lblDownloadPrices=下载卡牌商店最新的价格表
|
||||
lblDownloadPrices=下载牌张商店最新的价格表
|
||||
lblYourVersionOfJavaIsTooOld=你的Java版本太旧无法开始下载内容
|
||||
lblPleaseUpdateToTheLatestVersionOfJava=请更新到最新版本的JRE
|
||||
lblYoureRunning=你在运行
|
||||
@@ -255,7 +255,7 @@ lblCommanderDeck=指挥官套牌
|
||||
lblPlanarDeck=时空竞逐套牌
|
||||
lblVanguard=先锋
|
||||
lblHuman=人类
|
||||
lblAI=AI
|
||||
lblAI=人工智能
|
||||
lblOpen=打开
|
||||
lblUseSimulation=使用模拟
|
||||
lblGetaNewRandomName=获取一个新的随机名称
|
||||
@@ -299,7 +299,7 @@ lblAlphaStrike=先攻
|
||||
lblEndTurn=结束回合
|
||||
lblTargetingArcs=瞄准弧
|
||||
lblOff=关闭
|
||||
lblCardMouseOver=卡牌悬停
|
||||
lblCardMouseOver=牌张悬停
|
||||
lblAlwaysOn=总是打开
|
||||
lblAutoYields=自动让过
|
||||
lblDeckList=套牌列表
|
||||
@@ -352,8 +352,8 @@ lblPlayAnOpponent=所有对手
|
||||
lblPlayAll7opponents=全部7个对手
|
||||
lblBuildorselectadeck=构建或选择一个套牌
|
||||
lblDraftText1=在轮抓模式中,三个补充包在8个玩家中传递
|
||||
lblDraftText2=从你选的牌中组一套牌。AI也会这样做
|
||||
lblDraftText3=然后对抗一个或多个AI对手
|
||||
lblDraftText2=从你选的牌中组一套牌。人工智能也会这样做
|
||||
lblDraftText3=然后对抗一个或多个人工智能对手
|
||||
lblNewBoosterDraftGame=新的补充包轮抓
|
||||
lblDraftDecks=轮抓套牌
|
||||
#CSubmenuDraft.java
|
||||
@@ -366,8 +366,8 @@ lblSealedDecks=现开套牌
|
||||
lblHeaderSealed=游戏模式:现开
|
||||
lblSealedText1=构建或选择一个套牌
|
||||
lblSealedText2=在现开模式中,您可以从补充包里(最多10个)构建一套牌
|
||||
lblSealedText3=从你得到的牌中组一套牌。AI也会这样做
|
||||
lblSealedText4=然后对抗一个或多个AI对手
|
||||
lblSealedText3=从你得到的牌中组一套牌。人工智能也会这样做
|
||||
lblSealedText4=然后对抗一个或多个人工智能对手
|
||||
btnBuildNewSealedDeck=构建新的现开套牌
|
||||
#FDeckChooser.java
|
||||
lblViewDeck=查看套牌
|
||||
@@ -425,7 +425,7 @@ lblNextChallengeNotYet=没有确定下次胜利后的挑战
|
||||
btnUnlockSets=解锁系列
|
||||
btnTravel=时空旅行
|
||||
btnBazaar=珍宝集市
|
||||
btnSpellShop=卡牌商店
|
||||
btnSpellShop=牌张商店
|
||||
cbSummonPlant=召唤植物
|
||||
cbLaunchZeppelin=启动飞艇
|
||||
#VSubmenuQuest.java
|
||||
@@ -448,7 +448,7 @@ lblCustomdeck=自定义套牌
|
||||
lblDefineCustomFormat=定义自定义赛制
|
||||
lblSelectFormat=选择赛制
|
||||
lblStartWithAllCards=从所选系列的所有牌开始
|
||||
lblAllowDuplicateCards=允许重复的卡牌
|
||||
lblAllowDuplicateCards=允许重复的牌张
|
||||
lblStartingPoolDistribution=初始牌池分配
|
||||
lblChooseDistribution=选择分配
|
||||
lblPrizedCards=奖励卡
|
||||
@@ -505,9 +505,9 @@ lblColors=颜色
|
||||
lblnoSettings=没有可用于此选择的设置
|
||||
lblDistribution=分配
|
||||
lblHoverforDescription=将鼠标悬停在每个选项上以获得更详细的说明
|
||||
lblradBalanced=“均衡”将在每种选定的颜色中提供数量均衡的卡牌。
|
||||
lblradRandom=“随机”将随机分配卡牌和颜色。
|
||||
lblradSurpriseMe=随机挑选颜色并提供数量均衡的随机卡牌。
|
||||
lblradBalanced=“均衡”将在每种选定的颜色中提供数量均衡的牌张。
|
||||
lblradRandom=“随机”将随机分配牌张和颜色。
|
||||
lblradSurpriseMe=随机挑选颜色并提供数量均衡的随机牌张。
|
||||
lblradBoosters=忽略所有颜色设置,从指定数量的补充包中生成牌池
|
||||
lblcbxArtifacts=选择后无论选择的颜色如何,神器都包涵在牌池中,这模拟了旧牌池的行为。
|
||||
#VSubmenuChallenges.java
|
||||
@@ -531,7 +531,7 @@ lblPastResults=结果
|
||||
lblQuestDecks=套牌管理
|
||||
lblQuestDesc1=一开始你可以从有限的牌池中构建套牌。
|
||||
lblQuestDesc2=随着冒险之旅的进行,你的牌池逐渐增长,可以构建出更强的套牌。
|
||||
lblQuestDesc3=并且在与AI的决斗和挑战对抗中可以解锁更多牌。
|
||||
lblQuestDesc3=并且在与人工智能的决斗和挑战对抗中可以解锁更多牌。
|
||||
lblBuildaNewDeck=构建一个新套牌
|
||||
#Decktype.java
|
||||
lblCustomUserDecks=用户自定义套牌
|
||||
@@ -620,7 +620,7 @@ lblBuildAndSelectaDeck=构建,然后在“冒险套牌”子菜单中选择一
|
||||
lblCurrentDeck=你现在的套牌是%n
|
||||
PleaseCreateAQuestBefore=请在%n之前创建套牌。
|
||||
lblNoQuest=没有探索
|
||||
lblVisitTheSpellShop=参观卡牌商店
|
||||
lblVisitTheSpellShop=参观牌张商店
|
||||
lblVisitTheBazaar=参观珍宝集市
|
||||
lblUnlockEditions=解锁新的时空
|
||||
lblUnlocked=你已经成功解锁%n
|
||||
@@ -662,9 +662,9 @@ lblHard=难
|
||||
lblExpert=专家
|
||||
lblWinsforBooster=获得补充包所需的胜利
|
||||
lblWinsforRankIncrease=排名增加所需的胜利
|
||||
lblWinsforMediumAI=匹配中等难度AI所需的胜利
|
||||
lblWinsforHardAI=匹配困难难度AI所需的胜利
|
||||
lblWinsforExpertAI=匹配专家难度AI所需的胜利
|
||||
lblWinsforMediumAI=匹配中等难度人工智能所需的胜利
|
||||
lblWinsforHardAI=匹配困难难度人工智能所需的胜利
|
||||
lblWinsforExpertAI=匹配专家难度人工智能所需的胜利
|
||||
lblStartingCommons=初始铁
|
||||
lblStartingUncommons=初始银
|
||||
lblStartingRares=初始金
|
||||
@@ -695,16 +695,16 @@ lblCardSalePercentageCap=出售牌的系数上限
|
||||
lblCardSalePriceCap=出售牌的价格上限
|
||||
lblWinstoUncapSalePrice=胜利解锁价格系数
|
||||
lblPlaysetSize=玩家收藏大小
|
||||
ttPlaysetSize=在售卖卡牌时要保留的卡牌数量
|
||||
ttPlaysetSize=在售卖牌张时要保留的牌张数量
|
||||
lblPlaysetSizeBasicLand=玩家收藏大小:基本地
|
||||
ttPlaysetSizeBasicLand=在售卖卡牌时要保留的基本地数量
|
||||
ttPlaysetSizeBasicLand=在售卖牌张时要保留的基本地数量
|
||||
lblPlaysetSizeAnyNumber=玩家收藏大小:任意数量
|
||||
ttPlaysetSizeAnyNumber=售卖卡牌时不保留卡牌
|
||||
ttPlaysetSizeAnyNumber=售卖牌张时不保留牌张
|
||||
lblItemLevelRestriction=物品等级限制
|
||||
lblFoilfilterAlwaysOn=闪卡过滤器始终开启
|
||||
lblRatingsfilterAlwaysOn=评级过滤器始终开启。
|
||||
lblSimulateAIvsAIResults=模拟AI VS AI的结果。
|
||||
ttSimulateAIvsAIResults=如果设置为1,则不会播放AI VS AI的轮抓。而是快速确定其对局结果。
|
||||
lblSimulateAIvsAIResults=模拟人工智能 VS 人工智能的结果。
|
||||
ttSimulateAIvsAIResults=如果设置为1,则不会播放人工智能 VS 人工智能的轮抓。而是快速确定其对局结果。
|
||||
lblWinsforNewDraft=新轮抓所需的胜利
|
||||
lblWinsperDraftRotation=每次轮抓胜利轮替
|
||||
ttWinsperDraftRotation=如果轮抓没有赢这么多场,那么它将被删除或者替换。
|
||||
@@ -767,7 +767,7 @@ lblRemove4ofcard=移除4张牌
|
||||
ttRemove4ofcard=最多可以将4张所选牌从当前套牌移除
|
||||
lblAddBasicLands=添加基本地
|
||||
ttAddBasicLands=添加基本地到套牌
|
||||
lblCardCatalog=卡牌目录
|
||||
lblCardCatalog=牌张目录
|
||||
lblJumptoprevioustable=跳转到上一个表格
|
||||
lblJumptopnexttable=跳转到下一个表格
|
||||
lblJumptotextfilter=跳转到文本筛选器
|
||||
@@ -863,7 +863,7 @@ lblUntitled=无标题
|
||||
lblPrompt=提示
|
||||
lblGameSetup=游戏设置
|
||||
#ColumnDef.java
|
||||
lblAIStatus=AI状态
|
||||
lblAIStatus=人工智能状态
|
||||
lblCMC=总法术力费用
|
||||
ttCMC=总法术力费用
|
||||
lblCN=编号
|
||||
@@ -905,7 +905,7 @@ lblBattlefieldTextureFiltering=战场纹理过滤
|
||||
lblCompactListItems=紧凑的项目列表
|
||||
lblCompactTabs=紧凑标签
|
||||
lblCardOverlays=牌张叠加层
|
||||
lblDisableCardEffect=禁用卡牌“效果”图
|
||||
lblDisableCardEffect=禁用牌张“效果”图
|
||||
lblDynamicBackgroundPlanechase=动态时空背景
|
||||
lblGameplayOptions=游戏选项
|
||||
lblGeneralSettings=常规设置
|
||||
@@ -929,14 +929,14 @@ lblVibrateWhenLosingLife=失去生命时震动
|
||||
lblVibrationOptions=振动选项
|
||||
nlAutomaticBugReports=在没有提示的情况下自动向开发人员报告错误
|
||||
nlBattlefieldTextureFiltering=在战场上过滤闪卡特效,使其在大屏幕上不像素化(需要重启,可能会降低性能)。
|
||||
nlCompactListItems=默认情况下,在所有视图列表中只显示卡牌和套牌的单行文本。
|
||||
nlCompactListItems=默认情况下,在所有视图列表中只显示牌张和套牌的单行文本。
|
||||
nlCompactTabs=在标签页屏幕顶部显示较小的标签(例如此屏幕)。
|
||||
nlDisableCardEffect=禁用“效果”卡的缩放图片。
|
||||
nlDynamicBackgroundPlanechase=使用当前时空图片作为背景(时空图片必须位于cache/pics/planechase文件夹中)。
|
||||
nlHotSeatMode=当用两个人类玩家开始游戏的时候,用单个提示控制两个玩家。
|
||||
nlLandscapeMode=使用横向(水平)而不是纵向(垂直)。
|
||||
nlMinimizeScreenLock=锁定屏幕时最小化Forge(锁屏以后出现图形故障使用)。
|
||||
nlOrderGraveyard=确定何时让玩家确定同时进入坟场的牌的顺序(绝不/总是/只对有关卡牌)。
|
||||
nlOrderGraveyard=确定何时让玩家确定同时进入坟场的牌的顺序(绝不/总是/只对有关牌张)。
|
||||
nlRotateZoomPlanesPhenomena=旋转缩放时空或异象图片。
|
||||
nlRotateZoomSplit=旋转缩放连体牌图片。
|
||||
nlShowCardIDOverlays=显示牌张的ID叠加层,否则他们被隐藏。
|
||||
@@ -946,7 +946,7 @@ nlShowCardOverlays=显示牌张名称,法术力费用,力量/防御和ID叠
|
||||
nlShowCardPTOverlays=显示力量/防御/忠诚叠加层,否则他们被隐藏。
|
||||
nlShowMatchBackground=在战场显示背景图片,否则显示背景纹理。
|
||||
nlTheme=设置显示的组件使用的外观主题。
|
||||
nlVibrateAfterLongPress=启用长按触发震动,例如长按缩放卡牌图片。
|
||||
nlVibrateAfterLongPress=启用长按触发震动,例如长按缩放牌张图片。
|
||||
nlVibrateWhenLosingLife=启用当玩家在游戏中失去生命或收到伤害时震动。
|
||||
#MatchScreen.java
|
||||
lblPlayers=玩家列表
|
||||
@@ -971,7 +971,7 @@ lblChangePreferredArt=改变首选卡图
|
||||
lblSelectPreferredArt=选择首选的卡图版本
|
||||
lblTo=到
|
||||
lblAvatar=头像
|
||||
lblCards=卡牌
|
||||
lblCards=牌张
|
||||
lblPlanes=时空
|
||||
lblSchemes=阴谋
|
||||
lblToMainDeck=到主牌
|
||||
@@ -982,7 +982,7 @@ lblCommanders=指挥官
|
||||
lblOathbreakers=破誓者
|
||||
#Forge.java
|
||||
lblLoadingFonts=加载字体中
|
||||
lblLoadingCardTranslations=加载卡牌翻译中
|
||||
lblLoadingCardTranslations=加载牌张翻译中
|
||||
lblFinishingStartup=完成启动
|
||||
#LobbyScreen.java
|
||||
lblMore=更多
|
||||
@@ -1053,12 +1053,12 @@ lblOldLandCount=%d张地
|
||||
lblNewLandCount=添加%d张地
|
||||
lblNewTotalCount=%d张牌
|
||||
#FDeckImportDialog.java
|
||||
lblImportLatestVersionCard=导入卡牌的最新版本
|
||||
lblImportLatestVersionCard=导入牌张的最新版本
|
||||
lblUseOnlySetsReleasedBefore=只用之前上市系列的版本:
|
||||
lblUseOnlyCoreAndExpansionSets=只使用核心系列和拓展系列
|
||||
lblFollowingCardsCannotBeImported=由于拼写错误,系列限制或forge尚未实现,以下卡牌没有被导入:
|
||||
lblFollowingCardsCannotBeImported=由于拼写错误,系列限制或forge尚未实现,以下牌张没有被导入:
|
||||
lblImportRemainingCards=导入剩余的卡?
|
||||
lblNoKnownCardsOnClipboard=在剪切板找不到已知的卡牌。\n\n将卡组列表复制到剪切板,然后重新打开此对话框。
|
||||
lblNoKnownCardsOnClipboard=在剪切板找不到已知的牌张。\n\n将套牌列表复制到剪切板,然后重新打开此对话框。
|
||||
#FDeckViewer.java
|
||||
lblDeckListCopiedClipboard=套牌列表'%s'已经复制到剪切板
|
||||
#FSideboardDialog.java
|
||||
@@ -1077,64 +1077,64 @@ lblPaste=粘贴
|
||||
#ListChooser.java
|
||||
lblSearch=搜索
|
||||
#InputBase.java
|
||||
lblPriority=Priority
|
||||
lblTurn=Turn
|
||||
lblPhase=Phase
|
||||
lblEmpty=Empty
|
||||
lbltoResolve=to Resolve.
|
||||
lblStormCount=Storm Count
|
||||
lblPriority=优先
|
||||
lblTurn=让过
|
||||
lblPhase=阶段
|
||||
lblEmpty=空
|
||||
lbltoResolve=结算。
|
||||
lblStormCount=风暴计数
|
||||
#PlayerControllerHuman.java
|
||||
lblYouHaveWonTheCoinToss=%s, you have won the coin toss.
|
||||
lblYouLostTheLastGame=%s, you lost the last game.
|
||||
lblWouldYouLiketoPlayorDraw=Would you like to play or draw?
|
||||
lblWhoWouldYouLiketoStartthisGame=Who would you like to start this game? (Click on the portrait.)
|
||||
lblPlay=Play
|
||||
lblDraw=Draw
|
||||
lblTooFewCardsMainDeck=Too few cards in your main deck (minimum %s), please make modifications to your deck again.
|
||||
lblTooManyCardsSideboard=Too many cards in your sideboard (maximum %s), please make modifications to your deck again.
|
||||
lblAssignCombatDamageWerentBlocked=Do you want to assign its combat damage as though it weren't blocked?
|
||||
lblChosenCards=Chosen Cards
|
||||
lblAttacker=Attacker
|
||||
lblTriggeredby=Triggered by
|
||||
lblChooseWhichCardstoReveal=Choose Which Cards to Reveal
|
||||
lblChooseCardsActivateOpeningHandandOrder=Choose cards to activate from opening hand and their order
|
||||
lblActivateFirst=Activate first
|
||||
lblChooseOptionalCosts=Choose optional Costs
|
||||
lblOptionalCosts=Optional Costs
|
||||
lblDoYouWanttoScry=Do you want to scry?
|
||||
lblChooseCardstoSpliceonto=Choose cards to Splice onto
|
||||
lblDoNextActioninSequence=Do Next Action in Sequence
|
||||
lblPleaseDefineanActionSequenceFirst=Please define an action sequence first.
|
||||
lblRememberActionSequence=Remember Action Sequence
|
||||
lblYouMustHavePrioritytoUseThisFeature=You must have priority to use this feature.
|
||||
lblNameTheCard=Name the card
|
||||
lblWhichPlayerShouldRoll=Which player should roll?
|
||||
lblChooseResult=Choose result
|
||||
lblChosenCardNotPermanentorCantExistIndependentlyontheBattleground=The chosen card is not a permanent or can't exist independently on the battlefield.\nIf you'd like to cast a non-permanent spell, or if you'd like to cast a permanent spell and place it on stack, please use the Cast Spell/Play Land button.
|
||||
lblError=Error
|
||||
lblWinGame=Win Game
|
||||
lblSetLifetoWhat=Set life to what?
|
||||
lblSetLifeforWhichPlayer=Set life for which player
|
||||
lblChoosePermanentstoTap=Choose permanents to tap
|
||||
lblChoosePermanentstoUntap=Choose permanents to untap
|
||||
lblWhichTypeofCounter=Which type of counter?
|
||||
lblHowManyCounters=How many counters?
|
||||
lblRemoveCountersFromWhichCard=Remove counters from which card?
|
||||
lblAddCountersToWhichCard=Add counters to which card?
|
||||
lblChooseaCard=Choose a card
|
||||
lblNoPlayerPriorityDeckCantBeTutoredFrom=No player has priority at the moment, so their deck can't be tutored from.
|
||||
lblNoPlayerPriorityGameStateCannotBeSetup=No player has priority at the moment, so game state cannot be setup.
|
||||
lblErrorLoadingBattleSetupFile=Error loading battle setup file!
|
||||
lblSelectCardstoAddtoYourDeck=Select cards to add to your deck
|
||||
lblAddTheseToMyDeck=Add these to my deck
|
||||
lblChooseaPile=Choose a pile
|
||||
lblSelectOrderForSimultaneousAbilities=Select order for simultaneous abilities
|
||||
lblReorderSimultaneousAbilities=Reorder simultaneous abilities
|
||||
lblResolveFirst=Resolve first
|
||||
lblMoveCardstoToporBbottomofLibrary=Move cards to top or bottom of library
|
||||
lblSelectCardsToBeOutOnTheBottomOfYourLibrary=Select cards to be put on the bottom of your library
|
||||
lblCardsToPutOnTheBottom=Cards to put on the bottom
|
||||
lblArrangeCardsToBePutOnTopOfYourLibrary=Arrange cards to be put on top of your library
|
||||
lblTopOfLibrary=Top of Library
|
||||
lblSelectCardsToBePutIntoTheGraveyard=Select cards to be put into the graveyard
|
||||
lblCardsToPutInTheGraveyard=Cards to put in the graveyard
|
||||
lblYouHaveWonTheCoinToss=%s,你赢得了这次掷硬币。
|
||||
lblYouLostTheLastGame=%s,最后一场比赛你输了。
|
||||
lblWouldYouLiketoPlayorDraw=你想先手还是后手?
|
||||
lblWhoWouldYouLiketoStartthisGame=你想谁先开始游戏?(单击头像)
|
||||
lblPlay=先手
|
||||
lblDraw=后手
|
||||
lblTooFewCardsMainDeck=主牌中牌张数过少(最少为%s),请重新修改套牌。
|
||||
lblTooManyCardsSideboard=备牌中牌张数过多(最多为%s),请重新修改套牌。
|
||||
lblAssignCombatDamageWerentBlocked=是否要像没有被阻挡一样分配战斗伤害?
|
||||
lblChosenCards=选择牌
|
||||
lblAttacker=攻击者
|
||||
lblTriggeredby=触发者
|
||||
lblChooseWhichCardstoReveal=选择要展示的牌
|
||||
lblChooseCardsActivateOpeningHandandOrder=选择要展示的手牌和顺序
|
||||
lblActivateFirst=先触发
|
||||
lblChooseOptionalCosts=选择可选费用
|
||||
lblOptionalCosts=可选费用
|
||||
lblDoYouWanttoScry=你想占卜吗?
|
||||
lblChooseCardstoSpliceonto=选择要通联的牌。
|
||||
lblDoNextActioninSequence=按顺序执行下一步操作
|
||||
lblPleaseDefineanActionSequenceFirst=请先定义一个动作序列。
|
||||
lblRememberActionSequence=记住动作序列
|
||||
lblYouMustHavePrioritytoUseThisFeature=你必须有使用此功能的优先权。
|
||||
lblNameTheCard=命名牌
|
||||
lblWhichPlayerShouldRoll=那个玩家掷骰子?
|
||||
lblChooseResult=选择结果
|
||||
lblChosenCardNotPermanentorCantExistIndependentlyontheBattleground=选择的牌不是永久物,也不能在战场单独存在。\n如果你想释放费永久物咒语或者你想释放永久物咒语并将之放于堆叠上,请按"Cast Spell/Play Land"按钮。
|
||||
lblError=错误
|
||||
lblWinGame=赢得这局游戏
|
||||
lblSetLifetoWhat=设定生命值为多少?
|
||||
lblSetLifeforWhichPlayer=设定哪个牌手的生命值?
|
||||
lblChoosePermanentstoTap=选择要横置的永久物
|
||||
lblChoosePermanentstoUntap=选择要重置的永久物
|
||||
lblWhichTypeofCounter=那种指示物?
|
||||
lblHowManyCounters=多少指示物?
|
||||
lblRemoveCountersFromWhichCard=从哪张牌移除指示物?
|
||||
lblAddCountersToWhichCard=添加指示物到哪张牌?
|
||||
lblChooseaCard=选择一张牌
|
||||
lblNoPlayerPriorityDeckCantBeTutoredFrom=目前没有玩家拥有优先权,因此无法从其套牌导师。
|
||||
lblNoPlayerPriorityGameStateCannotBeSetup=目前没有玩家拥有优先权,因此无法设置游戏状态。
|
||||
lblErrorLoadingBattleSetupFile=加载战场设置文件出错!
|
||||
lblSelectCardstoAddtoYourDeck=选择要添加到套牌的牌张。
|
||||
lblAddTheseToMyDeck=添加这些到我的套牌
|
||||
lblChooseaPile=选择一堆
|
||||
lblSelectOrderForSimultaneousAbilities=选择同时触发的异能的结算顺序
|
||||
lblReorderSimultaneousAbilities=重新对同时触发异能的结算顺序进行排序
|
||||
lblResolveFirst=先结算
|
||||
lblMoveCardstoToporBbottomofLibrary=将牌张移动到牌库顶或底
|
||||
lblSelectCardsToBeOutOnTheBottomOfYourLibrary=选择要放到牌库底的牌张
|
||||
lblCardsToPutOnTheBottom=放到底部的牌张
|
||||
lblArrangeCardsToBePutOnTopOfYourLibrary=为放于牌库顶的牌张排序
|
||||
lblTopOfLibrary=牌库顶
|
||||
lblSelectCardsToBePutIntoTheGraveyard=选择要放于坟场的牌张
|
||||
lblCardsToPutInTheGraveyard=放于坟场的牌张
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 161 KiB After Width: | Height: | Size: 190 KiB |
@@ -309,7 +309,17 @@ public enum FSkinProp {
|
||||
IMG_ABILITY_SHROUD (new int[] {330, 330, 80, 80}, PropType.ABILITY),
|
||||
IMG_ABILITY_TRAMPLE (new int[] {412, 330, 80, 80}, PropType.ABILITY),
|
||||
IMG_ABILITY_VIGILANCE (new int[] {2, 412, 80, 80}, PropType.ABILITY),
|
||||
|
||||
//Hexproof From
|
||||
IMG_ABILITY_HEXPROOF_R (new int[] {2, 494, 80, 80}, PropType.ABILITY),
|
||||
IMG_ABILITY_HEXPROOF_G (new int[] {412, 412, 80, 80}, PropType.ABILITY),
|
||||
IMG_ABILITY_HEXPROOF_B (new int[] {248, 412, 80, 80}, PropType.ABILITY),
|
||||
IMG_ABILITY_HEXPROOF_U (new int[] {84, 494, 80, 80}, PropType.ABILITY),
|
||||
IMG_ABILITY_HEXPROOF_W (new int[] {248, 494, 80, 80}, PropType.ABILITY),
|
||||
IMG_ABILITY_HEXPROOF_C (new int[] {330, 412, 80, 80}, PropType.ABILITY),
|
||||
IMG_ABILITY_HEXPROOF_UB (new int[] {166, 494, 80, 80}, PropType.ABILITY),
|
||||
//token icon
|
||||
IMG_ABILITY_TOKEN (new int[] {330, 494, 80, 80}, PropType.ABILITY),
|
||||
//Protection From
|
||||
IMG_ABILITY_PROTECT_ALL (new int[] {248, 84, 80, 80}, PropType.ABILITY),
|
||||
IMG_ABILITY_PROTECT_B (new int[] {330, 84, 80, 80}, PropType.ABILITY),
|
||||
IMG_ABILITY_PROTECT_BU (new int[] {412, 84, 80, 80}, PropType.ABILITY),
|
||||
|
||||
@@ -357,6 +357,12 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
|
||||
return processCards(cards, cardsRefreshDetails);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void visit(final GameEventTokenStateUpdate event) {
|
||||
processCards(event.cards, cardsRefreshDetails);
|
||||
return processCards(event.cards, cardsUpdate);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void visit(final GameEventShuffle event) {
|
||||
//pfps the change to the library has already been performed by a setCards call
|
||||
|
||||
@@ -78,6 +78,7 @@ public class ForgePreferences extends PreferencesStore<ForgePreferences.FPref> {
|
||||
UI_OVERLAY_CARD_POWER ("true"),
|
||||
UI_OVERLAY_CARD_MANA_COST ("true"),
|
||||
UI_OVERLAY_CARD_ID ("true"),
|
||||
UI_OVERLAY_ABILITY_ICONS("true"),
|
||||
UI_ENABLE_ONLINE_IMAGE_FETCHER ("false"),
|
||||
UI_IMAGE_CACHE_MAXIMUM("400"),
|
||||
UI_OVERLAY_FOIL_EFFECT ("true"),
|
||||
|
||||
Reference in New Issue
Block a user