From 76a012c71680913226fa9c60c87099c85acf21da Mon Sep 17 00:00:00 2001 From: Hellfish Date: Mon, 3 Jun 2013 18:47:29 +0000 Subject: [PATCH] *Added Archive Trap --- .gitattributes | 1 + res/cardsfolder/a/archive_trap.txt | 9 +++++++++ src/main/java/forge/card/ability/AbilityUtils.java | 11 +++++++++++ .../java/forge/card/ability/ai/ChangeZoneAi.java | 4 ++++ .../card/ability/effects/ChangeZoneAllEffect.java | 4 ++++ .../card/ability/effects/ChangeZoneEffect.java | 5 +++++ .../forge/card/cardfactory/CardFactoryUtil.java | 2 ++ src/main/java/forge/game/phase/PhaseHandler.java | 1 + src/main/java/forge/game/player/Player.java | 14 ++++++++++++++ 9 files changed, 51 insertions(+) create mode 100644 res/cardsfolder/a/archive_trap.txt diff --git a/.gitattributes b/.gitattributes index 750e7272992..4606102c3c9 100644 --- a/.gitattributes +++ b/.gitattributes @@ -441,6 +441,7 @@ res/cardsfolder/a/archangels_light.txt -text res/cardsfolder/a/archdemon_of_unx.txt svneol=native#text/plain res/cardsfolder/a/archery_training.txt -text res/cardsfolder/a/architects_of_will.txt svneol=native#text/plain +res/cardsfolder/a/archive_trap.txt -text res/cardsfolder/a/archivist.txt svneol=native#text/plain res/cardsfolder/a/archmage_ascension.txt -text res/cardsfolder/a/archon_of_justice.txt svneol=native#text/plain diff --git a/res/cardsfolder/a/archive_trap.txt b/res/cardsfolder/a/archive_trap.txt new file mode 100644 index 00000000000..18b450349c7 --- /dev/null +++ b/res/cardsfolder/a/archive_trap.txt @@ -0,0 +1,9 @@ +Name:Archive Trap +ManaCost:3 U U +Types:Instant Trap +A:SP$ Mill | Cost$ 3 U U | NumCards$ 13 | ValidTgts$ Opponent | TgtPrompt$ Choose an opponent | SpellDescription$ Target opponent puts the top three cards of his or her library into his or her graveyard. +A:SP$ Mill | Cost$ 0 | CheckSVar$ TrapTrigger | NumCards$ 13 | ValidTgts$ Opponent | TgtPrompt$ Choose an opponent | CostDesc$ If an opponent searched his or her library this turn, you may pay 0 rather than pay CARDNAME's mana cost. | SpellDescription$ +SVar:TrapTrigger:Count$SearchedLibrary.Opponent +SVar:Picture:http://www.wizards.com/global/images/magic/general/archive_trap.jpg +Oracle:If an opponent searched his or her library this turn, you may pay {0} rather than pay Archive Trap's mana cost.\nTarget opponent puts the top thirteen cards of his or her library into his or her graveyard. +SetInfo:ZEN Rare \ No newline at end of file diff --git a/src/main/java/forge/card/ability/AbilityUtils.java b/src/main/java/forge/card/ability/AbilityUtils.java index b9909891b77..664d515e3c6 100644 --- a/src/main/java/forge/card/ability/AbilityUtils.java +++ b/src/main/java/forge/card/ability/AbilityUtils.java @@ -1199,6 +1199,17 @@ public class AbilityUtils { return CardFactoryUtil.doXMath(Integer.parseInt(sq[2]), expr, c); // not Kicked } } + + //Count$SearchedLibrary. + if(sq[0].contains("SearchedLibrary")) { + int sum = 0; + for(Player p : AbilityUtils.getDefinedPlayers(c, sq[1], sa)) + { + sum += p.getLibrarySearched(); + } + + return sum; + } // Count$Compare .. if (sq[0].startsWith("Compare")) { diff --git a/src/main/java/forge/card/ability/ai/ChangeZoneAi.java b/src/main/java/forge/card/ability/ai/ChangeZoneAi.java index 7bb1f28d707..dcbcd8e6c56 100644 --- a/src/main/java/forge/card/ability/ai/ChangeZoneAi.java +++ b/src/main/java/forge/card/ability/ai/ChangeZoneAi.java @@ -1089,6 +1089,10 @@ public class ChangeZoneAi extends SpellAbilityAi { if (sa.hasParam("Origin")) { origin = ZoneType.listValueOf(sa.getParam("Origin")); } + + if(origin.contains(ZoneType.Library)) { + sa.getActivatingPlayer().incLibrarySearched(); + } String type = sa.getParam("ChangeType"); if (type == null) { diff --git a/src/main/java/forge/card/ability/effects/ChangeZoneAllEffect.java b/src/main/java/forge/card/ability/effects/ChangeZoneAllEffect.java index 9787092152a..3d4fcd9c693 100644 --- a/src/main/java/forge/card/ability/effects/ChangeZoneAllEffect.java +++ b/src/main/java/forge/card/ability/effects/ChangeZoneAllEffect.java @@ -40,6 +40,10 @@ public class ChangeZoneAllEffect extends SpellAbilityEffect { public void resolve(SpellAbility sa) { final ZoneType destination = ZoneType.smartValueOf(sa.getParam("Destination")); final List origin = ZoneType.listValueOf(sa.getParam("Origin")); + + if(origin.contains(ZoneType.Library)) { + sa.getActivatingPlayer().incLibrarySearched(); + } List cards = new ArrayList(); diff --git a/src/main/java/forge/card/ability/effects/ChangeZoneEffect.java b/src/main/java/forge/card/ability/effects/ChangeZoneEffect.java index 13e498a638c..afa6ecf2d00 100644 --- a/src/main/java/forge/card/ability/effects/ChangeZoneEffect.java +++ b/src/main/java/forge/card/ability/effects/ChangeZoneEffect.java @@ -634,6 +634,11 @@ public class ChangeZoneEffect extends SpellAbilityEffect { if (sa.hasParam("Origin")) { origin = ZoneType.listValueOf(sa.getParam("Origin")); } + + if(origin.contains(ZoneType.Library)) { + sa.getActivatingPlayer().incLibrarySearched(); + } + ZoneType destination = ZoneType.smartValueOf(sa.getParam("Destination")); // this needs to be zero indexed. Top = 0, Third = 2 int libraryPos = sa.hasParam("LibraryPosition") ? Integer.parseInt(sa.getParam("LibraryPosition")) : 0; diff --git a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java index e322a6fbd17..acf5f19729e 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java @@ -1373,6 +1373,8 @@ public class CardFactoryUtil { if (sq[0].contains("LowestLibrary")) { return Aggregates.min(cc.getGame().getPlayers(), Player.Accessors.countCardsInZone(ZoneType.Library)); } + + // Count$Chroma. if (sq[0].contains("Chroma")) { diff --git a/src/main/java/forge/game/phase/PhaseHandler.java b/src/main/java/forge/game/phase/PhaseHandler.java index 38fcc63822e..9a3203e83dd 100644 --- a/src/main/java/forge/game/phase/PhaseHandler.java +++ b/src/main/java/forge/game/phase/PhaseHandler.java @@ -633,6 +633,7 @@ public class PhaseHandler implements java.io.Serializable { p.resetProwl(); p.setLifeLostThisTurn(0); p.setLifeGainedThisTurn(0); + p.setLibrarySearched(0); p.removeKeyword("At the beginning of this turn's end step, you lose the game."); p.removeKeyword("Skip the untap step of this turn."); diff --git a/src/main/java/forge/game/player/Player.java b/src/main/java/forge/game/player/Player.java index f892b059a12..1375dd824e2 100644 --- a/src/main/java/forge/game/player/Player.java +++ b/src/main/java/forge/game/player/Player.java @@ -106,6 +106,9 @@ public class Player extends GameEntity implements Comparable { /** The num power surge lands. */ private int numPowerSurgeLands; + + /** The number of times this player has searched his library. */ + private int numLibrarySearched = 0; /** The prowl. */ private ArrayList prowl = new ArrayList(); @@ -2262,6 +2265,17 @@ public class Player extends GameEntity implements Comparable { public final void resetProwl() { this.prowl = new ArrayList(); } + + public final void setLibrarySearched(final int l) { + this.numLibrarySearched = l; + } + + public final int getLibrarySearched() { + return this.numLibrarySearched; + } + public final void incLibrarySearched() { + this.numLibrarySearched++; + } /* * (non-Javadoc)