diff --git a/Mage.Sets/src/mage/cards/b/BalothPackhunter.java b/Mage.Sets/src/mage/cards/b/BalothPackhunter.java new file mode 100644 index 00000000000..bae2dd7cbd2 --- /dev/null +++ b/Mage.Sets/src/mage/cards/b/BalothPackhunter.java @@ -0,0 +1,56 @@ +package mage.cards.b; + +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.counter.AddCountersAllEffect; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.counters.CounterType; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.mageobject.NamePredicate; +import mage.filter.predicate.mageobject.AnotherPredicate; + +import java.util.UUID; + +/** + * @author tiera3 - modified from CharmedStray + */ +public final class BalothPackhunter extends CardImpl { + + private static final FilterPermanent filter + = new FilterControlledCreaturePermanent("other creature you control named Baloth Packhunter"); + + static { + filter.add(new NamePredicate("Baloth Packhunter")); + filter.add(AnotherPredicate.instance); + } + + public BalothPackhunter(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}"); + + this.subtype.add(SubType.BEAST); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Trample + this.addAbility(TrampleAbility.getInstance()); + + // Whenever Baloth Packhunter enters the battlefield, put two +1/+1 counters on each other creature you control named Baloth Packhunter. + this.addAbility(new EntersBattlefieldTriggeredAbility( + new AddCountersAllEffect(CounterType.P1P1.createInstance(2), filter) + )); + } + + private BalothPackhunter(final BalothPackhunter card) { + super(card); + } + + @Override + public BalothPackhunter copy() { + return new BalothPackhunter(this); + } +} diff --git a/Mage.Sets/src/mage/cards/c/CompoundFracture.java b/Mage.Sets/src/mage/cards/c/CompoundFracture.java new file mode 100644 index 00000000000..71ced13775e --- /dev/null +++ b/Mage.Sets/src/mage/cards/c/CompoundFracture.java @@ -0,0 +1,46 @@ +package mage.cards.c; + +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.filter.FilterCard; +import mage.filter.predicate.mageobject.NamePredicate; +import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; + +/** + * @author tiera3 - modified from Growth Cycle + */ +public final class CompoundFracture extends CardImpl { + + private static final FilterCard filter = new FilterCard("card named Compound Fracture"); + static { + filter.add(new NamePredicate("Compound Fracture")); + } + private static final DynamicValue xValue = new CardsInControllerGraveyardCount(filter, -1); + private static final String rule = "It gets an additional -1/-1 until end of turn for each " + xValue.getMessage(); + + public CompoundFracture(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{B}"); + + // Target creature gets -1/-1 until end of turn. + this.getSpellAbility().addEffect(new BoostTargetEffect(-1, -1, Duration.EndOfTurn)); + // It gets an additional -1/-1 until end of turn for each card named Compound Fracture in your graveyard. + this.getSpellAbility().addEffect(new BoostTargetEffect(xValue, xValue, Duration.EndOfTurn).setText(rule)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + } + + private CompoundFracture(final CompoundFracture card) { + super(card); + } + + @Override + public CompoundFracture copy() { + return new CompoundFracture(this); + } +} diff --git a/Mage.Sets/src/mage/cards/h/HallowedPriest.java b/Mage.Sets/src/mage/cards/h/HallowedPriest.java new file mode 100644 index 00000000000..f8bc3ea952d --- /dev/null +++ b/Mage.Sets/src/mage/cards/h/HallowedPriest.java @@ -0,0 +1,42 @@ +package mage.cards.h; + +import mage.MageInt; +import mage.abilities.common.GainLifeControllerTriggeredAbility; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.counters.CounterType; + +import java.util.UUID; + +/** + * @author tiera3 - modified from AjanisPridemate + */ +public final class HallowedPriest extends CardImpl { + + public HallowedPriest(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}"); + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.CLERIC); + + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Whenever you gain life, put a +1/+1 counter on Hallowed Priest. + this.addAbility(new GainLifeControllerTriggeredAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false + )); + } + + private HallowedPriest(final HallowedPriest card) { + super(card); + } + + @Override + public HallowedPriest copy() { + return new HallowedPriest(this); + } + +} diff --git a/Mage.Sets/src/mage/cards/m/MarduOutrider.java b/Mage.Sets/src/mage/cards/m/MarduOutrider.java new file mode 100644 index 00000000000..4f668a90a16 --- /dev/null +++ b/Mage.Sets/src/mage/cards/m/MarduOutrider.java @@ -0,0 +1,38 @@ +package mage.cards.m; + +import mage.MageInt; +import mage.abilities.Ability; // not sure about this line - think it is not needed +import mage.abilities.costs.common.DiscardCardCost; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; + +import java.util.UUID; + +/** + * @author tiera3 - modified from LesserMasticore + */ +public final class MarduOutrider extends CardImpl { + + public MarduOutrider(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{B}"); + + this.subtype.add(SubType.ORC); + this.subtype.add(SubType.WARRIOR); + this.power = new MageInt(5); + this.toughness = new MageInt(5); + + // As an additional cost to cast this spell, discard a card. + this.getSpellAbility().addCost(new DiscardCardCost()); + } + + private MarduOutrider(final MarduOutrider card) { + super(card); + } + + @Override + public MarduOutrider copy() { + return new MarduOutrider(this); + } +} diff --git a/Mage.Sets/src/mage/cards/t/TinStreetCadet.java b/Mage.Sets/src/mage/cards/t/TinStreetCadet.java new file mode 100644 index 00000000000..b73d14e567a --- /dev/null +++ b/Mage.Sets/src/mage/cards/t/TinStreetCadet.java @@ -0,0 +1,39 @@ + +package mage.cards.t; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.BecomesBlockedSourceTriggeredAbility; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.constants.SubType; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.game.permanent.token.GoblinToken; + +/** + * + * @author tiera3 - modified from GoblinInstigator + */ +public final class TinStreetCadet extends CardImpl { + + public TinStreetCadet(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}"); + + this.subtype.add(SubType.GOBLIN); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Whenever Tin Street Cadet becomes blocked, create a 1/1 red Goblin creature token. + this.addAbility(new BecomesBlockedSourceTriggeredAbility(new CreateTokenEffect(new GoblinToken()), false)); + } + + private TinStreetCadet(final TinStreetCadet card) { + super(card); + } + + @Override + public TinStreetCadet copy() { + return new TinStreetCadet(this); + } +} diff --git a/Mage.Sets/src/mage/sets/ArenaBeginnerSet.java b/Mage.Sets/src/mage/sets/ArenaBeginnerSet.java index 7a5e3bf384c..22d2ee789e2 100644 --- a/Mage.Sets/src/mage/sets/ArenaBeginnerSet.java +++ b/Mage.Sets/src/mage/sets/ArenaBeginnerSet.java @@ -15,8 +15,6 @@ public class ArenaBeginnerSet extends ExpansionSet { return instance; } -// Missing cards - Baloth Packhunter , Compound Fracture , Hallowed Priest , Mardu Outrider , Tin Street Cadet - private ArenaBeginnerSet() { super("Arena Beginner Set", "ANB", ExpansionSet.buildDate(2020, 8, 13), SetType.MAGIC_ONLINE); this.hasBoosters = false; @@ -30,7 +28,7 @@ public class ArenaBeginnerSet extends ExpansionSet { cards.add(new SetCardInfo("Arcane Signet", 117, Rarity.COMMON, mage.cards.a.ArcaneSignet.class)); cards.add(new SetCardInfo("Armored Whirl Turtle", 24, Rarity.COMMON, mage.cards.a.ArmoredWhirlTurtle.class)); cards.add(new SetCardInfo("Bad Deal", 45, Rarity.UNCOMMON, mage.cards.b.BadDeal.class)); -// cards.add(new SetCardInfo("Baloth Packhunter", 90, Rarity.COMMON, mage.cards.b.BalothPackhunter.class)); + cards.add(new SetCardInfo("Baloth Packhunter", 90, Rarity.COMMON, mage.cards.b.BalothPackhunter.class)); cards.add(new SetCardInfo("Bombard", 67, Rarity.COMMON, mage.cards.b.Bombard.class)); cards.add(new SetCardInfo("Bond of Discipline", 4, Rarity.UNCOMMON, mage.cards.b.BondOfDiscipline.class)); cards.add(new SetCardInfo("Burn Bright", 68, Rarity.COMMON, mage.cards.b.BurnBright.class)); @@ -39,7 +37,7 @@ public class ArenaBeginnerSet extends ExpansionSet { cards.add(new SetCardInfo("Cloudkin Seer", 25, Rarity.COMMON, mage.cards.c.CloudkinSeer.class)); cards.add(new SetCardInfo("Colossal Majesty", 92, Rarity.UNCOMMON, mage.cards.c.ColossalMajesty.class)); cards.add(new SetCardInfo("Command Tower", 118, Rarity.COMMON, mage.cards.c.CommandTower.class)); -// cards.add(new SetCardInfo("Compound Fracture", 46, Rarity.COMMON, mage.cards.c.CompoundFracture.class)); + cards.add(new SetCardInfo("Compound Fracture", 46, Rarity.COMMON, mage.cards.c.CompoundFracture.class)); cards.add(new SetCardInfo("Confront the Assault", 6, Rarity.UNCOMMON, mage.cards.c.ConfrontTheAssault.class)); cards.add(new SetCardInfo("Coral Merfolk", 26, Rarity.COMMON, mage.cards.c.CoralMerfolk.class)); cards.add(new SetCardInfo("Cruel Cut", 47, Rarity.COMMON, mage.cards.c.CruelCut.class)); @@ -61,7 +59,7 @@ public class ArenaBeginnerSet extends ExpansionSet { cards.add(new SetCardInfo("Goblin Tunneler", 73, Rarity.COMMON, mage.cards.g.GoblinTunneler.class)); cards.add(new SetCardInfo("Goring Ceratops", 8, Rarity.RARE, mage.cards.g.GoringCeratops.class)); cards.add(new SetCardInfo("Greenwood Sentinel", 97, Rarity.COMMON, mage.cards.g.GreenwoodSentinel.class)); -// cards.add(new SetCardInfo("Hallowed Priest", 9, Rarity.UNCOMMON, mage.cards.h.HallowedPriest.class)); + cards.add(new SetCardInfo("Hallowed Priest", 9, Rarity.UNCOMMON, mage.cards.h.HallowedPriest.class)); cards.add(new SetCardInfo("Hurloon Minotaur", 74, Rarity.COMMON, mage.cards.h.HurloonMinotaur.class)); cards.add(new SetCardInfo("Ilysian Caryatid", 98, Rarity.COMMON, mage.cards.i.IlysianCaryatid.class)); cards.add(new SetCardInfo("Immortal Phoenix", 75, Rarity.RARE, mage.cards.i.ImmortalPhoenix.class)); @@ -76,7 +74,7 @@ public class ArenaBeginnerSet extends ExpansionSet { cards.add(new SetCardInfo("Loxodon Line Breaker", 14, Rarity.COMMON, mage.cards.l.LoxodonLineBreaker.class)); cards.add(new SetCardInfo("Malakir Cullblade", 51, Rarity.UNCOMMON, mage.cards.m.MalakirCullblade.class)); cards.add(new SetCardInfo("Maniacal Rage", 77, Rarity.COMMON, mage.cards.m.ManiacalRage.class)); -// cards.add(new SetCardInfo("Mardu Outrider", 52, Rarity.RARE, mage.cards.m.MarduOutrider.class)); + cards.add(new SetCardInfo("Mardu Outrider", 52, Rarity.RARE, mage.cards.m.MarduOutrider.class)); cards.add(new SetCardInfo("Molten Ravager", 78, Rarity.COMMON, mage.cards.m.MoltenRavager.class)); cards.add(new SetCardInfo("Moorland Inquisitor", 15, Rarity.COMMON, mage.cards.m.MoorlandInquisitor.class)); cards.add(new SetCardInfo("Mountain", 114, Rarity.LAND, mage.cards.basiclands.Mountain.class)); @@ -122,7 +120,7 @@ public class ArenaBeginnerSet extends ExpansionSet { cards.add(new SetCardInfo("Swamp", 116, Rarity.LAND, mage.cards.basiclands.Swamp.class)); cards.add(new SetCardInfo("Sworn Guardian", 35, Rarity.COMMON, mage.cards.s.SwornGuardian.class)); cards.add(new SetCardInfo("Tactical Advantage", 22, Rarity.COMMON, mage.cards.t.TacticalAdvantage.class)); -// cards.add(new SetCardInfo("Tin Street Cadet", 87, Rarity.COMMON, mage.cards.t.TinStreetCadet.class)); + cards.add(new SetCardInfo("Tin Street Cadet", 87, Rarity.COMMON, mage.cards.t.TinStreetCadet.class)); cards.add(new SetCardInfo("Titanic Growth", 106, Rarity.COMMON, mage.cards.t.TitanicGrowth.class)); cards.add(new SetCardInfo("Treetop Warden", 107, Rarity.COMMON, mage.cards.t.TreetopWarden.class)); cards.add(new SetCardInfo("Typhoid Rats", 63, Rarity.COMMON, mage.cards.t.TyphoidRats.class));