From dcc61c6d1c23d8e74e275246ed68190e07a45ea0 Mon Sep 17 00:00:00 2001 From: swordshine Date: Sun, 3 Aug 2014 08:29:22 +0000 Subject: [PATCH] - Added Panglacial Wurm --- .gitattributes | 1 + .../java/forge/game/ability/AbilityUtils.java | 22 +++++++++ .../ability/effects/ChangeZoneEffect.java | 47 +++++++++++++------ .../game/ability/effects/PlayEffect.java | 19 +------- .../res/cardsfolder/p/panglacial_wurm.txt | 8 ++++ 5 files changed, 64 insertions(+), 33 deletions(-) create mode 100644 forge-gui/res/cardsfolder/p/panglacial_wurm.txt diff --git a/.gitattributes b/.gitattributes index 093e42beb77..efcefe06079 100644 --- a/.gitattributes +++ b/.gitattributes @@ -9802,6 +9802,7 @@ forge-gui/res/cardsfolder/p/pallimud.txt svneol=native#text/plain forge-gui/res/cardsfolder/p/panacea.txt -text forge-gui/res/cardsfolder/p/pandemonium.txt -text forge-gui/res/cardsfolder/p/pang_tong_young_phoenix.txt svneol=native#text/plain +forge-gui/res/cardsfolder/p/panglacial_wurm.txt -text forge-gui/res/cardsfolder/p/pangosaur.txt svneol=native#text/plain forge-gui/res/cardsfolder/p/panic.txt svneol=native#text/plain forge-gui/res/cardsfolder/p/panic_attack.txt svneol=native#text/plain diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index 831d74ca421..d834571233c 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -12,7 +12,9 @@ import forge.game.cost.Cost; import forge.game.mana.ManaCostBeingPaid; import forge.game.player.Player; import forge.game.spellability.AbilitySub; +import forge.game.spellability.Spell; import forge.game.spellability.SpellAbility; +import forge.game.spellability.SpellAbilityRestriction; import forge.game.spellability.SpellAbilityStackInstance; import forge.game.zone.ZoneType; import forge.util.Expressions; @@ -1484,4 +1486,24 @@ public class AbilityUtils { } } } + + public static final List getBasicSpellsFromPlayEffect(final Card tgtCard, final Player controller) { + List sas = new ArrayList(); + for (SpellAbility s : tgtCard.getBasicSpells()) { + final Spell newSA = (Spell) s.copy(); + newSA.setActivatingPlayer(controller); + SpellAbilityRestriction res = new SpellAbilityRestriction(); + // timing restrictions still apply + res.setPlayerTurn(s.getRestrictions().getPlayerTurn()); + res.setOpponentTurn(s.getRestrictions().getOpponentTurn()); + res.setPhases(s.getRestrictions().getPhases()); + res.setZone(null); + newSA.setRestrictions(res); + // timing restrictions still apply + if (res.checkTimingRestrictions(tgtCard, newSA) && newSA.checkOtherRestrictions()) { + sas.add(newSA); + } + } + return sas; + } } diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java index 6f54c8fddbc..80929059a70 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java @@ -677,23 +677,9 @@ public class ChangeZoneEffect extends SpellAbilityEffect { } } } - - if (!defined && changeType != null) - fetchList = AbilityUtils.filterListByType(fetchList, sa.getParam("ChangeType"), sa); - - if (searchedLibrary) { - if (decider.equals(player)) { - // should only count the number of searching player's own library - decider.incLibrarySearched(); - } - final HashMap runParams = new HashMap(); - runParams.put("Player", decider); - runParams.put("Target", Lists.newArrayList(player)); - decider.getGame().getTriggerHandler().runTrigger(TriggerType.SearchedLibrary, runParams, false); - } if (!defined) { - if (origin.contains(ZoneType.Library) && !defined && !sa.hasParam("NoLooking") && !decider.hasKeyword("CantSearchLibrary")) { + if (origin.contains(ZoneType.Library) && searchedLibrary) { final int fetchNum = Math.min(player.getCardsIn(ZoneType.Library).size(), 4); List shown = !decider.hasKeyword("LimitSearchLibrary") ? player.getCardsIn(ZoneType.Library) : player.getCardsIn(ZoneType.Library, fetchNum); // Look at whole library before moving onto choosing a card @@ -707,6 +693,37 @@ public class ChangeZoneEffect extends SpellAbilityEffect { } + if (searchedLibrary) { + if (decider.equals(player)) { + // should only count the number of searching player's own library + decider.incLibrarySearched(); + // Panglacial Wurm + List canCastWhileSearching = CardLists.getKeyword(fetchList, + "While you're searching your library, you may cast CARDNAME from your library."); + for (final Card tgtCard : canCastWhileSearching) { + List sas = AbilityUtils.getBasicSpellsFromPlayEffect(tgtCard, decider); + if (sas.isEmpty()) { + continue; + } + SpellAbility tgtSA = decider.getController().getAbilityToPlay(sas); + if (!decider.getController().confirmAction(tgtSA, null, "Do you want to play " + tgtCard + "?")) { + continue; + } + // if played, that card cannot be found + if (decider.getController().playSaFromPlayEffect(tgtSA)) { + fetchList.remove(tgtCard); + } + } + } + final HashMap runParams = new HashMap(); + runParams.put("Player", decider); + runParams.put("Target", Lists.newArrayList(player)); + decider.getGame().getTriggerHandler().runTrigger(TriggerType.SearchedLibrary, runParams, false); + } + + if (!defined && changeType != null) + fetchList = AbilityUtils.filterListByType(fetchList, sa.getParam("ChangeType"), sa); + if (sa.hasParam("NoShuffle")) { shuffleMandatory = false; } diff --git a/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java b/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java index 371276e989d..e6a919f620e 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java @@ -13,9 +13,7 @@ import forge.game.ability.SpellAbilityEffect; import forge.game.card.Card; import forge.game.cost.Cost; import forge.game.player.Player; -import forge.game.spellability.Spell; import forge.game.spellability.SpellAbility; -import forge.game.spellability.SpellAbilityRestriction; import forge.game.zone.Zone; import forge.game.zone.ZoneType; import forge.item.PaperCard; @@ -179,22 +177,7 @@ public class PlayEffect extends SpellAbilityEffect { } // get basic spells (no flashback, etc.) - ArrayList sas = new ArrayList(); - for (SpellAbility s : tgtCard.getBasicSpells()) { - final Spell newSA = (Spell) s.copy(); - newSA.setActivatingPlayer(controller); - SpellAbilityRestriction res = new SpellAbilityRestriction(); - // timing restrictions still apply - res.setPlayerTurn(s.getRestrictions().getPlayerTurn()); - res.setOpponentTurn(s.getRestrictions().getOpponentTurn()); - res.setPhases(s.getRestrictions().getPhases()); - res.setZone(null); - newSA.setRestrictions(res); - // timing restrictions still apply - if (res.checkTimingRestrictions(tgtCard, newSA) && newSA.checkOtherRestrictions()) { - sas.add(newSA); - } - } + List sas = AbilityUtils.getBasicSpellsFromPlayEffect(tgtCard, controller); if (sas.isEmpty()) { return; } diff --git a/forge-gui/res/cardsfolder/p/panglacial_wurm.txt b/forge-gui/res/cardsfolder/p/panglacial_wurm.txt new file mode 100644 index 00000000000..cbdada4299f --- /dev/null +++ b/forge-gui/res/cardsfolder/p/panglacial_wurm.txt @@ -0,0 +1,8 @@ +Name:Panglacial Wurm +ManaCost:5 G G +Types:Creature Wurm +PT:9/5 +K:Trample +K:While you're searching your library, you may cast CARDNAME from your library. +SVar:Picture:http://www.wizards.com/global/images/magic/general/panglacial_wurm.jpg +Oracle:Trample\nWhile you're searching your library, you may cast Panglacial Wurm from your library.