[WHO] Implement Atraxi Warden, Bessie the Doctor's Roadster, Clockwork Droid, Crack in Time (#11271)

* [WHO] Implement Atraxi Warden

* [WHO] Implement Bessie, the Doctor's Roadster

* [WHO] Implement Clockwork Droid

* [WHO] Implement Crack in Time
This commit is contained in:
Susucre 2023-10-08 07:41:01 +02:00 committed by GitHub
parent b7ad2d8c86
commit 287e25b28f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 223 additions and 0 deletions

View file

@ -0,0 +1,60 @@
package mage.cards.a;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.ExileTargetEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.SuspendAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.TappedPredicate;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
* @author Susucr
*/
public final class AtraxiWarden extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("tapped creature");
static {
filter.add(TappedPredicate.TAPPED);
}
public AtraxiWarden(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{W}{W}");
this.subtype.add(SubType.ALIEN);
this.subtype.add(SubType.EYE);
this.power = new MageInt(6);
this.toughness = new MageInt(6);
// Flying
this.addAbility(FlyingAbility.getInstance());
// When Atraxi Warden enters the battlefield, exile up to one target tapped creature.
Ability ability = new EntersBattlefieldTriggeredAbility(new ExileTargetEffect());
ability.addTarget(new TargetCreaturePermanent(0, 1, filter, false));
this.addAbility(ability);
// Suspend 5--{1}{W}
this.addAbility(new SuspendAbility(5, new ManaCostsImpl<>("{1}{W}"), this));
}
private AtraxiWarden(final AtraxiWarden card) {
super(card);
}
@Override
public AtraxiWarden copy() {
return new AtraxiWarden(this);
}
}

View file

@ -0,0 +1,60 @@
package mage.cards.b;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
import mage.abilities.keyword.CrewAbility;
import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
* @author Susucr
*/
public final class BessieTheDoctorsRoadster extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another target legendary creature");
static {
filter.add(SuperType.LEGENDARY.getPredicate());
filter.add(AnotherPredicate.instance);
}
public BessieTheDoctorsRoadster(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}");
this.supertype.add(SuperType.LEGENDARY);
this.subtype.add(SubType.VEHICLE);
this.power = new MageInt(3);
this.toughness = new MageInt(4);
// Haste
this.addAbility(HasteAbility.getInstance());
// Whenever Bessie attacks, another target legendary creature can't be blocked this turn.
Ability ability = new AttacksTriggeredAbility(new CantBeBlockedTargetEffect());
ability.addTarget(new TargetCreaturePermanent(filter));
this.addAbility(ability);
// Crew 2
this.addAbility(new CrewAbility(2));
}
private BessieTheDoctorsRoadster(final BessieTheDoctorsRoadster card) {
super(card);
}
@Override
public BessieTheDoctorsRoadster copy() {
return new BessieTheDoctorsRoadster(this);
}
}

View file

@ -0,0 +1,44 @@
package mage.cards.c;
import mage.MageInt;
import mage.abilities.common.BecomesExertSourceTriggeredAbility;
import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect;
import mage.abilities.effects.keyword.ScryEffect;
import mage.abilities.keyword.ExertAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import java.util.UUID;
/**
* @author Susucr
*/
public final class ClockworkDroid extends CardImpl {
public ClockworkDroid(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}");
this.subtype.add(SubType.ROBOT);
this.power = new MageInt(3);
this.toughness = new MageInt(1);
// You may exert Clockwork Droid as it attacks. When you do, it can't be blocked this turn and you scry 1.
BecomesExertSourceTriggeredAbility trigger = new BecomesExertSourceTriggeredAbility(
new CantBeBlockedSourceEffect(Duration.EndOfTurn)
);
trigger.addEffect(new ScryEffect(1).concatBy("and"));
this.addAbility(new ExertAbility(trigger));
}
private ClockworkDroid(final ClockworkDroid card) {
super(card);
}
@Override
public ClockworkDroid copy() {
return new ClockworkDroid(this);
}
}

View file

