mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 12:48:00 +00:00
Captain of the Watch, Bounteous Kirin, Cloudhoof Kirin added. Infernal Kirin ability added.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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"))
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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"});
|
||||
|
||||
Reference in New Issue
Block a user