Add 5 Arena Tutorial Cards (as custom set) (#12627)

This commit is contained in:
Svyatoslav28597 2024-08-15 04:11:19 +03:00 committed by GitHub
parent b016e0fa71
commit 4a041aa89c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 219 additions and 6 deletions

View file

@ -25,6 +25,7 @@ public enum GrabbagImageSource implements CardImageSource {
private static final Set<String> supportedSets = new LinkedHashSet<String>() {
{
add("SWS");
add("ATC");
}
};
@ -469,6 +470,11 @@ public enum GrabbagImageSource implements CardImageSource {
singleLinks.put("SWS/War Room (Star Wars)", "pqQ9kzt.jpeg");
singleLinks.put("SWS/Xyston Star Destroyer", "oqbHtUC.jpeg");
singleLinks.put("SWS/Zorii Bliss", "vOyNE39.jpeg");
singleLinks.put("ATC/Blinding Radiance", "4B4lBl5.jpeg");
singleLinks.put("ATC/Goblin Bruiser", "Di5I8tS.jpeg");
singleLinks.put("ATC/Ogre Painbringer", "eA3zL7Y.jpeg");
singleLinks.put("ATC/Titanic Pelagosaur", "KWSsiKD.jpeg");
singleLinks.put("ATC/Treetop Recluse", "uHnQYpp.jpeg");
// Emblems
singleLinks.put("SWS/Emblem Obi-Wan Kenobi", "Qyc10aT.png");

View file

@ -88,7 +88,7 @@ public class DownloadPicturesService extends DefaultBoundedRangeModel implements
SCRYFALL_BIG("2a. scryfall.com - BIG: high quality (~15 GB)", ScryfallImageSource.getInstance()),
SCRYFALL_NORM("2b. scryfall.com - normal: good quality (~10 GB)", ScryfallImageSourceNormal.getInstance()),
SCRYFALL_SMALL("2c. scryfall.com - small: low quality, unreadable text (~1.5 GB)", ScryfallImageSourceSmall.getInstance()),
GRAB_BAG("3. GrabBag - unofficial STAR WARS cards and tokens", GrabbagImageSource.instance),
GRAB_BAG("3. GrabBag - Arena Tutorial cards, unofficial STAR WARS cards and tokens", GrabbagImageSource.instance),
COPYPASTE("4. Experimental - copy and paste image URLs", CopyPasteImageSource.instance); // TODO: need rework for user friendly GUI
private final String text;

View file

@ -0,0 +1,40 @@
package mage.cards.b;
import mage.abilities.effects.common.TapAllEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.common.FilterOpponentsCreaturePermanent;
import mage.filter.predicate.mageobject.ToughnessPredicate;
import java.util.UUID;
/**
@author JayDi85*/
public final class BlindingRadiance extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterOpponentsCreaturePermanent("creatures your opponents control with toughness 2 or less");
static {
filter.add(new ToughnessPredicate(ComparisonType.FEWER_THAN, 3));
}
public BlindingRadiance(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{W}");
// Tap all creatures your opponents control with toughness 2 or less.
TapAllEffect effect = new TapAllEffect(filter);
this.getSpellAbility().addEffect(effect);
}
private BlindingRadiance(final BlindingRadiance card) {
super(card);
}
@Override
public BlindingRadiance copy() {
return new BlindingRadiance(this);
}
}

View file

@ -0,0 +1,33 @@
package mage.cards.g;
import mage.MageInt;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.UUID;
/**
@author JayDi85*/
public final class GoblinBruiser extends CardImpl {
public GoblinBruiser(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}{R}");
this.subtype.add(SubType.GOBLIN);
this.subtype.add(SubType.WARRIOR);
this.power = new MageInt(3);
this.toughness = new MageInt(3);
}
private GoblinBruiser(final GoblinBruiser card) {
super(card);
}
@Override
public GoblinBruiser copy() {
return new GoblinBruiser(this);
}
}

View file

@ -0,0 +1,38 @@
package mage.cards.o;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.common.DamagePlayersEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.TargetController;
import java.util.UUID;
/**
@author JayDi85*/
public final class OgrePainbringer extends CardImpl {
public OgrePainbringer(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}{R}");
this.subtype.add(SubType.OGRE);
this.power = new MageInt(7);
this.toughness = new MageInt(3);
// When Ogre Painbringer enters the battlefield, it deals 3 damage to each player.
this.addAbility(new EntersBattlefieldTriggeredAbility(new DamagePlayersEffect(3, TargetController.ANY, "it")));
}
private OgrePainbringer(final OgrePainbringer card) {
super(card);
}
@Override
public OgrePainbringer copy() {
return new OgrePainbringer(this);
}
}

