- Added "When CARDNAME is put into a graveyard from anywhere, shuffle it into its owner's library." keyword.

- Added Farsight Mask, Dread, No Mercy and Dissipation Field.
This commit is contained in:
jendave
2011-08-06 06:12:30 +00:00
parent 8a25b7b081
commit aa0fec9926
4 changed files with 137 additions and 4 deletions

View File

@@ -1,3 +1,30 @@
No Mercy
2 B B
Enchantment
Whenever a creature deals damage to you, destroy it.
SVar:Rarity:Rare
Farsight Mask
5
Artifact
Whenever a source an opponent controls deals damage to you, if Farsight Mask is untapped, you may draw a card.
SVar:Rarity:Uncommon
Dread
3 B B B
Creature Elemental Incarnation
Whenever a creature deals damage to you, destroy it.
6/6
Fear
When CARDNAME is put into a graveyard from anywhere, shuffle it into its owner's library.
SVar:Rarity:Rare
Dissipation Field
2 U U
Enchantment
Whenever a permanent deals damage to you, return it to its owner's hand.
SVar:Rarity:Rare
Long-Term Plans
2 U
Instant

View File

@@ -33,6 +33,20 @@ public class DefaultPlayerZone extends PlayerZone implements java.io.Serializabl
AllZone.GameAction.shuffle(c.getOwner());
return;
}
//slight difference from above I guess, the card gets put into the grave first, then shuffled into library.
//key is that this would trigger abilities that trigger on cards hitting the graveyard
else if (is("Graveyard") && c.getKeyword().contains("When CARDNAME is put into a graveyard from anywhere, shuffle it into its owner's library."))
{
PlayerZone lib = AllZone.getZone(Constant.Zone.Library, c.getOwner());
PlayerZone grave = AllZone.getZone(Constant.Zone.Graveyard, c.getOwner());
grave.add(c);
grave.remove(c);
lib.add(c);
AllZone.GameAction.shuffle(c.getOwner());
return;
}
if (is("Graveyard")
&& c.getKeyword().contains("When CARDNAME is put into a graveyard from anywhere, reveal CARDNAME and its owner shuffles his or her graveyard into his or her library."))
@@ -47,6 +61,8 @@ public class DefaultPlayerZone extends PlayerZone implements java.io.Serializabl
return;
}
if (c.isUnearthed() && (is("Graveyard") || is("Hand")))
{
PlayerZone removed = AllZone.getZone(Constant.Zone.Removed_From_Play, c.getOwner());

View File

@@ -3706,7 +3706,7 @@ public class GameAction {
else
getPlayerLife(player).subtractLife(damage,source);
GameActionUtil.executePlayerDamageEffects(source, damage, true);
GameActionUtil.executePlayerDamageEffects(player, source, damage, true);
GameActionUtil.executePlayerCombatDamageEffects(source);
CombatUtil.executeCombatDamageEffects(source);
}
@@ -3729,7 +3729,7 @@ public class GameAction {
GameActionUtil.executeGuiltyConscienceEffects(source, c, damage);
}
GameActionUtil.executePlayerDamageEffects(source, damage, false);
GameActionUtil.executePlayerDamageEffects(player, source, damage, false);
}
public void searchLibraryLand(String type, String player, String Zone1, boolean tapLand) {

View File

@@ -5043,10 +5043,44 @@ public class GameActionUtil {
}
//not restricted to just combat damage:
public static void executePlayerDamageEffects(Card c, int damage, boolean isCombatDamage)
public static void executePlayerDamageEffects(String player, Card c, int damage, boolean isCombatDamage)
{
if (damage > 0)
{
CardList playerPerms = AllZoneUtil.getPlayerCardsInPlay(player);
if (playerPerms.getName("Dissipation Field").size() > 0) {
CardList disFields = playerPerms.getName("Dissipation Field");
for (int i=0;i<disFields.size();i++) {
Card crd = disFields.get(i);
playerDamage_Dissipation_Field(c, crd);
}
}
if (c.isCreature() && (playerPerms.getName("Dread").size() > 0 || playerPerms.getName("No Mercy").size() > 0))
{
CardList l = playerPerms.filter(new CardListFilter()
{
public boolean addCard(Card crd)
{
return crd.getName().equals("Dread") || crd.getName().equals("No Mercy");
}
});
for (Card crd:l)
playerDamage_No_Mercy(c, crd);
}
if (playerPerms.getName("Farsight Mask").size() > 0)
{
final Card c1 = c;
CardList l = playerPerms.filter(new CardListFilter()
{
public boolean addCard(Card crd)
{
return crd.getName().equals("Farsight Mask") && crd.isUntapped() && !c1.getController().equals(crd.getController());
}
});
for (Card crd:l)
playerDamage_Farsight_Mask(player, c, crd);
}
if(c.getKeyword().contains("Whenever this creature deals damage to a player, that player gets a poison counter."))
playerCombatDamage_PoisonCounter(c, 1);
@@ -5221,7 +5255,6 @@ public class GameActionUtil {
Ability ability2 = new Ability(c, "0") {
@Override
public void resolve() {
AllZone.GameAction.drawCard(player);
if(opponent.equals(Constant.Player.Human)) AllZone.InputControl.setInput(CardFactoryUtil.input_discard(this));
else AllZone.GameAction.discardRandom(Constant.Player.Computer, this);
@@ -5235,6 +5268,63 @@ public class GameActionUtil {
}
private static void playerDamage_Dissipation_Field(final Card c, final Card crd)
{
final String owner = c.getOwner();
Ability ability = new Ability(crd,"0")
{
public void resolve() {
if (AllZone.GameAction.isCardInPlay(c)) {
PlayerZone hand = AllZone.getZone(Constant.Zone.Hand, owner);
AllZone.GameAction.moveTo(hand, c);
}
}
};
ability.setStackDescription("Dissipation Field - returns " +c + " back to owner's hand.");
AllZone.Stack.add(ability);
}
private static void playerDamage_No_Mercy(final Card c, final Card crd)
{
Ability ability = new Ability(crd,"0")
{
public void resolve() {
if (AllZone.GameAction.isCardInPlay(c))
{
AllZone.GameAction.destroy(c);
}
}
};
ability.setStackDescription(crd + " - destroys " +c + ".");
AllZone.Stack.add(ability);
}
private static void playerDamage_Farsight_Mask(final String player, final Card c, final Card crd)
{
Ability ability = new Ability(crd,"0")
{
public void resolve()
{
if (crd.isUntapped())
{
if (player.equals(Constant.Player.Human))
{
String[] choices = {"Yes", "No"};
Object choice = AllZone.Display.getChoice("Draw a card?", choices);
if(choice.equals("Yes"))
AllZone.GameAction.drawCard(player);
}
else
AllZone.GameAction.drawCard(player);
}
}
};
ability.setStackDescription("Farsight Mask - You may draw a card.");
AllZone.Stack.add(ability);
}
private static void playerCombatDamage_Ghastlord_of_Fugue(Card c) {
final String player = c.getController();
final String opponent = AllZone.GameAction.getOpponent(player);