diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/UlrichOfTheKrallenhorde.java b/Mage.Sets/src/mage/sets/eldritchmoon/UlrichOfTheKrallenhorde.java new file mode 100644 index 000000000000..07ae27e76d75 --- /dev/null +++ b/Mage.Sets/src/mage/sets/eldritchmoon/UlrichOfTheKrallenhorde.java @@ -0,0 +1,128 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.eldritchmoon; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.TriggeredAbility; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.condition.common.NoSpellsWereCastLastTurnCondition; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.effects.common.TransformSourceEffect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.keyword.TransformAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class UlrichOfTheKrallenhorde extends CardImpl { + + public UlrichOfTheKrallenhorde(UUID ownerId) { + super(ownerId, 191, "Ulrich of the Krallenhorde", Rarity.MYTHIC, new CardType[]{CardType.CREATURE}, "{3}{R}{G}"); + this.expansionSetCode = "EMN"; + this.supertype.add("Legendary"); + this.subtype.add("Human"); + this.subtype.add("Werewolf"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + + this.canTransform = true; + this.secondSideCard = new UlrichUncontestedAlpha(ownerId); + + // Whenever this creature enters the battlefield or transforms into Ulrich of the Krallenhorde, target creature gets +4/+4 until end of turn. + this.addAbility(new UlrichOfTheKrallenhordeAbility()); + + // At the beginning of each upkeep, if no spells were cast last turn, transform Ulrich of the Krallenhorde. + this.addAbility(new TransformAbility()); + TriggeredAbility ability = new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect(true), TargetController.ANY, false); + this.addAbility(new ConditionalTriggeredAbility(ability, NoSpellsWereCastLastTurnCondition.getInstance(), TransformAbility.NO_SPELLS_TRANSFORM_RULE)); + } + + public UlrichOfTheKrallenhorde(final UlrichOfTheKrallenhorde card) { + super(card); + } + + @Override + public UlrichOfTheKrallenhorde copy() { + return new UlrichOfTheKrallenhorde(this); + } +} + +class UlrichOfTheKrallenhordeAbility extends TriggeredAbilityImpl { + + public UlrichOfTheKrallenhordeAbility() { + super(Zone.BATTLEFIELD, new BoostTargetEffect(4, 4, Duration.EndOfTurn), false); + this.addTarget(new TargetCreaturePermanent()); + } + + public UlrichOfTheKrallenhordeAbility(final UlrichOfTheKrallenhordeAbility ability) { + super(ability); + } + + @Override + public UlrichOfTheKrallenhordeAbility copy() { + return new UlrichOfTheKrallenhordeAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.TRANSFORMED || event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.TRANSFORMED && event.getTargetId().equals(this.getSourceId())) { + Permanent permanent = game.getPermanent(sourceId); + if (permanent != null && !permanent.isTransformed()) { + return true; + } + } + if (event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD && event.getTargetId().equals(this.getSourceId())) { + return true; + } + return false; + } + + @Override + public String getRule() { + return "Whenever this creature enters the battlefield or transforms into Ulrich of the Krallenhorde, target creature gets +4/+4 until end of turn."; + } +} diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/UlrichUncontestedAlpha.java b/Mage.Sets/src/mage/sets/eldritchmoon/UlrichUncontestedAlpha.java new file mode 100644 index 000000000000..4d544662fb56 --- /dev/null +++ b/Mage.Sets/src/mage/sets/eldritchmoon/UlrichUncontestedAlpha.java @@ -0,0 +1,135 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.eldritchmoon; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.TriggeredAbility; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.condition.common.TwoOrMoreSpellsWereCastLastTurnCondition; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.effects.common.FightTargetSourceEffect; +import mage.abilities.effects.common.TransformSourceEffect; +import mage.abilities.keyword.TransformAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.target.Target; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class UlrichUncontestedAlpha extends CardImpl { + + public UlrichUncontestedAlpha(UUID ownerId) { + super(ownerId, 191, "Ulrich, Uncontested Alpha", Rarity.MYTHIC, new CardType[]{CardType.CREATURE}, ""); + this.expansionSetCode = "EMN"; + this.supertype.add("Legendary"); + this.subtype.add("Werewolf"); + this.power = new MageInt(6); + this.toughness = new MageInt(6); + + // this card is the second face of double-faced card + this.nightCard = true; + this.canTransform = true; + + // Whenever this creature transforms into Ulrich, Uncontested Alpha, you may have it fight target non-Werewolf creature you don't control. + this.addAbility(new UlrichUncontestedAlphaAbility()); + + // At the beginning of each upkeep, if a player cast two or more spells last turn, transform Ulrich, Uncontested Alpha. + TriggeredAbility ability = new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect(false), TargetController.ANY, false); + this.addAbility(new ConditionalTriggeredAbility(ability, TwoOrMoreSpellsWereCastLastTurnCondition.getInstance(), TransformAbility.TWO_OR_MORE_SPELLS_TRANSFORM_RULE)); + } + + public UlrichUncontestedAlpha(final UlrichUncontestedAlpha card) { + super(card); + } + + @Override + public UlrichUncontestedAlpha copy() { + return new UlrichUncontestedAlpha(this); + } +} + +class UlrichUncontestedAlphaAbility extends TriggeredAbilityImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("non-Werewolf creature you don't control"); + + static { + filter.add(Predicates.not(new SubtypePredicate("Werewolf"))); + filter.add(new ControllerPredicate(TargetController.NOT_YOU)); + } + + public UlrichUncontestedAlphaAbility() { + super(Zone.BATTLEFIELD, new FightTargetSourceEffect(), true); + Target target = new TargetCreaturePermanent(filter); + this.addTarget(target); + } + + public UlrichUncontestedAlphaAbility(final UlrichUncontestedAlphaAbility ability) { + super(ability); + } + + @Override + public UlrichUncontestedAlphaAbility copy() { + return new UlrichUncontestedAlphaAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.TRANSFORMED; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getTargetId().equals(sourceId)) { + Permanent permanent = game.getPermanent(sourceId); + if (permanent != null && permanent.isTransformed()) { + return true; + } + } + return false; + } + + @Override + public String getRule() { + return "Whenever this creature transforms into Ulrich, Uncontested Alpha, you may have it fight target non-Werewolf creature you don't control."; + } +} diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index 836295a65b23..dde31155a54e 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -57294,5 +57294,6 @@ Soul of the Harvest|Welcome Deck 2016|16|R|{4}{G}{G}|Creature - Elemental|6|6|Tr Sphinx of Magosi|Welcome Deck 2016|6|R|{3}{U}{U}{U}|Creature - Sphinx|6|6|Flying${2}{U}: Draw a card, then put a +1/+1 counter on Sphinx of Magosi.| Walking Corpse|Welcome Deck 2016|10|C|{1}{B}|Creature - Zombie|2|2|| Emrakul, the Promised End|Eldritch Moon|6|M|{13}|Legendary Creature - Eldrazi|13|13|Emrakul, the Promised End costs {1} less to cast for each card type among cards in your graveyard.$When you cast Emrakul, you gain control of target opponent during that player's next turn. After that turn, that player takes an extra turn.$Flying, trample, protection from instants| +Coax from the Blind Eternities|Eldritch Moon|51|R|{2}{U}|Sorcery|||You may choose an Eldrazi card you own from outside the game or in exile, reveal that card, and put it into your hand.| Ulrich of the Krallenhorde|Eldritch Moon|191|M|{3}{R}{G}|Legendary Creature - Human Werewolf|4|4|Whenever this creature enters the battlefield or transforms into Ulrich of the Krallenhorde, target creature gets +4/+4 until end of turn.$At the beginning of each upkeep, if no spells were cast last turn, transform Ulrich of the Krallenhorde.| Ulrich, Uncontested Alpha|Eldritch Moon|191|M||Legendary Creature - Werewolf|6|6|Whenever this creature transforms into Ulrich, Uncontested Alpha, you may have it fight target non-Werewolf creature you don't control.$At the beginning of each upkeep, if a player cast two or more spells last turn, transform Ulrich, Uncontested Alpha.| \ No newline at end of file