From 4ce3e33a610ed2bb113710edcc17911d7b866262 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Sat, 14 Oct 2023 14:00:55 +0200 Subject: [PATCH] Fix Garth One-Eye --- .../ability/effects/ChooseCardNameEffect.java | 26 +++++-------------- .../game/ability/effects/PlayEffect.java | 2 +- .../ability/effects/RollPlanarDiceEffect.java | 1 - .../src/main/java/forge/game/card/Card.java | 5 ++-- forge-gui/res/cardsfolder/g/garth_one_eye.txt | 2 +- ...ion_of_new_capenna_holy_frazzle_cannon.txt | 2 +- .../l/livaan_cultist_of_tiamat.txt | 2 +- forge-gui/res/cardsfolder/w/willbreaker.txt | 2 +- 8 files changed, 14 insertions(+), 28 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChooseCardNameEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChooseCardNameEffect.java index 83fa002fdae..e2eae0a4087 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChooseCardNameEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChooseCardNameEffect.java @@ -50,7 +50,6 @@ public class ChooseCardNameEffect extends SpellAbilityEffect { boolean randomChoice = sa.hasParam("AtRandom"); boolean chooseFromDefined = sa.hasParam("ChooseFromDefinedCards"); boolean chooseFromList = sa.hasParam("ChooseFromList"); - boolean chooseFromOneTimeList = sa.hasParam("ChooseFromOneTimeList"); if (!randomChoice) { if (sa.hasParam("SelectPrompt")) { @@ -105,6 +104,9 @@ public class ChooseCardNameEffect extends SpellAbilityEffect { for (String name : names) { // Cardnames that include "," must use ";" instead in ChooseFromList$ (i.e. Tovolar; Dire Overlord) name = name.replace(";", ","); + if (sa.hasParam("ExcludeChosen") && host.getNamedCards().contains(name)) { + continue; + } faces.add(StaticData.instance().getCommonCards().getFaceByName(name)); } if (randomChoice) { @@ -112,23 +114,7 @@ public class ChooseCardNameEffect extends SpellAbilityEffect { } else { chosen = p.getController().chooseCardName(sa, faces, message); } - } else if (chooseFromOneTimeList) { - String [] names = sa.getParam("ChooseFromOneTimeList").split(","); - List faces = new ArrayList<>(); - for (String name : names) { - faces.add(StaticData.instance().getCommonCards().getFaceByName(name)); - } - chosen = p.getController().chooseCardName(sa, faces, message); - - // Remove chosen Name from List - StringBuilder sb = new StringBuilder(); - for (String name : names) { - if (chosen.equals(name)) continue; - if (sb.length() > 0) sb.append(','); - sb.append(name); - } - sa.putParam("ChooseFromOneTimeList", sb.toString()); - } else { + } else { // use CardFace because you might name a alternate names Predicate cpp = Predicates.alwaysTrue(); if (sa.hasParam("ValidCards")) { @@ -152,7 +138,9 @@ public class ChooseCardNameEffect extends SpellAbilityEffect { } } - host.addNamedCard(chosen); + if (!chosen.isEmpty()) { + host.addNamedCard(chosen); + } if (!randomChoice) { p.setNamedCard(chosen); } diff --git a/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java b/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java index 652b1b1377b..0c1b470822b 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java @@ -161,7 +161,7 @@ public class PlayEffect extends SpellAbilityEffect { return; } } else if (sa.hasParam("CopyFromChosenName")) { - String name = source.getNamedCard(); + String name = controller.getNamedCard(); if (name.trim().isEmpty()) return; Card card = Card.fromPaperCard(StaticData.instance().getCommonCards().getUniqueByName(name), controller); // so it gets added to stack diff --git a/forge-game/src/main/java/forge/game/ability/effects/RollPlanarDiceEffect.java b/forge-game/src/main/java/forge/game/ability/effects/RollPlanarDiceEffect.java index 61677c90bce..88f2d508982 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/RollPlanarDiceEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/RollPlanarDiceEffect.java @@ -33,6 +33,5 @@ public class RollPlanarDiceEffect extends SpellAbilityEffect { PlanarDice result = PlanarDice.roll(activator, null); String message = Localizer.getInstance().getMessage("lblPlanarDiceResult", result.toString()); game.getAction().notifyOfValue(sa, activator, message, null); - } } diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 3986d90ea13..943e642c69d 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -288,7 +288,6 @@ public class Card extends GameEntity implements Comparable, IHasSVars { private List notedTypes = new ArrayList<>(); private List chosenColors; private List chosenName = new ArrayList<>(); - private String chosenName2 = ""; private Integer chosenNumber; private Player chosenPlayer; private Player protectingPlayer; @@ -1947,7 +1946,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars { // used for cards like Meddling Mage... public final String getNamedCard() { - return hasNamedCard() ? chosenName.get(0) : ""; + return hasNamedCard() ? Iterables.getLast(chosenName) : ""; } public final List getNamedCards() { return chosenName == null ? Lists.newArrayList() : chosenName; @@ -1963,7 +1962,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars { } public boolean hasNamedCard() { - return chosenName != null && !chosenName.isEmpty(); + return chosenName != null && !chosenName.isEmpty(); } public boolean hasChosenEvenOdd() { diff --git a/forge-gui/res/cardsfolder/g/garth_one_eye.txt b/forge-gui/res/cardsfolder/g/garth_one_eye.txt index 2a615ad7e41..15ad78c1738 100644 --- a/forge-gui/res/cardsfolder/g/garth_one_eye.txt +++ b/forge-gui/res/cardsfolder/g/garth_one_eye.txt @@ -2,7 +2,7 @@ Name:Garth One-Eye ManaCost:W U B R G Types:Legendary Creature Human Wizard PT:5/5 -A:AB$ NameCard | Cost$ T | Defined$ You | ChooseFromOneTimeList$ Disenchant,Braingeyser,Terror,Shivan Dragon,Regrowth,Black Lotus | SubAbility$ DBCast | StackDescription$ SpellDescription | SpellDescription$ Choose a card name that hasn't been chosen from among Disenchant, Braingeyser, Terror, Shivan Dragon, Regrowth, and Black Lotus. Create a copy of the card with the chosen name. You may cast the copy. (You still pay its costs.) +A:AB$ NameCard | Cost$ T | Defined$ You | ChooseFromList$ Disenchant,Braingeyser,Terror,Shivan Dragon,Regrowth,Black Lotus | ExcludeChosen$ True | SubAbility$ DBCast | StackDescription$ SpellDescription | SpellDescription$ Choose a card name that hasn't been chosen from among Disenchant, Braingeyser, Terror, Shivan Dragon, Regrowth, and Black Lotus. Create a copy of the card with the chosen name. You may cast the copy. (You still pay its costs.) SVar:DBCast:DB$ Play | CopyFromChosenName$ True | Optional$ True | StackDescription$ None AI:RemoveDeck:All Oracle:{T}: Choose a card name that hasn't been chosen from among Disenchant, Braingeyser, Terror, Shivan Dragon, Regrowth, and Black Lotus. Create a copy of the card with the chosen name. You may cast the copy. (You still pay its costs.) diff --git a/forge-gui/res/cardsfolder/i/invasion_of_new_capenna_holy_frazzle_cannon.txt b/forge-gui/res/cardsfolder/i/invasion_of_new_capenna_holy_frazzle_cannon.txt index ddb6c1f25c5..b2f58245451 100644 --- a/forge-gui/res/cardsfolder/i/invasion_of_new_capenna_holy_frazzle_cannon.txt +++ b/forge-gui/res/cardsfolder/i/invasion_of_new_capenna_holy_frazzle_cannon.txt @@ -16,7 +16,7 @@ ManaCost:no cost Colors:white,black Types:Artifact Equipment T:Mode$ Attacks | ValidCard$ Creature.EquippedBy | Execute$ TrigPutCounters | TriggerDescription$ Whenever equipped creature attacks, put a +1/+1 counter on that creature and each other creature you control that shares a creature type with it. -SVar:TrigPutCounters:DB$ PutCounterAll | ValidCards$ Creature.EquippedBy,Creature.YouCtrl+!Equippedby+sharesCreatureTypeWith Equipped | CounterType$ P1P1 +SVar:TrigPutCounters:DB$ PutCounterAll | ValidCards$ Creature.EquippedBy,Creature.YouCtrl+!EquippedBy+sharesCreatureTypeWith Equipped | CounterType$ P1P1 DeckHas:Ability$Counters S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddSVar$ AE SVar:AE:SVar:HasAttackEffect:TRUE diff --git a/forge-gui/res/cardsfolder/l/livaan_cultist_of_tiamat.txt b/forge-gui/res/cardsfolder/l/livaan_cultist_of_tiamat.txt index 6b90040aa9e..d30a6156693 100644 --- a/forge-gui/res/cardsfolder/l/livaan_cultist_of_tiamat.txt +++ b/forge-gui/res/cardsfolder/l/livaan_cultist_of_tiamat.txt @@ -3,7 +3,7 @@ ManaCost:2 R Types:Legendary Creature Dragon Shaman PT:1/3 T:Mode$ SpellCast | ValidCard$ Card.nonCreature | ValidActivatingPlayer$ You | Execute$ TrigPump | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast a noncreature spell, target creature gets +X/+0 until end of turn, where X is that spell's mana value. -SVar:TrigPump:DB$ Pump | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | NumAtt$ +X +SVar:TrigPump:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature you control | NumAtt$ +X SVar:X:TriggeredStackInstance$CardManaCostLKI K:Choose a Background Oracle:Whenever you cast a noncreature spell, target creature gets +X/+0 until end of turn, where X is that spell's mana value.\nChoose a Background (You can have a Background as a second commander.) diff --git a/forge-gui/res/cardsfolder/w/willbreaker.txt b/forge-gui/res/cardsfolder/w/willbreaker.txt index f98461c4578..53e77a09ffe 100644 --- a/forge-gui/res/cardsfolder/w/willbreaker.txt +++ b/forge-gui/res/cardsfolder/w/willbreaker.txt @@ -3,5 +3,5 @@ ManaCost:3 U U Types:Creature Human Wizard PT:2/3 T:Mode$ BecomesTarget | ValidTarget$ Creature.OppCtrl+inZoneBattlefield | ValidSource$ SpellAbility.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigGainControl | TriggerDescription$ Whenever a creature an opponent controls becomes the target of a spell or ability you control, gain control of that creature for as long as you control CARDNAME. -SVar:TrigGainControl:DB$ GainControl | Defined$ TriggeredTarget | NewController$ You | LoseControl$ LeavesPlay,LoseControl +SVar:TrigGainControl:DB$ GainControl | Defined$ TriggeredTargetLKICopy | NewController$ You | LoseControl$ LeavesPlay,LoseControl Oracle:Whenever a creature an opponent controls becomes the target of a spell or ability you control, gain control of that creature for as long as you control Willbreaker.