- Fixed Rebel/Merc fetch, can only get permanents now.

- Added the rest of the Harbingers.
- Added Meekstone and Qasali Pridemage.
This commit is contained in:
jendave
2011-08-06 02:50:22 +00:00
parent de91918e51
commit 9ba9b33126
7 changed files with 348 additions and 45 deletions

View File

@@ -1,3 +1,35 @@
Qasali Pridemage
G W
Creature Cat Wizard
no text
2/2
Exalted
Meekstone
1
Artifact
Creatures with power 3 or greater don't untap during their controllers' untap steps.
Giant Harbinger
4 R
Creature Giant
When Giant Harbinger enters the battlefield, you may search your library for a Giant card, reveal it, then shuffle your library and put that card on top of it.
3/4
Flamekin Harbinger
R
Creature Elemental Shaman
When Flamekin Harbinger enters the battlefield, you may search your library for an Elemental card, reveal it, then shuffle your library and put that card on top of it.
1/1
Faerie Harbinger
3 U
Creature Faerie Wizard
When Faerie Harbinger enters the battlefield, you may search your library for a Faerie card, reveal it, then shuffle your library and put that card on top of it.
2/2
Flying
Flash
Sword of the Meek Sword of the Meek
2 2
Artifact Equipment Artifact Equipment

View File

@@ -16,7 +16,7 @@
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>0</int> <int>0</int>
<int>242</int> <int>244</int>
<int>827</int> <int>827</int>
</object> </object>
</void> </void>
@@ -27,8 +27,8 @@
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>0</int> <int>0</int>
<int>242</int> <int>244</int>
<int>145</int> <int>144</int>
</object> </object>
</void> </void>
<void property="name"> <void property="name">
@@ -47,8 +47,8 @@
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>145</int> <int>144</int>
<int>242</int> <int>244</int>
<int>10</int> <int>10</int>
</object> </object>
</void> </void>
@@ -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>155</int> <int>154</int>
<int>242</int> <int>244</int>
<int>174</int> <int>175</int>
</object> </object>
</void> </void>
<void property="name"> <void property="name">
@@ -84,7 +84,7 @@
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>329</int> <int>329</int>
<int>242</int> <int>244</int>
<int>10</int> <int>10</int>
</object> </object>
</void> </void>
@@ -99,7 +99,7 @@
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>339</int> <int>339</int>
<int>242</int> <int>244</int>
<int>115</int> <int>115</int>
</object> </object>
</void> </void>
@@ -120,7 +120,7 @@
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>454</int> <int>454</int>
<int>242</int> <int>244</int>
<int>10</int> <int>10</int>
</object> </object>
</void> </void>
@@ -135,7 +135,7 @@
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>464</int> <int>464</int>
<int>242</int> <int>244</int>
<int>107</int> <int>107</int>
</object> </object>
</void> </void>
@@ -156,7 +156,7 @@
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>571</int> <int>571</int>
<int>242</int> <int>244</int>
<int>10</int> <int>10</int>
</object> </object>
</void> </void>
@@ -171,7 +171,7 @@
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>581</int> <int>581</int>
<int>242</int> <int>244</int>
<int>246</int> <int>246</int>
</object> </object>
</void> </void>
@@ -202,7 +202,7 @@
<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>242</int> <int>244</int>
<int>0</int> <int>0</int>
<int>10</int> <int>10</int>
<int>827</int> <int>827</int>
@@ -217,9 +217,9 @@
<object id="MultiSplitLayout$Split2" class="org.jdesktop.swingx.MultiSplitLayout$Split"> <object id="MultiSplitLayout$Split2" class="org.jdesktop.swingx.MultiSplitLayout$Split">
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>252</int> <int>254</int>
<int>0</int> <int>0</int>
<int>911</int> <int>909</int>
<int>827</int> <int>827</int>
</object> </object>
</void> </void>
@@ -228,9 +228,9 @@
<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>252</int> <int>254</int>
<int>0</int> <int>0</int>
<int>911</int> <int>909</int>
<int>163</int> <int>163</int>
</object> </object>
</void> </void>
@@ -249,9 +249,9 @@
<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>252</int> <int>254</int>
<int>163</int> <int>163</int>
<int>911</int> <int>909</int>
<int>10</int> <int>10</int>
</object> </object>
</void> </void>
@@ -264,9 +264,9 @@
<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>252</int> <int>254</int>
<int>173</int> <int>173</int>
<int>911</int> <int>909</int>
<int>166</int> <int>166</int>
</object> </object>
</void> </void>
@@ -285,9 +285,9 @@
<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>252</int> <int>254</int>
<int>339</int> <int>339</int>
<int>911</int> <int>909</int>
<int>10</int> <int>10</int>
</object> </object>
</void> </void>
@@ -300,10 +300,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>252</int> <int>254</int>
<int>349</int> <int>349</int>
<int>911</int> <int>909</int>
<int>140</int> <int>142</int>
</object> </object>
</void> </void>
<void property="name"> <void property="name">
@@ -321,9 +321,9 @@
<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>252</int> <int>254</int>
<int>489</int> <int>491</int>
<int>911</int> <int>909</int>
<int>10</int> <int>10</int>
</object> </object>
</void> </void>
@@ -336,10 +336,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>252</int> <int>254</int>
<int>499</int> <int>501</int>
<int>911</int> <int>909</int>
<int>150</int> <int>148</int>
</object> </object>
</void> </void>
<void property="name"> <void property="name">
@@ -357,9 +357,9 @@
<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>252</int> <int>254</int>
<int>649</int> <int>649</int>
<int>911</int> <int>909</int>
<int>10</int> <int>10</int>
</object> </object>
</void> </void>
@@ -372,9 +372,9 @@
<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>252</int> <int>254</int>
<int>659</int> <int>659</int>
<int>911</int> <int>909</int>
<int>168</int> <int>168</int>
</object> </object>
</void> </void>

