diff --git a/Mage.Sets/src/mage/cards/o/OriginOfTheHiddenOnes.java b/Mage.Sets/src/mage/cards/o/OriginOfTheHiddenOnes.java new file mode 100644 index 00000000000..9bbb6e146dc --- /dev/null +++ b/Mage.Sets/src/mage/cards/o/OriginOfTheHiddenOnes.java @@ -0,0 +1,93 @@ +package mage.cards.o; + +import mage.abilities.DelayedTriggeredAbility; +import mage.abilities.common.SagaAbility; +import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SagaChapter; +import mage.constants.SubType; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.game.permanent.token.AssassinMenaceToken; +import mage.target.common.TargetAnyTarget; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class OriginOfTheHiddenOnes extends CardImpl { + + public OriginOfTheHiddenOnes(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{R}"); + + this.subtype.add(SubType.SAGA); + + // (As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.) + SagaAbility sagaAbility = new SagaAbility(this); + + // I -- Origin of the Hidden Ones deals 4 damage to any target. + sagaAbility.addChapterEffect( + this, SagaChapter.CHAPTER_I, + new DamageTargetEffect(4), new TargetAnyTarget() + ); + + // II -- Create two 1/1 black Assassin creature tokens with menace. + sagaAbility.addChapterEffect( + this, SagaChapter.CHAPTER_II, + new CreateTokenEffect(new AssassinMenaceToken(), 2) + ); + + // III -- Whenever an Assassin you control attacks this turn, create a 1/1 black Assassin creature token with menace that's tapped and attacking. + sagaAbility.addChapterEffect( + this, SagaChapter.CHAPTER_III, + new CreateDelayedTriggeredAbilityEffect(new OriginOfTheHiddenOnesTriggeredAbility()) + ); + this.addAbility(sagaAbility); + } + + private OriginOfTheHiddenOnes(final OriginOfTheHiddenOnes card) { + super(card); + } + + @Override + public OriginOfTheHiddenOnes copy() { + return new OriginOfTheHiddenOnes(this); + } +} + +class OriginOfTheHiddenOnesTriggeredAbility extends DelayedTriggeredAbility { + + OriginOfTheHiddenOnesTriggeredAbility() { + super(new CreateTokenEffect(new AssassinMenaceToken(), 1, true, true), Duration.EndOfTurn, false, false); + setTriggerPhrase("Whenever an Assassin you control attacks this turn, "); + } + + private OriginOfTheHiddenOnesTriggeredAbility(final OriginOfTheHiddenOnesTriggeredAbility ability) { + super(ability); + } + + @Override + public OriginOfTheHiddenOnesTriggeredAbility copy() { + return new OriginOfTheHiddenOnesTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.ATTACKER_DECLARED; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + Permanent permanent = game.getPermanent(event.getSourceId()); + return permanent != null + && permanent.isControlledBy(getControllerId()) + && permanent.hasSubtype(SubType.ASSASSIN, game); + } +} diff --git a/Mage.Sets/src/mage/sets/AssassinsCreed.java b/Mage.Sets/src/mage/sets/AssassinsCreed.java index 032d0b27b3c..2fec0ed7be5 100644 --- a/Mage.Sets/src/mage/sets/AssassinsCreed.java +++ b/Mage.Sets/src/mage/sets/AssassinsCreed.java @@ -36,6 +36,7 @@ public final class AssassinsCreed extends ExpansionSet { cards.add(new SetCardInfo("Hidden Blade", 73, Rarity.UNCOMMON, mage.cards.h.HiddenBlade.class)); cards.add(new SetCardInfo("Murder", 92, Rarity.COMMON, mage.cards.m.Murder.class)); cards.add(new SetCardInfo("Nurturing Peatland", 114, Rarity.RARE, mage.cards.n.NurturingPeatland.class)); + cards.add(new SetCardInfo("Origin of the Hidden Ones", 36, Rarity.UNCOMMON, mage.cards.o.OriginOfTheHiddenOnes.class)); cards.add(new SetCardInfo("Raven Clan War-Axe", 297, Rarity.RARE, mage.cards.r.RavenClanWarAxe.class)); cards.add(new SetCardInfo("Reconstruct History", 97, Rarity.UNCOMMON, mage.cards.r.ReconstructHistory.class)); cards.add(new SetCardInfo("Rest in Peace", 83, Rarity.RARE, mage.cards.r.RestInPeace.class)); diff --git a/Mage/src/main/java/mage/game/permanent/token/AssassinMenaceToken.java b/Mage/src/main/java/mage/game/permanent/token/AssassinMenaceToken.java new file mode 100644 index 00000000000..f480a814d60 --- /dev/null +++ b/Mage/src/main/java/mage/game/permanent/token/AssassinMenaceToken.java @@ -0,0 +1,30 @@ +package mage.game.permanent.token; + +import mage.MageInt; +import mage.abilities.keyword.MenaceAbility; +import mage.constants.CardType; +import mage.constants.SubType; + +/** + * @author TheElk801 + */ +public final class AssassinMenaceToken extends TokenImpl { + + public AssassinMenaceToken() { + super("Assassin Token", "1/1 black Assassin creature token menace"); + cardType.add(CardType.CREATURE); + color.setBlack(true); + subtype.add(SubType.ASSASSIN); + power = new MageInt(1); + toughness = new MageInt(1); + addAbility(new MenaceAbility(false)); + } + + private AssassinMenaceToken(final AssassinMenaceToken token) { + super(token); + } + + public AssassinMenaceToken copy() { + return new AssassinMenaceToken(this); + } +}