[WHO] Implement Graham O'Brien, Iraxxa Empress of Mars, Sisterhood of Karn, Memory Worm, Flaming Tyrannosaurus (#11275)

* [WHO] Implement Graham O'Brien

* [WHO] Implement Iraxxa, Empress of Mars

* [WHO] Implement Sisterhood of Karn

* [WHO] Implement Memory Worm

* [WHO] Implement Flaming Tyrannosaurus

* fix token name

---------

Co-authored-by: xenohedron <xenohedron@users.noreply.github.com>
This commit is contained in:
Susucre 2023-10-08 07:38:09 +02:00 committed by GitHub
parent 21bab428e7
commit 39522cdc59
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 354 additions and 0 deletions

View file

@ -0,0 +1,74 @@
package mage.cards.f;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.DiesSourceTriggeredAbility;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.dynamicvalue.common.SourcePermanentPowerCount;
import mage.abilities.effects.common.DamagePlayersEffect;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.MenaceAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.filter.FilterSpell;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.card.CastFromZonePredicate;
import mage.target.common.TargetAnyTarget;
import java.util.UUID;
/**
* @author Susucr
*/
public final class FlamingTyrannosaurus extends CardImpl {
private static final FilterSpell filter = new FilterSpell("a spell from anywhere other than your hand");
static {
filter.add(Predicates.not(new CastFromZonePredicate(Zone.HAND)));
}
public FlamingTyrannosaurus(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{R}{R}");
this.subtype.add(SubType.DINOSAUR);
this.power = new MageInt(5);
this.toughness = new MageInt(5);
// Menace
this.addAbility(new MenaceAbility(false));
// Paradox -- Whenever you cast a spell from anywhere other than your hand, Flaming Tyrannosaurus deals 3 damage to any target. Then put a +1/+1 counter on Flaming Tyrannosaurus.
Ability ability = new SpellCastControllerTriggeredAbility(
new DamageTargetEffect(3),
filter, false
);
ability.addEffect(new AddCountersSourceEffect(
CounterType.P1P1.createInstance()
).concatBy("Then"));
ability.addTarget(new TargetAnyTarget());
this.addAbility(ability.withFlavorWord("Paradox"));
// When Flaming Tyrannosaurus dies, it deals damage equal to its power to each opponent.
this.addAbility(new DiesSourceTriggeredAbility(
new DamagePlayersEffect(new SourcePermanentPowerCount(), TargetController.OPPONENT)
.setText("it deals damage equal to its power to each opponent")
));
}
private FlamingTyrannosaurus(final FlamingTyrannosaurus card) {
super(card);
}
@Override
public FlamingTyrannosaurus copy() {
return new FlamingTyrannosaurus(this);
}
}

View file

@ -0,0 +1,58 @@
package mage.cards.g;
import mage.MageInt;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.keyword.DoctorsCompanionAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.FilterSpell;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.card.CastFromZonePredicate;
import mage.game.permanent.token.FoodToken;
import java.util.UUID;
/**
* @author Susucr
*/
public final class GrahamOBrien extends CardImpl {
private static final FilterSpell filter = new FilterSpell("a spell from anywhere other than your hand");
static {
filter.add(Predicates.not(new CastFromZonePredicate(Zone.HAND)));
}
public GrahamOBrien(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
this.supertype.add(SuperType.LEGENDARY);
this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.PILOT);
this.power = new MageInt(2);
this.toughness = new MageInt(2);
// Paradox -- Whenever you cast a spell from anywhere other than your hand, create a Food token.
this.addAbility(new SpellCastControllerTriggeredAbility(
new CreateTokenEffect(new FoodToken()),
filter, false
).withFlavorWord("Paradox"));
// Doctor's companion
this.addAbility(DoctorsCompanionAbility.getInstance());
}
private GrahamOBrien(final GrahamOBrien card) {
super(card);
}
@Override
public GrahamOBrien copy() {
return new GrahamOBrien(this);
}
}

View file

@ -0,0 +1,62 @@
package mage.cards.i;
import mage.MageInt;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.keyword.BattleCryAbility;
import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.FilterSpell;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.card.CastFromZonePredicate;
import mage.game.permanent.token.AlienWarriorToken;
import java.util.UUID;
/**
* @author Susucr
*/
public final class IraxxaEmpressOfMars extends CardImpl {
private static final FilterSpell filter = new FilterSpell("a spell from anywhere other than your hand");
static {
filter.add(Predicates.not(new CastFromZonePredicate(Zone.HAND)));
}
public IraxxaEmpressOfMars(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}{R}");
this.supertype.add(SuperType.LEGENDARY);
this.subtype.add(SubType.ALIEN);
this.subtype.add(SubType.WARRIOR);
this.power = new MageInt(5);
this.toughness = new MageInt(4);
// Trample
this.addAbility(TrampleAbility.getInstance());
// Battle cry
this.addAbility(new BattleCryAbility());
// Paradox -- Whenever you cast a spell from anywhere other than your hand, create a 2/2 red Alien Warrior creature token.
this.addAbility(new SpellCastControllerTriggeredAbility(
new CreateTokenEffect(new AlienWarriorToken()),
filter, false
).withFlavorWord("Paradox"));
}
private IraxxaEmpressOfMars(final IraxxaEmpressOfMars card) {
super(card);
}
@Override
public IraxxaEmpressOfMars copy() {
return new IraxxaEmpressOfMars(this);
}
}

