From 5fd74c53c917b1b974900873858ea0becd047d2c Mon Sep 17 00:00:00 2001 From: Michael Kamensky Date: Thu, 13 Aug 2020 13:34:03 +0300 Subject: [PATCH] - Various AI flags and improvements. --- .../main/java/forge/ai/ability/PeekAndRevealAi.java | 10 +++++++++- forge-gui/res/cardsfolder/d/dark_dweller_oracle.txt | 1 + forge-gui/res/cardsfolder/g/gideons_sacrifice.txt | 4 ++++ forge-gui/res/cardsfolder/l/loxodon_sergeant.txt | 1 + forge-gui/res/cardsfolder/v/viviens_grizzly.txt | 2 +- 5 files changed, 16 insertions(+), 2 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/PeekAndRevealAi.java b/forge-ai/src/main/java/forge/ai/ability/PeekAndRevealAi.java index bd6dedc12ec..331ee87051c 100644 --- a/forge-ai/src/main/java/forge/ai/ability/PeekAndRevealAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/PeekAndRevealAi.java @@ -2,6 +2,7 @@ package forge.ai.ability; import forge.ai.SpellAbilityAi; import forge.ai.SpellApiToAi; +import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; import forge.game.player.Player; import forge.game.player.PlayerActionConfirmMode; @@ -23,10 +24,17 @@ public class PeekAndRevealAi extends SpellAbilityAi { if (sa instanceof AbilityStatic) { return false; } - if ("Main2".equals(sa.getParam("AILogic"))) { + + String logic = sa.getParamOrDefault("AILogic", ""); + if ("Main2".equals(logic)) { if (aiPlayer.getGame().getPhaseHandler().getPhase().isBefore(PhaseType.MAIN2)) { return false; } + } else if ("EndOfOppTurn".equals(logic)) { + PhaseHandler ph = aiPlayer.getGame().getPhaseHandler(); + if (!(ph.getNextTurn() == aiPlayer && ph.is(PhaseType.END_OF_TURN))) { + return false; + } } // So far this only appears on Triggers, but will expand // once things get converted from Dig + NoMove diff --git a/forge-gui/res/cardsfolder/d/dark_dweller_oracle.txt b/forge-gui/res/cardsfolder/d/dark_dweller_oracle.txt index a619a1d834b..201a5583512 100644 --- a/forge-gui/res/cardsfolder/d/dark_dweller_oracle.txt +++ b/forge-gui/res/cardsfolder/d/dark_dweller_oracle.txt @@ -6,4 +6,5 @@ A:AB$ Dig | Cost$ 1 Sac<1/Creature> | DigNum$ 1 | ChangeNum$ All | DestinationZo SVar:DBEffect:DB$ Effect | StaticAbilities$ EffSModeContinuous | ExileOnMoved$ Exile | RememberObjects$ Remembered | SubAbility$ DBCleanup SVar:EffSModeContinuous:Mode$ Continuous | EffectZone$ Command | Affected$ Card.IsRemembered | MayPlay$ True | AffectedZone$ Exile | Description$ You may play that card this turn. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:AIPreference:SacCost$Creature.token,Creature.cmcLE1 Oracle:{1}, Sacrifice a creature: Exile the top card of your library. You may play that card this turn. (You still pay its costs. You can play a land this way only if you have an available land play remaining.) diff --git a/forge-gui/res/cardsfolder/g/gideons_sacrifice.txt b/forge-gui/res/cardsfolder/g/gideons_sacrifice.txt index b38d2e9d020..9e3d7dd078a 100644 --- a/forge-gui/res/cardsfolder/g/gideons_sacrifice.txt +++ b/forge-gui/res/cardsfolder/g/gideons_sacrifice.txt @@ -5,4 +5,8 @@ A:SP$ ChooseCard | Cost$ W | Choices$ Creature.YouCtrl,Planeswalker.YouCtrl | Su SVar:DBEffect:DB$ Effect | ReplacementEffects$ DamageEvent | SVars$ GideonSac | References$ DamageEvent,GideonSac | ExileOnMoved$ True | RememberObjects$ ChosenCard SVar:DamageEvent:Event$ DamageDone | ActiveZones$ Command | ValidTarget$ You,Permanent.YouCtrl | ReplaceWith$ GideonSac | Description$ All damage that would be dealt this turn to you and permanents you control is dealt to the chosen permanent instead (if it's still on the battlefield). SVar:GideonSac:DB$ ReplaceEffect | VarName$ Affected | VarValue$ Remembered | VarType$ Card +SVar:NeedsToPlayVar:Z GE1 +SVar:Z:SVar$Z1/Plus.Z2 +SVar:Z1:Count$Creature.YouCtrl +SVar:Z2:Count$Planeswalker.YouCtrl Oracle:Choose a creature or planeswalker you control. All damage that would be dealt this turn to you and permanents you control is dealt to the chosen permanent instead (if it's still on the battlefield). diff --git a/forge-gui/res/cardsfolder/l/loxodon_sergeant.txt b/forge-gui/res/cardsfolder/l/loxodon_sergeant.txt index a5fbacc774e..b2fa7fc208c 100644 --- a/forge-gui/res/cardsfolder/l/loxodon_sergeant.txt +++ b/forge-gui/res/cardsfolder/l/loxodon_sergeant.txt @@ -5,4 +5,5 @@ PT:3/3 K:Vigilance T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPumpAll | TriggerDescription$ When CARDNAME enters the battlefield, other creatures you control gain vigilance until end of turn. SVar:TrigPumpAll:DB$ PumpAll | ValidCards$ Creature.Other+YouCtrl | KW$ Vigilance +SVar:PlayMain1:TRUE Oracle:Vigilance\nWhen Loxodon Sergeant enters the battlefield, other creatures you control gain vigilance until end of turn. diff --git a/forge-gui/res/cardsfolder/v/viviens_grizzly.txt b/forge-gui/res/cardsfolder/v/viviens_grizzly.txt index 9ad4fc871a8..9972516a708 100644 --- a/forge-gui/res/cardsfolder/v/viviens_grizzly.txt +++ b/forge-gui/res/cardsfolder/v/viviens_grizzly.txt @@ -2,7 +2,7 @@ Name:Vivien's Grizzly ManaCost:2 G Types:Creature Bear Spirit PT:2/3 -A:AB$ PeekAndReveal | Cost$ 3 G | AILogic$ EndofOppTurn | PeekAmount$ 1 | RevealValid$ Creature,Planeswalker | RevealOptional$ True | RememberRevealed$ True | SubAbility$ DBChangeZone | SpellDescription$ Look at the top card of your library. If it's a creature or planeswalker card, you may reveal it and put it into your hand. If you don't put the card into your hand, put it on the bottom of your library. +A:AB$ PeekAndReveal | Cost$ 3 G | AILogic$ EndOfOppTurn | PeekAmount$ 1 | RevealValid$ Creature,Planeswalker | RevealOptional$ True | RememberRevealed$ True | SubAbility$ DBChangeZone | SpellDescription$ Look at the top card of your library. If it's a creature or planeswalker card, you may reveal it and put it into your hand. If you don't put the card into your hand, put it on the bottom of your library. SVar:DBChangeZone:DB$ ChangeZone | Defined$ TopOfLibrary | Origin$ Library | Destination$ Hand | ConditionDefined$ Remembered | ConditionPresent$ Creature,Planeswalker | ConditionCompare$ EQ1 | SubAbility$ DBBottom SVar:DBBottom:DB$ ChangeZone | Defined$ TopOfLibrary | Origin$ Library | Destination$ Library | Shuffle$ False | ConditionDefined$ Remembered | ConditionPresent$ Creature,Planeswalker | ConditionCompare$ EQ0 | LibraryPosition$ -1 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True