mirror of
https://github.com/magefree/mage.git
synced 2026-01-26 21:29:17 -08:00
implement [PIP] Mariposa Military Base
This commit is contained in:
parent
74adbf222c
commit
ed7b7f1a62
3 changed files with 133 additions and 0 deletions
70
Mage.Sets/src/mage/cards/m/MariposaMilitaryBase.java
Normal file
70
Mage.Sets/src/mage/cards/m/MariposaMilitaryBase.java
Normal 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));
|
||||
}
|
||||
}
|
||||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue