From ef6afbeba1d0bce0caff89b8870589ba125c3457 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Sat, 30 Apr 2022 08:27:55 -0400 Subject: [PATCH 1/5] hold_for_ransom.txt --- forge-gui/res/cardsfolder/upcoming/hold_for_ransom.txt | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/hold_for_ransom.txt diff --git a/forge-gui/res/cardsfolder/upcoming/hold_for_ransom.txt b/forge-gui/res/cardsfolder/upcoming/hold_for_ransom.txt new file mode 100644 index 00000000000..7d097c471f4 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/hold_for_ransom.txt @@ -0,0 +1,9 @@ +Name:Hold for Ransom +ManaCost:1 W +Types:Enchantment Aura +K:Enchant creature +A:SP$ Attach | ValidTgts$ Creature | AILogic$ Curse +S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddHiddenKeyword$ CARDNAME can't attack or block. | AddAbility$ PayRansom | Description$ Enchanted creature can't attack or block and has "{7}: Hold for Ransom's controller sacrifices it and draws a card. Activate only as a sorcery." +SVar:PayRansom:AB$ Sacrifice | Cost$ 7 | SacValid$ Defined | SacDefined$ OriginalHost | SacMessage$ {c:OriginalHost} | Defined$ OriginalHostController | SubAbility$ DBDraw | SorcerySpeed$ True | SpellDescription$ ORIGINALHOST's controller sacrifices it and draws a card. Activate only as a sorcery. +SVar:DBDraw:DB$ Draw | Defined$ OriginalHostController +Oracle:Enchant creature\nEnchanted creature can't attack or block and has "{7}: Hold for Ransom's controller sacrifices it and draws a card. Activate only as a sorcery." From ef1781d261889567bb0824addd93a5fd92bf86c4 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Sat, 30 Apr 2022 08:39:52 -0400 Subject: [PATCH 2/5] AbilityUtils getDefinedPlayers() support of "OriginalHost" stuff --- .../src/main/java/forge/game/ability/AbilityUtils.java | 5 +++++ 1 file changed, 5 insertions(+) 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 68520631a61..c3afffafd90 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -1035,6 +1035,11 @@ public class AbilityUtils { if (root != null) { addPlayer(Lists.newArrayList(root), defined, players); } + } else if (defined.startsWith("OriginalHost")) { + Card originalHost = sa.getOriginalHost(); + if (originalHost != null) { + addPlayer(Lists.newArrayList(originalHost), defined, players); + } } else if (defined.startsWith("DelayTriggerRemembered") && sa instanceof SpellAbility) { SpellAbility root = ((SpellAbility)sa).getRootAbility(); From 7afb67a7daae722c46f0c3d70004a81dc078e42e Mon Sep 17 00:00:00 2001 From: Northmoc Date: Sat, 30 Apr 2022 08:40:26 -0400 Subject: [PATCH 3/5] hold_for_ransom.txt --- forge-gui/res/cardsfolder/upcoming/hold_for_ransom.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/upcoming/hold_for_ransom.txt b/forge-gui/res/cardsfolder/upcoming/hold_for_ransom.txt index 7d097c471f4..6124233f212 100644 --- a/forge-gui/res/cardsfolder/upcoming/hold_for_ransom.txt +++ b/forge-gui/res/cardsfolder/upcoming/hold_for_ransom.txt @@ -4,6 +4,6 @@ Types:Enchantment Aura K:Enchant creature A:SP$ Attach | ValidTgts$ Creature | AILogic$ Curse S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddHiddenKeyword$ CARDNAME can't attack or block. | AddAbility$ PayRansom | Description$ Enchanted creature can't attack or block and has "{7}: Hold for Ransom's controller sacrifices it and draws a card. Activate only as a sorcery." -SVar:PayRansom:AB$ Sacrifice | Cost$ 7 | SacValid$ Defined | SacDefined$ OriginalHost | SacMessage$ {c:OriginalHost} | Defined$ OriginalHostController | SubAbility$ DBDraw | SorcerySpeed$ True | SpellDescription$ ORIGINALHOST's controller sacrifices it and draws a card. Activate only as a sorcery. +SVar:PayRansom:AB$ Sacrifice | Cost$ 7 | SacDefined$ OriginalHost | Defined$ OriginalHostController | SubAbility$ DBDraw | SorcerySpeed$ True | SpellDescription$ ORIGINALHOST's controller sacrifices it and draws a card. Activate only as a sorcery. SVar:DBDraw:DB$ Draw | Defined$ OriginalHostController Oracle:Enchant creature\nEnchanted creature can't attack or block and has "{7}: Hold for Ransom's controller sacrifices it and draws a card. Activate only as a sorcery." From da53a114e7a6f710b02f1a2e119fb4549f665271 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Sat, 30 Apr 2022 21:54:03 -0400 Subject: [PATCH 4/5] hold_for_ransom.txt with SacrificeAll --- forge-gui/res/cardsfolder/upcoming/hold_for_ransom.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/upcoming/hold_for_ransom.txt b/forge-gui/res/cardsfolder/upcoming/hold_for_ransom.txt index 6124233f212..c1c26ed98fc 100644 --- a/forge-gui/res/cardsfolder/upcoming/hold_for_ransom.txt +++ b/forge-gui/res/cardsfolder/upcoming/hold_for_ransom.txt @@ -4,6 +4,6 @@ Types:Enchantment Aura K:Enchant creature A:SP$ Attach | ValidTgts$ Creature | AILogic$ Curse S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddHiddenKeyword$ CARDNAME can't attack or block. | AddAbility$ PayRansom | Description$ Enchanted creature can't attack or block and has "{7}: Hold for Ransom's controller sacrifices it and draws a card. Activate only as a sorcery." -SVar:PayRansom:AB$ Sacrifice | Cost$ 7 | SacDefined$ OriginalHost | Defined$ OriginalHostController | SubAbility$ DBDraw | SorcerySpeed$ True | SpellDescription$ ORIGINALHOST's controller sacrifices it and draws a card. Activate only as a sorcery. +SVar:PayRansom:AB$ SacrificeAll | Cost$ 7 | Defined$ OriginalHost | Controller$ OriginalHostController | SubAbility$ DBDraw | SorcerySpeed$ True | SpellDescription$ ORIGINALHOST's controller sacrifices it and draws a card. Activate only as a sorcery. SVar:DBDraw:DB$ Draw | Defined$ OriginalHostController Oracle:Enchant creature\nEnchanted creature can't attack or block and has "{7}: Hold for Ransom's controller sacrifices it and draws a card. Activate only as a sorcery." From 4601e7a7ee606d3c5e2e56a8cea729b225d86262 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Sat, 30 Apr 2022 21:54:27 -0400 Subject: [PATCH 5/5] SacrificeAllEffect expand getStackDesc --- .../ability/effects/SacrificeAllEffect.java | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/SacrificeAllEffect.java b/forge-game/src/main/java/forge/game/ability/effects/SacrificeAllEffect.java index ec0a92f06b9..cdd7b58744d 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/SacrificeAllEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/SacrificeAllEffect.java @@ -1,5 +1,6 @@ package forge.game.ability.effects; +import java.util.List; import java.util.Map; import com.google.common.collect.Maps; @@ -18,25 +19,27 @@ import forge.game.card.CardZoneTable; import forge.game.player.Player; import forge.game.spellability.SpellAbility; import forge.game.zone.ZoneType; +import forge.util.Lang; public class SacrificeAllEffect extends SpellAbilityEffect { @Override protected String getStackDescription(SpellAbility sa) { // when getStackDesc is called, just build exactly what is happening - final StringBuilder sb = new StringBuilder(); - /* - * This is not currently targeted ArrayList tgtPlayers; - * - * Target tgt = af.getAbTgt(); if (tgt != null) tgtPlayers = - * tgt.getTargetPlayers(); else tgtPlayers = - * AbilityFactory.getDefinedPlayers(sa.getHostCard(), - * sa.get("Defined"), sa); - */ - - sb.append("Sacrifice permanents."); + if (sa.hasParam("Controller")) { + List conts = getDefinedPlayersOrTargeted(sa, "Controller"); + sb.append(Lang.joinHomogenous(conts)).append(conts.size() == 1 ? " sacrifices " : " sacrifice "); + } else { + sb.append("Sacrifice "); + } + if (sa.hasParam("Defined")) { + List toSac = getDefinedCardsOrTargeted(sa); + sb.append(Lang.joinHomogenous(toSac)).append("."); + } else { + sb.append("permanents."); + } return sb.toString(); }