forked from External/mage
[MKM] Implement Fugitive Codebreaker
This commit is contained in:
parent
acf5f47fe7
commit
1ff8cf01cf
5 changed files with 153 additions and 4 deletions
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue