mirror of
https://github.com/magefree/mage.git
synced 2025-12-22 03:22:00 -08:00
[DFT] Guidelight Matrix and Kolodin, Triumph Caster
This commit is contained in:
commit
0d0a6691f2
6 changed files with 197 additions and 16 deletions
|
|
@ -3,15 +3,12 @@ package mage.cards.a;
|
|||
import java.util.UUID;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.CrewSaddleIncreasedPowerAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.EndTurnEffect;
|
||||
import mage.abilities.effects.common.continuous.AddCardTypeTargetEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostControlledEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||
import mage.abilities.keyword.CrewAbility;
|
||||
import mage.abilities.keyword.SaddleAbility;
|
||||
import mage.abilities.keyword.VigilanceAbility;
|
||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||
|
|
@ -25,12 +22,9 @@ import mage.constants.TargetController;
|
|||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.filter.predicate.Predicates;
|
||||
import mage.filter.predicate.permanent.SaddledSourceThisTurnPredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.TargetPermanent;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -100,18 +94,10 @@ class AlacrianArmoryAnimateEffect extends OneShotEffect {
|
|||
return false;
|
||||
}
|
||||
if (target.hasSubtype(SubType.MOUNT, game)) {
|
||||
target.getAbilities().stream().filter(
|
||||
ability -> ability instanceof SaddleAbility)
|
||||
.findFirst()
|
||||
.ifPresent(ability -> game.fireEvent(GameEvent.getEvent(
|
||||
GameEvent.EventType.MOUNT_SADDLED,
|
||||
ability.getSourceId(),
|
||||
ability, source.getControllerId()))
|
||||
);
|
||||
SaddleAbility.applySaddle(target, game);
|
||||
}
|
||||
if (target.hasSubtype(SubType.VEHICLE, game)) {
|
||||
game.addEffect(new AddCardTypeTargetEffect(Duration.EndOfTurn, CardType.CREATURE, CardType.ARTIFACT)
|
||||
.setTargetPointer(new FixedTarget(target, game)), source);
|
||||
game.addEffect(new AddCardTypeTargetEffect(Duration.EndOfTurn, CardType.CREATURE, CardType.ARTIFACT), source);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
66
Mage.Sets/src/mage/cards/g/GuidelightMatrix.java
Normal file
66
Mage.Sets/src/mage/cards/g/GuidelightMatrix.java
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.CompositeCost;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.SaddleTargetMountEffect;
|
||||
import mage.abilities.effects.common.continuous.AddCardTypeTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.target.TargetPermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jmlundeen
|
||||
*/
|
||||
public final class GuidelightMatrix extends CardImpl {
|
||||
|
||||
private static final FilterControlledPermanent mountFilter = new FilterControlledPermanent("Mount you control");
|
||||
private static final FilterControlledPermanent vehicleFilter = new FilterControlledPermanent("Vehicle you control");
|
||||
|
||||
static {
|
||||
mountFilter.add(SubType.MOUNT.getPredicate());
|
||||
vehicleFilter.add(SubType.VEHICLE.getPredicate());
|
||||
}
|
||||
|
||||
public GuidelightMatrix(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}");
|
||||
|
||||
|
||||
// When this artifact enters, draw a card.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1)));
|
||||
// {2}, {T}: Target Mount you control becomes saddled until end of turn. Activate only as a sorcery.
|
||||
Ability saddledAbility = new ActivateAsSorceryActivatedAbility(new SaddleTargetMountEffect(), new ManaCostsImpl<>("{2}"));
|
||||
saddledAbility.addCost(new TapSourceCost());
|
||||
saddledAbility.addTarget(new TargetPermanent(mountFilter));
|
||||
this.addAbility(saddledAbility);
|
||||
// {2}, {T}: Target Vehicle you control becomes an artifact creature until end of turn.
|
||||
Ability animateVehicleAbility = new SimpleActivatedAbility(
|
||||
new AddCardTypeTargetEffect(Duration.EndOfTurn, CardType.ARTIFACT, CardType.CREATURE)
|
||||
.setText("Target Vehicle you control becomes an artifact creature until end of turn."),
|
||||
new ManaCostsImpl<>("{2}"));
|
||||
animateVehicleAbility.addCost(new TapSourceCost());
|
||||
animateVehicleAbility.addTarget(new TargetPermanent(vehicleFilter));
|
||||
this.addAbility(animateVehicleAbility);
|
||||
}
|
||||
|
||||
private GuidelightMatrix(final GuidelightMatrix card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GuidelightMatrix copy() {
|
||||
return new GuidelightMatrix(this);
|
||||
}
|
||||
}
|
||||
68
Mage.Sets/src/mage/cards/k/KolodinTriumphCaster.java
Normal file
68
Mage.Sets/src/mage/cards/k/KolodinTriumphCaster.java
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
package mage.cards.k;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.SaddleTargetMountEffect;
|
||||
import mage.abilities.effects.common.continuous.AddCardTypeTargetEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
import mage.constants.*;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.filter.predicate.Predicates;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jmlundeen
|
||||
*/
|
||||
public final class KolodinTriumphCaster extends CardImpl {
|
||||
|
||||
private static final FilterControlledPermanent filter = new FilterControlledPermanent("Mounts and Vehicles you control");
|
||||
private static final FilterControlledPermanent mountFilter = new FilterControlledPermanent("Mount");
|
||||
private static final FilterControlledPermanent vehicleFilter = new FilterControlledPermanent("Vehicle");
|
||||
static {
|
||||
filter.add(Predicates.or(
|
||||
SubType.MOUNT.getPredicate(),
|
||||
SubType.VEHICLE.getPredicate()
|
||||
));
|
||||
mountFilter.add(SubType.MOUNT.getPredicate());
|
||||
vehicleFilter.add(SubType.VEHICLE.getPredicate());
|
||||
}
|
||||
|
||||
public KolodinTriumphCaster(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}{W}");
|
||||
|
||||
this.supertype.add(SuperType.LEGENDARY);
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.subtype.add(SubType.PILOT);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// Mounts and Vehicles you control have haste.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
|
||||
new GainAbilityControlledEffect(HasteAbility.getInstance(),
|
||||
Duration.WhileOnBattlefield, filter)));
|
||||
// Whenever a Mount you control enters, it becomes saddled until end of turn.
|
||||
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(new SaddleTargetMountEffect("it becomes saddled until end of turn"),
|
||||
mountFilter));
|
||||
// Whenever a Vehicle you control enters, it becomes an artifact creature until end of turn.
|
||||
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(new AddCardTypeTargetEffect(
|
||||
Duration.EndOfTurn, CardType.ARTIFACT, CardType.CREATURE)
|
||||
.setText("it becomes an artifact creature until end of turn"), vehicleFilter)
|
||||
);
|
||||
}
|
||||
|
||||
private KolodinTriumphCaster(final KolodinTriumphCaster card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public KolodinTriumphCaster copy() {
|
||||
return new KolodinTriumphCaster(this);
|
||||
}
|
||||
}
|
||||
|
|
@ -141,6 +141,7 @@ public final class Aetherdrift extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Grim Bauble", 88, Rarity.COMMON, mage.cards.g.GrimBauble.class));
|
||||
cards.add(new SetCardInfo("Grim Javelineer", 89, Rarity.COMMON, mage.cards.g.GrimJavelineer.class));
|
||||
cards.add(new SetCardInfo("Guardian Sunmare", 15, Rarity.RARE, mage.cards.g.GuardianSunmare.class));
|
||||
cards.add(new SetCardInfo("Guidelight Matrix", 233, Rarity.COMMON, mage.cards.g.GuidelightMatrix.class));
|
||||
cards.add(new SetCardInfo("Guidelight Optimizer", 45, Rarity.COMMON, mage.cards.g.GuidelightOptimizer.class));
|
||||
cards.add(new SetCardInfo("Guidelight Pathmaker", 206, Rarity.UNCOMMON, mage.cards.g.GuidelightPathmaker.class));
|
||||
cards.add(new SetCardInfo("Guidelight Synergist", 16, Rarity.UNCOMMON, mage.cards.g.GuidelightSynergist.class));
|
||||
|
|
@ -164,6 +165,9 @@ public final class Aetherdrift extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Ketramose, the New Dawn", 482, Rarity.MYTHIC, mage.cards.k.KetramoseTheNewDawn.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Ketramose, the New Dawn", 549, Rarity.MYTHIC, mage.cards.k.KetramoseTheNewDawn.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Kickoff Celebrations", 135, Rarity.COMMON, mage.cards.k.KickoffCelebrations.class));
|
||||
cards.add(new SetCardInfo("Kolodin, Triumph Caster", 210, Rarity.RARE, mage.cards.k.KolodinTriumphCaster.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Kolodin, Triumph Caster", 364, Rarity.RARE, mage.cards.k.KolodinTriumphCaster.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Kolodin, Triumph Caster", 483, Rarity.RARE, mage.cards.k.KolodinTriumphCaster.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Lagorin, Soul of Alacria", 211, Rarity.UNCOMMON, mage.cards.l.LagorinSoulOfAlacria.class));
|
||||
cards.add(new SetCardInfo("Leonin Surveyor", 18, Rarity.COMMON, mage.cards.l.LeoninSurveyor.class));
|
||||
cards.add(new SetCardInfo("Lifecraft Engine", 234, Rarity.RARE, mage.cards.l.LifecraftEngine.class));
|
||||
|
|
|
|||
|
|
@ -0,0 +1,40 @@
|
|||
package mage.abilities.effects.common;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.keyword.SaddleAbility;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
||||
/**
|
||||
* @author Jmlundeen
|
||||
*/
|
||||
public class SaddleTargetMountEffect extends OneShotEffect {
|
||||
|
||||
public SaddleTargetMountEffect() {
|
||||
super(Outcome.Benefit);
|
||||
staticText = "Target Mount you control becomes saddled until end of turn";
|
||||
}
|
||||
|
||||
public SaddleTargetMountEffect(String rule) {
|
||||
super(Outcome.Benefit);
|
||||
staticText = rule;
|
||||
}
|
||||
|
||||
protected SaddleTargetMountEffect(final SaddleTargetMountEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SaddleTargetMountEffect copy() {
|
||||
return new SaddleTargetMountEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
return SaddleAbility.applySaddle(game.getPermanent(getTargetPointer().getFirst(game, source)), game);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -48,6 +48,23 @@ public class SaddleAbility extends SimpleActivatedAbility {
|
|||
this.value = ability.value;
|
||||
}
|
||||
|
||||
public static boolean applySaddle(Permanent permanent, Game game) {
|
||||
if (permanent == null) {
|
||||
return false;
|
||||
}
|
||||
SaddleAbility saddleAbility = permanent.getAbilities().stream()
|
||||
.filter(a -> a instanceof SaddleAbility)
|
||||
.map(a -> (SaddleAbility) a)
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
if (saddleAbility != null) {
|
||||
SaddleEventEffect effect = new SaddleEventEffect();
|
||||
effect.apply(game, saddleAbility);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SaddleAbility copy() {
|
||||
return new SaddleAbility(this);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue