From 919de9b0fa3e8fa1cdb87d25f0d60cc7cfdaa32f Mon Sep 17 00:00:00 2001 From: swordshine Date: Tue, 24 Sep 2013 00:32:01 +0000 Subject: [PATCH] - Added Conundrum Sphinx --- .gitattributes | 1 + res/cardsfolder/c/conundrum_sphinx.txt | 13 +++++ src/main/java/forge/Card.java | 18 +++++++ .../ability/effects/ChooseCardNameEffect.java | 4 ++ src/main/java/forge/game/player/Player.java | 52 ++++++++++++++++++- 5 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 res/cardsfolder/c/conundrum_sphinx.txt diff --git a/.gitattributes b/.gitattributes index 39588b2fefe..1ab39b40958 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2123,6 +2123,7 @@ res/cardsfolder/c/control_magic.txt svneol=native#text/plain res/cardsfolder/c/control_of_the_court.txt svneol=native#text/plain res/cardsfolder/c/controlled_instincts.txt svneol=native#text/plain res/cardsfolder/c/controvert.txt svneol=native#text/plain +res/cardsfolder/c/conundrum_sphinx.txt -text res/cardsfolder/c/convalescence.txt svneol=native#text/plain res/cardsfolder/c/convalescent_care.txt svneol=native#text/plain res/cardsfolder/c/conversion.txt svneol=native#text/plain diff --git a/res/cardsfolder/c/conundrum_sphinx.txt b/res/cardsfolder/c/conundrum_sphinx.txt new file mode 100644 index 00000000000..2fe2b471c36 --- /dev/null +++ b/res/cardsfolder/c/conundrum_sphinx.txt @@ -0,0 +1,13 @@ +Name:Conundrum Sphinx +ManaCost:2 U U +Types:Creature Sphinx +PT:4/4 +K:Flying +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ EachName | TriggerDescription$ Whenever CARDNAME attacks, each player names a card. Then each player reveals the top card of his or her library. If the card a player revealed is the card he or she named, that player puts it into his or her hand. If it's not, that player puts it on the bottom of his or her library. +SVar:EachName:AB$ RepeatEach | Cost$ 0 | RepeatPlayers$ Player | RepeatSubAbility$ DBName | SubAbility$ DBDigEach +SVar:DBName:DB$ NameCard | Defined$ Player.IsRemembered | AILogic$ RandomInComputerDeck +SVar:DBDigEach:DB$ RepeatEach | Cost$ 0 | RepeatPlayers$ Player | RepeatSubAbility$ DBDig +SVar:DBDig:DB$ Dig | DigNum$ 1 | Defined$ Player.IsRemembered | ChangeNum$ All | ChangeValid$ Card.NamedByRememberedPlayer | Reveal$ True +SVar:RemRandomDeck:True +SVar:Picture:http://www.wizards.com/global/images/magic/general/conundrum_sphinx.jpg +Oracle:Flying\nWhenever Conundrum Sphinx attacks, each player names a card. Then each player reveals the top card of his or her library. If the card a player revealed is the card he or she named, that player puts it into his or her hand. If it's not, that player puts it on the bottom of his or her library. diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index 0a153974bd2..bbd4a84734a 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -5308,6 +5308,24 @@ public class Card extends GameEntity implements Comparable { if (!this.getName().equals(source.getNamedCard())) { return false; } + } else if (property.equals("NamedByRememberedPlayer")) { + if (source.getRemembered().isEmpty()) { + final Card newCard = game.getCardState(source); + for (final Object o : newCard.getRemembered()) { + if (o instanceof Player) { + if (!this.getName().equals(((Player) o).getNamedCard())) { + return false; + } + } + } + } + for (final Object o : source.getRemembered()) { + if (o instanceof Player) { + if (!this.getName().equals(((Player) o).getNamedCard())) { + return false; + } + } + } } else if (property.equals("ChosenCard")) { if (!source.getChosenCard().contains(this)) { return false; diff --git a/src/main/java/forge/card/ability/effects/ChooseCardNameEffect.java b/src/main/java/forge/card/ability/effects/ChooseCardNameEffect.java index 595ed4800ed..bbdc73befb0 100644 --- a/src/main/java/forge/card/ability/effects/ChooseCardNameEffect.java +++ b/src/main/java/forge/card/ability/effects/ChooseCardNameEffect.java @@ -111,6 +111,7 @@ public class ChooseCardNameEffect extends SpellAbilityEffect { Card instanceForPlayer = cp.toForgeCard(p); // the Card instance for test needs a game to be tested if (instanceForPlayer.isValid(valid, host.getController(), host)) { host.setNamedCard(cp.getName()); + p.setNamedCard(cp.getName()); ok = true; } } else { @@ -123,6 +124,8 @@ public class ChooseCardNameEffect extends SpellAbilityEffect { chosen = ComputerUtilCard.getMostProminentCardName(p.getOpponent().getCardsIn(ZoneType.Library)); } else if (logic.equals("BestCreatureInComputerDeck")) { chosen = ComputerUtilCard.getBestCreatureAI(p.getCardsIn(ZoneType.Library)).getName(); + } else if (logic.equals("RandomInComputerDeck")) { + chosen = Aggregates.random(p.getCardsIn(ZoneType.Library)).getName(); } } else { List list = CardLists.filterControlledBy(p.getGame().getCardsInGame(), p.getOpponent()); @@ -136,6 +139,7 @@ public class ChooseCardNameEffect extends SpellAbilityEffect { } GuiChoose.one("Computer picked: ", new String[]{chosen}); host.setNamedCard(chosen); + p.setNamedCard(chosen); ok = true; } } diff --git a/src/main/java/forge/game/player/Player.java b/src/main/java/forge/game/player/Player.java index c46735fbe4d..e7a678ae43d 100644 --- a/src/main/java/forge/game/player/Player.java +++ b/src/main/java/forge/game/player/Player.java @@ -130,6 +130,9 @@ public class Player extends GameEntity implements Comparable { /** The last drawn card. */ private Card lastDrawnCard = null; + /** The named card. */ + private String namedCard = ""; + /** The num drawn this turn. */ private int numDrawnThisTurn = 0; private int numDrawnThisDrawStep = 0; @@ -1958,6 +1961,30 @@ public class Player extends GameEntity implements Comparable { return this.lastDrawnCard; } + /** + *

+ * Getter for the field namedCard. + *

+ * + * @return a String. + */ + public final String getNamedCard() { + return this.namedCard; + } + + /** + *

+ * Setter for the field namedCard. + *

+ * + * @param s + * a {@link forge.Card} object. + * @return + * @return a {@link forge.Card} object. + */ + public final void setNamedCard(final String s) { + this.namedCard = s; + } /** *

* getTurn. @@ -2378,6 +2405,11 @@ public class Player extends GameEntity implements Comparable { if (this.equals(sourceController) || !this.isOpponentOf(sourceController)) { return false; } + } else if (property.equals("OpponentToActive")) { + final Player active = game.getPhaseHandler().getPlayerTurn(); + if (this.equals(active) || !this.isOpponentOf(active)) { + return false; + } } else if (property.equals("Other")) { if (this.equals(sourceController)) { return false; @@ -2424,11 +2456,29 @@ public class Player extends GameEntity implements Comparable { } } else if (property.startsWith("withMore")) { final String cardType = property.split("sThan")[0].substring(8); + final Player controller = "Active".equals(property.split("sThan")[1]) ? game.getPhaseHandler().getPlayerTurn() : sourceController; final List oppList = CardLists.filter(this.getCardsIn(ZoneType.Battlefield), CardPredicates.isType(cardType)); - final List yourList = CardLists.filter(sourceController.getCardsIn(ZoneType.Battlefield), CardPredicates.isType(cardType)); + final List yourList = CardLists.filter(controller.getCardsIn(ZoneType.Battlefield), CardPredicates.isType(cardType)); if (oppList.size() <= yourList.size()) { return false; } + } else if (property.startsWith("hasMore")) { + final Player controller = "Active".equals(property.split("Than")[1]) ? game.getPhaseHandler().getPlayerTurn() : sourceController; + if (property.substring(7).startsWith("Life") && this.getLife() <= controller.getLife()) { + return false; + } else if (property.substring(7).startsWith("CardsInHand") + && this.getCardsIn(ZoneType.Hand).size() <= controller.getCardsIn(ZoneType.Hand).size()) { + return false; + } + } else if (property.startsWith("hasFewer")) { + final Player controller = "Active".equals(property.split("Than")[1]) ? game.getPhaseHandler().getPlayerTurn() : sourceController; + if (property.substring(8).startsWith("CreaturesInYard")) { + final List oppList = CardLists.filter(this.getCardsIn(ZoneType.Graveyard), Presets.CREATURES); + final List yourList = CardLists.filter(controller.getCardsIn(ZoneType.Graveyard), Presets.CREATURES); + if (oppList.size() >= yourList.size()) { + return false; + } + } } else if (property.startsWith("withMost")) { if (property.substring(8).equals("Life")) { int highestLife = this.getLife(); // Negative base just in case a few Lich's are running around