mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 02:30:08 -08:00
convert transforming "H" cards to single class file
This commit is contained in:
parent
06f54e5df1
commit
41075fef39
58 changed files with 919 additions and 1693 deletions
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,41 +1,60 @@
|
||||||
|
|
||||||
package mage.cards.h;
|
package mage.cards.h;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
import mage.abilities.condition.common.TargetHasCounterCondition;
|
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.decorator.ConditionalOneShotEffect;
|
||||||
|
import mage.abilities.effects.ContinuousEffect;
|
||||||
|
import mage.abilities.effects.OneShotEffect;
|
||||||
import mage.abilities.effects.common.TransformSourceEffect;
|
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.effects.common.counter.AddCountersTargetEffect;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.abilities.mana.AnyColorManaAbility;
|
||||||
|
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.SuperType;
|
import mage.constants.*;
|
||||||
import mage.counters.CounterType;
|
import mage.counters.CounterType;
|
||||||
|
import mage.game.Game;
|
||||||
|
import mage.game.permanent.Permanent;
|
||||||
import mage.target.common.TargetControlledCreaturePermanent;
|
import mage.target.common.TargetControlledCreaturePermanent;
|
||||||
|
import mage.target.targetpointer.FixedTarget;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
*/
|
*/
|
||||||
public final class HadanasClimb extends CardImpl {
|
public final class HadanasClimb extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
public HadanasClimb(UUID ownerId, CardSetInfo setInfo) {
|
public HadanasClimb(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}{U}");
|
super(ownerId, setInfo,
|
||||||
|
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ENCHANTMENT}, new SubType[]{}, "{1}{G}{U}",
|
||||||
this.supertype.add(SuperType.LEGENDARY);
|
"Winged Temple of Orazca",
|
||||||
|
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.LAND}, new SubType[]{}, ""
|
||||||
this.secondSideCardClazz = mage.cards.w.WingedTempleOfOrazca.class;
|
);
|
||||||
|
|
||||||
|
// 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.
|
// 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 ability = new BeginningOfCombatTriggeredAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance()));
|
||||||
ability.addEffect(new ConditionalOneShotEffect(new TransformSourceEffect(), new TargetHasCounterCondition(CounterType.P1P1, 3, Integer.MAX_VALUE),
|
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}"));
|
"Then if that creature has three or more +1/+1 counters on it, transform {this}"));
|
||||||
ability.addTarget(new TargetControlledCreaturePermanent());
|
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) {
|
private HadanasClimb(final HadanasClimb card) {
|
||||||
|
|
@ -47,3 +66,35 @@ public final class HadanasClimb extends CardImpl {
|
||||||
return new HadanasClimb(this);
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,25 +1,28 @@
|
||||||
package mage.cards.h;
|
package mage.cards.h;
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.condition.Condition;
|
import mage.abilities.condition.Condition;
|
||||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||||
|
import mage.abilities.effects.common.CreateTokenEffect;
|
||||||
import mage.abilities.effects.common.TransformSourceEffect;
|
import mage.abilities.effects.common.TransformSourceEffect;
|
||||||
|
import mage.abilities.effects.common.continuous.SetBasePowerToughnessSourceEffect;
|
||||||
import mage.abilities.hint.common.CreaturesYouControlHint;
|
import mage.abilities.hint.common.CreaturesYouControlHint;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.ComparisonType;
|
import mage.constants.ComparisonType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
|
import mage.constants.Zone;
|
||||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||||
|
import mage.game.permanent.token.HumanClericToken;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author fireshoes
|
* @author fireshoes
|
||||||
*/
|
*/
|
||||||
public final class HanweirMilitiaCaptain extends CardImpl {
|
public final class HanweirMilitiaCaptain extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
|
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
|
||||||
new FilterControlledCreaturePermanent("you control four or more creatures"),
|
new FilterControlledCreaturePermanent("you control four or more creatures"),
|
||||||
|
|
@ -27,18 +30,27 @@ public final class HanweirMilitiaCaptain extends CardImpl {
|
||||||
);
|
);
|
||||||
|
|
||||||
public HanweirMilitiaCaptain(UUID ownerId, CardSetInfo setInfo) {
|
public HanweirMilitiaCaptain(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}");
|
super(ownerId, setInfo,
|
||||||
this.subtype.add(SubType.HUMAN);
|
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.SOLDIER}, "{1}{W}",
|
||||||
this.subtype.add(SubType.SOLDIER);
|
"Westvale Cult Leader",
|
||||||
this.power = new MageInt(2);
|
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.CLERIC}, "W"
|
||||||
this.toughness = new MageInt(2);
|
);
|
||||||
|
|
||||||
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.
|
// At the beginning of your upkeep, if you control four or more creatures, transform Hanweir Militia Captain.
|
||||||
this.addAbility(new TransformAbility());
|
this.getLeftHalfCard().addAbility(new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect())
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect())
|
|
||||||
.withInterveningIf(condition).addHint(CreaturesYouControlHint.instance));
|
.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) {
|
private HanweirMilitiaCaptain(final HanweirMilitiaCaptain card) {
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
package mage.cards.h;
|
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.common.WerewolfFrontTriggeredAbility;
|
||||||
import mage.abilities.keyword.DefenderAbility;
|
import mage.abilities.keyword.DefenderAbility;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
|
|
||||||
|
|
@ -14,23 +14,32 @@ import java.util.UUID;
|
||||||
/**
|
/**
|
||||||
* @author nantuko
|
* @author nantuko
|
||||||
*/
|
*/
|
||||||
public final class HanweirWatchkeep extends CardImpl {
|
public final class HanweirWatchkeep extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
public HanweirWatchkeep(UUID ownerId, CardSetInfo setInfo) {
|
public HanweirWatchkeep(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}");
|
super(ownerId, setInfo,
|
||||||
this.subtype.add(SubType.HUMAN);
|
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WARRIOR, SubType.WEREWOLF}, "{2}{R}",
|
||||||
this.subtype.add(SubType.WARRIOR);
|
"Bane of Hanweir",
|
||||||
this.subtype.add(SubType.WEREWOLF);
|
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);
|
// Defender
|
||||||
this.toughness = new MageInt(5);
|
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.
|
// At the beginning of each upkeep, if no spells were cast last turn, transform Hanweir Watchkeep.
|
||||||
this.addAbility(new TransformAbility());
|
this.getLeftHalfCard().addAbility(new WerewolfFrontTriggeredAbility());
|
||||||
this.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) {
|
private HanweirWatchkeep(final HanweirWatchkeep card) {
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,12 @@
|
||||||
package mage.cards.h;
|
package mage.cards.h;
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
import mage.abilities.effects.common.TransformSourceEffect;
|
import mage.abilities.effects.common.TransformSourceEffect;
|
||||||
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
import mage.abilities.keyword.HasteAbility;
|
import mage.abilities.keyword.HasteAbility;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
|
|
||||||
|
|
@ -16,23 +15,32 @@ import java.util.UUID;
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public final class HarriedArtisan extends CardImpl {
|
public final class HarriedArtisan extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
public HarriedArtisan(UUID ownerId, CardSetInfo setInfo) {
|
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);
|
// Harried Artisan
|
||||||
this.subtype.add(SubType.ARTIFICER);
|
this.getLeftHalfCard().setPT(2, 3);
|
||||||
this.power = new MageInt(2);
|
|
||||||
this.toughness = new MageInt(3);
|
|
||||||
this.secondSideCardClazz = mage.cards.p.PhyrexianSkyflayer.class;
|
|
||||||
|
|
||||||
// Haste
|
// Haste
|
||||||
this.addAbility(HasteAbility.getInstance());
|
this.getLeftHalfCard().addAbility(HasteAbility.getInstance());
|
||||||
|
|
||||||
// {3}{W/P}: Transform Harried Artisan. Activate only as a sorcery.
|
// {3}{W/P}: Transform Harried Artisan. Activate only as a sorcery.
|
||||||
this.addAbility(new TransformAbility());
|
this.getLeftHalfCard().addAbility(new ActivateAsSorceryActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{3}{W/P}")));
|
||||||
this.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) {
|
private HarriedArtisan(final HarriedArtisan card) {
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,21 @@
|
||||||
package mage.cards.h;
|
package mage.cards.h;
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.MageObject;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
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.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.abilities.keyword.TransformAbility;
|
||||||
import mage.cards.Card;
|
import mage.cards.Card;
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.Outcome;
|
import mage.constants.*;
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.constants.Zone;
|
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.players.Player;
|
import mage.players.Player;
|
||||||
|
|
||||||
|
|
@ -21,19 +24,36 @@ import java.util.UUID;
|
||||||
/**
|
/**
|
||||||
* @author halljared
|
* @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) {
|
public HarvestHand(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}");
|
super(ownerId, setInfo,
|
||||||
this.subtype.add(SubType.SCARECROW);
|
new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, new SubType[]{SubType.SCARECROW}, "{3}",
|
||||||
this.power = new MageInt(2);
|
"Scrounged Scythe",
|
||||||
this.toughness = new MageInt(2);
|
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.
|
// When Harvest Hand dies, return it to the battlefield transformed under your control.
|
||||||
this.addAbility(new TransformAbility());
|
this.getLeftHalfCard().addAbility(new DiesSourceTriggeredAbility(new HarvestHandReturnTransformedEffect()));
|
||||||
this.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. " +
|
||||||
|
"<i>(It can't be blocked except by two or more creatures.)</i>"
|
||||||
|
)));
|
||||||
|
|
||||||
|
// Equip {2}
|
||||||
|
this.getRightHalfCard().addAbility(new EquipAbility(2, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
private HarvestHand(final HarvestHand card) {
|
private HarvestHand(final HarvestHand card) {
|
||||||
|
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
package mage.cards.h;
|
package mage.cards.h;
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.keyword.DayboundAbility;
|
import mage.abilities.keyword.DayboundAbility;
|
||||||
|
import mage.abilities.keyword.NightboundAbility;
|
||||||
import mage.abilities.keyword.TrampleAbility;
|
import mage.abilities.keyword.TrampleAbility;
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
|
|
||||||
|
|
@ -13,22 +13,32 @@ import java.util.UUID;
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public final class HarvesttideInfiltrator extends CardImpl {
|
public final class HarvesttideInfiltrator extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
public HarvesttideInfiltrator(UUID ownerId, CardSetInfo setInfo) {
|
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);
|
// Harvesttide Infiltrator
|
||||||
this.subtype.add(SubType.WEREWOLF);
|
this.getLeftHalfCard().setPT(3, 2);
|
||||||
this.power = new MageInt(3);
|
|
||||||
this.toughness = new MageInt(2);
|
|
||||||
this.secondSideCardClazz = mage.cards.h.HarvesttideAssailant.class;
|
|
||||||
|
|
||||||
// Trample
|
// Trample
|
||||||
this.addAbility(TrampleAbility.getInstance());
|
this.getLeftHalfCard().addAbility(TrampleAbility.getInstance());
|
||||||
|
|
||||||
// Daybound
|
// 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) {
|
private HarvesttideInfiltrator(final HarvesttideInfiltrator card) {
|
||||||
|
|
|
||||||
|
|
@ -1,53 +1,79 @@
|
||||||
package mage.cards.h;
|
package mage.cards.h;
|
||||||
|
|
||||||
|
import mage.MageObjectReference;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
import mage.abilities.TriggeredAbilityImpl;
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
|
import mage.abilities.common.TransformIntoSourceTriggeredAbility;
|
||||||
import mage.abilities.condition.Condition;
|
import mage.abilities.condition.Condition;
|
||||||
|
import mage.abilities.costs.common.PayLifeCost;
|
||||||
import mage.abilities.costs.common.TapSourceCost;
|
import mage.abilities.costs.common.TapSourceCost;
|
||||||
import mage.abilities.costs.mana.GenericManaCost;
|
import mage.abilities.costs.mana.GenericManaCost;
|
||||||
|
import mage.abilities.effects.OneShotEffect;
|
||||||
import mage.abilities.effects.common.TransformSourceEffect;
|
import mage.abilities.effects.common.TransformSourceEffect;
|
||||||
import mage.abilities.effects.keyword.InvestigateEffect;
|
import mage.abilities.effects.keyword.InvestigateEffect;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
import mage.abilities.mana.BlackManaAbility;
|
||||||
import mage.abilities.mana.ColorlessManaAbility;
|
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.CardSetInfo;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.*;
|
import mage.constants.*;
|
||||||
|
import mage.filter.StaticFilters;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.events.GameEvent;
|
import mage.game.events.GameEvent;
|
||||||
|
import mage.game.events.ZoneChangeEvent;
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
|
import mage.players.Player;
|
||||||
|
import mage.target.common.TargetCardInYourGraveyard;
|
||||||
import mage.util.CardUtil;
|
import mage.util.CardUtil;
|
||||||
import mage.watchers.Watcher;
|
import mage.watchers.Watcher;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.*;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public final class HavengulLaboratory extends CardImpl {
|
public final class HavengulLaboratory extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
public HavengulLaboratory(UUID ownerId, CardSetInfo setInfo) {
|
public HavengulLaboratory(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
|
super(ownerId, setInfo,
|
||||||
this.supertype.add(SuperType.LEGENDARY);
|
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.LAND}, new SubType[]{}, "",
|
||||||
|
"Havengul Mystery",
|
||||||
this.secondSideCardClazz = mage.cards.h.HavengulMystery.class;
|
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.LAND}, new SubType[]{}, ""
|
||||||
|
);
|
||||||
|
|
||||||
|
// Havengul Laboratory
|
||||||
// {T}: Add {C}.
|
// {T}: Add {C}.
|
||||||
this.addAbility(new ColorlessManaAbility());
|
this.getLeftHalfCard().addAbility(new ColorlessManaAbility());
|
||||||
|
|
||||||
// {4}, {T}: Investigate.
|
// {4}, {T}: Investigate.
|
||||||
Ability ability = new SimpleActivatedAbility(new InvestigateEffect(), new GenericManaCost(4));
|
Ability ability = new SimpleActivatedAbility(new InvestigateEffect(), new GenericManaCost(4));
|
||||||
ability.addCost(new TapSourceCost());
|
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.
|
// At the beginning of your end step, if you sacrificed three or more Clues this turn, transform Havengul Laboratory.
|
||||||
this.addAbility(new TransformAbility());
|
Ability transformAbility = new BeginningOfEndStepTriggeredAbility(
|
||||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
|
||||||
TargetController.YOU, new TransformSourceEffect(),
|
TargetController.YOU, new TransformSourceEffect(),
|
||||||
false, HavengulLaboratoryCondition.instance
|
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) {
|
private HavengulLaboratory(final HavengulLaboratory card) {
|
||||||
|
|
@ -108,3 +134,89 @@ class HavengulLaboratoryWatcher extends Watcher {
|
||||||
.getOrDefault(playerId, 0) >= 3;
|
.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<MageObjectReference> morSet;
|
||||||
|
if (game.getState().getValue(key) != null) {
|
||||||
|
morSet = (Set<MageObjectReference>) 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<MageObjectReference> morSet = (Set<MageObjectReference>) 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -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<MageObjectReference> morSet;
|
|
||||||
if (game.getState().getValue(key) != null) {
|
|
||||||
morSet = (Set<MageObjectReference>) 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<MageObjectReference> morSet = (Set<MageObjectReference>) 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}.";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,35 +1,41 @@
|
||||||
|
|
||||||
package mage.cards.h;
|
package mage.cards.h;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.common.LimitedTimesPerTurnActivatedAbility;
|
import mage.abilities.common.LimitedTimesPerTurnActivatedAbility;
|
||||||
import mage.abilities.costs.common.DiscardCardCost;
|
import mage.abilities.costs.common.DiscardCardCost;
|
||||||
import mage.abilities.effects.common.TransformSourceEffect;
|
import mage.abilities.effects.common.TransformSourceEffect;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author fireshoes
|
* @author fireshoes
|
||||||
*/
|
*/
|
||||||
public final class HeirOfFalkenrath extends CardImpl {
|
public final class HeirOfFalkenrath extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
public HeirOfFalkenrath(UUID ownerId, CardSetInfo setInfo) {
|
public HeirOfFalkenrath(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}");
|
super(ownerId, setInfo,
|
||||||
this.subtype.add(SubType.VAMPIRE);
|
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.VAMPIRE}, "{1}{B}",
|
||||||
this.power = new MageInt(2);
|
"Heir to the Night",
|
||||||
this.toughness = new MageInt(1);
|
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.
|
// Discard a card: Transform Heir of Falkenrath. Activate this ability only once each turn.
|
||||||
this.addAbility(new TransformAbility());
|
this.getLeftHalfCard().addAbility(new LimitedTimesPerTurnActivatedAbility(Zone.BATTLEFIELD, new TransformSourceEffect(), new DiscardCardCost()));
|
||||||
this.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) {
|
private HeirOfFalkenrath(final HeirOfFalkenrath card) {
|
||||||
|
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -2,40 +2,44 @@ package mage.cards.h;
|
||||||
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
||||||
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
import mage.abilities.condition.Condition;
|
import mage.abilities.condition.Condition;
|
||||||
import mage.abilities.condition.common.SourceHasCounterCondition;
|
import mage.abilities.condition.common.SourceHasCounterCondition;
|
||||||
import mage.abilities.costs.common.DiscardCardCost;
|
import mage.abilities.costs.common.DiscardCardCost;
|
||||||
import mage.abilities.costs.common.PayLifeCost;
|
import mage.abilities.costs.common.PayLifeCost;
|
||||||
import mage.abilities.costs.common.TapSourceCost;
|
import mage.abilities.costs.common.TapSourceCost;
|
||||||
import mage.abilities.costs.mana.GenericManaCost;
|
import mage.abilities.costs.mana.GenericManaCost;
|
||||||
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
import mage.abilities.decorator.ConditionalOneShotEffect;
|
import mage.abilities.decorator.ConditionalOneShotEffect;
|
||||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
import mage.abilities.effects.common.*;
|
||||||
import mage.abilities.effects.common.MillCardsControllerEffect;
|
|
||||||
import mage.abilities.effects.common.RemoveAllCountersSourceEffect;
|
|
||||||
import mage.abilities.effects.common.TransformSourceEffect;
|
|
||||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.SubType;
|
||||||
import mage.counters.CounterType;
|
import mage.counters.CounterType;
|
||||||
|
import mage.filter.StaticFilters;
|
||||||
|
import mage.target.common.TargetCardInGraveyard;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public final class HeirloomMirror extends CardImpl {
|
public final class HeirloomMirror extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
private static final Condition condition = new SourceHasCounterCondition(CounterType.RITUAL, 3);
|
private static final Condition condition = new SourceHasCounterCondition(CounterType.RITUAL, 3);
|
||||||
|
|
||||||
public HeirloomMirror(UUID ownerId, CardSetInfo setInfo) {
|
public HeirloomMirror(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}{B}");
|
super(ownerId, setInfo,
|
||||||
|
new CardType[]{CardType.ARTIFACT}, new SubType[]{}, "{1}{B}",
|
||||||
this.secondSideCardClazz = mage.cards.i.InheritedFiend.class;
|
"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.
|
// {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 ability = new ActivateAsSorceryActivatedAbility(new DrawCardSourceControllerEffect(1), new GenericManaCost(1));
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
ability.addCost(new PayLifeCost(1));
|
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 AddCountersSourceEffect(CounterType.RITUAL.createInstance()).concatBy(", then"));
|
||||||
ability.addEffect(new ConditionalOneShotEffect(
|
ability.addEffect(new ConditionalOneShotEffect(
|
||||||
new RemoveAllCountersSourceEffect(CounterType.RITUAL), condition,
|
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()));
|
).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) {
|
private HeirloomMirror(final HeirloomMirror card) {
|
||||||
|
|
|
||||||
|
|
@ -1,49 +1,66 @@
|
||||||
package mage.cards.h;
|
package mage.cards.h;
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.SpellAbility;
|
||||||
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
||||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
|
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
|
||||||
import mage.abilities.effects.common.TransformSourceEffect;
|
import mage.abilities.effects.common.TransformSourceEffect;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
import mage.abilities.effects.common.continuous.CastAsThoughItHadFlashAllEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.SubType;
|
import mage.constants.*;
|
||||||
import mage.constants.SuperType;
|
|
||||||
import mage.filter.FilterCard;
|
import mage.filter.FilterCard;
|
||||||
import mage.filter.common.FilterEnchantmentCard;
|
import mage.filter.common.FilterEnchantmentCard;
|
||||||
|
import mage.filter.common.FilterNonlandCard;
|
||||||
import mage.filter.predicate.Predicates;
|
import mage.filter.predicate.Predicates;
|
||||||
|
import mage.game.Game;
|
||||||
import mage.target.common.TargetCardInYourGraveyard;
|
import mage.target.common.TargetCardInYourGraveyard;
|
||||||
|
import mage.util.CardUtil;
|
||||||
|
import mage.watchers.common.CardsDrawnThisTurnWatcher;
|
||||||
|
|
||||||
import java.util.UUID;
|
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 filter = new FilterEnchantmentCard("enchantment card that isn't a God");
|
||||||
|
private static final FilterCard flashFilter = new FilterNonlandCard("spells");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(Predicates.not(SubType.GOD.getPredicate()));
|
filter.add(Predicates.not(SubType.GOD.getPredicate()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public HeliodTheRadiantDawn(UUID ownerId, CardSetInfo setInfo) {
|
public HeliodTheRadiantDawn(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{2}{W}{W}");
|
super(ownerId, setInfo,
|
||||||
this.supertype.add(SuperType.LEGENDARY);
|
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, new SubType[]{SubType.GOD}, "{2}{W}{W}",
|
||||||
this.addSubType(SubType.GOD);
|
"Heliod, the Warped Eclipse",
|
||||||
this.power = new MageInt(4);
|
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, new SubType[]{SubType.PHYREXIAN, SubType.GOD}, "WU"
|
||||||
this.toughness = new MageInt(4);
|
);
|
||||||
this.secondSideCardClazz = mage.cards.h.HeliodTheWarpedEclipse.class;
|
|
||||||
|
// 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.
|
// 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 ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect());
|
||||||
ability.addTarget(new TargetCardInYourGraveyard(filter));
|
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.
|
// {3}{U/P}: Transform Heliod, the Radiant Dawn. Activate only as a sorcery.
|
||||||
this.addAbility(new TransformAbility());
|
this.getLeftHalfCard().addAbility(new ActivateAsSorceryActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{3}{U/P}")));
|
||||||
this.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) {
|
private HeliodTheRadiantDawn(final HeliodTheRadiantDawn card) {
|
||||||
|
|
@ -55,3 +72,45 @@ public class HeliodTheRadiantDawn extends CardImpl {
|
||||||
return new HeliodTheRadiantDawn(this);
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,41 +1,57 @@
|
||||||
package mage.cards.h;
|
package mage.cards.h;
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.Mode;
|
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.DrawCardSourceControllerEffect;
|
||||||
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
|
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
|
||||||
import mage.abilities.effects.common.SacrificeAllEffect;
|
import mage.abilities.effects.common.SacrificeAllEffect;
|
||||||
import mage.abilities.effects.common.TransformSourceEffect;
|
import mage.abilities.effects.common.TransformSourceEffect;
|
||||||
|
import mage.abilities.effects.common.continuous.BoostAllEffect;
|
||||||
import mage.abilities.hint.common.ModesAlreadyUsedHint;
|
import mage.abilities.hint.common.ModesAlreadyUsedHint;
|
||||||
|
import mage.abilities.keyword.DeathtouchAbility;
|
||||||
import mage.abilities.keyword.FlyingAbility;
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
import mage.abilities.keyword.LifelinkAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.SubType;
|
import mage.constants.*;
|
||||||
import mage.constants.SuperType;
|
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
|
import mage.filter.predicate.Predicates;
|
||||||
|
import mage.filter.predicate.mageobject.AbilityPredicate;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @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) {
|
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);
|
// Henrika Domnathi
|
||||||
this.subtype.add(SubType.VAMPIRE);
|
this.getLeftHalfCard().setPT(1, 3);
|
||||||
this.power = new MageInt(1);
|
|
||||||
this.toughness = new MageInt(3);
|
|
||||||
this.secondSideCardClazz = mage.cards.h.HenrikaInfernalSeer.class;
|
|
||||||
|
|
||||||
// Flying
|
// 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 —
|
// At the beginning of combat on your turn, choose one that hasn't been chosen —
|
||||||
// • Each player sacrifices a creature.
|
// • Each player sacrifices a creature.
|
||||||
|
|
@ -51,10 +67,26 @@ public final class HenrikaDomnathi extends CardImpl {
|
||||||
|
|
||||||
// • Transform Henrika Domnathi.
|
// • Transform Henrika Domnathi.
|
||||||
ability.addMode(new Mode(new TransformSourceEffect()).setModeTag("transform"));
|
ability.addMode(new Mode(new TransformSourceEffect()).setModeTag("transform"));
|
||||||
this.addAbility(new TransformAbility());
|
|
||||||
|
|
||||||
ability.addHint(ModesAlreadyUsedHint.instance);
|
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) {
|
private HenrikaDomnathi(final HenrikaDomnathi card) {
|
||||||
|
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,39 +1,55 @@
|
||||||
package mage.cards.h;
|
package mage.cards.h;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
||||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
|
import mage.abilities.common.TransformIntoSourceTriggeredAbility;
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
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.GainLifeEffect;
|
||||||
import mage.abilities.effects.common.TransformSourceEffect;
|
import mage.abilities.effects.common.TransformSourceEffect;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.Duration;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
|
import mage.target.common.TargetOpponentsCreaturePermanent;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public final class HerbologyInstructor extends CardImpl {
|
public final class HerbologyInstructor extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
public HerbologyInstructor(UUID ownerId, CardSetInfo setInfo) {
|
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);
|
// Herbology Instructor
|
||||||
this.subtype.add(SubType.DRUID);
|
this.getLeftHalfCard().setPT(1, 3);
|
||||||
this.power = new MageInt(1);
|
|
||||||
this.toughness = new MageInt(3);
|
|
||||||
this.secondSideCardClazz = mage.cards.m.MaladyInvoker.class;
|
|
||||||
|
|
||||||
// When Herbology Instructor enters the battlefield, you gain 3 life.
|
// 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.
|
// {6}{B/P}: Transform Herbology Instructor. Activate only as a sorcery.
|
||||||
this.addAbility(new TransformAbility());
|
this.getLeftHalfCard().addAbility(new ActivateAsSorceryActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{6}{B/P}")));
|
||||||
this.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) {
|
private HerbologyInstructor(final HerbologyInstructor card) {
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,12 @@
|
||||||
package mage.cards.h;
|
package mage.cards.h;
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.common.SpellCastOpponentTriggeredAbility;
|
import mage.abilities.common.SpellCastOpponentTriggeredAbility;
|
||||||
|
import mage.abilities.common.WerewolfBackTriggeredAbility;
|
||||||
import mage.abilities.common.WerewolfFrontTriggeredAbility;
|
import mage.abilities.common.WerewolfFrontTriggeredAbility;
|
||||||
import mage.abilities.condition.common.MyTurnCondition;
|
import mage.abilities.condition.common.MyTurnCondition;
|
||||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
|
|
@ -17,25 +16,36 @@ import java.util.UUID;
|
||||||
/**
|
/**
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
*/
|
*/
|
||||||
public final class HermitOfTheNatterknolls extends CardImpl {
|
public final class HermitOfTheNatterknolls extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
public HermitOfTheNatterknolls(UUID ownerId, CardSetInfo setInfo) {
|
public HermitOfTheNatterknolls(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
|
super(ownerId, setInfo,
|
||||||
this.subtype.add(SubType.HUMAN);
|
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WEREWOLF}, "{2}{G}",
|
||||||
this.subtype.add(SubType.WEREWOLF);
|
"Lone Wolf of the Natterknolls",
|
||||||
this.power = new MageInt(2);
|
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "G"
|
||||||
this.toughness = new MageInt(3);
|
);
|
||||||
|
|
||||||
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.
|
// 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
|
new DrawCardSourceControllerEffect(1), StaticFilters.FILTER_SPELL_A, false
|
||||||
).withTriggerCondition(MyTurnCondition.instance));
|
).withTriggerCondition(MyTurnCondition.instance));
|
||||||
|
|
||||||
// At the beginning of each upkeep, if no spells were cast last turn, transform Hermit of the Natterknolls.
|
// At the beginning of each upkeep, if no spells were cast last turn, transform Hermit of the Natterknolls.
|
||||||
this.addAbility(new TransformAbility());
|
this.getLeftHalfCard().addAbility(new WerewolfFrontTriggeredAbility());
|
||||||
this.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) {
|
private HermitOfTheNatterknolls(final HermitOfTheNatterknolls card) {
|
||||||
|
|
|
||||||
|
|
@ -1,26 +1,38 @@
|
||||||
package mage.cards.h;
|
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.common.SagaAbility;
|
||||||
|
import mage.abilities.condition.Condition;
|
||||||
import mage.abilities.effects.common.DestroyAllEffect;
|
import mage.abilities.effects.common.DestroyAllEffect;
|
||||||
import mage.abilities.effects.common.ExileGraveyardAllPlayersEffect;
|
import mage.abilities.effects.common.ExileGraveyardAllPlayersEffect;
|
||||||
import mage.abilities.effects.common.ExileSagaAndReturnTransformedEffect;
|
import mage.abilities.effects.common.ExileSagaAndReturnTransformedEffect;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
import mage.abilities.effects.common.LoseGameTargetPlayerEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||||
|
import mage.abilities.keyword.TrampleAbility;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.ComparisonType;
|
import mage.constants.*;
|
||||||
import mage.constants.SagaChapter;
|
import mage.counters.CounterType;
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.filter.FilterPermanent;
|
import mage.filter.FilterPermanent;
|
||||||
import mage.filter.common.FilterNonlandPermanent;
|
import mage.filter.common.FilterNonlandPermanent;
|
||||||
import mage.filter.predicate.mageobject.ManaValuePredicate;
|
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;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public final class HidetsuguConsumesAll extends CardImpl {
|
public final class HidetsuguConsumesAll extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
private static final FilterPermanent filter = new FilterNonlandPermanent();
|
private static final FilterPermanent filter = new FilterNonlandPermanent();
|
||||||
|
|
||||||
|
|
@ -29,26 +41,41 @@ public final class HidetsuguConsumesAll extends CardImpl {
|
||||||
}
|
}
|
||||||
|
|
||||||
public HidetsuguConsumesAll(UUID ownerId, CardSetInfo setInfo) {
|
public HidetsuguConsumesAll(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}{R}");
|
super(ownerId, setInfo,
|
||||||
|
new CardType[]{CardType.ENCHANTMENT}, new SubType[]{SubType.SAGA}, "{1}{B}{R}",
|
||||||
this.subtype.add(SubType.SAGA);
|
"Vessel of the All-Consuming",
|
||||||
this.secondSideCardClazz = mage.cards.v.VesselOfTheAllConsuming.class;
|
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.)
|
// (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.
|
// 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"));
|
.setText("destroy each nonland permanent with mana value 1 or less"));
|
||||||
|
|
||||||
// II — Exile all graveyards.
|
// 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.
|
// III — Exile this Saga, then return it to the battlefield transformed under your control.
|
||||||
this.addAbility(new TransformAbility());
|
sagaAbility.addChapterEffect(this.getLeftHalfCard(), SagaChapter.CHAPTER_III, new ExileSagaAndReturnTransformedEffect());
|
||||||
sagaAbility.addChapterEffect(this, 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) {
|
private HidetsuguConsumesAll(final HidetsuguConsumesAll card) {
|
||||||
|
|
@ -60,3 +87,60 @@ public final class HidetsuguConsumesAll extends CardImpl {
|
||||||
return new HidetsuguConsumesAll(this);
|
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<AbstractMap.SimpleImmutableEntry<MageObjectReference, UUID>, 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<MageObjectReference, UUID> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,13 @@
|
||||||
package mage.cards.h;
|
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.common.WerewolfFrontTriggeredAbility;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
import mage.abilities.effects.common.combat.MustBeBlockedByAtLeastOneSourceEffect;
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.Duration;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -13,21 +15,29 @@ import java.util.UUID;
|
||||||
/**
|
/**
|
||||||
* @author BetaSteward
|
* @author BetaSteward
|
||||||
*/
|
*/
|
||||||
public final class HinterlandHermit extends CardImpl {
|
public final class HinterlandHermit extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
public HinterlandHermit(UUID ownerId, CardSetInfo setInfo) {
|
public HinterlandHermit(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}");
|
super(ownerId, setInfo,
|
||||||
this.subtype.add(SubType.HUMAN);
|
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WEREWOLF}, "{1}{R}",
|
||||||
this.subtype.add(SubType.WEREWOLF);
|
"Hinterland Scourge",
|
||||||
|
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "R"
|
||||||
|
);
|
||||||
|
|
||||||
this.secondSideCardClazz = mage.cards.h.HinterlandScourge.class;
|
// Hinterland Hermit
|
||||||
|
this.getLeftHalfCard().setPT(2, 1);
|
||||||
this.power = new MageInt(2);
|
|
||||||
this.toughness = new MageInt(1);
|
|
||||||
|
|
||||||
// At the beginning of each upkeep, if no spells were cast last turn, transform Hinterland Hermit.
|
// At the beginning of each upkeep, if no spells were cast last turn, transform Hinterland Hermit.
|
||||||
this.addAbility(new TransformAbility());
|
this.getLeftHalfCard().addAbility(new WerewolfFrontTriggeredAbility());
|
||||||
this.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) {
|
private HinterlandHermit(final HinterlandHermit card) {
|
||||||
|
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,9 +1,10 @@
|
||||||
package mage.cards.h;
|
package mage.cards.h;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.abilities.keyword.DauntAbility;
|
||||||
import mage.abilities.keyword.DayboundAbility;
|
import mage.abilities.keyword.DayboundAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.abilities.keyword.NightboundAbility;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
|
|
||||||
|
|
@ -12,19 +13,29 @@ import java.util.UUID;
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public final class HookhandMariner extends CardImpl {
|
public final class HookhandMariner extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
public HookhandMariner(UUID ownerId, CardSetInfo setInfo) {
|
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);
|
// Hookhand Mariner
|
||||||
this.subtype.add(SubType.WEREWOLF);
|
this.getLeftHalfCard().setPT(4, 4);
|
||||||
this.power = new MageInt(4);
|
|
||||||
this.toughness = new MageInt(4);
|
|
||||||
this.secondSideCardClazz = mage.cards.r.RiphookRaider.class;
|
|
||||||
|
|
||||||
// Daybound
|
// 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) {
|
private HookhandMariner(final HookhandMariner card) {
|
||||||
|
|
|
||||||
|
|
@ -2,42 +2,57 @@ package mage.cards.h;
|
||||||
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
||||||
|
import mage.abilities.common.AttacksTriggeredAbility;
|
||||||
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
import mage.abilities.condition.Condition;
|
import mage.abilities.condition.Condition;
|
||||||
import mage.abilities.condition.common.SourceHasCounterCondition;
|
import mage.abilities.condition.common.SourceHasCounterCondition;
|
||||||
import mage.abilities.costs.common.SacrificeTargetCost;
|
import mage.abilities.costs.common.SacrificeTargetCost;
|
||||||
import mage.abilities.costs.common.TapSourceCost;
|
import mage.abilities.costs.common.TapSourceCost;
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
import mage.abilities.decorator.ConditionalOneShotEffect;
|
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.RemoveAllCountersSourceEffect;
|
||||||
import mage.abilities.effects.common.TransformSourceEffect;
|
import mage.abilities.effects.common.TransformSourceEffect;
|
||||||
import mage.abilities.effects.common.UntapSourceEffect;
|
import mage.abilities.effects.common.UntapSourceEffect;
|
||||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
|
||||||
import mage.abilities.mana.ColorlessManaAbility;
|
import mage.abilities.mana.ColorlessManaAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.Card;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.Outcome;
|
||||||
|
import mage.constants.SubType;
|
||||||
import mage.counters.CounterType;
|
import mage.counters.CounterType;
|
||||||
import mage.filter.StaticFilters;
|
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;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author LePwnerer
|
* @author LePwnerer
|
||||||
*/
|
*/
|
||||||
public final class HostileHostel extends CardImpl {
|
public final class HostileHostel extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
private static final Condition condition = new SourceHasCounterCondition(CounterType.SOUL, 3);
|
private static final Condition condition = new SourceHasCounterCondition(CounterType.SOUL, 3);
|
||||||
|
|
||||||
public HostileHostel(UUID ownerId, CardSetInfo setInfo) {
|
public HostileHostel(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
|
super(ownerId, setInfo,
|
||||||
this.secondSideCardClazz = mage.cards.c.CreepingInn.class;
|
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}.
|
// {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.
|
// {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 ability = new ActivateAsSorceryActivatedAbility(new AddCountersSourceEffect(CounterType.SOUL.createInstance()), new ManaCostsImpl<>("{1}"));
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
ability.addCost(new SacrificeTargetCost(StaticFilters.FILTER_PERMANENT_CREATURE));
|
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 " +
|
new RemoveAllCountersSourceEffect(CounterType.SOUL), condition, "Then if there are three " +
|
||||||
"or more soul counters on it, remove those counters, transform it, then untap it"
|
"or more soul counters on it, remove those counters, transform it, then untap it"
|
||||||
).addEffect(new TransformSourceEffect()).addEffect(new UntapSourceEffect()));
|
).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) {
|
private HostileHostel(final HostileHostel card) {
|
||||||
|
|
@ -57,3 +82,54 @@ public final class HostileHostel extends CardImpl {
|
||||||
return new HostileHostel(this);
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,22 @@
|
||||||
package mage.cards.h;
|
package mage.cards.h;
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
|
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||||
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
|
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
|
||||||
import mage.abilities.keyword.DayboundAbility;
|
import mage.abilities.keyword.DayboundAbility;
|
||||||
|
import mage.abilities.keyword.NightboundAbility;
|
||||||
import mage.abilities.keyword.TrampleAbility;
|
import mage.abilities.keyword.TrampleAbility;
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.Duration;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.counters.CounterType;
|
import mage.counters.CounterType;
|
||||||
|
import mage.filter.FilterPermanent;
|
||||||
|
import mage.filter.predicate.Predicates;
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -19,29 +24,60 @@ import java.util.UUID;
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @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) {
|
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);
|
// Hound Tamer
|
||||||
this.subtype.add(SubType.WEREWOLF);
|
this.getLeftHalfCard().setPT(3, 3);
|
||||||
this.power = new MageInt(3);
|
|
||||||
this.toughness = new MageInt(3);
|
|
||||||
this.secondSideCardClazz = mage.cards.u.UntamedPup.class;
|
|
||||||
|
|
||||||
// Trample
|
// Trample
|
||||||
this.addAbility(TrampleAbility.getInstance());
|
this.getLeftHalfCard().addAbility(TrampleAbility.getInstance());
|
||||||
|
|
||||||
// {3}{G}: Put a +1/+1 counter on target creature.
|
// {3}{G}: Put a +1/+1 counter on target creature.
|
||||||
Ability ability = new SimpleActivatedAbility(
|
Ability ability = new SimpleActivatedAbility(
|
||||||
new AddCountersTargetEffect(CounterType.P1P1.createInstance()), new ManaCostsImpl<>("{3}{G}")
|
new AddCountersTargetEffect(CounterType.P1P1.createInstance()), new ManaCostsImpl<>("{3}{G}")
|
||||||
);
|
);
|
||||||
ability.addTarget(new TargetCreaturePermanent());
|
ability.addTarget(new TargetCreaturePermanent());
|
||||||
this.addAbility(ability);
|
this.getLeftHalfCard().addAbility(ability);
|
||||||
|
|
||||||
// Daybound
|
// 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) {
|
private HoundTamer(final HoundTamer card) {
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,19 @@
|
||||||
package mage.cards.h;
|
package mage.cards.h;
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
||||||
import mage.abilities.common.CantBeCounteredSourceAbility;
|
import mage.abilities.common.CantBeCounteredSourceAbility;
|
||||||
|
import mage.abilities.common.TransformsOrEntersTriggeredAbility;
|
||||||
import mage.abilities.costs.common.TapSourceCost;
|
import mage.abilities.costs.common.TapSourceCost;
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
import mage.abilities.effects.OneShotEffect;
|
import mage.abilities.effects.OneShotEffect;
|
||||||
|
import mage.abilities.effects.common.LookLibraryAndPickControllerEffect;
|
||||||
import mage.abilities.keyword.DayboundAbility;
|
import mage.abilities.keyword.DayboundAbility;
|
||||||
|
import mage.abilities.keyword.NightboundAbility;
|
||||||
import mage.cards.Card;
|
import mage.cards.Card;
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.Outcome;
|
import mage.constants.*;
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.constants.Zone;
|
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
|
|
@ -28,29 +27,43 @@ import java.util.UUID;
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public final class HowlpackPiper extends CardImpl {
|
public final class HowlpackPiper extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
public HowlpackPiper(UUID ownerId, CardSetInfo setInfo) {
|
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);
|
// Howlpack Piper
|
||||||
this.subtype.add(SubType.WEREWOLF);
|
this.getLeftHalfCard().setPT(2, 2);
|
||||||
this.power = new MageInt(2);
|
|
||||||
this.toughness = new MageInt(2);
|
|
||||||
this.secondSideCardClazz = mage.cards.w.WildsongHowler.class;
|
|
||||||
|
|
||||||
// This spell can't be countered.
|
// 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.
|
// {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(
|
Ability ability = new ActivateAsSorceryActivatedAbility(
|
||||||
new HowlpackPiperEffect(), new ManaCostsImpl<>("{1}{G}")
|
new HowlpackPiperEffect(), new ManaCostsImpl<>("{1}{G}")
|
||||||
);
|
);
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
this.addAbility(ability);
|
this.getLeftHalfCard().addAbility(ability);
|
||||||
|
|
||||||
// Daybound
|
// 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) {
|
private HowlpackPiper(final HowlpackPiper card) {
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,27 @@
|
||||||
package mage.cards.h;
|
package mage.cards.h;
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
||||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
|
import mage.abilities.common.SagaAbility;
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
|
import mage.abilities.effects.common.CreateTokenEffect;
|
||||||
import mage.abilities.effects.common.ExileAndReturnSourceEffect;
|
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.effects.common.search.SearchLibraryPutInHandEffect;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
import mage.abilities.keyword.DoubleStrikeAbility;
|
||||||
import mage.cards.CardImpl;
|
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.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.PutCards;
|
import mage.constants.*;
|
||||||
import mage.constants.SubType;
|
import mage.filter.FilterCard;
|
||||||
import mage.constants.SuperType;
|
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
|
import mage.filter.common.FilterControlledPermanent;
|
||||||
|
import mage.game.permanent.token.DinosaurVanillaToken;
|
||||||
import mage.target.common.TargetCardInLibrary;
|
import mage.target.common.TargetCardInLibrary;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -22,30 +29,74 @@ import java.util.UUID;
|
||||||
/**
|
/**
|
||||||
* @author Susucr
|
* @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) {
|
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);
|
// Huatli, Poet of Unity
|
||||||
this.subtype.add(SubType.HUMAN);
|
this.getLeftHalfCard().setPT(2, 3);
|
||||||
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;
|
|
||||||
|
|
||||||
// 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.
|
// 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);
|
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.
|
// {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(
|
Ability ability = new ActivateAsSorceryActivatedAbility(
|
||||||
new ExileAndReturnSourceEffect(PutCards.BATTLEFIELD_TRANSFORMED),
|
new ExileAndReturnSourceEffect(PutCards.BATTLEFIELD_TRANSFORMED),
|
||||||
new ManaCostsImpl<>("{3}{R/W}{R/W}")
|
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) {
|
private HuatliPoetOfUnity(final HuatliPoetOfUnity card) {
|
||||||
|
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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. " +
|
|
||||||
"<i>(It can't be blocked except by two or more creatures.)</i>"
|
|
||||||
)));
|
|
||||||
|
|
||||||
// Equip {2}
|
|
||||||
this.addAbility(new EquipAbility(2, false));
|
|
||||||
}
|
|
||||||
|
|
||||||
private ScroungedScythe(final ScroungedScythe card) {
|
|
||||||
super(card);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ScroungedScythe copy() {
|
|
||||||
return new ScroungedScythe(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Entry<MageObjectReference, UUID>, 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<Entry<MageObjectReference, UUID>, Integer> morMap = game.getState()
|
|
||||||
.getWatcher(VesselOfTheAllConsumingWatcher.class)
|
|
||||||
.morMap;
|
|
||||||
Entry<MageObjectReference, UUID> 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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;
|
|
||||||
|
|
||||||
// <i>(Transforms from Hadana's Climb.)</i>
|
|
||||||
|
|
||||||
// {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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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("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("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 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 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("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));
|
cards.add(new SetCardInfo("Hunger of the Howlpack", 119, Rarity.COMMON, mage.cards.h.HungerOfTheHowlpack.class));
|
||||||
|
|
|
||||||
|
|
@ -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("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("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("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("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("Bitterheart Witch", 88, Rarity.UNCOMMON, mage.cards.b.BitterheartWitch.class));
|
||||||
cards.add(new SetCardInfo("Blasphemous Act", 130, Rarity.RARE, mage.cards.b.BlasphemousAct.class));
|
cards.add(new SetCardInfo("Blasphemous Act", 130, Rarity.RARE, mage.cards.b.BlasphemousAct.class));
|
||||||
|
|
|
||||||
|
|
@ -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", 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", 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 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("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 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));
|
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", 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("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("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("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("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));
|
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", 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("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("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", 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("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));
|
cards.add(new SetCardInfo("Witch's Web", 227, Rarity.COMMON, mage.cards.w.WitchsWeb.class));
|
||||||
|
|
|
||||||
|
|
@ -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("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("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("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("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("Croaking Counterpart", 215, Rarity.RARE, mage.cards.c.CroakingCounterpart.class));
|
||||||
cards.add(new SetCardInfo("Crossroads Candleguide", 253, Rarity.COMMON, mage.cards.c.CrossroadsCandleguide.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 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("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("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 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("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));
|
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("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("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 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("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 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));
|
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("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("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("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("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("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));
|
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("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("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("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("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 Harmony", 236, Rarity.RARE, mage.cards.r.RiteOfHarmony.class));
|
||||||
cards.add(new SetCardInfo("Rite of Oblivion", 237, Rarity.UNCOMMON, mage.cards.r.RiteOfOblivion.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 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("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("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("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("Valorous Stance", 309, Rarity.UNCOMMON, mage.cards.v.ValorousStance.class));
|
||||||
cards.add(new SetCardInfo("Vampire Interloper", 125, Rarity.COMMON, mage.cards.v.VampireInterloper.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("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("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("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("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("Winged Portent", 356, Rarity.RARE, mage.cards.w.WingedPortent.class));
|
||||||
cards.add(new SetCardInfo("Winterthorn Blessing", 251, Rarity.UNCOMMON, mage.cards.w.WinterthornBlessing.class));
|
cards.add(new SetCardInfo("Winterthorn Blessing", 251, Rarity.UNCOMMON, mage.cards.w.WinterthornBlessing.class));
|
||||||
|
|
|
||||||
|
|
@ -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("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("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("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", 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("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));
|
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("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", 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("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", 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 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));
|
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("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", 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("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", 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("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));
|
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 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("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("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", 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("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));
|
cards.add(new SetCardInfo("Vampire Interloper", 125, Rarity.COMMON, mage.cards.v.VampireInterloper.class));
|
||||||
|
|
|
||||||
|
|
@ -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", 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("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("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("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", 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));
|
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("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", 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("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", 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("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));
|
cards.add(new SetCardInfo("Seize the Storm", 170, Rarity.COMMON, mage.cards.s.SeizeTheStorm.class, NON_FULL_USE_VARIOUS));
|
||||||
|
|
|
||||||
|
|
@ -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("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("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 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("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("Herd Baloth", 584, Rarity.UNCOMMON, mage.cards.h.HerdBaloth.class));
|
||||||
cards.add(new SetCardInfo("Hive Stirrings", 94, Rarity.COMMON, mage.cards.h.HiveStirrings.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("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("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("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("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("Winding Way", 670, Rarity.COMMON, mage.cards.w.WindingWay.class));
|
||||||
cards.add(new SetCardInfo("Winged Shepherd", 158, Rarity.COMMON, mage.cards.w.WingedShepherd.class));
|
cards.add(new SetCardInfo("Winged Shepherd", 158, Rarity.COMMON, mage.cards.w.WingedShepherd.class));
|
||||||
|
|
|
||||||
|
|
@ -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", 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("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("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("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("Voltage Surge", 171, Rarity.COMMON, mage.cards.v.VoltageSurge.class));
|
||||||
cards.add(new SetCardInfo("Walking Skyscraper", 263, Rarity.UNCOMMON, mage.cards.w.WalkingSkyscraper.class));
|
cards.add(new SetCardInfo("Walking Skyscraper", 263, Rarity.UNCOMMON, mage.cards.w.WalkingSkyscraper.class));
|
||||||
|
|
|
||||||
|
|
@ -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("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("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("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("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("Creepy Puppeteer", 95365, Rarity.RARE, mage.cards.c.CreepyPuppeteer.class));
|
||||||
cards.add(new SetCardInfo("Crippling Fear", 88286, Rarity.RARE, mage.cards.c.CripplingFear.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("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 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("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("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("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));
|
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("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("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("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("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("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));
|
cards.add(new SetCardInfo("Willowdusk, Essence Seer", 90288, Rarity.MYTHIC, mage.cards.w.WillowduskEssenceSeer.class));
|
||||||
|
|
|
||||||
|
|
@ -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("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", 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 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("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("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));
|
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("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("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("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("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("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));
|
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 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 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 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", 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("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));
|
cards.add(new SetCardInfo("Placid Rottentail", 199, Rarity.COMMON, mage.cards.p.PlacidRottentail.class));
|
||||||
|
|
|
||||||
|
|
@ -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("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("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("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("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("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));
|
cards.add(new SetCardInfo("Zacama, Primal Calamity", 174, Rarity.MYTHIC, mage.cards.z.ZacamaPrimalCalamity.class));
|
||||||
|
|
|
||||||
|
|
@ -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("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", "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("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", "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("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));
|
cards.add(new SetCardInfo("Zacama, Primal Calamity", "174p", Rarity.MYTHIC, mage.cards.z.ZacamaPrimalCalamity.class, NON_FULL_USE_VARIOUS));
|
||||||
|
|
|
||||||
|
|
@ -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("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("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 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("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("Constricting Sliver", 611, Rarity.RARE, mage.cards.c.ConstrictingSliver.class));
|
||||||
cards.add(new SetCardInfo("Essence Sliver", 612, Rarity.RARE, mage.cards.e.EssenceSliver.class));
|
cards.add(new SetCardInfo("Essence Sliver", 612, Rarity.RARE, mage.cards.e.EssenceSliver.class));
|
||||||
|
|
|
||||||
|
|
@ -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("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("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 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("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("Highland Lake", 277, Rarity.UNCOMMON, mage.cards.h.HighlandLake.class));
|
||||||
cards.add(new SetCardInfo("Hinterland Logger", 210, Rarity.COMMON, mage.cards.h.HinterlandLogger.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("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("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("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("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("Mad Prophet", 171, Rarity.UNCOMMON, mage.cards.m.MadProphet.class));
|
||||||
cards.add(new SetCardInfo("Magmatic Chasm", 172, Rarity.COMMON, mage.cards.m.MagmaticChasm.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("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("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("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("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("Seasons Past", 226, Rarity.MYTHIC, mage.cards.s.SeasonsPast.class));
|
||||||
cards.add(new SetCardInfo("Second Harvest", 227, Rarity.RARE, mage.cards.s.SecondHarvest.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("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("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 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("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("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));
|
cards.add(new SetCardInfo("Wolf of Devil's Breach", 192, Rarity.MYTHIC, mage.cards.w.WolfOfDevilsBreach.class));
|
||||||
|
|
|
||||||
|
|
@ -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("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("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 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));
|
cards.add(new SetCardInfo("Wolf of Devil's Breach", "192s", Rarity.MYTHIC, mage.cards.w.WolfOfDevilsBreach.class));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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("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("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("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("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("Second Harvest", 213, Rarity.RARE, mage.cards.s.SecondHarvest.class));
|
||||||
cards.add(new SetCardInfo("Selfless Spirit", 42, Rarity.RARE, mage.cards.s.SelflessSpirit.class));
|
cards.add(new SetCardInfo("Selfless Spirit", 42, Rarity.RARE, mage.cards.s.SelflessSpirit.class));
|
||||||
|
|
|
||||||
|
|
@ -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("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", 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("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("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("Rumbling Rockslide", 163, Rarity.COMMON, mage.cards.r.RumblingRockslide.class));
|
||||||
cards.add(new SetCardInfo("Runaway Boulder", 259, Rarity.COMMON, mage.cards.r.RunawayBoulder.class));
|
cards.add(new SetCardInfo("Runaway Boulder", 259, Rarity.COMMON, mage.cards.r.RunawayBoulder.class));
|
||||||
|
|
|
||||||
|
|
@ -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("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("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 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("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("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));
|
cards.add(new SetCardInfo("Maarika, Brutal Gladiator", 15, Rarity.RARE, mage.cards.m.MaarikaBrutalGladiator.class));
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue