diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportTokens.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportTokens.java index 82eeafb54a8..c9606e22809 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportTokens.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportTokens.java @@ -683,6 +683,14 @@ public class ScryfallImageSupportTokens { put("MID/Zombie/1", "https://api.scryfall.com/cards/tmid/5/en?format=image"); // decayed put("MID/Zombie/2", "https://api.scryfall.com/cards/tmid/15/en?format=image"); // menace + // VOC + put("VOC/Angel", "https://api.scryfall.com/cards/tvoc/2/en?format=image"); + put("VOC/Bat", "https://api.scryfall.com/cards/tvoc/4/en?format=image"); + put("VOC/Clue", "https://api.scryfall.com/cards/tvoc/5/en?format=image"); + put("VOC/Spirit/1", "https://api.scryfall.com/cards/tvoc/1/en?format=image"); // 1/1 + 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"); + // generate supported sets supportedSets.clear(); diff --git a/Mage.Client/src/main/resources/card-pictures-tok.txt b/Mage.Client/src/main/resources/card-pictures-tok.txt index 87428256672..7aa51fb5459 100644 --- a/Mage.Client/src/main/resources/card-pictures-tok.txt +++ b/Mage.Client/src/main/resources/card-pictures-tok.txt @@ -1635,4 +1635,12 @@ |Generate|TOK:MID|Vampire|||HungryForMoreVampireToken| |Generate|TOK:MID|Wolf|||WolfToken| |Generate|TOK:MID|Zombie|1||ZombieDecayedToken| -|Generate|TOK:MID|Zombie|2||ZombieMenaceToken| \ No newline at end of file +|Generate|TOK:MID|Zombie|2||ZombieMenaceToken| + +# VOC +|Generate|TOK:VOC|Angel|||AngelToken| +|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|Thopter|||ThopterColorlessToken| \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/g/GeistOfSaintTraft.java b/Mage.Sets/src/mage/cards/g/GeistOfSaintTraft.java index 2b49fb8e293..9deea9bf8b0 100644 --- a/Mage.Sets/src/mage/cards/g/GeistOfSaintTraft.java +++ b/Mage.Sets/src/mage/cards/g/GeistOfSaintTraft.java @@ -1,4 +1,3 @@ - package mage.cards.g; import java.util.UUID; @@ -34,6 +33,7 @@ public final class GeistOfSaintTraft extends CardImpl { // Hexproof this.addAbility(HexproofAbility.getInstance()); + // Whenever Geist of Saint Traft attacks, create a 4/4 white Angel creature token with flying tapped and attacking. Exile that token at end of combat. this.addAbility(new AttacksTriggeredAbility(new GeistOfSaintTraftEffect(), false)); } diff --git a/Mage.Sets/src/mage/cards/o/OyobiWhoSplitTheHeavens.java b/Mage.Sets/src/mage/cards/o/OyobiWhoSplitTheHeavens.java index 754c0f5fc31..991a4249a5f 100644 --- a/Mage.Sets/src/mage/cards/o/OyobiWhoSplitTheHeavens.java +++ b/Mage.Sets/src/mage/cards/o/OyobiWhoSplitTheHeavens.java @@ -27,6 +27,7 @@ public final class OyobiWhoSplitTheHeavens extends CardImpl { this.power = new MageInt(3); this.toughness = new MageInt(6); 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_SPIRIT_OR_ARCANE_CARD, false)); } diff --git a/Mage/src/main/java/mage/game/permanent/token/AngelToken.java b/Mage/src/main/java/mage/game/permanent/token/AngelToken.java index 7a9f97ff4e0..db5056b296c 100644 --- a/Mage/src/main/java/mage/game/permanent/token/AngelToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/AngelToken.java @@ -20,7 +20,7 @@ public final class AngelToken extends TokenImpl { addAbility(FlyingAbility.getInstance()); availableImageSetCodes = Arrays.asList("APC", "AVR", "C14", "C15", "C18", "CON", "DDQ", "GTC", - "ISD", "M14", "MM3", "NEM", "OGW", "ORI", "PC2", "SCG", "SOI", "ZEN", "C20", "M21", "CMR", "AFC"); + "ISD", "M14", "MM3", "NEM", "OGW", "ORI", "PC2", "SCG", "SOI", "ZEN", "C20", "M21", "CMR", "AFC", "VOC"); } public AngelToken(final AngelToken token) { diff --git a/Mage/src/main/java/mage/game/permanent/token/AnotherSpiritToken.java b/Mage/src/main/java/mage/game/permanent/token/AnotherSpiritToken.java index e6f0fc6fd9b..9d31a09e05d 100644 --- a/Mage/src/main/java/mage/game/permanent/token/AnotherSpiritToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/AnotherSpiritToken.java @@ -1,13 +1,13 @@ - - package mage.game.permanent.token; -import mage.constants.CardType; -import mage.constants.SubType; + import mage.MageInt; import mage.abilities.keyword.FlyingAbility; +import mage.constants.CardType; +import mage.constants.SubType; + +import java.util.Arrays; /** - * * @author spjspj */ public final class AnotherSpiritToken extends TokenImpl { @@ -19,8 +19,21 @@ public final class AnotherSpiritToken extends TokenImpl { subtype.add(SubType.SPIRIT); power = new MageInt(3); toughness = new MageInt(3); + this.addAbility(FlyingAbility.getInstance()); + + availableImageSetCodes = Arrays.asList("BOK", "VOC"); } + + @Override + public void setExpansionSetCodeForImage(String code) { + super.setExpansionSetCodeForImage(code); + + if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("VOC")) { + setTokenType(2); + } + } + public AnotherSpiritToken(final AnotherSpiritToken token) { super(token); } diff --git a/Mage/src/main/java/mage/game/permanent/token/BatToken.java b/Mage/src/main/java/mage/game/permanent/token/BatToken.java index 4c69a91b15d..fab90e6b54e 100644 --- a/Mage/src/main/java/mage/game/permanent/token/BatToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/BatToken.java @@ -18,7 +18,7 @@ public final class BatToken extends TokenImpl { toughness = new MageInt(1); this.addAbility(FlyingAbility.getInstance()); - availableImageSetCodes = Arrays.asList("GVL", "DDD", "GPT", "MMA", "M19", "MID"); + availableImageSetCodes = Arrays.asList("GVL", "DDD", "GPT", "MMA", "M19", "MID", "VOC"); } public BatToken(final BatToken token) { diff --git a/Mage/src/main/java/mage/game/permanent/token/ClueArtifactToken.java b/Mage/src/main/java/mage/game/permanent/token/ClueArtifactToken.java index da40ac43b6d..78d5f3535b0 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ClueArtifactToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ClueArtifactToken.java @@ -29,7 +29,7 @@ public final class ClueArtifactToken extends TokenImpl { ability.addCost(cost); this.addAbility(ability); - availableImageSetCodes = Arrays.asList("C18", "SOI", "MH2", "AFC", "MID"); + availableImageSetCodes = Arrays.asList("C18", "SOI", "MH2", "AFC", "MID", "VOC"); } @Override diff --git a/Mage/src/main/java/mage/game/permanent/token/SpiritToken.java b/Mage/src/main/java/mage/game/permanent/token/SpiritToken.java index 6ef5d1d4a68..fe315474b55 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SpiritToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SpiritToken.java @@ -4,40 +4,21 @@ import mage.MageInt; import mage.constants.CardType; import mage.constants.SubType; -import java.util.ArrayList; import java.util.Arrays; -import java.util.List; /** * @author Loki */ public final class SpiritToken extends TokenImpl { - static final private List tokenImageSets = new ArrayList<>(); - - static { - tokenImageSets.addAll(Arrays.asList("CHK", "EMA", "C16", "C19")); - } - public SpiritToken() { - this(null, 0); - } - - public SpiritToken(String setCode) { - this(setCode, 0); - } - - public SpiritToken(String setCode, int tokenType) { super("Spirit", "1/1 colorless Spirit creature token"); - availableImageSetCodes = tokenImageSets; - setOriginalExpansionSetCode(setCode); - if (tokenType > 0) { - setTokenType(tokenType); - } cardType.add(CardType.CREATURE); subtype.add(SubType.SPIRIT); power = new MageInt(1); toughness = new MageInt(1); + + availableImageSetCodes = Arrays.asList("C19", "CHK", "EMA", "EXP", "SOK", "V12", "VOC"); } @Override @@ -47,6 +28,10 @@ public final class SpiritToken extends TokenImpl { if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("BOK")) { setTokenType(2); } + + if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("EMA")) { + setTokenType(2); + } } public SpiritToken(final SpiritToken token) { diff --git a/Mage/src/main/java/mage/game/permanent/token/ThopterColorlessToken.java b/Mage/src/main/java/mage/game/permanent/token/ThopterColorlessToken.java index ef9b482955b..db8a0b754a3 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ThopterColorlessToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ThopterColorlessToken.java @@ -24,7 +24,7 @@ public final class ThopterColorlessToken extends TokenImpl { addAbility(FlyingAbility.getInstance()); availableImageSetCodes = Arrays.asList("C18", "EXO", "KLD", "MBS", "ORI", "VMA", "M19", "ZNC", - "KHC", "C21", "MH2", "AFC"); + "KHC", "C21", "MH2", "AFC", "VOC"); } @Override