Venture into abilities - added card hints about current dungeon and room (part of #12274);

This commit is contained in:
Oleg Agafonov 2024-09-20 17:53:38 +04:00
parent e1ab0be505
commit bf2c4cac15
43 changed files with 153 additions and 33 deletions

View file

@ -10,6 +10,7 @@ import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.ReturnToHandSourceEffect; import mage.abilities.effects.common.ReturnToHandSourceEffect;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -50,7 +51,9 @@ public final class AcererakTheArchlich extends CardImpl {
"to its owner's hand and venture into the dungeon." "to its owner's hand and venture into the dungeon."
); );
ability.addEffect(new VentureIntoTheDungeonEffect()); 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. // 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())); this.addAbility(new AttacksTriggeredAbility(new AcererakTheArchlichEffect()));

View file

@ -4,6 +4,7 @@ import java.util.UUID;
import mage.abilities.effects.common.CounterTargetEffect; import mage.abilities.effects.common.CounterTargetEffect;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -33,6 +34,7 @@ public final class BarTheGate extends CardImpl {
this.getSpellAbility().addTarget(new TargetSpell(filter)); this.getSpellAbility().addTarget(new TargetSpell(filter));
this.getSpellAbility().addEffect(new CounterTargetEffect()); this.getSpellAbility().addEffect(new CounterTargetEffect());
this.getSpellAbility().addEffect(new VentureIntoTheDungeonEffect()); this.getSpellAbility().addEffect(new VentureIntoTheDungeonEffect());
this.getSpellAbility().addHint(CurrentDungeonHint.instance);
} }
private BarTheGate(final BarTheGate card) { private BarTheGate(final BarTheGate card) {

View file

@ -8,6 +8,7 @@ import mage.abilities.condition.common.CompletedDungeonCondition;
import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect; import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -44,7 +45,8 @@ public final class BarrowinOfClanUndurr extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// When Barrowin of Clan Undurr enters the battlefield, venture into the dungeon. // 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. // 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( Ability ability = new AttacksTriggeredAbility(new ConditionalOneShotEffect(

View file

@ -3,6 +3,7 @@ package mage.cards.c;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.DiesSourceTriggeredAbility; import mage.abilities.common.DiesSourceTriggeredAbility;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -23,7 +24,8 @@ public final class ClatteringSkeletons extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// When Clattering Skeletons dies, venture into the dungeon. // 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) { private ClatteringSkeletons(final ClatteringSkeletons card) {

View file

@ -9,6 +9,7 @@ import mage.abilities.decorator.ConditionalContinuousEffect;
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.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
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;
@ -32,7 +33,8 @@ public final class CloisterGargoyle extends CardImpl {
this.toughness = new MageInt(4); this.toughness = new MageInt(4);
// When Cloister Gargoyle enters the battlefield, venture into the dungeon. // 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. // As long as you've completed a dungeon, Cloister Gargoyle gets +3/+0 and has flying.
Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect(

View file

@ -6,6 +6,7 @@ import mage.abilities.common.AttacksAttachedTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continuous.BoostEquippedEffect; import mage.abilities.effects.common.continuous.BoostEquippedEffect;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.abilities.keyword.EquipAbility; import mage.abilities.keyword.EquipAbility;
import mage.constants.SubType; import mage.constants.SubType;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -27,7 +28,8 @@ public final class DelversTorch extends CardImpl {
this.addAbility(new SimpleStaticAbility(new BoostEquippedEffect(1, 1))); this.addAbility(new SimpleStaticAbility(new BoostEquippedEffect(1, 1)));
// Whenever equipped creature attacks, venture into the dungeon. // 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} // Equip {3}
this.addAbility(new EquipAbility(3)); this.addAbility(new EquipAbility(3));

View file

@ -6,6 +6,7 @@ import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.ReturnToHandSourceEffect; import mage.abilities.effects.common.ReturnToHandSourceEffect;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -27,7 +28,8 @@ public final class DisplacerBeast extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// When Displacer Beast enters the battlefield, venture into the dungeon. // 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. // Displacement {3}{U}: Return Displacer Beast to its owner's hand.
this.addAbility(new SimpleActivatedAbility( this.addAbility(new SimpleActivatedAbility(

View file

@ -9,6 +9,7 @@ import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.common.TapTargetCost; import mage.abilities.costs.common.TapTargetCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.abilities.mana.ColorlessManaAbility; import mage.abilities.mana.ColorlessManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -45,6 +46,7 @@ public final class DungeonDescent extends CardImpl {
Ability ability = new ActivateAsSorceryActivatedAbility(new VentureIntoTheDungeonEffect(), new GenericManaCost(4)); Ability ability = new ActivateAsSorceryActivatedAbility(new VentureIntoTheDungeonEffect(), new GenericManaCost(4));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addCost(new TapTargetCost(new TargetControlledCreaturePermanent(filter))); ability.addCost(new TapTargetCost(new TargetControlledCreaturePermanent(filter)));
ability.addHint(CurrentDungeonHint.instance);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -5,6 +5,7 @@ import mage.abilities.common.ActivateAsSorceryActivatedAbility;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.abilities.mana.ColorlessManaAbility; import mage.abilities.mana.ColorlessManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -28,6 +29,7 @@ public final class DungeonMap extends CardImpl {
new VentureIntoTheDungeonEffect(), new GenericManaCost(3) new VentureIntoTheDungeonEffect(), new GenericManaCost(3)
); );
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addHint(CurrentDungeonHint.instance);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -8,6 +8,7 @@ import mage.abilities.condition.common.CompletedDungeonCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.ContinuousEffectImpl; import mage.abilities.effects.ContinuousEffectImpl;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
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;
@ -36,7 +37,8 @@ public final class EccentricApprentice extends CardImpl {
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// When Eccentric Apprentice enters the battlefield, venture into the dungeon. // 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. // 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( Ability ability = new ConditionalInterveningIfTriggeredAbility(

View file

@ -5,6 +5,7 @@ import mage.abilities.LoyaltyAbility;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.GetEmblemEffect; import mage.abilities.effects.common.GetEmblemEffect;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.cards.*; import mage.cards.*;
import mage.constants.*; import mage.constants.*;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
@ -29,7 +30,8 @@ public final class EllywickTumblestrum extends CardImpl {
this.setStartingLoyalty(4); this.setStartingLoyalty(4);
// +1: Venture into the dungeon. // +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. // 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)); this.addAbility(new LoyaltyAbility(new EllywickTumblestrumEffect(), -2));

View file

@ -2,6 +2,7 @@ package mage.cards.f;
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -24,6 +25,7 @@ public final class FatesReversal extends CardImpl {
0, 1, StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD 0, 1, StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD
)); ));
this.getSpellAbility().addEffect(new VentureIntoTheDungeonEffect().concatBy(".")); this.getSpellAbility().addEffect(new VentureIntoTheDungeonEffect().concatBy("."));
this.getSpellAbility().addHint(CurrentDungeonHint.instance);
} }
private FatesReversal(final FatesReversal card) { private FatesReversal(final FatesReversal card) {

View file

@ -10,6 +10,7 @@ import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.DontUntapInControllersNextUntapStepTargetEffect; import mage.abilities.effects.common.DontUntapInControllersNextUntapStepTargetEffect;
import mage.abilities.effects.common.combat.CantBlockTargetEffect; import mage.abilities.effects.common.combat.CantBlockTargetEffect;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -44,6 +45,7 @@ public final class FiftyFeetOfRope extends CardImpl {
// Rappel Down {4}, {T}: Venture into the dungeon. Activate only as a sorcery. // Rappel Down {4}, {T}: Venture into the dungeon. Activate only as a sorcery.
ability = new ActivateAsSorceryActivatedAbility(new VentureIntoTheDungeonEffect(), new ManaCostsImpl<>("{4}")); ability = new ActivateAsSorceryActivatedAbility(new VentureIntoTheDungeonEffect(), new ManaCostsImpl<>("{4}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addHint(CurrentDungeonHint.instance);
this.addAbility(ability.withFlavorWord("Rappel Down")); this.addAbility(ability.withFlavorWord("Rappel Down"));
} }

View file

@ -8,6 +8,7 @@ import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.EnchantAbility;
import mage.abilities.mana.SimpleManaAbility; import mage.abilities.mana.SimpleManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -36,7 +37,8 @@ public final class FindThePath extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
// When Find the Path enters the battlefield, venture into the dungeon. // 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}." // Enchanted land has "{T}: Add {G}{G}."
this.addAbility(new SimpleStaticAbility(new GainAbilityAttachedEffect( this.addAbility(new SimpleStaticAbility(new GainAbilityAttachedEffect(

View file

@ -6,6 +6,7 @@ import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.FlyingAbility;
import mage.constants.AttachmentType; import mage.constants.AttachmentType;
import mage.constants.SubType; import mage.constants.SubType;
@ -43,6 +44,7 @@ public final class Fly extends CardImpl {
new DealsCombatDamageToAPlayerTriggeredAbility(new VentureIntoTheDungeonEffect(), false), new DealsCombatDamageToAPlayerTriggeredAbility(new VentureIntoTheDungeonEffect(), false),
AttachmentType.AURA).setText("and \"Whenever this creature deals combat damage to a player, venture into the dungeon.\"") AttachmentType.AURA).setText("and \"Whenever this creature deals combat damage to a player, venture into the dungeon.\"")
); );
ability.addHint(CurrentDungeonHint.instance);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -8,6 +8,7 @@ import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.ContinuousEffectImpl; import mage.abilities.effects.ContinuousEffectImpl;
import mage.abilities.effects.RestrictionEffect; import mage.abilities.effects.RestrictionEffect;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.abilities.keyword.InspiredAbility; import mage.abilities.keyword.InspiredAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -38,7 +39,8 @@ public final class ImmovableRod extends CardImpl {
this.addAbility(new SkipUntapOptionalAbility()); this.addAbility(new SkipUntapOptionalAbility());
// Whenever Immovable Rod becomes untapped, venture into the dungeon. // 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. // {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}")); Ability ability = new SimpleActivatedAbility(new ImmovableRodAbilityEffect(), new ManaCostsImpl<>("{3}{W}"));

View file

@ -2,6 +2,7 @@ package mage.cards.i;
import mage.MageInt; import mage.MageInt;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.abilities.keyword.PackTacticsAbility; import mage.abilities.keyword.PackTacticsAbility;
import mage.abilities.keyword.ReachAbility; import mage.abilities.keyword.ReachAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -28,7 +29,8 @@ public final class IntrepidOutlander extends CardImpl {
this.addAbility(ReachAbility.getInstance()); 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. // 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) { private IntrepidOutlander(final IntrepidOutlander card) {

View file

@ -6,6 +6,7 @@ import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
import mage.abilities.effects.common.continuous.GainAbilityControllerEffect; import mage.abilities.effects.common.continuous.GainAbilityControllerEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.abilities.keyword.HexproofAbility; import mage.abilities.keyword.HexproofAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -35,7 +36,7 @@ public final class KeenEaredSentry extends CardImpl {
this.addAbility(new SimpleStaticAbility(new GainAbilityControllerEffect(HexproofAbility.getInstance()))); this.addAbility(new SimpleStaticAbility(new GainAbilityControllerEffect(HexproofAbility.getInstance())));
// Your opponents can't venture into the dungeon more than once each turn. // 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) { private KeenEaredSentry(final KeenEaredSentry card) {

View file

@ -6,6 +6,7 @@ import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.abilities.keyword.HasteAbility; import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -40,6 +41,7 @@ public final class KickInTheDoor extends CardImpl {
.setText("and can't be blocked by Walls this turn") .setText("and can't be blocked by Walls this turn")
); );
this.getSpellAbility().addEffect(new VentureIntoTheDungeonEffect()); this.getSpellAbility().addEffect(new VentureIntoTheDungeonEffect());
this.getSpellAbility().addHint(CurrentDungeonHint.instance);
} }
private KickInTheDoor(final KickInTheDoor card) { private KickInTheDoor(final KickInTheDoor card) {

View file

@ -5,6 +5,7 @@ import mage.abilities.common.DealCombatDamageControlledTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesAllEffect; import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesAllEffect;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -44,7 +45,8 @@ public final class MidnightPathlighter extends CardImpl {
))); )));
// Whenever one or more creatures you control deal combat damage to a player, venture into the dungeon. // 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) { private MidnightPathlighter(final MidnightPathlighter card) {

View file

@ -7,6 +7,7 @@ import mage.abilities.condition.common.CompletedDungeonCondition;
import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.abilities.keyword.VigilanceAbility; import mage.abilities.keyword.VigilanceAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -36,7 +37,8 @@ public final class NadaarSelflessPaladin extends CardImpl {
this.addAbility(VigilanceAbility.getInstance()); this.addAbility(VigilanceAbility.getInstance());
// Whenever Nadaar, Selfless Paladin enters the battlefield or attacks, venture into the dungeon. // 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. // Other creatures you control get +1/+1 as long as you've completed a dungeon.
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(

View file

@ -3,6 +3,7 @@ package mage.cards.p;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
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;
@ -27,7 +28,8 @@ public final class PlanarAlly extends CardImpl {
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// Whenever Planar Ally attacks, venture into the dungeon. // 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) { private PlanarAlly(final PlanarAlly card) {

View file

@ -8,6 +8,7 @@ import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.continuous.BoostEnchantedEffect; import mage.abilities.effects.common.continuous.BoostEnchantedEffect;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.EnchantAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -38,7 +39,8 @@ public final class PrecipitousDrop extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
// When Precipitous Drop enters the battlefield, venture into the dungeon. // 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. // Enchanted creature gets -2/-2. It gets -5/-5 instead as long as you've completed a dungeon.
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(

View file

@ -8,6 +8,7 @@ import mage.abilities.costs.common.DiscardSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
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;
@ -48,7 +49,7 @@ public final class RadiantSolar extends CardImpl {
// Whenever Radiant Solar or another nontoken creature you control enters, venture into the dungeon. // Whenever Radiant Solar or another nontoken creature you control enters, venture into the dungeon.
this.addAbility(new EntersBattlefieldThisOrAnotherTriggeredAbility( this.addAbility(new EntersBattlefieldThisOrAnotherTriggeredAbility(
new VentureIntoTheDungeonEffect(), filter, false, true new VentureIntoTheDungeonEffect(), filter, false, true
)); ).addHint(CurrentDungeonHint.instance));
// {W}, Discard Radiant Solar: Venture into the dungeon and you gain 3 life. // {W}, Discard Radiant Solar: Venture into the dungeon and you gain 3 life.
Ability ability = new SimpleActivatedAbility( Ability ability = new SimpleActivatedAbility(

View file

@ -7,6 +7,7 @@ import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.common.TapTargetCost; import mage.abilities.costs.common.TapTargetCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
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;
@ -49,6 +50,7 @@ public final class RangersHawk extends CardImpl {
); );
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addCost(new TapTargetCost(new TargetControlledPermanent(filter))); ability.addCost(new TapTargetCost(new TargetControlledPermanent(filter)));
ability.addHint(CurrentDungeonHint.instance);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -4,6 +4,7 @@ import mage.MageInt;
import mage.abilities.common.ActivateAsSorceryActivatedAbility; import mage.abilities.common.ActivateAsSorceryActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.abilities.keyword.DefenderAbility; import mage.abilities.keyword.DefenderAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -30,7 +31,7 @@ public final class SecretDoor extends CardImpl {
// {4}{U}: Venture into the dungeon. Activate only as a sorcery. // {4}{U}: Venture into the dungeon. Activate only as a sorcery.
this.addAbility(new ActivateAsSorceryActivatedAbility( this.addAbility(new ActivateAsSorceryActivatedAbility(
new VentureIntoTheDungeonEffect(), new ManaCostsImpl<>("{4}{U}") new VentureIntoTheDungeonEffect(), new ManaCostsImpl<>("{4}{U}")
)); ).addHint(CurrentDungeonHint.instance));
} }
private SecretDoor(final SecretDoor card) { private SecretDoor(final SecretDoor card) {

View file

@ -6,6 +6,7 @@ import mage.abilities.common.CompletedDungeonTriggeredAbility;
import mage.abilities.common.PutCardIntoGraveFromAnywhereAllTriggeredAbility; import mage.abilities.common.PutCardIntoGraveFromAnywhereAllTriggeredAbility;
import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect; import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -38,7 +39,7 @@ public final class SefrisOfTheHiddenWays extends CardImpl {
// Whenever one or more creature cards are put into your graveyard from anywhere, venture into the dungeon. This ability triggers only once each turn. // 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( this.addAbility(new PutCardIntoGraveFromAnywhereAllTriggeredAbility(
new VentureIntoTheDungeonEffect(), false, filter, TargetController.YOU 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. // Create Undead Whenever you complete a dungeon, return target creature card from your graveyard to the battlefield.
Ability ability = new CompletedDungeonTriggeredAbility(new ReturnFromGraveyardToBattlefieldTargetEffect()); Ability ability = new CompletedDungeonTriggeredAbility(new ReturnFromGraveyardToBattlefieldTargetEffect());

View file

@ -3,6 +3,7 @@ package mage.cards.s;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -26,7 +27,7 @@ public final class ShortcutSeeker extends CardImpl {
// Whenever Shortcut Seeker deals combat damage to a player, venture into the dungeon. // Whenever Shortcut Seeker deals combat damage to a player, venture into the dungeon.
this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility( this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(
new VentureIntoTheDungeonEffect(), false new VentureIntoTheDungeonEffect(), false
)); ).addHint(CurrentDungeonHint.instance));
} }
private ShortcutSeeker(final ShortcutSeeker card) { private ShortcutSeeker(final ShortcutSeeker card) {

View file

@ -4,6 +4,7 @@ import mage.abilities.common.AttacksWithCreaturesTriggeredAbility;
import mage.abilities.common.SacrificePermanentTriggeredAbility; import mage.abilities.common.SacrificePermanentTriggeredAbility;
import mage.abilities.effects.keyword.InvestigateEffect; import mage.abilities.effects.keyword.InvestigateEffect;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -23,7 +24,8 @@ public final class ThoroughInvestigation extends CardImpl {
this.addAbility(new AttacksWithCreaturesTriggeredAbility(new InvestigateEffect(), 1)); this.addAbility(new AttacksWithCreaturesTriggeredAbility(new InvestigateEffect(), 1));
// Whenever you sacrifice a Clue, venture into the dungeon. // 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) { private ThoroughInvestigation(final ThoroughInvestigation card) {

View file

@ -8,6 +8,7 @@ import mage.abilities.condition.common.MyTurnCondition;
import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.abilities.hint.common.MyTurnHint; import mage.abilities.hint.common.MyTurnHint;
import mage.abilities.keyword.FirstStrikeAbility; import mage.abilities.keyword.FirstStrikeAbility;
import mage.constants.Duration; import mage.constants.Duration;
@ -42,7 +43,8 @@ public final class TriumphantAdventurer extends CardImpl {
).addHint(MyTurnHint.instance)); ).addHint(MyTurnHint.instance));
// Whenever Triumphant Adventurer attacks, venture into the dungeon. // 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) { private TriumphantAdventurer(final TriumphantAdventurer card) {

View file

@ -6,6 +6,7 @@ import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.abilities.keyword.ReachAbility; import mage.abilities.keyword.ReachAbility;
import mage.abilities.keyword.WardAbility; import mage.abilities.keyword.WardAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -52,7 +53,7 @@ public final class VarisSilverymoonRanger extends CardImpl {
// Whenever you cast a creature or planeswalker spell, venture into the dungeon. This ability triggers only once each turn. // Whenever you cast a creature or planeswalker spell, venture into the dungeon. This ability triggers only once each turn.
this.addAbility(new SpellCastControllerTriggeredAbility( this.addAbility(new SpellCastControllerTriggeredAbility(
new VentureIntoTheDungeonEffect(), filter, false new VentureIntoTheDungeonEffect(), filter, false
).setTriggersLimitEachTurn(1)); ).setTriggersLimitEachTurn(1).addHint(CurrentDungeonHint.instance));
// Whenever you complete a dungeon, create a 2/2 green Wolf creature token. // Whenever you complete a dungeon, create a 2/2 green Wolf creature token.
this.addAbility(new CompletedDungeonTriggeredAbility(new CreateTokenEffect(new WolfToken()))); this.addAbility(new CompletedDungeonTriggeredAbility(new CreateTokenEffect(new WolfToken())));

View file

@ -3,6 +3,7 @@ package mage.cards.v;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -24,7 +25,8 @@ public final class VeteranDungeoneer extends CardImpl {
this.toughness = new MageInt(4); this.toughness = new MageInt(4);
// When Veteran Dungeoneer enters the battlefield, venture into the dungeon. // 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) { private VeteranDungeoneer(final VeteranDungeoneer card) {

View file

@ -6,6 +6,7 @@ import mage.abilities.common.BeginningOfYourEndStepTriggeredAbility;
import mage.abilities.condition.common.LandfallCondition; import mage.abilities.condition.common.LandfallCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.constants.SubType; import mage.constants.SubType;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -31,7 +32,7 @@ public final class WanderingTroubadour extends CardImpl {
new BeginningOfYourEndStepTriggeredAbility(new VentureIntoTheDungeonEffect(), false), new BeginningOfYourEndStepTriggeredAbility(new VentureIntoTheDungeonEffect(), false),
LandfallCondition.instance, 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." "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) { private WanderingTroubadour(final WanderingTroubadour card) {

View file

@ -4,6 +4,7 @@ import mage.abilities.Mode;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.DestroyTargetEffect;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -36,6 +37,7 @@ public final class YouFindACursedIdol extends CardImpl {
mode = new Mode(new CreateTokenEffect(new TreasureToken())); mode = new Mode(new CreateTokenEffect(new TreasureToken()));
mode.addEffect(new VentureIntoTheDungeonEffect().concatBy("and")); mode.addEffect(new VentureIntoTheDungeonEffect().concatBy("and"));
this.getSpellAbility().addMode(mode.withFlavorWord("Steal Its Eyes")); this.getSpellAbility().addMode(mode.withFlavorWord("Steal Its Eyes"));
this.getSpellAbility().addHint(CurrentDungeonHint.instance);
} }
private YouFindACursedIdol(final YouFindACursedIdol card) { private YouFindACursedIdol(final YouFindACursedIdol card) {

View file

@ -3,6 +3,7 @@ package mage.cards.y;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.abilities.keyword.DeathtouchAbility; import mage.abilities.keyword.DeathtouchAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -30,7 +31,7 @@ public final class YuanTiFangBlade extends CardImpl {
// Whenever Yuan-Ti Fang-Blade deals combat damage to a player, venture into the dungeon. // Whenever Yuan-Ti Fang-Blade deals combat damage to a player, venture into the dungeon.
this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility( this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(
new VentureIntoTheDungeonEffect(), false new VentureIntoTheDungeonEffect(), false
)); ).addHint(CurrentDungeonHint.instance));
} }
private YuanTiFangBlade(final YuanTiFangBlade card) { private YuanTiFangBlade(final YuanTiFangBlade card) {

View file

@ -8,6 +8,7 @@ import mage.abilities.condition.common.SourceAttackingAloneCondition;
import mage.abilities.decorator.ConditionalRestrictionEffect; import mage.abilities.decorator.ConditionalRestrictionEffect;
import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect; import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.constants.SubType; import mage.constants.SubType;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -35,7 +36,8 @@ public final class YuanTiMalison extends CardImpl {
))); )));
// Whenever Yuan-Ti Malison deals combat damage to a player, venture into the dungeon. // 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) { private YuanTiMalison(final YuanTiMalison card) {

View file

@ -3,6 +3,7 @@ package mage.cards.z;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.DealtDamageToSourceTriggeredAbility; import mage.abilities.common.DealtDamageToSourceTriggeredAbility;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.abilities.keyword.TrampleAbility; import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -30,7 +31,8 @@ public final class ZaltoFireGiantDuke extends CardImpl {
this.addAbility(TrampleAbility.getInstance()); this.addAbility(TrampleAbility.getInstance());
// Whenever Zalto, Fire Giant Duke is dealt damage, venture into the dungeon. // 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) { private ZaltoFireGiantDuke(final ZaltoFireGiantDuke card) {

View file

@ -4,6 +4,7 @@ import mage.MageInt;
import mage.abilities.common.BeginningOfEndStepTriggeredAbility; import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
import mage.abilities.condition.common.MorbidCondition; import mage.abilities.condition.common.MorbidCondition;
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.abilities.hint.common.MorbidHint; import mage.abilities.hint.common.MorbidHint;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -31,7 +32,7 @@ public final class ZombieOgre extends CardImpl {
this.addAbility(new BeginningOfEndStepTriggeredAbility( this.addAbility(new BeginningOfEndStepTriggeredAbility(
Zone.BATTLEFIELD, new VentureIntoTheDungeonEffect(), Zone.BATTLEFIELD, new VentureIntoTheDungeonEffect(),
TargetController.YOU, MorbidCondition.instance, false TargetController.YOU, MorbidCondition.instance, false
).addHint(MorbidHint.instance)); ).addHint(MorbidHint.instance).addHint(CurrentDungeonHint.instance));
} }
private ZombieOgre(final ZombieOgre card) { private ZombieOgre(final ZombieOgre card) {

View file

@ -16,6 +16,7 @@ import mage.abilities.effects.common.FightTargetsEffect;
import mage.abilities.effects.common.counter.ProliferateEffect; import mage.abilities.effects.common.counter.ProliferateEffect;
import mage.abilities.effects.keyword.ScryEffect; import mage.abilities.effects.keyword.ScryEffect;
import mage.abilities.hint.common.CitysBlessingHint; import mage.abilities.hint.common.CitysBlessingHint;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.abilities.hint.common.InitiativeHint; import mage.abilities.hint.common.InitiativeHint;
import mage.abilities.hint.common.MonarchHint; import mage.abilities.hint.common.MonarchHint;
import mage.abilities.keyword.*; import mage.abilities.keyword.*;
@ -2070,6 +2071,7 @@ public class VerifyCardDataTest {
cardHints.put(CitysBlessingHint.class, "city's blessing"); cardHints.put(CitysBlessingHint.class, "city's blessing");
cardHints.put(MonarchHint.class, "the monarch"); cardHints.put(MonarchHint.class, "the monarch");
cardHints.put(InitiativeHint.class, "the initiative"); cardHints.put(InitiativeHint.class, "the initiative");
cardHints.put(CurrentDungeonHint.class, "venture into");
for (Class hintClass : cardHints.keySet()) { for (Class hintClass : cardHints.keySet()) {
String lookupText = cardHints.get(hintClass); String lookupText = cardHints.get(hintClass);
boolean needHint = ref.text.contains(lookupText); boolean needHint = ref.text.contains(lookupText);

View file

@ -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;
}
}

View file

@ -3,6 +3,7 @@ package mage.designations;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.TriggeredAbilityImpl; import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.hint.common.CurrentDungeonHint;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.Zone; import mage.constants.Zone;
import mage.game.Controllable; import mage.game.Controllable;
@ -113,6 +114,7 @@ class InitiativeVentureTriggeredAbility extends TriggeredAbilityImpl {
InitiativeVentureTriggeredAbility() { InitiativeVentureTriggeredAbility() {
super(Zone.ALL, new InitiativeUndercityEffect()); super(Zone.ALL, new InitiativeUndercityEffect());
addHint(CurrentDungeonHint.instance);
} }
private InitiativeVentureTriggeredAbility(final InitiativeVentureTriggeredAbility ability) { private InitiativeVentureTriggeredAbility(final InitiativeVentureTriggeredAbility ability) {

View file

@ -88,7 +88,7 @@ public interface Game extends MageItem, Serializable, Copyable<Game> {
Dungeon getDungeon(UUID objectId); Dungeon getDungeon(UUID objectId);
Dungeon getPlayerDungeon(UUID objectId); Dungeon getPlayerDungeon(UUID playerId);
UUID getControllerId(UUID objectId); UUID getControllerId(UUID objectId);
@ -456,7 +456,12 @@ public interface Game extends MageItem, Serializable, Copyable<Game> {
Dungeon addDungeon(Dungeon dungeon, UUID playerId); 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); void temptWithTheRing(UUID playerId);

View file

@ -560,14 +560,14 @@ public abstract class GameImpl implements Game {
} }
@Override @Override
public void ventureIntoDungeon(UUID playerId, boolean undercity) { public void ventureIntoDungeon(UUID playerId, boolean isEnterToUndercity) {
if (playerId == null) { if (playerId == null) {
return; return;
} }
if (replaceEvent(GameEvent.getEvent(GameEvent.EventType.VENTURE, playerId, null, playerId))) { if (replaceEvent(GameEvent.getEvent(GameEvent.EventType.VENTURE, playerId, null, playerId))) {
return; return;
} }
this.getOrCreateDungeon(playerId, undercity).moveToNextRoom(playerId, this); this.getOrCreateDungeon(playerId, isEnterToUndercity).moveToNextRoom(playerId, this);
fireEvent(GameEvent.getEvent(GameEvent.EventType.VENTURED, playerId, null, playerId)); fireEvent(GameEvent.getEvent(GameEvent.EventType.VENTURED, playerId, null, playerId));
} }