[WHO] Implement Banish to Another Universe, Crisis of Conscience, Cyberman Patrol, Cybermen Squadron, Dalek Squadron (#11272)

* [WHO] Implement Banish to Another Universe

* [WHO] Implement Crisis of Conscience

* [WHO] Implement Cyberman Patrol

* [WHO] Implement Cybermen Squadron

* [WHO] Implement Dalek Squadron
This commit is contained in:
Susucre 2023-10-07 05:24:05 +02:00 committed by GitHub
parent 0c79b96a6a
commit 5c4cc02415
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 242 additions and 0 deletions

View file

@ -0,0 +1,55 @@
package mage.cards.b;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.AffinityEffect;
import mage.abilities.effects.common.ExileUntilSourceLeavesEffect;
import mage.abilities.hint.Hint;
import mage.abilities.hint.ValueHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.mageobject.HistoricPredicate;
import mage.target.TargetPermanent;
import java.util.UUID;
/**
* @author Susucr
*/
public final class BanishToAnotherUniverse extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledPermanent("historic permanents");
private static final Hint hint = new ValueHint("historic permanents you control", new PermanentsOnBattlefieldCount(filter));
static {
filter.add(HistoricPredicate.instance);
}
public BanishToAnotherUniverse(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{4}{W}");
// Affinity for historic permanents
this.addAbility(new SimpleStaticAbility(Zone.ALL, new AffinityEffect(filter))
.addHint(hint));
// When Banish to Another Universe enters the battlefield, exile target nonland permanent an opponent controls until Banish to Another Universe leaves the battlefield.
Ability ability = new EntersBattlefieldTriggeredAbility(new ExileUntilSourceLeavesEffect());
ability.addTarget(new TargetPermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_NON_LAND));
this.addAbility(ability);
}
private BanishToAnotherUniverse(final BanishToAnotherUniverse card) {
super(card);
}
@Override
public BanishToAnotherUniverse copy() {
return new BanishToAnotherUniverse(this);
}
}

View file

@ -0,0 +1,47 @@
package mage.cards.c;
import mage.abilities.Mode;
import mage.abilities.effects.common.DestroyAllEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.FilterPermanent;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.permanent.TokenPredicate;
import java.util.UUID;
/**
* @author Susucr
*/
public final class CrisisOfConscience extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent("tokens");
private static final FilterPermanent filter2 = new FilterPermanent("nonland, nontoken permanents");
static {
filter.add(TokenPredicate.TRUE);
filter2.add(Predicates.not(CardType.LAND.getPredicate()));
filter2.add(TokenPredicate.FALSE);
}
public CrisisOfConscience(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{W}{W}");
// Choose one --
// * Destroy all tokens.
this.getSpellAbility().addEffect(new DestroyAllEffect(filter));
// * Destroy all nonland, nontoken permanents.
this.getSpellAbility().addMode(new Mode(new DestroyAllEffect(filter2)));
}
private CrisisOfConscience(final CrisisOfConscience card) {
super(card);
}
@Override
public CrisisOfConscience copy() {
return new CrisisOfConscience(this);
}
}

View file

@ -0,0 +1,43 @@
package mage.cards.c;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.keyword.AfflictAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.filter.StaticFilters;
import java.util.UUID;
/**
* @author Susucr
*/
public final class CybermanPatrol extends CardImpl {
public CybermanPatrol(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}");
this.subtype.add(SubType.CYBERMAN);
this.power = new MageInt(2);
this.toughness = new MageInt(2);
// Artifact creatures you control have afflict 3.
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
new AfflictAbility(3), Duration.WhileOnBattlefield,
StaticFilters.FILTER_PERMANENTS_ARTIFACT_CREATURE
)));
}
private CybermanPatrol(final CybermanPatrol card) {
super(card);
}
@Override
public CybermanPatrol copy() {
return new CybermanPatrol(this);
}
}

View file

@ -0,0 +1,51 @@
package mage.cards.c;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.keyword.MyriadAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.common.FilterArtifactCreaturePermanent;
import mage.filter.predicate.Predicates;
import java.util.UUID;
/**
* @author Susucr
*/
public final class CybermenSquadron extends CardImpl {
private static final FilterArtifactCreaturePermanent filter =
new FilterArtifactCreaturePermanent("nonlegendary artifact creatures");
static {
filter.add(Predicates.not(SuperType.LEGENDARY.getPredicate()));
}
public CybermenSquadron(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{7}");
this.subtype.add(SubType.CYBERMAN);
this.power = new MageInt(5);
this.toughness = new MageInt(5);
// Nonlegendary artifact creatures you control have myriad.
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
new MyriadAbility(), Duration.WhileOnBattlefield, filter
)));
}
private CybermenSquadron(final CybermenSquadron card) {
super(card);
}
@Override
public CybermenSquadron copy() {
return new CybermenSquadron(this);
}
}

View file

@ -0,0 +1,40 @@
package mage.cards.d;
import mage.MageInt;
import mage.abilities.keyword.MenaceAbility;
import mage.abilities.keyword.MyriadAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.UUID;
/**
* @author Susucr
*/
public final class DalekSquadron extends CardImpl {
public DalekSquadron(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}{B}");
this.subtype.add(SubType.DALEK);
this.power = new MageInt(3);
this.toughness = new MageInt(3);
// Menace
this.addAbility(new MenaceAbility());
// Myriad
this.addAbility(new MyriadAbility());
}
private DalekSquadron(final DalekSquadron card) {
super(card);
}
@Override
public DalekSquadron copy() {
return new DalekSquadron(this);
}
}

View file

@ -22,6 +22,7 @@ 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("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("Blasphemous Act", 224, Rarity.RARE, mage.cards.b.BlasphemousAct.class));
cards.add(new SetCardInfo("Canopy Vista", 258, Rarity.RARE, mage.cards.c.CanopyVista.class));
@ -36,9 +37,13 @@ public final class DoctorWho extends ExpansionSet {
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("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));
cards.add(new SetCardInfo("Cultivate", 230, Rarity.COMMON, mage.cards.c.Cultivate.class));
cards.add(new SetCardInfo("Cursed Mirror", 226, Rarity.RARE, mage.cards.c.CursedMirror.class));
cards.add(new SetCardInfo("Cyberman Patrol", 174, Rarity.UNCOMMON, mage.cards.c.CybermanPatrol.class));
cards.add(new SetCardInfo("Cybermen Squadron", 176, Rarity.RARE, mage.cards.c.CybermenSquadron.class));
cards.add(new SetCardInfo("Dalek Squadron", 65, Rarity.UNCOMMON, mage.cards.d.DalekSquadron.class));
cards.add(new SetCardInfo("Darkwater Catacombs", 269, Rarity.RARE, mage.cards.d.DarkwaterCatacombs.class));
cards.add(new SetCardInfo("Day of Destiny", 206, Rarity.RARE, mage.cards.d.DayOfDestiny.class));
cards.add(new SetCardInfo("Deserted Beach", 270, Rarity.RARE, mage.cards.d.DesertedBeach.class));

View file

@ -127,6 +127,7 @@ public enum SubType {
CROLUTE("Crolute", SubTypeSet.CreatureType, true), // Star Wars
CTAN("C'tan", SubTypeSet.CreatureType),
CUSTODES("Custodes", SubTypeSet.CreatureType),
CYBERMAN("Cyberman", SubTypeSet.CreatureType),
CYBORG("Cyborg", SubTypeSet.CreatureType, true), // Star Wars
CYCLOPS("Cyclops", SubTypeSet.CreatureType),
// D