From c0fc97e81fb1f172d87b5cf2ea08eed5a3afd2e4 Mon Sep 17 00:00:00 2001 From: Lyu Zong-Hong Date: Sun, 18 Jul 2021 19:14:04 +0900 Subject: [PATCH] Update The Book of Vile Darkness --- .../game/ability/effects/AnimateEffectBase.java | 8 -------- .../forge/game/ability/effects/TokenEffectBase.java | 12 +++++++++++- .../forge/game/replacement/ReplacementEffect.java | 2 +- .../java/forge/game/spellability/SpellAbility.java | 2 +- .../java/forge/game/staticability/StaticAbility.java | 2 +- .../src/main/java/forge/game/trigger/Trigger.java | 2 +- .../upcoming/the_book_of_vile_darkness.txt | 3 +-- 7 files changed, 16 insertions(+), 15 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/AnimateEffectBase.java b/forge-game/src/main/java/forge/game/ability/effects/AnimateEffectBase.java index bba087ecd8f..42d914afa41 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/AnimateEffectBase.java +++ b/forge-game/src/main/java/forge/game/ability/effects/AnimateEffectBase.java @@ -164,14 +164,6 @@ public abstract class AnimateEffectBase extends SpellAbilityEffect { final Trigger parsedTrigger = TriggerHandler.parseTrigger(AbilityUtils.getSVar(sa, s), c, false, sa); addedTriggers.add(parsedTrigger); } - if (sa.hasParam("GainsTriggeredAbilitiesOf")) { - final List cards = AbilityUtils.getDefinedCards(sa.getHostCard(), sa.getParam("GainsTriggeredAbilitiesOf"), sa); - for (final Card card : cards) { - for (Trigger t : card.getTriggers()) { - addedTriggers.add(t.copy(c, false)); - } - } - } // give replacement effects final List addedReplacements = Lists.newArrayList(); diff --git a/forge-game/src/main/java/forge/game/ability/effects/TokenEffectBase.java b/forge-game/src/main/java/forge/game/ability/effects/TokenEffectBase.java index 09d9c0f4f68..743b5d89533 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/TokenEffectBase.java +++ b/forge-game/src/main/java/forge/game/ability/effects/TokenEffectBase.java @@ -31,6 +31,7 @@ import forge.game.event.GameEventCardStatsChanged; import forge.game.player.Player; import forge.game.replacement.ReplacementType; import forge.game.spellability.SpellAbility; +import forge.game.trigger.Trigger; import forge.game.zone.ZoneType; public abstract class TokenEffectBase extends SpellAbilityEffect { @@ -118,7 +119,7 @@ public abstract class TokenEffectBase extends SpellAbilityEffect { } tok.setTimestamp(timestamp); tok.setToken(true); - + // do effect stuff with the token if (sa.hasParam("TokenTapped")) { tok.setTapped(true); @@ -138,6 +139,15 @@ public abstract class TokenEffectBase extends SpellAbilityEffect { tok.addEtbCounter(cType, cAmount, creator); } + if (sa.hasParam("AddTriggersFrom")) { + final List cards = AbilityUtils.getDefinedCards(host, sa.getParam("AddTriggersFrom"), sa); + for (final Card card : cards) { + for (final Trigger trig : card.getTriggers()) { + tok.addTrigger(trig.copy(tok, false)); + } + } + } + if (clone) { tok.setCopiedPermanent(prototype); } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplacementEffect.java b/forge-game/src/main/java/forge/game/replacement/ReplacementEffect.java index 115b8b0caa7..69a605e76e4 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplacementEffect.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplacementEffect.java @@ -220,7 +220,7 @@ public abstract class ReplacementEffect extends TriggerReplacementBase { if (hasParam("Description") && !this.isSuppressed()) { String desc = AbilityUtils.applyDescriptionTextChangeEffects(getParam("Description"), this); String currentName; - if (this.isIntrinsic() && !this.getHostCard().isMutated() && cardState != null) { + if (this.isIntrinsic() && cardState != null && cardState.getCard() == getHostCard()) { currentName = cardState.getName(); } else { diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java index cb1ed0c530b..6cdbd1b324d 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java @@ -854,7 +854,7 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit if (node.getHostCard() != null) { String currentName; // if alternate state is viewed while card uses original - if (node.isIntrinsic() && !node.getHostCard().isMutated() && node.cardState != null) { + if (node.isIntrinsic() && node.cardState != null && node.cardState.getCard() == node.getHostCard()) { currentName = node.cardState.getName(); } else { diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbility.java b/forge-game/src/main/java/forge/game/staticability/StaticAbility.java index 151f21622e9..ba2f804cedd 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbility.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbility.java @@ -209,7 +209,7 @@ public class StaticAbility extends CardTraitBase implements IIdentifiable, Clone public final String toString() { if (hasParam("Description") && !this.isSuppressed()) { String currentName; - if (this.isIntrinsic() && !this.getHostCard().isMutated() && cardState != null) { + if (this.isIntrinsic() && cardState != null && cardState.getCard() == getHostCard()) { currentName = cardState.getName(); } else { 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 685fc21b54e..c1d71f61551 100644 --- a/forge-game/src/main/java/forge/game/trigger/Trigger.java +++ b/forge-game/src/main/java/forge/game/trigger/Trigger.java @@ -132,7 +132,7 @@ public abstract class Trigger extends TriggerReplacementBase { StringBuilder sb = new StringBuilder(); String currentName; - if (this.isIntrinsic() && !this.getHostCard().isMutated() && cardState != null) { + if (this.isIntrinsic() && cardState != null && cardState.getCard() == getHostCard()) { currentName = cardState.getName(); } else { diff --git a/forge-gui/res/cardsfolder/upcoming/the_book_of_vile_darkness.txt b/forge-gui/res/cardsfolder/upcoming/the_book_of_vile_darkness.txt index aa4327b7466..26eea2fac55 100644 --- a/forge-gui/res/cardsfolder/upcoming/the_book_of_vile_darkness.txt +++ b/forge-gui/res/cardsfolder/upcoming/the_book_of_vile_darkness.txt @@ -4,8 +4,7 @@ Types:Legendary Artifact T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | CheckSVar$ X | SVarCompare$ GE2 | TriggerDescription$ At the beginning of your end step, if you lost 2 or more life this turn, create a 2/2 black Zombie creature token. SVar:TrigToken:DB$ Token | TokenScript$ b_2_2_zombie SVar:X:PlayerCountPropertyYou$LifeLostThisTurn -A:AB$ Token | Cost$ T Exile<1/CARDNAME> Exile<1/Artifact.YouCtrl+namedEye of Vecna> Exile<1/Artifact.YouCtrl+namedHand of Vecna> | RememberCostCards$ True | ImprintTokens$ True | CostDesc$ {T}, Exile CARDNAME and artifacts you control named Eye of Vecna and Hand of Vecna: | TokenScript$ vecna | SubAbility$ DBAnimate | SpellDescription$ Create Vecna, a legendary 8/8 black Zombie God creature token with indestructible. It gains all triggered abilities of the exiled cards. -SVar:DBAnimate:DB$ Animate | Defined$ Imprinted | Duration$ Permanent | GainsTriggeredAbilitiesOf$ Remembered +A:AB$ Token | Cost$ T Exile<1/CARDNAME> Exile<1/Artifact.YouCtrl+namedEye of Vecna> Exile<1/Artifact.YouCtrl+namedHand of Vecna> | CostDesc$ {T}, Exile CARDNAME and artifacts you control named Eye of Vecna and Hand of Vecna: | TokenScript$ vecna | AddTriggersFrom$ ExiledCards | SpellDescription$ Create Vecna, a legendary 8/8 black Zombie God creature token with indestructible. It gains all triggered abilities of the exiled cards. DeckHas:Ability$Token DeckHints:Type$Zombie DeckHints:Name$Eye of Vecna|Hand of Vecna