From e52e154774f3ef54097367d36f37402f9514d03f Mon Sep 17 00:00:00 2001 From: Agetian Date: Tue, 18 Feb 2014 13:55:15 +0000 Subject: [PATCH] - Added a way to count specific colors of mana spent on X (Count$XColorPaid followed by a list of colors in one-letter abbreviation format e.g. Count$XColorPaid WUG). - Added Soul Burn. --- .gitattributes | 1 + .../src/main/java/forge/game/card/Card.java | 56 +++++++++++++++++++ .../java/forge/game/card/CardFactory.java | 1 + .../java/forge/game/card/CardFactoryUtil.java | 9 +++ forge-gui/res/cardsfolder/s/soul_burn.txt | 12 ++++ .../java/forge/gui/input/InputPayManaX.java | 4 ++ 6 files changed, 83 insertions(+) create mode 100644 forge-gui/res/cardsfolder/s/soul_burn.txt diff --git a/.gitattributes b/.gitattributes index 3cb281b68d0..ad5a0c850ab 100644 --- a/.gitattributes +++ b/.gitattributes @@ -11462,6 +11462,7 @@ forge-gui/res/cardsfolder/s/sosuke_son_of_seshiro.txt svneol=native#text/plain forge-gui/res/cardsfolder/s/sosukes_summons.txt svneol=native#text/plain forge-gui/res/cardsfolder/s/soul_barrier.txt svneol=native#text/plain forge-gui/res/cardsfolder/s/soul_bleed.txt svneol=native#text/plain +forge-gui/res/cardsfolder/s/soul_burn.txt -text forge-gui/res/cardsfolder/s/soul_channeling.txt svneol=native#text/plain forge-gui/res/cardsfolder/s/soul_charmer.txt svneol=native#text/plain forge-gui/res/cardsfolder/s/soul_collector.txt svneol=native#text/plain diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 499dc10f91d..ffc3db72e4b 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -38,6 +38,7 @@ import forge.game.cost.Cost; import forge.game.event.*; import forge.game.event.GameEventCardAttachment.AttachMethod; import forge.game.event.GameEventCardDamaged.DamageType; +import forge.game.mana.Mana; import forge.game.player.Player; import forge.game.replacement.ReplaceMoved; import forge.game.replacement.ReplacementEffect; @@ -181,6 +182,7 @@ public class Card extends GameEntity implements Comparable { private int semiPermanentDefenseBoost = 0; private int xManaCostPaid = 0; + private ArrayList xManaCostPaidByColor = new ArrayList<>(); private int sunburstValue = 0; private byte colorsPaid = 0; @@ -869,6 +871,60 @@ public class Card extends GameEntity implements Comparable { this.xManaCostPaid = n; } + /** + *

+ * Getter for the field xManaCostPaidByColor. + *

+ * + * @return a int. + */ + public final ArrayList getXManaCostPaidByColor() { + return this.xManaCostPaidByColor; + } + + /** + *

+ * Getter for the field xManaCostPaidByColor. + *

+ * + * @return a int. + */ + public final int getXManaCostPaidCount(final String colors) { + int count = 0; + + for (Mana m : this.xManaCostPaidByColor) { + if (colors.contains(m.toString())) { + count++; + } + } + + return count; + } + + /** + *

+ * Setter or the field xManaCostPaidByColor. + *

+ * + * @param n + * a int. + */ + public final void setXManaCostPaidByColor(final ArrayList xByColor) { + this.xManaCostPaidByColor = xByColor; + } + + /** + *

+ * addXManaCostPaidByColor. + *

+ * + * @param xByColor + * an ArrayList. + */ + public final void addXManaCostPaidByColor(final ArrayList xByColor) { + this.xManaCostPaidByColor.addAll(xByColor); + } + /** *

* Getter for the field xManaCostPaid. diff --git a/forge-game/src/main/java/forge/game/card/CardFactory.java b/forge-game/src/main/java/forge/game/card/CardFactory.java index aca2fe36366..bd10f951402 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactory.java +++ b/forge-game/src/main/java/forge/game/card/CardFactory.java @@ -223,6 +223,7 @@ public class CardFactory { if (bCopyDetails) { c.addXManaCostPaid(original.getXManaCostPaid()); + c.addXManaCostPaidByColor(original.getXManaCostPaidByColor()); c.setKickerMagnitude(original.getKickerMagnitude()); for (OptionalCost cost : original.getOptionalCostsPaid()) { diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index bd69a47c160..898611a50f2 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -56,6 +56,7 @@ import forge.game.zone.Zone; import forge.game.zone.ZoneType; import forge.util.Aggregates; import forge.util.Lang; +import forge.util.TextUtil; import org.apache.commons.lang3.StringUtils; import java.util.*; @@ -975,6 +976,14 @@ public class CardFactoryUtil { sq = l[0].split("\\."); if (sq[0].contains("xPaid")) return doXMath(c.getXManaCostPaid(), m, c); + if (sq[0].contains("xColorPaid")) { + String[] attrs = TextUtil.split(sq[0], ' '); + String colors = ""; + for (int i = 1; i < attrs.length; i++) { + colors += attrs[i]; + } + return doXMath(c.getXManaCostPaidCount(colors), m, c); + } if (sq[0].equals("YouDrewThisTurn")) return doXMath(c.getController().getNumDrawnThisTurn(), m, c); diff --git a/forge-gui/res/cardsfolder/s/soul_burn.txt b/forge-gui/res/cardsfolder/s/soul_burn.txt new file mode 100644 index 00000000000..193dc2d73bf --- /dev/null +++ b/forge-gui/res/cardsfolder/s/soul_burn.txt @@ -0,0 +1,12 @@ +Name:Soul Burn +ManaCost:X 2 B +Types:Sorcery +A:SP$ StoreSVar | Cost$ X 2 B | XColor$ BR | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | SVar$ Limit | Type$ Targeted | Expression$ CardToughness | SubAbility$ StoreTgtP | ConditionDefined$ Targeted | ConditionPresent$ Card.Creature | ConditionCompare$ GE1 | SpellDescription$ Spend only black and/or red mana on X. CARDNAME deals X damage to target creature or player. You gain life equal to the damage dealt, but not more than the amount of {B} spent on X, the player's life total before Soul Burn dealt damage, or the creature's toughness. +SVar:StoreTgtP:DB$ StoreSVar | SVar$ Limit | Type$ Count | Expression$ TargetedLifeTotal | SubAbility$ DBDamage | ConditionDefined$ Targeted | ConditionPresent$ Card.Creature | ConditionCompare$ EQ0 +SVar:DBDamage:DB$ DealDamage | Defined$ Targeted | NumDmg$ X | SubAbility$ DBGainLife | References$ X +SVar:X:Count$xPaid +SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ DrainedLifeCard | References$ DrainedLifeCard +SVar:DrainedLifeCard:SVar$BlackManaPaid/LimitMax.Limit +SVar:Limit:Count$xPaid +SVar:BlackManaPaid:Count$xColorPaid B +Oracle:Spend only black and/or red mana on X.\nSoul Burn deals X damage to target creature or player. You gain life equal to the damage dealt, but not more than the amount of {B} spent on X, the player's life total before Soul Burn dealt damage, or the creature's toughness. diff --git a/forge-gui/src/main/java/forge/gui/input/InputPayManaX.java b/forge-gui/src/main/java/forge/gui/input/InputPayManaX.java index ff6a49893bc..977b1462cdb 100644 --- a/forge-gui/src/main/java/forge/gui/input/InputPayManaX.java +++ b/forge-gui/src/main/java/forge/gui/input/InputPayManaX.java @@ -4,6 +4,7 @@ import forge.card.ColorSet; import forge.card.mana.ManaCost; import forge.card.mana.ManaCostParser; import forge.game.card.Card; +import forge.game.mana.Mana; import forge.game.mana.ManaCostBeingPaid; import forge.game.spellability.SpellAbility; import forge.view.ButtonUtil; @@ -16,6 +17,7 @@ import java.util.List; public class InputPayManaX extends InputPayMana { private static final long serialVersionUID = -6900234444347364050L; private int xPaid = 0; + private ArrayList xPaidByColor = new ArrayList<>(); private byte colorsPaid; private final ManaCost manaCostPerX; private final boolean xCanBe0; @@ -101,6 +103,7 @@ public class InputPayManaX extends InputPayMana { this.colorsPaid |= manaCost.getColorsPaid(); this.manaCost = new ManaCostBeingPaid(manaCostPerX); this.xPaid++; + this.xPaidByColor.add(saPaidFor.getPayingMana().get(0)); } } @@ -121,6 +124,7 @@ public class InputPayManaX extends InputPayMana { protected void done() { final Card card = saPaidFor.getHostCard(); card.setXManaCostPaid(this.xPaid); + card.setXManaCostPaidByColor(this.xPaidByColor); card.setColorsPaid(this.colorsPaid); card.setSunburstValue(ColorSet.fromMask(this.colorsPaid).countColors()); }