[DFT] Implement Streaking Oilgorger

This commit is contained in:
theelk801 2025-01-23 16:06:28 -05:00
parent 514a8004e5
commit 59c1a32697
6 changed files with 182 additions and 0 deletions

View file

@ -0,0 +1,54 @@
package mage.cards.s;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
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;
import mage.abilities.keyword.StartYourEnginesAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class StreakingOilgorger extends CardImpl {
public StreakingOilgorger(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{B}");
this.subtype.add(SubType.VAMPIRE);
this.power = new MageInt(3);
this.toughness = new MageInt(3);
// Flying
this.addAbility(FlyingAbility.getInstance());
// Haste
this.addAbility(HasteAbility.getInstance());
// Start your engines!
this.addAbility(new StartYourEnginesAbility());
// Max speed -- This creature has lifelink.
this.addAbility(new SimpleStaticAbility(new MaxSpeedGainAbilityEffect(
new GainAbilitySourceEffect(LifelinkAbility.getInstance(), Duration.WhileOnBattlefield)
)));
}
private StreakingOilgorger(final StreakingOilgorger card) {
super(card);
}
@Override
public StreakingOilgorger copy() {
return new StreakingOilgorger(this);
}
}

View file

@ -4,11 +4,15 @@ import mage.cards.ExpansionSet;
import mage.constants.Rarity;
import mage.constants.SetType;
import java.util.Arrays;
import java.util.List;
/**
* @author TheElk801
*/
public final class Aetherdrift extends ExpansionSet {
private static final List<String> unfinished = Arrays.asList("Amonkhet Raceway", "Avishkar Raceway", "Far Fortune, End Boss", "Goblin Surveyor", "Hazoret, Godseeker", "Hour of Victory", "Mendicant Core, Guidelight", "Momentum Breaker", "Muraganda Raceway", "Samut, the Driving Force", "Starting Column", "Streaking Oilgorger", "Vnwxt, Verbose Host", "Zahur, Glory's Past");
private static final Aetherdrift instance = new Aetherdrift();
public static Aetherdrift getInstance() {
@ -49,6 +53,7 @@ public final class Aetherdrift extends ExpansionSet {
cards.add(new SetCardInfo("Rocketeer Boostbuggy", 220, Rarity.UNCOMMON, mage.cards.r.RocketeerBoostbuggy.class));
cards.add(new SetCardInfo("Rugged Highlands", 262, Rarity.COMMON, mage.cards.r.RuggedHighlands.class));
cards.add(new SetCardInfo("Scoured Barrens", 263, Rarity.COMMON, mage.cards.s.ScouredBarrens.class));
cards.add(new SetCardInfo("Streaking Oilgorger", 107, Rarity.COMMON, mage.cards.s.StreakingOilgorger.class));
cards.add(new SetCardInfo("Sunbillow Verge", 264, Rarity.RARE, mage.cards.s.SunbillowVerge.class));
cards.add(new SetCardInfo("Swamp", 274, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Swiftwater Cliffs", 265, Rarity.COMMON, mage.cards.s.SwiftwaterCliffs.class));
@ -60,5 +65,7 @@ public final class Aetherdrift extends ExpansionSet {
cards.add(new SetCardInfo("Wastewood Verge", 268, Rarity.RARE, mage.cards.w.WastewoodVerge.class));
cards.add(new SetCardInfo("Willowrush Verge", 270, Rarity.RARE, mage.cards.w.WillowrushVerge.class));
cards.add(new SetCardInfo("Wind-Scarred Crag", 271, Rarity.COMMON, mage.cards.w.WindScarredCrag.class));
cards.removeIf(setCardInfo -> unfinished.contains(setCardInfo.getName()));
}
}

View file

@ -0,0 +1,34 @@
package mage.abilities.dynamicvalue.common;
import mage.abilities.Ability;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.effects.Effect;
import mage.game.Game;
/**
* @author TheElk801
*/
public enum ControllerSpeedCount implements DynamicValue {
instance;
@Override
public int calculate(Game game, Ability sourceAbility, Effect effect) {
// TODO: Implement this
return 0;
}
@Override
public ControllerSpeedCount copy() {
return instance;
}
@Override
public String toString() {
return "X";
}
@Override
public String getMessage() {
return "your speed";
}
}

View file

@ -0,0 +1,56 @@
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 &mdash; " + ability.getRule();
}
}

View file

@ -0,0 +1,30 @@
package mage.abilities.keyword;
import mage.abilities.StaticAbility;
import mage.constants.Zone;
/**
* TODO: Implement this
*
* @author TheElk801
*/
public class StartYourEnginesAbility extends StaticAbility {
public StartYourEnginesAbility() {
super(Zone.BATTLEFIELD, null);
}
private StartYourEnginesAbility(final StartYourEnginesAbility ability) {
super(ability);
}
@Override
public StartYourEnginesAbility copy() {
return new StartYourEnginesAbility(this);
}
@Override
public String getRule() {
return "Start your engines!";
}
}

View file

@ -122,6 +122,7 @@ Skulk|new|
Spectacle|card, cost|
Spree|card|
Squad|cost|
Start your engines!|new|
Storm|new|
Sunburst|new|
Suspend|number, cost, card|