- Added Bloodlord of Vaasgoth (scripted by moomarc)

This commit is contained in:
swordshine
2013-06-26 12:36:13 +00:00
parent df11323434
commit 5fad51e876
23 changed files with 105 additions and 42 deletions

1
.gitattributes vendored
View File

@@ -1116,6 +1116,7 @@ res/cardsfolder/b/bloodied_ghost.txt svneol=native#text/plain
res/cardsfolder/b/bloodletter_quill.txt svneol=native#text/plain res/cardsfolder/b/bloodletter_quill.txt svneol=native#text/plain
res/cardsfolder/b/bloodline_keeper_lord_of_lineage.txt -text res/cardsfolder/b/bloodline_keeper_lord_of_lineage.txt -text
res/cardsfolder/b/bloodline_shaman.txt -text res/cardsfolder/b/bloodline_shaman.txt -text
res/cardsfolder/b/bloodlord_of_vaasgoth.txt -text
res/cardsfolder/b/bloodmark_mentor.txt svneol=native#text/plain res/cardsfolder/b/bloodmark_mentor.txt svneol=native#text/plain
res/cardsfolder/b/bloodpyre_elemental.txt svneol=native#text/plain res/cardsfolder/b/bloodpyre_elemental.txt svneol=native#text/plain
res/cardsfolder/b/bloodrage_vampire.txt svneol=native#text/plain res/cardsfolder/b/bloodrage_vampire.txt svneol=native#text/plain

View File

@@ -0,0 +1,13 @@
Name:Bloodlord of Vaasgoth
ManaCost:3 B B
Types:Creature Vampire Warrior
PT:3/3
K:Bloodthirst 3
K:Flying
T:Mode$ SpellCast | ValidCard$ Creature.Vampire | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ BloodPump | TriggerDescription$ Whenever you cast a Vampire creature spell, it gains bloodthirst 3.
SVar:BloodPump:AB$ Animate | Cost$ 0 | Defined$ TriggeredCard | Replacements$ etbBloodthirst | sVars$ VaasgothETB,BloodthirstCounters | Permanent$ True
SVar:etbBloodthirst:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | Bloodthirst$ True | ReplaceWith$ VaasgothETB | Description$ Bloodthirst 3 (If an opponent was dealt damage this turn, this creature enters the battlefield with three +1/+1 counters on it.)
SVar:VaasgothETB:AB$ ChangeZone | Cost$ 0 | Hidden$ True | Origin$ All | Destination$ Battlefield | Defined$ ReplacedCard | SubAbility$ BloodthirstCounters
SVar:BloodthirstCounters:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 3
SVar:Picture:http://www.wizards.com/global/images/magic/general/bloodlord_of_vaasgoth.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\nWhenever you cast a Vampire creature spell, it gains bloodthirst 3.

View File

