From 8fde85502698c3944b71096fe1fc1f1a6fc5f70d Mon Sep 17 00:00:00 2001 From: Susucre <34709007+Susucre@users.noreply.github.com> Date: Thu, 17 Aug 2023 01:07:07 +0200 Subject: [PATCH] [WOE] Implement Sharae of Numbing Depths (#10829) * [WOE] Implement Sharae of Numbing Depths * change EventType.TAPPED's playerId to be the source's controller There seems to have been no usage of the previous playerId, and it can be retrieve from the target anyway. * apply review -- cleaner and check for creatures. --- .../mage/cards/s/SharaeOfNumbingDepths.java | 89 +++++++++++++++++++ Mage.Sets/src/mage/sets/WildsOfEldraine.java | 1 + .../main/java/mage/game/events/GameEvent.java | 2 +- .../mage/game/permanent/PermanentImpl.java | 2 +- 4 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/s/SharaeOfNumbingDepths.java diff --git a/Mage.Sets/src/mage/cards/s/SharaeOfNumbingDepths.java b/Mage.Sets/src/mage/cards/s/SharaeOfNumbingDepths.java new file mode 100644 index 00000000000..0580bed6c49 --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SharaeOfNumbingDepths.java @@ -0,0 +1,89 @@ +package mage.cards.s; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.TapTargetEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.filter.StaticFilters; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.target.common.TargetOpponentsCreaturePermanent; + +import java.util.UUID; + +/** + * + * @author Susucr + */ +public final class SharaeOfNumbingDepths extends CardImpl { + + public SharaeOfNumbingDepths(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}{U}"); + + this.supertype.add(SuperType.LEGENDARY); + this.subtype.add(SubType.MERFOLK); + this.subtype.add(SubType.WIZARD); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // When Sharae of Numbing Depths enters the battlefield, tap target creature an opponent controls and put a stun counter on it. + Ability ability = new EntersBattlefieldTriggeredAbility(new TapTargetEffect()); + ability.addEffect(new AddCountersTargetEffect(CounterType.STUN.createInstance()).setText("and put a stun counter on it")); + ability.addTarget(new TargetOpponentsCreaturePermanent()); + this.addAbility(ability); + + // Whenever you tap one or more untapped creatures your opponents control, draw a card. This ability triggers only once each turn. + this.addAbility(new SharaeOfNumbingDepthsTriggeredAbility()); + } + + private SharaeOfNumbingDepths(final SharaeOfNumbingDepths card) { + super(card); + } + + @Override + public SharaeOfNumbingDepths copy() { + return new SharaeOfNumbingDepths(this); + } +} + +class SharaeOfNumbingDepthsTriggeredAbility extends TriggeredAbilityImpl { + + SharaeOfNumbingDepthsTriggeredAbility() { + super(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1)); + this.setTriggersOnceEachTurn(true); + setTriggerPhrase("Whenever you tap one or more untapped creatures your opponents control, "); + } + + private SharaeOfNumbingDepthsTriggeredAbility(final SharaeOfNumbingDepthsTriggeredAbility ability) { + super(ability); + } + + @Override + public SharaeOfNumbingDepthsTriggeredAbility copy() { + return new SharaeOfNumbingDepthsTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.TAPPED; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + Permanent permanent = game.getPermanent(event.getTargetId()); + return permanent != null + && StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE.match(permanent, game) + && isControlledBy(event.getPlayerId()); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/WildsOfEldraine.java b/Mage.Sets/src/mage/sets/WildsOfEldraine.java index 5d7d31c89d1..c6505a9bcb5 100644 --- a/Mage.Sets/src/mage/sets/WildsOfEldraine.java +++ b/Mage.Sets/src/mage/sets/WildsOfEldraine.java @@ -44,6 +44,7 @@ public final class WildsOfEldraine extends ExpansionSet { cards.add(new SetCardInfo("Return from the Wilds", 181, Rarity.COMMON, mage.cards.r.ReturnFromTheWilds.class)); cards.add(new SetCardInfo("Rootrider Faun", 182, Rarity.COMMON, mage.cards.r.RootriderFaun.class)); cards.add(new SetCardInfo("Ruby, Daring Tracker", 212, Rarity.UNCOMMON, mage.cards.r.RubyDaringTracker.class)); + cards.add(new SetCardInfo("Sharae of Numbing Depths", 213, Rarity.UNCOMMON, mage.cards.s.SharaeOfNumbingDepths.class)); cards.add(new SetCardInfo("Skybeast Tracker", 185, Rarity.COMMON, mage.cards.s.SkybeastTracker.class)); cards.add(new SetCardInfo("Sleight of Hand", 67, Rarity.COMMON, mage.cards.s.SleightOfHand.class)); cards.add(new SetCardInfo("Swamp", 264, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage/src/main/java/mage/game/events/GameEvent.java b/Mage/src/main/java/mage/game/events/GameEvent.java index 9da63ad5552..f26e7f5afd2 100644 --- a/Mage/src/main/java/mage/game/events/GameEvent.java +++ b/Mage/src/main/java/mage/game/events/GameEvent.java @@ -339,7 +339,7 @@ public class GameEvent implements Serializable { /* TAPPED, targetId tapped permanent sourceId id of the ability's source (can be null for standard tap actions like combat) - playerId controller of the tapped permanent + playerId source's controller, null if no source amount not used for this event flag is it tapped for combat */ diff --git a/Mage/src/main/java/mage/game/permanent/PermanentImpl.java b/Mage/src/main/java/mage/game/permanent/PermanentImpl.java index 8573d494d13..ce10f1a4843 100644 --- a/Mage/src/main/java/mage/game/permanent/PermanentImpl.java +++ b/Mage/src/main/java/mage/game/permanent/PermanentImpl.java @@ -559,7 +559,7 @@ public abstract class PermanentImpl extends CardImpl implements Permanent { //20091005 - 701.15a if (!tapped && !replaceEvent(EventType.TAP, game)) { this.tapped = true; - game.fireEvent(new GameEvent(GameEvent.EventType.TAPPED, objectId, source, controllerId, 0, forCombat)); + game.fireEvent(new GameEvent(GameEvent.EventType.TAPPED, objectId, source, source == null ? null : source.getControllerId(), 0, forCombat)); return true; } return false;