From e35672b584ec6eb8445cc2dd974bd6bf60b074d6 Mon Sep 17 00:00:00 2001 From: jendave Date: Sat, 6 Aug 2011 02:48:06 +0000 Subject: [PATCH] -Reverted hasSecondStrike() for now, even though I'm still not sure why it doesn't work. -Fixed some issues with Planeswalker's abilities. -Added a few Ally cards. -Fixed Ashes to Ashes. -Fixed some issues with Archon of Justice. --- res/cards.txt | 30 ++++++ src/forge/CardFactory.java | 12 +-- src/forge/CardFactory_Planeswalkers.java | 64 ++++++++---- src/forge/CardListUtil.java | 3 +- src/forge/Combat.java | 6 +- src/forge/GameActionUtil.java | 127 ++++++++++++++++++++++- src/forge/Input_CombatDamage.java | 12 ++- src/forge/PlayerZone_ComesIntoPlay.java | 2 +- 8 files changed, 219 insertions(+), 37 deletions(-) diff --git a/res/cards.txt b/res/cards.txt index 0faf87bfb7c..5b5700f9f37 100644 --- a/res/cards.txt +++ b/res/cards.txt @@ -4,6 +4,36 @@ Artifact no text Comes into play tapped. +Kazuul Warlord +4 R +Creature Minotaur Warrior Ally +Whenever Kazuul Warlord or another Ally enters the battlefield under your control, you may put a +1/+1 counter on each Ally creature you control. +3/3 + +Seascape Aerialist +4 U +Creature Merfolk Wizard Ally +Whenever Seascape Aerialist or another Ally enters the battlefield under your control, you may have Ally creatures you control gain flying until end of turn. +2/3 + +Ondu Cleric +1 W +Creature Kor Cleric Ally +Whenever Ondu Cleric or another Ally enters the battlefield under your control, you may gain life equal to the number of Allies you control. +1/1 + +Joraga Bard +3 G +Creature Elf Rogue Ally +Whenever Joraga Bard or another Ally enters the battlefield under your control, you may have Ally creatures you control gain vigilance until end of turn. +1/4 + +Highland Berserker +1 R +Creature Human Berserker Ally +Whenever Highland Berserker or another Ally enters the battlefield under your control, you may have Ally creatures you control gain first strike until end of turn. +2/1 + Cruel Edict 1 B Sorcery diff --git a/src/forge/CardFactory.java b/src/forge/CardFactory.java index 3b250438910..c820305c165 100644 --- a/src/forge/CardFactory.java +++ b/src/forge/CardFactory.java @@ -5237,8 +5237,8 @@ public class CardFactory implements NewConstants { public void selectButtonCancel() {stop();} public void selectCard(Card c, PlayerZone zone) { - if(! CardUtil.getColor(c).equals(Constant.Color.Colorless) && - c.isCreature() && + if(! c.isArtifact() && + c.isCreature() && zone.is(Constant.Zone.Play)) { target[index[0]] = c; @@ -16577,14 +16577,14 @@ return land.size() > 1 && CardFactoryUtil.AI_isMainPhase(); card.clearSpellAbility(); card.addSpellAbility(spell); }//*************** END ************ END ************************** - //*************** START *********** START ************************** + + + //*************** START *********** START ************************** else if (cardName.equals("Door to Nothingness")) { Ability_Tap ab1 = new Ability_Tap(card, "G G R R B B U U W W") { - /** - * - */ + private static final long serialVersionUID = 6665327569823149191L; public void resolve() { AllZone.GameAction.getPlayerLife(getTargetPlayer()).setLife(0); diff --git a/src/forge/CardFactory_Planeswalkers.java b/src/forge/CardFactory_Planeswalkers.java index a078a0375b7..5676cef2c02 100644 --- a/src/forge/CardFactory_Planeswalkers.java +++ b/src/forge/CardFactory_Planeswalkers.java @@ -79,7 +79,9 @@ class CardFactory_Planeswalkers { AllZone.getZone(card2).is(Constant.Zone.Play) && turn[0] != AllZone.Phase.getTurn() && AllZone.Phase.getActivePlayer().equals(card2.getController()) && - !AllZone.Phase.getPhase().equals("End of Turn"); + !AllZone.Phase.getPhase().equals("End of Turn") && + (AllZone.Phase.getPhase().equals("Main1") || AllZone.Phase.getPhase().equals("Main2")); + }//canPlay() };//SpellAbility ability2 @@ -142,7 +144,8 @@ class CardFactory_Planeswalkers { return 8 <= card2.getCounters(Counters.LOYALTY) && AllZone.getZone(card2).is(Constant.Zone.Play) && turn[0] != AllZone.Phase.getTurn() && AllZone.Phase.getActivePlayer().equals(card2.getController()) && - !AllZone.Phase.getPhase().equals("End of Turn"); + !AllZone.Phase.getPhase().equals("End of Turn") && + (AllZone.Phase.getPhase().equals("Main1") || AllZone.Phase.getPhase().equals("Main2")); }//canPlay() public boolean canPlayAI() { @@ -207,7 +210,8 @@ class CardFactory_Planeswalkers { return 0 < card2.getCounters(Counters.LOYALTY) && AllZone.getZone(card2).is(Constant.Zone.Play) && turn[0] != AllZone.Phase.getTurn() && AllZone.Phase.getActivePlayer().equals(card2.getController()) && - !AllZone.Phase.getPhase().equals("End of Turn"); + !AllZone.Phase.getPhase().equals("End of Turn") && + (AllZone.Phase.getPhase().equals("Main1") || AllZone.Phase.getPhase().equals("Main2")); }//canPlay() };//SpellAbility ability1 @@ -312,7 +316,8 @@ class CardFactory_Planeswalkers { AllZone.getZone(card2).is(Constant.Zone.Play) && turn[0] != AllZone.Phase.getTurn() && AllZone.Phase.getActivePlayer().equals(card2.getController()) && - !AllZone.Phase.getPhase().equals("End of Turn"); + !AllZone.Phase.getPhase().equals("End of Turn") && + (AllZone.Phase.getPhase().equals("Main1") || AllZone.Phase.getPhase().equals("Main2")); }//canPlay() };//SpellAbility ability2 @@ -370,7 +375,8 @@ class CardFactory_Planeswalkers { return 7 <= card2.getCounters(Counters.LOYALTY) && AllZone.getZone(card2).is(Constant.Zone.Play) && turn[0] != AllZone.Phase.getTurn() && AllZone.Phase.getActivePlayer().equals(card2.getController()) && - !AllZone.Phase.getPhase().equals("End of Turn"); + !AllZone.Phase.getPhase().equals("End of Turn") && + (AllZone.Phase.getPhase().equals("Main1") || AllZone.Phase.getPhase().equals("Main2")); }//canPlay() public boolean canPlayAI() { @@ -455,7 +461,8 @@ class CardFactory_Planeswalkers { return 0 < card2.getCounters(Counters.LOYALTY) && AllZone.getZone(card2).is(Constant.Zone.Play) && turn[0] != AllZone.Phase.getTurn() && AllZone.Phase.getActivePlayer().equals(card2.getController()) && - !AllZone.Phase.getPhase().equals("End of Turn"); + !AllZone.Phase.getPhase().equals("End of Turn") && + (AllZone.Phase.getPhase().equals("Main1") || AllZone.Phase.getPhase().equals("Main2")); }//canPlay() };//SpellAbility ability1 @@ -591,7 +598,8 @@ class CardFactory_Planeswalkers { return 9 <= card2.getCounters(Counters.LOYALTY) && AllZone.getZone(card2).is(Constant.Zone.Play) && turn[0] != AllZone.Phase.getTurn() && AllZone.Phase.getActivePlayer().equals(card2.getController()) && - !AllZone.Phase.getPhase().equals("End of Turn"); + !AllZone.Phase.getPhase().equals("End of Turn") && + (AllZone.Phase.getPhase().equals("Main1") || AllZone.Phase.getPhase().equals("Main2")); }//canPlay() public boolean canPlayAI() { @@ -697,7 +705,8 @@ class CardFactory_Planeswalkers { AllZone.getZone(card2).is(Constant.Zone.Play) && turn[0] != AllZone.Phase.getTurn() && AllZone.Phase.getActivePlayer().equals(card2.getController()) && - !AllZone.Phase.getPhase().equals("End of Turn"); + !AllZone.Phase.getPhase().equals("End of Turn") && + (AllZone.Phase.getPhase().equals("Main1") || AllZone.Phase.getPhase().equals("Main2")); }//canPlay() };//SpellAbility ability2 @@ -754,7 +763,8 @@ class CardFactory_Planeswalkers { return 0 < card2.getCounters(Counters.LOYALTY) && AllZone.getZone(card2).is(Constant.Zone.Play) && turn[0] != AllZone.Phase.getTurn() && AllZone.Phase.getActivePlayer().equals(card2.getController()) && - !AllZone.Phase.getPhase().equals("End of Turn"); + !AllZone.Phase.getPhase().equals("End of Turn") && + (AllZone.Phase.getPhase().equals("Main1") || AllZone.Phase.getPhase().equals("Main2")); }//canPlay() public void chooseTargetAI() @@ -926,7 +936,8 @@ class CardFactory_Planeswalkers { AllZone.getZone(card2).is(Constant.Zone.Play) && turn[0] != AllZone.Phase.getTurn() && AllZone.Phase.getActivePlayer().equals(card2.getController()) && - !AllZone.Phase.getPhase().equals("End of Turn"); + !AllZone.Phase.getPhase().equals("End of Turn") && + (AllZone.Phase.getPhase().equals("Main1") || AllZone.Phase.getPhase().equals("Main2")); }//canPlay() };//SpellAbility ability2 @@ -982,7 +993,8 @@ class CardFactory_Planeswalkers { return 6 <= card2.getCounters(Counters.LOYALTY) && AllZone.getZone(card2).is(Constant.Zone.Play) && turn[0] != AllZone.Phase.getTurn() && AllZone.Phase.getActivePlayer().equals(card2.getController()) && - !AllZone.Phase.getPhase().equals("End of Turn"); + !AllZone.Phase.getPhase().equals("End of Turn") && + (AllZone.Phase.getPhase().equals("Main1") || AllZone.Phase.getPhase().equals("Main2")); }//canPlay() public boolean canPlayAI() { @@ -1033,7 +1045,8 @@ class CardFactory_Planeswalkers { return 0 < card2.getCounters(Counters.LOYALTY) && AllZone.getZone(card2).is(Constant.Zone.Play) && turn[0] != AllZone.Phase.getTurn() && AllZone.Phase.getActivePlayer().equals(card2.getController()) && - !AllZone.Phase.getPhase().equals("End of Turn"); + !AllZone.Phase.getPhase().equals("End of Turn") && + (AllZone.Phase.getPhase().equals("Main1") || AllZone.Phase.getPhase().equals("Main2")); }//canPlay() };//SpellAbility ability1 @@ -1156,7 +1169,8 @@ class CardFactory_Planeswalkers { 1 < library.size() && turn[0] != AllZone.Phase.getTurn() && AllZone.Phase.getActivePlayer().equals(card2.getController()) && - !AllZone.Phase.getPhase().equals("End of Turn"); + !AllZone.Phase.getPhase().equals("End of Turn") && + (AllZone.Phase.getPhase().equals("Main1") || AllZone.Phase.getPhase().equals("Main2")); }//canPlay() };//SpellAbility ability2 @@ -1212,7 +1226,8 @@ class CardFactory_Planeswalkers { return 8 <= card2.getCounters(Counters.LOYALTY) && AllZone.getZone(card2).is(Constant.Zone.Play) && turn[0] != AllZone.Phase.getTurn() && AllZone.Phase.getActivePlayer().equals(card2.getController()) && - !AllZone.Phase.getPhase().equals("End of Turn"); + !AllZone.Phase.getPhase().equals("End of Turn") && + (AllZone.Phase.getPhase().equals("Main1") || AllZone.Phase.getPhase().equals("Main2")); }//canPlay() public boolean canPlayAI() { @@ -1272,7 +1287,8 @@ class CardFactory_Planeswalkers { return 0 < card2.getCounters(Counters.LOYALTY) && AllZone.getZone(card2).is(Constant.Zone.Play) && turn[0] != AllZone.Phase.getTurn() && AllZone.Phase.getActivePlayer().equals(card2.getController()) && - !AllZone.Phase.getPhase().equals("End of Turn"); + !AllZone.Phase.getPhase().equals("End of Turn") && + (AllZone.Phase.getPhase().equals("Main1") || AllZone.Phase.getPhase().equals("Main2")); }//canPlay() };//SpellAbility ability1 @@ -1376,7 +1392,8 @@ class CardFactory_Planeswalkers { return AllZone.getZone(card2).is(Constant.Zone.Play) && turn[0] != AllZone.Phase.getTurn() && AllZone.Phase.getActivePlayer().equals(card2.getController()) && - !AllZone.Phase.getPhase().equals("End of Turn"); + !AllZone.Phase.getPhase().equals("End of Turn") && + (AllZone.Phase.getPhase().equals("Main1") || AllZone.Phase.getPhase().equals("Main2")); } public boolean canPlayAI() { @@ -1446,7 +1463,8 @@ class CardFactory_Planeswalkers { return AllZone.getZone(card2).is(Constant.Zone.Play) && turn[0] != AllZone.Phase.getTurn() && AllZone.Phase.getActivePlayer().equals(card2.getController()) && - !AllZone.Phase.getPhase().equals("End of Turn"); + !AllZone.Phase.getPhase().equals("End of Turn") && + (AllZone.Phase.getPhase().equals("Main1") || AllZone.Phase.getPhase().equals("Main2")); } public boolean canPlayAI() { @@ -1538,7 +1556,8 @@ class CardFactory_Planeswalkers { turn[0] != AllZone.Phase.getTurn() && 7 < card2.getCounters(Counters.LOYALTY) && AllZone.Phase.getActivePlayer().equals(card2.getController()) && - !AllZone.Phase.getPhase().equals("End of Turn"); + !AllZone.Phase.getPhase().equals("End of Turn") && + (AllZone.Phase.getPhase().equals("Main1") || AllZone.Phase.getPhase().equals("Main2")); } public boolean canPlayAI() { @@ -1635,7 +1654,8 @@ class CardFactory_Planeswalkers { return AllZone.getZone(card2).is(Constant.Zone.Play) && turn[0] != AllZone.Phase.getTurn() && AllZone.Phase.getActivePlayer().equals(card2.getController()) && - !AllZone.Phase.getPhase().equals("End of Turn"); + !AllZone.Phase.getPhase().equals("End of Turn") && + (AllZone.Phase.getPhase().equals("Main1") || AllZone.Phase.getPhase().equals("Main2")); }//canPlay() }; final Input targetLand = new Input() @@ -1722,7 +1742,8 @@ class CardFactory_Planeswalkers { turn[0] != AllZone.Phase.getTurn() && 0 < card2.getCounters(Counters.LOYALTY) && AllZone.Phase.getActivePlayer().equals(card2.getController()) && - !AllZone.Phase.getPhase().equals("End of Turn"); + !AllZone.Phase.getPhase().equals("End of Turn") && + (AllZone.Phase.getPhase().equals("Main1") || AllZone.Phase.getPhase().equals("Main2")); }//canPlay() public boolean canPlayAI() { @@ -1808,7 +1829,8 @@ class CardFactory_Planeswalkers { turn[0] != AllZone.Phase.getTurn() && 3 < card2.getCounters(Counters.LOYALTY) && AllZone.Phase.getActivePlayer().equals(card2.getController()) && - !AllZone.Phase.getPhase().equals("End of Turn"); + !AllZone.Phase.getPhase().equals("End of Turn") && + (AllZone.Phase.getPhase().equals("Main1") || AllZone.Phase.getPhase().equals("Main2")); }//canPlay() public boolean canPlayAI() { diff --git a/src/forge/CardListUtil.java b/src/forge/CardListUtil.java index d7331aa2dcb..fd96d827ad6 100644 --- a/src/forge/CardListUtil.java +++ b/src/forge/CardListUtil.java @@ -155,7 +155,8 @@ public static void sortFlying(CardList list) int attack = 0; for(int i = 0; i < c.size(); i++){ - if(c.get(i).isCreature() && c.get(i).hasSecondStrike()) { + //if(c.get(i).isCreature() && c.get(i).hasSecondStrike()) { + if(c.get(i).isCreature() && (!c.get(i).hasFirstStrike() || (c.get(i).hasDoubleStrike() && c.get(i).hasFirstStrike())) ) { if (!CombatUtil.isDoranInPlay()) attack += c.get(i).getNetAttack(); else if(CombatUtil.isDoranInPlay()) diff --git a/src/forge/Combat.java b/src/forge/Combat.java index 58e55b16efe..1ba3c7c7e3f 100644 --- a/src/forge/Combat.java +++ b/src/forge/Combat.java @@ -68,7 +68,8 @@ public class Combat damageDealt = att.get(i).getNetDefense(); //if the creature has first strike do not do damage in the normal combat phase - if(att.get(i).hasSecondStrike()) + //if(att.get(i).hasSecondStrike()) + if(!att.get(i).hasFirstStrike() || (att.get(i).hasFirstStrike() && att.get(i).hasDoubleStrike()) ) defendingDamage += damageDealt; } } @@ -268,7 +269,8 @@ public class Combat CardList attacking = new CardList(getAttackers()); for(int i = 0; i < attacking.size(); i++) { - if(!attacking.get(i).hasSecondStrike() ){ + //if(!attacking.get(i).hasSecondStrike() ){ + if(!attacking.get(i).hasFirstStrike() || (attacking.get(i).hasFirstStrike() && attacking.get(i).hasDoubleStrike() )){ block = getBlockers(attacking.get(i)); //attacker always gets all blockers' attack diff --git a/src/forge/GameActionUtil.java b/src/forge/GameActionUtil.java index 12b5b95d4e8..64eeccdbfde 100644 --- a/src/forge/GameActionUtil.java +++ b/src/forge/GameActionUtil.java @@ -982,12 +982,21 @@ public class GameActionUtil public static void executeAllyEffects(Card c) { if (c.getName().equals("Kazandu Blademaster") || c.getName().equals("Makindi Shieldmate") || - c.getName().equals("Nimana Sell-Sword") || c.getName().equals("Ondu Cleric") || - c.getName().equals("Oran-Rief Survivalist") ||c.getName().equals("Tuktuk Grunts") || - c.getName().equals("Umara Raptor")) + c.getName().equals("Nimana Sell-Sword") || c.getName().equals("Oran-Rief Survivalist") || + c.getName().equals("Tuktuk Grunts") || c.getName().equals("Umara Raptor")) ally_Generic_P1P1(c); else if (c.getName().equals("Turntimber Ranger")) ally_Turntimber_Ranger(c); + else if (c.getName().equals("Highland Berserker")) + ally_BoostUntilEOT(c, "First Strike"); + else if (c.getName().equals("Joraga Bard")) + ally_BoostUntilEOT(c, "Vigilance"); + else if (c.getName().equals("Seascape Aerialist")) + ally_BoostUntilEOT(c, "Flying"); + else if (c.getName().equals("Ondu Cleric")) + ally_Ondu_Cleric(c); + else if (c.getName().equals("Kazuul Warlord")) + ally_Kazuul_Warlord(c); } @@ -1086,6 +1095,118 @@ public class GameActionUtil } } + private static void ally_BoostUntilEOT(Card c, String k) + { + final Card crd = c; + final String keyword = k; + + Ability ability = new Ability(c, "0") + { + public void resolve() + { + PlayerZone play = AllZone.getZone(Constant.Zone.Play, crd.getController()); + CardList list = new CardList(play.getCards()); + list = list.getType("Ally"); + + final CardList allies = list; + + final Command untilEOT = new Command() + { + + private static final long serialVersionUID = -8434529949884582940L; + + public void execute() + { + for (Card creat:allies){ + if(AllZone.GameAction.isCardInPlay(creat)) + { + creat.removeExtrinsicKeyword(keyword); + } + } + } + };//Command + + for (Card creat:allies){ + if(AllZone.GameAction.isCardInPlay(creat) ) + { + creat.addExtrinsicKeyword(keyword); + } + } + AllZone.EndOfTurn.addUntil(untilEOT); + + + } + }; + + ability.setStackDescription(c.getName() + " - Ally: Ally creatures you control gain " +keyword +" until end of turn."); + + if (c.getController().equals(Constant.Player.Human)){ + if (showAllyDialog(c)) + AllZone.Stack.add(ability); + } + + else if (c.getController().equals(Constant.Player.Computer)) + AllZone.Stack.add(ability); + } + + private static void ally_Ondu_Cleric(Card c) + { + final Card crd = c; + + Ability ability = new Ability(c, "0") + { + public void resolve() + { + PlayerZone play = AllZone.getZone(Constant.Zone.Play ,crd.getController()); + CardList allies = new CardList(play.getCards()); + allies = allies.getType("Ally"); + PlayerLife life = AllZone.GameAction.getPlayerLife(crd.getController()); + life.addLife(allies.size()); + + } + }; + + ability.setStackDescription(c.getName() + " - Ally: gain life equal to the number of allies you control."); + + if (c.getController().equals(Constant.Player.Human)){ + if (showAllyDialog(c)) + AllZone.Stack.add(ability); + } + + else if (c.getController().equals(Constant.Player.Computer)) + AllZone.Stack.add(ability); + } + + private static void ally_Kazuul_Warlord(Card c) + { + final Card crd = c; + + Ability ability = new Ability(c, "0") + { + public void resolve() + { + PlayerZone play = AllZone.getZone(Constant.Zone.Play, crd.getController()); + CardList list = new CardList(play.getCards()); + list = list.getType("Ally"); + + for (Card ally:list) + { + ally.addCounter(Counters.P1P1, 1); + } + } + }; + ability.setStackDescription(c.getName() + " - Ally: put a +1/+1 counter on each Ally creature you control."); + + if (c.getController().equals(Constant.Player.Human)) { + if (showAllyDialog(c)) + AllZone.Stack.add(ability); + } + + else if (c.getController().equals(Constant.Player.Computer)) + AllZone.Stack.add(ability); + } + + public static void executeDestroyCardEffects(Card c, Card destroyed) { if (destroyed.isCreature()) diff --git a/src/forge/Input_CombatDamage.java b/src/forge/Input_CombatDamage.java index bf69b1912fa..a8a4ad0411b 100644 --- a/src/forge/Input_CombatDamage.java +++ b/src/forge/Input_CombatDamage.java @@ -65,7 +65,9 @@ private void playerDamage(PlayerLife p) for(int j = 0; j < unblocked.size(); j++) { //System.out.println("Unblocked Creature: " +unblocked.get(j).getName()); - if (unblocked.getCard(j).hasSecondStrike()) { + //if (unblocked.getCard(j).hasSecondStrike()) { + if (!unblocked.getCard(j).hasFirstStrike() || + (unblocked.getCard(j).hasFirstStrike() && unblocked.getCard(j).hasDoubleStrike())) { GameActionUtil.executePlayerCombatDamageEffects(unblocked.get(j)); } @@ -146,7 +148,9 @@ private void playerDamage(PlayerLife p) //this shouldn't trigger if creature has first strike, only if it also has double strike - if (blockers.get(i).hasSecondStrike()) + //if (blockers.get(i).hasSecondStrike()) + if (!blockers.getCard(i).hasFirstStrike() || + (blockers.getCard(i).hasFirstStrike() && blockers.getCard(i).hasDoubleStrike())) { if (blockers.getCard(i).getKeyword().contains("Lifelink")) @@ -199,7 +203,9 @@ private void playerDamage(PlayerLife p) } for (int i=0; i < pwBlockers.size(); i++){ //System.out.println("blocker #" + i + ": " + blockers.getCard(i).getName() +" " + blockers.getCard(i).getAttack()); - if ( (pwBlockers.getCard(i).hasSecondStrike()) ) + //if ( (pwBlockers.getCard(i).hasSecondStrike()) ) + if ( (!pwBlockers.getCard(i).hasFirstStrike() || (pwBlockers.getCard(i).hasFirstStrike() && + pwBlockers.getCard(i).hasDoubleStrike()) ) ) { if (pwBlockers.getCard(i).getKeyword().contains("Lifelink")) GameActionUtil.executeLifeLinkEffects(pwBlockers.getCard(i)); diff --git a/src/forge/PlayerZone_ComesIntoPlay.java b/src/forge/PlayerZone_ComesIntoPlay.java index 782dffe6ac8..67f2ec580bd 100644 --- a/src/forge/PlayerZone_ComesIntoPlay.java +++ b/src/forge/PlayerZone_ComesIntoPlay.java @@ -74,7 +74,7 @@ public class PlayerZone_ComesIntoPlay extends DefaultPlayerZone }); String[] allyNames = {"Umara Raptor", "Tuktuk Grunts", "Oran-Rief Survivalist", "Nimana Sell-Sword", "Makindi Shieldmate", - "Kazandu Blademaster","Turntimber Ranger"}; + "Kazandu Blademaster","Turntimber Ranger", "Highland Berserker", "Joraga Bard"}; final ArrayList allyNamesList = new ArrayList(); for (int i=0;i