Captain of the Watch, Bounteous Kirin, Cloudhoof Kirin added. Infernal Kirin ability added.

This commit is contained in:
jendave
2011-08-06 03:01:12 +00:00
parent 77c4eeac4a
commit c0baed1c94
5 changed files with 364 additions and 1 deletions

View File

@@ -18,6 +18,10 @@ 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
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
cloudhoof_kirin.jpg http://www.wizards.com/global/images/magic/general/cloudhoof_kirin.jpg
bounteous_kirin.jpg http://www.wizards.com/global/images/magic/general/bounteous_kirin.jpg
captain_of_the_watch.jpg http://www.wizards.com/global/images/magic/general/captain_of_the_watch.jpg
infernal_kirin.jpg http://www.wizards.com/global/images/magic/general/infernal_kirin.jpg
halcyon_glaze.jpg http://www.wizards.com/global/images/magic/general/halcyon_glaze.jpg
callous_giant.jpg http://www.wizards.com/global/images/magic/general/callous_giant.jpg
underworld_dreams.jpg http://www.wizards.com/global/images/magic/general/underworld_dreams.jpg

View File

@@ -1,3 +1,24 @@
Captain of the Watch
4 W W
Creature Human Soldier
Other Soldier creatures you control get +1/+1 and have vigilance. When Captain of the Watch enters the battlefield, put three 1/1 white Soldier creature tokens onto the battlefield.
3/3
Vigilance
Bounteous Kirin
5 G G
Legendary Creature Kirin Spirit
Whenever you play a Spirit or Arcane spell, you may gain life equal to that spell's converted mana cost.
4/4
Flying
Cloudhoof Kirin
3 U U
Legendary Creature Kirin Spirit
Whenever you play a Spirit or Arcane spell, you may put the top X cards of target player's library into his or her graveyard, where X is that spell's converted mana cost.
4/4
Flying
Halcyon Glaze
1 U U
Enchantment
@@ -13688,7 +13709,7 @@ When Kemuri-Onna comes into play, target player discards a card. (NOTE: "Wheneve
Infernal Kirin
2 B B
Legendary Creature Kirin Spirit
(NOTE: "Whenever you cast a Spirit or Arcane spell, target player reveals his or her hand and discards all cards with that spell's converted mana cost." not implemented.)
Whenever you cast a Spirit or Arcane spell, target player reveals his or her hand and discards all cards with that spell's converted mana cost.
3/3
Flying

View File

@@ -163,6 +163,57 @@ public class CardFactory_Creatures {
a1.setBeforePayMana(CardFactoryUtil.input_targetPlayer(a1));
}//*************** END ************ END **************************
//*************** START *********** START **************************
else if(cardName.equals("Captain of the Watch"))
{
final SpellAbility comesIntoPlayAbility = new Ability(card, "0")
{
public void resolve()
{
makeToken();
makeToken();
makeToken();
}//resolve()
public void makeToken()
{
Card c = new Card();
c.setName("Soldier");
c.setImageName("W 1 1 Soldier");
c.setOwner(card.getController());
c.setController(card.getController());
c.setManaCost("W");
c.setToken(true);
c.addType("Creature");
c.addType("Soldier");
c.setBaseAttack(1);
c.setBaseDefense(1);
PlayerZone play = AllZone.getZone(Constant.Zone.Play, card.getController());
play.add(c);
}
}; //comesIntoPlayAbility
Command intoPlay = new Command()
{
private static final long serialVersionUID = 8778828278589063477L;
public void execute()
{
comesIntoPlayAbility.setStackDescription(card.getName() + " - put three 1/1 white Soldier creature tokens into play.");
AllZone.Stack.add(comesIntoPlayAbility);
}
};
card.addComesIntoPlayCommand(intoPlay);
}//*************** END ************ END **************************
//*************** START *********** START **************************
else if(cardName.equals("Dimir Guildmage"))
{

View File

@@ -93,6 +93,9 @@ public class GameActionUtil
playCard_Dovescape(c); //keep this one top
playCard_Demigod_of_Revenge(c);
playCard_Halcyon_Glaze(c);
playCard_Infernal_Kirin(c);
playCard_Cloudhoof_Kirin(c);
playCard_Bounteous_Kirin(c);
playCard_Emberstrike_Duo(c);
playCard_Gravelgill_Duo(c);
playCard_Safehold_Duo(c);
@@ -660,6 +663,193 @@ public class GameActionUtil
}//Halcyon Glaze
public static void playCard_Infernal_Kirin(Card c)
{
final String controller = c.getController();
final PlayerZone play = AllZone.getZone(Constant.Zone.Play,
controller);
CardList list = new CardList();
list.addAll(play.getCards());
list = list.getName("Infernal Kirin");
if (list.size() > 0){
if (c.getType().contains("Spirit") || c.getType().contains("Arcane") || c.getIntrinsicKeyword().contains("Changeling"))
{
for (int i=0;i<list.size();i++)
{
final Card card = list.get(i);
final int converted = CardUtil.getConvertedManaCost(c.getManaCost());
Ability ability2 = new Ability(card, "0")
{
public void resolve()
{
final String target;
if (card.getController().contains("Human"))
{
String[] choices =
{ "Opponent", "Yourself" };
Object choice = AllZone.Display.getChoice(
"Choose target player", choices);
if (choice.equals("Opponent"))
{
target = "Computer"; // check for target of spell/abilities should be here
}// if choice yes
else target = "Human"; // check for target of spell/abilities should be here
}
else target = "Human"; // check for target of spell/abilities should be here
PlayerZone hand = AllZone.getZone(Constant.Zone.Hand, target);
CardList fullHand = new CardList(hand.getCards());
if (fullHand.size() > 0 && target.equals(Constant.Player.Computer))
AllZone.Display.getChoice("Revealing hand", fullHand.toArray());
CardList discard = new CardList(hand.getCards());
discard = discard.filter(new CardListFilter()
{
public boolean addCard(Card c) {
return CardUtil.getConvertedManaCost(c.getManaCost()) == converted;
}
});
for (int j=0; j<discard.size();j++)
{
Card choice = discard.get(j);
AllZone.GameAction.discard(choice);
}
} //resolve
}; //ability
ability2.setChooseTargetAI(CardFactoryUtil.AI_targetHuman());
ability2.setBeforePayMana(CardFactoryUtil.input_targetPlayer(ability2));
ability2.setStackDescription(card.getName() + " - "
+ c.getController() + " played a Spirit or Arcane spell, target player reveals his or her hand and discards all cards with converted mana cost "+ converted +".");
AllZone.Stack.add(ability2);
}
}//if
}
}//Infernal Kirin
public static void playCard_Cloudhoof_Kirin(Card c)
{
final String controller = c.getController();
final PlayerZone play = AllZone.getZone(Constant.Zone.Play,
controller);
CardList list = new CardList();
list.addAll(play.getCards());
list = list.getName("Cloudhoof Kirin");
if (list.size() > 0){
if (c.getType().contains("Spirit") || c.getType().contains("Arcane") || c.getIntrinsicKeyword().contains("Changeling"))
{
for (int i=0;i<list.size();i++)
{
final Card card = list.get(i);
final int converted = CardUtil.getConvertedManaCost(c.getManaCost());
Ability ability2 = new Ability(card, "0")
{
public void resolve()
{
final String target;
if (card.getController().contains("Human"))
{
String[] choices =
{ "Opponent", "Yourself", "None" };
Object choice = AllZone.Display.getChoice(
"Choose target player", choices);
if (choice.equals("Opponent"))
{
target = "Computer"; // check for target of spell/abilities should be here
}// if choice yes
else if (!choice.equals("None")) target = "Human"; // check for target of spell/abilities should be here
else target="none";
}
else target = "Human"; // check for target of spell/abilities should be here
if (!(target.contains("none"))) {
PlayerZone lib = AllZone.getZone(Constant.Zone.Library, target);
PlayerZone grave = AllZone.getZone(Constant.Zone.Graveyard, target);
CardList libList = new CardList(lib.getCards());
int max = converted;
if (libList.size() < max)
max = libList.size();
for (int i=0;i<max;i++)
{
Card c = libList.get(i);
lib.remove(c);
grave.add(c);
}
} //if
} //resolve
}; //ability
ability2.setChooseTargetAI(CardFactoryUtil.AI_targetHuman());
ability2.setBeforePayMana(CardFactoryUtil.input_targetPlayer(ability2));
ability2.setStackDescription(card.getName() + " - "
+ c.getController() + " played a Spirit or Arcane spell, target player puts the top " + converted + " cards of his or her library into his or her graveyard.");
AllZone.Stack.add(ability2);
}
}//if
}
}//Cloudhoof Kirin
public static void playCard_Bounteous_Kirin(Card c)
{
final String controller = c.getController();
final PlayerZone play = AllZone.getZone(Constant.Zone.Play,
controller);
CardList list = new CardList();
list.addAll(play.getCards());
list = list.getName("Bounteous Kirin");
if (list.size() > 0){
if (c.getType().contains("Spirit") || c.getType().contains("Arcane") || c.getIntrinsicKeyword().contains("Changeling"))
{
for (int i=0;i<list.size();i++)
{
final Card card = list.get(i);
final int converted = CardUtil.getConvertedManaCost(c.getManaCost());
Ability ability2 = new Ability(card, "0")
{
public void resolve()
{
final String target;
if (card.getController().contains("Human"))
{
String[] choices =
{ "Yourself", "Opponent", "None" };
Object choice = AllZone.Display.getChoice(
"Choose target player", choices);
if (choice.equals("Opponent"))
{
target = "Computer"; // check for target of spell/abilities should be here
}// if choice yes
else if (!choice.equals("None")) target = "Human"; // check for target of spell/abilities should be here
else target="none";
}
else target = "Computer"; // check for target of spell/abilities should be here
if (!target.equals("none")) AllZone.GameAction.getPlayerLife(target).addLife(converted);
} //resolve
}; //ability
ability2.setChooseTargetAI(CardFactoryUtil.AI_targetHuman());
ability2.setBeforePayMana(CardFactoryUtil.input_targetPlayer(ability2));
ability2.setStackDescription(card.getName() + " - "
+ c.getController() + " played a Spirit or Arcane spell, target player may gain " + converted + " life.");
AllZone.Stack.add(ability2);
}
}//if
}
}//Bounteous Kirin
public static void playCard_Shorecrasher_Mimic(Card c)
{
final String controller = c.getController();
@@ -11079,6 +11269,100 @@ public class GameActionUtil
};//Wizened Cenn Other
public static Command Captain_of_the_Watch_Pump = new Command()
{
private static final long serialVersionUID = 542524781150091105L;
CardList gloriousAnthemList = new CardList();
public void execute()
{
CardList cList = gloriousAnthemList;
Card c;
for (int i = 0; i < cList.size(); i++)
{
c = cList.get(i);
c.addSemiPermanentAttackBoost(-1);
c.addSemiPermanentDefenseBoost(-1);
c.removeIntrinsicKeyword("Vigilance");
}
cList.clear();
PlayerZone[] zone = getZone("Captain of the Watch");
// for each zone found add +1/+1 to each card
for (int outer = 0; outer < zone.length; outer++)
{
CardList creature = new CardList(zone[outer].getCards());
creature = creature.getType("Soldier");
for (int i = 0; i < creature.size(); i++)
{
c = creature.get(i);
if (c.isCreature()
&& !c.getName().equals("Captain of the Watch"))
{
c.addSemiPermanentAttackBoost(1);
c.addSemiPermanentDefenseBoost(1);
if(!c.getIntrinsicKeyword().contains("Vigilance"))
c.addIntrinsicKeyword("Vigilance");
gloriousAnthemList.add(c);
}
} // for
} // for
}// execute()
};//Captain_of_the_Watch_Pump
public static Command Captain_of_the_Watch_Other = new Command()
{
private static final long serialVersionUID = -7242601069504800797L;
int otherCenns=0;
private int countOtherCenns(Card c)
{
PlayerZone play = AllZone.getZone(Constant.Zone.Play, c
.getController());
CardList cenns = new CardList(play.getCards());
cenns = cenns.filter(new CardListFilter()
{
public boolean addCard(Card c)
{
return c.getName().equals("Captain of the Watch") && (c.getType().contains("Soldier") ||c.getKeyword().contains("Changeling"));
}
});
return cenns.size()-1;
}
public void execute()
{
CardList creature = new CardList();
creature.addAll(AllZone.Human_Play.getCards());
creature.addAll(AllZone.Computer_Play.getCards());
creature = creature.getName("Captain of the Watch");
for (int i = 0; i < creature.size(); i++)
{
Card c = creature.get(i);
otherCenns = countOtherCenns(c);
c.setOtherAttackBoost(otherCenns);
c.setOtherDefenseBoost(otherCenns);
if(!c.getIntrinsicKeyword().contains("Vigilance"))
c.addIntrinsicKeyword("Vigilance");
}// for inner
}// execute()
};//Captain of the Watch Other
public static Command Elvish_Champion_Pump = new Command()
{
@@ -14737,6 +15021,8 @@ public class GameActionUtil
commands.put("Elvish_Champion_Other", Elvish_Champion_Other);
commands.put("Wizened_Cenn_Pump", Wizened_Cenn_Pump);
commands.put("Wizened_Cenn_Other", Wizened_Cenn_Other);
commands.put("Captain_of_the_Watch_Pump", Captain_of_the_Watch_Pump);
commands.put("Captain_of_the_Watch_Other", Captain_of_the_Watch_Other);
commands.put("Merfolk_Sovereign_Pump", Merfolk_Sovereign_Pump);
commands.put("Merfolk_Sovereign_Other", Merfolk_Sovereign_Other);
commands.put("Lord_of_Atlantis_Pump", Lord_of_Atlantis_Pump);

View File

@@ -82,6 +82,7 @@ public class StateBasedEffects
cardToEffectsList.put("Privileged Position", new String[] {"Privileged_Position", "Privileged_Position_Other"});
cardToEffectsList.put("Elvish Archdruid", new String[] {"Elvish_Archdruid_Pump", "Elvish_Archdruid_Other"});
cardToEffectsList.put("Wizened Cenn", new String[] {"Wizened_Cenn_Pump", "Wizened_Cenn_Other"});
cardToEffectsList.put("Captain of the Watch", new String[] {"Captain_of_the_Watch_Pump", "Captain_of_the_Watch_Other"});
cardToEffectsList.put("Timber Protector", new String[] {"Timber_Protector_Pump", "Timber_Protector_Other"});
cardToEffectsList.put("Goblin Chieftain", new String[] {"Goblin_Chieftain_Pump", "Goblin_Chieftain_Other"});
cardToEffectsList.put("Goblin King", new String[] {"Goblin_King_Pump", "Goblin_King_Other"});