diff --git a/.gitattributes b/.gitattributes index 16b950f8e3f..c73139e8c03 100644 --- a/.gitattributes +++ b/.gitattributes @@ -471,7 +471,6 @@ forge-gui/res/cardsfolder/a/arbalest_elite.txt svneol=native#text/plain forge-gui/res/cardsfolder/a/arbiter_of_knollridge.txt svneol=native#text/plain forge-gui/res/cardsfolder/a/arbor_colossus.txt -text forge-gui/res/cardsfolder/a/arbor_elf.txt svneol=native#text/plain -forge-gui/res/cardsfolder/a/arboria.txt -text forge-gui/res/cardsfolder/a/arc_blade.txt svneol=native#text/plain forge-gui/res/cardsfolder/a/arc_lightning.txt svneol=native#text/plain forge-gui/res/cardsfolder/a/arc_mage.txt svneol=native#text/plain diff --git a/forge-gui/res/cardsfolder/a/arboria.txt b/forge-gui/res/cardsfolder/a/arboria.txt deleted file mode 100644 index a0ec6ce72d0..00000000000 --- a/forge-gui/res/cardsfolder/a/arboria.txt +++ /dev/null @@ -1,12 +0,0 @@ -Name:Arboria -ManaCost:2 G G -Types:World Enchantment -S:Mode$ CantAttack | ValidCard$ Creature | Target$ Player.IsNotRemembered | Description$ Creatures can't attack a player unless that player cast a spell or put a nontoken permanent onto the battlefield during his or her last turn. -T:Mode$ Phase | Phase$ Upkeep | Execute$ TrigForget | Static$ True -SVar:TrigForget:DB$ Pump | ForgetObjects$ TriggeredPlayer -T:Mode$ SpellCast | ValidActivatingPlayer$ ActivePlayer | Execute$ TrigRemember | Static$ True -SVar:TrigRemember:DB$ Pump | RememberObjects$ TriggeredActivator -T:Mode$ ChangesZone | ValidCard$ Permanent.nonToken+ActivePlayerCtrl | Origin$ Any | Destination$ Battlefield | Execute$ TrigRemember2 | Static$ True -SVar:TrigRemember2:DB$ Pump | RememberObjects$ TriggeredCardController -SVar:Picture:http://www.wizards.com/global/images/magic/general/arboria.jpg -Oracle:Creatures can't attack a player unless that player cast a spell or put a nontoken permanent onto the battlefield during his or her last turn. diff --git a/forge-gui/res/cardsfolder/q/quicksilver_dragon.txt b/forge-gui/res/cardsfolder/q/quicksilver_dragon.txt index 0850707681e..d27c7a49ab0 100644 --- a/forge-gui/res/cardsfolder/q/quicksilver_dragon.txt +++ b/forge-gui/res/cardsfolder/q/quicksilver_dragon.txt @@ -4,7 +4,7 @@ Types:Creature Dragon PT:5/5 K:Flying K:Morph:4 U -A:AB$ ChangeTargets | Cost$ U | TargetType$ Spell | ValidTgts$ Card | TargetValidTargeting$ Card.Self | TargetsSingleTarget$ True | TargetRestriction$ Creature.Other | SpellDescription$ If target spell has only one target and that target is CARDNAME, change that spell's target to another creature. +A:AB$ ChangeTargets | Cost$ U | TargetType$ Spell | ValidTgts$ Card | ConditionTargetValidTargeting$ Card.Self | ConditionTargetsSingleTarget$ True | TargetRestriction$ Creature.Other | SpellDescription$ If target spell has only one target and that target is CARDNAME, change that spell's target to another creature. SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/quicksilver_dragon.jpg Oracle:Flying\n{U}: If target spell has only one target and that target is Quicksilver Dragon, change that spell's target to another creature.\nMorph {4}{U} (You may cast this face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.) diff --git a/forge-gui/src/main/java/forge/card/spellability/SpellAbilityCondition.java b/forge-gui/src/main/java/forge/card/spellability/SpellAbilityCondition.java index b19c17128f4..d320ca54d8f 100644 --- a/forge-gui/src/main/java/forge/card/spellability/SpellAbilityCondition.java +++ b/forge-gui/src/main/java/forge/card/spellability/SpellAbilityCondition.java @@ -25,6 +25,7 @@ import org.apache.commons.lang3.StringUtils; import forge.Card; import forge.CardLists; +import forge.GameObject; import forge.card.MagicColor; import forge.card.ability.AbilityUtils; import forge.card.cardfactory.CardFactoryUtil; @@ -164,6 +165,12 @@ public class SpellAbilityCondition extends SpellAbilityVariables { this.setSvarOperator(params.get("ConditionSVarCompare").substring(0, 2)); this.setSvarOperand(params.get("ConditionSVarCompare").substring(2)); } + if (params.containsKey("ConditionTargetValidTargeting")) { + this.setTargetValidTargeting(params.get("ConditionTargetValidTargeting")); + } + if (params.containsKey("ConditionTargetsSingleTarget")) { + this.setTargetsSingleTarget(true); + } } // setConditions @@ -310,6 +317,34 @@ public class SpellAbilityCondition extends SpellAbilityVariables { return false; } } + if (this.getTargetValidTargeting() != null) { + final TargetChoices matchTgt = sa.getTargets(); + if (matchTgt == null || matchTgt.getFirstTargetedSpell() == null + || matchTgt.getFirstTargetedSpell().getTargets() == null) { + return false; + } + + boolean result = false; + + for (final GameObject o : matchTgt.getFirstTargetedSpell().getTargets().getTargets()) { + if (o.isValid(this.getTargetValidTargeting().split(","), sa.getActivatingPlayer(), sa.getSourceCard())) { + result = true; + break; + } + } + + if (!result) { + return false; + } + } + if (this.targetsSingleTarget()) { + final TargetChoices matchTgt = sa.getTargets(); + if (matchTgt == null || matchTgt.getFirstTargetedSpell() == null + || matchTgt.getFirstTargetedSpell().getTargets() == null + || matchTgt.getFirstTargetedSpell().getTargets().getNumTargeted() != 1) { + return false; + } + } if (StringUtils.isNotEmpty(this.getManaSpent())) { byte manaSpent = MagicColor.fromName(getManaSpent()); // they always check for single color diff --git a/forge-gui/src/main/java/forge/card/spellability/SpellAbilityVariables.java b/forge-gui/src/main/java/forge/card/spellability/SpellAbilityVariables.java index 6c573cc813b..2b3a6ef7790 100644 --- a/forge-gui/src/main/java/forge/card/spellability/SpellAbilityVariables.java +++ b/forge-gui/src/main/java/forge/card/spellability/SpellAbilityVariables.java @@ -86,6 +86,8 @@ public class SpellAbilityVariables { this.lifeTotal = sav.getLifeTotal(); this.lifeAmount = sav.getLifeAmount(); this.manaSpent = sav.getManaSpent(); + this.targetValidTargeting = sav.getTargetValidTargeting(); + this.targetsSingleTarget = sav.targetsSingleTarget(); this.pwAbility = sav.isPwAbility(); } @@ -197,7 +199,12 @@ public class SpellAbilityVariables { /** The chosen colors string. */ private String chosenColors = null; + + /** The target valid targeting */ + private String targetValidTargeting = null; + /** The b targetsSingleTargeting */ + private boolean targetsSingleTarget = false; /** *

