Saga cards (#1636)

* Add The Flame of Keld

* Add The Mending of Dominaria

* Add Fall of the Thran

* Add Rite of Belzenlok and its tokens

* Add Song of Freyalise

* Add Phyrexian Scriptures

* Add Time of Ice

* Add accept only own upkeep in Song of Freyalise

* Change mana ability in Song of Freyalise

* Use new list to contain cards being shuffled into the library in The
Mending of Dominaria

* Use PutOntoBattlefieldAction in The Mending of Dominaria

* Use PutOntoBattlefieldAction in Fall of the Thran
master
Ada Joule 2018-11-27 11:49:31 +07:00 committed by Melvin Zhang
parent 2ff0e11de6
commit ae1794fbfc
16 changed files with 359 additions and 14 deletions

View File

@ -0,0 +1,8 @@
name=0/1 black Cleric creature token
token=Cleric
image=https://img.scryfall.com/cards/large/en/tdom/4.jpg
value=1
type=Creature
subtype=Cleric
color=b
pt=0/1

View File

@ -0,0 +1,27 @@
def choice = new MagicTargetChoice("another creature to sacrifice");
[
new AtUpkeepTrigger() {
@Override
public boolean accept(final MagicPermanent permanent, final MagicPlayer upkeepPlayer) {
return permanent.isController(upkeepPlayer);
}
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicPlayer upkeepPlayer) {
return new MagicEvent(
permanent,
this,
"PN sacrifices another creature. If PN can't, SN deals 6 damage to PN."
);
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicEvent sacrifice = new MagicSacrificePermanentEvent(event.getSource(), choice);
if (sacrifice.isSatisfied()) {
game.addEvent(sacrifice);
} else {
game.doAction(new DealDamageAction(event.getSource(), event.getPlayer(), 6));
}
}
}
]

View File

@ -0,0 +1,11 @@
name=6/6 black Demon creature token
token=Demon
image=https://img.scryfall.com/cards/large/en/tdom/7.jpg
value=4
type=Creature
subtype=Demon
color=b
pt=6/6
ability=Flying, Trample
requires_groovy_code
oracle=Flying, Trample\nAt the beginning of your upkeep, sacrifice another creature. If you can't, this creature deals 6 damage to you.

View File

@ -0,0 +1,54 @@
def mainEvent = {
final MagicPermanent permanent, final MagicEventAction action ->
return new MagicEvent(
permanent,
action,
"Each player returns two land cards from their graveyard to the battlefield."
);
}
def putlands = {
final MagicGame game, final MagicEvent event ->
event.processChosenCards(game, {
game.doAction(new PutOntoBattlefieldAction(
MagicLocationType.Graveyard,
it,
event.getPlayer()
));
});
}
def act = {
final MagicGame game, final MagicEvent event ->
for (final MagicPlayer player : game.getAPNAP()) {
final MagicCardList graveyard = player.getGraveyard();
game.addEvent(new MagicEvent(
event.getSource(),
player,
new MagicFromCardListChoice(
graveyard.findAll({ it.hasType(MagicType.Land) }),
graveyard,
2
),
putlands,
"PN returns \$."
));
}
}
[
new SagaChapterTrigger(2) {
@Override
public MagicEvent executeTrigger(final MagicGame game, final MagicPermanent permanent, final MagicCounterChangeTriggerData data) {
return mainEvent(permanent, act);
}
},
new SagaChapterTrigger(3) {
@Override
public MagicEvent executeTrigger(final MagicGame game, final MagicPermanent permanent, final MagicCounterChangeTriggerData data) {
return mainEvent(permanent, act);
}
}
]

View File

@ -5,7 +5,7 @@ rarity=R
type=Enchantment
subtype=Saga
cost={5}{W}
ability=I — Destroy all lands.;\
II, III — Each player returns two land cards from their graveyard to the battlefield.
ability=I — Destroy all lands.
timing=enchantment
requires_groovy_code
oracle=I — Destroy all lands.\nII, III — Each player returns two land cards from their graveyard to the battlefield.

View File

@ -0,0 +1,32 @@
[
new SagaChapterTrigger(1) {
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent , final MagicCounterChangeTriggerData data) {
return new MagicEvent(
permanent,
new MagicMayChoice("Choose a target creature?", POS_TARGET_CREATURE),
this,
"PN puts a +1/+1 counter on up to one target creature\$\$. " +
"That creature becomes an artifact in addition to its other types."
);
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
if (event.isYes()) {
event.processTargetPermanent(game, {
game.doAction(new ChangeCountersAction(
event.getPlayer(),
it,
MagicCounterType.PlusOne,
1
));
game.doAction(new AddStaticAction(
it,
MagicStatic.Artifact
));
});
}
}
}
]

View File

@ -5,8 +5,8 @@ rarity=M
type=Enchantment
subtype=Saga
cost={2}{B}{B}
ability=I — Put a +1/+1 counter on up to one target creature. That creature becomes an artifact in addition to its other types.;\
II — Destroy all nonartifact creatures.;\
III — Exile all cards from all opponents' graveyards.
ability=II — Destroy all nonartifact creatures.;\
III — Exile all cards from your opponents' graveyards.
timing=enchantment
requires_groovy_code
oracle=I — Put a +1/+1 counter on up to one target creature. That creature becomes an artifact in addition to its other types.\nII — Destroy all nonartifact creatures.\nIII — Exile all cards from all opponents' graveyards.

View File

@ -6,6 +6,6 @@ type=Enchantment
subtype=Saga
cost={2}{B}{B}
ability=I, II — Create two 0/1 black Cleric creature tokens.;\
III — Create a 6/6 black Demon creature token with flying, trample, and "At the beginning of your upkeep, sacrifice another creature. If you can't, this creature deals 6 damage to you."
III — Create a 6/6 black Demon creature token.
timing=enchantment
oracle=I, II — Create two 0/1 black Cleric creature tokens.\nIII — Create a 6/6 black Demon creature token with flying, trample, and "At the beginning of your upkeep, sacrifice another creature. If you can't, this creature deals 6 damage to you."

View File

@ -0,0 +1,79 @@
def manaAbility = new MagicManaActivation(MagicManaType.getList("one mana of any color")) {
@Override
public Iterable<? extends MagicEvent> getCostEvent(final MagicPermanent permanent) {
return [ new MagicTapEvent(permanent) ];
}
}
def MANA = new MagicStatic(MagicLayer.Ability) {
@Override
public void modAbilityFlags(final MagicPermanent source, final MagicPermanent permanent, final Set<MagicAbility> flags) {
permanent.addAbility(manaAbility);
}
};
def c12Action = {
final MagicGame outerGame, final MagicEvent outerEvent ->
final MagicPlayer player = outerEvent.getPlayer();
player.getPermanents().findAll({ it.hasType(MagicType.Creature) }).each {
outerGame.doAction(new AddStaticAction(it, MANA));
final AtUpkeepTrigger cleanup = new AtUpkeepTrigger() {
@Override
public boolean accept(final MagicPermanent permanent, final MagicPlayer upkeepPlayer) {
return permanent.isController(upkeepPlayer);
}
@Override
public MagicEvent executeTrigger(final MagicGame game, final MagicPermanent permanent, final MagicPlayer upkeepPlayer) {
game.addDelayedAction(new RemoveStaticAction(permanent, MANA));
game.addDelayedAction(new RemoveTriggerAction(permanent, this));
return MagicEvent.NONE;
}
}
outerGame.doAction(new AddTriggerAction(it, cleanup));
}
}
def c12Event = {
final MagicPermanent permanent ->
return new MagicEvent(
permanent,
c12Action,
"Until your next turn, creatures PN controls gain \"{T}: Add one mana of any color.\""
);
}
[
new SagaChapterTrigger(1) {
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicCounterChangeTriggerData data) {
return c12Event(permanent);
}
},
new SagaChapterTrigger(2) {
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicCounterChangeTriggerData data) {
return c12Event(permanent);
}
},
new SagaChapterTrigger(3) {
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicCounterChangeTriggerData data) {
return new MagicEvent(
permanent,
this,
"PN puts a +1/+1 counter on each creature PN controls. Those creatures gain vigilance, trample, and indestructible until end of turn."
);
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicPlayer player = event.getPlayer();
player.getPermanents().findAll({ it.hasType(MagicType.Creature) }).each {
game.doAction(new ChangeCountersAction(player, it, MagicCounterType.PlusOne, 1));
game.doAction(new GainAbilityAction(it, MagicAbility.Vigilance, MagicAbility.Trample, MagicAbility.Indestructible));
}
}
}
]

View File

@ -5,7 +5,6 @@ rarity=U
type=Enchantment
subtype=Saga
cost={1}{G}
ability=I, II — Until your next turn, creatures you control gain "{T}: Add one mana of any color.";\
III — Put a +1/+1 counter on each creature you control. Those creatures gain vigilance, trample, and indestructible until end of turn.
timing=enchantment
requires_groovy_code
oracle=I, II — Until your next turn, creatures you control gain "{T}: Add one mana of any color."\nIII — Put a +1/+1 counter on each creature you control. Those creatures gain vigilance, trample, and indestructible until end of turn.

View File

@ -0,0 +1,32 @@
def trigger = {
final MagicPlayer player ->
return new IfDamageWouldBeDealtTrigger(MagicTrigger.INCREASE_DAMAGE) {
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicDamage damage) {
if (damage.getSource().hasColor(MagicColor.Red) &&
(damage.getTarget().isPermanent() || damage.getTarget().isPlayer())
) {
damage.setAmount(damage.getAmount() + 2);
}
return MagicEvent.NONE;
}
}
}
[
new SagaChapterTrigger(3) {
@Override
public MagicEvent executeTrigger(final MagicGame game, final MagicPermanent permanent, final MagicCounterChangeTriggerData data) {
return new MagicEvent(
permanent,
this,
"If a red source PN controls would deal damage to a permanent or player this turn, it deals that much damage plus to to that permanent or player instead."
);
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new AddTurnTriggerAction(trigger(event.getPlayer())));
}
}
]

View File

@ -6,7 +6,7 @@ type=Enchantment
subtype=Saga
cost={1}{R}
ability=I — Discard your hand.;\
II — Draw two cards.;\
III — If a red source you control would deal damage to a permanent or player this turn, it deals that much damage plus 2 to that permanent or player instead.
II — Draw two cards.
timing=enchantment
requires_groovy_code
oracle=I — Discard your hand.\nII — Draw two cards.\nIII — If a red source you control would deal damage to a permanent or player this turn, it deals that much damage plus 2 to that permanent or player instead.

View File

@ -0,0 +1,62 @@
def returnAction = {
final MagicGame game, final MagicEvent event ->
if (event.isYes()) {
event.processTargetCard(game, {
game.doAction(new ShiftCardAction(it, MagicLocationType.Graveyard, MagicLocationType.OwnersHand));
});
}
}
def chapter12Action = {
final MagicGame game, final MagicEvent event ->
game.doAction(new MillLibraryAction(event.getPlayer(), 2));
game.addEvent(new MagicEvent(
event.getSource(),
new MagicMayChoice(new MagicTargetChoice("a creature card from your graveyard")),
returnAction,
"then PN may\$ return a creature card from PN's graveyard\$ to PN's hand."
));
}
def chapter12event = {
final MagicPermanent permanent ->
return new MagicEvent(
permanent,
chapter12Action,
"Put the top two cards of PN's library into PN's graveyard,"
);
}
[
new SagaChapterTrigger(1) {
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicCounterChangeTriggerData data) {
return chapter12event(permanent);
}
},
new SagaChapterTrigger(2) {
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicCounterChangeTriggerData data) {
return chapter12event(permanent);
}
},
new SagaChapterTrigger(3) {
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicCounterChangeTriggerData data) {
return new MagicEvent(
permanent,
this,
"Return all land cards from PN's graveyard to the battlefield, " +
"then shuffle PN's graveyard into PN's library."
);
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
card(MagicType.Land).from(MagicTargetType.Graveyard).filter(event) each {
game.doAction(new PutOntoBattlefieldAction(MagicLocationType.Graveyard, it, event.getPlayer()));
}
game.doAction(new ShuffleCardsIntoLibraryAction(new MagicCardList(event.getPlayer().getGraveyard()), MagicLocationType.Graveyard));
}
}
]

View File

@ -5,7 +5,6 @@ rarity=R
type=Enchantment
subtype=Saga
cost={3}{G}{G}
ability=I, II — Put the top two cards of your library into your graveyard, then you may return a creature card from your graveyard to your hand.;\
III — Return all land cards from your graveyard to the battlefield, then shuffle your graveyard into your library.
timing=enchantment
requires_groovy_code
oracle=I, II — Put the top two cards of your library into your graveyard, then you may return a creature card from your graveyard to your hand.\nIII — Return all land cards from your graveyard to the battlefield, then shuffle your graveyard into your library.

View File

@ -0,0 +1,42 @@
def action = {
final MagicGame game, final MagicEvent event ->
event.processTargetPermanent(game, {
final MagicPermanent source = event.getPermanent();
game.doAction(new TapAction(it));
game.doAction(new AddStaticAction(
source,
MagicStatic.AsLongAsCond(
it,
MagicAbility.DoesNotUntap,
MagicConditionFactory.PlayerControlsSource(event.getPlayer()
))
));
});
}
def event = {
final MagicPermanent permanent ->
return new MagicEvent(
permanent,
TARGET_CREATURE_YOUR_OPPONENT_CONTROLS,
action,
"Tap target creature an opponent controls\$. " +
"It doesn't untap during its controller's untap step for as long as you control SN."
);
}
[
new SagaChapterTrigger(1) {
@Override
public MagicEvent executeTrigger(final MagicGame game, final MagicPermanent permanent, final MagicCounterChangeTriggerData data) {
return event(permanent);
}
},
new SagaChapterTrigger(2) {
@Override
public MagicEvent executeTrigger(final MagicGame game, final MagicPermanent permanent, final MagicCounterChangeTriggerData data) {
return event(permanent);
}
}
]

View File

@ -5,7 +5,7 @@ rarity=U
type=Enchantment
subtype=Saga
cost={3}{U}
ability=I, II — Tap target creature an opponent controls. It doesn't untap during its controller's untap step for as long as you control SN.;\
III — Return all tapped creatures to their owners' hands.
ability=III — Return all tapped creatures to their owners' hands.
timing=enchantment
requires_groovy_code
oracle=I, II — Tap target creature an opponent controls. It doesn't untap during its controller's untap step for as long as you control Time of Ice.\nIII — Return all tapped creatures to their owners' hands.