From a7f0ff43ceeb59667e520a8da13c8d91c81a9c8b Mon Sep 17 00:00:00 2001 From: elcnesh Date: Wed, 25 Jun 2014 14:11:10 +0000 Subject: [PATCH] Fix cards depending on damage dealt to opponents for multiplayer games. Remove unused Count nr of lands played by opponent. --- .../java/forge/game/card/CardFactoryUtil.java | 6 ++--- .../main/java/forge/game/player/Player.java | 24 +++++++++++++++++++ .../res/cardsfolder/b/bloodcrazed_goblin.txt | 2 +- .../res/cardsfolder/n/notorious_throng.txt | 2 +- .../res/cardsfolder/s/skarrgan_firebird.txt | 4 ++-- .../res/cardsfolder/s/spinerock_knoll.txt | 2 +- forge-gui/res/cardsfolder/w/war_elemental.txt | 2 +- 7 files changed, 33 insertions(+), 9 deletions(-) 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 c288d960f60..53b2035b784 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -999,10 +999,11 @@ public class CardFactoryUtil { if (sq[0].equals("TotalDamageReceivedThisTurn")) return doXMath(c.getTotalDamageRecievedThisTurn(), m, c); if (sq[0].contains("YourPoisonCounters")) return doXMath(cc.getPoisonCounters(), m, c); - if (sq[0].contains("TotalOppPoisonCounters")) return doXMath(cc.getOpponentsTotalPoisonCounters(), m, c); + if (sq[0].contains("TotalOppPoisonCounters")) return doXMath(cc.getOpponentsTotalPoisonCounters(), m, c); - if (sq[0].contains("OppDamageThisTurn")) return doXMath(ccOpp.getAssignedDamage(), m, c); if (sq[0].contains("YourDamageThisTurn")) return doXMath(cc.getAssignedDamage(), m, c); + if (sq[0].contains("TotalOppDamageThisTurn")) return doXMath(cc.getOpponentsAssignedDamage(), m, c); + if (sq[0].contains("MaxOppDamageThisTurn")) return doXMath(cc.getMaxOpponentAssignedDamage(), m, c); // Count$YourTypeDamageThisTurn Type if (sq[0].contains("YourTypeDamageThisTurn")) return doXMath(cc.getAssignedDamage(sq[0].split(" ")[1]), m, c); @@ -1014,7 +1015,6 @@ public class CardFactoryUtil { } if (sq[0].contains("YourLandsPlayed")) return doXMath(cc.getNumLandsPlayed(), m, c); - if (sq[0].contains("OppLandsPlayed")) return doXMath(ccOpp.getNumLandsPlayed(), m, c); // Count$TopOfLibraryCMC if (sq[0].contains("TopOfLibraryCMC")) { diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index 73245bd1c98..f022b9c8c88 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -1023,6 +1023,24 @@ public class Player extends GameEntity implements Comparable { } return num; } + + /** + * Get the total damage assigned to this player's opponents this turn. + * + * @return the total damage assigned to this player's opponents this turn. + */ + public final int getOpponentsAssignedDamage() { + return Aggregates.sum(this.getOpponents(), Accessors.FN_GET_ASSIGNED_DAMAGE); + } + + /** + * Get the greatest amount of damage assigned to a single opponent this turn. + * + * @return the greatest amount of damage assigned to a single opponent this turn. + */ + public final int getMaxOpponentAssignedDamage() { + return Aggregates.max(this.getOpponents(), Accessors.FN_GET_ASSIGNED_DAMAGE); + } /** *

@@ -2738,6 +2756,12 @@ public class Player extends GameEntity implements Comparable { return input.getPoisonCounters(); } }; + public static final Function FN_GET_ASSIGNED_DAMAGE = new Function() { + @Override + public Integer apply(Player input) { + return input.getAssignedDamage(); + } + }; } /** diff --git a/forge-gui/res/cardsfolder/b/bloodcrazed_goblin.txt b/forge-gui/res/cardsfolder/b/bloodcrazed_goblin.txt index 3d54096017c..77bfbae1544 100644 --- a/forge-gui/res/cardsfolder/b/bloodcrazed_goblin.txt +++ b/forge-gui/res/cardsfolder/b/bloodcrazed_goblin.txt @@ -3,6 +3,6 @@ ManaCost:R Types:Creature Goblin Berserker PT:2/2 S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ CARDNAME can't attack. | CheckSVar$ X | SVarCompare$ LT1 | Description$ CARDNAME can't attack unless an opponent has been dealt damage this turn. -SVar:X:Count$OppDamageThisTurn +SVar:X:Count$TotalOppDamageThisTurn SVar:Picture:http://www.wizards.com/global/images/magic/general/bloodcrazed_goblin.jpg Oracle:Bloodcrazed Goblin can't attack unless an opponent has been dealt damage this turn. diff --git a/forge-gui/res/cardsfolder/n/notorious_throng.txt b/forge-gui/res/cardsfolder/n/notorious_throng.txt index fd0711b3aee..c9f4be05b20 100644 --- a/forge-gui/res/cardsfolder/n/notorious_throng.txt +++ b/forge-gui/res/cardsfolder/n/notorious_throng.txt @@ -4,7 +4,7 @@ Types:Tribal Sorcery Rogue SVar:AltCost:Cost$ 5 U | Activation$ Prowl | Description$ Prowl {5}{U} (You may cast this for its prowl cost if you dealt combat damage to a player this turn with a Rogue.) A:SP$ Token | Cost$ 3 U | TokenAmount$ X | References$ X | TokenColors$ Black | TokenTypes$ Faerie,Rogue,Creature | TokenName$ Faerie Rogue | TokenOwner$ You | TokenPower$ 1 | TokenToughness$ 1 | TokenKeywords$ Flying | SubAbility$ DBTakeTurn | SpellDescription$ Put X 1/1 black Faerie Rogue creature tokens with flying onto the battlefield, where X is the damage dealt to your opponents this turn. If CARDNAME's prowl cost was paid, take an extra turn after this one. SVar:DBTakeTurn:DB$ AddTurn | NumTurns$ 1 | Condition$ AltCost -SVar:X:Count$OppDamageThisTurn +SVar:X:Count$TotalOppDamageThisTurn SVar:RemAIDeck:True SVar:RemRandomDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/notorious_throng.jpg diff --git a/forge-gui/res/cardsfolder/s/skarrgan_firebird.txt b/forge-gui/res/cardsfolder/s/skarrgan_firebird.txt index c334b345b93..8acb259e55c 100644 --- a/forge-gui/res/cardsfolder/s/skarrgan_firebird.txt +++ b/forge-gui/res/cardsfolder/s/skarrgan_firebird.txt @@ -4,7 +4,7 @@ Types:Creature Phoenix PT:3/3 K:Bloodthirst 3 K:Flying -A:AB$ ChangeZone | Cost$ R R R | Origin$ Graveyard | Destination$ Hand | ActivationZone$ Graveyard | CheckSVar$ OppDamaged | SVarCompare$ GE1 | SpellDescription$ Return CARDNAME from your graveyard to your hand. Activate this ability only if an opponent was dealt damage this turn. -SVar:OppDamaged:Count$OppDamageThisTurn +A:AB$ ChangeZone | Cost$ R R R | Origin$ Graveyard | Destination$ Hand | ActivationZone$ Graveyard | CheckSVar$ OppDamaged | SVarCompare$ GE1 | References$ OppDamaged | SpellDescription$ Return CARDNAME from your graveyard to your hand. Activate this ability only if an opponent was dealt damage this turn. +SVar:OppDamaged:Count$TotalOppDamageThisTurn SVar:Picture:http://www.wizards.com/global/images/magic/general/skarrgan_firebird.jpg Oracle:Bloodthirst 3 (If an opponent was dealt damage this turn, this creature enters the battlefield with three +1/+1 counters on it.)\nFlying\n{R}{R}{R}: Return Skarrgan Firebird from your graveyard to your hand. Activate this ability only if an opponent was dealt damage this turn. diff --git a/forge-gui/res/cardsfolder/s/spinerock_knoll.txt b/forge-gui/res/cardsfolder/s/spinerock_knoll.txt index 11210028623..6a3956165a0 100644 --- a/forge-gui/res/cardsfolder/s/spinerock_knoll.txt +++ b/forge-gui/res/cardsfolder/s/spinerock_knoll.txt @@ -6,7 +6,7 @@ T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ SVar:TrigDig:AB$ Dig | Cost$ 0 | Defined$ You | DigNum$ 4 | DestinationZone$ Exile | ExileFaceDown$ True | RememberChanged$ True A:AB$ Mana | Cost$ T | Produced$ R | SpellDescription$ Add {R} to your mana pool. A:AB$ Play | Cost$ R T | Defined$ Remembered | Amount$ All | Controller$ You | WithoutManaCost$ True | Optional$ True | ConditionCheckSVar$ X | ConditionSVarCompare$ GE7 | References$ X | ForgetRemembered$ True | SpellDescription$ You may play the exiled card without paying its mana cost if an opponent was dealt 7 or more damage this turn. -SVar:X:Count$OppDamageThisTurn +SVar:X:Count$MaxOppDamageThisTurn SVar:RemRandomDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/spinerock_knoll.jpg Oracle:Hideaway (This land enters the battlefield tapped. When it does, look at the top four cards of your library, exile one face down, then put the rest on the bottom of your library.)\n{T}: Add {R} to your mana pool.\n{R}, {T}: You may play the exiled card without paying its mana cost if an opponent was dealt 7 or more damage this turn. diff --git a/forge-gui/res/cardsfolder/w/war_elemental.txt b/forge-gui/res/cardsfolder/w/war_elemental.txt index 28d1e1c65e1..c2d9f051886 100644 --- a/forge-gui/res/cardsfolder/w/war_elemental.txt +++ b/forge-gui/res/cardsfolder/w/war_elemental.txt @@ -4,7 +4,7 @@ Types:Creature Elemental PT:1/1 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSac | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless an opponent was dealt damage this turn. SVar:TrigSac:AB$ Sacrifice | Cost$ 0 | Defined$ Self | ConditionCheckSVar$ WarElementalX | ConditionSVarCompare$ EQ0 | References$ WarElementalX -SVar:WarElementalX:Count$OppDamageThisTurn +SVar:WarElementalX:Count$TotalOppDamageThisTurn T:Mode$ DamageDone | ValidSource$ Card | ValidTarget$ Opponent | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever an opponent is dealt damage, put that many +1/+1 counters on CARDNAME. SVar:TrigPutCounter:AB$ PutCounter | Cost$ 0 | Defined$ Self | CounterType$ P1P1 | CounterNum$ WarElementalY | References$ WarElementalY SVar:WarElementalY:TriggerCount$DamageAmount