mirror of
https://github.com/correl/mage.git
synced 2024-12-25 11:11:16 +00:00
[NEO] Implemented The Shattered States Era / Nameless Conqueror
This commit is contained in:
parent
6eda309765
commit
68edee6d32
6 changed files with 180 additions and 26 deletions
43
Mage.Sets/src/mage/cards/n/NamelessConqueror.java
Normal file
43
Mage.Sets/src/mage/cards/n/NamelessConqueror.java
Normal file
|
@ -0,0 +1,43 @@
|
|||
package mage.cards.n;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
import mage.abilities.keyword.TrampleAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class NamelessConqueror extends CardImpl {
|
||||
|
||||
public NamelessConqueror(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "");
|
||||
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.subtype.add(SubType.SAMURAI);
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(3);
|
||||
this.color.setRed(true);
|
||||
this.nightCard = true;
|
||||
|
||||
// Trample
|
||||
this.addAbility(TrampleAbility.getInstance());
|
||||
|
||||
// Haste
|
||||
this.addAbility(HasteAbility.getInstance());
|
||||
}
|
||||
|
||||
private NamelessConqueror(final NamelessConqueror card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NamelessConqueror copy() {
|
||||
return new NamelessConqueror(this);
|
||||
}
|
||||
}
|
73
Mage.Sets/src/mage/cards/t/TheShatteredStatesEra.java
Normal file
73
Mage.Sets/src/mage/cards/t/TheShatteredStatesEra.java
Normal file
|
@ -0,0 +1,73 @@
|
|||
package mage.cards.t;
|
||||
|
||||
import mage.abilities.common.SagaAbility;
|
||||
import mage.abilities.effects.Effects;
|
||||
import mage.abilities.effects.common.ExileSagaAndReturnTransformedEffect;
|
||||
import mage.abilities.effects.common.UntapTargetEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostControlledEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
|
||||
import mage.abilities.effects.common.continuous.GainControlTargetEffect;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
import mage.abilities.keyword.TransformAbility;
|
||||
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.target.common.TargetCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class TheShatteredStatesEra extends CardImpl {
|
||||
|
||||
public TheShatteredStatesEra(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{4}{R}");
|
||||
|
||||
this.subtype.add(SubType.SAGA);
|
||||
this.secondSideCardClazz = mage.cards.n.NamelessConqueror.class;
|
||||
|
||||
// (As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)
|
||||
SagaAbility sagaAbility = new SagaAbility(this, SagaChapter.CHAPTER_III);
|
||||
|
||||
// I — Gain control of target creature until end of turn. Untap it. It gains haste until end of turn.
|
||||
sagaAbility.addChapterEffect(
|
||||
this, SagaChapter.CHAPTER_I, SagaChapter.CHAPTER_I,
|
||||
new Effects(
|
||||
new GainControlTargetEffect(Duration.EndOfTurn),
|
||||
new UntapTargetEffect().setText("Untap it."),
|
||||
new GainAbilityTargetEffect(
|
||||
HasteAbility.getInstance(), Duration.EndOfTurn
|
||||
).setText("It gains haste until end of turn.")
|
||||
), new TargetCreaturePermanent()
|
||||
);
|
||||
|
||||
// II — Creatures you control get +1/+0 until end of turn.
|
||||
sagaAbility.addChapterEffect(
|
||||
this, SagaChapter.CHAPTER_II, new BoostControlledEffect(
|
||||
1, 0, Duration.EndOfTurn
|
||||
)
|
||||
);
|
||||
|
||||
// III — Exile this Saga, then return it to the battlefield transformed under your control.
|
||||
this.addAbility(new TransformAbility());
|
||||
sagaAbility.addChapterEffect(
|
||||
this, SagaChapter.CHAPTER_III,
|
||||
new ExileSagaAndReturnTransformedEffect()
|
||||
);
|
||||
|
||||
this.addAbility(sagaAbility);
|
||||
}
|
||||
|
||||
private TheShatteredStatesEra(final TheShatteredStatesEra card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TheShatteredStatesEra copy() {
|
||||
return new TheShatteredStatesEra(this);
|
||||
}
|
||||
}
|
|
@ -27,8 +27,10 @@ public final class KamigawaNeonDynasty extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Island", 295, Rarity.LAND, mage.cards.basiclands.Island.class, FULL_ART_BFZ_VARIOUS));
|
||||
cards.add(new SetCardInfo("Kaito Shizuki", 226, Rarity.MYTHIC, mage.cards.k.KaitoShizuki.class));
|
||||
cards.add(new SetCardInfo("Mountain", 299, Rarity.LAND, mage.cards.basiclands.Mountain.class, FULL_ART_BFZ_VARIOUS));
|
||||
cards.add(new SetCardInfo("Nameless Conqueror", 162, Rarity.COMMON, mage.cards.n.NamelessConqueror.class));
|
||||
cards.add(new SetCardInfo("Plains", 293, Rarity.LAND, mage.cards.basiclands.Plains.class, FULL_ART_BFZ_VARIOUS));
|
||||
cards.add(new SetCardInfo("Satoru Umezawa", 234, Rarity.RARE, mage.cards.s.SatoruUmezawa.class));
|
||||
cards.add(new SetCardInfo("Swamp", 297, Rarity.LAND, mage.cards.basiclands.Swamp.class, FULL_ART_BFZ_VARIOUS));
|
||||
cards.add(new SetCardInfo("The Shattered States Era", 162, Rarity.COMMON, mage.cards.t.TheShatteredStatesEra.class));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package mage.abilities.effects.common;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.Mode;
|
||||
import mage.abilities.Pronoun;
|
||||
import mage.abilities.effects.ContinuousEffect;
|
||||
import mage.abilities.effects.Effect;
|
||||
|
@ -18,12 +19,9 @@ import mage.players.Player;
|
|||
*/
|
||||
public class ExileAndReturnTransformedSourceEffect extends OneShotEffect {
|
||||
|
||||
protected Effect additionalEffect;
|
||||
protected boolean returnUnderYourControl;
|
||||
|
||||
public ExileAndReturnTransformedSourceEffect() {
|
||||
this(Pronoun.IT);
|
||||
}
|
||||
protected final Pronoun pronoun;
|
||||
protected final Effect additionalEffect;
|
||||
protected final boolean returnUnderYourControl;
|
||||
|
||||
public ExileAndReturnTransformedSourceEffect(Pronoun pronoun) {
|
||||
this(pronoun, null);
|
||||
|
@ -40,15 +38,14 @@ public class ExileAndReturnTransformedSourceEffect extends OneShotEffect {
|
|||
*/
|
||||
public ExileAndReturnTransformedSourceEffect(Pronoun pronoun, Effect additionalEffect, boolean returnUnderYourControl) {
|
||||
super(Outcome.Benefit);
|
||||
this.pronoun = pronoun;
|
||||
this.additionalEffect = additionalEffect;
|
||||
this.returnUnderYourControl = returnUnderYourControl;
|
||||
this.staticText = "exile {this}, then return " + pronoun.getObjective()
|
||||
+ " to the battlefield transformed under " + pronoun.getPossessive()
|
||||
+ " " + (this.returnUnderYourControl ? "your" : "owner's") + " control";
|
||||
}
|
||||
|
||||
public ExileAndReturnTransformedSourceEffect(final ExileAndReturnTransformedSourceEffect effect) {
|
||||
protected ExileAndReturnTransformedSourceEffect(final ExileAndReturnTransformedSourceEffect effect) {
|
||||
super(effect);
|
||||
this.pronoun = effect.pronoun;
|
||||
this.additionalEffect = effect.additionalEffect;
|
||||
this.returnUnderYourControl = effect.returnUnderYourControl;
|
||||
}
|
||||
|
@ -61,24 +58,38 @@ public class ExileAndReturnTransformedSourceEffect extends OneShotEffect {
|
|||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
// Creature has to be on the battlefield to get exiled and be able to return transformed
|
||||
Permanent sourceObject = game.getPermanent(source.getSourceId());
|
||||
Permanent sourceObject = source.getSourcePermanentIfItStillExists(game);
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (sourceObject != null && controller != null && sourceObject.getZoneChangeCounter(game) == source.getSourceObjectZoneChangeCounter()) {
|
||||
if (controller.moveCards(sourceObject, Zone.EXILED, source, game)) {
|
||||
game.getState().setValue(TransformAbility.VALUE_KEY_ENTER_TRANSFORMED + source.getSourceId(), Boolean.TRUE);
|
||||
Card cardFromExile = game.getCard(source.getSourceId());
|
||||
if (cardFromExile != null) {
|
||||
controller.moveCards(cardFromExile, Zone.BATTLEFIELD, source, game, false, false, !this.returnUnderYourControl, null);
|
||||
if (additionalEffect != null) {
|
||||
if (additionalEffect instanceof ContinuousEffect) {
|
||||
game.addEffect((ContinuousEffect) additionalEffect, source);
|
||||
} else {
|
||||
additionalEffect.apply(game, source);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (sourceObject == null || controller == null) {
|
||||
return true;
|
||||
}
|
||||
if (!controller.moveCards(sourceObject, Zone.EXILED, source, game)) {
|
||||
return true;
|
||||
}
|
||||
game.getState().setValue(TransformAbility.VALUE_KEY_ENTER_TRANSFORMED + source.getSourceId(), Boolean.TRUE);
|
||||
Card cardFromExile = game.getCard(source.getSourceId());
|
||||
if (cardFromExile == null) {
|
||||
return true;
|
||||
}
|
||||
controller.moveCards(cardFromExile, Zone.BATTLEFIELD, source, game, false, false, !this.returnUnderYourControl, null);
|
||||
if (additionalEffect == null) {
|
||||
return true;
|
||||
}
|
||||
if (additionalEffect instanceof ContinuousEffect) {
|
||||
game.addEffect((ContinuousEffect) additionalEffect, source);
|
||||
} else {
|
||||
additionalEffect.apply(game, source);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getText(Mode mode) {
|
||||
if (staticText != null && !staticText.isEmpty()) {
|
||||
return staticText;
|
||||
}
|
||||
return "exile {this}, then return " + pronoun.getObjective()
|
||||
+ " to the battlefield transformed under " + pronoun.getPossessive()
|
||||
+ ' ' + (this.returnUnderYourControl ? "your" : "owner's") + " control";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
package mage.abilities.effects.common;
|
||||
|
||||
import mage.abilities.Pronoun;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public class ExileSagaAndReturnTransformedEffect extends ExileAndReturnTransformedSourceEffect {
|
||||
|
||||
public ExileSagaAndReturnTransformedEffect() {
|
||||
super(Pronoun.IT, null, true);
|
||||
staticText = "exile this Saga, then return it to the battlefield transformed under your control";
|
||||
}
|
||||
|
||||
private ExileSagaAndReturnTransformedEffect(final ExileSagaAndReturnTransformedEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ExileSagaAndReturnTransformedEffect copy() {
|
||||
return new ExileSagaAndReturnTransformedEffect(this);
|
||||
}
|
||||
}
|
|
@ -43507,6 +43507,8 @@ Sacred Foundry|Unfinity|285|R||Land - Mountain Plains|||({T}: Add {R} or {W}.)$A
|
|||
Breeding Pool|Unfinity|286|R||Land - Forest Island|||({T}: Add {G} or {U}.)$As Breeding Pool enters the battlefield, you may pay 2 life. If you don't, it enters the battlefield tapped.|
|
||||
Hidetsugu, Devouring Chaos|Kamigawa: Neon Dynasty|99|R|{3}{B}|Legendary Creature - Ogre Demon|4|4|{B}, Sacrifice a creature: Scry 2.${2}{R}, {T}: Exile the top card of your library. You may play that card this turn. When you exile a nonland card this way, Hidetsugu, Devouring Chaos deals damage equal to the exiled card's mana value to any target.|
|
||||
Atsushi, the Blazing Sky|Kamigawa: Neon Dynasty|134|M|{2}{R}{R}|Legendary Creature - Dragon Spirit|4|4|Flying, trample$When Atsushi, the Blazing Sky dies, choose one —$• Exile the top two cards of your library. Until the end of your next turn, you may play those cards.$• Create three Treasure tokens.|
|
||||
The Shattered States Era|Kamigawa: Neon Dynasty|162|C|{4}{R}|Enchantment - Saga|||(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)$I — Gain control of target creature until end of turn. It gains haste until end of turn.$II — Creatures you control get +1/+0 until end of turn.$III — Exile this Saga, then return it to the battlefield transformed under your control.|
|
||||
Nameless Conqueror|Kamigawa: Neon Dynasty|162|C||Enchantment Creature - Human Samurai|3|3|Trample, haste|
|
||||
Kaito Shizuki|Kamigawa: Neon Dynasty|226|M|{1}{U}{B}|Legendary Planeswalker - Kaito|3|At the beginning of your end step, if Kaito Shizuki entered the battlefield this turn, he phases out.$+1: Draw a card. Then discard a card unless you attacked this turn.$−2: Create a 1/1 blue Ninja creature token with "This creature can't be blocked."$−7: You get an emblem with "Whenever a creature you control deals combat damage to a player, search your library for a blue or black creature card, put it onto the battlefield, then shuffle."|
|
||||
Satoru Umezawa|Kamigawa: Neon Dynasty|234|R|{1}{U}{B}|Legendary Creature - Human Ninja|2|4|Whenever you activate a ninjutsu ability, look at the top three cards of your library. Put one of them into your hand and the rest on the bottom of your library in any order. This ability triggers only once each turn.$Each creature card in your hand has ninjutsu {2}{U}{B}.|
|
||||
Plains|Kamigawa: Neon Dynasty|293|C||Basic Land - Plains|||({T}: Add {W}.)|
|
||||
|
|
Loading…
Reference in a new issue