diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java index 64b048caa56..7db9fa2970e 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java @@ -25,6 +25,7 @@ public enum GrabbagImageSource implements CardImageSource { private static final Set supportedSets = new LinkedHashSet() { { 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"); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPicturesService.java b/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPicturesService.java index e18c499ab2e..502e6dad64c 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPicturesService.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPicturesService.java @@ -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; diff --git a/Mage.Sets/src/mage/cards/b/BlindingRadiance.java b/Mage.Sets/src/mage/cards/b/BlindingRadiance.java new file mode 100644 index 00000000000..9fe7f4e9fa4 --- /dev/null +++ b/Mage.Sets/src/mage/cards/b/BlindingRadiance.java @@ -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); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/g/GoblinBruiser.java b/Mage.Sets/src/mage/cards/g/GoblinBruiser.java new file mode 100644 index 00000000000..ef8f0f352fa --- /dev/null +++ b/Mage.Sets/src/mage/cards/g/GoblinBruiser.java @@ -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); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/o/OgrePainbringer.java b/Mage.Sets/src/mage/cards/o/OgrePainbringer.java new file mode 100644 index 00000000000..01e58b10876 --- /dev/null +++ b/Mage.Sets/src/mage/cards/o/OgrePainbringer.java @@ -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); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/t/TitanicPelagosaur.java b/Mage.Sets/src/mage/cards/t/TitanicPelagosaur.java new file mode 100644 index 00000000000..2da8d31c3c3 --- /dev/null +++ b/Mage.Sets/src/mage/cards/t/TitanicPelagosaur.java @@ -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); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/t/TreetopRecluse.java b/Mage.Sets/src/mage/cards/t/TreetopRecluse.java new file mode 100644 index 00000000000..02f7a094d9f --- /dev/null +++ b/Mage.Sets/src/mage/cards/t/TreetopRecluse.java @@ -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); + } +} diff --git a/Mage.Sets/src/mage/sets/ArenaNewPlayerExperienceExtras.java b/Mage.Sets/src/mage/sets/ArenaNewPlayerExperienceExtras.java index 652c060b770..31b02684026 100644 --- a/Mage.Sets/src/mage/sets/ArenaNewPlayerExperienceExtras.java +++ b/Mage.Sets/src/mage/sets/ArenaNewPlayerExperienceExtras.java @@ -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)); } } diff --git a/Mage.Sets/src/mage/sets/ArenaTutorialCards.java b/Mage.Sets/src/mage/sets/ArenaTutorialCards.java new file mode 100644 index 00000000000..a02ffa4f6cf --- /dev/null +++ b/Mage.Sets/src/mage/sets/ArenaTutorialCards.java @@ -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)); + } +} \ No newline at end of file