From d0fc07ce7d26181b2446ceb908a5536b76aebc14 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Sun, 20 Feb 2022 15:15:10 +0100 Subject: [PATCH 1/3] RevealHandEffect: fix not revealing to all players --- .../java/forge/game/ability/effects/RevealHandEffect.java | 6 +++++- forge-gui/res/cardsfolder/c/clairvoyance.txt | 2 +- forge-gui/res/cardsfolder/d/dragons_eye_savants.txt | 2 +- forge-gui/res/cardsfolder/e/elite_spellbinder.txt | 2 +- forge-gui/res/cardsfolder/g/gitaxian_probe.txt | 2 +- forge-gui/res/cardsfolder/g/glasses_of_urza.txt | 2 +- forge-gui/res/cardsfolder/i/ingenious_thief.txt | 2 +- forge-gui/res/cardsfolder/l/lay_bare.txt | 2 +- forge-gui/res/cardsfolder/m/mindleech_mass.txt | 2 +- forge-gui/res/cardsfolder/p/peek.txt | 2 +- forge-gui/res/cardsfolder/p/port_inspector.txt | 2 +- forge-gui/res/cardsfolder/s/silent_blade_oni.txt | 2 +- forge-gui/res/cardsfolder/s/slayers_bounty.txt | 2 +- forge-gui/res/cardsfolder/s/sorcerous_sight.txt | 2 +- forge-gui/res/cardsfolder/s/sorcerous_spyglass.txt | 2 +- forge-gui/res/cardsfolder/t/talas_explorer.txt | 2 +- forge-gui/res/cardsfolder/t/telepathic_spies.txt | 2 +- forge-gui/res/cardsfolder/t/the_ravens_warning.txt | 2 +- forge-gui/res/cardsfolder/w/walker_of_secret_ways.txt | 2 +- forge-gui/res/cardsfolder/w/wanderguard_sentry.txt | 2 +- forge-gui/res/cardsfolder/w/word_of_command.txt | 2 +- forge-gui/res/cardsfolder/w/wu_scout.txt | 2 +- 22 files changed, 26 insertions(+), 22 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/RevealHandEffect.java b/forge-game/src/main/java/forge/game/ability/effects/RevealHandEffect.java index fdaac51d652..11c86bdcc2b 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/RevealHandEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/RevealHandEffect.java @@ -48,7 +48,11 @@ public class RevealHandEffect extends SpellAbilityEffect { if (sa.hasParam("RevealType")) { hand = CardLists.filter(hand, CardPredicates.isType(sa.getParam("RevealType"))); } - sa.getActivatingPlayer().getController().reveal(hand, ZoneType.Hand, p); + if (sa.hasParam("Look")) { + sa.getActivatingPlayer().getController().reveal(hand, ZoneType.Hand, p); + } else { + host.getGame().getAction().reveal(hand, p); + } if (sa.hasParam("RememberRevealed")) { host.addRemembered(hand); } diff --git a/forge-gui/res/cardsfolder/c/clairvoyance.txt b/forge-gui/res/cardsfolder/c/clairvoyance.txt index 77ec220bd6f..bc3d6365ad4 100644 --- a/forge-gui/res/cardsfolder/c/clairvoyance.txt +++ b/forge-gui/res/cardsfolder/c/clairvoyance.txt @@ -1,7 +1,7 @@ Name:Clairvoyance ManaCost:U Types:Instant -A:SP$ RevealHand | Cost$ U | ValidTgts$ Player | TgtPrompt$ Select target player | SubAbility$ DelTrigSlowtrip | SpellDescription$ Look at target player's hand. Draw a card at the beginning of next turn's upkeep. +A:SP$ RevealHand | Cost$ U | ValidTgts$ Player | TgtPrompt$ Select target player | Look$ True | SubAbility$ DelTrigSlowtrip | SpellDescription$ Look at target player's hand. Draw a card at the beginning of next turn's upkeep. SVar:DelTrigSlowtrip:DB$ DelayedTrigger | Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | Execute$ DrawSlowtrip | TriggerDescription$ Draw a card. SVar:DrawSlowtrip:DB$ Draw | NumCards$ 1 | Defined$ You AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/d/dragons_eye_savants.txt b/forge-gui/res/cardsfolder/d/dragons_eye_savants.txt index ecbcb206c48..1119a575faf 100644 --- a/forge-gui/res/cardsfolder/d/dragons_eye_savants.txt +++ b/forge-gui/res/cardsfolder/d/dragons_eye_savants.txt @@ -4,5 +4,5 @@ Types:Creature Human Wizard PT:0/6 K:Morph:Reveal<1/Card.Blue/blue> T:Mode$ TurnFaceUp | ValidCard$ Card.Self | Execute$ TrigLook | TriggerZones$ Battlefield | TriggerDescription$ When CARDNAME is turned face up, look at target opponent's hand. -SVar:TrigLook:DB$ RevealHand | ValidTgts$ Opponent | TgtPrompt$ Select target opponent +SVar:TrigLook:DB$ RevealHand | ValidTgts$ Opponent | Look$ True | TgtPrompt$ Select target opponent Oracle:Morph—Reveal a blue card in your hand. (You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.)\nWhen Dragon's Eye Savants is turned face up, look at target opponent's hand. diff --git a/forge-gui/res/cardsfolder/e/elite_spellbinder.txt b/forge-gui/res/cardsfolder/e/elite_spellbinder.txt index 24f11d8b19d..f4dd8b42b34 100644 --- a/forge-gui/res/cardsfolder/e/elite_spellbinder.txt +++ b/forge-gui/res/cardsfolder/e/elite_spellbinder.txt @@ -4,7 +4,7 @@ Types:Creature Human Cleric PT:3/1 K:Flying T:Mode$ ChangesZone | ValidCard$ Card.Self | Destination$ Battlefield | Execute$ TrigLook | TriggerDescription$ When CARDNAME enters the battlefield, look at target opponent's hand. You may exile a nonland card from it. For as long as that card remains exiled, its owner may play it. A spell cast this way costs {2} more to cast. -SVar:TrigLook:DB$ RevealHand | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | RememberRevealed$ True | SubAbility$ DBChooseCard +SVar:TrigLook:DB$ RevealHand | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | Look$ True | RememberRevealed$ True | SubAbility$ DBChooseCard SVar:DBChooseCard:DB$ ChooseCard | ChoiceZone$ Hand | Choices$ Card.nonLand+IsRemembered | ChoiceTitle$ You may exile a nonland card from it | MinAmount$ 0 | Amount$ 1 | SubAbility$ DBChangeZone SVar:DBChangeZone:DB$ ChangeZone | Defined$ ChosenCard | Origin$ Hand | Destination$ Exile | Imprint$ True | SubAbility$ DBEffect SVar:DBEffect:DB$ Effect | Duration$ Permanent | StaticAbilities$ MayPlay,CostsMore | RememberObjects$ Imprinted | ForgetOnMoved$ Exile | SubAbility$ DBCleanup diff --git a/forge-gui/res/cardsfolder/g/gitaxian_probe.txt b/forge-gui/res/cardsfolder/g/gitaxian_probe.txt index e776ea6c8fe..26d2a36c845 100644 --- a/forge-gui/res/cardsfolder/g/gitaxian_probe.txt +++ b/forge-gui/res/cardsfolder/g/gitaxian_probe.txt @@ -1,7 +1,7 @@ Name:Gitaxian Probe ManaCost:PU Types:Sorcery -A:SP$ RevealHand | Cost$ PU | ValidTgts$ Player | TgtPrompt$ Select target player | SubAbility$ DBDraw | AIPhyrexianPayment$ Never | SpellDescription$ Look at target player's hand. +A:SP$ RevealHand | Cost$ PU | ValidTgts$ Player | TgtPrompt$ Select target player | Look$ True | SubAbility$ DBDraw | AIPhyrexianPayment$ Never | SpellDescription$ Look at target player's hand. SVar:DBDraw:DB$ Draw | NumCards$ 1 | SpellDescription$ Draw a card. AI:RemoveDeck:All Oracle:({U/P} can be paid with either {U} or 2 life.)\nLook at target player's hand.\nDraw a card. diff --git a/forge-gui/res/cardsfolder/g/glasses_of_urza.txt b/forge-gui/res/cardsfolder/g/glasses_of_urza.txt index 6b77a60b2bb..e06ad8cca99 100644 --- a/forge-gui/res/cardsfolder/g/glasses_of_urza.txt +++ b/forge-gui/res/cardsfolder/g/glasses_of_urza.txt @@ -1,6 +1,6 @@ Name:Glasses of Urza ManaCost:1 Types:Artifact -A:AB$ RevealHand | Cost$ T | ValidTgts$ Player | TgtPrompt$ Select target player | SpellDescription$ Look at target player's hand. +A:AB$ RevealHand | Cost$ T | ValidTgts$ Player | TgtPrompt$ Select target player | Look$ True | SpellDescription$ Look at target player's hand. AI:RemoveDeck:All Oracle:{T}: Look at target player's hand. diff --git a/forge-gui/res/cardsfolder/i/ingenious_thief.txt b/forge-gui/res/cardsfolder/i/ingenious_thief.txt index 262fb79cb04..e6ea3c5dd40 100644 --- a/forge-gui/res/cardsfolder/i/ingenious_thief.txt +++ b/forge-gui/res/cardsfolder/i/ingenious_thief.txt @@ -4,5 +4,5 @@ Types:Creature Human Rogue PT:1/1 K:Flying T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPeek | TriggerDescription$ When CARDNAME enters the battlefield, look at target player's hand. -SVar:TrigPeek:DB$ RevealHand | ValidTgts$ Player | TgtPrompt$ Select target player +SVar:TrigPeek:DB$ RevealHand | ValidTgts$ Player | TgtPrompt$ Select target player | Look$ True Oracle:Flying\nWhen Ingenious Thief enters the battlefield, look at target player's hand. diff --git a/forge-gui/res/cardsfolder/l/lay_bare.txt b/forge-gui/res/cardsfolder/l/lay_bare.txt index c2547442b60..dbc16000ed1 100644 --- a/forge-gui/res/cardsfolder/l/lay_bare.txt +++ b/forge-gui/res/cardsfolder/l/lay_bare.txt @@ -2,5 +2,5 @@ Name:Lay Bare ManaCost:2 U U Types:Instant A:SP$ Counter | Cost$ 2 U U | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | SubAbility$ DBReveal | SpellDescription$ Counter target spell. Look at its controller's hand. -SVar:DBReveal:DB$ RevealHand | Defined$ TargetedController +SVar:DBReveal:DB$ RevealHand | Defined$ TargetedController | Look$ True Oracle:Counter target spell. Look at its controller's hand. diff --git a/forge-gui/res/cardsfolder/m/mindleech_mass.txt b/forge-gui/res/cardsfolder/m/mindleech_mass.txt index 7c3d6ee8ffe..15fac42aa33 100644 --- a/forge-gui/res/cardsfolder/m/mindleech_mass.txt +++ b/forge-gui/res/cardsfolder/m/mindleech_mass.txt @@ -4,6 +4,6 @@ Types:Creature Horror PT:6/6 K:Trample T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigReveal | TriggerZones$ Battlefield | OptionalDecider$ You | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you may look at that player's hand. If you do, you may cast a spell from among those cards without paying its mana cost. -SVar:TrigReveal:DB$ RevealHand | Defined$ TriggeredTarget | SubAbility$ TrigPlay +SVar:TrigReveal:DB$ RevealHand | Defined$ TriggeredTarget | SubAbility$ TrigPlay | Look$ True SVar:TrigPlay:DB$ Play | Valid$ Card.ControlledBy TriggeredDefendingPlayer | ValidZone$ Hand | ValidSA$ Spell | WithoutManaCost$ True | Optional$ True Oracle:Trample\nWhenever Mindleech Mass deals combat damage to a player, you may look at that player's hand. If you do, you may cast a spell from among those cards without paying its mana cost. diff --git a/forge-gui/res/cardsfolder/p/peek.txt b/forge-gui/res/cardsfolder/p/peek.txt index 1f64109208e..eb3e57a9198 100644 --- a/forge-gui/res/cardsfolder/p/peek.txt +++ b/forge-gui/res/cardsfolder/p/peek.txt @@ -1,7 +1,7 @@ Name:Peek ManaCost:U Types:Instant -A:SP$ RevealHand | Cost$ U | ValidTgts$ Player | TgtPrompt$ Select target player | SubAbility$ DBDraw | SpellDescription$ Look at target player's hand. +A:SP$ RevealHand | Cost$ U | ValidTgts$ Player | TgtPrompt$ Select target player | Look$ True | SubAbility$ DBDraw | SpellDescription$ Look at target player's hand. SVar:DBDraw:DB$ Draw | NumCards$ 1 | SpellDescription$ Draw a card. AI:RemoveDeck:All Oracle:Look at target player's hand.\nDraw a card. diff --git a/forge-gui/res/cardsfolder/p/port_inspector.txt b/forge-gui/res/cardsfolder/p/port_inspector.txt index 0deadee3186..f804dd9b8e0 100644 --- a/forge-gui/res/cardsfolder/p/port_inspector.txt +++ b/forge-gui/res/cardsfolder/p/port_inspector.txt @@ -3,5 +3,5 @@ ManaCost:1 U Types:Creature Human PT:1/2 T:Mode$ AttackerBlocked | ValidCard$ Card.Self | Execute$ TrigPeek | TriggerDescription$ Whenever CARDNAME becomes blocked, you may look at defending player's hand. -SVar:TrigPeek:DB$ RevealHand | Defined$ TriggeredDefendingPlayer +SVar:TrigPeek:DB$ RevealHand | Defined$ TriggeredDefendingPlayer | Look$ True Oracle:Whenever Port Inspector becomes blocked, you may look at defending player's hand. diff --git a/forge-gui/res/cardsfolder/s/silent_blade_oni.txt b/forge-gui/res/cardsfolder/s/silent_blade_oni.txt index fc4e5a27e76..70c00301ed2 100644 --- a/forge-gui/res/cardsfolder/s/silent_blade_oni.txt +++ b/forge-gui/res/cardsfolder/s/silent_blade_oni.txt @@ -4,6 +4,6 @@ Types:Creature Demon Ninja PT:6/5 K:Ninjutsu:4 U B T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigReveal | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, look at that player's hand. You may cast a spell from among those cards without paying its mana cost. -SVar:TrigReveal:DB$ RevealHand | Defined$ TriggeredTarget | SubAbility$ TrigPlay +SVar:TrigReveal:DB$ RevealHand | Defined$ TriggeredTarget | Look$ True | SubAbility$ TrigPlay SVar:TrigPlay:DB$ Play | Valid$ Card.nonLand+DefenderCtrl | ValidZone$ Hand | ValidSA$ Spell | WithoutManaCost$ True | Optional$ True Oracle:Ninjutsu {4}{U}{B} ({4}{U}{B}, Return an unblocked attacker you control to hand: Put this card onto the battlefield from your hand tapped and attacking.)\nWhenever Silent-Blade Oni deals combat damage to a player, look at that player's hand. You may cast a spell from among those cards without paying its mana cost. diff --git a/forge-gui/res/cardsfolder/s/slayers_bounty.txt b/forge-gui/res/cardsfolder/s/slayers_bounty.txt index b42993bff2e..b83857f730b 100644 --- a/forge-gui/res/cardsfolder/s/slayers_bounty.txt +++ b/forge-gui/res/cardsfolder/s/slayers_bounty.txt @@ -2,7 +2,7 @@ Name:Slayer's Bounty ManaCost:W Types:Legendary Artifact Clue T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPeek | TriggerDescription$ When CARDNAME enters the battlefield, look at the creature cards in target opponent's hand. -SVar:TrigPeek:DB$ RevealHand | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | RevealType$ Creature +SVar:TrigPeek:DB$ RevealHand | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | Look$ True | RevealType$ Creature T:Mode$ Sacrificed | ValidCard$ Clue.YouCtrl | Execute$ TrigDraft | TriggerZones$ Battlefield | TriggerDescription$ Whenever you CARDNAME or another Clue, draft a card from CARDNAME's spellbook. SVar:TrigDraft:DB$ NameCard | Draft$ True | Defined$ You | ChooseFromList$ Bounty Agent,Outflank,Bound in Gold,Bring to Trial,Glass Casket,Reprobation,Collar the Culprit,Compulsory Rest,Expel,Fairgrounds Warden,Iron Verdict,Luminous Bonds,Raise the Alarm,Seal Away,Summary Judgment | SubAbility$ DBMakeCard SVar:DBMakeCard:DB$ MakeCard | Name$ ChosenName | Zone$ Hand | SubAbility$ DBCleanup diff --git a/forge-gui/res/cardsfolder/s/sorcerous_sight.txt b/forge-gui/res/cardsfolder/s/sorcerous_sight.txt index d5e6e2dbc7b..0df20a0cfac 100644 --- a/forge-gui/res/cardsfolder/s/sorcerous_sight.txt +++ b/forge-gui/res/cardsfolder/s/sorcerous_sight.txt @@ -1,7 +1,7 @@ Name:Sorcerous Sight ManaCost:U Types:Sorcery -A:SP$ RevealHand | Cost$ U | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | SubAbility$ DBDraw | SpellDescription$ Look at target opponent's hand. +A:SP$ RevealHand | Cost$ U | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | Look$ True | SubAbility$ DBDraw | SpellDescription$ Look at target opponent's hand. SVar:DBDraw:DB$ Draw | NumCards$ 1 | SpellDescription$ Draw a card. AI:RemoveDeck:Random Oracle:Look at target opponent's hand.\nDraw a card. diff --git a/forge-gui/res/cardsfolder/s/sorcerous_spyglass.txt b/forge-gui/res/cardsfolder/s/sorcerous_spyglass.txt index b8a4040a4a9..e1a9c24cf3d 100644 --- a/forge-gui/res/cardsfolder/s/sorcerous_spyglass.txt +++ b/forge-gui/res/cardsfolder/s/sorcerous_spyglass.txt @@ -3,7 +3,7 @@ ManaCost:2 Types:Artifact K:ETBReplacement:Other:ChoosePlayer SVar:ChoosePlayer:DB$ ChoosePlayer | Defined$ You | Choices$ Player.Opponent | ChoiceTitle$ Choose an opponent to look at the hand: | SubAbility$ DBLook | SpellDescription$ As CARDNAME enters the battlefield, look at an opponent's hand, then choose any card name. -SVar:DBLook:DB$ RevealHand | Defined$ ChosenPlayer | SubAbility$ DBNameCard +SVar:DBLook:DB$ RevealHand | Defined$ ChosenPlayer | Look$ True | SubAbility$ DBNameCard SVar:DBNameCard:DB$ NameCard | Defined$ You | SubAbility$ DBClear SVar:DBClear:DB$ Cleanup | ClearChosenPlayer$ True S:Mode$ CantBeActivated | ValidCard$ Card.NamedCard | ValidSA$ Activated.nonManaAbility | Description$ Activated abilities of sources with the chosen name can't be activated unless they're mana abilities. diff --git a/forge-gui/res/cardsfolder/t/talas_explorer.txt b/forge-gui/res/cardsfolder/t/talas_explorer.txt index fa53bd7bd34..eaea20acc2e 100644 --- a/forge-gui/res/cardsfolder/t/talas_explorer.txt +++ b/forge-gui/res/cardsfolder/t/talas_explorer.txt @@ -4,5 +4,5 @@ Types:Creature Human Pirate Scout PT:1/1 K:Flying T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPeek | TriggerDescription$ When CARDNAME enters the battlefield, look at target opponent's hand. -SVar:TrigPeek:DB$ RevealHand | ValidTgts$ Opponent | TgtPrompt$ Select target opponent +SVar:TrigPeek:DB$ RevealHand | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | Look$ True Oracle:Flying\nWhen Talas Explorer enters the battlefield, look at target opponent's hand. diff --git a/forge-gui/res/cardsfolder/t/telepathic_spies.txt b/forge-gui/res/cardsfolder/t/telepathic_spies.txt index 9a59bb28dd9..cb2bf169105 100644 --- a/forge-gui/res/cardsfolder/t/telepathic_spies.txt +++ b/forge-gui/res/cardsfolder/t/telepathic_spies.txt @@ -3,5 +3,5 @@ ManaCost:2 U Types:Creature Human Wizard PT:2/2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPeek | TriggerDescription$ When CARDNAME enters the battlefield, look at target opponent's hand. -SVar:TrigPeek:DB$ RevealHand | ValidTgts$ Opponent | TgtPrompt$ Select target opponent +SVar:TrigPeek:DB$ RevealHand | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | Look$ True Oracle:When Telepathic Spies enters the battlefield, look at target opponent's hand. diff --git a/forge-gui/res/cardsfolder/t/the_ravens_warning.txt b/forge-gui/res/cardsfolder/t/the_ravens_warning.txt index 07fa060a912..2773bc4cbc3 100644 --- a/forge-gui/res/cardsfolder/t/the_ravens_warning.txt +++ b/forge-gui/res/cardsfolder/t/the_ravens_warning.txt @@ -6,7 +6,7 @@ SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ u_1_1_bird_flying | Token SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 2 SVar:DBEffect:DB$ Effect | Triggers$ TrigDamage | SpellDescription$ Whenever one or more creatures you control with flying deal combat damage to a player this turn, look at that player's hand and draw a card. SVar:TrigDamage:Mode$ DamageDoneOnce | ValidSource$ Creature.YouCtrl+withFlying | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigPeek | TriggerDescription$ Whenever one or more creatures you control with flying deal combat damage to a player this turn, look at that player's hand and draw a card. -SVar:TrigPeek:DB$ RevealHand | Defined$ TriggeredTarget | SubAbility$ DBDraw | SpellDescription$ Look at that player's hand. +SVar:TrigPeek:DB$ RevealHand | Defined$ TriggeredTarget | SubAbility$ DBDraw | Look$ True | SpellDescription$ Look at that player's hand. SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 1 | SpellDescription$ Draw a card. SVar:DBWish:DB$ ChangeZone | Origin$ Sideboard | Destination$ Library | OptionalDecider$ You | ChangeType$ Card.YouOwn | ChangeNum$ 1 | Optional$ True | Hidden$ True | SpellDescription$ You may put a card you own from outside the game on top of your library. DeckHas:Ability$Token diff --git a/forge-gui/res/cardsfolder/w/walker_of_secret_ways.txt b/forge-gui/res/cardsfolder/w/walker_of_secret_ways.txt index 462490d0cdc..ec9a049ac48 100644 --- a/forge-gui/res/cardsfolder/w/walker_of_secret_ways.txt +++ b/forge-gui/res/cardsfolder/w/walker_of_secret_ways.txt @@ -4,7 +4,7 @@ Types:Creature Human Ninja PT:1/2 K:Ninjutsu:1 U T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigReveal | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, look at that player's hand. -SVar:TrigReveal:DB$ RevealHand | Defined$ TriggeredTarget +SVar:TrigReveal:DB$ RevealHand | Defined$ TriggeredTarget | Look$ True A:AB$ ChangeZone | Cost$ 1 U | ValidTgts$ Ninja.YouCtrl | TgtPrompt$ Select target Ninja you control | Origin$ Battlefield | Destination$ Hand | PlayerTurn$ True | SpellDescription$ Return target Ninja you control to its owner's hand. Activate only during your turn. DeckHints:Type$Ninja Oracle:Ninjutsu {1}{U} ({1}{U}, Return an unblocked attacker you control to hand: Put this card onto the battlefield from your hand tapped and attacking.)\nWhenever Walker of Secret Ways deals combat damage to a player, look at that player's hand.\n{1}{U}: Return target Ninja you control to its owner's hand. Activate only during your turn. diff --git a/forge-gui/res/cardsfolder/w/wanderguard_sentry.txt b/forge-gui/res/cardsfolder/w/wanderguard_sentry.txt index b4698c53087..c020ee14bd5 100644 --- a/forge-gui/res/cardsfolder/w/wanderguard_sentry.txt +++ b/forge-gui/res/cardsfolder/w/wanderguard_sentry.txt @@ -3,5 +3,5 @@ ManaCost:4 U Types:Creature Drone PT:3/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPeek | TriggerDescription$ When CARDNAME enters the battlefield, look at target opponent's hand. -SVar:TrigPeek:DB$ RevealHand | ValidTgts$ Opponent | TgtPrompt$ Select target opponent +SVar:TrigPeek:DB$ RevealHand | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | Look$ True Oracle:When Wanderguard Sentry enters the battlefield, look at target opponent's hand. diff --git a/forge-gui/res/cardsfolder/w/word_of_command.txt b/forge-gui/res/cardsfolder/w/word_of_command.txt index 1803fa9a006..6db5588fd00 100644 --- a/forge-gui/res/cardsfolder/w/word_of_command.txt +++ b/forge-gui/res/cardsfolder/w/word_of_command.txt @@ -1,7 +1,7 @@ Name:Word of Command ManaCost:B B Types:Instant -A:SP$ RevealHand | ValidTgts$ Opponent | RememberRevealed$ True | SubAbility$ DBChoose | StackDescription$ SpellDescription | SpellDescription$ Look at target opponent's hand and choose a card from it. You control that player until CARDNAME finishes resolving. The player plays that card if able. While doing so, the player can activate mana abilities only if they're from lands that player controls and only if mana they produce is spent to activate other mana abilities of lands the player controls and/or to play that card. If the chosen card is cast as a spell, you control the player while that spell is resolving. +A:SP$ RevealHand | ValidTgts$ Opponent | RememberRevealed$ True | Look$ True | SubAbility$ DBChoose | StackDescription$ SpellDescription | SpellDescription$ Look at target opponent's hand and choose a card from it. You control that player until CARDNAME finishes resolving. The player plays that card if able. While doing so, the player can activate mana abilities only if they're from lands that player controls and only if mana they produce is spent to activate other mana abilities of lands the player controls and/or to play that card. If the chosen card is cast as a spell, you control the player while that spell is resolving. SVar:DBChoose:DB$ ChooseCard | Defined$ You | Choices$ Card.IsRemembered | ChoiceZone$ Hand | Amount$ 1 | Mandatory$ True | SubAbility$ DBManaLandOnlyEffect SVar:DBManaLandOnlyEffect:DB$ Effect | EffectOwner$ TargetedPlayer | StaticAbilities$ DBLimitMana | ImprintOnHost$ True | Duration$ Permanent | SubAbility$ DBPlay SVar:DBLimitMana:Mode$ CantBeActivated | ValidSA$ Activated.nonLand,Activated.ManaAbilityCantPaidFor | EffectZone$ Command | Description$ While doing so, the player can activate mana abilities only if they're from lands that player controls and only if mana they produce is spent to activate other mana abilities of lands the player controls and/or to play that card. diff --git a/forge-gui/res/cardsfolder/w/wu_scout.txt b/forge-gui/res/cardsfolder/w/wu_scout.txt index f391a4a8191..51327d5ee31 100644 --- a/forge-gui/res/cardsfolder/w/wu_scout.txt +++ b/forge-gui/res/cardsfolder/w/wu_scout.txt @@ -4,5 +4,5 @@ Types:Creature Human Soldier Scout PT:1/1 K:Horsemanship T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPeek | TriggerDescription$ When CARDNAME enters the battlefield, look at target opponent's hand. -SVar:TrigPeek:DB$ RevealHand | ValidTgts$ Opponent | TgtPrompt$ Select target opponent +SVar:TrigPeek:DB$ RevealHand | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | Look$ True Oracle:Horsemanship (This creature can't be blocked except by creatures with horsemanship.)\nWhen Wu Scout enters the battlefield, look at target opponent's hand. From 26e1c4bf88c925dfc76d59b4d0d9bc5a34dcd68d Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Sun, 20 Feb 2022 16:12:00 +0100 Subject: [PATCH 2/3] Add todos --- .../src/main/java/forge/ai/AiAttackController.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/AiAttackController.java b/forge-ai/src/main/java/forge/ai/AiAttackController.java index 5ba5d7376ac..280c76a1027 100644 --- a/forge-ai/src/main/java/forge/ai/AiAttackController.java +++ b/forge-ai/src/main/java/forge/ai/AiAttackController.java @@ -449,11 +449,13 @@ public class AiAttackController { return false; } + CardLists.sortByPowerDesc(oppList); for (Card attacker : oppList) { if (!ComputerUtilCombat.canAttackNextTurn(attacker)) { continue; } if (blockersLeft > 0 && CombatUtil.canBeBlocked(attacker, ai)) { + // TODO doesn't take trample into account blockersLeft--; continue; } @@ -461,6 +463,8 @@ public class AiAttackController { // Test for some special triggers that can change the creature in combat Card effectiveAttacker = ComputerUtilCombat.applyPotentialAttackCloneTriggers(attacker); + // TODO commander + totalAttack += ComputerUtilCombat.damageIfUnblocked(effectiveAttacker, ai, null, false); totalPoison += ComputerUtilCombat.poisonIfUnblocked(effectiveAttacker, ai); } @@ -878,7 +882,7 @@ public class AiAttackController { if (ComputerUtilCombat.canAttackNextTurn(pCard) && pCard.getNetCombatDamage() > 0) { candidateAttackers.add(pCard); candidateUnblockedDamage += ComputerUtilCombat.damageIfUnblocked(pCard, opp, null, false); - computerForces += 1; + computerForces++; } } @@ -897,13 +901,13 @@ public class AiAttackController { if (pCard.getNetCombatDamage() > 0 && ComputerUtilCombat.canAttackNextTurn(pCard)) { nextTurnAttackers.add(pCard); candidateCounterAttackDamage += pCard.getNetCombatDamage(); - humanForces += 1; // player forces they might use to attack + humanForces++; // player forces they might use to attack } // increment player forces that are relevant to an attritional attack - includes walls Card potentialOppBlocker = getCardCanBlockAnAttacker(pCard, candidateAttackers, true); if (potentialOppBlocker != null) { - humanForcesForAttritionalAttack += 1; + humanForcesForAttritionalAttack++; if (predictEvasion) { candidateAttackers.remove(potentialOppBlocker); } From 5e7cf52a7ab619db41c7c3dbc889a1490a767d11 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Sun, 20 Feb 2022 17:44:47 +0100 Subject: [PATCH 3/3] Also check supertype for Type$Legendary/Snow --- forge-core/src/main/java/forge/card/DeckHints.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-core/src/main/java/forge/card/DeckHints.java b/forge-core/src/main/java/forge/card/DeckHints.java index a9499445681..4ede03d9b88 100644 --- a/forge-core/src/main/java/forge/card/DeckHints.java +++ b/forge-core/src/main/java/forge/card/DeckHints.java @@ -181,7 +181,7 @@ public class DeckHints { String[] typeParts = t.split("\\."); op = Predicates.and(CardRulesPredicates.coreType(true, typeParts[0]), CardRulesPredicates.subType(typeParts[1])); } else { - op = Predicates.or(CardRulesPredicates.coreType(true, t), CardRulesPredicates.subType(t)); + op = CardRulesPredicates.joinedType(StringOp.CONTAINS_IC, t); } Iterables.addAll(cards, getMatchingItems(cardList, op, PaperCard.FN_GET_RULES)); }