From 8fa1030d3c3493db4ef141076a6052d96ed32a04 Mon Sep 17 00:00:00 2001 From: Evan Kranzler <theelk801@gmail.com> Date: Fri, 15 Jun 2018 08:28:06 -0400 Subject: [PATCH] Implemented Commando Raid --- Mage.Sets/src/mage/cards/c/CommandoRaid.java | 123 +++++++++++++++++++ Mage.Sets/src/mage/sets/Onslaught.java | 1 + 2 files changed, 124 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/c/CommandoRaid.java diff --git a/Mage.Sets/src/mage/cards/c/CommandoRaid.java b/Mage.Sets/src/mage/cards/c/CommandoRaid.java new file mode 100644 index 0000000000..17bb3c5e85 --- /dev/null +++ b/Mage.Sets/src/mage/cards/c/CommandoRaid.java @@ -0,0 +1,123 @@ +package mage.cards.c; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.ControllerIdPredicate; +import mage.game.Game; +import mage.game.events.DamagedPlayerEvent; +import mage.game.events.GameEvent; +import mage.players.Player; +import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetCreaturePermanent; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author TheElk801 + */ +public final class CommandoRaid extends CardImpl { + + public CommandoRaid(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{R}"); + + // Until end of turn, target creature you control gains "When this creature deals combat damage to a player, you may have it deal damage equal to its power to target creature that player controls." + this.getSpellAbility().addEffect(new GainAbilityTargetEffect( + new CommandoRaidTriggeredAbility(), Duration.EndOfTurn, + "Until end of turn, target creature you control gains " + + "\"When this creature deals combat damage to a player, " + + "you may have it deal damage equal to its power " + + "to target creature that player controls.\"" + )); + this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); + } + + public CommandoRaid(final CommandoRaid card) { + super(card); + } + + @Override + public CommandoRaid copy() { + return new CommandoRaid(this); + } +} + +class CommandoRaidTriggeredAbility extends TriggeredAbilityImpl { + + public CommandoRaidTriggeredAbility() { + super(Zone.BATTLEFIELD, new CommandoRaidEffect(), true); + } + + public CommandoRaidTriggeredAbility(final CommandoRaidTriggeredAbility ability) { + super(ability); + } + + @Override + public CommandoRaidTriggeredAbility copy() { + return new CommandoRaidTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DAMAGED_PLAYER; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + DamagedPlayerEvent damageEvent = (DamagedPlayerEvent) event; + Player opponent = game.getPlayer(event.getPlayerId()); + if (!damageEvent.isCombatDamage() + || !event.getSourceId().equals(this.getSourceId()) + || opponent == null) { + return false; + } + FilterCreaturePermanent filter = new FilterCreaturePermanent("creature " + opponent.getLogName() + " controls"); + filter.add(new ControllerIdPredicate(opponent.getId())); + this.getTargets().clear(); + this.addTarget(new TargetCreaturePermanent(filter)); + for (Effect effect : this.getAllEffects()) { + effect.setTargetPointer(new FixedTarget(event.getPlayerId())); + effect.setValue("damage", event.getAmount()); + } + return true; + } + + @Override + public String getRule() { + return "When this creature deals combat damage to a player, " + + "you may have it deal that much damage to target creature that player controls"; + } +} + +class CommandoRaidEffect extends OneShotEffect { + + public CommandoRaidEffect() { + super(Outcome.Damage); + staticText = "it deals that much damage to target creature that player controls"; + } + + public CommandoRaidEffect(final CommandoRaidEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + return new DamageTargetEffect((Integer) getValue("damage")).apply(game, source); + } + + @Override + public CommandoRaidEffect copy() { + return new CommandoRaidEffect(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Onslaught.java b/Mage.Sets/src/mage/sets/Onslaught.java index 0fe924fb02..4f6bfaebab 100644 --- a/Mage.Sets/src/mage/sets/Onslaught.java +++ b/Mage.Sets/src/mage/sets/Onslaught.java @@ -79,6 +79,7 @@ public final class Onslaught extends ExpansionSet { cards.add(new SetCardInfo("Charging Slateback", 194, Rarity.COMMON, mage.cards.c.ChargingSlateback.class)); cards.add(new SetCardInfo("Choking Tethers", 74, Rarity.COMMON, mage.cards.c.ChokingTethers.class)); cards.add(new SetCardInfo("Clone", 75, Rarity.RARE, mage.cards.c.Clone.class)); + cards.add(new SetCardInfo("Commando Raid", 195, Rarity.UNCOMMON, mage.cards.c.CommandoRaid.class)); cards.add(new SetCardInfo("Complicate", 76, Rarity.UNCOMMON, mage.cards.c.Complicate.class)); cards.add(new SetCardInfo("Contested Cliffs", 314, Rarity.RARE, mage.cards.c.ContestedCliffs.class)); cards.add(new SetCardInfo("Convalescent Care", 14, Rarity.RARE, mage.cards.c.ConvalescentCare.class));