mirror of
https://github.com/correl/mage.git
synced 2024-12-26 19:16:54 +00:00
Implement 1 card C18
This commit is contained in:
parent
14a688008f
commit
f58e33524d
6 changed files with 281 additions and 0 deletions
|
@ -357,6 +357,7 @@
|
||||||
|Generate|TOK:C17|Rat|||DeathtouchRatToken|
|
|Generate|TOK:C17|Rat|||DeathtouchRatToken|
|
||||||
|Generate|TOK:C17|Vampire|||EdgarMarkovToken|
|
|Generate|TOK:C17|Vampire|||EdgarMarkovToken|
|
||||||
|Generate|TOK:C17|Zombie||
|
|Generate|TOK:C17|Zombie||
|
||||||
|
|Generate|TOK:C18|Myr|||BrudicladTelchorMyrToken|
|
||||||
|Generate|TOK:CHK|Dragon Spirit|||TatsumaDragonToken|
|
|Generate|TOK:CHK|Dragon Spirit|||TatsumaDragonToken|
|
||||||
|Generate|TOK:CHK|Elemental|||SeedGuardianToken|
|
|Generate|TOK:CHK|Elemental|||SeedGuardianToken|
|
||||||
|Generate|TOK:CHK|Illusion|||MelokuTheCloudedMirrorToken|
|
|Generate|TOK:CHK|Illusion|||MelokuTheCloudedMirrorToken|
|
||||||
|
|
121
Mage.Sets/src/mage/cards/a/ArixmethesSlumberingIsle.java
Normal file
121
Mage.Sets/src/mage/cards/a/ArixmethesSlumberingIsle.java
Normal file
|
@ -0,0 +1,121 @@
|
||||||
|
package mage.cards.a;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.Mana;
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.EntersBattlefieldAbility;
|
||||||
|
import mage.abilities.common.EntersBattlefieldTappedAbility;
|
||||||
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
|
import mage.abilities.common.SpellCastControllerTriggeredAbility;
|
||||||
|
import mage.abilities.condition.common.SourceHasCounterCondition;
|
||||||
|
import mage.abilities.costs.common.TapSourceCost;
|
||||||
|
import mage.abilities.decorator.ConditionalContinuousEffect;
|
||||||
|
import mage.abilities.effects.ContinuousEffectImpl;
|
||||||
|
import mage.abilities.effects.Effect;
|
||||||
|
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||||
|
import mage.abilities.effects.common.counter.RemoveCounterSourceEffect;
|
||||||
|
import mage.abilities.mana.SimpleManaAbility;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.Duration;
|
||||||
|
import mage.constants.Layer;
|
||||||
|
import static mage.constants.Layer.TypeChangingEffects_4;
|
||||||
|
import mage.constants.Outcome;
|
||||||
|
import mage.constants.SubLayer;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.constants.SuperType;
|
||||||
|
import mage.constants.Zone;
|
||||||
|
import mage.counters.CounterType;
|
||||||
|
import mage.filter.FilterSpell;
|
||||||
|
import mage.game.Game;
|
||||||
|
import mage.game.permanent.Permanent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author spjspj
|
||||||
|
*/
|
||||||
|
public final class ArixmethesSlumberingIsle extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterSpell filter = new FilterSpell("a spell");
|
||||||
|
|
||||||
|
public ArixmethesSlumberingIsle(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{U}");
|
||||||
|
|
||||||
|
addSuperType(SuperType.LEGENDARY);
|
||||||
|
this.subtype.add(SubType.KRAKEN);
|
||||||
|
this.power = new MageInt(12);
|
||||||
|
this.toughness = new MageInt(12);
|
||||||
|
|
||||||
|
// Arixmethes, Slumbering Isle enters the battlefield tapped with five slumber counters on it.
|
||||||
|
this.addAbility(new EntersBattlefieldTappedAbility());
|
||||||
|
Effect effect = new AddCountersSourceEffect(CounterType.SLUMBER.createInstance(5));
|
||||||
|
this.addAbility(new EntersBattlefieldAbility(effect, "with five slumber counters"));
|
||||||
|
|
||||||
|
// As long as Arixmethes, Slumbering Isle has a slumber counter on it, it's a land.
|
||||||
|
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(
|
||||||
|
new ArixmethesIsLandEffect(),
|
||||||
|
new SourceHasCounterCondition(CounterType.SLUMBER, 1, Integer.MAX_VALUE),
|
||||||
|
"As long as {this} has a slumber counter on it, it's a land")));
|
||||||
|
|
||||||
|
// Whenever you cast a spell, you may remove a slumber counter from Arixmethes.
|
||||||
|
this.addAbility(new SpellCastControllerTriggeredAbility(new RemoveCounterSourceEffect(CounterType.SLUMBER.createInstance(1)), true));
|
||||||
|
|
||||||
|
// {T}: Add {G}{U}.
|
||||||
|
this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, new Mana(0, 1, 1, 0, 0, 0, 0, 0), new TapSourceCost()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArixmethesSlumberingIsle(final ArixmethesSlumberingIsle card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ArixmethesSlumberingIsle copy() {
|
||||||
|
return new ArixmethesSlumberingIsle(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ArixmethesIsLandEffect extends ContinuousEffectImpl {
|
||||||
|
|
||||||
|
public ArixmethesIsLandEffect() {
|
||||||
|
super(Duration.WhileOnBattlefield, Outcome.Detriment);
|
||||||
|
this.staticText = "As long as {this} has a slumber counter on it, it's a land";
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArixmethesIsLandEffect(final ArixmethesIsLandEffect effect) {
|
||||||
|
super(effect);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(Game game, Ability source) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ArixmethesIsLandEffect copy() {
|
||||||
|
return new ArixmethesIsLandEffect(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) {
|
||||||
|
Permanent permanent = game.getPermanent(source.getSourceId());
|
||||||
|
|
||||||
|
if (permanent != null) {
|
||||||
|
switch (layer) {
|
||||||
|
case TypeChangingEffects_4:
|
||||||
|
permanent.getCardType().clear();
|
||||||
|
permanent.addCardType(CardType.LAND);
|
||||||
|
permanent.getSubtype(game).clear();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasLayer(Layer layer) {
|
||||||
|
return layer == Layer.TypeChangingEffects_4;
|
||||||
|
}
|
||||||
|
}
|
113
Mage.Sets/src/mage/cards/b/BrudicladTelchorEngineer.java
Normal file
113
Mage.Sets/src/mage/cards/b/BrudicladTelchorEngineer.java
Normal file
|
@ -0,0 +1,113 @@
|
||||||
|
package mage.cards.b;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.BeginningOfCombatTriggeredAbility;
|
||||||
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
|
import mage.abilities.effects.OneShotEffect;
|
||||||
|
import mage.abilities.effects.common.CreateTokenEffect;
|
||||||
|
import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
|
||||||
|
import mage.abilities.keyword.HasteAbility;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.Duration;
|
||||||
|
import mage.constants.Outcome;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.constants.SuperType;
|
||||||
|
import mage.constants.TargetController;
|
||||||
|
import mage.constants.Zone;
|
||||||
|
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||||
|
import mage.filter.common.FilterControlledPermanent;
|
||||||
|
import mage.filter.predicate.permanent.TokenPredicate;
|
||||||
|
import mage.game.Game;
|
||||||
|
import mage.game.permanent.Permanent;
|
||||||
|
import mage.game.permanent.token.BrudicladTelchorMyrToken;
|
||||||
|
import mage.players.Player;
|
||||||
|
import mage.target.common.TargetControlledPermanent;
|
||||||
|
import mage.util.functions.EmptyApplyToPermanent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author spjspj
|
||||||
|
*/
|
||||||
|
public final class BrudicladTelchorEngineer extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("creature tokens you control");
|
||||||
|
|
||||||
|
static {
|
||||||
|
filter.add(new TokenPredicate());
|
||||||
|
}
|
||||||
|
|
||||||
|
public BrudicladTelchorEngineer(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{4}{U}{R}");
|
||||||
|
|
||||||
|
addSuperType(SuperType.LEGENDARY);
|
||||||
|
this.subtype.add(SubType.ARTIFICER);
|
||||||
|
this.power = new MageInt(4);
|
||||||
|
this.toughness = new MageInt(4);
|
||||||
|
|
||||||
|
// Creature tokens you control have haste.
|
||||||
|
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(HasteAbility.getInstance(), Duration.WhileOnBattlefield, filter, true)));
|
||||||
|
|
||||||
|
// At the beginning of combat on your turn, create a 2/1 blue Myr artifact creature token. Then you may choose a token you control. If you do, each other token you control becomes a copy of that token.
|
||||||
|
this.addAbility(new BeginningOfCombatTriggeredAbility(new BrudicladTelchorCombatffect(), TargetController.YOU, false));
|
||||||
|
}
|
||||||
|
|
||||||
|
public BrudicladTelchorEngineer(final BrudicladTelchorEngineer card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BrudicladTelchorEngineer copy() {
|
||||||
|
return new BrudicladTelchorEngineer(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class BrudicladTelchorCombatffect extends OneShotEffect {
|
||||||
|
|
||||||
|
private static final FilterControlledPermanent filter = new FilterControlledPermanent(" token you control. If you do, each other token you control becomes a copy of that token");
|
||||||
|
|
||||||
|
static {
|
||||||
|
filter.add(new TokenPredicate());
|
||||||
|
}
|
||||||
|
|
||||||
|
public BrudicladTelchorCombatffect() {
|
||||||
|
super(Outcome.Sacrifice);
|
||||||
|
this.staticText = " you may choose a token you control. If you do, each other token you control becomes a copy of that token";
|
||||||
|
}
|
||||||
|
|
||||||
|
public BrudicladTelchorCombatffect(final BrudicladTelchorCombatffect effect) {
|
||||||
|
super(effect);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BrudicladTelchorCombatffect copy() {
|
||||||
|
return new BrudicladTelchorCombatffect(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(Game game, Ability source) {
|
||||||
|
Player controller = game.getPlayer(source.getControllerId());
|
||||||
|
CreateTokenEffect effect = new CreateTokenEffect(new BrudicladTelchorMyrToken(), 1);
|
||||||
|
|
||||||
|
if (effect.apply(game, source)) {
|
||||||
|
TargetControlledPermanent target = new TargetControlledPermanent(0, 1, filter, true);
|
||||||
|
target.setNotTarget(true);
|
||||||
|
if (controller.choose(Outcome.Neutral, target, source.getSourceId(), game)) {
|
||||||
|
Permanent toCopyFromPermanent = game.getPermanent(target.getFirstTarget());
|
||||||
|
|
||||||
|
if (toCopyFromPermanent != null) {
|
||||||
|
for (Permanent toCopyToPermanent : game.getBattlefield().getAllActivePermanents(filter, source.getControllerId(), game)) {
|
||||||
|
if (!toCopyToPermanent.equals(toCopyFromPermanent)) {
|
||||||
|
game.copyPermanent(toCopyFromPermanent, toCopyToPermanent.getId(), source, new EmptyApplyToPermanent());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
|
@ -21,10 +21,12 @@ public final class Commander2018 extends ExpansionSet {
|
||||||
this.blockName = "Command Zone";
|
this.blockName = "Command Zone";
|
||||||
|
|
||||||
cards.add(new SetCardInfo("Ancient Stone Idol", 53, Rarity.RARE, mage.cards.a.AncientStoneIdol.class));
|
cards.add(new SetCardInfo("Ancient Stone Idol", 53, Rarity.RARE, mage.cards.a.AncientStoneIdol.class));
|
||||||
|
cards.add(new SetCardInfo("Arixmethes, Slumbering Isle", 38, Rarity.RARE, mage.cards.a.ArixmethesSlumberingIsle.class));
|
||||||
cards.add(new SetCardInfo("Avenger of Zendikar", 129, Rarity.MYTHIC, mage.cards.a.AvengerOfZendikar.class));
|
cards.add(new SetCardInfo("Avenger of Zendikar", 129, Rarity.MYTHIC, mage.cards.a.AvengerOfZendikar.class));
|
||||||
cards.add(new SetCardInfo("Bear Umbra", 131, Rarity.RARE, mage.cards.b.BearUmbra.class));
|
cards.add(new SetCardInfo("Bear Umbra", 131, Rarity.RARE, mage.cards.b.BearUmbra.class));
|
||||||
cards.add(new SetCardInfo("Bloodtracker", 14, Rarity.RARE, mage.cards.b.Bloodtracker.class));
|
cards.add(new SetCardInfo("Bloodtracker", 14, Rarity.RARE, mage.cards.b.Bloodtracker.class));
|
||||||
cards.add(new SetCardInfo("Brainstorm", 82, Rarity.UNCOMMON, mage.cards.b.Brainstorm.class));
|
cards.add(new SetCardInfo("Brainstorm", 82, Rarity.UNCOMMON, mage.cards.b.Brainstorm.class));
|
||||||
|
cards.add(new SetCardInfo("Brudiclad, Telchor Engineer", 39, Rarity.MYTHIC, mage.cards.b.BrudicladTelchorEngineer.class));
|
||||||
cards.add(new SetCardInfo("Bruna, Light of Alabaster", 170, Rarity.MYTHIC, mage.cards.b.BrunaLightOfAlabaster.class));
|
cards.add(new SetCardInfo("Bruna, Light of Alabaster", 170, Rarity.MYTHIC, mage.cards.b.BrunaLightOfAlabaster.class));
|
||||||
cards.add(new SetCardInfo("Budoka Gardener", 134, Rarity.RARE, mage.cards.b.BudokaGardener.class));
|
cards.add(new SetCardInfo("Budoka Gardener", 134, Rarity.RARE, mage.cards.b.BudokaGardener.class));
|
||||||
cards.add(new SetCardInfo("Centaur Vinecrasher", 135, Rarity.RARE, mage.cards.c.CentaurVinecrasher.class));
|
cards.add(new SetCardInfo("Centaur Vinecrasher", 135, Rarity.RARE, mage.cards.c.CentaurVinecrasher.class));
|
||||||
|
|
|
@ -106,6 +106,7 @@ public enum CounterType {
|
||||||
SHIELD("shield"),
|
SHIELD("shield"),
|
||||||
SHRED("shred"),
|
SHRED("shred"),
|
||||||
SLIME("slime"),
|
SLIME("slime"),
|
||||||
|
SLUMBER("slumber"),
|
||||||
SOOT("soot"),
|
SOOT("soot"),
|
||||||
SPITE("spite"),
|
SPITE("spite"),
|
||||||
SPORE("spore"),
|
SPORE("spore"),
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
package mage.game.permanent.token;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
|
||||||
|
public final class BrudicladTelchorMyrToken extends TokenImpl {
|
||||||
|
|
||||||
|
final static private List<String> tokenImageSets = new ArrayList<>();
|
||||||
|
|
||||||
|
static {
|
||||||
|
tokenImageSets.addAll(Arrays.asList("C18"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public BrudicladTelchorMyrToken() {
|
||||||
|
this((String)null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public BrudicladTelchorMyrToken(String expansionSetCode) {
|
||||||
|
super("Myr", "2/1 blue Myr artifact creature token");
|
||||||
|
this.setOriginalExpansionSetCode(expansionSetCode);
|
||||||
|
cardType.add(CardType.CREATURE);
|
||||||
|
cardType.add(CardType.ARTIFACT);
|
||||||
|
subtype.add(SubType.MYR);
|
||||||
|
color.setBlue(true);
|
||||||
|
power = new MageInt(2);
|
||||||
|
toughness = new MageInt(1);
|
||||||
|
|
||||||
|
availableImageSetCodes = tokenImageSets;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BrudicladTelchorMyrToken(final BrudicladTelchorMyrToken token) {
|
||||||
|
super(token);
|
||||||
|
}
|
||||||
|
|
||||||
|
public BrudicladTelchorMyrToken copy() {
|
||||||
|
return new BrudicladTelchorMyrToken(this);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue