- Improved AI attacking with creatures with "becomes blocked" triggers.

This commit is contained in:
Sloth
2016-02-20 12:11:44 +00:00
parent be01e1d927
commit 98d46755e3
18 changed files with 37 additions and 12 deletions

View File

@@ -200,6 +200,10 @@ public class AiAttackController {
return false; return false;
} }
if ("TRUE".equals(attacker.getSVar("HasAttackEffect"))) {
return true;
}
final Player opp = this.defendingOpponent; final Player opp = this.defendingOpponent;
if (ComputerUtilCombat.damageIfUnblocked(attacker, opp, combat, true) > 0) { if (ComputerUtilCombat.damageIfUnblocked(attacker, opp, combat, true) > 0) {
return true; return true;
@@ -918,7 +922,8 @@ public class AiAttackController {
} }
boolean hasAttackEffect = attacker.getSVar("HasAttackEffect").equals("TRUE") || attacker.hasStartOfKeyword("Annihilator"); boolean hasAttackEffect = attacker.getSVar("HasAttackEffect").equals("TRUE") || attacker.hasStartOfKeyword("Annihilator");
// is there a gain in attacking even when the blocker is not killed (Lifelink, Wither,...) // is there a gain in attacking even when the blocker is not killed (Lifelink, Wither,...)
boolean hasCombatEffect = attacker.getSVar("HasCombatEffect").equals("TRUE"); boolean hasCombatEffect = attacker.getSVar("HasCombatEffect").equals("TRUE")
|| "Blocked".equals(attacker.getSVar("HasAttackEffect"));
if (!hasCombatEffect) { if (!hasCombatEffect) {
for (String keyword : attacker.getKeywords()) { for (String keyword : attacker.getKeywords()) {
if (keyword.equals("Wither") || keyword.equals("Infect") || keyword.equals("Lifelink")) { if (keyword.equals("Wither") || keyword.equals("Infect") || keyword.equals("Lifelink")) {

View File

@@ -1763,6 +1763,10 @@ public class ComputerUtilCombat {
} }
} }
if (attacker.getName().equals("Elven Warhounds")) {
return true;
}
int flankingMagnitude = 0; int flankingMagnitude = 0;
if (attacker.hasKeyword("Flanking") && !blocker.hasKeyword("Flanking")) { if (attacker.hasKeyword("Flanking") && !blocker.hasKeyword("Flanking")) {

View File

@@ -4,5 +4,6 @@ Types:Creature Human Mercenary
PT:2/2 PT:2/2
T:Mode$ AttackerBlocked | ValidCard$ Card.Self | Execute$ TrigDiscard | TriggerDescription$ Whenever CARDNAME becomes blocked, defending player discards a card. T:Mode$ AttackerBlocked | ValidCard$ Card.Self | Execute$ TrigDiscard | TriggerDescription$ Whenever CARDNAME becomes blocked, defending player discards a card.
SVar:TrigDiscard:AB$ Discard | Cost$ 0 | Defined$ DefendingPlayer | NumCards$ 1 | Mode$ TgtChoose SVar:TrigDiscard:AB$ Discard | Cost$ 0 | Defined$ DefendingPlayer | NumCards$ 1 | Mode$ TgtChoose
SVar:HasAttackEffect:Blocked
SVar:Picture:http://www.wizards.com/global/images/magic/general/alley_grifters.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/alley_grifters.jpg
Oracle:Whenever Alley Grifters becomes blocked, defending player discards a card. Oracle:Whenever Alley Grifters becomes blocked, defending player discards a card.

View File

@@ -4,5 +4,6 @@ Types:Creature Nautilus Beast
PT:2/2 PT:2/2
T:Mode$ AttackerBlocked | ValidCard$ Card.Self | OptionalDecider$ You | Execute$ TrigDraw | TriggerDescription$ Whenever CARDNAME becomes blocked, you may draw a card. T:Mode$ AttackerBlocked | ValidCard$ Card.Self | OptionalDecider$ You | Execute$ TrigDraw | TriggerDescription$ Whenever CARDNAME becomes blocked, you may draw a card.
SVar:TrigDraw:AB$ Draw | Cost$ 0 | Defined$ You | NumCards$ 1 SVar:TrigDraw:AB$ Draw | Cost$ 0 | Defined$ You | NumCards$ 1
SVar:HasAttackEffect:Blocked
SVar:Picture:http://www.wizards.com/global/images/magic/general/chambered_nautilus.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/chambered_nautilus.jpg
Oracle:Whenever Chambered Nautilus becomes blocked, you may draw a card. Oracle:Whenever Chambered Nautilus becomes blocked, you may draw a card.

View File

@@ -4,5 +4,6 @@ Types:Creature Human Advisor
PT:1/1 PT:1/1
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDiscard | TriggerDescription$ When CARDNAME enters the battlefield, target opponent discards a card. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDiscard | TriggerDescription$ When CARDNAME enters the battlefield, target opponent discards a card.
SVar:TrigDiscard:AB$ Discard | Cost$ 0 | ValidTgts$ Opponent | TgtPrompt$ Select an opponent | NumCards$ 1 | Mode$ TgtChoose SVar:TrigDiscard:AB$ Discard | Cost$ 0 | ValidTgts$ Opponent | TgtPrompt$ Select an opponent | NumCards$ 1 | Mode$ TgtChoose
SVar:HasAttackEffect:Blocked
SVar:Picture:http://www.wizards.com/global/images/magic/general/corrupt_court_official.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/corrupt_court_official.jpg
Oracle:When Corrupt Court Official enters the battlefield, target opponent discards a card. Oracle:When Corrupt Court Official enters the battlefield, target opponent discards a card.

View File

@@ -4,5 +4,6 @@ Types:Creature Beast
PT:2/4 PT:2/4
T:Mode$ AttackerBlocked | ValidCard$ Card.Self | Execute$ TrigGain | TriggerDescription$ Whenever CARDNAME becomes blocked, you gain 2 life. T:Mode$ AttackerBlocked | ValidCard$ Card.Self | Execute$ TrigGain | TriggerDescription$ Whenever CARDNAME becomes blocked, you gain 2 life.
SVar:TrigGain:AB$ GainLife | Cost$ 0 | Defined$ You | LifeAmount$ 2 SVar:TrigGain:AB$ GainLife | Cost$ 0 | Defined$ You | LifeAmount$ 2
SVar:HasAttackEffect:Blocked
SVar:Picture:http://www.wizards.com/global/images/magic/general/deepwood_tantiv.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/deepwood_tantiv.jpg
Oracle:Whenever Deepwood Tantiv becomes blocked, you gain 2 life. Oracle:Whenever Deepwood Tantiv becomes blocked, you gain 2 life.

View File

@@ -4,5 +4,6 @@ Types:Creature Yeti Mutant
PT:3/3 PT:3/3
T:Mode$ AttackerBlocked | ValidCard$ Card.Self | OptionalDecider$ You | Execute$ TrigDraw | TriggerDescription$ Whenever CARDNAME becomes blocked, you may draw two cards. T:Mode$ AttackerBlocked | ValidCard$ Card.Self | OptionalDecider$ You | Execute$ TrigDraw | TriggerDescription$ Whenever CARDNAME becomes blocked, you may draw two cards.
SVar:TrigDraw:AB$ Draw | Cost$ 0 | Defined$ You | NumCards$ 2 SVar:TrigDraw:AB$ Draw | Cost$ 0 | Defined$ You | NumCards$ 2
SVar:HasAttackEffect:Blocked
SVar:Picture:http://www.wizards.com/global/images/magic/general/drelnoch.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/drelnoch.jpg
Oracle:Whenever Drelnoch becomes blocked, you may draw two cards. Oracle:Whenever Drelnoch becomes blocked, you may draw two cards.

View File

@@ -4,5 +4,6 @@ Types:Snow Creature Wolverine Beast
PT:1/1 PT:1/1
T:Mode$ AttackerBlocked | ValidCard$ Card.Self | OptionalDecider$ You | Execute$ TrigDealDamage | TriggerDescription$ Whenever CARDNAME becomes blocked, you may have it deal 1 damage to target creature or player. T:Mode$ AttackerBlocked | ValidCard$ Card.Self | OptionalDecider$ You | Execute$ TrigDealDamage | TriggerDescription$ Whenever CARDNAME becomes blocked, you may have it deal 1 damage to target creature or player.
SVar:TrigDealDamage:AB$ DealDamage | Cost$ 0 | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | NumDmg$ 1 SVar:TrigDealDamage:AB$ DealDamage | Cost$ 0 | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | NumDmg$ 1
SVar:HasAttackEffect:Blocked
SVar:Picture:http://www.wizards.com/global/images/magic/general/karplusan_wolverine.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/karplusan_wolverine.jpg
Oracle:Whenever Karplusan Wolverine becomes blocked, you may have it deal 1 damage to target creature or player. Oracle:Whenever Karplusan Wolverine becomes blocked, you may have it deal 1 damage to target creature or player.

View File

@@ -4,5 +4,6 @@ Types:Creature Fish
PT:1/1 PT:1/1
T:Mode$ AttackerBlockedByCreature | ValidCard$ Card.Self | ValidBlocker$ Creature | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever CARDNAME becomes blocked by a creature, put a -1/-1 counter on that creature. T:Mode$ AttackerBlockedByCreature | ValidCard$ Card.Self | ValidBlocker$ Creature | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever CARDNAME becomes blocked by a creature, put a -1/-1 counter on that creature.
SVar:TrigPutCounter:AB$ PutCounter | Cost$ 0 | Defined$ TriggeredBlocker | CounterType$ M1M1 | CounterNum$ 1 | IsCurse$ True SVar:TrigPutCounter:AB$ PutCounter | Cost$ 0 | Defined$ TriggeredBlocker | CounterType$ M1M1 | CounterNum$ 1 | IsCurse$ True
SVar:HasAttackEffect:Blocked
SVar:Picture:http://www.wizards.com/global/images/magic/general/quagmire_lamprey.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/quagmire_lamprey.jpg
Oracle:Whenever Quagmire Lamprey becomes blocked by a creature, put a -1/-1 counter on that creature. Oracle:Whenever Quagmire Lamprey becomes blocked by a creature, put a -1/-1 counter on that creature.

View File

@@ -4,5 +4,6 @@ Types:Creature Insect
PT:4/5 PT:4/5
T:Mode$ AttackerBlocked | ValidCard$ Card.Self | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigDestroy | TriggerDescription$ Whenever CARDNAME becomes blocked, you may destroy target artifact or enchantment defending player controls. T:Mode$ AttackerBlocked | ValidCard$ Card.Self | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigDestroy | TriggerDescription$ Whenever CARDNAME becomes blocked, you may destroy target artifact or enchantment defending player controls.
SVar:TrigDestroy:AB$ Destroy | Cost$ 0 | ValidTgts$ Artifact.DefenderCtrl,Enchantment.DefenderCtrl | TgtPrompt$ Select target artifact or enchantment defending player control SVar:TrigDestroy:AB$ Destroy | Cost$ 0 | ValidTgts$ Artifact.DefenderCtrl,Enchantment.DefenderCtrl | TgtPrompt$ Select target artifact or enchantment defending player control
SVar:HasAttackEffect:Blocked
SVar:Picture:http://www.wizards.com/global/images/magic/general/rust_scarab.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/rust_scarab.jpg
Oracle:Whenever Rust Scarab becomes blocked, you may destroy target artifact or enchantment defending player controls. Oracle:Whenever Rust Scarab becomes blocked, you may destroy target artifact or enchantment defending player controls.

View File

@@ -4,5 +4,6 @@ Types:Creature Horse
PT:1/1 PT:1/1
T:Mode$ AttackerBlocked | ValidCard$ Card.Self | Execute$ TrigGain | TriggerDescription$ Whenever CARDNAME becomes blocked, you gain 1 life. T:Mode$ AttackerBlocked | ValidCard$ Card.Self | Execute$ TrigGain | TriggerDescription$ Whenever CARDNAME becomes blocked, you gain 1 life.
SVar:TrigGain:AB$ GainLife | Cost$ 0 | Defined$ You | LifeAmount$ 1 SVar:TrigGain:AB$ GainLife | Cost$ 0 | Defined$ You | LifeAmount$ 1
SVar:HasAttackEffect:Blocked
SVar:Picture:http://www.wizards.com/global/images/magic/general/sacred_prey.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/sacred_prey.jpg
Oracle:Whenever Sacred Prey becomes blocked, you gain 1 life. Oracle:Whenever Sacred Prey becomes blocked, you gain 1 life.

View File

@@ -4,5 +4,6 @@ Types:Creature Merfolk
PT:1/1 PT:1/1
T:Mode$ AttackerBlocked | ValidCard$ Card.Self | OptionalDecider$ You | Execute$ TrigDraw | TriggerDescription$ Whenever CARDNAME becomes blocked, you may draw three cards. T:Mode$ AttackerBlocked | ValidCard$ Card.Self | OptionalDecider$ You | Execute$ TrigDraw | TriggerDescription$ Whenever CARDNAME becomes blocked, you may draw three cards.
SVar:TrigDraw:AB$ Draw | Cost$ 0 | Defined$ You | NumCards$ 3 SVar:TrigDraw:AB$ Draw | Cost$ 0 | Defined$ You | NumCards$ 3
SVar:HasAttackEffect:Blocked
SVar:Picture:http://www.wizards.com/global/images/magic/general/saprazzan_heir.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/saprazzan_heir.jpg
Oracle:Whenever Saprazzan Heir becomes blocked, you may draw three cards. Oracle:Whenever Saprazzan Heir becomes blocked, you may draw three cards.

View File

@@ -4,5 +4,6 @@ Types:Creature Human Warrior
PT:2/2 PT:2/2
T:Mode$ AttackerBlocked | ValidCard$ Card.Self | Execute$ TrigDiscard | TriggerDescription$ Whenever CARDNAME becomes blocked, defending player discards a card. T:Mode$ AttackerBlocked | ValidCard$ Card.Self | Execute$ TrigDiscard | TriggerDescription$ Whenever CARDNAME becomes blocked, defending player discards a card.
SVar:TrigDiscard:AB$ Discard | Cost$ 0 | Defined$ DefendingPlayer | NumCards$ 1 | Mode$ TgtChoose SVar:TrigDiscard:AB$ Discard | Cost$ 0 | Defined$ DefendingPlayer | NumCards$ 1 | Mode$ TgtChoose
SVar:HasAttackEffect:Blocked
SVar:Picture:http://www.wizards.com/global/images/magic/general/slate_street_ruffian.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/slate_street_ruffian.jpg
Oracle:Whenever Slate Street Ruffian becomes blocked, defending player discards a card. Oracle:Whenever Slate Street Ruffian becomes blocked, defending player discards a card.

View File

@@ -6,5 +6,6 @@ T:Mode$ AttackerBlocked | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDesc
SVar:TrigDraw:AB$ Draw | Cost$ 0 | Defined$ You | NumCards$ 1 SVar:TrigDraw:AB$ Draw | Cost$ 0 | Defined$ You | NumCards$ 1
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigPutCounter | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, put a +1/+1 counter on it. T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigPutCounter | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, put a +1/+1 counter on it.
SVar:TrigPutCounter:AB$ PutCounter | Cost$ 0 | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 SVar:TrigPutCounter:AB$ PutCounter | Cost$ 0 | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1
SVar:HasAttackEffect:Blocked
SVar:Picture:http://www.wizards.com/global/images/magic/general/slith_strider.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/slith_strider.jpg
Oracle:Whenever Slith Strider becomes blocked, draw a card.\nWhenever Slith Strider deals combat damage to a player, put a +1/+1 counter on it. Oracle:Whenever Slith Strider becomes blocked, draw a card.\nWhenever Slith Strider deals combat damage to a player, put a +1/+1 counter on it.

View File

@@ -4,5 +4,6 @@ Types:Creature Demon
PT:2/5 PT:2/5
T:Mode$ Phase | Phase$ EndCombat | ValidPlayer$ You | Execute$ TrigGainControl | TriggerZones$ Battlefield | TriggerDescription$ At end of combat, gain control of all creatures blocking CARDNAME for as long as you control CARDNAME. T:Mode$ Phase | Phase$ EndCombat | ValidPlayer$ You | Execute$ TrigGainControl | TriggerZones$ Battlefield | TriggerDescription$ At end of combat, gain control of all creatures blocking CARDNAME for as long as you control CARDNAME.
SVar:TrigGainControl:AB$ GainControl | Cost$ 0 | AllValid$ Card.blockingSource | LoseControl$ LoseControl,LeavesPlay SVar:TrigGainControl:AB$ GainControl | Cost$ 0 | AllValid$ Card.blockingSource | LoseControl$ LoseControl,LeavesPlay
SVar:HasAttackEffect:Blocked
SVar:Picture:http://www.wizards.com/global/images/magic/general/the_wretched.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/the_wretched.jpg
Oracle:At end of combat, gain control of all creatures blocking The Wretched for as long as you control The Wretched. Oracle:At end of combat, gain control of all creatures blocking The Wretched for as long as you control The Wretched.

View File

@@ -4,5 +4,6 @@ Types:Creature Beast
PT:4/4 PT:4/4
T:Mode$ AttackerBlocked | ValidCard$ Card.Self | Execute$ TrigSac | TriggerDescription$ Whenever CARDNAME becomes blocked, defending player sacrifices a land. T:Mode$ AttackerBlocked | ValidCard$ Card.Self | Execute$ TrigSac | TriggerDescription$ Whenever CARDNAME becomes blocked, defending player sacrifices a land.
SVar:TrigSac:AB$ Sacrifice | Cost$ 0 | SacValid$ Land | Defined$ DefendingPlayer | ChangeNum$ 1 SVar:TrigSac:AB$ Sacrifice | Cost$ 0 | SacValid$ Land | Defined$ DefendingPlayer | ChangeNum$ 1
SVar:HasAttackEffect:Blocked
SVar:Picture:http://www.wizards.com/global/images/magic/general/thresher_beast.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/thresher_beast.jpg
Oracle:Whenever Thresher Beast becomes blocked, defending player sacrifices a land. Oracle:Whenever Thresher Beast becomes blocked, defending player sacrifices a land.

View File

@@ -5,5 +5,6 @@ PT:1/1
T:Mode$ AttackerBlockedByCreature | ValidCard$ Card.Self | ValidBlocker$ Creature | DelayedTrigger$ DelTrig | TriggerDescription$ Whenever CARDNAME becomes blocked by a creature, gain control of that creature at end of combat. T:Mode$ AttackerBlockedByCreature | ValidCard$ Card.Self | ValidBlocker$ Creature | DelayedTrigger$ DelTrig | TriggerDescription$ Whenever CARDNAME becomes blocked by a creature, gain control of that creature at end of combat.
SVar:DelTrig:Mode$ Phase | Phase$ EndCombat | ValidPlayer$ Player | Execute$ TrigGainControl | TriggerDescription$ Gain control of blocking creature. SVar:DelTrig:Mode$ Phase | Phase$ EndCombat | ValidPlayer$ Player | Execute$ TrigGainControl | TriggerDescription$ Gain control of blocking creature.
SVar:TrigGainControl:AB$ GainControl | Cost$ 0 | Defined$ TriggeredBlocker | NewController$ TriggeredAttackerController SVar:TrigGainControl:AB$ GainControl | Cost$ 0 | Defined$ TriggeredBlocker | NewController$ TriggeredAttackerController
SVar:HasAttackEffect:Blocked
SVar:Picture:http://www.wizards.com/global/images/magic/general/tolarian_entrancer.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/tolarian_entrancer.jpg
Oracle:Whenever Tolarian Entrancer becomes blocked by a creature, gain control of that creature at end of combat. Oracle:Whenever Tolarian Entrancer becomes blocked by a creature, gain control of that creature at end of combat.

View File

@@ -4,5 +4,6 @@ Types:Creature Vedalken Zombie
PT:1/1 PT:1/1
T:Mode$ AttackerBlocked | ValidCard$ Card.Self | Execute$ TrigDrain | TriggerDescription$ Whenever CARDNAME becomes blocked, defending player loses 4 life. T:Mode$ AttackerBlocked | ValidCard$ Card.Self | Execute$ TrigDrain | TriggerDescription$ Whenever CARDNAME becomes blocked, defending player loses 4 life.
SVar:TrigDrain:AB$ LoseLife | Cost$ 0 | Defined$ DefendingPlayer | LifeAmount$ 4 SVar:TrigDrain:AB$ LoseLife | Cost$ 0 | Defined$ DefendingPlayer | LifeAmount$ 4
SVar:HasAttackEffect:Blocked
SVar:Picture:http://www.wizards.com/global/images/magic/general/vedalken_ghoul.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/vedalken_ghoul.jpg
Oracle:Whenever Vedalken Ghoul becomes blocked, defending player loses 4 life. Oracle:Whenever Vedalken Ghoul becomes blocked, defending player loses 4 life.