mirror of
https://github.com/correl/mage.git
synced 2025-03-13 01:09:53 -09:00
[CLB] Implemented Journey to the Lost City
This commit is contained in:
parent
2bf4139a31
commit
16914632c4
2 changed files with 131 additions and 0 deletions
Mage.Sets/src/mage
130
Mage.Sets/src/mage/cards/j/JourneyToTheLostCity.java
Normal file
130
Mage.Sets/src/mage/cards/j/JourneyToTheLostCity.java
Normal file
|
@ -0,0 +1,130 @@
|
|||
package mage.cards.j;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.abilities.effects.common.InfoEffect;
|
||||
import mage.abilities.effects.common.RollDieWithResultTableEffect;
|
||||
import mage.cards.*;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.TargetController;
|
||||
import mage.constants.Zone;
|
||||
import mage.counters.CounterType;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.ExileZone;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.token.Token;
|
||||
import mage.game.permanent.token.WolfToken;
|
||||
import mage.players.Player;
|
||||
import mage.target.TargetCard;
|
||||
import mage.target.common.TargetCardInExile;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class JourneyToTheLostCity extends CardImpl {
|
||||
|
||||
public JourneyToTheLostCity(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{G}");
|
||||
|
||||
// At the beginning of your upkeep, exile the top four cards of your library, then roll a d20.
|
||||
// 1-9 | You may put a land card from among those cards onto the battlefield.
|
||||
// 10-19 | Create a 2/2 green Wolf creature token, then put a +1/+1 counter on it for each creature card among those cards.
|
||||
// 20 | Put all permanent cards exiled with Journey to the Lost City onto the battlefield, then sacrifice it.
|
||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||
new JourneyToTheLostCityEffect(), TargetController.YOU, false
|
||||
));
|
||||
}
|
||||
|
||||
private JourneyToTheLostCity(final JourneyToTheLostCity card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JourneyToTheLostCity copy() {
|
||||
return new JourneyToTheLostCity(this);
|
||||
}
|
||||
}
|
||||
|
||||
class JourneyToTheLostCityEffect extends RollDieWithResultTableEffect {
|
||||
|
||||
JourneyToTheLostCityEffect() {
|
||||
super(20, "exile the top four cards of your library, then roll a d20");
|
||||
this.addTableEntry(
|
||||
1, 9,
|
||||
new InfoEffect("you may put a land card from among those cards onto the battlefield")
|
||||
);
|
||||
this.addTableEntry(
|
||||
10, 19,
|
||||
new InfoEffect("create a 2/2 green Wolf creature token, " +
|
||||
"then put a +1/+1 counter on it for each creature card among those cards")
|
||||
);
|
||||
this.addTableEntry(
|
||||
1, 9,
|
||||
new InfoEffect("put all permanent cards exiled with {this} onto the battlefield, then sacrifice it")
|
||||
);
|
||||
}
|
||||
|
||||
private JourneyToTheLostCityEffect(final JourneyToTheLostCityEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JourneyToTheLostCityEffect copy() {
|
||||
return new JourneyToTheLostCityEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player player = game.getPlayer(source.getControllerId());
|
||||
if (player == null) {
|
||||
return false;
|
||||
}
|
||||
Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, 4));
|
||||
player.moveCardsToExile(
|
||||
cards.getCards(game), source, game, true,
|
||||
CardUtil.getExileZoneId(game, source),
|
||||
CardUtil.getSourceName(game, source)
|
||||
);
|
||||
int amount = player.rollDice(outcome, source, game, 20);
|
||||
if (amount < 1) {
|
||||
return false;
|
||||
}
|
||||
if (amount <= 9) {
|
||||
TargetCard target = new TargetCardInExile(0, 1, StaticFilters.FILTER_CARD_LAND, null);
|
||||
target.setNotTarget(true);
|
||||
player.choose(outcome, cards, target, game);
|
||||
Card card = game.getCard(target.getFirstTarget());
|
||||
return card != null && player.moveCards(card, Zone.BATTLEFIELD, source, game);
|
||||
}
|
||||
if (amount <= 19) {
|
||||
Token token = new WolfToken();
|
||||
token.putOntoBattlefield(1, game, source);
|
||||
int count = cards.count(StaticFilters.FILTER_CARD_CREATURE, game);
|
||||
if (count > 0) {
|
||||
for (UUID tokenId : token.getLastAddedTokenIds()) {
|
||||
Optional.of(game.getPermanent(tokenId))
|
||||
.ifPresent(permanent -> permanent.addCounters(
|
||||
CounterType.P1P1.createInstance(count), source, game
|
||||
));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
if (amount != 20) {
|
||||
return false;
|
||||
}
|
||||
ExileZone exileZone = game.getExile().getExileZone(CardUtil.getExileZoneId(game, source));
|
||||
if (exileZone != null && !exileZone.isEmpty()) {
|
||||
player.moveCards(exileZone.getCards(
|
||||
StaticFilters.FILTER_CARD_PERMANENT, game
|
||||
), Zone.BATTLEFIELD, source, game);
|
||||
}
|
||||
Optional.of(source.getSourcePermanentIfItStillExists(game))
|
||||
.ifPresent(permanent -> permanent.sacrifice(source, game));
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -180,6 +180,7 @@ public final class CommanderLegendsBattleForBaldursGate extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Jaheira, Friend of the Forest", 237, Rarity.RARE, mage.cards.j.JaheiraFriendOfTheForest.class));
|
||||
cards.add(new SetCardInfo("Jan Jansen, Chaos Crafter", 277, Rarity.RARE, mage.cards.j.JanJansenChaosCrafter.class));
|
||||
cards.add(new SetCardInfo("Javelin of Lightning", 185, Rarity.COMMON, mage.cards.j.JavelinOfLightning.class));
|
||||
cards.add(new SetCardInfo("Journey to the Lost City", 681, Rarity.RARE, mage.cards.j.JourneyToTheLostCity.class));
|
||||
cards.add(new SetCardInfo("Juvenile Mist Dragon", 79, Rarity.UNCOMMON, mage.cards.j.JuvenileMistDragon.class));
|
||||
cards.add(new SetCardInfo("Karlach, Fury of Avernus", 186, Rarity.MYTHIC, mage.cards.k.KarlachFuryOfAvernus.class));
|
||||
cards.add(new SetCardInfo("Kindred Discovery", 81, Rarity.RARE, mage.cards.k.KindredDiscovery.class));
|
||||
|
|
Loading…
Add table
Reference in a new issue