[LCI] Implement Huatli, Poet of Unity (#11331)

This commit is contained in:
Susucre 2023-10-22 14:34:12 +02:00 committed by GitHub
parent 10867fa923
commit 1907f55583
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 189 additions and 0 deletions

View file

@ -0,0 +1,59 @@
package mage.cards.h;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.ExileAndReturnSourceEffect;
import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
import mage.abilities.keyword.TransformAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.PutCards;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.StaticFilters;
import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
/**
* @author Susucr
*/
public final class HuatliPoetOfUnity extends CardImpl {
public HuatliPoetOfUnity(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
this.supertype.add(SuperType.LEGENDARY);
this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.WARRIOR);
this.subtype.add(SubType.BARD);
this.power = new MageInt(2);
this.toughness = new MageInt(3);
this.secondSideCardClazz = mage.cards.r.RoarOfTheFifthPeople.class;
// When Huatli, Poet of Unity enters the battlefield, search your library for a basic land card, reveal it, put it into your hand, then shuffle.
TargetCardInLibrary target = new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND);
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(target, true), false));
// {3}{R/W}{R/W}: Exile Huatli, then return her to the battlefield transformed under her owner's control. Activate only as a sorcery.
this.addAbility(new TransformAbility());
Ability ability = new ActivateAsSorceryActivatedAbility(
new ExileAndReturnSourceEffect(PutCards.BATTLEFIELD_TRANSFORMED),
new ManaCostsImpl<>("{3}{R/W}{R/W}")
);
this.addAbility(ability);
}
private HuatliPoetOfUnity(final HuatliPoetOfUnity card) {
super(card);
}
@Override
public HuatliPoetOfUnity copy() {
return new HuatliPoetOfUnity(this);
}
}

View file

@ -0,0 +1,100 @@
package mage.cards.r;
import mage.abilities.Ability;
import mage.abilities.common.SagaAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
import mage.abilities.keyword.DoubleStrikeAbility;
import mage.abilities.keyword.TrampleAbility;
import mage.abilities.mana.GreenManaAbility;
import mage.abilities.mana.RedManaAbility;
import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SagaChapter;
import mage.constants.SubType;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledPermanent;
import mage.game.permanent.token.DinosaurVanillaToken;
import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
/**
* @author Susucr
*/
public final class RoarOfTheFifthPeople extends CardImpl {
private static final FilterCard filterCard = new FilterCard("Dinosaur card");
private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.DINOSAUR, "Dinosaurs you control");
static {
filterCard.add(SubType.DINOSAUR.getPredicate());
}
public RoarOfTheFifthPeople(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "");
this.color.setWhite(true);
this.color.setGreen(true);
this.color.setRed(true);
this.subtype.add(SubType.SAGA);
this.nightCard = true;
// (As this Saga enters and after your draw step, add a lore counter. Sacrifice after IV.)
SagaAbility sagaAbility = new SagaAbility(this, SagaChapter.CHAPTER_IV);
// I -- Create two 3/3 green Dinosaur creature tokens.
sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_I, new CreateTokenEffect(new DinosaurVanillaToken(), 2));
// II -- Roar of the Fifth People gains "Creatures you control have '{T}: Add {R}, {G}, or {W}.'"
// Note: splitting the mana ability in 3 makes it easier on the UI.
Ability gainedAbility = new SimpleStaticAbility(new GainAbilityControlledEffect(
new RedManaAbility(), Duration.WhileOnBattlefield, StaticFilters.FILTER_CONTROLLED_CREATURES, false
).setText("Creatures you control have '{T}: Add {R}"));
gainedAbility.addEffect(new GainAbilityControlledEffect(
new GreenManaAbility(), Duration.WhileOnBattlefield, StaticFilters.FILTER_CONTROLLED_CREATURES, false
).setText(", {G}"));
gainedAbility.addEffect(new GainAbilityControlledEffect(
new WhiteManaAbility(), Duration.WhileOnBattlefield, StaticFilters.FILTER_CONTROLLED_CREATURES, false
).setText(", or {W}.'"));
sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_II,
new GainAbilitySourceEffect(gainedAbility, Duration.WhileOnBattlefield)
.setText("{this} gains \"Creatures you control have '{T}: Add {R}, {G}, or {W}.'\"")
);
// III -- Search your library for a Dinosaur card, reveal it, put it into your hand, then shuffle.
TargetCardInLibrary target = new TargetCardInLibrary(filterCard);
sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III, new SearchLibraryPutInHandEffect(target, true));
// IV -- Dinosaurs you control gain double strike and trample until end of turn.
sagaAbility.addChapterEffect(
this, SagaChapter.CHAPTER_IV,
new GainAbilityControlledEffect(
DoubleStrikeAbility.getInstance(), Duration.EndOfTurn, filter
).setText("Dinosaurs you control gain double strike"),
new GainAbilityControlledEffect(
TrampleAbility.getInstance(), Duration.EndOfTurn, filter
).setText("and trample until end of turn")
);
this.addAbility(sagaAbility);
}
private RoarOfTheFifthPeople(final RoarOfTheFifthPeople card) {
super(card);
}
@Override
public RoarOfTheFifthPeople copy() {
return new RoarOfTheFifthPeople(this);
}
}

View file

@ -24,10 +24,12 @@ public final class LostCavernsOfIxalan extends ExpansionSet {
cards.add(new SetCardInfo("Cavern of Souls", 269, Rarity.MYTHIC, mage.cards.c.CavernOfSouls.class));
cards.add(new SetCardInfo("Forest", 291, Rarity.LAND, mage.cards.basiclands.Forest.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Ghalta, Stampede Tyrant", 185, Rarity.MYTHIC, mage.cards.g.GhaltaStampedeTyrant.class));
cards.add(new SetCardInfo("Huatli, Poet of Unity", 189, Rarity.MYTHIC, mage.cards.h.HuatliPoetOfUnity.class));
cards.add(new SetCardInfo("Island", 288, Rarity.LAND, mage.cards.basiclands.Island.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Mountain", 290, Rarity.LAND, mage.cards.basiclands.Mountain.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Ojer Axonil, Deepest Might", 317, Rarity.MYTHIC, mage.cards.o.OjerAxonilDeepestMight.class));
cards.add(new SetCardInfo("Plains", 287, Rarity.LAND, mage.cards.basiclands.Plains.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Roar of the Fifth People", 189, Rarity.MYTHIC, mage.cards.r.RoarOfTheFifthPeople.class));
cards.add(new SetCardInfo("Swamp", 289, Rarity.LAND, mage.cards.basiclands.Swamp.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Temple of Power", 317, Rarity.MYTHIC, mage.cards.t.TempleOfPower.class));
cards.add(new SetCardInfo("The Skullspore Nexus", 212, Rarity.MYTHIC, mage.cards.t.TheSkullsporeNexus.class));

View file

@ -0,0 +1,28 @@
package mage.game.permanent.token;
import mage.MageInt;
import mage.constants.CardType;
import mage.constants.SubType;
/**
* @author Susucr
*/
public final class DinosaurVanillaToken extends TokenImpl {
public DinosaurVanillaToken() {
super("Dinosaur Token", "3/3 green Dinosaur creature token");
cardType.add(CardType.CREATURE);
color.setGreen(true);
subtype.add(SubType.DINOSAUR);
power = new MageInt(3);
toughness = new MageInt(3);
}
protected DinosaurVanillaToken(final DinosaurVanillaToken token) {
super(token);
}
public DinosaurVanillaToken copy() {
return new DinosaurVanillaToken(this);
}
}