mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
Cleaned Up and expanded the Whenever Keyword with DiscardsCard to allow the keyword to trigger when a player discards a card. Added Liliana's Caress. Also made lands with blaze counters as the source of blaze counter damage
This commit is contained in:
@@ -38,6 +38,7 @@ snow_covered_mountain.jpg http://www.wizards.com/global/images/magic/gene
|
||||
snow_covered_mountain1.jpg http://www.wizards.com/global/images/magic/general/snow_covered_mountain.jpg
|
||||
snow_covered_mountain2.jpg http://www.magickartenmarkt.de/img/cards/Ice_Age/snow_covered_mountain.jpg
|
||||
snow_covered_mountain3.jpg http://www.magickartenmarkt.de/img/cards/Ice_Age/snow_covered_mountain.jpg
|
||||
lilianas_caress.jpg http://www.wizards.com/global/images/magic/general/lilianas_caress.jpg
|
||||
curiosity.jpg http://www.wizards.com/global/images/magic/general/curiosity.jpg
|
||||
pyretic_ritual.jpg http://www.wizards.com/global/images/magic/general/pyretic_ritual.jpg
|
||||
angelic_chorus.jpg http://www.wizards.com/global/images/magic/general/angelic_chorus.jpg
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
Liliana's Caress
|
||||
1 B
|
||||
Enchantment
|
||||
no text
|
||||
WheneverKeyword:DiscardsCard:ControllingPlayer_Opponent:Play:ModifyLife/-2:ControllingPlayer_Opponent:ASAP:No Condition:No Special Condition:Whenever an opponent discards a card, that player loses 2 life.
|
||||
|
||||
Curiosity
|
||||
U
|
||||
Enchantment Aura
|
||||
|
||||
@@ -129,6 +129,7 @@ public class GameAction {
|
||||
}
|
||||
|
||||
public void discard(Card c) {
|
||||
AllZone.GameAction.CheckWheneverKeyword(c,"DiscardsCard",null);
|
||||
discard_nath(c);
|
||||
discard_megrim(c);
|
||||
moveToGraveyard(c);
|
||||
@@ -696,11 +697,9 @@ public class GameAction {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static boolean MultiTarget_Cancelled = false;
|
||||
public void RunWheneverKeyword(Card c, String Event, Object[] Custom_Parameters) {
|
||||
/**
|
||||
* Bugs: Combat Damage is recorded, probably due to quick fixes.
|
||||
* Custom_Parameters Info:
|
||||
* For GainLife : Custom_Parameters[0] = Amount of Life Gained
|
||||
* For DealsDamage : Custom_Parameters[0] = Player Target
|
||||
@@ -731,12 +730,7 @@ public class GameAction {
|
||||
String parse = card.getKeyword().get(WheneverKeyword_Number[CKeywords]).toString();
|
||||
String k[] = parse.split(":");
|
||||
final String F_k[] = k;
|
||||
if((k[1].equals("PermanentIntoGraveyard")) && Event.equals("PermanentIntoGraveyard")
|
||||
|| (k[1].equals("BeginningOfEndStep")) && Event.equals("BeginningOfEndStep")
|
||||
|| (k[1].equals("Attacks")) && Event.equals("Attacks")
|
||||
|| (k[1].equals("EntersBattleField")) && Event.equals("EntersBattleField")
|
||||
|| (k[1].contains("DealsDamage")) && Event.contains("DealsDamage")
|
||||
|| (k[1].equals("GainLife")) && Event.equals("GainLife") && c.getController().equals(card.getController()))
|
||||
if((k[1].contains(Event)))
|
||||
{
|
||||
if(k[1].contains("DealsDamage")) {
|
||||
boolean Nullified = true;
|
||||
@@ -750,6 +744,9 @@ public class GameAction {
|
||||
if(k[2].contains("Self")) {
|
||||
if(!card.equals(c)) k[4] = "Null";
|
||||
}
|
||||
if(k[2].contains("ControllingPlayer_Opponent")) {
|
||||
if(!card.getController().equals(getOpponent(c.getController()))) k[4] = "Null";
|
||||
}
|
||||
if(k[2].contains("Enchanted_Creature")) {
|
||||
if(((Card)Custom_Parameters[2]).isEnchantedBy(card.getName()) == false) k[4] = "Null";
|
||||
}
|
||||
@@ -778,10 +775,13 @@ public class GameAction {
|
||||
// Targets
|
||||
String TargetPlayer = "";
|
||||
if(k[5].equals("ControllingPlayer_Self")) TargetPlayer = card.getController();
|
||||
if(k[5].equals("ControllingPlayer_Opponent")) TargetPlayer = getOpponent(card.getController());
|
||||
final String F_TargetPlayer = TargetPlayer;
|
||||
Card TargetCard = null;
|
||||
if(k[5].equals("Self")) TargetCard = F_card;
|
||||
final Card F_TargetCard = TargetCard;
|
||||
|
||||
// Effects
|
||||
// +1 +1 Counters
|
||||
if(k[4].contains("+1+1 Counters")) {
|
||||
String AmountParse = k[4];
|
||||
@@ -794,33 +794,11 @@ public class GameAction {
|
||||
Ability ability = new Ability(F_TargetCard, "0") {
|
||||
@Override
|
||||
public void resolve() {
|
||||
boolean Go = true;
|
||||
if(F_k[3].equals("Play")) {
|
||||
PlayerZone Required_Zone = AllZone.getZone(Constant.Zone.Play, F_TargetCard.getController());
|
||||
if(AllZone.GameAction.isCardInZone(F_TargetCard,Required_Zone)) {
|
||||
if(F_k[7].equals("Yes_No")) {
|
||||
if(F_TargetCard.getController().equals("Human")) {
|
||||
Object[] possibleValues = {"Yes", "No"};
|
||||
Object q = JOptionPane.showOptionDialog(null, "Activate - " + F_TargetCard.getName(),F_TargetCard.getName() + " Ability",
|
||||
JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE,
|
||||
null, possibleValues, possibleValues[0]);
|
||||
if(q.equals(1)) {
|
||||
Go = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(Go == true) if(AllZone.GameAction.isCardInPlay(F_TargetCard)) F_TargetCard.addCounter(Counters.P1P1, F_Amount);
|
||||
}
|
||||
}
|
||||
if(Whenever_Go(F_card,F_k) == true) if(AllZone.GameAction.isCardInPlay(F_TargetCard)) F_TargetCard.addCounter(Counters.P1P1, F_Amount);
|
||||
}
|
||||
};
|
||||
ability.setStackDescription(F_TargetCard.getName() + " - gets " + F_Amount + " +1/+1 counters.");
|
||||
if(k[3].equals("Play")) {
|
||||
PlayerZone Required_Zone = AllZone.getZone(Constant.Zone.Play, F_TargetCard.getController());
|
||||
if(AllZone.GameAction.isCardInZone(F_TargetCard,Required_Zone)) {
|
||||
if(k[6].equals("ASAP")) AllZone.Stack.add(ability);
|
||||
}
|
||||
}
|
||||
Whenever_Input(F_card,F_k,Command.Blank,ability);
|
||||
}
|
||||
// Gain Life
|
||||
if(k[4].contains("ModifyLife")) {
|
||||
@@ -833,38 +811,15 @@ public class GameAction {
|
||||
Ability ability = new Ability(card, "0") {
|
||||
@Override
|
||||
public void resolve() {
|
||||
boolean Go = true;
|
||||
if(F_k[3].equals("Play")) {
|
||||
PlayerZone Required_Zone = AllZone.getZone(Constant.Zone.Play, F_TargetPlayer);
|
||||
if(AllZone.GameAction.isCardInZone(F_card,Required_Zone)) {
|
||||
if(F_k[7].equals("Yes_No")) {
|
||||
if(F_TargetPlayer.equals("Human")) {
|
||||
Object[] possibleValues = {"Yes", "No"};
|
||||
Object q = JOptionPane.showOptionDialog(null, "Activate - " + F_card.getName(),F_card.getName() + " Ability",
|
||||
JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE,
|
||||
null, possibleValues, possibleValues[0]);
|
||||
if(q.equals(1)) {
|
||||
Go = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(Go == true) if(AllZone.GameAction.isCardInPlay(F_card)) {
|
||||
if(Whenever_Go(F_card,F_k) == true) if(AllZone.GameAction.isCardInPlay(F_card)) {
|
||||
PlayerLife life = AllZone.GameAction.getPlayerLife(F_TargetPlayer);
|
||||
if(F_Amount > -1) life.addLife(F_Amount);
|
||||
else life.subtractLife(F_Amount * -1,F_card);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
ability.setStackDescription(F_card + " - " + F_card.getController() + ((F_Amount > -1)? " gains " + F_Amount:"") + ((F_Amount <= -1)? " loses " + F_Amount * -1:"") + " life.");
|
||||
if(k[3].equals("Play")) {
|
||||
PlayerZone Required_Zone = AllZone.getZone(Constant.Zone.Play, F_TargetPlayer);
|
||||
if(AllZone.GameAction.isCardInZone(F_card,Required_Zone)) {
|
||||
if(k[6].equals("ASAP")) AllZone.Stack.add(ability);
|
||||
}
|
||||
}
|
||||
|
||||
ability.setStackDescription(F_card + " - " + F_TargetPlayer + ((F_Amount > -1)? " gains " + F_Amount:"") + ((F_Amount <= -1)? " loses " + F_Amount * -1:"") + " life.");
|
||||
Whenever_Input(F_card,F_k,Command.Blank,ability);
|
||||
}
|
||||
|
||||
// Draw Cards
|
||||
@@ -878,36 +833,13 @@ public class GameAction {
|
||||
Ability ability = new Ability(card, "0") {
|
||||
@Override
|
||||
public void resolve() {
|
||||
boolean Go = true;
|
||||
if(F_k[3].equals("Play")) {
|
||||
PlayerZone Required_Zone = AllZone.getZone(Constant.Zone.Play, F_TargetPlayer);
|
||||
if(AllZone.GameAction.isCardInZone(F_card,Required_Zone)) {
|
||||
if(F_k[7].equals("Yes_No")) {
|
||||
if(F_TargetPlayer.equals("Human")) {
|
||||
Object[] possibleValues = {"Yes", "No"};
|
||||
Object q = JOptionPane.showOptionDialog(null, "Activate - " + F_card.getName(),F_card.getName() + " Ability",
|
||||
JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE,
|
||||
null, possibleValues, possibleValues[0]);
|
||||
if(q.equals(1)) {
|
||||
Go = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(Go == true) if(AllZone.GameAction.isCardInPlay(F_card)) {
|
||||
if(Whenever_Go(F_card,F_k) == true) if(AllZone.GameAction.isCardInPlay(F_card)) {
|
||||
AllZone.GameAction.drawCard(F_TargetPlayer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
ability.setStackDescription(F_card + " - " + F_card.getController() + " draws " + F_Amount + " card(s).");
|
||||
if(k[3].equals("Play")) {
|
||||
PlayerZone Required_Zone = AllZone.getZone(Constant.Zone.Play, F_TargetPlayer);
|
||||
if(AllZone.GameAction.isCardInZone(F_card,Required_Zone)) {
|
||||
if(k[6].equals("ASAP")) AllZone.Stack.add(ability);
|
||||
}
|
||||
}
|
||||
|
||||
Whenever_Input(F_card,F_k,Command.Blank,ability);
|
||||
}
|
||||
|
||||
// Deal Damage
|
||||
@@ -930,22 +862,7 @@ public class GameAction {
|
||||
final Ability ability = new Ability(c, "0") {
|
||||
@Override
|
||||
public void resolve() {
|
||||
boolean Go = true;
|
||||
if(F_k[3].equals("Play")) {
|
||||
PlayerZone Required_Zone = AllZone.getZone(Constant.Zone.Play, F_card.getController());
|
||||
if(AllZone.GameAction.isCardInZone(F_card,Required_Zone)) {
|
||||
if(F_k[7].equals("Yes_No")) {
|
||||
if(F_card.getController().equals("Human")) {
|
||||
Object[] possibleValues = {"Yes", "No"};
|
||||
Object q = JOptionPane.showOptionDialog(null, "Activate - " + F_card.getName(),F_card.getName() + " Ability",
|
||||
JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE,
|
||||
null, possibleValues, possibleValues[0]);
|
||||
if(q.equals(1)) {
|
||||
Go = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(Go == true) if(AllZone.GameAction.isCardInPlay(F_card)) {
|
||||
if(Whenever_Go(F_card,F_k) == true) if(AllZone.GameAction.isCardInPlay(F_card)) {
|
||||
if(F_card.getController().equals(Constant.Player.Human)) {
|
||||
for(int z = 0; z < Targets.length; z++) {
|
||||
if(!(Targets[z].equals(Constant.Player.Human) || Targets[z].equals(Constant.Player.Computer))) {
|
||||
@@ -962,8 +879,6 @@ public class GameAction {
|
||||
if(F_card.getController().equals(Constant.Player.Computer)) AllZone.GameAction.addDamage(Constant.Player.Human, F_Amount*F_Multiple_Targets,F_card);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
final Command paidCommand = new Command() {
|
||||
@@ -988,22 +903,49 @@ public class GameAction {
|
||||
};
|
||||
ability.setStackDescription(F_card.getName() + " - deals " + F_Amount*F_Multiple_Targets + " damage divided among one, two, or three target creatures and/or players.");
|
||||
|
||||
if(k[3].equals("Play")) {
|
||||
PlayerZone Required_Zone = AllZone.getZone(Constant.Zone.Play, F_card.getController());
|
||||
if(AllZone.GameAction.isCardInZone(F_card,Required_Zone)) {
|
||||
if(k[6].equals("ASAP")) {
|
||||
if(k[5].equals("InputType - CreatureORPlayer") && card.getController().equals(Constant.Player.Human)) {
|
||||
paidCommand.execute();
|
||||
}
|
||||
if(k[5].equals("InputType - CreatureORPlayer") && card.getController().equals(Constant.Player.Computer)) AllZone.Stack.add(ability);
|
||||
}
|
||||
}
|
||||
}
|
||||
Whenever_Input(F_card,F_k,paidCommand,ability);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
boolean Whenever_Go (Card Source, String[] Keyword_Details) {
|
||||
boolean Go = true;
|
||||
if(Keyword_Details[3].equals("Play")) {
|
||||
PlayerZone Required_Zone = AllZone.getZone(Constant.Zone.Play, Source.getController());
|
||||
if(AllZone.GameAction.isCardInZone(Source,Required_Zone)) {
|
||||
if(Keyword_Details[7].equals("Yes_No")) {
|
||||
if(Source.getController().equals("Human")) {
|
||||
Object[] possibleValues = {"Yes", "No"};
|
||||
Object q = JOptionPane.showOptionDialog(null, "Activate - " + Source.getName(),Source.getName() + " Ability",
|
||||
JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE,
|
||||
null, possibleValues, possibleValues[0]);
|
||||
if(q.equals(1)) {
|
||||
Go = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return Go;
|
||||
}
|
||||
|
||||
public void Whenever_Input(Card Source, String[] Keyword_Details, Command paidCommand, SpellAbility ability) {
|
||||
if(Keyword_Details[3].equals("Play")) {
|
||||
PlayerZone Required_Zone = AllZone.getZone(Constant.Zone.Play, Source.getController());
|
||||
if(AllZone.GameAction.isCardInZone(Source,Required_Zone)) {
|
||||
if(Keyword_Details[6].equals("ASAP")) {
|
||||
if(Keyword_Details[5].equals("InputType - CreatureORPlayer") && Source.getController().equals(Constant.Player.Human)) {
|
||||
paidCommand.execute();
|
||||
}
|
||||
else if(Keyword_Details[5].equals("InputType - CreatureORPlayer") && Source.getController().equals(Constant.Player.Computer))
|
||||
AllZone.Stack.add(ability);
|
||||
else AllZone.Stack.add(ability);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Whenever Keyword
|
||||
|
||||
private void sacrificeDestroy(Card c) {
|
||||
|
||||
@@ -8318,18 +8318,16 @@ public class GameActionUtil {
|
||||
}
|
||||
});
|
||||
|
||||
if(blaze.size() > 0) {
|
||||
final int lands = blaze.size();
|
||||
final Card F_card = blaze.get(0); // Quick Fix, will improve later
|
||||
Ability ability = new Ability(blaze.get(0), "0") {
|
||||
for(int i = 0; i < blaze.size(); i++) {
|
||||
final Card Source = blaze.get(i);
|
||||
Ability ability = new Ability(blaze.get(i), "0") {
|
||||
@Override
|
||||
public void resolve() {
|
||||
AllZone.GameAction.getPlayerLife(player).subtractLife(lands,F_card);
|
||||
AllZone.GameAction.getPlayerLife(player).subtractLife(1,Source);
|
||||
}
|
||||
};
|
||||
ability.setStackDescription("Obsidian Fireheart - " + player + " gets dealt " + lands + " damage.");
|
||||
ability.setStackDescription(blaze.get(i) + " - has a blaze counter and " + player + " gets dealt 1 damage.");
|
||||
AllZone.Stack.add(ability);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user