Impending: use Effect for Last Time counter removed (#6096)

This commit is contained in:
Hans Mackowiak
2024-09-07 16:19:17 +02:00
committed by GitHub
parent 73adb8b2d9
commit f792a5b79e
3 changed files with 36 additions and 16 deletions

View File

@@ -463,6 +463,11 @@ public abstract class SpellAbilityEffect {
card.addChangedSVars(Collections.singletonMap("EndOfTurnLeavePlay", "AtEOT"), card.getGame().getNextTimestamp(), 0); 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) { protected static SpellAbility getForgetSpellAbility(final Card card) {
String forgetEffect = "DB$ Pump | ForgetObjects$ TriggeredCard"; String forgetEffect = "DB$ Pump | ForgetObjects$ TriggeredCard";
String exileEffect = "DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile" 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) { 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 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); final Trigger parsedTrigger = TriggerHandler.parseTrigger(trig, card, true);
parsedTrigger.setOverridingAbility(AbilityFactory.getAbility(effect, card)); parsedTrigger.setOverridingAbility(getExileSpellAbility(card));
card.addTrigger(parsedTrigger); card.addTrigger(parsedTrigger);
} }
protected static void addExileOnCounteredTrigger(final Card card) { protected static void addExileOnCounteredTrigger(final Card card) {
String trig = "Mode$ Countered | ValidCard$ Card.IsRemembered | TriggerZones$ Command | Static$ True"; 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); final Trigger parsedTrigger = TriggerHandler.parseTrigger(trig, card, true);
parsedTrigger.setOverridingAbility(AbilityFactory.getAbility(effect, card)); parsedTrigger.setOverridingAbility(getExileSpellAbility(card));
card.addTrigger(parsedTrigger); card.addTrigger(parsedTrigger);
} }
@@ -520,6 +523,13 @@ public abstract class SpellAbilityEffect {
card.addTrigger(parsedTrigger); 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) { 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 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"; 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) { protected static void addExileOnLostTrigger(final Card card) {
String trig = "Mode$ LosesGame | ValidPlayer$ You | TriggerController$ Player | TriggerZones$ Command | Static$ True"; 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); final Trigger parsedTrigger = TriggerHandler.parseTrigger(trig, card, true);
parsedTrigger.setOverridingAbility(AbilityFactory.getAbility(effect, card)); parsedTrigger.setOverridingAbility(getExileSpellAbility(card));
card.addTrigger(parsedTrigger); card.addTrigger(parsedTrigger);
} }

View File

@@ -251,6 +251,10 @@ public class EffectEffect extends SpellAbilityEffect {
addExileOnLostTrigger(eff); addExileOnLostTrigger(eff);
} }
if (sa.hasParam("ExileOnCounter")) {
addExileCounterTrigger(eff, sa.getParam("ExileOnCounter"));
}
// Set Imprinted // Set Imprinted
if (effectImprinted != null) { if (effectImprinted != null) {
eff.addImprintedCards(AbilityUtils.getDefinedCards(hostCard, effectImprinted, sa)); eff.addImprintedCards(AbilityUtils.getDefinedCards(hostCard, effectImprinted, sa));

View File

@@ -2354,7 +2354,17 @@ public class CardFactoryUtil {
final String effect = "DB$ PutCounter | Defined$ ReplacedCard | CounterType$ TIME | CounterNum$ " + m final String effect = "DB$ PutCounter | Defined$ ReplacedCard | CounterType$ TIME | CounterNum$ " + m
+ " | ETB$ True | SpellDescription$ " + desc; + " | 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); inst.addReplacement(re);
} else if (keyword.equals("Jump-start")) { } 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 " + String effect = "Mode$ CantBlockBy | ValidAttacker$ Creature.Self | ValidBlocker$ Creature.withoutHorsemanship | Secondary$ True " +
" | Description$ Horsemanship (" + inst.getReminderText() + ")"; " | Description$ Horsemanship (" + inst.getReminderText() + ")";
inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic)); 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")) { } else if (keyword.equals("Intimidate")) {
String effect = "Mode$ CantBlockBy | ValidAttacker$ Creature.Self | ValidBlocker$ Creature.nonArtifact+notSharesColorWith | Secondary$ True " + String effect = "Mode$ CantBlockBy | ValidAttacker$ Creature.Self | ValidBlocker$ Creature.nonArtifact+notSharesColorWith | Secondary$ True " +
" | Description$ Intimidate (" + inst.getReminderText() + ")"; " | Description$ Intimidate (" + inst.getReminderText() + ")";