diff --git a/Mage.Sets/src/mage/cards/b/BaneOfHanweir.java b/Mage.Sets/src/mage/cards/b/BaneOfHanweir.java
deleted file mode 100644
index db8f96ac32a..00000000000
--- a/Mage.Sets/src/mage/cards/b/BaneOfHanweir.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package mage.cards.b;
-
-import mage.MageInt;
-import mage.abilities.common.AttacksEachCombatStaticAbility;
-import mage.abilities.common.WerewolfBackTriggeredAbility;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.SubType;
-
-import java.util.UUID;
-
-/**
- * @author nantuko
- */
-public final class BaneOfHanweir extends CardImpl {
-
- public BaneOfHanweir(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
- this.subtype.add(SubType.WEREWOLF);
- this.color.setRed(true);
-
- // this card is the second face of double-faced card
- this.nightCard = true;
-
- this.power = new MageInt(5);
- this.toughness = new MageInt(5);
-
- // Bane of Hanweir attacks each turn if able.
- this.addAbility(new AttacksEachCombatStaticAbility());
-
- // At the beginning of each upkeep, if a player cast two or more spells last turn, transform Bane of Hanweir.
- this.addAbility(new WerewolfBackTriggeredAbility());
- }
-
- private BaneOfHanweir(final BaneOfHanweir card) {
- super(card);
- }
-
- @Override
- public BaneOfHanweir copy() {
- return new BaneOfHanweir(this);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/c/CreepingInn.java b/Mage.Sets/src/mage/cards/c/CreepingInn.java
deleted file mode 100644
index 106c64a1076..00000000000
--- a/Mage.Sets/src/mage/cards/c/CreepingInn.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package mage.cards.c;
-
-import mage.MageInt;
-import mage.abilities.Ability;
-import mage.abilities.common.AttacksTriggeredAbility;
-import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.mana.ManaCostsImpl;
-import mage.abilities.effects.OneShotEffect;
-import mage.abilities.effects.common.PhaseOutSourceEffect;
-import mage.cards.Card;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.Outcome;
-import mage.constants.SubType;
-import mage.filter.StaticFilters;
-import mage.game.ExileZone;
-import mage.game.Game;
-import mage.game.permanent.Permanent;
-import mage.players.Player;
-import mage.target.common.TargetCardInGraveyard;
-import mage.util.CardUtil;
-
-import java.util.UUID;
-
-/**
- * @author LePwnerer
- */
-public final class CreepingInn extends CardImpl {
-
- public CreepingInn(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "");
-
- this.subtype.add(SubType.HORROR);
- this.subtype.add(SubType.CONSTRUCT);
- this.power = new MageInt(3);
- this.toughness = new MageInt(7);
- this.color.setBlack(true);
- this.nightCard = true;
-
- // Whenever Creeping Inn attacks, you may exile a creature card from your graveyard.
- // If you do, each opponent loses X life and you gain X life,
- // where X is the number of creature cards exiled with Creeping Inn.
- this.addAbility(new AttacksTriggeredAbility(new CreepingInnEffect()));
-
- // {4}: Creeping Inn phases out.
- this.addAbility(new SimpleActivatedAbility(new PhaseOutSourceEffect(), new ManaCostsImpl<>("{4}")));
- }
-
- private CreepingInn(final CreepingInn card) {
- super(card);
- }
-
- @Override
- public CreepingInn copy() {
- return new CreepingInn(this);
- }
-}
-
-class CreepingInnEffect extends OneShotEffect {
-
- CreepingInnEffect() {
- super(Outcome.Exile);
- this.staticText = "you may exile a creature card from your graveyard. " +
- "If you do, each opponent loses X life and you gain X life, " +
- "where X is the number of creature cards exiled with {this}.";
- }
-
- private CreepingInnEffect(final CreepingInnEffect effect) {
- super(effect);
- }
-
- @Override
- public CreepingInnEffect copy() {
- return new CreepingInnEffect(this);
- }
-
- @Override
- public boolean apply(Game game, Ability source) {
- Player player = game.getPlayer(source.getControllerId());
- Permanent permanent = source.getSourcePermanentOrLKI(game);
- if (player != null && permanent != null) {
- UUID exileId = CardUtil.getExileZoneId(game, source);
- TargetCardInGraveyard target = new TargetCardInGraveyard(0, 1, StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD);
- target.withNotTarget(true);
- if (target.canChoose(player.getId(), source, game)) {
- if (player.choose(Outcome.Exile, target, source, game)) {
- Card cardChosen = game.getCard(target.getFirstTarget());
- if (cardChosen != null) {
- int lifeAmount = 0;
- player.moveCardsToExile(cardChosen, source, game, true, exileId, permanent.getName());
- ExileZone exile = game.getExile().getExileZone(exileId);
- if (exile != null) {
- for (UUID cardId : exile) {
- lifeAmount++;
- }
- }
- for (UUID playerId : game.getOpponents(source.getControllerId())) {
- game.getPlayer(playerId).loseLife(lifeAmount, game, source, false);
- }
- player.gainLife(lifeAmount, game, source);
- }
- }
- }
- return true;
- }
- return false;
- }
-}
diff --git a/Mage.Sets/src/mage/cards/h/HadanasClimb.java b/Mage.Sets/src/mage/cards/h/HadanasClimb.java
index a1d27468050..319731b1df4 100644
--- a/Mage.Sets/src/mage/cards/h/HadanasClimb.java
+++ b/Mage.Sets/src/mage/cards/h/HadanasClimb.java
@@ -1,41 +1,60 @@
-
package mage.cards.h;
-import java.util.UUID;
-
import mage.abilities.Ability;
-import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
+import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.common.TargetHasCounterCondition;
+import mage.abilities.costs.common.TapSourceCost;
+import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalOneShotEffect;
+import mage.abilities.effects.ContinuousEffect;
+import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.TransformSourceEffect;
+import mage.abilities.effects.common.continuous.BoostTargetEffect;
+import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
-import mage.abilities.keyword.TransformAbility;
-import mage.cards.CardImpl;
+import mage.abilities.keyword.FlyingAbility;
+import mage.abilities.mana.AnyColorManaAbility;
+import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.SuperType;
+import mage.cards.TransformingDoubleFacedCard;
+import mage.constants.*;
import mage.counters.CounterType;
+import mage.game.Game;
+import mage.game.permanent.Permanent;
import mage.target.common.TargetControlledCreaturePermanent;
+import mage.target.targetpointer.FixedTarget;
+
+import java.util.UUID;
/**
* @author LevelX2
*/
-public final class HadanasClimb extends CardImpl {
+public final class HadanasClimb extends TransformingDoubleFacedCard {
public HadanasClimb(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}{U}");
-
- this.supertype.add(SuperType.LEGENDARY);
-
- this.secondSideCardClazz = mage.cards.w.WingedTempleOfOrazca.class;
+ super(ownerId, setInfo,
+ new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ENCHANTMENT}, new SubType[]{}, "{1}{G}{U}",
+ "Winged Temple of Orazca",
+ new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.LAND}, new SubType[]{}, ""
+ );
+ // Hadana's Climb
// At the beginning of combat on your turn, put a +1/+1 counter on target creature you control. Then if that creature has three or more +1/+1 counters on it, transform Hadana's Climb.
- this.addAbility(new TransformAbility());
Ability ability = new BeginningOfCombatTriggeredAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance()));
ability.addEffect(new ConditionalOneShotEffect(new TransformSourceEffect(), new TargetHasCounterCondition(CounterType.P1P1, 3, Integer.MAX_VALUE),
"Then if that creature has three or more +1/+1 counters on it, transform {this}"));
ability.addTarget(new TargetControlledCreaturePermanent());
- this.addAbility(ability);
+ this.getLeftHalfCard().addAbility(ability);
+
+ // Winged Temple of Orazca
+ // {T}: Add one mana of any color.
+ this.getRightHalfCard().addAbility(new AnyColorManaAbility());
+
+ // {1}{G}{U}, {T}: Target creature you control gains flying and gets +X/+X until end of turn, where X is its power.
+ Ability backAbility = new SimpleActivatedAbility(new WingedTempleOfOrazcaEffect(), new ManaCostsImpl<>("{1}{G}{U}"));
+ backAbility.addCost(new TapSourceCost());
+ backAbility.addTarget(new TargetControlledCreaturePermanent());
+ this.getRightHalfCard().addAbility(backAbility);
}
private HadanasClimb(final HadanasClimb card) {
@@ -47,3 +66,35 @@ public final class HadanasClimb extends CardImpl {
return new HadanasClimb(this);
}
}
+
+class WingedTempleOfOrazcaEffect extends OneShotEffect {
+
+ WingedTempleOfOrazcaEffect() {
+ super(Outcome.Benefit);
+ this.staticText = "target creature you control gains flying and gets +X/+X until end of turn, where X is its power";
+ }
+
+ private WingedTempleOfOrazcaEffect(final WingedTempleOfOrazcaEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public WingedTempleOfOrazcaEffect copy() {
+ return new WingedTempleOfOrazcaEffect(this);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Permanent creature = game.getPermanent(getTargetPointer().getFirst(game, source));
+ if (creature != null && creature.isCreature(game)) {
+ int pow = creature.getPower().getValue();
+ ContinuousEffect effect = new BoostTargetEffect(pow, pow, Duration.EndOfTurn);
+ effect.setTargetPointer(new FixedTarget(creature, game));
+ game.addEffect(effect, source);
+ effect = new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn);
+ effect.setTargetPointer(new FixedTarget(creature, game));
+ game.addEffect(effect, source);
+ }
+ return true;
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/h/HanweirMilitiaCaptain.java b/Mage.Sets/src/mage/cards/h/HanweirMilitiaCaptain.java
index a6bb769ba9c..f768ea03fdb 100644
--- a/Mage.Sets/src/mage/cards/h/HanweirMilitiaCaptain.java
+++ b/Mage.Sets/src/mage/cards/h/HanweirMilitiaCaptain.java
@@ -1,25 +1,28 @@
package mage.cards.h;
-import mage.MageInt;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
+import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.TransformSourceEffect;
+import mage.abilities.effects.common.continuous.SetBasePowerToughnessSourceEffect;
import mage.abilities.hint.common.CreaturesYouControlHint;
-import mage.abilities.keyword.TransformAbility;
+import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
-import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.SubType;
+import mage.constants.Zone;
import mage.filter.common.FilterControlledCreaturePermanent;
+import mage.game.permanent.token.HumanClericToken;
import java.util.UUID;
/**
* @author fireshoes
*/
-public final class HanweirMilitiaCaptain extends CardImpl {
+public final class HanweirMilitiaCaptain extends TransformingDoubleFacedCard {
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
new FilterControlledCreaturePermanent("you control four or more creatures"),
@@ -27,18 +30,27 @@ public final class HanweirMilitiaCaptain extends CardImpl {
);
public HanweirMilitiaCaptain(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}");
- this.subtype.add(SubType.HUMAN);
- this.subtype.add(SubType.SOLDIER);
- this.power = new MageInt(2);
- this.toughness = new MageInt(2);
+ super(ownerId, setInfo,
+ new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.SOLDIER}, "{1}{W}",
+ "Westvale Cult Leader",
+ new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.CLERIC}, "W"
+ );
- this.secondSideCardClazz = mage.cards.w.WestvaleCultLeader.class;
+ // Hanweir Militia Captain
+ this.getLeftHalfCard().setPT(2, 2);
// At the beginning of your upkeep, if you control four or more creatures, transform Hanweir Militia Captain.
- this.addAbility(new TransformAbility());
- this.addAbility(new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect())
+ this.getLeftHalfCard().addAbility(new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect())
.withInterveningIf(condition).addHint(CreaturesYouControlHint.instance));
+
+ // Westvale Cult Leader
+ // Westvale Cult Leader's power and toughness are each equal to the number of creatures you control.
+ this.getRightHalfCard().addAbility(new mage.abilities.common.SimpleStaticAbility(Zone.ALL,
+ new SetBasePowerToughnessSourceEffect(mage.abilities.dynamicvalue.common.CreaturesYouControlCount.PLURAL))
+ .addHint(CreaturesYouControlHint.instance));
+
+ // At the beginning of your end step, create a 1/1 white and black Human Cleric creature token.
+ this.getRightHalfCard().addAbility(new BeginningOfEndStepTriggeredAbility(new CreateTokenEffect(new HumanClericToken())));
}
private HanweirMilitiaCaptain(final HanweirMilitiaCaptain card) {
diff --git a/Mage.Sets/src/mage/cards/h/HanweirWatchkeep.java b/Mage.Sets/src/mage/cards/h/HanweirWatchkeep.java
index 85997f17d36..3919e5c1f4e 100644
--- a/Mage.Sets/src/mage/cards/h/HanweirWatchkeep.java
+++ b/Mage.Sets/src/mage/cards/h/HanweirWatchkeep.java
@@ -1,11 +1,11 @@
package mage.cards.h;
-import mage.MageInt;
+import mage.abilities.common.AttacksEachCombatStaticAbility;
+import mage.abilities.common.WerewolfBackTriggeredAbility;
import mage.abilities.common.WerewolfFrontTriggeredAbility;
import mage.abilities.keyword.DefenderAbility;
-import mage.abilities.keyword.TransformAbility;
-import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType;
import mage.constants.SubType;
@@ -14,23 +14,32 @@ import java.util.UUID;
/**
* @author nantuko
*/
-public final class HanweirWatchkeep extends CardImpl {
+public final class HanweirWatchkeep extends TransformingDoubleFacedCard {
public HanweirWatchkeep(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}");
- this.subtype.add(SubType.HUMAN);
- this.subtype.add(SubType.WARRIOR);
- this.subtype.add(SubType.WEREWOLF);
+ super(ownerId, setInfo,
+ new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WARRIOR, SubType.WEREWOLF}, "{2}{R}",
+ "Bane of Hanweir",
+ new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "R"
+ );
- this.secondSideCardClazz = mage.cards.b.BaneOfHanweir.class;
+ // Hanweir Watchkeep
+ this.getLeftHalfCard().setPT(1, 5);
- this.power = new MageInt(1);
- this.toughness = new MageInt(5);
+ // Defender
+ this.getLeftHalfCard().addAbility(DefenderAbility.getInstance());
- this.addAbility(DefenderAbility.getInstance());
// At the beginning of each upkeep, if no spells were cast last turn, transform Hanweir Watchkeep.
- this.addAbility(new TransformAbility());
- this.addAbility(new WerewolfFrontTriggeredAbility());
+ this.getLeftHalfCard().addAbility(new WerewolfFrontTriggeredAbility());
+
+ // Bane of Hanweir
+ this.getRightHalfCard().setPT(5, 5);
+
+ // Bane of Hanweir attacks each turn if able.
+ this.getRightHalfCard().addAbility(new AttacksEachCombatStaticAbility());
+
+ // At the beginning of each upkeep, if a player cast two or more spells last turn, transform Bane of Hanweir.
+ this.getRightHalfCard().addAbility(new WerewolfBackTriggeredAbility());
}
private HanweirWatchkeep(final HanweirWatchkeep card) {
diff --git a/Mage.Sets/src/mage/cards/h/HarriedArtisan.java b/Mage.Sets/src/mage/cards/h/HarriedArtisan.java
index f9ca5ca64a8..24126b3e162 100644
--- a/Mage.Sets/src/mage/cards/h/HarriedArtisan.java
+++ b/Mage.Sets/src/mage/cards/h/HarriedArtisan.java
@@ -1,13 +1,12 @@
package mage.cards.h;
-import mage.MageInt;
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.TransformSourceEffect;
+import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.HasteAbility;
-import mage.abilities.keyword.TransformAbility;
-import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType;
import mage.constants.SubType;
@@ -16,23 +15,32 @@ import java.util.UUID;
/**
* @author TheElk801
*/
-public final class HarriedArtisan extends CardImpl {
+public final class HarriedArtisan extends TransformingDoubleFacedCard {
public HarriedArtisan(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}");
+ super(ownerId, setInfo,
+ new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.ARTIFICER}, "{2}{R}",
+ "Phyrexian Skyflayer",
+ new CardType[]{CardType.CREATURE}, new SubType[]{SubType.PHYREXIAN, SubType.ARTIFICER}, "WR"
+ );
- this.subtype.add(SubType.HUMAN);
- this.subtype.add(SubType.ARTIFICER);
- this.power = new MageInt(2);
- this.toughness = new MageInt(3);
- this.secondSideCardClazz = mage.cards.p.PhyrexianSkyflayer.class;
+ // Harried Artisan
+ this.getLeftHalfCard().setPT(2, 3);
// Haste
- this.addAbility(HasteAbility.getInstance());
+ this.getLeftHalfCard().addAbility(HasteAbility.getInstance());
// {3}{W/P}: Transform Harried Artisan. Activate only as a sorcery.
- this.addAbility(new TransformAbility());
- this.addAbility(new ActivateAsSorceryActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{3}{W/P}")));
+ this.getLeftHalfCard().addAbility(new ActivateAsSorceryActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{3}{W/P}")));
+
+ // Phyrexian Skyflayer
+ this.getRightHalfCard().setPT(3, 4);
+
+ // Flying
+ this.getRightHalfCard().addAbility(FlyingAbility.getInstance());
+
+ // Haste
+ this.getRightHalfCard().addAbility(HasteAbility.getInstance());
}
private HarriedArtisan(final HarriedArtisan card) {
diff --git a/Mage.Sets/src/mage/cards/h/HarvestHand.java b/Mage.Sets/src/mage/cards/h/HarvestHand.java
index 4b55e43df98..ad517955f58 100644
--- a/Mage.Sets/src/mage/cards/h/HarvestHand.java
+++ b/Mage.Sets/src/mage/cards/h/HarvestHand.java
@@ -1,18 +1,21 @@
package mage.cards.h;
-import mage.MageInt;
-import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.common.DiesSourceTriggeredAbility;
+import mage.abilities.common.SimpleStaticAbility;
+import mage.abilities.condition.Condition;
+import mage.abilities.condition.common.EquippedHasSubtypeCondition;
+import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.OneShotEffect;
+import mage.abilities.effects.common.continuous.BoostEquippedEffect;
+import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
+import mage.abilities.keyword.EquipAbility;
+import mage.abilities.keyword.MenaceAbility;
import mage.abilities.keyword.TransformAbility;
import mage.cards.Card;
-import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.Outcome;
-import mage.constants.SubType;
-import mage.constants.Zone;
+import mage.cards.TransformingDoubleFacedCard;
+import mage.constants.*;
import mage.game.Game;
import mage.players.Player;
@@ -21,19 +24,36 @@ import java.util.UUID;
/**
* @author halljared
*/
-public final class HarvestHand extends CardImpl {
+public final class HarvestHand extends TransformingDoubleFacedCard {
+
+ private static final Condition condition = new EquippedHasSubtypeCondition(SubType.HUMAN);
public HarvestHand(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}");
- this.subtype.add(SubType.SCARECROW);
- this.power = new MageInt(2);
- this.toughness = new MageInt(2);
+ super(ownerId, setInfo,
+ new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, new SubType[]{SubType.SCARECROW}, "{3}",
+ "Scrounged Scythe",
+ new CardType[]{CardType.ARTIFACT}, new SubType[]{SubType.EQUIPMENT}, ""
+ );
- this.secondSideCardClazz = mage.cards.s.ScroungedScythe.class;
+ // Harvest Hand
+ this.getLeftHalfCard().setPT(2, 2);
// When Harvest Hand dies, return it to the battlefield transformed under your control.
- this.addAbility(new TransformAbility());
- this.addAbility(new DiesSourceTriggeredAbility(new HarvestHandReturnTransformedEffect()));
+ this.getLeftHalfCard().addAbility(new DiesSourceTriggeredAbility(new HarvestHandReturnTransformedEffect()));
+
+ // Scrounged Scythe
+ // Equipped creature gets +1/+1.
+ this.getRightHalfCard().addAbility(new SimpleStaticAbility(new BoostEquippedEffect(1, 1)));
+
+ // As long as equipped creature is a Human, it has menace.
+ this.getRightHalfCard().addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
+ new GainAbilityAttachedEffect(new MenaceAbility(false), AttachmentType.EQUIPMENT),
+ condition, "As long as equipped creature is a Human, it has menace. " +
+ "(It can't be blocked except by two or more creatures.)"
+ )));
+
+ // Equip {2}
+ this.getRightHalfCard().addAbility(new EquipAbility(2, false));
}
private HarvestHand(final HarvestHand card) {
diff --git a/Mage.Sets/src/mage/cards/h/HarvesttideAssailant.java b/Mage.Sets/src/mage/cards/h/HarvesttideAssailant.java
deleted file mode 100644
index c1d10320d80..00000000000
--- a/Mage.Sets/src/mage/cards/h/HarvesttideAssailant.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package mage.cards.h;
-
-import mage.MageInt;
-import mage.abilities.keyword.NightboundAbility;
-import mage.abilities.keyword.TrampleAbility;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.SubType;
-
-import java.util.UUID;
-
-/**
- * @author TheElk801
- */
-public final class HarvesttideAssailant extends CardImpl {
-
- public HarvesttideAssailant(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
-
- this.subtype.add(SubType.WEREWOLF);
- this.power = new MageInt(4);
- this.toughness = new MageInt(4);
- this.color.setRed(true);
- this.nightCard = true;
-
- // Trample
- this.addAbility(TrampleAbility.getInstance());
-
- // Nightbound
- this.addAbility(new NightboundAbility());
- }
-
- private HarvesttideAssailant(final HarvesttideAssailant card) {
- super(card);
- }
-
- @Override
- public HarvesttideAssailant copy() {
- return new HarvesttideAssailant(this);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/h/HarvesttideInfiltrator.java b/Mage.Sets/src/mage/cards/h/HarvesttideInfiltrator.java
index f6258d61b69..3777b180973 100644
--- a/Mage.Sets/src/mage/cards/h/HarvesttideInfiltrator.java
+++ b/Mage.Sets/src/mage/cards/h/HarvesttideInfiltrator.java
@@ -1,10 +1,10 @@
package mage.cards.h;
-import mage.MageInt;
import mage.abilities.keyword.DayboundAbility;
+import mage.abilities.keyword.NightboundAbility;
import mage.abilities.keyword.TrampleAbility;
-import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType;
import mage.constants.SubType;
@@ -13,22 +13,32 @@ import java.util.UUID;
/**
* @author TheElk801
*/
-public final class HarvesttideInfiltrator extends CardImpl {
+public final class HarvesttideInfiltrator extends TransformingDoubleFacedCard {
public HarvesttideInfiltrator(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}");
+ super(ownerId, setInfo,
+ new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WEREWOLF}, "{2}{R}",
+ "Harvesttide Assailant",
+ new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "R"
+ );
- this.subtype.add(SubType.HUMAN);
- this.subtype.add(SubType.WEREWOLF);
- this.power = new MageInt(3);
- this.toughness = new MageInt(2);
- this.secondSideCardClazz = mage.cards.h.HarvesttideAssailant.class;
+ // Harvesttide Infiltrator
+ this.getLeftHalfCard().setPT(3, 2);
// Trample
- this.addAbility(TrampleAbility.getInstance());
+ this.getLeftHalfCard().addAbility(TrampleAbility.getInstance());
// Daybound
- this.addAbility(new DayboundAbility());
+ this.getLeftHalfCard().addAbility(new DayboundAbility());
+
+ // Harvesttide Assailant
+ this.getRightHalfCard().setPT(4, 4);
+
+ // Trample
+ this.getRightHalfCard().addAbility(TrampleAbility.getInstance());
+
+ // Nightbound
+ this.getRightHalfCard().addAbility(new NightboundAbility());
}
private HarvesttideInfiltrator(final HarvesttideInfiltrator card) {
diff --git a/Mage.Sets/src/mage/cards/h/HavengulLaboratory.java b/Mage.Sets/src/mage/cards/h/HavengulLaboratory.java
index 766da704cd2..b95a4204275 100644
--- a/Mage.Sets/src/mage/cards/h/HavengulLaboratory.java
+++ b/Mage.Sets/src/mage/cards/h/HavengulLaboratory.java
@@ -1,53 +1,79 @@
package mage.cards.h;
+import mage.MageObjectReference;
import mage.abilities.Ability;
-import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
+import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.common.TransformIntoSourceTriggeredAbility;
import mage.abilities.condition.Condition;
+import mage.abilities.costs.common.PayLifeCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
+import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.effects.keyword.InvestigateEffect;
-import mage.abilities.keyword.TransformAbility;
+import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.ColorlessManaAbility;
-import mage.cards.CardImpl;
+import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
+import mage.cards.Card;
import mage.cards.CardSetInfo;
+import mage.cards.TransformingDoubleFacedCard;
import mage.constants.*;
+import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.events.GameEvent;
+import mage.game.events.ZoneChangeEvent;
import mage.game.permanent.Permanent;
+import mage.players.Player;
+import mage.target.common.TargetCardInYourGraveyard;
import mage.util.CardUtil;
import mage.watchers.Watcher;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
+import java.util.*;
/**
* @author TheElk801
*/
-public final class HavengulLaboratory extends CardImpl {
+public final class HavengulLaboratory extends TransformingDoubleFacedCard {
public HavengulLaboratory(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
- this.supertype.add(SuperType.LEGENDARY);
-
- this.secondSideCardClazz = mage.cards.h.HavengulMystery.class;
+ super(ownerId, setInfo,
+ new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.LAND}, new SubType[]{}, "",
+ "Havengul Mystery",
+ new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.LAND}, new SubType[]{}, ""
+ );
+ // Havengul Laboratory
// {T}: Add {C}.
- this.addAbility(new ColorlessManaAbility());
+ this.getLeftHalfCard().addAbility(new ColorlessManaAbility());
// {4}, {T}: Investigate.
Ability ability = new SimpleActivatedAbility(new InvestigateEffect(), new GenericManaCost(4));
ability.addCost(new TapSourceCost());
- this.addAbility(ability);
+ this.getLeftHalfCard().addAbility(ability);
// At the beginning of your end step, if you sacrificed three or more Clues this turn, transform Havengul Laboratory.
- this.addAbility(new TransformAbility());
- this.addAbility(new BeginningOfEndStepTriggeredAbility(
+ Ability transformAbility = new BeginningOfEndStepTriggeredAbility(
TargetController.YOU, new TransformSourceEffect(),
false, HavengulLaboratoryCondition.instance
- ), new HavengulLaboratoryWatcher());
+ );
+ transformAbility.addWatcher(new HavengulLaboratoryWatcher());
+ this.getLeftHalfCard().addAbility(transformAbility);
+
+ // Havengul Mystery
+ // When this land transforms into Havengul Mystery, return target creature card from your graveyard to the battlefield.
+ Ability backAbility = new TransformIntoSourceTriggeredAbility(new HavengulMysteryEffect())
+ .setTriggerPhrase("When this land transforms into {this}, ");
+ backAbility.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
+ this.getRightHalfCard().addAbility(backAbility);
+
+ // When the creature put onto the battlefield with Havengul Mystery leaves the battlefield, transform Havengul Mystery.
+ this.getRightHalfCard().addAbility(new HavengulMysteryLeavesAbility());
+
+ // {T}, Pay 1 life: Add {B}.
+ Ability manaAbility = new BlackManaAbility();
+ manaAbility.addCost(new PayLifeCost(1));
+ this.getRightHalfCard().addAbility(manaAbility);
}
private HavengulLaboratory(final HavengulLaboratory card) {
@@ -108,3 +134,89 @@ class HavengulLaboratoryWatcher extends Watcher {
.getOrDefault(playerId, 0) >= 3;
}
}
+
+class HavengulMysteryEffect extends OneShotEffect {
+
+ HavengulMysteryEffect() {
+ super(Outcome.Benefit);
+ staticText = "return target creature card from your graveyard to the battlefield";
+ }
+
+ private HavengulMysteryEffect(final HavengulMysteryEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public HavengulMysteryEffect copy() {
+ return new HavengulMysteryEffect(this);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Player player = game.getPlayer(source.getControllerId());
+ Card card = game.getCard(getTargetPointer().getFirst(game, source));
+ if (player == null || card == null) {
+ return false;
+ }
+ player.moveCards(card, Zone.BATTLEFIELD, source, game);
+ Permanent permanent = CardUtil.getPermanentFromCardPutToBattlefield(card, game);
+ if (permanent == null) {
+ return false;
+ }
+ String key = HavengulMysteryLeavesAbility.makeKey(source, game);
+ Set morSet;
+ if (game.getState().getValue(key) != null) {
+ morSet = (Set) game.getState().getValue(key);
+ } else {
+ morSet = new HashSet<>();
+ game.getState().setValue(key, morSet);
+ }
+ morSet.add(new MageObjectReference(permanent, game));
+ return true;
+ }
+}
+
+class HavengulMysteryLeavesAbility extends TriggeredAbilityImpl {
+
+ HavengulMysteryLeavesAbility() {
+ super(Zone.BATTLEFIELD, new TransformSourceEffect());
+ setLeavesTheBattlefieldTrigger(true);
+ }
+
+ private HavengulMysteryLeavesAbility(final HavengulMysteryLeavesAbility ability) {
+ super(ability);
+ }
+
+ @Override
+ public HavengulMysteryLeavesAbility copy() {
+ return new HavengulMysteryLeavesAbility(this);
+ }
+
+ @Override
+ public boolean checkEventType(GameEvent event, Game game) {
+ return event.getType() == GameEvent.EventType.ZONE_CHANGE;
+ }
+
+ @Override
+ public boolean checkTrigger(GameEvent event, Game game) {
+ ZoneChangeEvent zEvent = (ZoneChangeEvent) event;
+ if (zEvent.getFromZone() != Zone.BATTLEFIELD) {
+ return false;
+ }
+
+ String key = makeKey(this, game);
+ Set morSet = (Set) game.getState().getValue(key);
+ return morSet != null
+ && !morSet.isEmpty()
+ && morSet.stream().anyMatch(mor -> mor.refersTo(zEvent.getTarget(), game));
+ }
+
+ @Override
+ public String getRule() {
+ return "When the creature put onto the battlefield with {this} leaves the battlefield, transform {this}.";
+ }
+
+ static String makeKey(Ability source, Game game) {
+ return "HavengulMystery_" + source.getSourceId() + '_' + CardUtil.getActualSourceObjectZoneChangeCounter(game, source);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/h/HavengulMystery.java b/Mage.Sets/src/mage/cards/h/HavengulMystery.java
deleted file mode 100644
index 24cca60c3b1..00000000000
--- a/Mage.Sets/src/mage/cards/h/HavengulMystery.java
+++ /dev/null
@@ -1,150 +0,0 @@
-package mage.cards.h;
-
-import mage.MageObjectReference;
-import mage.abilities.Ability;
-import mage.abilities.TriggeredAbilityImpl;
-import mage.abilities.common.TransformIntoSourceTriggeredAbility;
-import mage.abilities.costs.common.PayLifeCost;
-import mage.abilities.effects.OneShotEffect;
-import mage.abilities.effects.common.TransformSourceEffect;
-import mage.abilities.mana.BlackManaAbility;
-import mage.cards.Card;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.Outcome;
-import mage.constants.SuperType;
-import mage.constants.Zone;
-import mage.filter.StaticFilters;
-import mage.game.Game;
-import mage.game.events.GameEvent;
-import mage.game.events.ZoneChangeEvent;
-import mage.game.permanent.Permanent;
-import mage.players.Player;
-import mage.target.common.TargetCardInYourGraveyard;
-import mage.util.CardUtil;
-
-import java.util.HashSet;
-import java.util.Set;
-import java.util.UUID;
-
-/**
- * @author TheElk801
- */
-public final class HavengulMystery extends CardImpl {
-
- public HavengulMystery(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
- this.supertype.add(SuperType.LEGENDARY);
- this.nightCard = true;
-
- // When this land transforms into Havengul Mystery, return target creature card from your graveyard to the battlefield.
- Ability ability = new TransformIntoSourceTriggeredAbility(new HavengulMysteryEffect())
- .setTriggerPhrase("When this land transforms into {this}, ");
- ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
- this.addAbility(ability);
-
- // When the creature put onto the battlefield with Havengul Mystery leaves the battlefield, transform Havengul Mystery.
- this.addAbility(new HavengulMysteryLeavesAbility());
-
- // {T}, Pay 1 life: Add {B}.
- Ability ability2 = new BlackManaAbility();
- ability2.addCost(new PayLifeCost(1));
- this.addAbility(ability2);
- }
-
- private HavengulMystery(final HavengulMystery card) {
- super(card);
- }
-
- @Override
- public HavengulMystery copy() {
- return new HavengulMystery(this);
- }
-
- static String makeKey(Ability source, Game game) {
- return "HavengulMystery_" + source.getSourceId() + '_' + CardUtil.getActualSourceObjectZoneChangeCounter(game, source);
- }
-}
-
-class HavengulMysteryEffect extends OneShotEffect {
-
- HavengulMysteryEffect() {
- super(Outcome.Benefit);
- staticText = "return target creature card from your graveyard to the battlefield";
- }
-
- private HavengulMysteryEffect(final HavengulMysteryEffect effect) {
- super(effect);
- }
-
- @Override
- public HavengulMysteryEffect copy() {
- return new HavengulMysteryEffect(this);
- }
-
- @Override
- public boolean apply(Game game, Ability source) {
- Player player = game.getPlayer(source.getControllerId());
- Card card = game.getCard(getTargetPointer().getFirst(game, source));
- if (player == null || card == null) {
- return false;
- }
- player.moveCards(card, Zone.BATTLEFIELD, source, game);
- Permanent permanent = CardUtil.getPermanentFromCardPutToBattlefield(card, game);
- if (permanent == null) {
- return false;
- }
- String key = HavengulMystery.makeKey(source, game);
- Set morSet;
- if (game.getState().getValue(key) != null) {
- morSet = (Set) game.getState().getValue(key);
- } else {
- morSet = new HashSet<>();
- game.getState().setValue(key, morSet);
- }
- morSet.add(new MageObjectReference(permanent, game));
- return true;
- }
-}
-
-class HavengulMysteryLeavesAbility extends TriggeredAbilityImpl {
-
- HavengulMysteryLeavesAbility() {
- super(Zone.BATTLEFIELD, new TransformSourceEffect());
- setLeavesTheBattlefieldTrigger(true);
- }
-
- private HavengulMysteryLeavesAbility(final HavengulMysteryLeavesAbility ability) {
- super(ability);
- }
-
- @Override
- public HavengulMysteryLeavesAbility copy() {
- return new HavengulMysteryLeavesAbility(this);
- }
-
- @Override
- public boolean checkEventType(GameEvent event, Game game) {
- return event.getType() == GameEvent.EventType.ZONE_CHANGE;
- }
-
- @Override
- public boolean checkTrigger(GameEvent event, Game game) {
- ZoneChangeEvent zEvent = (ZoneChangeEvent) event;
- if (zEvent.getFromZone() != Zone.BATTLEFIELD) {
- return false;
- }
-
- String key = HavengulMystery.makeKey(this, game);
- Set morSet = (Set) game.getState().getValue(key);
- return morSet != null
- && !morSet.isEmpty()
- && morSet.stream().anyMatch(mor -> mor.refersTo(zEvent.getTarget(), game));
- }
-
- @Override
- public String getRule() {
- return "When the creature put onto the battlefield with {this} leaves the battlefield, transform {this}.";
- }
-}
diff --git a/Mage.Sets/src/mage/cards/h/HeirOfFalkenrath.java b/Mage.Sets/src/mage/cards/h/HeirOfFalkenrath.java
index 2074046e6be..36ffd9f815c 100644
--- a/Mage.Sets/src/mage/cards/h/HeirOfFalkenrath.java
+++ b/Mage.Sets/src/mage/cards/h/HeirOfFalkenrath.java
@@ -1,35 +1,41 @@
-
package mage.cards.h;
-import java.util.UUID;
-import mage.MageInt;
import mage.abilities.common.LimitedTimesPerTurnActivatedAbility;
import mage.abilities.costs.common.DiscardCardCost;
import mage.abilities.effects.common.TransformSourceEffect;
-import mage.abilities.keyword.TransformAbility;
-import mage.cards.CardImpl;
+import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardSetInfo;
+import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
+import java.util.UUID;
+
/**
*
* @author fireshoes
*/
-public final class HeirOfFalkenrath extends CardImpl {
+public final class HeirOfFalkenrath extends TransformingDoubleFacedCard {
public HeirOfFalkenrath(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}");
- this.subtype.add(SubType.VAMPIRE);
- this.power = new MageInt(2);
- this.toughness = new MageInt(1);
+ super(ownerId, setInfo,
+ new CardType[]{CardType.CREATURE}, new SubType[]{SubType.VAMPIRE}, "{1}{B}",
+ "Heir to the Night",
+ new CardType[]{CardType.CREATURE}, new SubType[]{SubType.VAMPIRE, SubType.BERSERKER}, "B"
+ );
- this.secondSideCardClazz = mage.cards.h.HeirToTheNight.class;
+ // Heir of Falkenrath
+ this.getLeftHalfCard().setPT(2, 1);
// Discard a card: Transform Heir of Falkenrath. Activate this ability only once each turn.
- this.addAbility(new TransformAbility());
- this.addAbility(new LimitedTimesPerTurnActivatedAbility(Zone.BATTLEFIELD, new TransformSourceEffect(), new DiscardCardCost()));
+ this.getLeftHalfCard().addAbility(new LimitedTimesPerTurnActivatedAbility(Zone.BATTLEFIELD, new TransformSourceEffect(), new DiscardCardCost()));
+
+ // Heir to the Night
+ this.getRightHalfCard().setPT(3, 2);
+
+ // Flying
+ this.getRightHalfCard().addAbility(FlyingAbility.getInstance());
}
private HeirOfFalkenrath(final HeirOfFalkenrath card) {
diff --git a/Mage.Sets/src/mage/cards/h/HeirToTheNight.java b/Mage.Sets/src/mage/cards/h/HeirToTheNight.java
deleted file mode 100644
index ca92f5f234e..00000000000
--- a/Mage.Sets/src/mage/cards/h/HeirToTheNight.java
+++ /dev/null
@@ -1,41 +0,0 @@
-
-package mage.cards.h;
-
-import java.util.UUID;
-import mage.MageInt;
-import mage.abilities.keyword.FlyingAbility;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.SubType;
-
-/**
- *
- * @author fireshoes
- */
-public final class HeirToTheNight extends CardImpl {
-
- public HeirToTheNight(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"");
- this.subtype.add(SubType.VAMPIRE);
- this.subtype.add(SubType.BERSERKER);
- this.power = new MageInt(3);
- this.toughness = new MageInt(2);
- this.color.setBlack(true);
-
- // this card is the second face of double-faced card
- this.nightCard = true;
-
- // Flying
- this.addAbility(FlyingAbility.getInstance());
- }
-
- private HeirToTheNight(final HeirToTheNight card) {
- super(card);
- }
-
- @Override
- public HeirToTheNight copy() {
- return new HeirToTheNight(this);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/h/HeirloomMirror.java b/Mage.Sets/src/mage/cards/h/HeirloomMirror.java
index 69323e07bc4..75d8f78e3e6 100644
--- a/Mage.Sets/src/mage/cards/h/HeirloomMirror.java
+++ b/Mage.Sets/src/mage/cards/h/HeirloomMirror.java
@@ -2,40 +2,44 @@ package mage.cards.h;
import mage.abilities.Ability;
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
+import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.SourceHasCounterCondition;
import mage.abilities.costs.common.DiscardCardCost;
import mage.abilities.costs.common.PayLifeCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
+import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalOneShotEffect;
-import mage.abilities.effects.common.DrawCardSourceControllerEffect;
-import mage.abilities.effects.common.MillCardsControllerEffect;
-import mage.abilities.effects.common.RemoveAllCountersSourceEffect;
-import mage.abilities.effects.common.TransformSourceEffect;
+import mage.abilities.effects.common.*;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
-import mage.abilities.keyword.TransformAbility;
-import mage.cards.CardImpl;
+import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardSetInfo;
+import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType;
+import mage.constants.SubType;
import mage.counters.CounterType;
+import mage.filter.StaticFilters;
+import mage.target.common.TargetCardInGraveyard;
import java.util.UUID;
/**
* @author TheElk801
*/
-public final class HeirloomMirror extends CardImpl {
+public final class HeirloomMirror extends TransformingDoubleFacedCard {
private static final Condition condition = new SourceHasCounterCondition(CounterType.RITUAL, 3);
public HeirloomMirror(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}{B}");
-
- this.secondSideCardClazz = mage.cards.i.InheritedFiend.class;
+ super(ownerId, setInfo,
+ new CardType[]{CardType.ARTIFACT}, new SubType[]{}, "{1}{B}",
+ "Inherited Fiend",
+ new CardType[]{CardType.CREATURE}, new SubType[]{SubType.DEMON}, "B"
+ );
+ // Heirloom Mirror
// {1}, {T}, Pay 1 life, Discard a card: Draw a card, mill a card, then put a ritual counter on Heirloom Mirror. Then if it has 3 or more ritual counters on it, remove them and transform it. Activate only as a sorcery.
- this.addAbility(new TransformAbility());
Ability ability = new ActivateAsSorceryActivatedAbility(new DrawCardSourceControllerEffect(1), new GenericManaCost(1));
ability.addCost(new TapSourceCost());
ability.addCost(new PayLifeCost(1));
@@ -44,9 +48,21 @@ public final class HeirloomMirror extends CardImpl {
ability.addEffect(new AddCountersSourceEffect(CounterType.RITUAL.createInstance()).concatBy(", then"));
ability.addEffect(new ConditionalOneShotEffect(
new RemoveAllCountersSourceEffect(CounterType.RITUAL), condition,
- "Then if it has 3 or more ritual counters on it, remove them and transform it"
+ "Then if it has three or more ritual counters on it, remove them and transform it"
).addEffect(new TransformSourceEffect()));
- this.addAbility(ability);
+ this.getLeftHalfCard().addAbility(ability);
+
+ // Inherited Fiend
+ this.getRightHalfCard().setPT(4, 4);
+
+ // Flying
+ this.getRightHalfCard().addAbility(FlyingAbility.getInstance());
+
+ // {2}{B}: Exile target creature card from a graveyard. Put a +1/+1 counter on Inherited Fiend.
+ Ability backAbility = new SimpleActivatedAbility(new ExileTargetEffect(), new ManaCostsImpl<>("{2}{B}"));
+ backAbility.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance()).concatBy("."));
+ backAbility.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
+ this.getRightHalfCard().addAbility(backAbility);
}
private HeirloomMirror(final HeirloomMirror card) {
diff --git a/Mage.Sets/src/mage/cards/h/HeliodTheRadiantDawn.java b/Mage.Sets/src/mage/cards/h/HeliodTheRadiantDawn.java
index 992a028c466..ca94d277ff9 100644
--- a/Mage.Sets/src/mage/cards/h/HeliodTheRadiantDawn.java
+++ b/Mage.Sets/src/mage/cards/h/HeliodTheRadiantDawn.java
@@ -1,49 +1,66 @@
package mage.cards.h;
-import mage.MageInt;
import mage.abilities.Ability;
+import mage.abilities.SpellAbility;
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
+import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.abilities.effects.common.TransformSourceEffect;
-import mage.abilities.keyword.TransformAbility;
-import mage.cards.CardImpl;
+import mage.abilities.effects.common.continuous.CastAsThoughItHadFlashAllEffect;
+import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.SubType;
-import mage.constants.SuperType;
+import mage.cards.TransformingDoubleFacedCard;
+import mage.constants.*;
import mage.filter.FilterCard;
import mage.filter.common.FilterEnchantmentCard;
+import mage.filter.common.FilterNonlandCard;
import mage.filter.predicate.Predicates;
+import mage.game.Game;
import mage.target.common.TargetCardInYourGraveyard;
+import mage.util.CardUtil;
+import mage.watchers.common.CardsDrawnThisTurnWatcher;
import java.util.UUID;
-public class HeliodTheRadiantDawn extends CardImpl {
+public class HeliodTheRadiantDawn extends TransformingDoubleFacedCard {
private static final FilterCard filter = new FilterEnchantmentCard("enchantment card that isn't a God");
+ private static final FilterCard flashFilter = new FilterNonlandCard("spells");
static {
filter.add(Predicates.not(SubType.GOD.getPredicate()));
}
public HeliodTheRadiantDawn(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{2}{W}{W}");
- this.supertype.add(SuperType.LEGENDARY);
- this.addSubType(SubType.GOD);
- this.power = new MageInt(4);
- this.toughness = new MageInt(4);
- this.secondSideCardClazz = mage.cards.h.HeliodTheWarpedEclipse.class;
+ super(ownerId, setInfo,
+ new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, new SubType[]{SubType.GOD}, "{2}{W}{W}",
+ "Heliod, the Warped Eclipse",
+ new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, new SubType[]{SubType.PHYREXIAN, SubType.GOD}, "WU"
+ );
+
+ // Heliod, the Radiant Dawn
+ this.getLeftHalfCard().setPT(4, 4);
// When Heliod, the Radiant Dawn enters the battlefield, return target enchantment card that isn't a God from your graveyard to your hand.
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect());
ability.addTarget(new TargetCardInYourGraveyard(filter));
- this.addAbility(ability);
+ this.getLeftHalfCard().addAbility(ability);
// {3}{U/P}: Transform Heliod, the Radiant Dawn. Activate only as a sorcery.
- this.addAbility(new TransformAbility());
- this.addAbility(new ActivateAsSorceryActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{3}{U/P}")));
+ this.getLeftHalfCard().addAbility(new ActivateAsSorceryActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{3}{U/P}")));
+
+ // Heliod, the Warped Eclipse
+ this.getRightHalfCard().setPT(4, 6);
+
+ // You may cast spells as though they had flash.
+ this.getRightHalfCard().addAbility(new SimpleStaticAbility(new CastAsThoughItHadFlashAllEffect(Duration.WhileOnBattlefield, flashFilter)));
+
+ // Spells you cast cost {1} less to cast for each card your opponents have drawn this turn.
+ Ability ability2 = new SimpleStaticAbility(new HeliodTheWarpedEclipseEffect());
+ ability2.addWatcher(new CardsDrawnThisTurnWatcher());
+ this.getRightHalfCard().addAbility(ability2);
}
private HeliodTheRadiantDawn(final HeliodTheRadiantDawn card) {
@@ -55,3 +72,45 @@ public class HeliodTheRadiantDawn extends CardImpl {
return new HeliodTheRadiantDawn(this);
}
}
+
+class HeliodTheWarpedEclipseEffect extends CostModificationEffectImpl {
+
+ HeliodTheWarpedEclipseEffect() {
+ super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.REDUCE_COST);
+ staticText = "spells you cast cost {1} less to cast for each card your opponents have drawn this turn";
+ }
+
+ private HeliodTheWarpedEclipseEffect(final HeliodTheWarpedEclipseEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source, Ability abilityToModify) {
+ CardsDrawnThisTurnWatcher watcher = game.getState().getWatcher(CardsDrawnThisTurnWatcher.class);
+ if (watcher == null) {
+ return false;
+ }
+ int amount = game
+ .getOpponents(source.getControllerId())
+ .stream()
+ .mapToInt(watcher::getCardsDrawnThisTurn)
+ .sum();
+ if (amount < 1) {
+ return false;
+ }
+ CardUtil.adjustCost((SpellAbility) abilityToModify, amount);
+ return true;
+ }
+
+ @Override
+ public boolean applies(Ability abilityToModify, Ability source, Game game) {
+ return abilityToModify instanceof SpellAbility
+ && game.getCard(abilityToModify.getSourceId()) != null
+ && abilityToModify.isControlledBy(source.getControllerId());
+ }
+
+ @Override
+ public HeliodTheWarpedEclipseEffect copy() {
+ return new HeliodTheWarpedEclipseEffect(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/h/HeliodTheWarpedEclipse.java b/Mage.Sets/src/mage/cards/h/HeliodTheWarpedEclipse.java
deleted file mode 100644
index 712aa244fb9..00000000000
--- a/Mage.Sets/src/mage/cards/h/HeliodTheWarpedEclipse.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package mage.cards.h;
-
-import mage.MageInt;
-import mage.abilities.Ability;
-import mage.abilities.SpellAbility;
-import mage.abilities.common.SimpleStaticAbility;
-import mage.abilities.effects.common.continuous.CastAsThoughItHadFlashAllEffect;
-import mage.abilities.effects.common.cost.CostModificationEffectImpl;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.constants.*;
-import mage.filter.FilterCard;
-import mage.filter.common.FilterNonlandCard;
-import mage.game.Game;
-import mage.util.CardUtil;
-import mage.watchers.common.CardsDrawnThisTurnWatcher;
-
-import java.util.UUID;
-
-public class HeliodTheWarpedEclipse extends CardImpl {
-
- private static final FilterCard filter = new FilterNonlandCard("spells");
-
- public HeliodTheWarpedEclipse(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "");
- this.color.setWhite(true);
- this.color.setBlue(true);
- this.supertype.add(SuperType.LEGENDARY);
- this.addSubType(SubType.PHYREXIAN);
- this.addSubType(SubType.GOD);
- this.power = new MageInt(4);
- this.toughness = new MageInt(6);
- this.nightCard = true;
-
- // You may cast spells as though they had flash.
- this.addAbility(new SimpleStaticAbility(new CastAsThoughItHadFlashAllEffect(Duration.WhileOnBattlefield, filter)));
-
- // Spells you cast cost {1} less to cast for each card your opponents have drawn this turn.
- this.addAbility(new SimpleStaticAbility(new HeliodTheWarpedEclipseEffect()));
- }
-
- private HeliodTheWarpedEclipse(final HeliodTheWarpedEclipse card) {
- super(card);
- }
-
- @Override
- public HeliodTheWarpedEclipse copy() {
- return new HeliodTheWarpedEclipse(this);
- }
-}
-
-class HeliodTheWarpedEclipseEffect extends CostModificationEffectImpl {
-
- HeliodTheWarpedEclipseEffect() {
- super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.REDUCE_COST);
- staticText = "spells you cast cost {1} less to cast for each card your opponents have drawn this turn";
- }
-
- private HeliodTheWarpedEclipseEffect(final HeliodTheWarpedEclipseEffect effect) {
- super(effect);
- }
-
- @Override
- public boolean apply(Game game, Ability source, Ability abilityToModify) {
- CardsDrawnThisTurnWatcher watcher = game.getState().getWatcher(CardsDrawnThisTurnWatcher.class);
- if (watcher == null) {
- return false;
- }
- int amount = game
- .getOpponents(source.getControllerId())
- .stream()
- .mapToInt(watcher::getCardsDrawnThisTurn)
- .sum();
- if (amount < 1) {
- return false;
- }
- CardUtil.adjustCost((SpellAbility) abilityToModify, amount);
- return true;
- }
-
- @Override
- public boolean applies(Ability abilityToModify, Ability source, Game game) {
- return abilityToModify instanceof SpellAbility
- && game.getCard(abilityToModify.getSourceId()) != null
- && abilityToModify.isControlledBy(source.getControllerId());
- }
-
- @Override
- public HeliodTheWarpedEclipseEffect copy() {
- return new HeliodTheWarpedEclipseEffect(this);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/h/HenrikaDomnathi.java b/Mage.Sets/src/mage/cards/h/HenrikaDomnathi.java
index 2b2b78e162c..c85473cec50 100644
--- a/Mage.Sets/src/mage/cards/h/HenrikaDomnathi.java
+++ b/Mage.Sets/src/mage/cards/h/HenrikaDomnathi.java
@@ -1,41 +1,57 @@
package mage.cards.h;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.Mode;
-import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
import mage.abilities.effects.common.SacrificeAllEffect;
import mage.abilities.effects.common.TransformSourceEffect;
+import mage.abilities.effects.common.continuous.BoostAllEffect;
import mage.abilities.hint.common.ModesAlreadyUsedHint;
+import mage.abilities.keyword.DeathtouchAbility;
import mage.abilities.keyword.FlyingAbility;
-import mage.abilities.keyword.TransformAbility;
-import mage.cards.CardImpl;
+import mage.abilities.keyword.LifelinkAbility;
+import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.SubType;
-import mage.constants.SuperType;
+import mage.cards.TransformingDoubleFacedCard;
+import mage.constants.*;
import mage.filter.StaticFilters;
+import mage.filter.common.FilterCreaturePermanent;
+import mage.filter.predicate.Predicates;
+import mage.filter.predicate.mageobject.AbilityPredicate;
import java.util.UUID;
/**
* @author TheElk801
*/
-public final class HenrikaDomnathi extends CardImpl {
+public final class HenrikaDomnathi extends TransformingDoubleFacedCard {
+
+ private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("each creature you control with flying, deathtouch, and/or lifelink");
+
+ static {
+ filter.add(TargetController.YOU.getControllerPredicate());
+ filter.add(Predicates.or(
+ new AbilityPredicate(FlyingAbility.class),
+ new AbilityPredicate(DeathtouchAbility.class),
+ new AbilityPredicate(LifelinkAbility.class)
+ ));
+ }
public HenrikaDomnathi(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{B}");
+ super(ownerId, setInfo,
+ new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.VAMPIRE}, "{2}{B}{B}",
+ "Henrika, Infernal Seer",
+ new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.VAMPIRE}, "B"
+ );
- this.supertype.add(SuperType.LEGENDARY);
- this.subtype.add(SubType.VAMPIRE);
- this.power = new MageInt(1);
- this.toughness = new MageInt(3);
- this.secondSideCardClazz = mage.cards.h.HenrikaInfernalSeer.class;
+ // Henrika Domnathi
+ this.getLeftHalfCard().setPT(1, 3);
// Flying
- this.addAbility(FlyingAbility.getInstance());
+ this.getLeftHalfCard().addAbility(FlyingAbility.getInstance());
// At the beginning of combat on your turn, choose one that hasn't been chosen —
// • Each player sacrifices a creature.
@@ -51,10 +67,26 @@ public final class HenrikaDomnathi extends CardImpl {
// • Transform Henrika Domnathi.
ability.addMode(new Mode(new TransformSourceEffect()).setModeTag("transform"));
- this.addAbility(new TransformAbility());
ability.addHint(ModesAlreadyUsedHint.instance);
- this.addAbility(ability);
+ this.getLeftHalfCard().addAbility(ability);
+
+ // Henrika, Infernal Seer
+ this.getRightHalfCard().setPT(3, 4);
+
+ // Flying
+ this.getRightHalfCard().addAbility(FlyingAbility.getInstance());
+
+ // Deathtouch
+ this.getRightHalfCard().addAbility(DeathtouchAbility.getInstance());
+
+ // Lifelink
+ this.getRightHalfCard().addAbility(LifelinkAbility.getInstance());
+
+ // {1}{B}{B}: Each creature you control with flying, deathtouch, and/or lifelink gets +1/+0 until end of turn.
+ this.getRightHalfCard().addAbility(new SimpleActivatedAbility(new BoostAllEffect(
+ 1, 0, Duration.EndOfTurn, filter, false
+ ), new ManaCostsImpl<>("{1}{B}{B}")));
}
private HenrikaDomnathi(final HenrikaDomnathi card) {
diff --git a/Mage.Sets/src/mage/cards/h/HenrikaInfernalSeer.java b/Mage.Sets/src/mage/cards/h/HenrikaInfernalSeer.java
deleted file mode 100644
index fce0036801d..00000000000
--- a/Mage.Sets/src/mage/cards/h/HenrikaInfernalSeer.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package mage.cards.h;
-
-import mage.MageInt;
-import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.mana.ManaCostsImpl;
-import mage.abilities.effects.common.continuous.BoostAllEffect;
-import mage.abilities.keyword.DeathtouchAbility;
-import mage.abilities.keyword.FlyingAbility;
-import mage.abilities.keyword.LifelinkAbility;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.constants.*;
-import mage.filter.common.FilterCreaturePermanent;
-import mage.filter.predicate.Predicates;
-import mage.filter.predicate.mageobject.AbilityPredicate;
-
-import java.util.UUID;
-
-/**
- * @author TheElk801
- */
-public final class HenrikaInfernalSeer extends CardImpl {
-
- private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("each creature you control with flying, deathtouch, and/or lifelink");
-
- static {
- filter.add(TargetController.YOU.getControllerPredicate());
- filter.add(Predicates.or(
- new AbilityPredicate(FlyingAbility.class),
- new AbilityPredicate(DeathtouchAbility.class),
- new AbilityPredicate(LifelinkAbility.class)
- ));
- }
-
- public HenrikaInfernalSeer(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
-
- this.supertype.add(SuperType.LEGENDARY);
- this.subtype.add(SubType.VAMPIRE);
- this.power = new MageInt(3);
- this.toughness = new MageInt(4);
- this.color.setBlack(true);
- this.nightCard = true;
-
- // Flying
- this.addAbility(FlyingAbility.getInstance());
-
- // Deathtouch
- this.addAbility(DeathtouchAbility.getInstance());
-
- // Lifelink
- this.addAbility(LifelinkAbility.getInstance());
-
- // {1}{B}{B}: Each creature you control with flying, deathtouch, and/or lifelink gets +1/+0 until end of turn.
- this.addAbility(new SimpleActivatedAbility(new BoostAllEffect(
- 1, 0, Duration.EndOfTurn, filter, false
- ), new ManaCostsImpl<>("{1}{B}{B}")));
- }
-
- private HenrikaInfernalSeer(final HenrikaInfernalSeer card) {
- super(card);
- }
-
- @Override
- public HenrikaInfernalSeer copy() {
- return new HenrikaInfernalSeer(this);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/h/HerbologyInstructor.java b/Mage.Sets/src/mage/cards/h/HerbologyInstructor.java
index 826ab7f6688..4b3be096b87 100644
--- a/Mage.Sets/src/mage/cards/h/HerbologyInstructor.java
+++ b/Mage.Sets/src/mage/cards/h/HerbologyInstructor.java
@@ -1,39 +1,55 @@
package mage.cards.h;
-import mage.MageInt;
+import mage.abilities.Ability;
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
+import mage.abilities.common.TransformIntoSourceTriggeredAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.dynamicvalue.common.SignInversionDynamicValue;
+import mage.abilities.dynamicvalue.common.SourcePermanentPowerValue;
+import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.common.TransformSourceEffect;
-import mage.abilities.keyword.TransformAbility;
-import mage.cards.CardImpl;
+import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.cards.CardSetInfo;
+import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType;
+import mage.constants.Duration;
import mage.constants.SubType;
+import mage.target.common.TargetOpponentsCreaturePermanent;
import java.util.UUID;
/**
* @author TheElk801
*/
-public final class HerbologyInstructor extends CardImpl {
+public final class HerbologyInstructor extends TransformingDoubleFacedCard {
public HerbologyInstructor(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
+ super(ownerId, setInfo,
+ new CardType[]{CardType.CREATURE}, new SubType[]{SubType.TREEFOLK, SubType.DRUID}, "{1}{G}",
+ "Malady Invoker",
+ new CardType[]{CardType.CREATURE}, new SubType[]{SubType.PHYREXIAN, SubType.TREEFOLK}, "BG"
+ );
- this.subtype.add(SubType.TREEFOLK);
- this.subtype.add(SubType.DRUID);
- this.power = new MageInt(1);
- this.toughness = new MageInt(3);
- this.secondSideCardClazz = mage.cards.m.MaladyInvoker.class;
+ // Herbology Instructor
+ this.getLeftHalfCard().setPT(1, 3);
// When Herbology Instructor enters the battlefield, you gain 3 life.
- this.addAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect(3)));
+ this.getLeftHalfCard().addAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect(3)));
// {6}{B/P}: Transform Herbology Instructor. Activate only as a sorcery.
- this.addAbility(new TransformAbility());
- this.addAbility(new ActivateAsSorceryActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{6}{B/P}")));
+ this.getLeftHalfCard().addAbility(new ActivateAsSorceryActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{6}{B/P}")));
+
+ // Malady Invoker
+ this.getRightHalfCard().setPT(3, 3);
+
+ // When this creature transforms into Malady Invoker, target creature an opponent controls gets -0/-X until end of turn, where X is Malady Invoker's power.
+ Ability ability = new TransformIntoSourceTriggeredAbility(new BoostTargetEffect(
+ StaticValue.get(0), new SignInversionDynamicValue(SourcePermanentPowerValue.NOT_NEGATIVE), Duration.EndOfTurn
+ ).setText("target creature an opponent controls gets -0/-X until end of turn, where X is {this}'s power"));
+ ability.addTarget(new TargetOpponentsCreaturePermanent());
+ this.getRightHalfCard().addAbility(ability);
}
private HerbologyInstructor(final HerbologyInstructor card) {
diff --git a/Mage.Sets/src/mage/cards/h/HermitOfTheNatterknolls.java b/Mage.Sets/src/mage/cards/h/HermitOfTheNatterknolls.java
index ede6c5f95e4..f041fc3c33a 100644
--- a/Mage.Sets/src/mage/cards/h/HermitOfTheNatterknolls.java
+++ b/Mage.Sets/src/mage/cards/h/HermitOfTheNatterknolls.java
@@ -1,13 +1,12 @@
package mage.cards.h;
-import mage.MageInt;
import mage.abilities.common.SpellCastOpponentTriggeredAbility;
+import mage.abilities.common.WerewolfBackTriggeredAbility;
import mage.abilities.common.WerewolfFrontTriggeredAbility;
import mage.abilities.condition.common.MyTurnCondition;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
-import mage.abilities.keyword.TransformAbility;
-import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.StaticFilters;
@@ -17,25 +16,36 @@ import java.util.UUID;
/**
* @author LevelX2
*/
-public final class HermitOfTheNatterknolls extends CardImpl {
+public final class HermitOfTheNatterknolls extends TransformingDoubleFacedCard {
public HermitOfTheNatterknolls(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
- this.subtype.add(SubType.HUMAN);
- this.subtype.add(SubType.WEREWOLF);
- this.power = new MageInt(2);
- this.toughness = new MageInt(3);
+ super(ownerId, setInfo,
+ new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WEREWOLF}, "{2}{G}",
+ "Lone Wolf of the Natterknolls",
+ new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "G"
+ );
- this.secondSideCardClazz = mage.cards.l.LoneWolfOfTheNatterknolls.class;
+ // Hermit of the Natterknolls
+ this.getLeftHalfCard().setPT(2, 3);
// Whenever an opponent casts a spell during your turn, draw a card.
- this.addAbility(new SpellCastOpponentTriggeredAbility(
+ this.getLeftHalfCard().addAbility(new SpellCastOpponentTriggeredAbility(
new DrawCardSourceControllerEffect(1), StaticFilters.FILTER_SPELL_A, false
).withTriggerCondition(MyTurnCondition.instance));
// At the beginning of each upkeep, if no spells were cast last turn, transform Hermit of the Natterknolls.
- this.addAbility(new TransformAbility());
- this.addAbility(new WerewolfFrontTriggeredAbility());
+ this.getLeftHalfCard().addAbility(new WerewolfFrontTriggeredAbility());
+
+ // Lone Wolf of the Natterknolls
+ this.getRightHalfCard().setPT(3, 5);
+
+ // Whenever an opponent cast a spell during your turn, draw two cards.
+ this.getRightHalfCard().addAbility(new SpellCastOpponentTriggeredAbility(
+ new DrawCardSourceControllerEffect(2), StaticFilters.FILTER_SPELL_A, false
+ ).withTriggerCondition(MyTurnCondition.instance));
+
+ // At the beginning of each upkeep, if a player cast two or more spells last turn, transform Lone Wolf of the Natterknolls.
+ this.getRightHalfCard().addAbility(new WerewolfBackTriggeredAbility());
}
private HermitOfTheNatterknolls(final HermitOfTheNatterknolls card) {
diff --git a/Mage.Sets/src/mage/cards/h/HidetsuguConsumesAll.java b/Mage.Sets/src/mage/cards/h/HidetsuguConsumesAll.java
index 16e6ba35dc0..8b01a26e62e 100644
--- a/Mage.Sets/src/mage/cards/h/HidetsuguConsumesAll.java
+++ b/Mage.Sets/src/mage/cards/h/HidetsuguConsumesAll.java
@@ -1,26 +1,38 @@
package mage.cards.h;
+import mage.MageObjectReference;
+import mage.abilities.Ability;
+import mage.abilities.common.DealsDamageSourceTriggeredAbility;
+import mage.abilities.common.DealsDamageToAPlayerTriggeredAbility;
import mage.abilities.common.SagaAbility;
+import mage.abilities.condition.Condition;
import mage.abilities.effects.common.DestroyAllEffect;
import mage.abilities.effects.common.ExileGraveyardAllPlayersEffect;
import mage.abilities.effects.common.ExileSagaAndReturnTransformedEffect;
-import mage.abilities.keyword.TransformAbility;
-import mage.cards.CardImpl;
+import mage.abilities.effects.common.LoseGameTargetPlayerEffect;
+import mage.abilities.effects.common.counter.AddCountersSourceEffect;
+import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.ComparisonType;
-import mage.constants.SagaChapter;
-import mage.constants.SubType;
+import mage.cards.TransformingDoubleFacedCard;
+import mage.constants.*;
+import mage.counters.CounterType;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterNonlandPermanent;
import mage.filter.predicate.mageobject.ManaValuePredicate;
+import mage.game.Game;
+import mage.game.events.GameEvent;
+import mage.game.permanent.Permanent;
+import mage.watchers.Watcher;
+import java.util.AbstractMap;
+import java.util.HashMap;
+import java.util.Map;
import java.util.UUID;
/**
* @author TheElk801
*/
-public final class HidetsuguConsumesAll extends CardImpl {
+public final class HidetsuguConsumesAll extends TransformingDoubleFacedCard {
private static final FilterPermanent filter = new FilterNonlandPermanent();
@@ -29,26 +41,41 @@ public final class HidetsuguConsumesAll extends CardImpl {
}
public HidetsuguConsumesAll(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}{R}");
-
- this.subtype.add(SubType.SAGA);
- this.secondSideCardClazz = mage.cards.v.VesselOfTheAllConsuming.class;
+ super(ownerId, setInfo,
+ new CardType[]{CardType.ENCHANTMENT}, new SubType[]{SubType.SAGA}, "{1}{B}{R}",
+ "Vessel of the All-Consuming",
+ new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, new SubType[]{SubType.OGRE, SubType.SHAMAN}, "BR"
+ );
+ // Hidetsugu Consumes All
// (As this Saga enters and after your draw step, add a lore counter.)
- SagaAbility sagaAbility = new SagaAbility(this);
+ SagaAbility sagaAbility = new SagaAbility(this.getLeftHalfCard());
// I — Destroy each nonland permanent with mana value 1 or less.
- sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_I, new DestroyAllEffect(filter)
+ sagaAbility.addChapterEffect(this.getLeftHalfCard(), SagaChapter.CHAPTER_I, new DestroyAllEffect(filter)
.setText("destroy each nonland permanent with mana value 1 or less"));
// II — Exile all graveyards.
- sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_II, new ExileGraveyardAllPlayersEffect());
+ sagaAbility.addChapterEffect(this.getLeftHalfCard(), SagaChapter.CHAPTER_II, new ExileGraveyardAllPlayersEffect());
// III — Exile this Saga, then return it to the battlefield transformed under your control.
- this.addAbility(new TransformAbility());
- sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III, new ExileSagaAndReturnTransformedEffect());
+ sagaAbility.addChapterEffect(this.getLeftHalfCard(), SagaChapter.CHAPTER_III, new ExileSagaAndReturnTransformedEffect());
+ sagaAbility.addWatcher(VesselOfTheAllConsumingWatcher.makeWatcher());
+ this.getLeftHalfCard().addAbility(sagaAbility);
- this.addAbility(sagaAbility, mage.cards.v.VesselOfTheAllConsuming.makeWatcher());
+ // Vessel of the All-Consuming
+ this.getRightHalfCard().setPT(3, 3);
+
+ // Trample
+ this.getRightHalfCard().addAbility(TrampleAbility.getInstance());
+
+ // Whenever Vessel of the All-Consuming deals damage, put a +1/+1 counter on it.
+ this.getRightHalfCard().addAbility(new DealsDamageSourceTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance())));
+
+ // Whenever Vessel of the All-Consuming deals damage to a player, if it has dealt 10 or more damage to that player this turn, they lose the game.
+ this.getRightHalfCard().addAbility(new DealsDamageToAPlayerTriggeredAbility(
+ new LoseGameTargetPlayerEffect().setText("they lose the game"), false, true
+ ).withInterveningIf(VesselOfTheAllConsumingCondition.instance));
}
private HidetsuguConsumesAll(final HidetsuguConsumesAll card) {
@@ -60,3 +87,60 @@ public final class HidetsuguConsumesAll extends CardImpl {
return new HidetsuguConsumesAll(this);
}
}
+
+enum VesselOfTheAllConsumingCondition implements Condition {
+ instance;
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ return VesselOfTheAllConsumingWatcher.checkPermanent(game, source);
+ }
+
+ @Override
+ public String toString() {
+ return "it has dealt 10 or more damage to that player this turn";
+ }
+}
+
+class VesselOfTheAllConsumingWatcher extends Watcher {
+
+ private final Map, Integer> morMap = new HashMap<>();
+
+ VesselOfTheAllConsumingWatcher() {
+ super(WatcherScope.GAME);
+ }
+
+ @Override
+ public void watch(GameEvent event, Game game) {
+ if (event.getType() != GameEvent.EventType.DAMAGED_PLAYER) {
+ return;
+ }
+ Permanent permanent = game.getPermanent(event.getSourceId());
+ if (permanent != null) {
+ int damage = event.getAmount();
+ morMap.compute(new AbstractMap.SimpleImmutableEntry(new MageObjectReference(permanent, game), event.getTargetId()),
+ (u, i) -> i == null ? damage : Integer.sum(i, damage));
+ }
+ }
+
+ @Override
+ public void reset() {
+ super.reset();
+ morMap.clear();
+ }
+
+ static Watcher makeWatcher() {
+ return new VesselOfTheAllConsumingWatcher();
+ }
+
+ static boolean checkPermanent(Game game, Ability source) {
+ VesselOfTheAllConsumingWatcher watcher = game.getState().getWatcher(VesselOfTheAllConsumingWatcher.class);
+ if (watcher == null) {
+ return false;
+ }
+ AbstractMap.SimpleImmutableEntry key = new AbstractMap.SimpleImmutableEntry<>(
+ new MageObjectReference(game.getPermanent(source.getSourceId()), game),
+ source.getEffects().get(0).getTargetPointer().getFirst(game, source));
+ return watcher.morMap.getOrDefault(key, 0) >= 10;
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/h/HinterlandHermit.java b/Mage.Sets/src/mage/cards/h/HinterlandHermit.java
index e376e0ebdea..12fe9a552e1 100644
--- a/Mage.Sets/src/mage/cards/h/HinterlandHermit.java
+++ b/Mage.Sets/src/mage/cards/h/HinterlandHermit.java
@@ -1,11 +1,13 @@
package mage.cards.h;
-import mage.MageInt;
+import mage.abilities.common.SimpleStaticAbility;
+import mage.abilities.common.WerewolfBackTriggeredAbility;
import mage.abilities.common.WerewolfFrontTriggeredAbility;
-import mage.abilities.keyword.TransformAbility;
-import mage.cards.CardImpl;
+import mage.abilities.effects.common.combat.MustBeBlockedByAtLeastOneSourceEffect;
import mage.cards.CardSetInfo;
+import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType;
+import mage.constants.Duration;
import mage.constants.SubType;
import java.util.UUID;
@@ -13,21 +15,29 @@ import java.util.UUID;
/**
* @author BetaSteward
*/
-public final class HinterlandHermit extends CardImpl {
+public final class HinterlandHermit extends TransformingDoubleFacedCard {
public HinterlandHermit(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}");
- this.subtype.add(SubType.HUMAN);
- this.subtype.add(SubType.WEREWOLF);
+ super(ownerId, setInfo,
+ new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WEREWOLF}, "{1}{R}",
+ "Hinterland Scourge",
+ new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "R"
+ );
- this.secondSideCardClazz = mage.cards.h.HinterlandScourge.class;
-
- this.power = new MageInt(2);
- this.toughness = new MageInt(1);
+ // Hinterland Hermit
+ this.getLeftHalfCard().setPT(2, 1);
// At the beginning of each upkeep, if no spells were cast last turn, transform Hinterland Hermit.
- this.addAbility(new TransformAbility());
- this.addAbility(new WerewolfFrontTriggeredAbility());
+ this.getLeftHalfCard().addAbility(new WerewolfFrontTriggeredAbility());
+
+ // Hinterland Scourge
+ this.getRightHalfCard().setPT(3, 2);
+
+ // Hinterland Scourge must be blocked if able.
+ this.getRightHalfCard().addAbility(new SimpleStaticAbility(new MustBeBlockedByAtLeastOneSourceEffect(Duration.WhileOnBattlefield)));
+
+ // At the beginning of each upkeep, if a player cast two or more spells last turn, transform Hinterland Scourge.
+ this.getRightHalfCard().addAbility(new WerewolfBackTriggeredAbility());
}
private HinterlandHermit(final HinterlandHermit card) {
diff --git a/Mage.Sets/src/mage/cards/h/HinterlandScourge.java b/Mage.Sets/src/mage/cards/h/HinterlandScourge.java
deleted file mode 100644
index cd0c9e0c8ba..00000000000
--- a/Mage.Sets/src/mage/cards/h/HinterlandScourge.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package mage.cards.h;
-
-import mage.MageInt;
-import mage.abilities.common.SimpleStaticAbility;
-import mage.abilities.common.WerewolfBackTriggeredAbility;
-import mage.abilities.effects.common.combat.MustBeBlockedByAtLeastOneSourceEffect;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.Duration;
-import mage.constants.SubType;
-import mage.constants.Zone;
-
-import java.util.UUID;
-
-/**
- * @author BetaSteward
- */
-public final class HinterlandScourge extends CardImpl {
-
- public HinterlandScourge(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
- this.subtype.add(SubType.WEREWOLF);
- this.color.setRed(true);
-
- // this card is the second face of double-faced card of Hinterland Hermit
- this.nightCard = true;
-
- this.power = new MageInt(3);
- this.toughness = new MageInt(2);
-
- // Hinterland Scourge must be blocked if able.
- this.addAbility(new SimpleStaticAbility(new MustBeBlockedByAtLeastOneSourceEffect(Duration.WhileOnBattlefield)));
-
- // At the beginning of each upkeep, if a player cast two or more spells last turn, transform Hinterland Scourge.
- this.addAbility(new WerewolfBackTriggeredAbility());
- }
-
- private HinterlandScourge(final HinterlandScourge card) {
- super(card);
- }
-
- @Override
- public HinterlandScourge copy() {
- return new HinterlandScourge(this);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/h/HookhandMariner.java b/Mage.Sets/src/mage/cards/h/HookhandMariner.java
index c2fc61ab523..dd34f90a2eb 100644
--- a/Mage.Sets/src/mage/cards/h/HookhandMariner.java
+++ b/Mage.Sets/src/mage/cards/h/HookhandMariner.java
@@ -1,9 +1,10 @@
package mage.cards.h;
-import mage.MageInt;
+import mage.abilities.keyword.DauntAbility;
import mage.abilities.keyword.DayboundAbility;
-import mage.cards.CardImpl;
+import mage.abilities.keyword.NightboundAbility;
import mage.cards.CardSetInfo;
+import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType;
import mage.constants.SubType;
@@ -12,19 +13,29 @@ import java.util.UUID;
/**
* @author TheElk801
*/
-public final class HookhandMariner extends CardImpl {
+public final class HookhandMariner extends TransformingDoubleFacedCard {
public HookhandMariner(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}");
+ super(ownerId, setInfo,
+ new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WEREWOLF}, "{3}{G}",
+ "Riphook Raider",
+ new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "G"
+ );
- this.subtype.add(SubType.HUMAN);
- this.subtype.add(SubType.WEREWOLF);
- this.power = new MageInt(4);
- this.toughness = new MageInt(4);
- this.secondSideCardClazz = mage.cards.r.RiphookRaider.class;
+ // Hookhand Mariner
+ this.getLeftHalfCard().setPT(4, 4);
// Daybound
- this.addAbility(new DayboundAbility());
+ this.getLeftHalfCard().addAbility(new DayboundAbility());
+
+ // Riphook Raider
+ this.getRightHalfCard().setPT(6, 4);
+
+ // Riphook Raider can't be blocked by creatures with power 2 or less.
+ this.getRightHalfCard().addAbility(new DauntAbility());
+
+ // Nightbound
+ this.getRightHalfCard().addAbility(new NightboundAbility());
}
private HookhandMariner(final HookhandMariner card) {
diff --git a/Mage.Sets/src/mage/cards/h/HostileHostel.java b/Mage.Sets/src/mage/cards/h/HostileHostel.java
index 8e8a5a156c4..8538da2f36c 100644
--- a/Mage.Sets/src/mage/cards/h/HostileHostel.java
+++ b/Mage.Sets/src/mage/cards/h/HostileHostel.java
@@ -2,42 +2,57 @@ package mage.cards.h;
import mage.abilities.Ability;
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
+import mage.abilities.common.AttacksTriggeredAbility;
+import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.SourceHasCounterCondition;
import mage.abilities.costs.common.SacrificeTargetCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalOneShotEffect;
+import mage.abilities.effects.OneShotEffect;
+import mage.abilities.effects.common.PhaseOutSourceEffect;
import mage.abilities.effects.common.RemoveAllCountersSourceEffect;
import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.effects.common.UntapSourceEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
-import mage.abilities.keyword.TransformAbility;
import mage.abilities.mana.ColorlessManaAbility;
-import mage.cards.CardImpl;
+import mage.cards.Card;
import mage.cards.CardSetInfo;
+import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType;
+import mage.constants.Outcome;
+import mage.constants.SubType;
import mage.counters.CounterType;
import mage.filter.StaticFilters;
+import mage.game.ExileZone;
+import mage.game.Game;
+import mage.game.permanent.Permanent;
+import mage.players.Player;
+import mage.target.common.TargetCardInGraveyard;
+import mage.util.CardUtil;
import java.util.UUID;
/**
* @author LePwnerer
*/
-public final class HostileHostel extends CardImpl {
+public final class HostileHostel extends TransformingDoubleFacedCard {
private static final Condition condition = new SourceHasCounterCondition(CounterType.SOUL, 3);
public HostileHostel(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
- this.secondSideCardClazz = mage.cards.c.CreepingInn.class;
+ super(ownerId, setInfo,
+ new CardType[]{CardType.LAND}, new SubType[]{}, "",
+ "Creeping Inn",
+ new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, new SubType[]{SubType.HORROR, SubType.CONSTRUCT}, "B"
+ );
+ // Hostile Hostel
// {T}: Add {C}.
- this.addAbility(new ColorlessManaAbility());
+ this.getLeftHalfCard().addAbility(new ColorlessManaAbility());
// {1}, {T}, Sacrifice a creature: Put a soul counter on Hostile Hostel. Then if there are three or more soul counters on it, remove those counters, transform it, then untap it. Activate only as a sorcery.
- this.addAbility(new TransformAbility());
Ability ability = new ActivateAsSorceryActivatedAbility(new AddCountersSourceEffect(CounterType.SOUL.createInstance()), new ManaCostsImpl<>("{1}"));
ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeTargetCost(StaticFilters.FILTER_PERMANENT_CREATURE));
@@ -45,7 +60,17 @@ public final class HostileHostel extends CardImpl {
new RemoveAllCountersSourceEffect(CounterType.SOUL), condition, "Then if there are three " +
"or more soul counters on it, remove those counters, transform it, then untap it"
).addEffect(new TransformSourceEffect()).addEffect(new UntapSourceEffect()));
- this.addAbility(ability);
+ this.getLeftHalfCard().addAbility(ability);
+
+ // Creeping Inn
+ this.getRightHalfCard().setPT(3, 7);
+
+ // Whenever Creeping Inn attacks, you may exile a creature card from your graveyard.
+ // If you do, each opponent loses X life and you gain X life, where X is the number of creature cards exiled with Creeping Inn.
+ this.getRightHalfCard().addAbility(new AttacksTriggeredAbility(new CreepingInnEffect()));
+
+ // {4}: Creeping Inn phases out.
+ this.getRightHalfCard().addAbility(new SimpleActivatedAbility(new PhaseOutSourceEffect(), new ManaCostsImpl<>("{4}")));
}
private HostileHostel(final HostileHostel card) {
@@ -57,3 +82,54 @@ public final class HostileHostel extends CardImpl {
return new HostileHostel(this);
}
}
+
+class CreepingInnEffect extends OneShotEffect {
+
+ CreepingInnEffect() {
+ super(Outcome.Exile);
+ this.staticText = "you may exile a creature card from your graveyard. " +
+ "If you do, each opponent loses X life and you gain X life, " +
+ "where X is the number of creature cards exiled with {this}.";
+ }
+
+ private CreepingInnEffect(final CreepingInnEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public CreepingInnEffect copy() {
+ return new CreepingInnEffect(this);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Player player = game.getPlayer(source.getControllerId());
+ Permanent permanent = source.getSourcePermanentOrLKI(game);
+ if (player != null && permanent != null) {
+ UUID exileId = CardUtil.getExileZoneId(game, source);
+ TargetCardInGraveyard target = new TargetCardInGraveyard(0, 1, StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD);
+ target.withNotTarget(true);
+ if (target.canChoose(player.getId(), source, game)) {
+ if (player.choose(Outcome.Exile, target, source, game)) {
+ Card cardChosen = game.getCard(target.getFirstTarget());
+ if (cardChosen != null) {
+ int lifeAmount = 0;
+ player.moveCardsToExile(cardChosen, source, game, true, exileId, permanent.getName());
+ ExileZone exile = game.getExile().getExileZone(exileId);
+ if (exile != null) {
+ for (UUID cardId : exile) {
+ lifeAmount++;
+ }
+ }
+ for (UUID playerId : game.getOpponents(source.getControllerId())) {
+ game.getPlayer(playerId).loseLife(lifeAmount, game, source, false);
+ }
+ player.gainLife(lifeAmount, game, source);
+ }
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/h/HoundTamer.java b/Mage.Sets/src/mage/cards/h/HoundTamer.java
index 925be3abf19..c546be35ee4 100644
--- a/Mage.Sets/src/mage/cards/h/HoundTamer.java
+++ b/Mage.Sets/src/mage/cards/h/HoundTamer.java
@@ -1,17 +1,22 @@
package mage.cards.h;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.abilities.keyword.DayboundAbility;
+import mage.abilities.keyword.NightboundAbility;
import mage.abilities.keyword.TrampleAbility;
-import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType;
+import mage.constants.Duration;
import mage.constants.SubType;
import mage.counters.CounterType;
+import mage.filter.FilterPermanent;
+import mage.filter.predicate.Predicates;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
@@ -19,29 +24,60 @@ import java.util.UUID;
/**
* @author TheElk801
*/
-public final class HoundTamer extends CardImpl {
+public final class HoundTamer extends TransformingDoubleFacedCard {
+
+ private static final FilterPermanent filter = new FilterPermanent("Wolves and Werewolves");
+
+ static {
+ filter.add(Predicates.or(
+ SubType.WOLF.getPredicate(),
+ SubType.WEREWOLF.getPredicate()
+ ));
+ }
public HoundTamer(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
+ super(ownerId, setInfo,
+ new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WEREWOLF}, "{2}{G}",
+ "Untamed Pup",
+ new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "G"
+ );
- this.subtype.add(SubType.HUMAN);
- this.subtype.add(SubType.WEREWOLF);
- this.power = new MageInt(3);
- this.toughness = new MageInt(3);
- this.secondSideCardClazz = mage.cards.u.UntamedPup.class;
+ // Hound Tamer
+ this.getLeftHalfCard().setPT(3, 3);
// Trample
- this.addAbility(TrampleAbility.getInstance());
+ this.getLeftHalfCard().addAbility(TrampleAbility.getInstance());
// {3}{G}: Put a +1/+1 counter on target creature.
Ability ability = new SimpleActivatedAbility(
new AddCountersTargetEffect(CounterType.P1P1.createInstance()), new ManaCostsImpl<>("{3}{G}")
);
ability.addTarget(new TargetCreaturePermanent());
- this.addAbility(ability);
+ this.getLeftHalfCard().addAbility(ability);
// Daybound
- this.addAbility(new DayboundAbility());
+ this.getLeftHalfCard().addAbility(new DayboundAbility());
+
+ // Untamed Pup
+ this.getRightHalfCard().setPT(4, 4);
+
+ // Trample
+ this.getRightHalfCard().addAbility(TrampleAbility.getInstance());
+
+ // Other Wolves and Werewolves you control have trample.
+ this.getRightHalfCard().addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
+ TrampleAbility.getInstance(), Duration.WhileOnBattlefield, filter, true
+ )));
+
+ // {3}{G}: Put a +1/+1 counter on target creature.
+ Ability backAbility = new SimpleActivatedAbility(
+ new AddCountersTargetEffect(CounterType.P1P1.createInstance()), new ManaCostsImpl<>("{3}{G}")
+ );
+ backAbility.addTarget(new TargetCreaturePermanent());
+ this.getRightHalfCard().addAbility(backAbility);
+
+ // Nightbound
+ this.getRightHalfCard().addAbility(new NightboundAbility());
}
private HoundTamer(final HoundTamer card) {
diff --git a/Mage.Sets/src/mage/cards/h/HowlpackPiper.java b/Mage.Sets/src/mage/cards/h/HowlpackPiper.java
index 577c869a305..428c959de9e 100644
--- a/Mage.Sets/src/mage/cards/h/HowlpackPiper.java
+++ b/Mage.Sets/src/mage/cards/h/HowlpackPiper.java
@@ -1,20 +1,19 @@
package mage.cards.h;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
import mage.abilities.common.CantBeCounteredSourceAbility;
+import mage.abilities.common.TransformsOrEntersTriggeredAbility;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect;
+import mage.abilities.effects.common.LookLibraryAndPickControllerEffect;
import mage.abilities.keyword.DayboundAbility;
+import mage.abilities.keyword.NightboundAbility;
import mage.cards.Card;
-import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.Outcome;
-import mage.constants.SubType;
-import mage.constants.Zone;
+import mage.cards.TransformingDoubleFacedCard;
+import mage.constants.*;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.permanent.Permanent;
@@ -28,29 +27,43 @@ import java.util.UUID;
/**
* @author TheElk801
*/
-public final class HowlpackPiper extends CardImpl {
+public final class HowlpackPiper extends TransformingDoubleFacedCard {
public HowlpackPiper(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}");
+ super(ownerId, setInfo,
+ new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WEREWOLF}, "{3}{G}",
+ "Wildsong Howler",
+ new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "G"
+ );
- this.subtype.add(SubType.HUMAN);
- this.subtype.add(SubType.WEREWOLF);
- this.power = new MageInt(2);
- this.toughness = new MageInt(2);
- this.secondSideCardClazz = mage.cards.w.WildsongHowler.class;
+ // Howlpack Piper
+ this.getLeftHalfCard().setPT(2, 2);
// This spell can't be countered.
- this.addAbility(new CantBeCounteredSourceAbility());
+ this.getLeftHalfCard().addAbility(new CantBeCounteredSourceAbility());
// {1}{G}, {T}: You may put a creature card from your hand onto the battlefield. If it's a Wolf or Werewolf, untap Howlpack Piper. Activate only as a sorcery.
Ability ability = new ActivateAsSorceryActivatedAbility(
new HowlpackPiperEffect(), new ManaCostsImpl<>("{1}{G}")
);
ability.addCost(new TapSourceCost());
- this.addAbility(ability);
+ this.getLeftHalfCard().addAbility(ability);
// Daybound
- this.addAbility(new DayboundAbility());
+ this.getLeftHalfCard().addAbility(new DayboundAbility());
+
+ // Wildsong Howler
+ this.getRightHalfCard().setPT(4, 4);
+
+ // Whenever this creature enters the battlefield or transforms into Wildsong Howler, look at the top six cards of your library.
+ // You may reveal a creature card from among them and put it into your hand.
+ // Put the rest on the bottom of your library in a random order.
+ this.getRightHalfCard().addAbility(new TransformsOrEntersTriggeredAbility(
+ new LookLibraryAndPickControllerEffect(6, 1, StaticFilters.FILTER_CARD_CREATURE_A, PutCards.HAND, PutCards.BOTTOM_RANDOM),
+ false));
+
+ // Nightbound
+ this.getRightHalfCard().addAbility(new NightboundAbility());
}
private HowlpackPiper(final HowlpackPiper card) {
diff --git a/Mage.Sets/src/mage/cards/h/HuatliPoetOfUnity.java b/Mage.Sets/src/mage/cards/h/HuatliPoetOfUnity.java
index 83e01945e95..04cc0feb6e5 100644
--- a/Mage.Sets/src/mage/cards/h/HuatliPoetOfUnity.java
+++ b/Mage.Sets/src/mage/cards/h/HuatliPoetOfUnity.java
@@ -1,20 +1,27 @@
package mage.cards.h;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
+import mage.abilities.common.SagaAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.ExileAndReturnSourceEffect;
+import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
+import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
-import mage.abilities.keyword.TransformAbility;
-import mage.cards.CardImpl;
+import mage.abilities.keyword.DoubleStrikeAbility;
+import mage.abilities.keyword.TrampleAbility;
+import mage.abilities.mana.GreenManaAbility;
+import mage.abilities.mana.RedManaAbility;
+import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.PutCards;
-import mage.constants.SubType;
-import mage.constants.SuperType;
+import mage.cards.TransformingDoubleFacedCard;
+import mage.constants.*;
+import mage.filter.FilterCard;
import mage.filter.StaticFilters;
+import mage.filter.common.FilterControlledPermanent;
+import mage.game.permanent.token.DinosaurVanillaToken;
import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
@@ -22,30 +29,74 @@ import java.util.UUID;
/**
* @author Susucr
*/
-public final class HuatliPoetOfUnity extends CardImpl {
+public final class HuatliPoetOfUnity extends TransformingDoubleFacedCard {
+
+ private static final FilterCard filterCard = new FilterCard("Dinosaur card");
+ private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.DINOSAUR, "Dinosaurs you control");
+
+ static {
+ filterCard.add(SubType.DINOSAUR.getPredicate());
+ }
public HuatliPoetOfUnity(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
+ super(ownerId, setInfo,
+ new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WARRIOR, SubType.BARD}, "{2}{G}",
+ "Roar of the Fifth People",
+ new SuperType[]{}, new CardType[]{CardType.ENCHANTMENT}, new SubType[]{SubType.SAGA}, "RGW"
+ );
- this.supertype.add(SuperType.LEGENDARY);
- this.subtype.add(SubType.HUMAN);
- this.subtype.add(SubType.WARRIOR);
- this.subtype.add(SubType.BARD);
- this.power = new MageInt(2);
- this.toughness = new MageInt(3);
- this.secondSideCardClazz = mage.cards.r.RoarOfTheFifthPeople.class;
+ // Huatli, Poet of Unity
+ this.getLeftHalfCard().setPT(2, 3);
// When Huatli, Poet of Unity enters the battlefield, search your library for a basic land card, reveal it, put it into your hand, then shuffle.
TargetCardInLibrary target = new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND);
- this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(target, true), false));
+ this.getLeftHalfCard().addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(target, true), false));
// {3}{R/W}{R/W}: Exile Huatli, then return her to the battlefield transformed under her owner's control. Activate only as a sorcery.
- this.addAbility(new TransformAbility());
Ability ability = new ActivateAsSorceryActivatedAbility(
new ExileAndReturnSourceEffect(PutCards.BATTLEFIELD_TRANSFORMED),
new ManaCostsImpl<>("{3}{R/W}{R/W}")
);
- this.addAbility(ability);
+ this.getLeftHalfCard().addAbility(ability);
+
+ // Roar of the Fifth People
+ // (As this Saga enters and after your draw step, add a lore counter. Sacrifice after IV.)
+ SagaAbility sagaAbility = new SagaAbility(this.getRightHalfCard(), SagaChapter.CHAPTER_IV);
+
+ // I -- Create two 3/3 green Dinosaur creature tokens.
+ sagaAbility.addChapterEffect(this.getRightHalfCard(), SagaChapter.CHAPTER_I, new CreateTokenEffect(new DinosaurVanillaToken(), 2));
+
+ // II -- {this} gains "Creatures you control have '{T}: Add {R}, {G}, or {W}.'"
+ Ability gainedAbility = new mage.abilities.common.SimpleStaticAbility(new GainAbilityControlledEffect(
+ new RedManaAbility(), Duration.WhileOnBattlefield, StaticFilters.FILTER_CONTROLLED_CREATURES, false
+ ).setText("Creatures you control have '{T}: Add {R}"));
+ gainedAbility.addEffect(new GainAbilityControlledEffect(
+ new GreenManaAbility(), Duration.WhileOnBattlefield, StaticFilters.FILTER_CONTROLLED_CREATURES, false
+ ).setText(", {G}"));
+ gainedAbility.addEffect(new GainAbilityControlledEffect(
+ new WhiteManaAbility(), Duration.WhileOnBattlefield, StaticFilters.FILTER_CONTROLLED_CREATURES, false
+ ).setText(", or {W}.'"));
+
+ sagaAbility.addChapterEffect(this.getRightHalfCard(), SagaChapter.CHAPTER_II,
+ new GainAbilitySourceEffect(gainedAbility, Duration.WhileOnBattlefield)
+ .setText("{this} gains \"Creatures you control have '{T}: Add {R}, {G}, or {W}.'\""));
+
+ // III -- Search your library for a Dinosaur card, reveal it, put it into your hand, then shuffle.
+ TargetCardInLibrary target2 = new TargetCardInLibrary(filterCard);
+ sagaAbility.addChapterEffect(this.getRightHalfCard(), SagaChapter.CHAPTER_III, new SearchLibraryPutInHandEffect(target2, true));
+
+ // IV -- Dinosaurs you control gain double strike and trample until end of turn.
+ sagaAbility.addChapterEffect(
+ this.getRightHalfCard(), SagaChapter.CHAPTER_IV,
+ new GainAbilityControlledEffect(
+ DoubleStrikeAbility.getInstance(), Duration.EndOfTurn, filter
+ ).setText("Dinosaurs you control gain double strike"),
+ new GainAbilityControlledEffect(
+ TrampleAbility.getInstance(), Duration.EndOfTurn, filter
+ ).setText("and trample until end of turn")
+ );
+
+ this.getRightHalfCard().addAbility(sagaAbility);
}
private HuatliPoetOfUnity(final HuatliPoetOfUnity card) {
diff --git a/Mage.Sets/src/mage/cards/i/InheritedFiend.java b/Mage.Sets/src/mage/cards/i/InheritedFiend.java
deleted file mode 100644
index 22343bddfb5..00000000000
--- a/Mage.Sets/src/mage/cards/i/InheritedFiend.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package mage.cards.i;
-
-import mage.MageInt;
-import mage.abilities.Ability;
-import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.mana.ManaCostsImpl;
-import mage.abilities.effects.common.ExileTargetEffect;
-import mage.abilities.effects.common.counter.AddCountersSourceEffect;
-import mage.abilities.keyword.FlyingAbility;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.SubType;
-import mage.counters.CounterType;
-import mage.filter.StaticFilters;
-import mage.target.common.TargetCardInGraveyard;
-
-import java.util.UUID;
-
-/**
- * @author TheElk801
- */
-public final class InheritedFiend extends CardImpl {
-
- public InheritedFiend(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
-
- this.subtype.add(SubType.DEMON);
- this.power = new MageInt(4);
- this.toughness = new MageInt(4);
- this.color.setBlack(true);
- this.nightCard = true;
-
- // Flying
- this.addAbility(FlyingAbility.getInstance());
-
- // {2}{B}: Exile target creature card from a graveyard. Put a +1/+1 counter on Inherited Fiend.
- Ability ability = new SimpleActivatedAbility(new ExileTargetEffect(), new ManaCostsImpl<>("{2}{B}"));
- ability.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance()).concatBy("."));
- ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD));
- this.addAbility(ability);
- }
-
- private InheritedFiend(final InheritedFiend card) {
- super(card);
- }
-
- @Override
- public InheritedFiend copy() {
- return new InheritedFiend(this);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/l/LoneWolfOfTheNatterknolls.java b/Mage.Sets/src/mage/cards/l/LoneWolfOfTheNatterknolls.java
deleted file mode 100644
index 76c89b0d922..00000000000
--- a/Mage.Sets/src/mage/cards/l/LoneWolfOfTheNatterknolls.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package mage.cards.l;
-
-import mage.MageInt;
-import mage.abilities.common.SpellCastOpponentTriggeredAbility;
-import mage.abilities.common.WerewolfBackTriggeredAbility;
-import mage.abilities.condition.common.MyTurnCondition;
-import mage.abilities.effects.common.DrawCardSourceControllerEffect;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.SubType;
-import mage.filter.StaticFilters;
-
-import java.util.UUID;
-
-/**
- * @author LevelX2
- */
-public final class LoneWolfOfTheNatterknolls extends CardImpl {
-
- public LoneWolfOfTheNatterknolls(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
- this.subtype.add(SubType.WEREWOLF);
- this.power = new MageInt(3);
- this.toughness = new MageInt(5);
- this.color.setGreen(true);
-
- this.nightCard = true;
-
- // Whenever an opponent cast a spell during your turn, draw two cards.
- this.addAbility(new SpellCastOpponentTriggeredAbility(
- new DrawCardSourceControllerEffect(2), StaticFilters.FILTER_SPELL_A, false
- ).withTriggerCondition(MyTurnCondition.instance));
-
- // At the beginning of each upkeep, if a player cast two or more spells last turn, transform Lone Wolf of the Natterknolls.
- this.addAbility(new WerewolfBackTriggeredAbility());
- }
-
- private LoneWolfOfTheNatterknolls(final LoneWolfOfTheNatterknolls card) {
- super(card);
- }
-
- @Override
- public LoneWolfOfTheNatterknolls copy() {
- return new LoneWolfOfTheNatterknolls(this);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/m/MaladyInvoker.java b/Mage.Sets/src/mage/cards/m/MaladyInvoker.java
deleted file mode 100644
index 3a6813d19d4..00000000000
--- a/Mage.Sets/src/mage/cards/m/MaladyInvoker.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package mage.cards.m;
-
-import mage.MageInt;
-import mage.abilities.Ability;
-import mage.abilities.common.TransformIntoSourceTriggeredAbility;
-import mage.abilities.dynamicvalue.DynamicValue;
-import mage.abilities.dynamicvalue.common.SignInversionDynamicValue;
-import mage.abilities.dynamicvalue.common.SourcePermanentPowerValue;
-import mage.abilities.dynamicvalue.common.StaticValue;
-import mage.abilities.effects.common.continuous.BoostTargetEffect;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.Duration;
-import mage.constants.SubType;
-import mage.target.common.TargetOpponentsCreaturePermanent;
-
-import java.util.UUID;
-
-/**
- * @author TheElk801
- */
-public final class MaladyInvoker extends CardImpl {
-
- private static final DynamicValue xValue = new SignInversionDynamicValue(SourcePermanentPowerValue.NOT_NEGATIVE);
-
- public MaladyInvoker(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
-
- this.subtype.add(SubType.PHYREXIAN);
- this.subtype.add(SubType.TREEFOLK);
- this.power = new MageInt(3);
- this.toughness = new MageInt(3);
- this.color.setBlack(true);
- this.color.setGreen(true);
- this.nightCard = true;
-
- // When this creature transforms into Malady Invoker, target creature an opponent controls gets -0/-X until end of turn, where X is Malady Invoker's power.
- Ability ability = new TransformIntoSourceTriggeredAbility(new BoostTargetEffect(
- StaticValue.get(0), xValue, Duration.EndOfTurn
- ).setText("target creature an opponent controls gets -0/-X until end of turn, where X is {this}'s power"));
- ability.addTarget(new TargetOpponentsCreaturePermanent());
- this.addAbility(ability);
- }
-
- private MaladyInvoker(final MaladyInvoker card) {
- super(card);
- }
-
- @Override
- public MaladyInvoker copy() {
- return new MaladyInvoker(this);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/p/PhyrexianSkyflayer.java b/Mage.Sets/src/mage/cards/p/PhyrexianSkyflayer.java
deleted file mode 100644
index 765afc12b0d..00000000000
--- a/Mage.Sets/src/mage/cards/p/PhyrexianSkyflayer.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package mage.cards.p;
-
-import mage.MageInt;
-import mage.abilities.keyword.FlyingAbility;
-import mage.abilities.keyword.HasteAbility;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.SubType;
-
-import java.util.UUID;
-
-/**
- * @author TheElk801
- */
-public final class PhyrexianSkyflayer extends CardImpl {
-
- public PhyrexianSkyflayer(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
-
- this.subtype.add(SubType.PHYREXIAN);
- this.subtype.add(SubType.ARTIFICER);
- this.power = new MageInt(3);
- this.toughness = new MageInt(4);
- this.color.setWhite(true);
- this.color.setRed(true);
- this.nightCard = true;
-
- // Flying
- this.addAbility(FlyingAbility.getInstance());
-
- // Haste
- this.addAbility(HasteAbility.getInstance());
- }
-
- private PhyrexianSkyflayer(final PhyrexianSkyflayer card) {
- super(card);
- }
-
- @Override
- public PhyrexianSkyflayer copy() {
- return new PhyrexianSkyflayer(this);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/r/RiphookRaider.java b/Mage.Sets/src/mage/cards/r/RiphookRaider.java
deleted file mode 100644
index f423c55b5f8..00000000000
--- a/Mage.Sets/src/mage/cards/r/RiphookRaider.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package mage.cards.r;
-
-import mage.MageInt;
-import mage.abilities.keyword.DauntAbility;
-import mage.abilities.keyword.NightboundAbility;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.SubType;
-
-import java.util.UUID;
-
-/**
- * @author TheElk801
- */
-public final class RiphookRaider extends CardImpl {
-
- public RiphookRaider(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
-
- this.subtype.add(SubType.WEREWOLF);
- this.power = new MageInt(6);
- this.toughness = new MageInt(4);
- this.color.setGreen(true);
- this.nightCard = true;
-
- // Riphook Raider can't be blocked by creatures with power 2 or less.
- this.addAbility(new DauntAbility());
-
- // Nightbound
- this.addAbility(new NightboundAbility());
- }
-
- private RiphookRaider(final RiphookRaider card) {
- super(card);
- }
-
- @Override
- public RiphookRaider copy() {
- return new RiphookRaider(this);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/r/RoarOfTheFifthPeople.java b/Mage.Sets/src/mage/cards/r/RoarOfTheFifthPeople.java
deleted file mode 100644
index 6a4bbba19af..00000000000
--- a/Mage.Sets/src/mage/cards/r/RoarOfTheFifthPeople.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package mage.cards.r;
-
-import mage.abilities.Ability;
-import mage.abilities.common.SagaAbility;
-import mage.abilities.common.SimpleStaticAbility;
-import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
-import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
-import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
-import mage.abilities.keyword.DoubleStrikeAbility;
-import mage.abilities.keyword.TrampleAbility;
-import mage.abilities.mana.GreenManaAbility;
-import mage.abilities.mana.RedManaAbility;
-import mage.abilities.mana.WhiteManaAbility;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.Duration;
-import mage.constants.SagaChapter;
-import mage.constants.SubType;
-import mage.filter.FilterCard;
-import mage.filter.StaticFilters;
-import mage.filter.common.FilterControlledPermanent;
-import mage.game.permanent.token.DinosaurVanillaToken;
-import mage.target.common.TargetCardInLibrary;
-
-import java.util.UUID;
-
-/**
- * @author Susucr
- */
-public final class RoarOfTheFifthPeople extends CardImpl {
-
- private static final FilterCard filterCard = new FilterCard("Dinosaur card");
- private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.DINOSAUR, "Dinosaurs you control");
-
- static {
- filterCard.add(SubType.DINOSAUR.getPredicate());
- }
-
- public RoarOfTheFifthPeople(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "");
-
- this.color.setWhite(true);
- this.color.setGreen(true);
- this.color.setRed(true);
- this.subtype.add(SubType.SAGA);
- this.nightCard = true;
-
- // (As this Saga enters and after your draw step, add a lore counter. Sacrifice after IV.)
- SagaAbility sagaAbility = new SagaAbility(this, SagaChapter.CHAPTER_IV);
-
- // I -- Create two 3/3 green Dinosaur creature tokens.
- sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_I, new CreateTokenEffect(new DinosaurVanillaToken(), 2));
-
- // II -- Roar of the Fifth People gains "Creatures you control have '{T}: Add {R}, {G}, or {W}.'"
-
- // Note: splitting the mana ability in 3 makes it easier on the UI.
- Ability gainedAbility = new SimpleStaticAbility(new GainAbilityControlledEffect(
- new RedManaAbility(), Duration.WhileOnBattlefield, StaticFilters.FILTER_CONTROLLED_CREATURES, false
- ).setText("Creatures you control have '{T}: Add {R}"));
- gainedAbility.addEffect(new GainAbilityControlledEffect(
- new GreenManaAbility(), Duration.WhileOnBattlefield, StaticFilters.FILTER_CONTROLLED_CREATURES, false
- ).setText(", {G}"));
- gainedAbility.addEffect(new GainAbilityControlledEffect(
- new WhiteManaAbility(), Duration.WhileOnBattlefield, StaticFilters.FILTER_CONTROLLED_CREATURES, false
- ).setText(", or {W}.'"));
-
- sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_II,
- new GainAbilitySourceEffect(gainedAbility, Duration.WhileOnBattlefield)
- .setText("{this} gains \"Creatures you control have '{T}: Add {R}, {G}, or {W}.'\"")
- );
-
- // III -- Search your library for a Dinosaur card, reveal it, put it into your hand, then shuffle.
- TargetCardInLibrary target = new TargetCardInLibrary(filterCard);
- sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III, new SearchLibraryPutInHandEffect(target, true));
-
- // IV -- Dinosaurs you control gain double strike and trample until end of turn.
- sagaAbility.addChapterEffect(
- this, SagaChapter.CHAPTER_IV,
- new GainAbilityControlledEffect(
- DoubleStrikeAbility.getInstance(), Duration.EndOfTurn, filter
- ).setText("Dinosaurs you control gain double strike"),
- new GainAbilityControlledEffect(
- TrampleAbility.getInstance(), Duration.EndOfTurn, filter
- ).setText("and trample until end of turn")
- );
-
- this.addAbility(sagaAbility);
- }
-
- private RoarOfTheFifthPeople(final RoarOfTheFifthPeople card) {
- super(card);
- }
-
- @Override
- public RoarOfTheFifthPeople copy() {
- return new RoarOfTheFifthPeople(this);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/s/ScroungedScythe.java b/Mage.Sets/src/mage/cards/s/ScroungedScythe.java
deleted file mode 100644
index 0d3e7b0075b..00000000000
--- a/Mage.Sets/src/mage/cards/s/ScroungedScythe.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package mage.cards.s;
-
-import mage.abilities.common.SimpleStaticAbility;
-import mage.abilities.condition.Condition;
-import mage.abilities.condition.common.EquippedHasSubtypeCondition;
-import mage.abilities.decorator.ConditionalContinuousEffect;
-import mage.abilities.effects.common.continuous.BoostEquippedEffect;
-import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
-import mage.abilities.keyword.EquipAbility;
-import mage.abilities.keyword.MenaceAbility;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.constants.AttachmentType;
-import mage.constants.CardType;
-import mage.constants.SubType;
-
-import java.util.UUID;
-
-/**
- * @author fireshoes
- */
-public final class ScroungedScythe extends CardImpl {
-
- private static final Condition condition = new EquippedHasSubtypeCondition(SubType.HUMAN);
-
- public ScroungedScythe(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "");
- this.subtype.add(SubType.EQUIPMENT);
-
- this.nightCard = true;
-
- // Equipped creature gets +1/+1.
- this.addAbility(new SimpleStaticAbility(new BoostEquippedEffect(1, 1)));
-
- // As long as equipped creature is a Human, it has menace.
- this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
- new GainAbilityAttachedEffect(new MenaceAbility(false), AttachmentType.EQUIPMENT),
- condition, "As long as equipped creature is a Human, it has menace. " +
- "(It can't be blocked except by two or more creatures.)"
- )));
-
- // Equip {2}
- this.addAbility(new EquipAbility(2, false));
- }
-
- private ScroungedScythe(final ScroungedScythe card) {
- super(card);
- }
-
- @Override
- public ScroungedScythe copy() {
- return new ScroungedScythe(this);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/u/UntamedPup.java b/Mage.Sets/src/mage/cards/u/UntamedPup.java
deleted file mode 100644
index 4dbcd4007c9..00000000000
--- a/Mage.Sets/src/mage/cards/u/UntamedPup.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package mage.cards.u;
-
-import mage.MageInt;
-import mage.abilities.Ability;
-import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.common.SimpleStaticAbility;
-import mage.abilities.costs.mana.ManaCostsImpl;
-import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
-import mage.abilities.effects.common.counter.AddCountersTargetEffect;
-import mage.abilities.keyword.NightboundAbility;
-import mage.abilities.keyword.TrampleAbility;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.Duration;
-import mage.constants.SubType;
-import mage.counters.CounterType;
-import mage.filter.FilterPermanent;
-import mage.filter.predicate.Predicates;
-import mage.target.common.TargetCreaturePermanent;
-
-import java.util.UUID;
-
-/**
- * @author TheElk801
- */
-public final class UntamedPup extends CardImpl {
-
- private static final FilterPermanent filter = new FilterPermanent("Wolves and Werewolves");
-
- static {
- filter.add(Predicates.or(
- SubType.WOLF.getPredicate(),
- SubType.WEREWOLF.getPredicate()
- ));
- }
-
- public UntamedPup(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
-
- this.subtype.add(SubType.WEREWOLF);
- this.power = new MageInt(4);
- this.toughness = new MageInt(4);
- this.color.setGreen(true);
- this.nightCard = true;
-
- // Trample
- this.addAbility(TrampleAbility.getInstance());
-
- // Other Wolves and Werewolves you control have trample.
- this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
- TrampleAbility.getInstance(), Duration.WhileOnBattlefield, filter, true
- )));
-
- // {3}{G}: Put a +1/+1 counter on target creature.
- Ability ability = new SimpleActivatedAbility(
- new AddCountersTargetEffect(CounterType.P1P1.createInstance()), new ManaCostsImpl<>("{3}{G}")
- );
- ability.addTarget(new TargetCreaturePermanent());
- this.addAbility(ability);
-
- // Nightbound
- this.addAbility(new NightboundAbility());
- }
-
- private UntamedPup(final UntamedPup card) {
- super(card);
- }
-
- @Override
- public UntamedPup copy() {
- return new UntamedPup(this);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/v/VesselOfTheAllConsuming.java b/Mage.Sets/src/mage/cards/v/VesselOfTheAllConsuming.java
deleted file mode 100644
index a4ac3365a20..00000000000
--- a/Mage.Sets/src/mage/cards/v/VesselOfTheAllConsuming.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package mage.cards.v;
-
-import mage.MageInt;
-import mage.MageObjectReference;
-import mage.abilities.Ability;
-import mage.abilities.common.DealsDamageSourceTriggeredAbility;
-import mage.abilities.common.DealsDamageToAPlayerTriggeredAbility;
-import mage.abilities.condition.Condition;
-import mage.abilities.effects.common.LoseGameTargetPlayerEffect;
-import mage.abilities.effects.common.counter.AddCountersSourceEffect;
-import mage.abilities.keyword.TrampleAbility;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.SubType;
-import mage.constants.WatcherScope;
-import mage.counters.CounterType;
-import mage.game.Game;
-import mage.game.events.GameEvent;
-import mage.game.permanent.Permanent;
-import mage.watchers.Watcher;
-
-import java.util.AbstractMap;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.UUID;
-
-/**
- * @author TheElk801
- */
-public final class VesselOfTheAllConsuming extends CardImpl {
-
- public VesselOfTheAllConsuming(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "");
-
- this.subtype.add(SubType.OGRE);
- this.subtype.add(SubType.SHAMAN);
- this.power = new MageInt(3);
- this.toughness = new MageInt(3);
- this.color.setBlack(true);
- this.color.setRed(true);
- this.nightCard = true;
-
- // Trample
- this.addAbility(TrampleAbility.getInstance());
-
- // Whenever Vessel of the All-Consuming deals damage, put a +1/+1 counter on it.
- this.addAbility(new DealsDamageSourceTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance())));
-
- // Whenever Vessel of the All-Consuming deals damage to a player, if it has dealt 10 or more damage to that player this turn, they lose the game.
- this.addAbility(new DealsDamageToAPlayerTriggeredAbility(
- new LoseGameTargetPlayerEffect().setText("they lose the game"), false, true
- ).withInterveningIf(VesselOfTheAllConsumingCondition.instance));
- }
-
- private VesselOfTheAllConsuming(final VesselOfTheAllConsuming card) {
- super(card);
- }
-
- @Override
- public VesselOfTheAllConsuming copy() {
- return new VesselOfTheAllConsuming(this);
- }
-
- public static Watcher makeWatcher() {
- return new VesselOfTheAllConsumingWatcher();
- }
-}
-
-enum VesselOfTheAllConsumingCondition implements Condition {
- instance;
-
- @Override
- public boolean apply(Game game, Ability source) {
- return VesselOfTheAllConsumingWatcher.checkPermanent(game, source);
- }
-
- @Override
- public String toString() {
- return "it has dealt 10 or more damage to that player this turn";
- }
-}
-
-class VesselOfTheAllConsumingWatcher extends Watcher {
-
- private final Map, Integer> morMap = new HashMap<>();
-
- VesselOfTheAllConsumingWatcher() {
- super(WatcherScope.GAME);
- }
-
- @Override
- public void watch(GameEvent event, Game game) {
- if (event.getType() != GameEvent.EventType.DAMAGED_PLAYER) {
- return;
- }
- Permanent permanent = game.getPermanent(event.getSourceId());
- if (permanent != null) {
- int damage = event.getAmount();
- morMap.compute(new AbstractMap.SimpleImmutableEntry(new MageObjectReference(permanent, game), event.getTargetId()),
- (u, i) -> i == null ? damage : Integer.sum(i, damage));
- }
- }
-
- @Override
- public void reset() {
- super.reset();
- morMap.clear();
- }
-
- static boolean checkPermanent(Game game, Ability source) {
- Map, Integer> morMap = game.getState()
- .getWatcher(VesselOfTheAllConsumingWatcher.class)
- .morMap;
- Entry key = new AbstractMap.SimpleImmutableEntry(
- new MageObjectReference(game.getPermanent(source.getSourceId()), game),
- source.getEffects().get(0).getTargetPointer().getFirst(game, source));
- return morMap.getOrDefault(key, 0) >= 10;
- }
-}
diff --git a/Mage.Sets/src/mage/cards/w/WestvaleCultLeader.java b/Mage.Sets/src/mage/cards/w/WestvaleCultLeader.java
deleted file mode 100644
index 2cdb7950a39..00000000000
--- a/Mage.Sets/src/mage/cards/w/WestvaleCultLeader.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package mage.cards.w;
-
-import mage.MageInt;
-import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
-import mage.abilities.common.SimpleStaticAbility;
-import mage.abilities.dynamicvalue.common.CreaturesYouControlCount;
-import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.effects.common.continuous.SetBasePowerToughnessSourceEffect;
-import mage.abilities.hint.common.CreaturesYouControlHint;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.constants.*;
-import mage.game.permanent.token.HumanClericToken;
-
-import java.util.UUID;
-
-/**
- * @author fireshoes
- */
-public final class WestvaleCultLeader extends CardImpl {
-
- public WestvaleCultLeader(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
- this.subtype.add(SubType.HUMAN);
- this.subtype.add(SubType.CLERIC);
- this.power = new MageInt(0);
- this.toughness = new MageInt(0);
- this.color.setWhite(true);
-
- // this card is the second face of double-faced card
- this.nightCard = true;
-
- // Westvale Cult Leader's power and toughness are each equal to the number of creatures you control.
- this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetBasePowerToughnessSourceEffect(CreaturesYouControlCount.PLURAL))
- .addHint(CreaturesYouControlHint.instance));
-
- // At the beginning of your end step, create a 1/1 white and black Human Cleric creature token.
- this.addAbility(new BeginningOfEndStepTriggeredAbility(new CreateTokenEffect(new HumanClericToken())));
- }
-
- private WestvaleCultLeader(final WestvaleCultLeader card) {
- super(card);
- }
-
- @Override
- public WestvaleCultLeader copy() {
- return new WestvaleCultLeader(this);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/w/WildsongHowler.java b/Mage.Sets/src/mage/cards/w/WildsongHowler.java
deleted file mode 100644
index dad0a4f2a96..00000000000
--- a/Mage.Sets/src/mage/cards/w/WildsongHowler.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package mage.cards.w;
-
-import mage.MageInt;
-import mage.abilities.common.TransformsOrEntersTriggeredAbility;
-import mage.abilities.effects.common.LookLibraryAndPickControllerEffect;
-import mage.abilities.keyword.NightboundAbility;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.PutCards;
-import mage.constants.SubType;
-import mage.filter.StaticFilters;
-
-import java.util.UUID;
-
-/**
- * @author TheElk801
- */
-public final class WildsongHowler extends CardImpl {
-
- public WildsongHowler(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
-
- this.subtype.add(SubType.WEREWOLF);
- this.power = new MageInt(4);
- this.toughness = new MageInt(4);
- this.color.setGreen(true);
- this.nightCard = true;
-
- // Whenever this creature enters the battlefield or transforms into Wildsong Howler, look at the top six cards of your library.
- // You may reveal a creature card from among them and put it into your hand.
- // Put the rest on the bottom of your library in a random order.
- this.addAbility(new TransformsOrEntersTriggeredAbility(
- new LookLibraryAndPickControllerEffect(6, 1, StaticFilters.FILTER_CARD_CREATURE_A, PutCards.HAND, PutCards.BOTTOM_RANDOM),
- false));
-
- // Nightbound
- this.addAbility(new NightboundAbility());
- }
-
- private WildsongHowler(final WildsongHowler card) {
- super(card);
- }
-
- @Override
- public WildsongHowler copy() {
- return new WildsongHowler(this);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/w/WingedTempleOfOrazca.java b/Mage.Sets/src/mage/cards/w/WingedTempleOfOrazca.java
deleted file mode 100644
index 8b286c53754..00000000000
--- a/Mage.Sets/src/mage/cards/w/WingedTempleOfOrazca.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package mage.cards.w;
-
-import mage.abilities.Ability;
-import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.common.TapSourceCost;
-import mage.abilities.costs.mana.ManaCostsImpl;
-import mage.abilities.effects.ContinuousEffect;
-import mage.abilities.effects.OneShotEffect;
-import mage.abilities.effects.common.continuous.BoostTargetEffect;
-import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
-import mage.abilities.keyword.FlyingAbility;
-import mage.abilities.mana.AnyColorManaAbility;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.constants.*;
-import mage.game.Game;
-import mage.game.permanent.Permanent;
-import mage.target.common.TargetControlledCreaturePermanent;
-import mage.target.targetpointer.FixedTarget;
-
-import java.util.UUID;
-
-/**
- *
- * @author LevelX2
- */
-public final class WingedTempleOfOrazca extends CardImpl {
-
- public WingedTempleOfOrazca(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
-
- this.supertype.add(SuperType.LEGENDARY);
-
- this.nightCard = true;
-
- // (Transforms from Hadana's Climb.)
-
- // {T}: Add one mana of any color.
- this.addAbility(new AnyColorManaAbility());
-
- // {1}{G}{U}, {T}: Target creature you control gains flying and gets +X/+X until end of turn, where X is its power.
- Ability ability = new SimpleActivatedAbility(new WingedTempleOfOrazcaEffect(), new ManaCostsImpl<>("{1}{G}{U}"));
- ability.addCost(new TapSourceCost());
- ability.addTarget(new TargetControlledCreaturePermanent());
- this.addAbility(ability);
- }
-
- private WingedTempleOfOrazca(final WingedTempleOfOrazca card) {
- super(card);
- }
-
- @Override
- public WingedTempleOfOrazca copy() {
- return new WingedTempleOfOrazca(this);
- }
-}
-
-class WingedTempleOfOrazcaEffect extends OneShotEffect {
-
- WingedTempleOfOrazcaEffect() {
- super(Outcome.Benefit);
- this.staticText = "target creature you control gains flying and gets +X/+X until end of turn, where X is its power";
- }
-
- private WingedTempleOfOrazcaEffect(final WingedTempleOfOrazcaEffect effect) {
- super(effect);
- }
-
- @Override
- public WingedTempleOfOrazcaEffect copy() {
- return new WingedTempleOfOrazcaEffect(this);
- }
-
- @Override
- public boolean apply(Game game, Ability source) {
- Permanent creature = game.getPermanent(getTargetPointer().getFirst(game, source));
- if (creature != null && creature.isCreature(game)) {
- int pow = creature.getPower().getValue();
- ContinuousEffect effect = new BoostTargetEffect(pow, pow, Duration.EndOfTurn);
- effect.setTargetPointer(new FixedTarget(creature, game));
- game.addEffect(effect, source);
- effect = new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn);
- effect.setTargetPointer(new FixedTarget(creature, game));
- game.addEffect(effect, source);
- }
- return true;
- }
-}
diff --git a/Mage.Sets/src/mage/sets/DarkAscension.java b/Mage.Sets/src/mage/sets/DarkAscension.java
index 0514b53479c..695dec3f829 100644
--- a/Mage.Sets/src/mage/sets/DarkAscension.java
+++ b/Mage.Sets/src/mage/sets/DarkAscension.java
@@ -119,7 +119,6 @@ public final class DarkAscension extends ExpansionSet {
cards.add(new SetCardInfo("Helvault", 151, Rarity.MYTHIC, mage.cards.h.Helvault.class));
cards.add(new SetCardInfo("Highborn Ghoul", 68, Rarity.COMMON, mage.cards.h.HighbornGhoul.class));
cards.add(new SetCardInfo("Hinterland Hermit", 94, Rarity.COMMON, mage.cards.h.HinterlandHermit.class));
- cards.add(new SetCardInfo("Hinterland Scourge", 94, Rarity.COMMON, mage.cards.h.HinterlandScourge.class));
cards.add(new SetCardInfo("Hollowhenge Beast", 118, Rarity.COMMON, mage.cards.h.HollowhengeBeast.class));
cards.add(new SetCardInfo("Hollowhenge Spirit", 10, Rarity.UNCOMMON, mage.cards.h.HollowhengeSpirit.class));
cards.add(new SetCardInfo("Hunger of the Howlpack", 119, Rarity.COMMON, mage.cards.h.HungerOfTheHowlpack.class));
diff --git a/Mage.Sets/src/mage/sets/Innistrad.java b/Mage.Sets/src/mage/sets/Innistrad.java
index da91f42dbd5..0db4878763a 100644
--- a/Mage.Sets/src/mage/sets/Innistrad.java
+++ b/Mage.Sets/src/mage/sets/Innistrad.java
@@ -48,7 +48,6 @@ public final class Innistrad extends ExpansionSet {
cards.add(new SetCardInfo("Avacynian Priest", 4, Rarity.COMMON, mage.cards.a.AvacynianPriest.class));
cards.add(new SetCardInfo("Back from the Brink", 44, Rarity.RARE, mage.cards.b.BackFromTheBrink.class));
cards.add(new SetCardInfo("Balefire Dragon", 129, Rarity.MYTHIC, mage.cards.b.BalefireDragon.class));
- cards.add(new SetCardInfo("Bane of Hanweir", 145, Rarity.UNCOMMON, mage.cards.b.BaneOfHanweir.class));
cards.add(new SetCardInfo("Battleground Geist", 45, Rarity.UNCOMMON, mage.cards.b.BattlegroundGeist.class));
cards.add(new SetCardInfo("Bitterheart Witch", 88, Rarity.UNCOMMON, mage.cards.b.BitterheartWitch.class));
cards.add(new SetCardInfo("Blasphemous Act", 130, Rarity.RARE, mage.cards.b.BlasphemousAct.class));
diff --git a/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java b/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java
index 3b20bb905a6..ff32e1a9792 100644
--- a/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java
+++ b/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java
@@ -235,9 +235,6 @@ public final class InnistradCrimsonVow extends ExpansionSet {
cards.add(new SetCardInfo("Henrika Domnathi", 119, Rarity.MYTHIC, mage.cards.h.HenrikaDomnathi.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Henrika Domnathi", 293, Rarity.MYTHIC, mage.cards.h.HenrikaDomnathi.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Henrika Domnathi", 335, Rarity.MYTHIC, mage.cards.h.HenrikaDomnathi.class, NON_FULL_USE_VARIOUS));
- cards.add(new SetCardInfo("Henrika, Infernal Seer", 119, Rarity.MYTHIC, mage.cards.h.HenrikaInfernalSeer.class, NON_FULL_USE_VARIOUS));
- cards.add(new SetCardInfo("Henrika, Infernal Seer", 293, Rarity.MYTHIC, mage.cards.h.HenrikaInfernalSeer.class, NON_FULL_USE_VARIOUS));
- cards.add(new SetCardInfo("Henrika, Infernal Seer", 335, Rarity.MYTHIC, mage.cards.h.HenrikaInfernalSeer.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Hero's Downfall", 120, Rarity.UNCOMMON, mage.cards.h.HerosDownfall.class));
cards.add(new SetCardInfo("Heron of Hope", 18, Rarity.COMMON, mage.cards.h.HeronOfHope.class));
cards.add(new SetCardInfo("Heron-Blessed Geist", 19, Rarity.COMMON, mage.cards.h.HeronBlessedGeist.class));
@@ -372,7 +369,6 @@ public final class InnistradCrimsonVow extends ExpansionSet {
cards.add(new SetCardInfo("Restless Bloodseeker", 128, Rarity.UNCOMMON, mage.cards.r.RestlessBloodseeker.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Restless Bloodseeker", 295, Rarity.UNCOMMON, mage.cards.r.RestlessBloodseeker.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Retrieve", 215, Rarity.UNCOMMON, mage.cards.r.Retrieve.class));
- cards.add(new SetCardInfo("Riphook Raider", 203, Rarity.COMMON, mage.cards.r.RiphookRaider.class));
cards.add(new SetCardInfo("Rot-Tide Gargantua", 129, Rarity.COMMON, mage.cards.r.RotTideGargantua.class));
cards.add(new SetCardInfo("Runebound Wolf", 176, Rarity.UNCOMMON, mage.cards.r.RuneboundWolf.class));
cards.add(new SetCardInfo("Runo Stromkirk", 246, Rarity.RARE, mage.cards.r.RunoStromkirk.class, NON_FULL_USE_VARIOUS));
@@ -488,8 +484,6 @@ public final class InnistradCrimsonVow extends ExpansionSet {
cards.add(new SetCardInfo("Welcoming Vampire", 287, Rarity.RARE, mage.cards.w.WelcomingVampire.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Welcoming Vampire", 46, Rarity.RARE, mage.cards.w.WelcomingVampire.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Whispering Wizard", 88, Rarity.UNCOMMON, mage.cards.w.WhisperingWizard.class));
- cards.add(new SetCardInfo("Wildsong Howler", 205, Rarity.RARE, mage.cards.w.WildsongHowler.class, NON_FULL_USE_VARIOUS));
- cards.add(new SetCardInfo("Wildsong Howler", 392, Rarity.RARE, mage.cards.w.WildsongHowler.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Winged Portent", 365, Rarity.RARE, mage.cards.w.WingedPortent.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Winged Portent", 89, Rarity.RARE, mage.cards.w.WingedPortent.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Witch's Web", 227, Rarity.COMMON, mage.cards.w.WitchsWeb.class));
diff --git a/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java b/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java
index a07389c7fc3..d8340b7fea4 100644
--- a/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java
+++ b/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java
@@ -144,7 +144,6 @@ public final class InnistradDoubleFeature extends ExpansionSet {
cards.add(new SetCardInfo("Cradle of Safety", 321, Rarity.COMMON, mage.cards.c.CradleOfSafety.class));
cards.add(new SetCardInfo("Crawl from the Cellar", 93, Rarity.COMMON, mage.cards.c.CrawlFromTheCellar.class));
cards.add(new SetCardInfo("Crawling Infestation", 460, Rarity.UNCOMMON, mage.cards.c.CrawlingInfestation.class));
- cards.add(new SetCardInfo("Creeping Inn", 264, Rarity.MYTHIC, mage.cards.c.CreepingInn.class));
cards.add(new SetCardInfo("Creepy Puppeteer", 418, Rarity.RARE, mage.cards.c.CreepyPuppeteer.class));
cards.add(new SetCardInfo("Croaking Counterpart", 215, Rarity.RARE, mage.cards.c.CroakingCounterpart.class));
cards.add(new SetCardInfo("Crossroads Candleguide", 253, Rarity.COMMON, mage.cards.c.CrossroadsCandleguide.class));
@@ -275,7 +274,6 @@ public final class InnistradDoubleFeature extends ExpansionSet {
cards.add(new SetCardInfo("Hallowed Haunting", 284, Rarity.MYTHIC, mage.cards.h.HallowedHaunting.class));
cards.add(new SetCardInfo("Hallowed Respite", 227, Rarity.RARE, mage.cards.h.HallowedRespite.class));
cards.add(new SetCardInfo("Hamlet Vanguard", 468, Rarity.RARE, mage.cards.h.HamletVanguard.class));
- cards.add(new SetCardInfo("Harvesttide Assailant", 143, Rarity.COMMON, mage.cards.h.HarvesttideAssailant.class));
cards.add(new SetCardInfo("Harvesttide Infiltrator", 143, Rarity.COMMON, mage.cards.h.HarvesttideInfiltrator.class));
cards.add(new SetCardInfo("Harvesttide Sentry", 186, Rarity.COMMON, mage.cards.h.HarvesttideSentry.class));
cards.add(new SetCardInfo("Hauken's Insight", 332, Rarity.MYTHIC, mage.cards.h.HaukensInsight.class));
@@ -284,7 +282,6 @@ public final class InnistradDoubleFeature extends ExpansionSet {
cards.add(new SetCardInfo("Hedgewitch's Mask", 23, Rarity.COMMON, mage.cards.h.HedgewitchsMask.class));
cards.add(new SetCardInfo("Heirloom Mirror", 105, Rarity.UNCOMMON, mage.cards.h.HeirloomMirror.class));
cards.add(new SetCardInfo("Henrika Domnathi", 386, Rarity.MYTHIC, mage.cards.h.HenrikaDomnathi.class));
- cards.add(new SetCardInfo("Henrika, Infernal Seer", 386, Rarity.MYTHIC, mage.cards.h.HenrikaInfernalSeer.class));
cards.add(new SetCardInfo("Hero's Downfall", 387, Rarity.UNCOMMON, mage.cards.h.HerosDownfall.class));
cards.add(new SetCardInfo("Heron of Hope", 285, Rarity.COMMON, mage.cards.h.HeronOfHope.class));
cards.add(new SetCardInfo("Heron-Blessed Geist", 286, Rarity.COMMON, mage.cards.h.HeronBlessedGeist.class));
@@ -309,7 +306,6 @@ public final class InnistradDoubleFeature extends ExpansionSet {
cards.add(new SetCardInfo("Infernal Grasp", 107, Rarity.UNCOMMON, mage.cards.i.InfernalGrasp.class));
cards.add(new SetCardInfo("Infestation Expert", 473, Rarity.UNCOMMON, mage.cards.i.InfestationExpert.class));
cards.add(new SetCardInfo("Infested Werewolf", 473, Rarity.UNCOMMON, mage.cards.i.InfestedWerewolf.class));
- cards.add(new SetCardInfo("Inherited Fiend", 105, Rarity.UNCOMMON, mage.cards.i.InheritedFiend.class));
cards.add(new SetCardInfo("Innocent Traveler", 388, Rarity.UNCOMMON, mage.cards.i.InnocentTraveler.class));
cards.add(new SetCardInfo("Inspired Idea", 331, Rarity.RARE, mage.cards.i.InspiredIdea.class));
cards.add(new SetCardInfo("Into the Night", 430, Rarity.UNCOMMON, mage.cards.i.IntoTheNight.class));
@@ -447,7 +443,6 @@ public final class InnistradDoubleFeature extends ExpansionSet {
cards.add(new SetCardInfo("Retrieve", 482, Rarity.UNCOMMON, mage.cards.r.Retrieve.class));
cards.add(new SetCardInfo("Return to Nature", 195, Rarity.COMMON, mage.cards.r.ReturnToNature.class));
cards.add(new SetCardInfo("Revenge of the Drowned", 72, Rarity.COMMON, mage.cards.r.RevengeOfTheDrowned.class));
- cards.add(new SetCardInfo("Riphook Raider", 470, Rarity.COMMON, mage.cards.r.RiphookRaider.class));
cards.add(new SetCardInfo("Rise of the Ants", 196, Rarity.UNCOMMON, mage.cards.r.RiseOfTheAnts.class));
cards.add(new SetCardInfo("Rite of Harmony", 236, Rarity.RARE, mage.cards.r.RiteOfHarmony.class));
cards.add(new SetCardInfo("Rite of Oblivion", 237, Rarity.UNCOMMON, mage.cards.r.RiteOfOblivion.class));
@@ -570,7 +565,6 @@ public final class InnistradDoubleFeature extends ExpansionSet {
cards.add(new SetCardInfo("Unnatural Growth", 206, Rarity.RARE, mage.cards.u.UnnaturalGrowth.class));
cards.add(new SetCardInfo("Unnatural Moonrise", 247, Rarity.UNCOMMON, mage.cards.u.UnnaturalMoonrise.class));
cards.add(new SetCardInfo("Unruly Mob", 40, Rarity.COMMON, mage.cards.u.UnrulyMob.class));
- cards.add(new SetCardInfo("Untamed Pup", 187, Rarity.UNCOMMON, mage.cards.u.UntamedPup.class));
cards.add(new SetCardInfo("Vadrik, Astral Archmage", 248, Rarity.RARE, mage.cards.v.VadrikAstralArchmage.class));
cards.add(new SetCardInfo("Valorous Stance", 309, Rarity.UNCOMMON, mage.cards.v.ValorousStance.class));
cards.add(new SetCardInfo("Vampire Interloper", 125, Rarity.COMMON, mage.cards.v.VampireInterloper.class));
@@ -606,7 +600,6 @@ public final class InnistradDoubleFeature extends ExpansionSet {
cards.add(new SetCardInfo("Wedding Security", 405, Rarity.UNCOMMON, mage.cards.w.WeddingSecurity.class));
cards.add(new SetCardInfo("Welcoming Vampire", 313, Rarity.RARE, mage.cards.w.WelcomingVampire.class));
cards.add(new SetCardInfo("Whispering Wizard", 355, Rarity.UNCOMMON, mage.cards.w.WhisperingWizard.class));
- cards.add(new SetCardInfo("Wildsong Howler", 472, Rarity.RARE, mage.cards.w.WildsongHowler.class));
cards.add(new SetCardInfo("Willow Geist", 207, Rarity.RARE, mage.cards.w.WillowGeist.class));
cards.add(new SetCardInfo("Winged Portent", 356, Rarity.RARE, mage.cards.w.WingedPortent.class));
cards.add(new SetCardInfo("Winterthorn Blessing", 251, Rarity.UNCOMMON, mage.cards.w.WinterthornBlessing.class));
diff --git a/Mage.Sets/src/mage/sets/InnistradMidnightHunt.java b/Mage.Sets/src/mage/sets/InnistradMidnightHunt.java
index 5b0fe66be0b..b29263fa60c 100644
--- a/Mage.Sets/src/mage/sets/InnistradMidnightHunt.java
+++ b/Mage.Sets/src/mage/sets/InnistradMidnightHunt.java
@@ -116,8 +116,6 @@ public final class InnistradMidnightHunt extends ExpansionSet {
cards.add(new SetCardInfo("Covert Cutpurse", 92, Rarity.UNCOMMON, mage.cards.c.CovertCutpurse.class));
cards.add(new SetCardInfo("Covetous Castaway", 45, Rarity.UNCOMMON, mage.cards.c.CovetousCastaway.class));
cards.add(new SetCardInfo("Crawl from the Cellar", 93, Rarity.COMMON, mage.cards.c.CrawlFromTheCellar.class));
- cards.add(new SetCardInfo("Creeping Inn", 264, Rarity.MYTHIC, mage.cards.c.CreepingInn.class, NON_FULL_USE_VARIOUS));
- cards.add(new SetCardInfo("Creeping Inn", 379, Rarity.MYTHIC, mage.cards.c.CreepingInn.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Croaking Counterpart", 215, Rarity.RARE, mage.cards.c.CroakingCounterpart.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Croaking Counterpart", 369, Rarity.RARE, mage.cards.c.CroakingCounterpart.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Crossroads Candleguide", 253, Rarity.COMMON, mage.cards.c.CrossroadsCandleguide.class));
@@ -213,8 +211,6 @@ public final class InnistradMidnightHunt extends ExpansionSet {
cards.add(new SetCardInfo("Grizzly Ghoul", 226, Rarity.UNCOMMON, mage.cards.g.GrizzlyGhoul.class));
cards.add(new SetCardInfo("Hallowed Respite", 227, Rarity.RARE, mage.cards.h.HallowedRespite.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Hallowed Respite", 373, Rarity.RARE, mage.cards.h.HallowedRespite.class, NON_FULL_USE_VARIOUS));
- cards.add(new SetCardInfo("Harvesttide Assailant", 143, Rarity.COMMON, mage.cards.h.HarvesttideAssailant.class, NON_FULL_USE_VARIOUS));
- cards.add(new SetCardInfo("Harvesttide Assailant", 293, Rarity.COMMON, mage.cards.h.HarvesttideAssailant.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Harvesttide Infiltrator", 143, Rarity.COMMON, mage.cards.h.HarvesttideInfiltrator.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Harvesttide Infiltrator", 293, Rarity.COMMON, mage.cards.h.HarvesttideInfiltrator.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Harvesttide Sentry", 186, Rarity.COMMON, mage.cards.h.HarvesttideSentry.class));
@@ -233,7 +229,6 @@ public final class InnistradMidnightHunt extends ExpansionSet {
cards.add(new SetCardInfo("Immolation", 144, Rarity.COMMON, mage.cards.i.Immolation.class));
cards.add(new SetCardInfo("Infernal Grasp", 107, Rarity.UNCOMMON, mage.cards.i.InfernalGrasp.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Infernal Grasp", 389, Rarity.UNCOMMON, mage.cards.i.InfernalGrasp.class, NON_FULL_USE_VARIOUS));
- cards.add(new SetCardInfo("Inherited Fiend", 105, Rarity.UNCOMMON, mage.cards.i.InheritedFiend.class));
cards.add(new SetCardInfo("Intrepid Adversary", 25, Rarity.MYTHIC, mage.cards.i.IntrepidAdversary.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Intrepid Adversary", 329, Rarity.MYTHIC, mage.cards.i.IntrepidAdversary.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Island", 270, Rarity.LAND, mage.cards.basiclands.Island.class, FULL_ART_BFZ_VARIOUS));
@@ -452,8 +447,6 @@ public final class InnistradMidnightHunt extends ExpansionSet {
cards.add(new SetCardInfo("Unnatural Growth", 365, Rarity.RARE, mage.cards.u.UnnaturalGrowth.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Unnatural Moonrise", 247, Rarity.UNCOMMON, mage.cards.u.UnnaturalMoonrise.class));
cards.add(new SetCardInfo("Unruly Mob", 40, Rarity.COMMON, mage.cards.u.UnrulyMob.class));
- cards.add(new SetCardInfo("Untamed Pup", 187, Rarity.UNCOMMON, mage.cards.u.UntamedPup.class, NON_FULL_USE_VARIOUS));
- cards.add(new SetCardInfo("Untamed Pup", 302, Rarity.UNCOMMON, mage.cards.u.UntamedPup.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Vadrik, Astral Archmage", 248, Rarity.RARE, mage.cards.v.VadrikAstralArchmage.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Vadrik, Astral Archmage", 325, Rarity.RARE, mage.cards.v.VadrikAstralArchmage.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Vampire Interloper", 125, Rarity.COMMON, mage.cards.v.VampireInterloper.class));
diff --git a/Mage.Sets/src/mage/sets/InnistradRemastered.java b/Mage.Sets/src/mage/sets/InnistradRemastered.java
index b7e16be6fd4..d9fbc5da324 100644
--- a/Mage.Sets/src/mage/sets/InnistradRemastered.java
+++ b/Mage.Sets/src/mage/sets/InnistradRemastered.java
@@ -63,7 +63,6 @@ public class InnistradRemastered extends ExpansionSet {
cards.add(new SetCardInfo("Awoken Horror", 460, Rarity.RARE, mage.cards.a.AwokenHorror.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Awoken Horror", 91, Rarity.RARE, mage.cards.a.AwokenHorror.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Balefire Dragon", 479, Rarity.MYTHIC, mage.cards.b.BalefireDragon.class, RETRO_ART));
- cards.add(new SetCardInfo("Bane of Hanweir", 158, Rarity.COMMON, mage.cards.b.BaneOfHanweir.class));
cards.add(new SetCardInfo("Battleground Geist", 53, Rarity.COMMON, mage.cards.b.BattlegroundGeist.class));
cards.add(new SetCardInfo("Bedlam Reveler", 142, Rarity.RARE, mage.cards.b.BedlamReveler.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Bedlam Reveler", 312, Rarity.RARE, mage.cards.b.BedlamReveler.class, NON_FULL_USE_VARIOUS));
@@ -404,7 +403,6 @@ public class InnistradRemastered extends ExpansionSet {
cards.add(new SetCardInfo("Savage Alliance", 169, Rarity.UNCOMMON, mage.cards.s.SavageAlliance.class));
cards.add(new SetCardInfo("Scorned Villager", 212, Rarity.COMMON, mage.cards.s.ScornedVillager.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Scorned Villager", 468, Rarity.COMMON, mage.cards.s.ScornedVillager.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Scrounged Scythe", 265, Rarity.COMMON, mage.cards.s.ScroungedScythe.class));
cards.add(new SetCardInfo("Second Harvest", 213, Rarity.RARE, mage.cards.s.SecondHarvest.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Second Harvest", 417, Rarity.RARE, mage.cards.s.SecondHarvest.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Seize the Storm", 170, Rarity.COMMON, mage.cards.s.SeizeTheStorm.class, NON_FULL_USE_VARIOUS));
diff --git a/Mage.Sets/src/mage/sets/JumpstartHistoricHorizons.java b/Mage.Sets/src/mage/sets/JumpstartHistoricHorizons.java
index b2c2b9b6e99..08b6d104555 100644
--- a/Mage.Sets/src/mage/sets/JumpstartHistoricHorizons.java
+++ b/Mage.Sets/src/mage/sets/JumpstartHistoricHorizons.java
@@ -170,7 +170,6 @@ public final class JumpstartHistoricHorizons extends ExpansionSet {
cards.add(new SetCardInfo("Haunted Dead", 336, Rarity.UNCOMMON, mage.cards.h.HauntedDead.class));
cards.add(new SetCardInfo("Healer's Flock", 91, Rarity.UNCOMMON, mage.cards.h.HealersFlock.class));
cards.add(new SetCardInfo("Heir of Falkenrath", 338, Rarity.UNCOMMON, mage.cards.h.HeirOfFalkenrath.class));
- cards.add(new SetCardInfo("Heir to the Night", 338, Rarity.UNCOMMON, mage.cards.h.HeirToTheNight.class));
cards.add(new SetCardInfo("Hell Mongrel", 339, Rarity.COMMON, mage.cards.h.HellMongrel.class));
cards.add(new SetCardInfo("Herd Baloth", 584, Rarity.UNCOMMON, mage.cards.h.HerdBaloth.class));
cards.add(new SetCardInfo("Hive Stirrings", 94, Rarity.COMMON, mage.cards.h.HiveStirrings.class));
@@ -378,7 +377,6 @@ public final class JumpstartHistoricHorizons extends ExpansionSet {
cards.add(new SetCardInfo("Warteye Witch", 404, Rarity.COMMON, mage.cards.w.WarteyeWitch.class));
cards.add(new SetCardInfo("Wavesifter", 726, Rarity.COMMON, mage.cards.w.Wavesifter.class));
cards.add(new SetCardInfo("Webweaver Changeling", 666, Rarity.UNCOMMON, mage.cards.w.WebweaverChangeling.class));
- cards.add(new SetCardInfo("Westvale Cult Leader", 90, Rarity.RARE, mage.cards.w.WestvaleCultLeader.class));
cards.add(new SetCardInfo("Windcaller Aven", 275, Rarity.COMMON, mage.cards.w.WindcallerAven.class));
cards.add(new SetCardInfo("Winding Way", 670, Rarity.COMMON, mage.cards.w.WindingWay.class));
cards.add(new SetCardInfo("Winged Shepherd", 158, Rarity.COMMON, mage.cards.w.WingedShepherd.class));
diff --git a/Mage.Sets/src/mage/sets/KamigawaNeonDynasty.java b/Mage.Sets/src/mage/sets/KamigawaNeonDynasty.java
index a60fac005fd..ef391d49bb0 100644
--- a/Mage.Sets/src/mage/sets/KamigawaNeonDynasty.java
+++ b/Mage.Sets/src/mage/sets/KamigawaNeonDynasty.java
@@ -571,9 +571,6 @@ public final class KamigawaNeonDynasty extends ExpansionSet {
cards.add(new SetCardInfo("Upriser Renegade", 170, Rarity.UNCOMMON, mage.cards.u.UpriserRenegade.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Upriser Renegade", 324, Rarity.UNCOMMON, mage.cards.u.UpriserRenegade.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Vector Glider", 66, Rarity.COMMON, mage.cards.v.VectorGlider.class));
- cards.add(new SetCardInfo("Vessel of the All-Consuming", 221, Rarity.MYTHIC, mage.cards.v.VesselOfTheAllConsuming.class, NON_FULL_USE_VARIOUS));
- cards.add(new SetCardInfo("Vessel of the All-Consuming", 361, Rarity.MYTHIC, mage.cards.v.VesselOfTheAllConsuming.class, NON_FULL_USE_VARIOUS));
- cards.add(new SetCardInfo("Vessel of the All-Consuming", 486, Rarity.MYTHIC, mage.cards.v.VesselOfTheAllConsuming.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Virus Beetle", 128, Rarity.COMMON, mage.cards.v.VirusBeetle.class));
cards.add(new SetCardInfo("Voltage Surge", 171, Rarity.COMMON, mage.cards.v.VoltageSurge.class));
cards.add(new SetCardInfo("Walking Skyscraper", 263, Rarity.UNCOMMON, mage.cards.w.WalkingSkyscraper.class));
diff --git a/Mage.Sets/src/mage/sets/MagicOnlinePromos.java b/Mage.Sets/src/mage/sets/MagicOnlinePromos.java
index 88772257d8b..75665dc54d0 100644
--- a/Mage.Sets/src/mage/sets/MagicOnlinePromos.java
+++ b/Mage.Sets/src/mage/sets/MagicOnlinePromos.java
@@ -534,7 +534,6 @@ public class MagicOnlinePromos extends ExpansionSet {
cards.add(new SetCardInfo("Crash the Party", 99839, Rarity.RARE, mage.cards.c.CrashTheParty.class));
cards.add(new SetCardInfo("Crawling Barrens", 83732, Rarity.RARE, mage.cards.c.CrawlingBarrens.class));
cards.add(new SetCardInfo("Creative Technique", 90122, Rarity.RARE, mage.cards.c.CreativeTechnique.class));
- cards.add(new SetCardInfo("Creeping Inn", 94088, Rarity.MYTHIC, mage.cards.c.CreepingInn.class));
cards.add(new SetCardInfo("Creeping Mold", 32525, Rarity.UNCOMMON, mage.cards.c.CreepingMold.class, RETRO_ART));
cards.add(new SetCardInfo("Creepy Puppeteer", 95365, Rarity.RARE, mage.cards.c.CreepyPuppeteer.class));
cards.add(new SetCardInfo("Crippling Fear", 88286, Rarity.RARE, mage.cards.c.CripplingFear.class));
@@ -2978,7 +2977,6 @@ public class MagicOnlinePromos extends ExpansionSet {
cards.add(new SetCardInfo("Verazol, the Split Current", 83820, Rarity.RARE, mage.cards.v.VerazolTheSplitCurrent.class));
cards.add(new SetCardInfo("Verdant Catacombs", 91403, Rarity.RARE, mage.cards.v.VerdantCatacombs.class));
cards.add(new SetCardInfo("Verdant Mastery", 90138, Rarity.RARE, mage.cards.v.VerdantMastery.class));
- cards.add(new SetCardInfo("Vessel of the All-Consuming", 98105, Rarity.MYTHIC, mage.cards.v.VesselOfTheAllConsuming.class));
cards.add(new SetCardInfo("Vesuvan Duplimancy", 103402, Rarity.MYTHIC, mage.cards.v.VesuvanDuplimancy.class));
cards.add(new SetCardInfo("Vexing Shusher", 32533, Rarity.RARE, mage.cards.v.VexingShusher.class));
cards.add(new SetCardInfo("Veyran, Voice of Duality", 90282, Rarity.MYTHIC, mage.cards.v.VeyranVoiceOfDuality.class));
@@ -3061,7 +3059,6 @@ public class MagicOnlinePromos extends ExpansionSet {
cards.add(new SetCardInfo("Wild-Magic Sorcerer", 92752, Rarity.RARE, mage.cards.w.WildMagicSorcerer.class));
cards.add(new SetCardInfo("Wildcall", 55749, Rarity.RARE, mage.cards.w.Wildcall.class));
cards.add(new SetCardInfo("Wildfire Eternal", 64989, Rarity.RARE, mage.cards.w.WildfireEternal.class));
- cards.add(new SetCardInfo("Wildsong Howler", 95425, Rarity.RARE, mage.cards.w.WildsongHowler.class));
cards.add(new SetCardInfo("Willbender", 36258, Rarity.UNCOMMON, mage.cards.w.Willbender.class));
cards.add(new SetCardInfo("Willow Geist", 94024, Rarity.RARE, mage.cards.w.WillowGeist.class));
cards.add(new SetCardInfo("Willowdusk, Essence Seer", 90288, Rarity.MYTHIC, mage.cards.w.WillowduskEssenceSeer.class));
diff --git a/Mage.Sets/src/mage/sets/MarchOfTheMachine.java b/Mage.Sets/src/mage/sets/MarchOfTheMachine.java
index da0138bcee6..af91b11fb6b 100644
--- a/Mage.Sets/src/mage/sets/MarchOfTheMachine.java
+++ b/Mage.Sets/src/mage/sets/MarchOfTheMachine.java
@@ -195,8 +195,6 @@ public final class MarchOfTheMachine extends ExpansionSet {
cards.add(new SetCardInfo("Harried Artisan", 143, Rarity.UNCOMMON, mage.cards.h.HarriedArtisan.class));
cards.add(new SetCardInfo("Heliod, the Radiant Dawn", 17, Rarity.RARE, mage.cards.h.HeliodTheRadiantDawn.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Heliod, the Radiant Dawn", 293, Rarity.RARE, mage.cards.h.HeliodTheRadiantDawn.class, NON_FULL_USE_VARIOUS));
- cards.add(new SetCardInfo("Heliod, the Warped Eclipse", 17, Rarity.RARE, mage.cards.h.HeliodTheWarpedEclipse.class, NON_FULL_USE_VARIOUS));
- cards.add(new SetCardInfo("Heliod, the Warped Eclipse", 293, Rarity.RARE, mage.cards.h.HeliodTheWarpedEclipse.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Herbology Instructor", 189, Rarity.UNCOMMON, mage.cards.h.HerbologyInstructor.class));
cards.add(new SetCardInfo("Hideous Fleshwheeler", 119, Rarity.UNCOMMON, mage.cards.h.HideousFleshwheeler.class));
cards.add(new SetCardInfo("Hidetsugu and Kairi", 228, Rarity.RARE, mage.cards.h.HidetsuguAndKairi.class, NON_FULL_USE_VARIOUS));
@@ -280,7 +278,6 @@ public final class MarchOfTheMachine extends ExpansionSet {
cards.add(new SetCardInfo("Leyline Surge", 193, Rarity.MYTHIC, mage.cards.l.LeylineSurge.class));
cards.add(new SetCardInfo("Lightshield Array", 22, Rarity.RARE, mage.cards.l.LightshieldArray.class));
cards.add(new SetCardInfo("Lithomantic Barrage", 152, Rarity.UNCOMMON, mage.cards.l.LithomanticBarrage.class));
- cards.add(new SetCardInfo("Malady Invoker", 189, Rarity.UNCOMMON, mage.cards.m.MaladyInvoker.class));
cards.add(new SetCardInfo("Marauding Dreadship", 153, Rarity.COMMON, mage.cards.m.MaraudingDreadship.class));
cards.add(new SetCardInfo("Marchesa, Resolute Monarch", 114, Rarity.RARE, mage.cards.m.MarchesaResoluteMonarch.class));
cards.add(new SetCardInfo("Marshal of Zhalfir", 246, Rarity.UNCOMMON, mage.cards.m.MarshalOfZhalfir.class));
@@ -323,7 +320,6 @@ public final class MarchOfTheMachine extends ExpansionSet {
cards.add(new SetCardInfo("Phyrexian Censor", 31, Rarity.UNCOMMON, mage.cards.p.PhyrexianCensor.class));
cards.add(new SetCardInfo("Phyrexian Gargantua", 121, Rarity.UNCOMMON, mage.cards.p.PhyrexianGargantua.class));
cards.add(new SetCardInfo("Phyrexian Pegasus", 324, Rarity.COMMON, mage.cards.p.PhyrexianPegasus.class));
- cards.add(new SetCardInfo("Phyrexian Skyflayer", 143, Rarity.UNCOMMON, mage.cards.p.PhyrexianSkyflayer.class));
cards.add(new SetCardInfo("Pile On", 122, Rarity.RARE, mage.cards.p.PileOn.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Pile On", 361, Rarity.RARE, mage.cards.p.PileOn.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Placid Rottentail", 199, Rarity.COMMON, mage.cards.p.PlacidRottentail.class));
diff --git a/Mage.Sets/src/mage/sets/RivalsOfIxalan.java b/Mage.Sets/src/mage/sets/RivalsOfIxalan.java
index 1aaf20ca64d..1de7bb9051a 100644
--- a/Mage.Sets/src/mage/sets/RivalsOfIxalan.java
+++ b/Mage.Sets/src/mage/sets/RivalsOfIxalan.java
@@ -241,7 +241,6 @@ public final class RivalsOfIxalan extends ExpansionSet {
cards.add(new SetCardInfo("Warkite Marauder", 60, Rarity.RARE, mage.cards.w.WarkiteMarauder.class));
cards.add(new SetCardInfo("Waterknot", 61, Rarity.COMMON, mage.cards.w.Waterknot.class));
cards.add(new SetCardInfo("Wayward Swordtooth", 150, Rarity.RARE, mage.cards.w.WaywardSwordtooth.class));
- cards.add(new SetCardInfo("Winged Temple of Orazca", 158, Rarity.RARE, mage.cards.w.WingedTempleOfOrazca.class));
cards.add(new SetCardInfo("Woodland Stream", 191, Rarity.UNCOMMON, mage.cards.w.WoodlandStream.class));
cards.add(new SetCardInfo("World Shaper", 151, Rarity.RARE, mage.cards.w.WorldShaper.class));
cards.add(new SetCardInfo("Zacama, Primal Calamity", 174, Rarity.MYTHIC, mage.cards.z.ZacamaPrimalCalamity.class));
diff --git a/Mage.Sets/src/mage/sets/RivalsOfIxalanPromos.java b/Mage.Sets/src/mage/sets/RivalsOfIxalanPromos.java
index f93acb7a741..10e4b17f1fb 100644
--- a/Mage.Sets/src/mage/sets/RivalsOfIxalanPromos.java
+++ b/Mage.Sets/src/mage/sets/RivalsOfIxalanPromos.java
@@ -113,7 +113,6 @@ public class RivalsOfIxalanPromos extends ExpansionSet {
cards.add(new SetCardInfo("Warkite Marauder", "60s", Rarity.RARE, mage.cards.w.WarkiteMarauder.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Wayward Swordtooth", "150p", Rarity.RARE, mage.cards.w.WaywardSwordtooth.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Wayward Swordtooth", "150s", Rarity.RARE, mage.cards.w.WaywardSwordtooth.class, NON_FULL_USE_VARIOUS));
- cards.add(new SetCardInfo("Winged Temple of Orazca", "158s", Rarity.RARE, mage.cards.w.WingedTempleOfOrazca.class));
cards.add(new SetCardInfo("World Shaper", "151p", Rarity.RARE, mage.cards.w.WorldShaper.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("World Shaper", "151s", Rarity.RARE, mage.cards.w.WorldShaper.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Zacama, Primal Calamity", "174p", Rarity.MYTHIC, mage.cards.z.ZacamaPrimalCalamity.class, NON_FULL_USE_VARIOUS));
diff --git a/Mage.Sets/src/mage/sets/SecretLairDrop.java b/Mage.Sets/src/mage/sets/SecretLairDrop.java
index b82f513aa06..d0a232a5461 100644
--- a/Mage.Sets/src/mage/sets/SecretLairDrop.java
+++ b/Mage.Sets/src/mage/sets/SecretLairDrop.java
@@ -616,7 +616,6 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Rogue's Passage", 607, Rarity.RARE, mage.cards.r.RoguesPassage.class));
cards.add(new SetCardInfo("Darksteel Citadel", 608, Rarity.RARE, mage.cards.d.DarksteelCitadel.class));
cards.add(new SetCardInfo("Havengul Laboratory", 609, Rarity.RARE, mage.cards.h.HavengulLaboratory.class));
- cards.add(new SetCardInfo("Havengul Mystery", 609, Rarity.RARE, mage.cards.h.HavengulMystery.class));
cards.add(new SetCardInfo("Bonescythe Sliver", 610, Rarity.RARE, mage.cards.b.BonescytheSliver.class));
cards.add(new SetCardInfo("Constricting Sliver", 611, Rarity.RARE, mage.cards.c.ConstrictingSliver.class));
cards.add(new SetCardInfo("Essence Sliver", 612, Rarity.RARE, mage.cards.e.EssenceSliver.class));
diff --git a/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java b/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java
index 9fcedd562d5..effdf462efd 100644
--- a/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java
+++ b/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java
@@ -156,7 +156,6 @@ public final class ShadowsOverInnistrad extends ExpansionSet {
cards.add(new SetCardInfo("Harvest Hand", 256, Rarity.UNCOMMON, mage.cards.h.HarvestHand.class));
cards.add(new SetCardInfo("Haunted Cloak", 257, Rarity.UNCOMMON, mage.cards.h.HauntedCloak.class));
cards.add(new SetCardInfo("Heir of Falkenrath", 116, Rarity.UNCOMMON, mage.cards.h.HeirOfFalkenrath.class));
- cards.add(new SetCardInfo("Heir to the Night", 116, Rarity.UNCOMMON, mage.cards.h.HeirToTheNight.class));
cards.add(new SetCardInfo("Hermit of the Natterknolls", 209, Rarity.UNCOMMON, mage.cards.h.HermitOfTheNatterknolls.class));
cards.add(new SetCardInfo("Highland Lake", 277, Rarity.UNCOMMON, mage.cards.h.HighlandLake.class));
cards.add(new SetCardInfo("Hinterland Logger", 210, Rarity.COMMON, mage.cards.h.HinterlandLogger.class));
@@ -191,7 +190,6 @@ public final class ShadowsOverInnistrad extends ExpansionSet {
cards.add(new SetCardInfo("Lightning Axe", 170, Rarity.UNCOMMON, mage.cards.l.LightningAxe.class));
cards.add(new SetCardInfo("Liliana's Indignation", 120, Rarity.UNCOMMON, mage.cards.l.LilianasIndignation.class));
cards.add(new SetCardInfo("Loam Dryad", 216, Rarity.COMMON, mage.cards.l.LoamDryad.class));
- cards.add(new SetCardInfo("Lone Wolf of the Natterknolls", 209, Rarity.UNCOMMON, mage.cards.l.LoneWolfOfTheNatterknolls.class));
cards.add(new SetCardInfo("Macabre Waltz", 121, Rarity.COMMON, mage.cards.m.MacabreWaltz.class));
cards.add(new SetCardInfo("Mad Prophet", 171, Rarity.UNCOMMON, mage.cards.m.MadProphet.class));
cards.add(new SetCardInfo("Magmatic Chasm", 172, Rarity.COMMON, mage.cards.m.MagmaticChasm.class));
@@ -262,7 +260,6 @@ public final class ShadowsOverInnistrad extends ExpansionSet {
cards.add(new SetCardInfo("Sanguinary Mage", 178, Rarity.COMMON, mage.cards.s.SanguinaryMage.class));
cards.add(new SetCardInfo("Sanitarium Skeleton", 133, Rarity.COMMON, mage.cards.s.SanitariumSkeleton.class));
cards.add(new SetCardInfo("Scourge Wolf", 179, Rarity.RARE, mage.cards.s.ScourgeWolf.class));
- cards.add(new SetCardInfo("Scrounged Scythe", 256, Rarity.UNCOMMON, mage.cards.s.ScroungedScythe.class));
cards.add(new SetCardInfo("Seagraf Skaab", 84, Rarity.COMMON, mage.cards.s.SeagrafSkaab.class));
cards.add(new SetCardInfo("Seasons Past", 226, Rarity.MYTHIC, mage.cards.s.SeasonsPast.class));
cards.add(new SetCardInfo("Second Harvest", 227, Rarity.RARE, mage.cards.s.SecondHarvest.class));
@@ -350,7 +347,6 @@ public final class ShadowsOverInnistrad extends ExpansionSet {
cards.add(new SetCardInfo("Welcome to the Fold", 96, Rarity.RARE, mage.cards.w.WelcomeToTheFold.class));
cards.add(new SetCardInfo("Werewolf of Ancient Hunger", 225, Rarity.RARE, mage.cards.w.WerewolfOfAncientHunger.class));
cards.add(new SetCardInfo("Westvale Abbey", 281, Rarity.RARE, mage.cards.w.WestvaleAbbey.class));
- cards.add(new SetCardInfo("Westvale Cult Leader", 21, Rarity.RARE, mage.cards.w.WestvaleCultLeader.class));
cards.add(new SetCardInfo("Wicker Witch", 268, Rarity.COMMON, mage.cards.w.WickerWitch.class));
cards.add(new SetCardInfo("Wild-Field Scarecrow", 269, Rarity.UNCOMMON, mage.cards.w.WildFieldScarecrow.class));
cards.add(new SetCardInfo("Wolf of Devil's Breach", 192, Rarity.MYTHIC, mage.cards.w.WolfOfDevilsBreach.class));
diff --git a/Mage.Sets/src/mage/sets/ShadowsOverInnistradPromos.java b/Mage.Sets/src/mage/sets/ShadowsOverInnistradPromos.java
index 9c11add782d..6072500d9ab 100644
--- a/Mage.Sets/src/mage/sets/ShadowsOverInnistradPromos.java
+++ b/Mage.Sets/src/mage/sets/ShadowsOverInnistradPromos.java
@@ -112,7 +112,6 @@ public class ShadowsOverInnistradPromos extends ExpansionSet {
cards.add(new SetCardInfo("Welcome to the Fold", "96s", Rarity.RARE, mage.cards.w.WelcomeToTheFold.class));
cards.add(new SetCardInfo("Werewolf of Ancient Hunger", "225s", Rarity.RARE, mage.cards.w.WerewolfOfAncientHunger.class));
cards.add(new SetCardInfo("Westvale Abbey", "281s", Rarity.RARE, mage.cards.w.WestvaleAbbey.class));
- cards.add(new SetCardInfo("Westvale Cult Leader", "21s", Rarity.RARE, mage.cards.w.WestvaleCultLeader.class));
cards.add(new SetCardInfo("Wolf of Devil's Breach", "192s", Rarity.MYTHIC, mage.cards.w.WolfOfDevilsBreach.class));
}
}
diff --git a/Mage.Sets/src/mage/sets/ShadowsOverInnistradRemastered.java b/Mage.Sets/src/mage/sets/ShadowsOverInnistradRemastered.java
index c4375f7ec2b..9f77d965483 100644
--- a/Mage.Sets/src/mage/sets/ShadowsOverInnistradRemastered.java
+++ b/Mage.Sets/src/mage/sets/ShadowsOverInnistradRemastered.java
@@ -259,7 +259,6 @@ public class ShadowsOverInnistradRemastered extends ExpansionSet {
cards.add(new SetCardInfo("Sage of Ancient Lore", 211, Rarity.RARE, mage.cards.s.SageOfAncientLore.class));
cards.add(new SetCardInfo("Sanitarium Skeleton", 133, Rarity.COMMON, mage.cards.s.SanitariumSkeleton.class));
cards.add(new SetCardInfo("Scourge Wolf", 175, Rarity.UNCOMMON, mage.cards.s.ScourgeWolf.class));
- cards.add(new SetCardInfo("Scrounged Scythe", 252, Rarity.UNCOMMON, mage.cards.s.ScroungedScythe.class));
cards.add(new SetCardInfo("Seasons Past", 212, Rarity.MYTHIC, mage.cards.s.SeasonsPast.class));
cards.add(new SetCardInfo("Second Harvest", 213, Rarity.RARE, mage.cards.s.SecondHarvest.class));
cards.add(new SetCardInfo("Selfless Spirit", 42, Rarity.RARE, mage.cards.s.SelflessSpirit.class));
diff --git a/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java b/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java
index 4dba2652837..810438c919d 100644
--- a/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java
+++ b/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java
@@ -347,9 +347,6 @@ public final class TheLostCavernsOfIxalan extends ExpansionSet {
cards.add(new SetCardInfo("River Herald Scout", 72, Rarity.COMMON, mage.cards.r.RiverHeraldScout.class));
cards.add(new SetCardInfo("Roaming Throne", 258, Rarity.RARE, mage.cards.r.RoamingThrone.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Roaming Throne", 344, Rarity.RARE, mage.cards.r.RoamingThrone.class, NON_FULL_USE_VARIOUS));
- cards.add(new SetCardInfo("Roar of the Fifth People", 189, Rarity.MYTHIC, mage.cards.r.RoarOfTheFifthPeople.class, NON_FULL_USE_VARIOUS));
- cards.add(new SetCardInfo("Roar of the Fifth People", 296, Rarity.MYTHIC, mage.cards.r.RoarOfTheFifthPeople.class, NON_FULL_USE_VARIOUS));
- cards.add(new SetCardInfo("Roar of the Fifth People", 339, Rarity.MYTHIC, mage.cards.r.RoarOfTheFifthPeople.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Ruin-Lurker Bat", 33, Rarity.UNCOMMON, mage.cards.r.RuinLurkerBat.class));
cards.add(new SetCardInfo("Rumbling Rockslide", 163, Rarity.COMMON, mage.cards.r.RumblingRockslide.class));
cards.add(new SetCardInfo("Runaway Boulder", 259, Rarity.COMMON, mage.cards.r.RunawayBoulder.class));
diff --git a/Mage.Sets/src/mage/sets/UniversesWithin.java b/Mage.Sets/src/mage/sets/UniversesWithin.java
index 4c79b8ba2de..c125b00b5e0 100644
--- a/Mage.Sets/src/mage/sets/UniversesWithin.java
+++ b/Mage.Sets/src/mage/sets/UniversesWithin.java
@@ -37,7 +37,6 @@ public final class UniversesWithin extends ExpansionSet {
cards.add(new SetCardInfo("Hansk, Slayer Zealot", 22, Rarity.MYTHIC, mage.cards.h.HanskSlayerZealot.class));
cards.add(new SetCardInfo("Hargilde, Kindly Runechanter", 5, Rarity.RARE, mage.cards.h.HargildeKindlyRunechanter.class));
cards.add(new SetCardInfo("Havengul Laboratory", 9, Rarity.RARE, mage.cards.h.HavengulLaboratory.class));
- cards.add(new SetCardInfo("Havengul Mystery", 9, Rarity.RARE, mage.cards.h.HavengulMystery.class));
cards.add(new SetCardInfo("Immard, the Stormcleaver", 14, Rarity.RARE, mage.cards.i.ImmardTheStormcleaver.class));
cards.add(new SetCardInfo("Jurin, Leading the Charge", 27, Rarity.RARE, mage.cards.j.JurinLeadingTheCharge.class));
cards.add(new SetCardInfo("Maarika, Brutal Gladiator", 15, Rarity.RARE, mage.cards.m.MaarikaBrutalGladiator.class));