mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 04:08:01 +00:00
- 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:
@@ -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
|
Long-Term Plans
|
||||||
2 U
|
2 U
|
||||||
Instant
|
Instant
|
||||||
|
|||||||
@@ -33,6 +33,20 @@ public class DefaultPlayerZone extends PlayerZone implements java.io.Serializabl
|
|||||||
AllZone.GameAction.shuffle(c.getOwner());
|
AllZone.GameAction.shuffle(c.getOwner());
|
||||||
return;
|
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")
|
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."))
|
&& 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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (c.isUnearthed() && (is("Graveyard") || is("Hand")))
|
if (c.isUnearthed() && (is("Graveyard") || is("Hand")))
|
||||||
{
|
{
|
||||||
PlayerZone removed = AllZone.getZone(Constant.Zone.Removed_From_Play, c.getOwner());
|
PlayerZone removed = AllZone.getZone(Constant.Zone.Removed_From_Play, c.getOwner());
|
||||||
|
|||||||
@@ -3706,7 +3706,7 @@ public class GameAction {
|
|||||||
else
|
else
|
||||||
getPlayerLife(player).subtractLife(damage,source);
|
getPlayerLife(player).subtractLife(damage,source);
|
||||||
|
|
||||||
GameActionUtil.executePlayerDamageEffects(source, damage, true);
|
GameActionUtil.executePlayerDamageEffects(player, source, damage, true);
|
||||||
GameActionUtil.executePlayerCombatDamageEffects(source);
|
GameActionUtil.executePlayerCombatDamageEffects(source);
|
||||||
CombatUtil.executeCombatDamageEffects(source);
|
CombatUtil.executeCombatDamageEffects(source);
|
||||||
}
|
}
|
||||||
@@ -3729,7 +3729,7 @@ public class GameAction {
|
|||||||
GameActionUtil.executeGuiltyConscienceEffects(source, c, damage);
|
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) {
|
public void searchLibraryLand(String type, String player, String Zone1, boolean tapLand) {
|
||||||
|
|||||||
@@ -5043,10 +5043,44 @@ public class GameActionUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//not restricted to just combat damage:
|
//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)
|
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."))
|
if(c.getKeyword().contains("Whenever this creature deals damage to a player, that player gets a poison counter."))
|
||||||
playerCombatDamage_PoisonCounter(c, 1);
|
playerCombatDamage_PoisonCounter(c, 1);
|
||||||
|
|
||||||
@@ -5221,7 +5255,6 @@ public class GameActionUtil {
|
|||||||
Ability ability2 = new Ability(c, "0") {
|
Ability ability2 = new Ability(c, "0") {
|
||||||
@Override
|
@Override
|
||||||
public void resolve() {
|
public void resolve() {
|
||||||
|
|
||||||
AllZone.GameAction.drawCard(player);
|
AllZone.GameAction.drawCard(player);
|
||||||
if(opponent.equals(Constant.Player.Human)) AllZone.InputControl.setInput(CardFactoryUtil.input_discard(this));
|
if(opponent.equals(Constant.Player.Human)) AllZone.InputControl.setInput(CardFactoryUtil.input_discard(this));
|
||||||
else AllZone.GameAction.discardRandom(Constant.Player.Computer, 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) {
|
private static void playerCombatDamage_Ghastlord_of_Fugue(Card c) {
|
||||||
final String player = c.getController();
|
final String player = c.getController();
|
||||||
final String opponent = AllZone.GameAction.getOpponent(player);
|
final String opponent = AllZone.GameAction.getOpponent(player);
|
||||||
|
|||||||
Reference in New Issue
Block a user