diff --git a/Mage.Sets/src/mage/cards/c/CloudPlanetsChampion.java b/Mage.Sets/src/mage/cards/c/CloudPlanetsChampion.java new file mode 100644 index 00000000000..baa85bb3ff0 --- /dev/null +++ b/Mage.Sets/src/mage/cards/c/CloudPlanetsChampion.java @@ -0,0 +1,53 @@ +package mage.cards.c; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.CompoundCondition; +import mage.abilities.condition.Condition; +import mage.abilities.condition.common.EquippedSourceCondition; +import mage.abilities.condition.common.MyTurnCondition; +import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.effects.common.cost.ReduceCostEquipTargetSourceEffect; +import mage.abilities.keyword.DoubleStrikeAbility; +import mage.abilities.keyword.IndestructibleAbility; +import mage.cards.f.CloudPlanetsChampion; +import mage.constants.*; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; + +/** + * + * @author TheElk801 + */ +public final class CloudPlanetsChampion extends CardImpl { + + private static final Condition condition=new CompoundCondition(EquippedSourceCondition.instance, MyTurnCondition.instance); + public CloudPlanetsChampion(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}{W}"); + + this.supertype.add(SuperType.LEGENDARY); + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.SOLDIER); + this.subtype.add(SubType.MERCENARY); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // During your turn, as long as Cloud is equipped, it has double strike and indestructible. + Ability ability=new SimpleStaticAbility(new ConditionalContinuousEffect(new GainAbilitySourceEffect(DoubleStrikeAbility.getInstance()),condition,"during your turn, as long as {this} is equipped, it has double strike"));ability.addEffect(new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance()),condition,"and indestructible"));this.addAbility(ability); + + // Equip abilities you activate that target Cloud cost {2} less to activate. + this.addAbility(new SimpleStaticAbility(new ReduceCostEquipTargetSourceEffect(2))); + } + + private CloudPlanetsChampion(final CloudPlanetsChampion card) { + super(card); + } + + @Override + public CloudPlanetsChampion copy() { + return new CloudPlanetsChampion(this); + } +} diff --git a/Mage.Sets/src/mage/cards/f/FerventChampion.java b/Mage.Sets/src/mage/cards/f/FerventChampion.java index 828b931c715..5f75340076f 100644 --- a/Mage.Sets/src/mage/cards/f/FerventChampion.java +++ b/Mage.Sets/src/mage/cards/f/FerventChampion.java @@ -5,23 +5,20 @@ import mage.abilities.Ability; import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.continuous.BoostTargetEffect; -import mage.abilities.effects.common.cost.CostModificationEffectImpl; -import mage.abilities.keyword.EquipAbility; +import mage.abilities.effects.common.cost.ReduceCostEquipTargetSourceEffect; import mage.abilities.keyword.FirstStrikeAbility; import mage.abilities.keyword.HasteAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; import mage.filter.FilterPermanent; import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.AnotherPredicate; import mage.filter.predicate.permanent.AttackingPredicate; -import mage.game.Game; -import mage.target.Target; import mage.target.TargetPermanent; -import mage.util.CardUtil; -import java.util.Collection; import java.util.UUID; /** @@ -59,7 +56,7 @@ public final class FerventChampion extends CardImpl { this.addAbility(ability); // Equip abilities you activate that target Fervent Champion cost {3} less to activate. - this.addAbility(new SimpleStaticAbility(new FerventChampionEffect())); + this.addAbility(new SimpleStaticAbility(new ReduceCostEquipTargetSourceEffect(3))); } private FerventChampion(final FerventChampion card) { @@ -71,46 +68,3 @@ public final class FerventChampion extends CardImpl { return new FerventChampion(this); } } - -class FerventChampionEffect extends CostModificationEffectImpl { - - FerventChampionEffect() { - super(Duration.Custom, Outcome.Benefit, CostModificationType.REDUCE_COST); - staticText = "equip abilities you activate that target {this} cost {3} less to activate"; - } - - private FerventChampionEffect(final FerventChampionEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source, Ability abilityToModify) { - CardUtil.reduceCost(abilityToModify, 3); - return true; - } - - @Override - public boolean applies(Ability abilityToModify, Ability source, Game game) { - if (abilityToModify instanceof EquipAbility - && abilityToModify.isControlledBy(source.getControllerId())) { - if (game != null && game.inCheckPlayableState()) { - return !abilityToModify.getTargets().isEmpty() && - abilityToModify.getTargets().get(0).canTarget(source.getSourceId(), abilityToModify, game); - } else { - return abilityToModify - .getTargets() - .stream() - .map(Target::getTargets) - .flatMap(Collection::stream) - .anyMatch(source.getSourceId()::equals); - } - - } - return false; - } - - @Override - public FerventChampionEffect copy() { - return new FerventChampionEffect(this); - } -} diff --git a/Mage.Sets/src/mage/sets/FinalFantasy.java b/Mage.Sets/src/mage/sets/FinalFantasy.java index 6f11fd0d46e..e9fe16a888a 100644 --- a/Mage.Sets/src/mage/sets/FinalFantasy.java +++ b/Mage.Sets/src/mage/sets/FinalFantasy.java @@ -20,6 +20,7 @@ public final class FinalFantasy extends ExpansionSet { this.blockName = "Final Fantasy"; // for sorting in GUI this.hasBasicLands = false; // temporary + cards.add(new SetCardInfo("Cloud, Planet's Champion", 552, Rarity.MYTHIC, mage.cards.c.CloudPlanetsChampion.class)); cards.add(new SetCardInfo("Cooking Campsite", 31, Rarity.UNCOMMON, mage.cards.c.CookingCampsite.class)); cards.add(new SetCardInfo("Gladiolus Amicitia", 224, Rarity.UNCOMMON, mage.cards.g.GladiolusAmicitia.class)); cards.add(new SetCardInfo("Jumbo Cactuar", 191, Rarity.RARE, mage.cards.j.JumboCactuar.class)); diff --git a/Mage/src/main/java/mage/abilities/effects/common/cost/ReduceCostEquipTargetSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/cost/ReduceCostEquipTargetSourceEffect.java new file mode 100644 index 00000000000..5f1f35190f5 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/effects/common/cost/ReduceCostEquipTargetSourceEffect.java @@ -0,0 +1,65 @@ +package mage.abilities.effects.common.cost; + +import mage.abilities.Ability; +import mage.abilities.keyword.EquipAbility; +import mage.constants.CostModificationType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.game.Game; +import mage.target.Target; +import mage.util.CardUtil; + +import java.util.Collection; + +/** + * @author TheElk801 + */ +public class ReduceCostEquipTargetSourceEffect extends CostModificationEffectImpl { + + private final int amount; + + public ReduceCostEquipTargetSourceEffect(int amount) { + super(Duration.Custom, Outcome.Benefit, CostModificationType.REDUCE_COST); + this.amount = amount; + staticText = "equip abilities you activate that target {this} cost {" + amount + "} less to activate"; + } + + private ReduceCostEquipTargetSourceEffect(final ReduceCostEquipTargetSourceEffect effect) { + super(effect); + this.amount = effect.amount; + } + + @Override + public boolean apply(Game game, Ability source, Ability abilityToModify) { + CardUtil.reduceCost(abilityToModify, amount); + return true; + } + + @Override + public boolean applies(Ability abilityToModify, Ability source, Game game) { + if (!(abilityToModify instanceof EquipAbility) + || !abilityToModify.isControlledBy(source.getControllerId())) { + return false; + } + if (game != null && game.inCheckPlayableState()) { + return !abilityToModify + .getTargets() + .isEmpty() + && abilityToModify + .getTargets() + .get(0) + .canTarget(source.getSourceId(), abilityToModify, game); + } + return abilityToModify + .getTargets() + .stream() + .map(Target::getTargets) + .flatMap(Collection::stream) + .anyMatch(source.getSourceId()::equals); + } + + @Override + public ReduceCostEquipTargetSourceEffect copy() { + return new ReduceCostEquipTargetSourceEffect(this); + } +}