diff --git a/.gitattributes b/.gitattributes index 48d1a3b98ba..16b950f8e3f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -471,6 +471,7 @@ forge-gui/res/cardsfolder/a/arbalest_elite.txt svneol=native#text/plain forge-gui/res/cardsfolder/a/arbiter_of_knollridge.txt svneol=native#text/plain forge-gui/res/cardsfolder/a/arbor_colossus.txt -text forge-gui/res/cardsfolder/a/arbor_elf.txt svneol=native#text/plain +forge-gui/res/cardsfolder/a/arboria.txt -text forge-gui/res/cardsfolder/a/arc_blade.txt svneol=native#text/plain forge-gui/res/cardsfolder/a/arc_lightning.txt svneol=native#text/plain forge-gui/res/cardsfolder/a/arc_mage.txt svneol=native#text/plain @@ -8608,6 +8609,7 @@ forge-gui/res/cardsfolder/p/predatory_urge.txt -text forge-gui/res/cardsfolder/p/predict.txt -text forge-gui/res/cardsfolder/p/preeminent_captain.txt svneol=native#text/plain forge-gui/res/cardsfolder/p/preemptive_strike.txt svneol=native#text/plain +forge-gui/res/cardsfolder/p/premature_burial.txt -text forge-gui/res/cardsfolder/p/preordain.txt svneol=native#text/plain forge-gui/res/cardsfolder/p/prescient_chimera.txt -text forge-gui/res/cardsfolder/p/presence_of_gond.txt svneol=native#text/plain @@ -9620,6 +9622,7 @@ forge-gui/res/cardsfolder/s/sacellum_godspeaker.txt -text forge-gui/res/cardsfolder/s/sachi_daughter_of_seshiro.txt svneol=native#text/plain forge-gui/res/cardsfolder/s/sacred_boon.txt -text forge-gui/res/cardsfolder/s/sacred_foundry.txt svneol=native#text/plain +forge-gui/res/cardsfolder/s/sacred_ground.txt -text forge-gui/res/cardsfolder/s/sacred_guide.txt -text forge-gui/res/cardsfolder/s/sacred_knight.txt svneol=native#text/plain forge-gui/res/cardsfolder/s/sacred_mesa.txt -text diff --git a/forge-gui/res/cardsfolder/a/arboria.txt b/forge-gui/res/cardsfolder/a/arboria.txt new file mode 100644 index 00000000000..a0ec6ce72d0 --- /dev/null +++ b/forge-gui/res/cardsfolder/a/arboria.txt @@ -0,0 +1,12 @@ +Name:Arboria +ManaCost:2 G G +Types:World Enchantment +S:Mode$ CantAttack | ValidCard$ Creature | Target$ Player.IsNotRemembered | Description$ Creatures can't attack a player unless that player cast a spell or put a nontoken permanent onto the battlefield during his or her last turn. +T:Mode$ Phase | Phase$ Upkeep | Execute$ TrigForget | Static$ True +SVar:TrigForget:DB$ Pump | ForgetObjects$ TriggeredPlayer +T:Mode$ SpellCast | ValidActivatingPlayer$ ActivePlayer | Execute$ TrigRemember | Static$ True +SVar:TrigRemember:DB$ Pump | RememberObjects$ TriggeredActivator +T:Mode$ ChangesZone | ValidCard$ Permanent.nonToken+ActivePlayerCtrl | Origin$ Any | Destination$ Battlefield | Execute$ TrigRemember2 | Static$ True +SVar:TrigRemember2:DB$ Pump | RememberObjects$ TriggeredCardController +SVar:Picture:http://www.wizards.com/global/images/magic/general/arboria.jpg +Oracle:Creatures can't attack a player unless that player cast a spell or put a nontoken permanent onto the battlefield during his or her last turn. diff --git a/forge-gui/res/cardsfolder/p/premature_burial.txt b/forge-gui/res/cardsfolder/p/premature_burial.txt new file mode 100644 index 00000000000..782829c692c --- /dev/null +++ b/forge-gui/res/cardsfolder/p/premature_burial.txt @@ -0,0 +1,10 @@ +Name:Premature Burial +ManaCost:1 B +Types:Sorcery +A:SP$ Destroy | Cost$ 1 B | ValidTgts$ Creature.IsRemembered | TgtPrompt$ Select target nonblack creature that entered the battlefield since your last turn ended | SpellDescription$ Destroy target nonblack creature that entered the battlefield since your last turn ended. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.nonBlack | Static$ True | Execute$ TrigRemember +SVar:TrigRemember:DB$ Pump | RememberObjects$ TriggeredCard +T:Mode$ Phase | Phase$ Cleanup | ValidPlayer$ You | Execute$ TrigCleanup | Static$ True +SVar:TrigCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:Picture:http://www.wizards.com/global/images/magic/general/premature_burial.jpg +Oracle:Destroy target nonblack creature that entered the battlefield since your last turn ended. diff --git a/forge-gui/res/cardsfolder/s/sacred_ground.txt b/forge-gui/res/cardsfolder/s/sacred_ground.txt new file mode 100644 index 00000000000..52b19cedd5b --- /dev/null +++ b/forge-gui/res/cardsfolder/s/sacred_ground.txt @@ -0,0 +1,9 @@ +Name:Sacred Ground +ManaCost:1 W +Types:Enchantment +T:Mode$ Sacrificed | ValidCard$ Land.YouOwn | ValidSourceController$ Player.Opponent | Execute$ TrigReturn | TriggerZones$ Battlefield | TriggerDescription$ Whenever a spell or ability an opponent controls causes a land to be put into your graveyard from the battlefield, return that card to the battlefield. +T:Mode$ Destroyed | ValidCauser$ Player.Opponent | ValidCard$ Land.YouOwn | Execute$ TrigReturn | Secondary$ True | TriggerZones$ Battlefield | TriggerDescription$ Whenever a spell or ability an opponent controls causes a land to be put into your graveyard from the battlefield, return that card to the battlefield. +SVar:TrigReturn:AB$ ChangeZone | Cost$ 0 | Defined$ TriggeredCard | Origin$ Graveyard | Destination$ Battlefield +SVar:RemRandomDeck:True +SVar:Picture:http://www.wizards.com/global/images/magic/general/sacred_ground.jpg +Oracle:Whenever a spell or ability an opponent controls causes a land to be put into your graveyard from the battlefield, return that card to the battlefield. diff --git a/forge-gui/src/main/java/forge/card/ability/AbilityUtils.java b/forge-gui/src/main/java/forge/card/ability/AbilityUtils.java index 8cd993ee184..8a0126ae0b8 100644 --- a/forge-gui/src/main/java/forge/card/ability/AbilityUtils.java +++ b/forge-gui/src/main/java/forge/card/ability/AbilityUtils.java @@ -978,6 +978,8 @@ public class AbilityUtils { } } } + } else if (defined.equals("ActivePlayer")) { + players.add(game.getPhaseHandler().getPlayerTurn()); } else if (defined.equals("You")) { players.add(sa.getActivatingPlayer()); } else if (defined.equals("Each")) { diff --git a/forge-gui/src/main/java/forge/card/trigger/TriggerSacrificed.java b/forge-gui/src/main/java/forge/card/trigger/TriggerSacrificed.java index a96e4da7da0..4f0505abd15 100644 --- a/forge-gui/src/main/java/forge/card/trigger/TriggerSacrificed.java +++ b/forge-gui/src/main/java/forge/card/trigger/TriggerSacrificed.java @@ -50,6 +50,7 @@ public class TriggerSacrificed extends Trigger { @Override public final boolean performTest(final java.util.Map runParams2) { final Card sac = (Card) runParams2.get("Card"); + final SpellAbility sourceSA = (SpellAbility) runParams2.get("Cause"); if (this.mapParams.containsKey("ValidPlayer")) { if (!matchesValid(sac.getController(), this.mapParams.get("ValidPlayer").split(","), this.getHostCard())) { @@ -62,6 +63,12 @@ public class TriggerSacrificed extends Trigger { return false; } } + if (this.mapParams.containsKey("ValidSourceController")) { + if (sourceSA == null || !sourceSA.getActivatingPlayer().isValid(this.mapParams.get("ValidSourceController"), + this.getHostCard().getController(), this.getHostCard())) { + return false; + } + } return true; } diff --git a/forge-gui/src/main/java/forge/game/GameAction.java b/forge-gui/src/main/java/forge/game/GameAction.java index 60fd871e89e..fe067a6c1bc 100644 --- a/forge-gui/src/main/java/forge/game/GameAction.java +++ b/forge-gui/src/main/java/forge/game/GameAction.java @@ -1210,6 +1210,7 @@ public class GameAction { // Run triggers final HashMap runParams = new HashMap(); runParams.put("Card", c); + runParams.put("Cause", source); game.getTriggerHandler().runTrigger(TriggerType.Sacrificed, runParams, false); return true; }