mirror of
https://github.com/correl/mage.git
synced 2024-11-17 11:09:32 +00:00
Merge origin/master
This commit is contained in:
commit
26a741580c
15 changed files with 608 additions and 9 deletions
47
Mage.Sets/src/mage/cards/c/CrystalSlipper.java
Normal file
47
Mage.Sets/src/mage/cards/c/CrystalSlipper.java
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
package mage.cards.c;
|
||||||
|
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
|
import mage.abilities.costs.mana.GenericManaCost;
|
||||||
|
import mage.abilities.effects.common.continuous.BoostEquippedEffect;
|
||||||
|
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
|
||||||
|
import mage.abilities.keyword.EquipAbility;
|
||||||
|
import mage.abilities.keyword.HasteAbility;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.AttachmentType;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.Outcome;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author jmharmon
|
||||||
|
*/
|
||||||
|
|
||||||
|
public final class CrystalSlipper extends CardImpl {
|
||||||
|
|
||||||
|
public CrystalSlipper(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}{R}");
|
||||||
|
this.subtype.add(SubType.EQUIPMENT);
|
||||||
|
|
||||||
|
// Equipped creature gets +1/+0 and has haste.
|
||||||
|
Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(1, 0));
|
||||||
|
ability.addEffect(new GainAbilityAttachedEffect(
|
||||||
|
HasteAbility.getInstance(), AttachmentType.EQUIPMENT).setText("and has haste")
|
||||||
|
);
|
||||||
|
|
||||||
|
// Equip {1}
|
||||||
|
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(1)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public CrystalSlipper(final CrystalSlipper card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CrystalSlipper copy() {
|
||||||
|
return new CrystalSlipper(this);
|
||||||
|
}
|
||||||
|
}
|
71
Mage.Sets/src/mage/cards/g/GildedGoose.java
Normal file
71
Mage.Sets/src/mage/cards/g/GildedGoose.java
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
package mage.cards.g;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
|
import mage.abilities.costs.common.SacrificeTargetCost;
|
||||||
|
import mage.abilities.costs.common.TapSourceCost;
|
||||||
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
|
import mage.abilities.effects.common.CreateTokenEffect;
|
||||||
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
|
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||||
|
import mage.abilities.mana.AnyColorManaAbility;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.constants.Zone;
|
||||||
|
import mage.filter.common.FilterControlledPermanent;
|
||||||
|
import mage.filter.predicate.mageobject.SubtypePredicate;
|
||||||
|
import mage.game.permanent.token.custom.FoodToken;
|
||||||
|
import mage.target.common.TargetControlledPermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author jmharmon
|
||||||
|
*/
|
||||||
|
|
||||||
|
public final class GildedGoose extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterControlledPermanent filter = new FilterControlledPermanent("a Food");
|
||||||
|
|
||||||
|
static {
|
||||||
|
filter.add(new SubtypePredicate(SubType.FOOD));
|
||||||
|
}
|
||||||
|
|
||||||
|
public GildedGoose(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}");
|
||||||
|
this.subtype.add(SubType.BIRD);
|
||||||
|
|
||||||
|
this.power = new MageInt(0);
|
||||||
|
this.toughness = new MageInt(2);
|
||||||
|
|
||||||
|
// Flying
|
||||||
|
this.addAbility(FlyingAbility.getInstance());
|
||||||
|
|
||||||
|
// When Gilded Goose enters the battlefield, create a Food token. (It’s an artifact with “{2}, {T}, Sacrifice this artifact: You gain 3 life.”)
|
||||||
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new FoodToken()), false));
|
||||||
|
|
||||||
|
// {1}{G}, {T}: Create a Food token.
|
||||||
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new FoodToken()), new ManaCostsImpl("{1}{G}"));
|
||||||
|
ability.addCost(new TapSourceCost());
|
||||||
|
this.addAbility(ability);
|
||||||
|
|
||||||
|
// {T}, Sacrifice a Food: Add one mana of any color.
|
||||||
|
ActivatedManaAbilityImpl ability1 = new AnyColorManaAbility(new TapSourceCost());
|
||||||
|
ability1.addCost(new SacrificeTargetCost(new TargetControlledPermanent(filter)));
|
||||||
|
this.addAbility(ability1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public GildedGoose(final GildedGoose card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GildedGoose copy() {
|
||||||
|
return new GildedGoose(this);
|
||||||
|
}
|
||||||
|
}
|
56
Mage.Sets/src/mage/cards/g/GoldenEgg.java
Normal file
56
Mage.Sets/src/mage/cards/g/GoldenEgg.java
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
package mage.cards.g;
|
||||||
|
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
|
import mage.abilities.costs.common.SacrificeSourceCost;
|
||||||
|
import mage.abilities.costs.common.TapSourceCost;
|
||||||
|
import mage.abilities.costs.mana.GenericManaCost;
|
||||||
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
|
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||||
|
import mage.abilities.effects.common.GainLifeEffect;
|
||||||
|
import mage.abilities.mana.AnyColorManaAbility;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.constants.Zone;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author jmharmon
|
||||||
|
*/
|
||||||
|
|
||||||
|
public final class GoldenEgg extends CardImpl {
|
||||||
|
|
||||||
|
public GoldenEgg(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}");
|
||||||
|
this.subtype.add(SubType.FOOD);
|
||||||
|
|
||||||
|
// When Golden Egg enters the battlefield, draw a card.
|
||||||
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1)));
|
||||||
|
|
||||||
|
// {1}, {T}: Sacrifice Golden Egg: Add one mana of any color.
|
||||||
|
Ability ability = new AnyColorManaAbility(new GenericManaCost(1));
|
||||||
|
ability.addCost(new TapSourceCost());
|
||||||
|
ability.addCost(new SacrificeSourceCost());
|
||||||
|
this.addAbility(ability);
|
||||||
|
|
||||||
|
// {2}, {T}, Sacrifice Golden Egg: You gain 3 life.
|
||||||
|
Ability ability1 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainLifeEffect(3), new ManaCostsImpl("{2}"));
|
||||||
|
ability1.addCost(new TapSourceCost());
|
||||||
|
ability1.addCost(new SacrificeSourceCost());
|
||||||
|
this.addAbility(ability1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public GoldenEgg(final GoldenEgg card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GoldenEgg copy() {
|
||||||
|
return new GoldenEgg(this);
|
||||||
|
}
|
||||||
|
}
|
42
Mage.Sets/src/mage/cards/m/MaraleafPixie.java
Normal file
42
Mage.Sets/src/mage/cards/m/MaraleafPixie.java
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
package mage.cards.m;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
|
import mage.abilities.mana.BlueManaAbility;
|
||||||
|
import mage.abilities.mana.GreenManaAbility;
|
||||||
|
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 MaraleafPixie extends CardImpl {
|
||||||
|
|
||||||
|
public MaraleafPixie(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}{U}");
|
||||||
|
|
||||||
|
this.subtype.add(SubType.FAERIE);
|
||||||
|
this.power = new MageInt(2);
|
||||||
|
this.toughness = new MageInt(2);
|
||||||
|
|
||||||
|
// Flying
|
||||||
|
this.addAbility(FlyingAbility.getInstance());
|
||||||
|
|
||||||
|
// {T}: Add {G} or {U}.
|
||||||
|
this.addAbility(new GreenManaAbility());
|
||||||
|
this.addAbility(new BlueManaAbility());
|
||||||
|
}
|
||||||
|
|
||||||
|
private MaraleafPixie(final MaraleafPixie card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MaraleafPixie copy() {
|
||||||
|
return new MaraleafPixie(this);
|
||||||
|
}
|
||||||
|
}
|
67
Mage.Sets/src/mage/cards/r/RankleMasterOfPranks.java
Normal file
67
Mage.Sets/src/mage/cards/r/RankleMasterOfPranks.java
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
package mage.cards.r;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.Mode;
|
||||||
|
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
|
||||||
|
import mage.abilities.effects.common.DrawCardAllEffect;
|
||||||
|
import mage.abilities.effects.common.LoseLifeAllPlayersEffect;
|
||||||
|
import mage.abilities.effects.common.SacrificeAllEffect;
|
||||||
|
import mage.abilities.effects.common.discard.DiscardEachPlayerEffect;
|
||||||
|
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 mage.constants.SuperType;
|
||||||
|
import mage.filter.StaticFilters;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class RankleMasterOfPranks extends CardImpl {
|
||||||
|
|
||||||
|
public RankleMasterOfPranks(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{B}");
|
||||||
|
|
||||||
|
this.addSuperType(SuperType.LEGENDARY);
|
||||||
|
this.subtype.add(SubType.FAERIE);
|
||||||
|
this.subtype.add(SubType.ROGUE);
|
||||||
|
this.power = new MageInt(3);
|
||||||
|
this.toughness = new MageInt(3);
|
||||||
|
|
||||||
|
// Flying
|
||||||
|
this.addAbility(FlyingAbility.getInstance());
|
||||||
|
|
||||||
|
// Haste
|
||||||
|
this.addAbility(HasteAbility.getInstance());
|
||||||
|
|
||||||
|
// Whenever Rankle, Master of Pranks deals combat damage to a player, choose any number —
|
||||||
|
// • Each player discards a card.
|
||||||
|
Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new DiscardEachPlayerEffect(), false);
|
||||||
|
|
||||||
|
// • Each player loses 1 life and draws a card.
|
||||||
|
Mode mode = new Mode(new LoseLifeAllPlayersEffect(1));
|
||||||
|
mode.addEffect(new DrawCardAllEffect(1).setText("and draws a card"));
|
||||||
|
ability.addMode(mode);
|
||||||
|
|
||||||
|
// • Each player sacrifices a creature.
|
||||||
|
ability.addMode(new Mode(new SacrificeAllEffect(StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT)));
|
||||||
|
|
||||||
|
ability.getModes().setMinModes(0);
|
||||||
|
ability.getModes().setMaxModes(3);
|
||||||
|
this.addAbility(ability);
|
||||||
|
}
|
||||||
|
|
||||||
|
private RankleMasterOfPranks(final RankleMasterOfPranks card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RankleMasterOfPranks copy() {
|
||||||
|
return new RankleMasterOfPranks(this);
|
||||||
|
}
|
||||||
|
}
|
71
Mage.Sets/src/mage/cards/r/RunAwayTogether.java
Normal file
71
Mage.Sets/src/mage/cards/r/RunAwayTogether.java
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
package mage.cards.r;
|
||||||
|
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.effects.common.ReturnToHandTargetEffect;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.filter.StaticFilters;
|
||||||
|
import mage.game.Game;
|
||||||
|
import mage.game.permanent.Permanent;
|
||||||
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class RunAwayTogether extends CardImpl {
|
||||||
|
|
||||||
|
public RunAwayTogether(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{U}");
|
||||||
|
|
||||||
|
// Choose two target creatures controlled by different players. Return those creatures to their owners' hands.
|
||||||
|
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect(true));
|
||||||
|
this.getSpellAbility().addTarget(new RunAwayTogetherTarget());
|
||||||
|
}
|
||||||
|
|
||||||
|
private RunAwayTogether(final RunAwayTogether card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RunAwayTogether copy() {
|
||||||
|
return new RunAwayTogether(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class RunAwayTogetherTarget extends TargetCreaturePermanent {
|
||||||
|
|
||||||
|
RunAwayTogetherTarget() {
|
||||||
|
super(2, 2, StaticFilters.FILTER_PERMANENT_CREATURE, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private RunAwayTogetherTarget(final RunAwayTogetherTarget target) {
|
||||||
|
super(target);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RunAwayTogetherTarget copy() {
|
||||||
|
return new RunAwayTogetherTarget(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canTarget(UUID controllerId, UUID id, Ability source, Game game) {
|
||||||
|
if (!super.canTarget(controllerId, id, source, game)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Permanent creature = game.getPermanent(id);
|
||||||
|
if (creature == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return !this.getTargets()
|
||||||
|
.stream()
|
||||||
|
.map(game::getPermanent)
|
||||||
|
.anyMatch(permanent -> permanent != null
|
||||||
|
&& !creature.getId().equals(permanent.getId())
|
||||||
|
&& !creature.isControlledBy(permanent.getControllerId())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// give carly rae jepsen a sword
|
41
Mage.Sets/src/mage/cards/t/TomeRaider.java
Normal file
41
Mage.Sets/src/mage/cards/t/TomeRaider.java
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
package mage.cards.t;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
|
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||||
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
|
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 TomeRaider extends CardImpl {
|
||||||
|
|
||||||
|
public TomeRaider(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}");
|
||||||
|
|
||||||
|
this.subtype.add(SubType.FAERIE);
|
||||||
|
this.power = new MageInt(1);
|
||||||
|
this.toughness = new MageInt(1);
|
||||||
|
|
||||||
|
// Flying
|
||||||
|
this.addAbility(FlyingAbility.getInstance());
|
||||||
|
|
||||||
|
// When Tome Raider enters the battlefield, draw a card.
|
||||||
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1)));
|
||||||
|
}
|
||||||
|
|
||||||
|
private TomeRaider(final TomeRaider card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TomeRaider copy() {
|
||||||
|
return new TomeRaider(this);
|
||||||
|
}
|
||||||
|
}
|
65
Mage.Sets/src/mage/cards/w/WishfulMerfolk.java
Normal file
65
Mage.Sets/src/mage/cards/w/WishfulMerfolk.java
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
package mage.cards.w;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
|
import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect;
|
||||||
|
import mage.abilities.keyword.DefenderAbility;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.*;
|
||||||
|
import mage.game.permanent.token.TokenImpl;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author jmharmon
|
||||||
|
*/
|
||||||
|
|
||||||
|
public final class WishfulMerfolk extends CardImpl {
|
||||||
|
|
||||||
|
public WishfulMerfolk(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}");
|
||||||
|
this.subtype.add(SubType.MERFOLK);
|
||||||
|
|
||||||
|
this.power = new MageInt(3);
|
||||||
|
this.toughness = new MageInt(2);
|
||||||
|
|
||||||
|
// Defender
|
||||||
|
this.addAbility(DefenderAbility.getInstance());
|
||||||
|
|
||||||
|
// {1}{U}: Wishful Merfolk loses defender and becomes a Human until end of turn.
|
||||||
|
//this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new WishfulMerfolkEffect(), new ManaCostsImpl("{1}{U}")));
|
||||||
|
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesCreatureSourceEffect(new WishfulMerfolkToken(), "", Duration.EndOfTurn), new ManaCostsImpl("{1}{U}")));
|
||||||
|
}
|
||||||
|
|
||||||
|
public WishfulMerfolk(final WishfulMerfolk card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WishfulMerfolk copy() {
|
||||||
|
return new WishfulMerfolk(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class WishfulMerfolkToken extends TokenImpl {
|
||||||
|
|
||||||
|
public WishfulMerfolkToken() {
|
||||||
|
super("Wishful Merfolk", "");
|
||||||
|
this.cardType.add(CardType.CREATURE);
|
||||||
|
this.subtype.add(SubType.HUMAN);
|
||||||
|
this.color.setBlue(true);
|
||||||
|
this.power = new MageInt(3);
|
||||||
|
this.toughness = new MageInt(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
public WishfulMerfolkToken(final WishfulMerfolkToken token) {
|
||||||
|
super(token);
|
||||||
|
}
|
||||||
|
|
||||||
|
public WishfulMerfolkToken copy() {
|
||||||
|
return new WishfulMerfolkToken(this);
|
||||||
|
}
|
||||||
|
}
|
44
Mage.Sets/src/mage/cards/w/WitchingWell.java
Normal file
44
Mage.Sets/src/mage/cards/w/WitchingWell.java
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
package mage.cards.w;
|
||||||
|
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
|
import mage.abilities.costs.common.SacrificeSourceCost;
|
||||||
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
|
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||||
|
import mage.abilities.effects.keyword.ScryEffect;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.Zone;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author jmharmon
|
||||||
|
*/
|
||||||
|
|
||||||
|
public final class WitchingWell extends CardImpl {
|
||||||
|
|
||||||
|
public WitchingWell(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{U}");
|
||||||
|
|
||||||
|
// When Witching Well enters the battlefield, scry 2.
|
||||||
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new ScryEffect(2)));
|
||||||
|
|
||||||
|
// {3}{U}, Sacrifice Witching Well: Draw two cards.
|
||||||
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(2), new ManaCostsImpl("{3}{U}"));
|
||||||
|
ability.addCost(new SacrificeSourceCost());
|
||||||
|
this.addAbility(ability);
|
||||||
|
}
|
||||||
|
|
||||||
|
public WitchingWell(final WitchingWell card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WitchingWell copy() {
|
||||||
|
return new WitchingWell(this);
|
||||||
|
}
|
||||||
|
}
|
|
@ -29,5 +29,14 @@ public final class ThroneOfEldraine extends ExpansionSet {
|
||||||
|
|
||||||
cards.add(new SetCardInfo("Arcane Signet", 331, Rarity.COMMON, mage.cards.a.ArcaneSignet.class));
|
cards.add(new SetCardInfo("Arcane Signet", 331, Rarity.COMMON, mage.cards.a.ArcaneSignet.class));
|
||||||
cards.add(new SetCardInfo("Chulane, Teller of Tales", 326, Rarity.MYTHIC, mage.cards.c.ChulaneTellerOfTales.class));
|
cards.add(new SetCardInfo("Chulane, Teller of Tales", 326, Rarity.MYTHIC, mage.cards.c.ChulaneTellerOfTales.class));
|
||||||
|
cards.add(new SetCardInfo("Crystal Slipper", 119, Rarity.COMMON, mage.cards.c.CrystalSlipper.class));
|
||||||
|
cards.add(new SetCardInfo("Gilded Goose", 160, Rarity.RARE, mage.cards.g.GildedGoose.class));
|
||||||
|
cards.add(new SetCardInfo("Golden Egg", 220, Rarity.COMMON, mage.cards.g.GoldenEgg.class));
|
||||||
|
cards.add(new SetCardInfo("Maraleaf Pixie", 196, Rarity.UNCOMMON, mage.cards.m.MaraleafPixie.class));
|
||||||
|
cards.add(new SetCardInfo("Rankle, Master of Pranks", 356, Rarity.MYTHIC, mage.cards.r.RankleMasterOfPranks.class));
|
||||||
|
cards.add(new SetCardInfo("Run Away Together", 62, Rarity.COMMON, mage.cards.r.RunAwayTogether.class));
|
||||||
|
cards.add(new SetCardInfo("Tome Raider", 68, Rarity.COMMON, mage.cards.t.TomeRaider.class));
|
||||||
|
cards.add(new SetCardInfo("Wishful Merfolk", 73, Rarity.COMMON, mage.cards.w.WishfulMerfolk.class));
|
||||||
|
cards.add(new SetCardInfo("Witching Well", 74, Rarity.COMMON, mage.cards.w.WitchingWell.class));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -336,6 +336,8 @@ public class Modes extends LinkedHashMap<UUID, Mode> {
|
||||||
sb.append("choose one or more. Each mode must target ").append(getMaxModesFilter().getMessage());
|
sb.append("choose one or more. Each mode must target ").append(getMaxModesFilter().getMessage());
|
||||||
} else if (this.getMinModes() == 0 && this.getMaxModes() == 1) {
|
} else if (this.getMinModes() == 0 && this.getMaxModes() == 1) {
|
||||||
sb.append("choose up to one");
|
sb.append("choose up to one");
|
||||||
|
} else if (this.getMinModes() == 0 && this.getMaxModes() == 3) {
|
||||||
|
sb.append("choose any number");
|
||||||
} else if (this.getMinModes() == 1 && this.getMaxModes() > 2) {
|
} else if (this.getMinModes() == 1 && this.getMaxModes() > 2) {
|
||||||
sb.append("choose one or more");
|
sb.append("choose one or more");
|
||||||
} else if (this.getMinModes() == 1 && this.getMaxModes() == 2) {
|
} else if (this.getMinModes() == 1 && this.getMaxModes() == 2) {
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
|
|
||||||
package mage.abilities.effects.common;
|
package mage.abilities.effects.common;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.dynamicvalue.DynamicValue;
|
import mage.abilities.dynamicvalue.DynamicValue;
|
||||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
import mage.abilities.dynamicvalue.common.StaticValue;
|
||||||
|
@ -16,8 +13,11 @@ import mage.players.Player;
|
||||||
import mage.target.common.TargetControlledPermanent;
|
import mage.target.common.TargetControlledPermanent;
|
||||||
import mage.util.CardUtil;
|
import mage.util.CardUtil;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author BetaSteward_at_googlemail.com
|
* @author BetaSteward_at_googlemail.com
|
||||||
*/
|
*/
|
||||||
public class SacrificeAllEffect extends OneShotEffect {
|
public class SacrificeAllEffect extends OneShotEffect {
|
||||||
|
@ -86,10 +86,10 @@ public class SacrificeAllEffect extends OneShotEffect {
|
||||||
sb.append("each player sacrifices ");
|
sb.append("each player sacrifices ");
|
||||||
if (amount.toString().equals("X")) {
|
if (amount.toString().equals("X")) {
|
||||||
sb.append(amount.toString());
|
sb.append(amount.toString());
|
||||||
} else {
|
sb.append(' ');
|
||||||
sb.append(CardUtil.numberToText(amount.toString(), "a"));
|
} else if (!filter.getMessage().startsWith("a ")) {
|
||||||
|
sb.append(CardUtil.numberToText(amount.toString(), "a "));
|
||||||
}
|
}
|
||||||
sb.append(' ');
|
|
||||||
sb.append(filter.getMessage());
|
sb.append(filter.getMessage());
|
||||||
staticText = sb.toString();
|
staticText = sb.toString();
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,7 @@ public enum SubType {
|
||||||
CLUE("Clue", SubTypeSet.ArtifactType),
|
CLUE("Clue", SubTypeSet.ArtifactType),
|
||||||
CONTRAPTION("Contraption", SubTypeSet.ArtifactType),
|
CONTRAPTION("Contraption", SubTypeSet.ArtifactType),
|
||||||
EQUIPMENT("Equipment", SubTypeSet.ArtifactType),
|
EQUIPMENT("Equipment", SubTypeSet.ArtifactType),
|
||||||
|
FOOD("Food", SubTypeSet.ArtifactType),
|
||||||
FORTIFICATION("Fortification", SubTypeSet.ArtifactType),
|
FORTIFICATION("Fortification", SubTypeSet.ArtifactType),
|
||||||
TREASURE("Treasure", SubTypeSet.ArtifactType),
|
TREASURE("Treasure", SubTypeSet.ArtifactType),
|
||||||
VEHICLE("Vehicle", SubTypeSet.ArtifactType),
|
VEHICLE("Vehicle", SubTypeSet.ArtifactType),
|
||||||
|
|
62
Mage/src/main/java/mage/game/permanent/token/FoodToken.java
Normal file
62
Mage/src/main/java/mage/game/permanent/token/FoodToken.java
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
package mage.game.permanent.token.custom;
|
||||||
|
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
|
import mage.abilities.costs.common.SacrificeSourceCost;
|
||||||
|
import mage.abilities.costs.common.TapSourceCost;
|
||||||
|
import mage.abilities.costs.mana.GenericManaCost;
|
||||||
|
import mage.abilities.effects.common.GainLifeEffect;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.constants.Zone;
|
||||||
|
import mage.game.permanent.token.TokenImpl;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author jmharmon
|
||||||
|
*/
|
||||||
|
|
||||||
|
public final class FoodToken extends TokenImpl {
|
||||||
|
|
||||||
|
static final private List<String> tokenImageSets = new ArrayList<>();
|
||||||
|
|
||||||
|
static {
|
||||||
|
tokenImageSets.addAll(Arrays.asList("ELD"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public FoodToken() {
|
||||||
|
this(null, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public FoodToken(String setCode) {
|
||||||
|
this(setCode, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public FoodToken(String setCode, int tokenType) {
|
||||||
|
super("Food", "Food token");
|
||||||
|
availableImageSetCodes = tokenImageSets;
|
||||||
|
setOriginalExpansionSetCode(setCode);
|
||||||
|
cardType.add(CardType.ARTIFACT);
|
||||||
|
subtype.add(SubType.FOOD);
|
||||||
|
|
||||||
|
// {2}, {T}, Sacrifice this artifact: You gain 3 life.”
|
||||||
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainLifeEffect(3), new GenericManaCost(2));
|
||||||
|
ability.addCost(new TapSourceCost());
|
||||||
|
SacrificeSourceCost cost = new SacrificeSourceCost();
|
||||||
|
cost.setText("Sacrifice this artifact");
|
||||||
|
ability.addCost(cost);
|
||||||
|
this.addAbility(ability);
|
||||||
|
}
|
||||||
|
|
||||||
|
public FoodToken(final FoodToken token) {
|
||||||
|
super(token);
|
||||||
|
}
|
||||||
|
|
||||||
|
public FoodToken copy() {
|
||||||
|
return new FoodToken(this);
|
||||||
|
}
|
||||||
|
}
|
|
@ -35698,8 +35698,6 @@ Oakenform|Core Set 2020|341|C|{2}{G}|Enchantment - Aura|||Enchant creature$Encha
|
||||||
Prized Unicorn|Core Set 2020|342|C|{3}{G}|Creature - Unicorn|2|2|All creatures able to block Prized Unicorn do so.|
|
Prized Unicorn|Core Set 2020|342|C|{3}{G}|Creature - Unicorn|2|2|All creatures able to block Prized Unicorn do so.|
|
||||||
Titanic Growth|Core Set 2020|343|C|{1}{G}|Instant|||Target creature gets +4/+4 until end of turn.|
|
Titanic Growth|Core Set 2020|343|C|{1}{G}|Instant|||Target creature gets +4/+4 until end of turn.|
|
||||||
Woodland Mystic|Core Set 2020|344|C|{1}{G}|Creature - Elf Druid|1|1|{T}: Add {G}.|
|
Woodland Mystic|Core Set 2020|344|C|{1}{G}|Creature - Elf Druid|1|1|{T}: Add {G}.|
|
||||||
Chulane, Teller of Tales|Throne of Eldraine|326|M|{2}{G}{W}{U}|Legendary Creature - Human Druid|2|4|Vigilance$Whenever you cast a creature spell, draw a card, then you may put a land card from your hand onto the battlefield.${3}, {T}: Return target creature you control to its owner's hand.|
|
|
||||||
Arcane Signet|Throne of Eldraine|331|C|{2}|Artifact|||{T}: Add one mana of any color in your commander's color identity.|
|
|
||||||
Cliffside Rescuer|Commander 2019|1|U|{1}{W}|Creature - Kor Soldier|2|2|Vigilance${T}, Sacrifice Cliffside Rescuer: Target permanent you control gets protection from each opponent until end of turn.|
|
Cliffside Rescuer|Commander 2019|1|U|{1}{W}|Creature - Kor Soldier|2|2|Vigilance${T}, Sacrifice Cliffside Rescuer: Target permanent you control gets protection from each opponent until end of turn.|
|
||||||
Commander's Insignia|Commander 2019|2|R|{2}{W}{W}|Enchantment|||Creatures you control get +1/+1 for each time you've cast your commander from the command zone this game.|
|
Commander's Insignia|Commander 2019|2|R|{2}{W}{W}|Enchantment|||Creatures you control get +1/+1 for each time you've cast your commander from the command zone this game.|
|
||||||
Doomed Artisan|Commander 2019|3|R|{2}{W}|Creature - Human Artificer|1|1|Sculptures you control can't attack or block.$At the beginning of your end step, create a colorless Sculpture artifact creature token with "This creature's power and toughness are each equal to the number of Sculptures you control."|
|
Doomed Artisan|Commander 2019|3|R|{2}{W}|Creature - Human Artificer|1|1|Sculptures you control can't attack or block.$At the beginning of your end step, create a colorless Sculpture artifact creature token with "This creature's power and toughness are each equal to the number of Sculptures you control."|
|
||||||
|
@ -35995,3 +35993,26 @@ Island|Commander 2019|291|C||Basic Land - Island|||({T}: Add {U}.)|
|
||||||
Swamp|Commander 2019|294|C||Basic Land - Swamp|||({T}: Add {B}.)|
|
Swamp|Commander 2019|294|C||Basic Land - Swamp|||({T}: Add {B}.)|
|
||||||
Mountain|Commander 2019|297|C||Basic Land - Mountain|||({T}: Add {R}.)|
|
Mountain|Commander 2019|297|C||Basic Land - Mountain|||({T}: Add {R}.)|
|
||||||
Forest|Commander 2019|300|C||Basic Land - Forest|||({T}: Add {G}.)|
|
Forest|Commander 2019|300|C||Basic Land - Forest|||({T}: Add {G}.)|
|
||||||
|
Faerie Vandal|Throne of Eldraine|45|U|{1}{U}|Creature - Faerie Rogue|1|2|Flash$Flying$Whenever you draw your second card each turn, put a +1/+1 counter on Faerie Vandal.|
|
||||||
|
Run Away Together|Throne of Eldraine|62|C|{1}{U}|Instant|||Choose two target creatures controlled by different players. Return those creatures to their owners' hands.|
|
||||||
|
Tome Raider|Throne of Eldraine|68|C|{2}{U}|Creature - Faerie|1|1|Flying$When Tome Raider enters the battlefield, draw a card.|
|
||||||
|
Wishful Merfolk|Throne of Eldraine|73|C|{1}{U}|Creature - Merfolk|3|2|Defender${1}{U}: Wishful Merfolk loses defender and becomes a Human until end of turn.|
|
||||||
|
Witching Well|Throne of Eldraine|74|C|{U}|Artifact|||When Witching Well enters the battlefield, scry 2.${3}{U}, Sacrifice Witching Well: Draw two cards.|
|
||||||
|
Eye Collector|Throne of Eldraine|86|C|{B}|Creature - Faerie|1|1|Flying$Whenever Eye Collector deals combat damage to a player, each player puts the top card of their library into their graveyard.|
|
||||||
|
Syr Konrad, the Grim|Throne of Eldraine|107|U|{3}{B}{B}|Legendary Creature - Human Knight|5|4|Whenever another creature dies, or a creature card is put into a graveyard from anywhere other than the battlefield, or a creature card leaves your graveyard, Syr Konrad, the Grim deals 1 damage to each opponent.${1}{B}: Each player puts the top card of their library into their graveyard.|
|
||||||
|
Crystal Slipper|Throne of Eldraine|119|C|{1}{R}|Artifact - Equipment|||Equipped creature gets +1/+0 and has haste.$Equip {1}|
|
||||||
|
Gilded Goose|Throne of Eldraine|160|R|{G}|Creature - Bird|0|2|Flying$When Gilded Goose enters the battlefield, create a Food token.${1}{G}, {T}: Create a Food token.${T}, Sacrifice a Food: Add one mana of any color.|
|
||||||
|
Maraleaf Pixie|Throne of Eldraine|196|U|{G}{U}|Creature - Faerie|2|2|Flying${T}: Add {G} or {U}.|
|
||||||
|
Oko, Thief of Crowns|Throne of Eldraine|197|M|{1}{G}{U}|Legendary Planeswalker - Oko|4|+2: Create a Food token.$+1: Target artifact or creature loses all abilities and becomes a green Elk creature with base power and toughness 3/3.$−5: Exchange control of target artifact or creature you control and target creature an opponent controls with power 3 or less.|
|
||||||
|
Wintermoor Commander|Throne of Eldraine|205|U|{W}{B}|Creature - Human Knight|2|*|Deathtouch$Wintermoor Commander's toughness is equal to the number of Knights you control.$Whenever Wintermoor Commander attacks, another target Knight you control gains indestructible until end of turn.|
|
||||||
|
Golden Egg|Throne of Eldraine|220|C|{2}|Artifact - Food|||When Golden Egg enters the battlefield, draw a card.${1}, {T}: Sacrifice Golden Egg: Add one mana of any color.${2}, {T}, Sacrifice Golden Egg: You gain 3 life.|
|
||||||
|
Tournament Grounds|Throne of Eldraine|248|U||Land|||{T}: Add {C}.${T}: Add {R}, {W}, or {B}. Spend this mana only to cast a Knight or Equipment spell.|
|
||||||
|
Witch's Cottage|Throne of Eldraine|249|C||Land - Swamp|||({T}: Add {B}.)$Witch's Cottage enters the battlefield tapped unless you control three or more other Swamps.$When Witch's Cottage enters the battlefield untapped, you may put target creature card from your graveyard on top of your library.|
|
||||||
|
Embereth Shieldbreaker|Throne of Eldraine|292|U|{1}{R}|Creature - Human Knight|2|1|Battle Display {R}$Sorcery — Adventure$Destroy target artifact.|
|
||||||
|
Flaxen Intruder|Throne of Eldraine|297|U|{G}|Creature - Human Berserker|1|2|Whenever Flaxen Intruder deals combat damage to a player, you may sacrifice it. When you do, destroy target artifact or enchantment.$Welcome Home {5}{G}{G}$Sorcery — Adventure$Create three 2/2 green Bear creature tokens.|
|
||||||
|
Lovestruck Beast|Throne of Eldraine|299|R|{2}{G}|Creature - Beast Noble|5|5|Lovestruck Beast can't attack unless you control a 1/1 creature.$Heart's Desire {G}$Sorcery — Adventure$Create a 1/1 white Human creature token.|
|
||||||
|
Chulane, Teller of Tales|Throne of Eldraine|326|M|{2}{G}{W}{U}|Legendary Creature - Human Druid|2|4|Vigilance$Whenever you cast a creature spell, draw a card, then you may put a land card from your hand onto the battlefield.${3}, {T}: Return target creature you control to its owner's hand.|
|
||||||
|
Arcane Signet|Throne of Eldraine|331|C|{2}|Artifact|||{T}: Add one mana of any color in your commander's color identity.|
|
||||||
|
The Circle of Loyalty|Throne of Eldraine|336|M|{4}{W}{W}|Legendary Artifact|||This spell costs {1} less to cast for each Knight you control.$Creatures you control get +1/+1.$Whenever you cast a legendary spell, create a 2/2 white Knight creature token with vigilance.${3}{W}, {T}: Create a 2/2 white Knight creature token with vigilance.|
|
||||||
|
Midnight Clock|Throne of Eldraine|346|R|{2}{U}|Artifact|||{T}: Add {U}.${2}{U}: Put an hour counter on Midnight Clock.$At the beginning of your upkeep, put an hour counter on Midnight Clock.$When the twelfth hour counter is put on Midnight Clock, shuffle your hand and graveyard into your library, then draw seven cards. Exile Midnight Clock.|
|
||||||
|
Rankle, Master of Pranks|Throne of Eldraine|356|M|{2}{B}{B}|Legendary Creature - Faerie Rogue|3|3|Flying, haste$Whenever Rankle, Master of Pranks deals combat damage to a player, choose any number —$• Each player discards a card.$• Each player loses 1 life and draws a card.$• Each player sacrifices a creature.|
|
||||||
|
|
Loading…
Reference in a new issue