[FIC] Implement Celes, Rune Knight (#13442)

This commit is contained in:
Balázs Kristóf 2025-03-21 00:14:17 +01:00 committed by GitHub
parent d242d19a72
commit ca3d0b7ba5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 126 additions and 1 deletions

View file

@ -0,0 +1,121 @@
package mage.cards.c;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldOneOrMoreTriggeredAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.counter.AddCountersAllEffect;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.events.ZoneChangeEvent;
import mage.game.permanent.Permanent;
import mage.game.stack.Spell;
import mage.players.Player;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
/**
* @author balazskristof
*/
public final class CelesRuneKnight extends CardImpl {
public CelesRuneKnight(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}{W}{B}");
this.supertype.add(SuperType.LEGENDARY);
this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.WIZARD);
this.subtype.add(SubType.KNIGHT);
this.power = new MageInt(4);
this.toughness = new MageInt(4);
// When Celes enters, discard any number of cards, then draw that many cards plus one.
this.addAbility(new EntersBattlefieldTriggeredAbility(new CelesRuneKnightEffect()));
// Whenever one or more other creatures you control enter, if one or more of them entered from a graveyard or was cast from a graveyard, put a +1/+1 counter on each creature you control.
this.addAbility(new CelesRuneKnightTriggeredAbility());
}
private CelesRuneKnight(final CelesRuneKnight card) {
super(card);
}
@Override
public CelesRuneKnight copy() {
return new CelesRuneKnight(this);
}
}
class CelesRuneKnightEffect extends OneShotEffect {
CelesRuneKnightEffect() {
super(Outcome.DrawCard);
staticText = "discard any number of cards, then draw that many cards plus one";
}
private CelesRuneKnightEffect(final CelesRuneKnightEffect effect) {
super(effect);
}
@Override
public CelesRuneKnightEffect copy() {
return new CelesRuneKnightEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(source.getControllerId());
if (player == null) {
return false;
}
int discarded = player.discard(0, Integer.MAX_VALUE, false, source, game).size();
game.processAction();
player.drawCards(discarded + 1, source, game);
return true;
}
}
class CelesRuneKnightTriggeredAbility extends EntersBattlefieldOneOrMoreTriggeredAbility {
CelesRuneKnightTriggeredAbility() {
super(new AddCountersAllEffect(CounterType.P1P1.createInstance(), StaticFilters.FILTER_CONTROLLED_CREATURE), StaticFilters.FILTER_OTHER_CONTROLLED_CREATURES, TargetController.YOU);
setTriggerPhrase("Whenever one or more other creatures you control enter, "
+ "if one or more of them entered from a graveyard or was cast from a graveyard, ");
}
private CelesRuneKnightTriggeredAbility(final CelesRuneKnightTriggeredAbility ability) {
super(ability);
}
@Override
public CelesRuneKnightTriggeredAbility copy() {
return new CelesRuneKnightTriggeredAbility(this);
}
@Override
public boolean checkEvent(ZoneChangeEvent event, Game game) {
if (super.checkEvent(event, game)) {
Zone fromZone = event.getFromZone();
if (fromZone == Zone.GRAVEYARD) {
return true;
}
if (fromZone == Zone.STACK) {
Permanent permanent = event.getTarget();
Spell spell = game.getSpellOrLKIStack(permanent.getId());
if (spell != null && spell.getFromZone() == Zone.GRAVEYARD) {
return true;
}
}
}
return false;
}
}

View file

