mirror of
https://github.com/correl/mage.git
synced 2024-11-25 11:09:53 +00:00
Tokens and command objects reworked (part 2 of 2, tokens/emblems)
This commit is contained in:
parent
5f55c7c667
commit
f2d93f224f
591 changed files with 1368 additions and 4425 deletions
|
@ -36,7 +36,6 @@ public final class ElspethKnightErrant extends CardImpl {
|
|||
|
||||
// +1: Create a 1/1 white Soldier creature token.
|
||||
Token token = new SoldierToken();
|
||||
token.setOriginalExpansionSetCode("ALA"); // to get the right image
|
||||
this.addAbility(new LoyaltyAbility(new CreateTokenEffect(token), 1));
|
||||
|
||||
// +1: Target creature gets +3/+3 and gains flying until end of turn.
|
||||
|
|
|
@ -51,13 +51,11 @@ class EnsouledScimitarToken extends TokenImpl {
|
|||
|
||||
public EnsouledScimitarToken() {
|
||||
super("Pincher", "1/5 Spirit artifact creature with flying");
|
||||
setOriginalExpansionSetCode("5ND");
|
||||
cardType.add(CardType.CREATURE);
|
||||
subtype.add(SubType.SPIRIT);
|
||||
power = new MageInt(1);
|
||||
toughness = new MageInt(5);
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
}
|
||||
|
||||
public EnsouledScimitarToken(final EnsouledScimitarToken token) {
|
||||
|
|
|
@ -6,7 +6,7 @@ package mage.designations;
|
|||
public class CitysBlessing extends Designation {
|
||||
|
||||
public CitysBlessing() {
|
||||
super(DesignationType.CITYS_BLESSING, "RIX");
|
||||
super(DesignationType.CITYS_BLESSING);
|
||||
}
|
||||
|
||||
private CitysBlessing(final CitysBlessing card) {
|
||||
|
|
|
@ -2,6 +2,7 @@ package mage.designations;
|
|||
|
||||
import mage.MageInt;
|
||||
import mage.MageObject;
|
||||
import mage.MageObjectImpl;
|
||||
import mage.ObjectColor;
|
||||
import mage.abilities.Abilities;
|
||||
import mage.abilities.AbilitiesImpl;
|
||||
|
@ -23,59 +24,44 @@ import java.util.*;
|
|||
/**
|
||||
* @author LevelX2
|
||||
*/
|
||||
public abstract class Designation implements MageObject {
|
||||
public abstract class Designation extends MageObjectImpl {
|
||||
|
||||
private static final List<CardType> emptyList = Collections.unmodifiableList(new ArrayList<>());
|
||||
private static final ObjectColor emptyColor = new ObjectColor();
|
||||
private static final ManaCostsImpl emptyCost = new ManaCostsImpl<>();
|
||||
|
||||
private String name;
|
||||
private final DesignationType designationType;
|
||||
private UUID id;
|
||||
private final FrameStyle frameStyle;
|
||||
private final boolean unique; // can a designation be added multiple times (false) or only once to an object (true)
|
||||
|
||||
private boolean copy;
|
||||
private MageObject copyFrom; // copied card INFO (used to call original adjusters)
|
||||
private Abilities<Ability> abilites = new AbilitiesImpl<>();
|
||||
private String expansionSetCodeForImage;
|
||||
private final boolean unique; // can a designation be added multiple times (false) or only once to an object (true)
|
||||
|
||||
public Designation(DesignationType designationType, String expansionSetCode) {
|
||||
this(designationType, expansionSetCode, true);
|
||||
public Designation(DesignationType designationType) {
|
||||
this(designationType, true);
|
||||
}
|
||||
|
||||
public Designation(DesignationType designationType, String expansionSetCode, boolean unique) {
|
||||
this.name = designationType.toString();
|
||||
public Designation(DesignationType designationType, boolean unique) {
|
||||
super(UUID.randomUUID());
|
||||
this.designationType = designationType;
|
||||
this.id = UUID.randomUUID();
|
||||
this.frameStyle = FrameStyle.M15_NORMAL;
|
||||
this.expansionSetCodeForImage = expansionSetCode;
|
||||
this.unique = unique;
|
||||
this.name = designationType.toString();
|
||||
this.frameStyle = FrameStyle.M15_NORMAL;
|
||||
}
|
||||
|
||||
public Designation(final Designation designation) {
|
||||
this.name = designation.name;
|
||||
super(designation);
|
||||
this.designationType = designation.designationType;
|
||||
this.id = designation.id;
|
||||
this.unique = designation.unique;
|
||||
this.frameStyle = designation.frameStyle;
|
||||
this.copy = designation.copy;
|
||||
this.copyFrom = (designation.copyFrom != null ? designation.copyFrom.copy() : null);
|
||||
this.abilites = designation.abilites.copy();
|
||||
this.expansionSetCodeForImage = designation.expansionSetCodeForImage;
|
||||
this.unique = designation.unique;
|
||||
}
|
||||
|
||||
@Override
|
||||
public abstract Designation copy();
|
||||
|
||||
@Override
|
||||
public FrameStyle getFrameStyle() {
|
||||
return frameStyle;
|
||||
}
|
||||
|
||||
public void assignNewId() {
|
||||
this.id = UUID.randomUUID();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCopy(boolean isCopy, MageObject copyFrom) {
|
||||
this.copy = isCopy;
|
||||
|
@ -92,64 +78,21 @@ public abstract class Designation implements MageObject {
|
|||
return this.copyFrom;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getIdName() {
|
||||
return getName() + " [" + getId().toString().substring(0, 3) + ']';
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImageName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public void addAbility(Ability ability) {
|
||||
ability.setSourceId(id);
|
||||
ability.setSourceId(this.objectId);
|
||||
abilites.add(ability);
|
||||
abilites.addAll(ability.getSubAbilities());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Abilities<Ability> getAbilities() {
|
||||
return abilites;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectColor getFrameColor(Game game) {
|
||||
return emptyColor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UUID getId() {
|
||||
return this.id;
|
||||
}
|
||||
|
||||
public DesignationType getDesignationType() {
|
||||
return designationType;
|
||||
}
|
||||
|
||||
public void setExpansionSetCodeForImage(String expansionSetCodeForImage) {
|
||||
this.expansionSetCodeForImage = expansionSetCodeForImage;
|
||||
}
|
||||
|
||||
public String getExpansionSetCodeForImage() {
|
||||
return expansionSetCodeForImage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLogName() {
|
||||
return GameLog.getColoredObjectIdName(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<CardType> getCardType(Game game) {
|
||||
return emptyList;
|
||||
|
@ -210,24 +153,6 @@ public abstract class Designation implements MageObject {
|
|||
return MageInt.EmptyMageInt;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStartingLoyalty() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStartingLoyalty(int startingLoyalty) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStartingDefense() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStartingDefense(int startingDefense) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getZoneChangeCounter(Game game) {
|
||||
return 1; // Emblems can't move zones until now so return always 1
|
||||
|
@ -247,14 +172,6 @@ public abstract class Designation implements MageObject {
|
|||
public void removePTCDA() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param game
|
||||
* @param controllerId
|
||||
*/
|
||||
public void start(Game game, UUID controllerId) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAllCreatureTypes(Game game) {
|
||||
return false;
|
||||
|
|
|
@ -21,7 +21,7 @@ import java.util.UUID;
|
|||
public class Initiative extends Designation {
|
||||
|
||||
public Initiative() {
|
||||
super(DesignationType.THE_INITIATIVE, "CLB");
|
||||
super(DesignationType.THE_INITIATIVE);
|
||||
|
||||
// Whenever one or more creatures a player controls deals combat damage to you, that player takes the initiative.
|
||||
this.addAbility(new InitiativeDamageTriggeredAbility());
|
||||
|
|
|
@ -19,7 +19,7 @@ import mage.target.targetpointer.FixedTarget;
|
|||
public class Monarch extends Designation {
|
||||
|
||||
public Monarch() {
|
||||
super(DesignationType.THE_MONARCH, "CN2");
|
||||
super(DesignationType.THE_MONARCH);
|
||||
addAbility(new MonarchDrawTriggeredAbility());
|
||||
addAbility(new MonarchDealsCombatDamageToAPlayerTriggeredAbility());
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ import mage.target.common.TargetCreaturePermanent;
|
|||
public class DungeonOfTheMadMageDungeon extends Dungeon {
|
||||
|
||||
public DungeonOfTheMadMageDungeon() {
|
||||
super("Dungeon of the Mad Mage", "AFR");
|
||||
super("Dungeon of the Mad Mage");
|
||||
// (1) Yawning Portal — You gain 1 life. (→ 2)
|
||||
DungeonRoom yawningPortal = new DungeonRoom("Yawning Portal", new GainLifeEffect(1));
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ import mage.target.common.TargetCreaturePermanent;
|
|||
public class LostMineOfPhandelverDungeon extends Dungeon {
|
||||
|
||||
public LostMineOfPhandelverDungeon() {
|
||||
super("Lost Mine of Phandelver", "AFR");
|
||||
super("Lost Mine of Phandelver");
|
||||
// (1) Cave Entrance — Scry 1. (→ 2a or 2b)
|
||||
DungeonRoom caveEntrance = new DungeonRoom(
|
||||
"Cave Entrance", new ScryEffect(1, false)
|
||||
|
|
|
@ -42,7 +42,7 @@ public final class TombOfAnnihilationDungeon extends Dungeon {
|
|||
}
|
||||
|
||||
public TombOfAnnihilationDungeon() {
|
||||
super("Tomb of Annihilation", "AFR");
|
||||
super("Tomb of Annihilation");
|
||||
// (1) Trapped Entry — Each player loses 1 life. (→ 2a or 2b)
|
||||
DungeonRoom trappedEntry = new DungeonRoom("Trapped Entry", new LoseLifeAllPlayersEffect(1));
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ import mage.util.RandomUtil;
|
|||
public class UndercityDungeon extends Dungeon {
|
||||
|
||||
public UndercityDungeon() {
|
||||
super("Undercity", "CLB");
|
||||
super("Undercity");
|
||||
|
||||
// Secret Entrance — Search your library for a basic land card,
|
||||
// reveal it,
|
||||
|
|
|
@ -8,18 +8,25 @@ import mage.game.command.Emblem;
|
|||
import mage.game.permanent.token.CatToken2;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class AjaniAdversaryOfTyrantsEmblem extends Emblem {
|
||||
|
||||
// −7: You get an emblem with "At the beginning of your end step, create three 1/1 white Cat creature tokens with lifelink."
|
||||
public AjaniAdversaryOfTyrantsEmblem() {
|
||||
this.setName("Emblem Ajani");
|
||||
this.setExpansionSetCodeForImage("M19");
|
||||
super("Emblem Ajani");
|
||||
this.getAbilities().add(new BeginningOfEndStepTriggeredAbility(
|
||||
Zone.COMMAND, new CreateTokenEffect(new CatToken2(), 3),
|
||||
TargetController.YOU, null, false
|
||||
));
|
||||
}
|
||||
|
||||
private AjaniAdversaryOfTyrantsEmblem(final AjaniAdversaryOfTyrantsEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AjaniAdversaryOfTyrantsEmblem copy() {
|
||||
return new AjaniAdversaryOfTyrantsEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,10 +20,18 @@ public final class AjaniSleeperAgentEmblem extends Emblem {
|
|||
|
||||
// You get an emblem with "Whenever you cast a creature or planeswalker spell, target opponent gets two poison counters."
|
||||
public AjaniSleeperAgentEmblem() {
|
||||
this.setName("Emblem Ajani");
|
||||
this.setExpansionSetCodeForImage("DMU");
|
||||
super("Emblem Ajani");
|
||||
Ability ability = new SpellCastControllerTriggeredAbility(Zone.COMMAND, new AddPoisonCounterTargetEffect(2), filter, false, false);
|
||||
ability.addTarget(new TargetOpponent());
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
private AjaniSleeperAgentEmblem(final AjaniSleeperAgentEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AjaniSleeperAgentEmblem copy() {
|
||||
return new AjaniSleeperAgentEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
@ -12,15 +11,22 @@ import mage.game.events.GameEvent;
|
|||
import mage.game.permanent.Permanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class AjaniSteadfastEmblem extends Emblem {
|
||||
|
||||
public AjaniSteadfastEmblem() {
|
||||
setName("Emblem Ajani");
|
||||
super("Emblem Ajani");
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new AjaniSteadfastPreventEffect()));
|
||||
this.setExpansionSetCodeForImage("M15");
|
||||
}
|
||||
|
||||
private AjaniSteadfastEmblem(final AjaniSteadfastEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AjaniSteadfastEmblem copy() {
|
||||
return new AjaniSteadfastEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
@ -18,14 +17,13 @@ import mage.game.command.Emblem;
|
|||
import mage.target.common.TargetAnyTarget;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class ArlinnEmbracedByTheMoonEmblem extends Emblem {
|
||||
// "Creatures you control have haste and '{T}: This creature deals damage equal to its power to any target.'"
|
||||
|
||||
public ArlinnEmbracedByTheMoonEmblem() {
|
||||
this.setName("Emblem Arlinn");
|
||||
super("Emblem Arlinn");
|
||||
FilterPermanent filter = new FilterControlledCreaturePermanent("Creatures");
|
||||
GainAbilityControlledEffect effect = new GainAbilityControlledEffect(HasteAbility.getInstance(), Duration.EndOfGame, filter);
|
||||
effect.setText("Creatures you control have haste");
|
||||
|
@ -38,7 +36,14 @@ public final class ArlinnEmbracedByTheMoonEmblem extends Emblem {
|
|||
effect.setText("and '{T}: This creature deals damage equal to its power to any target");
|
||||
ability.addEffect(effect);
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
this.setExpansionSetCodeForImage("SOI");
|
||||
private ArlinnEmbracedByTheMoonEmblem(final ArlinnEmbracedByTheMoonEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArlinnEmbracedByTheMoonEmblem copy() {
|
||||
return new ArlinnEmbracedByTheMoonEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,23 +1,28 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.common.LeavesBattlefieldAllTriggeredAbility;
|
||||
import mage.abilities.effects.common.discard.DiscardControllerEffect;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.filter.predicate.permanent.TokenPredicate;
|
||||
import mage.game.command.Emblem;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class AurraSingBaneOfJediEmblem extends Emblem {
|
||||
|
||||
// Whenever a nontoken creature you control leaves the battlefied, discard a card.
|
||||
public AurraSingBaneOfJediEmblem() {
|
||||
this.setName("Emblem Aurra Sing, Bane of Jedi");
|
||||
super("Emblem Aurra Sing, Bane of Jedi");
|
||||
getAbilities().add(new LeavesBattlefieldAllTriggeredAbility(Zone.COMMAND, new DiscardControllerEffect(1), StaticFilters.FILTER_CONTROLLED_CREATURE_NON_TOKEN, false));
|
||||
}
|
||||
|
||||
private AurraSingBaneOfJediEmblem(final AurraSingBaneOfJediEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AurraSingBaneOfJediEmblem copy() {
|
||||
return new AurraSingBaneOfJediEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,17 +17,24 @@ public final class BasriKetEmblem extends Emblem {
|
|||
*/
|
||||
|
||||
public BasriKetEmblem() {
|
||||
setName("Emblem Basri");
|
||||
super("Emblem Basri");
|
||||
Ability ability = new BeginningOfCombatTriggeredAbility(
|
||||
Zone.COMMAND,
|
||||
new CreateTokenEffect(new SoldierToken()),
|
||||
TargetController.YOU, false, false);
|
||||
ability.addEffect(
|
||||
new AddCountersAllEffect(CounterType.P1P1.createInstance(), StaticFilters.FILTER_PERMANENT_CREATURE_CONTROLLED)
|
||||
.setText(", then put a +1/+1 counter on each creature you control")
|
||||
.setText(", then put a +1/+1 counter on each creature you control")
|
||||
);
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
this.setExpansionSetCodeForImage("M21");
|
||||
private BasriKetEmblem(final BasriKetEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BasriKetEmblem copy() {
|
||||
return new BasriKetEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,11 +17,19 @@ public final class ChandraAwakenedInfernoEmblem extends Emblem {
|
|||
*/
|
||||
|
||||
public ChandraAwakenedInfernoEmblem() {
|
||||
setName("Emblem Chandra");
|
||||
setExpansionSetCodeForImage("M20");
|
||||
super("Emblem Chandra");
|
||||
this.getAbilities().add(new BeginningOfUpkeepTriggeredAbility(
|
||||
Zone.COMMAND, new DamageControllerEffect(1, "this emblem"),
|
||||
TargetController.YOU, false, true
|
||||
));
|
||||
}
|
||||
|
||||
private ChandraAwakenedInfernoEmblem(final ChandraAwakenedInfernoEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChandraAwakenedInfernoEmblem copy() {
|
||||
return new ChandraAwakenedInfernoEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,7 +17,6 @@ import mage.target.common.TargetAnyTarget;
|
|||
import mage.watchers.common.ManaPaidSourceWatcher;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author weirddan455
|
||||
*/
|
||||
public class ChandraDressedToKillEmblem extends Emblem {
|
||||
|
@ -30,12 +29,19 @@ public class ChandraDressedToKillEmblem extends Emblem {
|
|||
|
||||
// Whenever you cast a red spell, this emblem deals X damage to any target, where X is the amount of mana spent to cast that spell.
|
||||
public ChandraDressedToKillEmblem() {
|
||||
this.setName("Emblem Chandra");
|
||||
super("Emblem Chandra");
|
||||
Ability ability = new SpellCastControllerTriggeredAbility(Zone.COMMAND, new ChandraDressedToKillEmblemEffect(), filter, false, true);
|
||||
ability.addTarget(new TargetAnyTarget());
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
this.setExpansionSetCodeForImage("VOW");
|
||||
private ChandraDressedToKillEmblem(final ChandraDressedToKillEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChandraDressedToKillEmblem copy() {
|
||||
return new ChandraDressedToKillEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
|
||||
|
@ -9,7 +8,6 @@ import mage.constants.Zone;
|
|||
import mage.game.command.Emblem;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class ChandraRoaringFlameEmblem extends Emblem {
|
||||
|
@ -20,10 +18,18 @@ public final class ChandraRoaringFlameEmblem extends Emblem {
|
|||
*/
|
||||
|
||||
public ChandraRoaringFlameEmblem() {
|
||||
setName("Emblem Chandra");
|
||||
setExpansionSetCodeForImage("ORI");
|
||||
super("Emblem Chandra");
|
||||
Effect effect = new DamageTargetEffect(3);
|
||||
effect.setText("this emblem deals 3 damage to you");
|
||||
this.getAbilities().add(new BeginningOfUpkeepTriggeredAbility(Zone.COMMAND, effect, TargetController.YOU, false, true));
|
||||
}
|
||||
|
||||
private ChandraRoaringFlameEmblem(final ChandraRoaringFlameEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChandraRoaringFlameEmblem copy() {
|
||||
return new ChandraRoaringFlameEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
@ -6,26 +5,31 @@ import mage.abilities.common.SpellCastControllerTriggeredAbility;
|
|||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.FilterSpell;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.command.Emblem;
|
||||
import mage.target.common.TargetAnyTarget;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class ChandraTorchOfDefianceEmblem extends Emblem {
|
||||
|
||||
|
||||
// You get an emblem with "Whenever you cast a spell, this emblem deals 5 damage to any target."
|
||||
public ChandraTorchOfDefianceEmblem() {
|
||||
this.setName("Emblem Chandra");
|
||||
super("Emblem Chandra");
|
||||
Effect effect = new DamageTargetEffect(5);
|
||||
effect.setText("this emblem deals 5 damage to any target");
|
||||
Ability ability = new SpellCastControllerTriggeredAbility(Zone.COMMAND, effect, StaticFilters.FILTER_SPELL_A, false, false);
|
||||
ability.addTarget(new TargetAnyTarget());
|
||||
getAbilities().add(ability);
|
||||
}
|
||||
|
||||
this.setExpansionSetCodeForImage("KLD");
|
||||
private ChandraTorchOfDefianceEmblem(final ChandraTorchOfDefianceEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChandraTorchOfDefianceEmblem copy() {
|
||||
return new ChandraTorchOfDefianceEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,42 +1,42 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.Mode;
|
||||
import mage.abilities.SpellAbility;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.effects.ContinuousEffectImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Layer;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubLayer;
|
||||
import mage.constants.Zone;
|
||||
import mage.constants.*;
|
||||
import mage.game.Game;
|
||||
import mage.game.command.Emblem;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.events.GameEvent.EventType;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.game.stack.Spell;
|
||||
import mage.players.Player;
|
||||
import mage.target.Target;
|
||||
import mage.target.targetpointer.FixedTargets;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class DackFaydenEmblem extends Emblem {
|
||||
|
||||
public DackFaydenEmblem() {
|
||||
this.setName("Emblem Dack");
|
||||
super("Emblem Dack");
|
||||
this.getAbilities().add(new DackFaydenEmblemTriggeredAbility());
|
||||
}
|
||||
|
||||
availableImageSetCodes = Arrays.asList("CNS", "EMA", "MED");
|
||||
private DackFaydenEmblem(final DackFaydenEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DackFaydenEmblem copy() {
|
||||
return new DackFaydenEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
@ -17,21 +16,25 @@ import mage.game.events.GameEvent;
|
|||
import mage.game.events.ZoneChangeEvent;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class DarettiScrapSavantEmblem extends Emblem {
|
||||
// You get an emblem with "Whenever an artifact is put into your graveyard from the battlefield, return that card to the battlefield at the beginning of the next end step."
|
||||
|
||||
public DarettiScrapSavantEmblem() {
|
||||
setName("Emblem Daretti");
|
||||
availableImageSetCodes = Arrays.asList("C14", "C16", "CM2");
|
||||
|
||||
super("Emblem Daretti");
|
||||
this.getAbilities().add(new DarettiScrapSavantTriggeredAbility());
|
||||
}
|
||||
|
||||
private DarettiScrapSavantEmblem(final DarettiScrapSavantEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DarettiScrapSavantEmblem copy() {
|
||||
return new DarettiScrapSavantEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
class DarettiScrapSavantTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
|
|
@ -7,8 +7,6 @@ import mage.constants.Zone;
|
|||
import mage.game.command.Emblem;
|
||||
import mage.game.permanent.token.RedGreenBeastToken;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
|
@ -16,11 +14,19 @@ public final class DomriChaosBringerEmblem extends Emblem {
|
|||
|
||||
// -8: You get an emblem with "At the beginning of each end step, create a 4/4 red and green Beast creature token with trample."
|
||||
public DomriChaosBringerEmblem() {
|
||||
this.setName("Emblem Domri");
|
||||
availableImageSetCodes = Arrays.asList("MED", "RNA");
|
||||
super("Emblem Domri");
|
||||
this.getAbilities().add(new BeginningOfEndStepTriggeredAbility(
|
||||
Zone.COMMAND, new CreateTokenEffect(new RedGreenBeastToken()),
|
||||
TargetController.ANY, null, false
|
||||
));
|
||||
}
|
||||
|
||||
private DomriChaosBringerEmblem(final DomriChaosBringerEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DomriChaosBringerEmblem copy() {
|
||||
return new DomriChaosBringerEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.CompoundAbility;
|
||||
|
@ -14,17 +13,14 @@ import mage.filter.FilterPermanent;
|
|||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.game.command.Emblem;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class DomriRadeEmblem extends Emblem {
|
||||
// "Creatures you control have double strike, trample, hexproof and haste."
|
||||
|
||||
public DomriRadeEmblem() {
|
||||
this.setName("Emblem Domri");
|
||||
super("Emblem Domri");
|
||||
FilterPermanent filter = new FilterControlledCreaturePermanent("Creatures");
|
||||
|
||||
CompoundAbility compoundAbilities = new CompoundAbility(
|
||||
|
@ -34,7 +30,14 @@ public final class DomriRadeEmblem extends Emblem {
|
|||
HasteAbility.getInstance()
|
||||
);
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new GainAbilityControlledEffect(compoundAbilities, Duration.EndOfGame, filter)));
|
||||
}
|
||||
|
||||
availableImageSetCodes = Arrays.asList("GTC", "MM3");
|
||||
private DomriRadeEmblem(final DomriRadeEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DomriRadeEmblem copy() {
|
||||
return new DomriRadeEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
@ -12,17 +11,23 @@ import mage.game.command.Emblem;
|
|||
import mage.players.Player;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class DovinBaanEmblem extends Emblem {
|
||||
|
||||
public DovinBaanEmblem() {
|
||||
this.setName("Emblem Dovin");
|
||||
super("Emblem Dovin");
|
||||
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new DovinBaanCantUntapEffect());
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
this.setExpansionSetCodeForImage("KLD");
|
||||
private DovinBaanEmblem(final DovinBaanEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DovinBaanEmblem copy() {
|
||||
return new DovinBaanEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -24,8 +24,7 @@ public final class EllywickTumblestrumEmblem extends Emblem {
|
|||
|
||||
// −7: You get an emblem with "Creatures you control have trample and haste and get +2/+2 for each differently named dungeon you've completed."
|
||||
public EllywickTumblestrumEmblem() {
|
||||
this.setName("Emblem Ellywick");
|
||||
this.setExpansionSetCodeForImage("AFR");
|
||||
super("Emblem Ellywick");
|
||||
Ability ability = new SimpleStaticAbility(new GainAbilityControlledEffect(
|
||||
TrampleAbility.getInstance(), Duration.EndOfGame,
|
||||
StaticFilters.FILTER_PERMANENT_CREATURES
|
||||
|
@ -41,6 +40,15 @@ public final class EllywickTumblestrumEmblem extends Emblem {
|
|||
).setText("and get +2/+2 for each differently named dungeon you've completed"));
|
||||
this.getAbilities().add(ability.addHint(EllywickTumblestrumEmblemHint.instance));
|
||||
}
|
||||
|
||||
private EllywickTumblestrumEmblem(final EllywickTumblestrumEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EllywickTumblestrumEmblem copy() {
|
||||
return new EllywickTumblestrumEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
enum EllywickTumblestrumEmblemValue implements DynamicValue {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
|
@ -12,15 +11,13 @@ import mage.filter.common.FilterControlledPermanent;
|
|||
import mage.filter.predicate.Predicates;
|
||||
import mage.game.command.Emblem;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class ElspethKnightErrantEmblem extends Emblem {
|
||||
|
||||
public ElspethKnightErrantEmblem() {
|
||||
this.setName("Emblem Elspeth");
|
||||
super("Emblem Elspeth");
|
||||
FilterControlledPermanent filter = new FilterControlledPermanent("Artifacts, creatures, enchantments, and lands you control");
|
||||
filter.add(Predicates.or(
|
||||
CardType.ARTIFACT.getPredicate(),
|
||||
|
@ -30,6 +27,14 @@ public final class ElspethKnightErrantEmblem extends Emblem {
|
|||
Effect effect = new GainAbilityAllEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield, filter, false);
|
||||
effect.setText("Artifacts, creatures, enchantments, and lands you control have indestructible");
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, effect));
|
||||
availableImageSetCodes = Arrays.asList("MMA", "MD1", "MED");
|
||||
}
|
||||
|
||||
private ElspethKnightErrantEmblem(final ElspethKnightErrantEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElspethKnightErrantEmblem copy() {
|
||||
return new ElspethKnightErrantEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,19 +10,14 @@ import mage.constants.Zone;
|
|||
import mage.filter.StaticFilters;
|
||||
import mage.game.command.Emblem;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class ElspethSunsChampionEmblem extends Emblem {
|
||||
|
||||
// -7: You get an emblem with "Creatures you control get +2/+2 and have flying."
|
||||
public ElspethSunsChampionEmblem() {
|
||||
this.setName("Emblem Elspeth");
|
||||
availableImageSetCodes = Arrays.asList("THS", "MOC");
|
||||
|
||||
super("Emblem Elspeth");
|
||||
Ability ability = new SimpleStaticAbility(
|
||||
Zone.COMMAND,
|
||||
new BoostControlledEffect(
|
||||
|
@ -38,4 +33,13 @@ public final class ElspethSunsChampionEmblem extends Emblem {
|
|||
).setText("and have flying"));
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
private ElspethSunsChampionEmblem(final ElspethSunsChampionEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElspethSunsChampionEmblem copy() {
|
||||
return new ElspethSunsChampionEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,8 +11,6 @@ import mage.constants.SetTargetPointer;
|
|||
import mage.constants.Zone;
|
||||
import mage.game.command.Emblem;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* @author spjspj
|
||||
*/
|
||||
|
@ -24,7 +22,7 @@ public final class GarrukApexPredatorEmblem extends Emblem {
|
|||
*/
|
||||
|
||||
public GarrukApexPredatorEmblem() {
|
||||
setName("Emblem Garruk");
|
||||
super("Emblem Garruk");
|
||||
|
||||
Effect effect = new BoostTargetEffect(5, 5, Duration.EndOfTurn);
|
||||
effect.setText("it gets +5/+5");
|
||||
|
@ -32,7 +30,14 @@ public final class GarrukApexPredatorEmblem extends Emblem {
|
|||
effect = new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn);
|
||||
ability.addEffect(effect.concatBy("and"));
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
availableImageSetCodes = Arrays.asList("M15", "MED");
|
||||
private GarrukApexPredatorEmblem(final GarrukApexPredatorEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GarrukApexPredatorEmblem copy() {
|
||||
return new GarrukApexPredatorEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
@ -13,7 +12,6 @@ import mage.game.command.Emblem;
|
|||
import mage.target.common.TargetCardInLibrary;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class GarrukCallerOfBeastsEmblem extends Emblem {
|
||||
|
@ -24,11 +22,18 @@ public final class GarrukCallerOfBeastsEmblem extends Emblem {
|
|||
* library."
|
||||
*/
|
||||
public GarrukCallerOfBeastsEmblem() {
|
||||
this.setName("Emblem Garruk");
|
||||
super("Emblem Garruk");
|
||||
Effect effect = new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(new FilterCreatureCard("creature card")), false, true, Outcome.PutCreatureInPlay);
|
||||
Ability ability = new SpellCastControllerTriggeredAbility(Zone.COMMAND, effect, StaticFilters.FILTER_SPELL_A_CREATURE, true, false);
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
this.setExpansionSetCodeForImage("M14");
|
||||
private GarrukCallerOfBeastsEmblem(final GarrukCallerOfBeastsEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GarrukCallerOfBeastsEmblem copy() {
|
||||
return new GarrukCallerOfBeastsEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,8 +17,7 @@ public final class GarrukCursedHuntsmanEmblem extends Emblem {
|
|||
|
||||
// -6: You get an emblem with "Creatures you control get +3/+3 and have trample."
|
||||
public GarrukCursedHuntsmanEmblem() {
|
||||
this.setName("Emblem Garruk");
|
||||
this.setExpansionSetCodeForImage("ELD");
|
||||
super("Emblem Garruk");
|
||||
Ability ability = new SimpleStaticAbility(
|
||||
Zone.COMMAND,
|
||||
new BoostControlledEffect(
|
||||
|
@ -34,4 +33,13 @@ public final class GarrukCursedHuntsmanEmblem extends Emblem {
|
|||
).setText("and have trample"));
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
private GarrukCursedHuntsmanEmblem(final GarrukCursedHuntsmanEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GarrukCursedHuntsmanEmblem copy() {
|
||||
return new GarrukCursedHuntsmanEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,11 +13,18 @@ public class GarrukUnleashedEmblem extends Emblem {
|
|||
|
||||
// At the beginning of your end step, you may search your library for a creature card, put it onto the battlefield, then shuffle your library.
|
||||
public GarrukUnleashedEmblem() {
|
||||
this.setName("Emblem Garruk");
|
||||
super("Emblem Garruk");
|
||||
Effect effect = new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_CREATURE), false, true, Outcome.PutCreatureInPlay)
|
||||
.setText("search your library for a creature card, put it onto the battlefield, then shuffle");
|
||||
.setText("search your library for a creature card, put it onto the battlefield, then shuffle");
|
||||
this.getAbilities().add(new BeginningOfYourEndStepTriggeredAbility(Zone.COMMAND, effect, true));
|
||||
}
|
||||
|
||||
this.setExpansionSetCodeForImage("M21");
|
||||
private GarrukUnleashedEmblem(final GarrukUnleashedEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GarrukUnleashedEmblem copy() {
|
||||
return new GarrukUnleashedEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
@ -9,16 +8,23 @@ import mage.constants.Zone;
|
|||
import mage.game.command.Emblem;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class GideonAllyOfZendikarEmblem extends Emblem {
|
||||
|
||||
public GideonAllyOfZendikarEmblem() {
|
||||
this.setName("Emblem Gideon");
|
||||
super("Emblem Gideon");
|
||||
BoostControlledEffect effect = new BoostControlledEffect(1, 1, Duration.EndOfGame);
|
||||
Ability ability = new SimpleStaticAbility(Zone.COMMAND, effect);
|
||||
this.getAbilities().add(ability);
|
||||
this.setExpansionSetCodeForImage("BFZ");
|
||||
}
|
||||
|
||||
private GideonAllyOfZendikarEmblem(final GideonAllyOfZendikarEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GideonAllyOfZendikarEmblem copy() {
|
||||
return new GideonAllyOfZendikarEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,11 +18,18 @@ import mage.game.events.GameEvent;
|
|||
public final class GideonOfTheTrialsEmblem extends Emblem {
|
||||
|
||||
public GideonOfTheTrialsEmblem() {
|
||||
this.setName("Emblem Gideon");
|
||||
super("Emblem Gideon");
|
||||
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new GideonOfTheTrialsCantLoseEffect());
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
this.setExpansionSetCodeForImage("AKH");
|
||||
private GideonOfTheTrialsEmblem(final GideonOfTheTrialsEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GideonOfTheTrialsEmblem copy() {
|
||||
return new GideonOfTheTrialsEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
@ -9,18 +8,25 @@ import mage.filter.StaticFilters;
|
|||
import mage.game.command.Emblem;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public final class HuatliRadiantChampionEmblem extends Emblem {
|
||||
|
||||
public HuatliRadiantChampionEmblem() {
|
||||
this.setName("Emblem Huatli");
|
||||
super("Emblem Huatli");
|
||||
|
||||
// Whenever a creature enters the battlefield under your control, you may draw a card.
|
||||
Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.COMMAND,
|
||||
new DrawCardSourceControllerEffect(1), StaticFilters.FILTER_CONTROLLED_A_CREATURE, true);
|
||||
this.getAbilities().add(ability);
|
||||
this.setExpansionSetCodeForImage("RIX");
|
||||
}
|
||||
|
||||
private HuatliRadiantChampionEmblem(final HuatliRadiantChampionEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HuatliRadiantChampionEmblem copy() {
|
||||
return new HuatliRadiantChampionEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,6 @@ import mage.abilities.common.SpellCastControllerTriggeredAbility;
|
|||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.MillCardsTargetEffect;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.FilterSpell;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.command.Emblem;
|
||||
import mage.target.common.TargetOpponent;
|
||||
|
@ -17,13 +16,20 @@ public final class JaceTelepathUnboundEmblem extends Emblem {
|
|||
// You get an emblem with "Whenever you cast a spell, target opponent puts the top five cards of their library into their graveyard".
|
||||
|
||||
public JaceTelepathUnboundEmblem() {
|
||||
this.setName("Emblem Jace");
|
||||
super("Emblem Jace");
|
||||
Effect effect = new MillCardsTargetEffect(5);
|
||||
effect.setText("target opponent mills five cards");
|
||||
Ability ability = new SpellCastControllerTriggeredAbility(Zone.COMMAND, effect, StaticFilters.FILTER_SPELL_A, false, false);
|
||||
ability.addTarget(new TargetOpponent());
|
||||
getAbilities().add(ability);
|
||||
}
|
||||
|
||||
this.setExpansionSetCodeForImage("ORI");
|
||||
private JaceTelepathUnboundEmblem(final JaceTelepathUnboundEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JaceTelepathUnboundEmblem copy() {
|
||||
return new JaceTelepathUnboundEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,14 +25,22 @@ public final class JaceUnravelerOfSecretsEmblem extends Emblem {
|
|||
* counter that spell."
|
||||
*/
|
||||
public JaceUnravelerOfSecretsEmblem() {
|
||||
this.setName("Emblem Jace");
|
||||
setExpansionSetCodeForImage("SOI");
|
||||
super("Emblem Jace");
|
||||
Effect effect = new CounterTargetEffect();
|
||||
effect.setText("counter that spell");
|
||||
Ability ability = new JaceUnravelerOfSecretsTriggeredAbility(effect, false);
|
||||
ability.addWatcher(new SpellsCastWatcher());
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
private JaceUnravelerOfSecretsEmblem(final JaceUnravelerOfSecretsEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JaceUnravelerOfSecretsEmblem copy() {
|
||||
return new JaceUnravelerOfSecretsEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
class JaceUnravelerOfSecretsTriggeredAbility extends SpellCastOpponentTriggeredAbility {
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
package mage.game.command.emblems;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.AsThoughEffectImpl;
|
||||
|
@ -19,21 +17,30 @@ import mage.game.events.ZoneChangeEvent;
|
|||
import mage.players.Player;
|
||||
import mage.watchers.common.CastFromGraveyardWatcher;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public final class JayaBallardEmblem extends Emblem {
|
||||
// You get an emblem with "You may cast instant and sorcery cards from your graveyard. If a card cast this way would be put into your graveyard, exile it instead."
|
||||
|
||||
public JayaBallardEmblem() {
|
||||
setName("Emblem Jaya Ballard");
|
||||
availableImageSetCodes = Arrays.asList("DOM", "MED");
|
||||
super("Emblem Jaya Ballard");
|
||||
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new JayaBallardCastFromGraveyardEffect());
|
||||
ability.addEffect(new JayaBallardReplacementEffect());
|
||||
ability.addWatcher(new CastFromGraveyardWatcher());
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
private JayaBallardEmblem(final JayaBallardEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JayaBallardEmblem copy() {
|
||||
return new JayaBallardEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
class JayaBallardCastFromGraveyardEffect extends AsThoughEffectImpl {
|
||||
|
@ -120,7 +127,7 @@ class JayaBallardReplacementEffect extends ReplacementEffectImpl {
|
|||
CastFromGraveyardWatcher watcher = game.getState().getWatcher(CastFromGraveyardWatcher.class);
|
||||
return watcher != null
|
||||
&& watcher.spellWasCastFromGraveyard(event.getTargetId(),
|
||||
game.getState().getZoneChangeCounter(event.getTargetId()));
|
||||
game.getState().getZoneChangeCounter(event.getTargetId()));
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
|
|
@ -25,12 +25,20 @@ public final class JayaFieryNegotiatorEmblem extends Emblem {
|
|||
|
||||
// −8: You get an emblem with "Whenever you cast a red instant or sorcery spell, copy it twice. You may choose new targets for the copies."
|
||||
public JayaFieryNegotiatorEmblem() {
|
||||
this.setName("Emblem Jaya");
|
||||
this.setExpansionSetCodeForImage("DMU");
|
||||
super("Emblem Jaya");
|
||||
this.getAbilities().add(new SpellCastControllerTriggeredAbility(
|
||||
new JayaFieryNegotiatorEmblemEffect(), filter, false
|
||||
));
|
||||
}
|
||||
|
||||
private JayaFieryNegotiatorEmblem(final JayaFieryNegotiatorEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JayaFieryNegotiatorEmblem copy() {
|
||||
return new JayaFieryNegotiatorEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
class JayaFieryNegotiatorEmblemEffect extends OneShotEffect {
|
||||
|
|
|
@ -4,6 +4,7 @@ import mage.ObjectColor;
|
|||
import mage.abilities.common.DealsDamageToAPlayerAllTriggeredAbility;
|
||||
import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
|
||||
import mage.constants.SetTargetPointer;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.FilterCard;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterCreatureCard;
|
||||
|
@ -11,7 +12,6 @@ import mage.filter.predicate.Predicates;
|
|||
import mage.filter.predicate.mageobject.ColorPredicate;
|
||||
import mage.game.command.Emblem;
|
||||
import mage.target.common.TargetCardInLibrary;
|
||||
import mage.constants.Zone;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
|
@ -29,12 +29,20 @@ public final class KaitoShizukiEmblem extends Emblem {
|
|||
|
||||
// −7: You get an emblem with "Whenever a creature you control deals combat damage to a player, search your library for a blue or black creature card, put it onto the battlefield, then shuffle."
|
||||
public KaitoShizukiEmblem() {
|
||||
this.setName("Emblem Kaito");
|
||||
this.setExpansionSetCodeForImage("NEO");
|
||||
super("Emblem Kaito");
|
||||
this.getAbilities().add(new DealsDamageToAPlayerAllTriggeredAbility(
|
||||
Zone.COMMAND, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)),
|
||||
StaticFilters.FILTER_CONTROLLED_A_CREATURE, false,
|
||||
SetTargetPointer.NONE, true, false
|
||||
));
|
||||
}
|
||||
|
||||
private KaitoShizukiEmblem(final KaitoShizukiEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public KaitoShizukiEmblem copy() {
|
||||
return new KaitoShizukiEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,8 +25,7 @@ public final class KarnLivingLegacyEmblem extends Emblem {
|
|||
|
||||
// -7: You get an emblem with "Tap an untapped artifact you control: This emblem deals 1 damage to any target."
|
||||
public KarnLivingLegacyEmblem() {
|
||||
this.setName("Emblem Karn");
|
||||
this.setExpansionSetCodeForImage("DMU");
|
||||
super("Emblem Karn");
|
||||
Ability ability = new SimpleActivatedAbility(
|
||||
Zone.COMMAND, new DamageTargetEffect(1, "this emblem"),
|
||||
new TapTargetCost(new TargetControlledPermanent(filter))
|
||||
|
@ -34,4 +33,13 @@ public final class KarnLivingLegacyEmblem extends Emblem {
|
|||
ability.addTarget(new TargetAnyTarget());
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
private KarnLivingLegacyEmblem(final KarnLivingLegacyEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public KarnLivingLegacyEmblem copy() {
|
||||
return new KarnLivingLegacyEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,13 +29,21 @@ public class KayaTheInexorableEmblem extends Emblem {
|
|||
// −7: You get an emblem with "At the beginning of your upkeep, you may cast a legendary spell from your hand, from your graveyard, or from among cards you own in exile without paying its mana cost."
|
||||
public KayaTheInexorableEmblem() {
|
||||
|
||||
this.setName("Emblem Kaya");
|
||||
this.setExpansionSetCodeForImage("KHM");
|
||||
super("Emblem Kaya");
|
||||
this.getAbilities().add(new BeginningOfUpkeepTriggeredAbility(
|
||||
Zone.COMMAND, new KayaTheInexorableEmblemEffect(),
|
||||
TargetController.YOU, true, false
|
||||
));
|
||||
}
|
||||
|
||||
private KayaTheInexorableEmblem(final KayaTheInexorableEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public KayaTheInexorableEmblem copy() {
|
||||
return new KayaTheInexorableEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
class KayaTheInexorableEmblemEffect extends OneShotEffect {
|
||||
|
|
|
@ -19,9 +19,17 @@ public final class KioraEmblem extends Emblem {
|
|||
*/
|
||||
|
||||
public KioraEmblem() {
|
||||
this.setName("Emblem Kiora");
|
||||
this.setExpansionSetCodeForImage("BNG");
|
||||
super("Emblem Kiora");
|
||||
Ability ability = new BeginningOfEndStepTriggeredAbility(Zone.COMMAND, new CreateTokenEffect(new Kraken99Token()), TargetController.YOU, null, false);
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
private KioraEmblem(final KioraEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public KioraEmblem copy() {
|
||||
return new KioraEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
@ -14,7 +13,6 @@ import mage.game.permanent.Permanent;
|
|||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class KioraMasterOfTheDepthsEmblem extends Emblem {
|
||||
|
@ -22,14 +20,22 @@ public final class KioraMasterOfTheDepthsEmblem extends Emblem {
|
|||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures");
|
||||
|
||||
public KioraMasterOfTheDepthsEmblem() {
|
||||
this.setName("Emblem Kiora");
|
||||
super("Emblem Kiora");
|
||||
|
||||
Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.COMMAND,
|
||||
new KioraFightEffect(), filter, true, SetTargetPointer.PERMANENT,
|
||||
"Whenever a creature enters the battlefield under your control, you may have it fight target creature.");
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
this.getAbilities().add(ability);
|
||||
this.setExpansionSetCodeForImage("BFZ");
|
||||
}
|
||||
|
||||
private KioraMasterOfTheDepthsEmblem(final KioraMasterOfTheDepthsEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public KioraMasterOfTheDepthsEmblem copy() {
|
||||
return new KioraMasterOfTheDepthsEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -22,8 +22,7 @@ public final class KothFireOfResistanceEmblem extends Emblem {
|
|||
|
||||
// −7: You get an emblem with "Whenever a Mountain enters the battlefield under your control, this emblem deals 4 damage to any target."
|
||||
public KothFireOfResistanceEmblem() {
|
||||
this.setName("Emblem Koth");
|
||||
this.setExpansionSetCodeForImage("ONE");
|
||||
super("Emblem Koth");
|
||||
|
||||
Ability ability = new EntersBattlefieldControlledTriggeredAbility(
|
||||
Zone.COMMAND, new DamageTargetEffect(4).setText("this emblem deals 4 damage to any target"),
|
||||
|
@ -31,4 +30,13 @@ public final class KothFireOfResistanceEmblem extends Emblem {
|
|||
ability.addTarget(new TargetAnyTarget());
|
||||
getAbilities().add(ability);
|
||||
}
|
||||
|
||||
private KothFireOfResistanceEmblem(final KothFireOfResistanceEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public KothFireOfResistanceEmblem copy() {
|
||||
return new KothFireOfResistanceEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
@ -8,7 +7,6 @@ import mage.abilities.costs.common.TapSourceCost;
|
|||
import mage.abilities.effects.ContinuousEffectImpl;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.constants.*;
|
||||
|
||||
import mage.filter.common.FilterLandPermanent;
|
||||
import mage.game.Game;
|
||||
import mage.game.command.Emblem;
|
||||
|
@ -16,17 +14,23 @@ import mage.game.permanent.Permanent;
|
|||
import mage.target.common.TargetAnyTarget;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class KothOfTheHammerEmblem extends Emblem {
|
||||
// "Mountains you control have '{T}: This land deals 1 damage to any target.'"
|
||||
|
||||
public KothOfTheHammerEmblem() {
|
||||
this.setName("Emblem Koth");
|
||||
super("Emblem Koth");
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new KothOfTheHammerThirdEffect()));
|
||||
}
|
||||
|
||||
this.setExpansionSetCodeForImage("DDI");
|
||||
private KothOfTheHammerEmblem(final KothOfTheHammerEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public KothOfTheHammerEmblem copy() {
|
||||
return new KothOfTheHammerEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
@ -17,18 +16,24 @@ import mage.game.command.Emblem;
|
|||
import mage.target.targetpointer.FixedTarget;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class LilianaDefiantNecromancerEmblem extends Emblem {
|
||||
// You get an emblem with "Whenever a creature you control dies, return it to the battlefield under your control at the beginning of the next end step."
|
||||
|
||||
public LilianaDefiantNecromancerEmblem() {
|
||||
this.setName("Emblem Liliana");
|
||||
super("Emblem Liliana");
|
||||
Ability ability = new DiesCreatureTriggeredAbility(Zone.COMMAND, new LilianaDefiantNecromancerEmblemEffect(), false, StaticFilters.FILTER_PERMANENT_A_CREATURE, true);
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
this.setExpansionSetCodeForImage("ORI");
|
||||
private LilianaDefiantNecromancerEmblem(final LilianaDefiantNecromancerEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LilianaDefiantNecromancerEmblem copy() {
|
||||
return new LilianaDefiantNecromancerEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.Mana;
|
||||
|
@ -13,10 +12,7 @@ import mage.constants.Zone;
|
|||
import mage.filter.common.FilterLandPermanent;
|
||||
import mage.game.command.Emblem;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class LilianaOfTheDarkRealmsEmblem extends Emblem {
|
||||
|
@ -28,11 +24,18 @@ public final class LilianaOfTheDarkRealmsEmblem extends Emblem {
|
|||
}
|
||||
|
||||
public LilianaOfTheDarkRealmsEmblem() {
|
||||
this.setName("Emblem Liliana");
|
||||
super("Emblem Liliana");
|
||||
SimpleManaAbility manaAbility = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.BlackMana(4), new TapSourceCost());
|
||||
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new GainAbilityControlledEffect(manaAbility, Duration.WhileOnBattlefield, filter));
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
availableImageSetCodes = Arrays.asList("M13", "M14");
|
||||
private LilianaOfTheDarkRealmsEmblem(final LilianaOfTheDarkRealmsEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LilianaOfTheDarkRealmsEmblem copy() {
|
||||
return new LilianaOfTheDarkRealmsEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,8 +13,6 @@ import mage.game.Game;
|
|||
import mage.game.command.Emblem;
|
||||
import mage.game.permanent.token.ZombieToken;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* @author spjspj
|
||||
*/
|
||||
|
@ -22,12 +20,19 @@ public final class LilianaTheLastHopeEmblem extends Emblem {
|
|||
|
||||
// "At the beginning of your end step, create X 2/2 black Zombie creature tokens, where X is two plus the number of Zombies you control."
|
||||
public LilianaTheLastHopeEmblem() {
|
||||
this.setName("Emblem Liliana");
|
||||
super("Emblem Liliana");
|
||||
Ability ability = new BeginningOfEndStepTriggeredAbility(Zone.COMMAND, new CreateTokenEffect(new ZombieToken(), new LilianaZombiesCount()),
|
||||
TargetController.YOU, null, false);
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
availableImageSetCodes = Arrays.asList("EMN", "MED", "2X2");
|
||||
private LilianaTheLastHopeEmblem(final LilianaTheLastHopeEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LilianaTheLastHopeEmblem copy() {
|
||||
return new LilianaTheLastHopeEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -15,14 +15,21 @@ public final class LilianaWakerOfTheDeadEmblem extends Emblem {
|
|||
*/
|
||||
|
||||
public LilianaWakerOfTheDeadEmblem() {
|
||||
setName("Emblem Liliana");
|
||||
super("Emblem Liliana");
|
||||
Ability ability = new BeginningOfCombatTriggeredAbility(
|
||||
Zone.COMMAND,
|
||||
new ReturnCreatureFromGraveyardToBattlefieldAndGainHasteEffect(),
|
||||
TargetController.YOU, false, false);
|
||||
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE));
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
this.setExpansionSetCodeForImage("M21");
|
||||
private LilianaWakerOfTheDeadEmblem(final LilianaWakerOfTheDeadEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LilianaWakerOfTheDeadEmblem copy() {
|
||||
return new LilianaWakerOfTheDeadEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,8 +22,7 @@ public final class LolthSpiderQueenEmblem extends Emblem {
|
|||
|
||||
// −8: You get an emblem with "Whenever an opponent is dealt combat damage by one or more creatures you control, if that player lost less than 8 life this turn, they lose life equal to the difference."
|
||||
public LolthSpiderQueenEmblem() {
|
||||
this.setName("Emblem Lolth");
|
||||
this.setExpansionSetCodeForImage("AFR");
|
||||
super("Emblem Lolth");
|
||||
this.getAbilities().add(new ConditionalInterveningIfTriggeredAbility(
|
||||
new DealCombatDamageControlledTriggeredAbility(
|
||||
Zone.COMMAND, new LolthSpiderQueenEmblemEffect(), true, true
|
||||
|
@ -32,6 +31,15 @@ public final class LolthSpiderQueenEmblem extends Emblem {
|
|||
"if that player lost less than 8 life this turn, they lose life equal to the difference."
|
||||
));
|
||||
}
|
||||
|
||||
private LolthSpiderQueenEmblem(final LolthSpiderQueenEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LolthSpiderQueenEmblem copy() {
|
||||
return new LolthSpiderQueenEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
enum LolthSpiderQueenEmblemCondition implements Condition {
|
||||
|
|
|
@ -3,24 +3,33 @@ package mage.game.command.emblems;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.PreventionEffectImpl;
|
||||
import mage.constants.*;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.TurnPhase;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.command.Emblem;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.players.Player;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author NinthWorld
|
||||
*/
|
||||
public final class LukeSkywalkerEmblem extends Emblem {
|
||||
|
||||
// -6: You get an emblem with "Prevent all damage that would be dealt to you during combat." Exile Luke Skywalker, the Last Jedi.
|
||||
public LukeSkywalkerEmblem() {
|
||||
this.setName("Emblem Luke Skywalker");
|
||||
this.setExpansionSetCodeForImage("SWS");
|
||||
super("Emblem Luke Skywalker");
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.BATTLEFIELD, new LukeSkywalkerEmblemEffect()));
|
||||
}
|
||||
|
||||
private LukeSkywalkerEmblem(final LukeSkywalkerEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LukeSkywalkerEmblem copy() {
|
||||
return new LukeSkywalkerEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
class LukeSkywalkerEmblemEffect extends PreventionEffectImpl {
|
||||
|
|
|
@ -19,8 +19,7 @@ public final class LukkaWaywardBonderEmblem extends Emblem {
|
|||
|
||||
// −7: You get an emblem with "Whenever a creature enters the battlefield under your control, it deals damage equal to its power to any target."
|
||||
public LukkaWaywardBonderEmblem() {
|
||||
this.setName("Emblem Lukka");
|
||||
this.setExpansionSetCodeForImage("STX");
|
||||
super("Emblem Lukka");
|
||||
Ability ability = new EntersBattlefieldControlledTriggeredAbility(
|
||||
Zone.COMMAND, new LukkaWaywardBonderEmblemEffect(),
|
||||
StaticFilters.FILTER_PERMANENT_A_CREATURE, false
|
||||
|
@ -28,6 +27,15 @@ public final class LukkaWaywardBonderEmblem extends Emblem {
|
|||
ability.addTarget(new TargetAnyTarget());
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
private LukkaWaywardBonderEmblem(final LukkaWaywardBonderEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LukkaWaywardBonderEmblem copy() {
|
||||
return new LukkaWaywardBonderEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
class LukkaWaywardBonderEmblemEffect extends OneShotEffect {
|
||||
|
|
|
@ -32,8 +32,7 @@ public final class MomirEmblem extends Emblem {
|
|||
// Faking Vanguard as an Emblem; need to come back to this and add a new type of CommandObject
|
||||
|
||||
public MomirEmblem() {
|
||||
setName("Emblem Momir Vig, Simic Visionary");
|
||||
setExpansionSetCodeForImage("DIS");
|
||||
super("Emblem Momir Vig, Simic Visionary");
|
||||
|
||||
// {X}, Discard a card: Create a token that's a copy of a creature card with converted mana cost X chosen at random.
|
||||
// Activate this ability only any time you could cast a sorcery and only once each turn.
|
||||
|
@ -42,6 +41,15 @@ public final class MomirEmblem extends Emblem {
|
|||
ability.setTiming(TimingRule.SORCERY);
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
private MomirEmblem(final MomirEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MomirEmblem copy() {
|
||||
return new MomirEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
class MomirEffect extends OneShotEffect {
|
||||
|
|
|
@ -7,18 +7,24 @@ import mage.constants.Zone;
|
|||
import mage.game.command.Emblem;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author weirddan455
|
||||
*/
|
||||
public final class MordenkainenEmblem extends Emblem {
|
||||
|
||||
// You get an emblem with "You have no maximum hand size."
|
||||
public MordenkainenEmblem() {
|
||||
this.setName("Emblem Mordenkainen");
|
||||
super("Emblem Mordenkainen");
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new MaximumHandSizeControllerEffect(
|
||||
Integer.MAX_VALUE, Duration.WhileOnBattlefield, MaximumHandSizeControllerEffect.HandSizeModification.SET
|
||||
)));
|
||||
}
|
||||
|
||||
this.setExpansionSetCodeForImage("AFR");
|
||||
private MordenkainenEmblem(final MordenkainenEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MordenkainenEmblem copy() {
|
||||
return new MordenkainenEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,8 +22,7 @@ public final class MuYanlingSkyDancerEmblem extends Emblem {
|
|||
|
||||
// "Islands you control have '{T}: Draw a card'."
|
||||
public MuYanlingSkyDancerEmblem() {
|
||||
this.setName("Emblem Yanling");
|
||||
this.setExpansionSetCodeForImage("M20");
|
||||
super("Emblem Yanling");
|
||||
this.getAbilities().add(new SimpleStaticAbility(
|
||||
Zone.COMMAND,
|
||||
new GainAbilityControlledEffect(new SimpleActivatedAbility(
|
||||
|
@ -31,4 +30,13 @@ public final class MuYanlingSkyDancerEmblem extends Emblem {
|
|||
), Duration.EndOfGame, filter)
|
||||
));
|
||||
}
|
||||
|
||||
private MuYanlingSkyDancerEmblem(final MuYanlingSkyDancerEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MuYanlingSkyDancerEmblem copy() {
|
||||
return new MuYanlingSkyDancerEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,14 +15,21 @@ public final class NarsetOfTheAncientWayEmblem extends Emblem {
|
|||
|
||||
// −6: You get an emblem with "Whenever you cast a noncreature spell, this emblem deals 2 damage to any target."
|
||||
public NarsetOfTheAncientWayEmblem() {
|
||||
this.setName("Emblem Narset");
|
||||
super("Emblem Narset");
|
||||
Ability ability = new SpellCastControllerTriggeredAbility(
|
||||
Zone.COMMAND, new DamageTargetEffect(2, "this emblem"),
|
||||
StaticFilters.FILTER_SPELL_A_NON_CREATURE, false, false
|
||||
);
|
||||
ability.addTarget(new TargetAnyTarget());
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
this.setExpansionSetCodeForImage("IKO");
|
||||
private NarsetOfTheAncientWayEmblem(final NarsetOfTheAncientWayEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NarsetOfTheAncientWayEmblem copy() {
|
||||
return new NarsetOfTheAncientWayEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.MageObject;
|
||||
|
@ -15,18 +14,26 @@ import mage.game.events.GameEvent;
|
|||
import mage.players.Player;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class NarsetTranscendentEmblem extends Emblem {
|
||||
|
||||
|
||||
// "Your opponents can't cast noncreature spells.
|
||||
public NarsetTranscendentEmblem() {
|
||||
|
||||
this.setName("Emblem Narset");
|
||||
super("Emblem Narset");
|
||||
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new NarsetTranscendentCantCastEffect()));
|
||||
}
|
||||
|
||||
private NarsetTranscendentEmblem(final NarsetTranscendentEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NarsetTranscendentEmblem copy() {
|
||||
return new NarsetTranscendentEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
class NarsetTranscendentCantCastEffect extends ContinuousRuleModifyingEffectImpl {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
@ -9,18 +8,24 @@ import mage.filter.common.FilterControlledLandPermanent;
|
|||
import mage.game.command.Emblem;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class NissaVitalForceEmblem extends Emblem {
|
||||
// You get an emblem with "Whenever a land enters the battlefield under your control, you may draw a card."
|
||||
|
||||
public NissaVitalForceEmblem() {
|
||||
this.setName("Emblem Nissa");
|
||||
super("Emblem Nissa");
|
||||
Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.COMMAND, new DrawCardSourceControllerEffect(1), new FilterControlledLandPermanent("a land"),
|
||||
true, null, true);
|
||||
getAbilities().add(ability);
|
||||
}
|
||||
|
||||
this.setExpansionSetCodeForImage("KLD");
|
||||
private NissaVitalForceEmblem(final NissaVitalForceEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NissaVitalForceEmblem copy() {
|
||||
return new NissaVitalForceEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
|
@ -15,7 +14,7 @@ import mage.game.command.Emblem;
|
|||
public final class NissaWhoShakesTheWorldEmblem extends Emblem {
|
||||
|
||||
public NissaWhoShakesTheWorldEmblem() {
|
||||
this.setName("Emblem Nissa");
|
||||
super("Emblem Nissa");
|
||||
this.getAbilities().add(new SimpleStaticAbility(
|
||||
Zone.COMMAND,
|
||||
new GainAbilityAllEffect(
|
||||
|
@ -23,6 +22,14 @@ public final class NissaWhoShakesTheWorldEmblem extends Emblem {
|
|||
StaticFilters.FILTER_CONTROLLED_PERMANENT_LANDS, false
|
||||
)
|
||||
));
|
||||
this.setExpansionSetCodeForImage("WAR");
|
||||
}
|
||||
|
||||
private NissaWhoShakesTheWorldEmblem(final NissaWhoShakesTheWorldEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NissaWhoShakesTheWorldEmblem copy() {
|
||||
return new NissaWhoShakesTheWorldEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
@ -17,14 +16,13 @@ import mage.target.common.TargetControlledCreaturePermanent;
|
|||
import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class ObNixilisOfTheBlackOathEmblem extends Emblem {
|
||||
|
||||
// You get an emblem with "{1}{B}, Sacrifice a creature: You gain X life and draw X cards, where X is the sacrificed creature's power."
|
||||
public ObNixilisOfTheBlackOathEmblem() {
|
||||
this.setName("Emblem Nixilis");
|
||||
super("Emblem Nixilis");
|
||||
DynamicValue xValue = SacrificeCostCreaturesPower.instance;
|
||||
Effect effect = new GainLifeEffect(xValue);
|
||||
effect.setText("You gain X life");
|
||||
|
@ -34,7 +32,14 @@ public final class ObNixilisOfTheBlackOathEmblem extends Emblem {
|
|||
effect.setText("and draw X cards, where X is the sacrificed creature's power");
|
||||
ability.addEffect(effect);
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
this.setExpansionSetCodeForImage("C14");
|
||||
private ObNixilisOfTheBlackOathEmblem(final ObNixilisOfTheBlackOathEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObNixilisOfTheBlackOathEmblem copy() {
|
||||
return new ObNixilisOfTheBlackOathEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
|
@ -8,21 +7,24 @@ import mage.constants.Zone;
|
|||
import mage.game.Game;
|
||||
import mage.game.command.Emblem;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.events.GameEvent.EventType;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class ObNixilisReignitedEmblem extends Emblem {
|
||||
|
||||
public ObNixilisReignitedEmblem() {
|
||||
setName("Emblem Nixilis");
|
||||
|
||||
super("Emblem Nixilis");
|
||||
this.getAbilities().add(new ObNixilisEmblemTriggeredAbility(new LoseLifeSourceControllerEffect(2), false));
|
||||
availableImageSetCodes = Arrays.asList("BFZ", "DDR", "C19");
|
||||
}
|
||||
|
||||
private ObNixilisReignitedEmblem(final ObNixilisReignitedEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObNixilisReignitedEmblem copy() {
|
||||
return new ObNixilisReignitedEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
@ -14,15 +13,13 @@ import mage.constants.Zone;
|
|||
import mage.game.command.Emblem;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class ObiWanKenobiEmblem extends Emblem {
|
||||
|
||||
// Creatures you control get +1/+1 and have vigilance, first strike, and lifelink
|
||||
public ObiWanKenobiEmblem() {
|
||||
this.setName("Emblem Obi-Wan Kenobi");
|
||||
this.setExpansionSetCodeForImage("SWS");
|
||||
super("Emblem Obi-Wan Kenobi");
|
||||
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new BoostControlledEffect(1, 1, Duration.EndOfGame));
|
||||
Effect effect = new GainAbilityControlledEffect(VigilanceAbility.getInstance(), Duration.EndOfGame);
|
||||
effect.setText("and have vigilance");
|
||||
|
@ -35,4 +32,13 @@ public final class ObiWanKenobiEmblem extends Emblem {
|
|||
ability.addEffect(effect);
|
||||
getAbilities().add(ability);
|
||||
}
|
||||
|
||||
private ObiWanKenobiEmblem(final ObiWanKenobiEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObiWanKenobiEmblem copy() {
|
||||
return new ObiWanKenobiEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,19 +9,16 @@ import mage.filter.StaticFilters;
|
|||
import mage.game.command.Emblem;
|
||||
import mage.target.common.TargetAnyTarget;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class RalIzzetViceroyEmblem extends Emblem {
|
||||
|
||||
// You get an emblem with "Whenever you cast an instant or sorcery spell, this emblem deals 4 damage to any target and you draw two cards."
|
||||
public RalIzzetViceroyEmblem() {
|
||||
this.setName("Emblem Ral");
|
||||
super("Emblem Ral");
|
||||
Ability ability = new SpellCastControllerTriggeredAbility(
|
||||
Zone.COMMAND, new DamageTargetEffect(4, "this emblem"),
|
||||
Zone.COMMAND, new DamageTargetEffect(4, "this emblem"),
|
||||
StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY, false, false
|
||||
);
|
||||
ability.addEffect(
|
||||
|
@ -30,7 +27,14 @@ public final class RalIzzetViceroyEmblem extends Emblem {
|
|||
);
|
||||
ability.addTarget(new TargetAnyTarget());
|
||||
getAbilities().add(ability);
|
||||
}
|
||||
|
||||
availableImageSetCodes = Arrays.asList("MED", "GRN");
|
||||
private RalIzzetViceroyEmblem(final RalIzzetViceroyEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RalIzzetViceroyEmblem copy() {
|
||||
return new RalIzzetViceroyEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,8 +9,6 @@ import mage.game.command.Emblem;
|
|||
import mage.game.events.GameEvent;
|
||||
import mage.game.stack.StackAbility;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
|
@ -18,10 +16,17 @@ public final class RowanKenrithEmblem extends Emblem {
|
|||
// Target player gets an emblem with "Whenever you activate an ability that isn't a mana ability, copy it. You may choose new targets for the copy."
|
||||
|
||||
public RowanKenrithEmblem() {
|
||||
this.setName("Emblem Rowan Kenrith");
|
||||
super("Emblem Rowan Kenrith");
|
||||
this.getAbilities().add(new RowanKenrithEmblemTriggeredAbility());
|
||||
}
|
||||
|
||||
availableImageSetCodes = Arrays.asList("BBD", "CLB");
|
||||
private RowanKenrithEmblem(final RowanKenrithEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RowanKenrithEmblem copy() {
|
||||
return new RowanKenrithEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -15,11 +15,19 @@ public final class RowanScholarOfSparksEmblem extends Emblem {
|
|||
|
||||
// −4: You get an emblem with "Whenever you cast an instant or sorcery spell, you may pay {2}. If you do, copy that spell. You may choose new targets for the copy."
|
||||
public RowanScholarOfSparksEmblem() {
|
||||
this.setName("Emblem Rowan");
|
||||
this.setExpansionSetCodeForImage("STX");
|
||||
super("Emblem Rowan");
|
||||
this.getAbilities().add(new SpellCastControllerTriggeredAbility(
|
||||
Zone.COMMAND, new DoIfCostPaid(new CopyTargetSpellEffect(true), new GenericManaCost(2)),
|
||||
StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY, false, true
|
||||
));
|
||||
}
|
||||
|
||||
private RowanScholarOfSparksEmblem(final RowanScholarOfSparksEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RowanScholarOfSparksEmblem copy() {
|
||||
return new RowanScholarOfSparksEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,8 +15,7 @@ public final class SaheeliFiligreeMasterEmblem extends Emblem {
|
|||
|
||||
// −4: You get an emblem with "Artifact creatures you control get +1/+1" and "Artifact spells you cast cost {1} less to cast."
|
||||
public SaheeliFiligreeMasterEmblem() {
|
||||
this.setName("Emblem Saheeli");
|
||||
this.setExpansionSetCodeForImage("BRO");
|
||||
super("Emblem Saheeli");
|
||||
this.getAbilities().add(new SimpleStaticAbility(
|
||||
Zone.COMMAND,
|
||||
new BoostControlledEffect(
|
||||
|
@ -31,4 +30,13 @@ public final class SaheeliFiligreeMasterEmblem extends Emblem {
|
|||
).setText("Artifact spells you cast cost {1} less to cast")
|
||||
));
|
||||
}
|
||||
|
||||
private SaheeliFiligreeMasterEmblem(final SaheeliFiligreeMasterEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SaheeliFiligreeMasterEmblem copy() {
|
||||
return new SaheeliFiligreeMasterEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.common.BeginningOfDrawTriggeredAbility;
|
||||
|
@ -10,16 +9,23 @@ import mage.constants.Zone;
|
|||
import mage.game.command.Emblem;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class SarkhanTheDragonspeakerEmblem extends Emblem {
|
||||
|
||||
public SarkhanTheDragonspeakerEmblem() {
|
||||
setName("Emblem Sarkhan");
|
||||
this.setExpansionSetCodeForImage("KTK");
|
||||
super("Emblem Sarkhan");
|
||||
|
||||
this.getAbilities().add(new BeginningOfDrawTriggeredAbility(Zone.COMMAND, new DrawCardSourceControllerEffect(2), TargetController.YOU, false));
|
||||
this.getAbilities().add(new BeginningOfEndStepTriggeredAbility(Zone.COMMAND, new DiscardHandControllerEffect(), TargetController.YOU, null, false));
|
||||
}
|
||||
|
||||
private SarkhanTheDragonspeakerEmblem(final SarkhanTheDragonspeakerEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SarkhanTheDragonspeakerEmblem copy() {
|
||||
return new SarkhanTheDragonspeakerEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,10 +19,17 @@ public final class SerraTheBenevolentEmblem extends Emblem {
|
|||
|
||||
// -6: You get an emblem with "If you control a creature, damage that would reduce your life total to less than 1 reduces it to 1 instead."
|
||||
public SerraTheBenevolentEmblem() {
|
||||
this.setName("Emblem Serra");
|
||||
super("Emblem Serra");
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new SerraTheBenevolentEmblemEffect()));
|
||||
}
|
||||
|
||||
this.setExpansionSetCodeForImage("MH1");
|
||||
private SerraTheBenevolentEmblem(final SerraTheBenevolentEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SerraTheBenevolentEmblem copy() {
|
||||
return new SerraTheBenevolentEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
@ -9,17 +8,23 @@ import mage.constants.Zone;
|
|||
import mage.game.command.Emblem;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class SorinLordOfInnistradEmblem extends Emblem {
|
||||
|
||||
public SorinLordOfInnistradEmblem() {
|
||||
this.setName("Emblem Sorin");
|
||||
super("Emblem Sorin");
|
||||
BoostControlledEffect effect = new BoostControlledEffect(1, 0, Duration.EndOfGame);
|
||||
Ability ability = new SimpleStaticAbility(Zone.COMMAND, effect);
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
this.setExpansionSetCodeForImage("DKA");
|
||||
private SorinLordOfInnistradEmblem(final SorinLordOfInnistradEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SorinLordOfInnistradEmblem copy() {
|
||||
return new SorinLordOfInnistradEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
@ -10,7 +9,6 @@ import mage.filter.StaticFilters;
|
|||
import mage.game.command.Emblem;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class SorinSolemnVisitorEmblem extends Emblem {
|
||||
|
@ -20,8 +18,17 @@ public final class SorinSolemnVisitorEmblem extends Emblem {
|
|||
* sacrifices a creature."
|
||||
*/
|
||||
public SorinSolemnVisitorEmblem() {
|
||||
this.setName("Emblem Sorin");
|
||||
super("Emblem Sorin");
|
||||
Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.COMMAND, new SacrificeEffect(StaticFilters.FILTER_PERMANENT_CREATURE, 1, "that player"), TargetController.OPPONENT, false, true);
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
private SorinSolemnVisitorEmblem(final SorinSolemnVisitorEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SorinSolemnVisitorEmblem copy() {
|
||||
return new SorinSolemnVisitorEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
|
@ -6,8 +5,7 @@ import mage.abilities.effects.common.continuous.CastFromHandWithoutPayingManaCos
|
|||
import mage.constants.Zone;
|
||||
import mage.game.command.Emblem;
|
||||
|
||||
/*
|
||||
*
|
||||
/**
|
||||
* Author: spjspj
|
||||
*/
|
||||
public final class TamiyoFieldResearcherEmblem extends Emblem {
|
||||
|
@ -15,10 +13,17 @@ public final class TamiyoFieldResearcherEmblem extends Emblem {
|
|||
|
||||
public TamiyoFieldResearcherEmblem() {
|
||||
|
||||
this.setName("Emblem Tamiyo");
|
||||
super("Emblem Tamiyo");
|
||||
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new CastFromHandWithoutPayingManaCostEffect()));
|
||||
}
|
||||
|
||||
this.setExpansionSetCodeForImage("EMN");
|
||||
private TamiyoFieldResearcherEmblem(final TamiyoFieldResearcherEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TamiyoFieldResearcherEmblem copy() {
|
||||
return new TamiyoFieldResearcherEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,8 +12,6 @@ import mage.constants.Zone;
|
|||
import mage.filter.StaticFilters;
|
||||
import mage.game.command.Emblem;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* @author spjspj
|
||||
*/
|
||||
|
@ -25,7 +23,7 @@ public final class TamiyoTheMoonSageEmblem extends Emblem {
|
|||
*/
|
||||
|
||||
public TamiyoTheMoonSageEmblem() {
|
||||
this.setName("Emblem Tamiyo");
|
||||
super("Emblem Tamiyo");
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new MaximumHandSizeControllerEffect(
|
||||
Integer.MAX_VALUE, Duration.Custom, HandSizeModification.SET
|
||||
)));
|
||||
|
@ -33,7 +31,14 @@ public final class TamiyoTheMoonSageEmblem extends Emblem {
|
|||
Zone.COMMAND, new ReturnToHandTargetEffect().setText("return it to your hand"),
|
||||
true, StaticFilters.FILTER_CARD_A, TargetController.YOU, SetTargetPointer.CARD
|
||||
));
|
||||
}
|
||||
|
||||
availableImageSetCodes = Arrays.asList("AVR", "MED");
|
||||
private TamiyoTheMoonSageEmblem(final TamiyoTheMoonSageEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TamiyoTheMoonSageEmblem copy() {
|
||||
return new TamiyoTheMoonSageEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,8 +23,7 @@ public final class TeferiAkosaOfZhalfirEmblem extends Emblem {
|
|||
|
||||
// -2: You get an emblem with "Knights you control get +1/+0 and have ward {1}."
|
||||
public TeferiAkosaOfZhalfirEmblem() {
|
||||
this.setName("Emblem Teferi");
|
||||
this.setExpansionSetCodeForImage("MOM");
|
||||
super("Emblem Teferi");
|
||||
Ability ability = new SimpleStaticAbility(
|
||||
Zone.COMMAND, new BoostControlledEffect(1, 0, Duration.WhileOnBattlefield, filter)
|
||||
);
|
||||
|
@ -34,4 +33,13 @@ public final class TeferiAkosaOfZhalfirEmblem extends Emblem {
|
|||
).setText("and have ward {1}"));
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
private TeferiAkosaOfZhalfirEmblem(final TeferiAkosaOfZhalfirEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TeferiAkosaOfZhalfirEmblem copy() {
|
||||
return new TeferiAkosaOfZhalfirEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,24 +9,28 @@ import mage.filter.FilterPermanent;
|
|||
import mage.game.command.Emblem;
|
||||
import mage.target.TargetPermanent;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public final class TeferiHeroOfDominariaEmblem extends Emblem {
|
||||
|
||||
// Whenever you draw a card, exile target permanent an opponent controls.
|
||||
public TeferiHeroOfDominariaEmblem() {
|
||||
this.setName("Emblem Teferi");
|
||||
super("Emblem Teferi");
|
||||
Ability ability = new DrawCardControllerTriggeredAbility(Zone.COMMAND, new ExileTargetEffect(), false);
|
||||
FilterPermanent filter = new FilterPermanent("permanent an opponent controls");
|
||||
filter.add(TargetController.OPPONENT.getControllerPredicate());
|
||||
ability.addTarget(new TargetPermanent(filter));
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
availableImageSetCodes = Arrays.asList("DOM", "MED");
|
||||
private TeferiHeroOfDominariaEmblem(final TeferiHeroOfDominariaEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TeferiHeroOfDominariaEmblem copy() {
|
||||
return new TeferiHeroOfDominariaEmblem(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.LoyaltyAbility;
|
||||
|
@ -8,16 +7,22 @@ import mage.constants.Zone;
|
|||
import mage.game.command.Emblem;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class TeferiTemporalArchmageEmblem extends Emblem {
|
||||
// "You may activate loyalty abilities of planeswalkers you control on any player's turn any time you could cast an instant."
|
||||
|
||||
public TeferiTemporalArchmageEmblem() {
|
||||
this.setName("Emblem Teferi");
|
||||
super("Emblem Teferi");
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new ActivateAbilitiesAnyTimeYouCouldCastInstantEffect(LoyaltyAbility.class, "loyalty abilities of planeswalkers you control on any player's turn")));
|
||||
}
|
||||
|
||||
this.setExpansionSetCodeForImage("C14");
|
||||
private TeferiTemporalArchmageEmblem(final TeferiTemporalArchmageEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TeferiTemporalArchmageEmblem copy() {
|
||||
return new TeferiTemporalArchmageEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,13 +13,20 @@ import mage.players.Player;
|
|||
public class TeferiWhoSlowsTheSunsetEmblem extends Emblem {
|
||||
// You get an emblem with "Untap all permanents you control during each opponent's untap step" and "You draw a card during each opponent's draw step."
|
||||
public TeferiWhoSlowsTheSunsetEmblem() {
|
||||
this.setName("Emblem Teferi");
|
||||
super("Emblem Teferi");
|
||||
this.getAbilities().add(new SimpleStaticAbility(
|
||||
Zone.COMMAND, new UntapAllDuringEachOtherPlayersUntapStepEffect(StaticFilters.FILTER_CONTROLLED_PERMANENTS)
|
||||
));
|
||||
this.getAbilities().add(new SimpleStaticAbility(new TeferiWhoSlowsTheSunsetEmblemEffect()));
|
||||
}
|
||||
|
||||
this.setExpansionSetCodeForImage("MID");
|
||||
private TeferiWhoSlowsTheSunsetEmblem(final TeferiWhoSlowsTheSunsetEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TeferiWhoSlowsTheSunsetEmblem copy() {
|
||||
return new TeferiWhoSlowsTheSunsetEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ public final class TeferisTalentEmblem extends Emblem {
|
|||
// -12: "You may activate loyalty abilities of planeswalkers you control on any player's turn any time you could cast an instant."
|
||||
|
||||
public TeferisTalentEmblem() {
|
||||
this.setName("Emblem Teferi");
|
||||
super("Emblem Teferi");
|
||||
this.getAbilities().add(new SimpleStaticAbility(
|
||||
Zone.COMMAND,
|
||||
new ActivateAbilitiesAnyTimeYouCouldCastInstantEffect(
|
||||
|
@ -21,7 +21,14 @@ public final class TeferisTalentEmblem extends Emblem {
|
|||
"loyalty abilities of planeswalkers you control on any player's turn"
|
||||
)
|
||||
));
|
||||
}
|
||||
|
||||
this.setExpansionSetCodeForImage("MOC");
|
||||
private TeferisTalentEmblem(final TeferisTalentEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TeferisTalentEmblem copy() {
|
||||
return new TeferisTalentEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,15 +9,13 @@ import mage.game.command.Emblem;
|
|||
import mage.target.common.TargetCardInLibrary;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class TezzeretArtificeMasterEmblem extends Emblem {
|
||||
|
||||
// −9: You get an emblem with "At the beginning of your end step, search your library for a permanent card, put it into the battlefield, then shuffle your library."
|
||||
public TezzeretArtificeMasterEmblem() {
|
||||
this.setName("Emblem Tezzeret");
|
||||
this.setExpansionSetCodeForImage("M19");
|
||||
super("Emblem Tezzeret");
|
||||
this.getAbilities().add(new BeginningOfEndStepTriggeredAbility(
|
||||
Zone.COMMAND,
|
||||
new SearchLibraryPutInPlayEffect(
|
||||
|
@ -25,4 +23,13 @@ public final class TezzeretArtificeMasterEmblem extends Emblem {
|
|||
), TargetController.YOU, null, false
|
||||
));
|
||||
}
|
||||
|
||||
private TezzeretArtificeMasterEmblem(final TezzeretArtificeMasterEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TezzeretArtificeMasterEmblem copy() {
|
||||
return new TezzeretArtificeMasterEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,11 +13,19 @@ public final class TezzeretBetrayerOfFleshEmblem extends Emblem {
|
|||
|
||||
// −6: You get an emblem with "Whenever an artifact you control becomes tapped, draw a card."
|
||||
public TezzeretBetrayerOfFleshEmblem() {
|
||||
this.setName("Emblem Tezzeret");
|
||||
this.setExpansionSetCodeForImage("NEO");
|
||||
super("Emblem Tezzeret");
|
||||
this.getAbilities().add(new BecomesTappedTriggeredAbility(
|
||||
Zone.COMMAND, new DrawCardSourceControllerEffect(1), false,
|
||||
StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT, false
|
||||
));
|
||||
}
|
||||
|
||||
private TezzeretBetrayerOfFleshEmblem(final TezzeretBetrayerOfFleshEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TezzeretBetrayerOfFleshEmblem copy() {
|
||||
return new TezzeretBetrayerOfFleshEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
@ -10,18 +9,18 @@ import mage.constants.CardType;
|
|||
import mage.constants.Duration;
|
||||
import mage.constants.TargetController;
|
||||
import mage.constants.Zone;
|
||||
import static mage.filter.StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT;
|
||||
import mage.game.command.Emblem;
|
||||
import mage.target.TargetPermanent;
|
||||
|
||||
import static mage.filter.StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class TezzeretTheSchemerEmblem extends Emblem {
|
||||
|
||||
public TezzeretTheSchemerEmblem() {
|
||||
this.setName("Emblem Tezzeret");
|
||||
super("Emblem Tezzeret");
|
||||
|
||||
Effect effect = new AddCardTypeTargetEffect(Duration.EndOfGame, CardType.ARTIFACT, CardType.CREATURE);
|
||||
effect.setText("target artifact you control becomes an artifact creature");
|
||||
|
@ -31,7 +30,14 @@ public final class TezzeretTheSchemerEmblem extends Emblem {
|
|||
ability.addEffect(effect);
|
||||
ability.addTarget(new TargetPermanent(FILTER_CONTROLLED_PERMANENT_ARTIFACT));
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
this.setExpansionSetCodeForImage("AER");
|
||||
private TezzeretTheSchemerEmblem(final TezzeretTheSchemerEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TezzeretTheSchemerEmblem copy() {
|
||||
return new TezzeretTheSchemerEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ import java.util.UUID;
|
|||
* @author TheElk801
|
||||
*/
|
||||
public final class TheRingEmblem extends Emblem {
|
||||
|
||||
private static final FilterPermanent filter = new FilterControlledPermanent("your Ring-bearer");
|
||||
|
||||
static {
|
||||
|
@ -38,12 +39,19 @@ public final class TheRingEmblem extends Emblem {
|
|||
}
|
||||
|
||||
public TheRingEmblem(UUID controllerId) {
|
||||
super();
|
||||
this.setName("The Ring");
|
||||
this.setExpansionSetCodeForImage("LTR");
|
||||
super("The Ring");
|
||||
this.setControllerId(controllerId);
|
||||
}
|
||||
|
||||
private TheRingEmblem(final TheRingEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TheRingEmblem copy() {
|
||||
return new TheRingEmblem(this);
|
||||
}
|
||||
|
||||
public void addNextAbility(Game game) {
|
||||
Ability ability;
|
||||
switch (TemptedByTheRingWatcher.getCount(this.getControllerId(), game)) {
|
||||
|
|
|
@ -22,10 +22,17 @@ public final class TibaltCosmicImpostorEmblem extends Emblem {
|
|||
// You may play cards exiled with Tibalt, Cosmic Impostor, and you may spend mana as though it were mana of any color to cast those spells."
|
||||
|
||||
public TibaltCosmicImpostorEmblem() {
|
||||
setName("Emblem Tibalt");
|
||||
super("Emblem Tibalt");
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new TibaltCosmicImpostorPlayFromExileEffect()));
|
||||
}
|
||||
|
||||
this.setExpansionSetCodeForImage("KHM");
|
||||
private TibaltCosmicImpostorEmblem(final TibaltCosmicImpostorEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TibaltCosmicImpostorEmblem copy() {
|
||||
return new TibaltCosmicImpostorEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -24,8 +24,7 @@ public final class TyvarKellEmblem extends Emblem {
|
|||
|
||||
// −6: You get an emblem with "Whenever you cast an Elf spell, it gains haste until end of turn and you draw two cards."
|
||||
public TyvarKellEmblem() {
|
||||
this.setName("Emblem Tyvar");
|
||||
this.setExpansionSetCodeForImage("KHM");
|
||||
super("Emblem Tyvar");
|
||||
|
||||
Ability ability = new SpellCastControllerTriggeredAbility(
|
||||
Zone.COMMAND,
|
||||
|
@ -36,4 +35,13 @@ public final class TyvarKellEmblem extends Emblem {
|
|||
ability.addEffect(new DrawCardSourceControllerEffect(2, "you").concatBy("and"));
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
private TyvarKellEmblem(final TyvarKellEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TyvarKellEmblem copy() {
|
||||
return new TyvarKellEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
@ -6,18 +5,15 @@ import mage.abilities.TriggeredAbilityImpl;
|
|||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.ExileTargetEffect;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.FilterSpell;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.game.command.Emblem;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.events.GameEvent.EventType;
|
||||
import mage.game.stack.Spell;
|
||||
import mage.target.Target;
|
||||
import mage.target.TargetPermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class VenserTheSojournerEmblem extends Emblem {
|
||||
|
@ -27,13 +23,20 @@ public final class VenserTheSojournerEmblem extends Emblem {
|
|||
*/
|
||||
|
||||
public VenserTheSojournerEmblem() {
|
||||
this.setName("Emblem Venser");
|
||||
super("Emblem Venser");
|
||||
Ability ability = new VenserTheSojournerSpellCastTriggeredAbility(new ExileTargetEffect(), false);
|
||||
Target target = new TargetPermanent();
|
||||
ability.addTarget(target);
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
this.setExpansionSetCodeForImage("DDI");
|
||||
private VenserTheSojournerEmblem(final VenserTheSojournerEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public VenserTheSojournerEmblem copy() {
|
||||
return new VenserTheSojournerEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -13,15 +13,13 @@ import mage.filter.StaticFilters;
|
|||
import mage.game.command.Emblem;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class VivienReidEmblem extends Emblem {
|
||||
// -8: You get an emblem with "Creatures you control get +2/+2 and have vigilance, trample, and indestructible.
|
||||
|
||||
public VivienReidEmblem() {
|
||||
this.setName("Emblem Vivien");
|
||||
this.setExpansionSetCodeForImage("M19");
|
||||
super("Emblem Vivien");
|
||||
Ability ability = new SimpleStaticAbility(
|
||||
Zone.COMMAND,
|
||||
new BoostControlledEffect(
|
||||
|
@ -47,4 +45,13 @@ public final class VivienReidEmblem extends Emblem {
|
|||
).setText(", and indestructible"));
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
||||
private VivienReidEmblem(final VivienReidEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public VivienReidEmblem copy() {
|
||||
return new VivienReidEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,8 +7,6 @@ import mage.constants.Zone;
|
|||
import mage.filter.StaticFilters;
|
||||
import mage.game.command.Emblem;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
|
@ -16,12 +14,20 @@ public final class VraskaGolgariQueenEmblem extends Emblem {
|
|||
|
||||
// -9: You get an emblem with "Whenever a creature you control deals combat damage to a player, that player loses the game."
|
||||
public VraskaGolgariQueenEmblem() {
|
||||
this.setName("Emblem Vraska");
|
||||
availableImageSetCodes = Arrays.asList("MED", "GRN");
|
||||
super("Emblem Vraska");
|
||||
this.getAbilities().add(new DealsDamageToAPlayerAllTriggeredAbility(
|
||||
Zone.COMMAND, new LoseGameTargetPlayerEffect(),
|
||||
StaticFilters.FILTER_CONTROLLED_A_CREATURE,
|
||||
false, SetTargetPointer.NONE, true, true
|
||||
));
|
||||
}
|
||||
|
||||
private VraskaGolgariQueenEmblem(final VraskaGolgariQueenEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public VraskaGolgariQueenEmblem copy() {
|
||||
return new VraskaGolgariQueenEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,8 +6,6 @@ import mage.constants.Zone;
|
|||
import mage.filter.StaticFilters;
|
||||
import mage.game.command.Emblem;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
|
@ -15,7 +13,7 @@ public final class WillKenrithEmblem extends Emblem {
|
|||
// Target player gets an emblem with "Whenever you cast an instant or sorcery spell, copy it. You may choose new targets for the copy."
|
||||
|
||||
public WillKenrithEmblem() {
|
||||
this.setName("Emblem Will Kenrith");
|
||||
super("Emblem Will Kenrith");
|
||||
this.getAbilities().add(new SpellCastControllerTriggeredAbility(
|
||||
Zone.COMMAND,
|
||||
new CopyTargetSpellEffect(true).withSpellName("it"),
|
||||
|
@ -23,7 +21,14 @@ public final class WillKenrithEmblem extends Emblem {
|
|||
false,
|
||||
true
|
||||
));
|
||||
}
|
||||
|
||||
availableImageSetCodes = Arrays.asList("BBD", "CLB");
|
||||
private WillKenrithEmblem(final WillKenrithEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public WillKenrithEmblem copy() {
|
||||
return new WillKenrithEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,10 +20,18 @@ public final class WrennAndRealmbreakerEmblem extends Emblem {
|
|||
|
||||
// -7: You get an emblem with "You may play lands and cast permanent spells from your graveyard."
|
||||
public WrennAndRealmbreakerEmblem() {
|
||||
this.setName("Emblem Wrenn");
|
||||
this.setExpansionSetCodeForImage("MOM");
|
||||
super("Emblem Wrenn");
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new WrennAndRealmbreakerEmblemEffect()));
|
||||
}
|
||||
|
||||
private WrennAndRealmbreakerEmblem(final WrennAndRealmbreakerEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public WrennAndRealmbreakerEmblem copy() {
|
||||
return new WrennAndRealmbreakerEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
class WrennAndRealmbreakerEmblemEffect extends AsThoughEffectImpl {
|
||||
|
|
|
@ -13,11 +13,18 @@ public final class WrennAndSevenEmblem extends Emblem {
|
|||
|
||||
// You get an emblem with "You have no maximum hand size."
|
||||
public WrennAndSevenEmblem() {
|
||||
this.setName("Emblem Wrenn");
|
||||
super("Emblem Wrenn");
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new MaximumHandSizeControllerEffect(
|
||||
Integer.MAX_VALUE, Duration.WhileOnBattlefield, MaximumHandSizeControllerEffect.HandSizeModification.SET
|
||||
)));
|
||||
}
|
||||
|
||||
this.setExpansionSetCodeForImage("MID");
|
||||
private WrennAndSevenEmblem(final WrennAndSevenEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public WrennAndSevenEmblem copy() {
|
||||
return new WrennAndSevenEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,19 +4,13 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.ContinuousEffectImpl;
|
||||
import mage.abilities.keyword.RetraceAbility;
|
||||
import mage.cards.AdventureCard;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.*;
|
||||
import mage.constants.*;
|
||||
import mage.game.Game;
|
||||
import mage.game.command.Emblem;
|
||||
import mage.players.Player;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.UUID;
|
||||
import mage.cards.ModalDoubleFacesCard;
|
||||
import mage.cards.ModalDoubleFacesCardHalf;
|
||||
import mage.cards.SplitCard;
|
||||
import mage.cards.SplitCardHalf;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
|
@ -24,10 +18,17 @@ import mage.cards.SplitCardHalf;
|
|||
public final class WrennAndSixEmblem extends Emblem {
|
||||
|
||||
public WrennAndSixEmblem() {
|
||||
this.setName("Emblem Wrenn");
|
||||
super("Emblem Wrenn");
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new WrennAndSixEmblemEffect()));
|
||||
}
|
||||
|
||||
availableImageSetCodes = Arrays.asList("MH1", "2X2");
|
||||
private WrennAndSixEmblem(final WrennAndSixEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public WrennAndSixEmblem copy() {
|
||||
return new WrennAndSixEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
@ -13,14 +12,13 @@ import mage.filter.common.FilterCreaturePermanent;
|
|||
import mage.game.command.Emblem;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class YodaEmblem extends Emblem {
|
||||
// You get an emblem with "Hexproof, you and your creatures have."
|
||||
|
||||
public YodaEmblem() {
|
||||
this.setName("Emblem Yoda, Jedi Master");
|
||||
super("Emblem Yoda, Jedi Master");
|
||||
Effect effect = new GainAbilityControllerEffect(HexproofAbility.getInstance(), Duration.EndOfGame);
|
||||
effect.setText("Hexproof, you");
|
||||
Ability ability = new SimpleStaticAbility(Zone.COMMAND, effect);
|
||||
|
@ -29,4 +27,13 @@ public final class YodaEmblem extends Emblem {
|
|||
ability.addEffect(effect);
|
||||
getAbilities().add(ability);
|
||||
}
|
||||
|
||||
private YodaEmblem(final YodaEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public YodaEmblem copy() {
|
||||
return new YodaEmblem(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,10 +17,18 @@ public final class ZarielArchdukeOfAvernusEmblem extends Emblem {
|
|||
|
||||
// −6: You get an emblem with "At the end of the first combat phase on your turn, untap target creature you control. After this phase, there is an additional combat phase."
|
||||
public ZarielArchdukeOfAvernusEmblem() {
|
||||
this.setName("Emblem Zariel");
|
||||
this.setExpansionSetCodeForImage("AFR");
|
||||
super("Emblem Zariel");
|
||||
this.getAbilities().add(new ZarielArchdukeOfAvernusEmblemAbility());
|
||||
}
|
||||
|
||||
private ZarielArchdukeOfAvernusEmblem(final ZarielArchdukeOfAvernusEmblem card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ZarielArchdukeOfAvernusEmblem copy() {
|
||||
return new ZarielArchdukeOfAvernusEmblem(this);
|
||||
}
|
||||
}
|
||||
|
||||
class ZarielArchdukeOfAvernusEmblemAbility extends TriggeredAbilityImpl {
|
||||
|
|
|
@ -35,7 +35,6 @@ public class AcademyAtTolariaWestPlane extends Plane {
|
|||
|
||||
public AcademyAtTolariaWestPlane() {
|
||||
this.setPlaneType(Planes.PLANE_ACADEMY_AT_TOLARIA_WEST);
|
||||
this.setExpansionSetCodeForImage("PCA");
|
||||
|
||||
// At the beginning of your end step, if you have 0 cards in hand, draw seven cards
|
||||
Ability ability = new BeginningOfEndStepTriggeredAbility(Zone.COMMAND, new DrawCardsActivePlayerEffect(7), TargetController.ANY, HellbentAPCondition.instance, false);
|
||||
|
@ -57,6 +56,15 @@ public class AcademyAtTolariaWestPlane extends Plane {
|
|||
chaosAbility.setMayActivate(TargetController.ANY);
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.ALL, new PlanarDieRollCostIncreasingEffect(chaosAbility.getOriginalId())));
|
||||
}
|
||||
|
||||
private AcademyAtTolariaWestPlane(final AcademyAtTolariaWestPlane plane) {
|
||||
super(plane);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AcademyAtTolariaWestPlane copy() {
|
||||
return new AcademyAtTolariaWestPlane(this);
|
||||
}
|
||||
}
|
||||
|
||||
class DrawCardsActivePlayerEffect extends OneShotEffect {
|
||||
|
|
|
@ -46,7 +46,6 @@ public class AgyremPlane extends Plane {
|
|||
|
||||
public AgyremPlane() {
|
||||
this.setPlaneType(Planes.PLANE_AGYREM);
|
||||
this.setExpansionSetCodeForImage("PCA");
|
||||
|
||||
// Whenever a white creature dies, return it to the battlefield under its owner's control at the beginning of the next end step
|
||||
DiesCreatureTriggeredAbility ability = new DiesCreatureTriggeredAbility(Zone.COMMAND, new AgyremEffect(), false, filterWhite, true);
|
||||
|
@ -70,6 +69,15 @@ public class AgyremPlane extends Plane {
|
|||
chaosAbility.setMayActivate(TargetController.ANY);
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.ALL, new PlanarDieRollCostIncreasingEffect(chaosAbility.getOriginalId())));
|
||||
}
|
||||
|
||||
private AgyremPlane(final AgyremPlane plane) {
|
||||
super(plane);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AgyremPlane copy() {
|
||||
return new AgyremPlane(this);
|
||||
}
|
||||
}
|
||||
|
||||
class AgyremEffect extends OneShotEffect {
|
||||
|
|
|
@ -37,7 +37,6 @@ public class AkoumPlane extends Plane {
|
|||
|
||||
public AkoumPlane() {
|
||||
this.setPlaneType(Planes.PLANE_AKOUM);
|
||||
this.setExpansionSetCodeForImage("PCA");
|
||||
|
||||
// Players may cast enchantment spells as if they had flash
|
||||
SimpleStaticAbility ability = new SimpleStaticAbility(Zone.COMMAND, new CastAsThoughItHadFlashAllEffect(Duration.Custom, filterCard, true));
|
||||
|
@ -58,4 +57,13 @@ public class AkoumPlane extends Plane {
|
|||
chaosAbility.setMayActivate(TargetController.ANY);
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.ALL, new PlanarDieRollCostIncreasingEffect(chaosAbility.getOriginalId())));
|
||||
}
|
||||
|
||||
private AkoumPlane(final AkoumPlane plane) {
|
||||
super(plane);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AkoumPlane copy() {
|
||||
return new AkoumPlane(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,7 +33,6 @@ public class AstralArenaPlane extends Plane {
|
|||
|
||||
public AstralArenaPlane() {
|
||||
this.setPlaneType(Planes.PLANE_ASTRAL_ARENA);
|
||||
this.setExpansionSetCodeForImage("PCA");
|
||||
|
||||
// No more than one creature can attack each turn. No more than one creature can block each turn.
|
||||
SimpleStaticAbility ability = new SimpleStaticAbility(Zone.COMMAND, new AstralArenaAttackRestrictionEffect());
|
||||
|
@ -58,6 +57,15 @@ public class AstralArenaPlane extends Plane {
|
|||
chaosAbility.setMayActivate(TargetController.ANY);
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.ALL, new PlanarDieRollCostIncreasingEffect(chaosAbility.getOriginalId())));
|
||||
}
|
||||
|
||||
private AstralArenaPlane(final AstralArenaPlane plane) {
|
||||
super(plane);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AstralArenaPlane copy() {
|
||||
return new AstralArenaPlane(this);
|
||||
}
|
||||
}
|
||||
|
||||
class AstralArenaAttackRestrictionEffect extends RestrictionEffect {
|
||||
|
|
|
@ -50,7 +50,6 @@ public class BantPlane extends Plane {
|
|||
|
||||
public BantPlane() {
|
||||
this.setPlaneType(Planes.PLANE_BANT);
|
||||
this.setExpansionSetCodeForImage("PCA");
|
||||
|
||||
// All creatures have exalted
|
||||
SimpleStaticAbility ability
|
||||
|
@ -80,4 +79,13 @@ public class BantPlane extends Plane {
|
|||
chaosAbility.setMayActivate(TargetController.ANY);
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.ALL, new PlanarDieRollCostIncreasingEffect(chaosAbility.getOriginalId())));
|
||||
}
|
||||
|
||||
private BantPlane(final BantPlane plane) {
|
||||
super(plane);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BantPlane copy() {
|
||||
return new BantPlane(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,7 +18,6 @@ import mage.filter.common.FilterCreaturePermanent;
|
|||
import mage.game.Game;
|
||||
import mage.game.command.Plane;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.events.GameEvent.EventType;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.Target;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
|
@ -36,7 +35,6 @@ public class EdgeOfMalacolPlane extends Plane {
|
|||
|
||||
public EdgeOfMalacolPlane() {
|
||||
this.setPlaneType(Planes.PLANE_EDGE_OF_MALACOL);
|
||||
this.setExpansionSetCodeForImage("PCA");
|
||||
|
||||
// If a creature you control would untap during your untap step, put two +1/+1 counters on it instead.
|
||||
SimpleStaticAbility ability = new SimpleStaticAbility(Zone.COMMAND, new EdgeOfMalacolEffect());
|
||||
|
@ -57,6 +55,15 @@ public class EdgeOfMalacolPlane extends Plane {
|
|||
chaosAbility.setMayActivate(TargetController.ANY);
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.ALL, new PlanarDieRollCostIncreasingEffect(chaosAbility.getOriginalId())));
|
||||
}
|
||||
|
||||
private EdgeOfMalacolPlane(final EdgeOfMalacolPlane plane) {
|
||||
super(plane);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EdgeOfMalacolPlane copy() {
|
||||
return new EdgeOfMalacolPlane(this);
|
||||
}
|
||||
}
|
||||
|
||||
class EdgeOfMalacolEffect extends ContinuousRuleModifyingEffectImpl {
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
package mage.game.command.planes;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import mage.MageObject;
|
||||
import mage.ObjectColor;
|
||||
import mage.abilities.Ability;
|
||||
|
@ -31,6 +29,9 @@ import mage.target.common.TargetCreaturePermanent;
|
|||
import mage.util.CardUtil;
|
||||
import mage.watchers.common.PlanarRollWatcher;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author spjspj
|
||||
*/
|
||||
|
@ -40,7 +41,6 @@ public class FeedingGroundsPlane extends Plane {
|
|||
|
||||
public FeedingGroundsPlane() {
|
||||
this.setPlaneType(Planes.PLANE_FEEDING_GROUNDS);
|
||||
this.setExpansionSetCodeForImage("PCA");
|
||||
|
||||
// Red spells cost {1} less to cast. Green spells cost {1} less to cast
|
||||
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new FeedingGroundsEffect());
|
||||
|
@ -61,6 +61,15 @@ public class FeedingGroundsPlane extends Plane {
|
|||
chaosAbility.setMayActivate(TargetController.ANY);
|
||||
this.getAbilities().add(new SimpleStaticAbility(Zone.ALL, new PlanarDieRollCostIncreasingEffect(chaosAbility.getOriginalId())));
|
||||
}
|
||||
|
||||
private FeedingGroundsPlane(final FeedingGroundsPlane plane) {
|
||||
super(plane);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FeedingGroundsPlane copy() {
|
||||
return new FeedingGroundsPlane(this);
|
||||
}
|
||||
}
|
||||
|
||||
class FeedingGroundsEffect extends CostModificationEffectImpl {
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue