From 167c8a3f333e39452820c4f0a9485345cc7af9b3 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Sun, 29 Jan 2023 14:20:11 +0100 Subject: [PATCH 1/4] Support: All Will Be One + Goliath Hatchery --- forge-game/src/main/java/forge/game/ability/AbilityUtils.java | 4 ++-- .../main/java/forge/game/trigger/TriggerCounterAddedOnce.java | 4 ++++ forge-gui/res/cardsfolder/t/takeno_samurai_general.txt | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index b03fc392691..98e5d43b433 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -2058,8 +2058,8 @@ public class AbilityUtils { return doXMath(count, expr, c, ctb); } - if (sq[0].contains("BushidoPoint")) { - return doXMath(c.getKeywordMagnitude(Keyword.BUSHIDO), expr, c, ctb); + if (sq[0].contains("TotalValue")) { + return doXMath(c.getKeywordMagnitude(Keyword.smartValueOf(l[0].split(" ")[1])), expr, c, ctb); } if (sq[0].contains("TimesKicked")) { return doXMath(c.getKickerMagnitude(), expr, c, ctb); diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerCounterAddedOnce.java b/forge-game/src/main/java/forge/game/trigger/TriggerCounterAddedOnce.java index a12cab082eb..6c24647ad06 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerCounterAddedOnce.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerCounterAddedOnce.java @@ -63,6 +63,10 @@ public class TriggerCounterAddedOnce extends Trigger { } } + if (!matchesValidParam("ValidEntity", runParams.get(AbilityKey.Card)) && !matchesValidParam("ValidEntity", runParams.get(AbilityKey.Player))) { + return false; + } + if (!matchesValidParam("ValidCard", runParams.get(AbilityKey.Card))) { return false; } diff --git a/forge-gui/res/cardsfolder/t/takeno_samurai_general.txt b/forge-gui/res/cardsfolder/t/takeno_samurai_general.txt index 7be492254ef..c70411d34a1 100644 --- a/forge-gui/res/cardsfolder/t/takeno_samurai_general.txt +++ b/forge-gui/res/cardsfolder/t/takeno_samurai_general.txt @@ -4,7 +4,7 @@ Types:Legendary Creature Human Samurai PT:3/3 K:Bushido:2 S:Mode$ Continuous | Affected$ Creature.Samurai+Other+YouCtrl | AffectedZone$ Battlefield | AddPower$ AffectedX | AddToughness$ AffectedX | Description$ Each other Samurai creature you control gets +1/+1 for each point of bushido it has. -SVar:AffectedX:Count$BushidoPoint +SVar:AffectedX:Count$TotalValue Bushido SVar:PlayMain1:TRUE DeckHints:Type$Samurai Oracle:Bushido 2 (Whenever this creature blocks or becomes blocked, it gets +2/+2 until end of turn.)\nEach other Samurai creature you control gets +1/+1 for each point of bushido it has. From b4a4304f3fce37ac7c6ceb9a4488097a69b9834b Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Sun, 29 Jan 2023 14:20:39 +0100 Subject: [PATCH 2/4] Fix scripts --- forge-gui/res/cardsfolder/b/bold_plagiarist.txt | 2 +- forge-gui/res/cardsfolder/c/codie_vociferous_codex.txt | 3 ++- forge-gui/res/cardsfolder/g/generous_patron.txt | 2 +- forge-gui/res/cardsfolder/k/kros_defense_contractor.txt | 2 +- forge-gui/res/cardsfolder/m/magma_pummeler.txt | 4 ++-- 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/forge-gui/res/cardsfolder/b/bold_plagiarist.txt b/forge-gui/res/cardsfolder/b/bold_plagiarist.txt index 210cc127e1f..df4ebd2431e 100644 --- a/forge-gui/res/cardsfolder/b/bold_plagiarist.txt +++ b/forge-gui/res/cardsfolder/b/bold_plagiarist.txt @@ -3,7 +3,7 @@ ManaCost:3 B Types:Creature Vampire Rogue PT:2/2 K:Flash -T:Mode$ CounterPlayerAddedAll | ValidSource$ Opponent | ValidObjectToSource$ Creature.YouCtrl | Execute$ TrigCounter | TriggerZones$ Battlefield | TriggerDescription$ Whenever an opponent puts one or more counters on a creature they control, they put the same number and kind of counters on CARDNAME. +T:Mode$ CounterPlayerAddedAll | ValidSource$ Opponent | ValidObjectToSource$ Creature.YouCtrl+inRealZoneBattlefield | Execute$ TrigCounter | TriggerZones$ Battlefield | TriggerDescription$ Whenever an opponent puts one or more counters on a creature they control, they put the same number and kind of counters on CARDNAME. SVar:TrigCounter:DB$ PutCounter | Defined$ Self | Placer$ TriggeredSource | TriggeredCounterMap$ True DeckHas:Ability$Counters Oracle:Flash\nWhenever an opponent puts one or more counters on a creature they control, they put the same number and kind of counters on Bold Plagiarist. diff --git a/forge-gui/res/cardsfolder/c/codie_vociferous_codex.txt b/forge-gui/res/cardsfolder/c/codie_vociferous_codex.txt index 220fdd5ec63..16d7f68579c 100644 --- a/forge-gui/res/cardsfolder/c/codie_vociferous_codex.txt +++ b/forge-gui/res/cardsfolder/c/codie_vociferous_codex.txt @@ -8,7 +8,8 @@ SVar:DBTrigger:DB$ DelayedTrigger | Mode$ SpellCast | ValidActivatingPlayer$ You SVar:DBDig:DB$ DigUntil | Defined$ You | Valid$ Instant.cmcLTX,Sorcery.cmcLTX | FoundDestination$ Exile | RevealedDestination$ Exile | RememberRevealed$ True | ImprintFound$ True | SkipReorder$ True | SubAbility$ DBEffect SVar:DBEffect:DB$ Effect | StaticAbilities$ MayPlay | RememberObjects$ Imprinted | ForgetOnMoved$ Exile | SubAbility$ DBRestRandomOrder SVar:MayPlay:Mode$ Continuous | Affected$ Card.IsRemembered | MayPlay$ True | MayPlayWithoutManaCost$ True | EffectZone$ Command | AffectedZone$ Exile | Description$ Until end of turn, you may cast that card without paying its mana cost. -SVar:DBRestRandomOrder:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered | Origin$ Exile | Destination$ Library | LibraryPosition$ -1 | RandomOrder$ True +SVar:DBRestRandomOrder:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered | Origin$ Exile | Destination$ Library | LibraryPosition$ -1 | RandomOrder$ True | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True SVar:X:TriggeredCard$CardManaCost AI:RemoveDeck:Random DeckNeeds:Type$Instant|Sorcery diff --git a/forge-gui/res/cardsfolder/g/generous_patron.txt b/forge-gui/res/cardsfolder/g/generous_patron.txt index 5627a3d0fb0..78bd078cfe6 100644 --- a/forge-gui/res/cardsfolder/g/generous_patron.txt +++ b/forge-gui/res/cardsfolder/g/generous_patron.txt @@ -4,7 +4,7 @@ Types:Creature Elf Advisor PT:1/4 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPut | TriggerDescription$ When CARDNAME enters the battlefield, support 2. (Put a +1/+1 counter on each of up to two other target creatures.) SVar:TrigPut:DB$ PutCounter | ValidTgts$ Creature.Other | TgtPrompt$ Select target creature other than CARDNAME | TargetMin$ 0 | TargetMax$ 2 | CounterType$ P1P1 | CounterNum$ 1 -T:Mode$ CounterAddedOnce | ValidCard$ Creature.YouDontCtrl | ValidSource$ You | TriggerZones$ Battlefield | Execute$ DBDraw | TriggerDescription$ Whenever you put one or more counters on a creature you don't control, draw a card. +T:Mode$ CounterAddedOnce | ValidCard$ Creature.YouDontCtrl+inRealZoneBattlefield | ValidSource$ You | TriggerZones$ Battlefield | Execute$ DBDraw | TriggerDescription$ Whenever you put one or more counters on a creature you don't control, draw a card. SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 1 DeckHas:Ability$Counters DeckHints:Ability$Counters diff --git a/forge-gui/res/cardsfolder/k/kros_defense_contractor.txt b/forge-gui/res/cardsfolder/k/kros_defense_contractor.txt index d31539d9c43..5bc2e976dad 100644 --- a/forge-gui/res/cardsfolder/k/kros_defense_contractor.txt +++ b/forge-gui/res/cardsfolder/k/kros_defense_contractor.txt @@ -4,7 +4,7 @@ Types:Legendary Creature Cat Advisor PT:2/4 T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ At the beginning of your upkeep, put a shield counter on target creature an opponent controls. SVar:TrigPutCounter:DB$ PutCounter | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select target creature an opponent controls | CounterType$ SHIELD | AILogic$ Curse -T:Mode$ CounterAddedOnce | ValidCard$ Creature.YouDontCtrl | ValidSource$ You | TriggerZones$ Battlefield | Execute$ TrigTap | TriggerDescription$ Whenever you put one or more counters on a creature you don't control, tap that creature and goad it. It gains trample until your next turn. (Until your next turn, that creature attacks each combat if able and attacks a player other than you if able.) +T:Mode$ CounterAddedOnce | ValidCard$ Creature.YouDontCtrl+inRealZoneBattlefield | ValidSource$ You | TriggerZones$ Battlefield | Execute$ TrigTap | TriggerDescription$ Whenever you put one or more counters on a creature you don't control, tap that creature and goad it. It gains trample until your next turn. (Until your next turn, that creature attacks each combat if able and attacks a player other than you if able.) SVar:TrigTap:DB$ Tap | Defined$ TriggeredCardLKICopy | SubAbility$ DBGoad SVar:DBGoad:DB$ Goad | Defined$ TriggeredCardLKICopy | SubAbility$ DBPump SVar:DBPump:DB$ Pump | Defined$ TriggeredCardLKICopy | KW$ Trample | Duration$ UntilYourNextTurn diff --git a/forge-gui/res/cardsfolder/m/magma_pummeler.txt b/forge-gui/res/cardsfolder/m/magma_pummeler.txt index 038e0fb97dd..5088206f41e 100644 --- a/forge-gui/res/cardsfolder/m/magma_pummeler.txt +++ b/forge-gui/res/cardsfolder/m/magma_pummeler.txt @@ -7,8 +7,8 @@ SVar:X:Count$xPaid R:Event$ DamageDone | ActiveZones$ Battlefield | ValidTarget$ Card.Self+counters_GE1_P1P1 | ReplaceWith$ Counters | PreventionEffect$ True | AlwaysReplace$ True | Description$ If damage would be dealt to CARDNAME while it has a +1/+1 counter on it, prevent that damage and remove that many +1/+1 counters from it. When one or more counters are removed from Magma Pummeler this way, it deals that much damage to any target. SVar:Counters:DB$ RemoveCounter | Defined$ ReplacedTarget | CounterType$ P1P1 | CounterNum$ Y | RememberRemoved$ True | SubAbility$ DBImmediateTrigger SVar:Y:ReplaceCount$DamageAmount -SVar:DBImmediateTrigger:DB$ ImmediateTrigger | Execute$ TrigDamage | SubAbility$ DBCleanup | TriggerDescription$ When one or more counters are removed from CARDNAME this way, it deals that much damage to any target. -SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ Z +SVar:DBImmediateTrigger:DB$ ImmediateTrigger | Execute$ TrigDamage | RememberSVarAmount$ Z | SubAbility$ DBCleanup | TriggerDescription$ When one or more counters are removed from CARDNAME this way, it deals that much damage to any target. +SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ Count$TriggerRememberAmount SVar:Z:Count$RememberedSize SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Counters From 8519eeed2373624dfa8839e59923b3cbf7573d49 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Sun, 29 Jan 2023 15:16:10 +0100 Subject: [PATCH 3/4] Clean up --- forge-gui/res/cardsfolder/a/ajanis_aid.txt | 5 ++--- forge-gui/res/cardsfolder/d/dauthi_voidwalker.txt | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/forge-gui/res/cardsfolder/a/ajanis_aid.txt b/forge-gui/res/cardsfolder/a/ajanis_aid.txt index 7171b22619c..8b64c50c68c 100644 --- a/forge-gui/res/cardsfolder/a/ajanis_aid.txt +++ b/forge-gui/res/cardsfolder/a/ajanis_aid.txt @@ -3,9 +3,8 @@ ManaCost:2 G W Types:Enchantment T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSearch | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library and/or graveyard for a card named Ajani, Valiant Protector, reveal it, and put it into your hand. If you search your library this way, shuffle. SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Card.YouOwn+namedAjani; Valiant Protector | Optional$ True -A:AB$ ChooseCard | Cost$ Sac<1/CARDNAME> | Choices$ Creature | Mandatory$ True | AILogic$ NeedsPrevention | SubAbility$ DBEffect | RememberChosen$ True | SpellDescription$ Prevent all combat damage a creature of your choice would deal this turn. -SVar:DBEffect:DB$ Effect | ReplacementEffects$ RPreventNextFromSource | RememberObjects$ Remembered | SubAbility$ DBCleanup | ExileOnMoved$ Battlefield +A:AB$ ChooseCard | Cost$ Sac<1/CARDNAME> | Choices$ Creature | Mandatory$ True | AILogic$ NeedsPrevention | SubAbility$ DBEffect | SpellDescription$ Prevent all combat damage a creature of your choice would deal this turn. +SVar:DBEffect:DB$ Effect | ReplacementEffects$ RPreventNextFromSource | RememberObjects$ ChosenCard | SubAbility$ DBCleanup | ExileOnMoved$ Battlefield SVar:RPreventNextFromSource:Event$ DamageDone | IsCombat$ True | ValidSource$ Card.IsRemembered | Prevent$ True | Description$ Prevent all combat damage a creature of your choice would deal this turn. -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHints:Name$Ajani, Valiant Protector Oracle:When Ajani's Aid enters the battlefield, you may search your library and/or graveyard for a card named Ajani, Valiant Protector, reveal it, and put it into your hand. If you search your library this way, shuffle.\nSacrifice Ajani's Aid: Prevent all combat damage a creature of your choice would deal this turn. diff --git a/forge-gui/res/cardsfolder/d/dauthi_voidwalker.txt b/forge-gui/res/cardsfolder/d/dauthi_voidwalker.txt index df68f87791e..8922454b024 100644 --- a/forge-gui/res/cardsfolder/d/dauthi_voidwalker.txt +++ b/forge-gui/res/cardsfolder/d/dauthi_voidwalker.txt @@ -5,8 +5,7 @@ PT:3/2 K:Shadow R:Event$ Moved | ActiveZones$ Battlefield | Destination$ Graveyard | ValidCard$ Card.nonToken+OppOwn | ReplaceWith$ Exile | Description$ If a card would be put into an opponent's graveyard from anywhere, instead exile it with a void counter on it. SVar:Exile:DB$ ChangeZone | Hidden$ True | Origin$ All | Destination$ Exile | Defined$ ReplacedCard | WithCountersType$ VOID -A:AB$ ChooseCard | Cost$ T Sac<1/CARDNAME> | Defined$ You | AILogic$ AtLeast1 | Amount$ 1 | Mandatory$ True | ChoiceTitle$ Choose an exiled card an opponent owns with a void counter on it | Choices$ Card.OppOwn+counters_GE1_VOID | ChoiceZone$ Exile | RememberChosen$ True | SubAbility$ DBEffect | SpellDescription$ Choose an exiled card an opponent owns with a void counter on it. You may play it this turn without paying its mana cost. -SVar:DBEffect:DB$ Effect | StaticAbilities$ MayPlay | RememberObjects$ Remembered | ForgetOnMoved$ Exile | SubAbility$ DBCleanup +A:AB$ ChooseCard | Cost$ T Sac<1/CARDNAME> | Defined$ You | AILogic$ AtLeast1 | Amount$ 1 | Mandatory$ True | ChoiceTitle$ Choose an exiled card an opponent owns with a void counter on it | Choices$ Card.OppOwn+counters_GE1_VOID | ChoiceZone$ Exile | SubAbility$ DBEffect | SpellDescription$ Choose an exiled card an opponent owns with a void counter on it. You may play it this turn without paying its mana cost. +SVar:DBEffect:DB$ Effect | StaticAbilities$ MayPlay | RememberObjects$ ChosenCard | ForgetOnMoved$ Exile SVar:MayPlay:Mode$ Continuous | MayPlay$ True | MayPlayWithoutManaCost$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ Until end of turn, you may play this card without paying its mana cost. -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True Oracle:Shadow (This creature can block or be blocked by only creatures with shadow.)\nIf a card would be put into an opponent's graveyard from anywhere, instead exile it with a void counter on it.\n{T}, Sacrifice Dauthi Voidwalker: Choose an exiled card an opponent owns with a void counter on it. You may play it this turn without paying its mana cost. From e6874237d76599b401e22a2a1e2c0cfeded97506 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Sun, 29 Jan 2023 20:54:58 +0100 Subject: [PATCH 4/4] Fix trigger --- forge-gui/res/cardsfolder/m/mana_cache.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/m/mana_cache.txt b/forge-gui/res/cardsfolder/m/mana_cache.txt index 8c9d4e97b73..cca3b89398c 100644 --- a/forge-gui/res/cardsfolder/m/mana_cache.txt +++ b/forge-gui/res/cardsfolder/m/mana_cache.txt @@ -1,7 +1,7 @@ Name:Mana Cache ManaCost:1 R R Types:Enchantment -T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ Player | Execute$ TrigCounters | TriggerDescription$ At the beginning of each player's end step, put a charge counter on CARDNAME for each untapped land that player controls. +T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ Player | Execute$ TrigCounters | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of each player's end step, put a charge counter on CARDNAME for each untapped land that player controls. SVar:TrigCounters:DB$ PutCounter | Defined$ Self | CounterType$ CHARGE | CounterNum$ X SVar:X:Count$Valid Land.ActivePlayerCtrl+untapped A:AB$ Mana | Cost$ SubCounter<1/CHARGE> | Produced$ C | Activator$ Player | PlayerTurn$ True | ActivationPhases$ Upkeep->Main2 | SpellDescription$ Add {C}. Any player may activate this ability but only during their turn before the end step.