mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 02:30:08 -08:00
Initiative abilities - added card hint with initiative info to all related cards (closes #11424);
tests: added verify test for miss initiative card hint; gui: fixed wrong max amount of card hint windows;
This commit is contained in:
parent
77eb3b35b8
commit
6e99a3653a
29 changed files with 92 additions and 22 deletions
|
|
@ -1291,7 +1291,7 @@ public final class GamePanel extends javax.swing.JPanel {
|
|||
clearClosedCardHintsWindows();
|
||||
|
||||
// too many dialogs can cause bad GUI performance, so limit it
|
||||
if (cardHintsWindows.size() > CardHintsHelperDialog.GUI_MAX_CARD_HINTS_DIALOGS_PER_GAME) {
|
||||
if (cardHintsWindows.size() >= CardHintsHelperDialog.GUI_MAX_CARD_HINTS_DIALOGS_PER_GAME) {
|
||||
// show last one instead
|
||||
cardHintsWindows.values().stream().reduce((a, b) -> b).ifPresent(CardHintsHelperDialog::show);
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package mage.cards.a;
|
|||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.common.TakeTheInitiativeEffect;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -28,7 +29,7 @@ public final class AarakocraSneak extends CardImpl {
|
|||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// When Aarakocra Sneak enters the battlefield, you take the initiative.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()).addHint(InitiativeHint.instance));
|
||||
}
|
||||
|
||||
private AarakocraSneak(final AarakocraSneak card) {
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package mage.cards.a;
|
|||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.common.TakeTheInitiativeEffect;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.abilities.keyword.TrampleAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -28,7 +29,7 @@ public final class AvengingHunter extends CardImpl {
|
|||
this.addAbility(TrampleAbility.getInstance());
|
||||
|
||||
// Whenever Avenging Hunter enters the battlefield, you take the initiative.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()).addHint(InitiativeHint.instance));
|
||||
}
|
||||
|
||||
private AvengingHunter(final AvengingHunter card) {
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import mage.abilities.costs.common.SacrificeTargetCost;
|
|||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.TakeTheInitiativeEffect;
|
||||
import mage.abilities.effects.common.combat.GoadTargetEffect;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -31,7 +32,7 @@ public final class BloodboilSorcerer extends CardImpl {
|
|||
this.toughness = new MageInt(3);
|
||||
|
||||
// Whenever Bloodboil Sorcerer enters the battlefield, you take the initiative.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()).addHint(InitiativeHint.instance));
|
||||
|
||||
// Crown of Madness — {1}{R}, Sacrifice an artifact or creature: Goad target creature.
|
||||
Ability ability = new SimpleActivatedAbility(new GoadTargetEffect(), new ManaCostsImpl<>("{1}{R}"));
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import mage.abilities.condition.common.CompletedDungeonCondition;
|
|||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.TakeTheInitiativeEffect;
|
||||
import mage.abilities.effects.common.asthought.PlayFromNotOwnHandZoneTargetEffect;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.abilities.keyword.TrampleAbility;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -38,7 +39,7 @@ public final class CavesOfChaosAdventurer extends CardImpl {
|
|||
this.addAbility(TrampleAbility.getInstance());
|
||||
|
||||
// When Caves of Chaos Adventurer enters the battlefield, you take the initiative.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()).addHint(InitiativeHint.instance));
|
||||
|
||||
// Whenever Caves of Chaos Adventurer attacks, exile the top card of your library. If you've completed a dungeon, you may play that card this turn without paying its mana cost. Otherwise, you may play this card this turn.
|
||||
this.addAbility(new AttacksTriggeredAbility(new CavesOfChaosAdventurerEffect())
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import mage.abilities.effects.common.CreateTokenEffect;
|
|||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.GainLifeEffect;
|
||||
import mage.abilities.effects.common.TakeTheInitiativeEffect;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -35,6 +36,7 @@ public final class DungeoneersPack extends CardImpl {
|
|||
ability.addEffect(new GainLifeEffect(3).setText(", gain 3 life"));
|
||||
ability.addEffect(new DrawCardSourceControllerEffect(1).concatBy(","));
|
||||
ability.addEffect(new CreateTokenEffect(new TreasureToken()).concatBy(", and"));
|
||||
ability.addHint(InitiativeHint.instance);
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package mage.cards.e;
|
|||
|
||||
import mage.abilities.effects.common.TakeTheInitiativeEffect;
|
||||
import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -39,6 +40,7 @@ public final class ExploreTheUnderdark extends CardImpl {
|
|||
|
||||
// You take the initiative.
|
||||
this.getSpellAbility().addEffect(new TakeTheInitiativeEffect().concatBy("<br>"));
|
||||
this.getSpellAbility().addHint(InitiativeHint.instance);
|
||||
}
|
||||
|
||||
private ExploreTheUnderdark(final ExploreTheUnderdark card) {
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
|||
import mage.abilities.condition.common.HaveInitiativeCondition;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.TakeTheInitiativeEffect;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -35,7 +36,7 @@ public final class FeywildCaretaker extends CardImpl {
|
|||
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
||||
new CreateTokenEffect(new FaerieDragonToken()), TargetController.YOU,
|
||||
HaveInitiativeCondition.instance, false
|
||||
));
|
||||
).addHint(InitiativeHint.instance));
|
||||
}
|
||||
|
||||
private FeywildCaretaker(final FeywildCaretaker card) {
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package mage.cards.f;
|
|||
import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldWithCounterTargetEffect;
|
||||
import mage.abilities.effects.common.TakeTheInitiativeEffect;
|
||||
import mage.abilities.effects.common.replacement.LeaveBattlefieldExileTargetReplacementEffect;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.abilities.keyword.EscapeAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -31,6 +32,7 @@ public final class FromTheCatacombs extends CardImpl {
|
|||
|
||||
// You take the initiative.
|
||||
this.getSpellAbility().addEffect(new TakeTheInitiativeEffect().concatBy("<br>"));
|
||||
this.getSpellAbility().addHint(InitiativeHint.instance);
|
||||
|
||||
// Escape—{3}{B}{B}, Exile four other cards from your graveyard.
|
||||
this.addAbility(new EscapeAbility(this, "{3}{B}{B}", 5));
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package mage.cards.g;
|
|||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.common.TakeTheInitiativeEffect;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.abilities.keyword.VigilanceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -28,7 +29,7 @@ public final class GoliathPaladin extends CardImpl {
|
|||
this.addAbility(VigilanceAbility.getInstance());
|
||||
|
||||
// When Goliath Paladin enters the battlefield, you take the initiative.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()).addHint(InitiativeHint.instance));
|
||||
}
|
||||
|
||||
private GoliathPaladin(final GoliathPaladin card) {
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import mage.abilities.condition.common.HaveInitiativeCondition;
|
|||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.decorator.ConditionalOneShotEffect;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.abilities.keyword.WardAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -44,6 +45,7 @@ public final class ImoenMysticTrickster extends CardImpl {
|
|||
new DrawCardSourceControllerEffect(1), CompletedDungeonCondition.instance,
|
||||
"Draw another card if you've completed a dungeon"
|
||||
));
|
||||
ability.addHint(InitiativeHint.instance);
|
||||
this.addAbility(ability.addHint(CompletedDungeonCondition.getHint()), new CompletedDungeonWatcher());
|
||||
|
||||
// Choose a Background
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import mage.abilities.common.CompletedDungeonTriggeredAbility;
|
|||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.TakeTheInitiativeEffect;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -28,6 +29,7 @@ public final class LootDispute extends CardImpl {
|
|||
// When Loot Dispute enters the battlefield, you take the initiative and create a Treasure token.
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect());
|
||||
ability.addEffect(new CreateTokenEffect(new TreasureToken()).setText("and create a Treasure token"));
|
||||
ability.addHint(InitiativeHint.instance);
|
||||
this.addAbility(ability);
|
||||
|
||||
// Whenever you attack a player who has the initiative, create a Treasure token.
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
|||
import mage.abilities.condition.common.HaveInitiativeCondition;
|
||||
import mage.abilities.effects.common.TakeTheInitiativeEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.abilities.keyword.LifelinkAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -40,7 +41,7 @@ public final class PassagewaySeer extends CardImpl {
|
|||
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
||||
Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.P1P1.createInstance()),
|
||||
TargetController.YOU, HaveInitiativeCondition.instance, false
|
||||
));
|
||||
).addHint(InitiativeHint.instance));
|
||||
}
|
||||
|
||||
private PassagewaySeer(final PassagewaySeer card) {
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
|||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
import mage.abilities.effects.common.ruleModifying.CombatDamageByToughnessControlledEffect;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -45,7 +46,7 @@ public final class RasaadYnBashir extends CardImpl {
|
|||
new AttacksTriggeredAbility(new RasaadYnBashirEffect()),
|
||||
HaveInitiativeCondition.instance, "Whenever {this} attacks, if you have the initiative, " +
|
||||
"double the toughness of each creature you control until end of turn."
|
||||
));
|
||||
).addHint(InitiativeHint.instance));
|
||||
|
||||
// Choose a Background
|
||||
this.addAbility(ChooseABackgroundAbility.getInstance());
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
|||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.ReplacementEffectImpl;
|
||||
import mage.abilities.effects.common.TakeTheInitiativeEffect;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
|
|
@ -39,7 +40,7 @@ public final class RavenloftAdventurer extends CardImpl {
|
|||
this.toughness = new MageInt(4);
|
||||
|
||||
// When Ravenloft Adventurer enters the battlefield, you take the initiative.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()).addHint(InitiativeHint.instance));
|
||||
|
||||
// If a creature an opponent controls would die, instead exile it and put a hit counter on it.
|
||||
this.addAbility(new SimpleStaticAbility(new RavenloftAdventurerReplacementEffect()));
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import mage.abilities.decorator.ConditionalContinuousEffect;
|
|||
import mage.abilities.effects.common.TakeTheInitiativeEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.abilities.keyword.DeathtouchAbility;
|
||||
import mage.abilities.keyword.FirstStrikeAbility;
|
||||
import mage.abilities.keyword.MenaceAbility;
|
||||
|
|
@ -40,7 +41,7 @@ public final class RilsaRaelKingpin extends CardImpl {
|
|||
this.addAbility(DeathtouchAbility.getInstance());
|
||||
|
||||
// When Rilsa Rael, Kingpin enters the battlefield, you take the initiative.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()).addHint(InitiativeHint.instance));
|
||||
|
||||
// Whenever you attack, target attacking creature gains deathtouch until end of turn. If you've completed a dungeon, that creature also gets +5/+0 and gains first strike and menace until end of turn.
|
||||
Ability ability = new AttacksWithCreaturesTriggeredAbility(
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import mage.abilities.condition.common.CompletedDungeonCondition;
|
|||
import mage.abilities.condition.common.HaveInitiativeCondition;
|
||||
import mage.abilities.decorator.ConditionalOneShotEffect;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.abilities.keyword.MenaceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -45,7 +46,7 @@ public final class SafanaCalimportCutthroat extends CardImpl {
|
|||
"If you've completed a dungeon, create three of those tokens instead"
|
||||
),
|
||||
TargetController.YOU, HaveInitiativeCondition.instance, false
|
||||
).addHint(CompletedDungeonCondition.getHint()), new CompletedDungeonWatcher());
|
||||
).addHint(CompletedDungeonCondition.getHint()).addHint(InitiativeHint.instance), new CompletedDungeonWatcher());
|
||||
|
||||
// Choose a Background
|
||||
this.addAbility(ChooseABackgroundAbility.getInstance());
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import mage.abilities.decorator.ConditionalManaEffect;
|
|||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.TakeTheInitiativeEffect;
|
||||
import mage.abilities.effects.mana.BasicManaEffect;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.abilities.mana.SimpleManaAbility;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -35,7 +36,7 @@ public final class SarevoksTome extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}");
|
||||
|
||||
// When Sarevok's Tome enters the battlefield, you take the initiative.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()).addHint(InitiativeHint.instance));
|
||||
|
||||
// {T}: Add {C}. If you have the initiative, add {C}{C} instead.
|
||||
this.addAbility(new SimpleManaAbility(
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
|||
import mage.abilities.effects.common.TakeTheInitiativeEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
|
||||
import mage.abilities.effects.keyword.ExploreTargetEffect;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.abilities.keyword.ProtectionAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -49,7 +50,7 @@ public final class SeasonedDungeoneer extends CardImpl {
|
|||
this.toughness = new MageInt(4);
|
||||
|
||||
// When Seasoned Dungeoneer enters the battlefield, you take the initiative.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()).addHint(InitiativeHint.instance));
|
||||
|
||||
// Whenever you attack, target attacking Cleric, Rogue, Warrior, or Wizard gains protection from creatures until end of turn. It explores.
|
||||
Ability ability = new AttacksWithCreaturesTriggeredAbility(
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import mage.abilities.common.SimpleActivatedAbility;
|
|||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.effects.common.TakeTheInitiativeEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.abilities.keyword.DefenderAbility;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
import mage.abilities.keyword.MenaceAbility;
|
||||
|
|
@ -35,7 +36,7 @@ public final class StirringBard extends CardImpl {
|
|||
this.addAbility(DefenderAbility.getInstance());
|
||||
|
||||
// When Stirring Bard enters the battlefield, you take the initiative.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()).addHint(InitiativeHint.instance));
|
||||
|
||||
// Mantle of Inspiration — {T}: Target creature gains menace and haste until end of turn.
|
||||
Ability ability = new SimpleActivatedAbility(
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
|||
import mage.abilities.condition.common.CompletedDungeonCondition;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.TakeTheInitiativeEffect;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -32,7 +33,7 @@ public final class TombOfHorrorsAdventurer extends CardImpl {
|
|||
this.toughness = new MageInt(4);
|
||||
|
||||
// When Tomb of Horrors Adventurer enters the battlefield, you take the initiative.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()).addHint(InitiativeHint.instance));
|
||||
|
||||
// Whenever you cast your second spell each turn, copy it. If you've completed a dungeon, copy that spell twice instead. You may choose new targets for the copies.
|
||||
this.addAbility(new CastSecondSpellTriggeredAbility(new TombOfHorrorsAdventurerEffect())
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import mage.abilities.common.BecomesBlockedAttachedTriggeredAbility;
|
|||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.TakeTheInitiativeEffect;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.abilities.keyword.EquipAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -27,7 +28,7 @@ public final class TrailblazersTorch extends CardImpl {
|
|||
this.subtype.add(SubType.EQUIPMENT);
|
||||
|
||||
// When Trailblazer's Torch enters the battlefield, you take the initiative.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()).addHint(InitiativeHint.instance));
|
||||
|
||||
// Whenever equipped creature becomes blocked, it deals 2 damage to each creature blocking it.
|
||||
this.addAbility(new BecomesBlockedAttachedTriggeredAbility(
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import mage.abilities.condition.Condition;
|
|||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.TakeTheInitiativeEffect;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -24,7 +25,7 @@ public final class UndercellarSweep extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{4}{W}");
|
||||
|
||||
// When Undercellar Sweep enters the battlefield, you take the initiative.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()).addHint(InitiativeHint.instance));
|
||||
|
||||
// Whenever you attack, if you or a player you're attacking has the initiative, you create two 1/1 white Soldier creature token that are tapped and attacking.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package mage.cards.u;
|
|||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.common.TakeTheInitiativeEffect;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.abilities.keyword.MenaceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -28,7 +29,7 @@ public final class UnderdarkExplorer extends CardImpl {
|
|||
this.addAbility(new MenaceAbility());
|
||||
|
||||
// When Underdark Explorer enters the battlefield, you take the initiative.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()).addHint(InitiativeHint.instance));
|
||||
}
|
||||
|
||||
private UnderdarkExplorer(final UnderdarkExplorer card) {
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import mage.abilities.costs.common.TapSourceCost;
|
|||
import mage.abilities.decorator.ConditionalManaEffect;
|
||||
import mage.abilities.effects.common.TakeTheInitiativeEffect;
|
||||
import mage.abilities.effects.mana.BasicManaEffect;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.abilities.keyword.VigilanceAbility;
|
||||
import mage.abilities.mana.SimpleManaAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -36,7 +37,7 @@ public final class UndermountainAdventurer extends CardImpl {
|
|||
this.addAbility(VigilanceAbility.getInstance());
|
||||
|
||||
// When Undermountain Adventurer enters the battlefield, you take the initiative.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()).addHint(InitiativeHint.instance));
|
||||
|
||||
// {T}: Add {G}{G}. If you've completed a dungeon, add six {G} instead.
|
||||
this.addAbility(new SimpleManaAbility(
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import mage.abilities.common.BecomesBlockedByCreatureTriggeredAbility;
|
|||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.TakeTheInitiativeEffect;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -30,7 +31,7 @@ public final class ViciousBattlerager extends CardImpl {
|
|||
this.toughness = new MageInt(5);
|
||||
|
||||
// When Vicious Battlerager enters the battlefield, you take the initiative.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()).addHint(InitiativeHint.instance));
|
||||
|
||||
// Spiked Retribution — Whenever Vicious Battlerager becomes blocked by a creature, that creature's controller loses 5 life.
|
||||
this.addAbility(new BecomesBlockedByCreatureTriggeredAbility(
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
|||
import mage.abilities.condition.common.CompletedDungeonCondition;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.TakeTheInitiativeEffect;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -39,7 +40,7 @@ public final class WhitePlumeAdventurer extends CardImpl {
|
|||
this.toughness = new MageInt(3);
|
||||
|
||||
// When White Plume Adventurer enters battlefield, you take the initiative.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TakeTheInitiativeEffect()).addHint(InitiativeHint.instance));
|
||||
|
||||
// At the beginning of each opponent's upkeep, untap a creature you control. If you've completed a dungeon, untap all creatures you control instead.
|
||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ import mage.abilities.effects.common.FightTargetsEffect;
|
|||
import mage.abilities.effects.common.counter.ProliferateEffect;
|
||||
import mage.abilities.effects.keyword.ScryEffect;
|
||||
import mage.abilities.hint.common.CitysBlessingHint;
|
||||
import mage.abilities.hint.common.InitiativeHint;
|
||||
import mage.abilities.hint.common.MonarchHint;
|
||||
import mage.abilities.keyword.*;
|
||||
import mage.cards.*;
|
||||
|
|
@ -2048,6 +2049,7 @@ public class VerifyCardDataTest {
|
|||
Map<Class, String> cardHints = new HashMap<>();
|
||||
cardHints.put(CitysBlessingHint.class, "city's blessing");
|
||||
cardHints.put(MonarchHint.class, "the monarch");
|
||||
cardHints.put(InitiativeHint.class, "the initiative");
|
||||
for (Class hintClass : cardHints.keySet()) {
|
||||
String lookupText = cardHints.get(hintClass);
|
||||
boolean needHint = ref.text.contains(lookupText);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,37 @@
|
|||
package mage.abilities.hint.common;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.condition.common.HaveInitiativeCondition;
|
||||
import mage.abilities.hint.ConditionHint;
|
||||
import mage.abilities.hint.Hint;
|
||||
import mage.game.Game;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* @author JayDi85
|
||||
*/
|
||||
public enum InitiativeHint implements Hint {
|
||||
|
||||
instance;
|
||||
private static final ConditionHint hint = new ConditionHint(HaveInitiativeCondition.instance, "You have the Initiative");
|
||||
|
||||
@Override
|
||||
public String getText(Game game, Ability ability) {
|
||||
String res = hint.getText(game, ability);
|
||||
if (game.getInitiativeId() == null) {
|
||||
// no initiative
|
||||
return res + " (no Initiative in the game)";
|
||||
} else {
|
||||
// player
|
||||
return res + Optional.ofNullable(game.getPlayer(game.getInitiativeId()))
|
||||
.map(p -> " (current owner: " + p.getName() + ")")
|
||||
.orElse("");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Hint copy() {
|
||||
return instance;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue