[FIN] Implement Balamb Garden, SeeD Academy / Balamb Garden, Airborne

This commit is contained in:
theelk801 2025-05-23 16:13:06 -04:00 committed by Failure
parent 057ffb6820
commit a5e1fdd85e
3 changed files with 136 additions and 0 deletions

View file

@ -0,0 +1,48 @@
package mage.cards.b;
import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.keyword.CrewAbility;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class BalambGardenAirborne extends CardImpl {
public BalambGardenAirborne(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "");
this.supertype.add(SuperType.LEGENDARY);
this.subtype.add(SubType.VEHICLE);
this.power = new MageInt(5);
this.toughness = new MageInt(4);
this.nightCard = true;
// Flying
this.addAbility(FlyingAbility.getInstance());
// Whenever Balamb Garden attacks, draw a card.
this.addAbility(new AttacksTriggeredAbility(new DrawCardSourceControllerEffect(1)));
// Crew 1
this.addAbility(new CrewAbility(1));
}
private BalambGardenAirborne(final BalambGardenAirborne card) {
super(card);
}
@Override
public BalambGardenAirborne copy() {
return new BalambGardenAirborne(this);
}
}

View file

@ -0,0 +1,86 @@
package mage.cards.b;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTappedAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.CostAdjuster;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.InfoEffect;
import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.hint.Hint;
import mage.abilities.hint.ValueHint;
import mage.abilities.keyword.TransformAbility;
import mage.abilities.mana.BlueManaAbility;
import mage.abilities.mana.GreenManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.game.Game;
import mage.util.CardUtil;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class BalambGardenSeeDAcademy extends CardImpl {
public BalambGardenSeeDAcademy(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
this.subtype.add(SubType.TOWN);
this.secondSideCardClazz = mage.cards.b.BalambGardenAirborne.class;
// This land enters tapped.
this.addAbility(new EntersBattlefieldTappedAbility());
// Add {G} or {U}.
this.addAbility(new GreenManaAbility());
this.addAbility(new BlueManaAbility());
// {5}{G}{U}: Transform this land. This ability costs {1} less to activate for each other Town you control.
this.addAbility(new TransformAbility());
Ability ability = new SimpleActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{5}{G}{U}"));
ability.addEffect(new InfoEffect("This ability costs {1} less to activate for each other Town you control"));
this.addAbility(ability
.setCostAdjuster(BalambGardenSeeDAcademyAdjuster.instance)
.addHint(BalambGardenSeeDAcademyAdjuster.getHint()));
}
private BalambGardenSeeDAcademy(final BalambGardenSeeDAcademy card) {
super(card);
}
@Override
public BalambGardenSeeDAcademy copy() {
return new BalambGardenSeeDAcademy(this);
}
}
enum BalambGardenSeeDAcademyAdjuster implements CostAdjuster {
instance;
private static final FilterPermanent filter = new FilterControlledPermanent(SubType.TOWN);
static {
filter.add(AnotherPredicate.instance);
}
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter);
private static final Hint hint = new ValueHint("Other Towns you control", xValue);
static Hint getHint() {
return hint;
}
@Override
public void reduceCost(Ability ability, Game game) {
int count = xValue.calculate(game, ability, null);
CardUtil.reduceCost(ability, count);
}
}

View file

@ -45,6 +45,8 @@ public final class FinalFantasy extends ExpansionSet {
cards.add(new SetCardInfo("Astrologian's Planisphere", 46, Rarity.RARE, mage.cards.a.AstrologiansPlanisphere.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Astrologian's Planisphere", 581, Rarity.RARE, mage.cards.a.AstrologiansPlanisphere.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Auron's Inspiration", 8, Rarity.UNCOMMON, mage.cards.a.AuronsInspiration.class));
cards.add(new SetCardInfo("Balamb Garden, Airborne", 272, Rarity.RARE, mage.cards.b.BalambGardenAirborne.class));
cards.add(new SetCardInfo("Balamb Garden, SeeD Academy", 272, Rarity.RARE, mage.cards.b.BalambGardenSeeDAcademy.class));
cards.add(new SetCardInfo("Balamb T-Rexaur", 173, Rarity.COMMON, mage.cards.b.BalambTRexaur.class));
cards.add(new SetCardInfo("Balthier and Fran", 213, Rarity.RARE, mage.cards.b.BalthierAndFran.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Balthier and Fran", 319, Rarity.RARE, mage.cards.b.BalthierAndFran.class, NON_FULL_USE_VARIOUS));