From a35ffbcb0fccac5a7eea6ff513a52a518fe23f3d Mon Sep 17 00:00:00 2001 From: tool4ever Date: Sun, 28 Aug 2022 05:40:44 +0200 Subject: [PATCH] Rith, Liberated Primeval and support (#1409) * Rith, Liberated Primeval and support * Add AI hints Co-authored-by: TRT <> --- forge-game/src/main/java/forge/game/GameAction.java | 2 +- .../main/java/forge/game/card/CardDamageMap.java | 6 +++++- .../upcoming/rith_liberated_primeval.txt | 13 +++++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 forge-gui/res/cardsfolder/upcoming/rith_liberated_primeval.txt diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index 433ae194876..ffb86ed9e9a 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -2419,7 +2419,7 @@ public class GameAction { } // for Zangief do this before runWaitingTriggers DamageDone - damageMap.triggerExcessDamage(isCombat, lethalDamage, game); + damageMap.triggerExcessDamage(isCombat, lethalDamage, game, lkiCache); // lose life simultaneously if (isCombat) { diff --git a/forge-game/src/main/java/forge/game/card/CardDamageMap.java b/forge-game/src/main/java/forge/game/card/CardDamageMap.java index 37dd9c620b8..0d4d7333737 100644 --- a/forge-game/src/main/java/forge/game/card/CardDamageMap.java +++ b/forge-game/src/main/java/forge/game/card/CardDamageMap.java @@ -104,7 +104,7 @@ public class CardDamageMap extends ForwardingTable { game.getTriggerHandler().runTrigger(TriggerType.DamageAll, runParams, false); } - public void triggerExcessDamage(boolean isCombat, Map lethalDamage, final Game game) { + public void triggerExcessDamage(boolean isCombat, Map lethalDamage, final Game game, final Map lkiCache) { for (Entry damaged : lethalDamage.entrySet()) { int sum = 0; for (Integer i : this.column(damaged.getKey()).values()) { @@ -112,6 +112,10 @@ public class CardDamageMap extends ForwardingTable { } int excess = sum - (damaged.getKey().hasBeenDealtDeathtouchDamage() ? 1 : damaged.getValue()); + + // also update the DamageHistory, but overwrite previous excess outcomes + // because Rith, Liberated Primeval cares about who controlled it at this moment + lkiCache.get(damaged.getKey().getId()).setHasBeenDealtExcessDamageThisTurn(excess > 0); if (excess > 0) { damaged.getKey().setHasBeenDealtExcessDamageThisTurn(true); // Run triggers diff --git a/forge-gui/res/cardsfolder/upcoming/rith_liberated_primeval.txt b/forge-gui/res/cardsfolder/upcoming/rith_liberated_primeval.txt new file mode 100644 index 00000000000..6a2d8c12795 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/rith_liberated_primeval.txt @@ -0,0 +1,13 @@ +Name:Rith, Liberated Primeval +ManaCost:2 R G W +Types:Legendary Creature Dragon +PT:5/5 +K:Flying +K:Ward:2 +S:Mode$ Continuous | Affected$ Dragon.Other+YouCtrl | AddKeyword$ Ward:2 | Description$ Other Dragons you control have ward {2}. +T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | CheckSVar$ DragonCheck | Execute$ DBDragon | TriggerDescription$ At the beginning of your end step, if a creature or planeswalker an opponent controlled was dealt excess damage this turn, create a 4/4 red Dragon creature token with flying. +SVar:DBDragon:DB$ Token | TokenScript$ r_4_4_dragon_flying +SVar:DragonCheck:Count$NumDamageThisTurn Card Creature.OppCtrl+wasDealtExcessDamageThisTurn,Planeswalker.OppCtrl+wasDealtExcessDamageThisTurn +DeckHas:Ability$Token +DeckHints:Type$Dragon +Oracle:Flying, ward {2}\nOther dragons you control have ward {2}.\nAt the beginning of your end step, if a creature or planeswalker an opponent controlled was dealt excess damage this turn, create a 4/4 red Dragon creature token with flying.