- Radiant, Archangel is a 3/3 now.

- Discarding when controlling Necropotence should exile the card.
- Fixed a bug in the combat code where if a creature has received equal to its toughness, it will die no matter what.
- Umezawa's Jitte should trigger now when attacking a planeswalker.
- Added Pit Scorpion and Serpent Generator.
This commit is contained in:
jendave
2011-08-06 03:04:18 +00:00
parent f580399361
commit c80fa9b374
10 changed files with 121 additions and 111 deletions

View File

@@ -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
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
serpent_generator.jpg http://www.wizards.com/global/images/magic/general/serpent_generator.jpg
pit_scorpion.jpg http://www.wizards.com/global/images/magic/general/pit_scorpion.jpg
bridge_from_below.jpg http://www.wizards.com/global/images/magic/general/bridge_from_below.jpg
swamp_mosquito.jpg http://www.wizards.com/global/images/magic/general/swamp_mosquito.jpg
suqata_assassin.jpg http://www.wizards.com/global/images/magic/general/suqata_assassin.jpg

View File

@@ -1,3 +1,14 @@
Serpent Generator
6
Artifact
no text
Pit Scorpion
2 B
Creature Scorpion
Whenever this creature deals damage to a player, that player gets a poison counter.
1/1
Bridge from Below
B B B
Enchantment
@@ -13933,7 +13944,7 @@ Radiant, Archangel
3 W W
Legendary Creature Angel
Radiant, Archangel gets +1/+1 for each creature with flying in play.
2/2
3/3
Flying
Vigilance

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.6.0_16" class="java.beans.XMLDecoder">
<java version="1.6.0_17" class="java.beans.XMLDecoder">
<object id="MultiSplitLayout$Split0" class="org.jdesktop.swingx.MultiSplitLayout$Split">
<void property="bounds">
<object class="java.awt.Rectangle">
@@ -64,7 +64,7 @@
<int>0</int>
<int>148</int>
<int>244</int>
<int>181</int>
<int>183</int>
</object>
</void>
<void property="name">
@@ -83,7 +83,7 @@
<void property="bounds">
<object class="java.awt.Rectangle">
<int>0</int>
<int>329</int>
<int>331</int>
<int>244</int>
<int>10</int>
</object>
@@ -98,9 +98,9 @@
<void property="bounds">
<object class="java.awt.Rectangle">
<int>0</int>
<int>339</int>
<int>341</int>
<int>244</int>
<int>115</int>
<int>113</int>
</object>
</void>
<void property="name">
@@ -339,7 +339,7 @@
<int>254</int>
<int>512</int>
<int>902</int>
<int>137</int>
<int>146</int>
</object>
</void>
<void property="name">
@@ -358,7 +358,7 @@
<void property="bounds">
<object class="java.awt.Rectangle">
<int>254</int>
<int>649</int>
<int>658</int>
<int>902</int>
<int>10</int>
</object>
@@ -373,9 +373,9 @@
<void property="bounds">
<object class="java.awt.Rectangle">
<int>254</int>
<int>659</int>
<int>668</int>
<int>902</int>
<int>168</int>
<int>159</int>
</object>
</void>
<void property="name">

View File

@@ -17801,8 +17801,46 @@ return land.size() > 1 && CardFactoryUtil.AI_isMainPhase();
};
card.clearSpellAbility();
card.addSpellAbility(spell);
}
}//*************** END ************ END **************************
//*************** START *********** START **************************
if (cardName.equals("Serpent Generator"))
{
final SpellAbility ability = new Ability_Tap(card, "4")
{
private static final long serialVersionUID = 8428205362391909464L;
public void resolve()
{
PlayerZone play = AllZone.getZone(card);
Card c = new Card();
c.setOwner(card.getController());
c.setController(card.getController());
c.setName("Snake");
c.setImageName("C 1 1 Snake");
c.setManaCost("");
c.setToken(true);
c.addType("Artifact");
c.addType("Creature");
c.addType("Snake");
c.setBaseAttack(1);
c.setBaseDefense(1);
c.addIntrinsicKeyword("Whenever this creature deals damage to a player, that player gets a poison counter.");
play.add(c);
}
};
ability.setStackDescription("Put a 1/1 colorless Snake artifact creature token onto the battlefield. This creature has \"Whenever this creature deals damage to a player, that player gets a poison counter.\"");
ability.setDescription("4, Tap: Put a 1/1 colorless Snake artifact creature token onto the battlefield. This creature has \"Whenever this creature deals damage to a player, that player gets a poison counter.\" (A player with ten or more poison counters loses the game.)");
card.addSpellAbility(ability);
}//*************** END ************ END **************************
// Cards with Cycling abilities
// -1 means keyword "Cycling" not found

