mirror of
https://github.com/correl/mage.git
synced 2024-12-25 03:00:15 +00:00
Implemented Furious Rise.
This commit is contained in:
parent
7d3f17d578
commit
62062367e2
3 changed files with 141 additions and 0 deletions
136
Mage.Sets/src/mage/cards/f/FuriousRise.java
Normal file
136
Mage.Sets/src/mage/cards/f/FuriousRise.java
Normal file
|
@ -0,0 +1,136 @@
|
|||
package mage.cards.f;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import mage.MageObject;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.abilities.condition.common.FerociousCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.AsThoughEffect;
|
||||
import mage.abilities.effects.AsThoughEffectImpl;
|
||||
import mage.abilities.effects.ContinuousEffect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AsThoughEffectType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.TargetController;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public final class FuriousRise extends CardImpl {
|
||||
|
||||
public FuriousRise(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{R}");
|
||||
|
||||
// At the beginning of your end step, if you control a creature with power 4 or greater, exile the top card of your library.
|
||||
// You may play that card until you exile another card with Furious Rise.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(new BeginningOfEndStepTriggeredAbility(
|
||||
new FuriousRiseEffect(), TargetController.YOU, false), FerociousCondition.instance,
|
||||
"At the beginning of your end step, if you control a creature with power 4 or greater, exile the top card of your library. You may play that card until you exile another card with {this}."));
|
||||
}
|
||||
|
||||
private FuriousRise(final FuriousRise card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FuriousRise copy() {
|
||||
return new FuriousRise(this);
|
||||
}
|
||||
}
|
||||
|
||||
class FuriousRiseEffect extends OneShotEffect {
|
||||
|
||||
public FuriousRiseEffect() {
|
||||
super(Outcome.Benefit);
|
||||
this.staticText = "exile the top card of your library. You may play that card until you exile another card with Furious Rise";
|
||||
}
|
||||
|
||||
public FuriousRiseEffect(final FuriousRiseEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FuriousRiseEffect copy() {
|
||||
return new FuriousRiseEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
MageObject mageObject = source.getSourceObject(game);
|
||||
if (controller != null && mageObject != null) {
|
||||
Card cardToExile = controller.getLibrary().getFromTop(game);
|
||||
|
||||
UUID exileId = CardUtil.getCardExileZoneId(game, source);
|
||||
controller.moveCardsToExile(cardToExile, source, game, true, exileId, mageObject.getIdName() + " (" + source.getSourceObjectZoneChangeCounter() + ")");
|
||||
Card cardToPlay = game.getCard(cardToExile.getId());
|
||||
|
||||
endPreviousEffect(game, source);
|
||||
|
||||
ContinuousEffect effect = new FuriousRisePlayEffect();
|
||||
effect.setTargetPointer(new FixedTarget(cardToPlay, game));
|
||||
game.addEffect(effect, source);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean endPreviousEffect(Game game, Ability source) {
|
||||
for (AsThoughEffect effect : game.getContinuousEffects().getApplicableAsThoughEffects(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, game)) {
|
||||
if (effect instanceof FuriousRisePlayEffect) {
|
||||
for (Ability ability : game.getContinuousEffects().getAsThoughEffectsAbility(effect)) {
|
||||
if (ability.getSourceId().equals(source.getSourceId())
|
||||
&& source.getSourceObjectZoneChangeCounter() == ability.getSourceObjectZoneChangeCounter()) {
|
||||
((FuriousRisePlayEffect) effect).discard();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
class FuriousRisePlayEffect extends AsThoughEffectImpl {
|
||||
|
||||
public FuriousRisePlayEffect() {
|
||||
super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.Custom, Outcome.Benefit);
|
||||
}
|
||||
|
||||
public FuriousRisePlayEffect(final FuriousRisePlayEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FuriousRisePlayEffect copy() {
|
||||
return new FuriousRisePlayEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) {
|
||||
List<UUID> targets = getTargetPointer().getTargets(game, source);
|
||||
if (targets.isEmpty()) {
|
||||
this.discard();
|
||||
return false;
|
||||
}
|
||||
return targets.contains(objectId)
|
||||
&& affectedControllerId.equals(source.getControllerId());
|
||||
}
|
||||
}
|
|
@ -102,6 +102,7 @@ public final class TherosBeyondDeath extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Forest", 254, Rarity.LAND, mage.cards.basiclands.Forest.class, FULL_ART_BFZ_VARIOUS));
|
||||
cards.add(new SetCardInfo("Fruit of Tizerus", 96, Rarity.COMMON, mage.cards.f.FruitOfTizerus.class));
|
||||
cards.add(new SetCardInfo("Funeral Rites", 97, Rarity.COMMON, mage.cards.f.FuneralRites.class));
|
||||
cards.add(new SetCardInfo("Furious Rise", 136, Rarity.UNCOMMON, mage.cards.f.FuriousRise.class));
|
||||
cards.add(new SetCardInfo("Gallia of the Endless Dance", 217, Rarity.RARE, mage.cards.g.GalliaOfTheEndlessDance.class));
|
||||
cards.add(new SetCardInfo("Gift of Strength", 171, Rarity.COMMON, mage.cards.g.GiftOfStrength.class));
|
||||
cards.add(new SetCardInfo("Glimpse of Freedom", 50, Rarity.UNCOMMON, mage.cards.g.GlimpseOfFreedom.class));
|
||||
|
|
|
@ -597,6 +597,10 @@ public class ContinuousEffects implements Serializable {
|
|||
return asThoughEffectsList;
|
||||
}
|
||||
|
||||
public Set<Ability> getAsThoughEffectsAbility(AsThoughEffect effect) {
|
||||
return asThoughEffectsMap.get(effect.getAsThoughEffectType()).getAbility(effect.getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* 601.2e The player determines the total cost of the spell. Usually this is
|
||||
* just the mana cost. Some spells have additional or alternative costs.
|
||||
|
|
Loading…
Reference in a new issue