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

This commit is contained in:
Ryan1729
2019-09-27 17:17:26 -06:00
42 changed files with 592 additions and 215 deletions

View File

@@ -3653,6 +3653,8 @@ public class Card extends GameEntity implements Comparable<Card> {
if (updateView) { if (updateView) {
updateKeywords(); 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); KeywordsChange change = changedCardKeywords.remove(timestamp);
if (change != null && updateView) { if (change != null && updateView) {
updateKeywords(); updateKeywords();
if (isToken())
game.fireEvent(new GameEventTokenStateUpdate(this));
} }
return change; return change;
} }
@@ -5409,6 +5413,59 @@ public class Card extends GameEntity implements Comparable<Card> {
} }
return protectKey; 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() { public Zone getZone() {
return currentZone; return currentZone;
} }

View File

@@ -1017,7 +1017,9 @@ public class CardView extends GameEntityView {
foilIndexOverride = index0; foilIndexOverride = index0;
} }
public String getKeywordKey() { return get(TrackableProperty.KeywordKey); }
public String getProtectionKey() { return get(TrackableProperty.ProtectionKey); } public String getProtectionKey() { return get(TrackableProperty.ProtectionKey); }
public String getHexproofKey() { return get(TrackableProperty.HexproofKey); }
public boolean hasDeathtouch() { return get(TrackableProperty.HasDeathtouch); } public boolean hasDeathtouch() { return get(TrackableProperty.HasDeathtouch); }
public boolean hasDefender() { return get(TrackableProperty.HasDefender); } public boolean hasDefender() { return get(TrackableProperty.HasDefender); }
public boolean hasDoubleStrike() { return get(TrackableProperty.HasDoubleStrike); } 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 hasMenace() { return get(TrackableProperty.HasMenace); }
public boolean hasReach() { return get(TrackableProperty.HasReach); } public boolean hasReach() { return get(TrackableProperty.HasReach); }
public boolean hasShroud() { return get(TrackableProperty.HasShroud); } public boolean hasShroud() { return get(TrackableProperty.HasShroud); }
public boolean hasTrample() { public boolean hasTrample() { return get(TrackableProperty.HasTrample); }
return get(TrackableProperty.HasTrample); public boolean hasVigilance() { return get(TrackableProperty.HasVigilance); }
}
public boolean hasVigilance() {
return get(TrackableProperty.HasVigilance);
}
public boolean hasHaste() { public boolean hasHaste() {
return get(TrackableProperty.HasHaste); return get(TrackableProperty.HasHaste);
@@ -1077,6 +1075,10 @@ public class CardView extends GameEntityView {
updateAbilityText(c, state); updateAbilityText(c, state);
//set protectionKey for Icons //set protectionKey for Icons
set(TrackableProperty.ProtectionKey, c.getProtectionKey()); set(TrackableProperty.ProtectionKey, c.getProtectionKey());
//set hexproofKeys for Icons
set(TrackableProperty.HexproofKey, c.getHexproofKey());
//keywordkey
set(TrackableProperty.KeywordKey, c.getKeywordKey());
} }
public boolean isBasicLand() { public boolean isBasicLand() {

View File

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

View File

@@ -37,6 +37,7 @@ public interface IGameEventVisitor<T> {
T visit(GameEventPlayerPoisoned event); T visit(GameEventPlayerPoisoned event);
T visit(GameEventPlayerPriority event); T visit(GameEventPlayerPriority event);
T visit(GameEventPlayerStatsChanged event); T visit(GameEventPlayerStatsChanged event);
T visit(GameEventTokenStateUpdate event);
T visit(GameEventScry event); T visit(GameEventScry event);
T visit(GameEventShuffle event); T visit(GameEventShuffle event);
T visit(GameEventSpellAbilityCast gameEventSpellAbilityCast); T visit(GameEventSpellAbilityCast gameEventSpellAbilityCast);
@@ -83,6 +84,7 @@ public interface IGameEventVisitor<T> {
public T visit(GameEventPlayerPoisoned event) { return null; } public T visit(GameEventPlayerPoisoned event) { return null; }
public T visit(GameEventPlayerPriority event) { return null; } public T visit(GameEventPlayerPriority event) { return null; }
public T visit(GameEventPlayerStatsChanged 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(GameEventScry event) { return null; }
public T visit(GameEventShuffle event) { return null; } public T visit(GameEventShuffle event) { return null; }
public T visit(GameEventSpellResolved event) { return null; } public T visit(GameEventSpellResolved event) { return null; }

View File

@@ -189,6 +189,8 @@ public class PhaseHandler implements java.io.Serializable {
final List<Card> lands = CardLists.filter(playerTurn.getLandsInPlay(), Presets.UNTAPPED); final List<Card> lands = CardLists.filter(playerTurn.getLandsInPlay(), Presets.UNTAPPED);
playerTurn.setNumPowerSurgeLands(lands.size()); playerTurn.setNumPowerSurgeLands(lands.size());
} }
//update tokens
game.fireEvent(new GameEventTokenStateUpdate(playerTurn.getTokensInPlay()));
game.fireEvent(new GameEventTurnPhase(playerTurn, phase, phaseType)); game.fireEvent(new GameEventTurnPhase(playerTurn, phase, phaseType));
} }

View File

@@ -2348,6 +2348,13 @@ public class Player extends GameEntity implements Comparable<Player> {
return CardLists.filter(getCardsIn(ZoneType.Battlefield), Presets.CREATURES); 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. * use to get a list of all lands a given player has on the battlefield.
*/ */

View File

@@ -82,6 +82,7 @@ public enum TrackableProperty {
ChangedColorWords(TrackableTypes.StringMapType), ChangedColorWords(TrackableTypes.StringMapType),
ChangedTypes(TrackableTypes.StringMapType), ChangedTypes(TrackableTypes.StringMapType),
KeywordKey(TrackableTypes.StringType),
HasDeathtouch(TrackableTypes.BooleanType), HasDeathtouch(TrackableTypes.BooleanType),
HasDefender(TrackableTypes.BooleanType), HasDefender(TrackableTypes.BooleanType),
HasDoubleStrike(TrackableTypes.BooleanType), HasDoubleStrike(TrackableTypes.BooleanType),
@@ -99,7 +100,8 @@ public enum TrackableProperty {
HasVigilance(TrackableTypes.BooleanType), HasVigilance(TrackableTypes.BooleanType),
//protectionkey //protectionkey
ProtectionKey(TrackableTypes.StringType), ProtectionKey(TrackableTypes.StringType),
//hexproofkey
HexproofKey(TrackableTypes.StringType),
HasHaste(TrackableTypes.BooleanType), HasHaste(TrackableTypes.BooleanType),
HasInfect(TrackableTypes.BooleanType), HasInfect(TrackableTypes.BooleanType),
HasStorm(TrackableTypes.BooleanType), HasStorm(TrackableTypes.BooleanType),

View File

@@ -30,6 +30,7 @@ public final class CardOverlaysMenu {
menu.add(getMenuItem_CardOverlay("Mana Cost", FPref.UI_OVERLAY_CARD_MANA_COST)); 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("Power/Toughness", FPref.UI_OVERLAY_CARD_POWER));
menu.add(getMenuItem_CardOverlay("Card Id", FPref.UI_OVERLAY_CARD_ID)); menu.add(getMenuItem_CardOverlay("Card Id", FPref.UI_OVERLAY_CARD_ID));
menu.add(getMenuItem_CardOverlay("Ability Icon", FPref.UI_OVERLAY_ABILITY_ICONS));
return menu; return menu;
} }

View File

@@ -135,7 +135,17 @@ public class CardFaceSymbols {
MANA_IMAGES.put("shroud", FSkin.getImage(FSkinProp.IMG_ABILITY_SHROUD)); MANA_IMAGES.put("shroud", FSkin.getImage(FSkinProp.IMG_ABILITY_SHROUD));
MANA_IMAGES.put("trample", FSkin.getImage(FSkinProp.IMG_ABILITY_TRAMPLE)); MANA_IMAGES.put("trample", FSkin.getImage(FSkinProp.IMG_ABILITY_TRAMPLE));
MANA_IMAGES.put("vigilance", FSkin.getImage(FSkinProp.IMG_ABILITY_VIGILANCE)); 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("protectAll", FSkin.getImage(FSkinProp.IMG_ABILITY_PROTECT_ALL));
MANA_IMAGES.put("protectB", FSkin.getImage(FSkinProp.IMG_ABILITY_PROTECT_B)); MANA_IMAGES.put("protectB", FSkin.getImage(FSkinProp.IMG_ABILITY_PROTECT_B));
MANA_IMAGES.put("protectBU", FSkin.getImage(FSkinProp.IMG_ABILITY_PROTECT_BU)); MANA_IMAGES.put("protectBU", FSkin.getImage(FSkinProp.IMG_ABILITY_PROTECT_BU));

View File

@@ -50,6 +50,7 @@ import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.Arrays;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@@ -511,7 +512,7 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
int abiX = cardXOffset + (cardWidth / 2) + (cardWidth / 3); int abiX = cardXOffset + (cardWidth / 2) + (cardWidth / 3);
int abiSpace = (cardWidth / 7); int abiSpace = (cardWidth / 7);
int abiY = cardWidth < 200 ? cardYOffset + 25 : cardYOffset + 50; 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()) { if (card.getCurrentState().hasFlying()) {
CardFaceSymbols.drawAbilitySymbol("flying", g, abiX, abiY, abiScale, abiScale); CardFaceSymbols.drawAbilitySymbol("flying", g, abiX, abiY, abiScale, abiScale);
abiY += abiSpace; abiY += abiSpace;
@@ -545,10 +546,43 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
abiY += abiSpace; abiY += abiSpace;
} }
if (card.getCurrentState().hasHexproof()) { if (card.getCurrentState().hasHexproof()) {
CardFaceSymbols.drawAbilitySymbol("hexproof", g, abiX, abiY, abiScale, abiScale); if (!card.getCurrentState().getHexproofKey().isEmpty()){
abiY += abiSpace; 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); CardFaceSymbols.drawAbilitySymbol("shroud", g, abiX, abiY, abiScale, abiScale);
abiY += abiSpace; abiY += abiSpace;
} }
@@ -963,6 +997,10 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
return isShowingOverlays() && isPreferenceEnabled(FPref.UI_OVERLAY_CARD_ID); return isShowingOverlays() && isPreferenceEnabled(FPref.UI_OVERLAY_CARD_ID);
} }
private boolean showAbilityIcons() {
return isShowingOverlays() && isPreferenceEnabled(FPref.UI_OVERLAY_ABILITY_ICONS);
}
public void repaintOverlays() { public void repaintOverlays() {
repaint(); repaint();
doLayout(); doLayout();

View File

@@ -25,7 +25,11 @@ import forge.screens.home.NewGameMenu;
import forge.screens.match.MatchController; import forge.screens.match.MatchController;
import forge.sound.MusicPlaylist; import forge.sound.MusicPlaylist;
import forge.sound.SoundSystem; 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.Callback;
import forge.util.FileUtil; import forge.util.FileUtil;
import forge.util.Localizer; import forge.util.Localizer;

View File

@@ -37,7 +37,13 @@ import forge.sound.IAudioClip;
import forge.sound.IAudioMusic; import forge.sound.IAudioMusic;
import forge.toolbox.FOptionPane; import forge.toolbox.FOptionPane;
import forge.toolbox.GuiChoose; 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 { public class GuiMobile implements IGuiBase {
private final String assetsDir; private final String assetsDir;

View File

@@ -265,9 +265,19 @@ public enum FSkinImage implements FImage {
IMG_ABILITY_LIFELINK (FSkinProp.IMG_ABILITY_LIFELINK, SourceFile.ABILITIES), IMG_ABILITY_LIFELINK (FSkinProp.IMG_ABILITY_LIFELINK, SourceFile.ABILITIES),
IMG_ABILITY_MENACE (FSkinProp.IMG_ABILITY_MENACE, SourceFile.ABILITIES), IMG_ABILITY_MENACE (FSkinProp.IMG_ABILITY_MENACE, SourceFile.ABILITIES),
IMG_ABILITY_REACH (FSkinProp.IMG_ABILITY_REACH, 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_TRAMPLE (FSkinProp.IMG_ABILITY_TRAMPLE, SourceFile.ABILITIES),
IMG_ABILITY_VIGILANCE (FSkinProp.IMG_ABILITY_VIGILANCE, 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 //PROTECT ICONS
IMG_ABILITY_PROTECT_ALL (FSkinProp.IMG_ABILITY_PROTECT_ALL, SourceFile.ABILITIES), IMG_ABILITY_PROTECT_ALL (FSkinProp.IMG_ABILITY_PROTECT_ALL, SourceFile.ABILITIES),
IMG_ABILITY_PROTECT_B (FSkinProp.IMG_ABILITY_PROTECT_B, SourceFile.ABILITIES), IMG_ABILITY_PROTECT_B (FSkinProp.IMG_ABILITY_PROTECT_B, SourceFile.ABILITIES),

View File

@@ -118,7 +118,17 @@ public class CardFaceSymbols {
MANA_IMAGES.put("shroud", FSkinImage.IMG_ABILITY_SHROUD); MANA_IMAGES.put("shroud", FSkinImage.IMG_ABILITY_SHROUD);
MANA_IMAGES.put("trample", FSkinImage.IMG_ABILITY_TRAMPLE); MANA_IMAGES.put("trample", FSkinImage.IMG_ABILITY_TRAMPLE);
MANA_IMAGES.put("vigilance", FSkinImage.IMG_ABILITY_VIGILANCE); 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("protectAll", FSkinImage.IMG_ABILITY_PROTECT_ALL);
MANA_IMAGES.put("protectB", FSkinImage.IMG_ABILITY_PROTECT_B); MANA_IMAGES.put("protectB", FSkinImage.IMG_ABILITY_PROTECT_B);
MANA_IMAGES.put("protectBU", FSkinImage.IMG_ABILITY_PROTECT_BU); MANA_IMAGES.put("protectBU", FSkinImage.IMG_ABILITY_PROTECT_BU);

View File

@@ -5,13 +5,19 @@ import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Align;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import forge.Graphics; 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.CardDetailUtil.DetailColors;
import forge.card.CardRenderer.CardStackPosition; import forge.card.CardRenderer.CardStackPosition;
import forge.card.mana.ManaCost; import forge.card.mana.ManaCost;
import forge.game.GameView; import forge.game.GameView;
import forge.game.card.CardView;
import forge.game.card.CardView.CardStateView; import forge.game.card.CardView.CardStateView;
import forge.game.card.CardView;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.model.FModel; import forge.model.FModel;
import forge.properties.ForgeConstants; import forge.properties.ForgeConstants;

View File

@@ -19,7 +19,13 @@ import forge.CachedCardImage;
import forge.FThreads; import forge.FThreads;
import forge.Graphics; import forge.Graphics;
import forge.StaticData; 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.CardDetailUtil.DetailColors;
import forge.card.CardZoom.ActivateHandler; import forge.card.CardZoom.ActivateHandler;
import forge.card.mana.ManaCost; import forge.card.mana.ManaCost;
@@ -42,6 +48,7 @@ import forge.toolbox.FList;
import forge.util.Utils; import forge.util.Utils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import forge.util.TextBounds; import forge.util.TextBounds;
import java.util.Arrays;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@@ -551,7 +558,11 @@ public class CardRenderer {
float abiSpace = cw / 5.7f; float abiSpace = cw / 5.7f;
float abiCount = 0; 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()) { if (card.getCurrentState().hasFlying()) {
CardFaceSymbols.drawSymbol("flying", g, abiX, abiY, abiScale, abiScale); CardFaceSymbols.drawSymbol("flying", g, abiX, abiY, abiScale, abiScale);
if (unselectable){ if (unselectable){
@@ -609,11 +620,65 @@ public class CardRenderer {
abiCount += 1; abiCount += 1;
} }
if (card.getCurrentState().hasHexproof()) { if (card.getCurrentState().hasHexproof()) {
CardFaceSymbols.drawSymbol("hexproof", g, abiX, abiY, abiScale, abiScale); if (!card.getCurrentState().getHexproofKey().isEmpty()){
if (unselectable){ String[] splitK = card.getCurrentState().getHexproofKey().split(":");
g.setAlphaComposite(0.6f); g.fillRect(Color.BLACK, abiX, abiY, abiScale, abiScale ); g.setAlphaComposite(oldAlpha);} List<String> listHK = Arrays.asList(splitK);
abiY += abiSpace; if (listHK.contains("generic")) {
abiCount += 1; 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()) { else if (card.getCurrentState().hasShroud()) {
CardFaceSymbols.drawSymbol("shroud", g, abiX, abiY, abiScale, abiScale); CardFaceSymbols.drawSymbol("shroud", g, abiX, abiY, abiScale, abiScale);
@@ -1003,6 +1068,10 @@ public class CardRenderer {
isPreferenceEnabled(FPref.UI_OVERLAY_CARD_MANA_COST); 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) { private static boolean showCardIdOverlay(CardView card) {
return card.getId() > 0 && isShowingOverlays(card) && isPreferenceEnabled(FPref.UI_OVERLAY_CARD_ID); return card.getId() > 0 && isShowingOverlays(card) && isPreferenceEnabled(FPref.UI_OVERLAY_CARD_ID);
} }

View File

@@ -10,8 +10,15 @@ import com.google.common.collect.ImmutableList;
import forge.Forge; import forge.Forge;
import forge.Forge.KeyInputAdapter; import forge.Forge.KeyInputAdapter;
import forge.Graphics; import forge.Graphics;
import forge.assets.*; import forge.assets.FImage;
import forge.card.*; 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.deck.io.DeckPreferences;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.itemmanager.CardManager; import forge.itemmanager.CardManager;
@@ -30,9 +37,13 @@ import forge.planarconquest.ConquestUtil;
import forge.properties.ForgePreferences.FPref; import forge.properties.ForgePreferences.FPref;
import forge.screens.FScreen; import forge.screens.FScreen;
import forge.screens.TabPageScreen; import forge.screens.TabPageScreen;
import forge.toolbox.*; import forge.toolbox.FContainer;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler; import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FEvent.FEventType; import forge.toolbox.FEvent.FEventType;
import forge.toolbox.FLabel;
import forge.toolbox.FOptionPane;
import forge.toolbox.GuiChoose;
import forge.util.Callback; import forge.util.Callback;
import forge.util.ItemPool; import forge.util.ItemPool;
import forge.util.Lang; import forge.util.Lang;
@@ -41,7 +52,11 @@ import forge.util.Utils;
import forge.util.storage.IStorage; import forge.util.storage.IStorage;
import org.apache.commons.lang3.StringUtils; 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; import java.util.Map.Entry;
public class FDeckEditor extends TabPageScreen<FDeckEditor> { public class FDeckEditor extends TabPageScreen<FDeckEditor> {

View File

@@ -55,7 +55,14 @@ import forge.util.ItemPool;
import forge.util.LayoutHelper; import forge.util.LayoutHelper;
import forge.util.Localizer; 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; import java.util.Map.Entry;

View File

@@ -22,7 +22,11 @@ import forge.util.Callback;
import forge.util.TextUtil; import forge.util.TextUtil;
import forge.util.Utils; 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; import com.badlogic.gdx.utils.Align;

View File

@@ -11,7 +11,11 @@ import forge.assets.ImageCache;
import forge.card.CardRenderer; import forge.card.CardRenderer;
import forge.card.CardRenderer.CardStackPosition; import forge.card.CardRenderer.CardStackPosition;
import forge.card.CardZoom; 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.InventoryItem;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.itemmanager.ColumnDef; import forge.itemmanager.ColumnDef;
@@ -33,8 +37,11 @@ import forge.toolbox.FScrollPane;
import forge.util.Localizer; import forge.util.Localizer;
import forge.util.Utils; 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.Map.Entry;
import java.util.TreeMap;
import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.Texture;

View File

@@ -35,7 +35,10 @@ import forge.toolbox.FList;
import com.badlogic.gdx.math.Rectangle; 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; import java.util.Map.Entry;

View File

@@ -1,9 +1,17 @@
package forge.screens.constructed; 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 forge.util.Localizer;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;

View File

@@ -4,7 +4,11 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set; 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 org.apache.commons.lang3.StringUtils;
import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Align;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;

View File

@@ -1,8 +1,11 @@
package forge.screens.match; 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.Map.Entry;
import java.util.Set;
import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Color;

View File

@@ -110,6 +110,9 @@ public class VField extends FContainer {
if (!c.hasCardAttachments() && if (!c.hasCardAttachments() &&
cardName.equals(c.getCurrentState().getName()) && cardName.equals(c.getCurrentState().getName()) &&
card.hasSameCounters(c) && 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 card.isToken() == c.isToken()) { //don't stack tokens on top of non-tokens
CardAreaPanel cPanel = CardAreaPanel.get(c); CardAreaPanel cPanel = CardAreaPanel.get(c);
while (cPanel.getNextPanelInStack() != null) { while (cPanel.getNextPanelInStack() != null) {

View File

@@ -15,8 +15,14 @@ import forge.interfaces.IWinLoseView;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.menu.FMagnifyView; import forge.menu.FMagnifyView;
import forge.model.FModel; 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.FEvent.FEventHandler;
import forge.toolbox.FLabel;
import forge.toolbox.FOverlay;
import forge.toolbox.FTextArea;
import forge.util.TextUtil; import forge.util.TextUtil;
import forge.util.Utils; import forge.util.Utils;
import forge.util.gui.SGuiChoose; import forge.util.gui.SGuiChoose;

View File

@@ -2,7 +2,18 @@ package forge.screens.planarconquest;
import java.util.List; 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 org.apache.commons.lang3.StringUtils;
import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Color;

View File

@@ -18,8 +18,13 @@ import forge.itemmanager.filters.HistoricFormatSelect;
import forge.model.CardCollections; import forge.model.CardCollections;
import forge.model.FModel; import forge.model.FModel;
import forge.properties.ForgeConstants; 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.StartingPoolPreferences.PoolType;
import forge.quest.StartingPoolType;
import forge.quest.data.DeckConstructionRules; import forge.quest.data.DeckConstructionRules;
import forge.quest.data.GameFormatQuest; import forge.quest.data.GameFormatQuest;
import forge.quest.data.QuestPreferences.QPref; import forge.quest.data.QuestPreferences.QPref;
@@ -27,9 +32,17 @@ import forge.screens.FScreen;
import forge.screens.LoadingOverlay; import forge.screens.LoadingOverlay;
import forge.screens.home.NewGameMenu; import forge.screens.home.NewGameMenu;
import forge.screens.quest.QuestMenu.LaunchReason; 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.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.FRadioButton.RadioButtonGroup;
import forge.toolbox.FScrollPane;
import forge.util.FileUtil; import forge.util.FileUtil;
import forge.util.ThreadUtil; import forge.util.ThreadUtil;
import forge.util.Utils; import forge.util.Utils;
@@ -38,8 +51,13 @@ import forge.util.storage.IStorage;
import org.apache.commons.lang3.text.WordUtils; 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.Map.Entry;
import java.util.Set;
public class NewQuestScreen extends FScreen { public class NewQuestScreen extends FScreen {

View File

@@ -3,8 +3,12 @@ package forge.screens.quest;
import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Align;
import forge.Graphics; import forge.Graphics;
import forge.assets.*; import forge.assets.FImage;
import forge.assets.FSkinColor;
import forge.assets.FSkinColor.Colors; import forge.assets.FSkinColor.Colors;
import forge.assets.FSkinFont;
import forge.assets.FSkinImage;
import forge.assets.ImageCache;
import forge.quest.IQuestEvent; import forge.quest.IQuestEvent;
import forge.screens.settings.SettingsScreen; import forge.screens.settings.SettingsScreen;
import forge.toolbox.FDisplayObject; import forge.toolbox.FDisplayObject;

View File

@@ -1,7 +1,14 @@
package forge.screens.settings; 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 forge.util.Localizer;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Align;

View File

@@ -331,6 +331,10 @@ public class SettingsPage extends TabPage<SettingsScreen> {
localizer.getMessage("lblShowCardIDOverlays"), localizer.getMessage("lblShowCardIDOverlays"),
localizer.getMessage("nlShowCardIDOverlays")), localizer.getMessage("nlShowCardIDOverlays")),
5); 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 //Vibration Options
lstSettings.addItem(new BooleanSetting(FPref.UI_VIBRATE_ON_LIFE_LOSS, lstSettings.addItem(new BooleanSetting(FPref.UI_VIBRATE_ON_LIFE_LOSS,

View File

@@ -10,7 +10,8 @@ import forge.Graphics;
import forge.interfaces.IComboBox; import forge.interfaces.IComboBox;
import forge.menu.FDropDownMenu; import forge.menu.FDropDownMenu;
import forge.menu.FMenuItem; 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> { public class FComboBox<T> extends FTextField implements IComboBox<T> {
private final List<T> items = new ArrayList<>(); private final List<T> items = new ArrayList<>();

View File

@@ -9,7 +9,12 @@ import forge.util.Callback;
import forge.util.Localizer; import forge.util.Localizer;
import org.apache.commons.lang3.StringUtils; 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 { public class GuiChoose {

View File

@@ -12,5 +12,5 @@ ALTERNATE
Name:Granted Name:Granted
ManaCost:3 U ManaCost:3 U
Types:Sorcery Adventure 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. Oracle:You may choose a noncreature card you own from outside the game, reveal it, and put it into your hand.

View File

@@ -9,6 +9,6 @@ ALTERNATE
Name:Shield's Might Name:Shield's Might
ManaCost:1 G 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.) 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.) Oracle:Target creature gets +2/+2 until end of turn. (Then exile this card. You may cast the creature later from exile.)

View File

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

View File

@@ -1080,61 +1080,61 @@ lblSearch=Suche
lblPriority=Priorität lblPriority=Priorität
lblTurn=Zug lblTurn=Zug
lblPhase=Phase lblPhase=Phase
lblEmpty=Empty lblEmpty=Leer
lbltoResolve=to Resolve. lbltoResolve=zur Abwicklung.
lblStormCount=Storm Count lblStormCount=Sturmzähler
#PlayerControllerHuman.java #PlayerControllerHuman.java
lblYouHaveWonTheCoinToss=%s, you have won the coin toss. lblYouHaveWonTheCoinToss=%s, du hast den Münzwurf gewonnen.
lblYouLostTheLastGame=%s, you lost the last game. lblYouLostTheLastGame=%s, du hast das letzte Spiel verloren.
lblWouldYouLiketoPlayorDraw=Would you like to play or draw? lblWouldYouLiketoPlayorDraw=Willst du lieber zuerst spielen oder ziehen.
lblWhoWouldYouLiketoStartthisGame=Who would you like to start this game? (Click on the portrait.) lblWhoWouldYouLiketoStartthisGame=Wer soll das Spiel beginnen? (Klicke auf das Portrait.)
lblPlay=Play lblPlay=Spielen
lblDraw=Draw lblDraw=Ziehen
lblTooFewCardsMainDeck=Too few cards in your main deck (minimum %s), please make modifications to your deck again. lblTooFewCardsMainDeck=Zu wenig Karten in deinem Deck (mindestens %s). Bitte passe dein Deck an.
lblTooManyCardsSideboard=Too many cards in your sideboard (maximum %s), please make modifications to your deck again. lblTooManyCardsSideboard=Zu viele Karten in deinem Deck (maximal %s). Bitte passe dein Deck an.
lblAssignCombatDamageWerentBlocked=Do you want to assign its combat damage as though it weren't blocked? lblAssignCombatDamageWerentBlocked=Möchtest du den Kampfschaden deklarieren, als wäre nicht geblockt worden?
lblChosenCards=Chosen Cards lblChosenCards=Wähle Karten
lblAttacker=Attacker lblAttacker=Angreifer
lblTriggeredby=Triggered by lblTriggeredby=Ausgelöst durch
lblChooseWhichCardstoReveal=Choose Which Cards to Reveal lblChooseWhichCardstoReveal=Wähle die vorzuzeigenden Karten
lblChooseCardsActivateOpeningHandandOrder=Choose cards to activate from opening hand and their order lblChooseCardsActivateOpeningHandandOrder=Wähle die aus der Starthand zu aktivierenden Karten und ihre Reihenfolge
lblActivateFirst=Activate first lblActivateFirst=Aktiviere zuerst
lblChooseOptionalCosts=Choose optional Costs lblChooseOptionalCosts=Wähle optionale Kosten
lblOptionalCosts=Optional Costs lblOptionalCosts=Optionale Kosten
lblDoYouWanttoScry=Do you want to scry? lblDoYouWanttoScry=Hellsicht anwenden?
lblChooseCardstoSpliceonto=Choose cards to Splice onto lblChooseCardstoSpliceonto=Wähle Karte, an welche gekoppelt werden soll
lblDoNextActioninSequence=Do Next Action in Sequence lblDoNextActioninSequence=Nächste Aktion ausführen
lblPleaseDefineanActionSequenceFirst=Please define an action sequence first. lblPleaseDefineanActionSequenceFirst=Bitte lege erst die Aktionsreigefolge fest.
lblRememberActionSequence=Remember Action Sequence lblRememberActionSequence=Merke Aktionsreihenfolge
lblYouMustHavePrioritytoUseThisFeature=You must have priority to use this feature. lblYouMustHavePrioritytoUseThisFeature=Um diese Funktion zu nutzen brauchst du die Priorität.
lblNameTheCard=Name the card lblNameTheCard=Nenne die Karte
lblWhichPlayerShouldRoll=Which player should roll? lblWhichPlayerShouldRoll=Welcher Spieler soll würfeln?
lblChooseResult=Choose result lblChooseResult=Wähle Ergebnis
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. 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=Error lblError=Fehler
lblWinGame=Win Game lblWinGame=Gewinne Spiel
lblSetLifetoWhat=Set life to what? lblSetLifetoWhat=Setze Lebenspunkte auf?
lblSetLifeforWhichPlayer=Set life for which player lblSetLifeforWhichPlayer=Setze Lebenspunkte für Spieler
lblChoosePermanentstoTap=Choose permanents to tap lblChoosePermanentstoTap=Wähle Karte zum Tappen
lblChoosePermanentstoUntap=Choose permanents to untap lblChoosePermanentstoUntap=Wähle Karte zum Enttappen
lblWhichTypeofCounter=Which type of counter? lblWhichTypeofCounter=Welche Art von Marken?
lblHowManyCounters=How many counters? lblHowManyCounters=Wie viele Marken?
lblRemoveCountersFromWhichCard=Remove counters from which card? lblRemoveCountersFromWhichCard=Entferne Marken von welcher Karte?
lblAddCountersToWhichCard=Add counters to which card? lblAddCountersToWhichCard=Lege Marken auf welche Karte?
lblChooseaCard=Choose a card lblChooseaCard=Wähle eine Karte
lblNoPlayerPriorityDeckCantBeTutoredFrom=No player has priority at the moment, so their deck can't be tutored from. lblNoPlayerPriorityDeckCantBeTutoredFrom=Kein Spieler hat Priorität im Moment, daher kein Zugriff auf entsprechendes Deck.
lblNoPlayerPriorityGameStateCannotBeSetup=No player has priority at the moment, so game state cannot be setup. lblNoPlayerPriorityGameStateCannotBeSetup=Kein Spieler hat Priorität im Moment, daher der Spielstand nicht gesetzt werden.
lblErrorLoadingBattleSetupFile=Error loading battle setup file! lblErrorLoadingBattleSetupFile=Fehler beim Laden der Spielvorgaben!
lblSelectCardstoAddtoYourDeck=Select cards to add to your deck lblSelectCardstoAddtoYourDeck=Wähle Karten, um sie deinem Deck hinzuzufügen.
lblAddTheseToMyDeck=Add these to my deck lblAddTheseToMyDeck=Zu meinem Deck hinzufügen
lblChooseaPile=Choose a pile lblChooseaPile=Wähle einen Stapel
lblSelectOrderForSimultaneousAbilities=Select order for simultaneous abilities lblSelectOrderForSimultaneousAbilities=Wähle Reihenfolge für simultane Fähigkeiten
lblReorderSimultaneousAbilities=Reorder simultaneous abilities lblReorderSimultaneousAbilities=Ordne Reihenfolge für simultane Fähigkeiten neu
lblResolveFirst=Resolve first lblResolveFirst=Zuerst abwickeln
lblMoveCardstoToporBbottomofLibrary=Move cards to top or bottom of library lblMoveCardstoToporBbottomofLibrary=Bewege Karte an Anfang oder Ende der Bibliothek
lblSelectCardsToBeOutOnTheBottomOfYourLibrary=Select cards to be put on the bottom of your library lblSelectCardsToBeOutOnTheBottomOfYourLibrary=Wähle Karte, welche unter die Bibliothek gelegt werden soll
lblCardsToPutOnTheBottom=Cards to put on the bottom lblCardsToPutOnTheBottom=Karten, welche unter die Bibliothek gelegt werden sollen
lblArrangeCardsToBePutOnTopOfYourLibrary=Arrange cards to be put on top of your library lblArrangeCardsToBePutOnTopOfYourLibrary=Ordne Karten, welche unter die Bibliothek gelegt werden sollen
lblTopOfLibrary=Top of Library lblTopOfLibrary=Oben auf Bibliothek
lblSelectCardsToBePutIntoTheGraveyard=Select cards to be put into the graveyard lblSelectCardsToBePutIntoTheGraveyard=Wähle Karten, welche auf den Friedhof gelegt werden sollen
lblCardsToPutInTheGraveyard=Cards to put in the graveyard lblCardsToPutInTheGraveyard=Karten, welche auf den Friedhof gelegt werden sollen

View File

@@ -58,15 +58,15 @@ cbSingletons=单张模式
cbRemoveArtifacts=删除神器 cbRemoveArtifacts=删除神器
cbAnte=赌博模式 cbAnte=赌博模式
cbAnteMatchRarity=赌注稀有度匹配 cbAnteMatchRarity=赌注稀有度匹配
cbEnableAICheats=允许AI作弊 cbEnableAICheats=允许人工智能作弊
cbManaBurn=法术力灼烧 cbManaBurn=法术力灼烧
cbManaLostPrompt=提示法术力池将要清空 cbManaLostPrompt=提示法术力池将要清空
cbDevMode=开发人员模式 cbDevMode=开发人员模式
cbLoadCardsLazily=惰性加载牌脚本 cbLoadCardsLazily=惰性加载牌脚本
cbLoadHistoricFormats=加载史记赛制 cbLoadHistoricFormats=加载史记赛制
cbWorkshopSyntax=作坊语法检查 cbWorkshopSyntax=作坊语法检查
cbEnforceDeckLegality=套牌一致性 cbEnforceDeckLegality=套牌一致性
cbSideboardForAI=玩家为AI换备 cbSideboardForAI=玩家为人工智能换备
cbPerformanceMode=性能模式 cbPerformanceMode=性能模式
cbFilteredHands=手牌过滤 cbFilteredHands=手牌过滤
cbImageFetcher=自动下载缺失的图片 cbImageFetcher=自动下载缺失的图片
@@ -101,7 +101,7 @@ cbUseSentry=自动提交错误报告
cbpGameLogEntryType=游戏日志详细程度 cbpGameLogEntryType=游戏日志详细程度
cbpCloseAction=关闭动作 cbpCloseAction=关闭动作
cbpDefaultFontSize=默认字体大小 cbpDefaultFontSize=默认字体大小
cbpAiProfiles=AI强度 cbpAiProfiles=人工智能强度
cbpDisplayCurrentCardColors=显示牌张颜色详情 cbpDisplayCurrentCardColors=显示牌张颜色详情
cbpAutoYieldMode=自动让过 cbpAutoYieldMode=自动让过
cbpCounterDisplayType=计数器显示类型 cbpCounterDisplayType=计数器显示类型
@@ -115,19 +115,19 @@ nlCompactMainMenu=启用节省空间的侧边栏,一次只显示一个菜单
nlUseSentry=启用后,会自动向开发人员提交错误报告。 nlUseSentry=启用后,会自动向开发人员提交错误报告。
GamePlay=游戏 GamePlay=游戏
nlpMulliganRule=选择调度规则 nlpMulliganRule=选择调度规则
nlpAiProfiles=选择你的AI对手 nlpAiProfiles=选择你的人工智能对手
nlAnte=确定游戏是否使用赌注 nlAnte=确定游戏是否使用赌注
nlAnteMatchRarity=尝试为所有玩家生成同稀有度赌注 nlAnteMatchRarity=尝试为所有玩家生成同稀有度赌注
nlEnableAICheats=允许AI进行作弊以获得优势(对于已经设置了作弊洗牌的AI)。 nlEnableAICheats=允许人工智能进行作弊以获得优势(对于已经设置了作弊洗牌的人工智能)。
nlManaBurn=使用法术力灼烧M10之前的规则 nlManaBurn=使用法术力灼烧M10之前的规则
nlManaLostPrompt=启用后,如果让过优先权会导致法术力池清空,你将收到一个警告提示。 nlManaLostPrompt=启用后,如果让过优先权会导致法术力池清空,你将收到一个警告提示。
nlEnforceDeckLegality=强制每个与环境相关的套牌合法性(最小单卡数,最大单卡数等)。 nlEnforceDeckLegality=强制每个与环境相关的套牌合法性(最小单卡数,最大单卡数等)。
nlSideboardForAI=允许用户在构筑赛制中为AI换备牌。 nlSideboardForAI=允许用户在构筑赛制中为人工智能换备牌。
nlPerformanceMode=禁止其他静态能力检查以加速游戏引擎(警告:对手手牌有闪现单卡能使用时可能会跳过)。 nlPerformanceMode=禁止其他静态能力检查以加速游戏引擎(警告:对手手牌有闪现单卡能使用时可能会跳过)。
nlFilteredHands=生成两个起手并发给你最接近套牌地比例的起手(需要重启) nlFilteredHands=生成两个起手并发给你最接近套牌地比例的起手(需要重启)
nlCloneImgSource=启用克隆的时候将使用原画而不是克隆牌的画 nlCloneImgSource=启用克隆的时候将使用原画而不是克隆牌的画
nlPromptFreeBlocks=启用后如果你需要支付0来阻挡则不会提示自动支付0。 nlPromptFreeBlocks=启用后如果你需要支付0来阻挡则不会提示自动支付0。
nlPauseWhileMinimized=启用后Forge将在暂停时最小化主要用于AI VS AI)。 nlPauseWhileMinimized=启用后Forge将在暂停时最小化主要用于人工智能 VS 人工智能)。
nlEscapeEndsTurn=启用后,空格键可以用于结束当前回合的替代按键。 nlEscapeEndsTurn=启用后,空格键可以用于结束当前回合的替代按键。
nlDetailedPaymentDesc=启用后,选择目标和支付费用的时候会显示详细的咒语/异能说明。 nlDetailedPaymentDesc=启用后,选择目标和支付费用的时候会显示详细的咒语/异能说明。
nlShowStormCount=启用后,提示窗格将会显示当前的风暴计数 nlShowStormCount=启用后,提示窗格将会显示当前的风暴计数
@@ -144,10 +144,10 @@ DeckEditorOptions=套牌编辑器选项
nlFilterLandsByColorId=当使用牌张颜色筛选器时,过滤地可以更容易找到产数相关法术力的地 nlFilterLandsByColorId=当使用牌张颜色筛选器时,过滤地可以更容易找到产数相关法术力的地
AdvancedSettings=高级设置 AdvancedSettings=高级设置
nlDevMode=启用在开发期间进行测试的功能菜单 nlDevMode=启用在开发期间进行测试的功能菜单
nlWorkshopSyntax=在作坊中启用牌脚本检查。注意:该功能任在测试阶段。 nlWorkshopSyntax=在作坊中启用牌脚本检查。注意:该功能任在测试阶段。
nlGameLogEntryType=更改游戏中日志显示的信息量。排序为最少到最详细。 nlGameLogEntryType=更改游戏中日志显示的信息量。排序为最少到最详细。
nlCloseAction=更改单击右上角X按钮时的行为 nlCloseAction=更改单击右上角X按钮时的行为
nlLoadCardsLazily=如果打开该选项Forge将在使用到牌脚本时才加载(警告:实验状态)。 nlLoadCardsLazily=如果打开该选项Forge将在使用到牌脚本时才加载(警告:实验状态)。
nlLoadHistoricFormats=如果打开Forge将加载史记赛制这个能会导致游戏载入时间变长。 nlLoadHistoricFormats=如果打开Forge将加载史记赛制这个能会导致游戏载入时间变长。
GraphicOptions=图形选项 GraphicOptions=图形选项
nlDefaultFontSize=UI中字体的默认大小。所有字体元素都相对于此缩放。需要重启 nlDefaultFontSize=UI中字体的默认大小。所有字体元素都相对于此缩放。需要重启
@@ -155,21 +155,21 @@ cbpMulliganRule = 调度规则
nlImageFetcher=允许从在线资源中实时获取缺失的图片 nlImageFetcher=允许从在线资源中实时获取缺失的图片
nlDisplayFoil=显示闪卡 nlDisplayFoil=显示闪卡
nlRandomFoil=随机将牌设置为闪卡 nlRandomFoil=随机将牌设置为闪卡
nlScaleLarger=允许牌图片缩放为初始大小 nlScaleLarger=允许牌图片缩放为初始大小
nlRenderBlackCardBorders=为牌周围渲染黑色边框 nlRenderBlackCardBorders=为牌周围渲染黑色边框
nlLargeCardViewers=是所有牌看起来更大以便高分辨率图片看起来更舒适,不适合低分辨率设备使用 nlLargeCardViewers=是所有牌看起来更大以便高分辨率图片看起来更舒适,不适合低分辨率设备使用
nlSmallDeckViewer=将套牌查看器设置为800X600而不是按屏幕大小等比缩放 nlSmallDeckViewer=将套牌查看器设置为800X600而不是按屏幕大小等比缩放
nlRandomArtInPools=限制赛生成的卡池中带有闪卡。 nlRandomArtInPools=限制赛生成的卡池中带有闪卡。
nlUiForTouchScreen=增加一些UI元素以提高触屏体验需要重启 nlUiForTouchScreen=增加一些UI元素以提高触屏体验需要重启
nlCompactPrompt=隐藏标题并在“提示”窗格中使用较小的字体使其更紧凑。 nlCompactPrompt=隐藏标题并在“提示”窗格中使用较小的字体使其更紧凑。
nlHideReminderText=在“牌详情“窗格中隐藏提醒文本 nlHideReminderText=在“牌详情“窗格中隐藏提醒文本
nlOpenPacksIndiv=打开肥包或者补充盒的时候一包一包开。 nlOpenPacksIndiv=打开肥包或者补充盒的时候一包一包开。
nlTokensInSeparateRow=生物与衍生物分不同的行显示。 nlTokensInSeparateRow=生物与衍生物分不同的行显示。
nlStackCreatures=在战场上如同地、神器、结界一般堆叠一样的生物。 nlStackCreatures=在战场上如同地、神器、结界一般堆叠一样的生物。
nlTimedTargOverlay=启用基于限制目标的覆盖优化以减少CPU使用率仅在旧设备上需要使用需要重启游戏 nlTimedTargOverlay=启用基于限制目标的覆盖优化以减少CPU使用率仅在旧设备上需要使用需要重启游戏
nlCounterDisplayType=选择指示物的样式。基于文本还是基于图片还是二者混合。 nlCounterDisplayType=选择指示物的样式。基于文本还是基于图片还是二者混合。
nlCounterDisplayLocation=确定牌张上指示物的位置:靠近底部还是顶部 nlCounterDisplayLocation=确定牌张上指示物的位置:靠近底部还是顶部
nlDisplayCurrentCardColors=牌详情窗格中显示当前牌的颜色 nlDisplayCurrentCardColors=在牌详情窗格中显示当前牌的颜色
SoundOptions=声音选项 SoundOptions=声音选项
nlEnableSounds=在游戏中启用声音效果 nlEnableSounds=在游戏中启用声音效果
nlEnableMusic=在游戏中启用背景音乐 nlEnableMusic=在游戏中启用背景音乐
@@ -195,7 +195,7 @@ lblDownloadPicsHQ=下载缺省牌的高清图片
lblDownloadSetPics=下载每张牌的图片(每张牌出现一次) lblDownloadSetPics=下载每张牌的图片(每张牌出现一次)
lblDownloadQuestImages=下载冒险之旅里使用的衍生物与图标 lblDownloadQuestImages=下载冒险之旅里使用的衍生物与图标
lblDownloadAchievementImages=下载成就图片,让你的奖杯更引人注目。 lblDownloadAchievementImages=下载成就图片,让你的奖杯更引人注目。
lblDownloadPrices=下载牌商店最新的价格表 lblDownloadPrices=下载牌商店最新的价格表
lblYourVersionOfJavaIsTooOld=你的Java版本太旧无法开始下载内容 lblYourVersionOfJavaIsTooOld=你的Java版本太旧无法开始下载内容
lblPleaseUpdateToTheLatestVersionOfJava=请更新到最新版本的JRE lblPleaseUpdateToTheLatestVersionOfJava=请更新到最新版本的JRE
lblYoureRunning=你在运行 lblYoureRunning=你在运行
@@ -255,7 +255,7 @@ lblCommanderDeck=指挥官套牌
lblPlanarDeck=时空竞逐套牌 lblPlanarDeck=时空竞逐套牌
lblVanguard=先锋 lblVanguard=先锋
lblHuman=人类 lblHuman=人类
lblAI=AI lblAI=人工智能
lblOpen=打开 lblOpen=打开
lblUseSimulation=使用模拟 lblUseSimulation=使用模拟
lblGetaNewRandomName=获取一个新的随机名称 lblGetaNewRandomName=获取一个新的随机名称
@@ -299,7 +299,7 @@ lblAlphaStrike=先攻
lblEndTurn=结束回合 lblEndTurn=结束回合
lblTargetingArcs=瞄准弧 lblTargetingArcs=瞄准弧
lblOff=关闭 lblOff=关闭
lblCardMouseOver=牌悬停 lblCardMouseOver=悬停
lblAlwaysOn=总是打开 lblAlwaysOn=总是打开
lblAutoYields=自动让过 lblAutoYields=自动让过
lblDeckList=套牌列表 lblDeckList=套牌列表
@@ -352,8 +352,8 @@ lblPlayAnOpponent=所有对手
lblPlayAll7opponents=全部7个对手 lblPlayAll7opponents=全部7个对手
lblBuildorselectadeck=构建或选择一个套牌 lblBuildorselectadeck=构建或选择一个套牌
lblDraftText1=在轮抓模式中三个补充包在8个玩家中传递 lblDraftText1=在轮抓模式中三个补充包在8个玩家中传递
lblDraftText2=从你选的牌中组一套牌。AI也会这样做 lblDraftText2=从你选的牌中组一套牌。人工智能也会这样做
lblDraftText3=然后对抗一个或多个AI对手 lblDraftText3=然后对抗一个或多个人工智能对手
lblNewBoosterDraftGame=新的补充包轮抓 lblNewBoosterDraftGame=新的补充包轮抓
lblDraftDecks=轮抓套牌 lblDraftDecks=轮抓套牌
#CSubmenuDraft.java #CSubmenuDraft.java
@@ -366,8 +366,8 @@ lblSealedDecks=现开套牌
lblHeaderSealed=游戏模式:现开 lblHeaderSealed=游戏模式:现开
lblSealedText1=构建或选择一个套牌 lblSealedText1=构建或选择一个套牌
lblSealedText2=在现开模式中您可以从补充包里最多10个构建一套牌 lblSealedText2=在现开模式中您可以从补充包里最多10个构建一套牌
lblSealedText3=从你得到的牌中组一套牌。AI也会这样做 lblSealedText3=从你得到的牌中组一套牌。人工智能也会这样做
lblSealedText4=然后对抗一个或多个AI对手 lblSealedText4=然后对抗一个或多个人工智能对手
btnBuildNewSealedDeck=构建新的现开套牌 btnBuildNewSealedDeck=构建新的现开套牌
#FDeckChooser.java #FDeckChooser.java
lblViewDeck=查看套牌 lblViewDeck=查看套牌
@@ -425,7 +425,7 @@ lblNextChallengeNotYet=没有确定下次胜利后的挑战
btnUnlockSets=解锁系列 btnUnlockSets=解锁系列
btnTravel=时空旅行 btnTravel=时空旅行
btnBazaar=珍宝集市 btnBazaar=珍宝集市
btnSpellShop=牌商店 btnSpellShop=商店
cbSummonPlant=召唤植物 cbSummonPlant=召唤植物
cbLaunchZeppelin=启动飞艇 cbLaunchZeppelin=启动飞艇
#VSubmenuQuest.java #VSubmenuQuest.java
@@ -448,7 +448,7 @@ lblCustomdeck=自定义套牌
lblDefineCustomFormat=定义自定义赛制 lblDefineCustomFormat=定义自定义赛制
lblSelectFormat=选择赛制 lblSelectFormat=选择赛制
lblStartWithAllCards=从所选系列的所有牌开始 lblStartWithAllCards=从所选系列的所有牌开始
lblAllowDuplicateCards=允许重复的 lblAllowDuplicateCards=允许重复的牌
lblStartingPoolDistribution=初始牌池分配 lblStartingPoolDistribution=初始牌池分配
lblChooseDistribution=选择分配 lblChooseDistribution=选择分配
lblPrizedCards=奖励卡 lblPrizedCards=奖励卡
@@ -505,9 +505,9 @@ lblColors=颜色
lblnoSettings=没有可用于此选择的设置 lblnoSettings=没有可用于此选择的设置
lblDistribution=分配 lblDistribution=分配
lblHoverforDescription=将鼠标悬停在每个选项上以获得更详细的说明 lblHoverforDescription=将鼠标悬停在每个选项上以获得更详细的说明
lblradBalanced=“均衡”将在每种选定的颜色中提供数量均衡的牌。 lblradBalanced=“均衡”将在每种选定的颜色中提供数量均衡的牌
lblradRandom=“随机”将随机分配牌和颜色。 lblradRandom=“随机”将随机分配牌和颜色。
lblradSurpriseMe=随机挑选颜色并提供数量均衡的随机牌。 lblradSurpriseMe=随机挑选颜色并提供数量均衡的随机牌
lblradBoosters=忽略所有颜色设置,从指定数量的补充包中生成牌池 lblradBoosters=忽略所有颜色设置,从指定数量的补充包中生成牌池
lblcbxArtifacts=选择后无论选择的颜色如何,神器都包涵在牌池中,这模拟了旧牌池的行为。 lblcbxArtifacts=选择后无论选择的颜色如何,神器都包涵在牌池中,这模拟了旧牌池的行为。
#VSubmenuChallenges.java #VSubmenuChallenges.java
@@ -531,7 +531,7 @@ lblPastResults=结果
lblQuestDecks=套牌管理 lblQuestDecks=套牌管理
lblQuestDesc1=一开始你可以从有限的牌池中构建套牌。 lblQuestDesc1=一开始你可以从有限的牌池中构建套牌。
lblQuestDesc2=随着冒险之旅的进行,你的牌池逐渐增长,可以构建出更强的套牌。 lblQuestDesc2=随着冒险之旅的进行,你的牌池逐渐增长,可以构建出更强的套牌。
lblQuestDesc3=并且在与AI的决斗和挑战对抗中可以解锁更多牌。 lblQuestDesc3=并且在与人工智能的决斗和挑战对抗中可以解锁更多牌。
lblBuildaNewDeck=构建一个新套牌 lblBuildaNewDeck=构建一个新套牌
#Decktype.java #Decktype.java
lblCustomUserDecks=用户自定义套牌 lblCustomUserDecks=用户自定义套牌
@@ -620,7 +620,7 @@ lblBuildAndSelectaDeck=构建,然后在“冒险套牌”子菜单中选择一
lblCurrentDeck=你现在的套牌是%n lblCurrentDeck=你现在的套牌是%n
PleaseCreateAQuestBefore=请在%n之前创建套牌。 PleaseCreateAQuestBefore=请在%n之前创建套牌。
lblNoQuest=没有探索 lblNoQuest=没有探索
lblVisitTheSpellShop=参观牌商店 lblVisitTheSpellShop=参观牌商店
lblVisitTheBazaar=参观珍宝集市 lblVisitTheBazaar=参观珍宝集市
lblUnlockEditions=解锁新的时空 lblUnlockEditions=解锁新的时空
lblUnlocked=你已经成功解锁%n lblUnlocked=你已经成功解锁%n
@@ -662,9 +662,9 @@ lblHard=难
lblExpert=专家 lblExpert=专家
lblWinsforBooster=获得补充包所需的胜利 lblWinsforBooster=获得补充包所需的胜利
lblWinsforRankIncrease=排名增加所需的胜利 lblWinsforRankIncrease=排名增加所需的胜利
lblWinsforMediumAI=匹配中等难度AI所需的胜利 lblWinsforMediumAI=匹配中等难度人工智能所需的胜利
lblWinsforHardAI=匹配困难难度AI所需的胜利 lblWinsforHardAI=匹配困难难度人工智能所需的胜利
lblWinsforExpertAI=匹配专家难度AI所需的胜利 lblWinsforExpertAI=匹配专家难度人工智能所需的胜利
lblStartingCommons=初始铁 lblStartingCommons=初始铁
lblStartingUncommons=初始银 lblStartingUncommons=初始银
lblStartingRares=初始金 lblStartingRares=初始金
@@ -695,16 +695,16 @@ lblCardSalePercentageCap=出售牌的系数上限
lblCardSalePriceCap=出售牌的价格上限 lblCardSalePriceCap=出售牌的价格上限
lblWinstoUncapSalePrice=胜利解锁价格系数 lblWinstoUncapSalePrice=胜利解锁价格系数
lblPlaysetSize=玩家收藏大小 lblPlaysetSize=玩家收藏大小
ttPlaysetSize=在售卖牌时要保留的牌数量 ttPlaysetSize=在售卖牌时要保留的牌数量
lblPlaysetSizeBasicLand=玩家收藏大小:基本地 lblPlaysetSizeBasicLand=玩家收藏大小:基本地
ttPlaysetSizeBasicLand=在售卖牌时要保留的基本地数量 ttPlaysetSizeBasicLand=在售卖牌时要保留的基本地数量
lblPlaysetSizeAnyNumber=玩家收藏大小:任意数量 lblPlaysetSizeAnyNumber=玩家收藏大小:任意数量
ttPlaysetSizeAnyNumber=售卖牌时不保留 ttPlaysetSizeAnyNumber=售卖牌时不保留牌
lblItemLevelRestriction=物品等级限制 lblItemLevelRestriction=物品等级限制
lblFoilfilterAlwaysOn=闪卡过滤器始终开启 lblFoilfilterAlwaysOn=闪卡过滤器始终开启
lblRatingsfilterAlwaysOn=评级过滤器始终开启。 lblRatingsfilterAlwaysOn=评级过滤器始终开启。
lblSimulateAIvsAIResults=模拟AI VS AI的结果。 lblSimulateAIvsAIResults=模拟人工智能 VS 人工智能的结果。
ttSimulateAIvsAIResults=如果设置为1则不会播放AI VS AI的轮抓。而是快速确定其对局结果。 ttSimulateAIvsAIResults=如果设置为1则不会播放人工智能 VS 人工智能的轮抓。而是快速确定其对局结果。
lblWinsforNewDraft=新轮抓所需的胜利 lblWinsforNewDraft=新轮抓所需的胜利
lblWinsperDraftRotation=每次轮抓胜利轮替 lblWinsperDraftRotation=每次轮抓胜利轮替
ttWinsperDraftRotation=如果轮抓没有赢这么多场,那么它将被删除或者替换。 ttWinsperDraftRotation=如果轮抓没有赢这么多场,那么它将被删除或者替换。
@@ -767,7 +767,7 @@ lblRemove4ofcard=移除4张牌
ttRemove4ofcard=最多可以将4张所选牌从当前套牌移除 ttRemove4ofcard=最多可以将4张所选牌从当前套牌移除
lblAddBasicLands=添加基本地 lblAddBasicLands=添加基本地
ttAddBasicLands=添加基本地到套牌 ttAddBasicLands=添加基本地到套牌
lblCardCatalog=牌目录 lblCardCatalog=目录
lblJumptoprevioustable=跳转到上一个表格 lblJumptoprevioustable=跳转到上一个表格
lblJumptopnexttable=跳转到下一个表格 lblJumptopnexttable=跳转到下一个表格
lblJumptotextfilter=跳转到文本筛选器 lblJumptotextfilter=跳转到文本筛选器
@@ -863,7 +863,7 @@ lblUntitled=无标题
lblPrompt=提示 lblPrompt=提示
lblGameSetup=游戏设置 lblGameSetup=游戏设置
#ColumnDef.java #ColumnDef.java
lblAIStatus=AI状态 lblAIStatus=人工智能状态
lblCMC=总法术力费用 lblCMC=总法术力费用
ttCMC=总法术力费用 ttCMC=总法术力费用
lblCN=编号 lblCN=编号
@@ -905,7 +905,7 @@ lblBattlefieldTextureFiltering=战场纹理过滤
lblCompactListItems=紧凑的项目列表 lblCompactListItems=紧凑的项目列表
lblCompactTabs=紧凑标签 lblCompactTabs=紧凑标签
lblCardOverlays=牌张叠加层 lblCardOverlays=牌张叠加层
lblDisableCardEffect=禁用牌“效果”图 lblDisableCardEffect=禁用牌“效果”图
lblDynamicBackgroundPlanechase=动态时空背景 lblDynamicBackgroundPlanechase=动态时空背景
lblGameplayOptions=游戏选项 lblGameplayOptions=游戏选项
lblGeneralSettings=常规设置 lblGeneralSettings=常规设置
@@ -929,14 +929,14 @@ lblVibrateWhenLosingLife=失去生命时震动
lblVibrationOptions=振动选项 lblVibrationOptions=振动选项
nlAutomaticBugReports=在没有提示的情况下自动向开发人员报告错误 nlAutomaticBugReports=在没有提示的情况下自动向开发人员报告错误
nlBattlefieldTextureFiltering=在战场上过滤闪卡特效,使其在大屏幕上不像素化(需要重启,可能会降低性能)。 nlBattlefieldTextureFiltering=在战场上过滤闪卡特效,使其在大屏幕上不像素化(需要重启,可能会降低性能)。
nlCompactListItems=默认情况下,在所有视图列表中只显示牌和套牌的单行文本。 nlCompactListItems=默认情况下,在所有视图列表中只显示牌和套牌的单行文本。
nlCompactTabs=在标签页屏幕顶部显示较小的标签(例如此屏幕)。 nlCompactTabs=在标签页屏幕顶部显示较小的标签(例如此屏幕)。
nlDisableCardEffect=禁用“效果”卡的缩放图片。 nlDisableCardEffect=禁用“效果”卡的缩放图片。
nlDynamicBackgroundPlanechase=使用当前时空图片作为背景时空图片必须位于cache/pics/planechase文件夹中 nlDynamicBackgroundPlanechase=使用当前时空图片作为背景时空图片必须位于cache/pics/planechase文件夹中
nlHotSeatMode=当用两个人类玩家开始游戏的时候,用单个提示控制两个玩家。 nlHotSeatMode=当用两个人类玩家开始游戏的时候,用单个提示控制两个玩家。
nlLandscapeMode=使用横向(水平)而不是纵向(垂直)。 nlLandscapeMode=使用横向(水平)而不是纵向(垂直)。
nlMinimizeScreenLock=锁定屏幕时最小化Forge锁屏以后出现图形故障使用 nlMinimizeScreenLock=锁定屏幕时最小化Forge锁屏以后出现图形故障使用
nlOrderGraveyard=确定何时让玩家确定同时进入坟场的牌的顺序(绝不/总是/只对有关牌)。 nlOrderGraveyard=确定何时让玩家确定同时进入坟场的牌的顺序(绝不/总是/只对有关牌)。
nlRotateZoomPlanesPhenomena=旋转缩放时空或异象图片。 nlRotateZoomPlanesPhenomena=旋转缩放时空或异象图片。
nlRotateZoomSplit=旋转缩放连体牌图片。 nlRotateZoomSplit=旋转缩放连体牌图片。
nlShowCardIDOverlays=显示牌张的ID叠加层否则他们被隐藏。 nlShowCardIDOverlays=显示牌张的ID叠加层否则他们被隐藏。
@@ -946,7 +946,7 @@ nlShowCardOverlays=显示牌张名称,法术力费用,力量/防御和ID叠
nlShowCardPTOverlays=显示力量/防御/忠诚叠加层,否则他们被隐藏。 nlShowCardPTOverlays=显示力量/防御/忠诚叠加层,否则他们被隐藏。
nlShowMatchBackground=在战场显示背景图片,否则显示背景纹理。 nlShowMatchBackground=在战场显示背景图片,否则显示背景纹理。
nlTheme=设置显示的组件使用的外观主题。 nlTheme=设置显示的组件使用的外观主题。
nlVibrateAfterLongPress=启用长按触发震动,例如长按缩放牌图片。 nlVibrateAfterLongPress=启用长按触发震动,例如长按缩放牌图片。
nlVibrateWhenLosingLife=启用当玩家在游戏中失去生命或收到伤害时震动。 nlVibrateWhenLosingLife=启用当玩家在游戏中失去生命或收到伤害时震动。
#MatchScreen.java #MatchScreen.java
lblPlayers=玩家列表 lblPlayers=玩家列表
@@ -971,7 +971,7 @@ lblChangePreferredArt=改变首选卡图
lblSelectPreferredArt=选择首选的卡图版本 lblSelectPreferredArt=选择首选的卡图版本
lblTo= lblTo=
lblAvatar=头像 lblAvatar=头像
lblCards= lblCards=
lblPlanes=时空 lblPlanes=时空
lblSchemes=阴谋 lblSchemes=阴谋
lblToMainDeck=到主牌 lblToMainDeck=到主牌
@@ -982,7 +982,7 @@ lblCommanders=指挥官
lblOathbreakers=破誓者 lblOathbreakers=破誓者
#Forge.java #Forge.java
lblLoadingFonts=加载字体中 lblLoadingFonts=加载字体中
lblLoadingCardTranslations=加载牌翻译中 lblLoadingCardTranslations=加载牌翻译中
lblFinishingStartup=完成启动 lblFinishingStartup=完成启动
#LobbyScreen.java #LobbyScreen.java
lblMore=更多 lblMore=更多
@@ -1053,12 +1053,12 @@ lblOldLandCount=%d张地
lblNewLandCount=添加%d张地 lblNewLandCount=添加%d张地
lblNewTotalCount=%d张牌 lblNewTotalCount=%d张牌
#FDeckImportDialog.java #FDeckImportDialog.java
lblImportLatestVersionCard=导入牌的最新版本 lblImportLatestVersionCard=导入牌的最新版本
lblUseOnlySetsReleasedBefore=只用之前上市系列的版本: lblUseOnlySetsReleasedBefore=只用之前上市系列的版本:
lblUseOnlyCoreAndExpansionSets=只使用核心系列和拓展系列 lblUseOnlyCoreAndExpansionSets=只使用核心系列和拓展系列
lblFollowingCardsCannotBeImported=由于拼写错误系列限制或forge尚未实现以下牌没有被导入: lblFollowingCardsCannotBeImported=由于拼写错误系列限制或forge尚未实现以下牌没有被导入:
lblImportRemainingCards=导入剩余的卡? lblImportRemainingCards=导入剩余的卡?
lblNoKnownCardsOnClipboard=在剪切板找不到已知的牌。\n\n将卡组列表复制到剪切板,然后重新打开此对话框。 lblNoKnownCardsOnClipboard=在剪切板找不到已知的牌。\n\n将套牌列表复制到剪切板,然后重新打开此对话框。
#FDeckViewer.java #FDeckViewer.java
lblDeckListCopiedClipboard=套牌列表'%s'已经复制到剪切板 lblDeckListCopiedClipboard=套牌列表'%s'已经复制到剪切板
#FSideboardDialog.java #FSideboardDialog.java
@@ -1077,64 +1077,64 @@ lblPaste=粘贴
#ListChooser.java #ListChooser.java
lblSearch=搜索 lblSearch=搜索
#InputBase.java #InputBase.java
lblPriority=Priority lblPriority=优先
lblTurn=Turn lblTurn=让过
lblPhase=Phase lblPhase=阶段
lblEmpty=Empty lblEmpty=
lbltoResolve=to Resolve. lbltoResolve=结算。
lblStormCount=Storm Count lblStormCount=风暴计数
#PlayerControllerHuman.java #PlayerControllerHuman.java
lblYouHaveWonTheCoinToss=%s, you have won the coin toss. lblYouHaveWonTheCoinToss=%s,你赢得了这次掷硬币。
lblYouLostTheLastGame=%s, you lost the last game. lblYouLostTheLastGame=%s,最后一场比赛你输了。
lblWouldYouLiketoPlayorDraw=Would you like to play or draw? lblWouldYouLiketoPlayorDraw=你想先手还是后手?
lblWhoWouldYouLiketoStartthisGame=Who would you like to start this game? (Click on the portrait.) lblWhoWouldYouLiketoStartthisGame=你想谁先开始游戏?(单击头像)
lblPlay=Play lblPlay=先手
lblDraw=Draw lblDraw=后手
lblTooFewCardsMainDeck=Too few cards in your main deck (minimum %s), please make modifications to your deck again. lblTooFewCardsMainDeck=主牌中牌张数过少(最少为%s请重新修改套牌。
lblTooManyCardsSideboard=Too many cards in your sideboard (maximum %s), please make modifications to your deck again. lblTooManyCardsSideboard=备牌中牌张数过多(最多为%s请重新修改套牌。
lblAssignCombatDamageWerentBlocked=Do you want to assign its combat damage as though it weren't blocked? lblAssignCombatDamageWerentBlocked=是否要像没有被阻挡一样分配战斗伤害?
lblChosenCards=Chosen Cards lblChosenCards=选择牌
lblAttacker=Attacker lblAttacker=攻击者
lblTriggeredby=Triggered by lblTriggeredby=触发者
lblChooseWhichCardstoReveal=Choose Which Cards to Reveal lblChooseWhichCardstoReveal=选择要展示的牌
lblChooseCardsActivateOpeningHandandOrder=Choose cards to activate from opening hand and their order lblChooseCardsActivateOpeningHandandOrder=选择要展示的手牌和顺序
lblActivateFirst=Activate first lblActivateFirst=先触发
lblChooseOptionalCosts=Choose optional Costs lblChooseOptionalCosts=选择可选费用
lblOptionalCosts=Optional Costs lblOptionalCosts=可选费用
lblDoYouWanttoScry=Do you want to scry? lblDoYouWanttoScry=你想占卜吗?
lblChooseCardstoSpliceonto=Choose cards to Splice onto lblChooseCardstoSpliceonto=选择要通联的牌。
lblDoNextActioninSequence=Do Next Action in Sequence lblDoNextActioninSequence=按顺序执行下一步操作
lblPleaseDefineanActionSequenceFirst=Please define an action sequence first. lblPleaseDefineanActionSequenceFirst=请先定义一个动作序列。
lblRememberActionSequence=Remember Action Sequence lblRememberActionSequence=记住动作序列
lblYouMustHavePrioritytoUseThisFeature=You must have priority to use this feature. lblYouMustHavePrioritytoUseThisFeature=你必须有使用此功能的优先权。
lblNameTheCard=Name the card lblNameTheCard=命名牌
lblWhichPlayerShouldRoll=Which player should roll? lblWhichPlayerShouldRoll=那个玩家掷骰子?
lblChooseResult=Choose result lblChooseResult=选择结果
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. lblChosenCardNotPermanentorCantExistIndependentlyontheBattleground=选择的牌不是永久物,也不能在战场单独存在。\n如果你想释放费永久物咒语或者你想释放永久物咒语并将之放于堆叠上请按"Cast Spell/Play Land"按钮。
lblError=Error lblError=错误
lblWinGame=Win Game lblWinGame=赢得这局游戏
lblSetLifetoWhat=Set life to what? lblSetLifetoWhat=设定生命值为多少?
lblSetLifeforWhichPlayer=Set life for which player lblSetLifeforWhichPlayer=设定哪个牌手的生命值?
lblChoosePermanentstoTap=Choose permanents to tap lblChoosePermanentstoTap=选择要横置的永久物
lblChoosePermanentstoUntap=Choose permanents to untap lblChoosePermanentstoUntap=选择要重置的永久物
lblWhichTypeofCounter=Which type of counter? lblWhichTypeofCounter=那种指示物?
lblHowManyCounters=How many counters? lblHowManyCounters=多少指示物?
lblRemoveCountersFromWhichCard=Remove counters from which card? lblRemoveCountersFromWhichCard=从哪张牌移除指示物?
lblAddCountersToWhichCard=Add counters to which card? lblAddCountersToWhichCard=添加指示物到哪张牌?
lblChooseaCard=Choose a card lblChooseaCard=选择一张牌
lblNoPlayerPriorityDeckCantBeTutoredFrom=No player has priority at the moment, so their deck can't be tutored from. lblNoPlayerPriorityDeckCantBeTutoredFrom=目前没有玩家拥有优先权,因此无法从其套牌导师。
lblNoPlayerPriorityGameStateCannotBeSetup=No player has priority at the moment, so game state cannot be setup. lblNoPlayerPriorityGameStateCannotBeSetup=目前没有玩家拥有优先权,因此无法设置游戏状态。
lblErrorLoadingBattleSetupFile=Error loading battle setup file! lblErrorLoadingBattleSetupFile=加载战场设置文件出错!
lblSelectCardstoAddtoYourDeck=Select cards to add to your deck lblSelectCardstoAddtoYourDeck=选择要添加到套牌的牌张。
lblAddTheseToMyDeck=Add these to my deck lblAddTheseToMyDeck=添加这些到我的套牌
lblChooseaPile=Choose a pile lblChooseaPile=选择一堆
lblSelectOrderForSimultaneousAbilities=Select order for simultaneous abilities lblSelectOrderForSimultaneousAbilities=选择同时触发的异能的结算顺序
lblReorderSimultaneousAbilities=Reorder simultaneous abilities lblReorderSimultaneousAbilities=重新对同时触发异能的结算顺序进行排序
lblResolveFirst=Resolve first lblResolveFirst=先结算
lblMoveCardstoToporBbottomofLibrary=Move cards to top or bottom of library lblMoveCardstoToporBbottomofLibrary=将牌张移动到牌库顶或底
lblSelectCardsToBeOutOnTheBottomOfYourLibrary=Select cards to be put on the bottom of your library lblSelectCardsToBeOutOnTheBottomOfYourLibrary=选择要放到牌库底的牌张
lblCardsToPutOnTheBottom=Cards to put on the bottom lblCardsToPutOnTheBottom=放到底部的牌张
lblArrangeCardsToBePutOnTopOfYourLibrary=Arrange cards to be put on top of your library lblArrangeCardsToBePutOnTopOfYourLibrary=为放于牌库顶的牌张排序
lblTopOfLibrary=Top of Library lblTopOfLibrary=牌库顶
lblSelectCardsToBePutIntoTheGraveyard=Select cards to be put into the graveyard lblSelectCardsToBePutIntoTheGraveyard=选择要放于坟场的牌张
lblCardsToPutInTheGraveyard=Cards to put in the graveyard lblCardsToPutInTheGraveyard=放于坟场的牌张

Binary file not shown.

Before

Width:  |  Height:  |  Size: 161 KiB

After

Width:  |  Height:  |  Size: 190 KiB

View File

@@ -309,7 +309,17 @@ public enum FSkinProp {
IMG_ABILITY_SHROUD (new int[] {330, 330, 80, 80}, PropType.ABILITY), IMG_ABILITY_SHROUD (new int[] {330, 330, 80, 80}, PropType.ABILITY),
IMG_ABILITY_TRAMPLE (new int[] {412, 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), 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_ALL (new int[] {248, 84, 80, 80}, PropType.ABILITY),
IMG_ABILITY_PROTECT_B (new int[] {330, 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), IMG_ABILITY_PROTECT_BU (new int[] {412, 84, 80, 80}, PropType.ABILITY),

View File

@@ -357,6 +357,12 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
return processCards(cards, cardsRefreshDetails); return processCards(cards, cardsRefreshDetails);
} }
@Override
public Void visit(final GameEventTokenStateUpdate event) {
processCards(event.cards, cardsRefreshDetails);
return processCards(event.cards, cardsUpdate);
}
@Override @Override
public Void visit(final GameEventShuffle event) { public Void visit(final GameEventShuffle event) {
//pfps the change to the library has already been performed by a setCards call //pfps the change to the library has already been performed by a setCards call

View File

@@ -78,6 +78,7 @@ public class ForgePreferences extends PreferencesStore<ForgePreferences.FPref> {
UI_OVERLAY_CARD_POWER ("true"), UI_OVERLAY_CARD_POWER ("true"),
UI_OVERLAY_CARD_MANA_COST ("true"), UI_OVERLAY_CARD_MANA_COST ("true"),
UI_OVERLAY_CARD_ID ("true"), UI_OVERLAY_CARD_ID ("true"),
UI_OVERLAY_ABILITY_ICONS("true"),
UI_ENABLE_ONLINE_IMAGE_FETCHER ("false"), UI_ENABLE_ONLINE_IMAGE_FETCHER ("false"),
UI_IMAGE_CACHE_MAXIMUM("400"), UI_IMAGE_CACHE_MAXIMUM("400"),
UI_OVERLAY_FOIL_EFFECT ("true"), UI_OVERLAY_FOIL_EFFECT ("true"),