View File

@@ -2916,6 +2916,14 @@ public class CardFactoryUtil
}
return s;
}
public static boolean hasNecropotence(String player)
{
PlayerZone play = AllZone.getZone(Constant.Zone.Play, player);
CardList list = new CardList(play.getCards());
list = list.getName("Necropotence");
return list.size() > 0;
}
public static int getCanPlayNumberOfLands(String player)
{
@@ -2941,6 +2949,7 @@ public class CardFactoryUtil
return count;
}
public static CardList getFastbonds(String player)
{
CardList list = new CardList(AllZone.getZone(Constant.Zone.Play, player).getCards());

View File

@@ -570,6 +570,25 @@ public class CombatUtil
return display;
}//getPlaneswalkerBlockers()
public static void executeCombatDamageEffects(Card c)
{
if (c.getKeyword().contains("Lifelink"))
GameActionUtil.executeLifeLinkEffects(c);
CardList cl = CardFactoryUtil.getAurasEnchanting(c, "Guilty Conscience");
for (Card crd : cl)
GameActionUtil.executeGuiltyConscienceEffects(c, crd);
if(CardFactoryUtil.hasNumberEquipments(c, "Umezawa's Jitte") == 1 && c.getNetAttack() > 0)
{
PlayerZone play = AllZone.getZone(c);
CardList clist = new CardList(play.getCards());
clist = clist.getName("Umezawa's Jitte");
Card jitte = clist.get(0);
jitte.addCounter(Counters.CHARGE, 2);
}
}
private static boolean canBlockProtection(Card attacker, Card blocker)
{
ArrayList<String> list = attacker.getKeyword();

View File

@@ -99,6 +99,8 @@ private Card getCurrentCard(int ID)
discard_nath(c);
discard_megrim(c);
moveToGraveyard(c);
if (CardFactoryUtil.hasNecropotence(c.getOwner()))
removeFromGame(c);
}
public void discardRandom(String player, int numDiscard)

View File

@@ -3630,6 +3630,9 @@ public class GameActionUtil
public static void executePlayerCombatDamageEffects(Card c)
{
if (c.getKeyword().contains("Whenever this creature deals damage to a player, that player gets a poison counter."))
playerCombatDamage_PoisonCounter(c);
if (c.getName().equals("Hypnotic Specter"))
playerCombatDamage_Hypnotic_Specter(c);
else if (c.getName().equals("Dimir Cutpurse"))
@@ -3724,6 +3727,18 @@ public class GameActionUtil
}//for
}
*/
private static void playerCombatDamage_PoisonCounter(Card c)
{
final String player = c.getController();
final String opponent = AllZone.GameAction.getOpponent(player);
if (opponent.equals(Constant.Player.Human))
AllZone.Human_PoisonCounter.addPoisonCounters(1);
else
AllZone.Computer_PoisonCounter.addPoisonCounters(1);
}
private static void playerCombatDamage_Oros(Card c)
{
SpellAbility[] sa = c.getSpellAbility();
@@ -13291,7 +13306,6 @@ public class GameActionUtil
else k = countHand_Computer();
c.setBaseAttack(k);
c.setBaseDefense(k);
}
}
private int countHand_Human()
@@ -14036,7 +14050,7 @@ public class GameActionUtil
{
public boolean addCard(Card c)
{
return c.isCreature() && c.getKeyword().contains("Flying");
return c.isCreature() && c.getKeyword().contains("Flying") && !c.getName().equals("Radiant, Archangel");
}
});
return flying.size();

View File

@@ -119,23 +119,7 @@ private void playerDamage(PlayerLife p)
}
*/
if (list.contains("Lifelink"))
GameActionUtil.executeLifeLinkEffects(attackers.getCard(i));
CardList cl = CardFactoryUtil.getAurasEnchanting(attackers.getCard(i), "Guilty Conscience");
for (Card c : cl)
{
GameActionUtil.executeGuiltyConscienceEffects(attackers.getCard(i), c);
}
if(CardFactoryUtil.hasNumberEquipments(attackers.getCard(i), "Umezawa's Jitte") == 1 && attackers.get(i).getNetAttack() > 0)
{
PlayerZone play = AllZone.getZone(attackers.getCard(i));
CardList clist = new CardList(play.getCards());
clist = clist.getName("Umezawa's Jitte");
Card jitte = clist.get(0);
jitte.addCounter(Counters.CHARGE, 2);
}
CombatUtil.executeCombatDamageEffects(attackers.getCard(i));
}
//not sure if this will work correctly with multiple blockers?
@@ -170,17 +154,7 @@ private void playerDamage(PlayerLife p)
(blockers.getCard(i).hasFirstStrike() && blockers.getCard(i).hasDoubleStrike()))
{
if (blockers.getCard(i).getKeyword().contains("Lifelink"))
{
GameActionUtil.executeLifeLinkEffects(blockers.getCard(i));
}
CardList cl = CardFactoryUtil.getAurasEnchanting(blockers.getCard(i), "Guilty Conscience");
for (Card c : cl)
{
GameActionUtil.executeGuiltyConscienceEffects(blockers.getCard(i), c);
}
CombatUtil.executeCombatDamageEffects(blockers.getCard(i));
/*
ArrayList<String> list = blockers.getCard(i).getKeyword();
for (int j=0; j < list.size(); j++)
@@ -213,31 +187,14 @@ private void playerDamage(PlayerLife p)
//System.out.println("attacker #" + i + ": " + attackers.getCard(i).getName() +" " + attackers.getCard(i).getAttack());
if ( (!pwAttackers.getCard(i).hasFirstStrike() || (pwAttackers.getCard(i).hasFirstStrike() && pwAttackers.getCard(i).hasDoubleStrike()) ) )
{
if (pwAttackers.getCard(i).getKeyword().contains("Lifelink"))
GameActionUtil.executeLifeLinkEffects(pwAttackers.getCard(i));
CardList cl = CardFactoryUtil.getAurasEnchanting(pwAttackers.getCard(i), "Guilty Conscience");
for (Card c : cl)
{
GameActionUtil.executeGuiltyConscienceEffects(pwAttackers.getCard(i), c);
}
CombatUtil.executeCombatDamageEffects(pwAttackers.getCard(i));
}
}
for (int i=0; i < pwBlockers.size(); i++){
//System.out.println("blocker #" + i + ": " + blockers.getCard(i).getName() +" " + blockers.getCard(i).getAttack());
//if ( (pwBlockers.getCard(i).hasSecondStrike()) )
if ( (!pwBlockers.getCard(i).hasFirstStrike() || (pwBlockers.getCard(i).hasFirstStrike() &&
pwBlockers.getCard(i).hasDoubleStrike()) ) )
{
if (pwBlockers.getCard(i).getKeyword().contains("Lifelink"))
GameActionUtil.executeLifeLinkEffects(pwBlockers.getCard(i));
CardList cl = CardFactoryUtil.getAurasEnchanting(pwBlockers.getCard(i), "Guilty Conscience");
for (Card c : cl)
{
GameActionUtil.executeGuiltyConscienceEffects(pwBlockers.getCard(i), c);
}
CombatUtil.executeCombatDamageEffects(pwBlockers.getCard(i));
}
}
@@ -279,9 +236,10 @@ private void playerDamage(PlayerLife p)
//AllZone.GameAction.addDamage(c, crd , assignedDamageMap.get(crd));
damageMap.put(crd, assignedDamageMap.get(crd));
}
AllZone.GameAction.addDamage(c, damageMap);
AllZone.GameAction.checkStateEffects();
damageMap.clear();
c.clearAssignedDamage();
}

View File

@@ -95,31 +95,7 @@ private void playerDamage(PlayerLife p)
if ((attackers.getCard(i).hasFirstStrike() || attackers.getCard(i).hasDoubleStrike()))
{
if (attackers.getCard(i).getKeyword().contains("Lifelink"))
{
GameActionUtil.executeLifeLinkEffects(attackers.getCard(i));
}
/*
for(int j=0; j < CardFactoryUtil.hasNumberEnchantments(attackers.getCard(i), "Guilty Conscience"); j++)
GameActionUtil.executeGuiltyConscienceEffects(attackers.getCard(i));
*/
CardList cl = CardFactoryUtil.getAurasEnchanting(attackers.getCard(i), "Guilty Conscience");
for (Card c : cl)
{
GameActionUtil.executeGuiltyConscienceEffects(attackers.getCard(i), c);
}
if(CardFactoryUtil.hasNumberEquipments(attackers.getCard(i), "Umezawa's Jitte") == 1 && attackers.get(i).getNetAttack() > 0)
{
PlayerZone play = AllZone.getZone(attackers.getCard(i));
CardList clist = new CardList(play.getCards());
clist = clist.getName("Umezawa's Jitte");
Card jitte = clist.get(0);
jitte.addCounter(Counters.CHARGE, 2);
}
CombatUtil.executeCombatDamageEffects(attackers.getCard(i));
/*
@@ -150,14 +126,7 @@ private void playerDamage(PlayerLife p)
//System.out.println("blocker #" + i + ": " + blockers.getCard(i).getName() +" " + blockers.getCard(i).getAttack());
if ( (blockers.getCard(i).hasFirstStrike() || blockers.getCard(i).hasDoubleStrike()))
{
if (blockers.getCard(i).getKeyword().contains("Lifelink"))
GameActionUtil.executeLifeLinkEffects(blockers.getCard(i));
CardList cl = CardFactoryUtil.getAurasEnchanting(blockers.getCard(i), "Guilty Conscience");
for (Card c : cl)
{
GameActionUtil.executeGuiltyConscienceEffects(blockers.getCard(i), c);
}
CombatUtil.executeCombatDamageEffects(blockers.getCard(i));
}
}
@@ -170,31 +139,17 @@ private void playerDamage(PlayerLife p)
//System.out.println("attacker #" + i + ": " + attackers.getCard(i).getName() +" " + attackers.getCard(i).getAttack());
if ( (pwAttackers.getCard(i).hasFirstStrike() || pwAttackers.getCard(i).hasDoubleStrike()))
{
if (pwAttackers.getCard(i).getKeyword().contains("Lifelink"))
GameActionUtil.executeLifeLinkEffects(pwAttackers.getCard(i));
CardList cl = CardFactoryUtil.getAurasEnchanting(pwAttackers.getCard(i), "Guilty Conscience");
for (Card c : cl)
{
GameActionUtil.executeGuiltyConscienceEffects(pwAttackers.getCard(i), c);
}
CombatUtil.executeCombatDamageEffects(pwAttackers.getCard(i));
}
}
for (int i=0; i < pwBlockers.size(); i++){
//System.out.println("blocker #" + i + ": " + blockers.getCard(i).getName() +" " + blockers.getCard(i).getAttack());
if ((pwBlockers.getCard(i).hasFirstStrike() || pwBlockers.getCard(i).hasDoubleStrike()))
{
if ( pwAttackers.getCard(i).getKeyword().contains("Lifelink"))
GameActionUtil.executeLifeLinkEffects(pwBlockers.getCard(i));
CardList cl = CardFactoryUtil.getAurasEnchanting(pwBlockers.getCard(i), "Guilty Conscience");
for (Card c : cl)
{
GameActionUtil.executeGuiltyConscienceEffects(pwBlockers.getCard(i), c);
}
CombatUtil.executeCombatDamageEffects(pwBlockers.getCard(i));
}
}
//get all attackers and blockers
CardList check = new CardList();
check.addAll(AllZone.Human_Play.getCards());
@@ -226,6 +181,8 @@ private void playerDamage(PlayerLife p)
AllZone.GameAction.addDamage(c, damageMap);
AllZone.GameAction.checkStateEffects();
damageMap.clear();
c.clearAssignedDamage();
}