mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 12:48:00 +00:00
- Fixed Loxodon Hierarch.
- Added Kaervek's Spite and Academy Rector (to complete the Barren Glory combo).
This commit is contained in:
@@ -1,3 +1,14 @@
|
||||
Academy Rector
|
||||
3 W
|
||||
Creature Human Cleric
|
||||
When Academy Rector is put into a graveyard from the battlefield, you may exile it. If you do, search your library for an enchantment card and put that card onto the battlefield. Then shuffle your library.
|
||||
1/2
|
||||
|
||||
Kaervek's Spite
|
||||
B B B
|
||||
Instant
|
||||
As an additional cost to cast Kaervek's Spite, sacrifice all permanents you control and discard your hand. Target player loses 5 life.
|
||||
|
||||
Sea Monster
|
||||
4 U U
|
||||
Creature Serpent
|
||||
|
||||
@@ -219,7 +219,7 @@
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>252</int>
|
||||
<int>0</int>
|
||||
<int>926</int>
|
||||
<int>911</int>
|
||||
<int>827</int>
|
||||
</object>
|
||||
</void>
|
||||
@@ -230,7 +230,7 @@
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>252</int>
|
||||
<int>0</int>
|
||||
<int>926</int>
|
||||
<int>911</int>
|
||||
<int>163</int>
|
||||
</object>
|
||||
</void>
|
||||
@@ -251,7 +251,7 @@
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>252</int>
|
||||
<int>163</int>
|
||||
<int>926</int>
|
||||
<int>911</int>
|
||||
<int>10</int>
|
||||
</object>
|
||||
</void>
|
||||
@@ -266,7 +266,7 @@
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>252</int>
|
||||
<int>173</int>
|
||||
<int>926</int>
|
||||
<int>911</int>
|
||||
<int>166</int>
|
||||
</object>
|
||||
</void>
|
||||
@@ -287,7 +287,7 @@
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>252</int>
|
||||
<int>339</int>
|
||||
<int>926</int>
|
||||
<int>911</int>
|
||||
<int>10</int>
|
||||
</object>
|
||||
</void>
|
||||
@@ -302,7 +302,7 @@
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>252</int>
|
||||
<int>349</int>
|
||||
<int>926</int>
|
||||
<int>911</int>
|
||||
<int>140</int>
|
||||
</object>
|
||||
</void>
|
||||
@@ -323,7 +323,7 @@
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>252</int>
|
||||
<int>489</int>
|
||||
<int>926</int>
|
||||
<int>911</int>
|
||||
<int>10</int>
|
||||
</object>
|
||||
</void>
|
||||
@@ -338,7 +338,7 @@
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>252</int>
|
||||
<int>499</int>
|
||||
<int>926</int>
|
||||
<int>911</int>
|
||||
<int>150</int>
|
||||
</object>
|
||||
</void>
|
||||
@@ -359,7 +359,7 @@
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>252</int>
|
||||
<int>649</int>
|
||||
<int>926</int>
|
||||
<int>911</int>
|
||||
<int>10</int>
|
||||
</object>
|
||||
</void>
|
||||
@@ -374,7 +374,7 @@
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>252</int>
|
||||
<int>659</int>
|
||||
<int>926</int>
|
||||
<int>911</int>
|
||||
<int>168</int>
|
||||
</object>
|
||||
</void>
|
||||
@@ -408,7 +408,7 @@
|
||||
<object class="org.jdesktop.swingx.MultiSplitLayout$Divider">
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>1178</int>
|
||||
<int>1163</int>
|
||||
<int>0</int>
|
||||
<int>10</int>
|
||||
<int>827</int>
|
||||
@@ -423,9 +423,9 @@
|
||||
<object id="MultiSplitLayout$Split3" class="org.jdesktop.swingx.MultiSplitLayout$Split">
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>1188</int>
|
||||
<int>1173</int>
|
||||
<int>0</int>
|
||||
<int>252</int>
|
||||
<int>267</int>
|
||||
<int>827</int>
|
||||
</object>
|
||||
</void>
|
||||
@@ -434,9 +434,9 @@
|
||||
<object class="org.jdesktop.swingx.MultiSplitLayout$Leaf">
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>1188</int>
|
||||
<int>1173</int>
|
||||
<int>0</int>
|
||||
<int>252</int>
|
||||
<int>267</int>
|
||||
<int>424</int>
|
||||
</object>
|
||||
</void>
|
||||
@@ -455,9 +455,9 @@
|
||||
<object class="org.jdesktop.swingx.MultiSplitLayout$Divider">
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>1188</int>
|
||||
<int>1173</int>
|
||||
<int>424</int>
|
||||
<int>252</int>
|
||||
<int>267</int>
|
||||
<int>10</int>
|
||||
</object>
|
||||
</void>
|
||||
@@ -470,9 +470,9 @@
|
||||
<object class="org.jdesktop.swingx.MultiSplitLayout$Leaf">
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>1188</int>
|
||||
<int>1173</int>
|
||||
<int>434</int>
|
||||
<int>252</int>
|
||||
<int>267</int>
|
||||
<int>393</int>
|
||||
</object>
|
||||
</void>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
program/mail=mtgerror@yahoo.com
|
||||
program/forum=http://www.slightlymagic.net/forum/viewforum.php?f=26
|
||||
program/version=MTG Forge -- official beta: 09/11/02, SVN revision: 89
|
||||
program/version=MTG Forge -- official beta: 09/11/02, SVN revision: 90
|
||||
|
||||
tokens--file=AllTokens.txt
|
||||
|
||||
|
||||
@@ -16878,6 +16878,87 @@ return land.size() > 1 && CardFactoryUtil.AI_isMainPhase();
|
||||
}//*************** END ************ END **************************
|
||||
|
||||
|
||||
//*************** START *********** START **************************
|
||||
else if(cardName.equals("Kaervek's Spite"))
|
||||
{
|
||||
final SpellAbility spell = new Spell(card)
|
||||
{
|
||||
private static final long serialVersionUID = -6259614160639535500L;
|
||||
|
||||
public boolean canPlayAI()
|
||||
{
|
||||
if(AllZone.Human_Life.getLife() <= 5)
|
||||
return true;
|
||||
PlayerZone play = AllZone.getZone(Constant.Zone.Play, Constant.Player.Computer);
|
||||
PlayerZone lib = AllZone.getZone(Constant.Zone.Library, Constant.Player.Computer);
|
||||
|
||||
CardList playList = new CardList(play.getCards());
|
||||
CardList libList = new CardList(lib.getCards());
|
||||
|
||||
playList = playList.getName("Academy Rector");
|
||||
libList = libList.getName("Barren Glory");
|
||||
|
||||
return (AllZone.Human_Life.getLife() <= 5) || (playList.size() == 1 && libList.size() >= 1);
|
||||
}
|
||||
|
||||
public void resolve()
|
||||
{
|
||||
PlayerZone play = AllZone.getZone(Constant.Zone.Play, card.getController());
|
||||
PlayerZone hand = AllZone.getZone(Constant.Zone.Play, card.getController());
|
||||
CardList list = new CardList(play.getCards());
|
||||
list = list.filter(new CardListFilter()
|
||||
{
|
||||
public boolean addCard(Card c) {
|
||||
return !c.getName().equals("Mana Pool");
|
||||
}
|
||||
});
|
||||
CardList handList = new CardList(hand.getCards());
|
||||
|
||||
for (Card c : list)
|
||||
{
|
||||
AllZone.GameAction.sacrifice(c);
|
||||
}
|
||||
AllZone.GameAction.discardRandom(card.getController(), handList.size());
|
||||
|
||||
PlayerLife life = AllZone.GameAction.getPlayerLife(getTargetPlayer());
|
||||
life.subtractLife(5);
|
||||
}
|
||||
};
|
||||
spell.setChooseTargetAI(CardFactoryUtil.AI_targetHuman());
|
||||
card.clearSpellAbility();
|
||||
card.addSpellAbility(spell);
|
||||
|
||||
/*
|
||||
final Command sac = new Command(){
|
||||
private static final long serialVersionUID = 1643946454479782123L;
|
||||
|
||||
public void execute() {
|
||||
PlayerZone play = AllZone.getZone(Constant.Zone.Play, card.getController());
|
||||
PlayerZone hand = AllZone.getZone(Constant.Zone.Play, card.getController());
|
||||
CardList list = new CardList(play.getCards());
|
||||
list = list.filter(new CardListFilter()
|
||||
{
|
||||
public boolean addCard(Card c) {
|
||||
return !c.getName().equals("Mana Pool");
|
||||
}
|
||||
});
|
||||
CardList handList = new CardList(hand.getCards());
|
||||
|
||||
for (Card c : list)
|
||||
{
|
||||
AllZone.GameAction.sacrifice(c);
|
||||
}
|
||||
AllZone.GameAction.discardRandom(card.getController(), handList.size());
|
||||
}
|
||||
|
||||
};
|
||||
*/
|
||||
|
||||
spell.setBeforePayMana(CardFactoryUtil.input_targetPlayer(spell));
|
||||
}//*************** END ************ END **************************
|
||||
|
||||
|
||||
|
||||
// Cards with Cycling abilities
|
||||
// -1 means keyword "Cycling" not found
|
||||
if (hasKeyword(card, "Cycling") != -1)
|
||||
|
||||
@@ -1445,6 +1445,35 @@ public class CardFactoryUtil
|
||||
return target;
|
||||
}//input_targetPlayer()
|
||||
|
||||
public static Input input_targetPlayer(final SpellAbility spell, final Command command)
|
||||
{
|
||||
Input target = new Input()
|
||||
{
|
||||
private static final long serialVersionUID = 8736682807625129068L;
|
||||
|
||||
public void showMessage()
|
||||
{
|
||||
AllZone.Display.showMessage("Select target player");
|
||||
ButtonUtil.enableOnlyCancel();
|
||||
}
|
||||
public void selectButtonCancel() {stop();}
|
||||
public void selectPlayer(String player)
|
||||
{
|
||||
command.execute();
|
||||
|
||||
spell.setTargetPlayer(player);
|
||||
if(spell.getManaCost().equals("0"))
|
||||
{
|
||||
AllZone.Stack.add(spell);
|
||||
stop();
|
||||
}
|
||||
else
|
||||
stopSetNext(new Input_PayManaCost(spell));
|
||||
}
|
||||
};
|
||||
return target;
|
||||
}//input_targetPlayer()
|
||||
|
||||
public static CardList AI_getHumanCreature(final Card spell, boolean targeted)
|
||||
{
|
||||
CardList creature = new CardList(AllZone.Human_Play.getCards());
|
||||
|
||||
@@ -1420,7 +1420,7 @@ public class CardFactory_Creatures {
|
||||
}//*************** END ************ END **************************
|
||||
|
||||
//*************** START *********** START **************************
|
||||
else if(cardName.equals("Loxodon Hierarch"))
|
||||
if(cardName.equals("Loxodon Hierarch"))
|
||||
{
|
||||
final Ability ability = new Ability(card, "G W")
|
||||
{
|
||||
@@ -16086,6 +16086,74 @@ public class CardFactory_Creatures {
|
||||
|
||||
}//*************** END ************ END **************************
|
||||
|
||||
else if (cardName.equals("Academy Rector"))
|
||||
{
|
||||
final Command destroy = new Command()
|
||||
{
|
||||
private static final long serialVersionUID = -4352349741511065318L;
|
||||
|
||||
public void execute() {
|
||||
if (card.getController().equals("Human"))
|
||||
{
|
||||
String[] choices = { "Yes", "No" };
|
||||
Object q = null;
|
||||
|
||||
q = AllZone.Display.getChoiceOptional("Exile " + card.getName() + "?", choices);
|
||||
|
||||
if (q == null || q.equals("No"))
|
||||
;
|
||||
else
|
||||
{
|
||||
PlayerZone lib = AllZone.getZone(Constant.Zone.Library, Constant.Player.Human);
|
||||
CardList list = new CardList(lib.getCards());
|
||||
list = list.filter(new CardListFilter()
|
||||
{
|
||||
public boolean addCard(Card c) {
|
||||
return c.isEnchantment();
|
||||
}
|
||||
});
|
||||
|
||||
if (list.size() > 0)
|
||||
{
|
||||
Object o = AllZone.Display.getChoiceOptional("Choose enchantment card to put onto the battlefield", list.toArray());
|
||||
if (o != null)
|
||||
{
|
||||
PlayerZone play = AllZone.getZone(Constant.Zone.Play, Constant.Player.Human);
|
||||
Card c = (Card)o;
|
||||
lib.remove(c);
|
||||
play.add(c);
|
||||
}
|
||||
}
|
||||
AllZone.GameAction.removeFromGame(card);
|
||||
}
|
||||
}//if human
|
||||
else
|
||||
{
|
||||
PlayerZone lib = AllZone.getZone(Constant.Zone.Library, Constant.Player.Computer);
|
||||
CardList list = new CardList(lib.getCards());
|
||||
list = list.filter(new CardListFilter()
|
||||
{
|
||||
public boolean addCard(Card c) {
|
||||
return c.isEnchantment() && !c.isAura();
|
||||
}
|
||||
});
|
||||
|
||||
if (list.size() > 0)
|
||||
{
|
||||
PlayerZone play = AllZone.getZone(Constant.Zone.Play, Constant.Player.Computer);
|
||||
Card c = CardFactoryUtil.AI_getBestEnchantment(list, card, false);
|
||||
lib.remove(c);
|
||||
play.add(c);
|
||||
AllZone.GameAction.removeFromGame(card);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
card.addDestroyCommand(destroy);
|
||||
}
|
||||
|
||||
|
||||
// Cards with Cycling abilities
|
||||
// -1 means keyword "Cycling" not found
|
||||
|
||||
@@ -3951,6 +3951,12 @@ public class GameActionUtil
|
||||
|
||||
CardList list = new CardList(playZone.getCards());
|
||||
CardList playList = new CardList(playZone.getCards());
|
||||
playList = playList.filter(new CardListFilter()
|
||||
{
|
||||
public boolean addCard(Card c) {
|
||||
return !c.getName().equals("Mana Pool");
|
||||
}
|
||||
});
|
||||
|
||||
list = list.getName("Barren Glory");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user