@ -19,6 +19,9 @@ public final class FinalFantasyCommander extends ExpansionSet {
super("Final Fantasy Commander", "FIC", ExpansionSet.buildDate(2025, 6, 13), SetType.SUPPLEMENTAL); super("Final Fantasy Commander", "FIC", ExpansionSet.buildDate(2025, 6, 13), SetType.SUPPLEMENTAL);
this.hasBasicLands = false; this.hasBasicLands = false;
cards.add(new SetCardInfo("Celes, Rune Knight", 1, Rarity.MYTHIC, mage.cards.c.CelesRuneKnight.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Celes, Rune Knight", 201, Rarity.MYTHIC, mage.cards.c.CelesRuneKnight.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Celes, Rune Knight", 220, Rarity.MYTHIC, mage.cards.c.CelesRuneKnight.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Cloud, Ex-SOLDIER", 2, Rarity.MYTHIC, mage.cards.c.CloudExSOLDIER.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Cloud, Ex-SOLDIER", 2, Rarity.MYTHIC, mage.cards.c.CloudExSOLDIER.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Cloud, Ex-SOLDIER", 168, Rarity.MYTHIC, mage.cards.c.CloudExSOLDIER.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Cloud, Ex-SOLDIER", 168, Rarity.MYTHIC, mage.cards.c.CloudExSOLDIER.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Cloud, Ex-SOLDIER", 202, Rarity.MYTHIC, mage.cards.c.CloudExSOLDIER.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Cloud, Ex-SOLDIER", 202, Rarity.MYTHIC, mage.cards.c.CloudExSOLDIER.class, NON_FULL_USE_VARIOUS));

View file

@ -29,7 +29,7 @@ public class EntersBattlefieldOneOrMoreTriggeredAbility extends TriggeredAbility
setTriggerPhrase(generateTriggerPhrase()); setTriggerPhrase(generateTriggerPhrase());
} }
private EntersBattlefieldOneOrMoreTriggeredAbility(final EntersBattlefieldOneOrMoreTriggeredAbility ability) { protected EntersBattlefieldOneOrMoreTriggeredAbility(final EntersBattlefieldOneOrMoreTriggeredAbility ability) {
super(ability); super(ability);
this.filter = ability.filter; this.filter = ability.filter;
this.targetController = ability.targetController; this.targetController = ability.targetController;

View file

@ -57177,6 +57177,7 @@ Underground River|Aetherdrift Commander|181|R||Land|||{T}: Add {C}.${T}: Add {U}
Unholy Grotto|Aetherdrift Commander|182|R||Land|||{T}: Add {C}.${B}, {T}: Put target Zombie card from your graveyard on top of your library.| Unholy Grotto|Aetherdrift Commander|182|R||Land|||{T}: Add {C}.${B}, {T}: Put target Zombie card from your graveyard on top of your library.|
Vineglimmer Snarl|Aetherdrift Commander|183|R||Land|||As Vineglimmer Snarl enters, you may reveal a Forest or Island card from your hand. If you don't, Vineglimmer Snarl enters tapped.${T}: Add {G} or {U}.| Vineglimmer Snarl|Aetherdrift Commander|183|R||Land|||As Vineglimmer Snarl enters, you may reveal a Forest or Island card from your hand. If you don't, Vineglimmer Snarl enters tapped.${T}: Add {G} or {U}.|
Yavimaya Coast|Aetherdrift Commander|184|R||Land|||{T}: Add {C}.${T}: Add {G} or {U}. Yavimaya Coast deals 1 damage to you.| Yavimaya Coast|Aetherdrift Commander|184|R||Land|||{T}: Add {C}.${T}: Add {G} or {U}. Yavimaya Coast deals 1 damage to you.|
Celes, Rune Knight|Final Fantasy Commander|1|M|{1}{R}{W}{B}|Legendary Creature - Human Wizard Knight|4|4|When Celes enters, discard any number of cards, then draw that many cards plus one.$Whenever one or more other creatures you control enter, if one or more of them entered from a graveyard or was cast from a graveyard, put a +1/+1 counter on each creature you control.|
Cloud, Ex-SOLDIER|Final Fantasy Commander|2|M|{2}{R}{G}{W}|Legendary Creature - Human Soldier Mercenary|4|4|Haste$When Cloud enters, attach up to one target Equipment you control to it.$Whenever Cloud attacks, draw a card for each equipped attacking creature you control. Then if Cloud has power 7 or greater, create two Treasure tokens.| Cloud, Ex-SOLDIER|Final Fantasy Commander|2|M|{2}{R}{G}{W}|Legendary Creature - Human Soldier Mercenary|4|4|Haste$When Cloud enters, attach up to one target Equipment you control to it.$Whenever Cloud attacks, draw a card for each equipped attacking creature you control. Then if Cloud has power 7 or greater, create two Treasure tokens.|
Terra, Herald of Hope|Final Fantasy Commander|4|M|{R}{W}{B}|Legendary Creature - Human Wizard Warrior|3|3|Trance -- At the beginning of combat on your turn, mill two cards. Terra gains flying until end of turn.$Whenever Terra deals combat damage to a player, you may pay {2}. When you do, return target creature card with power 3 or less from your graveyard to the battlefield tapped.| Terra, Herald of Hope|Final Fantasy Commander|4|M|{R}{W}{B}|Legendary Creature - Human Wizard Warrior|3|3|Trance -- At the beginning of combat on your turn, mill two cards. Terra gains flying until end of turn.$Whenever Terra deals combat damage to a player, you may pay {2}. When you do, return target creature card with power 3 or less from your graveyard to the battlefield tapped.|
Tidus, Yuna's Guardian|Final Fantasy Commander|5|M|{G}{W}{U}|Legendary Creature - Human Warrior|3|3|At the beginning of combat on your turn, you may move a counter from target creature you control onto a second target creature you control.$Cheer - Whenever one or more creatures you control with counters on them deal combat damage to a player, you may draw a card and proliferate. Do this only once each turn.| Tidus, Yuna's Guardian|Final Fantasy Commander|5|M|{G}{W}{U}|Legendary Creature - Human Warrior|3|3|At the beginning of combat on your turn, you may move a counter from target creature you control onto a second target creature you control.$Cheer - Whenever one or more creatures you control with counters on them deal combat damage to a player, you may draw a card and proliferate. Do this only once each turn.|