Some generic fixes, also: - Added "Whenever *any text goes here* put into a graveyard from the battlefield,*any text goes here*" keyword. It doesn't do anything, but it notifies the program that the card triggers on whenever a card gets put into a graveyard from the battlefield.

- AEther Spellbomb should be fixed.
This commit is contained in:
jendave
2011-08-06 02:46:47 +00:00
parent 55aa410249
commit 2c739ecf24
7 changed files with 172 additions and 74 deletions

View File

@@ -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 Dingus Egg
4 4
Artifact Artifact

View File

@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<java version="1.6.0_16" class="java.beans.XMLDecoder"> <java version="1.6.0_11" class="java.beans.XMLDecoder">
<object id="MultiSplitLayout$Split0" class="org.jdesktop.swingx.MultiSplitLayout$Split"> <object id="MultiSplitLayout$Split0" class="org.jdesktop.swingx.MultiSplitLayout$Split">
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>0</int> <int>0</int>
<int>1018</int> <int>1440</int>
<int>693</int> <int>827</int>
</object> </object>
</void> </void>
<void id="ArrayList0" property="children"> <void id="ArrayList0" property="children">
@@ -17,7 +17,7 @@
<int>0</int> <int>0</int>
<int>0</int> <int>0</int>
<int>242</int> <int>242</int>
<int>693</int> <int>827</int>
</object> </object>
</void> </void>
<void id="ArrayList1" property="children"> <void id="ArrayList1" property="children">
@@ -28,7 +28,7 @@
<int>0</int> <int>0</int>
<int>0</int> <int>0</int>
<int>242</int> <int>242</int>
<int>118</int> <int>145</int>
</object> </object>
</void> </void>
<void property="name"> <void property="name">
@@ -47,7 +47,7 @@
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>118</int> <int>145</int>
<int>242</int> <int>242</int>
<int>10</int> <int>10</int>
</object> </object>
@@ -62,9 +62,9 @@
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>128</int> <int>155</int>
<int>242</int> <int>242</int>
<int>144</int> <int>171</int>
</object> </object>
</void> </void>
<void property="name"> <void property="name">
@@ -83,7 +83,7 @@
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>272</int> <int>326</int>
<int>242</int> <int>242</int>
<int>10</int> <int>10</int>
</object> </object>
@@ -98,9 +98,9 @@
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>282</int> <int>336</int>
<int>242</int> <int>242</int>
<int>88</int> <int>115</int>
</object> </object>
</void> </void>
<void property="name"> <void property="name">
@@ -119,7 +119,7 @@
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>370</int> <int>451</int>
<int>242</int> <int>242</int>
<int>10</int> <int>10</int>
</object> </object>
@@ -134,9 +134,9 @@
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>380</int> <int>461</int>
<int>242</int> <int>242</int>
<int>80</int> <int>107</int>
</object> </object>
</void> </void>
<void property="name"> <void property="name">
@@ -155,7 +155,7 @@
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>460</int> <int>568</int>
<int>242</int> <int>242</int>
<int>10</int> <int>10</int>
</object> </object>
@@ -170,9 +170,9 @@
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>470</int> <int>578</int>
<int>242</int> <int>242</int>
<int>223</int> <int>249</int>
</object> </object>
</void> </void>
<void property="name"> <void property="name">
@@ -205,7 +205,7 @@
<int>242</int> <int>242</int>
<int>0</int> <int>0</int>
<int>10</int> <int>10</int>
<int>693</int> <int>827</int>
</object> </object>
</void> </void>
<void property="parent"> <void property="parent">
@@ -219,8 +219,8 @@
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>252</int> <int>252</int>
<int>0</int> <int>0</int>
<int>484</int> <int>906</int>
<int>693</int> <int>827</int>
</object> </object>
</void> </void>
<void id="ArrayList2" property="children"> <void id="ArrayList2" property="children">
@@ -230,8 +230,8 @@
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>252</int> <int>252</int>
<int>0</int> <int>0</int>
<int>484</int> <int>906</int>
<int>136</int> <int>163</int>
</object> </object>
</void> </void>
<void property="name"> <void property="name">
@@ -250,8 +250,8 @@
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>252</int> <int>252</int>
<int>136</int> <int>163</int>
<int>484</int> <int>906</int>
<int>10</int> <int>10</int>
</object> </object>
</void> </void>
@@ -265,9 +265,9 @@
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>252</int> <int>252</int>
<int>146</int> <int>173</int>
<int>484</int> <int>906</int>
<int>139</int> <int>166</int>
</object> </object>
</void> </void>
<void property="name"> <void property="name">
@@ -286,8 +286,8 @@
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>252</int> <int>252</int>
<int>285</int> <int>339</int>
<int>484</int> <int>906</int>
<int>10</int> <int>10</int>
</object> </object>
</void> </void>
@@ -301,9 +301,9 @@
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>252</int> <int>252</int>
<int>295</int> <int>349</int>
<int>484</int> <int>906</int>
<int>113</int> <int>140</int>
</object> </object>
</void> </void>
<void property="name"> <void property="name">
@@ -322,8 +322,8 @@
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>252</int> <int>252</int>
<int>408</int> <int>489</int>
<int>484</int> <int>906</int>
<int>10</int> <int>10</int>
</object> </object>
</void> </void>
@@ -337,9 +337,9 @@
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>252</int> <int>252</int>
<int>418</int> <int>499</int>
<int>484</int> <int>906</int>
<int>118</int> <int>150</int>
</object> </object>
</void> </void>
<void property="name"> <void property="name">
@@ -358,8 +358,8 @@
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>252</int> <int>252</int>
<int>536</int> <int>649</int>
<int>484</int> <int>906</int>
<int>10</int> <int>10</int>
</object> </object>
</void> </void>
@@ -373,9 +373,9 @@
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>252</int> <int>252</int>
<int>546</int> <int>659</int>
<int>484</int> <int>906</int>
<int>147</int> <int>168</int>
</object> </object>
</void> </void>
<void property="name"> <void property="name">
@@ -408,10 +408,10 @@
<object class="org.jdesktop.swingx.MultiSplitLayout$Divider"> <object class="org.jdesktop.swingx.MultiSplitLayout$Divider">
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>736</int> <int>1158</int>
<int>0</int> <int>0</int>
<int>10</int> <int>10</int>
<int>693</int> <int>827</int>
</object> </object>
</void> </void>
<void property="parent"> <void property="parent">
@@ -423,10 +423,10 @@
<object id="MultiSplitLayout$Split3" class="org.jdesktop.swingx.MultiSplitLayout$Split"> <object id="MultiSplitLayout$Split3" class="org.jdesktop.swingx.MultiSplitLayout$Split">
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>746</int> <int>1168</int>
<int>0</int> <int>0</int>
<int>272</int> <int>272</int>
<int>693</int> <int>827</int>
</object> </object>
</void> </void>
<void id="ArrayList3" property="children"> <void id="ArrayList3" property="children">
@@ -434,10 +434,10 @@
<object class="org.jdesktop.swingx.MultiSplitLayout$Leaf"> <object class="org.jdesktop.swingx.MultiSplitLayout$Leaf">
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>746</int> <int>1168</int>
<int>0</int> <int>0</int>
<int>272</int> <int>272</int>
<int>357</int> <int>424</int>
</object> </object>
</void> </void>
<void property="name"> <void property="name">
@@ -455,8 +455,8 @@
<object class="org.jdesktop.swingx.MultiSplitLayout$Divider"> <object class="org.jdesktop.swingx.MultiSplitLayout$Divider">
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>746</int> <int>1168</int>
<int>357</int> <int>424</int>
<int>272</int> <int>272</int>
<int>10</int> <int>10</int>
</object> </object>
@@ -470,10 +470,10 @@
<object class="org.jdesktop.swingx.MultiSplitLayout$Leaf"> <object class="org.jdesktop.swingx.MultiSplitLayout$Leaf">
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>746</int> <int>1168</int>
<int>367</int> <int>434</int>
<int>272</int> <int>272</int>
<int>326</int> <int>393</int>
</object> </object>
</void> </void>
<void property="name"> <void property="name">

