mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 20:28:00 +00:00
Impending: use Effect for Last Time counter removed (#6096)
This commit is contained in:
@@ -463,6 +463,11 @@ public abstract class SpellAbilityEffect {
|
||||
card.addChangedSVars(Collections.singletonMap("EndOfTurnLeavePlay", "AtEOT"), card.getGame().getNextTimestamp(), 0);
|
||||
}
|
||||
|
||||
protected static SpellAbility getExileSpellAbility(final Card card) {
|
||||
String effect = "DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile";
|
||||
return AbilityFactory.getAbility(effect, card);
|
||||
}
|
||||
|
||||
protected static SpellAbility getForgetSpellAbility(final Card card) {
|
||||
String forgetEffect = "DB$ Pump | ForgetObjects$ TriggeredCard";
|
||||
String exileEffect = "DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile"
|
||||
@@ -498,17 +503,15 @@ public abstract class SpellAbilityEffect {
|
||||
|
||||
protected static void addExileOnMovedTrigger(final Card card, final String zone) {
|
||||
String trig = "Mode$ ChangesZone | ValidCard$ Card.IsRemembered | Origin$ " + zone + " | Destination$ Any | TriggerZones$ Command | Static$ True";
|
||||
String effect = "DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile";
|
||||
final Trigger parsedTrigger = TriggerHandler.parseTrigger(trig, card, true);
|
||||
parsedTrigger.setOverridingAbility(AbilityFactory.getAbility(effect, card));
|
||||
parsedTrigger.setOverridingAbility(getExileSpellAbility(card));
|
||||
card.addTrigger(parsedTrigger);
|
||||
}
|
||||
|
||||
protected static void addExileOnCounteredTrigger(final Card card) {
|
||||
String trig = "Mode$ Countered | ValidCard$ Card.IsRemembered | TriggerZones$ Command | Static$ True";
|
||||
String effect = "DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile";
|
||||
final Trigger parsedTrigger = TriggerHandler.parseTrigger(trig, card, true);
|
||||
parsedTrigger.setOverridingAbility(AbilityFactory.getAbility(effect, card));
|
||||
parsedTrigger.setOverridingAbility(getExileSpellAbility(card));
|
||||
card.addTrigger(parsedTrigger);
|
||||
}
|
||||
|
||||
@@ -520,6 +523,13 @@ public abstract class SpellAbilityEffect {
|
||||
card.addTrigger(parsedTrigger);
|
||||
}
|
||||
|
||||
protected static void addExileCounterTrigger(final Card card, final String counterType) {
|
||||
String trig = "Mode$ CounterRemoved | TriggerZones$ Command | ValidCard$ Card.EffectSource | CounterType$ " + counterType + " | NewCounterAmount$ 0 | Static$ True";
|
||||
final Trigger parsedTrigger = TriggerHandler.parseTrigger(trig, card, true);
|
||||
parsedTrigger.setOverridingAbility(getExileSpellAbility(card));
|
||||
card.addTrigger(parsedTrigger);
|
||||
}
|
||||
|
||||
protected static void addForgetCounterTrigger(final Card card, final String counterType) {
|
||||
String trig = "Mode$ CounterRemoved | TriggerZones$ Command | ValidCard$ Card.IsRemembered | CounterType$ " + counterType + " | NewCounterAmount$ 0 | Static$ True";
|
||||
String trig2 = "Mode$ PhaseOut | TriggerZones$ Command | ValidCard$ Card.phasedOutIsRemembered | Static$ True";
|
||||
@@ -536,9 +546,8 @@ public abstract class SpellAbilityEffect {
|
||||
|
||||
protected static void addExileOnLostTrigger(final Card card) {
|
||||
String trig = "Mode$ LosesGame | ValidPlayer$ You | TriggerController$ Player | TriggerZones$ Command | Static$ True";
|
||||
String effect = "DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile";
|
||||
final Trigger parsedTrigger = TriggerHandler.parseTrigger(trig, card, true);
|
||||
parsedTrigger.setOverridingAbility(AbilityFactory.getAbility(effect, card));
|
||||
parsedTrigger.setOverridingAbility(getExileSpellAbility(card));
|
||||
card.addTrigger(parsedTrigger);
|
||||
}
|
||||
|
||||
|
||||
@@ -251,6 +251,10 @@ public class EffectEffect extends SpellAbilityEffect {
|
||||
addExileOnLostTrigger(eff);
|
||||
}
|
||||
|
||||
if (sa.hasParam("ExileOnCounter")) {
|
||||
addExileCounterTrigger(eff, sa.getParam("ExileOnCounter"));
|
||||
}
|
||||
|
||||
// Set Imprinted
|
||||
if (effectImprinted != null) {
|
||||
eff.addImprintedCards(AbilityUtils.getDefinedCards(hostCard, effectImprinted, sa));
|
||||
|
||||
@@ -2354,7 +2354,17 @@ public class CardFactoryUtil {
|
||||
final String effect = "DB$ PutCounter | Defined$ ReplacedCard | CounterType$ TIME | CounterNum$ " + m
|
||||
+ " | ETB$ True | SpellDescription$ " + desc;
|
||||
|
||||
final ReplacementEffect re = createETBReplacement(card, ReplacementLayer.Other, effect, false, true, intrinsic, "Card.Self+impended", "");
|
||||
SpellAbility repAb = AbilityFactory.getAbility(effect, card);
|
||||
|
||||
String staticEffect = "DB$ Effect | StaticAbilities$ NoCreature | ExileOnCounter$ TIME | Duration$ UntilHostLeavesPlay";
|
||||
|
||||
String staticNoCreature = "Mode$ Continuous | Affected$ Card.EffectSource+counters_GE1_TIME | RemoveType$ Creature | Description$ EFFECTSOURCE isn't a creature.";
|
||||
|
||||
AbilitySub effectAb = (AbilitySub)AbilityFactory.getAbility(staticEffect, card);
|
||||
effectAb.setSVar("NoCreature", staticNoCreature);
|
||||
repAb.setSubAbility(effectAb);
|
||||
|
||||
final ReplacementEffect re = createETBReplacement(card, ReplacementLayer.Other, repAb, false, true, intrinsic, "Card.Self+impended", "");
|
||||
|
||||
inst.addReplacement(re);
|
||||
} else if (keyword.equals("Jump-start")) {
|
||||
@@ -3988,9 +3998,6 @@ public class CardFactoryUtil {
|
||||
String effect = "Mode$ CantBlockBy | ValidAttacker$ Creature.Self | ValidBlocker$ Creature.withoutHorsemanship | Secondary$ True " +
|
||||
" | Description$ Horsemanship (" + inst.getReminderText() + ")";
|
||||
inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic));
|
||||
} else if (keyword.startsWith("Impending")) {
|
||||
String effect = "Mode$ Continuous | Affected$ Card.Self+counters_GE1_TIME | RemoveType$ Creature | Secondary$ True";
|
||||
inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic));
|
||||
} else if (keyword.equals("Intimidate")) {
|
||||
String effect = "Mode$ CantBlockBy | ValidAttacker$ Creature.Self | ValidBlocker$ Creature.nonArtifact+notSharesColorWith | Secondary$ True " +
|
||||
" | Description$ Intimidate (" + inst.getReminderText() + ")";
|
||||
|
||||
Reference in New Issue
Block a user