mirror of
https://github.com/magefree/mage.git
synced 2026-01-10 04:42:07 -08:00
[ME2] Implement Goblin Ski Patrol (#13285)
This commit is contained in:
parent
815d032798
commit
e57098b9fe
4 changed files with 91 additions and 0 deletions
71
Mage.Sets/src/mage/cards/g/GoblinSkiPatrol.java
Normal file
71
Mage.Sets/src/mage/cards/g/GoblinSkiPatrol.java
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.common.ActivateOncePerGameActivatedAbility;
|
||||
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect;
|
||||
import mage.abilities.effects.common.SacrificeSourceEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||
import mage.abilities.hint.ConditionHint;
|
||||
import mage.abilities.hint.Hint;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.constants.*;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author tiera3 - based on PyricSalamander, ArmorOfThorns, AkroanLineBreaker, RonomSerpent, GeneralsEnforcer, MildManneredLibrarian, BlazemireVerge
|
||||
*/
|
||||
public final class GoblinSkiPatrol extends CardImpl {
|
||||
|
||||
private static final FilterControlledPermanent filter = new FilterControlledPermanent("a snow-covered Mountain");
|
||||
|
||||
static {
|
||||
filter.add(SubType.MOUNTAIN.getPredicate());
|
||||
filter.add(SuperType.SNOW.getPredicate());
|
||||
}
|
||||
|
||||
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter);
|
||||
private static final Hint hint = new ConditionHint(condition, "You control a snow-covered Mountain");
|
||||
|
||||
|
||||
public GoblinSkiPatrol(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}");
|
||||
|
||||
this.subtype.add(SubType.GOBLIN);
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// {1}{R}: Goblin Ski Patrol gets +2/+0 and gains flying. Its controller sacrifices it at the beginning of the next end step. Activate only once and only if you control a snow Mountain.
|
||||
Effect effect = new BoostSourceEffect(2, 0, Duration.EndOfTurn);
|
||||
effect.setText("{this} gets +2/+0");
|
||||
Ability ability = new ActivateOncePerGameActivatedAbility(effect, new ManaCostsImpl<>("{1}{R}"), condition);
|
||||
effect = new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.EndOfTurn);
|
||||
effect.setText("and gains flying");
|
||||
ability.addEffect(effect);
|
||||
ability.addEffect(new CreateDelayedTriggeredAbilityEffect(
|
||||
new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new SacrificeSourceEffect(true))
|
||||
).setText("Its controller sacrifices it at the beginning of the next end step."));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private GoblinSkiPatrol(final GoblinSkiPatrol card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GoblinSkiPatrol copy() {
|
||||
return new GoblinSkiPatrol(this);
|
||||
}
|
||||
}
|
||||
|
|
@ -152,6 +152,7 @@ public final class IceAge extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Goblin Lyre", 319, Rarity.RARE, mage.cards.g.GoblinLyre.class));
|
||||
cards.add(new SetCardInfo("Goblin Mutant", 188, Rarity.UNCOMMON, mage.cards.g.GoblinMutant.class));
|
||||
cards.add(new SetCardInfo("Goblin Sappers", 189, Rarity.COMMON, mage.cards.g.GoblinSappers.class));
|
||||
cards.add(new SetCardInfo("Goblin Ski Patrol", 190, Rarity.COMMON, mage.cards.g.GoblinSkiPatrol.class));
|
||||
cards.add(new SetCardInfo("Goblin Snowman", 191, Rarity.UNCOMMON, mage.cards.g.GoblinSnowman.class));
|
||||
cards.add(new SetCardInfo("Gorilla Pack", 247, Rarity.COMMON, mage.cards.g.GorillaPack.class));
|
||||
cards.add(new SetCardInfo("Gravebind", 129, Rarity.RARE, mage.cards.g.Gravebind.class));
|
||||
|
|
|
|||
|
|
@ -112,6 +112,7 @@ public final class MastersEditionII extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Giant Trap Door Spider", 195, Rarity.UNCOMMON, mage.cards.g.GiantTrapDoorSpider.class));
|
||||
cards.add(new SetCardInfo("Glacial Chasm", 229, Rarity.RARE, mage.cards.g.GlacialChasm.class));
|
||||
cards.add(new SetCardInfo("Glacial Crevasses", 127, Rarity.RARE, mage.cards.g.GlacialCrevasses.class));
|
||||
cards.add(new SetCardInfo("Goblin Ski Patrol", 128, Rarity.COMMON, mage.cards.g.GoblinSkiPatrol.class));
|
||||
cards.add(new SetCardInfo("Gorilla Shaman", 129, Rarity.UNCOMMON, mage.cards.g.GorillaShaman.class));
|
||||
cards.add(new SetCardInfo("Grandmother Sengir", 93, Rarity.RARE, mage.cards.g.GrandmotherSengir.class));
|
||||
cards.add(new SetCardInfo("Gustha's Scepter", 209, Rarity.RARE, mage.cards.g.GusthasScepter.class));
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package mage.abilities.common;
|
||||
|
||||
import mage.abilities.ActivatedAbilityImpl;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.costs.Cost;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.constants.TimingRule;
|
||||
|
|
@ -15,8 +16,21 @@ public class ActivateOncePerGameActivatedAbility extends ActivatedAbilityImpl {
|
|||
this(Zone.BATTLEFIELD, effect, cost, TimingRule.INSTANT);
|
||||
}
|
||||
|
||||
public ActivateOncePerGameActivatedAbility(Effect effect, Cost cost, Condition condition) {
|
||||
this(Zone.BATTLEFIELD, effect, cost, condition, TimingRule.INSTANT);
|
||||
}
|
||||
|
||||
public ActivateOncePerGameActivatedAbility(Zone zone, Effect effect, Cost cost, Condition condition) {
|
||||
this(zone, effect, cost, condition, TimingRule.INSTANT);
|
||||
}
|
||||
|
||||
public ActivateOncePerGameActivatedAbility(Zone zone, Effect effect, Cost cost, TimingRule timingRule) {
|
||||
this(zone, effect, cost, null, timingRule);
|
||||
}
|
||||
|
||||
public ActivateOncePerGameActivatedAbility(Zone zone, Effect effect, Cost cost, Condition condition, TimingRule timingRule) {
|
||||
super(zone, effect, cost);
|
||||
this.condition = condition;
|
||||
this.timing = timingRule;
|
||||
this.maxActivationsPerGame = 1;
|
||||
}
|
||||
|
|
@ -34,6 +48,10 @@ public class ActivateOncePerGameActivatedAbility extends ActivatedAbilityImpl {
|
|||
public String getRule() {
|
||||
StringBuilder sb = new StringBuilder(super.getRule());
|
||||
sb.append(" Activate ");
|
||||
if (condition != null) {
|
||||
String message = condition.toString();
|
||||
sb.append("only ").append(message.startsWith("if ") || message.startsWith("during") ? message : "if " + message).append(" and ");
|
||||
}
|
||||
if (this.timing == TimingRule.SORCERY) {
|
||||
sb.append("only as a sorcery and ");
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue