- They do nothing. (Added Pyromancer's Goggles)

This commit is contained in:
Sol
2016-04-26 01:00:02 +00:00
parent 7d646dc1b7
commit 632b34e13c
7 changed files with 52 additions and 5 deletions

1
.gitattributes vendored
View File

@@ -11678,6 +11678,7 @@ forge-gui/res/cardsfolder/p/pyrokinesis.txt svneol=native#text/plain
forge-gui/res/cardsfolder/p/pyromancer_ascension.txt -text svneol=unset#text/plain
forge-gui/res/cardsfolder/p/pyromancers_assault.txt -text
forge-gui/res/cardsfolder/p/pyromancers_gauntlet.txt -text
forge-gui/res/cardsfolder/p/pyromancers_goggles.txt -text
forge-gui/res/cardsfolder/p/pyromancers_swath.txt svneol=native#text/plain
forge-gui/res/cardsfolder/p/pyromancy.txt svneol=native#text/plain
forge-gui/res/cardsfolder/p/pyromania.txt svneol=native#text/plain

View File

@@ -229,7 +229,7 @@ public class ComputerUtilMana {
// get a mana of this type from floating, bail if none available
final Mana mana = getMana(ai, part, sa, cost.getSourceRestriction(), (byte) -1);
if (mana != null) {
if (ai.getManaPool().tryPayCostWithMana(sa, cost, mana)) {
if (ai.getManaPool().tryPayCostWithMana(sa, cost, mana, false)) {
manaSpentToPay.add(0, mana);
}
}
@@ -502,7 +502,7 @@ public class ComputerUtilMana {
// get a mana of this type from floating, bail if none available
final Mana mana = getMana(ai, part, sa, cost.getSourceRestriction(), hasConverge ? cost.getColorsPaid() : -1);
if (mana != null) {
if (ai.getManaPool().tryPayCostWithMana(sa, cost, mana)) {
if (ai.getManaPool().tryPayCostWithMana(sa, cost, mana, test)) {
manaSpentToPay.add(0, mana);
}
}

View File

@@ -113,6 +113,10 @@ public class Mana {
return this.manaAbility.getKeywords();
}
public final boolean triggersWhenSpent() {
return this.manaAbility != null && manaAbility.getTriggersWhenSpent();
}
public final byte getColor() {
return this.color;
}

View File

@@ -194,7 +194,7 @@ public class ManaPool implements Iterable<Mana> {
paidAbs.add(saPayment); // assumes some part on the mana produced by the ability will get used
for (final Mana mana : abManaPart.getLastManaProduced()) {
if (tryPayCostWithMana(saPaidFor, manaCost, mana)) {
if (tryPayCostWithMana(saPaidFor, manaCost, mana, false)) {
saPaidFor.getPayingMana().add(0, mana);
}
}
@@ -218,19 +218,25 @@ public class ManaPool implements Iterable<Mana> {
break;
}
if (manaFound != null && tryPayCostWithMana(saPaidFor, manaCost, manaFound)) {
if (manaFound != null && tryPayCostWithMana(saPaidFor, manaCost, manaFound, false)) {
saPaidFor.getPayingMana().add(0, manaFound);
return true;
}
return false;
}
public boolean tryPayCostWithMana(final SpellAbility sa, ManaCostBeingPaid manaCost, final Mana mana) {
public boolean tryPayCostWithMana(final SpellAbility sa, ManaCostBeingPaid manaCost, final Mana mana, boolean test) {
if (!manaCost.isNeeded(mana, this)) {
return false;
}
manaCost.payMana(mana, this);
removeMana(mana);
if (test) {
// If just testing, should I be running special mana bonuses?
return true;
}
if (mana.addsNoCounterMagic(sa) && sa.getHostCard() != null) {
sa.getHostCard().setCanCounter(false);
}
@@ -267,6 +273,9 @@ public class ManaPool implements Iterable<Mana> {
if (mana.addsCounters(sa)) {
mana.getManaAbility().createETBCounters(sa.getHostCard());
}
if (mana.triggersWhenSpent()) {
mana.getManaAbility().addTriggersWhenSpent(sa, sa.getHostCard());
}
}
return true;
}

View File

@@ -25,6 +25,8 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import forge.card.mana.ManaAtom;
import forge.game.trigger.Trigger;
import forge.game.trigger.TriggerHandler;
import org.apache.commons.lang3.StringUtils;
import forge.card.ColorSet;
@@ -59,6 +61,7 @@ public class AbilityManaPart implements java.io.Serializable {
private final String addsKeyowrdsType;
private final String addsKeywordsUntil;
private final String addsCounters;
private final String triggersWhenSpent;
private final boolean persistentMana;
private String manaReplaceType;
@@ -88,6 +91,7 @@ public class AbilityManaPart implements java.io.Serializable {
this.addsKeyowrdsType = params.get("AddsKeywordsType");
this.addsKeywordsUntil = params.get("AddsKeywordsUntil");
this.addsCounters = params.get("AddsCounters");
this.triggersWhenSpent = params.get("TriggersWhenSpent");
this.persistentMana = (null == params.get("PersistentMana")) ? false :
"True".equalsIgnoreCase(params.get("PersistentMana"));
this.manaReplaceType = params.containsKey("ManaReplaceType") ? params.get("ManaReplaceType") : "";
@@ -268,6 +272,19 @@ public class AbilityManaPart implements java.io.Serializable {
}
}
public boolean getTriggersWhenSpent() {
return this.triggersWhenSpent != null;
}
public void addTriggersWhenSpent(SpellAbility saBeingPaid, Card card) {
if (this.triggersWhenSpent == null)
return;
TriggerHandler handler = card.getGame().getTriggerHandler();
Trigger trig = TriggerHandler.parseTrigger(sourceCard.getSVar(this.triggersWhenSpent), sourceCard, false);
handler.registerOneTrigger(trig);
}
/**
* <p>
* getManaRestrictions.

View File

@@ -241,6 +241,14 @@ public class TriggerHandler {
}
}
public final boolean registerOneTrigger(final Trigger t) {
if (isTriggerActive(t)) {
activeTriggers.add(t);
return true;
}
return false;
}
public final void runTrigger(final TriggerType mode, final Map<String, Object> runParams, boolean holdTrigger) {
if (suppressedModes.contains(mode)) {
return;

View File

@@ -0,0 +1,8 @@
Name:Pyromancer's Goggles
ManaCost:5
Types:Legendary Artifact
A:AB$ Mana | Cost$ T | Produced$ R | TriggersWhenSpent$ TrigCopy | SpellDescription$ Add {R} to your mana pool. When that mana is spent to cast a red instant or sorcery spell, copy that spell and you may choose new targets for the copy.
SVar:TrigCopy:Mode$ SpellCast | ValidCard$ Instant.Red,Sorcery.Red | ValidActivatingPlayer$ You | OneOff$ True | Execute$ TrigCopyMain | TriggerDescription$ When that mana is spent to cast a red instant or sorcery spell, copy that spell and you may choose new targets for the copy.
SVar:TrigCopyMain:DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | SubAbility$ DBCleanup
SVar:Picture:http://www.wizards.com/global/images/magic/general/pyromancers_goggles.jpg
Oracle:{T}: Add {R} to your mana pool. When that mana is spent to cast a red instant or sorcery spell, copy that spell and you may choose new targets for the copy.