From bf2c4cac159cde4556b5eea578cbf605dc46f467 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Fri, 20 Sep 2024 17:53:38 +0400 Subject: [PATCH] Venture into abilities - added card hints about current dungeon and room (part of #12274); --- .../src/mage/cards/a/AcererakTheArchlich.java | 5 ++- Mage.Sets/src/mage/cards/b/BarTheGate.java | 2 + .../mage/cards/b/BarrowinOfClanUndurr.java | 4 +- .../src/mage/cards/c/ClatteringSkeletons.java | 4 +- .../src/mage/cards/c/CloisterGargoyle.java | 4 +- Mage.Sets/src/mage/cards/d/DelversTorch.java | 4 +- .../src/mage/cards/d/DisplacerBeast.java | 4 +- .../src/mage/cards/d/DungeonDescent.java | 2 + Mage.Sets/src/mage/cards/d/DungeonMap.java | 2 + .../src/mage/cards/e/EccentricApprentice.java | 4 +- .../src/mage/cards/e/EllywickTumblestrum.java | 4 +- Mage.Sets/src/mage/cards/f/FatesReversal.java | 2 + .../src/mage/cards/f/FiftyFeetOfRope.java | 2 + Mage.Sets/src/mage/cards/f/FindThePath.java | 4 +- Mage.Sets/src/mage/cards/f/Fly.java | 2 + Mage.Sets/src/mage/cards/i/ImmovableRod.java | 4 +- .../src/mage/cards/i/IntrepidOutlander.java | 4 +- .../src/mage/cards/k/KeenEaredSentry.java | 3 +- Mage.Sets/src/mage/cards/k/KickInTheDoor.java | 2 + .../src/mage/cards/m/MidnightPathlighter.java | 4 +- .../mage/cards/n/NadaarSelflessPaladin.java | 4 +- Mage.Sets/src/mage/cards/p/PlanarAlly.java | 4 +- .../src/mage/cards/p/PrecipitousDrop.java | 4 +- Mage.Sets/src/mage/cards/r/RadiantSolar.java | 3 +- Mage.Sets/src/mage/cards/r/RangersHawk.java | 2 + Mage.Sets/src/mage/cards/s/SecretDoor.java | 3 +- .../mage/cards/s/SefrisOfTheHiddenWays.java | 3 +- .../src/mage/cards/s/ShortcutSeeker.java | 3 +- .../mage/cards/t/ThoroughInvestigation.java | 4 +- .../mage/cards/t/TriumphantAdventurer.java | 4 +- .../mage/cards/v/VarisSilverymoonRanger.java | 3 +- .../src/mage/cards/v/VeteranDungeoneer.java | 4 +- .../src/mage/cards/w/WanderingTroubadour.java | 3 +- .../src/mage/cards/y/YouFindACursedIdol.java | 2 + .../src/mage/cards/y/YuanTiFangBlade.java | 3 +- Mage.Sets/src/mage/cards/y/YuanTiMalison.java | 4 +- .../src/mage/cards/z/ZaltoFireGiantDuke.java | 4 +- Mage.Sets/src/mage/cards/z/ZombieOgre.java | 3 +- .../java/mage/verify/VerifyCardDataTest.java | 2 + .../hint/common/CurrentDungeonHint.java | 43 +++++++++++++++++++ .../java/mage/designations/Initiative.java | 2 + Mage/src/main/java/mage/game/Game.java | 9 +++- Mage/src/main/java/mage/game/GameImpl.java | 4 +- 43 files changed, 153 insertions(+), 33 deletions(-) create mode 100644 Mage/src/main/java/mage/abilities/hint/common/CurrentDungeonHint.java diff --git a/Mage.Sets/src/mage/cards/a/AcererakTheArchlich.java b/Mage.Sets/src/mage/cards/a/AcererakTheArchlich.java index 75ff120cfffd..11eda4d0318c 100644 --- a/Mage.Sets/src/mage/cards/a/AcererakTheArchlich.java +++ b/Mage.Sets/src/mage/cards/a/AcererakTheArchlich.java @@ -10,6 +10,7 @@ import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.ReturnToHandSourceEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -50,7 +51,9 @@ public AcererakTheArchlich(UUID ownerId, CardSetInfo setInfo) { "to its owner's hand and venture into the dungeon." ); ability.addEffect(new VentureIntoTheDungeonEffect()); - this.addAbility(ability.addHint(CompletedDungeonCondition.getHint()), new CompletedDungeonWatcher()); + ability.addHint(CurrentDungeonHint.instance); + ability.addHint(CompletedDungeonCondition.getHint()); + this.addAbility(ability, new CompletedDungeonWatcher()); // Whenever Acererak the Archlich attacks, for each opponent, you create a 2/2 black Zombie creature token unless that player sacrifices a creature. this.addAbility(new AttacksTriggeredAbility(new AcererakTheArchlichEffect())); diff --git a/Mage.Sets/src/mage/cards/b/BarTheGate.java b/Mage.Sets/src/mage/cards/b/BarTheGate.java index 5abaaa4d3371..498a85471f6a 100644 --- a/Mage.Sets/src/mage/cards/b/BarTheGate.java +++ b/Mage.Sets/src/mage/cards/b/BarTheGate.java @@ -4,6 +4,7 @@ import mage.abilities.effects.common.CounterTargetEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -33,6 +34,7 @@ public BarTheGate(UUID ownerId, CardSetInfo setInfo) { this.getSpellAbility().addTarget(new TargetSpell(filter)); this.getSpellAbility().addEffect(new CounterTargetEffect()); this.getSpellAbility().addEffect(new VentureIntoTheDungeonEffect()); + this.getSpellAbility().addHint(CurrentDungeonHint.instance); } private BarTheGate(final BarTheGate card) { diff --git a/Mage.Sets/src/mage/cards/b/BarrowinOfClanUndurr.java b/Mage.Sets/src/mage/cards/b/BarrowinOfClanUndurr.java index d5a478178b9b..4179fe20e0ff 100644 --- a/Mage.Sets/src/mage/cards/b/BarrowinOfClanUndurr.java +++ b/Mage.Sets/src/mage/cards/b/BarrowinOfClanUndurr.java @@ -8,6 +8,7 @@ import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -44,7 +45,8 @@ public BarrowinOfClanUndurr(UUID ownerId, CardSetInfo setInfo) { this.toughness = new MageInt(3); // When Barrowin of Clan Undurr enters the battlefield, venture into the dungeon. - this.addAbility(new EntersBattlefieldTriggeredAbility(new VentureIntoTheDungeonEffect())); + this.addAbility(new EntersBattlefieldTriggeredAbility(new VentureIntoTheDungeonEffect()) + .addHint(CurrentDungeonHint.instance)); // Whenever Barrowin of Clan Undurr attacks, return up to one creature card with mana value 3 or less from your graveyard to the battlefield if you've completed a dungeon. Ability ability = new AttacksTriggeredAbility(new ConditionalOneShotEffect( diff --git a/Mage.Sets/src/mage/cards/c/ClatteringSkeletons.java b/Mage.Sets/src/mage/cards/c/ClatteringSkeletons.java index ca58abf9247a..54ea1ebc4a13 100644 --- a/Mage.Sets/src/mage/cards/c/ClatteringSkeletons.java +++ b/Mage.Sets/src/mage/cards/c/ClatteringSkeletons.java @@ -3,6 +3,7 @@ import mage.MageInt; import mage.abilities.common.DiesSourceTriggeredAbility; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -23,7 +24,8 @@ public ClatteringSkeletons(UUID ownerId, CardSetInfo setInfo) { this.toughness = new MageInt(3); // When Clattering Skeletons dies, venture into the dungeon. - this.addAbility(new DiesSourceTriggeredAbility(new VentureIntoTheDungeonEffect())); + this.addAbility(new DiesSourceTriggeredAbility(new VentureIntoTheDungeonEffect()) + .addHint(CurrentDungeonHint.instance)); } private ClatteringSkeletons(final ClatteringSkeletons card) { diff --git a/Mage.Sets/src/mage/cards/c/CloisterGargoyle.java b/Mage.Sets/src/mage/cards/c/CloisterGargoyle.java index f524a0d514ea..accffe32c7c4 100644 --- a/Mage.Sets/src/mage/cards/c/CloisterGargoyle.java +++ b/Mage.Sets/src/mage/cards/c/CloisterGargoyle.java @@ -9,6 +9,7 @@ import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -32,7 +33,8 @@ public CloisterGargoyle(UUID ownerId, CardSetInfo setInfo) { this.toughness = new MageInt(4); // When Cloister Gargoyle enters the battlefield, venture into the dungeon. - this.addAbility(new EntersBattlefieldTriggeredAbility(new VentureIntoTheDungeonEffect())); + this.addAbility(new EntersBattlefieldTriggeredAbility(new VentureIntoTheDungeonEffect()) + .addHint(CurrentDungeonHint.instance)); // As long as you've completed a dungeon, Cloister Gargoyle gets +3/+0 and has flying. Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( diff --git a/Mage.Sets/src/mage/cards/d/DelversTorch.java b/Mage.Sets/src/mage/cards/d/DelversTorch.java index 6f16ceb64851..9bddb32a41b5 100644 --- a/Mage.Sets/src/mage/cards/d/DelversTorch.java +++ b/Mage.Sets/src/mage/cards/d/DelversTorch.java @@ -6,6 +6,7 @@ import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.continuous.BoostEquippedEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.abilities.keyword.EquipAbility; import mage.constants.SubType; import mage.cards.CardImpl; @@ -27,7 +28,8 @@ public DelversTorch(UUID ownerId, CardSetInfo setInfo) { this.addAbility(new SimpleStaticAbility(new BoostEquippedEffect(1, 1))); // Whenever equipped creature attacks, venture into the dungeon. - this.addAbility(new AttacksAttachedTriggeredAbility(new VentureIntoTheDungeonEffect())); + this.addAbility(new AttacksAttachedTriggeredAbility(new VentureIntoTheDungeonEffect()) + .addHint(CurrentDungeonHint.instance)); // Equip {3} this.addAbility(new EquipAbility(3)); diff --git a/Mage.Sets/src/mage/cards/d/DisplacerBeast.java b/Mage.Sets/src/mage/cards/d/DisplacerBeast.java index a93e64427a86..1f2adbf595a4 100644 --- a/Mage.Sets/src/mage/cards/d/DisplacerBeast.java +++ b/Mage.Sets/src/mage/cards/d/DisplacerBeast.java @@ -6,6 +6,7 @@ import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.ReturnToHandSourceEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -27,7 +28,8 @@ public DisplacerBeast(UUID ownerId, CardSetInfo setInfo) { this.toughness = new MageInt(2); // When Displacer Beast enters the battlefield, venture into the dungeon. - this.addAbility(new EntersBattlefieldTriggeredAbility(new VentureIntoTheDungeonEffect())); + this.addAbility(new EntersBattlefieldTriggeredAbility(new VentureIntoTheDungeonEffect()) + .addHint(CurrentDungeonHint.instance)); // Displacement — {3}{U}: Return Displacer Beast to its owner's hand. this.addAbility(new SimpleActivatedAbility( diff --git a/Mage.Sets/src/mage/cards/d/DungeonDescent.java b/Mage.Sets/src/mage/cards/d/DungeonDescent.java index 38d9030d41e2..265a5dde952d 100644 --- a/Mage.Sets/src/mage/cards/d/DungeonDescent.java +++ b/Mage.Sets/src/mage/cards/d/DungeonDescent.java @@ -9,6 +9,7 @@ import mage.abilities.costs.common.TapTargetCost; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.abilities.mana.ColorlessManaAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -45,6 +46,7 @@ public DungeonDescent(UUID ownerId, CardSetInfo setInfo) { Ability ability = new ActivateAsSorceryActivatedAbility(new VentureIntoTheDungeonEffect(), new GenericManaCost(4)); ability.addCost(new TapSourceCost()); ability.addCost(new TapTargetCost(new TargetControlledCreaturePermanent(filter))); + ability.addHint(CurrentDungeonHint.instance); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/d/DungeonMap.java b/Mage.Sets/src/mage/cards/d/DungeonMap.java index 9a264aa828f4..4aea25494dab 100644 --- a/Mage.Sets/src/mage/cards/d/DungeonMap.java +++ b/Mage.Sets/src/mage/cards/d/DungeonMap.java @@ -5,6 +5,7 @@ import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.abilities.mana.ColorlessManaAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -28,6 +29,7 @@ public DungeonMap(UUID ownerId, CardSetInfo setInfo) { new VentureIntoTheDungeonEffect(), new GenericManaCost(3) ); ability.addCost(new TapSourceCost()); + ability.addHint(CurrentDungeonHint.instance); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/e/EccentricApprentice.java b/Mage.Sets/src/mage/cards/e/EccentricApprentice.java index 0e8155a41a9c..457d86a2d46e 100644 --- a/Mage.Sets/src/mage/cards/e/EccentricApprentice.java +++ b/Mage.Sets/src/mage/cards/e/EccentricApprentice.java @@ -8,6 +8,7 @@ import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; import mage.abilities.effects.ContinuousEffectImpl; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -36,7 +37,8 @@ public EccentricApprentice(UUID ownerId, CardSetInfo setInfo) { this.addAbility(FlyingAbility.getInstance()); // When Eccentric Apprentice enters the battlefield, venture into the dungeon. - this.addAbility(new EntersBattlefieldTriggeredAbility(new VentureIntoTheDungeonEffect())); + this.addAbility(new EntersBattlefieldTriggeredAbility(new VentureIntoTheDungeonEffect()) + .addHint(CurrentDungeonHint.instance)); // At the beginning of combat on your turn, if you've completed a dungeon, up to one target creature becomes a Bird with base power and toughness 1/1 and flying until end of turn. Ability ability = new ConditionalInterveningIfTriggeredAbility( diff --git a/Mage.Sets/src/mage/cards/e/EllywickTumblestrum.java b/Mage.Sets/src/mage/cards/e/EllywickTumblestrum.java index 57d83603cfa3..89517ab492fa 100644 --- a/Mage.Sets/src/mage/cards/e/EllywickTumblestrum.java +++ b/Mage.Sets/src/mage/cards/e/EllywickTumblestrum.java @@ -5,6 +5,7 @@ import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.GetEmblemEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.cards.*; import mage.constants.*; import mage.filter.StaticFilters; @@ -29,7 +30,8 @@ public EllywickTumblestrum(UUID ownerId, CardSetInfo setInfo) { this.setStartingLoyalty(4); // +1: Venture into the dungeon. - this.addAbility(new LoyaltyAbility(new VentureIntoTheDungeonEffect(), 1)); + this.addAbility(new LoyaltyAbility(new VentureIntoTheDungeonEffect(), 1) + .addHint(CurrentDungeonHint.instance)); // −2: Look at the top six cards of your library. You may reveal a creature card from among them and put it into your hand. If it's legendary, you gain 3 life. Put the rest on the bottom of your library in a random order. this.addAbility(new LoyaltyAbility(new EllywickTumblestrumEffect(), -2)); diff --git a/Mage.Sets/src/mage/cards/f/FatesReversal.java b/Mage.Sets/src/mage/cards/f/FatesReversal.java index 81beb2549599..b501db13cd03 100644 --- a/Mage.Sets/src/mage/cards/f/FatesReversal.java +++ b/Mage.Sets/src/mage/cards/f/FatesReversal.java @@ -2,6 +2,7 @@ import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -24,6 +25,7 @@ public FatesReversal(UUID ownerId, CardSetInfo setInfo) { 0, 1, StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD )); this.getSpellAbility().addEffect(new VentureIntoTheDungeonEffect().concatBy(".")); + this.getSpellAbility().addHint(CurrentDungeonHint.instance); } private FatesReversal(final FatesReversal card) { diff --git a/Mage.Sets/src/mage/cards/f/FiftyFeetOfRope.java b/Mage.Sets/src/mage/cards/f/FiftyFeetOfRope.java index 3145447945a6..2d7ff655e9c2 100644 --- a/Mage.Sets/src/mage/cards/f/FiftyFeetOfRope.java +++ b/Mage.Sets/src/mage/cards/f/FiftyFeetOfRope.java @@ -10,6 +10,7 @@ import mage.abilities.effects.common.DontUntapInControllersNextUntapStepTargetEffect; import mage.abilities.effects.common.combat.CantBlockTargetEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -44,6 +45,7 @@ public FiftyFeetOfRope(UUID ownerId, CardSetInfo setInfo) { // Rappel Down — {4}, {T}: Venture into the dungeon. Activate only as a sorcery. ability = new ActivateAsSorceryActivatedAbility(new VentureIntoTheDungeonEffect(), new ManaCostsImpl<>("{4}")); ability.addCost(new TapSourceCost()); + ability.addHint(CurrentDungeonHint.instance); this.addAbility(ability.withFlavorWord("Rappel Down")); } diff --git a/Mage.Sets/src/mage/cards/f/FindThePath.java b/Mage.Sets/src/mage/cards/f/FindThePath.java index 9f3464fb630e..27478871c663 100644 --- a/Mage.Sets/src/mage/cards/f/FindThePath.java +++ b/Mage.Sets/src/mage/cards/f/FindThePath.java @@ -8,6 +8,7 @@ import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.abilities.keyword.EnchantAbility; import mage.abilities.mana.SimpleManaAbility; import mage.cards.CardImpl; @@ -36,7 +37,8 @@ public FindThePath(UUID ownerId, CardSetInfo setInfo) { this.addAbility(ability); // When Find the Path enters the battlefield, venture into the dungeon. - this.addAbility(new EntersBattlefieldTriggeredAbility(new VentureIntoTheDungeonEffect())); + this.addAbility(new EntersBattlefieldTriggeredAbility(new VentureIntoTheDungeonEffect()) + .addHint(CurrentDungeonHint.instance)); // Enchanted land has "{T}: Add {G}{G}." this.addAbility(new SimpleStaticAbility(new GainAbilityAttachedEffect( diff --git a/Mage.Sets/src/mage/cards/f/Fly.java b/Mage.Sets/src/mage/cards/f/Fly.java index b45ef4297eb1..5eec8db27293 100644 --- a/Mage.Sets/src/mage/cards/f/Fly.java +++ b/Mage.Sets/src/mage/cards/f/Fly.java @@ -6,6 +6,7 @@ import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.abilities.keyword.FlyingAbility; import mage.constants.AttachmentType; import mage.constants.SubType; @@ -43,6 +44,7 @@ public Fly(UUID ownerId, CardSetInfo setInfo) { new DealsCombatDamageToAPlayerTriggeredAbility(new VentureIntoTheDungeonEffect(), false), AttachmentType.AURA).setText("and \"Whenever this creature deals combat damage to a player, venture into the dungeon.\"") ); + ability.addHint(CurrentDungeonHint.instance); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/i/ImmovableRod.java b/Mage.Sets/src/mage/cards/i/ImmovableRod.java index 9b07b152a39e..49cc0385d2d2 100644 --- a/Mage.Sets/src/mage/cards/i/ImmovableRod.java +++ b/Mage.Sets/src/mage/cards/i/ImmovableRod.java @@ -8,6 +8,7 @@ import mage.abilities.effects.ContinuousEffectImpl; import mage.abilities.effects.RestrictionEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.abilities.keyword.InspiredAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -38,7 +39,8 @@ public ImmovableRod(UUID ownerId, CardSetInfo setInfo) { this.addAbility(new SkipUntapOptionalAbility()); // Whenever Immovable Rod becomes untapped, venture into the dungeon. - this.addAbility(new InspiredAbility(new VentureIntoTheDungeonEffect(), false, false)); + this.addAbility(new InspiredAbility(new VentureIntoTheDungeonEffect(), false, false) + .addHint(CurrentDungeonHint.instance)); // {3}{W}, {T}: For as long as Immovable Rod remains tapped, another target permanent loses all abilities and can't attack or block. Ability ability = new SimpleActivatedAbility(new ImmovableRodAbilityEffect(), new ManaCostsImpl<>("{3}{W}")); diff --git a/Mage.Sets/src/mage/cards/i/IntrepidOutlander.java b/Mage.Sets/src/mage/cards/i/IntrepidOutlander.java index 1d1487629083..be3dfbcc45ca 100644 --- a/Mage.Sets/src/mage/cards/i/IntrepidOutlander.java +++ b/Mage.Sets/src/mage/cards/i/IntrepidOutlander.java @@ -2,6 +2,7 @@ import mage.MageInt; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.abilities.keyword.PackTacticsAbility; import mage.abilities.keyword.ReachAbility; import mage.cards.CardImpl; @@ -28,7 +29,8 @@ public IntrepidOutlander(UUID ownerId, CardSetInfo setInfo) { this.addAbility(ReachAbility.getInstance()); // Pack tactics — Whenever Intrepid Outlander attacks, if you attacked with creatures with total power 6 or greater this combat, venture into the dungeon. - this.addAbility(new PackTacticsAbility(new VentureIntoTheDungeonEffect())); + this.addAbility(new PackTacticsAbility(new VentureIntoTheDungeonEffect()) + .addHint(CurrentDungeonHint.instance)); } private IntrepidOutlander(final IntrepidOutlander card) { diff --git a/Mage.Sets/src/mage/cards/k/KeenEaredSentry.java b/Mage.Sets/src/mage/cards/k/KeenEaredSentry.java index a2025f4ff5b7..21c170a4ecc5 100644 --- a/Mage.Sets/src/mage/cards/k/KeenEaredSentry.java +++ b/Mage.Sets/src/mage/cards/k/KeenEaredSentry.java @@ -6,6 +6,7 @@ import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; import mage.abilities.effects.common.continuous.GainAbilityControllerEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.abilities.keyword.HexproofAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -35,7 +36,7 @@ public KeenEaredSentry(UUID ownerId, CardSetInfo setInfo) { this.addAbility(new SimpleStaticAbility(new GainAbilityControllerEffect(HexproofAbility.getInstance()))); // Your opponents can't venture into the dungeon more than once each turn. - this.addAbility(new SimpleStaticAbility(new KeenEaredSentryEffect()), new KeenEaredSentryWatcher()); + this.addAbility(new SimpleStaticAbility(new KeenEaredSentryEffect()).addHint(CurrentDungeonHint.instance), new KeenEaredSentryWatcher()); } private KeenEaredSentry(final KeenEaredSentry card) { diff --git a/Mage.Sets/src/mage/cards/k/KickInTheDoor.java b/Mage.Sets/src/mage/cards/k/KickInTheDoor.java index 75bb61a535e2..2810a08ba318 100644 --- a/Mage.Sets/src/mage/cards/k/KickInTheDoor.java +++ b/Mage.Sets/src/mage/cards/k/KickInTheDoor.java @@ -6,6 +6,7 @@ import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.abilities.keyword.HasteAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -40,6 +41,7 @@ public KickInTheDoor(UUID ownerId, CardSetInfo setInfo) { .setText("and can't be blocked by Walls this turn") ); this.getSpellAbility().addEffect(new VentureIntoTheDungeonEffect()); + this.getSpellAbility().addHint(CurrentDungeonHint.instance); } private KickInTheDoor(final KickInTheDoor card) { diff --git a/Mage.Sets/src/mage/cards/m/MidnightPathlighter.java b/Mage.Sets/src/mage/cards/m/MidnightPathlighter.java index 8699dbf7eb22..827584eb51b2 100644 --- a/Mage.Sets/src/mage/cards/m/MidnightPathlighter.java +++ b/Mage.Sets/src/mage/cards/m/MidnightPathlighter.java @@ -5,6 +5,7 @@ import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesAllEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -44,7 +45,8 @@ public MidnightPathlighter(UUID ownerId, CardSetInfo setInfo) { ))); // Whenever one or more creatures you control deal combat damage to a player, venture into the dungeon. - this.addAbility(new DealCombatDamageControlledTriggeredAbility(new VentureIntoTheDungeonEffect())); + this.addAbility(new DealCombatDamageControlledTriggeredAbility(new VentureIntoTheDungeonEffect()) + .addHint(CurrentDungeonHint.instance)); } private MidnightPathlighter(final MidnightPathlighter card) { diff --git a/Mage.Sets/src/mage/cards/n/NadaarSelflessPaladin.java b/Mage.Sets/src/mage/cards/n/NadaarSelflessPaladin.java index 5d18921c76e8..1f164dea3fca 100644 --- a/Mage.Sets/src/mage/cards/n/NadaarSelflessPaladin.java +++ b/Mage.Sets/src/mage/cards/n/NadaarSelflessPaladin.java @@ -7,6 +7,7 @@ import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.abilities.keyword.VigilanceAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -36,7 +37,8 @@ public NadaarSelflessPaladin(UUID ownerId, CardSetInfo setInfo) { this.addAbility(VigilanceAbility.getInstance()); // Whenever Nadaar, Selfless Paladin enters the battlefield or attacks, venture into the dungeon. - this.addAbility(new EntersBattlefieldOrAttacksSourceTriggeredAbility(new VentureIntoTheDungeonEffect())); + this.addAbility(new EntersBattlefieldOrAttacksSourceTriggeredAbility(new VentureIntoTheDungeonEffect()) + .addHint(CurrentDungeonHint.instance)); // Other creatures you control get +1/+1 as long as you've completed a dungeon. this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( diff --git a/Mage.Sets/src/mage/cards/p/PlanarAlly.java b/Mage.Sets/src/mage/cards/p/PlanarAlly.java index 77bacc0f9e54..d4bfad8d524c 100644 --- a/Mage.Sets/src/mage/cards/p/PlanarAlly.java +++ b/Mage.Sets/src/mage/cards/p/PlanarAlly.java @@ -3,6 +3,7 @@ import mage.MageInt; import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -27,7 +28,8 @@ public PlanarAlly(UUID ownerId, CardSetInfo setInfo) { this.addAbility(FlyingAbility.getInstance()); // Whenever Planar Ally attacks, venture into the dungeon. - this.addAbility(new AttacksTriggeredAbility(new VentureIntoTheDungeonEffect(), false)); + this.addAbility(new AttacksTriggeredAbility(new VentureIntoTheDungeonEffect(), false) + .addHint(CurrentDungeonHint.instance)); } private PlanarAlly(final PlanarAlly card) { diff --git a/Mage.Sets/src/mage/cards/p/PrecipitousDrop.java b/Mage.Sets/src/mage/cards/p/PrecipitousDrop.java index daf04fd43e13..f4f12f45a013 100644 --- a/Mage.Sets/src/mage/cards/p/PrecipitousDrop.java +++ b/Mage.Sets/src/mage/cards/p/PrecipitousDrop.java @@ -8,6 +8,7 @@ import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.continuous.BoostEnchantedEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -38,7 +39,8 @@ public PrecipitousDrop(UUID ownerId, CardSetInfo setInfo) { this.addAbility(ability); // When Precipitous Drop enters the battlefield, venture into the dungeon. - this.addAbility(new EntersBattlefieldTriggeredAbility(new VentureIntoTheDungeonEffect())); + this.addAbility(new EntersBattlefieldTriggeredAbility(new VentureIntoTheDungeonEffect()) + .addHint(CurrentDungeonHint.instance)); // Enchanted creature gets -2/-2. It gets -5/-5 instead as long as you've completed a dungeon. this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( diff --git a/Mage.Sets/src/mage/cards/r/RadiantSolar.java b/Mage.Sets/src/mage/cards/r/RadiantSolar.java index fab09162a6e5..609b33c0b4aa 100644 --- a/Mage.Sets/src/mage/cards/r/RadiantSolar.java +++ b/Mage.Sets/src/mage/cards/r/RadiantSolar.java @@ -8,6 +8,7 @@ import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.LifelinkAbility; import mage.cards.CardImpl; @@ -48,7 +49,7 @@ public RadiantSolar(UUID ownerId, CardSetInfo setInfo) { // Whenever Radiant Solar or another nontoken creature you control enters, venture into the dungeon. this.addAbility(new EntersBattlefieldThisOrAnotherTriggeredAbility( new VentureIntoTheDungeonEffect(), filter, false, true - )); + ).addHint(CurrentDungeonHint.instance)); // {W}, Discard Radiant Solar: Venture into the dungeon and you gain 3 life. Ability ability = new SimpleActivatedAbility( diff --git a/Mage.Sets/src/mage/cards/r/RangersHawk.java b/Mage.Sets/src/mage/cards/r/RangersHawk.java index b0d4157bbe3d..e2b3bd2c1738 100644 --- a/Mage.Sets/src/mage/cards/r/RangersHawk.java +++ b/Mage.Sets/src/mage/cards/r/RangersHawk.java @@ -7,6 +7,7 @@ import mage.abilities.costs.common.TapTargetCost; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -49,6 +50,7 @@ public RangersHawk(UUID ownerId, CardSetInfo setInfo) { ); ability.addCost(new TapSourceCost()); ability.addCost(new TapTargetCost(new TargetControlledPermanent(filter))); + ability.addHint(CurrentDungeonHint.instance); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/SecretDoor.java b/Mage.Sets/src/mage/cards/s/SecretDoor.java index 524bff4490f5..acb9af22fc77 100644 --- a/Mage.Sets/src/mage/cards/s/SecretDoor.java +++ b/Mage.Sets/src/mage/cards/s/SecretDoor.java @@ -4,6 +4,7 @@ import mage.abilities.common.ActivateAsSorceryActivatedAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.abilities.keyword.DefenderAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -30,7 +31,7 @@ public SecretDoor(UUID ownerId, CardSetInfo setInfo) { // {4}{U}: Venture into the dungeon. Activate only as a sorcery. this.addAbility(new ActivateAsSorceryActivatedAbility( new VentureIntoTheDungeonEffect(), new ManaCostsImpl<>("{4}{U}") - )); + ).addHint(CurrentDungeonHint.instance)); } private SecretDoor(final SecretDoor card) { diff --git a/Mage.Sets/src/mage/cards/s/SefrisOfTheHiddenWays.java b/Mage.Sets/src/mage/cards/s/SefrisOfTheHiddenWays.java index b68dcce73113..c84c56f43336 100644 --- a/Mage.Sets/src/mage/cards/s/SefrisOfTheHiddenWays.java +++ b/Mage.Sets/src/mage/cards/s/SefrisOfTheHiddenWays.java @@ -6,6 +6,7 @@ import mage.abilities.common.PutCardIntoGraveFromAnywhereAllTriggeredAbility; import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -38,7 +39,7 @@ public SefrisOfTheHiddenWays(UUID ownerId, CardSetInfo setInfo) { // Whenever one or more creature cards are put into your graveyard from anywhere, venture into the dungeon. This ability triggers only once each turn. this.addAbility(new PutCardIntoGraveFromAnywhereAllTriggeredAbility( new VentureIntoTheDungeonEffect(), false, filter, TargetController.YOU - ).setTriggersLimitEachTurn(1)); + ).setTriggersLimitEachTurn(1).addHint(CurrentDungeonHint.instance)); // Create Undead — Whenever you complete a dungeon, return target creature card from your graveyard to the battlefield. Ability ability = new CompletedDungeonTriggeredAbility(new ReturnFromGraveyardToBattlefieldTargetEffect()); diff --git a/Mage.Sets/src/mage/cards/s/ShortcutSeeker.java b/Mage.Sets/src/mage/cards/s/ShortcutSeeker.java index 755321924ca9..4b987104cfe8 100644 --- a/Mage.Sets/src/mage/cards/s/ShortcutSeeker.java +++ b/Mage.Sets/src/mage/cards/s/ShortcutSeeker.java @@ -3,6 +3,7 @@ import mage.MageInt; import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -26,7 +27,7 @@ public ShortcutSeeker(UUID ownerId, CardSetInfo setInfo) { // Whenever Shortcut Seeker deals combat damage to a player, venture into the dungeon. this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility( new VentureIntoTheDungeonEffect(), false - )); + ).addHint(CurrentDungeonHint.instance)); } private ShortcutSeeker(final ShortcutSeeker card) { diff --git a/Mage.Sets/src/mage/cards/t/ThoroughInvestigation.java b/Mage.Sets/src/mage/cards/t/ThoroughInvestigation.java index af6067f8b5db..37091da9657e 100644 --- a/Mage.Sets/src/mage/cards/t/ThoroughInvestigation.java +++ b/Mage.Sets/src/mage/cards/t/ThoroughInvestigation.java @@ -4,6 +4,7 @@ import mage.abilities.common.SacrificePermanentTriggeredAbility; import mage.abilities.effects.keyword.InvestigateEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -23,7 +24,8 @@ public ThoroughInvestigation(UUID ownerId, CardSetInfo setInfo) { this.addAbility(new AttacksWithCreaturesTriggeredAbility(new InvestigateEffect(), 1)); // Whenever you sacrifice a Clue, venture into the dungeon. - this.addAbility(new SacrificePermanentTriggeredAbility(new VentureIntoTheDungeonEffect(), StaticFilters.FILTER_CONTROLLED_CLUE)); + this.addAbility(new SacrificePermanentTriggeredAbility(new VentureIntoTheDungeonEffect(), StaticFilters.FILTER_CONTROLLED_CLUE) + .addHint(CurrentDungeonHint.instance)); } private ThoroughInvestigation(final ThoroughInvestigation card) { diff --git a/Mage.Sets/src/mage/cards/t/TriumphantAdventurer.java b/Mage.Sets/src/mage/cards/t/TriumphantAdventurer.java index 03c7406dee0a..6a562cf14b91 100644 --- a/Mage.Sets/src/mage/cards/t/TriumphantAdventurer.java +++ b/Mage.Sets/src/mage/cards/t/TriumphantAdventurer.java @@ -8,6 +8,7 @@ import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.abilities.hint.common.MyTurnHint; import mage.abilities.keyword.FirstStrikeAbility; import mage.constants.Duration; @@ -42,7 +43,8 @@ public TriumphantAdventurer(UUID ownerId, CardSetInfo setInfo) { ).addHint(MyTurnHint.instance)); // Whenever Triumphant Adventurer attacks, venture into the dungeon. - this.addAbility(new AttacksTriggeredAbility(new VentureIntoTheDungeonEffect(), false)); + this.addAbility(new AttacksTriggeredAbility(new VentureIntoTheDungeonEffect(), false) + .addHint(CurrentDungeonHint.instance)); } private TriumphantAdventurer(final TriumphantAdventurer card) { diff --git a/Mage.Sets/src/mage/cards/v/VarisSilverymoonRanger.java b/Mage.Sets/src/mage/cards/v/VarisSilverymoonRanger.java index 636e004bd053..a4822f7517a2 100644 --- a/Mage.Sets/src/mage/cards/v/VarisSilverymoonRanger.java +++ b/Mage.Sets/src/mage/cards/v/VarisSilverymoonRanger.java @@ -6,6 +6,7 @@ import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.abilities.keyword.ReachAbility; import mage.abilities.keyword.WardAbility; import mage.cards.CardImpl; @@ -52,7 +53,7 @@ public VarisSilverymoonRanger(UUID ownerId, CardSetInfo setInfo) { // Whenever you cast a creature or planeswalker spell, venture into the dungeon. This ability triggers only once each turn. this.addAbility(new SpellCastControllerTriggeredAbility( new VentureIntoTheDungeonEffect(), filter, false - ).setTriggersLimitEachTurn(1)); + ).setTriggersLimitEachTurn(1).addHint(CurrentDungeonHint.instance)); // Whenever you complete a dungeon, create a 2/2 green Wolf creature token. this.addAbility(new CompletedDungeonTriggeredAbility(new CreateTokenEffect(new WolfToken()))); diff --git a/Mage.Sets/src/mage/cards/v/VeteranDungeoneer.java b/Mage.Sets/src/mage/cards/v/VeteranDungeoneer.java index e3c42eefed83..b0d5f86142f5 100644 --- a/Mage.Sets/src/mage/cards/v/VeteranDungeoneer.java +++ b/Mage.Sets/src/mage/cards/v/VeteranDungeoneer.java @@ -3,6 +3,7 @@ import mage.MageInt; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -24,7 +25,8 @@ public VeteranDungeoneer(UUID ownerId, CardSetInfo setInfo) { this.toughness = new MageInt(4); // When Veteran Dungeoneer enters the battlefield, venture into the dungeon. - this.addAbility(new EntersBattlefieldTriggeredAbility(new VentureIntoTheDungeonEffect())); + this.addAbility(new EntersBattlefieldTriggeredAbility(new VentureIntoTheDungeonEffect()) + .addHint(CurrentDungeonHint.instance)); } private VeteranDungeoneer(final VeteranDungeoneer card) { diff --git a/Mage.Sets/src/mage/cards/w/WanderingTroubadour.java b/Mage.Sets/src/mage/cards/w/WanderingTroubadour.java index c7de5e80060b..b04a532746a6 100644 --- a/Mage.Sets/src/mage/cards/w/WanderingTroubadour.java +++ b/Mage.Sets/src/mage/cards/w/WanderingTroubadour.java @@ -6,6 +6,7 @@ import mage.abilities.condition.common.LandfallCondition; import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -31,7 +32,7 @@ public WanderingTroubadour(UUID ownerId, CardSetInfo setInfo) { new BeginningOfYourEndStepTriggeredAbility(new VentureIntoTheDungeonEffect(), false), LandfallCondition.instance, "At the beginning of your end step, if you had a land enter the battlefield under your control this turn, venture into the dungeon." - ), new LandfallWatcher()); + ).addHint(CurrentDungeonHint.instance), new LandfallWatcher()); } private WanderingTroubadour(final WanderingTroubadour card) { diff --git a/Mage.Sets/src/mage/cards/y/YouFindACursedIdol.java b/Mage.Sets/src/mage/cards/y/YouFindACursedIdol.java index a275b9292eac..95d30ba7bcb6 100644 --- a/Mage.Sets/src/mage/cards/y/YouFindACursedIdol.java +++ b/Mage.Sets/src/mage/cards/y/YouFindACursedIdol.java @@ -4,6 +4,7 @@ import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -36,6 +37,7 @@ public YouFindACursedIdol(UUID ownerId, CardSetInfo setInfo) { mode = new Mode(new CreateTokenEffect(new TreasureToken())); mode.addEffect(new VentureIntoTheDungeonEffect().concatBy("and")); this.getSpellAbility().addMode(mode.withFlavorWord("Steal Its Eyes")); + this.getSpellAbility().addHint(CurrentDungeonHint.instance); } private YouFindACursedIdol(final YouFindACursedIdol card) { diff --git a/Mage.Sets/src/mage/cards/y/YuanTiFangBlade.java b/Mage.Sets/src/mage/cards/y/YuanTiFangBlade.java index e33ca95618cb..74752e85caf3 100644 --- a/Mage.Sets/src/mage/cards/y/YuanTiFangBlade.java +++ b/Mage.Sets/src/mage/cards/y/YuanTiFangBlade.java @@ -3,6 +3,7 @@ import mage.MageInt; import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.abilities.keyword.DeathtouchAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -30,7 +31,7 @@ public YuanTiFangBlade(UUID ownerId, CardSetInfo setInfo) { // Whenever Yuan-Ti Fang-Blade deals combat damage to a player, venture into the dungeon. this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility( new VentureIntoTheDungeonEffect(), false - )); + ).addHint(CurrentDungeonHint.instance)); } private YuanTiFangBlade(final YuanTiFangBlade card) { diff --git a/Mage.Sets/src/mage/cards/y/YuanTiMalison.java b/Mage.Sets/src/mage/cards/y/YuanTiMalison.java index b146543c87f9..5e946677a36a 100644 --- a/Mage.Sets/src/mage/cards/y/YuanTiMalison.java +++ b/Mage.Sets/src/mage/cards/y/YuanTiMalison.java @@ -8,6 +8,7 @@ import mage.abilities.decorator.ConditionalRestrictionEffect; import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -35,7 +36,8 @@ public YuanTiMalison(UUID ownerId, CardSetInfo setInfo) { ))); // Whenever Yuan-Ti Malison deals combat damage to a player, venture into the dungeon. - this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new VentureIntoTheDungeonEffect(), false)); + this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new VentureIntoTheDungeonEffect(), false) + .addHint(CurrentDungeonHint.instance)); } private YuanTiMalison(final YuanTiMalison card) { diff --git a/Mage.Sets/src/mage/cards/z/ZaltoFireGiantDuke.java b/Mage.Sets/src/mage/cards/z/ZaltoFireGiantDuke.java index ae3cb9939167..641b230a9d7e 100644 --- a/Mage.Sets/src/mage/cards/z/ZaltoFireGiantDuke.java +++ b/Mage.Sets/src/mage/cards/z/ZaltoFireGiantDuke.java @@ -3,6 +3,7 @@ import mage.MageInt; import mage.abilities.common.DealtDamageToSourceTriggeredAbility; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.abilities.keyword.TrampleAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -30,7 +31,8 @@ public ZaltoFireGiantDuke(UUID ownerId, CardSetInfo setInfo) { this.addAbility(TrampleAbility.getInstance()); // Whenever Zalto, Fire Giant Duke is dealt damage, venture into the dungeon. - this.addAbility(new DealtDamageToSourceTriggeredAbility(new VentureIntoTheDungeonEffect(), false)); + this.addAbility(new DealtDamageToSourceTriggeredAbility(new VentureIntoTheDungeonEffect(), false) + .addHint(CurrentDungeonHint.instance)); } private ZaltoFireGiantDuke(final ZaltoFireGiantDuke card) { diff --git a/Mage.Sets/src/mage/cards/z/ZombieOgre.java b/Mage.Sets/src/mage/cards/z/ZombieOgre.java index 43f04c185f07..89ff6becde8d 100644 --- a/Mage.Sets/src/mage/cards/z/ZombieOgre.java +++ b/Mage.Sets/src/mage/cards/z/ZombieOgre.java @@ -4,6 +4,7 @@ import mage.abilities.common.BeginningOfEndStepTriggeredAbility; import mage.abilities.condition.common.MorbidCondition; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.abilities.hint.common.MorbidHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -31,7 +32,7 @@ public ZombieOgre(UUID ownerId, CardSetInfo setInfo) { this.addAbility(new BeginningOfEndStepTriggeredAbility( Zone.BATTLEFIELD, new VentureIntoTheDungeonEffect(), TargetController.YOU, MorbidCondition.instance, false - ).addHint(MorbidHint.instance)); + ).addHint(MorbidHint.instance).addHint(CurrentDungeonHint.instance)); } private ZombieOgre(final ZombieOgre card) { diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index d7d8717eb272..400605b04283 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -16,6 +16,7 @@ import mage.abilities.effects.common.counter.ProliferateEffect; import mage.abilities.effects.keyword.ScryEffect; import mage.abilities.hint.common.CitysBlessingHint; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.abilities.hint.common.InitiativeHint; import mage.abilities.hint.common.MonarchHint; import mage.abilities.keyword.*; @@ -2070,6 +2071,7 @@ private void checkMissingAbilities(Card card, MtgJsonCard ref) { cardHints.put(CitysBlessingHint.class, "city's blessing"); cardHints.put(MonarchHint.class, "the monarch"); cardHints.put(InitiativeHint.class, "the initiative"); + cardHints.put(CurrentDungeonHint.class, "venture into"); for (Class hintClass : cardHints.keySet()) { String lookupText = cardHints.get(hintClass); boolean needHint = ref.text.contains(lookupText); diff --git a/Mage/src/main/java/mage/abilities/hint/common/CurrentDungeonHint.java b/Mage/src/main/java/mage/abilities/hint/common/CurrentDungeonHint.java new file mode 100644 index 000000000000..5ce7d0763de7 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/hint/common/CurrentDungeonHint.java @@ -0,0 +1,43 @@ +package mage.abilities.hint.common; + +import mage.abilities.Ability; +import mage.abilities.condition.common.CitysBlessingCondition; +import mage.abilities.hint.ConditionHint; +import mage.abilities.hint.Hint; +import mage.game.Game; +import mage.game.command.Dungeon; +import mage.players.Player; + +/** + * @author JayDi85 + */ +public enum CurrentDungeonHint implements Hint { + + instance; + private static final ConditionHint hint = new ConditionHint(CitysBlessingCondition.instance, "You have city's blessing"); + + @Override + public String getText(Game game, Ability ability) { + Player player = game.getPlayer(ability.getControllerId()); + if (player == null) { + return ""; + } + + Dungeon dungeon = game.getPlayerDungeon(ability.getControllerId()); + if (dungeon == null) { + return "Current dungeon: not yet entered"; + } + + String dungeonInfo = "Current dungeon: " + dungeon.getLogName(); + if (dungeon.getCurrentRoom() != null) { + dungeonInfo += ", room: " + dungeon.getCurrentRoom().getName(); + } + + return dungeonInfo; + } + + @Override + public Hint copy() { + return instance; + } +} diff --git a/Mage/src/main/java/mage/designations/Initiative.java b/Mage/src/main/java/mage/designations/Initiative.java index da72667065a2..244ac075bfef 100644 --- a/Mage/src/main/java/mage/designations/Initiative.java +++ b/Mage/src/main/java/mage/designations/Initiative.java @@ -3,6 +3,7 @@ import mage.abilities.Ability; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.OneShotEffect; +import mage.abilities.hint.common.CurrentDungeonHint; import mage.constants.Outcome; import mage.constants.Zone; import mage.game.Controllable; @@ -113,6 +114,7 @@ class InitiativeVentureTriggeredAbility extends TriggeredAbilityImpl { InitiativeVentureTriggeredAbility() { super(Zone.ALL, new InitiativeUndercityEffect()); + addHint(CurrentDungeonHint.instance); } private InitiativeVentureTriggeredAbility(final InitiativeVentureTriggeredAbility ability) { diff --git a/Mage/src/main/java/mage/game/Game.java b/Mage/src/main/java/mage/game/Game.java index 5e5f5b58ca58..c6d8c2b0aa07 100644 --- a/Mage/src/main/java/mage/game/Game.java +++ b/Mage/src/main/java/mage/game/Game.java @@ -88,7 +88,7 @@ public interface Game extends MageItem, Serializable, Copyable { Dungeon getDungeon(UUID objectId); - Dungeon getPlayerDungeon(UUID objectId); + Dungeon getPlayerDungeon(UUID playerId); UUID getControllerId(UUID objectId); @@ -456,7 +456,12 @@ default boolean isOpponent(Player player, UUID playerToCheckId) { Dungeon addDungeon(Dungeon dungeon, UUID playerId); - void ventureIntoDungeon(UUID playerId, boolean undercity); + /** + * Enter to dungeon or go to next room + * + * @param isEnterToUndercity - enter to Undercity instead choose a new dungeon + */ + void ventureIntoDungeon(UUID playerId, boolean isEnterToUndercity); void temptWithTheRing(UUID playerId); diff --git a/Mage/src/main/java/mage/game/GameImpl.java b/Mage/src/main/java/mage/game/GameImpl.java index 4631cb50f98f..8c122146d71a 100644 --- a/Mage/src/main/java/mage/game/GameImpl.java +++ b/Mage/src/main/java/mage/game/GameImpl.java @@ -560,14 +560,14 @@ private Dungeon getOrCreateDungeon(UUID playerId, boolean undercity) { } @Override - public void ventureIntoDungeon(UUID playerId, boolean undercity) { + public void ventureIntoDungeon(UUID playerId, boolean isEnterToUndercity) { if (playerId == null) { return; } if (replaceEvent(GameEvent.getEvent(GameEvent.EventType.VENTURE, playerId, null, playerId))) { return; } - this.getOrCreateDungeon(playerId, undercity).moveToNextRoom(playerId, this); + this.getOrCreateDungeon(playerId, isEnterToUndercity).moveToNextRoom(playerId, this); fireEvent(GameEvent.getEvent(GameEvent.EventType.VENTURED, playerId, null, playerId)); }