mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 02:30:08 -08:00
[WHO] Implement The Curse of Fenric (#13718)
--------- Co-authored-by: xenohedron <12538125+xenohedron@users.noreply.github.com>
This commit is contained in:
parent
f94e570f6d
commit
4bc30b4b8e
5 changed files with 200 additions and 2 deletions
|
|
@ -2201,6 +2201,7 @@ public class ScryfallImageSupportTokens {
|
||||||
put("WHO/Human/2", "https://api.scryfall.com/cards/twho/5/en?format=image");
|
put("WHO/Human/2", "https://api.scryfall.com/cards/twho/5/en?format=image");
|
||||||
put("WHO/Human Noble", "https://api.scryfall.com/cards/twho/7/en?format=image");
|
put("WHO/Human Noble", "https://api.scryfall.com/cards/twho/7/en?format=image");
|
||||||
put("WHO/Mark of the Rani", "https://api.scryfall.com/cards/twho/15?format=image");
|
put("WHO/Mark of the Rani", "https://api.scryfall.com/cards/twho/15?format=image");
|
||||||
|
put("WHO/Mutant", "https://api.scryfall.com/cards/twho/18?format=image");
|
||||||
put("WHO/Soldier", "https://api.scryfall.com/cards/twho/8?format=image");
|
put("WHO/Soldier", "https://api.scryfall.com/cards/twho/8?format=image");
|
||||||
put("WHO/Treasure/1", "https://api.scryfall.com/cards/twho/28?format=image");
|
put("WHO/Treasure/1", "https://api.scryfall.com/cards/twho/28?format=image");
|
||||||
put("WHO/Treasure/2", "https://api.scryfall.com/cards/twho/29?format=image");
|
put("WHO/Treasure/2", "https://api.scryfall.com/cards/twho/29?format=image");
|
||||||
|
|
|
||||||
162
Mage.Sets/src/mage/cards/t/TheCurseOfFenric.java
Normal file
162
Mage.Sets/src/mage/cards/t/TheCurseOfFenric.java
Normal file
|
|
@ -0,0 +1,162 @@
|
||||||
|
package mage.cards.t;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.SagaAbility;
|
||||||
|
import mage.abilities.effects.OneShotEffect;
|
||||||
|
import mage.abilities.effects.common.FightTargetsEffect;
|
||||||
|
import mage.abilities.effects.common.continuous.BecomesCreatureTargetEffect;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.*;
|
||||||
|
import mage.filter.FilterPermanent;
|
||||||
|
import mage.filter.StaticFilters;
|
||||||
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
|
import mage.filter.predicate.mageobject.NamePredicate;
|
||||||
|
import mage.filter.predicate.other.AnotherTargetPredicate;
|
||||||
|
import mage.filter.predicate.permanent.TokenPredicate;
|
||||||
|
import mage.game.Game;
|
||||||
|
import mage.game.permanent.Permanent;
|
||||||
|
import mage.game.permanent.token.Mutant33DeathtouchToken;
|
||||||
|
import mage.game.permanent.token.Token;
|
||||||
|
import mage.game.permanent.token.TokenImpl;
|
||||||
|
import mage.target.Target;
|
||||||
|
import mage.target.TargetPermanent;
|
||||||
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
|
import mage.target.targetadjustment.ForEachPlayerTargetsAdjuster;
|
||||||
|
import mage.target.targetpointer.EachTargetPointer;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author padfoothelix
|
||||||
|
*/
|
||||||
|
public final class TheCurseOfFenric extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterCreaturePermanent nontokenFilter = new FilterCreaturePermanent("nontoken creature");
|
||||||
|
private static final FilterPermanent mutantFilter = new FilterPermanent(SubType.MUTANT, "mutant");
|
||||||
|
private static final FilterCreaturePermanent fenricFilter = new FilterCreaturePermanent("another target creature named Fenric");
|
||||||
|
|
||||||
|
static {
|
||||||
|
nontokenFilter.add(TokenPredicate.FALSE);
|
||||||
|
fenricFilter.add(new NamePredicate("Fenric"));
|
||||||
|
fenricFilter.add(new AnotherTargetPredicate(2));
|
||||||
|
}
|
||||||
|
|
||||||
|
public TheCurseOfFenric(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}{W}");
|
||||||
|
|
||||||
|
this.subtype.add(SubType.SAGA);
|
||||||
|
|
||||||
|
// (As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)
|
||||||
|
SagaAbility sagaAbility = new SagaAbility(this);
|
||||||
|
|
||||||
|
// I -- For each player, destroy up to one target creature that player controls. For each creature destroyed this way, its controller creates a 3/3 green Mutant creature token with deathtouch.
|
||||||
|
sagaAbility.addChapterEffect(
|
||||||
|
this, SagaChapter.CHAPTER_I,
|
||||||
|
ability -> {
|
||||||
|
ability.addEffect(new TheCurseOfFenricDestroyEffect()
|
||||||
|
.setText("for each player, destroy up to one target creature " +
|
||||||
|
"that player controls. For each creature destroyed " +
|
||||||
|
"this way, its controller creates a 3/3 green Mutant " +
|
||||||
|
"creature with deathtouch")
|
||||||
|
.setTargetPointer(new EachTargetPointer())
|
||||||
|
);
|
||||||
|
ability.addTarget(new TargetPermanent(0, 1, StaticFilters.FILTER_PERMANENT_CREATURE));
|
||||||
|
ability.setTargetAdjuster(new ForEachPlayerTargetsAdjuster(false, false));
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// II -- Target nontoken creature becomes a 6/6 legendary Horror creature named Fenric and loses all abilities.
|
||||||
|
sagaAbility.addChapterEffect(
|
||||||
|
this, SagaChapter.CHAPTER_II,
|
||||||
|
new BecomesCreatureTargetEffect(
|
||||||
|
new TheCurseOfFenricHorrorToken(),
|
||||||
|
true, false, Duration.EndOfGame, true
|
||||||
|
),
|
||||||
|
new TargetCreaturePermanent(nontokenFilter)
|
||||||
|
);
|
||||||
|
|
||||||
|
// III -- Target Mutant fights another target creature named Fenric.
|
||||||
|
sagaAbility.addChapterEffect(
|
||||||
|
this, SagaChapter.CHAPTER_III,
|
||||||
|
ability -> {
|
||||||
|
ability.addEffect(new FightTargetsEffect().setText(
|
||||||
|
"Target Mutant fights another target creature named Fenric"
|
||||||
|
));
|
||||||
|
ability.addTarget(new TargetPermanent(mutantFilter).setTargetTag(1));
|
||||||
|
ability.addTarget(new TargetCreaturePermanent(fenricFilter).setTargetTag(2));
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
this.addAbility(sagaAbility);
|
||||||
|
}
|
||||||
|
|
||||||
|
private TheCurseOfFenric(final TheCurseOfFenric card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TheCurseOfFenric copy() {
|
||||||
|
return new TheCurseOfFenric(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class TheCurseOfFenricDestroyEffect extends OneShotEffect {
|
||||||
|
|
||||||
|
TheCurseOfFenricDestroyEffect() {
|
||||||
|
super(Outcome.DestroyPermanent);
|
||||||
|
}
|
||||||
|
|
||||||
|
private TheCurseOfFenricDestroyEffect(final TheCurseOfFenricDestroyEffect effect) {
|
||||||
|
super(effect);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TheCurseOfFenricDestroyEffect copy() {
|
||||||
|
return new TheCurseOfFenricDestroyEffect(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(Game game, Ability source) {
|
||||||
|
Token mutantToken = new Mutant33DeathtouchToken();
|
||||||
|
List<UUID> playersToCreateToken = new ArrayList<>();
|
||||||
|
for (Target target : source.getTargets()) {
|
||||||
|
Permanent targetCreature = game.getPermanent(target.getFirstTarget());
|
||||||
|
if (targetCreature != null) {
|
||||||
|
UUID controllerId = targetCreature.getControllerId();
|
||||||
|
if (targetCreature.destroy(source, game, false)) {
|
||||||
|
playersToCreateToken.add(controllerId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
game.processAction();
|
||||||
|
for (UUID controllerId : playersToCreateToken) {
|
||||||
|
mutantToken.putOntoBattlefield(1, game, source, controllerId);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class TheCurseOfFenricHorrorToken extends TokenImpl {
|
||||||
|
|
||||||
|
TheCurseOfFenricHorrorToken() {
|
||||||
|
super("Fenric", "6/6 legendary Horror creature named Fenric");
|
||||||
|
this.supertype.add(SuperType.LEGENDARY);
|
||||||
|
this.cardType.add(CardType.CREATURE);
|
||||||
|
this.subtype.add(SubType.HORROR);
|
||||||
|
this.power = new MageInt(6);
|
||||||
|
this.toughness = new MageInt(6);
|
||||||
|
}
|
||||||
|
|
||||||
|
private TheCurseOfFenricHorrorToken(final TheCurseOfFenricHorrorToken token) {
|
||||||
|
super(token);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TheCurseOfFenricHorrorToken copy() {
|
||||||
|
return new TheCurseOfFenricHorrorToken(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -877,8 +877,8 @@ public final class DoctorWho extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("The Caves of Androzani", 15, Rarity.RARE, mage.cards.t.TheCavesOfAndrozani.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("The Caves of Androzani", 15, Rarity.RARE, mage.cards.t.TheCavesOfAndrozani.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("The Caves of Androzani", 620, Rarity.RARE, mage.cards.t.TheCavesOfAndrozani.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("The Caves of Androzani", 620, Rarity.RARE, mage.cards.t.TheCavesOfAndrozani.class, NON_FULL_USE_VARIOUS));
|
||||||
//cards.add(new SetCardInfo("The Cheetah Planet", 574, Rarity.COMMON, mage.cards.t.TheCheetahPlanet.class));
|
//cards.add(new SetCardInfo("The Cheetah Planet", 574, Rarity.COMMON, mage.cards.t.TheCheetahPlanet.class));
|
||||||
//cards.add(new SetCardInfo("The Curse of Fenric", 118, Rarity.RARE, mage.cards.t.TheCurseOfFenric.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("The Curse of Fenric", 118, Rarity.RARE, mage.cards.t.TheCurseOfFenric.class, NON_FULL_USE_VARIOUS));
|
||||||
//cards.add(new SetCardInfo("The Curse of Fenric", 723, Rarity.RARE, mage.cards.t.TheCurseOfFenric.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("The Curse of Fenric", 723, Rarity.RARE, mage.cards.t.TheCurseOfFenric.class, NON_FULL_USE_VARIOUS));
|
||||||
//cards.add(new SetCardInfo("The Cyber-Controller", 119, Rarity.RARE, mage.cards.t.TheCyberController.class, NON_FULL_USE_VARIOUS));
|
//cards.add(new SetCardInfo("The Cyber-Controller", 119, Rarity.RARE, mage.cards.t.TheCyberController.class, NON_FULL_USE_VARIOUS));
|
||||||
//cards.add(new SetCardInfo("The Cyber-Controller", 405, Rarity.RARE, mage.cards.t.TheCyberController.class, NON_FULL_USE_VARIOUS));
|
//cards.add(new SetCardInfo("The Cyber-Controller", 405, Rarity.RARE, mage.cards.t.TheCyberController.class, NON_FULL_USE_VARIOUS));
|
||||||
//cards.add(new SetCardInfo("The Cyber-Controller", 724, Rarity.RARE, mage.cards.t.TheCyberController.class, NON_FULL_USE_VARIOUS));
|
//cards.add(new SetCardInfo("The Cyber-Controller", 724, Rarity.RARE, mage.cards.t.TheCyberController.class, NON_FULL_USE_VARIOUS));
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
package mage.game.permanent.token;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.keyword.DeathtouchAbility;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author padfoothelix
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
public final class Mutant33DeathtouchToken extends TokenImpl {
|
||||||
|
|
||||||
|
public Mutant33DeathtouchToken() {
|
||||||
|
super("Mutant Token", "3/3 green mutant creature token with deathtouch");
|
||||||
|
cardType.add(CardType.CREATURE);
|
||||||
|
subtype.add(SubType.MUTANT);
|
||||||
|
color.setGreen(true);
|
||||||
|
power = new MageInt(3);
|
||||||
|
toughness = new MageInt(3);
|
||||||
|
|
||||||
|
addAbility(DeathtouchAbility.getInstance());
|
||||||
|
}
|
||||||
|
|
||||||
|
private Mutant33DeathtouchToken(final Mutant33DeathtouchToken token) {
|
||||||
|
super(token);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Mutant33DeathtouchToken copy() {
|
||||||
|
return new Mutant33DeathtouchToken(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -2253,6 +2253,7 @@
|
||||||
|Generate|TOK:WHO|Human|2||TheEleventhHourToken|
|
|Generate|TOK:WHO|Human|2||TheEleventhHourToken|
|
||||||
|Generate|TOK:WHO|Human Noble|||TheGirlInTheFireplaceHumanNobleToken|
|
|Generate|TOK:WHO|Human Noble|||TheGirlInTheFireplaceHumanNobleToken|
|
||||||
|Generate|TOK:WHO|Mark of the Rani|||MarkOfTheRaniToken|
|
|Generate|TOK:WHO|Mark of the Rani|||MarkOfTheRaniToken|
|
||||||
|
|Generate|TOK:WHO|Mutant|||Mutant33DeathtouchToken|
|
||||||
|Generate|TOK:WHO|Soldier|||SoldierToken|
|
|Generate|TOK:WHO|Soldier|||SoldierToken|
|
||||||
|Generate|TOK:WHO|Treasure|1||TreasureToken|
|
|Generate|TOK:WHO|Treasure|1||TreasureToken|
|
||||||
|Generate|TOK:WHO|Treasure|2||TreasureToken|
|
|Generate|TOK:WHO|Treasure|2||TreasureToken|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue