From f6bfe744e3697ac38cc746e98d94ff131b2d40b1 Mon Sep 17 00:00:00 2001 From: swordshine Date: Mon, 11 Mar 2013 00:27:12 +0000 Subject: [PATCH 1/3] - Updated GTC guildpack --- res/decks/cube/GtcGuildDimir.dck | 1 + res/decks/cube/GtcGuildOrzhov.dck | 1 + res/decks/cube/GtcGuildSimic.dck | 1 + 3 files changed, 3 insertions(+) diff --git a/res/decks/cube/GtcGuildDimir.dck b/res/decks/cube/GtcGuildDimir.dck index 76aec44c76d..5191e001ebe 100644 --- a/res/decks/cube/GtcGuildDimir.dck +++ b/res/decks/cube/GtcGuildDimir.dck @@ -24,6 +24,7 @@ Name=GtcGuildDimir 1 Illness in the Ranks|GTC 1 Incursion Specialist|GTC 1 Keymaster Rogue|GTC +1 Killing Glare|GTC 1 Last Thoughts|GTC 1 Lazav, Dimir Mastermind|GTC 1 Leyline Phantom|GTC diff --git a/res/decks/cube/GtcGuildOrzhov.dck b/res/decks/cube/GtcGuildOrzhov.dck index 2208cbda43a..36fce50442e 100644 --- a/res/decks/cube/GtcGuildOrzhov.dck +++ b/res/decks/cube/GtcGuildOrzhov.dck @@ -29,6 +29,7 @@ Name=GtcGuildOrzhov 1 High Priest of Penance|GTC 1 Illness in the Ranks|GTC 1 Immortal Servitude|GTC +1 Killing Glare|GTC 1 Kingpin's Pet|GTC 1 Knight of Obligation|GTC 1 Knight Watch|GTC diff --git a/res/decks/cube/GtcGuildSimic.dck b/res/decks/cube/GtcGuildSimic.dck index a4e425940f8..4517763b434 100644 --- a/res/decks/cube/GtcGuildSimic.dck +++ b/res/decks/cube/GtcGuildSimic.dck @@ -6,6 +6,7 @@ Name=GtcGuildSimic 1 Agoraphobia|GTC 1 Alpha Authority|GTC 1 Biomass Mutation|GTC +1 Bioshift|GTC 1 Biovisionary|GTC 1 Burst of Strength|GTC 1 Clinging Anemones|GTC From 63453fec210e9030e0a740afa5977c7043d1ff3f Mon Sep 17 00:00:00 2001 From: swordshine Date: Mon, 11 Mar 2013 00:41:25 +0000 Subject: [PATCH 2/3] - Added Chain Lightning, Chain of Vapor and Vision Charm --- .gitattributes | 3 +++ res/cardsfolder/c/chain_lightning.txt | 10 ++++++++++ res/cardsfolder/c/chain_of_vapor.txt | 8 ++++++++ res/cardsfolder/v/vision_charm.txt | 16 ++++++++++++++++ .../java/forge/card/ability/AbilityUtils.java | 4 +++- 5 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 res/cardsfolder/c/chain_lightning.txt create mode 100644 res/cardsfolder/c/chain_of_vapor.txt create mode 100644 res/cardsfolder/v/vision_charm.txt diff --git a/.gitattributes b/.gitattributes index 3b354d4057c..3765233efee 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1616,6 +1616,8 @@ res/cardsfolder/c/cessation.txt svneol=native#text/plain res/cardsfolder/c/ceta_disciple.txt svneol=native#text/plain res/cardsfolder/c/ceta_sanctuary.txt svneol=native#text/plain res/cardsfolder/c/cetavolver.txt -text +res/cardsfolder/c/chain_lightning.txt -text +res/cardsfolder/c/chain_of_vapor.txt -text res/cardsfolder/c/chain_reaction.txt svneol=native#text/plain res/cardsfolder/c/chainbreaker.txt svneol=native#text/plain res/cardsfolder/c/chained_throatseeker.txt svneol=native#text/plain @@ -11699,6 +11701,7 @@ res/cardsfolder/v/viscerid_drone.txt -text res/cardsfolder/v/viscid_lemures.txt svneol=native#text/plain res/cardsfolder/v/viseling.txt svneol=native#text/plain res/cardsfolder/v/vish_kal_blood_arbiter.txt -text +res/cardsfolder/v/vision_charm.txt -text res/cardsfolder/v/vision_skeins.txt svneol=native#text/plain res/cardsfolder/v/visions.txt svneol=native#text/plain res/cardsfolder/v/visions_of_beyond.txt svneol=native#text/plain diff --git a/res/cardsfolder/c/chain_lightning.txt b/res/cardsfolder/c/chain_lightning.txt new file mode 100644 index 00000000000..bdce8fb61b0 --- /dev/null +++ b/res/cardsfolder/c/chain_lightning.txt @@ -0,0 +1,10 @@ +Name:Chain Lightning +ManaCost:R +Types:Sorcery +A:SP$ DealDamage | Cost$ R | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | NumDmg$ 3 | SubAbility$ DBCopy1 | SpellDescription$ CARDNAME deals 3 damage to target creature or player. Then that player or that creature's controller may pay R R. If the player does, he or she may copy this spell and may choose a new target for that copy. +SVar:DBCopy1:DB$ Play | Defined$ Self | Controller$ TargetedController | WithoutManaCost$ True | CopyCard$ True | UnlessPayer$ TargetedController | UnlessCost$ R R | UnlessSwitched$ True | ConditionDefined$ Targeted | ConditionPresent$ Creature | ConditionCompare$ GE1 | SubAbility$ DBCopy2 | StackDescription$ None +SVar:DBCopy2:DB$ Play | Defined$ Self | Controller$ Targeted | WithoutManaCost$ True | CopyCard$ True | UnlessPayer$ Targeted | UnlessCost$ R R | UnlessSwitched$ True | ConditionDefined$ Targeted | ConditionPresent$ Creature | ConditionCompare$ EQ0 | StackDescription$ None +SVar:Picture:http://www.wizards.com/global/images/magic/general/chain_lightning.jpg +Oracle:Chain Lightning deals 3 damage to target creature or player. Then that player or that creature's controller may pay {R}{R}. If the player does, he or she may copy this spell and may choose a new target for that copy. +SetInfo:LEG Common +SetInfo:PD2 Common \ No newline at end of file diff --git a/res/cardsfolder/c/chain_of_vapor.txt b/res/cardsfolder/c/chain_of_vapor.txt new file mode 100644 index 00000000000..56a2de1c3c9 --- /dev/null +++ b/res/cardsfolder/c/chain_of_vapor.txt @@ -0,0 +1,8 @@ +Name:Chain of Vapor +ManaCost:U +Types:Instant +A:SP$ ChangeZone | Cost$ U | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBCopy | StackDescription$ SpellDescription | SpellDescription$ Return target nonland permanent to its owner's hand. Then that permanent's controller may sacrifice a land. If the player does, he or she may copy this spell and may choose a new target for that copy. +SVar:DBCopy:DB$ Play | Defined$ Self | Controller$ TargetedController | WithoutManaCost$ True | CopyCard$ True | UnlessPayer$ TargetedController | UnlessCost$ Sac<1/Land> | UnlessSwitched$ True | StackDescription$ None +SVar:Picture:http://www.wizards.com/global/images/magic/general/chain_of_vapor.jpg +Oracle:Return target nonland permanent to its owner's hand. Then that permanent's controller may sacrifice a land. If the player does, he or she may copy this spell and may choose a new target for that copy. +SetInfo:ONS Uncommon \ No newline at end of file diff --git a/res/cardsfolder/v/vision_charm.txt b/res/cardsfolder/v/vision_charm.txt new file mode 100644 index 00000000000..9bcef7c8368 --- /dev/null +++ b/res/cardsfolder/v/vision_charm.txt @@ -0,0 +1,16 @@ +Name:Vision Charm +ManaCost:U +Types:Instant +Text:no text +A:SP$ Charm | Cost$ U | Choices$ MillOpp,ChangeType,PhaseArtifact | CharmNum$ 1 | SpellDescription$ Choose one - Target player puts the top four cards of his or her library into his or her graveyard; or choose a land type and a basic land type, and each land of the first chosen type becomes the second chosen type until end of turn; or target artifact phases out. (While it's phased out, it's treated as though it doesn't exist. It phases in before its controller untaps during his or her next untap step.) +SVar:MillOpp:DB$ Mill | NumCards$ 4 | ValidTgts$ Player | TgtPrompt$ Choose a player | SpellDescription$ Target player puts the top four cards of his or her library into his or her graveyard. +SVar:ChangeType:DB$ ChooseType | Defined$ You | Type$ Land | SubAbility$ RemFirstLand | SpellDescription$ Choose a land type and a basic land type, and each land of the first chosen type becomes the second chosen type until end of turn. +SVar:RemFirstLand:DB$ PumpAll | ValidCards$ Land.ChosenType | RememberAllPumped$ True | SubAbility$ ChooseType2 +SVar:ChooseType2:DB$ ChooseType | Defined$ You | Type$ Basic Land | AILogic$ MostNeededType | SubAbility$ AnimateFirst +SVar:AnimateFirst:DB$ AnimateAll | ValidCards$ Land.IsRemembered | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:PhaseArtifact:DB$ Phases | ValidTgts$ Artifact | TgtPrompt$ Choose a artifact | SpellDescription$ Target artifact phases out. +SVar:RemAIDeck:True +SVar:Picture:http://www.wizards.com/global/images/magic/general/vision_charm.jpg +Oracle:Choose one - Target player puts the top four cards of his or her library into his or her graveyard; or choose a land type and a basic land type, and each land of the first chosen type becomes the second chosen type until end of turn; or target artifact phases out. (While it's phased out, it's treated as though it doesn't exist. It phases in before its controller untaps during his or her next untap step.) +SetInfo:VIS Common \ No newline at end of file diff --git a/src/main/java/forge/card/ability/AbilityUtils.java b/src/main/java/forge/card/ability/AbilityUtils.java index 85ffcff32c3..09c3269fd9a 100644 --- a/src/main/java/forge/card/ability/AbilityUtils.java +++ b/src/main/java/forge/card/ability/AbilityUtils.java @@ -1201,7 +1201,9 @@ public class AbilityUtils { && ComputerUtilCost.checkDamageCost(payer, ability.getPayCosts(), source, 4) && ComputerUtilCost.checkDiscardCost(payer, ability.getPayCosts(), source) && (!source.getName().equals("Tyrannize") || payer.getCardsIn(ZoneType.Hand).size() > 2) - && (!source.getName().equals("Breaking Point") || payer.getCreaturesInPlay().size() > 1)) { + && (!source.getName().equals("Breaking Point") || payer.getCreaturesInPlay().size() > 1) + && (!source.getName().equals("Chain of Vapor") + || (payer.getOpponent().getCreaturesInPlay().size() > 0 && payer.getLandsInPlay().size() > 3))) { // AI was crashing because the blank ability used to pay costs // Didn't have any of the data on the original SA to pay dependant costs return true; From 1ec1bceedb4fda8f12769d01e6a8b78facd5e4a5 Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Mon, 11 Mar 2013 09:35:40 +0000 Subject: [PATCH 3/3] fixes NPE at getCmc --- src/main/java/forge/Card.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index 8bb91d18158..23c9a1429b5 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -9195,7 +9195,7 @@ public class Card extends GameEntity implements Comparable { int requestedCMC = 0; - if (getRules().getSplitType() == CardSplitType.Split) { + if (getRules() != null && getRules().getSplitType() == CardSplitType.Split) { switch(mode) { case CurrentSideCMC: // TODO: test if this returns combined CMC for the full face (then get rid of CombinedCMC mode?)