diff --git a/forge-ai/src/main/java/forge/ai/ability/DamagePreventAi.java b/forge-ai/src/main/java/forge/ai/ability/DamagePreventAi.java index 8ea6208ffed..806c08fddfd 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DamagePreventAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DamagePreventAi.java @@ -43,7 +43,7 @@ public class DamagePreventAi extends SpellAbilityAi { final TargetRestrictions tgt = sa.getTargetRestrictions(); if (tgt == null) { // As far as I can tell these Defined Cards will only have one of them - final List objects = AbilityUtils.getDefinedObjects(sa.getHostCard(), sa.getParam("Defined"), sa); + final List objects = AbilityUtils.getDefinedObjects(hostCard, sa.getParam("Defined"), sa); // react to threats on the stack if (!game.getStack().isEmpty()) { @@ -138,7 +138,7 @@ public class DamagePreventAi extends SpellAbilityAi { } } if (sa.usesTargeting() && sa.isDividedAsYouChoose() && !sa.getTargets().isEmpty()) { - sa.addDividedAllocation(sa.getTargets().get(0), AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("Amount"), sa)); + sa.addDividedAllocation(sa.getTargets().get(0), AbilityUtils.calculateAmount(hostCard, sa.getParam("Amount"), sa)); } return chance; diff --git a/forge-game/src/main/java/forge/game/ability/effects/CountersPutEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CountersPutEffect.java index 252cd54c799..7a04a7b5a2f 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CountersPutEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CountersPutEffect.java @@ -476,10 +476,10 @@ public class CountersPutEffect extends SpellAbilityEffect { // these trigger are one per counter for (int i = 0; i < added; i++) { - final Trigger trig = TriggerHandler.parseTrigger(delTrig.toString(), sa.getHostCard(), intrinsic); + final Trigger trig = TriggerHandler.parseTrigger(delTrig.toString(), host, intrinsic); trig.addRemembered(tgt); - final SpellAbility newSa = AbilityFactory.getAbility(trigSA, sa.getHostCard()); + final SpellAbility newSa = AbilityFactory.getAbility(trigSA, host); newSa.setIntrinsic(intrinsic); trig.setOverridingAbility(newSa); sa.getActivatingPlayer().getGame().getTriggerHandler().registerDelayedTrigger(trig); diff --git a/forge-game/src/main/java/forge/game/ability/effects/CountersRemoveAllEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CountersRemoveAllEffect.java index fb80153cbd8..bf99ae74127 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CountersRemoveAllEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CountersRemoveAllEffect.java @@ -79,7 +79,7 @@ public class CountersRemoveAllEffect extends SpellAbilityEffect { } } if (sa.hasParam("RememberAmount")) { - sa.getHostCard().setChosenNumber(numberRemoved); + sa.getHostCard().addRemembered(Integer.valueOf(numberRemoved)); } } } diff --git a/forge-game/src/main/java/forge/game/ability/effects/MustAttackEffect.java b/forge-game/src/main/java/forge/game/ability/effects/MustAttackEffect.java index 16eb26c3bd5..56c7224834c 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/MustAttackEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/MustAttackEffect.java @@ -67,6 +67,7 @@ public class MustAttackEffect extends SpellAbilityEffect { } } + // TODO these should not override but add another requirement for (final Player p : tgtPlayers) { if ((tgt == null) || p.canBeTargetedBy(sa)) { if (thisTurn) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/MustBlockEffect.java b/forge-game/src/main/java/forge/game/ability/effects/MustBlockEffect.java index 0554eeb3d01..214cf97fb1d 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/MustBlockEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/MustBlockEffect.java @@ -65,7 +65,6 @@ public class MustBlockEffect extends SpellAbilityEffect { } else { final Card attacker = cards.get(0); c.addMustBlockCard(attacker); - System.out.println(c + " is adding " + attacker + " to mustBlockCards: " + c.getMustBlockCards()); } } } 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 2e7aeb68691..7e6699f112c 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -1477,7 +1477,7 @@ public class CardFactoryUtil { "TgtPrompt$ Select target artifact creature | CounterType$ P1P1 | CounterNum$ ModularX | Modular$ True"; String trigStr = "Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard" + - " | OptionalDecider$ TriggeredCardController | TriggerController$ TriggeredCardController" + + " | OptionalDecider$ TriggeredCardController" + " | Secondary$ True | TriggerDescription$ When CARDNAME dies, " + "you may put a +1/+1 counter on target artifact creature for each +1/+1 counter on CARDNAME"; @@ -1784,8 +1784,7 @@ public class CardFactoryUtil { final String actualTrigger = "Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard" + "| Secondary$ True | OptionalDecider$ You | ValidCard$ Card.Self" - + "| TriggerController$ TriggeredCardController | TriggerDescription$ " + k[0] + " " + k[1] - + " (" + inst.getReminderText() + ")"; + + "| TriggerDescription$ " + k[0] + " " + k[1] + " (" + inst.getReminderText() + ")"; final String effect = "DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand" + "| ValidTgts$ Spirit.YouOwn+cmcLE" + k[1]; final Trigger parsedTrigger = TriggerHandler.parseTrigger(actualTrigger, card, intrinsic); diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java index 5b448db36f0..d11e720f017 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java @@ -870,7 +870,7 @@ public final class StaticAbilityContinuous { // but only do it if the trigger doesn't already have a overriding ability addedTrigger.add(actualTrigger); if (params.containsKey("TriggerRememberDefined")) { - String triggerRemembered = (params.get("TriggerRememberDefined")); + String triggerRemembered = params.get("TriggerRememberDefined"); for (final String rem : triggerRemembered.split(",")) { for (final Object o : AbilityUtils.getDefinedEntities(hostCard, rem, stAb)) { actualTrigger.addRemembered(o); diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityIgnoreHexproofShroud.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityIgnoreHexproofShroud.java index 6a28d3df47d..b0a12c9a157 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityIgnoreHexproofShroud.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityIgnoreHexproofShroud.java @@ -17,15 +17,15 @@ public class StaticAbilityIgnoreHexproofShroud { final Game game = entity.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (stAb.isSuppressed() || !stAb.checkConditions()) { - continue; - } if (keyword.equals(Keyword.HEXPROOF) && !stAb.getParam("Mode").equals(HEXPROOF_MODE)) { continue; } if (keyword.equals(Keyword.SHROUD) && !stAb.getParam("Mode").equals(SHROUD_MODE)) { continue; } + if (stAb.isSuppressed() || !stAb.checkConditions()) { + continue; + } if (commonAbility(stAb, entity, spellAbility)) { return true; } diff --git a/forge-gui/res/cardsfolder/d/dementia_sliver.txt b/forge-gui/res/cardsfolder/d/dementia_sliver.txt index 6cf542fc81b..964d33e1481 100644 --- a/forge-gui/res/cardsfolder/d/dementia_sliver.txt +++ b/forge-gui/res/cardsfolder/d/dementia_sliver.txt @@ -4,8 +4,9 @@ Types:Creature Sliver PT:3/3 S:Mode$ Continuous | Affected$ Sliver | AddAbility$ ABDementiaNameCard | AddSVar$ DBDementiaReveal & DBDementiaDiscard | Description$ All Slivers have "{T}: Choose a card name. Target opponent reveals a card at random from their hand. If that card has the chosen name, that player discards it. Activate only during your turn." SVar:ABDementiaNameCard:AB$ NameCard | Cost$ T | Defined$ You | SubAbility$ DBDementiaReveal | SpellDescription$ Choose a card name. Target opponent reveals a card at random from their hand. If that card has the chosen name, that player discards it. Activate only during your turn. -SVar:DBDementiaReveal:DB$ Reveal | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | Random$ True | PlayerTurn$ True | SubAbility$ DBDementiaDiscard -SVar:DBDementiaDiscard:DB$ Discard | DiscardValid$ Card.NamedCard | Mode$ TgtChoose | Defined$ Targeted +SVar:DBDementiaReveal:DB$ Reveal | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | Random$ True | PlayerTurn$ True | RememberRevealed$ True | SubAbility$ DBDementiaDiscard +SVar:DBDementiaDiscard:DB$ Discard | DiscardValid$ Card.NamedCard+IsRemembered | Mode$ TgtChoose | Defined$ Targeted | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True AI:RemoveDeck:All AI:RemoveDeck:Random SVar:Picture:http://www.wizards.com/global/images/magic/general/dementia_sliver.jpg diff --git a/forge-gui/res/cardsfolder/t/thief_of_blood.txt b/forge-gui/res/cardsfolder/t/thief_of_blood.txt index eb91d9e6128..670eb8b0c1a 100644 --- a/forge-gui/res/cardsfolder/t/thief_of_blood.txt +++ b/forge-gui/res/cardsfolder/t/thief_of_blood.txt @@ -7,7 +7,7 @@ K:ETBReplacement:Other:DBRemoveCounterAll SVar:DBRemoveCounterAll:DB$ RemoveCounterAll | ValidCards$ Permanent | AllCounterTypes$ True | StackDescription$ SpellDescription | SubAbility$ DBPutCounters | RememberAmount$ True | SpellDescription$ As CARDNAME enters the battlefield, remove all counters from all permanents. CARDNAME enters the battlefield with a +1/+1 counter on it for each counter removed this way. SVar:DBPutCounters:DB$ PutCounter | ETB$ True | Defined$ Self | CounterType$ P1P1 | CounterNum$ X | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -SVar:X:Count$ChosenNumber +SVar:X:Count$RememberedNumber AI:RemoveDeck:Random DeckHas:Ability$Counters Oracle:Flying\nAs Thief of Blood enters the battlefield, remove all counters from all permanents. Thief of Blood enters the battlefield with a +1/+1 counter on it for each counter removed this way.