diff --git a/src/magic/model/MagicAbility.java b/src/magic/model/MagicAbility.java index 163f1d801f..ed49fe280a 100644 --- a/src/magic/model/MagicAbility.java +++ b/src/magic/model/MagicAbility.java @@ -675,6 +675,14 @@ public enum MagicAbility { card.add(ThisDiesTrigger.Afterlife(n)); } }, + Spectacle("spectacle( |—)" + ARG.MANACOST, 10) { + @Override + protected void addAbilityImpl(final MagicAbilityStore card, final Matcher arg) { + final MagicCardDefinition cardDef = (MagicCardDefinition)card; + final MagicManaCost manaCost = MagicManaCost.create(ARG.manacost(arg)); + card.add(new MagicSpectacleActivation(cardDef, manaCost)); + } + }, // abilities that involve SN ShockLand("As SN enters the battlefield, you may " + ARG.COST + "\\. If you don't, SN enters the battlefield tapped\\.", -10) { @@ -724,6 +732,12 @@ public enum MagicAbility { EntersKickedEffect.addAbilityImpl(card, arg); } }, + EntersSpectacleEffect("When SN enters the battlefield, if its spectacle cost was paid, " + ARG.EFFECT, 10) { + @Override + protected void addAbilityImpl(final MagicAbilityStore card, final Matcher arg) { + EntersKickedEffect.addAbilityImpl(card, arg); + } + }, EntersEffect("When SN enters the battlefield, " + ARG.EFFECT, 10) { @Override protected void addAbilityImpl(final MagicAbilityStore card, final Matcher arg) { diff --git a/src/magic/model/condition/MagicCondition.java b/src/magic/model/condition/MagicCondition.java index b16819e1a3..4626860a83 100644 --- a/src/magic/model/condition/MagicCondition.java +++ b/src/magic/model/condition/MagicCondition.java @@ -962,4 +962,12 @@ public abstract class MagicCondition implements MagicMatchedCostEvent { (phaseType == MagicPhaseType.FirstMain || phaseType == MagicPhaseType.SecondMain); } }; + + public static MagicCondition SPECTACLE = new MagicCondition() { + @Override + public boolean accept(final MagicSource source) { + final MagicPlayer opponent = source.getOpponent(); + return opponent.getLifeLossThisTurn() > 0; + } + }; } diff --git a/src/magic/model/event/MagicSpectacleActivation.java b/src/magic/model/event/MagicSpectacleActivation.java new file mode 100644 index 0000000000..1c956361ed --- /dev/null +++ b/src/magic/model/event/MagicSpectacleActivation.java @@ -0,0 +1,35 @@ +package magic.model.event; + +import java.util.Arrays; +import magic.model.MagicCard; +import magic.model.MagicCardDefinition; +import magic.model.MagicManaCost; +import magic.model.condition.MagicCondition; + +public class MagicSpectacleActivation extends MagicHandCastActivation { + + final MagicManaCost cost; + + public MagicSpectacleActivation(final MagicCardDefinition cdef, final MagicManaCost aCost) { + super( + new MagicCondition[]{ + MagicCondition.CARD_CONDITION, + MagicCondition.SPECTACLE + }, + cdef.getActivationHints(), + "Spectacle" + ); + cost = aCost; + } + + @Override + public Iterable getCostEvent(final MagicCard source) { + return Arrays.asList( + MagicPayManaCostEvent.Cast( + source, + cost + ), + new MagicEvokeEvent(source) + ); + } +}