mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
Corrected Mind Funeral. Addad Dovescake and Lurking Informant.
This commit is contained in:
@@ -18,6 +18,8 @@ forest.jpg http://resources.wizards.com/magic/cards/unh/en-us/card73946.jpg
|
|||||||
forest1.jpg http://gatherer.wizards.com/handlers/image.ashx?type=card&multiverseid=2748
|
forest1.jpg http://gatherer.wizards.com/handlers/image.ashx?type=card&multiverseid=2748
|
||||||
forest2.jpg http://gatherer.wizards.com/handlers/image.ashx?type=card&multiverseid=587
|
forest2.jpg http://gatherer.wizards.com/handlers/image.ashx?type=card&multiverseid=587
|
||||||
forest3.jpg http://gatherer.wizards.com/handlers/image.ashx?type=card&multiverseid=586
|
forest3.jpg http://gatherer.wizards.com/handlers/image.ashx?type=card&multiverseid=586
|
||||||
|
dovescape.jpg http://www.wizards.com/global/images/magic/general/dovescape.jpg
|
||||||
|
lurking_informant.jpg http://www.wizards.com/global/images/magic/general/lurking_informant.jpg
|
||||||
Belligerent_Hatchling.jpg http://www.wizards.com/global/images/magic/general/Belligerent_Hatchling.jpg
|
Belligerent_Hatchling.jpg http://www.wizards.com/global/images/magic/general/Belligerent_Hatchling.jpg
|
||||||
Noxious_Hatchling.jpg http://www.wizards.com/global/images/magic/general/Noxious_Hatchling.jpg
|
Noxious_Hatchling.jpg http://www.wizards.com/global/images/magic/general/Noxious_Hatchling.jpg
|
||||||
Sturdy_Hatchling.jpg http://www.wizards.com/global/images/magic/general/Sturdy_Hatchling.jpg
|
Sturdy_Hatchling.jpg http://www.wizards.com/global/images/magic/general/Sturdy_Hatchling.jpg
|
||||||
|
|||||||
@@ -1,3 +1,14 @@
|
|||||||
|
Dovescape
|
||||||
|
3 WU WU WU
|
||||||
|
Enchantment
|
||||||
|
Whenever a player casts a noncreature spell, counter that spell. That player puts X 1/1 white and blue Bird creature tokens with flying onto the battlefield, where X is the spell<6C>s converted mana cost.
|
||||||
|
|
||||||
|
Lurking Informant
|
||||||
|
1 UB
|
||||||
|
Creature Human Rogue
|
||||||
|
no text
|
||||||
|
1/2
|
||||||
|
|
||||||
Belligerent Hatchling
|
Belligerent Hatchling
|
||||||
3 RW
|
3 RW
|
||||||
Creature Elemental
|
Creature Elemental
|
||||||
|
|||||||
@@ -17452,20 +17452,18 @@ return land.size() > 1 && CardFactoryUtil.AI_isMainPhase();
|
|||||||
int prev = 0 ;
|
int prev = 0 ;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
int total =0;
|
int total =0;
|
||||||
int once = 0;
|
|
||||||
|
|
||||||
for (int i=0;i<max;i++)
|
for (int i=0;i<max;i++)
|
||||||
{
|
{
|
||||||
Card c = libList.get(i);
|
Card c = libList.get(i);
|
||||||
if (c.getType().contains("Land"))
|
if (c.getType().contains("Land"))
|
||||||
{
|
{
|
||||||
if (prev == 1) count= count + 1;
|
count= count + 1;
|
||||||
else count = 1;
|
if (count == 4 && prev==0) total=i;
|
||||||
prev=1;
|
if (count == 4) prev=1;
|
||||||
|
|
||||||
}
|
}
|
||||||
else prev=0;
|
|
||||||
if (count == 4) once = once +1;
|
|
||||||
if (once == 1 && count == 4) total=i;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i=0;i<total+1;i++)
|
for (int i=0;i<total+1;i++)
|
||||||
|
|||||||
@@ -16,30 +16,7 @@ public class CardFactory_Creatures {
|
|||||||
|
|
||||||
public static Card getCard(final Card card, String cardName, String owner, CardFactory cf)
|
public static Card getCard(final Card card, String cardName, String owner, CardFactory cf)
|
||||||
{
|
{
|
||||||
//*************** START *********** START **************************
|
|
||||||
else if(cardName.equals("Belligerent Hatchling") || cardName.equals("Noxious Hatchling")
|
|
||||||
||cardName.equals("Shrewd Hatchling") ||cardName.equals("Sturdy Hatchling")
|
|
||||||
|| cardName.equals("Voracious Hatchling"))
|
|
||||||
{
|
|
||||||
final SpellAbility ability = new Ability(card, "0")
|
|
||||||
{
|
|
||||||
public void resolve()
|
|
||||||
{
|
|
||||||
card.addCounter(Counters.M1M1, 4);
|
|
||||||
}//resolve()
|
|
||||||
};//SpellAbility
|
|
||||||
Command intoPlay = new Command()
|
|
||||||
{
|
|
||||||
private static final long serialVersionUID = 4757054648163014149L;
|
|
||||||
|
|
||||||
public void execute()
|
|
||||||
{
|
|
||||||
AllZone.Stack.add(ability);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
ability.setStackDescription(cardName + "enters the battlefield with four -1/-1 counters on it.");
|
|
||||||
card.addComesIntoPlayCommand(intoPlay);
|
|
||||||
}//*************** END ************ END **************************
|
|
||||||
|
|
||||||
//*************** START *********** START **************************
|
//*************** START *********** START **************************
|
||||||
if(cardName.equals("Filthy Cur"))
|
if(cardName.equals("Filthy Cur"))
|
||||||
@@ -77,7 +54,96 @@ public class CardFactory_Creatures {
|
|||||||
return newCard;
|
return newCard;
|
||||||
}//*************** END ************ END **************************
|
}//*************** END ************ END **************************
|
||||||
|
|
||||||
|
//*************** START *********** START **************************
|
||||||
|
else if(cardName.equals("Belligerent Hatchling") || cardName.equals("Noxious Hatchling")
|
||||||
|
||cardName.equals("Shrewd Hatchling") ||cardName.equals("Sturdy Hatchling")
|
||||||
|
|| cardName.equals("Voracious Hatchling"))
|
||||||
|
{
|
||||||
|
final SpellAbility ability = new Ability(card, "0")
|
||||||
|
{
|
||||||
|
public void resolve()
|
||||||
|
{
|
||||||
|
card.addCounter(Counters.M1M1, 4);
|
||||||
|
}//resolve()
|
||||||
|
};//SpellAbility
|
||||||
|
Command intoPlay = new Command()
|
||||||
|
{
|
||||||
|
private static final long serialVersionUID = 4757054648163014149L;
|
||||||
|
|
||||||
|
public void execute()
|
||||||
|
{
|
||||||
|
AllZone.Stack.add(ability);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
ability.setStackDescription(cardName + "enters the battlefield with four -1/-1 counters on it.");
|
||||||
|
card.addComesIntoPlayCommand(intoPlay);
|
||||||
|
}//*************** END ************ END **************************
|
||||||
|
|
||||||
|
//*************** START *********** START **************************
|
||||||
|
else if(cardName.equals("Lurking Informant"))
|
||||||
|
{
|
||||||
|
final SpellAbility a1 = new Ability_Tap(card, "2")
|
||||||
|
{
|
||||||
|
private static final long serialVersionUID = 1446529067071763245L;
|
||||||
|
public void resolve()
|
||||||
|
{
|
||||||
|
String player = getTargetPlayer();
|
||||||
|
|
||||||
|
PlayerZone lib = AllZone.getZone(Constant.Zone.Library, player);
|
||||||
|
PlayerZone grave = AllZone.getZone(Constant.Zone.Graveyard, player);
|
||||||
|
CardList libList = new CardList(lib.getCards());
|
||||||
|
Card c = libList.get(0);
|
||||||
|
String[] choices = {"Yes", "No"};
|
||||||
|
if(card.getController().equals(Constant.Player.Human))
|
||||||
|
{
|
||||||
|
Object o = AllZone.Display.getChoice("Mill " + c.getName() + " ?" , choices);
|
||||||
|
if(o.equals("Yes"))
|
||||||
|
{lib.remove(c);
|
||||||
|
grave.add(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
CardList landlist = new CardList();
|
||||||
|
landlist.addAll(AllZone.Human_Play.getCards());
|
||||||
|
// i have no better idea how AI could use it then letting draw unneeded lands
|
||||||
|
// this part will be good place to use card values lists or card values deck info
|
||||||
|
if (countLands(card) > 5 && !c.getType().contains("Land"))
|
||||||
|
{
|
||||||
|
lib.remove(c);
|
||||||
|
grave.add(c);
|
||||||
|
}
|
||||||
|
if (countLands(card) <= 5)
|
||||||
|
{
|
||||||
|
lib.remove(c);
|
||||||
|
grave.add(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
private int countLands(Card c)
|
||||||
|
{
|
||||||
|
PlayerZone play = AllZone.getZone(Constant.Zone.Play, c
|
||||||
|
.getController());
|
||||||
|
CardList lands = new CardList(play.getCards());
|
||||||
|
lands = lands.getType("Land");
|
||||||
|
return lands.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean canPlayAI()
|
||||||
|
{
|
||||||
|
String player = getTargetPlayer();
|
||||||
|
PlayerZone lib = AllZone.getZone(Constant.Zone.Library, player);
|
||||||
|
CardList libList = new CardList(lib.getCards());
|
||||||
|
return libList.size() > 0;
|
||||||
|
}
|
||||||
|
};//SpellAbility
|
||||||
|
card.addSpellAbility(a1);
|
||||||
|
a1.setDescription("2, tap: Look at the top card of target player's library. You may put that card into that player's graveyard.");
|
||||||
|
a1.setStackDescription("Lurking Informant ability");
|
||||||
|
a1.setBeforePayMana(new Input_PayManaCost(a1));
|
||||||
|
a1.setBeforePayMana(CardFactoryUtil.input_targetPlayer(a1));
|
||||||
|
}//*************** END ************ END **************************
|
||||||
|
|
||||||
//*************** START *********** START **************************
|
//*************** START *********** START **************************
|
||||||
else if(cardName.equals("Shinka Gatekeeper"))
|
else if(cardName.equals("Shinka Gatekeeper"))
|
||||||
|
|||||||
@@ -83,6 +83,7 @@ public class GameActionUtil
|
|||||||
// card gets played
|
// card gets played
|
||||||
// (called in MagicStack.java)
|
// (called in MagicStack.java)
|
||||||
Card c = sa.getSourceCard();
|
Card c = sa.getSourceCard();
|
||||||
|
playCard_Dovescape(c);
|
||||||
playCard_Belligerent_Hatchling(c);
|
playCard_Belligerent_Hatchling(c);
|
||||||
playCard_Voracious_Hatchling(c);
|
playCard_Voracious_Hatchling(c);
|
||||||
playCard_Sturdy_Hatchling(c);
|
playCard_Sturdy_Hatchling(c);
|
||||||
@@ -102,6 +103,63 @@ public class GameActionUtil
|
|||||||
playCard_Mold_Adder(c);
|
playCard_Mold_Adder(c);
|
||||||
playCard_Fable_of_Wolf_and_Owl(c);
|
playCard_Fable_of_Wolf_and_Owl(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void playCard_Dovescape(Card c)
|
||||||
|
{
|
||||||
|
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());
|
||||||
|
int cmc = CardUtil.getConvertedManaCost(c.getManaCost());
|
||||||
|
list = list.getName("Dovescape");
|
||||||
|
if ( ! c.getType().contains("Creature") && list.size()>0 ) {
|
||||||
|
|
||||||
|
|
||||||
|
final Card card = list.get(0);
|
||||||
|
|
||||||
|
Ability ability2 = new Ability(card, "0")
|
||||||
|
{
|
||||||
|
public void resolve()
|
||||||
|
{
|
||||||
|
SpellAbility sa = AllZone.Stack.pop();
|
||||||
|
|
||||||
|
AllZone.GameAction.moveToGraveyard(sa.getSourceCard());
|
||||||
|
|
||||||
|
}
|
||||||
|
}; // ability2
|
||||||
|
|
||||||
|
ability2.setStackDescription("Dovescape Ability");
|
||||||
|
AllZone.Stack.add(ability2);
|
||||||
|
|
||||||
|
for (int j = 0; j < list.size()*cmc; j++)
|
||||||
|
{
|
||||||
|
Card crd = new Card();
|
||||||
|
String controller = c.getController();
|
||||||
|
crd.setOwner(controller);
|
||||||
|
crd.setController(controller);
|
||||||
|
|
||||||
|
crd.setName("Bird");
|
||||||
|
crd.setImageName("WU 1 1 Bird");
|
||||||
|
crd.setManaCost("WU");
|
||||||
|
crd.setToken(true);
|
||||||
|
|
||||||
|
crd.addType("Creature");
|
||||||
|
crd.addType("Bird");
|
||||||
|
crd.addIntrinsicKeyword("Flying");
|
||||||
|
|
||||||
|
crd.setBaseAttack(1);
|
||||||
|
crd.setBaseDefense(1);
|
||||||
|
|
||||||
|
PlayerZone play = AllZone.getZone(Constant.Zone.Play, controller);
|
||||||
|
play.add(crd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} // Dovescape
|
||||||
|
|
||||||
public static void playCard_Belligerent_Hatchling(Card c)
|
public static void playCard_Belligerent_Hatchling(Card c)
|
||||||
{
|
{
|
||||||
final String controller = c.getController();
|
final String controller = c.getController();
|
||||||
|
|||||||
Reference in New Issue
Block a user