@@ -8147,7 +8147,7 @@ public class Card extends GameEntity implements Comparable<Card> {
public void setReplacementEffects(final List<ReplacementEffect> res) { public void setReplacementEffects(final List<ReplacementEffect> res) {
this.getCharacteristics().getReplacementEffects().clear(); this.getCharacteristics().getReplacementEffects().clear();
for (final ReplacementEffect replacementEffect : res) { for (final ReplacementEffect replacementEffect : res) {
if (!replacementEffect.isTemporary()) { if (replacementEffect.isIntrinsic()) {
this.addReplacementEffect(replacementEffect); this.addReplacementEffect(replacementEffect);
} }
} }

View File

@@ -13,6 +13,7 @@ import forge.card.TriggerReplacementBase;
import forge.card.ability.AbilityFactory; import forge.card.ability.AbilityFactory;
import forge.card.ability.AbilityUtils; import forge.card.ability.AbilityUtils;
import forge.card.replacement.ReplacementEffect; import forge.card.replacement.ReplacementEffect;
import forge.card.replacement.ReplacementHandler;
import forge.card.spellability.SpellAbility; import forge.card.spellability.SpellAbility;
import forge.card.staticability.StaticAbility; import forge.card.staticability.StaticAbility;
import forge.card.trigger.Trigger; import forge.card.trigger.Trigger;
@@ -100,7 +101,11 @@ public class AnimateAllEffect extends AnimateEffectBase {
if (sa.hasParam("Abilities")) { if (sa.hasParam("Abilities")) {
abilities.addAll(Arrays.asList(sa.getParam("Abilities").split(","))); abilities.addAll(Arrays.asList(sa.getParam("Abilities").split(",")));
} }
// replacement effects to add to the animated being
final ArrayList<String> replacements = new ArrayList<String>();
if (sa.hasParam("Replacements")) {
replacements.addAll(Arrays.asList(sa.getParam("Replacements").split(",")));
}
// triggers to add to the animated being // triggers to add to the animated being
final ArrayList<String> triggers = new ArrayList<String>(); final ArrayList<String> triggers = new ArrayList<String>();
if (sa.hasParam("Triggers")) { if (sa.hasParam("Triggers")) {
@@ -156,7 +161,15 @@ public class AnimateAllEffect extends AnimateEffectBase {
} }
} }
} }
// give replacement effects
final ArrayList<ReplacementEffect> addedReplacements = new ArrayList<ReplacementEffect>();
if (replacements.size() > 0) {
for (final String s : replacements) {
final String actualReplacement = host.getSVar(s);
final ReplacementEffect parsedReplacement = ReplacementHandler.parseReplacement(actualReplacement, c, false);
addedReplacements.add(c.addReplacementEffect(parsedReplacement));
}
}
// Grant triggers // Grant triggers
final ArrayList<Trigger> addedTriggers = new ArrayList<Trigger>(); final ArrayList<Trigger> addedTriggers = new ArrayList<Trigger>();
if (triggers.size() > 0) { if (triggers.size() > 0) {
@@ -210,7 +223,7 @@ public class AnimateAllEffect extends AnimateEffectBase {
@Override @Override
public void run() { public void run() {
doUnanimate(c, sa, finalDesc, hiddenKeywords, addedAbilities, addedTriggers, doUnanimate(c, sa, finalDesc, hiddenKeywords, addedAbilities, addedTriggers, addedReplacements,
colorTimestamp, false, removedAbilities, timestamp); colorTimestamp, false, removedAbilities, timestamp);
// give back suppressed triggers // give back suppressed triggers

View File

@@ -12,6 +12,7 @@ import forge.card.TriggerReplacementBase;
import forge.card.ability.AbilityFactory; import forge.card.ability.AbilityFactory;
import forge.card.ability.AbilityUtils; import forge.card.ability.AbilityUtils;
import forge.card.replacement.ReplacementEffect; import forge.card.replacement.ReplacementEffect;
import forge.card.replacement.ReplacementHandler;
import forge.card.spellability.SpellAbility; import forge.card.spellability.SpellAbility;
import forge.card.staticability.StaticAbility; import forge.card.staticability.StaticAbility;
import forge.card.trigger.Trigger; import forge.card.trigger.Trigger;
@@ -117,6 +118,12 @@ public class AnimateEffect extends AnimateEffectBase {
abilities.addAll(Arrays.asList(sa.getParam("Abilities").split(","))); abilities.addAll(Arrays.asList(sa.getParam("Abilities").split(",")));
} }
// replacement effects to add to the animated being
final ArrayList<String> replacements = new ArrayList<String>();
if (sa.hasParam("Replacements")) {
replacements.addAll(Arrays.asList(sa.getParam("Replacements").split(",")));
}
// triggers to add to the animated being // triggers to add to the animated being
final ArrayList<String> triggers = new ArrayList<String>(); final ArrayList<String> triggers = new ArrayList<String>();
if (sa.hasParam("Triggers")) { if (sa.hasParam("Triggers")) {
@@ -179,6 +186,16 @@ public class AnimateEffect extends AnimateEffectBase {
} }
} }
// give replacement effects
final ArrayList<ReplacementEffect> addedReplacements = new ArrayList<ReplacementEffect>();
if (replacements.size() > 0) {
for (final String s : replacements) {
final String actualReplacement = source.getSVar(s);
final ReplacementEffect parsedReplacement = ReplacementHandler.parseReplacement(actualReplacement, c, false);
addedReplacements.add(c.addReplacementEffect(parsedReplacement));
}
}
// suppress triggers from the animated card // suppress triggers from the animated card
final ArrayList<Trigger> removedTriggers = new ArrayList<Trigger>(); final ArrayList<Trigger> removedTriggers = new ArrayList<Trigger>();
if (sa.hasParam("OverwriteTriggers") || removeAll) { if (sa.hasParam("OverwriteTriggers") || removeAll) {
@@ -239,7 +256,7 @@ public class AnimateEffect extends AnimateEffectBase {
@Override @Override
public void run() { public void run() {
doUnanimate(c, sa, finalDesc, hiddenKeywords, addedAbilities, addedTriggers, doUnanimate(c, sa, finalDesc, hiddenKeywords, addedAbilities, addedTriggers, addedReplacements,
colorTimestamp, givesStAbs, removedAbilities, timestamp); colorTimestamp, givesStAbs, removedAbilities, timestamp);
// give back suppressed triggers // give back suppressed triggers

View File

@@ -21,6 +21,7 @@ import java.util.ArrayList;
import forge.Card; import forge.Card;
import forge.card.ability.SpellAbilityEffect; import forge.card.ability.SpellAbilityEffect;
import forge.card.replacement.ReplacementEffect;
import forge.card.spellability.SpellAbility; import forge.card.spellability.SpellAbility;
import forge.card.staticability.StaticAbility; import forge.card.staticability.StaticAbility;
import forge.card.trigger.Trigger; import forge.card.trigger.Trigger;
@@ -134,7 +135,8 @@ public abstract class AnimateEffectBase extends SpellAbilityEffect {
*/ */
void doUnanimate(final Card c, SpellAbility sa, final String colorDesc, void doUnanimate(final Card c, SpellAbility sa, final String colorDesc,
final ArrayList<String> hiddenKeywords, final ArrayList<SpellAbility> addedAbilities, final ArrayList<String> hiddenKeywords, final ArrayList<SpellAbility> addedAbilities,
final ArrayList<Trigger> addedTriggers, final long colorTimestamp, final boolean givesStAbs, final ArrayList<Trigger> addedTriggers, final ArrayList<ReplacementEffect> addedReplacements,
final long colorTimestamp, final boolean givesStAbs,
final ArrayList<SpellAbility> removedAbilities, final long timestamp) { final ArrayList<SpellAbility> removedAbilities, final long timestamp) {
c.removeNewPT(timestamp); c.removeNewPT(timestamp);
@@ -169,6 +171,10 @@ public abstract class AnimateEffectBase extends SpellAbilityEffect {
c.removeTrigger(t); c.removeTrigger(t);
} }
for (final ReplacementEffect rep : addedReplacements) {
c.getReplacementEffects().remove(rep);
}
// any other unanimate cleanup // any other unanimate cleanup
if (!c.isCreature()) { if (!c.isCreature()) {
c.unEquipAllCards(); c.unEquipAllCards();

View File

@@ -146,7 +146,7 @@ public class EffectEffect extends SpellAbilityEffect {
for (final String s : effectReplacementEffects) { for (final String s : effectReplacementEffects) {
final String actualReplacement = hostCard.getSVar(s); final String actualReplacement = hostCard.getSVar(s);
final ReplacementEffect parsedReplacement = ReplacementHandler.parseReplacement(actualReplacement, eff); final ReplacementEffect parsedReplacement = ReplacementHandler.parseReplacement(actualReplacement, eff, true);
eff.addReplacementEffect(parsedReplacement); eff.addReplacementEffect(parsedReplacement);
} }
} }

View File

@@ -340,7 +340,7 @@ public class CardFactory {
//Planeswalker damage redirection //Planeswalker damage redirection
card.addReplacementEffect(ReplacementHandler.parseReplacement("Event$ DamageDone | ActiveZones$ Battlefield | IsCombat$ False | ValidSource$ Card.YouDontCtrl" card.addReplacementEffect(ReplacementHandler.parseReplacement("Event$ DamageDone | ActiveZones$ Battlefield | IsCombat$ False | ValidSource$ Card.YouDontCtrl"
+ " | ValidTarget$ You | Optional$ True | OptionalDecider$ Opponent | ReplaceWith$ DamagePW | Secondary$ True" + " | ValidTarget$ You | Optional$ True | OptionalDecider$ Opponent | ReplaceWith$ DamagePW | Secondary$ True"
+ " | AICheckSVar$ DamagePWAI | AISVarCompare$ GT4 | Description$ Redirect damage to " + card.toString(), card)); + " | AICheckSVar$ DamagePWAI | AISVarCompare$ GT4 | Description$ Redirect damage to " + card.toString(), card, true));
card.setSVar("DamagePW", "AB$DealDamage | Cost$ 0 | Defined$ Self | NumDmg$ DamagePWX | DamageSource$ ReplacedSource | References$ DamagePWX,DamagePWAI"); card.setSVar("DamagePW", "AB$DealDamage | Cost$ 0 | Defined$ Self | NumDmg$ DamagePWX | DamageSource$ ReplacedSource | References$ DamagePWX,DamagePWAI");
card.setSVar("DamagePWX", "ReplaceCount$DamageAmount"); card.setSVar("DamagePWX", "ReplaceCount$DamageAmount");
card.setSVar("DamagePWAI", "ReplaceCount$DamageAmount/NMinus.DamagePWY"); card.setSVar("DamagePWAI", "ReplaceCount$DamageAmount/NMinus.DamagePWY");
@@ -400,7 +400,7 @@ public class CardFactory {
private static void readCardFace(Card c, ICardFace face) { private static void readCardFace(Card c, ICardFace face) {
for(String a : face.getAbilities()) c.addIntrinsicAbility(a); for(String a : face.getAbilities()) c.addIntrinsicAbility(a);
for(String k : face.getKeywords()) c.addIntrinsicKeyword(k); for(String k : face.getKeywords()) c.addIntrinsicKeyword(k);
for(String r : face.getReplacements()) c.addReplacementEffect(ReplacementHandler.parseReplacement(r, c)); for(String r : face.getReplacements()) c.addReplacementEffect(ReplacementHandler.parseReplacement(r, c, true));
for(String s : face.getStaticAbilities()) c.addStaticAbilityString(s); for(String s : face.getStaticAbilities()) c.addStaticAbilityString(s);
for(String t : face.getTriggers()) c.addTrigger(TriggerHandler.parseTrigger(t, c, true)); for(String t : face.getTriggers()) c.addTrigger(TriggerHandler.parseTrigger(t, c, true));
for(Entry<String, String> v : face.getVariables()) c.setSVar(v.getKey(), v.getValue()); for(Entry<String, String> v : face.getVariables()) c.setSVar(v.getKey(), v.getValue());

View File

@@ -2649,7 +2649,7 @@ public class CardFactoryUtil {
} }
} }
ReplacementEffect re = ReplacementHandler.parseReplacement(repEffsb.toString(), card); ReplacementEffect re = ReplacementHandler.parseReplacement(repEffsb.toString(), card, true);
re.setLayer(layer); re.setLayer(layer);
re.setOverridingAbility(repAb); re.setOverridingAbility(repAb);
@@ -2687,7 +2687,7 @@ public class CardFactoryUtil {
String repeffstr = "Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield " String repeffstr = "Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield "
+ "| ReplaceWith$ ETBCounterSVar | Description$ " + desc + (!extraparams.equals("") ? " | " + extraparams : ""); + "| ReplaceWith$ ETBCounterSVar | Description$ " + desc + (!extraparams.equals("") ? " | " + extraparams : "");
ReplacementEffect re = ReplacementHandler.parseReplacement(repeffstr, card); ReplacementEffect re = ReplacementHandler.parseReplacement(repeffstr, card, true);
re.setLayer(ReplacementLayer.Other); re.setLayer(ReplacementLayer.Other);
card.addReplacementEffect(re); card.addReplacementEffect(re);
@@ -2705,7 +2705,7 @@ public class CardFactoryUtil {
String repeffstr = "Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield " String repeffstr = "Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield "
+ "| ReplaceWith$ ETBTappedSVar | Description$ CARDNAME enters the battlefield tapped."; + "| ReplaceWith$ ETBTappedSVar | Description$ CARDNAME enters the battlefield tapped.";
ReplacementEffect re = ReplacementHandler.parseReplacement(repeffstr, card); ReplacementEffect re = ReplacementHandler.parseReplacement(repeffstr, card, true);
re.setLayer(ReplacementLayer.Other); re.setLayer(ReplacementLayer.Other);
card.addReplacementEffect(re); card.addReplacementEffect(re);
@@ -3318,7 +3318,7 @@ public class CardFactoryUtil {
} }
if( hasKw ) { if( hasKw ) {
ReplacementEffect re = ReplacementHandler.parseReplacement("Event$ Destroy | ActiveZones$ Battlefield | ValidCard$ Card.EnchantedBy | ReplaceWith$ RegenTA | Secondary$ True | TotemArmor$ True | Description$ Totem armor - " + c, c); ReplacementEffect re = ReplacementHandler.parseReplacement("Event$ Destroy | ActiveZones$ Battlefield | ValidCard$ Card.EnchantedBy | ReplaceWith$ RegenTA | Secondary$ True | TotemArmor$ True | Description$ Totem armor - " + c, c, true);
c.getSVars().put("RegenTA", "AB$ DealDamage | Cost$ 0 | Defined$ ReplacedCard | Remove$ All | SubAbility$ DestroyMe"); c.getSVars().put("RegenTA", "AB$ DealDamage | Cost$ 0 | Defined$ ReplacedCard | Remove$ All | SubAbility$ DestroyMe");
c.getSVars().put("DestroyMe", "DB$ Destroy | Defined$ Self"); c.getSVars().put("DestroyMe", "DB$ Destroy | Defined$ Self");
c.getReplacementEffects().add(re); c.getReplacementEffects().add(re);

View File

@@ -34,8 +34,8 @@ public class ReplaceCounter extends ReplacementEffect {
* @param map the map * @param map the map
* @param host the host * @param host the host
*/ */
public ReplaceCounter(Map<String, String> map, Card host) { public ReplaceCounter(Map<String, String> map, Card host, boolean intrinsic) {
super(map, host); super(map, host, intrinsic);
} }
/* (non-Javadoc) /* (non-Javadoc)

View File

@@ -36,8 +36,8 @@ public class ReplaceDamage extends ReplacementEffect {
* @param map the map * @param map the map
* @param host the host * @param host the host
*/ */
public ReplaceDamage(Map<String, String> map, Card host) { public ReplaceDamage(Map<String, String> map, Card host, boolean intrinsic) {
super(map, host); super(map, host, intrinsic);
} }
/* (non-Javadoc) /* (non-Javadoc)

View File

@@ -34,8 +34,8 @@ public class ReplaceDestroy extends ReplacementEffect {
* @param params the params * @param params the params
* @param host the host * @param host the host
*/ */
public ReplaceDestroy(final Map<String, String> params, final Card host) { public ReplaceDestroy(final Map<String, String> params, final Card host, final boolean intrinsic) {
super(params, host); super(params, host, intrinsic);
} }
/* (non-Javadoc) /* (non-Javadoc)

View File

@@ -34,8 +34,8 @@ public class ReplaceDiscard extends ReplacementEffect {
* @param params the params * @param params the params
* @param host the host * @param host the host
*/ */
public ReplaceDiscard(final Map<String, String> params, final Card host) { public ReplaceDiscard(final Map<String, String> params, final Card host, final boolean intrinsic) {
super(params, host); super(params, host, intrinsic);
} }
/* (non-Javadoc) /* (non-Javadoc)

View File

@@ -36,8 +36,8 @@ public class ReplaceDraw extends ReplacementEffect {
* @param params the params * @param params the params
* @param host the host * @param host the host
*/ */
public ReplaceDraw(final Map<String, String> params, final Card host) { public ReplaceDraw(final Map<String, String> params, final Card host, final boolean intrinsic) {
super(params, host); super(params, host, intrinsic);
} }
/* (non-Javadoc) /* (non-Javadoc)

View File

@@ -34,8 +34,8 @@ public class ReplaceGainLife extends ReplacementEffect {
* @param map the map * @param map the map
* @param host the host * @param host the host
*/ */
public ReplaceGainLife(Map<String, String> map, Card host) { public ReplaceGainLife(Map<String, String> map, Card host, boolean intrinsic) {
super(map, host); super(map, host, intrinsic);
} }
/* (non-Javadoc) /* (non-Javadoc)

View File

@@ -16,8 +16,8 @@ public class ReplaceGameLoss extends ReplacementEffect {
* @param map the map * @param map the map
* @param host the host * @param host the host
*/ */
public ReplaceGameLoss(Map<String, String> map, Card host) { public ReplaceGameLoss(Map<String, String> map, Card host, boolean intrinsic) {
super(map, host); super(map, host, intrinsic);
} }
/* (non-Javadoc) /* (non-Javadoc)

View File

@@ -18,8 +18,8 @@ public class ReplaceMoved extends ReplacementEffect {
* @param mapParams &emsp; HashMap<String, String> * @param mapParams &emsp; HashMap<String, String>
* @param host &emsp; Card * @param host &emsp; Card
*/ */
public ReplaceMoved(final Map<String, String> mapParams, final Card host) { public ReplaceMoved(final Map<String, String> mapParams, final Card host, final boolean intrinsic) {
super(mapParams, host); super(mapParams, host, intrinsic);
} }
/* (non-Javadoc) /* (non-Javadoc)

View File

@@ -33,8 +33,8 @@ public class ReplaceSetInMotion extends ReplacementEffect {
* @param params the params * @param params the params
* @param host the host * @param host the host
*/ */
public ReplaceSetInMotion(final Map<String, String> params, final Card host) { public ReplaceSetInMotion(final Map<String, String> params, final Card host, final boolean intrinsic) {
super(params, host); super(params, host, intrinsic);
} }
/* (non-Javadoc) /* (non-Javadoc)

View File

@@ -17,8 +17,8 @@ public class ReplaceTurnFaceUp extends ReplacementEffect {
* @param mapParams &emsp; HashMap<String, String> * @param mapParams &emsp; HashMap<String, String>
* @param host &emsp; Card * @param host &emsp; Card
*/ */
public ReplaceTurnFaceUp(final Map<String, String> mapParams, final Card host) { public ReplaceTurnFaceUp(final Map<String, String> mapParams, final Card host, final boolean intrinsic) {
super(mapParams, host); super(mapParams, host, intrinsic);
} }
/* (non-Javadoc) /* (non-Javadoc)

View File

@@ -41,6 +41,9 @@ public abstract class ReplacementEffect extends TriggerReplacementBase {
/** The has run. */ /** The has run. */
private boolean hasRun = false; private boolean hasRun = false;
/** The is intrinsic. */
private final boolean intrinsic;
/** /**
* Checks for run. * Checks for run.
* *
@@ -61,9 +64,10 @@ public abstract class ReplacementEffect extends TriggerReplacementBase {
* @param host * @param host
* the host * the host
*/ */
public ReplacementEffect(final Map<String, String> map, final Card host) { public ReplacementEffect(final Map<String, String> map, final Card host, final boolean intrinsic) {
mapParams = map; mapParams = map;
this.setHostCard(host); this.setHostCard(host);
this.intrinsic = intrinsic;
} }
/** /**
@@ -200,10 +204,11 @@ public abstract class ReplacementEffect extends TriggerReplacementBase {
*/ */
public final ReplacementEffect getCopy() { public final ReplacementEffect getCopy() {
ReplacementType rt = ReplacementType.getTypeFor(this); ReplacementType rt = ReplacementType.getTypeFor(this);
ReplacementEffect res = rt.createReplacement(mapParams, hostCard); ReplacementEffect res = rt.createReplacement(mapParams, hostCard, intrinsic);
res.setOverridingAbility(this.getOverridingAbility()); res.setOverridingAbility(this.getOverridingAbility());
res.setActiveZone(validHostZones); res.setActiveZone(validHostZones);
res.setLayer(getLayer()); res.setLayer(getLayer());
res.setTemporary(isTemporary());
return res; return res;
} }
@@ -270,4 +275,12 @@ public abstract class ReplacementEffect extends TriggerReplacementBase {
public final boolean isTemporary() { public final boolean isTemporary() {
return this.temporary; return this.temporary;
} }
/**
* Checks if is intrinsic.
*
* @return the isIntrinsic
*/
public boolean isIntrinsic() {
return this.intrinsic;
}
} }

View File

@@ -261,10 +261,10 @@ public class ReplacementHandler {
* The cards that hosts the replacement effect. * The cards that hosts the replacement effect.
* @return A finished instance * @return A finished instance
*/ */
public static ReplacementEffect parseReplacement(final String repParse, final Card host) { public static ReplacementEffect parseReplacement(final String repParse, final Card host, final boolean intrinsic) {
final Map<String, String> mapParams = FileSection.parseToMap(repParse, "$", "|"); final Map<String, String> mapParams = FileSection.parseToMap(repParse, "$", "|");
return ReplacementHandler.parseReplacement(mapParams, host); return ReplacementHandler.parseReplacement(mapParams, host, intrinsic);
} }
/** /**
@@ -278,9 +278,9 @@ public class ReplacementHandler {
* The card that hosts the replacement effect * The card that hosts the replacement effect
* @return The finished instance * @return The finished instance
*/ */
private static ReplacementEffect parseReplacement(final Map<String, String> mapParams, final Card host) { private static ReplacementEffect parseReplacement(final Map<String, String> mapParams, final Card host, final boolean intrinsic) {
final ReplacementType rt = ReplacementType.smartValueOf(mapParams.get("Event")); final ReplacementType rt = ReplacementType.smartValueOf(mapParams.get("Event"));
ReplacementEffect ret = rt.createReplacement(mapParams, host); ReplacementEffect ret = rt.createReplacement(mapParams, host, intrinsic);
String activeZones = mapParams.get("ActiveZones"); String activeZones = mapParams.get("ActiveZones");
if (null != activeZones) { if (null != activeZones) {

View File

@@ -54,14 +54,14 @@ public enum ReplacementType {
* @param intrinsic * @param intrinsic
* @return * @return
*/ */
public ReplacementEffect createReplacement(Map<String, String> mapParams, Card host) { public ReplacementEffect createReplacement(Map<String, String> mapParams, Card host, boolean intrinsic) {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
Constructor<? extends ReplacementEffect>[] cc = (Constructor<? extends ReplacementEffect>[]) clasz.getDeclaredConstructors(); Constructor<? extends ReplacementEffect>[] cc = (Constructor<? extends ReplacementEffect>[]) clasz.getDeclaredConstructors();
for (Constructor<? extends ReplacementEffect> c : cc) { for (Constructor<? extends ReplacementEffect> c : cc) {
Class<?>[] pp = c.getParameterTypes(); Class<?>[] pp = c.getParameterTypes();
if (pp[0].isAssignableFrom(Map.class)) { if (pp[0].isAssignableFrom(Map.class)) {
try { try {
ReplacementEffect res = c.newInstance(mapParams, host); ReplacementEffect res = c.newInstance(mapParams, host, intrinsic);
return res; return res;
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
// TODO Auto-generated catch block ignores the exception, but sends it to System.err and probably forge.log. // TODO Auto-generated catch block ignores the exception, but sends it to System.err and probably forge.log.

View File

@@ -431,7 +431,7 @@ public class StaticAbilityContinuous {
// add Replacement effects // add Replacement effects
if (addReplacements != null) { if (addReplacements != null) {
for (String rep : addReplacements) { for (String rep : addReplacements) {
final ReplacementEffect actualRep = ReplacementHandler.parseReplacement(rep, affectedCard); final ReplacementEffect actualRep = ReplacementHandler.parseReplacement(rep, affectedCard, false);
affectedCard.addReplacementEffect(actualRep).setTemporary(true);; affectedCard.addReplacementEffect(actualRep).setTemporary(true);;
} }
} }