View File

@@ -1,6 +1,6 @@
program/mail=mtgerror@yahoo.com program/mail=mtgerror@yahoo.com
program/forum=http://www.slightlymagic.net/forum/viewforum.php?f=26 program/forum=http://www.slightlymagic.net/forum/viewforum.php?f=26
program/version=MTG Forge -- official beta: 09/11/02, SVN revision: 95 program/version=MTG Forge -- official beta: 09/11/02, SVN revision: 96
tokens--file=AllTokens.txt tokens--file=AllTokens.txt

View File

@@ -973,7 +973,13 @@ public class CardFactoryUtil
PlayerZone lib = AllZone.getZone(Constant.Zone.Library, sourceCard.getController()); PlayerZone lib = AllZone.getZone(Constant.Zone.Library, sourceCard.getController());
CardList mercs = new CardList(); CardList mercs = new CardList();
CardList list = new CardList(lib.getCards()); CardList list = new CardList(lib.getCards());
list = list.getType("Mercenary"); list = list.filter(new CardListFilter()
{
public boolean addCard(Card c) {
return (c.getType().contains("Mercenary") || c.getKeyword().contains("Changeling")) && c.isPermanent() ;
}
});
if (list.size()==0) if (list.size()==0)
return false; return false;
@@ -1071,7 +1077,12 @@ public class CardFactoryUtil
CardList rebels = new CardList(); CardList rebels = new CardList();
CardList list = new CardList(lib.getCards()); CardList list = new CardList(lib.getCards());
list = list.getType("Rebel"); list = list.filter(new CardListFilter()
{
public boolean addCard(Card c) {
return (c.getType().contains("Rebel") || c.getKeyword().contains("Changeling")) && c.isPermanent() ;
}
});
if (list.size()==0) if (list.size()==0)
return false; return false;

View File

