mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 10:40:06 -08:00
[EOE] Implement The Seriema
This commit is contained in:
parent
3f885afc21
commit
850efb06d5
5 changed files with 306 additions and 0 deletions
74
Mage.Sets/src/mage/cards/t/TheSeriema.java
Normal file
74
Mage.Sets/src/mage/cards/t/TheSeriema.java
Normal file
|
|
@ -0,0 +1,74 @@
|
||||||
|
package mage.cards.t;
|
||||||
|
|
||||||
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
|
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||||
|
import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
|
||||||
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
|
import mage.abilities.keyword.IndestructibleAbility;
|
||||||
|
import mage.abilities.keyword.StationAbility;
|
||||||
|
import mage.abilities.keyword.StationLevelAbility;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.Duration;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.constants.SuperType;
|
||||||
|
import mage.filter.FilterCard;
|
||||||
|
import mage.filter.FilterPermanent;
|
||||||
|
import mage.filter.common.FilterCreatureCard;
|
||||||
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
|
import mage.filter.predicate.permanent.TappedPredicate;
|
||||||
|
import mage.target.common.TargetCardInLibrary;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class TheSeriema extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterCard filter = new FilterCreatureCard("legendary creature card");
|
||||||
|
private static final FilterPermanent filter2 = new FilterCreaturePermanent("tapped legendary creatures");
|
||||||
|
|
||||||
|
static {
|
||||||
|
filter.add(SuperType.LEGENDARY.getPredicate());
|
||||||
|
filter2.add(TappedPredicate.TAPPED);
|
||||||
|
filter2.add(SuperType.LEGENDARY.getPredicate());
|
||||||
|
}
|
||||||
|
|
||||||
|
public TheSeriema(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}{W}{W}");
|
||||||
|
|
||||||
|
this.supertype.add(SuperType.LEGENDARY);
|
||||||
|
this.subtype.add(SubType.SPACECRAFT);
|
||||||
|
|
||||||
|
// When The Seriema enters, search your library for a legendary creature card, reveal it, put it into your hand, then shuffle.
|
||||||
|
this.addAbility(new EntersBattlefieldTriggeredAbility(
|
||||||
|
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true)
|
||||||
|
));
|
||||||
|
|
||||||
|
// Station
|
||||||
|
this.addAbility(new StationAbility());
|
||||||
|
|
||||||
|
// STATION 7+
|
||||||
|
// Flying
|
||||||
|
// Other tapped legendary creatures you control have indestructible.
|
||||||
|
// 5/5
|
||||||
|
this.addAbility(new StationLevelAbility(7)
|
||||||
|
.withLevelAbility(FlyingAbility.getInstance())
|
||||||
|
.withLevelAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
|
||||||
|
IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield, filter2, true
|
||||||
|
)))
|
||||||
|
.withPT(5, 5));
|
||||||
|
}
|
||||||
|
|
||||||
|
private TheSeriema(final TheSeriema card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TheSeriema copy() {
|
||||||
|
return new TheSeriema(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -89,6 +89,8 @@ public final class EdgeOfEternities extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Temporal Intervention", 120, Rarity.COMMON, mage.cards.t.TemporalIntervention.class));
|
cards.add(new SetCardInfo("Temporal Intervention", 120, Rarity.COMMON, mage.cards.t.TemporalIntervention.class));
|
||||||
cards.add(new SetCardInfo("Tezzeret, Cruel Captain", 2, Rarity.MYTHIC, mage.cards.t.TezzeretCruelCaptain.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Tezzeret, Cruel Captain", 2, Rarity.MYTHIC, mage.cards.t.TezzeretCruelCaptain.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Tezzeret, Cruel Captain", 287, Rarity.MYTHIC, mage.cards.t.TezzeretCruelCaptain.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Tezzeret, Cruel Captain", 287, Rarity.MYTHIC, mage.cards.t.TezzeretCruelCaptain.class, NON_FULL_USE_VARIOUS));
|
||||||
|
cards.add(new SetCardInfo("The Seriema", 323, Rarity.RARE, mage.cards.t.TheSeriema.class, NON_FULL_USE_VARIOUS));
|
||||||
|
cards.add(new SetCardInfo("The Seriema", 35, Rarity.RARE, mage.cards.t.TheSeriema.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Thrumming Hivepool", 247, Rarity.RARE, mage.cards.t.ThrummingHivepool.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Thrumming Hivepool", 247, Rarity.RARE, mage.cards.t.ThrummingHivepool.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Thrumming Hivepool", 356, Rarity.RARE, mage.cards.t.ThrummingHivepool.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Thrumming Hivepool", 356, Rarity.RARE, mage.cards.t.ThrummingHivepool.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Virulent Silencer", 248, Rarity.UNCOMMON, mage.cards.v.VirulentSilencer.class));
|
cards.add(new SetCardInfo("Virulent Silencer", 248, Rarity.UNCOMMON, mage.cards.v.VirulentSilencer.class));
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,74 @@
|
||||||
|
package mage.abilities.keyword;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.MageObject;
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
|
import mage.abilities.costs.common.TapTargetCost;
|
||||||
|
import mage.abilities.effects.OneShotEffect;
|
||||||
|
import mage.constants.Outcome;
|
||||||
|
import mage.constants.Zone;
|
||||||
|
import mage.counters.CounterType;
|
||||||
|
import mage.filter.StaticFilters;
|
||||||
|
import mage.game.Game;
|
||||||
|
import mage.game.permanent.Permanent;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public class StationAbility extends SimpleActivatedAbility {
|
||||||
|
|
||||||
|
public StationAbility() {
|
||||||
|
super(Zone.BATTLEFIELD, new StationAbilityEffect(), new TapTargetCost(StaticFilters.FILTER_OTHER_CONTROLLED_CREATURE));
|
||||||
|
}
|
||||||
|
|
||||||
|
private StationAbility(final StationAbility ability) {
|
||||||
|
super(ability);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StationAbility copy() {
|
||||||
|
return new StationAbility(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getRule() {
|
||||||
|
return "station <i>(Tap another creature you control: Put charge counters equal to its power on {this}. Station only as a sorcery.)</i>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class StationAbilityEffect extends OneShotEffect {
|
||||||
|
|
||||||
|
StationAbilityEffect() {
|
||||||
|
super(Outcome.Benefit);
|
||||||
|
}
|
||||||
|
|
||||||
|
private StationAbilityEffect(final StationAbilityEffect effect) {
|
||||||
|
super(effect);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StationAbilityEffect copy() {
|
||||||
|
return new StationAbilityEffect(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(Game game, Ability source) {
|
||||||
|
Permanent permanent = source.getSourcePermanentIfItStillExists(game);
|
||||||
|
if (permanent == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
int power = Optional
|
||||||
|
.ofNullable((List<Permanent>) getValue("tappedPermanents"))
|
||||||
|
.map(permanents -> permanents
|
||||||
|
.stream()
|
||||||
|
.map(MageObject::getPower)
|
||||||
|
.mapToInt(MageInt::getValue)
|
||||||
|
.sum())
|
||||||
|
.orElse(0);
|
||||||
|
return power > 0 && permanent.addCounters(CounterType.CHARGE.createInstance(power), source, game);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,155 @@
|
||||||
|
package mage.abilities.keyword;
|
||||||
|
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.StaticAbility;
|
||||||
|
import mage.abilities.effects.ContinuousEffectImpl;
|
||||||
|
import mage.constants.*;
|
||||||
|
import mage.counters.CounterType;
|
||||||
|
import mage.game.Game;
|
||||||
|
import mage.game.permanent.Permanent;
|
||||||
|
import mage.util.CardUtil;
|
||||||
|
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public class StationLevelAbility extends StaticAbility {
|
||||||
|
|
||||||
|
private final int level;
|
||||||
|
|
||||||
|
public StationLevelAbility(int level) {
|
||||||
|
super(Zone.BATTLEFIELD, null);
|
||||||
|
this.level = level;
|
||||||
|
}
|
||||||
|
|
||||||
|
private StationLevelAbility(final StationLevelAbility ability) {
|
||||||
|
super(ability);
|
||||||
|
this.level = ability.level;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StationLevelAbility copy() {
|
||||||
|
return new StationLevelAbility(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public StationLevelAbility withLevelAbility(Ability ability) {
|
||||||
|
this.addEffect(new StationLevelAbilityEffect(ability, level));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public StationLevelAbility withPT(int power, int toughness) {
|
||||||
|
this.addEffect(new StationLevelCreatureEffect(power, toughness, level));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getRule() {
|
||||||
|
return "STATION " + level + "+" + this
|
||||||
|
.getEffects()
|
||||||
|
.stream()
|
||||||
|
.map(effect -> effect.getText(this.getModes().getMode()))
|
||||||
|
.map(CardUtil::getTextWithFirstCharUpperCase)
|
||||||
|
.collect(Collectors.joining("<br>"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class StationLevelAbilityEffect extends ContinuousEffectImpl {
|
||||||
|
|
||||||
|
private final Ability ability;
|
||||||
|
private final int level;
|
||||||
|
|
||||||
|
StationLevelAbilityEffect(Ability ability, int level) {
|
||||||
|
super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility);
|
||||||
|
this.ability = ability;
|
||||||
|
this.level = level;
|
||||||
|
this.ability.setRuleVisible(false);
|
||||||
|
this.staticText = ability.getRule();
|
||||||
|
}
|
||||||
|
|
||||||
|
private StationLevelAbilityEffect(final StationLevelAbilityEffect effect) {
|
||||||
|
super(effect);
|
||||||
|
this.ability = effect.ability;
|
||||||
|
this.level = effect.level;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StationLevelAbilityEffect copy() {
|
||||||
|
return new StationLevelAbilityEffect(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(Game game, Ability source) {
|
||||||
|
Permanent permanent = source.getSourcePermanentIfItStillExists(game);
|
||||||
|
if (permanent == null || permanent.getCounters(game).getCount(CounterType.CHARGE) < level) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
permanent.addAbility(ability, source.getSourceId(), game);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class StationLevelCreatureEffect extends ContinuousEffectImpl {
|
||||||
|
|
||||||
|
private final int power;
|
||||||
|
private final int toughness;
|
||||||
|
private final int level;
|
||||||
|
|
||||||
|
StationLevelCreatureEffect(int power, int toughness, int level) {
|
||||||
|
super(Duration.WhileOnBattlefield, Outcome.BecomeCreature);
|
||||||
|
this.power = power;
|
||||||
|
this.toughness = toughness;
|
||||||
|
this.level = level;
|
||||||
|
staticText = power + "/" + toughness;
|
||||||
|
}
|
||||||
|
|
||||||
|
private StationLevelCreatureEffect(final StationLevelCreatureEffect effect) {
|
||||||
|
super(effect);
|
||||||
|
this.power = effect.power;
|
||||||
|
this.toughness = effect.toughness;
|
||||||
|
this.level = effect.level;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StationLevelCreatureEffect copy() {
|
||||||
|
return new StationLevelCreatureEffect(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) {
|
||||||
|
Permanent permanent = source.getSourcePermanentIfItStillExists(game);
|
||||||
|
if (permanent == null || permanent.getCounters(game).getCount(CounterType.CHARGE) < level) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
switch (layer) {
|
||||||
|
case TypeChangingEffects_4:
|
||||||
|
permanent.addCardType(game, CardType.ARTIFACT, CardType.CREATURE);
|
||||||
|
return true;
|
||||||
|
case PTChangingEffects_7:
|
||||||
|
if (sublayer != SubLayer.SetPT_7b) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
permanent.getPower().setModifiedBaseValue(power);
|
||||||
|
permanent.getToughness().setModifiedBaseValue(toughness);
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(Game game, Ability source) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasLayer(Layer layer) {
|
||||||
|
switch (layer) {
|
||||||
|
case TypeChangingEffects_4:
|
||||||
|
case PTChangingEffects_7:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -128,6 +128,7 @@ Spectacle|card, cost|
|
||||||
Spree|card|
|
Spree|card|
|
||||||
Squad|cost|
|
Squad|cost|
|
||||||
Start your engines!|new|
|
Start your engines!|new|
|
||||||
|
Station|new|
|
||||||
Storm|new|
|
Storm|new|
|
||||||
Sunburst|new|
|
Sunburst|new|
|
||||||
Suspend|number, cost, card|
|
Suspend|number, cost, card|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue