From 20fd17cadb5ebbda4559960a474a3724cfa3f209 Mon Sep 17 00:00:00 2001 From: Cameron Merkel <44722506+Cguy7777@users.noreply.github.com> Date: Sun, 3 Dec 2023 20:42:37 -0600 Subject: [PATCH] [ICE] Implement Hipparion (#11505) --- Mage.Sets/src/mage/cards/h/Hipparion.java | 97 +++++++++++++++++++++++ Mage.Sets/src/mage/sets/FifthEdition.java | 1 + Mage.Sets/src/mage/sets/IceAge.java | 1 + 3 files changed, 99 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/h/Hipparion.java diff --git a/Mage.Sets/src/mage/cards/h/Hipparion.java b/Mage.Sets/src/mage/cards/h/Hipparion.java new file mode 100644 index 00000000000..f0aedbe626c --- /dev/null +++ b/Mage.Sets/src/mage/cards/h/Hipparion.java @@ -0,0 +1,97 @@ +package mage.cards.h; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.costs.mana.ManaCost; +import mage.abilities.effects.ReplacementEffect; +import mage.abilities.effects.ReplacementEffectImpl; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.players.Player; + +import java.util.UUID; + +/** + * @author Cguy7777 + */ +public final class Hipparion extends CardImpl { + + public Hipparion(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}"); + + this.subtype.add(SubType.HORSE); + this.power = new MageInt(1); + this.toughness = new MageInt(3); + + // Hipparion can't block creatures with power 3 or greater unless you pay {1}. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new HipparionEffect())); + } + + private Hipparion(final Hipparion card) { + super(card); + } + + @Override + public Hipparion copy() { + return new Hipparion(this); + } +} + +class HipparionEffect extends ReplacementEffectImpl { + + HipparionEffect() { + super(Duration.WhileOnBattlefield, Outcome.Detriment); + staticText = "{this} can't block creatures with power 3 or greater unless you pay {1}"; + } + + private HipparionEffect(final HipparionEffect effect) { + super(effect); + } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + Player player = game.getPlayer(event.getPlayerId()); + if (player == null) { + return false; + } + + Permanent hipparion = game.getPermanent(event.getSourceId()); + if (hipparion == null) { + return false; + } + + Permanent attacker = game.getPermanent(event.getTargetId()); + if (attacker == null || attacker.getPower().getValue() < 3) { + return false; + } + + ManaCost cost = new GenericManaCost(1); + if (cost.canPay(source, source, player.getId(), game) + && player.chooseUse(Outcome.Benefit, "Pay {1} to block creature with power 3 or greater?", source, game)) { + return !cost.pay(source, game, source, player.getId(), false, cost); + } + + return true; + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DECLARE_BLOCKER; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + return event.getTargetId() != null && event.getSourceId().equals(source.getSourceId()); + } + + @Override + public ReplacementEffect copy() { + return new HipparionEffect(this); + } +} diff --git a/Mage.Sets/src/mage/sets/FifthEdition.java b/Mage.Sets/src/mage/sets/FifthEdition.java index f554aa8e37f..ea8b5001971 100644 --- a/Mage.Sets/src/mage/sets/FifthEdition.java +++ b/Mage.Sets/src/mage/sets/FifthEdition.java @@ -206,6 +206,7 @@ public final class FifthEdition extends ExpansionSet { cards.add(new SetCardInfo("Hecatomb", 167, Rarity.RARE, mage.cards.h.Hecatomb.class)); cards.add(new SetCardInfo("Helm of Chatzuk", 376, Rarity.RARE, mage.cards.h.HelmOfChatzuk.class)); cards.add(new SetCardInfo("Hill Giant", 239, Rarity.COMMON, mage.cards.h.HillGiant.class)); + cards.add(new SetCardInfo("Hipparion", 34, Rarity.COMMON, mage.cards.h.Hipparion.class)); cards.add(new SetCardInfo("Hollow Trees", 418, Rarity.RARE, mage.cards.h.HollowTrees.class)); cards.add(new SetCardInfo("Holy Strength", 35, Rarity.COMMON, mage.cards.h.HolyStrength.class)); cards.add(new SetCardInfo("Homarid Warrior", 92, Rarity.COMMON, mage.cards.h.HomaridWarrior.class)); diff --git a/Mage.Sets/src/mage/sets/IceAge.java b/Mage.Sets/src/mage/sets/IceAge.java index e3b643c6b07..4e928a05926 100644 --- a/Mage.Sets/src/mage/sets/IceAge.java +++ b/Mage.Sets/src/mage/sets/IceAge.java @@ -161,6 +161,7 @@ public final class IceAge extends ExpansionSet { cards.add(new SetCardInfo("Heal", 30, Rarity.COMMON, mage.cards.h.Heal.class)); cards.add(new SetCardInfo("Hecatomb", 130, Rarity.RARE, mage.cards.h.Hecatomb.class)); cards.add(new SetCardInfo("Hematite Talisman", 320, Rarity.UNCOMMON, mage.cards.h.HematiteTalisman.class)); + cards.add(new SetCardInfo("Hipparion", 31, Rarity.UNCOMMON, mage.cards.h.Hipparion.class)); cards.add(new SetCardInfo("Hoar Shade", 131, Rarity.COMMON, mage.cards.h.HoarShade.class)); cards.add(new SetCardInfo("Hot Springs", 248, Rarity.RARE, mage.cards.h.HotSprings.class)); cards.add(new SetCardInfo("Howl from Beyond", 132, Rarity.COMMON, mage.cards.h.HowlFromBeyond.class));