diff --git a/Mage.Sets/src/mage/cards/s/StreakingOilgorger.java b/Mage.Sets/src/mage/cards/s/StreakingOilgorger.java new file mode 100644 index 00000000000..0f33239fe77 --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/StreakingOilgorger.java @@ -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); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index fbe7af4c553..364764a7f14 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -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 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())); } } diff --git a/Mage/src/main/java/mage/abilities/dynamicvalue/common/ControllerSpeedCount.java b/Mage/src/main/java/mage/abilities/dynamicvalue/common/ControllerSpeedCount.java new file mode 100644 index 00000000000..b06aa28ecfe --- /dev/null +++ b/Mage/src/main/java/mage/abilities/dynamicvalue/common/ControllerSpeedCount.java @@ -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"; + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/MaxSpeedGainAbilityEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/MaxSpeedGainAbilityEffect.java new file mode 100644 index 00000000000..a0136fad8c3 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/MaxSpeedGainAbilityEffect.java @@ -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 — " + ability.getRule(); + } +} diff --git a/Mage/src/main/java/mage/abilities/keyword/StartYourEnginesAbility.java b/Mage/src/main/java/mage/abilities/keyword/StartYourEnginesAbility.java new file mode 100644 index 00000000000..1c8d8c5516c --- /dev/null +++ b/Mage/src/main/java/mage/abilities/keyword/StartYourEnginesAbility.java @@ -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!"; + } +} diff --git a/Utils/keywords.txt b/Utils/keywords.txt index a0fa2e2d0ae..810e9e1c142 100644 --- a/Utils/keywords.txt +++ b/Utils/keywords.txt @@ -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|