From 6a74bd841a4449b6a39f916712e55d4526078f62 Mon Sep 17 00:00:00 2001 From: Agetian Date: Fri, 15 Sep 2017 05:12:55 +0000 Subject: [PATCH] - Improved TriggerCombatDamageDoneOnce to propagate the amount of damage dealt to targets. - Corrected Armadillo Cloak and Fungusaur as implementation examples for simultaneous combat damage (simultaneous noncombat damage like Aura Barbs is still impossible as of yet, feel free to improve if you know how). --- .../main/java/forge/game/combat/Combat.java | 34 ++++++++----------- .../trigger/TriggerCombatDamageDoneOnce.java | 4 ++- .../res/cardsfolder/a/armadillo_cloak.txt | 3 +- forge-gui/res/cardsfolder/f/fungusaur.txt | 3 +- 4 files changed, 21 insertions(+), 23 deletions(-) diff --git a/forge-game/src/main/java/forge/game/combat/Combat.java b/forge-game/src/main/java/forge/game/combat/Combat.java index d4ccebcd13b..79359682e60 100644 --- a/forge-game/src/main/java/forge/game/combat/Combat.java +++ b/forge-game/src/main/java/forge/game/combat/Combat.java @@ -17,26 +17,9 @@ */ package forge.game.combat; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import forge.game.Game; -import forge.game.spellability.SpellAbilityStackInstance; -import org.apache.commons.lang3.tuple.Pair; - import com.google.common.base.Function; -import com.google.common.collect.ArrayListMultimap; -import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.collect.Multimap; -import com.google.common.collect.Multimaps; -import com.google.common.collect.Table; - +import com.google.common.collect.*; +import forge.game.Game; import forge.game.GameEntity; import forge.game.GameLogEntryType; import forge.game.GameObjectMap; @@ -45,9 +28,14 @@ import forge.game.card.CardCollection; import forge.game.card.CardCollectionView; import forge.game.card.CardDamageMap; import forge.game.player.Player; +import forge.game.spellability.SpellAbilityStackInstance; import forge.game.trigger.TriggerType; import forge.util.collect.FCollection; import forge.util.collect.FCollectionView; +import org.apache.commons.lang3.tuple.Pair; + +import java.util.*; +import java.util.Map.Entry; /** *

@@ -815,11 +803,17 @@ public class Combat { c.addCombatDamage(c.getAssignedDamageMap(), dealtDamageTo, preventMap); c.clearAssignedDamage(); } - + // Run triggers for (final GameEntity ge : dealtDamageTo.columnKeySet()) { + int totalDmg = 0; + for (Integer dmgEntry : dealtDamageTo.column(ge).values()) { + totalDmg += dmgEntry; + } + final Map runParams = Maps.newHashMap(); runParams.put("DamageSources", dealtDamageTo.column(ge).keySet()); + runParams.put("DamageAmount", totalDmg); runParams.put("DamageTarget", ge); ge.getGame().getTriggerHandler().runTrigger(TriggerType.CombatDamageDoneOnce, runParams, false); } diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerCombatDamageDoneOnce.java b/forge-game/src/main/java/forge/game/trigger/TriggerCombatDamageDoneOnce.java index ac8304fbd4c..c4ff3f1cde7 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerCombatDamageDoneOnce.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerCombatDamageDoneOnce.java @@ -82,13 +82,15 @@ public class TriggerCombatDamageDoneOnce extends Trigger { public final void setTriggeringObjects(final SpellAbility sa) { sa.setTriggeringObject("Sources", this.getRunParams().get("DamageSources")); sa.setTriggeringObject("Target", this.getRunParams().get("DamageTarget")); + sa.setTriggeringObject("DamageAmount", this.getRunParams().get("DamageAmount")); } @Override public String getImportantStackObjects(SpellAbility sa) { StringBuilder sb = new StringBuilder(); - sb.append("Sources: ").append(sa.getTriggeringObject("Sources")).append(", "); + //sb.append("Sources: ").append(sa.getTriggeringObject("Sources")).append(", "); // FIXME: why does this end up empty at all times? sb.append("Target: ").append(sa.getTriggeringObject("Target")); + sb.append("Damage: ").append(sa.getTriggeringObject("DamageAmount")); return sb.toString(); } } diff --git a/forge-gui/res/cardsfolder/a/armadillo_cloak.txt b/forge-gui/res/cardsfolder/a/armadillo_cloak.txt index c77cec0cfde..2ab87efcd27 100644 --- a/forge-gui/res/cardsfolder/a/armadillo_cloak.txt +++ b/forge-gui/res/cardsfolder/a/armadillo_cloak.txt @@ -4,7 +4,8 @@ Types:Enchantment Aura K:Enchant creature A:SP$ Attach | Cost$ 1 G W | ValidTgts$ Creature | AILogic$ Pump S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 2 | AddToughness$ 2 | AddKeyword$ Trample | Description$ Enchanted creature gets +2/+2 and has trample. -T:Mode$ DamageDone | ValidSource$ Card.AttachedBy | Execute$ TrigGain | TriggerZones$ Battlefield | TriggerDescription$ Whenever enchanted creature deals damage, you gain that much life. +T:Mode$ DamageDone | CombatDamage$ False | ValidSource$ Card.AttachedBy | Execute$ TrigGain | TriggerZones$ Battlefield | TriggerDescription$ Whenever enchanted creature deals damage, you gain that much life. +T:Mode$ DealtCombatDamageOnce | Secondary$ True | ValidSource$ Card.AttachedBy | Execute$ TrigGain | TriggerZones$ Battlefield | TriggerDescription$ Whenever enchanted creature deals damage, you gain that much life. SVar:TrigGain:AB$GainLife | Cost$ 0 | Defined$ You | LifeAmount$ X | References$ X SVar:X:TriggerCount$DamageAmount SVar:Picture:http://www.wizards.com/global/images/magic/general/armadillo_cloak.jpg diff --git a/forge-gui/res/cardsfolder/f/fungusaur.txt b/forge-gui/res/cardsfolder/f/fungusaur.txt index 81ce19afc28..137764a173a 100644 --- a/forge-gui/res/cardsfolder/f/fungusaur.txt +++ b/forge-gui/res/cardsfolder/f/fungusaur.txt @@ -2,7 +2,8 @@ Name:Fungusaur ManaCost:3 G Types:Creature Fungus Dinosaur PT:2/2 -T:Mode$ DamageDone | ValidTarget$ Card.Self | Execute$ TrigPutCounter | TriggerDescription$ Whenever CARDNAME is dealt damage, put a +1/+1 counter on it. +T:Mode$ DamageDone | CombatDamage$ False | ValidTarget$ Card.Self | Execute$ TrigPutCounter | TriggerDescription$ Whenever CARDNAME is dealt damage, put a +1/+1 counter on it. +T:Mode$ CombatDamageDoneOnce | Secondary$ True | ValidTarget$ Card.Self | Execute$ TrigPutCounter | TriggerDescription$ Whenever CARDNAME is dealt damage, put a +1/+1 counter on it. SVar:TrigPutCounter:DB$PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 SVar:HasCombatEffect:TRUE SVar:Picture:http://www.wizards.com/global/images/magic/general/fungusaur.jpg