[MKM] Implement Fugitive Codebreaker

This commit is contained in:
Susucre 2024-04-05 20:16:17 +02:00
parent acf5f47fe7
commit 1ff8cf01cf
5 changed files with 153 additions and 4 deletions

View file

@ -7,6 +7,7 @@ import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.common.TurnFaceUpAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostAdjuster;
import mage.abilities.costs.Costs;
import mage.abilities.costs.CostsImpl;
import mage.abilities.costs.mana.ManaCostsImpl;
@ -83,7 +84,22 @@ public class BecomesFaceDownCreatureEffect extends ContinuousEffectImpl {
this(createCosts(cost), objectReference, duration, faceDownType);
}
public BecomesFaceDownCreatureEffect(Costs<Cost> turnFaceUpCosts, MageObjectReference objectReference, Duration duration, FaceDownType faceDownType) {
public BecomesFaceDownCreatureEffect(Costs<Cost> cost, MageObjectReference objectReference, Duration duration, FaceDownType faceDownType) {
this(createCosts(cost), objectReference, duration, faceDownType, null);
}
public BecomesFaceDownCreatureEffect(Cost cost, MageObjectReference objectReference, Duration duration, FaceDownType faceDownType, CostAdjuster costAdjuster) {
this(createCosts(cost), objectReference, duration, faceDownType, costAdjuster);
}
/**
* @param turnFaceUpCosts costs for the turn face up ability
* @param objectReference
* @param duration
* @param faceDownType type of face down (morph, disguise, manifest, etc...)
* @param costAdjuster optional costAdjuster for the turn face up ability
*/
public BecomesFaceDownCreatureEffect(Costs<Cost> turnFaceUpCosts, MageObjectReference objectReference, Duration duration, FaceDownType faceDownType, CostAdjuster costAdjuster) {
super(duration, Layer.CopyEffects_1, SubLayer.FaceDownEffects_1b, Outcome.BecomeCreature);
this.objectReference = objectReference;
this.zoneChangeCounter = Integer.MIN_VALUE;
@ -91,7 +107,10 @@ public class BecomesFaceDownCreatureEffect extends ContinuousEffectImpl {
// add additional face up and information abilities
if (turnFaceUpCosts != null) {
// face up for all
this.additionalAbilities.add(new TurnFaceUpAbility(turnFaceUpCosts, faceDownType == FaceDownType.MEGAMORPHED));
this.additionalAbilities.add(
new TurnFaceUpAbility(turnFaceUpCosts, faceDownType == FaceDownType.MEGAMORPHED)
.setCostAdjuster(costAdjuster)
);
switch (faceDownType) {
case MORPHED:

View file

@ -4,12 +4,14 @@ import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostAdjuster;
import mage.abilities.costs.Costs;
import mage.abilities.costs.CostsImpl;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.costs.mana.ManaCost;
import mage.abilities.effects.common.continuous.BecomesFaceDownCreatureEffect;
import mage.cards.Card;
import mage.constants.Duration;
import mage.constants.SpellAbilityCastMode;
import mage.constants.SpellAbilityType;
import mage.constants.TimingRule;
@ -68,6 +70,10 @@ public class DisguiseAbility extends SpellAbility {
protected Costs<Cost> disguiseCosts;
public DisguiseAbility(Card card, Cost disguiseCost) {
this(card, disguiseCost, null);
}
public DisguiseAbility(Card card, Cost disguiseCost, CostAdjuster costAdjuster) {
super(new GenericManaCost(3), card.getName());
this.timing = TimingRule.SORCERY;
this.disguiseCosts = new CostsImpl<>();
@ -77,13 +83,15 @@ public class DisguiseAbility extends SpellAbility {
// face down effect (hidden by default, visible in face down objects)
Ability ability = new SimpleStaticAbility(new BecomesFaceDownCreatureEffect(
this.disguiseCosts, BecomesFaceDownCreatureEffect.FaceDownType.DISGUISED));
this.disguiseCosts, null, Duration.WhileOnBattlefield,
BecomesFaceDownCreatureEffect.FaceDownType.DISGUISED, costAdjuster
));
ability.setWorksFaceDown(true);
ability.setRuleVisible(false);
addSubAbility(ability);
}
private DisguiseAbility(final DisguiseAbility ability) {
protected DisguiseAbility(final DisguiseAbility ability) {
super(ability);
this.disguiseCosts = ability.disguiseCosts; // can't be changed TODO: looks buggy, need research
}