From 3a044a50d09748fdac65f46ec39b65f2368dc275 Mon Sep 17 00:00:00 2001 From: TRT <> Date: Thu, 19 Jan 2023 16:30:45 +0100 Subject: [PATCH 1/5] Clean up --- .../game/trigger/TriggerSpellAbilityCastOrCopy.java | 4 ---- .../res/cardsfolder/a/ardenn_intrepid_archaeologist.txt | 6 ++---- forge-gui/res/cardsfolder/a/armed_and_armored.txt | 9 +++------ .../cardsfolder/h/haakon_stromgald_scourge_avatar.txt | 2 +- forge-gui/res/cardsfolder/h/heavenly_blademaster.txt | 4 +--- 5 files changed, 7 insertions(+), 18 deletions(-) diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCastOrCopy.java b/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCastOrCopy.java index fc8b0cc7160..75a6ed8c86e 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCastOrCopy.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCastOrCopy.java @@ -86,10 +86,6 @@ public class TriggerSpellAbilityCastOrCopy extends Trigger { return false; } - if (!matchesValidParam("ValidControllingPlayer", cast.getController())) { - return false; - } - if (hasParam("ValidActivatingPlayer")) { Player activator; if (spellAbility.isManaAbility()) { diff --git a/forge-gui/res/cardsfolder/a/ardenn_intrepid_archaeologist.txt b/forge-gui/res/cardsfolder/a/ardenn_intrepid_archaeologist.txt index ce10555173f..b7e63660687 100644 --- a/forge-gui/res/cardsfolder/a/ardenn_intrepid_archaeologist.txt +++ b/forge-gui/res/cardsfolder/a/ardenn_intrepid_archaeologist.txt @@ -3,10 +3,8 @@ ManaCost:2 W Types:Legendary Creature Kor Scout PT:2/2 T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | Execute$ TrigTarget | TriggerZones$ Battlefield | OptionalDecider$ You | TriggerDescription$ At the beginning of combat on your turn, you may attach any number of Auras and Equipment you control to target permanent or player. -SVar:TrigTarget:DB$ Pump | ValidTgts$ Permanent,Player | TgtPrompt$ Select target permanent or player | RememberObjects$ Targeted | SubAbility$ DBAttach -SVar:DBAttach:DB$ RepeatEach | UseImprinted$ True | RepeatSubAbility$ DBRepeatAttach | SubAbility$ DBCleanup | RepeatCards$ Aura.YouCtrl,Equipment.YouCtrl -SVar:DBRepeatAttach:DB$ Attach | Defined$ Remembered | Object$ Imprinted | Optional$ True -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:TrigTarget:DB$ Pump | ValidTgts$ Permanent,Player | TgtPrompt$ Select target permanent or player | SubAbility$ DBAttach +SVar:DBAttach:DB$ Attach | Defined$ Targeted | Object$ Valid Aura.YouCtrl,Equipment.YouCtrl | Optional$ True K:Partner DeckHints:Type$Aura|Equipment Oracle:At the beginning of combat on your turn, you may attach any number of Auras and Equipment you control to target permanent or player.\nPartner (You can have two commanders if both have partner.) diff --git a/forge-gui/res/cardsfolder/a/armed_and_armored.txt b/forge-gui/res/cardsfolder/a/armed_and_armored.txt index d49a2edaad3..9996ee303a5 100644 --- a/forge-gui/res/cardsfolder/a/armed_and_armored.txt +++ b/forge-gui/res/cardsfolder/a/armed_and_armored.txt @@ -2,12 +2,9 @@ Name:Armed and Armored ManaCost:1 W Types:Instant A:SP$ AnimateAll | Cost$ 1 W | Types$ Creature,Artifact | ValidCards$ Vehicle.YouCtrl | SubAbility$ ChooseDwarf | StackDescription$ Vehicles {p:You} controls become artifact creatures until end of turn. | SpellDescription$ Vehicles you control become artifact creatures until end of turn. Choose a Dwarf you control. Attach any number of Equipment you control to it. -SVar:ChooseDwarf:DB$ ChooseCard | Defined$ You | Mandatory$ True | Choices$ Dwarf.YouCtrl | ChoiceTitle$ Choose a Dwarf you control | StackDescription$ {p:You} chooses a Dwarf they control and attaches any number of Equipment they control to it. | ImprintChosen$ True | SubAbility$ ChooseEquipment -SVar:ChooseEquipment:DB$ ChooseCard | Defined$ You | MinAmount$ 0 | Amount$ X | Choices$ Equipment.YouCtrl | StackDescription$ None | ChoiceTitle$ Choose any number of Equipment you control | ForgetChosen$ True | SubAbility$ DeployDwarf -SVar:DeployDwarf:DB$ RepeatEach | RepeatSubAbility$ ArmDwarf | RepeatCards$ Card.ChosenCard | SubAbility$ DBCleanup -SVar:ArmDwarf:DB$ Attach | Object$ Remembered | Defined$ Imprinted | StackDescription$ None -SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True | ClearRemembered$ True | ClearImprinted$ True -SVar:X:Count$Valid Equipment.YouCtrl +SVar:ChooseDwarf:DB$ ChooseCard | Defined$ You | Mandatory$ True | Choices$ Dwarf.YouCtrl | ChoiceTitle$ Choose a Dwarf you control | StackDescription$ {p:You} chooses a Dwarf they control and attaches any number of Equipment they control to it. | SubAbility$ ArmDwarf +SVar:ArmDwarf:DB$ Attach | Object$ Equipment.YouCtrl | Defined$ ChosenCard | Optional$ True | StackDescription$ None | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True DeckNeeds:Type$Vehicle|Dwarf DeckHints:Type$Equipment AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/h/haakon_stromgald_scourge_avatar.txt b/forge-gui/res/cardsfolder/h/haakon_stromgald_scourge_avatar.txt index 3e1a32e0518..6c5e3b9c53c 100644 --- a/forge-gui/res/cardsfolder/h/haakon_stromgald_scourge_avatar.txt +++ b/forge-gui/res/cardsfolder/h/haakon_stromgald_scourge_avatar.txt @@ -4,7 +4,7 @@ Types:Vanguard HandLifeModifier:+0/-3 A:AB$ Effect | ActivationZone$ Command | Cost$ PayLife<1> | TgtZone$ Graveyard | ValidTgts$ Creature.YouOwn | PumpZone$ Graveyard | TgtPrompt$ Select target creature in your graveyard, you may play it this turn | RememberObjects$ Targeted | StaticAbilities$ Play | ExileOnMoved$ Graveyard | SpellDescription$ You may cast target creature card in your graveyard this turn. SVar:Play:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Graveyard | Description$ You may play remembered card. -T:Mode$ SpellCast | ValidCard$ Creature.wasCastFromYourGraveyard | ValidControllingPlayer$ You | TriggerZones$ Command | Execute$ TrigAnimate | TriggerDescription$ Whenever you cast a creature spell from your graveyard, it becomes a black Zombie Knight. +T:Mode$ SpellCast | ValidCard$ Creature.wasCastFromYourGraveyard | ValidActivatingPlayer$ You | TriggerZones$ Command | Execute$ TrigAnimate | TriggerDescription$ Whenever you cast a creature spell from your graveyard, it becomes a black Zombie Knight. SVar:TrigAnimate:DB$ Animate | Defined$ TriggeredCard | Types$ Zombie,Knight | Colors$ Black | OverwriteColors$ True | Duration$ Permanent | RemoveCreatureTypes$ True R:Event$ Moved | ValidCard$ Card.Zombie+Knight | Destination$ Graveyard | ReplaceWith$ DBExile | Description$ If a Zombie Knight would be put into your graveyard from the battlefield, exile it instead. SVar:DBExile:DB$ ChangeZone | Defined$ ReplacedCard | Origin$ Battlefield | Destination$ Exile diff --git a/forge-gui/res/cardsfolder/h/heavenly_blademaster.txt b/forge-gui/res/cardsfolder/h/heavenly_blademaster.txt index f6361e3ff8f..c079051914d 100644 --- a/forge-gui/res/cardsfolder/h/heavenly_blademaster.txt +++ b/forge-gui/res/cardsfolder/h/heavenly_blademaster.txt @@ -5,9 +5,7 @@ PT:3/6 K:Flying K:Double Strike T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBAttach | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may attach any number of Auras and Equipment you control to it. -SVar:DBAttach:DB$ RepeatEach | RepeatSubAbility$ DBRepeatAttach | RepeatCards$ Aura.YouCtrl,Equipment.YouCtrl -SVar:DBRepeatAttach:DB$ Attach | Object$ Remembered | Optional$ True | SubAbility$ DBCleanup -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:DBAttach:DB$ Attach | Object$ Valid Aura.YouCtrl,Equipment.YouCtrl | Optional$ True AI:RemoveDeck:Random S:Mode$ Continuous | Affected$ Creature.Other+YouCtrl | AddPower$ X | AddToughness$ X | Description$ Other creatures you control get +1/+1 for each Aura and Equipment attached to CARDNAME. SVar:X:Count$Valid Equipment.Attached,Aura.Attached From 33e8dc7fe244abf4a60f5be77816ec3584afa1f0 Mon Sep 17 00:00:00 2001 From: TRT <> Date: Thu, 19 Jan 2023 16:31:09 +0100 Subject: [PATCH 2/5] Fix timestamp reset messing up LKI --- .../forge/game/ability/effects/ChangeZoneEffect.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java index 68d6f40bac1..325e145281c 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java @@ -710,7 +710,14 @@ public class ChangeZoneEffect extends SpellAbilityEffect { game.getCombat().getBandOfAttacker(movedCard).setBlocked(false); combatChanged = true; } + movedCard.setTimestamp(ts); + if (movedCard.isInPlay()) { + // need to also update LKI + List lki = movedCard.getZone().getCardsAddedThisTurn(null); + lki.get(lki.lastIndexOf(movedCard)).setTimestamp(ts); + } + if (sa.hasParam("AttachAfter") && movedCard.isAttachment()) { CardCollection list = AbilityUtils.getDefinedCards(hostCard, sa.getParam("AttachAfter"), sa); if (list.isEmpty()) { @@ -1401,6 +1408,11 @@ public class ChangeZoneEffect extends SpellAbilityEffect { movedCard = game.getAction().moveToPlay(c, c.getController(), sa, moveParams); movedCard.setTimestamp(ts); + if (movedCard.isInPlay()) { + // need to also update LKI + List lki = movedCard.getZone().getCardsAddedThisTurn(null); + lki.get(lki.lastIndexOf(movedCard)).setTimestamp(ts); + } if (sa.hasParam("AttachAfter") && movedCard.isAttachment() && movedCard.isInPlay()) { CardCollection list = AbilityUtils.getDefinedCards(source, sa.getParam("AttachAfter"), sa); From 088e216c8cc65700f6d808f8e6c0ea6bcaf316ce Mon Sep 17 00:00:00 2001 From: TRT <> Date: Thu, 19 Jan 2023 17:15:42 +0100 Subject: [PATCH 3/5] Clean up --- .../res/cardsfolder/a/ardenn_intrepid_archaeologist.txt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/forge-gui/res/cardsfolder/a/ardenn_intrepid_archaeologist.txt b/forge-gui/res/cardsfolder/a/ardenn_intrepid_archaeologist.txt index b7e63660687..46c7ee66320 100644 --- a/forge-gui/res/cardsfolder/a/ardenn_intrepid_archaeologist.txt +++ b/forge-gui/res/cardsfolder/a/ardenn_intrepid_archaeologist.txt @@ -2,9 +2,8 @@ Name:Ardenn, Intrepid Archaeologist ManaCost:2 W Types:Legendary Creature Kor Scout PT:2/2 -T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | Execute$ TrigTarget | TriggerZones$ Battlefield | OptionalDecider$ You | TriggerDescription$ At the beginning of combat on your turn, you may attach any number of Auras and Equipment you control to target permanent or player. -SVar:TrigTarget:DB$ Pump | ValidTgts$ Permanent,Player | TgtPrompt$ Select target permanent or player | SubAbility$ DBAttach -SVar:DBAttach:DB$ Attach | Defined$ Targeted | Object$ Valid Aura.YouCtrl,Equipment.YouCtrl | Optional$ True +T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | Execute$ TrigAttach | TriggerZones$ Battlefield | OptionalDecider$ You | TriggerDescription$ At the beginning of combat on your turn, you may attach any number of Auras and Equipment you control to target permanent or player. +SVar:TrigAttach:DB$ Attach | Defined$ Targeted | ValidTgts$ Permanent,Player | TgtPrompt$ Select target permanent or player | Object$ Valid Aura.YouCtrl,Equipment.YouCtrl | Optional$ True K:Partner DeckHints:Type$Aura|Equipment Oracle:At the beginning of combat on your turn, you may attach any number of Auras and Equipment you control to target permanent or player.\nPartner (You can have two commanders if both have partner.) From afb8a8a756fd64f26a03ad89d07a18f8bd5cd88e Mon Sep 17 00:00:00 2001 From: TRT <> Date: Fri, 20 Jan 2023 10:03:00 +0100 Subject: [PATCH 4/5] Further cleanup --- forge-gui/res/cardsfolder/a/armed_and_armored.txt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/forge-gui/res/cardsfolder/a/armed_and_armored.txt b/forge-gui/res/cardsfolder/a/armed_and_armored.txt index 9996ee303a5..1e4fc42139c 100644 --- a/forge-gui/res/cardsfolder/a/armed_and_armored.txt +++ b/forge-gui/res/cardsfolder/a/armed_and_armored.txt @@ -1,10 +1,8 @@ Name:Armed and Armored ManaCost:1 W Types:Instant -A:SP$ AnimateAll | Cost$ 1 W | Types$ Creature,Artifact | ValidCards$ Vehicle.YouCtrl | SubAbility$ ChooseDwarf | StackDescription$ Vehicles {p:You} controls become artifact creatures until end of turn. | SpellDescription$ Vehicles you control become artifact creatures until end of turn. Choose a Dwarf you control. Attach any number of Equipment you control to it. -SVar:ChooseDwarf:DB$ ChooseCard | Defined$ You | Mandatory$ True | Choices$ Dwarf.YouCtrl | ChoiceTitle$ Choose a Dwarf you control | StackDescription$ {p:You} chooses a Dwarf they control and attaches any number of Equipment they control to it. | SubAbility$ ArmDwarf -SVar:ArmDwarf:DB$ Attach | Object$ Equipment.YouCtrl | Defined$ ChosenCard | Optional$ True | StackDescription$ None | SubAbility$ DBCleanup -SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True +A:SP$ AnimateAll | Cost$ 1 W | Types$ Creature,Artifact | ValidCards$ Vehicle.YouCtrl | SubAbility$ ArmDwarf | StackDescription$ Vehicles {p:You} controls become artifact creatures until end of turn. | SpellDescription$ Vehicles you control become artifact creatures until end of turn. Choose a Dwarf you control. Attach any number of Equipment you control to it. +SVar:ArmDwarf:DB$ Attach | Object$ Valid Equipment.YouCtrl | Defined$ Valid Dwarf.YouCtrl | Optional$ True | StackDescription$ {p:You} chooses a Dwarf they control and attaches any number of Equipment they control to it. DeckNeeds:Type$Vehicle|Dwarf DeckHints:Type$Equipment AI:RemoveDeck:All From ac54fe29b9e295a56025fe1521d16d2652585fb5 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Fri, 20 Jan 2023 22:26:48 +0100 Subject: [PATCH 5/5] Order can be wrong in cases the card ETB from different zones --- .../src/main/java/forge/game/trigger/TriggerChangesZone.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerChangesZone.java b/forge-game/src/main/java/forge/game/trigger/TriggerChangesZone.java index 6f649b982a6..af808ebe42e 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerChangesZone.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerChangesZone.java @@ -17,6 +17,7 @@ */ package forge.game.trigger; +import java.util.Collections; import java.util.EnumSet; import java.util.List; import java.util.Map; @@ -111,6 +112,7 @@ public class TriggerChangesZone extends Trigger { } if ("Battlefield".equals(runParams.get(AbilityKey.Destination))) { List etbLKI = moved.getController().getZone(ZoneType.Battlefield).getCardsAddedThisTurn(null); + Collections.sort(etbLKI, CardPredicates.compareByTimestamp()); moved = etbLKI.get(etbLKI.lastIndexOf(moved)); }