From 71a02ab44d80f5cea4ec697f1d7d20c1412a01c1 Mon Sep 17 00:00:00 2001 From: jendave Date: Sat, 6 Aug 2011 03:15:18 +0000 Subject: [PATCH] - Added Gatekeeper of Malakir. --- res/cards.txt | 6 +++ res/main.properties | 2 +- src/forge/Card.java | 8 +++- src/forge/CardFactory.java | 2 +- src/forge/CardFactory_Creatures.java | 69 +++++++++++++++++++++++++++- src/forge/ComputerUtil.java | 6 --- src/forge/GameActionUtil.java | 5 +- 7 files changed, 83 insertions(+), 15 deletions(-) diff --git a/res/cards.txt b/res/cards.txt index fbc975d3306..d77fb3fdb6d 100644 --- a/res/cards.txt +++ b/res/cards.txt @@ -1,3 +1,9 @@ +Gatekeeper of Malakir +B B +Creature Vampire Warrior +When Gatekeeper of Malakir enters the battlefield, if it was kicked, target player sacrifices a creature. +2/2 + Guul Draz Vampire B Creature Vampire Rogue diff --git a/res/main.properties b/res/main.properties index 385ea629be5..538179c3bf9 100644 --- a/res/main.properties +++ b/res/main.properties @@ -1,6 +1,6 @@ program/mail=mtgerror@yahoo.com program/forum=http://www.slightlymagic.net/forum/viewforum.php?f=26 -program/version=Forge -- official beta: 10/01/17, SVN revision: 288 +program/version=Forge -- official beta: 10/01/17, SVN revision: 292 tokens--file=AllTokens.txt diff --git a/src/forge/Card.java b/src/forge/Card.java index 7ff45d31e59..6b8e68d2e2f 100644 --- a/src/forge/Card.java +++ b/src/forge/Card.java @@ -5,7 +5,6 @@ enum Counters { AGE, BLAZE, CHARGE, DIVINITY, FADE, HOOFPRINT, ICE, LOYALTY, M1M1, MANA, P0M1, P1P1, QUEST, SPORE } - public class Card extends MyObservable { private static int nextUniqueNumber; @@ -44,6 +43,7 @@ public class Card extends MyObservable private boolean exaltedBonus = false; private boolean faceDown = false; private boolean sacrificeAtEOT = false; + private boolean kicked = false; private boolean firstStrike = false; private boolean doubleStrike = false; @@ -985,4 +985,10 @@ public class Card extends MyObservable { flashback = b; } + public void setKicked(boolean b) { + kicked = b; + } + public boolean isKicked() { + return kicked; + } } diff --git a/src/forge/CardFactory.java b/src/forge/CardFactory.java index 24fffb51526..cacbf315986 100644 --- a/src/forge/CardFactory.java +++ b/src/forge/CardFactory.java @@ -13657,7 +13657,7 @@ public class CardFactory implements NewConstants { card.untap(); } - + public boolean canPlayAI() { return false; diff --git a/src/forge/CardFactory_Creatures.java b/src/forge/CardFactory_Creatures.java index e3af0a870c3..c4263a9a14e 100644 --- a/src/forge/CardFactory_Creatures.java +++ b/src/forge/CardFactory_Creatures.java @@ -3421,8 +3421,6 @@ public class CardFactory_Creatures { final SpellAbility ability = new Ability(card, "0") { public void resolve(){ - @SuppressWarnings("unused") // opponent - String opponent = card.getController(); ((PlayerZone_ComesIntoPlay)AllZone.Human_Play).setTriggers(false); ((PlayerZone_ComesIntoPlay)AllZone.Computer_Play).setTriggers(false); @@ -19465,6 +19463,73 @@ public class CardFactory_Creatures { card.addDestroyCommand(destroy); }//*************** END ************ END ************************** + + //*************** START *********** START ************************** + else if (cardName.equals("Gatekeeper of Malakir")) + { + final SpellAbility kicker = new Spell(card) + { + private static final long serialVersionUID = -1598664186463358630L; + public void resolve() + { + PlayerZone hand = AllZone.getZone(Constant.Zone.Hand ,card.getController()); + PlayerZone play = AllZone.getZone(Constant.Zone.Play ,card.getController()); + + card.setKicked(true); + hand.remove(card); + play.add(card); + //card.comesIntoPlay(); //do i need this? + } + public boolean canPlay() + { + return AllZone.Phase.getActivePlayer().equals(card.getController()) && + !AllZone.Phase.getPhase().equals("End of Turn") && !AllZone.GameAction.isCardInPlay(card); + } + + public boolean canPlayAI() + { + PlayerZone play = AllZone.getZone(Constant.Zone.Play, Constant.Player.Human); + CardList cl = new CardList(play.getCards()); + cl = cl.getType("Creature"); + + return cl.size() > 0; + } + + }; + kicker.setManaCost("B B B"); + kicker.setDescription("Kicker B"); + kicker.setStackDescription(card.getName() + " - Creature 2/2 (Kicked)"); + card.addSpellAbility(kicker); + + final Ability ability = new Ability(card, "0") + { + public void resolve() + { + AllZone.GameAction.sacrificeCreature(getTargetPlayer(), this); + } + }; + + + Command commandComes = new Command() + { + private static final long serialVersionUID = -2622859088591798773L; + + public void execute() + { + if (card.isKicked()) { + if(card.getController().equals(Constant.Player.Human)) + AllZone.InputControl.setInput(CardFactoryUtil.input_targetPlayer(ability)); + else //computer + { + ability.setChooseTargetAI(CardFactoryUtil.AI_targetHuman()); + }//else + } + }//execute() + };//CommandComes + + card.addComesIntoPlayCommand(commandComes); + }//*************** END ************ END ************************** + // Cards with Cycling abilities // -1 means keyword "Cycling" not found if (shouldCycle(card) != -1) diff --git a/src/forge/ComputerUtil.java b/src/forge/ComputerUtil.java index 62ed59333f0..31faed81b60 100644 --- a/src/forge/ComputerUtil.java +++ b/src/forge/ComputerUtil.java @@ -4,12 +4,9 @@ import java.util.Arrays; import java.util.Comparator; //import java.util.HashMap; //import java.util.Map; -import java.util.Random; public class ComputerUtil { - @SuppressWarnings("unused") // random -private static Random random = new Random(); //if return true, go to next phase static public boolean playCards() @@ -61,7 +58,6 @@ private static Random random = new Random(); AllZone.Stack.add(sa); } - } final static public void playStackFree(SpellAbility sa) @@ -74,8 +70,6 @@ private static Random random = new Random(); AllZone.GameAction.drawCard(sa.getSourceCard().getController()); AllZone.Stack.add(sa); - - } final static public void playNoStack(SpellAbility sa) diff --git a/src/forge/GameActionUtil.java b/src/forge/GameActionUtil.java index 4b47652af66..9dd34870448 100644 --- a/src/forge/GameActionUtil.java +++ b/src/forge/GameActionUtil.java @@ -180,7 +180,7 @@ public class GameActionUtil }//while AllZone.Display.getChoiceOptional("Revealed cards:", revealed.toArray()); - if (cascadedCard != null) { + if (cascadedCard != null && !cascadedCard.isUnCastable()) { revealed.remove(cascadedCard); if (cascadedCard.getController().equals(Constant.Player.Human)) @@ -208,7 +208,6 @@ public class GameActionUtil } } } - } revealed.shuffle(); for (Card bottom : revealed) @@ -251,8 +250,6 @@ public class GameActionUtil { card.addTempAttackBoost(-1); card.addTempDefenseBoost(-1); - - } } };