@@ -16333,6 +16333,258 @@ public class CardFactory_Creatures {
card.addComesIntoPlayCommand(intoPlay); card.addComesIntoPlayCommand(intoPlay);
}//*************** END ************ END ************************** }//*************** END ************ END **************************
//*************** START *********** START **************************
else if(cardName.equals("Faerie Harbinger"))
{
final SpellAbility ability = new Ability(card, "0")
{
public void resolve()
{
PlayerZone lib = AllZone.getZone(Constant.Zone.Library, card.getController());
if(AllZone.GameAction.isCardInZone(getTargetCard(), lib))
{
Card c = getTargetCard();
AllZone.GameAction.shuffle(card.getController());
lib.remove(c);
lib.add(c, 0);
}
}//resolve()
};
Command intoPlay = new Command()
{
private static final long serialVersionUID = -708639335039567945L;
public void execute()
{
PlayerZone lib = AllZone.getZone(Constant.Zone.Library, card.getController());
CardList cards = new CardList(lib.getCards());
CardList faeries = new CardList();
for (int i=0;i<cards.size();i++)
{
if(cards.get(i).getType().contains("Faerie") || cards.get(i).getKeyword().contains("Changeling"))
{
faeries.add(cards.get(i));
}
}
String controller = card.getController();
if(faeries.size() == 0)
return;
if(controller.equals(Constant.Player.Human))
{
Object o = AllZone.Display.getChoiceOptional("Select target card", faeries.toArray());
if(o != null)
{
ability.setTargetCard((Card)o);
AllZone.Stack.add(ability);
}
}
else //computer
{
faeries.shuffle();
ability.setTargetCard(faeries.get(0));
AllZone.Stack.add(ability);
}
}//execute()
};//Command
card.addComesIntoPlayCommand(intoPlay);
}//*************** END ************ END **************************
//*************** START *********** START **************************
else if(cardName.equals("Flamekin Harbinger"))
{
final SpellAbility ability = new Ability(card, "0")
{
public void resolve()
{
PlayerZone lib = AllZone.getZone(Constant.Zone.Library, card.getController());
if(AllZone.GameAction.isCardInZone(getTargetCard(), lib))
{
Card c = getTargetCard();
AllZone.GameAction.shuffle(card.getController());
lib.remove(c);
lib.add(c, 0);
}
}//resolve()
};
Command intoPlay = new Command()
{
private static final long serialVersionUID = 7114265436722599216L;
public void execute()
{
PlayerZone lib = AllZone.getZone(Constant.Zone.Library, card.getController());
CardList cards = new CardList(lib.getCards());
CardList ele = new CardList();
for (int i=0;i<cards.size();i++)
{
if(cards.get(i).getType().contains("Elemental") || cards.get(i).getKeyword().contains("Changeling"))
{
ele.add(cards.get(i));
}
}
String controller = card.getController();
if(ele.size() == 0)
return;
if(controller.equals(Constant.Player.Human))
{
Object o = AllZone.Display.getChoiceOptional("Select target card", ele.toArray());
if(o != null)
{
ability.setTargetCard((Card)o);
AllZone.Stack.add(ability);
}
}
else //computer
{
ele.shuffle();
ability.setTargetCard(ele.get(0));
AllZone.Stack.add(ability);
}
}//execute()
};//Command
card.addComesIntoPlayCommand(intoPlay);
}//*************** END ************ END **************************
//*************** START *********** START **************************
else if(cardName.equals("Giant Harbinger"))
{
final SpellAbility ability = new Ability(card, "0")
{
public void resolve()
{
PlayerZone lib = AllZone.getZone(Constant.Zone.Library, card.getController());
if(AllZone.GameAction.isCardInZone(getTargetCard(), lib))
{
Card c = getTargetCard();
AllZone.GameAction.shuffle(card.getController());
lib.remove(c);
lib.add(c, 0);
}
}//resolve()
};
Command intoPlay = new Command()
{
private static final long serialVersionUID = -2671592749882297551L;
public void execute()
{
PlayerZone lib = AllZone.getZone(Constant.Zone.Library, card.getController());
CardList cards = new CardList(lib.getCards());
CardList giants = new CardList();
for (int i=0;i<cards.size();i++)
{
if(cards.get(i).getType().contains("Giant") || cards.get(i).getKeyword().contains("Changeling"))
{
giants.add(cards.get(i));
}
}
String controller = card.getController();
if(giants.size() == 0)
return;
if(controller.equals(Constant.Player.Human))
{
Object o = AllZone.Display.getChoiceOptional("Select target card", giants.toArray());
if(o != null)
{
ability.setTargetCard((Card)o);
AllZone.Stack.add(ability);
}
}
else //computer
{
giants.shuffle();
ability.setTargetCard(giants.get(0));
AllZone.Stack.add(ability);
}
}//execute()
};//Command
card.addComesIntoPlayCommand(intoPlay);
}//*************** END ************ END **************************
//*************** START *********** START **************************
else if (cardName.equals("Qasali Pridemage"))
{
final Ability ability = new Ability(card, "1")
{
public void resolve() {
if (AllZone.GameAction.isCardInPlay(card))
AllZone.GameAction.sacrifice(card);
Card c = getTargetCard();
AllZone.GameAction.destroy(c);
}
public boolean canPlayAI()
{
PlayerZone hPlay = AllZone.getZone(Constant.Zone.Play, Constant.Player.Human);
CardList list = new CardList();
list.addAll(hPlay.getCards());
list = list.filter(new CardListFilter()
{
public boolean addCard(Card c) {
return c.isArtifact() || c.isEnchantment() && CardUtil.getConvertedManaCost(c.getManaCost()) >= 4;
}
});
if (list.size() > 0)
{
list.shuffle();
setTargetCard(list.get(0));
}
return list.size() > 0;
}
};
ability.setDescription("1, Sacrifice Qasali Pridemage: Destroy target artifact or enchantment.");
ability.setBeforePayMana(new Input()
{
private static final long serialVersionUID = -3565024591921095303L;
public void showMessage()
{
PlayerZone hPlay = AllZone.getZone(Constant.Zone.Play, Constant.Player.Human);
PlayerZone cPlay = AllZone.getZone(Constant.Zone.Play, Constant.Player.Computer);
CardList list = new CardList();
list.addAll(hPlay.getCards());
list.addAll(cPlay.getCards());
list = list.filter(new CardListFilter()
{
public boolean addCard(Card c) {
return c.isArtifact() || c.isEnchantment();
}
});
stopSetNext(CardFactoryUtil.input_targetSpecific(ability, list, "Select an Artifact or Enchantment", true));
}
});
card.addSpellAbility(ability);
}//*************** END ************ END **************************
// Cards with Cycling abilities // Cards with Cycling abilities
// -1 means keyword "Cycling" not found // -1 means keyword "Cycling" not found

View File

@@ -34,13 +34,19 @@ public class Input_Untap extends Input
if(c[i].getNetAttack() < 3) if(c[i].getNetAttack() < 3)
c[i].untap(); c[i].untap();
} }
private boolean isMarbleTitanInPlay() private boolean isMarbleTitanInPlay() //or Meekstone
{ {
CardList all = new CardList(); CardList all = new CardList();
all.addAll(AllZone.Human_Play.getCards()); all.addAll(AllZone.Human_Play.getCards());
all.addAll(AllZone.Computer_Play.getCards()); all.addAll(AllZone.Computer_Play.getCards());
all = all.getName("Marble Titan"); all = all.filter(new CardListFilter()
{
public boolean addCard(Card c) {
return c.getName().equals("Meekstone") || c.getName().equals("Marble Titan");
}
});
return all.size() > 0; return all.size() > 0;
} }
private void regularUntap() private void regularUntap()

View File

@@ -112,6 +112,8 @@ public class PlayerZone_ComesIntoPlay extends DefaultPlayerZone
PlayerZone play = AllZone.getZone(Constant.Zone.Play, c.getController()); PlayerZone play = AllZone.getZone(Constant.Zone.Play, c.getController());
CardList meek = new CardList(grave.getCards()); CardList meek = new CardList(grave.getCards());
meek = meek.getName("Sword of the Meek");
if (meek.size() > 0 && c.isCreature() && c.getNetAttack() == 1 && c.getNetDefense() == 1) if (meek.size() > 0 && c.isCreature() && c.getNetAttack() == 1 && c.getNetDefense() == 1)
{ {
for (int i=0;i<meek.size();i++) for (int i=0;i<meek.size();i++)