mirror of
https://github.com/correl/mage.git
synced 2024-12-25 11:11:16 +00:00
[BRC] Implemented Blast-Furnace Hellkite
This commit is contained in:
parent
06a1445ea1
commit
4bdd1cb2e3
9 changed files with 130 additions and 40 deletions
73
Mage.Sets/src/mage/cards/b/BlastFurnaceHellkite.java
Normal file
73
Mage.Sets/src/mage/cards/b/BlastFurnaceHellkite.java
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
package mage.cards.b;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
|
import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
|
||||||
|
import mage.abilities.keyword.DoubleStrikeAbility;
|
||||||
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
|
import mage.abilities.keyword.OfferingAbility;
|
||||||
|
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.FilterControlledArtifactPermanent;
|
||||||
|
import mage.filter.common.FilterControlledPermanent;
|
||||||
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
|
import mage.filter.predicate.ObjectSourcePlayer;
|
||||||
|
import mage.filter.predicate.ObjectSourcePlayerPredicate;
|
||||||
|
import mage.game.Game;
|
||||||
|
import mage.game.permanent.Permanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class BlastFurnaceHellkite extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterControlledPermanent filter = new FilterControlledArtifactPermanent("artifact");
|
||||||
|
private static final FilterPermanent filter2 = new FilterCreaturePermanent("creatures attacking your opponents");
|
||||||
|
|
||||||
|
public BlastFurnaceHellkite(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{7}{R}{R}");
|
||||||
|
|
||||||
|
this.subtype.add(SubType.DRAGON);
|
||||||
|
this.power = new MageInt(5);
|
||||||
|
this.toughness = new MageInt(5);
|
||||||
|
|
||||||
|
// Artifact offering
|
||||||
|
this.addAbility(new OfferingAbility(filter));
|
||||||
|
|
||||||
|
// Flying
|
||||||
|
this.addAbility(FlyingAbility.getInstance());
|
||||||
|
|
||||||
|
// Double strike
|
||||||
|
this.addAbility(DoubleStrikeAbility.getInstance());
|
||||||
|
|
||||||
|
// Creatures attacking your opponents have double strike.
|
||||||
|
this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect(
|
||||||
|
DoubleStrikeAbility.getInstance(), Duration.WhileOnBattlefield, filter2
|
||||||
|
)));
|
||||||
|
}
|
||||||
|
|
||||||
|
private BlastFurnaceHellkite(final BlastFurnaceHellkite card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlastFurnaceHellkite copy() {
|
||||||
|
return new BlastFurnaceHellkite(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enum BlastFurnaceHellkitePredicate implements ObjectSourcePlayerPredicate<Permanent> {
|
||||||
|
instance;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(ObjectSourcePlayer<Permanent> input, Game game) {
|
||||||
|
return game.getOpponents(input.getSource().getControllerId())
|
||||||
|
.contains(game.getCombat().getDefenderId(input.getObject().getId()));
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,7 +1,6 @@
|
||||||
|
|
||||||
package mage.cards.p;
|
package mage.cards.p;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.common.AttacksTriggeredAbility;
|
import mage.abilities.common.AttacksTriggeredAbility;
|
||||||
import mage.abilities.effects.common.continuous.BoostControlledEffect;
|
import mage.abilities.effects.common.continuous.BoostControlledEffect;
|
||||||
|
@ -13,12 +12,17 @@ import mage.constants.Duration;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.SuperType;
|
import mage.constants.SuperType;
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
|
import mage.filter.common.FilterControlledPermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
*/
|
*/
|
||||||
public final class PatronOfTheAkki extends CardImpl {
|
public final class PatronOfTheAkki extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.GOBLIN, "Goblin");
|
||||||
|
|
||||||
public PatronOfTheAkki(UUID ownerId, CardSetInfo setInfo) {
|
public PatronOfTheAkki(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}{R}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}{R}");
|
||||||
addSuperType(SuperType.LEGENDARY);
|
addSuperType(SuperType.LEGENDARY);
|
||||||
|
@ -28,7 +32,7 @@ public final class PatronOfTheAkki extends CardImpl {
|
||||||
this.toughness = new MageInt(5);
|
this.toughness = new MageInt(5);
|
||||||
|
|
||||||
// Goblin offering (You may cast this card any time you could cast an instant by sacrificing a Goblin and paying the difference in mana costs between this and the sacrificed Goblin. Mana cost includes color.)
|
// Goblin offering (You may cast this card any time you could cast an instant by sacrificing a Goblin and paying the difference in mana costs between this and the sacrificed Goblin. Mana cost includes color.)
|
||||||
this.addAbility(new OfferingAbility(SubType.GOBLIN));
|
this.addAbility(new OfferingAbility(filter));
|
||||||
|
|
||||||
// Whenever Patron of the Akki attacks, creatures you control get +2/+0 until end of turn.
|
// Whenever Patron of the Akki attacks, creatures you control get +2/+0 until end of turn.
|
||||||
this.addAbility(new AttacksTriggeredAbility(new BoostControlledEffect(2, 0, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE, false), false));
|
this.addAbility(new AttacksTriggeredAbility(new BoostControlledEffect(2, 0, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE, false), false));
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
|
|
||||||
package mage.cards.p;
|
package mage.cards.p;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.common.AttacksAllTriggeredAbility;
|
import mage.abilities.common.AttacksAllTriggeredAbility;
|
||||||
import mage.abilities.effects.common.GainLifeEffect;
|
import mage.abilities.effects.common.GainLifeEffect;
|
||||||
|
@ -11,14 +10,19 @@ import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.SuperType;
|
import mage.constants.SuperType;
|
||||||
|
import mage.filter.common.FilterControlledPermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
*/
|
*/
|
||||||
public final class PatronOfTheKitsune extends CardImpl {
|
public final class PatronOfTheKitsune extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.FOX, "Fox");
|
||||||
|
|
||||||
public PatronOfTheKitsune(UUID ownerId, CardSetInfo setInfo) {
|
public PatronOfTheKitsune(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{W}{W}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{W}{W}");
|
||||||
addSuperType(SuperType.LEGENDARY);
|
addSuperType(SuperType.LEGENDARY);
|
||||||
this.subtype.add(SubType.SPIRIT);
|
this.subtype.add(SubType.SPIRIT);
|
||||||
|
|
||||||
|
@ -26,7 +30,7 @@ public final class PatronOfTheKitsune extends CardImpl {
|
||||||
this.toughness = new MageInt(6);
|
this.toughness = new MageInt(6);
|
||||||
|
|
||||||
// Fox offering (You may cast this card any time you could cast an instant by sacrificing a Fox and paying the difference in mana costs between this and the sacrificed Fox. Mana cost includes color.)
|
// Fox offering (You may cast this card any time you could cast an instant by sacrificing a Fox and paying the difference in mana costs between this and the sacrificed Fox. Mana cost includes color.)
|
||||||
this.addAbility(new OfferingAbility(SubType.FOX));
|
this.addAbility(new OfferingAbility(filter));
|
||||||
|
|
||||||
// Whenever a creature attacks, you may gain 1 life.
|
// Whenever a creature attacks, you may gain 1 life.
|
||||||
this.addAbility(new AttacksAllTriggeredAbility(new GainLifeEffect(1), true));
|
this.addAbility(new AttacksAllTriggeredAbility(new GainLifeEffect(1), true));
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.p;
|
package mage.cards.p;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
|
@ -13,19 +11,24 @@ import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.cards.CardsImpl;
|
import mage.cards.CardsImpl;
|
||||||
import mage.constants.*;
|
import mage.constants.*;
|
||||||
|
import mage.filter.common.FilterControlledPermanent;
|
||||||
import mage.filter.common.FilterLandCard;
|
import mage.filter.common.FilterLandCard;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.players.Player;
|
import mage.players.Player;
|
||||||
import mage.target.TargetCard;
|
import mage.target.TargetCard;
|
||||||
import mage.target.common.TargetCardInHand;
|
import mage.target.common.TargetCardInHand;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
*/
|
*/
|
||||||
public final class PatronOfTheMoon extends CardImpl {
|
public final class PatronOfTheMoon extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.MOONFOLK, "Moonfolk");
|
||||||
|
|
||||||
public PatronOfTheMoon(UUID ownerId, CardSetInfo setInfo) {
|
public PatronOfTheMoon(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{5}{U}{U}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{U}{U}");
|
||||||
this.addSuperType(SuperType.LEGENDARY);
|
this.addSuperType(SuperType.LEGENDARY);
|
||||||
this.subtype.add(SubType.SPIRIT);
|
this.subtype.add(SubType.SPIRIT);
|
||||||
|
|
||||||
|
@ -33,7 +36,7 @@ public final class PatronOfTheMoon extends CardImpl {
|
||||||
this.toughness = new MageInt(4);
|
this.toughness = new MageInt(4);
|
||||||
|
|
||||||
// Moonfolk offering (You may cast this card any time you could cast an instant by sacrificing a Moonfolk and paying the difference in mana costs between this and the sacrificed Moonfolk. Mana cost includes color.)
|
// Moonfolk offering (You may cast this card any time you could cast an instant by sacrificing a Moonfolk and paying the difference in mana costs between this and the sacrificed Moonfolk. Mana cost includes color.)
|
||||||
this.addAbility(new OfferingAbility(SubType.MOONFOLK));
|
this.addAbility(new OfferingAbility(filter));
|
||||||
|
|
||||||
// Flying
|
// Flying
|
||||||
this.addAbility(FlyingAbility.getInstance());
|
this.addAbility(FlyingAbility.getInstance());
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.p;
|
package mage.cards.p;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.TriggeredAbilityImpl;
|
import mage.abilities.TriggeredAbilityImpl;
|
||||||
import mage.abilities.effects.Effect;
|
import mage.abilities.effects.Effect;
|
||||||
|
@ -14,21 +11,25 @@ import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.SuperType;
|
import mage.constants.SuperType;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
|
import mage.filter.common.FilterControlledPermanent;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.events.GameEvent;
|
import mage.game.events.GameEvent;
|
||||||
import mage.game.events.GameEvent.EventType;
|
|
||||||
import mage.game.events.ZoneChangeEvent;
|
import mage.game.events.ZoneChangeEvent;
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
import mage.target.targetpointer.FixedTarget;
|
import mage.target.targetpointer.FixedTarget;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
*/
|
*/
|
||||||
public final class PatronOfTheNezumi extends CardImpl {
|
public final class PatronOfTheNezumi extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.RAT, "Rat");
|
||||||
|
|
||||||
public PatronOfTheNezumi(UUID ownerId, CardSetInfo setInfo) {
|
public PatronOfTheNezumi(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{5}{B}{B}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{B}{B}");
|
||||||
addSuperType(SuperType.LEGENDARY);
|
addSuperType(SuperType.LEGENDARY);
|
||||||
this.subtype.add(SubType.SPIRIT);
|
this.subtype.add(SubType.SPIRIT);
|
||||||
|
|
||||||
|
@ -36,7 +37,7 @@ public final class PatronOfTheNezumi extends CardImpl {
|
||||||
this.toughness = new MageInt(6);
|
this.toughness = new MageInt(6);
|
||||||
|
|
||||||
// Rat offering (You may cast this card any time you could cast an instant by sacrificing a Rat and paying the difference in mana costs between this and the sacrificed Rat. Mana cost includes color.)
|
// Rat offering (You may cast this card any time you could cast an instant by sacrificing a Rat and paying the difference in mana costs between this and the sacrificed Rat. Mana cost includes color.)
|
||||||
this.addAbility(new OfferingAbility(SubType.RAT));
|
this.addAbility(new OfferingAbility(filter));
|
||||||
|
|
||||||
// Whenever a permanent is put into an opponent's graveyard, that player loses 1 life.
|
// Whenever a permanent is put into an opponent's graveyard, that player loses 1 life.
|
||||||
this.addAbility(new PatronOfTheNezumiTriggeredAbility(new LoseLifeTargetEffect(1)));
|
this.addAbility(new PatronOfTheNezumiTriggeredAbility(new LoseLifeTargetEffect(1)));
|
||||||
|
@ -90,4 +91,4 @@ class PatronOfTheNezumiTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
public PatronOfTheNezumiTriggeredAbility copy() {
|
public PatronOfTheNezumiTriggeredAbility copy() {
|
||||||
return new PatronOfTheNezumiTriggeredAbility(this);
|
return new PatronOfTheNezumiTriggeredAbility(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.p;
|
package mage.cards.p;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.ObjectColor;
|
import mage.ObjectColor;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
|
@ -13,20 +11,25 @@ import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.*;
|
import mage.constants.*;
|
||||||
import mage.filter.FilterPermanent;
|
import mage.filter.FilterPermanent;
|
||||||
|
import mage.filter.common.FilterControlledPermanent;
|
||||||
import mage.filter.predicate.Predicates;
|
import mage.filter.predicate.Predicates;
|
||||||
import mage.filter.predicate.mageobject.ColorPredicate;
|
import mage.filter.predicate.mageobject.ColorPredicate;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
import mage.players.Player;
|
import mage.players.Player;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
*/
|
*/
|
||||||
public final class PatronOfTheOrochi extends CardImpl {
|
public final class PatronOfTheOrochi extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.SNAKE, "Snake");
|
||||||
|
|
||||||
public PatronOfTheOrochi(UUID ownerId, CardSetInfo setInfo) {
|
public PatronOfTheOrochi(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{6}{G}{G}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{6}{G}{G}");
|
||||||
addSuperType(SuperType.LEGENDARY);
|
addSuperType(SuperType.LEGENDARY);
|
||||||
this.subtype.add(SubType.SPIRIT);
|
this.subtype.add(SubType.SPIRIT);
|
||||||
|
|
||||||
|
@ -36,11 +39,11 @@ public final class PatronOfTheOrochi extends CardImpl {
|
||||||
// Snake offering (You may cast this card any time you could cast an instant
|
// Snake offering (You may cast this card any time you could cast an instant
|
||||||
// by sacrificing a Snake and paying the difference in mana costs between this
|
// by sacrificing a Snake and paying the difference in mana costs between this
|
||||||
// and the sacrificed Snake. Mana cost includes color.)
|
// and the sacrificed Snake. Mana cost includes color.)
|
||||||
this.addAbility(new OfferingAbility(SubType.SNAKE));
|
this.addAbility(new OfferingAbility(filter));
|
||||||
|
|
||||||
// {T}: Untap all Forests and all green creatures. Activate this ability only once each turn.
|
// {T}: Untap all Forests and all green creatures. Activate this ability only once each turn.
|
||||||
this.addAbility(new LimitedTimesPerTurnActivatedAbility(Zone.BATTLEFIELD, new PatronOfTheOrochiEffect(), new TapSourceCost()));
|
this.addAbility(new LimitedTimesPerTurnActivatedAbility(Zone.BATTLEFIELD, new PatronOfTheOrochiEffect(), new TapSourceCost()));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private PatronOfTheOrochi(final PatronOfTheOrochi card) {
|
private PatronOfTheOrochi(final PatronOfTheOrochi card) {
|
||||||
|
@ -56,11 +59,12 @@ public final class PatronOfTheOrochi extends CardImpl {
|
||||||
class PatronOfTheOrochiEffect extends OneShotEffect {
|
class PatronOfTheOrochiEffect extends OneShotEffect {
|
||||||
|
|
||||||
private static final FilterPermanent filter = new FilterPermanent();
|
private static final FilterPermanent filter = new FilterPermanent();
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(Predicates.or( SubType.FOREST.getPredicate(),
|
filter.add(Predicates.or(SubType.FOREST.getPredicate(),
|
||||||
Predicates.and(CardType.CREATURE.getPredicate(),
|
Predicates.and(CardType.CREATURE.getPredicate(),
|
||||||
new ColorPredicate(ObjectColor.GREEN))
|
new ColorPredicate(ObjectColor.GREEN))
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
public PatronOfTheOrochiEffect() {
|
public PatronOfTheOrochiEffect() {
|
||||||
|
@ -76,7 +80,7 @@ class PatronOfTheOrochiEffect extends OneShotEffect {
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
Player player = game.getPlayer(source.getControllerId());
|
Player player = game.getPlayer(source.getControllerId());
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
for (Permanent permanent: game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source, game)) {
|
for (Permanent permanent : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source, game)) {
|
||||||
permanent.untap(game);
|
permanent.untap(game);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -88,5 +92,4 @@ class PatronOfTheOrochiEffect extends OneShotEffect {
|
||||||
public PatronOfTheOrochiEffect copy() {
|
public PatronOfTheOrochiEffect copy() {
|
||||||
return new PatronOfTheOrochiEffect(this);
|
return new PatronOfTheOrochiEffect(this);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
|
||||||
|
|
|
@ -35,6 +35,7 @@ public final class TheBrothersWarCommander extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Bedevil", 121, Rarity.RARE, mage.cards.b.Bedevil.class));
|
cards.add(new SetCardInfo("Bedevil", 121, Rarity.RARE, mage.cards.b.Bedevil.class));
|
||||||
cards.add(new SetCardInfo("Bident of Thassa", 80, Rarity.RARE, mage.cards.b.BidentOfThassa.class));
|
cards.add(new SetCardInfo("Bident of Thassa", 80, Rarity.RARE, mage.cards.b.BidentOfThassa.class));
|
||||||
cards.add(new SetCardInfo("Blasphemous Act", 113, Rarity.RARE, mage.cards.b.BlasphemousAct.class));
|
cards.add(new SetCardInfo("Blasphemous Act", 113, Rarity.RARE, mage.cards.b.BlasphemousAct.class));
|
||||||
|
cards.add(new SetCardInfo("Blast-Furnace Hellkite", 12, Rarity.RARE, mage.cards.b.BlastFurnaceHellkite.class));
|
||||||
cards.add(new SetCardInfo("Bojuka Bog", 176, Rarity.COMMON, mage.cards.b.BojukaBog.class));
|
cards.add(new SetCardInfo("Bojuka Bog", 176, Rarity.COMMON, mage.cards.b.BojukaBog.class));
|
||||||
cards.add(new SetCardInfo("Bronze Guardian", 70, Rarity.RARE, mage.cards.b.BronzeGuardian.class));
|
cards.add(new SetCardInfo("Bronze Guardian", 70, Rarity.RARE, mage.cards.b.BronzeGuardian.class));
|
||||||
cards.add(new SetCardInfo("Brudiclad, Telchor Engineer", 122, Rarity.RARE, mage.cards.b.BrudicladTelchorEngineer.class));
|
cards.add(new SetCardInfo("Brudiclad, Telchor Engineer", 122, Rarity.RARE, mage.cards.b.BrudicladTelchorEngineer.class));
|
||||||
|
|
|
@ -12,12 +12,12 @@ import mage.abilities.effects.common.cost.CostModificationEffectImpl;
|
||||||
import mage.abilities.mana.ManaOptions;
|
import mage.abilities.mana.ManaOptions;
|
||||||
import mage.cards.Card;
|
import mage.cards.Card;
|
||||||
import mage.constants.*;
|
import mage.constants.*;
|
||||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
import mage.filter.common.FilterControlledPermanent;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
import mage.players.Player;
|
import mage.players.Player;
|
||||||
import mage.target.Target;
|
import mage.target.Target;
|
||||||
import mage.target.common.TargetControlledCreaturePermanent;
|
import mage.target.TargetPermanent;
|
||||||
import mage.target.targetpointer.FixedTarget;
|
import mage.target.targetpointer.FixedTarget;
|
||||||
import mage.util.CardUtil;
|
import mage.util.CardUtil;
|
||||||
import mage.util.GameLog;
|
import mage.util.GameLog;
|
||||||
|
@ -48,15 +48,14 @@ import java.util.UUID;
|
||||||
*/
|
*/
|
||||||
public class OfferingAbility extends StaticAbility implements AlternateManaPaymentAbility {
|
public class OfferingAbility extends StaticAbility implements AlternateManaPaymentAbility {
|
||||||
|
|
||||||
private FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent();
|
private final FilterControlledPermanent filter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param subtype name of the subtype that can be offered
|
* @param subtype name of the subtype that can be offered
|
||||||
*/
|
*/
|
||||||
public OfferingAbility(SubType subtype) {
|
public OfferingAbility(FilterControlledPermanent filter) {
|
||||||
super(Zone.ALL, null);
|
super(Zone.ALL, null);
|
||||||
filter.add(subtype.getPredicate());
|
this.filter = filter;
|
||||||
filter.setMessage(subtype.getDescription());
|
|
||||||
this.addEffect(new OfferingAsThoughEffect());
|
this.addEffect(new OfferingAsThoughEffect());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,14 +69,16 @@ public class OfferingAbility extends StaticAbility implements AlternateManaPayme
|
||||||
return new OfferingAbility(this);
|
return new OfferingAbility(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public FilterControlledCreaturePermanent getFilter() {
|
public FilterControlledPermanent getFilter() {
|
||||||
return filter;
|
return filter;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRule(boolean all) {
|
public String getRule(boolean all) {
|
||||||
String subtype = filter.getMessage();
|
String message = filter.getMessage();
|
||||||
return subtype + " offering <i>(You may cast this card any time you could cast an instant by sacrificing a " + subtype + " and paying the difference in mana costs between this and the sacrificed " + subtype + ". Mana cost includes color.)</i>";
|
return message + " offering <i>(You may cast this card any time you could cast an instant by sacrificing " +
|
||||||
|
CardUtil.addArticle(message) + " and paying the difference in mana costs between this and the sacrificed " +
|
||||||
|
message + ". Mana cost includes color.)</i>";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -169,7 +170,7 @@ class OfferingAsThoughEffect extends AsThoughEffectImpl {
|
||||||
if (game.inCheckPlayableState()) {
|
if (game.inCheckPlayableState()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
FilterControlledCreaturePermanent filter = ((OfferingAbility) source).getFilter();
|
FilterControlledPermanent filter = ((OfferingAbility) source).getFilter();
|
||||||
Card spellToCast = game.getCard(source.getSourceId());
|
Card spellToCast = game.getCard(source.getSourceId());
|
||||||
if (spellToCast == null) {
|
if (spellToCast == null) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -177,7 +178,7 @@ class OfferingAsThoughEffect extends AsThoughEffectImpl {
|
||||||
Player player = game.getPlayer(source.getControllerId());
|
Player player = game.getPlayer(source.getControllerId());
|
||||||
if (player != null
|
if (player != null
|
||||||
&& player.chooseUse(Outcome.Benefit, "Offer a " + filter.getMessage() + " to cast " + spellToCast.getName() + '?', source, game)) {
|
&& player.chooseUse(Outcome.Benefit, "Offer a " + filter.getMessage() + " to cast " + spellToCast.getName() + '?', source, game)) {
|
||||||
Target target = new TargetControlledCreaturePermanent(1, 1, filter, true);
|
Target target = new TargetPermanent(1, 1, filter, true);
|
||||||
player.chooseTarget(Outcome.Sacrifice, target, source, game);
|
player.chooseTarget(Outcome.Sacrifice, target, source, game);
|
||||||
if (!target.isChosen()) {
|
if (!target.isChosen()) {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -46261,7 +46261,7 @@ March of Progress|The Brothers' War Commander|8|R|{2}{U}|Sorcery|||Choose target
|
||||||
Terisiare's Devastation|The Brothers' War Commander|9|R|{X}{2}{B}{B}|Sorcery|||You lose X life and create X tapped Powerstone tokens. Then all creatures get -1/-1 until end of turn for each artifact you control.|
|
Terisiare's Devastation|The Brothers' War Commander|9|R|{X}{2}{B}{B}|Sorcery|||You lose X life and create X tapped Powerstone tokens. Then all creatures get -1/-1 until end of turn for each artifact you control.|
|
||||||
Wire Surgeons|The Brothers' War Commander|10|R|{4}{B}{B}|Creature - Human Artificer|6|5|Fear$Each artifact creature card in your graveyard has encore. Its encore cost is equal to its mana cost.|
|
Wire Surgeons|The Brothers' War Commander|10|R|{4}{B}{B}|Creature - Human Artificer|6|5|Fear$Each artifact creature card in your graveyard has encore. Its encore cost is equal to its mana cost.|
|
||||||
Wreck Hunter|The Brothers' War Commander|11|R|{B}{B}|Creature - Human Artificer|2|2|Flash$When Wreck Hunter enters the battlefield, choose target player. You create a tapped Powerstone token for each nonland card in that player's graveyard that was put there from the battlefield this turn.|
|
Wreck Hunter|The Brothers' War Commander|11|R|{B}{B}|Creature - Human Artificer|2|2|Flash$When Wreck Hunter enters the battlefield, choose target player. You create a tapped Powerstone token for each nonland card in that player's graveyard that was put there from the battlefield this turn.|
|
||||||
Blast-Furnace Hellkite|The Brothers' War Commander|12|R|{7}{R}{R}|Creature - Dragon|5|5|Goblin offering|
|
Blast-Furnace Hellkite|The Brothers' War Commander|12|R|{7}{R}{R}|Creature - Dragon|5|5|Artifact offering$Flying, double strike$Creatures attacking your opponents have double strike.|
|
||||||
Farid, Enterprising Salvager|The Brothers' War Commander|13|R|{2}{R}|Legendary Creature - Human Soldier|3|3|Whenever a nontoken artifact you control is put into a graveyard from the battlefield, create a colorless artifact token named Scrap.${1}{R}, Sacrifice an artifact: Choose one --$* Put a +1/+1 counter on Farid. It gains haste until end of turn.$* Goad target creature.$* Discard a card, then draw a card.|
|
Farid, Enterprising Salvager|The Brothers' War Commander|13|R|{2}{R}|Legendary Creature - Human Soldier|3|3|Whenever a nontoken artifact you control is put into a graveyard from the battlefield, create a colorless artifact token named Scrap.${1}{R}, Sacrifice an artifact: Choose one --$* Put a +1/+1 counter on Farid. It gains haste until end of turn.$* Goad target creature.$* Discard a card, then draw a card.|
|
||||||
Hexavus|The Brothers' War Commander|14|R|{6}|Artifact Creature - Construct|0|0|Flying$Hexavus enters the battlefield with six +1/+1 counters on it.${1}, Remove a +1/+1 counter from Hexavus: Put a flying counter on another target creature.${1}, Remove a counter from another creature you control: Put a +1/+1 counter on.|
|
Hexavus|The Brothers' War Commander|14|R|{6}|Artifact Creature - Construct|0|0|Flying$Hexavus enters the battlefield with six +1/+1 counters on it.${1}, Remove a +1/+1 counter from Hexavus: Put a flying counter on another target creature.${1}, Remove a counter from another creature you control: Put a +1/+1 counter on.|
|
||||||
Kayla's Music Box|The Brothers' War Commander|15|R|{2}|Legendary Artifact|||{W}, {T}: Look at the top card of your library, then exile it face down.${T}: Until end of turn, you may play cards you own exiled with Kayla's Music Box.|
|
Kayla's Music Box|The Brothers' War Commander|15|R|{2}|Legendary Artifact|||{W}, {T}: Look at the top card of your library, then exile it face down.${T}: Until end of turn, you may play cards you own exiled with Kayla's Music Box.|
|
||||||
|
|
Loading…
Reference in a new issue