From 0bea97b0426b62bd10fdcea67366b3823ca03670 Mon Sep 17 00:00:00 2001 From: Sloth Date: Wed, 24 Aug 2011 16:53:06 +0000 Subject: [PATCH] - Changed Prowl to be used for other Creature types than Rogue. --- src/main/java/forge/Phase.java | 4 ++-- src/main/java/forge/Player.java | 24 ++++++++++++------- .../SpellAbility_Restriction.java | 22 ++++++++++++++--- .../spellability/SpellAbility_Variables.java | 6 ++--- 4 files changed, 40 insertions(+), 16 deletions(-) diff --git a/src/main/java/forge/Phase.java b/src/main/java/forge/Phase.java index 4bc5d495c4d..4359cdc4dc2 100644 --- a/src/main/java/forge/Phase.java +++ b/src/main/java/forge/Phase.java @@ -479,8 +479,8 @@ public class Phase extends MyObservable implements java.io.Serializable { Player nextTurn = extraTurns.isEmpty() ? getPlayerTurn().getOpponent() : extraTurns.pop(); AllZone.resetZoneMoveTracking(); - AllZone.getComputerPlayer().setProwl(false); - AllZone.getHumanPlayer().setProwl(false); + AllZone.getComputerPlayer().resetProwl(); + AllZone.getHumanPlayer().resetProwl(); return skipTurnTimeVault(nextTurn); } diff --git a/src/main/java/forge/Player.java b/src/main/java/forge/Player.java index 1c20af4ffa4..076fcd0ed09 100644 --- a/src/main/java/forge/Player.java +++ b/src/main/java/forge/Player.java @@ -5,6 +5,7 @@ import forge.card.cardFactory.CardFactoryUtil; import forge.card.mana.ManaPool; import forge.card.spellability.Ability; import forge.card.spellability.SpellAbility; +import forge.card.trigger.Trigger; import javax.swing.*; import java.util.*; @@ -32,7 +33,7 @@ public abstract class Player extends MyObservable { protected int nTurns = 0; protected boolean skipNextUntap = false; - protected boolean prowl = false; + protected ArrayList prowl = new ArrayList(); protected int maxLandsToPlay = 1; protected int numLandsPlayed = 0; @@ -91,7 +92,7 @@ public abstract class Player extends MyObservable { loseConditionSpell = null; maxLandsToPlay = 1; numLandsPlayed = 0; - prowl = false; + prowl = new ArrayList(); handSizeOperations = new ArrayList(); keywords.clear(); @@ -377,8 +378,11 @@ public abstract class Player extends MyObservable { GameActionUtil.executeDamageDealingEffects(source, damageToDo); GameActionUtil.executeDamageToPlayerEffects(this, source, damageToDo); - if(isCombat && source.isType("Rogue")) - source.getController().setProwl(true); + if(isCombat) { + ArrayList types = source.getType(); + for (String type : types) + source.getController().addProwlType(type); + } //Run triggers HashMap runParams = new HashMap(); @@ -1630,12 +1634,16 @@ public abstract class Player extends MyObservable { * * @return a boolean. */ - public boolean hasProwl() { - return prowl; + public boolean hasProwl(String type) { + return prowl.contains(type); } - public void setProwl(boolean newProwl) { - prowl = newProwl; + public void addProwlType(String type) { + prowl.add(type); + } + + public void resetProwl() { + prowl = new ArrayList(); } private ArrayList handSizeOperations; diff --git a/src/main/java/forge/card/spellability/SpellAbility_Restriction.java b/src/main/java/forge/card/spellability/SpellAbility_Restriction.java index ceabbbe5b9b..a63965d7f9e 100644 --- a/src/main/java/forge/card/spellability/SpellAbility_Restriction.java +++ b/src/main/java/forge/card/spellability/SpellAbility_Restriction.java @@ -5,6 +5,7 @@ import forge.*; import forge.card.abilityFactory.AbilityFactory; import forge.card.cardFactory.CardFactoryUtil; +import java.util.ArrayList; import java.util.HashMap; /** @@ -39,7 +40,14 @@ public class SpellAbility_Restriction extends SpellAbility_Variables { if (value.equals("Threshold")) setThreshold(true); if (value.equals("Metalcraft")) setMetalcraft(true); if (value.equals("Hellbent")) setHellbent(true); - if (value.equals("Prowl")) setProwl(true); + if (value.startsWith("Prowl")) { + ArrayList prowlTypes = new ArrayList(); + prowlTypes.add("Rogue"); + if(value.split("Prowl").length > 1) { + prowlTypes.add(value.split("Prowl")[1]); + } + setProwl(prowlTypes); + } } if (params.containsKey("ActivationZone")) @@ -181,9 +189,17 @@ public class SpellAbility_Restriction extends SpellAbility_Variables { if (!activator.hasMetalcraft()) return false; } - if (prowl) { - if (!activator.hasProwl()) + if (prowl != null) { + //only true if the activating player has damaged the opponent with one of the specified types + boolean prowlFlag = false; + for (String type : prowl) { + if (activator.hasProwl(type)) { + prowlFlag = true; + } + } + if (!prowlFlag) { return false; + } } if (sIsPresent != null) { CardList list = AllZoneUtil.getCardsInZone(presentZone); diff --git a/src/main/java/forge/card/spellability/SpellAbility_Variables.java b/src/main/java/forge/card/spellability/SpellAbility_Variables.java index d57a259ad2c..6cfb7dc09cf 100644 --- a/src/main/java/forge/card/spellability/SpellAbility_Variables.java +++ b/src/main/java/forge/card/spellability/SpellAbility_Variables.java @@ -40,7 +40,7 @@ public class SpellAbility_Variables { protected boolean threshold = false; protected boolean metalcraft = false; protected boolean hellbent = false; - protected boolean prowl = false; + protected ArrayList prowl = null; protected String sIsPresent = null; protected String presentCompare = "GE1"; // Default Compare to Greater or Equal to 1 @@ -268,8 +268,8 @@ public class SpellAbility_Variables { * * @param bProwl a boolean. */ - public void setProwl(boolean bProwl) { - prowl = bProwl; + public void setProwl(ArrayList types) { + prowl = types; } //IsPresent for Valid battlefield stuff