diff --git a/Mage.Sets/src/mage/cards/d/DevotedDuelist.java b/Mage.Sets/src/mage/cards/d/DevotedDuelist.java new file mode 100644 index 00000000000..f3edd0aeea7 --- /dev/null +++ b/Mage.Sets/src/mage/cards/d/DevotedDuelist.java @@ -0,0 +1,43 @@ +package mage.cards.d; + +import mage.MageInt; +import mage.abilities.common.FlurryAbility; +import mage.abilities.effects.common.DamagePlayersEffect; +import mage.abilities.keyword.HasteAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.TargetController; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class DevotedDuelist extends CardImpl { + + public DevotedDuelist(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}"); + + this.subtype.add(SubType.GOBLIN); + this.subtype.add(SubType.MONK); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Haste + this.addAbility(HasteAbility.getInstance()); + + // Flurry -- Whenever you cast your second spell each turn, this creature deals 1 damage to each opponent. + this.addAbility(new FlurryAbility(new DamagePlayersEffect(1, TargetController.OPPONENT))); + } + + private DevotedDuelist(final DevotedDuelist card) { + super(card); + } + + @Override + public DevotedDuelist copy() { + return new DevotedDuelist(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index cc2fbd3332a..61aa846f141 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -23,6 +23,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Agent of Kotis", 36, Rarity.COMMON, mage.cards.a.AgentOfKotis.class)); cards.add(new SetCardInfo("Barrensteppe Siege", 171, Rarity.RARE, mage.cards.b.BarrensteppeSiege.class)); cards.add(new SetCardInfo("Craterhoof Behemoth", 138, Rarity.MYTHIC, mage.cards.c.CraterhoofBehemoth.class)); + cards.add(new SetCardInfo("Devoted Duelist", 104, Rarity.COMMON, mage.cards.d.DevotedDuelist.class)); cards.add(new SetCardInfo("Inevitable Defeat", 194, Rarity.RARE, mage.cards.i.InevitableDefeat.class)); cards.add(new SetCardInfo("Mox Jasper", 246, Rarity.MYTHIC, mage.cards.m.MoxJasper.class)); cards.add(new SetCardInfo("Narset, Jeskai Waymaster", 209, Rarity.RARE, mage.cards.n.NarsetJeskaiWaymaster.class)); diff --git a/Mage/src/main/java/mage/abilities/common/CastSecondSpellTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/CastSecondSpellTriggeredAbility.java index d3918d0dfa6..e6ec70e6e3d 100644 --- a/Mage/src/main/java/mage/abilities/common/CastSecondSpellTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/CastSecondSpellTriggeredAbility.java @@ -36,7 +36,6 @@ public class CastSecondSpellTriggeredAbility extends TriggeredAbilityImpl { } /** - * * @param zone What zone the ability can trigger from (see {@link mage.abilities.Ability#getZone}) * @param effect What effect will happen when this ability triggers (see {@link mage.abilities.Ability#getEffects}) * @param targetController Which player(s) to pay attention to @@ -44,7 +43,7 @@ public class CastSecondSpellTriggeredAbility extends TriggeredAbilityImpl { * @param setTargetPointer Who to set the target pointer of the effects to. Only accepts NONE, PLAYER (the player who cast the spell), and SPELL (the spell which was cast) */ public CastSecondSpellTriggeredAbility(Zone zone, Effect effect, TargetController targetController, - boolean optional, SetTargetPointer setTargetPointer) { + boolean optional, SetTargetPointer setTargetPointer) { super(zone, effect, optional); if (targetController == TargetController.YOU) { this.addHint(hint); @@ -54,7 +53,7 @@ public class CastSecondSpellTriggeredAbility extends TriggeredAbilityImpl { setTriggerPhrase(generateTriggerPhrase()); } - private CastSecondSpellTriggeredAbility(final CastSecondSpellTriggeredAbility ability) { + protected CastSecondSpellTriggeredAbility(final CastSecondSpellTriggeredAbility ability) { super(ability); this.targetController = ability.targetController; this.setTargetPointer = ability.setTargetPointer; diff --git a/Mage/src/main/java/mage/abilities/common/FlurryAbility.java b/Mage/src/main/java/mage/abilities/common/FlurryAbility.java new file mode 100644 index 00000000000..0d9b99e2c20 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/common/FlurryAbility.java @@ -0,0 +1,26 @@ +package mage.abilities.common; + +import mage.abilities.effects.Effect; +import mage.constants.AbilityWord; +import mage.constants.TargetController; +import mage.constants.Zone; + +/** + * @author TheElk801 + */ +public class FlurryAbility extends CastSecondSpellTriggeredAbility { + + public FlurryAbility(Effect effect) { + super(Zone.BATTLEFIELD, effect, TargetController.YOU, false); + this.setAbilityWord(AbilityWord.FLURRY); + } + + private FlurryAbility(final FlurryAbility ability) { + super(ability); + } + + @Override + public FlurryAbility copy() { + return new FlurryAbility(this); + } +} diff --git a/Mage/src/main/java/mage/constants/AbilityWord.java b/Mage/src/main/java/mage/constants/AbilityWord.java index a1a1e7c5646..6e79b03c841 100644 --- a/Mage/src/main/java/mage/constants/AbilityWord.java +++ b/Mage/src/main/java/mage/constants/AbilityWord.java @@ -31,6 +31,7 @@ public enum AbilityWord { FATEFUL_HOUR("Fateful hour"), FATHOMLESS_DESCENT("Fathomless descent"), FEROCIOUS("Ferocious"), + FLURRY("Flurry"), FORMIDABLE("Formidable"), GRANDEUR("Grandeur"), HATE("Hate"),