diff --git a/.gitattributes b/.gitattributes index a50496e1519..fe04e14a202 100644 --- a/.gitattributes +++ b/.gitattributes @@ -12569,6 +12569,7 @@ src/main/java/forge/card/trigger/TriggerHandler.java svneol=native#text/plain src/main/java/forge/card/trigger/TriggerLandPlayed.java svneol=native#text/plain src/main/java/forge/card/trigger/TriggerLifeGained.java svneol=native#text/plain src/main/java/forge/card/trigger/TriggerLifeLost.java svneol=native#text/plain +src/main/java/forge/card/trigger/TriggerLosesGame.java -text src/main/java/forge/card/trigger/TriggerPhase.java svneol=native#text/plain src/main/java/forge/card/trigger/TriggerSacrificed.java svneol=native#text/plain src/main/java/forge/card/trigger/TriggerShuffled.java svneol=native#text/plain diff --git a/res/cardsfolder/b/blood_tyrant.txt b/res/cardsfolder/b/blood_tyrant.txt index 68b9777b5ed..32a628e6465 100644 --- a/res/cardsfolder/b/blood_tyrant.txt +++ b/res/cardsfolder/b/blood_tyrant.txt @@ -8,6 +8,8 @@ K:Trample T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigLoseLife | TriggerDescription$ At the beginning of your upkeep, each player loses 1 life. Put a +1/+1 counter on CARDNAME for each 1 life lost this way. SVar:TrigLoseLife:AB$LoseLife | Cost$ 0 | Defined$ Each | LifeAmount$ 1 | SubAbility$ DBPutCounter SVar:DBPutCounter:DB$PutCounter | Cost$ 0 | CounterType$ P1P1 | CounterNum$ 2 +T:Mode$ LosesGame | Execute$ TrigCounter | TriggerDescription$ Whenever a player loses the game, put thirteen +1/+1 counters on CARDNAME. +SVar:TrigCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 13 SVar:Rarity:Rare SVar:Picture:http://www.wizards.com/global/images/magic/general/blood_tyrant.jpg SetInfo:CFX|Rare|http://magiccards.info/scans/en/cfx/99.jpg diff --git a/res/cardsfolder/e/elbrus_the_binding_blade_withengar_unbound.txt b/res/cardsfolder/e/elbrus_the_binding_blade_withengar_unbound.txt index 898ca69b260..0e4ea06c322 100644 --- a/res/cardsfolder/e/elbrus_the_binding_blade_withengar_unbound.txt +++ b/res/cardsfolder/e/elbrus_the_binding_blade_withengar_unbound.txt @@ -22,7 +22,8 @@ PT:13/13 K:Flying K:Trample K:Intimidate -# Whenever a player loses the game, put thirteen +1/+1 counters on Withengar Unbound. (not implemented) +T:Mode$ LosesGame | Execute$ TrigCounter | TriggerDescription$ Whenever a player loses the game, put thirteen +1/+1 counters on CARDNAME. +SVar:TrigCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 13 SVar:Picture:http://www.wizards.com/global/images/magic/general/withengar_unbound.jpg SetInfo:DKA|Mythic|http://magiccards.info/scans/en/dka/147b.jpg Oracle:Flying, intimidate, trample\nWhenever a player loses the game, put thirteen +1/+1 counters on Withengar Unbound. diff --git a/src/main/java/forge/GameAction.java b/src/main/java/forge/GameAction.java index dd339f7727c..afdc0dbc2d4 100644 --- a/src/main/java/forge/GameAction.java +++ b/src/main/java/forge/GameAction.java @@ -22,6 +22,8 @@ import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.TreeMap; import javax.swing.JFrame; @@ -908,7 +910,10 @@ public class GameAction { // award loses as SBE for (Player p : game.getPlayers() ) { if ( Player.Predicates.NOT_LOST.apply(p) && p.checkLoseCondition() ) { // this will set appropriate outcomes - // you may fire a trigger here + // Run triggers + final Map runParams = new TreeMap(); + runParams.put("Player", p); + Singletons.getModel().getGame().getTriggerHandler().runTrigger(TriggerType.LosesGame, runParams); } } diff --git a/src/main/java/forge/card/trigger/TriggerLosesGame.java b/src/main/java/forge/card/trigger/TriggerLosesGame.java new file mode 100644 index 00000000000..426eacb4652 --- /dev/null +++ b/src/main/java/forge/card/trigger/TriggerLosesGame.java @@ -0,0 +1,60 @@ +package forge.card.trigger; + +import java.util.HashMap; + +import forge.Card; +import forge.card.TriggerReplacementBase; +import forge.card.spellability.SpellAbility; + +/** + * TODO: Write javadoc for this type. + * + */ +public class TriggerLosesGame extends Trigger { + /** + *

+ * Constructor for Trigger_Shuffled. + *

+ * + * @param params + * a {@link java.util.HashMap} object. + * @param host + * a {@link forge.Card} object. + * @param intrinsic + * the intrinsic + */ + public TriggerLosesGame(final HashMap params, final Card host, final boolean intrinsic) { + super(params, host, intrinsic); + } + + /** {@inheritDoc} */ + @Override + public final boolean performTest(final java.util.Map runParams2) { + if (this.getMapParams().containsKey("ValidPlayer")) { + if (!matchesValid(runParams2.get("Player"), this.getMapParams().get("ValidPlayer").split(","), + this.getHostCard())) { + return false; + } + } + + return true; + } + + /** {@inheritDoc} */ + @Override + public final Trigger getCopy() { + final Trigger copy = new TriggerLosesGame(this.getMapParams(), this.getHostCard(), this.isIntrinsic()); + if (this.getOverridingAbility() != null) { + copy.setOverridingAbility(this.getOverridingAbility()); + } + + copyFieldsTo(copy); + return copy; + } + + /** {@inheritDoc} */ + @Override + public final void setTriggeringObjects(final SpellAbility sa) { + sa.setTriggeringObject("Player", this.getRunParams().get("Player")); + } +} diff --git a/src/main/java/forge/card/trigger/TriggerType.java b/src/main/java/forge/card/trigger/TriggerType.java index 1de9944162e..46e35b735bf 100644 --- a/src/main/java/forge/card/trigger/TriggerType.java +++ b/src/main/java/forge/card/trigger/TriggerType.java @@ -46,7 +46,8 @@ public enum TriggerType { Drawn(TriggerDrawn.class), Discarded(TriggerDiscarded.class), Shuffled(TriggerShuffled.class), - LandPlayed(TriggerLandPlayed.class); + LandPlayed(TriggerLandPlayed.class), + LosesGame(TriggerLosesGame.class); private final Class classTrigger; private TriggerType(Class clasz) {