@@ -1032,4 +1039,32 @@ public class SpellAbilityVariables { return this.chosenColors; } + /** + * @return the targetValidTargeting + */ + public String getTargetValidTargeting() { + return targetValidTargeting; + } + + /** + * @param targetValidTargeting the targetValidTargeting to set + */ + public void setTargetValidTargeting(String targetValidTargeting) { + this.targetValidTargeting = targetValidTargeting; + } + + /** + * @return the targetsSingleTarget + */ + public boolean targetsSingleTarget() { + return targetsSingleTarget; + } + + /** + * @param b the targetsSingleTarget to set + */ + public void setTargetsSingleTarget(boolean b) { + this.targetsSingleTarget = b; + } + } // end class SpellAbilityVariables diff --git a/forge-gui/tools/PerSetTracking.py b/forge-gui/tools/PerSetTracking.py index 982cc298c12..bea799e6118 100755 --- a/forge-gui/tools/PerSetTracking.py +++ b/forge-gui/tools/PerSetTracking.py @@ -167,8 +167,9 @@ if __name__ == '__main__': ignoredSet = [ 'ASTRAL', 'ATH', 'BD', 'BR', 'CM1', 'DD2', 'DDC', 'DDD', 'DDE', 'DDF', - 'DDG', 'DDH', 'DDI', 'DDJ', 'DKM', 'DRB', 'DREAM', 'EVG', 'H09', 'ME2', - 'ME3', 'ME4', 'MED', 'PD2', 'PD3', 'SDC', 'UG', 'UGL', 'UNH', 'V09', 'V10', 'V11', 'V12', ''] + 'DDG', 'DDH', 'DDI', 'DDJ', 'DDK', 'DDL', 'DKM', 'DRB', 'DREAM', 'EVG', 'H09', 'ME2', + 'ME3', 'ME4', 'MED', 'PD2', 'PD3', 'SDC', 'UG', 'UGL', 'UNH', 'V09', 'V10', 'V11', 'V12', + 'V13', ''] for currentSet in setCodes : # Ignore any sets that we don't tabulate diff --git a/forge-gui/tools/formats.txt b/forge-gui/tools/formats.txt index b9162133fb9..d84d8a3b328 100644 --- a/forge-gui/tools/formats.txt +++ b/forge-gui/tools/formats.txt @@ -1,5 +1,5 @@ -Name:Standard|Sets:ISD, DKA, AVR, M13, RTR, GTC, DGM, M14 +Name:Standard|Sets:RTR, GTC, DGM, M14, THS Name:Extended|Sets:ZEN, WWK, ROE, M11, SOM, MBS, NPH, M12, ISD, DKA, AVR, M13, RTR, GTC, DGM, M14|Banned:Stoneforge Mystic; Jace, the Mind Sculptor; Ponder; Preordain; Mental Misstep -Name:Modern|Sets:8ED, MRD, DST, 5DN, CHK, BOK, SOK, 9ED, RAV, GPT, DIS, CSP, TSP, PLC, FUT, 10E, LRW, EVE, SHM, MOR, ALA, CFX, ARB, M10, ZEN, WWK, ROE, M11, SOM, MBS, NPH, M12, ISD, DKA, AVR, M13, RTR, GTC, DGM, M14 +Name:Modern|Sets:8ED, MRD, DST, 5DN, CHK, BOK, SOK, 9ED, RAV, GPT, DIS, CSP, TSP, PLC, FUT, 10E, LRW, EVE, SHM, MOR, ALA, CFX, ARB, M10, ZEN, WWK, ROE, M11, SOM, MBS, NPH, M12, ISD, DKA, AVR, M13, RTR, GTC, DGM, M14, THS Name:Legacy Name:Vintage \ No newline at end of file