Merge remote-tracking branch 'upstream/master' into deck-importer-decks-file-format

This commit is contained in:
leriomaggio
2021-09-07 10:43:40 +01:00
35 changed files with 355 additions and 54 deletions

View File

@@ -18,15 +18,11 @@
package forge.game;
import java.util.List;
import java.util.Map;
import com.google.common.collect.*;
import org.apache.commons.lang3.StringUtils;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.google.common.collect.Table;
import com.google.common.collect.TreeBasedTable;
import forge.card.MagicColor;
import forge.card.mana.ManaCost;
import forge.card.mana.ManaCostParser;
@@ -233,21 +229,23 @@ public final class GameActionUtil {
if (keyword.contains(":")) {
final String[] k = keyword.split(":");
flashback.setPayCosts(new Cost(k[1], false));
String extra = k.length > 2 ? k[2] : "";
if (!extra.isEmpty()) {
String[] parts = extra.split("\\$");
String key = parts[0];
String value = parts[1];
flashback.putParam(key, value);
String extraParams = k.length > 2 ? k[2] : "";
if (!extraParams.isEmpty()) {
Map<String, String> extraParamMap =
Maps.newHashMap(AbilityFactory.getMapParams(extraParams));
for (Map.Entry<String, String> param : extraParamMap.entrySet()) {
flashback.putParam(param.getKey(), param.getValue());
}
}
}
alternatives.add(flashback);
} else if (keyword.startsWith("Foretell")) {
// Foretell cast only from Exile
if (!source.isInZone(ZoneType.Exile) || !source.isForetold() || source.isForetoldThisTurn() || !activator.equals(source.getOwner())) {
if (!source.isInZone(ZoneType.Exile) || !source.isForetold() || source.isForetoldThisTurn() ||
!activator.equals(source.getOwner())) {
continue;
}
// skip this part for fortell by external source
// skip this part for foretell by external source
if (keyword.equals("Foretell")) {
continue;
}

View File

@@ -2531,7 +2531,7 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
sbx.append(" (").append(inst.getReminderText()).append(")");
sbBefore.append(sbx).append("\r\n");
}
}else if (keyword.startsWith("AlternateAdditionalCost")) {
} else if (keyword.startsWith("AlternateAdditionalCost")) {
final String[] k = keyword.split(":");
final Cost cost1 = new Cost(k[1], false);
final Cost cost2 = new Cost(k[2], false);

View File

@@ -2169,8 +2169,10 @@ public class CardFactoryUtil {
StringBuilder sb = new StringBuilder();
sb.append("Event$ Moved | ValidCard$ Card.Self | Origin$ Stack | ExcludeDestination$ Exile ");
sb.append("| ValidStackSa$ Spell.Flashback | Description$ Flashback");
String reminderInsert = "";
if (keyword.contains(":")) { // K:Flashback:Cost:ExtraParam(Key$Value):ExtraDescription:Cost(for formatting)
// K:Flashback:Cost:ExtraParams:ExtraDescription:cost for display:reminder text insert
if (keyword.contains(":")) {
final String[] k = keyword.split(":");
final Cost cost = new Cost(k[1], false);
sb.append(cost.isOnlyManaCost() ? " " : "");
@@ -2193,10 +2195,17 @@ public class CardFactoryUtil {
sb.append(". ").append(extraDesc);
}
}
reminderInsert = k.length > 5 ? k[5] : "";
}
sb.append(" (");
sb.append(inst.getReminderText());
if (!reminderInsert.isEmpty()) {
String reminder = inst.getReminderText();
sb.append(reminder, 0, 65).append(" ");
sb.append(reminderInsert).append(reminder, 65, 81);
} else {
sb.append(inst.getReminderText());
}
sb.append(")");
String repeffstr = sb.toString();

View File

@@ -1492,6 +1492,11 @@ public class CardView extends GameEntityView {
public boolean isArtifact() {
return getType().isArtifact();
}
public boolean isNyx() {
if (!getType().isEnchantment() || getType().getCoreTypes() == null)
return false;
return Iterables.size(getType().getCoreTypes()) > 1;
}
}
//special methods for updating card and player properties as needed and returning the new collection

View File

@@ -74,10 +74,17 @@ public class CostSacrifice extends CostPartWithList {
@Override
public final String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("Sacrifice ");
if (getAmount().equals("X")) {
sb.append("You may sacrifice ");
} else {
sb.append("Sacrifice ");
}
if (payCostFromSource()) {
sb.append(getType());
} else if (getAmount().equals("X")) {
String typeDesc = getType().toLowerCase().replace(";","s and/or ");
sb.append("any number of ").append(typeDesc).append("s");
} else {
final String desc = ObjectUtils.firstNonNull(getTypeDescription(), getType());
sb.append(Cost.convertAmountTypeToWords(convertAmount(), getAmount(), desc));

View File

@@ -136,6 +136,31 @@ public enum FSkinImage implements FImage {
CARDBG_WG (FSkinProp.IMG_CARDBG_WG, SourceFile.CARDBG),
CARDBG_WR (FSkinProp.IMG_CARDBG_WR, SourceFile.CARDBG),
CARDBG_WU (FSkinProp.IMG_CARDBG_WU, SourceFile.CARDBG),
//PWBG
PWBG_B (FSkinProp.IMG_PWBG_B, SourceFile.CARDBG),
PWBG_BG (FSkinProp.IMG_PWBG_BG, SourceFile.CARDBG),
PWBG_BR (FSkinProp.IMG_PWBG_BR, SourceFile.CARDBG),
PWBG_C (FSkinProp.IMG_PWBG_C, SourceFile.CARDBG),
PWBG_G (FSkinProp.IMG_PWBG_G, SourceFile.CARDBG),
PWBG_M (FSkinProp.IMG_PWBG_M, SourceFile.CARDBG),
PWBG_R (FSkinProp.IMG_PWBG_R, SourceFile.CARDBG),
PWBG_RG (FSkinProp.IMG_PWBG_RG, SourceFile.CARDBG),
PWBG_U (FSkinProp.IMG_PWBG_U, SourceFile.CARDBG),
PWBG_UB (FSkinProp.IMG_PWBG_UB, SourceFile.CARDBG),
PWBG_UG (FSkinProp.IMG_PWBG_UG, SourceFile.CARDBG),
PWBG_UR (FSkinProp.IMG_PWBG_UR, SourceFile.CARDBG),
PWBG_W (FSkinProp.IMG_PWBG_W, SourceFile.CARDBG),
PWBG_WB (FSkinProp.IMG_PWBG_WB, SourceFile.CARDBG),
PWBG_WG (FSkinProp.IMG_PWBG_WG, SourceFile.CARDBG),
PWBG_WR (FSkinProp.IMG_PWBG_WR, SourceFile.CARDBG),
PWBG_WU (FSkinProp.IMG_PWBG_WU, SourceFile.CARDBG),
//NYX OVERLAY
NYX_B (FSkinProp.IMG_NYX_B, SourceFile.CARDBG),
NYX_G (FSkinProp.IMG_NYX_G, SourceFile.CARDBG),
NYX_M (FSkinProp.IMG_NYX_M, SourceFile.CARDBG),
NYX_R (FSkinProp.IMG_NYX_R, SourceFile.CARDBG),
NYX_U (FSkinProp.IMG_NYX_U, SourceFile.CARDBG),
NYX_W (FSkinProp.IMG_NYX_W, SourceFile.CARDBG),
//Gameplay
TAP (FSkinProp.IMG_TAP, SourceFile.MANAICONS),

View File

@@ -815,6 +815,8 @@ public class CardImageRenderer {
}
public static Color[] drawCardBackgroundTexture(CardStateView state, Graphics g, List<DetailColors> backColors, float x, float y, float w, float h) {
boolean isHybrid = state.getManaCost().hasHybrid();
boolean isPW = state.isPlaneswalker();
boolean isNyx = state.isNyx();
Color[] colors = new Color[backColors.size()];
for (int i = 0; i < colors.length; i++) {
DetailColors dc = backColors.get(i);
@@ -825,58 +827,77 @@ public class CardImageRenderer {
if (backColors.get(0) == DetailColors.FACE_DOWN) {
g.drawImage(FSkinImage.CARDBG_C, x, y, w,h);
} else if (backColors.get(0) == DetailColors.LAND) {
g.drawImage(FSkinImage.CARDBG_L, x, y, w,h);
g.drawImage(isPW ? FSkinImage.PWBG_C : FSkinImage.CARDBG_L, x, y, w,h);
}else if (backColors.get(0) == DetailColors.MULTICOLOR) {
g.drawImage(FSkinImage.CARDBG_M, x, y, w,h);
g.drawImage(isPW ? FSkinImage.PWBG_M : FSkinImage.CARDBG_M, x, y, w,h);
if (isNyx)
g.drawImage(FSkinImage.NYX_M, x, y, w, (h/2)+(h/5));
} else if (backColors.get(0) == DetailColors.COLORLESS) {
if (state.isVehicle())
if (isPW)
g.drawImage(FSkinImage.PWBG_C, x, y, w,h);
else if (state.isVehicle())
g.drawImage(FSkinImage.CARDBG_V, x, y, w,h);
else if (state.isArtifact())
g.drawImage(FSkinImage.CARDBG_A, x, y, w,h);
else
g.drawImage(FSkinImage.CARDBG_C, x, y, w,h);
//todo add NYX for colorless?
} else if (backColors.get(0) == DetailColors.GREEN) {
g.drawImage(FSkinImage.CARDBG_G, x, y, w,h);
g.drawImage(isPW ? FSkinImage.PWBG_G : FSkinImage.CARDBG_G, x, y, w,h);
if (isNyx)
g.drawImage(FSkinImage.NYX_G, x, y, w, (h/2)+(h/5));
} else if (backColors.get(0) == DetailColors.RED) {
g.drawImage(FSkinImage.CARDBG_R, x, y, w,h);
g.drawImage(isPW ? FSkinImage.PWBG_R : FSkinImage.CARDBG_R, x, y, w,h);
if (isNyx)
g.drawImage(FSkinImage.NYX_R, x, y, w, (h/2)+(h/5));
} else if (backColors.get(0) == DetailColors.BLACK) {
g.drawImage(FSkinImage.CARDBG_B, x, y, w,h);
g.drawImage(isPW ? FSkinImage.PWBG_B : FSkinImage.CARDBG_B, x, y, w,h);
if (isNyx)
g.drawImage(FSkinImage.NYX_B, x, y, w, (h/2)+(h/5));
} else if (backColors.get(0) == DetailColors.BLUE) {
g.drawImage(FSkinImage.CARDBG_U, x, y, w,h);
g.drawImage(isPW ? FSkinImage.PWBG_U : FSkinImage.CARDBG_U, x, y, w,h);
if (isNyx)
g.drawImage(FSkinImage.NYX_U, x, y, w, (h/2)+(h/5));
} else if (backColors.get(0) == DetailColors.WHITE) {
g.drawImage(FSkinImage.CARDBG_W, x, y, w,h);
g.drawImage(isPW ? FSkinImage.PWBG_W : FSkinImage.CARDBG_W, x, y, w,h);
if (isNyx)
g.drawImage(FSkinImage.NYX_W, x, y, w, (h/2)+(h/5));
}
break;
case 2:
if (!isHybrid) {
g.drawImage(FSkinImage.CARDBG_M, x, y, w, h);
g.drawImage(isPW ? FSkinImage.PWBG_M : FSkinImage.CARDBG_M, x, y, w, h);
} else if (backColors.contains(DetailColors.WHITE) && backColors.contains(DetailColors.BLUE)) {
g.drawImage(FSkinImage.CARDBG_WU, x, y, w, h);
g.drawImage(isPW ? FSkinImage.PWBG_WU : FSkinImage.CARDBG_WU, x, y, w, h);
} else if (backColors.contains(DetailColors.WHITE) && backColors.contains(DetailColors.BLACK)) {
g.drawImage(FSkinImage.CARDBG_WB, x, y, w, h);
g.drawImage(isPW ? FSkinImage.PWBG_WB : FSkinImage.CARDBG_WB, x, y, w, h);
} else if (backColors.contains(DetailColors.WHITE) && backColors.contains(DetailColors.RED)) {
g.drawImage(FSkinImage.CARDBG_WR, x, y, w, h);
g.drawImage(isPW ? FSkinImage.PWBG_WR : FSkinImage.CARDBG_WR, x, y, w, h);
} else if (backColors.contains(DetailColors.WHITE) && backColors.contains(DetailColors.GREEN)) {
g.drawImage(FSkinImage.CARDBG_WG, x, y, w, h);
g.drawImage(isPW ? FSkinImage.PWBG_WG : FSkinImage.CARDBG_WG, x, y, w, h);
} else if (backColors.contains(DetailColors.BLUE) && backColors.contains(DetailColors.BLACK)) {
g.drawImage(FSkinImage.CARDBG_UB, x, y, w, h);
g.drawImage(isPW ? FSkinImage.PWBG_UB : FSkinImage.CARDBG_UB, x, y, w, h);
} else if (backColors.contains(DetailColors.BLUE) && backColors.contains(DetailColors.RED)) {
g.drawImage(FSkinImage.CARDBG_UR, x, y, w, h);
g.drawImage(isPW ? FSkinImage.PWBG_UR : FSkinImage.CARDBG_UR, x, y, w, h);
} else if (backColors.contains(DetailColors.BLUE) && backColors.contains(DetailColors.GREEN)) {
g.drawImage(FSkinImage.CARDBG_UG, x, y, w, h);
g.drawImage(isPW ? FSkinImage.PWBG_UG : FSkinImage.CARDBG_UG, x, y, w, h);
} else if (backColors.contains(DetailColors.BLACK) && backColors.contains(DetailColors.RED)) {
g.drawImage(FSkinImage.CARDBG_BR, x, y, w, h);
g.drawImage(isPW ? FSkinImage.PWBG_BR : FSkinImage.CARDBG_BR, x, y, w, h);
} else if (backColors.contains(DetailColors.BLACK) && backColors.contains(DetailColors.GREEN)) {
g.drawImage(FSkinImage.CARDBG_BG, x, y, w, h);
g.drawImage(isPW ? FSkinImage.PWBG_BG : FSkinImage.CARDBG_BG, x, y, w, h);
} else if (backColors.contains(DetailColors.RED) && backColors.contains(DetailColors.GREEN)) {
g.drawImage(FSkinImage.CARDBG_RG, x, y, w, h);
g.drawImage(isPW ? FSkinImage.PWBG_RG : FSkinImage.CARDBG_RG, x, y, w, h);
}
if (isNyx)
g.drawImage(FSkinImage.NYX_M, x, y, w, (h/2)+(h/5));
break;
case 3:
g.drawImage(FSkinImage.CARDBG_M, x, y, w, h);
g.drawImage(isPW ? FSkinImage.PWBG_M : FSkinImage.CARDBG_M, x, y, w, h);
if (isNyx)
g.drawImage(FSkinImage.NYX_M, x, y, w, (h/2)+(h/5));
break;
default:
g.drawImage(FSkinImage.CARDBG_C, x, y, w,h);
g.drawImage(isPW ? FSkinImage.PWBG_C : FSkinImage.CARDBG_C, x, y, w,h);
break;
}
return colors;

View File

@@ -2,7 +2,7 @@ Name:Dargo, the Shipwrecker
ManaCost:6 R
Types:Legendary Creature Giant Pirate
PT:7/5
A:SP$ PermanentCreature | Cost$ 6 R Sac<X/Artifact;Creature/artifacts or creatures> | AILogic$ SacToReduceCost | CostDesc$ As an additional cost to cast this spell, you may sacrifice any number of artifacts and/or creatures. | SpellDescription$
A:SP$ PermanentCreature | Cost$ 6 R Sac<X/Artifact;Creature/artifact or creature> | AILogic$ SacToReduceCost | CostDesc$ As an additional cost to cast this spell, you may sacrifice any number of artifacts and/or creatures. | SpellDescription$
S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ Y | EffectZone$ All | Relative$ True | Description$ This spell costs {2} less to cast for each permanent sacrificed this way and {2} less to cast for each other artifact or creature you've sacrificed this turn.
S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ Z | EffectZone$ All | Secondary$ True | Description$ This spell costs {2} less to cast for each permanent sacrificed this way and {2} less to cast for each other artifact or creature you've sacrificed this turn.
SVar:X:Count$xPaid

View File

@@ -6,7 +6,7 @@ K:Delve
K:Flying
K:etbCounter:P1P1:X:no Condition:CARDNAME enters the battlefield with a +1/+1 counter on it for each instant and sorcery card exiled with it.
SVar:X:Count$ValidExile Instant.ExiledWithSource,Sorcery.ExiledWithSource
T:Mode$ ChangesZone | ValidCard$ Instant,Sorcery | Origin$ Graveyard | Destination$ Any | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever an instant or sorcery card leaves your graveyard, put a +1/+1 counter on CARDNAME.
T:Mode$ ChangesZone | ValidCard$ Instant.YouOwn,Sorcery.YouOwn | Origin$ Graveyard | Destination$ Any | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever an instant or sorcery card leaves your graveyard, put a +1/+1 counter on CARDNAME.
SVar:TrigPutCounter:DB$ PutCounter | CounterType$ P1P1 | CounterNum$ 1
DeckNeeds:Type$Instant|Sorcery
DeckHas:Ability$Counters

View File

@@ -0,0 +1,10 @@
Name:Arrogant Outlaw
ManaCost:2 B
Types:Creature Vampire Noble
PT:3/2
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | CheckSVar$ X | SVarCompare$ GE1 | Execute$ TrigDrain | TriggerDescription$ When CARDNAME enters the battlefield, if an opponent lost life this turn, each opponent loses 2 life and you gain 2 life.
SVar:TrigDrain:DB$ LoseLife | Defined$ Player.Opponent | LifeAmount$ 2 | SubAbility$ DBGainLife
SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 2
DeckHas:Ability$LifeGain
SVar:X:Count$LifeOppsLostThisTurn
Oracle:When Arrogant Outlaw enters the battlefield, if an opponent lost life this turn, each opponent loses 2 life and you gain 2 life.

View File

@@ -0,0 +1,8 @@
Name:Bladestitched Skaab
ManaCost:U B
Types:Creature Zombie Soldier
PT:2/3
S:Mode$ Continuous | Affected$ Zombie.Other+YouCtrl | AddPower$ 1 | Description$ Other Zombies you control get +1/+0.
SVar:PlayMain1:TRUE
DeckHints:Type$Zombie
Oracle:Other Zombies you control get +1/+0.

View File

@@ -0,0 +1,10 @@
Name:Can't Stay Away
ManaCost:W B
Types:Sorcery
A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ValidTgts$ Creature.YouOwn+cmcLE3 | TgtPrompt$ Select target creature card in your graveyard with mana value 3 or less | SubAbility$ DBAnimate | StackDescription$ Return {c:Targeted} from your graveyard to the battlefield. | SpellDescription$ Return target creature card with mana value 3 or less from your graveyard to the battlefield. It gains "If this creature would die, exile it instead."
SVar:DBAnimate:DB$ Animate | Replacements$ ReplaceDies | Defined$ ParentTarget | Duration$ Permanent | StackDescription$ It gains "If this creature would die, exile it instead."
SVar:ReplaceDies:Event$ Moved | ActiveZones$ Battlefield | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | ReplaceWith$ Exile | Description$ If this creature would die, exile it instead.
SVar:Exile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | Defined$ ReplacedCard
K:Flashback:3 W B
DeckHas:Ability$Graveyard
Oracle:Return target creature card with mana value 3 or less from your graveyard to the battlefield. It gains "If this creature would die, exile it instead."\nFlashback {3}{W}{B}

View File

@@ -0,0 +1,11 @@
Name:Corpse Cobble
ManaCost:U B
Types:Instant
#Text:As an additional cost to cast this spell, sacrifice any number of creatures.
A:SP$ Token | Cost$ U B Sac<X/Creature/creature> | RememberCostCards$ True | TokenScript$ ub_x_x_zombie_menace | TokenPower$ Y | TokenToughness$ Y | SubAbility$ DBCleanup | SpellDescription$ Create an X/X blue and black Zombie creature token with menace, where X is the total power of the sacrificed creatures.
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
K:Flashback:3 U B Sac<X/Creature>:::{3}{U}{B}:and any additional costs
SVar:X:Count$xPaid
SVar:Y:RememberedLKI$CardPower
DeckHas:Ability$Sacrifice & Ability$Token
Oracle:As an additional cost to cast this spell, sacrifice any number of creatures.\nCreate an X/X blue and black Zombie creature token with menace, where X is the total power of the sacrificed creatures.\nFlashback {3}{U}{B} (You may cast this card from your graveyard for its flashback cost and any additional costs. Then exile it.)

View File

@@ -0,0 +1,9 @@
Name:Curse of Shaken Faith
ManaCost:1 R
Types:Enchantment Aura Curse
K:Enchant player
A:SP$ Attach | Cost$ 1 R | ValidTgts$ Player | AILogic$ Curse
T:Mode$ SpellCast | ValidActivatingPlayer$ Player.EnchantedBy | ActivatorThisTurnCast$ GT1 | NoResolvingCheck$ True | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ Whenever enchanted player casts a spell other than the first spell they cast each turn or copies a spell, CARDNAME deals 2 damage to them.
T:Mode$ SpellCopy | ValidActivatingPlayer$ Player.EnchantedBy | NoResolvingCheck$ True | TriggerZones$ Battlefield | Execute$ TrigDamage | Secondary$ True | TriggerDescription$ Whenever enchanted player casts a spell other than the first spell they cast each turn or copies a spell, CARDNAME deals 2 damage to them.
SVar:TrigDamage:DB$ DealDamage | Defined$ TriggeredPlayer | NumDmg$ 2
Oracle:Enchant player\nWhenever enchanted player casts a spell other than the first spell they cast each turn or copies a spell, Curse of Shaken Faith deals 2 damage to them.

View File

@@ -0,0 +1,9 @@
Name:Dawnhart Rejuvenator
ManaCost:3 G
Types:Creature Human Warlock
PT:2/4
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigGainLife | TriggerDescription$ When CARDNAME enters the battlefield, you gain 3 life.
SVar:TrigGainLife:DB$ GainLife | LifeAmount$ 3
A:AB$ Mana | Cost$ T | Produced$ Any | SpellDescription$ Add one mana of any color.
DeckHas:Ability$LifeGain
Oracle:When Dawnhart Rejuvenator enters the battlefield, you gain 3 life.\n{T}: Add one mana of any color.

View File

@@ -0,0 +1,10 @@
Name:Famished Foragers
ManaCost:3 R
Types:Creature Vampire
PT:4/3
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | CheckSVar$ X | SVarCompare$ GE1 | Execute$ TrigMana | TriggerDescription$ When CARDNAME enters the battlefield, if an opponent lost life this turn, add {R}{R}{R}.
SVar:TrigMana:DB$ Mana | Produced$ R | Amount$ 3
A:AB$ Draw | Cost$ 2 R Discard<1/Card> | NumCards$ 1 | SpellDescription$ Draw a card.
SVar:X:Count$LifeOppsLostThisTurn
DeckHas:Ability$Discard
Oracle:When Famished Foragers enters the battlefield, if an opponent lost life this turn, add {R}{R}{R}.\n{2}{R}, Discard a card: Draw a card.

View File

@@ -0,0 +1,24 @@
Name:Flame Channeler
ManaCost:1 R
Types:Creature Human Wizard
PT:2/2
T:Mode$ DamageDoneOnce | ValidSource$ Spell.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ When a spell you control deals damage, transform CARDNAME.
SVar:TrigTransform:DB$ SetState | Defined$ Self | Mode$ Transform
AlternateMode:DoubleFaced
Oracle:When a spell you control deals damage, transform Flame Channeler.
ALTERNATE
Name:Embodiment of Flame
ManaCost:no cost
Colors:red
Types:Creature Elemental Wizard
PT:3/3
T:Mode$ DamageDoneOnce | ValidSource$ Spell.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever a spell you control deals damage, put a flame counter on CARDNAME.
SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ FLAME | CounterNum$ 1
A:AB$ Dig | Cost$ 1 SubCounter<1/FLAME> | DigNum$ 1 | ChangeNum$ All | DestinationZone$ Exile | Defined$ You | RememberChanged$ True | SubAbility$ DBEffect | SpellDescription$ Exile the top card of your library. You may play that card this turn.
SVar:DBEffect:DB$ Effect | StaticAbilities$ EffSModeContinuous | ExileOnMoved$ Exile | RememberObjects$ Remembered | SubAbility$ DBCleanup
SVar:EffSModeContinuous:Mode$ Continuous | EffectZone$ Command | Affected$ Card.IsRemembered | MayPlay$ True | AffectedZone$ Exile | Description$ You may play that card this turn.
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
DeckHas:Ability$Counters
Oracle:Whenever a spell you control deals damage, put a flame counter on Embodiment of Flame.\n{1}, Remove a flame counter from Embodiment of Flame: Exile the top card of your library. You may play that card this turn.

View File

@@ -0,0 +1,7 @@
Name:Foul Play
ManaCost:1 B
Types:Sorcery
A:SP$ Destroy | ValidTgts$ Creature.powerLE2 | TgtPrompt$ Select target creature with power 2 or less | SubAbility$ DBInvestigate | SpellDescription$ Destroy target creature with power 2 or less. Investigate. (Create a colorless Clue artifact token with "{2}, Sacrifice this artifact: Draw a card.")
SVar:DBInvestigate:DB$ Investigate
DeckHas:Ability$Token & Ability$Sacrifice
Oracle:Destroy target creature with power 2 or less. Investigate. (Create a colorless Clue artifact token with "{2}, Sacrifice this artifact: Draw a card.")

View File

@@ -2,7 +2,7 @@ Name:Gisa, Glorious Resurrector
ManaCost:2 B B
Types:Legendary Creature Human Wizard
PT:4/4
R:Event$ Moved | ActiveZones$ Battlefield | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.OppCtrl | ReplaceWith$ Exile | Description$ If a creature an opponent controls would die, exile it instead.
R:Event$ Moved | ActiveZones$ Battlefield | CheckSelfLKIZone$ True | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.OppCtrl | ReplaceWith$ Exile | Description$ If a creature an opponent controls would die, exile it instead.
SVar:Exile:DB$ ChangeZone | Hidden$ True | Origin$ All | Destination$ Exile | Defined$ ReplacedCard
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | IsPresent$ Card.ExiledWithSource | PresentZone$ Exile | Execute$ TrigChange | TriggerDescription$ At the beginning of your upkeep, put all creature cards exiled with CARDNAME onto the battlefield under your control. They gain decayed. (A creature with decayed can't block. When it attacks, sacrifice it at end of combat.)
SVar:TrigChange:DB$ ChangeZoneAll | ChangeType$ Card.ExiledWithSource | Origin$ Exile | Destination$ Battlefield | GainControl$ True | RememberChanged$ True | SubAbility$ DBPump

View File

@@ -0,0 +1,13 @@
Name:Liesa, Forgotten Archangel
ManaCost:2 W W B
Types:Legendary Creature Angel
PT:4/5
K:Flying
K:Lifelink
T:Mode$ ChangesZone | ValidCard$ Creature.Other+nonToken+YouCtrl | Origin$ Battlefield | Destination$ Graveyard | Execute$ DelTrigReturn | TriggerZones$ Battlefield | TriggerDescription$ Whenever another nontoken creature you control dies, return that card to its owner's hand at the beginning of the next end step.
SVar:DelTrigReturn:DB$ DelayedTrigger | Mode$ Phase | Phase$ End Of Turn | Execute$ DBReturn | RememberObjects$ TriggeredNewCardLKICopy
SVar:DBReturn:DB$ ChangeZone | Defined$ DelayTriggerRememberedLKI | Origin$ Graveyard | Destination$ Hand
R:Event$ Moved | ActiveZones$ Battlefield | Origin$ Battlefield | Destination$ Graveyard | ValidLKI$ Creature.OppCtrl | ReplaceWith$ Exile | CheckSelfLKIZone$ True | Description$ If a creature an opponent controls would die, exile it instead.
SVar:Exile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | Defined$ ReplacedCard
DeckHas:Ability$LifeGain
Oracle:Flying, lifelink\nWhenever another nontoken creature you control dies, return that card to its owner's hand at the beginning of the next end step.\nIf a creature an opponent controls would die, exile it instead.

View File

@@ -0,0 +1,6 @@
Name:Lunar Frenzy
ManaCost:X R
Types:Instant
A:SP$ Pump | Cost$ X R | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature | NumAtt$ +X | KW$ First Strike & Trample | StackDescription$ {c:Targeted} gets +X/+0 and gains first strike and trample until end of turn. | SpellDescription$ Target creature you control gets +X/+0 and gains first strike and trample until end of turn.
SVar:X:Count$xPaid
Oracle:Target creature you control gets +X/+0 and gains first strike and trample until end of turn.

View File

@@ -0,0 +1,9 @@
Name:Ominous Roost
ManaCost:2 U
Types:Enchantment
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield or whenever you cast a spell from your graveyard, create a 1/1 blue Bird creature token with flying and "This creature can block only creatures with flying."
T:Mode$ SpellCast | ValidCard$ Card.wasCastFromGraveyard | ValidActivatingPlayer$ You | Execute$ TrigToken | TriggerZones$ Battlefield | Secondary$ True | TriggerDescription$ When CARDNAME enters the battlefield or whenever you cast a spell from your graveyard, create a 1/1 blue Bird creature token with flying and "This creature can block only creatures with flying."
SVar:TrigToken:DB$ Token | TokenOwner$ You | TokenAmount$ 1 | TokenScript$ u_1_1_bird_flying_blockflying
DeckHas:Ability$Token
DeckHints:Ability$Graveyard
Oracle:When Ominous Roost enters the battlefield or whenever you cast a spell from your graveyard, create a 1/1 blue Bird creature token with flying and "This creature can block only creatures with flying."

View File

@@ -0,0 +1,7 @@
Name:Stormrider Spirit
ManaCost:4 U
Types:Creature Spirit
PT:3/3
K:Flash
K:Flying
Oracle:Flash (You may cast this spell any time you could cast an instant.)\nFlying

View File

@@ -3,7 +3,7 @@ ManaCost:2 G
Types:Sorcery
A:SP$ PutCounter | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ P1P1 | SubAbility$ DBPump | StackDescription$ Put a +1/+1 counter on {c:Targeted}, then double the number of +1/+1 counters on it. | SpellDescription$ Put a +1/+1 counter on target creature, then double the number of +1/+1 counters on it.
SVar:DBPump:DB$ MultiplyCounter | Defined$ Targeted | CounterType$ P1P1 | StackDescription$ None
K:Flashback:8 G G:ReduceCost$X:This spell costs {X} less to cast this way, where X is the greatest mana value of a commander you own on the battlefield or in the command zone.
K:Flashback:8 G G:ReduceCost$ X:This spell costs {X} less to cast this way, where X is the greatest mana value of a commander you own on the battlefield or in the command zone.
SVar:X:Count$HighestCMC_Card.IsCommander+YouOwn+inZoneBattlefield,Card.IsCommander+YouOwn+inZoneCommand
DeckHas:Ability$Counters
Oracle:Put a +1/+1 counter on target creature, then double the number of +1/+1 counters on it.\nFlashback {8}{G}{G}. This spell costs {X} less to cast this way, where X is the greatest mana value of a commander you own on the battlefield or in the command zone. (You may cast this card from your graveyard for its flashback cost. Then exile it.)

View File

@@ -3,7 +3,7 @@ ManaCost:2 B
Types:Sorcery
A:SP$ ChooseCard | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | Choices$ Creature.TargetedPlayerOwn | ChoiceZone$ Graveyard | AILogic$ WorstCard | Amount$ 1 | SubAbility$ DBChangeZone | Mandatory$ True | StackDescription$ SpellDescription | SpellDescription$ Target opponent puts a creature card of their choice from their graveyard onto the battlefield under your control.
SVar:DBChangeZone:DB$ ChangeZone | Defined$ ChosenCard | Origin$ Graveyard | GainControl$ True | Destination$ Battlefield | StackDescription$ None
K:Flashback:8 B B:ReduceCost$X:This spell costs {X} less to cast this way, where X is the greatest mana value of a commander you own on the battlefield or in the command zone.
K:Flashback:8 B B:ReduceCost$ X:This spell costs {X} less to cast this way, where X is the greatest mana value of a commander you own on the battlefield or in the command zone.
SVar:X:Count$HighestCMC_Card.IsCommander+YouOwn+inZoneBattlefield,Card.IsCommander+YouOwn+inZoneCommand
DeckHas:Ability$Graveyard
Oracle:Target opponent puts a creature card of their choice from their graveyard onto the battlefield under your control.\nFlashback {8}{B}{B}. This spell costs {X} less to cast this way, where X is the greatest mana value of a commander you own on the battlefield or in the command zone. (You may cast this card from your graveyard for its flashback cost. Then exile it.)

View File

@@ -3,7 +3,7 @@ ManaCost:2 U
Types:Sorcery
A:SP$ ExchangeControl | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Select target creature you don't control | TargetMin$ 2 | TargetMax$ 2 | TargetUnique$ True | StackDescription$ SpellDescription | SpellDescription$ Exchange control of two target creatures you don't control.
SVar:DBChangeZone:DB$ ChangeZone | Defined$ ChosenCard | Origin$ Graveyard | GainControl$ True | Destination$ Battlefield
K:Flashback:8 U U:ReduceCost$X:This spell costs {X} less to cast this way, where X is the greatest mana value of a commander you own on the battlefield or in the command zone.
K:Flashback:8 U U:ReduceCost$ X:This spell costs {X} less to cast this way, where X is the greatest mana value of a commander you own on the battlefield or in the command zone.
SVar:X:Count$HighestCMC_Card.IsCommander+YouOwn+inZoneBattlefield,Card.IsCommander+YouOwn+inZoneCommand
AI:RemoveDeck:All
Oracle:Exchange control of two target creatures you don't control.\nFlashback {8}{U}{U}. This spell costs {X} less to cast this way, where X is the greatest mana value of a commander you own on the battlefield or in the command zone. (You may cast this card from your graveyard for its flashback cost. Then exile it.)

View File

@@ -3,7 +3,7 @@ ManaCost:4 W
Types:Sorcery
A:SP$ Token | TokenScript$ w_1_1_human | TokenAmount$ Y | SpellDescription$ Create a 1/1 white Human creature token for each creature you control.
SVar:Y:Count$TypeYouCtrl.Creature
K:Flashback:8 W W:ReduceCost$X:This spell costs {X} less to cast this way, where X is the greatest mana value of a commander you own on the battlefield or in the command zone.
K:Flashback:8 W W:ReduceCost$ X:This spell costs {X} less to cast this way, where X is the greatest mana value of a commander you own on the battlefield or in the command zone.
SVar:X:Count$HighestCMC_Card.IsCommander+YouOwn+inZoneBattlefield,Card.IsCommander+YouOwn+inZoneCommand
DeckHas:Ability$Token
Oracle:Create a 1/1 white Human creature token for each creature you control.\nFlashback {8}{W}{W}. This spell costs {X} less to cast this way, where X is the greatest mana value of a commander you own on the battlefield or in the command zone. (You may cast this card from your graveyard for its flashback cost. Then exile it.)

View File

@@ -5,7 +5,7 @@ A:SP$ Sacrifice | Defined$ Player.Opponent | SacValid$ Artifact | SacMessage$ ar
SVar:DBToken:DB$ Token | TokenAmount$ Y | TokenScript$ c_a_treasure_sac | SubAbility$ DBCleanup | SpellDescription$ For each artifact sacrificed this way, you create a Treasure token.
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:Y:Count$RememberedSize
K:Flashback:8 R R:ReduceCost$X:This spell costs {X} less to cast this way, where X is the greatest mana value of a commander you own on the battlefield or in the command zone.
K:Flashback:8 R R:ReduceCost$ X:This spell costs {X} less to cast this way, where X is the greatest mana value of a commander you own on the battlefield or in the command zone.
SVar:X:Count$HighestCMC_Card.IsCommander+YouOwn+inZoneBattlefield,Card.IsCommander+YouOwn+inZoneCommand
DeckHas:Ability$Token & Ability$Sacrifice
AI:RemoveDeck:Random

View File

@@ -15,4 +15,12 @@ ScryfallCode=MIC
35 R Curse of Obsession @Irvin Rodriguez
36 R Visions of Ruin @Andrew Mar
37 R Visions of Dominance @Andrew Mar
39 M Leinore, Autumn Sovereign @Fariba Khamseh
40 R Wilhelt, the Rotcleaver @Chris Rallis
69 M Avacyn's Memorial @Kasia 'Kafis' Zielińska
70 R Visions of Glory @Alexander Mokhov
71 R Visions of Duplicity @Alexander Mokhov
72 R Visions of Dread @Andrew Mar
73 R Curse of Obsession @Irvin Rodriguez
74 R Visions of Ruin @Andrew Mar
75 R Visions of Dominance @Andrew Mar

View File

@@ -12,43 +12,81 @@ Prerelease=6 Boosters, 1 RareMythic+
[cards]
3 U Beloved Beggar @Francisco Miyara
7 R Brutal Cathar @Karl Kopinski
8 C Candlegrove Witch @Anna Christenson
9 C Candletrap @Manuel Castañón
12 C Celestus Sanctifier @Irina Nordsol
17 M Enduring Angel @Irina Nordsol
20 U Gavony Dawnguard @Micah Epstein
23 C Hedgewitch's Mask @Ovidio Cartagena
30 C Ritual Guardian @Denman Rooke
36 C Sungold Barrage @Leanna Crossan
40 C Unruly Mob @Ryan Pancoast
42 C Baithook Angler @Uriah Voth
44 C Consider @Zezhou Chen
49 U Dissipate @David Palumbo
65 U Ominous Roost @Josu Hernaiz
71 M Poppet Stitcher @Simon Dominic
73 C Secrets of the Key @Alix Branwyn
76 R Sludge Monster @Svetlin Velinov
79 C Stormrider Spirit @Lake Hurwitz
81 R Triskaidekaphile @Slawomir Maniak
84 C Arrogant Outlaw @Aurore Folny
91 R Champion of the Perished @Kekai Kotaki
94 R Curse of Leeches @Uriah Voth
95 C Defenestrate @Darek Zabrocki
101 U Foul Play @Campbell White
103 R Gisa, Glorious Resurrector @Yongjae Choi
104 R Graveyard Trespasser @Chris Rallis
106 C Hobbling Zombie @Josh Hass
107 U Infernal Grasp @Naomi Baker
108 R Jadar, Ghoulcaller of Nephalia @Yongjae Choi
130 C Brimstone Vandal @Andreas Zafiratos
134 R Curse of Shaken Faith
134 R Curse of Shaken Faith @Campbell White
138 C Famished Foragers @Lorenzo Mastroianni
140 C Festival Crasher @Milivoj Ćeran
142 R Giestflame Reservoir @Anna Christenson
141 U Flame Channeler @Véronique Meignaud
142 R Geistflame Reservoir @Anna Christenson
144 C Immolation @Olena Richards
146 R Light Up the Night @Wei Wei
147 U Lunar Frenzy @Alix Branwyn
154 U Play with Fire @Svetlin Velinov
163 C Tavern Ruffian @Zoltan Boros
164 C Thermo-Alchemist @Raymond Swanland
164 U Thermo-Alchemist @Raymond Swanland
165 U Village Watch @Nestor Ossandon Leal
166 U Voldaren Ambusher @Evyn Fong
168 R Augur of Autumn @Billy Christian
175 C Candlelit Cavalry @Viko Menezes
176 U Clear Shot @Craig J Spearing
178 U Contortionist Troupe @Jesper Ejsing
180 C Dawnhart Rejuvenator @Darren Tan
182 U Defend the Celestus @Andrey Kuzinskiy
188 C Howl of the Hunt @Josu Hernaiz
189 C Might of the Old Ways @Zezhou Chen
192 C Pestilent Wolf @Oriana Menendez
197 R Saryth, the Viper's Fang @Igor Kieryluk
199 C Snarling Wolf @Ilse Gort
205 U Turn the Earth @Alayna Danner
206 R Unnatural Growth @Svetlin Velinov
208 M Wrenn and Seven @Heonhwa Choe
211 M Arlinn, the Pack's Hope @Anna Steinbauer
212 U Bladestitched Skaab @Dave Kendall
214 U Corpse Cobble @Ravenna Tran
215 R Croaking Counterpart @Yeong-Hao Han
218 U Devoted Grafkeeper @Raoul Vitale
220 U Diregraf Rebirth @Irina Nordsol
221 U Faithful Mending @Caroline Gariba
222 U Fleshtaker @Kev Walker
224 R Galvanic Iteration @Johann Bodin
225 R Ghoulcaller's Harvest @Anna Steinbauer
229 U Join the Dance @Raoul Vitale
231 U Kessig Naturalist @Johan Grenier
232 R Liesa, Forgotten Archangel @Dmitry Burmak
236 R Rite of Harmony @Rovina Cai
240 M Sigarda, Champion of Light @Howard Lyon
246 R Tovolar, Dire Overlord @Chris Rahn
249 U Vampire Socialite @Suzanne Helmigh
252 R The Celestus @Jonas De Ro
257 R Pithing Needle @Ovidio Cartagena
260 R Deserted Beach @Jonas De Ro
263 R Haunted Ridge @Jonas De Ro
265 R Overgrown Farmland @Jonas De Ro
@@ -71,18 +109,34 @@ Prerelease=6 Boosters, 1 RareMythic+
283 R Overgrown Farmland @Donato Giancola
284 R Rockfall Vale @Piotr Dura
285 R Shipwreck Marsh @Steven Belledin
286 R Brutal Cathar @Steve Ellis
287 C Candlegrove Witch @Brigitte Roka
290 R Graveyard Trespasser @Tyler Crook
296 C Tavern Ruffian @Michael Walsh
297 U Village Watch @Andrea De Dominicis
304 R Saryth, the Viper's Fang
301 C Dawnhart Rejuvenator @Cabrol
304 R Saryth, the Viper's Fang @Tyler Crook
307 M Arlinn, the Pack's Hope @Emma Rios
310 U Kessig Naturalist @Rafael Albuquerque
311 R Tovolar, Dire Overlord @Michael Walsh
314 R Gisa, Glorious Resurrector @Cabrol
315 R Jadar, Ghoulcaller of Nephalia @DZO
319 R Liesa, Forgotten Archangel @Evan Cagle
323 M Sigarda, Champion of Light @N.C. Winters
355 R Giestflame Reservoir @Anna Christenson
326 R Curse of Silence @Irina Nordsol
327 M Enduring Angel @Irina Nordsol
344 R Champion of the Perished @Kekai Kotaki
345 R Curse of Leeches @Uriah Voth
355 R Geistflame Reservoir @Anna Christenson
356 R Light Up the Night @Wei Wei
365 R Unnatural Growth @Svetlin Velinov
368 R Can't Stay Away @Milivoj Ćeran
369 R Croaking Counterpart @Yeong-Hao Han
371 R Galvanic Iteration @Johann Bodin
374 R Rite of Harmony
372 R Ghoulcaller's Harvest @Anna Steinbauer
374 R Rite of Harmony @Rovina Cai
377 R The Celestus @Jonas De Ro
378 R Pithing Needle @Ovidio Cartagena
380 L Plains @Andreas Rocha
381 L Island @Andreas Rocha
382 L Swamp @Kasia 'Kafis' Zielińska
@@ -90,6 +144,7 @@ Prerelease=6 Boosters, 1 RareMythic+
384 L Forest @Andreas Rocha
385 R Champion of the Perished @Daarken
386 R Triskaidekaphile @Mathias Kollros
387 U Gavony Dawnguard @Micah Epstein
388 C Consider @Zezhou Chen
389 U Infernal Grasp @Naomi Baker
390 U Play with Fire @Svetlin Velinov

View File

@@ -2328,7 +2328,7 @@ lblRemoveAllCountersConfirm=Remove all counters?
lblRemoveNTargetCounterFromCardPayCostConfirm=Pay Cost: Remove {0} {1} counter from {2}?
lblRemoveCountersFromAInZoneCard=Remove counter(s) from a card in {0}
lblSacrificeCardConfirm=Sacrifice {0}?
lblSelectATargetToSacrifice=Select a {0} to sacrifice ({1} left)
lblSelectATargetToSacrifice=Select {0} to sacrifice ({1} left)
lblSelectOneOfCardsToTapAlreadyChosen=Select one of the cards to tap. Already chosen:
lblSelectACreatureToTap=Select a creature to tap.
lblEnoughValidCardNotToPayTheCost=Not enough valid cards left to tap to pay the cost.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 MiB

After

Width:  |  Height:  |  Size: 2.8 MiB

View File

@@ -0,0 +1,8 @@
Name:Bird
ManaCost:no cost
Types:Creature Bird
Colors:blue
PT:1/1
K:Flying
S:Mode$ CantBlockBy | ValidAttacker$ Creature.withoutFlying | ValidBlocker$ Creature.Self | Description$ This creature can block only creatures with flying.
Oracle:Flying\nThis creature can block only creatures with flying.

View File

@@ -0,0 +1,7 @@
Name:Zombie
ManaCost:no cost
Types:Creature Zombie
Colors:blue,black
PT:*/*
K:Menace
Oracle:Menace

View File

@@ -431,6 +431,31 @@ public enum FSkinProp {
IMG_CARDBG_WG (new int[] {684, 1496, 339, 496}, PropType.CARDBG),
IMG_CARDBG_WR (new int[] {1025, 1496, 339, 496}, PropType.CARDBG),
IMG_CARDBG_WU (new int[] {1366, 1496, 339, 496}, PropType.CARDBG),
//FOR PW BG
IMG_PWBG_B (new int[] {2, 1994, 339, 496}, PropType.CARDBG),
IMG_PWBG_BG (new int[] {343, 1994, 339, 496}, PropType.CARDBG),
IMG_PWBG_BR (new int[] {684, 1994, 339, 496}, PropType.CARDBG),
IMG_PWBG_C (new int[] {1025, 1994, 339, 496}, PropType.CARDBG),
IMG_PWBG_G (new int[] {1366, 1994, 339, 496}, PropType.CARDBG),
IMG_PWBG_M (new int[] {2, 2492, 339, 496}, PropType.CARDBG),
IMG_PWBG_R (new int[] {343, 2492, 339, 496}, PropType.CARDBG),
IMG_PWBG_RG (new int[] {684, 2492, 339, 496}, PropType.CARDBG),
IMG_PWBG_U (new int[] {1025, 2492, 339, 496}, PropType.CARDBG),
IMG_PWBG_UB (new int[] {1366, 2492, 339, 496}, PropType.CARDBG),
IMG_PWBG_UG (new int[] {2, 2990, 339, 496}, PropType.CARDBG),
IMG_PWBG_UR (new int[] {343, 2990, 339, 496}, PropType.CARDBG),
IMG_PWBG_W (new int[] {684, 2990, 339, 496}, PropType.CARDBG),
IMG_PWBG_WB (new int[] {1025, 2990, 339, 496}, PropType.CARDBG),
IMG_PWBG_WG (new int[] {1366, 2990, 339, 496}, PropType.CARDBG),
IMG_PWBG_WR (new int[] {2, 3488, 339, 496}, PropType.CARDBG),
IMG_PWBG_WU (new int[] {343, 3488, 339, 496}, PropType.CARDBG),
//NYX OVERLAY
IMG_NYX_B (new int[] {684, 3488, 339, 248}, PropType.CARDBG),
IMG_NYX_G (new int[] {1025, 3488, 339, 248}, PropType.CARDBG),
IMG_NYX_M (new int[] {1366, 3488, 339, 248}, PropType.CARDBG),
IMG_NYX_R (new int[] {684, 3736, 339, 248}, PropType.CARDBG),
IMG_NYX_U (new int[] {1025, 3736, 339, 248}, PropType.CARDBG),
IMG_NYX_W (new int[] {1366, 3736, 339, 248}, PropType.CARDBG),
IMG_FAV1 (new int[] {0, 0, 100, 100}, PropType.FAVICON),
IMG_FAV2 (new int[] {100, 0, 100, 100}, PropType.FAVICON),