mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 18:58:00 +00:00
Merge branch 'master' into 'german-translation'
# Conflicts: # forge-gui/res/languages/de-DE.properties
This commit is contained in:
@@ -24,7 +24,7 @@ public class AbandonEffect extends SpellAbilityEffect {
|
||||
Player controller = source.getController();
|
||||
|
||||
boolean isOptional = sa.hasParam("Optional");
|
||||
if (isOptional && !controller.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblWouldYoulikeAbandon") + " " + source + "?")) {
|
||||
if (isOptional && !controller.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblWouldYoulikeAbandonConfirm", source.toString()))) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@ public class AddTurnEffect extends SpellAbilityEffect {
|
||||
extra.setCantSetSchemesInMotion(true);
|
||||
}
|
||||
if (sa.hasParam("ShowMessage")) {
|
||||
p.getGame().getAction().nofityOfValue(sa, p, p + " " + Localizer.getInstance().getMessage("lblTakesExtraTurn"), null);
|
||||
p.getGame().getAction().nofityOfValue(sa, p, Localizer.getInstance().getMessage("lblPlayerTakesExtraTurn", p.toString()), null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ public class AssignGroupEffect extends SpellAbilityEffect {
|
||||
Multimap<SpellAbility, GameObject> result = ArrayListMultimap.create();
|
||||
|
||||
for (GameObject g : defined) {
|
||||
final String title = Localizer.getInstance().getMessage("lblChooseAbilityFor") + " " + g.toString();
|
||||
final String title = Localizer.getInstance().getMessage("lblChooseAbilityForObject", g.toString());
|
||||
Map<String, Object> params = Maps.newHashMap();
|
||||
params.put("Affected", g);
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@ public class AttachEffect extends SpellAbilityEffect {
|
||||
|
||||
// If Cast Targets will be checked on the Stack
|
||||
for (final Card attachment : attachments) {
|
||||
String message = Localizer.getInstance().getMessage("lblDoYouWantAttach") + " " + attachment + " " + Localizer.getInstance().getMessage("lblTo") + " " + attachTo + "?";
|
||||
String message = Localizer.getInstance().getMessage("lblDoYouWantAttachSourceToTarget", attachment.toString(), attachTo.toString());
|
||||
if ( sa.hasParam("Optional") && !p.getController().confirmAction(sa, null, message) )
|
||||
continue;
|
||||
handleAttachment(attachment, attachTo, sa);
|
||||
@@ -174,7 +174,7 @@ public class AttachEffect extends SpellAbilityEffect {
|
||||
players.add(player);
|
||||
}
|
||||
}
|
||||
final Player pa = p.getController().chooseSingleEntityForEffect(players, aura, source + " - " + Localizer.getInstance().getMessage("lblSelectAPlayerAttachTo"));
|
||||
final Player pa = p.getController().chooseSingleEntityForEffect(players, aura, Localizer.getInstance().getMessage("lblSelectAPlayerAttachSourceTo", source.toString()));
|
||||
if (pa != null) {
|
||||
handleAura(source, pa);
|
||||
return true;
|
||||
@@ -187,7 +187,7 @@ public class AttachEffect extends SpellAbilityEffect {
|
||||
return false;
|
||||
}
|
||||
|
||||
final Card o = p.getController().chooseSingleEntityForEffect(list, aura, source + " - " + Localizer.getInstance().getMessage("lblSelectACardAttachTo"));
|
||||
final Card o = p.getController().chooseSingleEntityForEffect(list, aura, Localizer.getInstance().getMessage("lblSelectACardAttachSourceTo", source.toString()));
|
||||
if (o != null) {
|
||||
handleAura(source, o);
|
||||
//source.enchantEntity((Card) o);
|
||||
|
||||
@@ -60,7 +60,7 @@ public class BidLifeEffect extends SpellAbilityEffect {
|
||||
if (result) { // a different choose number
|
||||
bid += p.getController().chooseNumber(sa, Localizer.getInstance().getMessage("lblBidLife") + ":", 1, 9);
|
||||
winner = p;
|
||||
host.getGame().getAction().nofityOfValue(sa, p, Localizer.getInstance().getMessage("lblTopBidWith") + " " + bid + " " + Localizer.getInstance().getMessage("lbllife"), p);
|
||||
host.getGame().getAction().nofityOfValue(sa, p, Localizer.getInstance().getMessage("lblTopBidWithValueLife", String.valueOf(bid)), p);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ public class ChangeCombatantsEffect extends SpellAbilityEffect {
|
||||
final GameEntity originalDefender = combat.getDefenderByAttacker(c);
|
||||
final FCollectionView<GameEntity> defs = combat.getDefenders();
|
||||
final GameEntity defender = sa.getActivatingPlayer().getController().chooseSingleEntityForEffect(defs, sa,
|
||||
Localizer.getInstance().getMessage("lblChooseDefenderToAttackWith") + " " + c, false);
|
||||
Localizer.getInstance().getMessage("lblChooseDefenderToAttackWithCard", c.toString()), false);
|
||||
if (originalDefender != null && !originalDefender.equals(defender)) {
|
||||
AttackingBand ab = combat.getBandOfAttacker(c);
|
||||
if (ab != null) {
|
||||
|
||||
@@ -51,8 +51,8 @@ public class ChangeTargetsEffect extends SpellAbilityEffect {
|
||||
// Redirect rules read 'you MAY choose new targets' ... okay!
|
||||
// TODO: Don't even ask to change targets, if the SA and subs don't actually have targets
|
||||
boolean isOptional = sa.hasParam("Optional");
|
||||
if (isOptional && !chooser.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWantChangeTargets") + " " + tgtSA.getHostCard() + "?")) {
|
||||
continue;
|
||||
if (isOptional && !chooser.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWantChangeAbilityTargets", tgtSA.getHostCard().toString()))) {
|
||||
continue;
|
||||
}
|
||||
if (changesOneTarget) {
|
||||
// 1. choose a target of target spell
|
||||
|
||||
@@ -99,19 +99,9 @@ public class ChangeZoneAllEffect extends SpellAbilityEffect {
|
||||
final String targets = Lang.joinHomogenous(cards);
|
||||
final String message;
|
||||
if (sa.hasParam("OptionQuestion")) {
|
||||
message = TextUtil.fastReplace(sa.getParam("OptionQuestion"), "TARGETS", targets);
|
||||
message = TextUtil.fastReplace(sa.getParam("OptionQuestion"), "TARGETS", targets);
|
||||
} else {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
|
||||
sb.append(Localizer.getInstance().getMessage("lblMove") + " ");
|
||||
sb.append(targets);
|
||||
sb.append(" " + Localizer.getInstance().getMessage("lblFrom") + " ");
|
||||
sb.append(Lang.joinHomogenous(origin));
|
||||
sb.append(" " + Localizer.getInstance().getMessage("lblTo") + " ");
|
||||
sb.append(destination);
|
||||
sb.append("?");
|
||||
|
||||
message = sb.toString();
|
||||
message = Localizer.getInstance().getMessage("lblMoveTargetFromOriginToDestination", targets, Lang.joinHomogenous(origin, ZoneType.Accessors.GET_TRANSLATED_NAME), destination.toString());
|
||||
}
|
||||
|
||||
if (!sa.getActivatingPlayer().getController().confirmAction(sa, null, message)) {
|
||||
|
||||
@@ -440,7 +440,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
hostCard.addRemembered(CardUtil.getLKICopy(tgtC));
|
||||
}
|
||||
|
||||
final String prompt = TextUtil.concatWithSpace(Localizer.getInstance().getMessage("lblDoYouWantMove"), tgtC.toString(), Localizer.getInstance().getMessage("lblFrom"), origin.toString(), Localizer.getInstance().getMessage("lblTo"), TextUtil.addSuffix(destination.toString(),"?"));
|
||||
final String prompt = TextUtil.concatWithSpace(Localizer.getInstance().getMessage("lblDoYouWantMoveTargetFromOriToDest", tgtC.toString(), origin.toString(), destination.toString()));
|
||||
if (optional && !player.getController().confirmAction(sa, null, prompt) )
|
||||
continue;
|
||||
|
||||
@@ -504,7 +504,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
list = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), sa.getParam("AttachedTo"), tgtC.getController(), tgtC);
|
||||
}
|
||||
if (!list.isEmpty()) {
|
||||
Card attachedTo = player.getController().chooseSingleEntityForEffect(list, sa, tgtC + " - " + Localizer.getInstance().getMessage("lblSelectACardAttachTo"));
|
||||
Card attachedTo = player.getController().chooseSingleEntityForEffect(list, sa, Localizer.getInstance().getMessage("lblSelectACardAttachSourceTo", tgtC.toString()));
|
||||
tgtC.attachToEntity(attachedTo);
|
||||
} else { // When it should enter the battlefield attached to an illegal permanent it fails
|
||||
continue;
|
||||
@@ -514,7 +514,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
if (sa.hasParam("AttachedToPlayer")) {
|
||||
FCollectionView<Player> list = AbilityUtils.getDefinedPlayers(hostCard, sa.getParam("AttachedToPlayer"), sa);
|
||||
if (!list.isEmpty()) {
|
||||
Player attachedTo = player.getController().chooseSingleEntityForEffect(list, sa, tgtC + " - " + Localizer.getInstance().getMessage("lblSelectAPlayerAttachTo"));
|
||||
Player attachedTo = player.getController().chooseSingleEntityForEffect(list, sa, Localizer.getInstance().getMessage("lblSelectAPlayerAttachSourceTo", tgtC.toString()));
|
||||
tgtC.attachToEntity(attachedTo);
|
||||
}
|
||||
else { // When it should enter the battlefield attached to an illegal player it fails
|
||||
@@ -561,7 +561,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
defender = player.getController().chooseSingleEntityForEffect(e, sa, Localizer.getInstance().getMessage("lblDeclareDefenderFor") + " " + movedCard );
|
||||
defender = player.getController().chooseSingleEntityForEffect(e, sa, Localizer.getInstance().getMessage("lblDeclareDefenderForCard", movedCard.toString()));
|
||||
}
|
||||
if (defender != null) {
|
||||
combat.addAttacker(movedCard, defender);
|
||||
@@ -750,7 +750,14 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
|
||||
final boolean optional = sa.hasParam("Optional");
|
||||
if (optional) {
|
||||
String message = MessageUtil.formatMessage(defined ? Localizer.getInstance().getMessage("lblPutThatCardFrom") + " {player's} " + Lang.joinHomogenous(origin).toLowerCase() + " " + Localizer.getInstance().getMessage("lblTo") + " " + destination.name().toLowerCase() : Localizer.getInstance().getMessage("lblSearch") + " {player's} " + Lang.joinHomogenous(origin).toLowerCase() + "?", decider, player);
|
||||
String prompt;
|
||||
if (defined) {
|
||||
prompt = Localizer.getInstance().getMessage("lblPutThatCardFromPlayerOriginToDestination", "{player's}", Lang.joinHomogenous(origin, ZoneType.Accessors.GET_TRANSLATED_NAME).toLowerCase(), destination.name().toLowerCase());
|
||||
}
|
||||
else {
|
||||
prompt = Localizer.getInstance().getMessage("lblSearchPlayerZoneConfirm", "{player's}", Lang.joinHomogenous(origin, ZoneType.Accessors.GET_TRANSLATED_NAME).toLowerCase());
|
||||
}
|
||||
String message = MessageUtil.formatMessage(prompt , decider, player);
|
||||
if (!decider.getController().confirmAction(sa, PlayerActionConfirmMode.ChangeZoneGeneral, message)) {
|
||||
return;
|
||||
}
|
||||
@@ -822,7 +829,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
continue;
|
||||
}
|
||||
SpellAbility tgtSA = decider.getController().getAbilityToPlay(tgtCard, sas);
|
||||
if (!decider.getController().confirmAction(tgtSA, null, Localizer.getInstance().getMessage("lblDoYouWantPlay") + " " + tgtCard + "?")) {
|
||||
if (!decider.getController().confirmAction(tgtSA, null, Localizer.getInstance().getMessage("lblDoYouWantPlayCard", tgtCard.toString()))) {
|
||||
continue;
|
||||
}
|
||||
// if played, that card cannot be found
|
||||
@@ -854,7 +861,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
final boolean champion = sa.hasParam("Champion");
|
||||
final boolean forget = sa.hasParam("ForgetChanged");
|
||||
final boolean imprint = sa.hasParam("Imprint");
|
||||
String selectPrompt = sa.hasParam("SelectPrompt") ? sa.getParam("SelectPrompt") : MessageUtil.formatMessage(Localizer.getInstance().getMessage("lblSelectCardFrom") + " {player's} " + Lang.joinHomogenous(origin).toLowerCase(), decider, player);
|
||||
String selectPrompt = sa.hasParam("SelectPrompt") ? sa.getParam("SelectPrompt") : MessageUtil.formatMessage(Localizer.getInstance().getMessage("lblSelectCardFromPlayerZone", "{player's}", Lang.joinHomogenous(origin, ZoneType.Accessors.GET_TRANSLATED_NAME).toLowerCase()), decider, player);
|
||||
final String totalcmc = sa.getParam("WithTotalCMC");
|
||||
int totcmc = AbilityUtils.calculateAmount(source, totalcmc, sa);
|
||||
|
||||
@@ -867,9 +874,10 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
if (! sa.hasParam("SelectPrompt")) {
|
||||
// new default messaging for multi select
|
||||
if (fetchList.size() > changeNum) {
|
||||
selectPrompt = MessageUtil.formatMessage(Localizer.getInstance().getMessage("lblSelectUpTo") + " " + changeNum + " " + Localizer.getInstance().getMessage("lblCardsFrom") + " {player's} " + Lang.joinHomogenous(origin).toLowerCase(), decider, player);
|
||||
//Select up to %changeNum cards from %players %origin
|
||||
selectPrompt = MessageUtil.formatMessage(Localizer.getInstance().getMessage("lblSelectUpToNumCardFromPlayerZone", String.valueOf(changeNum), "{player's}", Lang.joinHomogenous(origin, ZoneType.Accessors.GET_TRANSLATED_NAME).toLowerCase()), decider, player);
|
||||
} else {
|
||||
selectPrompt = MessageUtil.formatMessage(Localizer.getInstance().getMessage("lblSelectCardsFrom") + " {player's} " + Lang.joinHomogenous(origin).toLowerCase(), decider, player);
|
||||
selectPrompt = MessageUtil.formatMessage(Localizer.getInstance().getMessage("lblSelectCardsFromPlayerZone", "{player's}", Lang.joinHomogenous(origin, ZoneType.Accessors.GET_TRANSLATED_NAME).toLowerCase()), decider, player);
|
||||
}
|
||||
}
|
||||
// ensure that selection is within maximum allowed changeNum
|
||||
@@ -931,7 +939,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
|
||||
if (c == null) {
|
||||
final int num = Math.min(fetchList.size(), changeNum - i);
|
||||
String message = Localizer.getInstance().getMessage("lblCancelSearchUpTo") + " " + num + " " + Localizer.getInstance().getMessage("lblMoreCard") + (num != 1 ? "s" : "") + " " + Localizer.getInstance().getMessage("lblCanBeSelected");
|
||||
String message = Localizer.getInstance().getMessage("lblCancelSearchUpToSelectNumCards", String.valueOf(num));
|
||||
|
||||
if (fetchList.isEmpty() || decider.getController().confirmAction(sa, PlayerActionConfirmMode.ChangeZoneGeneral, message)) {
|
||||
break;
|
||||
@@ -1002,7 +1010,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
if (!list.isEmpty()) {
|
||||
Card attachedTo = null;
|
||||
if (list.size() > 1) {
|
||||
attachedTo = decider.getController().chooseSingleEntityForEffect(list, sa, c + " - " + Localizer.getInstance().getMessage("lblSelectACardAttachTo"));
|
||||
attachedTo = decider.getController().chooseSingleEntityForEffect(list, sa, Localizer.getInstance().getMessage("lblSelectACardAttachSourceTo", c.toString()));
|
||||
}
|
||||
else {
|
||||
attachedTo = list.get(0);
|
||||
@@ -1020,7 +1028,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
if (sa.hasParam("AttachedToPlayer")) {
|
||||
FCollectionView<Player> list = AbilityUtils.getDefinedPlayers(source, sa.getParam("AttachedToPlayer"), sa);
|
||||
if (!list.isEmpty()) {
|
||||
Player attachedTo = player.getController().chooseSingleEntityForEffect(list, sa, c + " - " + Localizer.getInstance().getMessage("lblSelectAPlayerAttachTo"));
|
||||
Player attachedTo = player.getController().chooseSingleEntityForEffect(list, sa, Localizer.getInstance().getMessage("lblSelectACardAttachSourceTo", c.toString()));
|
||||
c.attachToEntity(attachedTo);
|
||||
}
|
||||
else { // When it should enter the battlefield attached to an illegal permanent it fails
|
||||
@@ -1043,7 +1051,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
defender = player.getController().chooseSingleEntityForEffect(e, sa, Localizer.getInstance().getMessage("lblDeclareDefenderFor") + " " + c );
|
||||
defender = player.getController().chooseSingleEntityForEffect(e, sa, Localizer.getInstance().getMessage("lblDeclareDefenderForCard", c.toString()));
|
||||
}
|
||||
if (defender != null) {
|
||||
combat.addAttacker(c, defender);
|
||||
|
||||
@@ -83,7 +83,7 @@ public class ChooseCardEffect extends SpellAbilityEffect {
|
||||
for (final String type : CardType.getBasicTypes()) {
|
||||
final CardCollectionView cl = CardLists.getType(land, type);
|
||||
if (!cl.isEmpty()) {
|
||||
final String prompt = "Choose " + Lang.nounWithAmount(1, type);
|
||||
final String prompt = Localizer.getInstance().getMessage("lblChoose") + " " + Lang.nounWithAmount(1, type);
|
||||
Card c = p.getController().chooseSingleEntityForEffect(cl, sa, prompt, false);
|
||||
if (c != null) {
|
||||
chosen.add(c);
|
||||
@@ -99,8 +99,8 @@ public class ChooseCardEffect extends SpellAbilityEffect {
|
||||
int chosenP = 0;
|
||||
while (!creature.isEmpty()) {
|
||||
Card c = p.getController().chooseSingleEntityForEffect(creature, sa,
|
||||
Localizer.getInstance().getMessage("lblSelectCreatureWithTotalPowerLessOrEqualTo") + " " + (totP - chosenP - negativeNum)
|
||||
+ "\r\n(" + Localizer.getInstance().getMessage("lblSelected") + ":" + chosenPool + ")\r\n(" + Localizer.getInstance().getMessage("lblTotalPower") + ": " + chosenP + ")", chosenP <= totP);
|
||||
Localizer.getInstance().getMessage("lblSelectCreatureWithTotalPowerLessOrEqualToNum", (totP - chosenP - negativeNum))
|
||||
+ "\r\n(" + Localizer.getInstance().getMessage("lblSelected") + ":" + chosenPool + ")\r\n(" + Localizer.getInstance().getMessage("lblTotalPowerNum", chosenP) + ")", chosenP <= totP);
|
||||
if (c == null) {
|
||||
if (p.getController().confirmAction(sa, PlayerActionConfirmMode.OptionalChoose, Localizer.getInstance().getMessage("lblCancelChooseConfirm"))) {
|
||||
break;
|
||||
|
||||
@@ -104,7 +104,7 @@ public class ChooseCardNameEffect extends SpellAbilityEffect {
|
||||
} else {
|
||||
// use CardFace because you might name a alternate name
|
||||
//"name a card" in mtg card oracle text is "choose a card name",change text
|
||||
final String message = validDesc.equals("card") ? Localizer.getInstance().getMessage("lblChooseACardName") : Localizer.getInstance().getMessage("lblChooseA") + validDesc + Localizer.getInstance().getMessage("lblCardName") + ".";
|
||||
final String message = validDesc.equals("card") ? Localizer.getInstance().getMessage("lblChooseACardName") : Localizer.getInstance().getMessage("lblChooseASpecificCard", validDesc);
|
||||
|
||||
Predicate<ICardFace> cpp = Predicates.alwaysTrue();
|
||||
if (sa.hasParam("ValidCards")) {
|
||||
@@ -116,7 +116,7 @@ public class ChooseCardNameEffect extends SpellAbilityEffect {
|
||||
|
||||
host.setNamedCard(chosen);
|
||||
if(!randomChoice) {
|
||||
p.getGame().getAction().nofityOfValue(sa, host, p.getName() + " " + Localizer.getInstance().getMessage("lblPicked") + " " + chosen, p);
|
||||
p.getGame().getAction().nofityOfValue(sa, host, Localizer.getInstance().getMessage("lblPlayerPickedChosen", p.getName(), chosen), p);
|
||||
p.setNamedCard(chosen);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,27 +50,25 @@ public class ChooseColorEffect extends SpellAbilityEffect {
|
||||
List<String> chosenColors;
|
||||
int cntMin = sa.hasParam("TwoColors") ? 2 : 1;
|
||||
int cntMax = sa.hasParam("TwoColors") ? 2 : sa.hasParam("OrColors") ? colorChoices.size() : 1;
|
||||
String prompt;
|
||||
String prompt = null;
|
||||
if (cntMax == 1) {
|
||||
prompt = Localizer.getInstance().getMessage("lblChooseAColor");
|
||||
}
|
||||
else {
|
||||
prompt = Localizer.getInstance().getMessage("lblChoose") + " " + Lang.getNumeral(cntMin);
|
||||
if (cntMax > cntMin) {
|
||||
if (cntMax >= MagicColor.NUMBER_OR_COLORS) {
|
||||
prompt += " " + Localizer.getInstance().getMessage("lblOrMore");
|
||||
} else {
|
||||
prompt += " " + Localizer.getInstance().getMessage("lblTo") + " " + Lang.getNumeral(cntMax);
|
||||
}
|
||||
if (cntMax >= MagicColor.NUMBER_OR_COLORS) {
|
||||
prompt = Localizer.getInstance().getMessage("lblAtLastChooseNumColors", Lang.getNumeral(cntMin));
|
||||
} else {
|
||||
prompt = Localizer.getInstance().getMessage("lblChooseSpecifiedRangeColors", Lang.getNumeral(cntMin), Lang.getNumeral(cntMax));
|
||||
}
|
||||
}
|
||||
prompt += " " + Localizer.getInstance().getMessage("lblColors");
|
||||
}
|
||||
chosenColors = p.getController().chooseColors(prompt, sa, cntMin, cntMax, colorChoices);
|
||||
if (chosenColors.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
card.setChosenColors(chosenColors);
|
||||
p.getGame().getAction().nofityOfValue(sa, card, p.getName() + " " + Localizer.getInstance().getMessage("lblPicked") + " " + Lang.joinHomogenous(chosenColors), p);
|
||||
p.getGame().getAction().nofityOfValue(sa, card, Localizer.getInstance().getMessage("lblPlayerPickedChosen", p.getName(), Lang.joinHomogenous(chosenColors)), p);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@ public class ChooseNumberEffect extends SpellAbilityEffect {
|
||||
card.setChosenNumber(chosen);
|
||||
}
|
||||
if (sa.hasParam("Notify")) {
|
||||
p.getGame().getAction().nofityOfValue(sa, card, p.getName() + " " + Localizer.getInstance().getMessage("lblPicked") + " " + chosen, p);
|
||||
p.getGame().getAction().nofityOfValue(sa, card, Localizer.getInstance().getMessage("lblPlayerPickedChosen", p.getName(), chosen), p);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -86,7 +86,7 @@ public class ChooseNumberEffect extends SpellAbilityEffect {
|
||||
for (Entry<Player, Integer> ev : chooseMap.entrySet()) {
|
||||
int num = ev.getValue();
|
||||
Player player = ev.getKey();
|
||||
sb.append(player).append(" " + Localizer.getInstance().getMessage("lblChose") + " ").append(num);
|
||||
sb.append(Localizer.getInstance().getMessage("lblPlayerChoseNum", player.getName(), String.valueOf(num)));
|
||||
sb.append("\r\n");
|
||||
if (num > highest) {
|
||||
highestNum.clear();
|
||||
|
||||
@@ -94,7 +94,7 @@ public class CloneEffect extends SpellAbilityEffect {
|
||||
}
|
||||
|
||||
final boolean optional = sa.hasParam("Optional");
|
||||
if (optional && !host.getController().getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWantCopy") + " " + cardToCopy + "?")) {
|
||||
if (optional && !host.getController().getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWantCopyCard", cardToCopy))) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -228,7 +228,7 @@ public class ControlGainEffect extends SpellAbilityEffect {
|
||||
final FCollectionView<GameEntity> e = combat.getDefenders();
|
||||
|
||||
final GameEntity defender = sa.getActivatingPlayer().getController().chooseSingleEntityForEffect(e, sa,
|
||||
Localizer.getInstance().getMessage("lblDeclareDefenderFor") + " " + tgtC);
|
||||
Localizer.getInstance().getMessage("lblDeclareDefenderForCard", tgtC.toString()));
|
||||
|
||||
if (defender != null) {
|
||||
combat.addAttacker(tgtC, defender);
|
||||
|
||||
@@ -207,12 +207,12 @@ public class CopyPermanentEffect extends SpellAbilityEffect {
|
||||
GameEntity defender;
|
||||
if ("True".equals(attacked)) {
|
||||
FCollectionView<GameEntity> defs = game.getCombat().getDefenders();
|
||||
defender = c.getController().getController().chooseSingleEntityForEffect(defs, sa, Localizer.getInstance().getMessage("lblChooseDefenderToAttackWith") + " " + c, false);
|
||||
defender = c.getController().getController().chooseSingleEntityForEffect(defs, sa, Localizer.getInstance().getMessage("lblChooseDefenderToAttackWithCard", c.toString()), false);
|
||||
} else {
|
||||
defender = AbilityUtils.getDefinedPlayers(host, sa.getParam("CopyAttacking"), sa).get(0);
|
||||
if (sa.hasParam("ChoosePlayerOrPlaneswalker") && defender != null) {
|
||||
FCollectionView<GameEntity> defs = game.getCombat().getDefendersControlledBy((Player) defender);
|
||||
defender = c.getController().getController().chooseSingleEntityForEffect(defs, sa, Localizer.getInstance().getMessage("lblChooseDefenderToAttackWith") + " " + c + " {" + Localizer.getInstance().getMessage("lblDefender") + ": " + defender + "}", false);
|
||||
defender = c.getController().getController().chooseSingleEntityForEffect(defs, sa, Localizer.getInstance().getMessage("lblChooseDefenderToAttackWithCard", c.toString()) + " {" + Localizer.getInstance().getMessage("lblDefender") + ": " + defender + "}", false);
|
||||
}
|
||||
}
|
||||
game.getCombat().addAttacker(copyInPlay, defender);
|
||||
@@ -244,7 +244,7 @@ public class CopyPermanentEffect extends SpellAbilityEffect {
|
||||
list = CardLists.getValidCards(list, sa.getParam("AttachedTo"), copyInPlay.getController(), copyInPlay);
|
||||
}
|
||||
if (!list.isEmpty()) {
|
||||
Card attachedTo = activator.getController().chooseSingleEntityForEffect(list, sa, copyInPlay + " - " + Localizer.getInstance().getMessage("lblSelectACardAttachTo"));
|
||||
Card attachedTo = activator.getController().chooseSingleEntityForEffect(list, sa, Localizer.getInstance().getMessage("lblSelectACardAttachSourceTo", copyInPlay.toString()));
|
||||
|
||||
copyInPlay.attachToEntity(attachedTo);
|
||||
} else {
|
||||
|
||||
@@ -67,7 +67,7 @@ public class CopySpellAbilityEffect extends SpellAbilityEffect {
|
||||
}
|
||||
|
||||
boolean isOptional = sa.hasParam("Optional");
|
||||
if (isOptional && !controller.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoyouWantCopyTheSpell") + " " + card + "?")) {
|
||||
if (isOptional && !controller.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoyouWantCopyTheSpell", card.toString()))) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -85,7 +85,7 @@ public class CopySpellAbilityEffect extends SpellAbilityEffect {
|
||||
final int spellCount = Integer.parseInt(sa.getParam("CopyMultipleSpells"));
|
||||
|
||||
for (int multi = 0; multi < spellCount && !tgtSpells.isEmpty(); multi++) {
|
||||
String prompt = Localizer.getInstance().getMessage("lblSelectMultiSpellCopyToStack").replace("%d", Lang.getOrdinal(multi + 1));
|
||||
String prompt = Localizer.getInstance().getMessage("lblSelectMultiSpellCopyToStack", Lang.getOrdinal(multi + 1));
|
||||
SpellAbility chosen = controller.getController().chooseSingleSpellForEffect(tgtSpells, sa, prompt,
|
||||
ImmutableMap.of());
|
||||
SpellAbility copiedSpell = CardFactory.copySpellAbilityAndPossiblyHost(card, chosen.getHostCard(), chosen, true);
|
||||
|
||||
@@ -110,11 +110,7 @@ public class CountersMoveEffect extends SpellAbilityEffect {
|
||||
|
||||
// only select cards if the counterNum is any
|
||||
if (counterNum.equals("Any")) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
sb.append(Localizer.getInstance().getMessage("lblChooseTakeCountersCard").replace("%s", cType.getName()));
|
||||
|
||||
srcCards = player.getController().chooseCardsForEffect(srcCards, sa, sb.toString(), 0, srcCards.size(), true);
|
||||
srcCards = player.getController().chooseCardsForEffect(srcCards, sa, Localizer.getInstance().getMessage("lblChooseTakeCountersCard", cType.getName()), 0, srcCards.size(), true);
|
||||
}
|
||||
|
||||
for (Card src : srcCards) {
|
||||
@@ -136,10 +132,7 @@ public class CountersMoveEffect extends SpellAbilityEffect {
|
||||
params.put("CounterType", cType);
|
||||
params.put("Source", src);
|
||||
params.put("Target", dest);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(Localizer.getInstance().getMessage("lblTakeHowMany") + " ").append(cType.getName());
|
||||
sb.append(" " + Localizer.getInstance().getMessage("lblCountersFrom") + " ").append(src).append("?");
|
||||
cnum = player.getController().chooseNumber(sa, sb.toString(), 0, cmax, params);
|
||||
cnum = player.getController().chooseNumber(sa, Localizer.getInstance().getMessage("lblTakeHowManyTargetCounterFromCard", cType.getName(), src.toString()), 0, cmax, params);
|
||||
} else {
|
||||
cnum = AbilityUtils.calculateAmount(host, counterNum, sa);
|
||||
}
|
||||
@@ -173,12 +166,8 @@ public class CountersMoveEffect extends SpellAbilityEffect {
|
||||
tgtCards = CardLists.getValidCards(tgtCards, sa.getParam("ValidDefined"), player, host, sa);
|
||||
|
||||
if (counterNum.equals("Any")) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(Localizer.getInstance().getMessage("lblChooseCardToGet") + " ").append(cType.getName());
|
||||
sb.append(" " + Localizer.getInstance().getMessage("lblCountersFrom") + " ").append(source).append(".");
|
||||
|
||||
tgtCards = player.getController().chooseCardsForEffect(
|
||||
tgtCards, sa, sb.toString(), 0, tgtCards.size(), true);
|
||||
tgtCards = player.getController().chooseCardsForEffect(tgtCards, sa,
|
||||
Localizer.getInstance().getMessage("lblChooseCardToGetCountersFrom", cType.getName(), source.toString()), 0, tgtCards.size(), true);
|
||||
}
|
||||
|
||||
boolean updateSource = false;
|
||||
@@ -202,9 +191,7 @@ public class CountersMoveEffect extends SpellAbilityEffect {
|
||||
params.put("CounterType", cType);
|
||||
params.put("Source", source);
|
||||
params.put("Target", cur);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(Localizer.getInstance().getMessage("lblPutHowMany") + " ").append(cType.getName()).append(" " + Localizer.getInstance().getMessage("lblCountersOn") + " ").append(cur).append("?");
|
||||
int cnum = player.getController().chooseNumber(sa, sb.toString(), 0, source.getCounters(cType), params);
|
||||
int cnum = player.getController().chooseNumber(sa, Localizer.getInstance().getMessage("lblPutHowManyTargetCounterOnCard", cType.getName(), cur.toString()), 0, source.getCounters(cType), params);
|
||||
|
||||
if (cnum > 0) {
|
||||
source.subtractCounter(cType, cnum);
|
||||
@@ -262,10 +249,7 @@ public class CountersMoveEffect extends SpellAbilityEffect {
|
||||
params.put("CounterType", cType);
|
||||
params.put("Source", source);
|
||||
params.put("Target", cur);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(Localizer.getInstance().getMessage("lblTakeHowMany") + " ").append(cType.getName());
|
||||
sb.append(" " + Localizer.getInstance().getMessage("lblCountersFrom") + " ").append(source).append("?");
|
||||
cntToMove = pc.chooseNumber(sa, sb.toString(), 0, cntToMove, params);
|
||||
cntToMove = pc.chooseNumber(sa, Localizer.getInstance().getMessage("lblTakeHowManyTargetCounterFromCard", cType.getName(), source.toString()), 0, cntToMove, params);
|
||||
}
|
||||
|
||||
if (source.getCounters(cType) >= cntToMove) {
|
||||
@@ -298,10 +282,8 @@ public class CountersMoveEffect extends SpellAbilityEffect {
|
||||
params.put("CounterType", chosenType);
|
||||
params.put("Source", source);
|
||||
params.put("Target", dest);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(Localizer.getInstance().getMessage("lblTakeHowMany") + " ").append(chosenType.getName()).append(" " + Localizer.getInstance().getMessage("lblCounters") + "?");
|
||||
int chosenAmount = pc.chooseNumber(
|
||||
sa, sb.toString(), 0, Math.min(tgtCounters.get(chosenType), cntToMove), params);
|
||||
int chosenAmount = pc.chooseNumber(sa, Localizer.getInstance().getMessage("lblTakeHowManyTargetCounters", chosenType.getName()),
|
||||
0, Math.min(tgtCounters.get(chosenType), cntToMove), params);
|
||||
|
||||
if (chosenAmount > 0) {
|
||||
dest.addCounter(chosenType, chosenAmount, player, true, table);
|
||||
|
||||
@@ -236,7 +236,7 @@ public class CountersPutEffect extends SpellAbilityEffect {
|
||||
continue;
|
||||
}
|
||||
|
||||
String message = Localizer.getInstance().getMessage("lblDoYouWantPutTargetP1P1CountersOn").replace("%d", String.valueOf(counterAmount)) + " " + gameCard + " ?";
|
||||
String message = Localizer.getInstance().getMessage("lblDoYouWantPutTargetP1P1CountersOnCard", String.valueOf(counterAmount), gameCard.toString());
|
||||
Player chooser = pc.chooseSingleEntityForEffect(activator.getOpponents(), sa, Localizer.getInstance().getMessage("lblChooseAnOpponent"));
|
||||
|
||||
if (chooser.getController().confirmAction(sa, PlayerActionConfirmMode.Tribute, message)) {
|
||||
|
||||
@@ -102,7 +102,7 @@ public class CountersPutOrRemoveEffect extends SpellAbilityEffect {
|
||||
CounterType chosenType = pc.chooseCounterType(list, sa, prompt, params);
|
||||
|
||||
params.put("CounterType", chosenType);
|
||||
prompt = Localizer.getInstance().getMessage("lblWhatToDoWithTargetCounter").replace("%s", chosenType.getName()) + " ";
|
||||
prompt = Localizer.getInstance().getMessage("lblWhatToDoWithTargetCounter", chosenType.getName()) + " ";
|
||||
Boolean putCounter = pc.chooseBinary(sa, prompt, BinaryChoiceType.AddOrRemove, params);
|
||||
|
||||
if (putCounter) {
|
||||
|
||||
@@ -130,10 +130,7 @@ public class CountersRemoveEffect extends SpellAbilityEffect {
|
||||
srcCards = game.getCardsIn(ZoneType.Battlefield);
|
||||
srcCards = CardLists.getValidCards(srcCards, sa.getParam("ValidSource"), player, card, sa);
|
||||
if (num.equals("Any")) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(Localizer.getInstance().getMessage("lblChooseCardtoTakeTargetCounters").replace("%s", counterType.getName()));
|
||||
|
||||
srcCards = player.getController().chooseCardsForEffect(srcCards, sa, sb.toString(), 0, srcCards.size(), true);
|
||||
srcCards = player.getController().chooseCardsForEffect(srcCards, sa, Localizer.getInstance().getMessage("lblChooseCardsToTakeTargetCounters", counterType.getName()), 0, srcCards.size(), true);
|
||||
}
|
||||
} else {
|
||||
srcCards = getTargetCards(sa);
|
||||
@@ -173,7 +170,7 @@ public class CountersRemoveEffect extends SpellAbilityEffect {
|
||||
Map<String, Object> params = Maps.newHashMap();
|
||||
params.put("Target", gameCard);
|
||||
params.put("CounterType", type);
|
||||
String title = Localizer.getInstance().getMessage("lblSelectRemoveCountersNumberOfTarget").replace("%s", type);
|
||||
String title = Localizer.getInstance().getMessage("lblSelectRemoveCountersNumberOfTarget", type);
|
||||
cntToRemove = pc.chooseNumber(sa, title, 0, cntToRemove, params);
|
||||
}
|
||||
|
||||
@@ -217,7 +214,7 @@ public class CountersRemoveEffect extends SpellAbilityEffect {
|
||||
String prompt = Localizer.getInstance().getMessage("lblSelectCountersTypeToRemove");
|
||||
CounterType chosenType = pc.chooseCounterType(
|
||||
ImmutableList.copyOf(tgtCounters.keySet()), sa, prompt, params);
|
||||
prompt = Localizer.getInstance().getMessage("lblSelectRemoveCountersNumberOfTarget").replace("%s", chosenType.getName());
|
||||
prompt = Localizer.getInstance().getMessage("lblSelectRemoveCountersNumberOfTarget", chosenType.getName());
|
||||
int max = Math.min(cntToRemove, tgtCounters.get(chosenType));
|
||||
params = Maps.newHashMap();
|
||||
params.put("Target", entity);
|
||||
|
||||
@@ -84,7 +84,7 @@ public class DamageDealEffect extends DamageBaseEffect {
|
||||
List<GameObject> tgts = getTargets(sa);
|
||||
if (sa.hasParam("OptionalDecider")) {
|
||||
Player decider = Iterables.getFirst(AbilityUtils.getDefinedPlayers(hostCard, sa.getParam("OptionalDecider"), sa), null);
|
||||
if (decider != null && !decider.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoyouWantDealTargetDamageTo").replace("%d", String.valueOf(dmg)) + " " + tgts + " ?")) {
|
||||
if (decider != null && !decider.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoyouWantDealTargetDamageToTarget", String.valueOf(dmg), tgts.toString()))) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -222,17 +222,17 @@ public class DigEffect extends SpellAbilityEffect {
|
||||
}
|
||||
chooser.getController().endTempShowCards();
|
||||
if (!movedCards.isEmpty()) {
|
||||
game.getAction().reveal(movedCards, chooser, true, chooser + " " + Localizer.getInstance().getMessage("lblPicked") + " ");
|
||||
game.getAction().reveal(movedCards, chooser, true, Localizer.getInstance().getMessage("lblPlayerPickedChosen", chooser.getName(), ""));
|
||||
}
|
||||
}
|
||||
else if (allButOne) {
|
||||
movedCards = new CardCollection(valid);
|
||||
String prompt;
|
||||
if (destZone2.equals(ZoneType.Library) && libraryPosition2 == 0) {
|
||||
prompt = Localizer.getInstance().getMessage("lblChooseACardToLeaveTargetLibraryTop").replace("%s", "{player's}");
|
||||
prompt = Localizer.getInstance().getMessage("lblChooseACardToLeaveTargetLibraryTop", "{player's}");
|
||||
}
|
||||
else {
|
||||
prompt = Localizer.getInstance().getMessage("lblChooseACardLeaveTarget").replace("%s", "{player's}") + " " + destZone2.name();
|
||||
prompt = Localizer.getInstance().getMessage("lblChooseACardLeaveTargetZone", "{player's}", destZone2.getTranslatedName());
|
||||
}
|
||||
|
||||
Card chosen = chooser.getController().chooseSingleEntityForEffect(valid, delayedReveal, sa, prompt, false, p);
|
||||
@@ -246,12 +246,12 @@ public class DigEffect extends SpellAbilityEffect {
|
||||
if (sa.hasParam("PrimaryPrompt")) {
|
||||
prompt = sa.getParam("PrimaryPrompt");
|
||||
} else {
|
||||
prompt = Localizer.getInstance().getMessage("lblChooseCardsPutInto") + " " + destZone1.name();
|
||||
prompt = Localizer.getInstance().getMessage("lblChooseCardsPutIntoZone", destZone1.getTranslatedName());
|
||||
if (destZone1.equals(ZoneType.Library)) {
|
||||
if (libraryPosition == -1) {
|
||||
prompt = Localizer.getInstance().getMessage("lblChooseCardPutOnTargetLibarayBottom").replace("%s", "{player's}");
|
||||
prompt = Localizer.getInstance().getMessage("lblChooseCardPutOnTargetLibarayBottom", "{player's}");
|
||||
} else if (libraryPosition == 0) {
|
||||
prompt = Localizer.getInstance().getMessage("lblChooseCardPutOnTargetLibarayTop").replace("%s", "{player's}");
|
||||
prompt = Localizer.getInstance().getMessage("lblChooseCardPutOnTargetLibarayTop", "{player's}");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -276,10 +276,7 @@ public class DigEffect extends SpellAbilityEffect {
|
||||
}
|
||||
|
||||
if (!changeValid.isEmpty() && !sa.hasParam("ExileFaceDown") && !sa.hasParam("NoReveal")) {
|
||||
game.getAction().reveal(movedCards, chooser, true,
|
||||
chooser + " " + Localizer.getInstance().getMessage("lblPicked") + " " +
|
||||
(movedCards.size() == 1 ? Localizer.getInstance().getMessage("lblThisCard") : Localizer.getInstance().getMessage("lblTheseCards")) +
|
||||
" " + Localizer.getInstance().getMessage("lblFrom") + " ");
|
||||
game.getAction().reveal(movedCards, chooser, true, Localizer.getInstance().getMessage("lblPlayerPickedCardFrom", chooser.getName()));
|
||||
}
|
||||
}
|
||||
if (sa.hasParam("ForgetOtherRemembered")) {
|
||||
|
||||
@@ -82,8 +82,7 @@ public class DigMultipleEffect extends SpellAbilityEffect {
|
||||
CardCollection chosen = chooser.getController().chooseCardsForEffectMultiple(validMap, sa, Localizer.getInstance().getMessage("lblChooseCards"));
|
||||
|
||||
if (!chosen.isEmpty()) {
|
||||
game.getAction().reveal(chosen, chooser, true,
|
||||
chooser + " " + Localizer.getInstance().getMessage("lblPicked") + " " + (chosen.size() == 1 ? Localizer.getInstance().getMessage("lblThisCard") : Localizer.getInstance().getMessage("lblTheseCards")) + " " + Localizer.getInstance().getMessage("lblFrom") + " ");
|
||||
game.getAction().reveal(chosen, chooser, true, Localizer.getInstance().getMessage("lblPlayerPickedCardFrom", chooser.getName()));
|
||||
}
|
||||
|
||||
for (Card c : chosen) {
|
||||
|
||||
@@ -160,7 +160,7 @@ public class DigUntilEffect extends SpellAbilityEffect {
|
||||
final Card c = itr.next();
|
||||
final ZoneType origin = c.getZone().getZoneType();
|
||||
if (optionalFound && !p.getController().confirmAction(sa, null,
|
||||
Localizer.getInstance().getMessage("lblDoYouWantPutCardTo") + " " + foundDest.name() + "?")) {
|
||||
Localizer.getInstance().getMessage("lblDoYouWantPutCardToZone", foundDest.getTranslatedName()))) {
|
||||
continue;
|
||||
} else {
|
||||
Card m = null;
|
||||
|
||||
@@ -206,7 +206,7 @@ public class DiscardEffect extends SpellAbilityEffect {
|
||||
if (!p.canDiscardBy(sa)) {
|
||||
continue;
|
||||
}
|
||||
String message = Localizer.getInstance().getMessage("lblWouldYouLikeRandomDiscardTargetCard").replace("%d", String.valueOf(numCards));
|
||||
String message = Localizer.getInstance().getMessage("lblWouldYouLikeRandomDiscardTargetCard", String.valueOf(numCards));
|
||||
boolean runDiscard = !sa.hasParam("Optional") || p.getController().confirmAction(sa, PlayerActionConfirmMode.Random, message);
|
||||
|
||||
if (runDiscard) {
|
||||
@@ -326,8 +326,7 @@ public class DiscardEffect extends SpellAbilityEffect {
|
||||
}
|
||||
|
||||
if (mode.startsWith("Reveal") ) {
|
||||
p.getController().reveal(toBeDiscarded, ZoneType.Hand, p,
|
||||
chooser + " " + Localizer.getInstance().getMessage("lblHasChosen") + " " + (toBeDiscarded.size() == 1 ? Localizer.getInstance().getMessage("lblThisCard") : Localizer.getInstance().getMessage("lblTheseCards")) + " " + Localizer.getInstance().getMessage("lblFrom") + " ");
|
||||
p.getController().reveal(toBeDiscarded, ZoneType.Hand, p, Localizer.getInstance().getMessage("lblPlayerHasChosenCardsFrom", chooser.getName()));
|
||||
}
|
||||
for (Card card : toBeDiscarded) {
|
||||
if (card == null) { continue; }
|
||||
|
||||
@@ -50,7 +50,7 @@ public class DrawEffect extends SpellAbilityEffect {
|
||||
|
||||
for (final Player p : getDefinedPlayersOrTargeted(sa)) {
|
||||
if ((tgt == null) || p.canBeTargetedBy(sa))
|
||||
if (optional && !p.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWantDraw") + " " + Lang.nounWithAmount(numCards, " card") + "?"))
|
||||
if (optional && !p.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWantDrawCards", Lang.nounWithAmount(numCards, " card"))))
|
||||
continue;
|
||||
|
||||
int actualNum = numCards;
|
||||
|
||||
@@ -45,9 +45,7 @@ public class EncodeEffect extends SpellAbilityEffect {
|
||||
// Handle choice of whether or not to encoded
|
||||
|
||||
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
sb.append(Localizer.getInstance().getMessage("lblDoYouWantExile") + " ").append(host).append(" " + Localizer.getInstance().getMessage("lblAndEncodeOntoAYouControlCreature"));
|
||||
if (!player.getController().confirmAction(sa, null, sb.toString())) {
|
||||
if (!player.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWantExileCardAndEncodeOntoYouCreature", host.toString()))) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -58,11 +56,11 @@ public class EncodeEffect extends SpellAbilityEffect {
|
||||
Card choice = player.getController().chooseSingleEntityForEffect(choices, sa, Localizer.getInstance().getMessage("lblChooseACreatureYouControlToEncode") + " ", true);
|
||||
|
||||
if (choice == null) {
|
||||
return;
|
||||
return;
|
||||
}
|
||||
|
||||
StringBuilder codeLog = new StringBuilder();
|
||||
codeLog.append(Localizer.getInstance().getMessage("lblEncoding") + " ").append(host.toString()).append(" " + Localizer.getInstance().getMessage("lblTo") + " ").append(choice.toString());
|
||||
codeLog.append("Encoding ").append(host.toString()).append(" to ").append(choice.toString());
|
||||
game.getGameLog().add(GameLogEntryType.STACK_RESOLVE, codeLog.toString());
|
||||
|
||||
// store hostcard in encoded array
|
||||
|
||||
@@ -112,7 +112,7 @@ public class ManaEffect extends SpellAbilityEffect {
|
||||
return;
|
||||
}
|
||||
|
||||
game.action.nofityOfValue(sa, card, activator + " " + Localizer.getInstance().getMessage("lblPicked") + " " + choiceString, activator);
|
||||
game.action.nofityOfValue(sa, card, Localizer.getInstance().getMessage("lblPlayerPickedChosen", activator.getName(), choiceString), activator);
|
||||
abMana.setExpressChoice(choiceString.toString());
|
||||
}
|
||||
}
|
||||
@@ -142,7 +142,7 @@ public class ManaEffect extends SpellAbilityEffect {
|
||||
}
|
||||
choice = MagicColor.toShortString(val);
|
||||
|
||||
game.action.nofityOfValue(sa, card, act + " " + Localizer.getInstance().getMessage("lblPicked") + " " + choice, act);
|
||||
game.action.nofityOfValue(sa, card, Localizer.getInstance().getMessage("lblPlayerPickedChosen", act.getName(), choice), act);
|
||||
abMana.setExpressChoice(choice);
|
||||
}
|
||||
}
|
||||
@@ -173,7 +173,7 @@ public class ManaEffect extends SpellAbilityEffect {
|
||||
if (cs.isMonoColor())
|
||||
sb.append(MagicColor.toShortString(s.getColorMask()));
|
||||
else /* (cs.isMulticolor()) */ {
|
||||
byte chosenColor = sa.getActivatingPlayer().getController().chooseColor(Localizer.getInstance().getMessage("lblChooseSingleColorFrom") + " " + s.toString(), sa, cs);
|
||||
byte chosenColor = sa.getActivatingPlayer().getController().chooseColor(Localizer.getInstance().getMessage("lblChooseSingleColorFromTarget", s.toString()), sa, cs);
|
||||
sb.append(MagicColor.toShortString(chosenColor));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ public class MillEffect extends SpellAbilityEffect {
|
||||
for (final Player p : getTargetPlayers(sa)) {
|
||||
if (!sa.usesTargeting() || p.canBeTargetedBy(sa)) {
|
||||
if (sa.hasParam("Optional")) {
|
||||
final String prompt = TextUtil.concatWithSpace(Localizer.getInstance().getMessage("lblDoYouWantPutLibraryCardsTo"), TextUtil.addSuffix(destination.toString(),"?"));
|
||||
final String prompt = TextUtil.concatWithSpace(Localizer.getInstance().getMessage("lblDoYouWantPutLibraryCardsTo", destination.getTranslatedName()));
|
||||
if (!p.getController().confirmAction(sa, null, prompt)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -86,7 +86,7 @@ public class MultiplePilesEffect extends SpellAbilityEffect {
|
||||
|
||||
for (int i = 1; i < piles; i++) {
|
||||
int size = pool.size();
|
||||
CardCollectionView pile = p.getController().chooseCardsForEffect(pool, sa, Localizer.getInstance().getMessage("lblChooseCardsInPile") + " " + i, 0, size, false);
|
||||
CardCollectionView pile = p.getController().chooseCardsForEffect(pool, sa, Localizer.getInstance().getMessage("lblChooseCardsInTargetPile", String.valueOf(i)), 0, size, false);
|
||||
pileList.add(pile);
|
||||
pool.removeAll(pile);
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ package forge.game.ability.effects;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import forge.util.TextUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
@@ -163,7 +162,7 @@ public class PlayEffect extends SpellAbilityEffect {
|
||||
game.getAction().revealTo(tgtCard, activator);
|
||||
}
|
||||
|
||||
if (optional && !controller.getController().confirmAction(sa, null, TextUtil.concatWithSpace(Localizer.getInstance().getMessage("lblDoYouWantPlay"), TextUtil.addSuffix(tgtCard.toString(),"?")))) {
|
||||
if (optional && !controller.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWantPlayCard", tgtCard.toString()))) {
|
||||
if (wasFaceDown) {
|
||||
tgtCard.turnFaceDownNoUpdate();
|
||||
}
|
||||
|
||||
@@ -328,7 +328,7 @@ public class PumpEffect extends SpellAbilityEffect {
|
||||
final String targets = Lang.joinHomogenous(tgtCards);
|
||||
final String message = sa.hasParam("OptionQuestion")
|
||||
? TextUtil.fastReplace(sa.getParam("OptionQuestion"), "TARGETS", targets)
|
||||
: TextUtil.concatNoSpace(Localizer.getInstance().getMessage("lblApplyPumpTo") + " ", targets, "?");
|
||||
: Localizer.getInstance().getMessage("lblApplyPumpToTarget", targets);
|
||||
|
||||
if (!sa.getActivatingPlayer().getController().confirmAction(sa, null, message)) {
|
||||
return;
|
||||
|
||||
@@ -26,7 +26,7 @@ public class RollPlanarDiceEffect extends SpellAbilityEffect {
|
||||
game.getPhaseHandler().incPlanarDiceRolledthisTurn();
|
||||
}
|
||||
PlanarDice result = PlanarDice.roll(activator, null);
|
||||
String message = activator.getName() + " " + Localizer.getInstance().getMessage("lblRolled") + " " + result.toString();
|
||||
String message = Localizer.getInstance().getMessage("lblPlayerRolledResult", activator.getName(), result.toString());
|
||||
game.getAction().nofityOfValue(sa, activator, message, null);
|
||||
|
||||
}
|
||||
|
||||
@@ -18,14 +18,14 @@ public class RunSVarAbilityEffect extends SpellAbilityEffect {
|
||||
String sVars = sa.getParam("SVars");
|
||||
List<Card> cards = getTargetCards(sa);
|
||||
if (sVars == null || cards.isEmpty()) {
|
||||
return;
|
||||
return;
|
||||
}
|
||||
List<SpellAbility> validSA = new ArrayList<>();
|
||||
final boolean isTrigger = sa.hasParam("IsTrigger");
|
||||
for (final Card tgtC : cards) {
|
||||
if (!tgtC.hasSVar(sVars)) {
|
||||
continue;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
final SpellAbility actualSA = AbilityFactory.getAbility(tgtC.getSVar(sVars), tgtC);
|
||||
actualSA.setTrigger(isTrigger);
|
||||
actualSA.setActivatingPlayer(sa.getActivatingPlayer());
|
||||
|
||||
@@ -157,21 +157,21 @@ public class SacrificeEffect extends SpellAbilityEffect {
|
||||
game.getTriggerHandler().runTrigger(TriggerType.Exploited, runParams, false);
|
||||
}
|
||||
if (wasDestroyed || wasSacrificed) {
|
||||
countSacrificed++;
|
||||
if (remSacrificed) {
|
||||
card.addRemembered(lKICopy);
|
||||
}
|
||||
countSacrificed++;
|
||||
if (remSacrificed) {
|
||||
card.addRemembered(lKICopy);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (remSVar != null) {
|
||||
card.setSVar(remSVar, String.valueOf(countSacrificed));
|
||||
SpellAbility root = sa;
|
||||
do {
|
||||
root.setSVar(remSVar, String.valueOf(countSacrificed));
|
||||
root = root.getSubAbility();
|
||||
} while (root != null);
|
||||
card.setSVar(remSVar, String.valueOf(countSacrificed));
|
||||
SpellAbility root = sa;
|
||||
do {
|
||||
root.setSVar(remSVar, String.valueOf(countSacrificed));
|
||||
root = root.getSubAbility();
|
||||
} while (root != null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -194,10 +194,10 @@ public class SacrificeEffect extends SpellAbilityEffect {
|
||||
final int amount = AbilityUtils.calculateAmount(sa.getHostCard(), num, sa);
|
||||
|
||||
if (valid.equals("Self")) {
|
||||
sb.append(Localizer.getInstance().getMessage("lblSacrifice") + " ").append(sa.getHostCard().toString());
|
||||
sb.append("Sacrifices ").append(sa.getHostCard().toString());
|
||||
} else if (valid.equals("Card.AttachedBy")) {
|
||||
final Card toSac = sa.getHostCard().getEnchantingCard();
|
||||
sb.append(toSac.getController()).append(" " + Localizer.getInstance().getMessage("lblSacrifice") + " ").append(toSac).append(".");
|
||||
sb.append(toSac.getController()).append(" Sacrifices ").append(toSac).append(".");
|
||||
} else {
|
||||
for (final Player p : tgts) {
|
||||
sb.append(p.getName()).append(" ");
|
||||
@@ -209,9 +209,9 @@ public class SacrificeEffect extends SpellAbilityEffect {
|
||||
}
|
||||
|
||||
if (sa.hasParam("Destroy")) {
|
||||
sb.append(Localizer.getInstance().getMessage("lblDestroys") + " ");
|
||||
sb.append("Destroys ");
|
||||
} else {
|
||||
sb.append(Localizer.getInstance().getMessage("lblSacrifice") + " ");
|
||||
sb.append("Sacrifices ");
|
||||
}
|
||||
sb.append(amount).append(" ").append(msg).append(".");
|
||||
}
|
||||
|
||||
@@ -42,10 +42,10 @@ public class ScryEffect extends SpellAbilityEffect {
|
||||
|
||||
// Optional here for spells that have optional multi-player scrying
|
||||
for (final Player p : getTargetPlayers(sa)) {
|
||||
if ( (!sa.usesTargeting() || p.canBeTargetedBy(sa)) &&
|
||||
(!isOptional || p.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWanttoScry"))) ) {
|
||||
players.add(p);
|
||||
}
|
||||
if ( (!sa.usesTargeting() || p.canBeTargetedBy(sa)) &&
|
||||
(!isOptional || p.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWanttoScry"))) ) {
|
||||
players.add(p);
|
||||
}
|
||||
}
|
||||
sa.getActivatingPlayer().getGame().getAction().scry(players, num, sa);
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ public class ShuffleEffect extends SpellAbilityEffect {
|
||||
|
||||
for (final Player p : tgtPlayers) {
|
||||
if ((tgt == null) || p.canBeTargetedBy(sa)) {
|
||||
boolean mustShuffle = !optional || sa.getActivatingPlayer().getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblHaveTargetShuffle").replace("%s", p + ""));
|
||||
boolean mustShuffle = !optional || sa.getActivatingPlayer().getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblHaveTargetShuffle", p.getName()));
|
||||
if (mustShuffle)
|
||||
p.shuffle(sa);
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ public class TapOrUntapEffect extends SpellAbilityEffect {
|
||||
for (final Card tgtC : tgtCards) {
|
||||
if (tgtC.isInPlay() && ((tgt == null) || tgtC.canBeTargetedBy(sa))) {
|
||||
// If the effected card is controlled by the same controller of the SA, default to untap.
|
||||
boolean tap = pc.chooseBinary(sa, Localizer.getInstance().getMessage("lblTapOrUntap") + " " + tgtC + "?", PlayerController.BinaryChoiceType.TapOrUntap,
|
||||
boolean tap = pc.chooseBinary(sa, Localizer.getInstance().getMessage("lblTapOrUntapTarget", tgtC), PlayerController.BinaryChoiceType.TapOrUntap,
|
||||
!tgtC.getController().equals(sa.getActivatingPlayer()) );
|
||||
|
||||
if (tap) {
|
||||
|
||||
@@ -480,7 +480,7 @@ public class TokenEffect extends SpellAbilityEffect {
|
||||
// into battlefield attacking only should work if you are the attacking player
|
||||
if (combat.getAttackingPlayer().equals(controller)) {
|
||||
final FCollectionView<GameEntity> defs = combat.getDefenders();
|
||||
final GameEntity defender = controller.getController().chooseSingleEntityForEffect(defs, sa, Localizer.getInstance().getMessage("lblChooseDefenderToAttackWith") + " " + c, false);
|
||||
final GameEntity defender = controller.getController().chooseSingleEntityForEffect(defs, sa, Localizer.getInstance().getMessage("lblChooseDefenderToAttackWithCard", c.toString()), false);
|
||||
combat.addAttacker(c, defender);
|
||||
combatChanged = true;
|
||||
}
|
||||
|
||||
@@ -875,7 +875,7 @@ public class CardFactory {
|
||||
}
|
||||
}
|
||||
|
||||
if (sa.hasParam("GainTextOf")) {
|
||||
if (sa.hasParam("GainTextOf") && originalState != null) {
|
||||
state.setSetCode(originalState.getSetCode());
|
||||
state.setRarity(originalState.getRarity());
|
||||
state.setImageKey(originalState.getImageKey());
|
||||
|
||||
@@ -1,32 +1,38 @@
|
||||
package forge.game.zone;
|
||||
|
||||
import forge.util.Localizer;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
|
||||
/**
|
||||
* The Enum Zone.
|
||||
*/
|
||||
public enum ZoneType {
|
||||
Hand(true),
|
||||
Library(true),
|
||||
Graveyard(false),
|
||||
Battlefield(false),
|
||||
Exile(false),
|
||||
Flashback(false),
|
||||
Command(false),
|
||||
Stack(false),
|
||||
Sideboard(true),
|
||||
Ante(false),
|
||||
SchemeDeck(true),
|
||||
PlanarDeck(true),
|
||||
None(true);
|
||||
Hand(true, Localizer.getInstance().getMessage("lblHandZone")),
|
||||
Library(true, Localizer.getInstance().getMessage("lblLibraryZone")),
|
||||
Graveyard(false, Localizer.getInstance().getMessage("lblGraveyardZone")),
|
||||
Battlefield(false, Localizer.getInstance().getMessage("lblBattlefieldZone")),
|
||||
Exile(false, Localizer.getInstance().getMessage("lblExileZone")),
|
||||
Flashback(false, Localizer.getInstance().getMessage("lblFlashbackZone")),
|
||||
Command(false, Localizer.getInstance().getMessage("lblCommandZone")),
|
||||
Stack(false, Localizer.getInstance().getMessage("lblStackZone")),
|
||||
Sideboard(true, Localizer.getInstance().getMessage("lblSideboardZone")),
|
||||
Ante(false, Localizer.getInstance().getMessage("lblAnteZone")),
|
||||
SchemeDeck(true, Localizer.getInstance().getMessage("lblSchemeDeckZone")),
|
||||
PlanarDeck(true, Localizer.getInstance().getMessage("lblPlanarDeckZone")),
|
||||
None(true, Localizer.getInstance().getMessage("lblNoneZone"));
|
||||
|
||||
public static final List<ZoneType> STATIC_ABILITIES_SOURCE_ZONES = Arrays.asList(Battlefield, Graveyard, Exile, Command/*, Hand*/);
|
||||
|
||||
private final boolean holdsHiddenInfo;
|
||||
ZoneType(boolean holdsHidden) {
|
||||
private final String zoneName;
|
||||
ZoneType(boolean holdsHidden, String name) {
|
||||
holdsHiddenInfo = holdsHidden;
|
||||
zoneName = name;
|
||||
}
|
||||
|
||||
public static ZoneType smartValueOf(final String value) {
|
||||
@@ -64,6 +70,10 @@ public enum ZoneType {
|
||||
return !holdsHiddenInfo;
|
||||
}
|
||||
|
||||
public String getTranslatedName() {
|
||||
return zoneName;
|
||||
}
|
||||
|
||||
public static boolean isHidden(final String origin) {
|
||||
List<ZoneType> zone = ZoneType.listValueOf(origin);
|
||||
|
||||
@@ -82,4 +92,13 @@ public enum ZoneType {
|
||||
public static boolean isKnown(final String origin) {
|
||||
return !isHidden(origin);
|
||||
}
|
||||
|
||||
public static class Accessors {
|
||||
public static Function<ZoneType, String> GET_TRANSLATED_NAME = new Function<ZoneType, String>() {
|
||||
@Override
|
||||
public String apply(final ZoneType arg0) {
|
||||
return arg0.getTranslatedName();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ mcrawford620
|
||||
Meerkov
|
||||
Myrd
|
||||
nefigah
|
||||
Northmoc
|
||||
OgreBattlecruiser
|
||||
pfps
|
||||
Ryan1729
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Ajani's Aid
|
||||
ManaCost:2 G W
|
||||
Types:Enchantment
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSearch | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library and/or graveyard for a card named Ajani, Valiant Protector, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
SVar:TrigSearch:DB$ ChangeZone | Origin$ Library,Graveyard | Destination$ Hand | ChangeType$ Card.namedAjani; Valiant Protector | ChangeNum$ 1 | Optional$ True
|
||||
SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Card.namedAjani; Valiant Protector | ChangeNum$ 1 | Optional$ True
|
||||
A:AB$ ChooseCard | Cost$ Sac<1/CARDNAME> | Choices$ Creature | AILogic$ NeedsPrevention | SubAbility$ DBEffect | SVars$ DBEffect | RememberChosen$ True | SpellDescription$ Prevent all combat damage a creature of your choice would deal this turn.
|
||||
SVar:DBEffect:DB$ Effect | ReplacementEffects$ RPreventNextFromSource | RememberObjects$ Remembered | SVars$ RPreventNextFromSource | SubAbility$ DBCleanup | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ GE1
|
||||
SVar:RPreventNextFromSource:Event$ DamageDone | CombatDamage$ True | ValidSource$ Card.IsRemembered | Prevent$ True | PreventionEffect$ True | Description$ Prevent all combat damage a creature of your choice would deal this turn.
|
||||
|
||||
@@ -3,7 +3,7 @@ ManaCost:3 B R
|
||||
Types:Sorcery
|
||||
A:SP$ Destroy | Cost$ 3 B R | ValidTgts$ Creature | TgtPrompt$ Select target creature | SubAbility$ DBDealDamage | SpellDescription$ Destroy target creature. CARDNAME deals 3 damage to target player or planeswalker. You may search your library and/or graveyard for a card named Angrath, Minotaur Pirate, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
SVar:DBDealDamage:DB$ DealDamage | ValidTgts$ Player,Planeswalker | TgtPrompt$ Select target player or planeswalker | NumDmg$ 3 | SubAbility$ DBSearch
|
||||
SVar:DBSearch:DB$ ChangeZone | Origin$ Library,Graveyard | Destination$ Hand | ChangeType$ Card.namedAngrath; Minotaur Pirate | ChangeNum$ 1 | Optional$ True
|
||||
SVar:DBSearch:DB$ ChangeZone | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Card.namedAngrath; Minotaur Pirate | ChangeNum$ 1 | Optional$ True
|
||||
DeckNeeds:Name$Angrath, Minotaur Pirate
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/angraths_fury.jpg
|
||||
Oracle:Destroy target creature. Angrath's Fury deals 3 damage to target player or planeswalker. You may search your library and/or graveyard for a card named Angrath, Minotaur Pirate, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
@@ -2,6 +2,6 @@ Name:Chandra's Flame Wave
|
||||
ManaCost:3 R R
|
||||
Types:Sorcery
|
||||
A:SP$ DamageAll | Cost$ 3 R R | ValidTgts$ Player | NumDmg$ 2 | ValidPlayers$ Targeted | ValidCards$ Creature.TargetedPlayerCtrl | ValidDescription$ target player and each creature that player controls. | SubAbility$ DBSearch | SpellDescription$ CARDNAME deals 2 damage to target player and each creature that player controls. Search your library and/or graveyard for a card named Chandra, Flame's Fury, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
SVar:DBSearch:DB$ ChangeZone | Origin$ Library,Graveyard | Destination$ Hand | ChangeType$ Card.namedChandra; Flame's Fury | ChangeNum$ 1 | Optional$ True
|
||||
SVar:DBSearch:DB$ ChangeZone | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Card.namedChandra; Flame's Fury | ChangeNum$ 1 | Optional$ True
|
||||
DeckHints:Name$Chandra, Flame's Fury
|
||||
Oracle:Chandra's Flame Wave deals 2 damage to target player and each creature that player controls. Search your library and/or graveyard for a card named Chandra, Flame's Fury, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
|
||||
@@ -2,6 +2,6 @@ Name:Chandra's Outburst
|
||||
ManaCost:3 R R
|
||||
Types:Sorcery
|
||||
A:SP$ DealDamage | Cost$ 3 R R | ValidTgts$ Player,Planeswalker | TgtPrompt$ Select target player or planeswalker | NumDmg$ 4 | SubAbility$ DBSearch | SpellDescription$ CARDNAME deals 4 damage to target player or planeswalker.
|
||||
SVar:DBSearch:DB$ ChangeZone | Origin$ Library,Graveyard | Destination$ Hand | ChangeType$ Card.namedChandra; Bold Pyromancer | ChangeNum$ 1
|
||||
SVar:DBSearch:DB$ ChangeZone | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Card.namedChandra; Bold Pyromancer | ChangeNum$ 1
|
||||
DeckNeeds:Name$Chandra, Bold Pyromancer
|
||||
Oracle:Chandra's Outburst deals 4 damage to target player or planeswalker.\nSearch your library and/or graveyard for a card named Chandra, Bold Pyromancer, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
|
||||
@@ -4,6 +4,6 @@ Types:Creature Beast
|
||||
PT:5/2
|
||||
K:Trample
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSearch | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library and/or graveyard for a card named Domri, City Smasher, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
SVar:TrigSearch:DB$ ChangeZone | Origin$ Library,Graveyard | Destination$ Hand | ChangeType$ Card.namedDomri; City Smasher | ChangeNum$ 1 | Optional$ True
|
||||
SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Card.namedDomri; City Smasher | ChangeNum$ 1 | Optional$ True
|
||||
DeckHints:Name$Domri, City Smasher
|
||||
Oracle:Trample\nWhen Domri's Nodorog enters the battlefield, you may search your library and/or graveyard for a card named Domri, City Smasher, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
|
||||
@@ -2,6 +2,6 @@ Name:Dovin's Dismissal
|
||||
ManaCost:2 W U
|
||||
Types:Instant
|
||||
A:SP$ ChangeZone | Cost$ 2 W U | ValidTgts$ Creature.tapped | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select target tapped creature | Origin$ Battlefield | Destination$ Library | LibraryPosition$ 0 | SubAbility$ DBSearch | SpellDescription$ Put up to one target tapped creature on top of its owner's library. You may search your library and/or graveyard for a card named Dovin, Architect of Law, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
SVar:DBSearch:DB$ ChangeZone | Origin$ Library,Graveyard | Destination$ Hand | ChangeType$ Card.namedDovin; Architect of Law | ChangeNum$ 1 | Optional$ True
|
||||
SVar:DBSearch:DB$ ChangeZone | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Card.namedDovin; Architect of Law | ChangeNum$ 1 | Optional$ True
|
||||
DeckNeeds:Name$Dovin, Architect of Law
|
||||
Oracle:Put up to one target tapped creature on top of its owner's library. You may search your library and/or graveyard for a card named Dovin, Architect of Law, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
|
||||
@@ -4,6 +4,6 @@ Types:Creature Elk Spirit
|
||||
PT:3/3
|
||||
K:Trample
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSearch | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library and/or graveyard for a card named Vivien, Nature's Avenger, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
SVar:TrigSearch:DB$ ChangeZone | Origin$ Library,Graveyard | Destination$ Hand | ChangeType$ Card.namedVivien; Nature's Avenger | ChangeNum$ 1 | Optional$ True
|
||||
SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Card.namedVivien; Nature's Avenger | ChangeNum$ 1 | Optional$ True
|
||||
DeckHints:Name$Vivien, Nature's Avenger
|
||||
Oracle:Trample\nWhen Ethereal Elk enters the battlefield, you may search your library and/or graveyard for a card named Vivien, Nature's Avenger, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Gideon's Battle Cry
|
||||
ManaCost:2 W W
|
||||
Types:Sorcery
|
||||
A:SP$ PutCounterAll | Cost$ 2 W W | ValidCards$ Creature.YouCtrl | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBSearch | SpellDescription$ Put a +1/+1 counter on each creature you control.
|
||||
SVar:DBSearch:DB$ ChangeZone | Origin$ Library,Graveyard | Destination$ Hand | ChangeType$ Card.namedGideon; the Oathsworn | ChangeNum$ 1
|
||||
SVar:DBSearch:DB$ ChangeZone | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Card.namedGideon; the Oathsworn | ChangeNum$ 1 | Optional$ True
|
||||
DeckHas:Ability$Counters
|
||||
DeckHints:Name$Gideon, the Oathsworn
|
||||
Oracle:Put a +1/+1 counter on each creature you control. You may search your library and/or graveyard for a card named Gideon, the Oathsworn, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Gideon's Resolve
|
||||
ManaCost:4 W
|
||||
Types:Enchantment
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSearch | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library and/or graveyard for a card named Gideon, Martial Paragon, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
SVar:TrigSearch:DB$ ChangeZone | Origin$ Library,Graveyard | Destination$ Hand | ChangeType$ Card.namedGideon; Martial Paragon | ChangeNum$ 1 | Optional$ True
|
||||
SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Card.namedGideon; Martial Paragon | ChangeNum$ 1 | Optional$ True
|
||||
S:Mode$ Continuous | Affected$ Creature.YouCtrl | AddPower$ 1 | AddToughness$ 1 | Description$ Creatures you control get +1/+1.
|
||||
SVar:PlayMain1:TRUE
|
||||
DeckHints:Name$Gideon, Martial Paragon
|
||||
|
||||
@@ -2,9 +2,9 @@ Name:Goblin Goon
|
||||
ManaCost:3 R
|
||||
Types:Creature Goblin Mutant
|
||||
PT:6/6
|
||||
S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ CARDNAME can't attack. & CARDNAME can't block. | CheckSVar$ X | SVarCompare$ LEY | Description$ CARDNAME can't attack unless you control more creatures than defending player. CARDNAME can't block unless you control more creatures than attacking player.
|
||||
S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefender$ hasFewerCreaturesInPlayThanYou | Description$ CARDNAME can't attack unless you control more creatures than defending player.
|
||||
S:Mode$ Continuous | Affected$ Card.Self | AddHiddenKeyword$ CARDNAME can't block. | CheckSVar$ Y | SVarCompare$ GEX | Description$ CARDNAME can't block unless you control more creatures than attacking player.
|
||||
SVar:X:Count$Valid Creature.YouCtrl
|
||||
SVar:Y:Count$Valid Creature.YouDontCtrl
|
||||
SVar:Y:Count$Valid Creature.ActivePlayerCtrl
|
||||
SVar:BuffedBy:Creature
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/goblin_goon.jpg
|
||||
Oracle:Goblin Goon can't attack unless you control more creatures than defending player.\nGoblin Goon can't block unless you control more creatures than attacking player.
|
||||
|
||||
@@ -5,6 +5,6 @@ PT:3/2
|
||||
K:Flying
|
||||
K:Vigilance
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSearch | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library and/or graveyard for a card named Ajani, Valiant it, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
SVar:TrigSearch:DB$ ChangeZone | Origin$ Library,Graveyard | Destination$ Hand | ChangeType$ Card.namedAjani; Inspiring Leader | ChangeNum$ 1 | Optional$ True
|
||||
SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Card.namedAjani; Inspiring Leader | ChangeNum$ 1 | Optional$ True
|
||||
DeckHints:Name$Ajani, Inspiring Leader
|
||||
Oracle:Flying, vigilance\nWhen Goldmane Griffin enters the battlefield, you may search your library and/or graveyard for a card named Ajani, Inspiring Leader, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Grasping Current
|
||||
ManaCost:4 U
|
||||
Types:Sorcery
|
||||
A:SP$ ChangeZone | Cost$ 4 U | TargetMin$ 0 | TargetMax$ 2 | ValidTgts$ Creature | TgtPrompt$ Select up to two target creatures | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBSearch | SpellDescription$ Return up to two target creatures to their owner's hand.
|
||||
SVar:DBSearch:DB$ ChangeZone | Origin$ Library,Graveyard | Destination$ Hand | ChangeType$ Card.namedJace; Ingenious Mind-Mage | ChangeNum$ 1 | SpellDescription$ Search your library and/or graveyard for a card named Jace, Ingenious Mind-Mage, reveal it, and put it into your hand. If you searched your library this way, shuffle it.
|
||||
SVar:DBSearch:DB$ ChangeZone | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Card.namedJace; Ingenious Mind-Mage | ChangeNum$ 1 | SpellDescription$ Search your library and/or graveyard for a card named Jace, Ingenious Mind-Mage, reveal it, and put it into your hand. If you searched your library this way, shuffle it.
|
||||
DeckHints:Name$Jace, Ingenious Mind-Mage
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/grasping_current.jpg
|
||||
Oracle:Return up to two target creatures to their owner's hand.\nSearch your library and/or graveyard for a card named Jace, Ingenious Mind-Mage, reveal it, and put it into your hand. If you searched your library this way, shuffle it.
|
||||
|
||||
@@ -2,6 +2,6 @@ Name:Jace's Ruse
|
||||
ManaCost:3 U U
|
||||
Types:Sorcery
|
||||
A:SP$ ChangeZone | Cost$ 3 U U | TargetMin$ 0 | TargetMax$ 2 | ValidTgts$ Creature | TgtPrompt$ Select target creature | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBSearch | SpellDescription$ Return up to two target creatures to their owner's hand. You may search your library and/or graveyard for a card named Jace, Arcane Wizards, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
SVar:DBSearch:DB$ChangeZone | Origin$ Library,Graveyard | Destination$ Hand | ChangeType$ Card.namedJace; Arcane Strategist | ChangeNum$ 1 | Optional$ True
|
||||
SVar:DBSearch:DB$ChangeZone | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Card.namedJace; Arcane Strategist | ChangeNum$ 1 | Optional$ True
|
||||
DeckHints:Name$Jace, Arcane Strategist
|
||||
Oracle:Return up to two target creatures to their owner's hand. You may search your library and/or graveyard for a card named Jace, Arcane Strategist, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Liberating Combustion
|
||||
ManaCost:4 R
|
||||
Types:Sorcery
|
||||
A:SP$ DealDamage | Cost$ 4 R | ValidTgts$ Creature | NumDmg$ 6 | SubAbility$ DBSearch | SpellDescription$ CARDNAME deals 6 damage to target creature. You may search your library and/or graveyard for a card named Chandra, Pyrogenius, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
SVar:DBSearch:DB$ ChangeZone | Origin$ Library,Graveyard | Destination$ Hand | ChangeType$ Card.namedChandra; Pyrogenius | ChangeNum$ 1 | Optional$ True
|
||||
SVar:DBSearch:DB$ ChangeZone | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Card.namedChandra; Pyrogenius | ChangeNum$ 1 | Optional$ True
|
||||
DeckHints:Name$Chandra, Pyrogenius
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/liberating_combustion.jpg
|
||||
Oracle:Liberating Combustion deals 6 damage to target creature. You may search your library and/or graveyard for a card named Chandra, Pyrogenius, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Liliana's Influence
|
||||
ManaCost:4 B B
|
||||
Types:Sorcery
|
||||
A:SP$ PutCounterAll | Cost$ 4 B B | ValidCards$ Creature.YouDontCtrl | CounterType$ M1M1 | CounterNum$ 1 | SubAbility$ DBShuffle | IsCurse$ True | SubAbility$ DBSearch | SpellDescription$ Put a -1/-1 counter on each creature you don't control. You may search your library and/or graveyard for a card named Liliana, Death Wielder, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
SVar:DBSearch:DB$ ChangeZone | Origin$ Library,Graveyard | Destination$ Hand | ChangeType$ Card.namedLiliana; Death Wielder | ChangeNum$ 1 | Optional$ True
|
||||
SVar:DBSearch:DB$ ChangeZone | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Card.namedLiliana; Death Wielder | ChangeNum$ 1 | Optional$ True
|
||||
DeckHints:Name$Liliana, Death Wielder
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/lilianas_influence.jpg
|
||||
Oracle:Put a -1/-1 counter on each creature you don't control. You may search your library and/or graveyard for a card named Liliana, Death Wielder, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
@@ -2,9 +2,9 @@ Name:Mogg Toady
|
||||
ManaCost:1 R
|
||||
Types:Creature Goblin
|
||||
PT:2/2
|
||||
S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ CARDNAME can't attack. & CARDNAME can't block. | CheckSVar$ X | SVarCompare$ LEY | References$ X,Y | Description$ CARDNAME can't attack unless you control more creatures than defending player.CARDNAME can't block unless you control more creatures than attacking player.
|
||||
S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefender$ hasFewerCreaturesInPlayThanYou | Description$ CARDNAME can't attack unless you control more creatures than defending player.
|
||||
S:Mode$ Continuous | Affected$ Card.Self | AddHiddenKeyword$ CARDNAME can't block. | CheckSVar$ Y | SVarCompare$ GEX | Description$ CARDNAME can't block unless you control more creatures than attacking player.
|
||||
SVar:X:Count$Valid Creature.YouCtrl
|
||||
SVar:Y:Count$Valid Creature.YouDontCtrl
|
||||
SVar:Y:Count$Valid Creature.ActivePlayerCtrl
|
||||
SVar:BuffedBy:Creature
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/mogg_toady.jpg
|
||||
Oracle:Mogg Toady can't attack unless you control more creatures than defending player.\nMogg Toady can't block unless you control more creatures than attacking player.
|
||||
|
||||
@@ -2,8 +2,8 @@ Name:Monstrous Hound
|
||||
ManaCost:3 R
|
||||
Types:Creature Hound
|
||||
PT:4/4
|
||||
S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ CARDNAME can't attack. & CARDNAME can't block. | CheckSVar$ X | SVarCompare$ LEY | References$ X,Y | Description$ CARDNAME can't attack unless you control more lands than defending player. CARDNAME can't block unless you control more lands than attacking player.
|
||||
S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefender$ hasFewerLandsInPlayThanYou | Description$ CARDNAME can’t attack unless you control more lands than defending player.
|
||||
S:Mode$ Continuous | Affected$ Card.Self | AddHiddenKeyword$ CARDNAME can't block. | CheckSVar$ Y | SVarCompare$ GEX | Description$ CARDNAME can't block unless you control more lands than attacking player.
|
||||
SVar:X:Count$Valid Land.YouCtrl
|
||||
SVar:Y:Count$Valid Land.YouDontCtrl
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/monstrous_hound.jpg
|
||||
SVar:Y:Count$Valid Land.ActivePlayerCtrl
|
||||
Oracle:Monstrous Hound can't attack unless you control more lands than defending player.\nMonstrous Hound can't block unless you control more lands than attacking player.
|
||||
|
||||
@@ -3,6 +3,6 @@ ManaCost:1 W U
|
||||
Types:Legendary Creature Human Cleric
|
||||
PT:2/2
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSearch | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library and/or graveyard for a card named Teferi, Timebender, reveal it, then put it into your hand. If you searched your library this way, shuffle it.
|
||||
SVar:TrigSearch:DB$ ChangeZone | Origin$ Library,Graveyard | Destination$ Hand | ChangeType$ Card.namedTeferi; Timebender | ChangeNum$ 1 | Optional$ True
|
||||
SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Card.namedTeferi; Timebender | ChangeNum$ 1 | Optional$ True
|
||||
DeckHints:Name$Teferi, Timebender
|
||||
Oracle:When Niambi, Faithful Healer enters the battlefield, you may search your library and/or graveyard for a card named Teferi, Timebender, reveal it, then put it into your hand. If you searched your library this way, shuffle it.
|
||||
|
||||
@@ -2,6 +2,6 @@ Name:Oko's Hospitality
|
||||
ManaCost:3 G U
|
||||
Types:Instant
|
||||
A:SP$ AnimateAll | Cost$ 3 G U | ValidCards$ Creature.YouCtrl | Power$ 3 | Toughness$ 3 | SubAbility$ DBSearch | SpellDescription$ Creatures you control have base power and toughness 3/3 until end of turn. You may search your library and/or graveyard for a card named Oko, the Trickster, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
SVar:DBSearch:DB$ ChangeZone | Origin$ Library,Graveyard | Destination$ Hand | ChangeType$ Card.namedOko; the Trickster | ChangeNum$ 1 | Optional$ True
|
||||
SVar:DBSearch:DB$ ChangeZone | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Card.namedOko; the Trickster | ChangeNum$ 1 | Optional$ True
|
||||
DeckNeeds:Name$Oko, the Trickster
|
||||
Oracle:Creatures you control have base power and toughness 3/3 until end of turn. You may search your library and/or graveyard for a card named Oko, the Trickster, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
|
||||
@@ -2,6 +2,6 @@ Name:Ral's Dispersal
|
||||
ManaCost:3 U U
|
||||
Types:Instant
|
||||
A:SP$ ChangeZone | Cost$ 3 U U | ValidTgts$ Creature | TgtPrompt$ Select target creature | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBSearch | SpellDescription$ Return target creature to its owner's hand. You may search you library and/or graveyard for a card named, Ral, Caller of Storms and put it in your hand. If you search your library this way, shuffle it.
|
||||
SVar:DBSearch:DB$ ChangeZone | Origin$ Library,Graveyard | Destination$ Hand | ChangeType$ Card.namedRal; Caller of Storms | ChangeNum$ 1 | Optional$ True
|
||||
SVar:DBSearch:DB$ ChangeZone | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Card.namedRal; Caller of Storms | ChangeNum$ 1 | Optional$ True
|
||||
DeckNeeds:Name$Ral, Caller of Storms
|
||||
Oracle:Return target creature to its owner's hand. You may search you library and/or graveyard for a card named Ral, Caller of Storms, reveal it, and put it in to your hand. If you search your library this way, shuffle it.
|
||||
|
||||
@@ -2,6 +2,6 @@ Name:Rhythmic Water Vortex
|
||||
ManaCost:3 U U
|
||||
Types:Sorcery
|
||||
A:SP$ ChangeZone | Cost$ 3 U U | TargetMin$ 0 | TargetMax$ 2 | ValidTgts$ Creature | TgtPrompt$ Select up to two target creatures | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBSearch | SpellDescription$ Return up to two target creatures to their owner's hand.
|
||||
SVar:DBSearch:DB$ ChangeZone | Origin$ Library,Graveyard | Destination$ Hand | ChangeType$ Card.namedMu Yanling | ChangeNum$ 1 | SpellDescription$ Search your library and/or graveyard for a card named Mu Yanling, reveal it, and put it into your hand. If you searched your library this way, shuffle it.
|
||||
SVar:DBSearch:DB$ ChangeZone | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Card.namedMu Yanling | ChangeNum$ 1 | SpellDescription$ Search your library and/or graveyard for a card named Mu Yanling, reveal it, and put it into your hand. If you searched your library this way, shuffle it.
|
||||
DeckHints:Name$Mu Yanling
|
||||
Oracle:Return up to two target creatures to their owner's hand.\nSearch your library and/or graveyard for a card named Mu Yanling, reveal it, and put it into your hand. If you searched your library this way, shuffle it.
|
||||
|
||||
@@ -3,6 +3,6 @@ ManaCost:4 R
|
||||
Types:Creature Human Knight
|
||||
PT:5/2
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSearch | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library and/or graveyard for a card named Rowan, Fearless Sparkmage, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
SVar:TrigSearch:DB$ ChangeZone | Origin$ Library,Graveyard | Destination$ Hand | ChangeType$ Card.namedRowan; Fearless Sparkmage | ChangeNum$ 1 | Optional$ True
|
||||
SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Card.namedRowan; Fearless Sparkmage | ChangeNum$ 1 | Optional$ True
|
||||
DeckHints:Name$Rowan, Fearless Sparkmage
|
||||
Oracle:When Rowan's Stalwarts enters the battlefield, you may search your library and/or graveyard for a card named Rowan, Fearless Sparkmage, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
|
||||
@@ -3,6 +3,6 @@ ManaCost:3 B B
|
||||
Types:Creature Vampire
|
||||
PT:4/2
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSearch | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library and/or graveyard for a card named flying, Vampire CARDNAME, and put it into your hand. If you search your library this way, shuffle it.
|
||||
SVar:TrigSearch:DB$ ChangeZone | Origin$ Library,Graveyard | Destination$ Hand | ChangeType$ Card.namedSorin; Vampire Lord | ChangeNum$ 1 | Optional$ True
|
||||
SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Card.namedSorin; Vampire Lord | ChangeNum$ 1 | Optional$ True
|
||||
DeckHints:Name$Sorin, Vampire Lord
|
||||
Oracle:When Sorin's Guide enters the battlefield, you may search your library and/or graveyard for a card named Sorin, Vampire Lord, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
|
||||
@@ -3,7 +3,7 @@ ManaCost:3 R W
|
||||
Types:Creature Dinosaur
|
||||
PT:4/4
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSearch | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library and/or graveyard for a card named Huatli, Dinosaur Knight, reveal it, then put it into your hand. If you search your library this way, shuffle it.
|
||||
SVar:TrigSearch:DB$ ChangeZone | Origin$ Library,Graveyard | Destination$ Hand | ChangeType$ Card.namedHuatli; Dinosaur Knight | ChangeNum$ 1 | Optional$ True
|
||||
SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Card.namedHuatli; Dinosaur Knight | ChangeNum$ 1 | Optional$ True
|
||||
DeckHints:Name$Huatli, Dinosaur Knight
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/sun_blessed_mount.jpg
|
||||
Oracle:When Sun-Blessed Mount enters the battlefield, you may search your library and/or graveyard for a card named Huatli, Dinosaur Knight, reveal it, then put it into your hand. If you searched your library this way, shuffle it.
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Tezzeret's Betrayal
|
||||
ManaCost:3 U B
|
||||
Types:Sorcery
|
||||
A:SP$ Destroy | Cost$ 3 U B | ValidTgts$ Creature | TgtPrompt$ Select target creature | SubAbility$ DBSearch | SpellDescription$ Destroy target creature. You may search your library and/or graveyard for a card named Tezzeret, Master of Metal, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
SVar:DBSearch:DB$ ChangeZone | Origin$ Library,Graveyard | Destination$ Hand | ChangeType$ Card.namedTezzeret; Master of Metal | ChangeNum$ 1 | Optional$ True
|
||||
SVar:DBSearch:DB$ ChangeZone | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Card.namedTezzeret; Master of Metal | ChangeNum$ 1 | Optional$ True
|
||||
DeckHints:Name$Tezzeret, Master of Metal
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/tezzerets_betrayal.jpg
|
||||
Oracle:Destroy target creature. You may search your library and/or graveyard for a card named Tezzeret, Master of Metal, reveal it, and put it into your hand. If you search your library this way, shuffle it.
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
Name:Underworld Dreams
|
||||
ManaCost:B B B
|
||||
Types:Enchantment
|
||||
T:Mode$ Drawn | ValidCard$ Card.OppOwn | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ Whenever an opponent draws a card, CARDNAME deals 1 damage to them.
|
||||
T:Mode$ Drawn | ValidCard$ Card.OppOwn | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ Whenever an opponent draws a card, CARDNAME deals 1 damage to that player.
|
||||
SVar:TrigDamage:DB$DealDamage | Defined$ TriggeredPlayer | NumDmg$ 1
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/underworld_dreams.jpg
|
||||
Oracle:Whenever an opponent draws a card, Underworld Dreams deals 1 damage to them.
|
||||
Oracle:Whenever an opponent draws a card, Underworld Dreams deals 1 damage to that player.
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
Name:Allure of the Unknown
|
||||
ManaCost:3 B R
|
||||
Types:Sorcery
|
||||
A:SP$ ChoosePlayer | Cost$ 3 B R | Defined$ You | Choices$ Player.Opponent | SubAbility$ DBDig | ChoiceTitle$ Choose an opponent | SpellDescription$ Reveal the top six cards of your library. An opponent exiles a nonland card from among them, then you put the rest into your hand. That opponent may cast the exiled card without paying its mana cost. | StackDescription$ SpellDescription
|
||||
SVar:DBDig:DB$ Dig | DigNum$ 6 | Reveal$ True | Choser$ Player.Chosen | ChangeNum$ 1 | ChangeValid$ Card.nonLand | AILogic$ BestCard | DestinationZone$ Exile | DestinationZone2$ Hand | RememberChanged$ True | SubAbility$ DBPlay
|
||||
SVar:DBPlay:DB$ Play | WithoutManaCost$ True | Controller$ Player.Chosen | Optional$ True | OptionalDecider$ Player.Chosen | ValidZone$ Exile | Valid$ Card.IsRemembered | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenPlayer$ True
|
||||
Oracle:Reveal the top six cards of your library. An opponent exiles a nonland card from among them, then you put the rest into your hand. That opponent may cast the exiled card without paying its mana cost.
|
||||
@@ -2,7 +2,7 @@ Name:Ashiok, Nightmare Muse
|
||||
ManaCost:3 U B
|
||||
Types:Legendary Planeswalker Ashiok
|
||||
Loyalty:5
|
||||
A:AB$ Token | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | TokenAmount$ 1 | TokenScript$ ub_2_3_nightmare_mill | TokenOwner$ You | LegacyImage$ ub 2 3 Nightmare mill thb | SubAbility$ DBDraw | SpellDescription$ Create a 2/3 blue and black Nightmare creature token with "Whenever this creature attacks or blocks, each opponent exiles the top two cards of their library."
|
||||
A:AB$ Token | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | TokenAmount$ 1 | TokenScript$ ub_2_3_nightmare_mill | TokenOwner$ You | LegacyImage$ ub 2 3 Nightmare mill thb | SpellDescription$ Create a 2/3 blue and black Nightmare creature token with "Whenever this creature attacks or blocks, each opponent exiles the top two cards of their library."
|
||||
A:AB$ ChangeZone | Cost$ SubCounter<3/LOYALTY> | Planeswalker$ True | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBExile | SpellDescription$ Return target nonland permanent to its owner’s hand, then that player exiles a card from their hand.
|
||||
SVar:DBExile:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | ChangeType$ Card | ChangeNum$ 1 | Mandatory$ True | DefinedPlayer$ TargetedOwner | Chooser$ TargetedOwner
|
||||
A:AB$ Play | Cost$ SubCounter<7/LOYALTY> | Planeswalker$ True | Ultimate$ True | Valid$ Card.nonLand+faceUp+OwnedBy Player.Opponent | ValidZone$ Exile | WithoutManaCost$ True | Amount$ 3 | Optional$ True | SpellDescription$ You may cast up to three face-up cards your opponents own from exile without paying their mana costs.
|
||||
|
||||
9
forge-gui/res/cardsfolder/upcoming/ashiok_sculptor_of_fears.txt
Executable file
9
forge-gui/res/cardsfolder/upcoming/ashiok_sculptor_of_fears.txt
Executable file
@@ -0,0 +1,9 @@
|
||||
Name:Ashiok, Sculptor of Fears
|
||||
ManaCost:4 U B
|
||||
Types:Legendary Planeswalker Ashiok
|
||||
Loyalty:4
|
||||
A:AB$ Draw | Cost$ AddCounter<2/LOYALTY> | Planeswalker$ True | NumCards$ 1 | SubAbility$ DBMill | SpellDescription$ Draw a card. Each player puts the top two cards of their library into their graveyard.
|
||||
SVar:DBMill:DB$ Mill | Defined$ Player | NumCards$ 2
|
||||
A:AB$ ChangeZone | Cost$ SubCounter<5/LOYALTY> | Planeswalker$ True | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | TgtPrompt$ Select target creature card in a graveyard | ValidTgts$ Creature | SpellDescription$ Put target creature card from a graveyard onto the battlefield under your control.
|
||||
A:AB$ GainControl | Cost$ SubCounter<11/LOYALTY> | Planeswalker$ True | Ultimate$ True | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | AllValid$ Creature.TargetedPlayerCtrl | NewController$ You | StackDescription$ SpellDescription | SpellDescription$ Gain control of all creatures target opponent controls.
|
||||
Oracle:+2: Draw a card. Each player puts the top two cards of their library into their graveyard.\n−5: Put target creature card from a graveyard onto the battlefield under you control.\n−11: Gain control of all creatures target opponent controls.
|
||||
11
forge-gui/res/cardsfolder/upcoming/chainweb_aracnir.txt
Normal file
11
forge-gui/res/cardsfolder/upcoming/chainweb_aracnir.txt
Normal file
@@ -0,0 +1,11 @@
|
||||
Name:Chainweb Aracnir
|
||||
ManaCost:G
|
||||
Types:Creature Spider
|
||||
PT:1/2
|
||||
K:Reach
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDamage | TriggerDescription$ When CARDNAME enters the battlefield, it deals damage equal to its power to target creature with flying an opponent controls.
|
||||
SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Creature.OppCtrl+withFlying | TgtPrompt$ Select target creature with flying an opponent controls | NumDmg$ X | References$ X
|
||||
SVar:X:Count$CardPower
|
||||
K:Escape:3 G G ExileFromGrave<4/Card.Other>
|
||||
K:etbCounter:P1P1:3:ValidCard$ Card.Self+escaped:CARDNAME escapes with three +1/+1 counters on it.
|
||||
Oracle:Reach\nWhen Chainweb Aracnir enters the battlefield, it deals damage equal to its power to target creature with flying an opponent controls.\nEscape — {2}{G}{G}, Exile four other cards from your graveyard. (You may cast this card from your graveyard for its escape cost).\nChainweb Aracnir escapes with three +1/+1 counters on it.
|
||||
@@ -0,0 +1,5 @@
|
||||
Name:Deathbellow War Cry
|
||||
ManaCost:5 R R R
|
||||
Types:Sorcery
|
||||
A:SP$ ChangeZone | Cost$ 5 R R R | Origin$ Library | Destination$ Battlefield | ChangeType$ Creature.Minotaur | ChangeNum$ 4 | DifferentNames$ True | SpellDescription$ Search your library for up to four Minotaur creature cards with different names, put them onto the battlefield, then shuffle your library.
|
||||
Oracle:Search your library for up to four Minotaur creature cards with different names, put them onto the battlefield, then shuffle your library.
|
||||
10
forge-gui/res/cardsfolder/upcoming/demon_of_loathing.txt
Normal file
10
forge-gui/res/cardsfolder/upcoming/demon_of_loathing.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
Name:Demon of Loathing
|
||||
ManaCost:5 B B
|
||||
Types:Creature Demon
|
||||
PT:7/7
|
||||
K:Flying
|
||||
K:Trample
|
||||
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigSac | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, that player sacrifices a creature.
|
||||
SVar:TrigSac:DB$Sacrifice | Defined$ TriggeredTarget | SacValid$ Creature
|
||||
SVar:MustBeBlocked:True
|
||||
Oracle:Flying, trample\nWhenever Demon of Loathing deals combat damage to a player, that player sacrifices a creature.
|
||||
9
forge-gui/res/cardsfolder/upcoming/elspeth_suns_nemesis.txt
Executable file
9
forge-gui/res/cardsfolder/upcoming/elspeth_suns_nemesis.txt
Executable file
@@ -0,0 +1,9 @@
|
||||
Name:Elspeth, Sun's Nemesis
|
||||
ManaCost:2 W W
|
||||
Types:Legendary Planeswalker Elspeth
|
||||
Loyalty:5
|
||||
A:AB$ Pump | Cost$ SubCounter<1/LOYALTY> | Planeswalker$ True | TargetMin$ 0 | TargetMax$ 2 | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | NumAtt$ +2 | NumDef$ +1 | SpellDescription$ Up to two target creatures you control each get +2/+1 until end of turn.
|
||||
A:AB$ Token | Cost$ SubCounter<2/LOYALTY> | Planeswalker$ True | TokenAmount$ 2 | TokenScript$ w_1_1_human_soldier | TokenOwner$ You | LegacyImage$ w 1 1 human soldier the | SpellDescription$ Create two 1/1 white Human Soldier creature tokens.
|
||||
A:AB$ GainLife | Cost$ SubCounter<3/LOYALTY> | Planeswalker$ True | Ultimate$ True | LifeAmount$ 5 | SpellDescription$ You gain 5 life.
|
||||
K:Escape:4 W W ExileFromGrave<4/Card.Other>
|
||||
Oracle:−1: Up to two target creatures you control each get +2/+1 until end of turn.\n−2: Create two 1/1 white Human Soldier creature tokens.\n−3: You gain 5 life.\nEscape—{4}{W}{W}, Exile four other cards from your graveyard. (You may cast this card from your graveyard for its escape cost.)
|
||||
11
forge-gui/res/cardsfolder/upcoming/elspeth_undaunted_hero.txt
Executable file
11
forge-gui/res/cardsfolder/upcoming/elspeth_undaunted_hero.txt
Executable file
@@ -0,0 +1,11 @@
|
||||
Name:Elspeth, Undaunted Hero
|
||||
ManaCost:2 W W W
|
||||
Types:Legendary Planeswalker Elspeth
|
||||
Loyalty:5
|
||||
A:AB$ PutCounter | Cost$ AddCounter<2/LOYALTY> | Planeswalker$ True | CounterNum$ 1 | CounterType$ P1P1 | TargetMin$ 0 | TargetMax$ 2 | ValidTgts$ Creature | TgtPrompt$ Select target creatures | SpellDescription$ Put a +1/+1 counter on each of up to two target creatures.
|
||||
DeckHas:Ability$Counters
|
||||
A:AB$ ChangeZone | Cost$ SubCounter<2/LOYALTY> | Planeswalker$ True | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Battlefield | ChangeType$ Card.namedSunlit Hoplite | ChangeNum$ 1 | StackDescription$ SpellDescription |SpellDescription$ Search your library and/or graveyard for a card named Sunlit Hoplite and put it onto the battlefield. If you search your library this way, shuffle it.
|
||||
DeckHints:Name$Sunlit Hoplite
|
||||
A:AB$ PumpAll | Cost$ SubCounter<8/LOYALTY> | Planeswalker$ True | Ultimate$ True | ValidCards$ Creature.YouCtrl | NumAtt$ +X | NumDef$ +X | References$ X | KW$ Flying | SpellDescription$ Until end of turn, creatures you control gain flying and get +X/+X, where X is your devotion to white.
|
||||
SVar:X:Count$Devotion.White
|
||||
Oracle:+2: Put a +1/+1 counter on each of up to two target creatures.\n−2: Search your library and/or graveyard for a card named Sunlit Hoplite and put it onto the battlefield. If you search your library this way, shuffle it.\n−8: Until end of turn, creatures you control gain flying and get +X/+X, where X is your devotion to white.
|
||||
6
forge-gui/res/cardsfolder/upcoming/fruit_of_tizerus.txt
Normal file
6
forge-gui/res/cardsfolder/upcoming/fruit_of_tizerus.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
Name:Fruit of Tizerus
|
||||
ManaCost:B
|
||||
Types:Sorcery
|
||||
A:SP$ LoseLife | Cost$ B | ValidTgts$ Player | TgtPrompt$ Select a player | LifeAmount$ 2 | SpellDescription$ Target player loses 2 life.
|
||||
K:Escape:3 B ExileFromGrave<3/Card.Other>
|
||||
Oracle:Target player loses 2 life.\nEscape — {3}{B}, Exile three other cards from your graveyard. (You may cast this card from your graveyard for its escape cost).
|
||||
@@ -0,0 +1,12 @@
|
||||
Name:Gallia of the Endless Dance
|
||||
ManaCost:R G
|
||||
Types:Legendary Creature Satyr
|
||||
PT:2/2
|
||||
K:Haste
|
||||
S:Mode$ Continuous | Affected$ Card.Satyr+Other+YouCtrl | AddPower$ 1 | AddToughness$ 1 | AddKeyword$ Haste | Description$ Other Satyrs you control get +1/+1 and have haste.
|
||||
T:Mode$ AttackersDeclared | Execute$ TrigDiscard | CheckSVar$ AttackerCount | SVarCompare$ GE3 | NoResolvingCheck$ True | TriggerZones$ Battlefield | AttackingPlayer$ You | OptionalDecider$ You | TriggerDescription$ Whenever you attack with three or more creatures, you may discard a card at random. If you do, draw two cards.
|
||||
SVar:AttackerCount:Count$Valid Creature.attacking
|
||||
SVar:TrigDiscard:DB$ Discard | Defined$ You | NumCards$ 1 | Mode$ Random | RememberDiscarded$ True | SubAbility$ DBDraw
|
||||
SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 2 | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ GE1 | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
Oracle:Haste\nOther Satyrs you control get +1/+1 and have haste.\nWhenever you attack with three or more creatures, you may discard a card at random. If you do, draw two cards.
|
||||
11
forge-gui/res/cardsfolder/upcoming/grasping_giant.txt
Normal file
11
forge-gui/res/cardsfolder/upcoming/grasping_giant.txt
Normal file
@@ -0,0 +1,11 @@
|
||||
Name:Grasping Giant
|
||||
ManaCost:5 W
|
||||
Types:Creature Giant
|
||||
PT:5/7
|
||||
K:Vigilance
|
||||
T:Mode$ AttackerBlockedByCreature | ValidCard$ Card.Self | ValidBlocker$ Creature | Execute$ TrigExile | TriggerDescription$ Whenever CARDNAME becomes blocked by a creature, exile that creature until CARDNAME leaves the battlefield.
|
||||
SVar:TrigExile:DB$ ChangeZone | Defined$ TriggeredBlocker | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True
|
||||
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigReturn | Secondary$ True | TriggerDescription$ Whenever CARDNAME becomes blocked by a creature, exile that creature until CARDNAME leaves the battlefield.
|
||||
SVar:TrigReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
Oracle:Vigilance\nWhenever Grasping Giant becomes blocked by a creature, exile that creature until Grasping Giant leaves the battlefield.
|
||||
9
forge-gui/res/cardsfolder/upcoming/hero_of_the_winds.txt
Executable file
9
forge-gui/res/cardsfolder/upcoming/hero_of_the_winds.txt
Executable file
@@ -0,0 +1,9 @@
|
||||
Name:Hero of the Winds
|
||||
ManaCost:3 W
|
||||
Types:Creature Human Soldier
|
||||
PT:1/4
|
||||
K:Flying
|
||||
T:Mode$ SpellCast | ValidActivatingPlayer$ You | TargetsValid$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigPumpAll | TriggerDescription$ Whenever you cast a spell that targets CARDNAME, creatures you control get +1/+0 until end of turn.
|
||||
SVar:TrigPumpAll:DB$ PumpAll | ValidCards$ Creature.YouCtrl | NumAtt$ +1
|
||||
SVar:BuffedBy:Card
|
||||
Oracle:Flying\nWhenever you cast a spell that targets Hero of the Winds, creatures you control get +1/+0 until end of turn.
|
||||
@@ -2,8 +2,8 @@ Name:Heroes of the Revel
|
||||
ManaCost:4 R
|
||||
Types:Creature Satyr Soldier
|
||||
PT:4/4
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a 2/2 red Satyr creature token with "This creature can't block."
|
||||
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ r_2_2_satyr_noblock | TokenOwner$ You | LegacyImage$ r 2 2 satyr noblock thb
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a 1/1 red Satyr creature token with "This creature can't block."
|
||||
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ r_1_1_satyr_noblock | TokenOwner$ You | LegacyImage$ r 1 1 satyr noblock thb
|
||||
T:Mode$ SpellCast | ValidActivatingPlayer$ You | TargetsValid$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever you cast a spell that targets CARDNAME, creatures you control get +1/+0 until end of turn.
|
||||
SVar:TrigPump:DB$ PumpAll | ValidCards$ Creature.YouCtrl | NumAtt$ +1
|
||||
Oracle:When Heroes of the Revel enters the battlefield, create a 2/2 red Satyr creature token with "This creature can't block."\nWhenever you cast a spell that targets Heroes of the Revel, creatures you control get +1/+0 until end of turn.
|
||||
Oracle:When Heroes of the Revel enters the battlefield, create a 1/1 red Satyr creature token with "This creature can't block."\nWhenever you cast a spell that targets Heroes of the Revel, creatures you control get +1/+0 until end of turn.
|
||||
|
||||
7
forge-gui/res/cardsfolder/upcoming/ironscale_hydra.txt
Normal file
7
forge-gui/res/cardsfolder/upcoming/ironscale_hydra.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
Name:Ironscale Hydra
|
||||
ManaCost:3 G G
|
||||
Types:Creature Hydra
|
||||
PT:5/5
|
||||
R:Event$ DamageDone | ActiveZones$ Battlefield | ValidTarget$ Card.Self | ValidSource$ Creature | IsCombat$ True | ReplaceWith$ Counters | Description$ If a creature would deal combat damage to CARDNAME, prevent that damage and put a +1/+1 counter on CARDNAME.
|
||||
SVar:Counters:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1
|
||||
Oracle:If a creature would deal combat damage to Ironscale Hydra, prevent that damage and put a +1/+1 counter on Ironscale Hydra.
|
||||
12
forge-gui/res/cardsfolder/upcoming/medomais_prophecy.txt
Normal file
12
forge-gui/res/cardsfolder/upcoming/medomais_prophecy.txt
Normal file
@@ -0,0 +1,12 @@
|
||||
Name:Medomai's Prophecy
|
||||
ManaCost:1 U
|
||||
Types:Enchantment Saga
|
||||
K:Saga:4:DBScry,DBNameCard,DBEffect,DBLook
|
||||
SVar:DBScry:DB$ Scry | ScryNum$ 2 | SpellDescription$ Scry 2.
|
||||
SVar:DBNameCard:DB$ NameCard | SpellDescription$ Choose a card name.
|
||||
SVar:DBEffect:DB$ Effect | Name$ Medomai's Prophecy Effect | Triggers$ NamedCardCast | SVars$ NamedCardCast,TrigDraw,ExileEffect | SpellDescription$ When you cast a spell with the chosen name for the first time this turn, draw two cards.
|
||||
SVar:DBLook:DB$ Dig | Defined$ Player | DigNum$ 1 | DestinationZone$ Library | LibraryPosition$ 0 | SpellDescription$ Look at the top card of each player's library.
|
||||
SVar:NamedCardCast:Mode$ SpellCast | ValidCard$ Card.NamedCard | ValidActivatingPlayer$ You | TriggerZones$ Command | Execute$ TrigDraw | TriggerDescription$ When you cast a spell with the chosen name for the first time this turn, draw two cards.
|
||||
SVar:TrigDraw:DB$ Draw | NumCards$ 2 | SubAbility$ ExileEffect
|
||||
SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile
|
||||
Oracle:(As this Saga enters and after your draw step, add a lore counter. Sacrifice after IV.)\nI — Scry 2.\nII — Choose a card name.\nIII — When you cast a spell with the chosen name for the first time this turn, draw two cards.\nIV - Look at the top card of each player's library.
|
||||
6
forge-gui/res/cardsfolder/upcoming/memory_drain.txt
Executable file
6
forge-gui/res/cardsfolder/upcoming/memory_drain.txt
Executable file
@@ -0,0 +1,6 @@
|
||||
Name:Memory Drain
|
||||
ManaCost:2 U U
|
||||
Types:Instant
|
||||
A:SP$ Counter | Cost$ 2 U U | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | SubAbility$ DBScry | SpellDescription$ Counter target spell. Scry 2.
|
||||
SVar:DBScry:DB$Scry | ScryNum$ 2
|
||||
Oracle:Counter target spell. Scry 2.
|
||||
10
forge-gui/res/cardsfolder/upcoming/minions_return.txt
Normal file
10
forge-gui/res/cardsfolder/upcoming/minions_return.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
Name:Minion's Return
|
||||
ManaCost:2 B
|
||||
Types:Enchantment Aura
|
||||
K:Flash
|
||||
K:Enchant creature
|
||||
A:SP$ Attach | Cost$ 2 B | ValidTgts$ Creature | AITgts$ Card.nonToken | AILogic$ Pump
|
||||
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.AttachedBy | Execute$ TrigChange | TriggerDescription$ When enchanted creature dies, return that card to the battlefield under your control.
|
||||
SVar:TrigChange:DB$ChangeZone | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | Defined$ TriggeredCard
|
||||
Oracle:Flash\nEnchant creature\nWhen enchanted creature dies, return that card to the battlefield under your control.
|
||||
|
||||
7
forge-gui/res/cardsfolder/upcoming/mires_grasp.txt
Executable file
7
forge-gui/res/cardsfolder/upcoming/mires_grasp.txt
Executable file
@@ -0,0 +1,7 @@
|
||||
Name:Mire's Grasp
|
||||
ManaCost:1 B
|
||||
Types:Enchantment Aura
|
||||
K:Enchant creature
|
||||
A:SP$ Attach | Cost$ 1 B | ValidTgts$ Creature | AILogic$ Curse
|
||||
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ -3 | AddToughness$ -3 | Description$ Enchanted creature gets -3/-3.
|
||||
Oracle:Enchant creature\nEnchanted creature gets -3/-3.
|
||||
@@ -0,0 +1,6 @@
|
||||
Name:Naiad of Hidden Coves
|
||||
ManaCost:2 U
|
||||
Types:Enchantment Creature Nymph
|
||||
PT:2/3
|
||||
S:Mode$ ReduceCost | Type$ Spell | Activator$ You | Amount$ 1 | Condition$ NotPlayerTurn | Description$ As long as it's not your turn, spells you cast cost {1} less to cast.
|
||||
Oracle:As long as it's not your turn, spells you cast cost {1} less to cast.
|
||||
8
forge-gui/res/cardsfolder/upcoming/nyleas_huntmaster.txt
Normal file
8
forge-gui/res/cardsfolder/upcoming/nyleas_huntmaster.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
Name:Nylea's Huntmaster
|
||||
ManaCost:3 G
|
||||
Types:Creature Centaur Shaman
|
||||
PT:4/3
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ When CARDNAME enters the battlefield, target creature gets +X/+0 until end of turn, where X is your devotion to green. (Each {G} in the mana costs of permanents you control counts toward your devotion to green.)
|
||||
SVar:TrigPump:DB$Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +X | References$ X
|
||||
SVar:X:Count$Devotion.Green
|
||||
Oracle:When Nylea's Huntmaster enters the battlefield, target creature gets +X/+0 until end of turn, where X is your devotion to green. (Each {G} in the mana costs of permanents you control counts toward your devotion to green.)
|
||||
5
forge-gui/res/cardsfolder/upcoming/nyxborn_brute.txt
Normal file
5
forge-gui/res/cardsfolder/upcoming/nyxborn_brute.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
Name:Nyxborn Brute
|
||||
ManaCost:3 R R
|
||||
Types:Enchantment Creature Cyclops
|
||||
PT:7/3
|
||||
Oracle:
|
||||
5
forge-gui/res/cardsfolder/upcoming/nyxborn_colossus.txt
Executable file
5
forge-gui/res/cardsfolder/upcoming/nyxborn_colossus.txt
Executable file
@@ -0,0 +1,5 @@
|
||||
Name:Nyxborn Colossus
|
||||
ManaCost:3 G G G
|
||||
Types:Enchantment Creature Giant
|
||||
PT:6/7
|
||||
Oracle:
|
||||
5
forge-gui/res/cardsfolder/upcoming/nyxborn_courser.txt
Executable file
5
forge-gui/res/cardsfolder/upcoming/nyxborn_courser.txt
Executable file
@@ -0,0 +1,5 @@
|
||||
Name:Nyxborn Courser
|
||||
ManaCost:1 W W
|
||||
Types:Enchantment Creature Centaur Scout
|
||||
PT:2/4
|
||||
Oracle:
|
||||
5
forge-gui/res/cardsfolder/upcoming/nyxborn_marauder.txt
Normal file
5
forge-gui/res/cardsfolder/upcoming/nyxborn_marauder.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
Name:Nyxborn Marauder
|
||||
ManaCost:2 B B
|
||||
Types:Enchantment Creature Minotaur
|
||||
PT:4/3
|
||||
Oracle:
|
||||
5
forge-gui/res/cardsfolder/upcoming/nyxborn_seaguard.txt
Normal file
5
forge-gui/res/cardsfolder/upcoming/nyxborn_seaguard.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
Name:Nyxborn Seaguard
|
||||
ManaCost:2 U U
|
||||
Types:Enchantment Creature Merfolk Soldier
|
||||
PT:2/5
|
||||
Oracle:
|
||||
8
forge-gui/res/cardsfolder/upcoming/omen_of_the_dead.txt
Normal file
8
forge-gui/res/cardsfolder/upcoming/omen_of_the_dead.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
Name:Omen of the Dead
|
||||
ManaCost:B
|
||||
Types:Enchantment
|
||||
K:Flash
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigReturn | TriggerDescription$ When CARDNAME enters the battlefield, return target creature card from your graveyard to your hand.
|
||||
SVar:TrigReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | TgtPrompt$ Select target creature card in your graveyard | ValidTgts$ Creature.YouCtrl
|
||||
A:AB$ Scry | Cost$ 2 B Sac<1/CARDNAME> | ScryNum$ 2 | SpellDescription$ Scry 2.
|
||||
Oracle:Flash\nWhen Omen of the Dead enters the battlefield, return target creature card from your graveyard to your hand.\n{2}{B}, Sacrifice Omen of the Dead: Scry 2.
|
||||
8
forge-gui/res/cardsfolder/upcoming/omen_of_the_hunt.txt
Normal file
8
forge-gui/res/cardsfolder/upcoming/omen_of_the_hunt.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
Name:Omen of the Hunt
|
||||
ManaCost:2 G
|
||||
Types:Enchantment
|
||||
K:Flash
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSearch | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library.
|
||||
SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ 1 | ShuffleNonMandatory$ True
|
||||
A:AB$ Scry | Cost$ 2 G Sac<1/CARDNAME> | ScryNum$ 2 | SpellDescription$ Scry 2.
|
||||
Oracle:Flash\nWhen Omen of the Hunt enters the battlefield, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library.\n{2}{G}, Sacrifice Omen of the Hunt: Scry 2.
|
||||
9
forge-gui/res/cardsfolder/upcoming/omen_of_the_sea.txt
Normal file
9
forge-gui/res/cardsfolder/upcoming/omen_of_the_sea.txt
Normal file
@@ -0,0 +1,9 @@
|
||||
Name:Omen of the Sea
|
||||
ManaCost:1 U
|
||||
Types:Enchantment
|
||||
K:Flash
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigScry | TriggerDescription$ When CARDNAME enters the battlefield, scry 2, then draw a card.
|
||||
SVar:TrigScry:DB$ Scry | ScryNum$ 2 | SubAbility$ DBDraw
|
||||
SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 1
|
||||
A:AB$ Scry | Cost$ 2 U Sac<1/CARDNAME> | ScryNum$ 2 | SpellDescription$ Scry 2.
|
||||
Oracle:Flash\nWhen Omen of the Sea enters the battlefield, scry 2, then draw a card.\n{2}{U}, Sacrifice Omen of the Sea: Scry 2.
|
||||
6
forge-gui/res/cardsfolder/upcoming/phalanx_tactics.txt
Normal file
6
forge-gui/res/cardsfolder/upcoming/phalanx_tactics.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
Name:Phalanx Tactics
|
||||
ManaCost:1 W
|
||||
Types:Instant
|
||||
A:SP$ Pump | Cost$ 1 W | ValidTgts$ Creature.YouCtrl | NumAtt$ +2 | NumDef$ +1 | TgtPrompt$ Select target creature you control | SubAbility$ DBPumpAll | SpellDescription$ Target creature you control gets +2/+1 until end of turn. Each other creature you control gets +1/+1 until end of turn.
|
||||
SVar:DBPumpAll:DB$PumpAll | ValidCards$ Targeted.Other+YouCtrl+Creature | NumAtt$ +1 | NumDef$ +1
|
||||
Oracle:Target creature you control gets +2/+1 until end of turn. Each other creature you control gets +1/+1 until end of turn.
|
||||
7
forge-gui/res/cardsfolder/upcoming/pious_wayfarer.txt
Normal file
7
forge-gui/res/cardsfolder/upcoming/pious_wayfarer.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
Name:Pious Wayfarer
|
||||
ManaCost:W
|
||||
Types:Creature Human Scout
|
||||
PT:1/2
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Enchantment.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Constellation - Whenever an enchantment enters the battlefield under your control, target creature gets +1/+1 until end of turn.
|
||||
SVar:TrigPump:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ 1 | NumDef$ 1
|
||||
Oracle:Constellation — Whenever an enchantment enters the battlefield under your control, target creature gets +1/+1 until end of turn.
|
||||
@@ -0,0 +1,7 @@
|
||||
Name:Rage-Scarred Berserker
|
||||
ManaCost:4 B
|
||||
Types:Creature Minotaur Berserker
|
||||
PT:5/4
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ When CARDNAME enters the battlefield, target creature gets +1/+0 and gains indestructible until end of turn.
|
||||
SVar:TrigPump:DB$Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +1 | KW$ Indestructible
|
||||
Oracle:When Rage-Scarred Berserker enters the battlefield, target creature gets +1/+0 and gains indestructible until end of turn.
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user