[FIC] Implement Chocobo Camp

This commit is contained in:
theelk801 2025-12-07 10:53:46 -05:00
parent 147ac2fef2
commit ce972d294d
11 changed files with 119 additions and 102 deletions

View file

@ -4,7 +4,7 @@ import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.common.MorbidCondition;
import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.YouControlALegendaryCreatureCondition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.dynamicvalue.common.GetXValue;
@ -16,8 +16,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledCreaturePermanent;
import java.util.UUID;
@ -26,21 +24,14 @@ import java.util.UUID;
*/
public final class BaradDur extends CardImpl {
private static final FilterPermanent filter = new FilterControlledCreaturePermanent("a legendary creature");
static {
filter.add(SuperType.LEGENDARY.getPredicate());
}
private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
public BaradDur(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
this.supertype.add(SuperType.LEGENDARY);
// Barad-dur enters the battlefield tapped unless you control a legendary creature.
this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
this.addAbility(new EntersBattlefieldTappedUnlessAbility(YouControlALegendaryCreatureCondition.instance)
.addHint(YouControlALegendaryCreatureCondition.getHint()));
// {T}: Add {B}.
this.addAbility(new BlackManaAbility());

View file

@ -0,0 +1,62 @@
package mage.cards.c;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.delayed.AddCounterNextSpellDelayedTriggeredAbility;
import mage.abilities.condition.common.YouControlALegendaryCreatureCondition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.mana.BasicManaAbility;
import mage.abilities.mana.GreenManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.FilterSpell;
import mage.filter.common.FilterCreatureSpell;
import mage.game.permanent.token.ChocoboToken;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class ChocoboCamp extends CardImpl {
private static final FilterSpell filter = new FilterCreatureSpell("a Bird creature spell");
static {
filter.add(SubType.BIRD.getPredicate());
}
public ChocoboCamp(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// This land enters tapped unless you control a legendary creature.
this.addAbility(new EntersBattlefieldTappedUnlessAbility(YouControlALegendaryCreatureCondition.instance)
.addHint(YouControlALegendaryCreatureCondition.getHint()));
// {T}: Add {G}. When you next cast a Bird creature spell this turn, it enters with an additional +1/+1 counter on it.
BasicManaAbility manaAbility = new GreenManaAbility();
manaAbility.addEffect(new CreateDelayedTriggeredAbilityEffect(new AddCounterNextSpellDelayedTriggeredAbility(filter)));
manaAbility.setUndoPossible(false);
this.addAbility(manaAbility);
// {2}{G}{G}, {T}: Create a 2/2 green Bird creature token with "Whenever a land you control enters, this token gets +1/+0 until end of turn."
Ability ability = new SimpleActivatedAbility(new CreateTokenEffect(new ChocoboToken()), new ManaCostsImpl<>("{2}{G}{G}"));
ability.addCost(new TapSourceCost());
this.addAbility(ability);
}
private ChocoboCamp(final ChocoboCamp card) {
super(card);
}
@Override
public ChocoboCamp copy() {
return new ChocoboCamp(this);
}
}

View file

@ -3,14 +3,12 @@ package mage.cards.e;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.condition.common.YouControlALegendaryCreatureCondition;
import mage.abilities.costs.CostAdjuster;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.InfoEffect;
import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.abilities.hint.ConditionHint;
import mage.abilities.hint.Hint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@ -27,11 +25,6 @@ import java.util.UUID;
*/
public final class EsquireOfTheKing extends CardImpl {
private static final Hint hint = new ConditionHint(
new PermanentsOnTheBattlefieldCondition(StaticFilters.FILTER_CONTROLLED_CREATURE_LEGENDARY),
"You control a legendary creature"
);
public EsquireOfTheKing(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}");
@ -47,7 +40,7 @@ public final class EsquireOfTheKing extends CardImpl {
ability.addCost(new TapSourceCost());
ability.setCostAdjuster(EsquireOfTheKingAdjuster.instance);
ability.addEffect(new InfoEffect("This ability costs {2} less to activate if you control a legendary creature."));
this.addAbility(ability.addHint(hint));
this.addAbility(ability.addHint(YouControlALegendaryCreatureCondition.getHint()));
}
private EsquireOfTheKing(final EsquireOfTheKing card) {

View file

@ -1,23 +1,17 @@
package mage.cards.h;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.common.YouControlALegendaryCreatureCondition;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.ReturnSourceFromGraveyardToBattlefieldEffect;
import mage.abilities.effects.keyword.ScryEffect;
import mage.abilities.hint.ConditionHint;
import mage.abilities.hint.Hint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledCreaturePermanent;
import java.util.UUID;
@ -26,16 +20,6 @@ import java.util.UUID;
*/
public final class HauntOfTheDeadMarshes extends CardImpl {
private static final FilterPermanent filter
= new FilterControlledCreaturePermanent("you control a legendary creature");
static {
filter.add(SuperType.LEGENDARY.getPredicate());
}
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter);
private static final Hint hint = new ConditionHint(condition, "You control a legendary creature");
public HauntOfTheDeadMarshes(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}");
@ -50,8 +34,8 @@ public final class HauntOfTheDeadMarshes extends CardImpl {
// {2}{B}: Return Haunt of the Dead Marshes from your graveyard to the battlefield tapped. Activate only if you control a legendary creature.
this.addAbility(new ActivateIfConditionActivatedAbility(
Zone.GRAVEYARD, new ReturnSourceFromGraveyardToBattlefieldEffect(true, false),
new ManaCostsImpl<>("{2}{B}"), condition
).addHint(hint));
new ManaCostsImpl<>("{2}{B}"), YouControlALegendaryCreatureCondition.instance
).addHint(YouControlALegendaryCreatureCondition.getHint()));
}
private HauntOfTheDeadMarshes(final HauntOfTheDeadMarshes card) {

View file

@ -4,7 +4,7 @@ import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.YouControlALegendaryCreatureCondition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
@ -16,8 +16,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SuperType;
import mage.constants.WatcherScope;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.util.CardUtil;
@ -32,21 +30,14 @@ import java.util.UUID;
*/
public final class MinasTirith extends CardImpl {
private static final FilterPermanent filter = new FilterControlledCreaturePermanent("a legendary creature");
static {
filter.add(SuperType.LEGENDARY.getPredicate());
}
private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
public MinasTirith(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
this.supertype.add(SuperType.LEGENDARY);
// Minas Tirith enters the battlefield tapped unless you control a legendary creature.
this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
this.addAbility(new EntersBattlefieldTappedUnlessAbility(YouControlALegendaryCreatureCondition.instance)
.addHint(YouControlALegendaryCreatureCondition.getHint()));
// {T}: Add {W}.
this.addAbility(new WhiteManaAbility());

View file

@ -3,7 +3,7 @@ package mage.cards.m;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.YouControlALegendaryCreatureCondition;
import mage.abilities.costs.common.ExileFromGraveCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
@ -13,8 +13,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SuperType;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.game.permanent.token.TreasureToken;
import mage.target.common.TargetCardInYourGraveyard;
@ -25,21 +23,14 @@ import java.util.UUID;
*/
public final class MinesOfMoria extends CardImpl {
private static final FilterPermanent filter = new FilterControlledCreaturePermanent("a legendary creature");
static {
filter.add(SuperType.LEGENDARY.getPredicate());
}
private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
public MinesOfMoria(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
this.supertype.add(SuperType.LEGENDARY);
// Mines of Moria enters the battlefield tapped unless you control a legendary creature.
this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
this.addAbility(new EntersBattlefieldTappedUnlessAbility(YouControlALegendaryCreatureCondition.instance)
.addHint(YouControlALegendaryCreatureCondition.getHint()));
// {T}: Add {R}.
this.addAbility(new RedManaAbility());

View file

@ -9,10 +9,8 @@ import mage.abilities.effects.keyword.SurveilEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.StaticFilters;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
@ -22,14 +20,7 @@ import java.util.UUID;
*/
public final class PriceOfFame extends CardImpl {
private static final FilterPermanent filter
= new FilterCreaturePermanent("a legendary creature");
static {
filter.add(SuperType.LEGENDARY.getPredicate());
}
private static final Condition condition = new SourceTargetsPermanentCondition(filter);
private static final Condition condition = new SourceTargetsPermanentCondition(StaticFilters.FILTER_CONTROLLED_CREATURE_LEGENDARY);
public PriceOfFame(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{B}");

View file

@ -3,7 +3,7 @@ package mage.cards.r;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.YouControlALegendaryCreatureCondition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.keyword.ScryEffect;
@ -12,8 +12,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SuperType;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledCreaturePermanent;
import java.util.UUID;
@ -22,28 +20,22 @@ import java.util.UUID;
*/
public final class Rivendell extends CardImpl {
private static final FilterPermanent filter = new FilterControlledCreaturePermanent("a legendary creature");
static {
filter.add(SuperType.LEGENDARY.getPredicate());
}
private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
public Rivendell(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
this.supertype.add(SuperType.LEGENDARY);
// Rivendell enters the battlefield tapped unless you control a legendary creature.
this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
this.addAbility(new EntersBattlefieldTappedUnlessAbility(YouControlALegendaryCreatureCondition.instance)
.addHint(YouControlALegendaryCreatureCondition.getHint()));
// {T}: Add {U}.
this.addAbility(new BlueManaAbility());
// {1}{U}, {T}: Scry 2. Activate only if you control a legendary creature.
Ability ability = new ActivateIfConditionActivatedAbility(
new ScryEffect(2, false), new ManaCostsImpl<>("{1}{U}"), condition
new ScryEffect(2, false), new ManaCostsImpl<>("{1}{U}"),
YouControlALegendaryCreatureCondition.instance
);
ability.addCost(new TapSourceCost());
this.addAbility(ability);

View file

@ -3,7 +3,7 @@ package mage.cards.t;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.YouControlALegendaryCreatureCondition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.common.TapTargetCost;
import mage.abilities.costs.mana.ManaCostsImpl;
@ -13,9 +13,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SuperType;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.game.permanent.token.FoodToken;
import mage.target.common.TargetControlledPermanent;
@ -26,21 +24,14 @@ import java.util.UUID;
*/
public final class TheShire extends CardImpl {
private static final FilterPermanent filter = new FilterControlledCreaturePermanent("a legendary creature");
static {
filter.add(SuperType.LEGENDARY.getPredicate());
}
private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
public TheShire(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
this.supertype.add(SuperType.LEGENDARY);
// The Shire enters the battlefield tapped unless you control a legendary creature.
this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
this.addAbility(new EntersBattlefieldTappedUnlessAbility(YouControlALegendaryCreatureCondition.instance)
.addHint(YouControlALegendaryCreatureCondition.getHint()));
// {T}: Add {G}.
this.addAbility(new GreenManaAbility());

View file

@ -88,6 +88,7 @@ public final class FinalFantasyCommander extends ExpansionSet {
cards.add(new SetCardInfo("Champions from Beyond", 11, Rarity.RARE, mage.cards.c.ChampionsFromBeyond.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Chaos Warp", 291, Rarity.RARE, mage.cards.c.ChaosWarp.class));
cards.add(new SetCardInfo("Chasm Skulker", 262, Rarity.RARE, mage.cards.c.ChasmSkulker.class));
cards.add(new SetCardInfo("Chocobo Camp", 462, Rarity.RARE, mage.cards.c.ChocoboCamp.class));
cards.add(new SetCardInfo("Chocobo Knights", 102, Rarity.RARE, mage.cards.c.ChocoboKnights.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Chocobo Knights", 12, Rarity.RARE, mage.cards.c.ChocoboKnights.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Choked Estuary", 379, Rarity.RARE, mage.cards.c.ChokedEstuary.class));

View file

@ -0,0 +1,30 @@
package mage.abilities.condition.common;
import mage.abilities.Ability;
import mage.abilities.condition.Condition;
import mage.abilities.hint.ConditionHint;
import mage.abilities.hint.Hint;
import mage.filter.StaticFilters;
import mage.game.Game;
/**
* @author TheElk801
*/
public enum YouControlALegendaryCreatureCondition implements Condition {
instance;
private static final Hint hint = new ConditionHint(instance);
public static Hint getHint() {
return hint;
}
@Override
public boolean apply(Game game, Ability source) {
return game.getBattlefield().contains(StaticFilters.FILTER_CONTROLLED_CREATURE_LEGENDARY, source.getControllerId(), source, game, 1);
}
@Override
public String toString() {
return "you control a legendary creature";
}
}