Merge pull request #14153 from muz/spirited_away

Use specific tokens where possible for TDM
This commit is contained in:
xenohedron 2026-01-13 00:10:32 -05:00 committed by GitHub
commit 32b7f798f4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 96 additions and 24 deletions

View file

@ -2693,9 +2693,10 @@ public class ScryfallImageSupportTokens {
put("TDM/Reliquary Dragon", "https://api.scryfall.com/cards/ttdm/15/en?format=image");
put("TDM/Soldier/1", "https://api.scryfall.com/cards/ttdm/4/en?format=image");
put("TDM/Soldier/2", "https://api.scryfall.com/cards/ttdm/5/en?format=image");
put("TDM/Spirit/1", "https://api.scryfall.com/cards/ttdm/9/en?format=image");
put("TDM/Spirit/2", "https://api.scryfall.com/cards/ttdm/6/en?format=image");
// TODO: 2/2 and 3/3 Spirit tokens (no relevant cards revealed, token not implemented)
put("TDM/Spirit/1", "https://api.scryfall.com/cards/ttdm/9/en?format=image"); // */*
put("TDM/Spirit/2", "https://api.scryfall.com/cards/ttdm/6/en?format=image"); // 1/1
put("TDM/Spirit/3", "https://api.scryfall.com/cards/ttdm/7/en?format=image"); // 2/2
put("TDM/Spirit/4", "https://api.scryfall.com/cards/ttdm/8/en?format=image"); // 3/3
put("TDM/Treasure", "https://api.scryfall.com/cards/ttdm/16/en?format=image");
put("TDM/Warrior", "https://api.scryfall.com/cards/ttdm/13/en?format=image");
put("TDM/Zombie Druid", "https://api.scryfall.com/cards/ttdm/10/en?format=image");

View file

@ -16,7 +16,7 @@ import mage.constants.SubType;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.predicate.Predicates;
import mage.game.permanent.token.NoFlyingSpiritWhiteToken;
import mage.game.permanent.token.NoFlyingSpiritWhite11Token;
import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
@ -47,7 +47,7 @@ public final class GreatArashinCity extends CardImpl {
this.addAbility(new BlackManaAbility());
// {1}{B}, {T}, Exile a creature card from your graveyard: Create a 1/1 white Spirit creature token.
Ability ability = new SimpleActivatedAbility(new CreateTokenEffect(new NoFlyingSpiritWhiteToken()), new ManaCostsImpl<>("{1}{B}"));
Ability ability = new SimpleActivatedAbility(new CreateTokenEffect(new NoFlyingSpiritWhite11Token()), new ManaCostsImpl<>("{1}{B}"));
ability.addCost(new TapSourceCost());
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE)).withSourceExileZone(false));
this.addAbility(ability);

View file

