mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 02:30:08 -08:00
[FIN] Implement Cloud, Planet's Champion
This commit is contained in:
parent
1ae73e6376
commit
6932a798d8
4 changed files with 124 additions and 51 deletions
53
Mage.Sets/src/mage/cards/c/CloudPlanetsChampion.java
Normal file
53
Mage.Sets/src/mage/cards/c/CloudPlanetsChampion.java
Normal file
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -5,23 +5,20 @@ import mage.abilities.Ability;
|
||||||
import mage.abilities.common.AttacksTriggeredAbility;
|
import mage.abilities.common.AttacksTriggeredAbility;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||||
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
|
import mage.abilities.effects.common.cost.ReduceCostEquipTargetSourceEffect;
|
||||||
import mage.abilities.keyword.EquipAbility;
|
|
||||||
import mage.abilities.keyword.FirstStrikeAbility;
|
import mage.abilities.keyword.FirstStrikeAbility;
|
||||||
import mage.abilities.keyword.HasteAbility;
|
import mage.abilities.keyword.HasteAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
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.FilterPermanent;
|
||||||
import mage.filter.common.FilterControlledPermanent;
|
import mage.filter.common.FilterControlledPermanent;
|
||||||
import mage.filter.predicate.mageobject.AnotherPredicate;
|
import mage.filter.predicate.mageobject.AnotherPredicate;
|
||||||
import mage.filter.predicate.permanent.AttackingPredicate;
|
import mage.filter.predicate.permanent.AttackingPredicate;
|
||||||
import mage.game.Game;
|
|
||||||
import mage.target.Target;
|
|
||||||
import mage.target.TargetPermanent;
|
import mage.target.TargetPermanent;
|
||||||
import mage.util.CardUtil;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -59,7 +56,7 @@ public final class FerventChampion extends CardImpl {
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
||||||
// Equip abilities you activate that target Fervent Champion cost {3} less to activate.
|
// 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) {
|
private FerventChampion(final FerventChampion card) {
|
||||||
|
|
@ -71,46 +68,3 @@ public final class FerventChampion extends CardImpl {
|
||||||
return new FerventChampion(this);
|
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ public final class FinalFantasy extends ExpansionSet {
|
||||||
this.blockName = "Final Fantasy"; // for sorting in GUI
|
this.blockName = "Final Fantasy"; // for sorting in GUI
|
||||||
this.hasBasicLands = false; // temporary
|
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("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("Gladiolus Amicitia", 224, Rarity.UNCOMMON, mage.cards.g.GladiolusAmicitia.class));
|
||||||
cards.add(new SetCardInfo("Jumbo Cactuar", 191, Rarity.RARE, mage.cards.j.JumboCactuar.class));
|
cards.add(new SetCardInfo("Jumbo Cactuar", 191, Rarity.RARE, mage.cards.j.JumboCactuar.class));
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue