From 204c43bfa976935095905f559855271fce9d5742 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Mon, 11 Apr 2022 07:04:09 -0400 Subject: [PATCH 1/5] Card.java track nonCombatDamageDealtThisTurn --- forge-game/src/main/java/forge/game/card/Card.java | 11 +++++++++++ 1 file changed, 11 insertions(+) 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 5a7b41c2d98..cd5c73700ca 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -196,6 +196,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars { private boolean tokenCard = false; private Card copiedPermanent; private boolean copiedSpell = false; + private boolean receivedNonCombatDamageThisTurn = false; private boolean canCounter = true; @@ -3201,6 +3202,13 @@ public class Card extends GameEntity implements Comparable, IHasSVars { becameTargetThisTurn = becameTargetThisTurn0; } + public boolean hasBeenDealtNonCombatDamageThisTurn() { + return receivedNonCombatDamageThisTurn; + } + public void setHasBeenDealtNonCombatDamageThisTurn(boolean b) { + receivedNonCombatDamageThisTurn = b; + } + public boolean hasStartedTheTurnUntapped() { return startedTheTurnUntapped; } @@ -5478,6 +5486,8 @@ public class Card extends GameEntity implements Comparable, IHasSVars { source.getDamageHistory().registerDamage(this, damageIn); if (isCombat) { source.getDamageHistory().registerCombatDamage(this, damageIn); + } else { + setHasBeenDealtNonCombatDamageThisTurn(true); } // Run triggers @@ -6115,6 +6125,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars { setDamage(0); } setHasBeenDealtDeathtouchDamage(false); + setHasBeenDealtNonCombatDamageThisTurn(false); resetReceivedDamageFromThisTurn(); setRegeneratedThisTurn(0); resetShield(); From 41a7783edd1b96590f90685ab9232163f82f96d0 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Mon, 11 Apr 2022 07:04:40 -0400 Subject: [PATCH 2/5] CardProperty add "wasDealtNonCombatDamageThisTurn" --- forge-game/src/main/java/forge/game/card/CardProperty.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/forge-game/src/main/java/forge/game/card/CardProperty.java b/forge-game/src/main/java/forge/game/card/CardProperty.java index ba2cd97540e..fd36056504e 100644 --- a/forge-game/src/main/java/forge/game/card/CardProperty.java +++ b/forge-game/src/main/java/forge/game/card/CardProperty.java @@ -1173,6 +1173,10 @@ public class CardProperty { if (card.getReceivedDamageFromPlayerThisTurn().isEmpty()) { return false; } + } else if (property.equals("wasDealtNonCombatDamageThisTurn")) { + if (!card.hasBeenDealtNonCombatDamageThisTurn()) { + return false; + } } else if (property.startsWith("dealtDamageThisTurn")) { if (card.getTotalDamageDoneBy() == 0) { return false; From 8b960a6ca11234fa6e28de3b6bd401e65bbec38b Mon Sep 17 00:00:00 2001 From: Northmoc Date: Mon, 11 Apr 2022 07:07:09 -0400 Subject: [PATCH 3/5] grisly_sigil.txt --- forge-gui/res/cardsfolder/upcoming/grisly_sigil.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/grisly_sigil.txt diff --git a/forge-gui/res/cardsfolder/upcoming/grisly_sigil.txt b/forge-gui/res/cardsfolder/upcoming/grisly_sigil.txt new file mode 100644 index 00000000000..72cbf83839d --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/grisly_sigil.txt @@ -0,0 +1,10 @@ +Name:Grisly Sigil +ManaCost:B +Types:Sorcery +K:Casualty:1 +A:SP$ DealDamage | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Choose target creature or planeswalker | NumDmg$ Y | SubAbility$ DBGainLife | SpellDescription$ Choose target creature or planeswalker. If it was dealt noncombat damage this turn, Grisly Sigil deals 3 damage to it and you gain 3 life. Otherwise, Grisly Sigil deals 1 damage to it and you gain 1 life. +SVar:DBGainLife:DB$ GainLife | LifeAmount$ Y +SVar:X:Targeted$Valid Card.wasDealtNonCombatDamageThisTurn +SVar:Y:Count$Compare X GE1.3.1 +DeckHas:Ability$Sacrifice|LifeGain +Oracle:Casualty 1 (As you cast this spell, you may sacrifice a creature with power 1 or greater. When you do, copy this spell and you may choose new targets for the copy.)\nChoose target creature or planeswalker. If it was dealt noncombat damage this turn, Grisly Sigil deals 3 damage to it and you gain 3 life. Otherwise, Grisly Sigil deals 1 damage to it and you gain 1 life. From 5439769a7ce687ca1e13d7f5ee97ffd8fd95f01e Mon Sep 17 00:00:00 2001 From: Northmoc Date: Mon, 11 Apr 2022 18:55:33 -0400 Subject: [PATCH 4/5] grisly_sigil.txt Branch --- forge-gui/res/cardsfolder/upcoming/grisly_sigil.txt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/forge-gui/res/cardsfolder/upcoming/grisly_sigil.txt b/forge-gui/res/cardsfolder/upcoming/grisly_sigil.txt index 72cbf83839d..10414bdde35 100644 --- a/forge-gui/res/cardsfolder/upcoming/grisly_sigil.txt +++ b/forge-gui/res/cardsfolder/upcoming/grisly_sigil.txt @@ -2,9 +2,11 @@ Name:Grisly Sigil ManaCost:B Types:Sorcery K:Casualty:1 -A:SP$ DealDamage | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Choose target creature or planeswalker | NumDmg$ Y | SubAbility$ DBGainLife | SpellDescription$ Choose target creature or planeswalker. If it was dealt noncombat damage this turn, Grisly Sigil deals 3 damage to it and you gain 3 life. Otherwise, Grisly Sigil deals 1 damage to it and you gain 1 life. -SVar:DBGainLife:DB$ GainLife | LifeAmount$ Y +A:SP$ Branch | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Choose target creature or planeswalker | BranchConditionSVar$ X | TrueSubAbility$ Damage3 | FalseSubAbility$ Damage1 | SpellDescription$ Choose target creature or planeswalker. If it was dealt noncombat damage this turn, CARDNAME deals 3 damage to it and you gain 3 life. Otherwise, CARDNAME deals 1 damage to it and you gain 1 life. +SVar:Damage3:DB$ DealDamage | Defined$ Targeted | NumDmg$ 3 | SubAbility$ DBGain3Life +SVar:Damage1:DB$ DealDamage | Defined$ Targeted | NumDmg$ 1 | SubAbility$ DBGain1Life +SVar:DBGain3Life:DB$ GainLife | LifeAmount$ 3 +SVar:DBGain1Life:DB$ GainLife | LifeAmount$ 1 SVar:X:Targeted$Valid Card.wasDealtNonCombatDamageThisTurn -SVar:Y:Count$Compare X GE1.3.1 DeckHas:Ability$Sacrifice|LifeGain Oracle:Casualty 1 (As you cast this spell, you may sacrifice a creature with power 1 or greater. When you do, copy this spell and you may choose new targets for the copy.)\nChoose target creature or planeswalker. If it was dealt noncombat damage this turn, Grisly Sigil deals 3 damage to it and you gain 3 life. Otherwise, Grisly Sigil deals 1 damage to it and you gain 1 life. From d6ab215aea5dc5dcb483b955ad3b7e22ebab318f Mon Sep 17 00:00:00 2001 From: Northmoc Date: Mon, 11 Apr 2022 19:17:34 -0400 Subject: [PATCH 5/5] migrate NonCombat boolean to CardDamageHistory --- .../src/main/java/forge/game/card/Card.java | 12 ++------- .../forge/game/card/CardDamageHistory.java | 25 +++++++++++++++++++ .../java/forge/game/card/CardProperty.java | 2 +- 3 files changed, 28 insertions(+), 11 deletions(-) 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 cd5c73700ca..1ae07f29081 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -196,7 +196,6 @@ public class Card extends GameEntity implements Comparable, IHasSVars { private boolean tokenCard = false; private Card copiedPermanent; private boolean copiedSpell = false; - private boolean receivedNonCombatDamageThisTurn = false; private boolean canCounter = true; @@ -3202,13 +3201,6 @@ public class Card extends GameEntity implements Comparable, IHasSVars { becameTargetThisTurn = becameTargetThisTurn0; } - public boolean hasBeenDealtNonCombatDamageThisTurn() { - return receivedNonCombatDamageThisTurn; - } - public void setHasBeenDealtNonCombatDamageThisTurn(boolean b) { - receivedNonCombatDamageThisTurn = b; - } - public boolean hasStartedTheTurnUntapped() { return startedTheTurnUntapped; } @@ -5487,7 +5479,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars { if (isCombat) { source.getDamageHistory().registerCombatDamage(this, damageIn); } else { - setHasBeenDealtNonCombatDamageThisTurn(true); + getDamageHistory().setHasBeenDealtNonCombatDamageThisTurn(true); } // Run triggers @@ -6125,7 +6117,6 @@ public class Card extends GameEntity implements Comparable, IHasSVars { setDamage(0); } setHasBeenDealtDeathtouchDamage(false); - setHasBeenDealtNonCombatDamageThisTurn(false); resetReceivedDamageFromThisTurn(); setRegeneratedThisTurn(0); resetShield(); @@ -6136,6 +6127,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars { getDamageHistory().setCreatureAttackedLastTurnOf(turn, getDamageHistory().getCreatureAttackedThisTurn()); getDamageHistory().setCreatureAttackedThisTurn(false); getDamageHistory().setCreatureAttacksThisTurn(0); + getDamageHistory().setHasBeenDealtNonCombatDamageThisTurn(false); clearBlockedByThisTurn(); clearBlockedThisTurn(); resetMayPlayTurn(); diff --git a/forge-game/src/main/java/forge/game/card/CardDamageHistory.java b/forge-game/src/main/java/forge/game/card/CardDamageHistory.java index 4ca660643c3..46756978d57 100644 --- a/forge-game/src/main/java/forge/game/card/CardDamageHistory.java +++ b/forge-game/src/main/java/forge/game/card/CardDamageHistory.java @@ -20,6 +20,7 @@ public class CardDamageHistory { private boolean creatureAttackedThisCombat = false; private boolean creatureBlockedThisCombat = false; private boolean creatureGotBlockedThisCombat = false; + private boolean receivedNonCombatDamageThisTurn = false; private int attacksThisTurn = 0; private final List creatureAttackedLastTurnOf = Lists.newArrayList(); @@ -247,6 +248,30 @@ public class CardDamageHistory { public final boolean getCreatureGotBlockedThisCombat() { return this.creatureGotBlockedThisCombat; } + + /** + *

+ * Getter for the field receivedNonCombatDamageThisTurn. + *

+ * + * @return a boolean. + */ + public boolean hasBeenDealtNonCombatDamageThisTurn() { + return this.receivedNonCombatDamageThisTurn; + } + + /** + *

+ * Setter for the field receivedNonCombatDamageThisTurn. + *

+ * + * @param b + * a boolean. + */ + public void setHasBeenDealtNonCombatDamageThisTurn(boolean b) { + this.receivedNonCombatDamageThisTurn = b; + } + public final Map getThisCombatDamaged() { return damagedThisCombat; } diff --git a/forge-game/src/main/java/forge/game/card/CardProperty.java b/forge-game/src/main/java/forge/game/card/CardProperty.java index fd36056504e..7b65eac9ab4 100644 --- a/forge-game/src/main/java/forge/game/card/CardProperty.java +++ b/forge-game/src/main/java/forge/game/card/CardProperty.java @@ -1174,7 +1174,7 @@ public class CardProperty { return false; } } else if (property.equals("wasDealtNonCombatDamageThisTurn")) { - if (!card.hasBeenDealtNonCombatDamageThisTurn()) { + if (!card.getDamageHistory().hasBeenDealtNonCombatDamageThisTurn()) { return false; } } else if (property.startsWith("dealtDamageThisTurn")) {