diff --git a/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java b/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java index e9a0fe75a89..68936a2f7ae 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java @@ -255,6 +255,8 @@ public class PumpEffect extends SpellAbilityEffect { replaced = host.getChosenType(); } else if (defined.equals("CardUIDSource")) { replaced = "CardUID_" + String.valueOf(host.getId()); + } else if (defined.equals("ActivatorName")) { + replaced = sa.getActivatingPlayer().getName(); } for (int i = 0; i < keywords.size(); i++) { keywords.set(i, TextUtil.fastReplace(keywords.get(i), defined, replaced)); 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 b8833877c10..8f458903163 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -5333,8 +5333,9 @@ public class Card extends GameEntity implements Comparable { if (source.getController().equals(chosenPlayer)) { return true; } - } else if (kw.equals("Protection from each opponent")) { - if (source.getController().isOpponentOf(getController())) { + } else if (kw.startsWith("Protection from opponent of ")) { + final String playerName = kw.substring("Protection from opponent of ".length()); + if (source.getController().isOpponentOf(playerName)) { return true; } } else if (kw.startsWith("Protection from ")) { diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index 8e6caf75d02..78b040024ba 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -353,6 +353,17 @@ public class Player extends GameEntity implements Comparable { return other != this && other != null && (other.teamNumber < 0 || other.teamNumber != teamNumber); } + public boolean isOpponentOf(String other) { + Player otherPlayer = null; + for (Player p : game.getPlayers()) { + if (p.getName().equals(other)) { + otherPlayer = p; + break; + } + } + return isOpponentOf(otherPlayer); + } + public final boolean setLife(final int newLife, final Card source) { boolean change = false; // rule 118.5 diff --git a/forge-gui/res/cardsfolder/upcoming/cliffside_rescuer.txt b/forge-gui/res/cardsfolder/upcoming/cliffside_rescuer.txt index 2639dcdacf4..ebaad741f38 100644 --- a/forge-gui/res/cardsfolder/upcoming/cliffside_rescuer.txt +++ b/forge-gui/res/cardsfolder/upcoming/cliffside_rescuer.txt @@ -3,5 +3,5 @@ ManaCost:1 W Types:Creature Kor Soldier PT:2/2 K:Vigilance -A:AB$ Pump | Cost$ T Sac<1/CARDNAME> | ValidTgts$ Permanent.YouCtrl | TgtPrompt$ Select target permanent you control | KW$ Protection from each opponent | SpellDescription$ Target permanent you control gets protection from each opponent until end of turn. +A:AB$ Pump | Cost$ T Sac<1/CARDNAME> | ValidTgts$ Permanent.YouCtrl | TgtPrompt$ Select target permanent you control | KW$ Protection from opponent of ActivatorName | DefinedKW$ ActivatorName | SpellDescription$ Target permanent you control gets protection from each opponent until end of turn. Oracle:Vigilance\n{T}, Sacrifice Cliffside Rescuer: Target permanent you control gets protection from each opponent until end of turn.