From 8feabc72c52ac62222d7f00ec7849c6656fd22a8 Mon Sep 17 00:00:00 2001 From: jendave Date: Sat, 6 Aug 2011 13:26:37 +0000 Subject: [PATCH] - Improved Slapshot's Phase shortcut to handle Ranges to help clean up Phase Restrictions - Converted Arcum's Sleigh and Reset --- res/cardsfolder/arcums_sleigh.txt | 2 +- res/cardsfolder/reset.txt | 2 +- src/forge/AbilityFactory.java | 27 ++++++++++----------------- src/forge/AllZone.java | 4 +++- src/forge/Phase.java | 29 ++++++++++++++++++++++------- 5 files changed, 37 insertions(+), 27 deletions(-) diff --git a/res/cardsfolder/arcums_sleigh.txt b/res/cardsfolder/arcums_sleigh.txt index fbcf725eee8..a00e6075a0d 100644 --- a/res/cardsfolder/arcums_sleigh.txt +++ b/res/cardsfolder/arcums_sleigh.txt @@ -2,7 +2,7 @@ Name:Arcum's Sleigh ManaCost:1 Types:Artifact Text:no text -A:AB$Pump | Cost$ 2 T | KW$ Vigilance | ValidTgts$ Creature | TgtPrompt$ Select target creature | IsPresent$ Land.Snow+YouDontCtrl | ActivatingPhases$ BeginCombat,Declare Attackers - Play Instants and Abilities,Declare Blockers - Play Instants and Abilities,Combat Damage,First Strike Damage,EndCombat | SpellDescription$ Target creature gains vigilance until end of turn. Activate this ability only during combat and only if defending player controls a snow land. +A:AB$Pump | Cost$ 2 T | KW$ Vigilance | ValidTgts$ Creature | TgtPrompt$ Select target creature | IsPresent$ Land.Snow+YouDontCtrl | ActivatingPhases$ BeginCombat->EndCombat | SpellDescription$ Target creature gains vigilance until end of turn. Activate this ability only during combat and only if defending player controls a snow land. SVar:Rarity:Uncommon SVar:Picture:http://www.wizards.com/global/images/magic/general/arcums_sleigh.jpg SetInfo:ICE|Uncommon|http://magiccards.info/scans/en/ia/284.jpg diff --git a/res/cardsfolder/reset.txt b/res/cardsfolder/reset.txt index bd5b1f9debe..19a4e5fcfcc 100644 --- a/res/cardsfolder/reset.txt +++ b/res/cardsfolder/reset.txt @@ -2,7 +2,7 @@ Name:Reset ManaCost:U U Types:Instant Text:no text -A:SP$UntapAll|Cost$U U|ValidCards$Land.YouCtrl|OpponentTurn$True|ActivatingPhases$AfterUpkeep|SpellDescription$Cast Reset only during an opponent's turn after his or her upkeep step. Untap all lands you control. +A:SP$UntapAll|Cost$U U|ValidCards$Land.YouCtrl|OpponentTurn$True|ActivatingPhases$Draw->|SpellDescription$Cast Reset only during an opponent's turn after his or her upkeep step. Untap all lands you control. SVar:RemAIDeck:True SVar:Rarity:Uncommon SVar:Picture:http://www.wizards.com/global/images/magic/general/reset.jpg diff --git a/src/forge/AbilityFactory.java b/src/forge/AbilityFactory.java index f269cdde0d2..0b2d8d20b30 100644 --- a/src/forge/AbilityFactory.java +++ b/src/forge/AbilityFactory.java @@ -493,25 +493,18 @@ public class AbilityFactory { if (mapParams.containsKey("ActivatingPhases")) { String phases = mapParams.get("ActivatingPhases"); - if(phases.equals("AfterUpkeep")) { - String newPhase = ""; - newPhase = newPhase + Constant.Phase.Draw +","; - newPhase = newPhase + Constant.Phase.Main1 +","; - newPhase = newPhase + Constant.Phase.Combat_Begin +","; - newPhase = newPhase + Constant.Phase.Combat_Declare_Attackers +","; - newPhase = newPhase + Constant.Phase.Combat_Declare_Attackers_InstantAbility +","; - newPhase = newPhase + Constant.Phase.Combat_Declare_Blockers +","; - newPhase = newPhase + Constant.Phase.Combat_Declare_Blockers_InstantAbility +","; - newPhase = newPhase + Constant.Phase.Combat_Damage +","; - newPhase = newPhase + Constant.Phase.Combat_FirstStrikeDamage +","; - newPhase = newPhase + Constant.Phase.Combat_End +","; - newPhase = newPhase + Constant.Phase.Main2 +","; - newPhase = newPhase + Constant.Phase.End_Of_Turn +","; - newPhase = newPhase + Constant.Phase.Cleanup; + + if (phases.contains("->")){ + // If phases lists a Range, split and Build Activate String + // Combat_Begin->Combat_End (During Combat) + // Draw-> (After Upkeep) + // Upkeep->Combat_Begin (Before Declare Attackers) - restrict.setActivatePhases(newPhase); + String[] split = phases.split("->", 2); + phases = AllZone.Phase.buildActivateString(split[0], split[1]); } - else restrict.setActivatePhases(phases); + + restrict.setActivatePhases(phases); } if (mapParams.containsKey("ActivatingCardsInHand")) diff --git a/src/forge/AllZone.java b/src/forge/AllZone.java index 15c47e88109..703425a7724 100644 --- a/src/forge/AllZone.java +++ b/src/forge/AllZone.java @@ -23,9 +23,11 @@ public class AllZone implements NewConstants { public static EndOfTurn EndOfTurn = new EndOfTurn(); public static EndOfCombat EndOfCombat = new EndOfCombat(); + public static final Phase Phase = new Phase(); + + // Phase is now a prerequisite for CardFactory public static final CardFactory CardFactory = new CardFactory(ForgeProps.getFile(CARDSFOLDER)); - public static final Phase Phase = new Phase(); public static final MagicStack Stack = new MagicStack(); public static final InputControl InputControl = new InputControl(); public static final GameAction GameAction = new GameAction(); diff --git a/src/forge/Phase.java b/src/forge/Phase.java index 3677121ce3b..bc66b1b3f59 100644 --- a/src/forge/Phase.java +++ b/src/forge/Phase.java @@ -606,6 +606,27 @@ public class Phase extends MyObservable AllZone.Phase.getPhase().equals(Constant.Phase.Main1)) && AllZone.Stack.size() == 0; } + public String buildActivateString(String startPhase, String endPhase){ + StringBuilder sb = new StringBuilder(); + + boolean add = false; + for(int i = 0; i < phaseOrder.length; i++){ + if (phaseOrder[i].equals(startPhase)) + add = true; + + if (add){ + if (sb.length() != 0) + sb.append(","); + sb.append(phaseOrder[i]); + } + + if (phaseOrder[i].equals(endPhase)) + add = false; + } + + return sb.toString(); + } + public static boolean canPlayDuringCombat() { String phase = AllZone.Phase.getPhase(); ArrayList validPhases = new ArrayList(); @@ -620,13 +641,7 @@ public class Phase extends MyObservable return validPhases.contains(phase); } - - public static boolean canPlayAfterUpkeep() { - String phase = AllZone.Phase.getPhase(); - - return !phase.equals(Constant.Phase.Upkeep); - } - + public static void main(String args[]) { Phase phase = new Phase(); for(int i = 0; i < phase.phaseOrder.length; i++) {