implement [PIP] Mariposa Military Base

This commit is contained in:
Susucre 2024-05-01 21:54:35 +02:00
parent 74adbf222c
commit ed7b7f1a62
3 changed files with 133 additions and 0 deletions

View file

@ -0,0 +1,70 @@
package mage.cards.m;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.CostAdjuster;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.dynamicvalue.common.SourceControllerCountersCount;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.InfoEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.effects.common.counter.AddCountersPlayersEffect;
import mage.abilities.mana.ColorlessManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.TargetController;
import mage.counters.CounterType;
import mage.game.Game;
import mage.util.CardUtil;
import java.util.UUID;
/**
* @author Susucr
*/
public final class MariposaMilitaryBase extends CardImpl {
public MariposaMilitaryBase(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// You may have Mariposa Military Base enter the battlefield tapped. If you do, you get two rad counters.
Ability ability = new EntersBattlefieldAbility(
new TapSourceEffect(true).setText("tapped."),
true
);
ability.addEffect(new AddCountersPlayersEffect(CounterType.RAD.createInstance(2), TargetController.YOU)
.setText("If you do, you get two rad counters."));
this.addAbility(ability);
// {T}: Add {C}.
this.addAbility(new ColorlessManaAbility());
// {5}, {T}: Draw a card. This ability costs {1} less to activate for each rad counter you have.
ability = new SimpleActivatedAbility(new DrawCardSourceControllerEffect(1), new GenericManaCost(5));
ability.addEffect(new InfoEffect("This ability costs {1} less to activate for each rad counter you have"));
ability.addCost(new TapSourceCost());
ability.setCostAdjuster(MariposaMilitaryBaseAdjuster.instance);
this.addAbility(ability);
}
private MariposaMilitaryBase(final MariposaMilitaryBase card) {
super(card);
}
@Override
public MariposaMilitaryBase copy() {
return new MariposaMilitaryBase(this);
}
}
enum MariposaMilitaryBaseAdjuster implements CostAdjuster {
instance;
@Override
public void adjustCosts(Ability ability, Game game) {
CardUtil.reduceCost(ability, SourceControllerCountersCount.RAD.calculate(game, ability, null));
}
}

View file

@ -190,6 +190,7 @@ public final class Fallout extends ExpansionSet {
cards.add(new SetCardInfo("Marcus, Mutant Mayor", 418, Rarity.RARE, mage.cards.m.MarcusMutantMayor.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Marcus, Mutant Mayor", 637, Rarity.RARE, mage.cards.m.MarcusMutantMayor.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Marcus, Mutant Mayor", 946, Rarity.RARE, mage.cards.m.MarcusMutantMayor.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Mariposa Military Base", 151, Rarity.RARE, mage.cards.m.MariposaMilitaryBase.class));
cards.add(new SetCardInfo("Marshal's Anthem", 166, Rarity.RARE, mage.cards.m.MarshalsAnthem.class));
cards.add(new SetCardInfo("Martial Coup", 167, Rarity.RARE, mage.cards.m.MartialCoup.class));
cards.add(new SetCardInfo("Masterwork of Ingenuity", 234, Rarity.RARE, mage.cards.m.MasterworkOfIngenuity.class));

View file

@ -0,0 +1,62 @@
package org.mage.test.cards.single.pip;
import mage.constants.PhaseStep;
import mage.constants.Zone;
import mage.counters.CounterType;
import org.junit.Test;
import org.mage.test.serverside.base.CardTestPlayerBase;
/**
* @author Susucr
*/
public class MariposaMilitaryBaseTest extends CardTestPlayerBase {
/**
* {@link mage.cards.m.MariposaMilitaryBase Mariposa Military Base} {3}{R}{W}
* Land
* You may have Mariposa Military Base enter the battlefield tapped. If you do, you get two rad counters.
* {T}: Add {C}.
* {5}, {T}: Draw a card. This ability costs {1} less to activate for each rad counter you have.
*/
private static final String mariposa = "Mariposa Military Base";
@Test
public void test_No_Radiation() {
setStrictChooseMode(true);
addCard(Zone.HAND, playerA, mariposa);
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 5);
playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, mariposa);
setChoice(playerA, false); // Not tapped, no rad
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{5}");
setStopAt(1, PhaseStep.END_TURN);
execute();
assertTappedCount("Swamp", true, 5);
assertTappedCount(mariposa, true, 1);
assertHandCount(playerA, 1);
}
@Test
public void test_Radiation() {
setStrictChooseMode(true);
addCard(Zone.HAND, playerA, mariposa);
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 3);
playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, mariposa);
setChoice(playerA, true); // Tapping, get 2 rad
activateAbility(3, PhaseStep.UPKEEP, playerA, "{5}");
setStopAt(3, PhaseStep.DRAW);
execute();
assertTappedCount("Swamp", true, 3);
assertTappedCount(mariposa, true, 1);
assertHandCount(playerA, 1 + 1); // 1 from normal draw, 1 from Mariposa
assertCounterCount(playerA, CounterType.RAD, 2);
}
}