mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 11:18:01 +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();
|
Player controller = source.getController();
|
||||||
|
|
||||||
boolean isOptional = sa.hasParam("Optional");
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ public class AddTurnEffect extends SpellAbilityEffect {
|
|||||||
extra.setCantSetSchemesInMotion(true);
|
extra.setCantSetSchemesInMotion(true);
|
||||||
}
|
}
|
||||||
if (sa.hasParam("ShowMessage")) {
|
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();
|
Multimap<SpellAbility, GameObject> result = ArrayListMultimap.create();
|
||||||
|
|
||||||
for (GameObject g : defined) {
|
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();
|
Map<String, Object> params = Maps.newHashMap();
|
||||||
params.put("Affected", g);
|
params.put("Affected", g);
|
||||||
|
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ public class AttachEffect extends SpellAbilityEffect {
|
|||||||
|
|
||||||
// If Cast Targets will be checked on the Stack
|
// If Cast Targets will be checked on the Stack
|
||||||
for (final Card attachment : attachments) {
|
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) )
|
if ( sa.hasParam("Optional") && !p.getController().confirmAction(sa, null, message) )
|
||||||
continue;
|
continue;
|
||||||
handleAttachment(attachment, attachTo, sa);
|
handleAttachment(attachment, attachTo, sa);
|
||||||
@@ -174,7 +174,7 @@ public class AttachEffect extends SpellAbilityEffect {
|
|||||||
players.add(player);
|
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) {
|
if (pa != null) {
|
||||||
handleAura(source, pa);
|
handleAura(source, pa);
|
||||||
return true;
|
return true;
|
||||||
@@ -187,7 +187,7 @@ public class AttachEffect extends SpellAbilityEffect {
|
|||||||
return false;
|
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) {
|
if (o != null) {
|
||||||
handleAura(source, o);
|
handleAura(source, o);
|
||||||
//source.enchantEntity((Card) o);
|
//source.enchantEntity((Card) o);
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ public class BidLifeEffect extends SpellAbilityEffect {
|
|||||||
if (result) { // a different choose number
|
if (result) { // a different choose number
|
||||||
bid += p.getController().chooseNumber(sa, Localizer.getInstance().getMessage("lblBidLife") + ":", 1, 9);
|
bid += p.getController().chooseNumber(sa, Localizer.getInstance().getMessage("lblBidLife") + ":", 1, 9);
|
||||||
winner = p;
|
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 GameEntity originalDefender = combat.getDefenderByAttacker(c);
|
||||||
final FCollectionView<GameEntity> defs = combat.getDefenders();
|
final FCollectionView<GameEntity> defs = combat.getDefenders();
|
||||||
final GameEntity defender = sa.getActivatingPlayer().getController().chooseSingleEntityForEffect(defs, sa,
|
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)) {
|
if (originalDefender != null && !originalDefender.equals(defender)) {
|
||||||
AttackingBand ab = combat.getBandOfAttacker(c);
|
AttackingBand ab = combat.getBandOfAttacker(c);
|
||||||
if (ab != null) {
|
if (ab != null) {
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ public class ChangeTargetsEffect extends SpellAbilityEffect {
|
|||||||
// Redirect rules read 'you MAY choose new targets' ... okay!
|
// 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
|
// TODO: Don't even ask to change targets, if the SA and subs don't actually have targets
|
||||||
boolean isOptional = sa.hasParam("Optional");
|
boolean isOptional = sa.hasParam("Optional");
|
||||||
if (isOptional && !chooser.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWantChangeTargets") + " " + tgtSA.getHostCard() + "?")) {
|
if (isOptional && !chooser.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWantChangeAbilityTargets", tgtSA.getHostCard().toString()))) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (changesOneTarget) {
|
if (changesOneTarget) {
|
||||||
|
|||||||
@@ -101,17 +101,7 @@ public class ChangeZoneAllEffect extends SpellAbilityEffect {
|
|||||||
if (sa.hasParam("OptionQuestion")) {
|
if (sa.hasParam("OptionQuestion")) {
|
||||||
message = TextUtil.fastReplace(sa.getParam("OptionQuestion"), "TARGETS", targets);
|
message = TextUtil.fastReplace(sa.getParam("OptionQuestion"), "TARGETS", targets);
|
||||||
} else {
|
} else {
|
||||||
final StringBuilder sb = new StringBuilder();
|
message = Localizer.getInstance().getMessage("lblMoveTargetFromOriginToDestination", targets, Lang.joinHomogenous(origin, ZoneType.Accessors.GET_TRANSLATED_NAME), destination.toString());
|
||||||
|
|
||||||
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();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!sa.getActivatingPlayer().getController().confirmAction(sa, null, message)) {
|
if (!sa.getActivatingPlayer().getController().confirmAction(sa, null, message)) {
|
||||||
|
|||||||
@@ -440,7 +440,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
|||||||
hostCard.addRemembered(CardUtil.getLKICopy(tgtC));
|
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) )
|
if (optional && !player.getController().confirmAction(sa, null, prompt) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@@ -504,7 +504,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
|||||||
list = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), sa.getParam("AttachedTo"), tgtC.getController(), tgtC);
|
list = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), sa.getParam("AttachedTo"), tgtC.getController(), tgtC);
|
||||||
}
|
}
|
||||||
if (!list.isEmpty()) {
|
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);
|
tgtC.attachToEntity(attachedTo);
|
||||||
} else { // When it should enter the battlefield attached to an illegal permanent it fails
|
} else { // When it should enter the battlefield attached to an illegal permanent it fails
|
||||||
continue;
|
continue;
|
||||||
@@ -514,7 +514,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
|||||||
if (sa.hasParam("AttachedToPlayer")) {
|
if (sa.hasParam("AttachedToPlayer")) {
|
||||||
FCollectionView<Player> list = AbilityUtils.getDefinedPlayers(hostCard, sa.getParam("AttachedToPlayer"), sa);
|
FCollectionView<Player> list = AbilityUtils.getDefinedPlayers(hostCard, sa.getParam("AttachedToPlayer"), sa);
|
||||||
if (!list.isEmpty()) {
|
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);
|
tgtC.attachToEntity(attachedTo);
|
||||||
}
|
}
|
||||||
else { // When it should enter the battlefield attached to an illegal player it fails
|
else { // When it should enter the battlefield attached to an illegal player it fails
|
||||||
@@ -561,7 +561,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} 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) {
|
if (defender != null) {
|
||||||
combat.addAttacker(movedCard, defender);
|
combat.addAttacker(movedCard, defender);
|
||||||
@@ -750,7 +750,14 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
|||||||
|
|
||||||
final boolean optional = sa.hasParam("Optional");
|
final boolean optional = sa.hasParam("Optional");
|
||||||
if (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)) {
|
if (!decider.getController().confirmAction(sa, PlayerActionConfirmMode.ChangeZoneGeneral, message)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -822,7 +829,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
SpellAbility tgtSA = decider.getController().getAbilityToPlay(tgtCard, sas);
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
// if played, that card cannot be found
|
// if played, that card cannot be found
|
||||||
@@ -854,7 +861,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
|||||||
final boolean champion = sa.hasParam("Champion");
|
final boolean champion = sa.hasParam("Champion");
|
||||||
final boolean forget = sa.hasParam("ForgetChanged");
|
final boolean forget = sa.hasParam("ForgetChanged");
|
||||||
final boolean imprint = sa.hasParam("Imprint");
|
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");
|
final String totalcmc = sa.getParam("WithTotalCMC");
|
||||||
int totcmc = AbilityUtils.calculateAmount(source, totalcmc, sa);
|
int totcmc = AbilityUtils.calculateAmount(source, totalcmc, sa);
|
||||||
|
|
||||||
@@ -867,9 +874,10 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
|||||||
if (! sa.hasParam("SelectPrompt")) {
|
if (! sa.hasParam("SelectPrompt")) {
|
||||||
// new default messaging for multi select
|
// new default messaging for multi select
|
||||||
if (fetchList.size() > changeNum) {
|
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 {
|
} 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
|
// ensure that selection is within maximum allowed changeNum
|
||||||
@@ -931,7 +939,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
|||||||
|
|
||||||
if (c == null) {
|
if (c == null) {
|
||||||
final int num = Math.min(fetchList.size(), changeNum - i);
|
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)) {
|
if (fetchList.isEmpty() || decider.getController().confirmAction(sa, PlayerActionConfirmMode.ChangeZoneGeneral, message)) {
|
||||||
break;
|
break;
|
||||||
@@ -1002,7 +1010,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
|||||||
if (!list.isEmpty()) {
|
if (!list.isEmpty()) {
|
||||||
Card attachedTo = null;
|
Card attachedTo = null;
|
||||||
if (list.size() > 1) {
|
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 {
|
else {
|
||||||
attachedTo = list.get(0);
|
attachedTo = list.get(0);
|
||||||
@@ -1020,7 +1028,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
|||||||
if (sa.hasParam("AttachedToPlayer")) {
|
if (sa.hasParam("AttachedToPlayer")) {
|
||||||
FCollectionView<Player> list = AbilityUtils.getDefinedPlayers(source, sa.getParam("AttachedToPlayer"), sa);
|
FCollectionView<Player> list = AbilityUtils.getDefinedPlayers(source, sa.getParam("AttachedToPlayer"), sa);
|
||||||
if (!list.isEmpty()) {
|
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);
|
c.attachToEntity(attachedTo);
|
||||||
}
|
}
|
||||||
else { // When it should enter the battlefield attached to an illegal permanent it fails
|
else { // When it should enter the battlefield attached to an illegal permanent it fails
|
||||||
@@ -1043,7 +1051,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} 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) {
|
if (defender != null) {
|
||||||
combat.addAttacker(c, defender);
|
combat.addAttacker(c, defender);
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ public class ChooseCardEffect extends SpellAbilityEffect {
|
|||||||
for (final String type : CardType.getBasicTypes()) {
|
for (final String type : CardType.getBasicTypes()) {
|
||||||
final CardCollectionView cl = CardLists.getType(land, type);
|
final CardCollectionView cl = CardLists.getType(land, type);
|
||||||
if (!cl.isEmpty()) {
|
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);
|
Card c = p.getController().chooseSingleEntityForEffect(cl, sa, prompt, false);
|
||||||
if (c != null) {
|
if (c != null) {
|
||||||
chosen.add(c);
|
chosen.add(c);
|
||||||
@@ -99,8 +99,8 @@ public class ChooseCardEffect extends SpellAbilityEffect {
|
|||||||
int chosenP = 0;
|
int chosenP = 0;
|
||||||
while (!creature.isEmpty()) {
|
while (!creature.isEmpty()) {
|
||||||
Card c = p.getController().chooseSingleEntityForEffect(creature, sa,
|
Card c = p.getController().chooseSingleEntityForEffect(creature, sa,
|
||||||
Localizer.getInstance().getMessage("lblSelectCreatureWithTotalPowerLessOrEqualTo") + " " + (totP - chosenP - negativeNum)
|
Localizer.getInstance().getMessage("lblSelectCreatureWithTotalPowerLessOrEqualToNum", (totP - chosenP - negativeNum))
|
||||||
+ "\r\n(" + Localizer.getInstance().getMessage("lblSelected") + ":" + chosenPool + ")\r\n(" + Localizer.getInstance().getMessage("lblTotalPower") + ": " + chosenP + ")", chosenP <= totP);
|
+ "\r\n(" + Localizer.getInstance().getMessage("lblSelected") + ":" + chosenPool + ")\r\n(" + Localizer.getInstance().getMessage("lblTotalPowerNum", chosenP) + ")", chosenP <= totP);
|
||||||
if (c == null) {
|
if (c == null) {
|
||||||
if (p.getController().confirmAction(sa, PlayerActionConfirmMode.OptionalChoose, Localizer.getInstance().getMessage("lblCancelChooseConfirm"))) {
|
if (p.getController().confirmAction(sa, PlayerActionConfirmMode.OptionalChoose, Localizer.getInstance().getMessage("lblCancelChooseConfirm"))) {
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ public class ChooseCardNameEffect extends SpellAbilityEffect {
|
|||||||
} else {
|
} else {
|
||||||
// use CardFace because you might name a alternate name
|
// use CardFace because you might name a alternate name
|
||||||
//"name a card" in mtg card oracle text is "choose a card name",change text
|
//"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();
|
Predicate<ICardFace> cpp = Predicates.alwaysTrue();
|
||||||
if (sa.hasParam("ValidCards")) {
|
if (sa.hasParam("ValidCards")) {
|
||||||
@@ -116,7 +116,7 @@ public class ChooseCardNameEffect extends SpellAbilityEffect {
|
|||||||
|
|
||||||
host.setNamedCard(chosen);
|
host.setNamedCard(chosen);
|
||||||
if(!randomChoice) {
|
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);
|
p.setNamedCard(chosen);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,27 +50,25 @@ public class ChooseColorEffect extends SpellAbilityEffect {
|
|||||||
List<String> chosenColors;
|
List<String> chosenColors;
|
||||||
int cntMin = sa.hasParam("TwoColors") ? 2 : 1;
|
int cntMin = sa.hasParam("TwoColors") ? 2 : 1;
|
||||||
int cntMax = sa.hasParam("TwoColors") ? 2 : sa.hasParam("OrColors") ? colorChoices.size() : 1;
|
int cntMax = sa.hasParam("TwoColors") ? 2 : sa.hasParam("OrColors") ? colorChoices.size() : 1;
|
||||||
String prompt;
|
String prompt = null;
|
||||||
if (cntMax == 1) {
|
if (cntMax == 1) {
|
||||||
prompt = Localizer.getInstance().getMessage("lblChooseAColor");
|
prompt = Localizer.getInstance().getMessage("lblChooseAColor");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
prompt = Localizer.getInstance().getMessage("lblChoose") + " " + Lang.getNumeral(cntMin);
|
|
||||||
if (cntMax > cntMin) {
|
if (cntMax > cntMin) {
|
||||||
if (cntMax >= MagicColor.NUMBER_OR_COLORS) {
|
if (cntMax >= MagicColor.NUMBER_OR_COLORS) {
|
||||||
prompt += " " + Localizer.getInstance().getMessage("lblOrMore");
|
prompt = Localizer.getInstance().getMessage("lblAtLastChooseNumColors", Lang.getNumeral(cntMin));
|
||||||
} else {
|
} else {
|
||||||
prompt += " " + Localizer.getInstance().getMessage("lblTo") + " " + Lang.getNumeral(cntMax);
|
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);
|
chosenColors = p.getController().chooseColors(prompt, sa, cntMin, cntMax, colorChoices);
|
||||||
if (chosenColors.isEmpty()) {
|
if (chosenColors.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
card.setChosenColors(chosenColors);
|
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);
|
card.setChosenNumber(chosen);
|
||||||
}
|
}
|
||||||
if (sa.hasParam("Notify")) {
|
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()) {
|
for (Entry<Player, Integer> ev : chooseMap.entrySet()) {
|
||||||
int num = ev.getValue();
|
int num = ev.getValue();
|
||||||
Player player = ev.getKey();
|
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");
|
sb.append("\r\n");
|
||||||
if (num > highest) {
|
if (num > highest) {
|
||||||
highestNum.clear();
|
highestNum.clear();
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ public class CloneEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final boolean optional = sa.hasParam("Optional");
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -228,7 +228,7 @@ public class ControlGainEffect extends SpellAbilityEffect {
|
|||||||
final FCollectionView<GameEntity> e = combat.getDefenders();
|
final FCollectionView<GameEntity> e = combat.getDefenders();
|
||||||
|
|
||||||
final GameEntity defender = sa.getActivatingPlayer().getController().chooseSingleEntityForEffect(e, sa,
|
final GameEntity defender = sa.getActivatingPlayer().getController().chooseSingleEntityForEffect(e, sa,
|
||||||
Localizer.getInstance().getMessage("lblDeclareDefenderFor") + " " + tgtC);
|
Localizer.getInstance().getMessage("lblDeclareDefenderForCard", tgtC.toString()));
|
||||||
|
|
||||||
if (defender != null) {
|
if (defender != null) {
|
||||||
combat.addAttacker(tgtC, defender);
|
combat.addAttacker(tgtC, defender);
|
||||||
|
|||||||
@@ -207,12 +207,12 @@ public class CopyPermanentEffect extends SpellAbilityEffect {
|
|||||||
GameEntity defender;
|
GameEntity defender;
|
||||||
if ("True".equals(attacked)) {
|
if ("True".equals(attacked)) {
|
||||||
FCollectionView<GameEntity> defs = game.getCombat().getDefenders();
|
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 {
|
} else {
|
||||||
defender = AbilityUtils.getDefinedPlayers(host, sa.getParam("CopyAttacking"), sa).get(0);
|
defender = AbilityUtils.getDefinedPlayers(host, sa.getParam("CopyAttacking"), sa).get(0);
|
||||||
if (sa.hasParam("ChoosePlayerOrPlaneswalker") && defender != null) {
|
if (sa.hasParam("ChoosePlayerOrPlaneswalker") && defender != null) {
|
||||||
FCollectionView<GameEntity> defs = game.getCombat().getDefendersControlledBy((Player) defender);
|
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);
|
game.getCombat().addAttacker(copyInPlay, defender);
|
||||||
@@ -244,7 +244,7 @@ public class CopyPermanentEffect extends SpellAbilityEffect {
|
|||||||
list = CardLists.getValidCards(list, sa.getParam("AttachedTo"), copyInPlay.getController(), copyInPlay);
|
list = CardLists.getValidCards(list, sa.getParam("AttachedTo"), copyInPlay.getController(), copyInPlay);
|
||||||
}
|
}
|
||||||
if (!list.isEmpty()) {
|
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);
|
copyInPlay.attachToEntity(attachedTo);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ public class CopySpellAbilityEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
|
|
||||||
boolean isOptional = sa.hasParam("Optional");
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ public class CopySpellAbilityEffect extends SpellAbilityEffect {
|
|||||||
final int spellCount = Integer.parseInt(sa.getParam("CopyMultipleSpells"));
|
final int spellCount = Integer.parseInt(sa.getParam("CopyMultipleSpells"));
|
||||||
|
|
||||||
for (int multi = 0; multi < spellCount && !tgtSpells.isEmpty(); multi++) {
|
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,
|
SpellAbility chosen = controller.getController().chooseSingleSpellForEffect(tgtSpells, sa, prompt,
|
||||||
ImmutableMap.of());
|
ImmutableMap.of());
|
||||||
SpellAbility copiedSpell = CardFactory.copySpellAbilityAndPossiblyHost(card, chosen.getHostCard(), chosen, true);
|
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
|
// only select cards if the counterNum is any
|
||||||
if (counterNum.equals("Any")) {
|
if (counterNum.equals("Any")) {
|
||||||
StringBuilder sb = new StringBuilder();
|
srcCards = player.getController().chooseCardsForEffect(srcCards, sa, Localizer.getInstance().getMessage("lblChooseTakeCountersCard", cType.getName()), 0, srcCards.size(), true);
|
||||||
|
|
||||||
sb.append(Localizer.getInstance().getMessage("lblChooseTakeCountersCard").replace("%s", cType.getName()));
|
|
||||||
|
|
||||||
srcCards = player.getController().chooseCardsForEffect(srcCards, sa, sb.toString(), 0, srcCards.size(), true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Card src : srcCards) {
|
for (Card src : srcCards) {
|
||||||
@@ -136,10 +132,7 @@ public class CountersMoveEffect extends SpellAbilityEffect {
|
|||||||
params.put("CounterType", cType);
|
params.put("CounterType", cType);
|
||||||
params.put("Source", src);
|
params.put("Source", src);
|
||||||
params.put("Target", dest);
|
params.put("Target", dest);
|
||||||
StringBuilder sb = new StringBuilder();
|
cnum = player.getController().chooseNumber(sa, Localizer.getInstance().getMessage("lblTakeHowManyTargetCounterFromCard", cType.getName(), src.toString()), 0, cmax, params);
|
||||||
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);
|
|
||||||
} else {
|
} else {
|
||||||
cnum = AbilityUtils.calculateAmount(host, counterNum, sa);
|
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);
|
tgtCards = CardLists.getValidCards(tgtCards, sa.getParam("ValidDefined"), player, host, sa);
|
||||||
|
|
||||||
if (counterNum.equals("Any")) {
|
if (counterNum.equals("Any")) {
|
||||||
StringBuilder sb = new StringBuilder();
|
tgtCards = player.getController().chooseCardsForEffect(tgtCards, sa,
|
||||||
sb.append(Localizer.getInstance().getMessage("lblChooseCardToGet") + " ").append(cType.getName());
|
Localizer.getInstance().getMessage("lblChooseCardToGetCountersFrom", cType.getName(), source.toString()), 0, tgtCards.size(), true);
|
||||||
sb.append(" " + Localizer.getInstance().getMessage("lblCountersFrom") + " ").append(source).append(".");
|
|
||||||
|
|
||||||
tgtCards = player.getController().chooseCardsForEffect(
|
|
||||||
tgtCards, sa, sb.toString(), 0, tgtCards.size(), true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean updateSource = false;
|
boolean updateSource = false;
|
||||||
@@ -202,9 +191,7 @@ public class CountersMoveEffect extends SpellAbilityEffect {
|
|||||||
params.put("CounterType", cType);
|
params.put("CounterType", cType);
|
||||||
params.put("Source", source);
|
params.put("Source", source);
|
||||||
params.put("Target", cur);
|
params.put("Target", cur);
|
||||||
StringBuilder sb = new StringBuilder();
|
int cnum = player.getController().chooseNumber(sa, Localizer.getInstance().getMessage("lblPutHowManyTargetCounterOnCard", cType.getName(), cur.toString()), 0, source.getCounters(cType), params);
|
||||||
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);
|
|
||||||
|
|
||||||
if (cnum > 0) {
|
if (cnum > 0) {
|
||||||
source.subtractCounter(cType, cnum);
|
source.subtractCounter(cType, cnum);
|
||||||
@@ -262,10 +249,7 @@ public class CountersMoveEffect extends SpellAbilityEffect {
|
|||||||
params.put("CounterType", cType);
|
params.put("CounterType", cType);
|
||||||
params.put("Source", source);
|
params.put("Source", source);
|
||||||
params.put("Target", cur);
|
params.put("Target", cur);
|
||||||
StringBuilder sb = new StringBuilder();
|
cntToMove = pc.chooseNumber(sa, Localizer.getInstance().getMessage("lblTakeHowManyTargetCounterFromCard", cType.getName(), source.toString()), 0, cntToMove, params);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (source.getCounters(cType) >= cntToMove) {
|
if (source.getCounters(cType) >= cntToMove) {
|
||||||
@@ -298,10 +282,8 @@ public class CountersMoveEffect extends SpellAbilityEffect {
|
|||||||
params.put("CounterType", chosenType);
|
params.put("CounterType", chosenType);
|
||||||
params.put("Source", source);
|
params.put("Source", source);
|
||||||
params.put("Target", dest);
|
params.put("Target", dest);
|
||||||
StringBuilder sb = new StringBuilder();
|
int chosenAmount = pc.chooseNumber(sa, Localizer.getInstance().getMessage("lblTakeHowManyTargetCounters", chosenType.getName()),
|
||||||
sb.append(Localizer.getInstance().getMessage("lblTakeHowMany") + " ").append(chosenType.getName()).append(" " + Localizer.getInstance().getMessage("lblCounters") + "?");
|
0, Math.min(tgtCounters.get(chosenType), cntToMove), params);
|
||||||
int chosenAmount = pc.chooseNumber(
|
|
||||||
sa, sb.toString(), 0, Math.min(tgtCounters.get(chosenType), cntToMove), params);
|
|
||||||
|
|
||||||
if (chosenAmount > 0) {
|
if (chosenAmount > 0) {
|
||||||
dest.addCounter(chosenType, chosenAmount, player, true, table);
|
dest.addCounter(chosenType, chosenAmount, player, true, table);
|
||||||
|
|||||||
@@ -236,7 +236,7 @@ public class CountersPutEffect extends SpellAbilityEffect {
|
|||||||
continue;
|
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"));
|
Player chooser = pc.chooseSingleEntityForEffect(activator.getOpponents(), sa, Localizer.getInstance().getMessage("lblChooseAnOpponent"));
|
||||||
|
|
||||||
if (chooser.getController().confirmAction(sa, PlayerActionConfirmMode.Tribute, message)) {
|
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);
|
CounterType chosenType = pc.chooseCounterType(list, sa, prompt, params);
|
||||||
|
|
||||||
params.put("CounterType", chosenType);
|
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);
|
Boolean putCounter = pc.chooseBinary(sa, prompt, BinaryChoiceType.AddOrRemove, params);
|
||||||
|
|
||||||
if (putCounter) {
|
if (putCounter) {
|
||||||
|
|||||||
@@ -130,10 +130,7 @@ public class CountersRemoveEffect extends SpellAbilityEffect {
|
|||||||
srcCards = game.getCardsIn(ZoneType.Battlefield);
|
srcCards = game.getCardsIn(ZoneType.Battlefield);
|
||||||
srcCards = CardLists.getValidCards(srcCards, sa.getParam("ValidSource"), player, card, sa);
|
srcCards = CardLists.getValidCards(srcCards, sa.getParam("ValidSource"), player, card, sa);
|
||||||
if (num.equals("Any")) {
|
if (num.equals("Any")) {
|
||||||
StringBuilder sb = new StringBuilder();
|
srcCards = player.getController().chooseCardsForEffect(srcCards, sa, Localizer.getInstance().getMessage("lblChooseCardsToTakeTargetCounters", counterType.getName()), 0, srcCards.size(), true);
|
||||||
sb.append(Localizer.getInstance().getMessage("lblChooseCardtoTakeTargetCounters").replace("%s", counterType.getName()));
|
|
||||||
|
|
||||||
srcCards = player.getController().chooseCardsForEffect(srcCards, sa, sb.toString(), 0, srcCards.size(), true);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
srcCards = getTargetCards(sa);
|
srcCards = getTargetCards(sa);
|
||||||
@@ -173,7 +170,7 @@ public class CountersRemoveEffect extends SpellAbilityEffect {
|
|||||||
Map<String, Object> params = Maps.newHashMap();
|
Map<String, Object> params = Maps.newHashMap();
|
||||||
params.put("Target", gameCard);
|
params.put("Target", gameCard);
|
||||||
params.put("CounterType", type);
|
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);
|
cntToRemove = pc.chooseNumber(sa, title, 0, cntToRemove, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -217,7 +214,7 @@ public class CountersRemoveEffect extends SpellAbilityEffect {
|
|||||||
String prompt = Localizer.getInstance().getMessage("lblSelectCountersTypeToRemove");
|
String prompt = Localizer.getInstance().getMessage("lblSelectCountersTypeToRemove");
|
||||||
CounterType chosenType = pc.chooseCounterType(
|
CounterType chosenType = pc.chooseCounterType(
|
||||||
ImmutableList.copyOf(tgtCounters.keySet()), sa, prompt, params);
|
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));
|
int max = Math.min(cntToRemove, tgtCounters.get(chosenType));
|
||||||
params = Maps.newHashMap();
|
params = Maps.newHashMap();
|
||||||
params.put("Target", entity);
|
params.put("Target", entity);
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ public class DamageDealEffect extends DamageBaseEffect {
|
|||||||
List<GameObject> tgts = getTargets(sa);
|
List<GameObject> tgts = getTargets(sa);
|
||||||
if (sa.hasParam("OptionalDecider")) {
|
if (sa.hasParam("OptionalDecider")) {
|
||||||
Player decider = Iterables.getFirst(AbilityUtils.getDefinedPlayers(hostCard, sa.getParam("OptionalDecider"), sa), null);
|
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;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -222,17 +222,17 @@ public class DigEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
chooser.getController().endTempShowCards();
|
chooser.getController().endTempShowCards();
|
||||||
if (!movedCards.isEmpty()) {
|
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) {
|
else if (allButOne) {
|
||||||
movedCards = new CardCollection(valid);
|
movedCards = new CardCollection(valid);
|
||||||
String prompt;
|
String prompt;
|
||||||
if (destZone2.equals(ZoneType.Library) && libraryPosition2 == 0) {
|
if (destZone2.equals(ZoneType.Library) && libraryPosition2 == 0) {
|
||||||
prompt = Localizer.getInstance().getMessage("lblChooseACardToLeaveTargetLibraryTop").replace("%s", "{player's}");
|
prompt = Localizer.getInstance().getMessage("lblChooseACardToLeaveTargetLibraryTop", "{player's}");
|
||||||
}
|
}
|
||||||
else {
|
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);
|
Card chosen = chooser.getController().chooseSingleEntityForEffect(valid, delayedReveal, sa, prompt, false, p);
|
||||||
@@ -246,12 +246,12 @@ public class DigEffect extends SpellAbilityEffect {
|
|||||||
if (sa.hasParam("PrimaryPrompt")) {
|
if (sa.hasParam("PrimaryPrompt")) {
|
||||||
prompt = sa.getParam("PrimaryPrompt");
|
prompt = sa.getParam("PrimaryPrompt");
|
||||||
} else {
|
} else {
|
||||||
prompt = Localizer.getInstance().getMessage("lblChooseCardsPutInto") + " " + destZone1.name();
|
prompt = Localizer.getInstance().getMessage("lblChooseCardsPutIntoZone", destZone1.getTranslatedName());
|
||||||
if (destZone1.equals(ZoneType.Library)) {
|
if (destZone1.equals(ZoneType.Library)) {
|
||||||
if (libraryPosition == -1) {
|
if (libraryPosition == -1) {
|
||||||
prompt = Localizer.getInstance().getMessage("lblChooseCardPutOnTargetLibarayBottom").replace("%s", "{player's}");
|
prompt = Localizer.getInstance().getMessage("lblChooseCardPutOnTargetLibarayBottom", "{player's}");
|
||||||
} else if (libraryPosition == 0) {
|
} 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")) {
|
if (!changeValid.isEmpty() && !sa.hasParam("ExileFaceDown") && !sa.hasParam("NoReveal")) {
|
||||||
game.getAction().reveal(movedCards, chooser, true,
|
game.getAction().reveal(movedCards, chooser, true, Localizer.getInstance().getMessage("lblPlayerPickedCardFrom", chooser.getName()));
|
||||||
chooser + " " + Localizer.getInstance().getMessage("lblPicked") + " " +
|
|
||||||
(movedCards.size() == 1 ? Localizer.getInstance().getMessage("lblThisCard") : Localizer.getInstance().getMessage("lblTheseCards")) +
|
|
||||||
" " + Localizer.getInstance().getMessage("lblFrom") + " ");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sa.hasParam("ForgetOtherRemembered")) {
|
if (sa.hasParam("ForgetOtherRemembered")) {
|
||||||
|
|||||||
@@ -82,8 +82,7 @@ public class DigMultipleEffect extends SpellAbilityEffect {
|
|||||||
CardCollection chosen = chooser.getController().chooseCardsForEffectMultiple(validMap, sa, Localizer.getInstance().getMessage("lblChooseCards"));
|
CardCollection chosen = chooser.getController().chooseCardsForEffectMultiple(validMap, sa, Localizer.getInstance().getMessage("lblChooseCards"));
|
||||||
|
|
||||||
if (!chosen.isEmpty()) {
|
if (!chosen.isEmpty()) {
|
||||||
game.getAction().reveal(chosen, chooser, true,
|
game.getAction().reveal(chosen, chooser, true, Localizer.getInstance().getMessage("lblPlayerPickedCardFrom", chooser.getName()));
|
||||||
chooser + " " + Localizer.getInstance().getMessage("lblPicked") + " " + (chosen.size() == 1 ? Localizer.getInstance().getMessage("lblThisCard") : Localizer.getInstance().getMessage("lblTheseCards")) + " " + Localizer.getInstance().getMessage("lblFrom") + " ");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Card c : chosen) {
|
for (Card c : chosen) {
|
||||||
|
|||||||
@@ -160,7 +160,7 @@ public class DigUntilEffect extends SpellAbilityEffect {
|
|||||||
final Card c = itr.next();
|
final Card c = itr.next();
|
||||||
final ZoneType origin = c.getZone().getZoneType();
|
final ZoneType origin = c.getZone().getZoneType();
|
||||||
if (optionalFound && !p.getController().confirmAction(sa, null,
|
if (optionalFound && !p.getController().confirmAction(sa, null,
|
||||||
Localizer.getInstance().getMessage("lblDoYouWantPutCardTo") + " " + foundDest.name() + "?")) {
|
Localizer.getInstance().getMessage("lblDoYouWantPutCardToZone", foundDest.getTranslatedName()))) {
|
||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
Card m = null;
|
Card m = null;
|
||||||
|
|||||||
@@ -206,7 +206,7 @@ public class DiscardEffect extends SpellAbilityEffect {
|
|||||||
if (!p.canDiscardBy(sa)) {
|
if (!p.canDiscardBy(sa)) {
|
||||||
continue;
|
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);
|
boolean runDiscard = !sa.hasParam("Optional") || p.getController().confirmAction(sa, PlayerActionConfirmMode.Random, message);
|
||||||
|
|
||||||
if (runDiscard) {
|
if (runDiscard) {
|
||||||
@@ -326,8 +326,7 @@ public class DiscardEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (mode.startsWith("Reveal") ) {
|
if (mode.startsWith("Reveal") ) {
|
||||||
p.getController().reveal(toBeDiscarded, ZoneType.Hand, p,
|
p.getController().reveal(toBeDiscarded, ZoneType.Hand, p, Localizer.getInstance().getMessage("lblPlayerHasChosenCardsFrom", chooser.getName()));
|
||||||
chooser + " " + Localizer.getInstance().getMessage("lblHasChosen") + " " + (toBeDiscarded.size() == 1 ? Localizer.getInstance().getMessage("lblThisCard") : Localizer.getInstance().getMessage("lblTheseCards")) + " " + Localizer.getInstance().getMessage("lblFrom") + " ");
|
|
||||||
}
|
}
|
||||||
for (Card card : toBeDiscarded) {
|
for (Card card : toBeDiscarded) {
|
||||||
if (card == null) { continue; }
|
if (card == null) { continue; }
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ public class DrawEffect extends SpellAbilityEffect {
|
|||||||
|
|
||||||
for (final Player p : getDefinedPlayersOrTargeted(sa)) {
|
for (final Player p : getDefinedPlayersOrTargeted(sa)) {
|
||||||
if ((tgt == null) || p.canBeTargetedBy(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;
|
continue;
|
||||||
|
|
||||||
int actualNum = numCards;
|
int actualNum = numCards;
|
||||||
|
|||||||
@@ -45,9 +45,7 @@ public class EncodeEffect extends SpellAbilityEffect {
|
|||||||
// Handle choice of whether or not to encoded
|
// Handle choice of whether or not to encoded
|
||||||
|
|
||||||
|
|
||||||
final StringBuilder sb = new StringBuilder();
|
if (!player.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWantExileCardAndEncodeOntoYouCreature", host.toString()))) {
|
||||||
sb.append(Localizer.getInstance().getMessage("lblDoYouWantExile") + " ").append(host).append(" " + Localizer.getInstance().getMessage("lblAndEncodeOntoAYouControlCreature"));
|
|
||||||
if (!player.getController().confirmAction(sa, null, sb.toString())) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,7 +60,7 @@ public class EncodeEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
|
|
||||||
StringBuilder codeLog = new StringBuilder();
|
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());
|
game.getGameLog().add(GameLogEntryType.STACK_RESOLVE, codeLog.toString());
|
||||||
|
|
||||||
// store hostcard in encoded array
|
// store hostcard in encoded array
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ public class ManaEffect extends SpellAbilityEffect {
|
|||||||
return;
|
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());
|
abMana.setExpressChoice(choiceString.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -142,7 +142,7 @@ public class ManaEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
choice = MagicColor.toShortString(val);
|
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);
|
abMana.setExpressChoice(choice);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -173,7 +173,7 @@ public class ManaEffect extends SpellAbilityEffect {
|
|||||||
if (cs.isMonoColor())
|
if (cs.isMonoColor())
|
||||||
sb.append(MagicColor.toShortString(s.getColorMask()));
|
sb.append(MagicColor.toShortString(s.getColorMask()));
|
||||||
else /* (cs.isMulticolor()) */ {
|
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));
|
sb.append(MagicColor.toShortString(chosenColor));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public class MillEffect extends SpellAbilityEffect {
|
|||||||
for (final Player p : getTargetPlayers(sa)) {
|
for (final Player p : getTargetPlayers(sa)) {
|
||||||
if (!sa.usesTargeting() || p.canBeTargetedBy(sa)) {
|
if (!sa.usesTargeting() || p.canBeTargetedBy(sa)) {
|
||||||
if (sa.hasParam("Optional")) {
|
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)) {
|
if (!p.getController().confirmAction(sa, null, prompt)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ public class MultiplePilesEffect extends SpellAbilityEffect {
|
|||||||
|
|
||||||
for (int i = 1; i < piles; i++) {
|
for (int i = 1; i < piles; i++) {
|
||||||
int size = pool.size();
|
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);
|
pileList.add(pile);
|
||||||
pool.removeAll(pile);
|
pool.removeAll(pile);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package forge.game.ability.effects;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import forge.util.TextUtil;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import com.google.common.base.Predicate;
|
import com.google.common.base.Predicate;
|
||||||
@@ -163,7 +162,7 @@ public class PlayEffect extends SpellAbilityEffect {
|
|||||||
game.getAction().revealTo(tgtCard, activator);
|
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) {
|
if (wasFaceDown) {
|
||||||
tgtCard.turnFaceDownNoUpdate();
|
tgtCard.turnFaceDownNoUpdate();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -328,7 +328,7 @@ public class PumpEffect extends SpellAbilityEffect {
|
|||||||
final String targets = Lang.joinHomogenous(tgtCards);
|
final String targets = Lang.joinHomogenous(tgtCards);
|
||||||
final String message = sa.hasParam("OptionQuestion")
|
final String message = sa.hasParam("OptionQuestion")
|
||||||
? TextUtil.fastReplace(sa.getParam("OptionQuestion"), "TARGETS", targets)
|
? 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)) {
|
if (!sa.getActivatingPlayer().getController().confirmAction(sa, null, message)) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ public class RollPlanarDiceEffect extends SpellAbilityEffect {
|
|||||||
game.getPhaseHandler().incPlanarDiceRolledthisTurn();
|
game.getPhaseHandler().incPlanarDiceRolledthisTurn();
|
||||||
}
|
}
|
||||||
PlanarDice result = PlanarDice.roll(activator, null);
|
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);
|
game.getAction().nofityOfValue(sa, activator, message, null);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -194,10 +194,10 @@ public class SacrificeEffect extends SpellAbilityEffect {
|
|||||||
final int amount = AbilityUtils.calculateAmount(sa.getHostCard(), num, sa);
|
final int amount = AbilityUtils.calculateAmount(sa.getHostCard(), num, sa);
|
||||||
|
|
||||||
if (valid.equals("Self")) {
|
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")) {
|
} else if (valid.equals("Card.AttachedBy")) {
|
||||||
final Card toSac = sa.getHostCard().getEnchantingCard();
|
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 {
|
} else {
|
||||||
for (final Player p : tgts) {
|
for (final Player p : tgts) {
|
||||||
sb.append(p.getName()).append(" ");
|
sb.append(p.getName()).append(" ");
|
||||||
@@ -209,9 +209,9 @@ public class SacrificeEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sa.hasParam("Destroy")) {
|
if (sa.hasParam("Destroy")) {
|
||||||
sb.append(Localizer.getInstance().getMessage("lblDestroys") + " ");
|
sb.append("Destroys ");
|
||||||
} else {
|
} else {
|
||||||
sb.append(Localizer.getInstance().getMessage("lblSacrifice") + " ");
|
sb.append("Sacrifices ");
|
||||||
}
|
}
|
||||||
sb.append(amount).append(" ").append(msg).append(".");
|
sb.append(amount).append(" ").append(msg).append(".");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ public class ShuffleEffect extends SpellAbilityEffect {
|
|||||||
|
|
||||||
for (final Player p : tgtPlayers) {
|
for (final Player p : tgtPlayers) {
|
||||||
if ((tgt == null) || p.canBeTargetedBy(sa)) {
|
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)
|
if (mustShuffle)
|
||||||
p.shuffle(sa);
|
p.shuffle(sa);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ public class TapOrUntapEffect extends SpellAbilityEffect {
|
|||||||
for (final Card tgtC : tgtCards) {
|
for (final Card tgtC : tgtCards) {
|
||||||
if (tgtC.isInPlay() && ((tgt == null) || tgtC.canBeTargetedBy(sa))) {
|
if (tgtC.isInPlay() && ((tgt == null) || tgtC.canBeTargetedBy(sa))) {
|
||||||
// If the effected card is controlled by the same controller of the SA, default to untap.
|
// 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()) );
|
!tgtC.getController().equals(sa.getActivatingPlayer()) );
|
||||||
|
|
||||||
if (tap) {
|
if (tap) {
|
||||||
|
|||||||
@@ -480,7 +480,7 @@ public class TokenEffect extends SpellAbilityEffect {
|
|||||||
// into battlefield attacking only should work if you are the attacking player
|
// into battlefield attacking only should work if you are the attacking player
|
||||||
if (combat.getAttackingPlayer().equals(controller)) {
|
if (combat.getAttackingPlayer().equals(controller)) {
|
||||||
final FCollectionView<GameEntity> defs = combat.getDefenders();
|
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);
|
combat.addAttacker(c, defender);
|
||||||
combatChanged = true;
|
combatChanged = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -875,7 +875,7 @@ public class CardFactory {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sa.hasParam("GainTextOf")) {
|
if (sa.hasParam("GainTextOf") && originalState != null) {
|
||||||
state.setSetCode(originalState.getSetCode());
|
state.setSetCode(originalState.getSetCode());
|
||||||
state.setRarity(originalState.getRarity());
|
state.setRarity(originalState.getRarity());
|
||||||
state.setImageKey(originalState.getImageKey());
|
state.setImageKey(originalState.getImageKey());
|
||||||
|
|||||||
@@ -1,32 +1,38 @@
|
|||||||
package forge.game.zone;
|
package forge.game.zone;
|
||||||
|
|
||||||
|
import forge.util.Localizer;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.google.common.base.Function;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Enum Zone.
|
* The Enum Zone.
|
||||||
*/
|
*/
|
||||||
public enum ZoneType {
|
public enum ZoneType {
|
||||||
Hand(true),
|
Hand(true, Localizer.getInstance().getMessage("lblHandZone")),
|
||||||
Library(true),
|
Library(true, Localizer.getInstance().getMessage("lblLibraryZone")),
|
||||||
Graveyard(false),
|
Graveyard(false, Localizer.getInstance().getMessage("lblGraveyardZone")),
|
||||||
Battlefield(false),
|
Battlefield(false, Localizer.getInstance().getMessage("lblBattlefieldZone")),
|
||||||
Exile(false),
|
Exile(false, Localizer.getInstance().getMessage("lblExileZone")),
|
||||||
Flashback(false),
|
Flashback(false, Localizer.getInstance().getMessage("lblFlashbackZone")),
|
||||||
Command(false),
|
Command(false, Localizer.getInstance().getMessage("lblCommandZone")),
|
||||||
Stack(false),
|
Stack(false, Localizer.getInstance().getMessage("lblStackZone")),
|
||||||
Sideboard(true),
|
Sideboard(true, Localizer.getInstance().getMessage("lblSideboardZone")),
|
||||||
Ante(false),
|
Ante(false, Localizer.getInstance().getMessage("lblAnteZone")),
|
||||||
SchemeDeck(true),
|
SchemeDeck(true, Localizer.getInstance().getMessage("lblSchemeDeckZone")),
|
||||||
PlanarDeck(true),
|
PlanarDeck(true, Localizer.getInstance().getMessage("lblPlanarDeckZone")),
|
||||||
None(true);
|
None(true, Localizer.getInstance().getMessage("lblNoneZone"));
|
||||||
|
|
||||||
public static final List<ZoneType> STATIC_ABILITIES_SOURCE_ZONES = Arrays.asList(Battlefield, Graveyard, Exile, Command/*, Hand*/);
|
public static final List<ZoneType> STATIC_ABILITIES_SOURCE_ZONES = Arrays.asList(Battlefield, Graveyard, Exile, Command/*, Hand*/);
|
||||||
|
|
||||||
private final boolean holdsHiddenInfo;
|
private final boolean holdsHiddenInfo;
|
||||||
ZoneType(boolean holdsHidden) {
|
private final String zoneName;
|
||||||
|
ZoneType(boolean holdsHidden, String name) {
|
||||||
holdsHiddenInfo = holdsHidden;
|
holdsHiddenInfo = holdsHidden;
|
||||||
|
zoneName = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ZoneType smartValueOf(final String value) {
|
public static ZoneType smartValueOf(final String value) {
|
||||||
@@ -64,6 +70,10 @@ public enum ZoneType {
|
|||||||
return !holdsHiddenInfo;
|
return !holdsHiddenInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getTranslatedName() {
|
||||||
|
return zoneName;
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean isHidden(final String origin) {
|
public static boolean isHidden(final String origin) {
|
||||||
List<ZoneType> zone = ZoneType.listValueOf(origin);
|
List<ZoneType> zone = ZoneType.listValueOf(origin);
|
||||||
|
|
||||||
@@ -82,4 +92,13 @@ public enum ZoneType {
|
|||||||
public static boolean isKnown(final String origin) {
|
public static boolean isKnown(final String origin) {
|
||||||
return !isHidden(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
|
Meerkov
|
||||||
Myrd
|
Myrd
|
||||||
nefigah
|
nefigah
|
||||||
|
Northmoc
|
||||||
OgreBattlecruiser
|
OgreBattlecruiser
|
||||||
pfps
|
pfps
|
||||||
Ryan1729
|
Ryan1729
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ Name:Ajani's Aid
|
|||||||
ManaCost:2 G W
|
ManaCost:2 G W
|
||||||
Types:Enchantment
|
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.
|
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.
|
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: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.
|
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
|
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.
|
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: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
|
DeckNeeds:Name$Angrath, Minotaur Pirate
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/angraths_fury.jpg
|
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.
|
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
|
ManaCost:3 R R
|
||||||
Types:Sorcery
|
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.
|
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
|
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.
|
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
|
ManaCost:3 R R
|
||||||
Types:Sorcery
|
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.
|
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
|
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.
|
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
|
PT:5/2
|
||||||
K:Trample
|
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.
|
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
|
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.
|
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
|
ManaCost:2 W U
|
||||||
Types:Instant
|
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.
|
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
|
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.
|
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
|
PT:3/3
|
||||||
K:Trample
|
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.
|
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
|
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.
|
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
|
ManaCost:2 W W
|
||||||
Types:Sorcery
|
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.
|
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
|
DeckHas:Ability$Counters
|
||||||
DeckHints:Name$Gideon, the Oathsworn
|
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.
|
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
|
ManaCost:4 W
|
||||||
Types:Enchantment
|
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.
|
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.
|
S:Mode$ Continuous | Affected$ Creature.YouCtrl | AddPower$ 1 | AddToughness$ 1 | Description$ Creatures you control get +1/+1.
|
||||||
SVar:PlayMain1:TRUE
|
SVar:PlayMain1:TRUE
|
||||||
DeckHints:Name$Gideon, Martial Paragon
|
DeckHints:Name$Gideon, Martial Paragon
|
||||||
|
|||||||
@@ -2,9 +2,9 @@ Name:Goblin Goon
|
|||||||
ManaCost:3 R
|
ManaCost:3 R
|
||||||
Types:Creature Goblin Mutant
|
Types:Creature Goblin Mutant
|
||||||
PT:6/6
|
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:X:Count$Valid Creature.YouCtrl
|
||||||
SVar:Y:Count$Valid Creature.YouDontCtrl
|
SVar:Y:Count$Valid Creature.ActivePlayerCtrl
|
||||||
SVar:BuffedBy:Creature
|
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.
|
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:Flying
|
||||||
K:Vigilance
|
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.
|
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
|
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.
|
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
|
ManaCost:4 U
|
||||||
Types:Sorcery
|
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.
|
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
|
DeckHints:Name$Jace, Ingenious Mind-Mage
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/grasping_current.jpg
|
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.
|
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
|
ManaCost:3 U U
|
||||||
Types:Sorcery
|
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.
|
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
|
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.
|
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
|
ManaCost:4 R
|
||||||
Types:Sorcery
|
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.
|
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
|
DeckHints:Name$Chandra, Pyrogenius
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/liberating_combustion.jpg
|
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.
|
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
|
ManaCost:4 B B
|
||||||
Types:Sorcery
|
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.
|
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
|
DeckHints:Name$Liliana, Death Wielder
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/lilianas_influence.jpg
|
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.
|
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
|
ManaCost:1 R
|
||||||
Types:Creature Goblin
|
Types:Creature Goblin
|
||||||
PT:2/2
|
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:X:Count$Valid Creature.YouCtrl
|
||||||
SVar:Y:Count$Valid Creature.YouDontCtrl
|
SVar:Y:Count$Valid Creature.ActivePlayerCtrl
|
||||||
SVar:BuffedBy:Creature
|
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.
|
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
|
ManaCost:3 R
|
||||||
Types:Creature Hound
|
Types:Creature Hound
|
||||||
PT:4/4
|
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:X:Count$Valid Land.YouCtrl
|
||||||
SVar:Y:Count$Valid Land.YouDontCtrl
|
SVar:Y:Count$Valid Land.ActivePlayerCtrl
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/monstrous_hound.jpg
|
|
||||||
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.
|
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
|
Types:Legendary Creature Human Cleric
|
||||||
PT:2/2
|
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.
|
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
|
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.
|
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
|
ManaCost:3 G U
|
||||||
Types:Instant
|
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.
|
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
|
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.
|
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
|
ManaCost:3 U U
|
||||||
Types:Instant
|
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.
|
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
|
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.
|
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
|
ManaCost:3 U U
|
||||||
Types:Sorcery
|
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.
|
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
|
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.
|
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
|
Types:Creature Human Knight
|
||||||
PT:5/2
|
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.
|
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
|
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.
|
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
|
Types:Creature Vampire
|
||||||
PT:4/2
|
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.
|
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
|
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.
|
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
|
Types:Creature Dinosaur
|
||||||
PT:4/4
|
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.
|
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
|
DeckHints:Name$Huatli, Dinosaur Knight
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/sun_blessed_mount.jpg
|
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.
|
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
|
ManaCost:3 U B
|
||||||
Types:Sorcery
|
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.
|
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
|
DeckHints:Name$Tezzeret, Master of Metal
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/tezzerets_betrayal.jpg
|
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.
|
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
|
Name:Underworld Dreams
|
||||||
ManaCost:B B B
|
ManaCost:B B B
|
||||||
Types:Enchantment
|
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: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 that player.
|
||||||
Oracle:Whenever an opponent draws a card, Underworld Dreams deals 1 damage to them.
|
|
||||||
|
|||||||
@@ -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
|
ManaCost:3 U B
|
||||||
Types:Legendary Planeswalker Ashiok
|
Types:Legendary Planeswalker Ashiok
|
||||||
Loyalty:5
|
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.
|
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
|
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.
|
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
|
ManaCost:4 R
|
||||||
Types:Creature Satyr Soldier
|
Types:Creature Satyr Soldier
|
||||||
PT:4/4
|
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."
|
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_2_2_satyr_noblock | TokenOwner$ You | LegacyImage$ r 2 2 satyr noblock thb
|
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.
|
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
|
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.
|
||||||
6
forge-gui/res/cardsfolder/upcoming/satyrs_cunning.txt
Normal file
6
forge-gui/res/cardsfolder/upcoming/satyrs_cunning.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
Name:Satyr's Cunning
|
||||||
|
ManaCost:R
|
||||||
|
Types:Sorcery
|
||||||
|
A:SP$ Token | Cost$ R | TokenAmount$ 1 | TokenScript$ r_1_1_satyr_noblock | TokenOwner$ You | LegacyImage$ r 1 1 satyr noblock thb | SpellDescription$ Create a 1/1 red Satyr creature token with "This creature can't block."
|
||||||
|
K:Escape:2 R ExileFromGrave<2/Card.Other>
|
||||||
|
Oracle:Create a 1/1 red Satyr creature token with "This creature can't block."\nEscape — {2}{R}, Exile two other cards from your graveyard. (You may cast this card from your graveyard for its escape cost).
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
Name:Serpent of Yawning Depths
|
||||||
|
ManaCost:4 U U
|
||||||
|
Types:Enchantment Creature Serpent
|
||||||
|
PT:6/6
|
||||||
|
S:Mode$ CantBlockBy | ValidAttacker$ Creature.Kraken+YouCtrl,Creature.Leviathan+YouCtrl,Creature.Octopus+YouCtrl,Creature.Serpent+YouCtrl | ValidBlocker$ Creature.nonKraken+nonLeviathan+nonOctopus+nonSerpent | Description$ Krakens, Leviathans, Octopuses, and Serpents you control can't be blocked except by Krakens, Leviathans, Octopuses, and Serpents.
|
||||||
|
Oracle:Krakens, Leviathans, Octopuses, and Serpents you control can't be blocked except by Krakens, Leviathans, Octopuses, and Serpents.
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user