mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 02:30:08 -08:00
[DFT] rework max speed ability
This commit is contained in:
parent
4944c434c1
commit
293ddd7016
13 changed files with 111 additions and 96 deletions
|
|
@ -2,13 +2,12 @@ package mage.cards.a;
|
|||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.DrawCardControllerTriggeredAbility;
|
||||
import mage.abilities.common.MaxSpeedAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.MillCardsEachPlayerEffect;
|
||||
import mage.abilities.effects.common.continuous.MaxSpeedGainAbilityEffect;
|
||||
import mage.abilities.keyword.StartYourEnginesAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -34,9 +33,9 @@ public final class AetherSyphon extends CardImpl {
|
|||
this.addAbility(ability);
|
||||
|
||||
// Max speed -- Whenever you draw a card, each opponent mills two cards.
|
||||
this.addAbility(new SimpleStaticAbility(new MaxSpeedGainAbilityEffect(new DrawCardControllerTriggeredAbility(
|
||||
this.addAbility(new MaxSpeedAbility(new DrawCardControllerTriggeredAbility(
|
||||
new MillCardsEachPlayerEffect(2, TargetController.OPPONENT), false
|
||||
))));
|
||||
)));
|
||||
}
|
||||
|
||||
private AetherSyphon(final AetherSyphon card) {
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
package mage.cards.a;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.MaxSpeedAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
|
||||
import mage.abilities.effects.common.continuous.MaxSpeedGainAbilityEffect;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
import mage.abilities.keyword.StartYourEnginesAbility;
|
||||
import mage.abilities.mana.ColorlessManaAbility;
|
||||
|
|
@ -31,9 +30,11 @@ public final class AmonkhetRaceway extends CardImpl {
|
|||
this.addAbility(new ColorlessManaAbility());
|
||||
|
||||
// Max speed -- {T}: Target creature gains haste until end of turn.
|
||||
Ability ability = new SimpleActivatedAbility(new GainAbilityTargetEffect(HasteAbility.getInstance()), new TapSourceCost());
|
||||
Ability ability = new SimpleActivatedAbility(
|
||||
new GainAbilityTargetEffect(HasteAbility.getInstance()), new TapSourceCost()
|
||||
);
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(new SimpleStaticAbility(new MaxSpeedGainAbilityEffect(ability)));
|
||||
this.addAbility(new MaxSpeedAbility(ability));
|
||||
}
|
||||
|
||||
private AmonkhetRaceway(final AmonkhetRaceway card) {
|
||||
|
|
|
|||
|
|
@ -1,13 +1,12 @@
|
|||
package mage.cards.a;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.MaxSpeedAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.common.DiscardCardCost;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.continuous.MaxSpeedGainAbilityEffect;
|
||||
import mage.abilities.keyword.StartYourEnginesAbility;
|
||||
import mage.abilities.mana.ColorlessManaAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -31,10 +30,12 @@ public final class AvishkarRaceway extends CardImpl {
|
|||
this.addAbility(new ColorlessManaAbility());
|
||||
|
||||
// Max speed -- {3}, {T}, Discard a card: Draw a card.
|
||||
Ability ability = new SimpleActivatedAbility(new DrawCardSourceControllerEffect(1), new GenericManaCost(3));
|
||||
Ability ability = new SimpleActivatedAbility(
|
||||
new DrawCardSourceControllerEffect(1), new GenericManaCost(3)
|
||||
);
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addCost(new DiscardCardCost());
|
||||
this.addAbility(new SimpleStaticAbility(new MaxSpeedGainAbilityEffect(ability)));
|
||||
this.addAbility(new MaxSpeedAbility(ability));
|
||||
}
|
||||
|
||||
private AvishkarRaceway(final AvishkarRaceway card) {
|
||||
|
|
|
|||
|
|
@ -1,12 +1,11 @@
|
|||
package mage.cards.b;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.MaxSpeedAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||
import mage.abilities.effects.common.continuous.MaxSpeedGainAbilityEffect;
|
||||
import mage.abilities.keyword.DoubleStrikeAbility;
|
||||
import mage.abilities.keyword.MenaceAbility;
|
||||
import mage.abilities.keyword.StartYourEnginesAbility;
|
||||
|
|
@ -43,7 +42,7 @@ public final class BurnoutBashtronaut extends CardImpl {
|
|||
));
|
||||
|
||||
// Max speed -- This creature has double strike.
|
||||
this.addAbility(new SimpleStaticAbility(new MaxSpeedGainAbilityEffect(new GainAbilitySourceEffect(DoubleStrikeAbility.getInstance()))));
|
||||
this.addAbility(new MaxSpeedAbility(new GainAbilitySourceEffect(DoubleStrikeAbility.getInstance())));
|
||||
}
|
||||
|
||||
private BurnoutBashtronaut(final BurnoutBashtronaut card) {
|
||||
|
|
|
|||
|
|
@ -4,11 +4,10 @@ import mage.MageInt;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.DiesCreatureTriggeredAbility;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.common.MaxSpeedAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.GainLifeEffect;
|
||||
import mage.abilities.effects.common.LoseLifeOpponentsEffect;
|
||||
import mage.abilities.effects.common.continuous.MaxSpeedGainAbilityEffect;
|
||||
import mage.abilities.keyword.StartYourEnginesAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -43,7 +42,7 @@ public final class EmbalmedAscendant extends CardImpl {
|
|||
StaticFilters.FILTER_CONTROLLED_A_CREATURE
|
||||
);
|
||||
ability.addEffect(new GainLifeEffect(1).concatBy("and"));
|
||||
this.addAbility(new SimpleStaticAbility(new MaxSpeedGainAbilityEffect(ability)));
|
||||
this.addAbility(new MaxSpeedAbility(ability));
|
||||
}
|
||||
|
||||
private EmbalmedAscendant(final EmbalmedAscendant card) {
|
||||
|
|
|
|||
|
|
@ -2,9 +2,8 @@ package mage.cards.e;
|
|||
|
||||
import mage.MageInt;
|
||||
import mage.Mana;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.common.MaxSpeedAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.effects.common.continuous.MaxSpeedGainAbilityEffect;
|
||||
import mage.abilities.keyword.StartYourEnginesAbility;
|
||||
import mage.abilities.mana.SimpleManaAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -32,8 +31,8 @@ public final class EndriderCatalyzer extends CardImpl {
|
|||
this.addAbility(new StartYourEnginesAbility());
|
||||
|
||||
// Max speed -- {T}: Add {R}{R}.
|
||||
this.addAbility(new SimpleStaticAbility(new MaxSpeedGainAbilityEffect(
|
||||
new SimpleManaAbility(Zone.BATTLEFIELD, Mana.GreenMana(2), new TapSourceCost())
|
||||
this.addAbility(new MaxSpeedAbility(new SimpleManaAbility(
|
||||
Zone.BATTLEFIELD, Mana.GreenMana(2), new TapSourceCost()
|
||||
)));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,8 @@
|
|||
package mage.cards.m;
|
||||
|
||||
import mage.Mana;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.common.MaxSpeedAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.effects.common.continuous.MaxSpeedGainAbilityEffect;
|
||||
import mage.abilities.keyword.StartYourEnginesAbility;
|
||||
import mage.abilities.mana.ColorlessManaAbility;
|
||||
import mage.abilities.mana.SimpleManaAbility;
|
||||
|
|
@ -29,9 +28,9 @@ public final class MuragandaRaceway extends CardImpl {
|
|||
this.addAbility(new ColorlessManaAbility());
|
||||
|
||||
// Max speed -- {T}: Add {C}{C}.
|
||||
this.addAbility(new SimpleStaticAbility(new MaxSpeedGainAbilityEffect(
|
||||
this.addAbility(new MaxSpeedAbility(
|
||||
new SimpleManaAbility(Zone.BATTLEFIELD, Mana.ColorlessMana(2), new TapSourceCost())
|
||||
)));
|
||||
));
|
||||
}
|
||||
|
||||
private MuragandaRaceway(final MuragandaRaceway card) {
|
||||
|
|
|
|||
|
|
@ -2,10 +2,9 @@ package mage.cards.n;
|
|||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.common.MaxSpeedAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.abilities.effects.common.continuous.MaxSpeedGainAbilityEffect;
|
||||
import mage.abilities.keyword.StartYourEnginesAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -35,7 +34,7 @@ public final class NestingBot extends CardImpl {
|
|||
this.addAbility(new DiesSourceTriggeredAbility(new CreateTokenEffect(new ServoToken())));
|
||||
|
||||
// Max speed -- This creature gets +1/+0.
|
||||
this.addAbility(new SimpleStaticAbility(new MaxSpeedGainAbilityEffect(new BoostSourceEffect(1, 0, Duration.WhileOnBattlefield))));
|
||||
this.addAbility(new MaxSpeedAbility(new BoostSourceEffect(1, 0, Duration.WhileOnBattlefield)));
|
||||
}
|
||||
|
||||
private NestingBot(final NestingBot card) {
|
||||
|
|
|
|||
|
|
@ -1,9 +1,8 @@
|
|||
package mage.cards.r;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.common.MaxSpeedAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.continuous.MaxSpeedGainAbilityEffect;
|
||||
import mage.abilities.keyword.StartYourEnginesAbility;
|
||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -32,9 +31,9 @@ public final class RisenNecroregent extends CardImpl {
|
|||
this.addAbility(new StartYourEnginesAbility());
|
||||
|
||||
// Max speed -- At the beginning of your end step, create a 2/2 black Zombie creature token.
|
||||
this.addAbility(new SimpleStaticAbility(new MaxSpeedGainAbilityEffect(
|
||||
this.addAbility(new MaxSpeedAbility(
|
||||
new BeginningOfEndStepTriggeredAbility(new CreateTokenEffect(new ZombieToken()))
|
||||
)));
|
||||
));
|
||||
}
|
||||
|
||||
private RisenNecroregent(final RisenNecroregent card) {
|
||||
|
|
|
|||
|
|
@ -1,12 +1,11 @@
|
|||
package mage.cards.s;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.MaxSpeedAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.common.SacrificeSourceCost;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.effects.common.DrawDiscardControllerEffect;
|
||||
import mage.abilities.effects.common.continuous.MaxSpeedGainAbilityEffect;
|
||||
import mage.abilities.keyword.StartYourEnginesAbility;
|
||||
import mage.abilities.mana.AnyColorManaAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -34,7 +33,7 @@ public final class StartingColumn extends CardImpl {
|
|||
new DrawDiscardControllerEffect(2, 1), new TapSourceCost()
|
||||
);
|
||||
ability.addCost(new SacrificeSourceCost());
|
||||
this.addAbility(new SimpleStaticAbility(new MaxSpeedGainAbilityEffect(ability)));
|
||||
this.addAbility(new MaxSpeedAbility(ability));
|
||||
}
|
||||
|
||||
private StartingColumn(final StartingColumn card) {
|
||||
|
|
|
|||
|
|
@ -1,9 +1,8 @@
|
|||
package mage.cards.s;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.common.MaxSpeedAbility;
|
||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||
import mage.abilities.effects.common.continuous.MaxSpeedGainAbilityEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
import mage.abilities.keyword.LifelinkAbility;
|
||||
|
|
@ -38,8 +37,8 @@ public final class StreakingOilgorger extends CardImpl {
|
|||
this.addAbility(new StartYourEnginesAbility());
|
||||
|
||||
// Max speed -- This creature has lifelink.
|
||||
this.addAbility(new SimpleStaticAbility(new MaxSpeedGainAbilityEffect(
|
||||
new GainAbilitySourceEffect(LifelinkAbility.getInstance(), Duration.WhileOnBattlefield)
|
||||
this.addAbility(new MaxSpeedAbility(new GainAbilitySourceEffect(
|
||||
LifelinkAbility.getInstance(), Duration.WhileOnBattlefield
|
||||
)));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,78 @@
|
|||
package mage.abilities.common;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.Mode;
|
||||
import mage.abilities.StaticAbility;
|
||||
import mage.abilities.dynamicvalue.common.ControllerSpeedCount;
|
||||
import mage.abilities.effects.ContinuousEffectImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.cards.Card;
|
||||
import mage.constants.*;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public class MaxSpeedAbility extends StaticAbility {
|
||||
|
||||
public MaxSpeedAbility(Effect effect) {
|
||||
this(new SimpleStaticAbility(effect));
|
||||
}
|
||||
|
||||
public MaxSpeedAbility(Ability ability) {
|
||||
super(Zone.ALL, new MaxSpeedAbilityEffect(ability));
|
||||
}
|
||||
|
||||
private MaxSpeedAbility(final MaxSpeedAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MaxSpeedAbility copy() {
|
||||
return new MaxSpeedAbility(this);
|
||||
}
|
||||
}
|
||||
|
||||
class MaxSpeedAbilityEffect extends ContinuousEffectImpl {
|
||||
|
||||
private final Ability ability;
|
||||
|
||||
MaxSpeedAbilityEffect(Ability ability) {
|
||||
super(Duration.Custom, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility);
|
||||
this.ability = ability;
|
||||
}
|
||||
|
||||
private MaxSpeedAbilityEffect(final MaxSpeedAbilityEffect effect) {
|
||||
super(effect);
|
||||
this.ability = effect.ability;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MaxSpeedAbilityEffect copy() {
|
||||
return new MaxSpeedAbilityEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
if (ControllerSpeedCount.instance.calculate(game, source, null) < 4) {
|
||||
return false;
|
||||
}
|
||||
Permanent permanent = game.getPermanent(source.getSourceId());
|
||||
if (permanent != null) {
|
||||
permanent.addAbility(ability, source.getSourceId(), game);
|
||||
return true;
|
||||
}
|
||||
Card card = game.getCard(source.getSourceId());
|
||||
if (card == null) {
|
||||
return false;
|
||||
}
|
||||
game.getState().addOtherAbility(card, ability);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getText(Mode mode) {
|
||||
return "Max speed — " + ability.getRule();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,56 +0,0 @@
|
|||
package mage.abilities.effects.common.continuous;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.Mode;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.dynamicvalue.common.ControllerSpeedCount;
|
||||
import mage.abilities.effects.ContinuousEffectImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Layer;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubLayer;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public class MaxSpeedGainAbilityEffect extends ContinuousEffectImpl {
|
||||
|
||||
private final Ability ability;
|
||||
|
||||
public MaxSpeedGainAbilityEffect(Effect effect) {
|
||||
this(new SimpleStaticAbility(effect));
|
||||
}
|
||||
|
||||
public MaxSpeedGainAbilityEffect(Ability ability) {
|
||||
super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility);
|
||||
this.ability = ability;
|
||||
}
|
||||
|
||||
private MaxSpeedGainAbilityEffect(final MaxSpeedGainAbilityEffect effect) {
|
||||
super(effect);
|
||||
this.ability = effect.ability;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MaxSpeedGainAbilityEffect copy() {
|
||||
return new MaxSpeedGainAbilityEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Permanent permanent = source.getSourcePermanentIfItStillExists(game);
|
||||
if (permanent == null || ControllerSpeedCount.instance.calculate(game, source, null) < 4) {
|
||||
return false;
|
||||
}
|
||||
permanent.addAbility(ability, source.getSourceId(), game);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getText(Mode mode) {
|
||||
return "Max speed — " + ability.getRule();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue