Skip to content

Commit

Permalink
Merge branch 'master' into implement-aatchik-emerald-radian
Browse files Browse the repository at this point in the history
  • Loading branch information
theelk801 authored Jan 24, 2025
2 parents 21d2604 + f669bdd commit 47ae9dd
Show file tree
Hide file tree
Showing 57 changed files with 2,384 additions and 40 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -624,6 +624,8 @@ public class ScryfallImageSupportCards {
put("SLD/Darksteel Colossus/1081b", "https://api.scryfall.com/cards/sld/1081/en?format=image&face=back");
put("SLD/Death Baron/1458b", "https://api.scryfall.com/cards/sld/1458/en?format=image&face=back");
put("SLD/Doubling Cube/1080b", "https://api.scryfall.com/cards/sld/1080/en?format=image&face=back");
put("SLD/Estrid's Invocation/1325b", "https://api.scryfall.com/cards/sld/1325/en?format=image&face=back");
put("SLD/Estrid, the Masked/1327b", "https://api.scryfall.com/cards/sld/1327/en?format=image&face=back");
put("SLD/Etali, Primal Storm/1123b", "https://api.scryfall.com/cards/sld/1123/en?format=image&face=back");
put("SLD/Garruk Wildspeaker/749b", "https://api.scryfall.com/cards/sld/749/en?format=image&face=back");
put("SLD/Garruk Wildspeaker/1457b", "https://api.scryfall.com/cards/sld/1457/en?format=image&face=back");
Expand All @@ -649,8 +651,10 @@ public class ScryfallImageSupportCards {
put("SLD/Rin and Seri, Inseparable/1554b", "https://api.scryfall.com/cards/sld/1554/en?format=image&face=back");
put("SLD/Sakashima of a Thousand Faces/1541b", "https://api.scryfall.com/cards/sld/1541/en?format=image&face=back");
put("SLD/Sol Ring/1512b", "https://api.scryfall.com/cards/sld/1512/en?format=image&face=back");
put("SLD/Steely Resolve/1326b", "https://api.scryfall.com/cards/sld/1326/en?format=image&face=back");
put("SLD/Stitch in Time/382b", "https://api.scryfall.com/cards/sld/382/en?format=image&face=back");
put("SLD/Terror/750b", "https://api.scryfall.com/cards/sld/750/en?format=image&face=back");
put("SLD/Tuvasa the Sunlit/1328b", "https://api.scryfall.com/cards/sld/1328/en?format=image&face=back");
put("SLD/Ulamog, the Ceaseless Hunger/1122b", "https://api.scryfall.com/cards/sld/1122/en?format=image&face=back");
put("SLD/Unholy Grotto/1462b", "https://api.scryfall.com/cards/sld/1462/en?format=image&face=back");
put("SLD/Yargle, Glutton of Urborg/1542b", "https://api.scryfall.com/cards/sld/1542/en?format=image&face=back");
Expand Down
50 changes: 50 additions & 0 deletions Mage.Sets/src/mage/cards/a/AetherSyphon.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package mage.cards.a;

import mage.abilities.Ability;
import mage.abilities.common.DrawCardControllerTriggeredAbility;
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;
import mage.constants.CardType;
import mage.constants.TargetController;

import java.util.UUID;

/**
* @author TheElk801
*/
public final class AetherSyphon extends CardImpl {

public AetherSyphon(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}{U}{U}");

// Start your engines!
this.addAbility(new StartYourEnginesAbility());

// {2}, {T}: Draw a card.
Ability ability = new SimpleActivatedAbility(new DrawCardSourceControllerEffect(1), new GenericManaCost(2));
ability.addCost(new TapSourceCost());
this.addAbility(ability);

// Max speed -- Whenever you draw a card, each opponent mills two cards.
this.addAbility(new SimpleStaticAbility(new MaxSpeedGainAbilityEffect(new DrawCardControllerTriggeredAbility(
new MillCardsEachPlayerEffect(2, TargetController.OPPONENT), false
))));
}

private AetherSyphon(final AetherSyphon card) {
super(card);
}

@Override
public AetherSyphon copy() {
return new AetherSyphon(this);
}
}
47 changes: 47 additions & 0 deletions Mage.Sets/src/mage/cards/a/AmonkhetRaceway.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package mage.cards.a;

import mage.abilities.Ability;
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;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.target.common.TargetCreaturePermanent;

import java.util.UUID;

/**
* @author TheElk801
*/
public final class AmonkhetRaceway extends CardImpl {

public AmonkhetRaceway(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");

// Start your engines!
this.addAbility(new StartYourEnginesAbility());

// {T}: Add {C}.
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.addTarget(new TargetCreaturePermanent());
this.addAbility(new SimpleStaticAbility(new MaxSpeedGainAbilityEffect(ability)));
}

private AmonkhetRaceway(final AmonkhetRaceway card) {
super(card);
}

@Override
public AmonkhetRaceway copy() {
return new AmonkhetRaceway(this);
}
}
59 changes: 59 additions & 0 deletions Mage.Sets/src/mage/cards/a/ApocalypseRunner.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package mage.cards.a;

import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
import mage.abilities.keyword.CrewAbility;
import mage.abilities.keyword.LifelinkAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.SubType;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.mageobject.PowerPredicate;
import mage.target.TargetPermanent;

import java.util.UUID;

/**
* @author TheElk801
*/
public final class ApocalypseRunner extends CardImpl {

private static final FilterPermanent filter = new FilterControlledCreaturePermanent("creature you control with power 2 or less");

static {
filter.add(new PowerPredicate(ComparisonType.FEWER_THAN, 3));
}

public ApocalypseRunner(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}{B}{R}");

this.subtype.add(SubType.VEHICLE);
this.power = new MageInt(6);
this.toughness = new MageInt(5);

// {T}: Target creature you control with power 2 or less gains lifelink until end of turn and can't be blocked this turn.
Ability ability = new SimpleActivatedAbility(new GainAbilityTargetEffect(LifelinkAbility.getInstance()), new TapSourceCost());
ability.addEffect(new CantBeBlockedTargetEffect().setText("and can't be blocked this turn"));
ability.addTarget(new TargetPermanent(filter));
this.addAbility(ability);

// Crew 3
this.addAbility(new CrewAbility(3));
}

private ApocalypseRunner(final ApocalypseRunner card) {
super(card);
}

@Override
public ApocalypseRunner copy() {
return new ApocalypseRunner(this);
}
}
48 changes: 48 additions & 0 deletions Mage.Sets/src/mage/cards/a/AvishkarRaceway.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package mage.cards.a;

