mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 02:30:08 -08:00
[TDM] Implement Sidisi, Regent of the Mire
This commit is contained in:
parent
6f524b69c0
commit
6fcb592557
2 changed files with 131 additions and 0 deletions
130
Mage.Sets/src/mage/cards/s/SidisiRegentOfTheMire.java
Normal file
130
Mage.Sets/src/mage/cards/s/SidisiRegentOfTheMire.java
Normal file
|
|
@ -0,0 +1,130 @@
|
|||
package mage.cards.s;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.MageObject;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
||||
import mage.abilities.costs.Cost;
|
||||
import mage.abilities.costs.VariableCostImpl;
|
||||
import mage.abilities.costs.VariableCostType;
|
||||
import mage.abilities.costs.common.SacrificeTargetCost;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect;
|
||||
import mage.constants.*;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.filter.common.FilterCreatureCard;
|
||||
import mage.filter.predicate.mageobject.AnotherPredicate;
|
||||
import mage.filter.predicate.mageobject.ManaValuePredicate;
|
||||
import mage.game.Game;
|
||||
import mage.target.common.TargetCardInYourGraveyard;
|
||||
import mage.target.targetadjustment.ManaValueTargetAdjuster;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Grath
|
||||
*/
|
||||
public final class SidisiRegentOfTheMire extends CardImpl {
|
||||
|
||||
public SidisiRegentOfTheMire(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}");
|
||||
|
||||
this.supertype.add(SuperType.LEGENDARY);
|
||||
this.subtype.add(SubType.ZOMBIE);
|
||||
this.subtype.add(SubType.SNAKE);
|
||||
this.subtype.add(SubType.WARLOCK);
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// {T}, Sacrifice a creature you control with mana value X other than Sidisi: Return target creature card with mana value X plus 1 from your graveyard to the battlefield. Activate only as a sorcery.
|
||||
Ability ability = new ActivateAsSorceryActivatedAbility(
|
||||
Zone.BATTLEFIELD, new ReturnFromGraveyardToBattlefieldTargetEffect(), new TapSourceCost()
|
||||
);
|
||||
ability.addCost(new SidisiRegentOfTheMireCost());
|
||||
ability.addTarget(new TargetCardInYourGraveyard(new FilterCreatureCard("creature card with mana value X plus 1 from your graveyard")));
|
||||
ability.setTargetAdjuster(new SidisiRegentOfTheMireAdjuster());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private SidisiRegentOfTheMire(final SidisiRegentOfTheMire card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SidisiRegentOfTheMire copy() {
|
||||
return new SidisiRegentOfTheMire(this);
|
||||
}
|
||||
}
|
||||
|
||||
enum GetXPlusOneValue implements DynamicValue {
|
||||
instance;
|
||||
|
||||
@Override
|
||||
public int calculate(Game game, Ability sourceAbility, Effect effect) {
|
||||
return CardUtil.getSourceCostsTag(game, sourceAbility, "X", 0) + 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public GetXPlusOneValue copy() {
|
||||
return GetXPlusOneValue.instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "X + 1";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
class SidisiRegentOfTheMireAdjuster extends ManaValueTargetAdjuster {
|
||||
|
||||
public SidisiRegentOfTheMireAdjuster() {
|
||||
super(GetXPlusOneValue.instance, ComparisonType.EQUAL_TO);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class SidisiRegentOfTheMireCost extends VariableCostImpl {
|
||||
|
||||
public SidisiRegentOfTheMireCost() {
|
||||
super(VariableCostType.NORMAL, "mana value X");
|
||||
this.text = "Sacrifice a creature with mana value X";
|
||||
}
|
||||
|
||||
protected SidisiRegentOfTheMireCost(final SidisiRegentOfTheMireCost cost) {
|
||||
super(cost);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SidisiRegentOfTheMireCost copy() {
|
||||
return new SidisiRegentOfTheMireCost(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Cost getFixedCostsFromAnnouncedValue(int xValue) {
|
||||
FilterPermanent filter = new FilterControlledCreaturePermanent("another creature with mana value X");
|
||||
filter.add(AnotherPredicate.instance);
|
||||
filter.add(new ManaValuePredicate(ComparisonType.EQUAL_TO, xValue));
|
||||
return new SacrificeTargetCost(filter);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxValue(Ability source, Game game) {
|
||||
return game.getBattlefield().getActivePermanents(
|
||||
StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE,
|
||||
source.getControllerId(), source, game
|
||||
).stream().mapToInt(MageObject::getManaValue).max().orElse(0);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -187,6 +187,7 @@ public final class TarkirDragonstorm extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Shock Brigade", 120, Rarity.COMMON, mage.cards.s.ShockBrigade.class));
|
||||
cards.add(new SetCardInfo("Shocking Sharpshooter", 121, Rarity.UNCOMMON, mage.cards.s.ShockingSharpshooter.class));
|
||||
cards.add(new SetCardInfo("Sibsig Appraiser", 56, Rarity.COMMON, mage.cards.s.SibsigAppraiser.class));
|
||||
cards.add(new SetCardInfo("Sidisi, Regent of the Mire", 92, Rarity.RARE, mage.cards.s.SidisiRegentOfTheMire.class));
|
||||
cards.add(new SetCardInfo("Sinkhole Surveyor", 93, Rarity.RARE, mage.cards.s.SinkholeSurveyor.class));
|
||||
cards.add(new SetCardInfo("Skirmish Rhino", 224, Rarity.UNCOMMON, mage.cards.s.SkirmishRhino.class));
|
||||
cards.add(new SetCardInfo("Smile at Death", 24, Rarity.MYTHIC, mage.cards.s.SmileAtDeath.class));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue