From 565cb2040791e8f0bed84c8d05f281c24f2d4ff3 Mon Sep 17 00:00:00 2001 From: swordshine Date: Mon, 17 Mar 2014 04:41:30 +0000 Subject: [PATCH] - Fixed Heat Shimmer --- .../ability/effects/CopyPermanentEffect.java | 19 +++++++++++++++++++ .../ability/effects/SacrificeAllEffect.java | 4 ++++ forge-gui/res/cardsfolder/h/heat_shimmer.txt | 4 +++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/CopyPermanentEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CopyPermanentEffect.java index efafa54b0b9..fab5a39f823 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CopyPermanentEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CopyPermanentEffect.java @@ -21,6 +21,8 @@ import forge.game.player.Player; import forge.game.spellability.Ability; import forge.game.spellability.SpellAbility; import forge.game.spellability.TargetRestrictions; +import forge.game.trigger.Trigger; +import forge.game.trigger.TriggerHandler; import forge.game.zone.ZoneType; import forge.item.PaperCard; import forge.util.Aggregates; @@ -55,6 +57,8 @@ public class CopyPermanentEffect extends SpellAbilityEffect { final Game game = hostCard.getGame(); final ArrayList keywords = new ArrayList(); final List types = new ArrayList(); + final List svars = new ArrayList(); + final List triggers = new ArrayList(); if (sa.hasParam("Optional")) { if (!sa.getActivatingPlayer().getController().confirmAction(sa, null, "Copy this permanent?")) { return; @@ -66,6 +70,12 @@ public class CopyPermanentEffect extends SpellAbilityEffect { if (sa.hasParam("AddTypes")) { types.addAll(Arrays.asList(sa.getParam("AddTypes").split(" & "))); } + if (sa.hasParam("AddSVars")) { + svars.addAll(Arrays.asList(sa.getParam("AddSVars").split(" & "))); + } + if (sa.hasParam("Triggers")) { + triggers.addAll(Arrays.asList(sa.getParam("Triggers").split(" & "))); + } final int numCopies = sa.hasParam("NumCopies") ? AbilityUtils.calculateAmount(hostCard, sa.getParam("NumCopies"), sa) : 1; @@ -241,6 +251,15 @@ public class CopyPermanentEffect extends SpellAbilityEffect { for (final String type : types) { copy.addType(type); } + for (final String svar : svars) { + final String actualsVar = hostCard.getSVar(svar); + copy.setSVar(svar, actualsVar); + } + for (final String s : triggers) { + final String actualTrigger = hostCard.getSVar(s); + final Trigger parsedTrigger = TriggerHandler.parseTrigger(actualTrigger, copy, false); + copy.addTrigger(parsedTrigger); + } copy = game.getAction().moveToPlay(copy); copy.setCloneOrigin(hostCard); 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 3894a41d262..68b02e75a6f 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 @@ -4,6 +4,7 @@ import forge.game.Game; import forge.game.ability.AbilityUtils; import forge.game.ability.SpellAbilityEffect; import forge.game.card.Card; +import forge.game.card.CardLists; import forge.game.player.Player; import forge.game.spellability.SpellAbility; import forge.game.zone.ZoneType; @@ -51,6 +52,9 @@ public class SacrificeAllEffect extends SpellAbilityEffect { } else { list = AbilityUtils.filterListByType(game.getCardsIn(ZoneType.Battlefield), valid, sa); } + if (sa.hasParam("Controller")) { + list = CardLists.filterControlledBy(list, AbilityUtils.getDefinedPlayers(sa.getHostCard(), sa.getParam("Controller"), sa)); + } final boolean remSacrificed = sa.hasParam("RememberSacrificed"); if (remSacrificed) { diff --git a/forge-gui/res/cardsfolder/h/heat_shimmer.txt b/forge-gui/res/cardsfolder/h/heat_shimmer.txt index 003d0d042e5..82b5f873300 100644 --- a/forge-gui/res/cardsfolder/h/heat_shimmer.txt +++ b/forge-gui/res/cardsfolder/h/heat_shimmer.txt @@ -1,6 +1,8 @@ Name:Heat Shimmer ManaCost:2 R Types:Sorcery -A:SP$CopyPermanent | Cost$ 2 R | ValidTgts$ Creature | TgtPrompt$ Select target creature | Keywords$ Haste | AtEOT$ Exile | SpellDescription$ Put a token that's a copy of target creature onto the battlefield. That token has haste and "At the beginning of the end step, exile this permanent." +A:SP$CopyPermanent | Cost$ 2 R | ValidTgts$ Creature | TgtPrompt$ Select target creature | Keywords$ Haste | Triggers$ HeatShimmerTrig | AddSVars$ HearShimmerExile | SpellDescription$ Put a token that's a copy of target creature onto the battlefield. That token has haste and "At the beginning of the end step, exile this permanent." +SVar:HeatShimmerTrig:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | Execute$ HearShimmerExile | TriggerDescription$ At the beginning of the end step, exile CARDNAME. +SVar:HearShimmerExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | Defined$ Self SVar:Picture:http://www.wizards.com/global/images/magic/general/heat_shimmer.jpg Oracle:Put a token that's a copy of target creature onto the battlefield. That token has haste and "At the beginning of the end step, exile this permanent." \ No newline at end of file