From 20e250ae79651d400192153b172467620cd611a3 Mon Sep 17 00:00:00 2001 From: Sloth Date: Fri, 12 Oct 2012 21:25:53 +0000 Subject: [PATCH] - Improved AI using Detain abilities. --- res/cardsfolder/a/azorius_arrester.txt | 3 ++- res/cardsfolder/i/isperias_skywatch.txt | 3 ++- res/cardsfolder/s/soulsworn_spirit.txt | 3 ++- .../forge/card/abilityfactory/AbilityFactoryPump.java | 10 ++++++++-- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/res/cardsfolder/a/azorius_arrester.txt b/res/cardsfolder/a/azorius_arrester.txt index 3cf3a99f826..cac74fbe6e8 100644 --- a/res/cardsfolder/a/azorius_arrester.txt +++ b/res/cardsfolder/a/azorius_arrester.txt @@ -4,7 +4,8 @@ Types:Creature Human Soldier Text:no text PT:2/1 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ Detain | TriggerDescription$ When CARDNAME enters the battlefield, detain target creature an opponent controls. (Until your next turn, that creature can't attack or block and its activated abilities can't be activated.) -SVar:Detain:DB$Pump | KW$ HIDDEN CARDNAME can't attack or block. & HIDDEN CARDNAME's activated abilities can't be activated. | IsCurse$ True | UntilYourNextTurn$ True | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Select target creature your opponent controls to detain. +SVar:Detain:DB$ Pump | KW$ HIDDEN CARDNAME can't attack or block. & HIDDEN CARDNAME's activated abilities can't be activated. | IsCurse$ True | UntilYourNextTurn$ True | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Select target creature your opponent controls to detain. +SVar:PlayMain1:TRUE SVar:Rarity:Common SVar:Picture:http://www.wizards.com/global/images/magic/general/azorius_arrester.jpg SetInfo:RTR|Common|http://magiccards.info/scans/en/rtr/5.jpg diff --git a/res/cardsfolder/i/isperias_skywatch.txt b/res/cardsfolder/i/isperias_skywatch.txt index 5680ac29436..5c92e7e35c1 100644 --- a/res/cardsfolder/i/isperias_skywatch.txt +++ b/res/cardsfolder/i/isperias_skywatch.txt @@ -5,7 +5,8 @@ Text:no text PT:3/3 K:Flying T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ Detain | TriggerDescription$ When CARDNAME enters the battlefield, detain target creature an opponent controls. (Until your next turn, that creature can't attack or block and its activated abilities can't be activated.) -SVar:Detain:DB$Pump | KW$ HIDDEN CARDNAME can't attack or block. & HIDDEN CARDNAME's activated abilities can't be activated. | IsCurse$ True | UntilYourNextTurn$ True | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Select target creature your opponent controls to detain. +SVar:Detain:DB$ Pump | KW$ HIDDEN CARDNAME can't attack or block. & HIDDEN CARDNAME's activated abilities can't be activated. | IsCurse$ True | UntilYourNextTurn$ True | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Select target creature your opponent controls to detain. +SVar:PlayMain1:TRUE SVar:Rarity:Common SVar:Picture:http://www.wizards.com/global/images/magic/general/isperias_skywatch.jpg SetInfo:RTR|Common|http://magiccards.info/scans/en/rtr/43.jpg diff --git a/res/cardsfolder/s/soulsworn_spirit.txt b/res/cardsfolder/s/soulsworn_spirit.txt index e5724faf8f3..aed4d184b2e 100644 --- a/res/cardsfolder/s/soulsworn_spirit.txt +++ b/res/cardsfolder/s/soulsworn_spirit.txt @@ -5,7 +5,8 @@ Text:no text PT:2/1 K:Unblockable T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ Detain | TriggerDescription$ When CARDNAME enters the battlefield, detain target creature an opponent controls. (Until your next turn, that creature can't attack or block and its activated abilities can't be activated.) -SVar:Detain:DB$Pump | KW$ HIDDEN CARDNAME can't attack or block. & HIDDEN CARDNAME's activated abilities can't be activated. | IsCurse$ True | UntilYourNextTurn$ True | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Select target creature your opponent controls to detain. +SVar:Detain:DB$ Pump | KW$ HIDDEN CARDNAME can't attack or block. & HIDDEN CARDNAME's activated abilities can't be activated. | IsCurse$ True | UntilYourNextTurn$ True | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Select target creature your opponent controls to detain. +SVar:PlayMain1:TRUE SVar:Rarity:Uncommon SVar:Picture:http://www.wizards.com/global/images/magic/general/soulsworn_spirit.jpg SetInfo:RTR|Uncommon|http://magiccards.info/scans/en/rtr/51.jpg diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java index 6edf073339a..af10038ad09 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java @@ -328,6 +328,12 @@ public class AbilityFactoryPump { return false; } } else if (keyword.endsWith("CARDNAME can't attack or block.")) { + if (sa.getAbilityFactory().getMapParams().containsKey("UntilYourNextTurn")) { + if (CombatUtil.canAttack(card) || CombatUtil.canBlock(card, true)) { + return true; + } + return false; + } if (ph.isPlayerTurn(human)) { if (!CombatUtil.canAttack(card) || (card.getNetCombatDamage() <= 0) @@ -776,7 +782,6 @@ public class AbilityFactoryPump { else if (!list.isEmpty()) { final ArrayList keywords = this.keywords; final boolean addsKeywords = this.keywords.size() > 0; - if (addsKeywords) { list = CardLists.filter(list, new Predicate() { @Override @@ -966,7 +971,8 @@ public class AbilityFactoryPump { && !sa.isTrigger() && Singletons.getModel().getGameState().getPhaseHandler().getPhase().isAfter(PhaseType.COMBAT_DECLARE_BLOCKERS_INSTANT_ABILITY) && !(this.abilityFactory.isCurse() && (defense < 0)) - && !this.containsNonCombatKeyword(this.keywords)) { + && !this.containsNonCombatKeyword(this.keywords) + && !sa.getAbilityFactory().getMapParams().containsKey("UntilYourNextTurn")) { return false; }