View File

@@ -8828,7 +8828,7 @@ public class CardFactory implements NewConstants {
}//*************** END ************ END ************************** }//*************** END ************ END **************************
//*************** START *********** START ************************** //*************** START *********** START **************************
if (cardName.equals("Soulscour") ) else if (cardName.equals("Soulscour") )
{ {
SpellAbility spell = new Spell(card) SpellAbility spell = new Spell(card)
{ {
@@ -8919,7 +8919,7 @@ public class CardFactory implements NewConstants {
//*************** START *********** START ************************** //*************** 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) SpellAbility spell = new Spell(card)
{ {
@@ -8934,8 +8934,9 @@ public class CardFactory implements NewConstants {
for (int i = 0; i < all.size(); i++) for (int i = 0; i < all.size(); i++)
{ {
Card c = all.get(i); Card c = all.get(i);
if (c.isCreature()) if (c.isCreature()) {
AllZone.GameAction.destroyNoRegeneration(c); AllZone.GameAction.destroyNoRegeneration(c);
}
} }
}// resolve() }// resolve()
@@ -8957,7 +8958,7 @@ public class CardFactory implements NewConstants {
}// *************** END ************ END ************************** }// *************** END ************ END **************************
//*************** START *********** START ************************** //*************** START *********** START **************************
if (cardName.equals("Day of Judgment")) else if (cardName.equals("Day of Judgment"))
{ {
SpellAbility spell = new Spell(card) SpellAbility spell = new Spell(card)
{ {
@@ -8998,7 +8999,7 @@ public class CardFactory implements NewConstants {
//*************** START *********** START ************************** //*************** START *********** START **************************
if (cardName.equals("Planar Cleansing") ) else if (cardName.equals("Planar Cleansing") )
{ {
SpellAbility spell = new Spell(card) SpellAbility spell = new Spell(card)
{ {
@@ -9037,7 +9038,7 @@ public class CardFactory implements NewConstants {
}// *************** END ************ END ************************** }// *************** END ************ END **************************
//*************** START *********** START ************************** //*************** 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) SpellAbility spell = new Spell(card)
{ {
@@ -9058,7 +9059,7 @@ public class CardFactory implements NewConstants {
AllZone.GameAction.destroy(c); AllZone.GameAction.destroy(c);
} }
}// resolve() }// resolve()
public boolean canPlayAI() public boolean canPlayAI()
@@ -9083,7 +9084,7 @@ public class CardFactory implements NewConstants {
}// *************** END ************ END ************************** }// *************** END ************ END **************************
//*************** START *********** START ************************** //*************** START *********** START **************************
if (cardName.equals("Hush")) else if (cardName.equals("Hush"))
{ {
SpellAbility spell = new Spell(card) SpellAbility spell = new Spell(card)
{ {
@@ -10241,7 +10242,7 @@ public class CardFactory implements NewConstants {
card.addSpellAbility(spell); card.addSpellAbility(spell);
}//*************** END ************ END ************************** }//*************** END ************ END **************************
if (cardName.equals("Lockjaw Snapper")) else if (cardName.equals("Lockjaw Snapper"))
{ {
final Ability ability = new Ability(card, "0") final Ability ability = new Ability(card, "0")
@@ -10661,7 +10662,7 @@ public class CardFactory implements NewConstants {
}//*************** END ************ END ************************** }//*************** END ************ END **************************
//*************** START *********** START ************************** //*************** START *********** START **************************
if (cardName.equals("Think Twice")) else if (cardName.equals("Think Twice"))
{ {
SpellAbility spell = new Spell(card) SpellAbility spell = new Spell(card)
{ {
@@ -13695,6 +13696,12 @@ public class CardFactory implements NewConstants {
public boolean canPlayAI() public boolean canPlayAI()
{ {
CardList humanPlay = new CardList(AllZone.Human_Play.getCards()); 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) if (humanPlay.size() > 0)
setTargetCard(CardFactoryUtil.AI_getBestCreature(humanPlay)); setTargetCard(CardFactoryUtil.AI_getBestCreature(humanPlay));
return ((AllZone.Computer_Hand.size() > 2)&&(getTargetCard() != null)) ; return ((AllZone.Computer_Hand.size() > 2)&&(getTargetCard() != null)) ;

View File

@@ -5506,7 +5506,7 @@ class CardFactory_Auras {
if (card.isEnchanting()) if (card.isEnchanting())
{ {
Card crd = card.getEnchanting().get(0); 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() }//execute()
};//Command };//Command
@@ -5521,7 +5521,7 @@ class CardFactory_Auras {
if (card.isEnchanting()) if (card.isEnchanting())
{ {
Card crd = card.getEnchanting().get(0); 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() }//execute()

View File

@@ -15511,7 +15511,7 @@ public class CardFactory_Creatures {
}//*************** END ************ END ************************** }//*************** END ************ END **************************
//*************** START *********** START ************************** //*************** START *********** START **************************
if(cardName.equals("Stern Judge")) else if(cardName.equals("Stern Judge"))
{ {
final Ability_Tap ability = new Ability_Tap(card) final Ability_Tap ability = new Ability_Tap(card)
{ {
@@ -15547,7 +15547,7 @@ public class CardFactory_Creatures {
//*************** START *********** START ************************** //*************** 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) final Ability_Tap ability = new Ability_Tap(card)
{ {
@@ -15575,7 +15575,7 @@ public class CardFactory_Creatures {
//*************** START *********** START ************************** //*************** START *********** START **************************
if(cardName.equals("Thought Courier")) else if(cardName.equals("Thought Courier"))
{ {
final Ability_Tap ability = new Ability_Tap(card) 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.setStackDescription("Thought Courier - draw a card, then discard a card.");
ability.setBeforePayMana(new Input_NoCost_TapAbility(ability)); ability.setBeforePayMana(new Input_NoCost_TapAbility(ability));
}//*************** END ************ END ************************** }//*************** 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 // Cards with Cycling abilities

View File

@@ -524,7 +524,7 @@ private Card getCurrentCard(int ID)
ArrayList<String> keywords = c.getKeyword(); ArrayList<String> keywords = c.getKeyword();
for (String kw : keywords) 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 true;
} }
return false; return false;

View File

@@ -947,11 +947,8 @@ public class GameActionUtil
{ {
crd.removeExtrinsicKeyword("Lifelink"); crd.removeExtrinsicKeyword("Lifelink");
} }
} }
} }
} }
public static boolean isRafiqInPlay(String player) public static boolean isRafiqInPlay(String player)
@@ -1111,7 +1108,6 @@ public class GameActionUtil
return true; return true;
} }
//***CREATURES START HERE*** //***CREATURES START HERE***
public static void executeDestroyCreatureCardEffects(Card c, Card destroyed) public static void executeDestroyCreatureCardEffects(Card c, Card destroyed)
@@ -1129,8 +1125,11 @@ public class GameActionUtil
destroyCreature_Fecundity(c, destroyed); destroyCreature_Fecundity(c, destroyed);
else if (c.getName().equals("Moonlit Wake")) else if (c.getName().equals("Moonlit Wake"))
destroyCreature_Moonlit_Wake(c, destroyed); 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); 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); 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*** //***CREATURES END HERE***
//***LANDS START HERE*** //***LANDS START HERE***