diff --git a/Mage/src/main/java/mage/abilities/TriggeredAbilityImpl.java b/Mage/src/main/java/mage/abilities/TriggeredAbilityImpl.java index 37e1b5482a..7fb0c0b225 100644 --- a/Mage/src/main/java/mage/abilities/TriggeredAbilityImpl.java +++ b/Mage/src/main/java/mage/abilities/TriggeredAbilityImpl.java @@ -31,6 +31,7 @@ import java.util.UUID; import mage.MageObject; import mage.abilities.effects.Effect; import mage.constants.AbilityType; +import mage.constants.Outcome; import mage.constants.Zone; import mage.game.Game; import mage.game.events.GameEvent; @@ -88,7 +89,7 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge MageObject object = game.getObject(getSourceId()); Player player = game.getPlayer(this.getControllerId()); if (player != null && object != null) { - if (!player.chooseUse(getEffects().get(0).getOutcome(), this.getRule(object.getLogName()), this, game)) { + if (!player.chooseUse(getEffects().isEmpty() ? Outcome.Detriment : getEffects().get(0).getOutcome(), this.getRule(object.getLogName()), this, game)) { return false; } } else { diff --git a/Mage/src/main/java/mage/abilities/effects/common/CreateDelayedTriggeredAbilityEffect.java b/Mage/src/main/java/mage/abilities/effects/common/CreateDelayedTriggeredAbilityEffect.java index 1eb481c48d..b6cd8f3554 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/CreateDelayedTriggeredAbilityEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/CreateDelayedTriggeredAbilityEffect.java @@ -32,6 +32,7 @@ import mage.abilities.DelayedTriggeredAbility; import mage.abilities.Mode; import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; +import mage.constants.Outcome; import mage.game.Game; /** @@ -53,7 +54,7 @@ public class CreateDelayedTriggeredAbilityEffect extends OneShotEffect { } public CreateDelayedTriggeredAbilityEffect(DelayedTriggeredAbility ability, boolean copyTargets, boolean initAbility) { - super(ability.getEffects().get(0).getOutcome()); + super(ability.getEffects().isEmpty() ? Outcome.Detriment : ability.getEffects().get(0).getOutcome()); this.ability = ability; this.copyTargets = copyTargets; this.initAbility = initAbility; diff --git a/Mage/src/main/java/mage/abilities/effects/common/CreateSpecialActionEffect.java b/Mage/src/main/java/mage/abilities/effects/common/CreateSpecialActionEffect.java index 8addab1bf0..02d0b896e9 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/CreateSpecialActionEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/CreateSpecialActionEffect.java @@ -25,13 +25,13 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - package mage.abilities.effects.common; import mage.abilities.Ability; import mage.abilities.Mode; import mage.abilities.SpecialAction; import mage.abilities.effects.OneShotEffect; +import mage.constants.Outcome; import mage.game.Game; /** @@ -43,7 +43,7 @@ public class CreateSpecialActionEffect extends OneShotEffect { protected SpecialAction action; public CreateSpecialActionEffect(SpecialAction action) { - super(action.getEffects().get(0).getOutcome()); + super(action.getEffects().isEmpty() ? Outcome.Detriment : action.getEffects().get(0).getOutcome()); this.action = action; } diff --git a/Mage/src/main/java/mage/game/stack/StackAbility.java b/Mage/src/main/java/mage/game/stack/StackAbility.java index 34f857fa6a..98a45a40ad 100644 --- a/Mage/src/main/java/mage/game/stack/StackAbility.java +++ b/Mage/src/main/java/mage/game/stack/StackAbility.java @@ -54,6 +54,7 @@ import mage.constants.AbilityType; import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.EffectType; +import mage.constants.Outcome; import mage.constants.Zone; import mage.constants.ZoneDetail; import mage.game.Game; @@ -194,7 +195,7 @@ public class StackAbility extends StackObjImpl implements Ability { public ObjectColor getColor(Game game) { return emptyColor; } - + @Override public ObjectColor getFrameColor(Game game) { return ability.getSourceObject(game).getFrameColor(game); @@ -220,7 +221,7 @@ public class StackAbility extends StackObjImpl implements Ability { public MageInt getToughness() { return MageInt.EmptyMageInt; } - + @Override public int getStartingLoyalty() { return 0; @@ -590,9 +591,10 @@ public class StackAbility extends StackObjImpl implements Ability { game.getStack().push(newStackAbility); if (chooseNewTargets && newAbility.getTargets().size() > 0) { Player controller = game.getPlayer(newControllerId); - if (controller.chooseUse(newAbility.getEffects().get(0).getOutcome(), "Choose new targets?", source, game)) { + Outcome outcome = newAbility.getEffects().isEmpty() ? Outcome.Detriment : newAbility.getEffects().get(0).getOutcome(); + if (controller.chooseUse(outcome, "Choose new targets?", source, game)) { newAbility.getTargets().clearChosen(); - newAbility.getTargets().chooseTargets(newAbility.getEffects().get(0).getOutcome(), newControllerId, newAbility, false, game); + newAbility.getTargets().chooseTargets(outcome, newControllerId, newAbility, false, game); } } game.fireEvent(new GameEvent(GameEvent.EventType.COPIED_STACKOBJECT, newStackAbility.getId(), this.getId(), newControllerId)); diff --git a/Mage/src/main/java/mage/game/stack/StackObjImpl.java b/Mage/src/main/java/mage/game/stack/StackObjImpl.java index d37d6f78a9..d0012217a7 100644 --- a/Mage/src/main/java/mage/game/stack/StackObjImpl.java +++ b/Mage/src/main/java/mage/game/stack/StackObjImpl.java @@ -163,8 +163,9 @@ public abstract class StackObjImpl implements StackObject { for (UUID targetId : target.getTargets()) { String targetNames = getNamesOftargets(targetId, game); // change the target? + Outcome outcome = mode.getEffects().isEmpty() ? Outcome.Detriment : mode.getEffects().get(0).getOutcome(); if (targetNames != null - && (forceChange || targetController.chooseUse(mode.getEffects().get(0).getOutcome(), "Change this target: " + targetNames + "?", ability, game))) { + && (forceChange || targetController.chooseUse(outcome, "Change this target: " + targetNames + "?", ability, game))) { Set<UUID> possibleTargets = target.possibleTargets(this.getSourceId(), getControllerId(), game); // choose exactly one other target - already targeted objects are not counted if (forceChange && possibleTargets != null && possibleTargets.size() > 1) { // controller of spell must be used (e.g. TargetOpponent) @@ -176,7 +177,7 @@ public abstract class StackObjImpl implements StackObject { iteration++; newTarget.clearChosen(); - newTarget.chooseTarget(mode.getEffects().get(0).getOutcome(), getControllerId(), ability, game); + newTarget.chooseTarget(outcome, getControllerId(), ability, game); // check target restriction if (newTarget.getFirstTarget() != null && filterNewTarget != null) { Permanent newTargetPermanent = game.getPermanent(newTarget.getFirstTarget()); @@ -203,7 +204,7 @@ public abstract class StackObjImpl implements StackObject { do { again = false; tempTarget.clearChosen(); - if (!tempTarget.chooseTarget(mode.getEffects().get(0).getOutcome(), getControllerId(), ability, game)) { + if (!tempTarget.chooseTarget(outcome, getControllerId(), ability, game)) { if (targetController.chooseUse(Outcome.Benefit, "No target object selected. Reset to original target?", ability, game)) { // use previous target no target was selected newTarget.addTarget(targetId, target.getTargetAmount(targetId), ability, game, false); @@ -211,7 +212,8 @@ public abstract class StackObjImpl implements StackObject { again = true; } } else // if possible add the alternate Target - it may not be included in the old definition nor in the already selected targets of the new definition - if (newTarget.getTargets().contains(tempTarget.getFirstTarget()) || target.getTargets().contains(tempTarget.getFirstTarget())) { + { + if (newTarget.getTargets().contains(tempTarget.getFirstTarget()) || target.getTargets().contains(tempTarget.getFirstTarget())) { if (targetController.isHuman()) { if (targetController.chooseUse(Outcome.Benefit, "This target was already selected from origin spell. Reset to original target?", ability, game)) { // use previous target no target was selected @@ -240,6 +242,7 @@ public abstract class StackObjImpl implements StackObject { // valid target was selected, add it to the new target definition newTarget.addTarget(tempTarget.getFirstTarget(), target.getTargetAmount(targetId), ability, game, false); } + } } while (again && targetController.canRespond()); } } // keep the target