diff --git a/res/cardsfolder/b/bosh_iron_golem.txt b/res/cardsfolder/b/bosh_iron_golem.txt index 6128f26923a..635bebc6bef 100644 --- a/res/cardsfolder/b/bosh_iron_golem.txt +++ b/res/cardsfolder/b/bosh_iron_golem.txt @@ -1,6 +1,5 @@ Name:Bosh, Iron Golem ManaCost:8 -ColorIdentity:Red Types:Legendary Artifact Creature Golem PT:6/7 K:Trample diff --git a/res/cardsfolder/m/memnarch.txt b/res/cardsfolder/m/memnarch.txt index f1048bd1d7d..5e8efff8ee3 100644 --- a/res/cardsfolder/m/memnarch.txt +++ b/res/cardsfolder/m/memnarch.txt @@ -1,6 +1,5 @@ Name:Memnarch ManaCost:7 -ColorIdentity:Blue Types:Legendary Artifact Creature Wizard PT:4/5 A:AB$ Animate | Cost$ 1 U U | ValidTgts$ Permanent | TgtPrompt$ Select target permanent | Types$ Artifact | Permanent$ True | SpellDescription$ Target permanent becomes an artifact in addition to its other types. (This effect lasts indefinitely.) diff --git a/res/cardsfolder/r/rhys_the_exiled.txt b/res/cardsfolder/r/rhys_the_exiled.txt index b46c8d02484..a6201bfb7c7 100644 --- a/res/cardsfolder/r/rhys_the_exiled.txt +++ b/res/cardsfolder/r/rhys_the_exiled.txt @@ -1,6 +1,5 @@ Name:Rhys the Exiled ManaCost:2 G -ColorIdentity:Green,Black Types:Legendary Creature Elf Warrior PT:3/2 T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigGainLife | TriggerDescription$ Whenever CARDNAME attacks, you gain 1 life for each Elf you control. diff --git a/res/cardsfolder/t/thelon_of_havenwood.txt b/res/cardsfolder/t/thelon_of_havenwood.txt index 9f9c3ac8c43..026df543744 100644 --- a/res/cardsfolder/t/thelon_of_havenwood.txt +++ b/res/cardsfolder/t/thelon_of_havenwood.txt @@ -1,6 +1,5 @@ Name:Thelon of Havenwood ManaCost:G G -ColorIdentity:Green,Black Types:Legendary Creature Elf Druid PT:2/2 S:Mode$ Continuous | Affected$ Creature.Fungus | AffectedZone$ Battlefield | AddPower$ AffectedX | AddToughness$ AffectedX | Description$ Each Fungus creature gets +1/+1 for each spore counter on it. diff --git a/src/main/java/forge/card/CardFace.java b/src/main/java/forge/card/CardFace.java index 9158c28d22b..dd2d75df76b 100644 --- a/src/main/java/forge/card/CardFace.java +++ b/src/main/java/forge/card/CardFace.java @@ -29,7 +29,6 @@ final class CardFace implements ICardFace { private CardType type = null; private ManaCost manaCost = ManaCost.NO_COST; private ColorSet color = null; - private ColorSet colorIdentity = null; private String oracleText = null; private int iPower = -1; @@ -59,15 +58,7 @@ final class CardFace implements ICardFace { @Override public CardType getType() { return this.type; } @Override public ManaCost getManaCost() { return this.manaCost; } @Override public ColorSet getColor() { return this.color; } - - @Override - public ColorSet getColorIdentity() { - if(this.colorIdentity != null) - return this.colorIdentity; - - return this.color; - } - + // these are raw and unparsed used for Card creation @Override public Iterable getKeywords() { return keywords; } @Override public Iterable getAbilities() { return abilities; } @@ -86,7 +77,6 @@ final class CardFace implements ICardFace { public void setType(CardType type0) { this.type = type0; } public void setManaCost(ManaCost manaCost0) { this.manaCost = manaCost0; } public void setColor(ColorSet color0) { this.color = color0; } - public void setColorIdentity(ColorSet color0) { this.colorIdentity = color0; } public void setOracleText(String text) { this.oracleText = text; } public void setInitialLoyalty(int value) { this.initialLoyalty = value; } diff --git a/src/main/java/forge/card/CardRules.java b/src/main/java/forge/card/CardRules.java index b7302e01037..2eb63c92df0 100644 --- a/src/main/java/forge/card/CardRules.java +++ b/src/main/java/forge/card/CardRules.java @@ -23,6 +23,7 @@ import java.util.Map.Entry; import java.util.Set; import java.util.TreeMap; +import forge.CardColor; import forge.card.mana.ManaCost; /** @@ -39,6 +40,8 @@ public final class CardRules implements ICardCharacteristics { private final Map setsPrinted = new TreeMap(String.CASE_INSENSITIVE_ORDER); private CardAiHints aiHints; + + private ColorSet colorIdentity = null; public CardRules(ICardFace[] faces, CardSplitType altMode, CardAiHints cah, Map sets) { splitType = altMode; @@ -57,6 +60,49 @@ public final class CardRules implements ICardCharacteristics { System.err.println(getName() + " was not assigned any set."); setsPrinted.put(CardEdition.UNKNOWN.getCode(), new CardInSet(CardRarity.Common, 1) ); } + + //Calculate Color Identity + byte colMask = calculateColorIdentity(mainPart); + + if(otherPart != null) + { + colMask |= calculateColorIdentity(otherPart); + } + colorIdentity = ColorSet.fromMask(colMask); + } + + private byte calculateColorIdentity(ICardFace face) + { + byte res = face.getManaCost() == null ? 0 : face.getManaCost().getColorProfile(); + boolean isReminder = false; + boolean isSymbol = false; + for(char c : face.getOracleText().toCharArray()) { + switch(c) + { + case('('): isReminder = true; break; + case(')'): isReminder = false; break; + case('{'): isSymbol = true; break; + case('}'): isSymbol = false; break; + default: + if(isSymbol && !isReminder) { + switch(c) + { + case('W'): res |= MagicColor.WHITE; break; + case('U'): res |= MagicColor.BLUE; break; + case('B'): res |= MagicColor.BLACK; break; + case('R'): res |= MagicColor.RED; break; + case('G'): res |= MagicColor.GREEN; break; + } + } + else + { + continue; + } + break; + } + } + + return res; } public boolean isTraditional() { @@ -178,16 +224,8 @@ public final class CardRules implements ICardCharacteristics { return null; } - @Override public ColorSet getColorIdentity() { - if(this.otherPart != null) - { - return ColorSet.fromMask(mainPart.getColorIdentity().getColor() | otherPart.getColorIdentity().getColor()); - } - else - { - return mainPart.getColorIdentity(); - } + return colorIdentity; } } diff --git a/src/main/java/forge/card/CardRulesReader.java b/src/main/java/forge/card/CardRulesReader.java index 9b57188c3fb..fb1ff50e9c2 100644 --- a/src/main/java/forge/card/CardRulesReader.java +++ b/src/main/java/forge/card/CardRulesReader.java @@ -138,12 +138,6 @@ public class CardRulesReader { ColorSet newCol = ColorSet.fromNames(value.split(",")); this.faces[this.curFace].setColor(newCol); } - else if ("ColorIdentity".equals(key)) { - // This is forge.card.CardColor not forge.CardColor. - // Why do we have two classes with the same name? - ColorSet newCol = ColorSet.fromNames(value.split(",")); - this.faces[this.curFace].setColorIdentity(newCol); - } break; case 'D': diff --git a/src/main/java/forge/card/ICardCharacteristics.java b/src/main/java/forge/card/ICardCharacteristics.java index b38923225be..3b97955f77d 100644 --- a/src/main/java/forge/card/ICardCharacteristics.java +++ b/src/main/java/forge/card/ICardCharacteristics.java @@ -7,7 +7,6 @@ public interface ICardCharacteristics { CardType getType(); ManaCost getManaCost(); ColorSet getColor(); - ColorSet getColorIdentity(); int getIntPower(); int getIntToughness();