mirror of
https://github.com/correl/mage.git
synced 2024-12-26 03:00:11 +00:00
Merge branch 'master' of https://github.com/magefree/mage
This commit is contained in:
commit
ea58f2d65f
20 changed files with 726 additions and 38 deletions
|
@ -1,8 +1,5 @@
|
|||
|
||||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.CounterTargetEffect;
|
||||
import mage.abilities.effects.keyword.InvestigateEffect;
|
||||
import mage.cards.CardImpl;
|
||||
|
@ -10,27 +7,22 @@ import mage.cards.CardSetInfo;
|
|||
import mage.constants.CardType;
|
||||
import mage.target.TargetSpell;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public final class ConfirmSuspicions extends CardImpl {
|
||||
|
||||
public ConfirmSuspicions(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{3}{U}{U}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{U}{U}");
|
||||
|
||||
// Counter target spell.
|
||||
getSpellAbility().addEffect(new CounterTargetEffect());
|
||||
getSpellAbility().addTarget(new TargetSpell());
|
||||
|
||||
// Investigate three times.
|
||||
Effect effect = new InvestigateEffect();
|
||||
effect.setText("<BR><BR>Investigate three times.");
|
||||
getSpellAbility().addEffect(effect);
|
||||
effect = new InvestigateEffect();
|
||||
effect.setText(null);
|
||||
getSpellAbility().addEffect(effect);
|
||||
getSpellAbility().addEffect(effect);
|
||||
getSpellAbility().addEffect(new InvestigateEffect(3).concatBy("<br>"));
|
||||
}
|
||||
|
||||
private ConfirmSuspicions(final ConfirmSuspicions card) {
|
||||
|
|
|
@ -14,9 +14,9 @@ import java.util.UUID;
|
|||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class DawnheartRejuvenator extends CardImpl {
|
||||
public final class DawnhartRejuvenator extends CardImpl {
|
||||
|
||||
public DawnheartRejuvenator(UUID ownerId, CardSetInfo setInfo) {
|
||||
public DawnhartRejuvenator(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}");
|
||||
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
|
@ -24,19 +24,19 @@ public final class DawnheartRejuvenator extends CardImpl {
|
|||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(4);
|
||||
|
||||
// When Dawnheart Rejuvenator enters the battlefield, you gain 3 life.
|
||||
// When Dawnhart Rejuvenator enters the battlefield, you gain 3 life.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect(3)));
|
||||
|
||||
// {T}: Add one mana of any color.
|
||||
this.addAbility(new AnyColorManaAbility());
|
||||
}
|
||||
|
||||
private DawnheartRejuvenator(final DawnheartRejuvenator card) {
|
||||
private DawnhartRejuvenator(final DawnhartRejuvenator card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DawnheartRejuvenator copy() {
|
||||
return new DawnheartRejuvenator(this);
|
||||
public DawnhartRejuvenator copy() {
|
||||
return new DawnhartRejuvenator(this);
|
||||
}
|
||||
}
|
57
Mage.Sets/src/mage/cards/f/FamishedForagers.java
Normal file
57
Mage.Sets/src/mage/cards/f/FamishedForagers.java
Normal file
|
@ -0,0 +1,57 @@
|
|||
package mage.cards.f;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.Mana;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.condition.common.OpponentsLostLifeCondition;
|
||||
import mage.abilities.costs.common.DiscardCardCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.mana.BasicManaEffect;
|
||||
import mage.abilities.hint.common.OpponentsLostLifeHint;
|
||||
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 FamishedForagers extends CardImpl {
|
||||
|
||||
public FamishedForagers(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}");
|
||||
|
||||
this.subtype.add(SubType.VAMPIRE);
|
||||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// When Famished Foragers enters the battlefield, if an opponent lost life this turn, add {R}{R}{R}.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(new BasicManaEffect(Mana.RedMana(3))),
|
||||
OpponentsLostLifeCondition.instance, "When {this} enters the battlefield, " +
|
||||
"if an opponent lost life this turn, add {R}{R}{R}."
|
||||
).addHint(OpponentsLostLifeHint.instance));
|
||||
|
||||
// {2}{R}, Discard a card: Draw a card.
|
||||
Ability ability = new SimpleActivatedAbility(
|
||||
new DrawCardSourceControllerEffect(1), new ManaCostsImpl<>("{2}{R}")
|
||||
);
|
||||
ability.addCost(new DiscardCardCost());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private FamishedForagers(final FamishedForagers card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FamishedForagers copy() {
|
||||
return new FamishedForagers(this);
|
||||
}
|
||||
}
|
44
Mage.Sets/src/mage/cards/f/FoulPlay.java
Normal file
44
Mage.Sets/src/mage/cards/f/FoulPlay.java
Normal file
|
@ -0,0 +1,44 @@
|
|||
package mage.cards.f;
|
||||
|
||||
import mage.abilities.effects.common.DestroyTargetEffect;
|
||||
import mage.abilities.effects.keyword.InvestigateEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.ComparisonType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.filter.predicate.mageobject.PowerPredicate;
|
||||
import mage.target.TargetPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class FoulPlay extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterCreaturePermanent("creature with power 2 or less");
|
||||
|
||||
static {
|
||||
filter.add(new PowerPredicate(ComparisonType.FEWER_THAN, 2));
|
||||
}
|
||||
|
||||
public FoulPlay(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{B}");
|
||||
|
||||
// Destroy target creature with power 2 or less. Investigate.
|
||||
this.getSpellAbility().addEffect(new DestroyTargetEffect());
|
||||
this.getSpellAbility().addTarget(new TargetPermanent(filter));
|
||||
this.getSpellAbility().addEffect(new InvestigateEffect());
|
||||
}
|
||||
|
||||
private FoulPlay(final FoulPlay card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FoulPlay copy() {
|
||||
return new FoulPlay(this);
|
||||
}
|
||||
}
|
87
Mage.Sets/src/mage/cards/h/HowlOfTheHunt.java
Normal file
87
Mage.Sets/src/mage/cards/h/HowlOfTheHunt.java
Normal file
|
@ -0,0 +1,87 @@
|
|||
package mage.cards.h;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.AttachEffect;
|
||||
import mage.abilities.effects.common.UntapEnchantedEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostEnchantedEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
|
||||
import mage.abilities.keyword.EnchantAbility;
|
||||
import mage.abilities.keyword.FlashAbility;
|
||||
import mage.abilities.keyword.VigilanceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.TargetPermanent;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class HowlOfTheHunt extends CardImpl {
|
||||
|
||||
public HowlOfTheHunt(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}");
|
||||
|
||||
this.subtype.add(SubType.AURA);
|
||||
|
||||
// Flash
|
||||
this.addAbility(FlashAbility.getInstance());
|
||||
|
||||
// Enchant creature
|
||||
TargetPermanent auraTarget = new TargetCreaturePermanent();
|
||||
this.getSpellAbility().addTarget(auraTarget);
|
||||
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
|
||||
Ability ability = new EnchantAbility(auraTarget.getTargetName());
|
||||
this.addAbility(ability);
|
||||
|
||||
// When Howl of the Hunt enters the battlefield, if enchanted creature is a Wolf or Werewolf, untap that creature.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(new UntapEnchantedEffect()),
|
||||
HowlOfTheHuntCondition.instance, "When {this} enters the battlefield, " +
|
||||
"if enchanted creature is a Wolf or Werewolf, untap that creature."
|
||||
));
|
||||
|
||||
// Enchanted creature gets +2/+2 and has vigilance.
|
||||
ability = new SimpleStaticAbility(new BoostEnchantedEffect(2, 2));
|
||||
ability.addEffect(new GainAbilityAttachedEffect(
|
||||
VigilanceAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield
|
||||
).setText("and has vigilance"));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private HowlOfTheHunt(final HowlOfTheHunt card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HowlOfTheHunt copy() {
|
||||
return new HowlOfTheHunt(this);
|
||||
}
|
||||
}
|
||||
|
||||
enum HowlOfTheHuntCondition implements Condition {
|
||||
instance;
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Permanent enchantment = source.getSourcePermanentIfItStillExists(game);
|
||||
if (enchantment == null) {
|
||||
return false;
|
||||
}
|
||||
Permanent creature = game.getPermanent(enchantment.getAttachedTo());
|
||||
return creature != null && creature.hasSubtype(SubType.WOLF, game) || creature.hasSubtype(SubType.WEREWOLF, game);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "";
|
||||
}
|
||||
}
|
|
@ -4,7 +4,10 @@ import mage.MageInt;
|
|||
import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.hint.Hint;
|
||||
import mage.abilities.hint.ValueHint;
|
||||
import mage.abilities.keyword.DecayedAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
@ -30,6 +33,9 @@ public final class JadarGhoulcallerOfNephalia extends CardImpl {
|
|||
|
||||
private static final Condition condition
|
||||
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.EQUAL_TO, 0);
|
||||
private static final Hint hint = new ValueHint(
|
||||
"Creatures you control with decayed", new PermanentsOnBattlefieldCount(filter)
|
||||
);
|
||||
|
||||
public JadarGhoulcallerOfNephalia(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}");
|
||||
|
@ -44,7 +50,7 @@ public final class JadarGhoulcallerOfNephalia extends CardImpl {
|
|||
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
||||
Zone.BATTLEFIELD, new CreateTokenEffect(new ZombieDecayedToken()),
|
||||
TargetController.YOU, condition, false
|
||||
));
|
||||
).addHint(hint));
|
||||
}
|
||||
|
||||
private JadarGhoulcallerOfNephalia(final JadarGhoulcallerOfNephalia card) {
|
||||
|
|
42
Mage.Sets/src/mage/cards/p/PestilentWolf.java
Normal file
42
Mage.Sets/src/mage/cards/p/PestilentWolf.java
Normal file
|
@ -0,0 +1,42 @@
|
|||
package mage.cards.p;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||
import mage.abilities.keyword.DeathtouchAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class PestilentWolf extends CardImpl {
|
||||
|
||||
public PestilentWolf(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
|
||||
|
||||
this.subtype.add(SubType.WOLF);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// {2}{G}: Pestilent Wolf gains deathtouch until end of turn.
|
||||
this.addAbility(new SimpleActivatedAbility(new GainAbilitySourceEffect(
|
||||
DeathtouchAbility.getInstance(), Duration.EndOfTurn
|
||||
), new ManaCostsImpl<>("{2}{G}")));
|
||||
}
|
||||
|
||||
private PestilentWolf(final PestilentWolf card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PestilentWolf copy() {
|
||||
return new PestilentWolf(this);
|
||||
}
|
||||
}
|
55
Mage.Sets/src/mage/cards/s/SecretsOfTheKey.java
Normal file
55
Mage.Sets/src/mage/cards/s/SecretsOfTheKey.java
Normal file
|
@ -0,0 +1,55 @@
|
|||
package mage.cards.s;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.decorator.ConditionalOneShotEffect;
|
||||
import mage.abilities.effects.keyword.InvestigateEffect;
|
||||
import mage.abilities.keyword.FlashbackAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.TimingRule;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.stack.Spell;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class SecretsOfTheKey extends CardImpl {
|
||||
|
||||
public SecretsOfTheKey(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{U}");
|
||||
|
||||
// Investigate. If this spell was cast from a graveyard, investigate twice instead.
|
||||
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
|
||||
new InvestigateEffect(2), new InvestigateEffect(), SecretsOfTheKeyCondition.instance,
|
||||
"Investigate. If this spell was cast from a graveyard, investigate twice instead."
|
||||
));
|
||||
|
||||
// Flashback {3}{U}
|
||||
this.addAbility(new FlashbackAbility(new ManaCostsImpl<>("{3}{U}"), TimingRule.INSTANT));
|
||||
}
|
||||
|
||||
private SecretsOfTheKey(final SecretsOfTheKey card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SecretsOfTheKey copy() {
|
||||
return new SecretsOfTheKey(this);
|
||||
}
|
||||
}
|
||||
|
||||
enum SecretsOfTheKeyCondition implements Condition {
|
||||
instance;
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Spell spell = game.getSpell(source.getSourceId());
|
||||
return spell != null && spell.getFromZone() == Zone.GRAVEYARD;
|
||||
}
|
||||
}
|
74
Mage.Sets/src/mage/cards/s/SigardaChampionOfLight.java
Normal file
74
Mage.Sets/src/mage/cards/s/SigardaChampionOfLight.java
Normal file
|
@ -0,0 +1,74 @@
|
|||
package mage.cards.s;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.AttacksTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.condition.common.CovenCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
||||
import mage.abilities.effects.common.LookLibraryAndPickControllerEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostControlledEffect;
|
||||
import mage.abilities.hint.common.CovenHint;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.abilities.keyword.TrampleAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.filter.FilterCard;
|
||||
import mage.filter.common.FilterCreatureCard;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class SigardaChampionOfLight extends CardImpl {
|
||||
|
||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(SubType.HUMAN, "Humans");
|
||||
private static final FilterCard filter2 = new FilterCreatureCard("Human creature card");
|
||||
|
||||
static {
|
||||
filter.add(SubType.HUMAN.getPredicate());
|
||||
}
|
||||
|
||||
public SigardaChampionOfLight(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}{W}{W}");
|
||||
|
||||
this.addSuperType(SuperType.LEGENDARY);
|
||||
this.subtype.add(SubType.ANGEL);
|
||||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(4);
|
||||
|
||||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// Trample
|
||||
this.addAbility(TrampleAbility.getInstance());
|
||||
|
||||
// Humans you control get +1/+1.
|
||||
this.addAbility(new SimpleStaticAbility(new BoostControlledEffect(
|
||||
1, 1, Duration.WhileOnBattlefield, filter
|
||||
)));
|
||||
|
||||
// Coven — Whenever Sigarda attacks, if you control three or more creatures with different powers, look at the top five cards of your library. You may reveal a Human 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 ConditionalInterveningIfTriggeredAbility(
|
||||
new AttacksTriggeredAbility(new LookLibraryAndPickControllerEffect(
|
||||
StaticValue.get(5), false, StaticValue.get(1), filter2,
|
||||
Zone.LIBRARY, false, true, false, Zone.HAND, true
|
||||
).setBackInRandomOrder(true)), CovenCondition.instance, AbilityWord.COVEN.formatWord() +
|
||||
"Whenever {this} attacks, if you control three or more creatures with different powers, " +
|
||||
"look at the top five cards of your library. You may reveal a Human creature card from among them " +
|
||||
"and put it into your hand. Put the rest on the bottom of your library in a random order."
|
||||
).addHint(CovenHint.instance));
|
||||
}
|
||||
|
||||
private SigardaChampionOfLight(final SigardaChampionOfLight card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SigardaChampionOfLight copy() {
|
||||
return new SigardaChampionOfLight(this);
|
||||
}
|
||||
}
|
43
Mage.Sets/src/mage/cards/t/TavernRuffian.java
Normal file
43
Mage.Sets/src/mage/cards/t/TavernRuffian.java
Normal file
|
@ -0,0 +1,43 @@
|
|||
package mage.cards.t;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.keyword.DayboundAbility;
|
||||
import mage.abilities.keyword.TransformAbility;
|
||||
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 TavernRuffian extends CardImpl {
|
||||
|
||||
public TavernRuffian(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}");
|
||||
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.subtype.add(SubType.WARRIOR);
|
||||
this.subtype.add(SubType.WEREWOLF);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(5);
|
||||
|
||||
this.transformable = true;
|
||||
this.secondSideCardClazz = mage.cards.t.TavernSmasher.class;
|
||||
|
||||
// Daybound
|
||||
this.addAbility(new TransformAbility());
|
||||
this.addAbility(DayboundAbility.getInstance());
|
||||
}
|
||||
|
||||
private TavernRuffian(final TavernRuffian card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TavernRuffian copy() {
|
||||
return new TavernRuffian(this);
|
||||
}
|
||||
}
|
41
Mage.Sets/src/mage/cards/t/TavernSmasher.java
Normal file
41
Mage.Sets/src/mage/cards/t/TavernSmasher.java
Normal file
|
@ -0,0 +1,41 @@
|
|||
package mage.cards.t;
|
||||
|
||||
import mage.MageInt;
|
||||
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 TavernSmasher extends CardImpl {
|
||||
|
||||
public TavernSmasher(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
|
||||
|
||||
this.subtype.add(SubType.WEREWOLF);
|
||||
|
||||
this.color.setRed(true);
|
||||
|
||||
this.nightCard = true;
|
||||
|
||||
this.power = new MageInt(6);
|
||||
this.toughness = new MageInt(5);
|
||||
|
||||
// Nightbound
|
||||
this.addAbility(NightboundAbility.getInstance());
|
||||
}
|
||||
|
||||
private TavernSmasher(final TavernSmasher card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TavernSmasher copy() {
|
||||
return new TavernSmasher(this);
|
||||
}
|
||||
}
|
62
Mage.Sets/src/mage/cards/v/VillageReavers.java
Normal file
62
Mage.Sets/src/mage/cards/v/VillageReavers.java
Normal file
|
@ -0,0 +1,62 @@
|
|||
package mage.cards.v;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
import mage.abilities.keyword.NightboundAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.filter.predicate.Predicates;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class VillageReavers extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterControlledCreaturePermanent("Wolves and Werewolves");
|
||||
|
||||
static {
|
||||
filter.add(Predicates.or(
|
||||
SubType.WOLF.getPredicate(),
|
||||
SubType.WEREWOLF.getPredicate()
|
||||
));
|
||||
}
|
||||
|
||||
public VillageReavers(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
|
||||
|
||||
this.subtype.add(SubType.WEREWOLF);
|
||||
|
||||
this.color.setRed(true);
|
||||
|
||||
this.nightCard = true;
|
||||
|
||||
this.power = new MageInt(5);
|
||||
this.toughness = new MageInt(4);
|
||||
|
||||
// Wolves and Werewolves you control have haste.
|
||||
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
|
||||
HasteAbility.getInstance(), Duration.WhileOnBattlefield, filter
|
||||
)));
|
||||
|
||||
// Nightbound
|
||||
this.addAbility(NightboundAbility.getInstance());
|
||||
}
|
||||
|
||||
private VillageReavers(final VillageReavers card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public VillageReavers copy() {
|
||||
return new VillageReavers(this);
|
||||
}
|
||||
}
|
46
Mage.Sets/src/mage/cards/v/VillageWatch.java
Normal file
46
Mage.Sets/src/mage/cards/v/VillageWatch.java
Normal file
|
@ -0,0 +1,46 @@
|
|||
package mage.cards.v;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.keyword.DayboundAbility;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
import mage.abilities.keyword.TransformAbility;
|
||||
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 VillageWatch extends CardImpl {
|
||||
|
||||
public VillageWatch(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}");
|
||||
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.subtype.add(SubType.WEREWOLF);
|
||||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
this.transformable = true;
|
||||
this.secondSideCardClazz = mage.cards.v.VillageReavers.class;
|
||||
|
||||
// Haste
|
||||
this.addAbility(HasteAbility.getInstance());
|
||||
|
||||
// Daybound
|
||||
this.addAbility(new TransformAbility());
|
||||
this.addAbility(DayboundAbility.getInstance());
|
||||
}
|
||||
|
||||
private VillageWatch(final VillageWatch card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public VillageWatch copy() {
|
||||
return new VillageWatch(this);
|
||||
}
|
||||
}
|
|
@ -1,7 +1,6 @@
|
|||
package mage.cards.w;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.keyword.InvestigateEffect;
|
||||
import mage.abilities.keyword.EvokeAbility;
|
||||
|
@ -29,9 +28,7 @@ public final class Wavesifter extends CardImpl {
|
|||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// When Wavesifter enters the battlefield, investigate twice.
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new InvestigateEffect().setText("investigate"));
|
||||
ability.addEffect(new InvestigateEffect().setText("twice"));
|
||||
this.addAbility(ability);
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new InvestigateEffect(2)));
|
||||
|
||||
// Evoke {G}{U}
|
||||
this.addAbility(new EvokeAbility("{G}{U}"));
|
||||
|
|
|
@ -4,11 +4,15 @@ import mage.cards.ExpansionSet;
|
|||
import mage.constants.Rarity;
|
||||
import mage.constants.SetType;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class InnistradMidnightHunt extends ExpansionSet {
|
||||
|
||||
private static final List<String> unfinished = Arrays.asList("Arlinn, the Pack's Hope", "Arlinn, the Moon's Fury", "Brutal Cathar", "Moonrage Brute", "Tavern Ruffian", "Tavern Smasher", "Tovolar, Dire Overlord", "Tovolar, the Midnight Scourge", "Village Watch", "Village Reavers");
|
||||
private static final InnistradMidnightHunt instance = new InnistradMidnightHunt();
|
||||
|
||||
public static InnistradMidnightHunt getInstance() {
|
||||
|
@ -31,27 +35,40 @@ public final class InnistradMidnightHunt extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Candlelit Cavalry", 175, Rarity.COMMON, mage.cards.c.CandlelitCavalry.class));
|
||||
cards.add(new SetCardInfo("Champion of the Perished", 91, Rarity.RARE, mage.cards.c.ChampionOfThePerished.class));
|
||||
cards.add(new SetCardInfo("Consider", 44, Rarity.COMMON, mage.cards.c.Consider.class));
|
||||
cards.add(new SetCardInfo("Dawnheart Rejuvenator", 180, Rarity.COMMON, mage.cards.d.DawnheartRejuvenator.class));
|
||||
cards.add(new SetCardInfo("Dawnhart Rejuvenator", 180, Rarity.COMMON, mage.cards.d.DawnhartRejuvenator.class));
|
||||
cards.add(new SetCardInfo("Defenestrate", 95, Rarity.COMMON, mage.cards.d.Defenestrate.class));
|
||||
cards.add(new SetCardInfo("Deserted Beach", 260, Rarity.RARE, mage.cards.d.DesertedBeach.class));
|
||||
cards.add(new SetCardInfo("Famished Foragers", 138, Rarity.COMMON, mage.cards.f.FamishedForagers.class));
|
||||
cards.add(new SetCardInfo("Festival Crasher", 140, Rarity.COMMON, mage.cards.f.FestivalCrasher.class));
|
||||
cards.add(new SetCardInfo("Forest", 276, Rarity.LAND, mage.cards.basiclands.Forest.class, FULL_ART_BFZ_VARIOUS));
|
||||
cards.add(new SetCardInfo("Foul Play", 101, Rarity.UNCOMMON, mage.cards.f.FoulPlay.class));
|
||||
cards.add(new SetCardInfo("Haunted Ridge", 263, Rarity.RARE, mage.cards.h.HauntedRidge.class));
|
||||
cards.add(new SetCardInfo("Howl of the Hunt", 188, Rarity.COMMON, mage.cards.h.HowlOfTheHunt.class));
|
||||
cards.add(new SetCardInfo("Infernal Grasp", 107, Rarity.UNCOMMON, mage.cards.i.InfernalGrasp.class));
|
||||
cards.add(new SetCardInfo("Island", 270, Rarity.LAND, mage.cards.basiclands.Island.class, FULL_ART_BFZ_VARIOUS));
|
||||
cards.add(new SetCardInfo("Jadar, Ghoulcaller of Nephalia", 108, Rarity.RARE, mage.cards.j.JadarGhoulcallerOfNephalia.class));
|
||||
cards.add(new SetCardInfo("Join the Dance", 229, Rarity.UNCOMMON, mage.cards.j.JoinTheDance.class));
|
||||
cards.add(new SetCardInfo("Mountain", 274, Rarity.LAND, mage.cards.basiclands.Mountain.class, FULL_ART_BFZ_VARIOUS));
|
||||
cards.add(new SetCardInfo("Overgrown Farmland", 265, Rarity.RARE, mage.cards.o.OvergrownFarmland.class));
|
||||
cards.add(new SetCardInfo("Pestilent Wolf", 192, Rarity.COMMON, mage.cards.p.PestilentWolf.class));
|
||||
cards.add(new SetCardInfo("Plains", 268, Rarity.LAND, mage.cards.basiclands.Plains.class, FULL_ART_BFZ_VARIOUS));
|
||||
cards.add(new SetCardInfo("Play with Fire", 154, Rarity.UNCOMMON, mage.cards.p.PlayWithFire.class));
|
||||
cards.add(new SetCardInfo("Rockfall Vale", 266, Rarity.RARE, mage.cards.r.RockfallVale.class));
|
||||
cards.add(new SetCardInfo("Secrets of the Key", 73, Rarity.COMMON, mage.cards.s.SecretsOfTheKey.class));
|
||||
cards.add(new SetCardInfo("Shipwreck Marsh", 267, Rarity.RARE, mage.cards.s.ShipwreckMarsh.class));
|
||||
cards.add(new SetCardInfo("Sigarda, Champion of Light", 240, Rarity.MYTHIC, mage.cards.s.SigardaChampionOfLight.class));
|
||||
cards.add(new SetCardInfo("Snarling Wolf", 199, Rarity.COMMON, mage.cards.s.SnarlingWolf.class));
|
||||
cards.add(new SetCardInfo("Stormrider Spirit", 79, Rarity.COMMON, mage.cards.s.StormriderSpirit.class));
|
||||
cards.add(new SetCardInfo("Swamp", 272, Rarity.LAND, mage.cards.basiclands.Swamp.class, FULL_ART_BFZ_VARIOUS));
|
||||
cards.add(new SetCardInfo("Tavern Ruffian", 163, Rarity.COMMON, mage.cards.t.TavernRuffian.class));
|
||||
cards.add(new SetCardInfo("Tavern Smasher", 163, Rarity.COMMON, mage.cards.t.TavernSmasher.class));
|
||||
cards.add(new SetCardInfo("Thermo-Alchemist", 164, Rarity.UNCOMMON, mage.cards.t.ThermoAlchemist.class));
|
||||
cards.add(new SetCardInfo("Triskaidekaphile", 81, Rarity.RARE, mage.cards.t.Triskaidekaphile.class));
|
||||
cards.add(new SetCardInfo("Unruly Mob", 40, Rarity.COMMON, mage.cards.u.UnrulyMob.class));
|
||||
cards.add(new SetCardInfo("Village Reavers", 165, Rarity.UNCOMMON, mage.cards.v.VillageReavers.class));
|
||||
cards.add(new SetCardInfo("Village Watch", 165, Rarity.UNCOMMON, mage.cards.v.VillageWatch.class));
|
||||
cards.add(new SetCardInfo("Wrenn and Seven", 208, Rarity.MYTHIC, mage.cards.w.WrennAndSeven.class));
|
||||
|
||||
cards.removeIf(setCardInfo -> unfinished.contains(setCardInfo.getName())); // remove when mechanic is fully implemented
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,37 +1,66 @@
|
|||
package mage.abilities.effects.keyword;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.Mode;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.constants.Outcome;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.token.ClueArtifactToken;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public class InvestigateEffect extends CreateTokenEffect {
|
||||
public class InvestigateEffect extends OneShotEffect {
|
||||
|
||||
private final int amount;
|
||||
|
||||
public InvestigateEffect() {
|
||||
super(new ClueArtifactToken());
|
||||
this.staticText = "investigate. <i>(Create a colorless Clue artifact token with \"{2}, Sacrifice this artifact: Draw a card.\")</i>";
|
||||
this(1);
|
||||
}
|
||||
|
||||
public InvestigateEffect(int amount) {
|
||||
super(Outcome.Benefit);
|
||||
this.amount = amount;
|
||||
}
|
||||
|
||||
public InvestigateEffect(final InvestigateEffect effect) {
|
||||
super(effect);
|
||||
this.amount = effect.amount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
if (super.apply(game, source)) {
|
||||
new ClueArtifactToken().putOntoBattlefield(amount, game, source, source.getControllerId());
|
||||
for (int i = 0; i < amount; i++) {
|
||||
game.fireEvent(GameEvent.getEvent(GameEvent.EventType.INVESTIGATED, source.getSourceId(), source, source.getControllerId()));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public InvestigateEffect copy() {
|
||||
return new InvestigateEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getText(Mode mode) {
|
||||
if (staticText != null && !staticText.isEmpty()) {
|
||||
return staticText;
|
||||
}
|
||||
String message;
|
||||
switch (amount) {
|
||||
case 1:
|
||||
message = ". <i>(C";
|
||||
break;
|
||||
case 2:
|
||||
message = "twice. <i>(To investigate, c";
|
||||
break;
|
||||
default:
|
||||
message = CardUtil.numberToText(amount) + " times. <i>(To investigate, c";
|
||||
}
|
||||
return "investigate " + message + "reate a colorless Clue artifact token " +
|
||||
"with \"{2}, Sacrifice this artifact: Draw a card.\")</i>";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
package mage.abilities.keyword;
|
||||
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.StaticAbility;
|
||||
import mage.constants.Zone;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
* TODO: Implement this
|
||||
*/
|
||||
public class DayboundAbility extends StaticAbility implements MageSingleton {
|
||||
|
||||
private static final DayboundAbility instance;
|
||||
|
||||
static {
|
||||
instance = new DayboundAbility();
|
||||
// instance.addIcon(DayboundAbilityIcon.instance); (needs to be added)
|
||||
}
|
||||
|
||||
private Object readResolve() throws ObjectStreamException {
|
||||
return instance;
|
||||
}
|
||||
|
||||
public static DayboundAbility getInstance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
private DayboundAbility() {
|
||||
super(Zone.ALL, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "daybound <i>(If a player casts no spells during their own turn, it becomes night next turn.)</i>";
|
||||
}
|
||||
|
||||
@Override
|
||||
public DayboundAbility copy() {
|
||||
return instance;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
package mage.abilities.keyword;
|
||||
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.StaticAbility;
|
||||
import mage.constants.Zone;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
* TODO: Implement this
|
||||
*/
|
||||
public class NightboundAbility extends StaticAbility implements MageSingleton {
|
||||
|
||||
private static final NightboundAbility instance;
|
||||
|
||||
static {
|
||||
instance = new NightboundAbility();
|
||||
// instance.addIcon(NightboundAbilityIcon.instance); (needs to be added)
|
||||
}
|
||||
|
||||
private Object readResolve() throws ObjectStreamException {
|
||||
return instance;
|
||||
}
|
||||
|
||||
public static NightboundAbility getInstance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
private NightboundAbility() {
|
||||
super(Zone.ALL, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "nightbound <i>(If a player casts at least two spells during their own turn, it becomes day next turn.)</i>";
|
||||
}
|
||||
|
||||
@Override
|
||||
public NightboundAbility copy() {
|
||||
return instance;
|
||||
}
|
||||
}
|
|
@ -16,6 +16,7 @@ Crew|number|
|
|||
Cumulative upkeep|cost|
|
||||
Cycling|cost|
|
||||
Dash|card, manaString|
|
||||
Daybound|instance|
|
||||
Deathtouch|instance|
|
||||
Demonstrate|new|
|
||||
Delve|new|
|
||||
|
@ -71,6 +72,7 @@ Mountainwalk|new|
|
|||
Morph|card, cost|
|
||||
Mutate|card, manaString|
|
||||
Myriad|new|
|
||||
Nightbound|instance|
|
||||
Ninjutsu|cost|
|
||||
Outlast|cost|
|
||||
Partner|instance|
|
||||
|
|
|
@ -42189,28 +42189,35 @@ Triskaidekaphile|Innistrad: Midnight Hunt|81|R|{1}{U}|Creature - Human Wizard|1|
|
|||
Arrogant Outlaw|Innistrad: Midnight Hunt|84|C|{2}{B}|Creature - Vampire Noble|3|2|When Arrogant Outlaw enters the battlefield, if an opponent lost life this turn, each opponent loses 2 life and you gain 2 life.|
|
||||
Champion of the Perished|Innistrad: Midnight Hunt|91|R|{B}|Creature - Zombie|1|1|Whenever another Zombie enters the battlefield under your control, put a +1/+1 counter on Champion of the Perished.|
|
||||
Defenestrate|Innistrad: Midnight Hunt|95|C|{2}{B}|Instant|||Destroy target creature without flying.|
|
||||
Foul Play|Innistrad: Midnight Hunt|101|U|{1}{B}|Sorcery|||Destroy target creature with power 2 or less. Investigate.|
|
||||
Infernal Grasp|Innistrad: Midnight Hunt|107|U|{1}{B}|Instant|||Destroy target creature. You lose 2 life.|
|
||||
Jadar, Ghoulcaller of Nephalia|Innistrad: Midnight Hunt|108|R|{1}{B}|Legendary Creature - Human Wizard|1|1|At the beginning of your end step, if you control no creatures with decayed, create a 2/2 black Zombie creature token with decayed.|
|
||||
Brimestone Vandal|Innistrad: Midnight Hunt|130|C|{2}{R}|Creature - Devil|2|3|Menace$If it's neither day nor night, it becomes day as Brimestone Vandal enters the battlefield.$Whenever day becomes night or night becomes day, Brimestone Vandal deals 1 damage to each opponent.|
|
||||
Brimstone Vandal|Innistrad: Midnight Hunt|130|C|{2}{R}|Creature - Devil|2|3|Menace$If it's neither day nor night, it becomes day as Brimstone Vandal enters the battlefield.$Whenever day becomes night or night becomes day, Brimstone Vandal deals 1 damage to each opponent.|
|
||||
Curse of Shaken Faith|Innistrad: Midnight Hunt|134|R|{1}{R}|Enchantment - Aura Curse|||Enchant player$Whenever enchanted player casts a spell other than the first spell they cast each turn or copies a spell, Curse of Shaken Faith deals 2 damage to them.|
|
||||
Famished Foragers|Innistrad: Midnight Hunt|138|C|{3}{R}|Creature - Vampire|4|3|When Famished Foragers enters the battlefield, if an opponent lost life this turn, add {R}{R}{R}.${2}{R}, Discard a card: Draw a card.|
|
||||
Festival Crasher|Innistrad: Midnight Hunt|140|C|{1}{R}|Creature - Devil|1|3|Whenever you cast an instant or sorcery spell, Festival Crasher gets +2/+0 until end of turn.|
|
||||
Geistflame Reservoir|Innistrad: Midnight Hunt|142|R|{2}{R}|Artifact|||Whenever you cast an instant or sorcery spell, put a charge counter on Geistflame Reservoir.${1}{R}, {T}, Remove any number of charge counters from Geistflame Reservoir: It deals that much damage to any target.${1}{R}, {T}: Exile the top card of your library. You may play that card this turn.|
|
||||
Light Up the Night|Innistrad: Midnight Hunt|146|R|{X}{R}|Sorcery|||Light Up the Night deals X damage to any target. It deals X plus 1 damage instead if that target is a creature or planeswalker.$Flashback—{3}{R}, Remove X loyalty counters from among planeswalkers you control. If you cast this spell this way, X can't be 0.|
|
||||
Play with Fire|Innistrad: Midnight Hunt|154|U|{R}|Instant|||Play with Fire deals 2 damage to any target. If a player is dealt damage this way, scry 1.|
|
||||
Tavern Ruffian|Innistrad: Midnight Hunt|165|C|{3}{R}|Creature - Human Warrior Werewolf|2|5|Daybound|
|
||||
Tavern Smasher|Innistrad: Midnight Hunt|165|C||Creature - Werewolf|6|5|Nightbound|
|
||||
Tavern Ruffian|Innistrad: Midnight Hunt|163|C|{3}{R}|Creature - Human Warrior Werewolf|2|5|Daybound|
|
||||
Tavern Smasher|Innistrad: Midnight Hunt|163|C||Creature - Werewolf|6|5|Nightbound|
|
||||
Thermo-Alchemist|Innistrad: Midnight Hunt|164|U|{1}{R}|Creature - Human Shaman|0|3|Defender${T}: Thermo-Alchemist deals 1 damage to each opponent.$Whenever you cast an instant or sorcery spell, untap Thermo-Alchemist.|
|
||||
Village Watch|Innistrad: Midnight Hunt|165|U|{4}{R}|Creature - Human Werewolf|4|3|Haste$Daybound|
|
||||
Village Reavers|Innistrad: Midnight Hunt|165|U||Creature - Werewolf|5|4|Wolves and Werewolves you control have haste.$Nightbound|
|
||||
Candlelit Cavalry|Innistrad: Midnight Hunt|175|C|{4}{G}|Creature - Human Knight|5|5|Coven — At the beginning of combat on your turn, if you control three or more creatures with different powers, Candlelit Cavalry gains trample until end of turn.|
|
||||
Dawnheart Rejuvenator|Innistrad: Midnight Hunt|180|C|{3}{G}|Creature - Human Warlock|2|4|When Dawnheart Rejuvenator enters the battlefield, you gain 3 life.${T}: Add one mana of any color.|
|
||||
Dawnhart Rejuvenator|Innistrad: Midnight Hunt|180|C|{3}{G}|Creature - Human Warlock|2|4|When Dawnhart Rejuvenator enters the battlefield, you gain 3 life.${T}: Add one mana of any color.|
|
||||
Howl of the Hunt|Innistrad: Midnight Hunt|188|C|{2}{G}|Enchantment - Aura|||Flash$Enchant creature$When Howl of the Hunt enters the battlefield, if enchanted creature is a Wolf or Werewolf, untap that creature.$Enchanted creature gets +2/+2 and has vigilance.|
|
||||
Might of the Old Ways|Innistrad: Midnight Hunt|189|C|{1}{G}|Instant|||Target creature gets +2/+2 until end of turn.$Coven — Then if you control three or more creatures with different powers, draw a card.|
|
||||
Pestilent Wolf|Innistrad: Midnight Hunt|192|C|{1}{G}|Creature - Wolf|2|2|{2}{G}: Pestilent Wolf gains deathtouch until end of turn.|
|
||||
Snarling Wolf|Innistrad: Midnight Hunt|199|C|{G}|Creature - Wolf|1|1|{1}{G}: Snarling Wolf gets +2/+2 until end of turn. Activate only once each turn.|
|
||||
Wrenn and Seven|Innistrad: Midnight Hunt|208|M|{3}{G}{G}|Legendary Planeswalker - Wrenn|5|+1: Reveal the top four cards of your library. Put all land cards revealed this way into your hand and the rest into your graveyard.$0: Put any number of land cards from your hand onto the battlefield tapped.$−3: Create a green Treefolk creature token with reach and "This creature's power and toughness are each equal to the number of lands you control."$−8: Return all permanent cards from your graveyard to your hand. You get an emblem with "You have no maximum hand size."|
|
||||
Arlinn, the Pack's Hope|Innistrad: Midnight Hunt|211|M|{2}{R}{G}|Legendary Planeswalker - Arlinn|4|Daybound$+1: Until your next turn, you may cast creature cards as though they had flash, and each creature you control enters the battlefield with an additional +1/+1 counter on it.$−3: Create two 2/2 green Wolf creature tokens.|
|
||||
Arlinn, the Pack's Hope|Innistrad: Midnight Hunt|211|M|{2}{R}{G}|Legendary Planeswalker - Arlinn|4|Daybound$+1: Until your next turn, you may cast creature spells as though they had flash, and each creature you control enters the battlefield with an additional +1/+1 counter on it.$−3: Create two 2/2 green Wolf creature tokens.|
|
||||
Arlinn, the Moon's Fury|Innistrad: Midnight Hunt|211|M||Legendary Planeswalker - Arlinn|4|Nightbound$+2: Add {R}{G}.$0: Until end of turn, Arlinn, the Moon's Fury becomes a 5/5 Werewolf creature with trample, indestructible, and haste.|
|
||||
Galvanic Iteration|Innistrad: Midnight Hunt|224|R|{U}{R}|Instant|||When you cast your next instant or sorcery spell this turn, copy that spell. You may choose new targets for the copy.$Flashback {1}{U}{R}|
|
||||
Join the Dance|Innistrad: Midnight Hunt|229|U|{G}{W}|Sorcery|||Create two 1/1 white Human creature tokens.$Flashback {3}{G}{W}|
|
||||
Rite of Harmony|Innistrad: Midnight Hunt|236|R|{G}{W}|Instant|||Whenever a creature or enchantment enters the battlefield under your control this turn, draw a card.$Flashback {2}{G}{W}|
|
||||
Sigarda, Champion of Light|Innistrad: Midnight Hunt|240|M|{1}{G}{W}{W}|Legendary Creature - Angel|4|4|Flying, trample$Humans you control get +1/+1.$Coven — Whenever Sigarda attacks, if you control three or more creatures with different powers, look at the top five cards of your library. You may reveal a Human creature card from among them and put it into your hand. Put the rest on the bottom of your library in a random order.|
|
||||
Torvar, Dire Overlord|Innistrad: Midnight Hunt|246|R|{1}{R}{G}|Legendary Creature - Human Werewolf|4|4|Whenever a Wolf or Werewolf you control deals combat damage to a player, draw a card.$At the beginning of your upkeep, if you control three or more Wolves and/or Werewolves, it becomes night. Then transform any number of Human Werewolves you control.$Daybound|
|
||||
Tovolar, Dire Overlord|Innistrad: Midnight Hunt|246|R|{1}{R}{G}|Legendary Creature - Human Werewolf|4|4|Whenever a Wolf or Werewolf you control deals combat damage to a player, draw a card.$At the beginning of your upkeep, if you control three or more Wolves and/or Werewolves, it becomes night. Then transform any number of Human Werewolves you control.$Daybound|
|
||||
Tovolar, the Midnight Scourge|Innistrad: Midnight Hunt|246|R||Legendary Creature - Werewolf|4|4|Whenever a Wolf or Werewolf you control deals combat damage to a player, draw a card.${X}{R}{G}: Target Wolf or Werewolf you control gets +X/+0 and gains trample until end of turn.$Nightbound|
|
||||
Deserted Beach|Innistrad: Midnight Hunt|260|R||Land|||Deserted Beach enters the battlefield tapped unless you control two or more other lands.${T}: Add {W} or {U}.|
|
||||
Haunted Ridge|Innistrad: Midnight Hunt|263|R||Land|||Haunted Ridge enters the battlefield tapped unless you control two or more other lands.${T}: Add {B} or {R}.|
|
||||
|
@ -42222,6 +42229,7 @@ Island|Innistrad: Midnight Hunt|270|C||Basic Land - Island|||({T}: Add {U}.)|
|
|||
Swamp|Innistrad: Midnight Hunt|272|C||Basic Land - Swamp|||({T}: Add {B}.)|
|
||||
Mountain|Innistrad: Midnight Hunt|274|C||Basic Land - Mountain|||({T}: Add {R}.)|
|
||||
Forest|Innistrad: Midnight Hunt|276|C||Basic Land - Forest|||({T}: Add {G}.)|
|
||||
Can't Stay Away|Innistrad: Midnight Hunt|368|R|{W}{B}|Sorcery|||Return target creature card with mana value 3 or less from your graveyard to the battlefield. It gains "If this creature would die, exile it instead."$Flashback {3}{W}{B}|
|
||||
Faceless Agent|Jumpstart: Historic Horizons|1|C|{3}|Creature - Shapeshifter|2|1|Changeling$When Faceless Agent enters the battlefield, seek a creature card of the most prevalent creature type in your library.|
|
||||
Baffling Defenses|Jumpstart: Historic Horizons|2|C|{1}{W}|Instant|||Target creature's base power perpetually becomes 0.|
|
||||
Benalish Partisan|Jumpstart: Historic Horizons|3|R|{1}{W}|Creature - Human Soldier|1|2|Lifelink$Whenever you cycle another card, you may pay {1}{W}. If you do, return Benalish Partisan from your graveyard to the battlefield tapped and it perpetually gets +1/+0.$Cycling {1}{W}|
|
||||
|
|
Loading…
Reference in a new issue