[TDM] Implement Sidisi, Regent of the Mire

This commit is contained in:
Grath 2025-04-05 15:47:31 -04:00
parent 6f524b69c0
commit 6fcb592557
2 changed files with 131 additions and 0 deletions

View 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);
}
}

View file

@ -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));