@ -0,0 +1,55 @@
package mage.cards.c;
import mage.abilities.Ability;
import mage.abilities.common.BeginningOfPreCombatMainTriggeredAbility;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.common.ExileUntilSourceLeavesEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.VanishingSacrificeAbility;
import mage.abilities.keyword.VanishingUpkeepAbility;
import mage.abilities.meta.OrTriggeredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.filter.StaticFilters;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
* @author Susucr
*/
public final class CrackInTime extends CardImpl {
public CrackInTime(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{W}");
// Vanishing 3
Ability ability = new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.TIME.createInstance(3)));
ability.setRuleVisible(false);
this.addAbility(ability);
this.addAbility(new VanishingUpkeepAbility(3));
this.addAbility(new VanishingSacrificeAbility());
// When Crack in Time enters the battlefield and at the beginning of your precombat main phase, exile target creature an opponent controls until Crack in Time leaves the battlefield.
ability = new OrTriggeredAbility(Zone.BATTLEFIELD, new ExileUntilSourceLeavesEffect(),
new EntersBattlefieldTriggeredAbility(null),
new BeginningOfPreCombatMainTriggeredAbility(null, TargetController.YOU, false)
);
ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
this.addAbility(ability);
}
private CrackInTime(final CrackInTime card) {
super(card);
}
@Override
public CrackInTime copy() {
return new CrackInTime(this);
}
}

View file

@ -22,8 +22,10 @@ public final class DoctorWho extends ExpansionSet {
cards.add(new SetCardInfo("As Foretold", 214, Rarity.RARE, mage.cards.a.AsForetold.class));
cards.add(new SetCardInfo("Ash Barrens", 257, Rarity.UNCOMMON, mage.cards.a.AshBarrens.class));
cards.add(new SetCardInfo("Astrid Peth", 11, Rarity.RARE, mage.cards.a.AstridPeth.class));
cards.add(new SetCardInfo("Atraxi Warden", 12, Rarity.UNCOMMON, mage.cards.a.AtraxiWarden.class));
cards.add(new SetCardInfo("Banish to Another Universe", 13, Rarity.UNCOMMON, mage.cards.b.BanishToAnotherUniverse.class));
cards.add(new SetCardInfo("Beast Within", 228, Rarity.UNCOMMON, mage.cards.b.BeastWithin.class));
cards.add(new SetCardInfo("Bessie, the Doctor's Roadster", 171, Rarity.RARE, mage.cards.b.BessieTheDoctorsRoadster.class));
cards.add(new SetCardInfo("Blasphemous Act", 224, Rarity.RARE, mage.cards.b.BlasphemousAct.class));
cards.add(new SetCardInfo("Canopy Vista", 258, Rarity.RARE, mage.cards.c.CanopyVista.class));
cards.add(new SetCardInfo("Canyon Slough", 259, Rarity.RARE, mage.cards.c.CanyonSlough.class));
@ -34,8 +36,10 @@ public final class DoctorWho extends ExpansionSet {
cards.add(new SetCardInfo("Cinder Glade", 262, Rarity.RARE, mage.cards.c.CinderGlade.class));
cards.add(new SetCardInfo("City of Death", 99, Rarity.RARE, mage.cards.c.CityOfDeath.class));
cards.add(new SetCardInfo("Clockspinning", 215, Rarity.COMMON, mage.cards.c.Clockspinning.class));
cards.add(new SetCardInfo("Clockwork Droid", 172, Rarity.UNCOMMON, mage.cards.c.ClockworkDroid.class));
cards.add(new SetCardInfo("Command Tower", 263, Rarity.COMMON, mage.cards.c.CommandTower.class));
cards.add(new SetCardInfo("Commander's Sphere", 240, Rarity.COMMON, mage.cards.c.CommandersSphere.class));
cards.add(new SetCardInfo("Crack in Time", 16, Rarity.RARE, mage.cards.c.CrackInTime.class));
cards.add(new SetCardInfo("Creeping Tar Pit", 267, Rarity.RARE, mage.cards.c.CreepingTarPit.class));
cards.add(new SetCardInfo("Crisis of Conscience", 17, Rarity.RARE, mage.cards.c.CrisisOfConscience.class));
cards.add(new SetCardInfo("Crumbling Necropolis", 268, Rarity.UNCOMMON, mage.cards.c.CrumblingNecropolis.class));