Fix cards 'N' to 'R' with card name instead of {this}, generify ParasiticStrix

This commit is contained in:
Steven Knipe 2025-07-08 01:56:25 -07:00
parent 5d5ac9219e
commit b8f3a462f9
19 changed files with 74 additions and 101 deletions

View file

@ -1,7 +1,6 @@
package mage.cards.n;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
@ -13,12 +12,13 @@ import mage.abilities.keyword.ShroudAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.constants.SubType;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.mageobject.MulticoloredPredicate;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.filter.predicate.mageobject.MulticoloredPredicate;
import java.util.UUID;
/**
*
@ -46,9 +46,9 @@ public final class NayaHushblade extends CardImpl {
// As long as you control another multicolored permanent, Naya Hushblade gets +1/+1 and has shroud.
Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect(
new BoostSourceEffect(1,1, Duration.WhileOnBattlefield),
new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield),
new PermanentsOnTheBattlefieldCondition(filter),
"As long as you control another multicolored permanent, Naya Hushblade gets +1/+1"));
"As long as you control another multicolored permanent, {this} gets +1/+1"));
ability.addEffect(new ConditionalContinuousEffect(
new GainAbilitySourceEffect(ShroudAbility.getInstance()),
new PermanentsOnTheBattlefieldCondition(filter),

View file

@ -1,7 +1,6 @@
package mage.cards.n;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
@ -14,9 +13,10 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AttachmentType;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.constants.SubType;
import java.util.UUID;
/**
*
@ -35,7 +35,7 @@ public final class NobleQuarry extends CardImpl {
this.addAbility(new BestowAbility(this, "{5}{G}"));
// All creatures able to block Noble Quarry or enchanted creature do so.
Effect effect = new MustBeBlockedByAllSourceEffect(Duration.WhileOnBattlefield);
effect.setText("All creatures able to block Noble Quarry");
effect.setText("All creatures able to block {this}");
Ability ability = new SimpleStaticAbility(effect);
effect = new MustBeBlockedByAllAttachedEffect(Duration.WhileOnBattlefield, AttachmentType.AURA);
effect.setText("or enchanted creature do so");

View file

@ -1,7 +1,6 @@
package mage.cards.n;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility;
@ -13,14 +12,16 @@ import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.counters.CounterType;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.game.permanent.token.ZombieToken;
import mage.players.Player;
import java.util.UUID;
/**
*
* @author fireshoes
@ -54,7 +55,7 @@ class NoosegrafMobEffect extends OneShotEffect {
NoosegrafMobEffect() {
super(Outcome.Benefit);
staticText = "remove a +1/+1 counter from Noosegraf Mob. If you do, create a 2/2 black Zombie creature token";
staticText = "remove a +1/+1 counter from {this}. If you do, create a 2/2 black Zombie creature token";
}
private NoosegrafMobEffect(final NoosegrafMobEffect effect) {

View file

@ -31,7 +31,7 @@ public final class ObsidianFireheart extends CardImpl {
private static final String rule = "For as long as that land has a blaze counter "
+ "on it, it has \"At the beginning of your upkeep, this land deals 1 damage "
+ "to you.\" <i>(The land continues to burn after Obsidian Fireheart has left the battlefield.)</i>";
+ "to you.\" <i>(The land continues to burn after {this} has left the battlefield.)</i>";
private static final FilterPermanent filter = new FilterLandPermanent("land without a blaze counter on it");
static {

View file

@ -1,7 +1,6 @@
package mage.cards.o;
import java.util.UUID;
import mage.abilities.condition.LockedInCondition;
import mage.abilities.condition.common.KickedCondition;
import mage.abilities.decorator.ConditionalReplacementEffect;
@ -14,6 +13,8 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.target.common.TargetAnyTarget;
import java.util.UUID;
/**
*
* @author fireshoes
@ -31,7 +32,7 @@ public final class OrimsTouch extends CardImpl {
new PreventDamageToTargetEffect(Duration.EndOfTurn, 4),
new LockedInCondition(KickedCondition.ONCE),
new PreventDamageToTargetEffect(Duration.EndOfTurn, 2));
effect.setText("Prevent the next 2 damage that would be dealt to any target this turn. If Orim's Touch was kicked, prevent the next 4 damage that would be dealt to that permanent or player this turn instead");
effect.setText("Prevent the next 2 damage that would be dealt to any target this turn. If {this} was kicked, prevent the next 4 damage that would be dealt to that permanent or player this turn instead");
this.getSpellAbility().addTarget(new TargetAnyTarget());
this.getSpellAbility().addEffect(effect);
}

View file

@ -53,7 +53,7 @@ class OwlbearCubTriggeredAbility extends TriggeredAbilityImpl {
OwlbearCubTriggeredAbility() {
super(Zone.BATTLEFIELD, new OwlbearCubEffect());
this.withFlavorWord("Mama's Coming");
setTriggerPhrase("Whenever Owlbear Cub attacks a player who controls eight or more lands, ");
setTriggerPhrase("Whenever {this} attacks a player who controls eight or more lands, ");
}
private OwlbearCubTriggeredAbility(final OwlbearCubTriggeredAbility ability) {

View file

@ -1,10 +1,11 @@
package mage.cards.p;
import java.util.UUID;
import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.TriggeredAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.common.LoseLifeTargetEffect;
import mage.abilities.keyword.FlyingAbility;
@ -12,21 +13,24 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.predicate.mageobject.ColorPredicate;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.target.TargetPlayer;
import java.util.UUID;
/**
* @author mluds
*/
public final class ParasiticStrix extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent("black permanent");
static {
filter.add(new ColorPredicate(ObjectColor.BLACK));
}
public ParasiticStrix(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{2}{U}");
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}{U}");
this.subtype.add(SubType.BIRD);
this.power = new MageInt(2);
@ -34,9 +38,13 @@ public final class ParasiticStrix extends CardImpl {
// Flying
this.addAbility(FlyingAbility.getInstance());
// When Parasitic Strix enters the battlefield, if you control a black permanent, target player loses 2 life and you gain 2 life.
this.addAbility(new ParasiticStrixTriggeredAbility());
TriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new LoseLifeTargetEffect(2));
ability.addEffect(new GainLifeEffect(2).concatBy("and"));
ability.withInterveningIf(new YouControlPermanentCondition(filter));
ability.addTarget(new TargetPlayer());
this.addAbility(ability);
}
private ParasiticStrix(final ParasiticStrix card) {
@ -48,46 +56,3 @@ public final class ParasiticStrix extends CardImpl {
return new ParasiticStrix(this);
}
}
class ParasiticStrixTriggeredAbility extends TriggeredAbilityImpl {
public ParasiticStrixTriggeredAbility() {
super(Zone.BATTLEFIELD, new LoseLifeTargetEffect(2));
this.addEffect(new GainLifeEffect(2));
this.addTarget(new TargetPlayer());
}
private ParasiticStrixTriggeredAbility(final ParasiticStrixTriggeredAbility ability) {
super(ability);
}
@Override
public ParasiticStrixTriggeredAbility copy() {
return new ParasiticStrixTriggeredAbility(this);
}
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
return event.getTargetId().equals(this.getSourceId());
}
@Override
public boolean checkInterveningIfClause(Game game) {
FilterPermanent filter = new FilterPermanent();
filter.add(new ColorPredicate(ObjectColor.BLACK));
if (game.getBattlefield().countAll(filter, this.controllerId, game) >= 1) {
return true;
}
return false;
}
@Override
public String getRule() {
return "When Parasitic Strix enters the battlefield, if you control a black permanent, target player loses 2 life and you gain 2 life.";
}
}