@ -12,7 +12,7 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.StaticFilters;
import mage.game.permanent.token.AnotherSpiritToken;
import mage.game.permanent.token.Spirit33Token;
/**
* @author Loki
@ -29,7 +29,7 @@ public final class OyobiWhoSplitTheHeavens extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
// Whenever you cast a Spirit or Arcane spell, create a 3/3 white Spirit creature token with flying.
this.addAbility(new SpellCastControllerTriggeredAbility(new CreateTokenEffect(new AnotherSpiritToken()), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false));
this.addAbility(new SpellCastControllerTriggeredAbility(new CreateTokenEffect(new Spirit33Token()), StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false));
}
private OyobiWhoSplitTheHeavens(final OyobiWhoSplitTheHeavens card) {

View file

@ -14,7 +14,7 @@ import mage.constants.SagaChapter;
import mage.constants.SubType;
import mage.counters.CounterType;
import mage.filter.StaticFilters;
import mage.game.permanent.token.NoFlyingSpiritWhiteToken;
import mage.game.permanent.token.NoFlyingSpiritWhite11Token;
import mage.target.common.TargetPermanentAmount;
import java.util.UUID;
@ -35,7 +35,7 @@ public final class RevivalOfTheAncestors extends CardImpl {
// I -- Create three 1/1 white Spirit creature tokens.
sagaAbility.addChapterEffect(
this, SagaChapter.CHAPTER_I,
new CreateTokenEffect(new NoFlyingSpiritWhiteToken(), 3)
new CreateTokenEffect(new NoFlyingSpiritWhite11Token(), 3)
);
// II -- Distribute three +1/+1 counters among one, two, or three target creatures you control.

View file

@ -9,6 +9,9 @@ import mage.counters.CounterType;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.game.permanent.token.SpiritXXToken;
import mage.game.permanent.token.NoFlyingSpiritWhite11Token;
import mage.game.permanent.token.NoFlyingSpiritWhite22Token;
import mage.game.permanent.token.NoFlyingSpiritWhite33Token;
import mage.players.Player;
import mage.util.CardUtil;
@ -69,6 +72,16 @@ public class EndureSourceEffect extends OneShotEffect {
)) {
return permanent.addCounters(CounterType.P1P1.createInstance(amount), source, game);
}
return new SpiritXXToken(amount).putOntoBattlefield(1, game, source);
switch (amount) {
case 1:
return new NoFlyingSpiritWhite11Token().putOntoBattlefield(1, game, source);
case 2:
return new NoFlyingSpiritWhite22Token().putOntoBattlefield(1, game, source);
case 3:
return new NoFlyingSpiritWhite33Token().putOntoBattlefield(1, game, source);
default:
return new SpiritXXToken(amount).putOntoBattlefield(1, game, source);
}
}
}

View file

@ -7,9 +7,9 @@ import mage.constants.SubType;
/**
* @author PurpleCrowbar
*/
public final class NoFlyingSpiritWhiteToken extends TokenImpl {
public final class NoFlyingSpiritWhite11Token extends TokenImpl {
public NoFlyingSpiritWhiteToken() {
public NoFlyingSpiritWhite11Token() {
super("Spirit Token", "1/1 white Spirit creature token");
cardType.add(CardType.CREATURE);
subtype.add(SubType.SPIRIT);
@ -18,12 +18,12 @@ public final class NoFlyingSpiritWhiteToken extends TokenImpl {
toughness = new MageInt(1);
}
private NoFlyingSpiritWhiteToken(final NoFlyingSpiritWhiteToken token) {
private NoFlyingSpiritWhite11Token(final NoFlyingSpiritWhite11Token token) {
super(token);
}
@Override
public NoFlyingSpiritWhiteToken copy() {
return new NoFlyingSpiritWhiteToken(this);
public NoFlyingSpiritWhite11Token copy() {
return new NoFlyingSpiritWhite11Token(this);
}
}

View file

@ -0,0 +1,29 @@
package mage.game.permanent.token;
import mage.MageInt;
import mage.constants.CardType;
import mage.constants.SubType;
/**
* @author muz
*/
public final class NoFlyingSpiritWhite22Token extends TokenImpl {
public NoFlyingSpiritWhite22Token() {
super("Spirit Token", "2/2 white Spirit creature token");
cardType.add(CardType.CREATURE);
subtype.add(SubType.SPIRIT);
color.setWhite(true);
power = new MageInt(2);
toughness = new MageInt(2);
}
private NoFlyingSpiritWhite22Token(final NoFlyingSpiritWhite22Token token) {
super(token);
}
@Override
public NoFlyingSpiritWhite22Token copy() {
return new NoFlyingSpiritWhite22Token(this);
}
}

View file

@ -0,0 +1,29 @@
package mage.game.permanent.token;
import mage.MageInt;
import mage.constants.CardType;
import mage.constants.SubType;
/**
* @author muz
*/
public final class NoFlyingSpiritWhite33Token extends TokenImpl {
public NoFlyingSpiritWhite33Token() {
super("Spirit Token", "3/3 white Spirit creature token");
cardType.add(CardType.CREATURE);
subtype.add(SubType.SPIRIT);
color.setWhite(true);
power = new MageInt(3);
toughness = new MageInt(3);
}
private NoFlyingSpiritWhite33Token(final NoFlyingSpiritWhite33Token token) {
super(token);
}
@Override
public NoFlyingSpiritWhite33Token copy() {
return new NoFlyingSpiritWhite33Token(this);
}
}

View file

@ -8,9 +8,9 @@ import mage.constants.SubType;
/**
* @author spjspj
*/
public final class AnotherSpiritToken extends TokenImpl {
public final class Spirit33Token extends TokenImpl {
public AnotherSpiritToken() {
public Spirit33Token() {
super("Spirit Token", "3/3 white Spirit creature token with flying");
cardType.add(CardType.CREATURE);
color.setWhite(true);
@ -21,11 +21,11 @@ public final class AnotherSpiritToken extends TokenImpl {
this.addAbility(FlyingAbility.getInstance());
}
private AnotherSpiritToken(final AnotherSpiritToken token) {
private Spirit33Token(final Spirit33Token token) {
super(token);
}
public AnotherSpiritToken copy() {
return new AnotherSpiritToken(this);
public Spirit33Token copy() {
return new Spirit33Token(this);
}
}

View file

@ -1439,7 +1439,7 @@
|Generate|TOK:VOC|Bat|||BatToken|
|Generate|TOK:VOC|Clue|||ClueArtifactToken|
|Generate|TOK:VOC|Spirit|1||SpiritToken|
|Generate|TOK:VOC|Spirit|2||AnotherSpiritToken|
|Generate|TOK:VOC|Spirit|2||Spirit33Token|
|Generate|TOK:VOC|Thopter|||ThopterColorlessToken|
# VOW
@ -2732,9 +2732,9 @@
|Generate|TOK:TDM|Soldier|1||SoldierToken|
|Generate|TOK:TDM|Soldier|2||Soldier22Token|
|Generate|TOK:TDM|Spirit|1||SpiritXXToken|
|Generate|TOK:TDM|Spirit|2||NoFlyingSpiritWhiteToken|
# TODO: 2/2 Spirit (no relevant cards revealed, token not implemented)
# TODO: 3/3 Spirit (no relevant cards revealed, token not implemented)
|Generate|TOK:TDM|Spirit|2||NoFlyingSpiritWhite11Token|
|Generate|TOK:TDM|Spirit|3||NoFlyingSpiritWhite22Token|
|Generate|TOK:TDM|Spirit|4||NoFlyingSpiritWhite33Token|
|Generate|TOK:TDM|Treasure|||TreasureToken|
|Generate|TOK:TDM|Warrior|||RedWarriorToken|
|Generate|TOK:TDM|Zombie Druid|||ZombieDruidToken|