added life gain hints to various cards

This commit is contained in:
Evan Kranzler 2021-04-10 15:57:22 -04:00
parent 1e67899098
commit 4528663f1a
8 changed files with 61 additions and 75 deletions

View file

@ -2,6 +2,7 @@ package mage.cards.a;
import mage.abilities.common.BeginningOfEndStepTriggeredAbility; import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
import mage.abilities.condition.common.YouGainedLifeCondition; import mage.abilities.condition.common.YouGainedLifeCondition;
import mage.abilities.dynamicvalue.common.ControllerGotLifeCount;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -23,9 +24,10 @@ public final class AngelicAccord extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{W}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{W}");
// At the beginning of each end step, if you gained 4 or more life this turn, create a 4/4 white Angel creature token with flying. // At the beginning of each end step, if you gained 4 or more life this turn, create a 4/4 white Angel creature token with flying.
this.addAbility(new BeginningOfEndStepTriggeredAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new AngelToken()), TargetController.ANY, this.addAbility(new BeginningOfEndStepTriggeredAbility(
new YouGainedLifeCondition(ComparisonType.MORE_THAN, 3), false), Zone.BATTLEFIELD, new CreateTokenEffect(new AngelToken()), TargetController.ANY,
new PlayerGainedLifeWatcher()); new YouGainedLifeCondition(ComparisonType.MORE_THAN, 3), false
).addHint(ControllerGotLifeCount.getHint()), new PlayerGainedLifeWatcher());
} }
private AngelicAccord(final AngelicAccord card) { private AngelicAccord(final AngelicAccord card) {

View file

@ -1,29 +1,24 @@
package mage.cards.c; package mage.cards.c;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.BeginningOfEndStepTriggeredAbility; import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.YouGainedLifeCondition; import mage.abilities.condition.common.YouGainedLifeCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.dynamicvalue.common.ControllerGotLifeCount;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.continuous.GainAbilityAllEffect; import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
import mage.abilities.keyword.IndestructibleAbility; import mage.abilities.keyword.IndestructibleAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.*;
import mage.constants.ComparisonType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterControlledPermanent;
import mage.game.permanent.token.CrestedSunmareToken; import mage.game.permanent.token.CrestedSunmareToken;
import mage.watchers.common.PlayerGainedLifeWatcher; import mage.watchers.common.PlayerGainedLifeWatcher;
import java.util.UUID;
/** /**
*
* @author emerald000 * @author emerald000
*/ */
public final class CrestedSunmare extends CardImpl { public final class CrestedSunmare extends CardImpl {
@ -42,15 +37,19 @@ public final class CrestedSunmare extends CardImpl {
this.toughness = new MageInt(5); this.toughness = new MageInt(5);
// Other Horses you control have indestructible. // Other Horses you control have indestructible.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield, filter, true))); this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect(
IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield, filter, true
)));
// At the beginning of each end step, if you gained life this turn, create a 5/5 white Horse creature token. // At the beginning of each end step, if you gained life this turn, create a 5/5 white Horse creature token.
this.addAbility( this.addAbility(new ConditionalInterveningIfTriggeredAbility(
new ConditionalInterveningIfTriggeredAbility( new BeginningOfEndStepTriggeredAbility(
new BeginningOfEndStepTriggeredAbility(new CreateTokenEffect(new CrestedSunmareToken()), TargetController.ANY, false), new CreateTokenEffect(new CrestedSunmareToken()),
new YouGainedLifeCondition(ComparisonType.MORE_THAN, 0), TargetController.ANY, false
"At the beginning of each end step, if you gained life this turn, create a 5/5 white Horse creature token."), ), new YouGainedLifeCondition(ComparisonType.MORE_THAN, 0),
new PlayerGainedLifeWatcher()); "At the beginning of each end step, if you gained life this turn, " +
"create a 5/5 white Horse creature token."
).addHint(ControllerGotLifeCount.getHint()), new PlayerGainedLifeWatcher());
} }
private CrestedSunmare(final CrestedSunmare card) { private CrestedSunmare(final CrestedSunmare card) {

View file

@ -1,29 +1,21 @@
package mage.cards.o; package mage.cards.o;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTappedAbility; import mage.abilities.common.EntersBattlefieldTappedAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.Condition; import mage.abilities.dynamicvalue.common.ControllerGotLifeCount;
import mage.abilities.condition.common.YouGainedLifeCondition;
import mage.abilities.effects.AsThoughEffectImpl; import mage.abilities.effects.AsThoughEffectImpl;
import mage.cards.Card; import mage.cards.Card;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.AsThoughEffectType; import mage.constants.*;
import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.game.Game; import mage.game.Game;
import mage.watchers.common.PlayerGainedLifeWatcher; import mage.watchers.common.PlayerGainedLifeWatcher;
import java.util.UUID;
/** /**
*
* @author LevelX2 * @author LevelX2
*/ */
public final class OathswornVampire extends CardImpl { public final class OathswornVampire extends CardImpl {
@ -40,7 +32,9 @@ public final class OathswornVampire extends CardImpl {
this.addAbility(new EntersBattlefieldTappedAbility()); this.addAbility(new EntersBattlefieldTappedAbility());
// You may cast Oathsworn Vampire from your graveyard if you gained life this turn. // You may cast Oathsworn Vampire from your graveyard if you gained life this turn.
this.addAbility(new SimpleStaticAbility(Zone.ALL, new OathswornVampirePlayEffect()), new PlayerGainedLifeWatcher()); this.addAbility(new SimpleStaticAbility(
Zone.ALL, new OathswornVampirePlayEffect()
).addHint(ControllerGotLifeCount.getHint()), new PlayerGainedLifeWatcher());
} }
private OathswornVampire(final OathswornVampire card) { private OathswornVampire(final OathswornVampire card) {
@ -55,17 +49,13 @@ public final class OathswornVampire extends CardImpl {
class OathswornVampirePlayEffect extends AsThoughEffectImpl { class OathswornVampirePlayEffect extends AsThoughEffectImpl {
private Condition condition; OathswornVampirePlayEffect() {
public OathswornVampirePlayEffect() {
super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit); super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit);
staticText = "You may cast {this} from your graveyard if you gained life this turn"; staticText = "You may cast {this} from your graveyard if you gained life this turn";
condition = new YouGainedLifeCondition(ComparisonType.MORE_THAN, 0);
} }
public OathswornVampirePlayEffect(final OathswornVampirePlayEffect effect) { private OathswornVampirePlayEffect(final OathswornVampirePlayEffect effect) {
super(effect); super(effect);
this.condition = effect.condition;
} }
@Override @Override
@ -80,13 +70,15 @@ class OathswornVampirePlayEffect extends AsThoughEffectImpl {
@Override @Override
public boolean applies(UUID sourceId, Ability source, UUID affectedControllerId, Game game) { public boolean applies(UUID sourceId, Ability source, UUID affectedControllerId, Game game) {
if (sourceId.equals(source.getSourceId()) && source.isControlledBy(affectedControllerId)) { PlayerGainedLifeWatcher watcher = game.getState().getWatcher(PlayerGainedLifeWatcher.class);
Card card = game.getCard(source.getSourceId()); if (watcher == null
if (card != null && game.getState().getZone(source.getSourceId()) == Zone.GRAVEYARD) { || watcher.getLifeGained(source.getControllerId()) < 1
return condition.apply(game, source); || !sourceId.equals(source.getSourceId())
} || !source.isControlledBy(affectedControllerId)) {
}
return false; return false;
} }
Card card = game.getCard(source.getSourceId());
return card != null && game.getState().getZone(source.getSourceId()) == Zone.GRAVEYARD;
}
} }

View file

@ -1,23 +1,24 @@
package mage.cards.r; package mage.cards.r;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.BeginningOfEndStepTriggeredAbility; import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
import mage.abilities.condition.common.YouGainedLifeCondition; import mage.abilities.condition.common.YouGainedLifeCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.dynamicvalue.common.ControllerGotLifeCount;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.constants.SubType;
import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.constants.SubType;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.game.permanent.token.BatToken; import mage.game.permanent.token.BatToken;
import mage.watchers.common.PlayerGainedLifeWatcher; import mage.watchers.common.PlayerGainedLifeWatcher;
import java.util.UUID;
/** /**
*
* @author TheElk801 * @author TheElk801
*/ */
public final class RegalBloodlord extends CardImpl { public final class RegalBloodlord extends CardImpl {
@ -43,7 +44,7 @@ public final class RegalBloodlord extends CardImpl {
"At the beginning of each end step, " "At the beginning of each end step, "
+ "if you gained life this turn, " + "if you gained life this turn, "
+ "create a 1/1 black Bat creature token with flying." + "create a 1/1 black Bat creature token with flying."
), new PlayerGainedLifeWatcher()); ).addHint(ControllerGotLifeCount.getHint()), new PlayerGainedLifeWatcher());
} }
private RegalBloodlord(final RegalBloodlord card) { private RegalBloodlord(final RegalBloodlord card) {

View file

@ -1,30 +1,26 @@
package mage.cards.r; package mage.cards.r;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.BeginningOfEndStepTriggeredAbility; import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.common.YouGainedLifeCondition; import mage.abilities.condition.common.YouGainedLifeCondition;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.dynamicvalue.common.ControllerGotLifeCount;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
import mage.constants.SubType;
import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.LifelinkAbility; import mage.abilities.keyword.LifelinkAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.*;
import mage.constants.ComparisonType;
import mage.constants.Duration;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.game.permanent.token.AngelVigilanceToken; import mage.game.permanent.token.AngelVigilanceToken;
import mage.watchers.common.PlayerGainedLifeWatcher; import mage.watchers.common.PlayerGainedLifeWatcher;
import java.util.UUID;
/** /**
*
* @author TheElk801 * @author TheElk801
*/ */
public final class ResplendentAngel extends CardImpl { public final class ResplendentAngel extends CardImpl {
@ -41,23 +37,16 @@ public final class ResplendentAngel extends CardImpl {
// At the beginning of each end step, if you gained 5 or more life this turn, create a 4/4 white Angel creature token with flying and vigilance. // At the beginning of each end step, if you gained 5 or more life this turn, create a 4/4 white Angel creature token with flying and vigilance.
this.addAbility(new BeginningOfEndStepTriggeredAbility( this.addAbility(new BeginningOfEndStepTriggeredAbility(
Zone.BATTLEFIELD, Zone.BATTLEFIELD, new CreateTokenEffect(new AngelVigilanceToken()),
new CreateTokenEffect(new AngelVigilanceToken()), TargetController.ANY, new YouGainedLifeCondition(ComparisonType.MORE_THAN, 4), false
TargetController.ANY, ).addHint(ControllerGotLifeCount.getHint()), new PlayerGainedLifeWatcher());
new YouGainedLifeCondition(ComparisonType.MORE_THAN, 4),
false
), new PlayerGainedLifeWatcher());
// {3}{W}{W}{W}: Until end of turn, Resplendent Angel gets +2/+2 and gains lifelink. // {3}{W}{W}{W}: Until end of turn, Resplendent Angel gets +2/+2 and gains lifelink.
Ability ability = new SimpleActivatedAbility( Ability ability = new SimpleActivatedAbility(new BoostSourceEffect(
new BoostSourceEffect(
2, 2, Duration.EndOfTurn 2, 2, Duration.EndOfTurn
).setText("until end of turn, {this} gets +2/+2"), ).setText("until end of turn, {this} gets +2/+2"), new ManaCostsImpl("{3}{W}{W}{W}"));
new ManaCostsImpl("{3}{W}{W}{W}")
);
ability.addEffect(new GainAbilitySourceEffect( ability.addEffect(new GainAbilitySourceEffect(
LifelinkAbility.getInstance(), LifelinkAbility.getInstance(), Duration.EndOfTurn
Duration.EndOfTurn
).setText("and gains lifelink")); ).setText("and gains lifelink"));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -7,6 +7,7 @@ import mage.abilities.condition.Condition;
import mage.abilities.condition.common.YouGainedLifeCondition; import mage.abilities.condition.common.YouGainedLifeCondition;
import mage.abilities.costs.Cost; import mage.abilities.costs.Cost;
import mage.abilities.costs.common.PayLifeCost; import mage.abilities.costs.common.PayLifeCost;
import mage.abilities.dynamicvalue.common.ControllerGotLifeCount;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.LifelinkAbility; import mage.abilities.keyword.LifelinkAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -42,7 +43,7 @@ public final class TivashGloomSummoner extends CardImpl {
this.addAbility(new BeginningOfEndStepTriggeredAbility( this.addAbility(new BeginningOfEndStepTriggeredAbility(
Zone.BATTLEFIELD, new TivashGloomSummonerEffect(), Zone.BATTLEFIELD, new TivashGloomSummonerEffect(),
TargetController.YOU, condition, false TargetController.YOU, condition, false
), new PlayerGainedLifeWatcher()); ).addHint(ControllerGotLifeCount.getHint()), new PlayerGainedLifeWatcher());
} }
private TivashGloomSummoner(final TivashGloomSummoner card) { private TivashGloomSummoner(final TivashGloomSummoner card) {

View file

@ -5,6 +5,7 @@ import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.Condition;
import mage.abilities.condition.common.YouGainedLifeCondition; import mage.abilities.condition.common.YouGainedLifeCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.dynamicvalue.common.ControllerGotLifeCount;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.LifelinkAbility; import mage.abilities.keyword.LifelinkAbility;
@ -47,7 +48,7 @@ public final class ValkyrieHarbinger extends CardImpl {
TargetController.ANY, false TargetController.ANY, false
), condition, "At the beginning of each end step, if you gained 4 or more life this turn, " + ), condition, "At the beginning of each end step, if you gained 4 or more life this turn, " +
"create a 4/4 white Angel creature token with flying and vigilance." "create a 4/4 white Angel creature token with flying and vigilance."
), new PlayerGainedLifeWatcher()); ).addHint(ControllerGotLifeCount.getHint()), new PlayerGainedLifeWatcher());
} }
private ValkyrieHarbinger(final ValkyrieHarbinger card) { private ValkyrieHarbinger(final ValkyrieHarbinger card) {

View file

@ -6,6 +6,7 @@ import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.Condition;
import mage.abilities.condition.common.YouGainedLifeCondition; import mage.abilities.condition.common.YouGainedLifeCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.dynamicvalue.common.ControllerGotLifeCount;
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.abilities.effects.common.SacrificeOpponentsEffect; import mage.abilities.effects.common.SacrificeOpponentsEffect;
import mage.abilities.keyword.DeathtouchAbility; import mage.abilities.keyword.DeathtouchAbility;
@ -53,7 +54,7 @@ public final class WitchOfTheMoors extends CardImpl {
ability.addTarget(new TargetCardInYourGraveyard( ability.addTarget(new TargetCardInYourGraveyard(
0, 1, StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD 0, 1, StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD
)); ));
this.addAbility(ability, new PlayerGainedLifeWatcher()); this.addAbility(ability.addHint(ControllerGotLifeCount.getHint()), new PlayerGainedLifeWatcher());
} }
private WitchOfTheMoors(final WitchOfTheMoors card) { private WitchOfTheMoors(final WitchOfTheMoors card) {