[VOW] added tokens and images support

This commit is contained in:
Oleg Agafonov 2022-02-05 14:44:46 +04:00
parent dd72e078b5
commit 3cb721fbd9
21 changed files with 143 additions and 23 deletions

View file

@ -691,6 +691,26 @@ public class ScryfallImageSupportTokens {
put("VOC/Spirit/2", "https://api.scryfall.com/cards/tvoc/3/en?format=image"); // 3/3
put("VOC/Thopter", "https://api.scryfall.com/cards/tvoc/6/en?format=image");
// VOW
put("VOW/Blood", "https://api.scryfall.com/cards/tvow/17/en?format=image");
put("VOW/Boar", "https://api.scryfall.com/cards/tvow/12/en?format=image");
put("VOW/Emblem Chandra, Dressed to Kill", "https://api.scryfall.com/cards/tvow/20/en?format=image");
put("VOW/Dragon Illusion", "https://api.scryfall.com/cards/tvow/9/en?format=image");
put("VOW/Human Soldier", "https://api.scryfall.com/cards/tvow/15/en?format=image");
put("VOW/Human/1", "https://api.scryfall.com/cards/tvow/10/en?format=image"); // red
put("VOW/Human/2", "https://api.scryfall.com/cards/tvow/1/en?format=image"); // white
put("VOW/Insect", "https://api.scryfall.com/cards/tvow/13/en?format=image");
put("VOW/Slug", "https://api.scryfall.com/cards/tvow/6/en?format=image");
put("VOW/Spirit Cleric", "https://api.scryfall.com/cards/tvow/4/en?format=image");
put("VOW/Spirit/1", "https://api.scryfall.com/cards/tvow/2/en?format=image"); // 1/1
put("VOW/Spirit/2", "https://api.scryfall.com/cards/tvow/3/en?format=image"); // 4/4
put("VOW/Treasure", "https://api.scryfall.com/cards/tvow/18/en?format=image");
put("VOW/Vampire/1", "https://api.scryfall.com/cards/tvow/16/en?format=image"); // lifelink
put("VOW/Vampire/2", "https://api.scryfall.com/cards/tvow/7/en?format=image"); // flying, lifelink
put("VOW/Wolf/1", "https://api.scryfall.com/cards/tvow/14/en?format=image"); // green
put("VOW/Wolf/2", "https://api.scryfall.com/cards/tvow/11/en?format=image"); // red
put("VOW/Zombie/1", "https://api.scryfall.com/cards/tvow/8/en?format=image"); // 2/2
put("VOW/Zombie/2", "https://api.scryfall.com/cards/tvow/5/en?format=image"); // */*
// generate supported sets
supportedSets.clear();

View file

@ -114,6 +114,7 @@
|Generate|EMBLEM:AFR|Zariel, Archduke of Avernus||Emblem Zariel|ZarielArchdukeOfAvernusEmblem|
|Generate|EMBLEM:MID|Teferi, Who Slows the Sunset||Emblem Teferi|TeferiWhoSlowsTheSunsetEmblem|
|Generate|EMBLEM:MID|Wrenn and Seven||Emblem Wrenn|WrennAndSevenEmblem|
|Generate|EMBLEM:VOW|Chandra, Dressed to Kill||Emblem Chandra|ChandraDressedToKillEmblem|
# Planes
|Generate|PLANE:PCA|Plane - Academy at Tolaria West|||AcademyAtTolariaWestPlane|
@ -1643,4 +1644,24 @@
|Generate|TOK:VOC|Clue|||ClueArtifactToken|
|Generate|TOK:VOC|Spirit|1||SpiritToken|
|Generate|TOK:VOC|Spirit|2||AnotherSpiritToken|
|Generate|TOK:VOC|Thopter|||ThopterColorlessToken|
|Generate|TOK:VOC|Thopter|||ThopterColorlessToken|
# VOW
|Generate|TOK:VOW|Blood|||BloodToken|
|Generate|TOK:VOW|Boar|||Boar3Token|
|Generate|TOK:VOW|Dragon Illusion|||DragonIllusionToken|
|Generate|TOK:VOW|Human|1||RedHumanToken|
|Generate|TOK:VOW|Human|2||HumanToken|
|Generate|TOK:VOW|Human Soldier|||HumanSoldierTrainingToken|
|Generate|TOK:VOW|Insect|||InsectToken|
|Generate|TOK:VOW|Slug|||SlugToken|
|Generate|TOK:VOW|Spirit|1||SpiritWhiteToken|
|Generate|TOK:VOW|Spirit|2||DorotheasRetributionSpiritToken|
|Generate|TOK:VOW|Spirit Cleric|||SpiritClericToken|
|Generate|TOK:VOW|Treasure|||TreasureToken|
|Generate|TOK:VOW|Vampire|1||EdgarMarkovsCoffinVampireToken|
|Generate|TOK:VOW|Vampire|2||VampireLifelinkToken|
|Generate|TOK:VOW|Wolf|1||WolfToken|
|Generate|TOK:VOW|Wolf|2||RedWolfToken|
|Generate|TOK:VOW|Zombie|1||ZombieToken|
|Generate|TOK:VOW|Zombie|2||StitcherGeralfZombieToken|

View file

@ -14,7 +14,7 @@ import mage.constants.TargetController;
import mage.counters.CounterType;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.game.permanent.token.EdgarMarkovsCoffinToken;
import mage.game.permanent.token.EdgarMarkovsCoffinVampireToken;
import java.util.UUID;
@ -33,7 +33,7 @@ public final class EdgarMarkovsCoffin extends CardImpl {
// At the beginning of your upkeep, create a 1/1 white and black Vampire creature token with lifelink and put a bloodline counter on Edgar Markov's Coffin. Then if there are three or more bloodline counters on it, remove those counters and transform it.
Ability ability = new BeginningOfUpkeepTriggeredAbility(
new CreateTokenEffect(new EdgarMarkovsCoffinToken()),
new CreateTokenEffect(new EdgarMarkovsCoffinVampireToken()),
TargetController.YOU, false
);
ability.addEffect(new AddCountersSourceEffect(

View file

@ -20,7 +20,7 @@ import mage.filter.common.FilterControlledPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.TokenPredicate;
import mage.game.permanent.token.BloodToken;
import mage.game.permanent.token.EdgarMarkovsCoffinToken;
import mage.game.permanent.token.EdgarMarkovsCoffinVampireToken;
import mage.target.common.TargetControlledPermanent;
import java.util.UUID;
@ -49,7 +49,7 @@ public final class GlassCastHeart extends CardImpl {
// {B}, {T}, Pay 1 life: Create a 1/1 white and black Vampire creature token with lifelink.
Ability ability = new SimpleActivatedAbility(
new CreateTokenEffect(new EdgarMarkovsCoffinToken()), new ManaCostsImpl<>("{B}")
new CreateTokenEffect(new EdgarMarkovsCoffinVampireToken()), new ManaCostsImpl<>("{B}")
);
ability.addCost(new TapSourceCost());
ability.addCost(new PayLifeCost(1));

View file

@ -10,6 +10,8 @@ import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.Arrays;
/**
* @author TheElk801
*/
@ -28,6 +30,8 @@ public final class BloodToken extends TokenImpl {
ability.addCost(new DiscardCardCost());
ability.addCost(new SacrificeSourceCost().setText("Sacrifice this artifact"));
this.addAbility(ability);
availableImageSetCodes = Arrays.asList("VOW");
}
public BloodToken(final BloodToken token) {

View file

@ -4,6 +4,8 @@ import mage.MageInt;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.Arrays;
/**
* @author TheElk801
*/
@ -16,6 +18,8 @@ public final class Boar3Token extends TokenImpl {
subtype.add(SubType.BOAR);
power = new MageInt(3);
toughness = new MageInt(1);
availableImageSetCodes = Arrays.asList("VOW");
}
public Boar3Token(final Boar3Token token) {

View file

@ -6,6 +6,8 @@ import mage.abilities.keyword.HasteAbility;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.Arrays;
/**
*
* @author weirddan455
@ -25,8 +27,10 @@ public class DragonIllusionToken extends TokenImpl {
power = new MageInt(xValue);
toughness = new MageInt(xValue);
addAbility(FlyingAbility.getInstance());
addAbility(HasteAbility.getInstance());
this.addAbility(FlyingAbility.getInstance());
this.addAbility(HasteAbility.getInstance());
availableImageSetCodes = Arrays.asList("VOW");
}
private DragonIllusionToken(final DragonIllusionToken token) {

View file

@ -5,12 +5,14 @@ import mage.abilities.keyword.LifelinkAbility;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.Arrays;
/**
* @author TheElk801
*/
public final class EdgarMarkovsCoffinToken extends TokenImpl {
public final class EdgarMarkovsCoffinVampireToken extends TokenImpl {
public EdgarMarkovsCoffinToken() {
public EdgarMarkovsCoffinVampireToken() {
super("Vampire", "1/1 white and black Vampire creature token with lifelink");
cardType.add(CardType.CREATURE);
color.setWhite(true);
@ -18,14 +20,18 @@ public final class EdgarMarkovsCoffinToken extends TokenImpl {
subtype.add(SubType.VAMPIRE);
power = new MageInt(1);
toughness = new MageInt(1);
// Lifelink
this.addAbility(LifelinkAbility.getInstance());
availableImageSetCodes = Arrays.asList("VOW");
}
public EdgarMarkovsCoffinToken(final EdgarMarkovsCoffinToken token) {
public EdgarMarkovsCoffinVampireToken(final EdgarMarkovsCoffinVampireToken token) {
super(token);
}
public EdgarMarkovsCoffinToken copy() {
return new EdgarMarkovsCoffinToken(this);
public EdgarMarkovsCoffinVampireToken copy() {
return new EdgarMarkovsCoffinVampireToken(this);
}
}

View file

@ -5,6 +5,8 @@ import mage.abilities.keyword.TrainingAbility;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.Arrays;
/**
* @author TheElk801
*/
@ -19,7 +21,11 @@ public class HumanSoldierTrainingToken extends TokenImpl {
subtype.add(SubType.SOLDIER);
power = new MageInt(1);
toughness = new MageInt(1);
// Training (Whenever this creature attacks with another creature with greater power, put a +1/+1 counter on this creature.)
this.addAbility(new TrainingAbility());
availableImageSetCodes = Arrays.asList("VOW");
}
private HumanSoldierTrainingToken(final HumanSoldierTrainingToken token) {

View file

@ -19,7 +19,7 @@ public final class HumanToken extends TokenImpl {
power = new MageInt(1);
toughness = new MageInt(1);
availableImageSetCodes.addAll(Arrays.asList("DKA", "AVR", "FNMP", "RNA", "ELD", "C19", "C20", "MID"));
availableImageSetCodes.addAll(Arrays.asList("DKA", "AVR", "FNMP", "RNA", "ELD", "C19", "C20", "MID", "VOW"));
}
public HumanToken(final HumanToken token) {
@ -34,8 +34,9 @@ public final class HumanToken extends TokenImpl {
@Override
public void setExpansionSetCodeForImage(String code) {
super.setExpansionSetCodeForImage(code);
if (getOriginalExpansionSetCode().equals("AVR")) {
this.setTokenType(1);
if (getOriginalExpansionSetCode().equals("VOW")) {
this.setTokenType(2);
}
}
}

View file

@ -24,7 +24,7 @@ public final class InsectToken extends TokenImpl {
power = new MageInt(1);
toughness = new MageInt(1);
availableImageSetCodes = Arrays.asList("M10", "MM2", "SOI", "ZNR");
availableImageSetCodes = Arrays.asList("M10", "MM2", "SOI", "ZNR", "VOW");
}
public InsectToken(final InsectToken token) {

View file

@ -6,6 +6,8 @@ import mage.constants.SubType;
import mage.MageInt;
import mage.ObjectColor;
import java.util.Arrays;
/**
*
* @author spjspj
@ -20,6 +22,17 @@ public final class RedHumanToken extends TokenImpl {
this.color.setRed(true);
this.power = new MageInt(1);
this.toughness = new MageInt(1);
availableImageSetCodes = Arrays.asList("AVR", "EMN", "VOW");
}
@Override
public void setExpansionSetCodeForImage(String code) {
super.setExpansionSetCodeForImage(code);
if (getOriginalExpansionSetCode().equals("AVR")) {
this.setTokenType(2);
}
}
public RedHumanToken(final RedHumanToken token) {

View file

@ -4,6 +4,8 @@ import mage.MageInt;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.Arrays;
/**
* @author TheElk801
*/
@ -17,6 +19,17 @@ public final class RedWolfToken extends TokenImpl {
subtype.add(SubType.WOLF);
power = new MageInt(3);
toughness = new MageInt(2);
availableImageSetCodes = Arrays.asList("VOW");
}
@Override
public void setExpansionSetCodeForImage(String code) {
super.setExpansionSetCodeForImage(code);
if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("VOW")) {
setTokenType(2);
}
}
private RedWolfToken(final RedWolfToken token) {

View file

@ -4,6 +4,8 @@ import mage.MageInt;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.Arrays;
/**
* @author TheElk801
*/
@ -16,6 +18,8 @@ public final class SlugToken extends TokenImpl {
subtype.add(SubType.SLUG);
power = new MageInt(1);
toughness = new MageInt(1);
availableImageSetCodes = Arrays.asList("VOW");
}
public SlugToken(final SlugToken token) {

View file

@ -12,6 +12,8 @@ import mage.constants.SubType;
import mage.game.Game;
import mage.game.permanent.Permanent;
import java.util.Arrays;
/**
*
* @author weirddan455
@ -28,7 +30,10 @@ public class SpiritClericToken extends TokenImpl {
power = new MageInt(0);
toughness = new MageInt(0);
// This creatures power and toughness are each equal to the number of Spirits you control.
this.addAbility(new SimpleStaticAbility(new SetPowerToughnessSourceEffect(SpiritClericTokenValue.instance, Duration.EndOfGame)));
availableImageSetCodes = Arrays.asList("VOW");
}
private SpiritClericToken(final SpiritClericToken token) {

View file

@ -23,7 +23,8 @@ public final class SpiritWhiteToken extends TokenImpl {
addAbility(FlyingAbility.getInstance());
availableImageSetCodes = Arrays.asList("AVR", "C14", "CNS", "DDC", "DDK", "FRF", "ISD", "KTK", "M15", "MM2", "SHM",
"SOI", "EMA", "C16", "MM3", "CMA", "E01", "ANA", "GPT", "RAV", "EMN", "RNA", "M20", "C20", "CMR", "KHM", "MID");
"SOI", "EMA", "C16", "MM3", "CMA", "E01", "ANA", "GPT", "RAV", "EMN", "RNA", "M20", "C20", "CMR", "KHM",
"MID", "VOW");
}
@Override

View file

@ -23,7 +23,7 @@ public final class StitcherGeralfZombieToken extends TokenImpl {
power = new MageInt(xValue);
toughness = new MageInt(xValue);
availableImageSetCodes = Arrays.asList("C14", "MIC");
availableImageSetCodes = Arrays.asList("C14", "MIC", "VOW");
}
@Override
@ -37,6 +37,10 @@ public final class StitcherGeralfZombieToken extends TokenImpl {
if (getOriginalExpansionSetCode().equals("MIC")) {
this.setTokenType(2);
}
if (getOriginalExpansionSetCode().equals("VOW")) {
this.setTokenType(2);
}
}
public StitcherGeralfZombieToken(final StitcherGeralfZombieToken token) {

View file

@ -27,7 +27,7 @@ public final class TreasureToken extends TokenImpl {
ability.addCost(new SacrificeSourceCost());
this.addAbility(ability);
availableImageSetCodes = Arrays.asList("XLN", "RNA", "M20", "C19", "C20", "M21", "CMR", "KHM", "STX", "MH2", "AFR");
availableImageSetCodes = Arrays.asList("XLN", "RNA", "M20", "C19", "C20", "M21", "CMR", "KHM", "STX", "MH2", "AFR", "VOW");
}
public TreasureToken(final TreasureToken token) {

View file

@ -6,6 +6,8 @@ import mage.abilities.keyword.LifelinkAbility;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.Arrays;
/**
*
* @author weirddan455
@ -19,8 +21,20 @@ public class VampireLifelinkToken extends TokenImpl {
subtype.add(SubType.VAMPIRE);
power = new MageInt(2);
toughness = new MageInt(3);
addAbility(FlyingAbility.getInstance());
addAbility(LifelinkAbility.getInstance());
this.addAbility(FlyingAbility.getInstance());
this.addAbility(LifelinkAbility.getInstance());
availableImageSetCodes = Arrays.asList("VOW");
}
@Override
public void setExpansionSetCodeForImage(String code) {
super.setExpansionSetCodeForImage(code);
if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("VOW")) {
setTokenType(2);
}
}
private VampireLifelinkToken(final VampireLifelinkToken token) {

View file

@ -23,7 +23,7 @@ public final class WolfToken extends TokenImpl {
availableImageSetCodes = Arrays.asList("BNG", "C14", "C15", "CMA", "CMD", "CNS", "DKA", "EVE", "ISD",
"LRW", "M10", "M14", "MM2", "MOR", "SHM", "SOI", "SOM", "V10", "WWK", "ZEN", "WAR", "M20",
"THB", "AFR", "MID");
"THB", "AFR", "MID", "VOW");
}
@Override

View file

@ -25,7 +25,7 @@ public final class ZombieToken extends TokenImpl {
"CNS", "MMA", "BNG", "KTK", "DTK", "ORI", "OGW",
"SOI", "EMN", "EMA", "MM3", "AKH", "CMA", "E01",
"RNA", "WAR", "MH1", "M20", "C19", "THB", "M21",
"CMR", "C21", "MH2", "AFR", "MIC");
"CMR", "C21", "MH2", "AFR", "MIC", "VOW");
}
@Override