diff --git a/Mage.Sets/src/mage/cards/a/AdornedPouncer.java b/Mage.Sets/src/mage/cards/a/AdornedPouncer.java new file mode 100644 index 00000000000..d40fcd32a40 --- /dev/null +++ b/Mage.Sets/src/mage/cards/a/AdornedPouncer.java @@ -0,0 +1,33 @@ +package mage.cards.a; + +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.keyword.DoubleStrikeAbility; +import mage.abilities.keyword.EternalizeAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; + +import java.util.UUID; + +public class AdornedPouncer extends CardImpl{ + + public AdornedPouncer(UUID ownerId, CardSetInfo cardSetInfo){ + super(ownerId, cardSetInfo, new CardType[]{CardType.CREATURE}, "{1}{W}"); + + subtype.add("Cat"); + + //double strike + addAbility(DoubleStrikeAbility.getInstance()); + + //eternalize 3WW + addAbility(new EternalizeAbility(new ManaCostsImpl("{3}{W}{W}"), this)); + } + + public AdornedPouncer(AdornedPouncer adornedPouncer){ + super(adornedPouncer); + } + + public AdornedPouncer copy(){ + return new AdornedPouncer(this); + } +} diff --git a/Mage.Sets/src/mage/cards/k/KhenraEternal.java b/Mage.Sets/src/mage/cards/k/KhenraEternal.java new file mode 100644 index 00000000000..0a6fd8ab013 --- /dev/null +++ b/Mage.Sets/src/mage/cards/k/KhenraEternal.java @@ -0,0 +1,32 @@ +package mage.cards.k; + +import mage.MageInt; +import mage.abilities.keyword.AfflictAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; + +import java.util.UUID; + +public class KhenraEternal extends CardImpl { + + public KhenraEternal(UUID ownerId, CardSetInfo cardSetInfo){ + super(ownerId, cardSetInfo, new CardType[]{CardType.CREATURE}, "{1}{B}"); + subtype.add("Zombie"); + subtype.add("Jackal"); + subtype.add("Warrior"); + power = new MageInt(2); + toughness = new MageInt(2); + + addAbility(new AfflictAbility(1)); + + } + + public KhenraEternal(final KhenraEternal khenraEternal){ + super(khenraEternal); + } + + public KhenraEternal copy(){ + return new KhenraEternal(this); + } +} diff --git a/Mage.Sets/src/mage/cards/p/ProvenCombatant.java b/Mage.Sets/src/mage/cards/p/ProvenCombatant.java new file mode 100644 index 00000000000..ce4d4f6a794 --- /dev/null +++ b/Mage.Sets/src/mage/cards/p/ProvenCombatant.java @@ -0,0 +1,37 @@ +package mage.cards.p; + +import mage.MageInt; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.keyword.EternalizeAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; + +import java.util.UUID; + +public class ProvenCombatant extends CardImpl { + + public ProvenCombatant(UUID ownerId, CardSetInfo cardSetInfo){ + super(ownerId, cardSetInfo, new CardType[]{CardType.CREATURE}, "{U}"); + + + subtype.add("Human"); + subtype.add("Warrior"); + + power = new MageInt(1); + toughness = new MageInt(1); + + //Eternalize 4UU + addAbility(new EternalizeAbility(new ManaCostsImpl("{4}{U}{U}"), this)); + } + + public ProvenCombatant(final ProvenCombatant provenCombatant){ + super(provenCombatant); + } + + public ProvenCombatant copy(){ + return new ProvenCombatant(this); + } + + +} diff --git a/Mage.Sets/src/mage/cards/s/SinuousStriker.java b/Mage.Sets/src/mage/cards/s/SinuousStriker.java new file mode 100644 index 00000000000..e5ec07bbce6 --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SinuousStriker.java @@ -0,0 +1,40 @@ +package mage.cards.s; + +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.keyword.EternalizeAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Zone; + +import java.util.UUID; + +public class SinuousStriker extends CardImpl { + + public SinuousStriker(UUID ownerId, CardSetInfo cardSetInfo){ + super(ownerId, cardSetInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); + subtype.add("Naga"); + subtype.add("Warrior"); + + power = new MageInt(2); + toughness = new MageInt(2); + + //U : Sinious Striker gets +1/-1 until end of turn + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(+1, -1, Duration.EndOfTurn), new ManaCostsImpl("{U}"))); + + //Eternalize 3UU + this.addAbility(new EternalizeAbility(new ManaCostsImpl("{3}{U}{U}"), this)); + } + + public SinuousStriker(final SinuousStriker sinuousStriker){ + super(sinuousStriker); + } + + public SinuousStriker copy(){ + return new SinuousStriker(this); + } +} diff --git a/Mage.Sets/src/mage/sets/HourOfDevastation.java b/Mage.Sets/src/mage/sets/HourOfDevastation.java index a0e2177b07f..cb6afcdc911 100644 --- a/Mage.Sets/src/mage/sets/HourOfDevastation.java +++ b/Mage.Sets/src/mage/sets/HourOfDevastation.java @@ -65,6 +65,7 @@ public class HourOfDevastation extends ExpansionSet { cards.add(new SetCardInfo("Abrade", 83, Rarity.UNCOMMON, mage.cards.a.Abrade.class)); cards.add(new SetCardInfo("Accursed Horde", 56, Rarity.UNCOMMON, mage.cards.a.AccursedHorde.class)); + cards.add(new SetCardInfo("Adorned Pouncer", 3, Rarity.RARE, mage.cards.a.AdornedPouncer.class)); cards.add(new SetCardInfo("Angel of the God-Pharaoh", 4, Rarity.UNCOMMON, mage.cards.a.AngelOfTheGodPharaoh.class)); cards.add(new SetCardInfo("Carrion Screecher", 61, Rarity.COMMON, mage.cards.c.CarrionScreecher.class)); cards.add(new SetCardInfo("Defiant Khenra", 89, Rarity.COMMON, mage.cards.d.DefiantKhenra.class)); @@ -75,12 +76,15 @@ public class HourOfDevastation extends ExpansionSet { cards.add(new SetCardInfo("Desert of the True", 174, Rarity.COMMON, mage.cards.d.DesertOfTheTrue.class)); cards.add(new SetCardInfo("Hour of Revelation", 15, Rarity.RARE, mage.cards.h.HourOfRevelation.class)); cards.add(new SetCardInfo("Inferno Jet", 99, Rarity.UNCOMMON, mage.cards.i.InfernoJet.class)); + cards.add(new SetCardInfo("Khenra Eternal", 66, Rarity.COMMON, mage.cards.k.KhenraEternal.class)); cards.add(new SetCardInfo("Khenra Scrapper", 100, Rarity.COMMON, mage.cards.k.KhenraScrapper.class)); cards.add(new SetCardInfo("Marauding Boneslasher", 70, Rarity.COMMON, mage.cards.m.MaraudingBoneslasher.class)); cards.add(new SetCardInfo("Nicol Bolas, God-Pharoh", 140, Rarity.MYTHIC, mage.cards.n.NicolBolasGodPharoh.class)); cards.add(new SetCardInfo("Open Fire", 105, Rarity.COMMON, mage.cards.o.OpenFire.class)); + cards.add(new SetCardInfo("Proven Combatant", 42, Rarity.COMMON, mage.cards.p.ProvenCombatant.class)); cards.add(new SetCardInfo("Ramunap Excavator", 129, Rarity.RARE, mage.cards.r.RamunapExcavator.class)); cards.add(new SetCardInfo("Samut, the Tested", 144, Rarity.MYTHIC, mage.cards.s.SamutTheTested.class)); + cards.add(new SetCardInfo("Sinuous Striker", 45, Rarity.UNCOMMON, mage.cards.s.SinuousStriker.class)); cards.add(new SetCardInfo("Steadfast Sentinel", 24, Rarity.COMMON, mage.cards.s.SteadfastSentinel.class)); cards.add(new SetCardInfo("Supreme Will", 49, Rarity.UNCOMMON, mage.cards.s.SupremeWill.class)); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/AfflictTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/AfflictTest.java new file mode 100644 index 00000000000..05296b70f8d --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/AfflictTest.java @@ -0,0 +1,43 @@ +package org.mage.test.cards.abilities.keywords; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +public class AfflictTest extends CardTestPlayerBase { + + private String khenra = "Khenra Eternal"; + private String elves = "Llanowar Elves"; + + @Test + public void testBecomesBlocked(){ + + addCard(Zone.BATTLEFIELD, playerA, khenra); + addCard(Zone.BATTLEFIELD, playerB, elves ); + + attack(1, playerA, khenra); + block(1, playerB, elves, khenra); + + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertLife(playerB, 19); + + } + + @Test + public void testNotBlocked(){ + + addCard(Zone.BATTLEFIELD, playerA, khenra); + addCard(Zone.BATTLEFIELD, playerB, elves ); + + attack(1, playerA, khenra); + + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertLife(playerB, 18); + + } +} diff --git a/Mage/src/main/java/mage/abilities/keyword/AfflictAbility.java b/Mage/src/main/java/mage/abilities/keyword/AfflictAbility.java new file mode 100644 index 00000000000..c641d22d5b1 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/keyword/AfflictAbility.java @@ -0,0 +1,24 @@ +package mage.abilities.keyword; + +import mage.abilities.common.BecomesBlockedTriggeredAbility; +import mage.abilities.effects.common.LoseLifeDefendingPlayerEffect; + +public class AfflictAbility extends BecomesBlockedTriggeredAbility { + + private int lifeLoss; + + @Override + public AfflictAbility copy() { + return new AfflictAbility(this); + } + + public AfflictAbility(int amount){ + super(new LoseLifeDefendingPlayerEffect(amount, true), false); + } + + public AfflictAbility(final AfflictAbility afflictAbility){ + super(afflictAbility); + lifeLoss = afflictAbility.lifeLoss; + } + +}