View file

@ -0,0 +1,32 @@
package mage.cards.t;
import mage.MageInt;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.UUID;
/**
@author JayDi85*/
public final class TitanicPelagosaur extends CardImpl {
public TitanicPelagosaur(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}{U}");
this.subtype.add(SubType.DINOSAUR);
this.power = new MageInt(4);
this.toughness = new MageInt(6);
}
private TitanicPelagosaur(final TitanicPelagosaur card) {
super(card);
}
@Override
public TitanicPelagosaur copy() {
return new TitanicPelagosaur(this);
}
}

View file

@ -0,0 +1,39 @@
package mage.cards.t;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.keyword.ReachAbility;
import mage.abilities.keyword.VigilanceAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
/**
*
* @author Svyatoslav28
*/
public final class TreetopRecluse extends CardImpl {
public TreetopRecluse(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}{G}");
this.subtype.add(SubType.SPIDER);
this.power = new MageInt(1);
this.toughness = new MageInt(6);
// Vigilance
this.addAbility(VigilanceAbility.getInstance());
// Reach
this.addAbility(ReachAbility.getInstance());
}
private TreetopRecluse(final TreetopRecluse card) {
super(card);
}
@Override
public TreetopRecluse copy() {
return new TreetopRecluse(this);
}
}

View file

@ -41,10 +41,5 @@ public final class ArenaNewPlayerExperienceExtras extends ExpansionSet {
cards.add(new SetCardInfo("Volcanic Dragon", 45, Rarity.UNCOMMON, mage.cards.v.VolcanicDragon.class));
cards.add(new SetCardInfo("Waterknot", 22, Rarity.COMMON, mage.cards.w.Waterknot.class));
// cards removed entirely - no longer exist on scryfall at all.
// cards.add(new SetCardInfo("Blinding Radiance", 2, Rarity.UNCOMMON, mage.cards.b.BlindingRadiance.class));
// cards.add(new SetCardInfo("Goblin Bruiser", 39, Rarity.UNCOMMON, mage.cards.g.GoblinBruiser.class));
// cards.add(new SetCardInfo("Ogre Painbringer", 42, Rarity.RARE, mage.cards.o.OgrePainbringer.class));
// cards.add(new SetCardInfo("Titanic Pelagosaur", 19, Rarity.UNCOMMON, mage.cards.t.TitanicPelagosaur.class));
}
}

View file

@ -0,0 +1,30 @@
package mage.sets;
import mage.cards.ExpansionSet;
import mage.constants.Rarity;
import mage.constants.SetType;
/**
* @author Svyatoslav28
*/
public final class ArenaTutorialCards extends ExpansionSet {
private static final ArenaTutorialCards instance = new ArenaTutorialCards();
public static ArenaTutorialCards getInstance() {
return instance;
}
private ArenaTutorialCards() {
super("Arena Tutorial Cards", "ATC", ExpansionSet.buildDate(2024, 5, 18), SetType.CUSTOM_SET);
this.blockName = "Arena Tutorial Cards";
this.hasBasicLands = false;
cards.add(new SetCardInfo("Blinding Radiance", 1, Rarity.UNCOMMON, mage.cards.b.BlindingRadiance.class));
cards.add(new SetCardInfo("Goblin Bruiser", 3, Rarity.UNCOMMON, mage.cards.g.GoblinBruiser.class));
cards.add(new SetCardInfo("Ogre Painbringer", 4, Rarity.RARE, mage.cards.o.OgrePainbringer.class));
cards.add(new SetCardInfo("Titanic Pelagosaur", 2, Rarity.UNCOMMON, mage.cards.t.TitanicPelagosaur.class));
cards.add(new SetCardInfo("Treetop Recluse", 5, Rarity.COMMON, mage.cards.t.TreetopRecluse.class));
}
}