From c5cc99144deec3689145749d39b129018b9f18b3 Mon Sep 17 00:00:00 2001 From: Jozsef Kerekes Date: Tue, 26 Jan 2021 22:31:52 +0200 Subject: [PATCH] [KHM] Implemented Giant Ox (#7447) * [KHM] Implemented Giant Ox * [KHM] Giant Ox rework after review --- Mage.Sets/src/mage/cards/g/GiantOx.java | 37 +++++++++++++++++++ Mage.Sets/src/mage/sets/Kaldheim.java | 1 + .../common/CrewWithToughnessAbility.java | 34 +++++++++++++++++ .../mage/abilities/keyword/CrewAbility.java | 21 +++++++++-- 4 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/g/GiantOx.java create mode 100644 Mage/src/main/java/mage/abilities/common/CrewWithToughnessAbility.java diff --git a/Mage.Sets/src/mage/cards/g/GiantOx.java b/Mage.Sets/src/mage/cards/g/GiantOx.java new file mode 100644 index 00000000000..5e0e994b0de --- /dev/null +++ b/Mage.Sets/src/mage/cards/g/GiantOx.java @@ -0,0 +1,37 @@ +package mage.cards.g; + +import mage.MageInt; +import mage.abilities.common.CrewWithToughnessAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; + +import java.util.UUID; + +/** + * + * @author varaghar + */ +public final class GiantOx extends CardImpl { + + public GiantOx(UUID ownerId, CardSetInfo setInfo) { + super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}"); + this.subtype.add(SubType.OX); + + this.power = new MageInt(0); + this.toughness = new MageInt(6); + + // Giant Ox crews Vehicles using its toughness rather than its power. + this.addAbility(CrewWithToughnessAbility.getInstance()); + } + + private GiantOx(final GiantOx card) { + super(card); + } + + @Override + public GiantOx copy() { + return new GiantOx(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Kaldheim.java b/Mage.Sets/src/mage/sets/Kaldheim.java index eb9661cafc5..0aec2447c78 100644 --- a/Mage.Sets/src/mage/sets/Kaldheim.java +++ b/Mage.Sets/src/mage/sets/Kaldheim.java @@ -137,6 +137,7 @@ public final class Kaldheim extends ExpansionSet { cards.add(new SetCardInfo("Funeral Longboat", 238, Rarity.COMMON, mage.cards.f.FuneralLongboat.class)); cards.add(new SetCardInfo("Fynn, the Fangbearer", 170, Rarity.UNCOMMON, mage.cards.f.FynnTheFangbearer.class)); cards.add(new SetCardInfo("Gates of Istfell", 256, Rarity.UNCOMMON, mage.cards.g.GatesOfIstfell.class)); + cards.add(new SetCardInfo("Giant Ox", 11, Rarity.COMMON, mage.cards.g.GiantOx.class)); cards.add(new SetCardInfo("Giant's Amulet", 59, Rarity.UNCOMMON, mage.cards.g.GiantsAmulet.class)); cards.add(new SetCardInfo("Giant's Grasp", 384, Rarity.UNCOMMON, mage.cards.g.GiantsGrasp.class)); cards.add(new SetCardInfo("Gilded Assault Cart", 390, Rarity.UNCOMMON, mage.cards.g.GildedAssaultCart.class)); diff --git a/Mage/src/main/java/mage/abilities/common/CrewWithToughnessAbility.java b/Mage/src/main/java/mage/abilities/common/CrewWithToughnessAbility.java new file mode 100644 index 00000000000..687b952f27f --- /dev/null +++ b/Mage/src/main/java/mage/abilities/common/CrewWithToughnessAbility.java @@ -0,0 +1,34 @@ +package mage.abilities.common; + +import mage.abilities.MageSingleton; +import mage.abilities.StaticAbility; +import mage.abilities.effects.common.InfoEffect; +import mage.constants.Zone; + +import java.io.ObjectStreamException; + +/** + * + * @author varaghar + */ +public class CrewWithToughnessAbility extends StaticAbility implements MageSingleton { + + private static final CrewWithToughnessAbility instance = new CrewWithToughnessAbility(); + + private Object readResolve() throws ObjectStreamException { + return instance; + } + + public static CrewWithToughnessAbility getInstance() { + return instance; + } + + private CrewWithToughnessAbility() { + super(Zone.BATTLEFIELD, new InfoEffect("{this} crews Vehicles using its toughness rather than its power.")); + } + + @Override + public CrewWithToughnessAbility copy() { + return instance; + } +} diff --git a/Mage/src/main/java/mage/abilities/keyword/CrewAbility.java b/Mage/src/main/java/mage/abilities/keyword/CrewAbility.java index 051c7a2d679..cd32a02e4d4 100644 --- a/Mage/src/main/java/mage/abilities/keyword/CrewAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/CrewAbility.java @@ -1,7 +1,9 @@ package mage.abilities.keyword; +import mage.MageInt; import mage.abilities.Ability; +import mage.abilities.common.CrewWithToughnessAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.Cost; import mage.abilities.costs.CostImpl; @@ -81,7 +83,7 @@ class CrewCost extends CostImpl { int selectedPower = this.targets.entrySet().stream() .map(entry -> (game.getPermanent(entry.getKey()))) .filter(Objects::nonNull) - .mapToInt(p -> (p.getPower().getValue())) + .mapToInt(p -> (getCrewPower(p, game))) .sum(); String extraInfo = "(selected power " + selectedPower + " of " + value + ")"; if (selectedPower >= value) { @@ -99,7 +101,7 @@ class CrewCost extends CostImpl { if (!game.replaceEvent(event)) { Permanent permanent = game.getPermanent(targetId); if (permanent != null && permanent.tap(source, game)) { - sumPower += permanent.getPower().getValue(); + sumPower += getCrewPower(permanent, game); } } } @@ -120,7 +122,8 @@ class CrewCost extends CostImpl { public boolean canPay(Ability ability, Ability source, UUID controllerId, Game game) { int sumPower = 0; for (Permanent permanent : game.getBattlefield().getAllActivePermanents(filter, controllerId, game)) { - int powerToAdd = permanent.getPower().getValue(); + int powerToAdd = getCrewPower(permanent, game); + if (powerToAdd > 0) { sumPower += powerToAdd; } @@ -135,4 +138,16 @@ class CrewCost extends CostImpl { public CrewCost copy() { return new CrewCost(this); } + + private int getCrewPower(Permanent permanent, Game game) { + MageInt crewPowerSource = null; + + if (permanent.hasAbility(CrewWithToughnessAbility.getInstance(), game)) { + crewPowerSource = permanent.getToughness(); + } else { + crewPowerSource = permanent.getPower(); + } + + return crewPowerSource.getValue(); + } }