From 2abbcea1fb1e86d07106a5ca13fce3c886d04cb8 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Fri, 3 Sep 2021 08:58:23 -0400 Subject: [PATCH] improve Decayed keyword trigger implementation --- .../java/forge/game/card/CardFactoryUtil.java | 43 ++++++++++--------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index 059c24ebe72..de916a419c9 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -968,6 +968,26 @@ public class CardFactoryUtil { trigger.setOverridingAbility(AbilityFactory.getAbility(effect, card)); inst.addTrigger(trigger); + } else if (keyword.equals("Decayed")) { + final String attackTrig = "Mode$ Attacks | ValidCard$ Card.Self | Secondary$ True | TriggerDescription$ " + + "When a creature with decayed attacks, sacrifice it at end of combat."; + + final String delayTrigStg = "DB$ DelayedTrigger | Mode$ Phase | Phase$ EndCombat | ValidPlayer$ Player | " + + "TriggerDescription$ At end of combat, sacrifice CARDNAME."; + + final String trigSacStg = "DB$ SacrificeAll | Defined$ Self | Controller$ You"; + + SpellAbility delayTrigSA = AbilityFactory.getAbility(delayTrigStg, card); + + AbilitySub sacSA = (AbilitySub) AbilityFactory.getAbility(trigSacStg, card); + delayTrigSA.setAdditionalAbility("Execute", sacSA); + + final Trigger parsedTrigger = TriggerHandler.parseTrigger(attackTrig, card, intrinsic); + + delayTrigSA.setIntrinsic(intrinsic); + + parsedTrigger.setOverridingAbility(delayTrigSA); + inst.addTrigger(parsedTrigger); } else if (keyword.equals("Demonstrate")) { final String trigScript = "Mode$ SpellCast | ValidCard$ Card.Self | TriggerDescription$ Demonstrate (" + inst.getReminderText() + ")"; final String youCopyStr = "DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | MayChooseTarget$ True | Optional$ True | RememberCopies$ True"; @@ -3401,26 +3421,9 @@ public class CardFactoryUtil { } else if (keyword.startsWith("Dash")) { effect = "Mode$ Continuous | Affected$ Card.Self+dashed | AddKeyword$ Haste"; } else if (keyword.equals("Decayed")) { - StringBuilder sb = new StringBuilder(); - sb.append("Mode$ Continuous | Affected$ Card.Self | AddTrigger$ DecayedTrigger | AddHiddenKeyword$ "); - sb.append("CARDNAME can't block."); - effect = sb.toString(); - - sb = new StringBuilder(); - sb.append("Mode$ Attacks | ValidCard$ Card.Self | Execute$ DelayedTrig | TriggerDescription$ "); - sb.append("When CARDNAME attacks, sacrifice it at end of combat."); - String trig = sb.toString(); - - sb = new StringBuilder(); - sb.append("DB$ DelayedTrigger | Mode$ Phase | Phase$ EndCombat | ValidPlayer$ Player | Execute$ "); - sb.append("TrigSacrifice | TriggerDescription$ At end of combat, sacrifice CARDNAME."); - String delTrig = sb.toString(); - - String trigSac = "DB$ SacrificeAll | Defined$ Self | Controller$ You"; - - svars.put("DecayedTrigger", trig); - svars.put("DelayedTrig", delTrig); - svars.put("TrigSacrifice", trigSac); + effect = "Mode$ Continuous | Affected$ Card.Self | AddHiddenKeyword$ CARDNAME can't block. | " + + "Secondary$ True"; + svars.put("SacrificeEndCombat", "True"); } else if (keyword.equals("Defender")) { effect = "Mode$ CantAttack | ValidCard$ Card.Self | DefenderKeyword$ True | Secondary$ True"; } else if (keyword.equals("Devoid")) {