From d7fcd4f93fcd708a19a01a17e19dda5805126046 Mon Sep 17 00:00:00 2001 From: jendave Date: Sat, 6 Aug 2011 14:08:56 +0000 Subject: [PATCH] add Yosei, the Morning Star (from Champions of Kamigawa) --- .gitattributes | 1 + res/cardsfolder/yosei_the_morning_star.txt | 10 +++ src/forge/CardFactory_Creatures.java | 95 ++++++++++++++++++++++ src/forge/PhaseUtil.java | 18 +++- src/forge/Player.java | 9 ++ 5 files changed, 130 insertions(+), 3 deletions(-) create mode 100644 res/cardsfolder/yosei_the_morning_star.txt diff --git a/.gitattributes b/.gitattributes index 2e0640fc47f..0bdfd08e945 100644 --- a/.gitattributes +++ b/.gitattributes @@ -5715,6 +5715,7 @@ res/cardsfolder/yellow_scarves_troops.txt -text svneol=native#text/plain res/cardsfolder/yoked_plowbeast.txt -text svneol=native#text/plain res/cardsfolder/yomiji_who_bars_the_way.txt -text svneol=native#text/plain res/cardsfolder/yore_tiller_nephilim.txt -text svneol=native#text/plain +res/cardsfolder/yosei_the_morning_star.txt -text svneol=native#text/plain res/cardsfolder/yotian_soldier.txt -text svneol=native#text/plain res/cardsfolder/young_wei_recruits.txt -text svneol=native#text/plain res/cardsfolder/youthful_knight.txt -text svneol=native#text/plain diff --git a/res/cardsfolder/yosei_the_morning_star.txt b/res/cardsfolder/yosei_the_morning_star.txt new file mode 100644 index 00000000000..2a6bac0e6d1 --- /dev/null +++ b/res/cardsfolder/yosei_the_morning_star.txt @@ -0,0 +1,10 @@ +Name:Yosei, the Morning Star +ManaCost:4 W W +Types:Legendary Creature Dragon Spirit +Text:When CARDNAME is put into a graveyard from the battlefield, target player skips his or her next untap step. Tap up to five target permanents that player controls. +PT:5/5 +K:Flying +SVar:RemAIDeck:True +SVar:Rarity:Rare +SVar:Picture:http://www.wizards.com/global/images/magic/general/yosei_the_morning_star.jpg +End \ No newline at end of file diff --git a/src/forge/CardFactory_Creatures.java b/src/forge/CardFactory_Creatures.java index 893966da6b5..ee9127cd405 100644 --- a/src/forge/CardFactory_Creatures.java +++ b/src/forge/CardFactory_Creatures.java @@ -13420,6 +13420,101 @@ public class CardFactory_Creatures { card.addComesIntoPlayCommand(intoPlay); }//*************** END ************ END ************************** + + //*************** START *********** START ************************** + else if(cardName.equals("Yosei, the Morning Star")) { + final CardList targetPerms = new CardList(); + final SpellAbility ability = new Ability(card, "0") { + @Override + public void resolve() { + Player p = getTargetPlayer(); + if(p.canTarget(card)) { + p.setSkipNextUntap(true); + for(Card c:targetPerms) { + if(AllZone.GameAction.isCardInPlay(c) && CardFactoryUtil.canTarget(card, c)) { + c.tap(); + } + } + } + targetPerms.clear(); + }//resolve() + }; + + final Input targetInput = new Input() { + private static final long serialVersionUID = -8727869672234802473L; + + @Override + public void showMessage() { + if(targetPerms.size() == 5) done(); + AllZone.Display.showMessage("Select up to 5 target permanents. Selected ("+targetPerms.size()+") so far. Click OK when done."); + ButtonUtil.enableOnlyOK(); + } + + @Override + public void selectButtonOK() { + done(); + } + + private void done() { + //here, we add the ability to the stack since it's triggered. + StringBuilder sb = new StringBuilder(); + sb.append(card.getName()).append(" - tap up to 5 permanents target player controls. Target player skips his or her next untap step."); + ability.setStackDescription(sb.toString()); + AllZone.Stack.add(ability); + stop(); + } + + @Override + public void selectCard(Card c, PlayerZone zone) { + if(zone.is(Constant.Zone.Battlefield, ability.getTargetPlayer()) && !targetPerms.contains(c)) { + if(CardFactoryUtil.canTarget(card, c)) { + targetPerms.add(c); + } + } + showMessage(); + } + };//Input + + final Input playerInput = new Input() { + private static final long serialVersionUID = 4765535692144126496L; + + @Override + public void showMessage() { + AllZone.Display.showMessage(card.getName()+" - Select target player"); + ButtonUtil.enableOnlyCancel(); + } + + @Override + public void selectPlayer(Player p) { + if(p.canTarget(card)) { + ability.setTargetPlayer(p); + stopSetNext(targetInput); + } + } + + @Override + public void selectButtonCancel() { stop(); } + }; + + Command destroy = new Command() { + private static final long serialVersionUID = -3868616119471172026L; + + public void execute() { + Player player = card.getController(); + CardList list = CardFactoryUtil.AI_getHumanCreature(card, true); + + if(player.equals(AllZone.HumanPlayer)) AllZone.InputControl.setInput(playerInput); + else if(list.size() != 0) { + Card target = CardFactoryUtil.AI_getBestCreature(list); + ability.setTargetCard(target); + AllZone.Stack.add(ability); + } + }//execute() + }; + card.addDestroyCommand(destroy); + } + //*************** END ************ END ************************** + if(hasKeyword(card, "Level up") != -1 && hasKeyword(card, "maxLevel") != -1) { diff --git a/src/forge/PhaseUtil.java b/src/forge/PhaseUtil.java index b1bad49c78c..c476634fd74 100644 --- a/src/forge/PhaseUtil.java +++ b/src/forge/PhaseUtil.java @@ -4,9 +4,23 @@ import java.util.ArrayList; public class PhaseUtil { // ******* UNTAP PHASE ***** + private static boolean skipUntap(Player p) { + if(p.skipNextUntap()) { + p.setSkipNextUntap(false); + return true; + } + else return false; + } + public static void handleUntap(){ Player turn = AllZone.Phase.getPlayerTurn(); + + if (skipUntap(turn)){ + AllZone.Phase.setNeedToNextPhase(true); + return; + } + PlayerZone p = AllZone.getZone(Constant.Zone.Battlefield, turn); Card[] c = p.getCards(); @@ -56,9 +70,7 @@ public class PhaseUtil { } } - CardList allp = new CardList(); - allp.addAll(AllZone.getZone(Constant.Zone.Battlefield, AllZone.HumanPlayer).getCards()); - allp.addAll(AllZone.getZone(Constant.Zone.Battlefield, AllZone.ComputerPlayer).getCards()); + CardList allp = AllZoneUtil.getCardsInPlay(); for(Card ca : allp) { if (ca.hasStartOfKeyword("Permanents don't untap during their controllers' untap steps")) { diff --git a/src/forge/Player.java b/src/forge/Player.java index a39ad97befb..62556bb9039 100644 --- a/src/forge/Player.java +++ b/src/forge/Player.java @@ -21,6 +21,7 @@ public abstract class Player extends MyObservable{ protected String loseCondition = ""; protected int nTurns = 0; + protected boolean skipNextUntap = false; protected Card lastDrawnCard; protected int numDrawnThisTurn = 0; @@ -644,6 +645,14 @@ public abstract class Player extends MyObservable{ return old; } + public boolean skipNextUntap() { + return skipNextUntap; + } + + public void setSkipNextUntap(boolean b) { + skipNextUntap = b; + } + public CardList getSlowtripList() { return slowtripList; }