diff --git a/res/cards.txt b/res/cards.txt index db11968b703..faa6004c871 100644 --- a/res/cards.txt +++ b/res/cards.txt @@ -1,3 +1,10 @@ +Sek'Kuar, Deathkeeper +2 B R G +Legendary Creature Orc Shaman +no text +4/3 +Whenever another nontoken creature you control is put into a graveyard from the battlefield, put a 3/1 black and red Graveborn creature token with haste onto the battlefield. + Dingus Egg 4 Artifact diff --git a/res/gui/display_layout.xml b/res/gui/display_layout.xml index 59e6441de07..d3efcdbdbc5 100644 --- a/res/gui/display_layout.xml +++ b/res/gui/display_layout.xml @@ -1,12 +1,12 @@ - + 0 0 - 1018 - 693 + 1440 + 827 @@ -17,7 +17,7 @@ 0 0 242 - 693 + 827 @@ -28,7 +28,7 @@ 0 0 242 - 118 + 145 @@ -47,7 +47,7 @@ 0 - 118 + 145 242 10 @@ -62,9 +62,9 @@ 0 - 128 + 155 242 - 144 + 171 @@ -83,7 +83,7 @@ 0 - 272 + 326 242 10 @@ -98,9 +98,9 @@ 0 - 282 + 336 242 - 88 + 115 @@ -119,7 +119,7 @@ 0 - 370 + 451 242 10 @@ -134,9 +134,9 @@ 0 - 380 + 461 242 - 80 + 107 @@ -155,7 +155,7 @@ 0 - 460 + 568 242 10 @@ -170,9 +170,9 @@ 0 - 470 + 578 242 - 223 + 249 @@ -205,7 +205,7 @@ 242 0 10 - 693 + 827 @@ -219,8 +219,8 @@ 252 0 - 484 - 693 + 906 + 827 @@ -230,8 +230,8 @@ 252 0 - 484 - 136 + 906 + 163 @@ -250,8 +250,8 @@ 252 - 136 - 484 + 163 + 906 10 @@ -265,9 +265,9 @@ 252 - 146 - 484 - 139 + 173 + 906 + 166 @@ -286,8 +286,8 @@ 252 - 285 - 484 + 339 + 906 10 @@ -301,9 +301,9 @@ 252 - 295 - 484 - 113 + 349 + 906 + 140 @@ -322,8 +322,8 @@ 252 - 408 - 484 + 489 + 906 10 @@ -337,9 +337,9 @@ 252 - 418 - 484 - 118 + 499 + 906 + 150 @@ -358,8 +358,8 @@ 252 - 536 - 484 + 649 + 906 10 @@ -373,9 +373,9 @@ 252 - 546 - 484 - 147 + 659 + 906 + 168 @@ -408,10 +408,10 @@ - 736 + 1158 0 10 - 693 + 827 @@ -423,10 +423,10 @@ - 746 + 1168 0 272 - 693 + 827 @@ -434,10 +434,10 @@ - 746 + 1168 0 272 - 357 + 424 @@ -455,8 +455,8 @@ - 746 - 357 + 1168 + 424 272 10 @@ -470,10 +470,10 @@ - 746 - 367 + 1168 + 434 272 - 326 + 393 diff --git a/src/forge/CardFactory.java b/src/forge/CardFactory.java index a710914a582..cbae0e9597d 100644 --- a/src/forge/CardFactory.java +++ b/src/forge/CardFactory.java @@ -8828,7 +8828,7 @@ public class CardFactory implements NewConstants { }//*************** END ************ END ************************** //*************** START *********** START ************************** - if (cardName.equals("Soulscour") ) + else if (cardName.equals("Soulscour") ) { SpellAbility spell = new Spell(card) { @@ -8919,7 +8919,7 @@ public class CardFactory implements NewConstants { //*************** START *********** START ************************** - if (cardName.equals("Wrath of God") || cardName.equals("Damnation")) + else if (cardName.equals("Wrath of God") || cardName.equals("Damnation")) { SpellAbility spell = new Spell(card) { @@ -8934,8 +8934,9 @@ public class CardFactory implements NewConstants { for (int i = 0; i < all.size(); i++) { Card c = all.get(i); - if (c.isCreature()) + if (c.isCreature()) { AllZone.GameAction.destroyNoRegeneration(c); + } } }// resolve() @@ -8957,7 +8958,7 @@ public class CardFactory implements NewConstants { }// *************** END ************ END ************************** //*************** START *********** START ************************** - if (cardName.equals("Day of Judgment")) + else if (cardName.equals("Day of Judgment")) { SpellAbility spell = new Spell(card) { @@ -8998,7 +8999,7 @@ public class CardFactory implements NewConstants { //*************** START *********** START ************************** - if (cardName.equals("Planar Cleansing") ) + else if (cardName.equals("Planar Cleansing") ) { SpellAbility spell = new Spell(card) { @@ -9037,7 +9038,7 @@ public class CardFactory implements NewConstants { }// *************** END ************ END ************************** //*************** START *********** START ************************** - if (cardName.equals("Tranquility") || cardName.equals("Tempest of Light") || cardName.equals("Cleanfall")) + else if (cardName.equals("Tranquility") || cardName.equals("Tempest of Light") || cardName.equals("Cleanfall")) { SpellAbility spell = new Spell(card) { @@ -9058,7 +9059,7 @@ public class CardFactory implements NewConstants { AllZone.GameAction.destroy(c); } - + }// resolve() public boolean canPlayAI() @@ -9083,7 +9084,7 @@ public class CardFactory implements NewConstants { }// *************** END ************ END ************************** //*************** START *********** START ************************** - if (cardName.equals("Hush")) + else if (cardName.equals("Hush")) { SpellAbility spell = new Spell(card) { @@ -10241,7 +10242,7 @@ public class CardFactory implements NewConstants { card.addSpellAbility(spell); }//*************** END ************ END ************************** - if (cardName.equals("Lockjaw Snapper")) + else if (cardName.equals("Lockjaw Snapper")) { final Ability ability = new Ability(card, "0") @@ -10661,7 +10662,7 @@ public class CardFactory implements NewConstants { }//*************** END ************ END ************************** //*************** START *********** START ************************** - if (cardName.equals("Think Twice")) + else if (cardName.equals("Think Twice")) { SpellAbility spell = new Spell(card) { @@ -13695,6 +13696,12 @@ public class CardFactory implements NewConstants { public boolean canPlayAI() { CardList humanPlay = new CardList(AllZone.Human_Play.getCards()); + humanPlay = humanPlay.filter(new CardListFilter() + { + public boolean addCard(Card c) { + return c.isCreature() && CardFactoryUtil.canTarget(card, c); + } + }); if (humanPlay.size() > 0) setTargetCard(CardFactoryUtil.AI_getBestCreature(humanPlay)); return ((AllZone.Computer_Hand.size() > 2)&&(getTargetCard() != null)) ; diff --git a/src/forge/CardFactory_Auras.java b/src/forge/CardFactory_Auras.java index 4909f66a93d..06e6530ae90 100644 --- a/src/forge/CardFactory_Auras.java +++ b/src/forge/CardFactory_Auras.java @@ -5506,7 +5506,7 @@ class CardFactory_Auras { if (card.isEnchanting()) { Card crd = card.getEnchanting().get(0); - crd.addExtrinsicKeyword("This card doesn't untap during its controller's untap step."); + crd.addExtrinsicKeyword("This card doesn't untap during your untap step."); } }//execute() };//Command @@ -5521,7 +5521,7 @@ class CardFactory_Auras { if (card.isEnchanting()) { Card crd = card.getEnchanting().get(0); - crd.removeExtrinsicKeyword("This card doesn't untap during its controller's untap step."); + crd.removeExtrinsicKeyword("This card doesn't untap during your untap step."); } }//execute() diff --git a/src/forge/CardFactory_Creatures.java b/src/forge/CardFactory_Creatures.java index a1a85d7c218..6ede028c051 100644 --- a/src/forge/CardFactory_Creatures.java +++ b/src/forge/CardFactory_Creatures.java @@ -15511,7 +15511,7 @@ public class CardFactory_Creatures { }//*************** END ************ END ************************** //*************** START *********** START ************************** - if(cardName.equals("Stern Judge")) + else if(cardName.equals("Stern Judge")) { final Ability_Tap ability = new Ability_Tap(card) { @@ -15547,7 +15547,7 @@ public class CardFactory_Creatures { //*************** START *********** START ************************** - if(cardName.equals("Cackling Imp") || cardName.equals("Blightspeaker")) + else if(cardName.equals("Cackling Imp") || cardName.equals("Blightspeaker")) { final Ability_Tap ability = new Ability_Tap(card) { @@ -15575,7 +15575,7 @@ public class CardFactory_Creatures { //*************** START *********** START ************************** - if(cardName.equals("Thought Courier")) + else if(cardName.equals("Thought Courier")) { final Ability_Tap ability = new Ability_Tap(card) { @@ -15592,6 +15592,56 @@ public class CardFactory_Creatures { ability.setStackDescription("Thought Courier - draw a card, then discard a card."); ability.setBeforePayMana(new Input_NoCost_TapAbility(ability)); }//*************** END ************ END ************************** + + //*************** START *********** START ************************** + else if(cardName.equals("Elvish Hunter")) + { + final SpellAbility ability = new Ability_Tap(card, "1 G") + { + private static final long serialVersionUID = -560200335562416099L; + public boolean canPlayAI() + { + if(CardFactoryUtil.AI_doesCreatureAttack(card)) + return false; + + return (getCreature().size() != 0); + } + public void chooseTargetAI() + { + card.tap(); + Card target = CardFactoryUtil.AI_getBestCreature(getCreature()); + setTargetCard(target); + } + CardList getCreature() + { + CardList list = new CardList(AllZone.Human_Play.getCards()); + list = list.filter(new CardListFilter() + { + public boolean addCard(Card c) + { + return c.isCreature() && (! c.getKeyword().contains("This card doesn't untap during your next untap step.")) && + CardFactoryUtil.canTarget(card, c) && c.isTapped(); + } + }); + list.remove(card); + return list; + }//getCreature() + public void resolve() + { + if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()) ) + { + final Card[] creature = new Card[1]; + creature[0] = getTargetCard(); + creature[0].addExtrinsicKeyword("This card doesn't untap during your next untap step."); + }//if (card is in play) + }//resolve() + };//SpellAbility + card.addSpellAbility(ability); + ability.setDescription("1 G, tap: Target creature doesn't untap during its controller's next untap step."); + + ability.setBeforePayMana(CardFactoryUtil.input_targetCreature(ability)); + }//*************** END ************ END ************************** + // Cards with Cycling abilities diff --git a/src/forge/GameAction.java b/src/forge/GameAction.java index c68e178c16d..dac195faa8d 100644 --- a/src/forge/GameAction.java +++ b/src/forge/GameAction.java @@ -524,7 +524,7 @@ private Card getCurrentCard(int ID) ArrayList keywords = c.getKeyword(); for (String kw : keywords) { - if (kw.startsWith("Whenever") && kw.contains(" put into a graveyard from the battlefield,")) + if (kw.startsWith("Whenever ") && kw.contains(" put into a graveyard from the battlefield,")) return true; } return false; diff --git a/src/forge/GameActionUtil.java b/src/forge/GameActionUtil.java index 02c38dd5868..12b5b95d4e8 100644 --- a/src/forge/GameActionUtil.java +++ b/src/forge/GameActionUtil.java @@ -947,11 +947,8 @@ public class GameActionUtil { crd.removeExtrinsicKeyword("Lifelink"); } - } - } - } public static boolean isRafiqInPlay(String player) @@ -1111,7 +1108,6 @@ public class GameActionUtil return true; } - //***CREATURES START HERE*** public static void executeDestroyCreatureCardEffects(Card c, Card destroyed) @@ -1129,8 +1125,11 @@ public class GameActionUtil destroyCreature_Fecundity(c, destroyed); else if (c.getName().equals("Moonlit Wake")) destroyCreature_Moonlit_Wake(c, destroyed); - else if (c.getName().equals("Proper Burial")) + else if (c.getName().equals("Proper Burial") && destroyed.getController().equals(c.getController())) destroyCreature_Proper_Burial(c, destroyed); + else if (c.getName().equals("Sek'Kuar, Deathkeeper") && !destroyed.isToken() && destroyed.getController().equals(c.getController()) && + !destroyed.getName().equals(c.getName())) + destroyCreature_SekKuar(c, destroyed); //} } @@ -1248,6 +1247,41 @@ public class GameActionUtil AllZone.Stack.add(ability); } + private static void destroyCreature_SekKuar(Card c, Card destroyed) + { + final Card crd = c; + + Ability ability = new Ability(c, "0") + { + public void resolve() + { + Card c = new Card(); + + c.setOwner(crd.getController()); + c.setController(crd.getController()); + + c.setName("Graveborn"); + c.setImageName("BR 3 1 Graveborn"); + c.setManaCost("B R"); + c.setToken(true); + + c.addType("Creature"); + c.addType("Graveborn"); + + c.addIntrinsicKeyword("Haste"); + + c.setBaseAttack(3); + c.setBaseDefense(1); + + + PlayerZone play = AllZone.getZone(Constant.Zone.Play,crd.getController()); + play.add(c); + } + }; + ability.setStackDescription("Sek'Kuar, Deathkeeper - put a 3/1 black and red Graveborn creature token with haste onto the battlefield."); + AllZone.Stack.add(ability); + } + //***CREATURES END HERE*** //***LANDS START HERE***