mirror of
https://github.com/magefree/mage.git
synced 2025-12-27 22:12:03 -08:00
[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:
parent
b7ad2d8c86
commit
287e25b28f
5 changed files with 223 additions and 0 deletions
60
Mage.Sets/src/mage/cards/a/AtraxiWarden.java
Normal file
60
Mage.Sets/src/mage/cards/a/AtraxiWarden.java
Normal 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);
|
||||
}
|
||||
}
|
||||
60
Mage.Sets/src/mage/cards/b/BessieTheDoctorsRoadster.java
Normal file
60
Mage.Sets/src/mage/cards/b/BessieTheDoctorsRoadster.java
Normal 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);
|
||||
}
|
||||
}
|
||||
44
Mage.Sets/src/mage/cards/c/ClockworkDroid.java
Normal file
44
Mage.Sets/src/mage/cards/c/ClockworkDroid.java
Normal 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);
|
||||
}
|
||||
}
|
||||
55
Mage.Sets/src/mage/cards/c/CrackInTime.java
Normal file
55
Mage.Sets/src/mage/cards/c/CrackInTime.java
Normal 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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue