From caf331c368fac973caa45a2ce6a4edad23430671 Mon Sep 17 00:00:00 2001 From: xenohedron Date: Thu, 20 Apr 2023 20:42:45 -0400 Subject: [PATCH] Implement [JUD] Soulgorger Orgg (#10228) --- .../src/mage/cards/s/SoulgorgerOrgg.java | 117 ++++++++++++++++++ Mage.Sets/src/mage/sets/Judgment.java | 1 + 2 files changed, 118 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/s/SoulgorgerOrgg.java diff --git a/Mage.Sets/src/mage/cards/s/SoulgorgerOrgg.java b/Mage.Sets/src/mage/cards/s/SoulgorgerOrgg.java new file mode 100644 index 00000000000..d435c41739c --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SoulgorgerOrgg.java @@ -0,0 +1,117 @@ +package mage.cards.s; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.LeavesBattlefieldTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.game.Game; +import mage.players.Player; + +/** + * @author xenohedron + */ + +public final class SoulgorgerOrgg extends CardImpl { + + public SoulgorgerOrgg(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}{R}"); + + this.subtype.add(SubType.NIGHTMARE); + this.subtype.add(SubType.ORGG); + this.power = new MageInt(6); + this.toughness = new MageInt(6); + + // Trample + this.addAbility(TrampleAbility.getInstance()); + + // When Soulgorger Orgg enters the battlefield, you lose all but 1 life. + this.addAbility(new EntersBattlefieldTriggeredAbility(new SoulgorgerOrggLoseLifeEffect())); + + // When Soulgorger Orgg leaves the battlefield, you gain life equal to the life you lost when it entered the battlefield. + this.addAbility(new LeavesBattlefieldTriggeredAbility(new SoulgorgerOrggGainLifeEffect(), false)); + + } + + private SoulgorgerOrgg(final SoulgorgerOrgg card) { + super(card); + } + + @Override + public SoulgorgerOrgg copy() { + return new SoulgorgerOrgg(this); + } +} + +class SoulgorgerOrggLoseLifeEffect extends OneShotEffect { + + public SoulgorgerOrggLoseLifeEffect() { + super(Outcome.LoseLife); + staticText = "you lose all but 1 life"; + } + + public SoulgorgerOrggLoseLifeEffect(final SoulgorgerOrggLoseLifeEffect effect) { + super(effect); + } + + @Override + public SoulgorgerOrggLoseLifeEffect copy() { + return new SoulgorgerOrggLoseLifeEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + if (player != null) { + int lifeValue = 0; + if (player.getLife() > 1) { + lifeValue = player.getLife() - 1; + } + game.getState().setValue(source.getSourceId().toString() + source.getControllerId().toString() + source.getSourceObjectZoneChangeCounter() + "_lifeValue", lifeValue); + if (lifeValue > 0) { + player.loseLife(lifeValue, game, source, false); + } + } + return true; + } + +} + +class SoulgorgerOrggGainLifeEffect extends OneShotEffect { + + public SoulgorgerOrggGainLifeEffect() { + super(Outcome.GainLife); + staticText = "you gain life equal to the life you lost when it entered the battlefield"; + } + + public SoulgorgerOrggGainLifeEffect(final SoulgorgerOrggGainLifeEffect effect) { + super(effect); + } + + @Override + public SoulgorgerOrggGainLifeEffect copy() { + return new SoulgorgerOrggGainLifeEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + Object obj = game.getState().getValue(source.getSourceId().toString() + source.getControllerId().toString() + (source.getSourceObjectZoneChangeCounter() - 1) + "_lifeValue"); + if (!(obj instanceof Integer)) { + return false; + } + int lifeValue = (int) obj; + if (player != null && lifeValue > 0) { + player.gainLife(lifeValue, game, source); + } + return true; + } + +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/Judgment.java b/Mage.Sets/src/mage/sets/Judgment.java index 5ae5e9af369..cb194b4fd64 100644 --- a/Mage.Sets/src/mage/sets/Judgment.java +++ b/Mage.Sets/src/mage/sets/Judgment.java @@ -136,6 +136,7 @@ public final class Judgment extends ExpansionSet { cards.add(new SetCardInfo("Silver Seraph", 23, Rarity.RARE, mage.cards.s.SilverSeraph.class)); cards.add(new SetCardInfo("Solitary Confinement", 24, Rarity.RARE, mage.cards.s.SolitaryConfinement.class)); cards.add(new SetCardInfo("Soulcatchers' Aerie", 25, Rarity.UNCOMMON, mage.cards.s.SoulcatchersAerie.class)); + cards.add(new SetCardInfo("Soulgorger Orgg", 99, Rarity.UNCOMMON, mage.cards.s.SoulgorgerOrgg.class)); cards.add(new SetCardInfo("Spellgorger Barbarian", 100, Rarity.COMMON, mage.cards.s.SpellgorgerBarbarian.class)); cards.add(new SetCardInfo("Spelljack", 51, Rarity.RARE, mage.cards.s.Spelljack.class)); cards.add(new SetCardInfo("Spirit Cairn", 26, Rarity.UNCOMMON, mage.cards.s.SpiritCairn.class));