mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 12:48:00 +00:00
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:
@@ -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
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
<?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">
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>0</int>
|
||||
<int>0</int>
|
||||
<int>1018</int>
|
||||
<int>693</int>
|
||||
<int>1440</int>
|
||||
<int>827</int>
|
||||
</object>
|
||||
</void>
|
||||
<void id="ArrayList0" property="children">
|
||||
@@ -17,7 +17,7 @@
|
||||
<int>0</int>
|
||||
<int>0</int>
|
||||
<int>242</int>
|
||||
<int>693</int>
|
||||
<int>827</int>
|
||||
</object>
|
||||
</void>
|
||||
<void id="ArrayList1" property="children">
|
||||
@@ -28,7 +28,7 @@
|
||||
<int>0</int>
|
||||
<int>0</int>
|
||||
<int>242</int>
|
||||
<int>118</int>
|
||||
<int>145</int>
|
||||
</object>
|
||||
</void>
|
||||
<void property="name">
|
||||
@@ -47,7 +47,7 @@
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>0</int>
|
||||
<int>118</int>
|
||||
<int>145</int>
|
||||
<int>242</int>
|
||||
<int>10</int>
|
||||
</object>
|
||||
@@ -62,9 +62,9 @@
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>0</int>
|
||||
<int>128</int>
|
||||
<int>155</int>
|
||||
<int>242</int>
|
||||
<int>144</int>
|
||||
<int>171</int>
|
||||
</object>
|
||||
</void>
|
||||
<void property="name">
|
||||
@@ -83,7 +83,7 @@
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>0</int>
|
||||
<int>272</int>
|
||||
<int>326</int>
|
||||
<int>242</int>
|
||||
<int>10</int>
|
||||
</object>
|
||||
@@ -98,9 +98,9 @@
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>0</int>
|
||||
<int>282</int>
|
||||
<int>336</int>
|
||||
<int>242</int>
|
||||
<int>88</int>
|
||||
<int>115</int>
|
||||
</object>
|
||||
</void>
|
||||
<void property="name">
|
||||
@@ -119,7 +119,7 @@
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>0</int>
|
||||
<int>370</int>
|
||||
<int>451</int>
|
||||
<int>242</int>
|
||||
<int>10</int>
|
||||
</object>
|
||||
@@ -134,9 +134,9 @@
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>0</int>
|
||||
<int>380</int>
|
||||
<int>461</int>
|
||||
<int>242</int>
|
||||
<int>80</int>
|
||||
<int>107</int>
|
||||
</object>
|
||||
</void>
|
||||
<void property="name">
|
||||
@@ -155,7 +155,7 @@
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>0</int>
|
||||
<int>460</int>
|
||||
<int>568</int>
|
||||
<int>242</int>
|
||||
<int>10</int>
|
||||
</object>
|
||||
@@ -170,9 +170,9 @@
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>0</int>
|
||||
<int>470</int>
|
||||
<int>578</int>
|
||||
<int>242</int>
|
||||
<int>223</int>
|
||||
<int>249</int>
|
||||
</object>
|
||||
</void>
|
||||
<void property="name">
|
||||
@@ -205,7 +205,7 @@
|
||||
<int>242</int>
|
||||
<int>0</int>
|
||||
<int>10</int>
|
||||
<int>693</int>
|
||||
<int>827</int>
|
||||
</object>
|
||||
</void>
|
||||
<void property="parent">
|
||||
@@ -219,8 +219,8 @@
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>252</int>
|
||||
<int>0</int>
|
||||
<int>484</int>
|
||||
<int>693</int>
|
||||
<int>906</int>
|
||||
<int>827</int>
|
||||
</object>
|
||||
</void>
|
||||
<void id="ArrayList2" property="children">
|
||||
@@ -230,8 +230,8 @@
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>252</int>
|
||||
<int>0</int>
|
||||
<int>484</int>
|
||||
<int>136</int>
|
||||
<int>906</int>
|
||||
<int>163</int>
|
||||
</object>
|
||||
</void>
|
||||
<void property="name">
|
||||
@@ -250,8 +250,8 @@
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>252</int>
|
||||
<int>136</int>
|
||||
<int>484</int>
|
||||
<int>163</int>
|
||||
<int>906</int>
|
||||
<int>10</int>
|
||||
</object>
|
||||
</void>
|
||||
@@ -265,9 +265,9 @@
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>252</int>
|
||||
<int>146</int>
|
||||
<int>484</int>
|
||||
<int>139</int>
|
||||
<int>173</int>
|
||||
<int>906</int>
|
||||
<int>166</int>
|
||||
</object>
|
||||
</void>
|
||||
<void property="name">
|
||||
@@ -286,8 +286,8 @@
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>252</int>
|
||||
<int>285</int>
|
||||
<int>484</int>
|
||||
<int>339</int>
|
||||
<int>906</int>
|
||||
<int>10</int>
|
||||
</object>
|
||||
</void>
|
||||
@@ -301,9 +301,9 @@
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>252</int>
|
||||
<int>295</int>
|
||||
<int>484</int>
|
||||
<int>113</int>
|
||||
<int>349</int>
|
||||
<int>906</int>
|
||||
<int>140</int>
|
||||
</object>
|
||||
</void>
|
||||
<void property="name">
|
||||
@@ -322,8 +322,8 @@
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>252</int>
|
||||
<int>408</int>
|
||||
<int>484</int>
|
||||
<int>489</int>
|
||||
<int>906</int>
|
||||
<int>10</int>
|
||||
</object>
|
||||
</void>
|
||||
@@ -337,9 +337,9 @@
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>252</int>
|
||||
<int>418</int>
|
||||
<int>484</int>
|
||||
<int>118</int>
|
||||
<int>499</int>
|
||||
<int>906</int>
|
||||
<int>150</int>
|
||||
</object>
|
||||
</void>
|
||||
<void property="name">
|
||||
@@ -358,8 +358,8 @@
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>252</int>
|
||||
<int>536</int>
|
||||
<int>484</int>
|
||||
<int>649</int>
|
||||
<int>906</int>
|
||||
<int>10</int>
|
||||
</object>
|
||||
</void>
|
||||
@@ -373,9 +373,9 @@
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>252</int>
|
||||
<int>546</int>
|
||||
<int>484</int>
|
||||
<int>147</int>
|
||||
<int>659</int>
|
||||
<int>906</int>
|
||||
<int>168</int>
|
||||
</object>
|
||||
</void>
|
||||
<void property="name">
|
||||
@@ -408,10 +408,10 @@
|
||||
<object class="org.jdesktop.swingx.MultiSplitLayout$Divider">
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>736</int>
|
||||
<int>1158</int>
|
||||
<int>0</int>
|
||||
<int>10</int>
|
||||
<int>693</int>
|
||||
<int>827</int>
|
||||
</object>
|
||||
</void>
|
||||
<void property="parent">
|
||||
@@ -423,10 +423,10 @@
|
||||
<object id="MultiSplitLayout$Split3" class="org.jdesktop.swingx.MultiSplitLayout$Split">
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>746</int>
|
||||
<int>1168</int>
|
||||
<int>0</int>
|
||||
<int>272</int>
|
||||
<int>693</int>
|
||||
<int>827</int>
|
||||
</object>
|
||||
</void>
|
||||
<void id="ArrayList3" property="children">
|
||||
@@ -434,10 +434,10 @@
|
||||
<object class="org.jdesktop.swingx.MultiSplitLayout$Leaf">
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>746</int>
|
||||
<int>1168</int>
|
||||
<int>0</int>
|
||||
<int>272</int>
|
||||
<int>357</int>
|
||||
<int>424</int>
|
||||
</object>
|
||||
</void>
|
||||
<void property="name">
|
||||
@@ -455,8 +455,8 @@
|
||||
<object class="org.jdesktop.swingx.MultiSplitLayout$Divider">
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>746</int>
|
||||
<int>357</int>
|
||||
<int>1168</int>
|
||||
<int>424</int>
|
||||
<int>272</int>
|
||||
<int>10</int>
|
||||
</object>
|
||||
@@ -470,10 +470,10 @@
|
||||
<object class="org.jdesktop.swingx.MultiSplitLayout$Leaf">
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>746</int>
|
||||
<int>367</int>
|
||||
<int>1168</int>
|
||||
<int>434</int>
|
||||
<int>272</int>
|
||||
<int>326</int>
|
||||
<int>393</int>
|
||||
</object>
|
||||
</void>
|
||||
<void property="name">
|
||||
|
||||
@@ -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,9 +8934,10 @@ 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()
|
||||
|
||||
public boolean canPlayAI()
|
||||
@@ -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)
|
||||
{
|
||||
@@ -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)) ;
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
@@ -15593,6 +15593,56 @@ public class CardFactory_Creatures {
|
||||
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
|
||||
// -1 means keyword "Cycling" not found
|
||||
|
||||
@@ -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***
|
||||
|
||||
Reference in New Issue
Block a user