View file

@ -0,0 +1,66 @@
package mage.cards.m;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.DrawCardTargetEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.effects.common.discard.DiscardTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.filter.FilterSpell;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.card.CastFromZonePredicate;
import mage.target.TargetPlayer;
import java.util.UUID;
/**
* @author Susucr
*/
public final class MemoryWorm extends CardImpl {
private static final FilterSpell filter = new FilterSpell("a spell from anywhere other than your hand");
static {
filter.add(Predicates.not(new CastFromZonePredicate(Zone.HAND)));
}
public MemoryWorm(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}");
this.subtype.add(SubType.ALIEN);
this.subtype.add(SubType.WORM);
this.power = new MageInt(1);
this.toughness = new MageInt(1);
// Paradox -- Whenever you cast a spell from anywhere other than your hand, Memory Worm deals 2 damage to target player. That player discards a card, then draws a card. Put a +1/+1 counter on Memory Worm.
Ability ability = new SpellCastControllerTriggeredAbility(
new DamageTargetEffect(2),
filter, false
);
ability.addTarget(new TargetPlayer());
ability.addEffect(new DiscardTargetEffect(1)
.setText("That player discards a card"));
ability.addEffect(new DrawCardTargetEffect(1)
.setText(", then draws a card"));
ability.addEffect(new AddCountersSourceEffect(
CounterType.P1P1.createInstance()
));
this.addAbility(ability.withFlavorWord("Paradox"));
}
private MemoryWorm(final MemoryWorm card) {
super(card);
}
@Override
public MemoryWorm copy() {
return new MemoryWorm(this);
}
}

View file

@ -0,0 +1,59 @@
package mage.cards.s;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.common.DoubleCountersSourceEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.filter.FilterSpell;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.card.CastFromZonePredicate;
import java.util.UUID;
/**
* @author Susucr
*/
public final class SisterhoodOfKarn extends CardImpl {
private static final FilterSpell filter = new FilterSpell("a spell from anywhere other than your hand");
static {
filter.add(Predicates.not(new CastFromZonePredicate(Zone.HAND)));
}
public SisterhoodOfKarn(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
this.subtype.add(SubType.CLERIC);
this.power = new MageInt(0);
this.toughness = new MageInt(0);
// Sisterhood of Karn enters the battlefield with a +1/+1 counter on it.
this.addAbility(new EntersBattlefieldAbility(
new AddCountersSourceEffect(CounterType.P1P1.createInstance()),
"with a +1/+1 counter on it"
));
// Paradox -- Whenever you cast a spell from anywhere other than your hand, double the number of +1/+1 counters on Sisterhood of Karn.
this.addAbility(new SpellCastControllerTriggeredAbility(
new DoubleCountersSourceEffect(CounterType.P1P1),
filter, false
).withFlavorWord("Paradox"));
}
private SisterhoodOfKarn(final SisterhoodOfKarn card) {
super(card);
}
@Override
public SisterhoodOfKarn copy() {
return new SisterhoodOfKarn(this);
}
}

View file