import mage.abilities.Ability;
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;
import mage.cards.CardSetInfo;
import mage.constants.CardType;

import java.util.UUID;

/**
* @author TheElk801
*/
public final class AvishkarRaceway extends CardImpl {

public AvishkarRaceway(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");

// Start your engines!
this.addAbility(new StartYourEnginesAbility());

// {T}: Add {C}.
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.addCost(new TapSourceCost());
ability.addCost(new DiscardCardCost());
this.addAbility(new SimpleStaticAbility(new MaxSpeedGainAbilityEffect(ability)));
}

private AvishkarRaceway(final AvishkarRaceway card) {
super(card);
}

@Override
public AvishkarRaceway copy() {
return new AvishkarRaceway(this);
}
}
66 changes: 66 additions & 0 deletions Mage.Sets/src/mage/cards/b/BoomScholar.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package mage.cards.b;

import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.effects.common.cost.AbilitiesCostReductionControllerEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.ExhaustAbility;
import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.counters.CounterType;
import mage.filter.FilterPermanent;
import mage.filter.predicate.Predicates;

import java.util.UUID;

/**
* @author TheElk801
*/
public final class BoomScholar extends CardImpl {

private static final FilterPermanent filter = new FilterPermanent("creatures and Vehicles");

static {
filter.add(Predicates.or(
CardType.CREATURE.getPredicate(),
SubType.VEHICLE.getPredicate()
));
}

public BoomScholar(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}{G}");

this.subtype.add(SubType.GOBLIN);
this.subtype.add(SubType.ADVISOR);
this.power = new MageInt(3);
this.toughness = new MageInt(3);

// Exhaust abilities of other permanents you control cost {2} less to activate.
this.addAbility(new SimpleStaticAbility(new AbilitiesCostReductionControllerEffect(
ExhaustAbility.class, "", 2, true
).setText("exhaust abilities of other permanents you control cost {2} less to activate")));

// Exhaust -- {4}{R}{G}: Creatures and Vehicles you control gain trample until end of turn. Put two +1/+1 counters on this creature.
Ability ability = new ExhaustAbility(new GainAbilityControlledEffect(
TrampleAbility.getInstance(), Duration.EndOfTurn, filter
), new ManaCostsImpl<>("{4}{R}{G}"));
ability.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance(2)));
this.addAbility(ability);
}

private BoomScholar(final BoomScholar card) {
super(card);
}

@Override
public BoomScholar copy() {
return new BoomScholar(this);
}
}
4 changes: 2 additions & 2 deletions Mage.Sets/src/mage/cards/b/BornToDrive.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.Predicates;
import mage.game.permanent.token.PilotToken;
import mage.game.permanent.token.PilotCrewToken;
import mage.target.TargetPermanent;

import java.util.UUID;
Expand Down Expand Up @@ -63,7 +63,7 @@ public BornToDrive(UUID ownerId, CardSetInfo setInfo) {
)).addHint(hint));

// Channel — {2}{W}, Discard Born to Drive: Create two 1/1 colorless Pilot creature tokens with "This creature crews Vehicles as though its power were 2 greater."
this.addAbility(new ChannelAbility("{2}{W}", new CreateTokenEffect(new PilotToken(), 2)));
this.addAbility(new ChannelAbility("{2}{W}", new CreateTokenEffect(new PilotCrewToken(), 2)));
}

private BornToDrive(final BornToDrive card) {
Expand Down
56 changes: 56 additions & 0 deletions Mage.Sets/src/mage/cards/b/BrightfieldGlider.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package mage.cards.b;

import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.AttacksWhileSaddledTriggeredAbility;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.SaddleAbility;
import mage.abilities.keyword.VigilanceAbility;
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 BrightfieldGlider extends CardImpl {

public BrightfieldGlider(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}");

this.subtype.add(SubType.POSSUM);
this.subtype.add(SubType.MOUNT);
this.power = new MageInt(1);
this.toughness = new MageInt(1);

// Vigilance
this.addAbility(VigilanceAbility.getInstance());

// Whenever this creature attacks while saddled, it gets +1/+2 and gains flying until end of turn.
Ability ability = new AttacksWhileSaddledTriggeredAbility(new BoostSourceEffect(
1, 2, Duration.EndOfTurn
).setText("it gets +1/+2"));
ability.addEffect(new GainAbilitySourceEffect(
FlyingAbility.getInstance(), Duration.EndOfTurn
).setText("and gains flying until end of turn"));
this.addAbility(ability);

// Saddle 3
this.addAbility(new SaddleAbility(3));
}

private BrightfieldGlider(final BrightfieldGlider card) {
super(card);
}

@Override
public BrightfieldGlider copy() {
return new BrightfieldGlider(this);
}
}
Loading

0 comments on commit 47ae9dd

Please sign in to comment.