From 97d9c57951e5ae98cd4af47f942d0e8f72dc35c7 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Mon, 24 May 2021 14:04:46 +0200 Subject: [PATCH 1/2] Update trigger so it doesn't resolve when card moved --- forge-game/src/main/java/forge/game/CardTraitBase.java | 1 - forge-game/src/main/java/forge/game/trigger/Trigger.java | 2 +- forge-gui/res/cardsfolder/m/mimic_vat.txt | 7 ++++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/forge-game/src/main/java/forge/game/CardTraitBase.java b/forge-game/src/main/java/forge/game/CardTraitBase.java index 73e6f37bdde..b9db1d3fb06 100644 --- a/forge-game/src/main/java/forge/game/CardTraitBase.java +++ b/forge-game/src/main/java/forge/game/CardTraitBase.java @@ -348,7 +348,6 @@ public abstract class CardTraitBase extends GameObject implements IHasCardView, } list = CardLists.getValidCards(list, sIsPresent.split(","), this.getHostCard().getController(), this.getHostCard(), this); - final String rightString = presentCompare.substring(2); int right = AbilityUtils.calculateAmount(getHostCard(), rightString, this); final int left = list.size(); diff --git a/forge-game/src/main/java/forge/game/trigger/Trigger.java b/forge-game/src/main/java/forge/game/trigger/Trigger.java index 537390ee31d..0ba078ab88d 100644 --- a/forge-game/src/main/java/forge/game/trigger/Trigger.java +++ b/forge-game/src/main/java/forge/game/trigger/Trigger.java @@ -340,7 +340,7 @@ public abstract class Trigger extends TriggerReplacementBase { } } - if ( !meetsCommonRequirements(this.mapParams)) + if (!meetsCommonRequirements(this.mapParams)) return false; return true; diff --git a/forge-gui/res/cardsfolder/m/mimic_vat.txt b/forge-gui/res/cardsfolder/m/mimic_vat.txt index 412dc353d7b..c7191b18cc2 100644 --- a/forge-gui/res/cardsfolder/m/mimic_vat.txt +++ b/forge-gui/res/cardsfolder/m/mimic_vat.txt @@ -1,9 +1,10 @@ Name:Mimic Vat ManaCost:3 Types:Artifact -T:Mode$ ChangesZone | ValidCard$ Creature.nonToken | Origin$ Battlefield | Destination$ Graveyard | OptionalDecider$ You | Execute$ TrigReturn | TriggerZones$ Battlefield | TriggerDescription$ Imprint — Whenever a nontoken creature dies, you may exile that card. If you do, return each other card exiled with CARDNAME to its owner's graveyard. -SVar:TrigReturn:DB$ ChangeZone | Origin$ Exile | Destination$ Graveyard | Defined$ Imprinted | SubAbility$ DBCleanup -SVar:DBCleanup:DB$ Cleanup | ClearImprinted$ True | SubAbility$ DBExile +T:Mode$ ChangesZone | ValidCard$ Creature.nonToken | Origin$ Battlefield | Destination$ Graveyard | OptionalDecider$ You | RememberTriggeringCard$ True | Execute$ TrigReturn | TriggerZones$ Battlefield | TriggerDescription$ Imprint — Whenever a nontoken creature dies, you may exile that card. If you do, return each other card exiled with CARDNAME to its owner's graveyard. +SVar:TrigReturn:DB$ ChangeZone | Origin$ Exile | Destination$ Graveyard | Defined$ Imprinted | SubAbility$ DBCleanup1 | ConditionPresent$ Card.inRealZone Graveyard | ConditionDefined$ TriggeredNewCardLKICopy | ConditionCompare$ EQ1 +SVar:DBCleanup1:DB$ Cleanup | ClearImprinted$ True | SubAbility$ DBCleanup2 | ConditionPresent$ Card.inRealZone Graveyard | ConditionDefined$ TriggeredNewCardLKICopy | ConditionCompare$ EQ1 +SVar:DBCleanup2:DB$ Cleanup | ClearRemembered$ True | SubAbility$ DBExile SVar:DBExile:DB$ ChangeZone | Imprint$ True | Origin$ Graveyard | Destination$ Exile | Defined$ TriggeredNewCardLKICopy | AILogic$ MimicVat A:AB$ CopyPermanent | Cost$ 3 T | Defined$ Imprinted.ExiledWithSource | Choices$ Card | PumpKeywords$ Haste | AtEOT$ Exile | AILogic$ MimicVat | SpellDescription$ Create a token that's a copy of a card exiled with CARDNAME. It gains haste. Exile it at the beginning of the next end step. T:Mode$ ChangesZone | Origin$ Exile | Destination$ Any | Static$ True | ValidCard$ Card.IsImprinted+ExiledWithSource | Execute$ DBForget From 263faa98958f1d0a12fc487a8450b19410eb1eeb Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Tue, 25 May 2021 22:29:49 +0200 Subject: [PATCH 2/2] Clean up --- forge-ai/src/main/java/forge/ai/ability/DamageAiBase.java | 7 +++---- forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java | 7 ++----- forge-gui/res/cardsfolder/m/mimic_vat.txt | 7 +++---- 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/DamageAiBase.java b/forge-ai/src/main/java/forge/ai/ability/DamageAiBase.java index 3cd8a909a2b..c21c297fe62 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DamageAiBase.java +++ b/forge-ai/src/main/java/forge/ai/ability/DamageAiBase.java @@ -111,8 +111,7 @@ public abstract class DamageAiBase extends SpellAbilityAi { final CardCollectionView hand = comp.getCardsIn(ZoneType.Hand); if ((enemy.getLife() - restDamage) < 5) { - // drop the human to less than 5 - // life + // drop the human to less than 5 life return true; } @@ -147,12 +146,12 @@ public abstract class DamageAiBase extends SpellAbilityAi { } } } - if (value > 0) { //more likely to burn with larger hand + if (value > 0) { //more likely to burn with larger hand for (int i = 3; i < hand.size(); i++) { value *= 1.1f; } } - if (value < 0.2f) { //hard floor to reduce ridiculous odds for instants over time + if (value < 0.2f) { //hard floor to reduce ridiculous odds for instants over time return false; } else { final float chance = MyRandom.getRandom().nextFloat(); diff --git a/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java b/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java index 56f031019f0..bca037461c5 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java @@ -732,12 +732,10 @@ public class DamageDealAi extends DamageAiBase { } // When giving priority to targeting Creatures for mandatory - // triggers - // feel free to add the Human after we run out of good targets + // triggers feel free to add the Human after we run out of good targets // TODO: add check here if card is about to die from something - // on the stack - // or from taking combat damage + // on the stack or from taking combat damage final Cost abCost = sa.getPayCosts(); boolean freePing = immediately || abCost == null @@ -982,7 +980,6 @@ public class DamageDealAi extends DamageAiBase { @Override protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { - final Card source = sa.getHostCard(); final String damage = sa.getParam("NumDmg"); int dmg = AbilityUtils.calculateAmount(source, damage, sa); diff --git a/forge-gui/res/cardsfolder/m/mimic_vat.txt b/forge-gui/res/cardsfolder/m/mimic_vat.txt index c7191b18cc2..3589c429be7 100644 --- a/forge-gui/res/cardsfolder/m/mimic_vat.txt +++ b/forge-gui/res/cardsfolder/m/mimic_vat.txt @@ -1,10 +1,9 @@ Name:Mimic Vat ManaCost:3 Types:Artifact -T:Mode$ ChangesZone | ValidCard$ Creature.nonToken | Origin$ Battlefield | Destination$ Graveyard | OptionalDecider$ You | RememberTriggeringCard$ True | Execute$ TrigReturn | TriggerZones$ Battlefield | TriggerDescription$ Imprint — Whenever a nontoken creature dies, you may exile that card. If you do, return each other card exiled with CARDNAME to its owner's graveyard. -SVar:TrigReturn:DB$ ChangeZone | Origin$ Exile | Destination$ Graveyard | Defined$ Imprinted | SubAbility$ DBCleanup1 | ConditionPresent$ Card.inRealZone Graveyard | ConditionDefined$ TriggeredNewCardLKICopy | ConditionCompare$ EQ1 -SVar:DBCleanup1:DB$ Cleanup | ClearImprinted$ True | SubAbility$ DBCleanup2 | ConditionPresent$ Card.inRealZone Graveyard | ConditionDefined$ TriggeredNewCardLKICopy | ConditionCompare$ EQ1 -SVar:DBCleanup2:DB$ Cleanup | ClearRemembered$ True | SubAbility$ DBExile +T:Mode$ ChangesZone | ValidCard$ Creature.nonToken | Origin$ Battlefield | Destination$ Graveyard | OptionalDecider$ You | Execute$ TrigReturn | TriggerZones$ Battlefield | TriggerDescription$ Imprint — Whenever a nontoken creature dies, you may exile that card. If you do, return each other card exiled with CARDNAME to its owner's graveyard. +SVar:TrigReturn:DB$ ChangeZone | Origin$ Exile | Destination$ Graveyard | Defined$ Imprinted | SubAbility$ DBCleanup | ConditionPresent$ Card.inRealZone Graveyard | ConditionDefined$ TriggeredNewCardLKICopy | ConditionCompare$ EQ1 +SVar:DBCleanup:DB$ Cleanup | ClearImprinted$ True | SubAbility$ DBExile | ConditionPresent$ Card.inRealZone Graveyard | ConditionDefined$ TriggeredNewCardLKICopy | ConditionCompare$ EQ1 SVar:DBExile:DB$ ChangeZone | Imprint$ True | Origin$ Graveyard | Destination$ Exile | Defined$ TriggeredNewCardLKICopy | AILogic$ MimicVat A:AB$ CopyPermanent | Cost$ 3 T | Defined$ Imprinted.ExiledWithSource | Choices$ Card | PumpKeywords$ Haste | AtEOT$ Exile | AILogic$ MimicVat | SpellDescription$ Create a token that's a copy of a card exiled with CARDNAME. It gains haste. Exile it at the beginning of the next end step. T:Mode$ ChangesZone | Origin$ Exile | Destination$ Any | Static$ True | ValidCard$ Card.IsImprinted+ExiledWithSource | Execute$ DBForget