View file

@ -1,7 +1,6 @@
package mage.cards.p;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.condition.common.KickedCondition;
@ -14,6 +13,8 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.counters.CounterType;
import java.util.UUID;
/**
*
* @author LoneFox
@ -31,7 +32,7 @@ public final class PhyrexianScuta extends CardImpl {
// Kicker-Pay 3 life.
this.addAbility(new KickerAbility(new PayLifeCost(3)));
// If Phyrexian Scuta was kicked, it enters with two +1/+1 counters on it.
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(2)), KickedCondition.ONCE, "If Phyrexian Scuta was kicked, it enters with two +1/+1 counters on it.", ""));
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(2)), KickedCondition.ONCE, "If {this} was kicked, it enters with two +1/+1 counters on it.", ""));
}
private PhyrexianScuta(final PhyrexianScuta card) {

View file

@ -1,22 +1,20 @@
package mage.cards.p;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.RemoveCountersSourceCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.constants.SubType;
import mage.counters.CounterType;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.NamePredicate;
@ -24,6 +22,8 @@ import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
import java.util.UUID;
/**
*
* @author LevelX2
@ -66,7 +66,7 @@ class PiousKitsuneEffect extends OneShotEffect {
public PiousKitsuneEffect() {
super(Outcome.Benefit);
this.staticText = "put a devotion counter on Pious Kitsune. Then if a creature named Eight-and-a-Half-Tails is on the battlefield, you gain 1 life for each devotion counter on Pious Kitsune";
this.staticText = "put a devotion counter on {this}. Then if a creature named Eight-and-a-Half-Tails is on the battlefield, you gain 1 life for each devotion counter on {this}";
}
private PiousKitsuneEffect(final PiousKitsuneEffect effect) {

View file

@ -42,7 +42,7 @@ class PlaneswalkersFuryEffect extends OneShotEffect {
PlaneswalkersFuryEffect() {
super(Outcome.Damage);
staticText = "Target opponent reveals a card at random from their hand. Planeswalker's Fury deals damage equal to that card's mana value to that player";
staticText = "Target opponent reveals a card at random from their hand. {this} deals damage equal to that card's mana value to that player";
}
private PlaneswalkersFuryEffect(final PlaneswalkersFuryEffect effect) {

View file

@ -1,6 +1,5 @@
package mage.cards.p;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@ -11,19 +10,21 @@ import mage.abilities.effects.common.DoIfAnyNumberCostPaid;
import mage.abilities.effects.common.continuous.BecomesCreatureTargetEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.HasteAbility;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.counters.CounterType;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.permanent.token.TokenImpl;
import mage.target.TargetPermanent;
import java.util.UUID;
/**
*
* @author weirddan455
@ -62,7 +63,7 @@ class PrimalAdversaryEffect extends OneShotEffect {
PrimalAdversaryEffect() {
super(Outcome.Benefit);
staticText = "put that many +1/+1 counters on Primal Adversary, " +
staticText = "put that many +1/+1 counters on {this}, " +
"then up to that many target lands you control become 3/3 Wolf creatures with haste that are still lands";
}

View file

@ -32,7 +32,7 @@ public final class Primalcrux extends CardImpl {
// Chroma - Primalcrux's power and toughness are each equal to the number of green mana symbols in the mana costs of permanents you control.
DynamicValue xValue = new ChromaCount(ManaType.GREEN);
Effect effect = new SetBasePowerToughnessSourceEffect(xValue);
effect.setText("<i>Chroma</i> &mdash; Primalcrux's power and toughness are each equal to the number of green mana symbols in the mana costs of permanents you control.");
effect.setText("<i>Chroma</i> &mdash; {this}'s power and toughness are each equal to the number of green mana symbols in the mana costs of permanents you control.");
this.addAbility(new SimpleStaticAbility(Zone.ALL, effect)
.addHint(new ValueHint("Green mana symbols in your permanents", xValue))
);

View file

@ -1,7 +1,6 @@
package mage.cards.r;
import java.util.UUID;
import mage.abilities.condition.common.SpellMasteryCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.dynamicvalue.common.GetXValue;
@ -12,6 +11,8 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
*
* @author LevelX2
@ -26,7 +27,7 @@ public final class RavagingBlaze extends CardImpl {
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
// <i>Spell mastery</i> &mdash; If there are two or more instant and/or sorcery cards in your graveyard, Ravaging Blaze also deals X damage to that creature's controller.
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new DamageTargetControllerEffect(GetXValue.instance),
SpellMasteryCondition.instance, "<br><i>Spell mastery</i> &mdash; If there are two or more instant and/or sorcery cards in your graveyard, Ravaging Blaze also deals X damage to that creature's controller."));
SpellMasteryCondition.instance, "<br><i>Spell mastery</i> &mdash; If there are two or more instant and/or sorcery cards in your graveyard, {this} also deals X damage to that creature's controller."));
}
private RavagingBlaze(final RavagingBlaze card) {

View file

@ -52,7 +52,7 @@ class RefuseEffect extends OneShotEffect {
RefuseEffect() {
super(Outcome.Damage);
staticText = "Refuse deals damage to target spell's controller equal to that spell's mana value";
staticText = "{this} deals damage to target spell's controller equal to that spell's mana value";
}
private RefuseEffect(final RefuseEffect effect) {

View file

@ -1,6 +1,5 @@
package mage.cards.r;
import java.util.UUID;
import mage.MageInt;
import mage.MageObject;
import mage.abilities.Ability;
@ -9,13 +8,13 @@ import mage.abilities.common.delayed.ReflexiveTriggeredAbility;
import mage.abilities.costs.common.ExileFromGraveCost;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.DoWhenCostPaid;
import mage.cards.Card;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.counters.CounterType;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
@ -25,6 +24,8 @@ import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
/**
*
* @author weirddan455
@ -54,7 +55,7 @@ public final class ResplendentMarshal extends CardImpl {
this.addAbility(new EntersBattlefieldOrDiesSourceTriggeredAbility(
new DoWhenCostPaid(
new ReflexiveTriggeredAbility(new ResplendentMarshalEffect(), false,
"put a +1/+1 counter on each creature you control other than Resplendent Marshal that shares a creature type with the exiled card"),
"put a +1/+1 counter on each creature you control other than {this} that shares a creature type with the exiled card"),
new ExileFromGraveCost(new TargetCardInYourGraveyard(filter), true),
"Exile another creature card from your graveyard?"
), false

View file

@ -1,7 +1,6 @@
package mage.cards.r;
import java.util.UUID;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DamageTargetEffect;
@ -12,9 +11,10 @@ import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.target.targetpointer.FixedTarget;
import java.util.UUID;
/**
*
* @author Plopman
@ -87,6 +87,6 @@ class RivalryTriggeredAbility extends TriggeredAbilityImpl {
@Override
public String getRule() {
return "At the beginning of each player's upkeep, if that player controls more lands than each other player, Rivalry deals 2 damage to them.";
return "At the beginning of each player's upkeep, if that player controls more lands than each other player, {this} deals 2 damage to them.";
}
}
}

View file

@ -1,7 +1,6 @@
package mage.cards.r;
import java.util.UUID;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DamageAllEffect;
import mage.abilities.keyword.FlyingAbility;
@ -13,6 +12,8 @@ import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.AbilityPredicate;
import java.util.UUID;
/**
*
* @author LevelX2
@ -33,13 +34,13 @@ public final class RoughTumble extends SplitCard {
// Rough
// Rough deals 2 damage to each creature without flying.
Effect effect = new DamageAllEffect(2, filterWithoutFlying);
effect.setText("Rough deals 2 damage to each creature without flying");
effect.setText("{this} deals 2 damage to each creature without flying");
getLeftHalfCard().getSpellAbility().addEffect(effect);
// Tumble
// Tumble deals 6 damage to each creature with flying.
effect = new DamageAllEffect(6, filterFlying);
effect.setText("Tumble deals 6 damage to each creature with flying");
effect.setText("{this} deals 6 damage to each creature with flying");
getRightHalfCard().getSpellAbility().addEffect(effect);
}

View file

@ -1,7 +1,6 @@
package mage.cards.r;
import java.util.UUID;
import mage.ObjectColor;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.costs.mana.ManaCostsImpl;
@ -22,6 +21,8 @@ import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.targetpointer.FixedTarget;
import java.util.UUID;
/**
*
* @author L_J
@ -94,6 +95,6 @@ class RoyalDecreeAbility extends TriggeredAbilityImpl {
@Override
public String getRule() {
return "Whenever a Swamp, Mountain, black permanent, or red permanent becomes tapped, Royal Decree deals 1 damage to that permanent's controller.";
return "Whenever a Swamp, Mountain, black permanent, or red permanent becomes tapped, {this} deals 1 damage to that permanent's controller.";
}
}

View file

@ -52,7 +52,7 @@ class RuptureEffect extends OneShotEffect {
public RuptureEffect() {
super(Outcome.Damage);
staticText = "Sacrifice a creature. Rupture deals damage equal to that creature's power to each creature without flying and each player";
staticText = "Sacrifice a creature. {this} deals damage equal to that creature's power to each creature without flying and each player";
}
private RuptureEffect(final RuptureEffect effect) {