@ -64,6 +64,7 @@ public final class DoctorWho extends ExpansionSet {
cards.add(new SetCardInfo("Feed the Swarm", 221, Rarity.COMMON, mage.cards.f.FeedTheSwarm.class));
cards.add(new SetCardInfo("Fetid Pools", 277, Rarity.RARE, mage.cards.f.FetidPools.class));
cards.add(new SetCardInfo("Fiery Islet", 278, Rarity.RARE, mage.cards.f.FieryIslet.class));
cards.add(new SetCardInfo("Flaming Tyrannosaurus", 85, Rarity.RARE, mage.cards.f.FlamingTyrannosaurus.class));
cards.add(new SetCardInfo("Foreboding Ruins", 279, Rarity.RARE, mage.cards.f.ForebodingRuins.class));
cards.add(new SetCardInfo("Forest", 204, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Fortified Village", 280, Rarity.RARE, mage.cards.f.FortifiedVillage.class));
@ -75,6 +76,7 @@ public final class DoctorWho extends ExpansionSet {
cards.add(new SetCardInfo("Gallifrey Stands", 132, Rarity.RARE, mage.cards.g.GallifreyStands.class));
cards.add(new SetCardInfo("Game Trail", 284, Rarity.RARE, mage.cards.g.GameTrail.class));
cards.add(new SetCardInfo("Glacial Fortress", 285, Rarity.RARE, mage.cards.g.GlacialFortress.class));
cards.add(new SetCardInfo("Graham O'Brien", 104, Rarity.RARE, mage.cards.g.GrahamOBrien.class));
cards.add(new SetCardInfo("Grasp of Fate", 208, Rarity.RARE, mage.cards.g.GraspOfFate.class));
cards.add(new SetCardInfo("Growth Spiral", 237, Rarity.COMMON, mage.cards.g.GrowthSpiral.class));
cards.add(new SetCardInfo("Haunted Ridge", 286, Rarity.RARE, mage.cards.h.HauntedRidge.class));
@ -85,6 +87,7 @@ public final class DoctorWho extends ExpansionSet {
cards.add(new SetCardInfo("Horizon Canopy", 287, Rarity.RARE, mage.cards.h.HorizonCanopy.class));
cards.add(new SetCardInfo("Inspiring Refrain", 216, Rarity.RARE, mage.cards.i.InspiringRefrain.class));
cards.add(new SetCardInfo("Into the Time Vortex", 88, Rarity.RARE, mage.cards.i.IntoTheTimeVortex.class));
cards.add(new SetCardInfo("Iraxxa, Empress of Mars", 89, Rarity.UNCOMMON, mage.cards.i.IraxxaEmpressOfMars.class));
cards.add(new SetCardInfo("Irrigated Farmland", 288, Rarity.RARE, mage.cards.i.IrrigatedFarmland.class));
cards.add(new SetCardInfo("Island", 198, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Jenny, Generated Anomaly", 137, Rarity.RARE, mage.cards.j.JennyGeneratedAnomaly.class));
@ -93,6 +96,7 @@ public final class DoctorWho extends ExpansionSet {
cards.add(new SetCardInfo("Lightning Greaves", 243, Rarity.UNCOMMON, mage.cards.l.LightningGreaves.class));
cards.add(new SetCardInfo("Madame Vastra", 142, Rarity.RARE, mage.cards.m.MadameVastra.class));
cards.add(new SetCardInfo("Martha Jones", 48, Rarity.RARE, mage.cards.m.MarthaJones.class));
cards.add(new SetCardInfo("Memory Worm", 90, Rarity.UNCOMMON, mage.cards.m.MemoryWorm.class));
cards.add(new SetCardInfo("Mind Stone", 244, Rarity.UNCOMMON, mage.cards.m.MindStone.class));
cards.add(new SetCardInfo("Mountain", 202, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Myriad Landscape", 290, Rarity.UNCOMMON, mage.cards.m.MyriadLandscape.class));
@ -126,6 +130,7 @@ public final class DoctorWho extends ExpansionSet {
cards.add(new SetCardInfo("Shadowblood Ridge", 303, Rarity.RARE, mage.cards.s.ShadowbloodRidge.class));
cards.add(new SetCardInfo("Sheltered Thicket", 304, Rarity.RARE, mage.cards.s.ShelteredThicket.class));
cards.add(new SetCardInfo("Shipwreck Marsh", 305, Rarity.RARE, mage.cards.s.ShipwreckMarsh.class));
cards.add(new SetCardInfo("Sisterhood of Karn", 109, Rarity.RARE, mage.cards.s.SisterhoodOfKarn.class));
cards.add(new SetCardInfo("Skycloud Expanse", 306, Rarity.RARE, mage.cards.s.SkycloudExpanse.class));
cards.add(new SetCardInfo("Smoldering Marsh", 307, Rarity.RARE, mage.cards.s.SmolderingMarsh.class));
cards.add(new SetCardInfo("Snuff Out", 222, Rarity.UNCOMMON, mage.cards.s.SnuffOut.class));

View file

@ -0,0 +1,30 @@
package mage.game.permanent.token;
import mage.MageInt;
import mage.constants.CardType;
import mage.constants.SubType;
/**
* @author Susucr
*/
public final class AlienWarriorToken extends TokenImpl {
public AlienWarriorToken() {
super("Alien Warrior Token", "2/2 red Alien Warrior creature token");
cardType.add(CardType.CREATURE);
color.setRed(true);
subtype.add(SubType.ALIEN);
subtype.add(SubType.WARRIOR);
power = new MageInt(2);
toughness = new MageInt(2);
}
protected AlienWarriorToken(final AlienWarriorToken token) {
super(token);
}
public AlienWarriorToken copy() {
return new AlienWarriorToken(this);
}
}