mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 02:30:08 -08:00
implement Orcish Farmer
This commit is contained in:
parent
066fb6dd46
commit
d785193b97
6 changed files with 110 additions and 0 deletions
78
Mage.Sets/src/mage/cards/o/OrcishFarmer.java
Normal file
78
Mage.Sets/src/mage/cards/o/OrcishFarmer.java
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
package mage.cards.o;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.effects.common.continuous.BecomesBasicLandTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.PhaseStep;
|
||||
import mage.constants.SubType;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.common.TargetLandPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author notgreat
|
||||
*/
|
||||
public final class OrcishFarmer extends CardImpl {
|
||||
|
||||
public OrcishFarmer(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}{R}");
|
||||
|
||||
this.subtype.add(SubType.ORC);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// {T}: Target land becomes a Swamp until its controller's next untap step.
|
||||
Ability ability = new SimpleActivatedAbility(new OrcishFarmerEffect(), new TapSourceCost());
|
||||
ability.addTarget(new TargetLandPermanent());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private OrcishFarmer(final OrcishFarmer card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public OrcishFarmer copy() {
|
||||
return new OrcishFarmer(this);
|
||||
}
|
||||
}
|
||||
|
||||
class OrcishFarmerEffect extends BecomesBasicLandTargetEffect {
|
||||
|
||||
OrcishFarmerEffect() {
|
||||
super(Duration.Custom, SubType.SWAMP);
|
||||
setText("Target land becomes a Swamp until its controller's next untap step");
|
||||
}
|
||||
|
||||
protected OrcishFarmerEffect(final OrcishFarmerEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
public OrcishFarmerEffect copy() {
|
||||
return new OrcishFarmerEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Permanent p = game.getPermanent(getTargetPointer().getFirst(game, source));
|
||||
if (p == null) {
|
||||
discard();
|
||||
return false;
|
||||
}
|
||||
if (getEffectStartingOnTurn() != game.getTurnNum()
|
||||
&& game.isActivePlayer(p.getControllerId())
|
||||
&& game.getStep().getType() == PhaseStep.UNTAP) {
|
||||
discard();
|
||||
return false;
|
||||
}
|
||||
return super.apply(game, source);
|
||||
}
|
||||
}
|
||||
|
|
@ -317,6 +317,7 @@ public final class FifthEdition extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Obelisk of Undoing", 392, Rarity.RARE, mage.cards.o.ObeliskOfUndoing.class, RETRO_ART));
|
||||
cards.add(new SetCardInfo("Orcish Artillery", 253, Rarity.UNCOMMON, mage.cards.o.OrcishArtillery.class, RETRO_ART));
|
||||
cards.add(new SetCardInfo("Orcish Captain", 254, Rarity.UNCOMMON, mage.cards.o.OrcishCaptain.class, RETRO_ART));
|
||||
cards.add(new SetCardInfo("Orcish Farmer", 256, Rarity.COMMON, mage.cards.o.OrcishFarmer.class, RETRO_ART));
|
||||
cards.add(new SetCardInfo("Orcish Oriflamme", 257, Rarity.UNCOMMON, mage.cards.o.OrcishOriflamme.class, RETRO_ART));
|
||||
cards.add(new SetCardInfo("Orcish Squatters", 258, Rarity.RARE, mage.cards.o.OrcishSquatters.class, RETRO_ART));
|
||||
cards.add(new SetCardInfo("Order of the Sacred Torch", 48, Rarity.RARE, mage.cards.o.OrderOfTheSacredTorch.class, RETRO_ART));
|
||||
|
|
|
|||
|
|
@ -264,6 +264,7 @@ public final class IceAge extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Oath of Lim-Dul", 156, Rarity.RARE, mage.cards.o.OathOfLimDul.class, RETRO_ART));
|
||||
cards.add(new SetCardInfo("Onyx Talisman", 331, Rarity.UNCOMMON, mage.cards.o.OnyxTalisman.class, RETRO_ART));
|
||||
cards.add(new SetCardInfo("Orcish Cannoneers", 205, Rarity.UNCOMMON, mage.cards.o.OrcishCannoneers.class, RETRO_ART));
|
||||
cards.add(new SetCardInfo("Orcish Farmer", 207, Rarity.COMMON, mage.cards.o.OrcishFarmer.class, RETRO_ART));
|
||||
cards.add(new SetCardInfo("Orcish Healer", 208, Rarity.UNCOMMON, mage.cards.o.OrcishHealer.class, RETRO_ART));
|
||||
cards.add(new SetCardInfo("Orcish Librarian", 209, Rarity.RARE, mage.cards.o.OrcishLibrarian.class, RETRO_ART));
|
||||
cards.add(new SetCardInfo("Orcish Lumberjack", 210, Rarity.COMMON, mage.cards.o.OrcishLumberjack.class, RETRO_ART));
|
||||
|
|
|
|||
|
|
@ -177,6 +177,7 @@ public final class MastersEditionII extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Orc General", 137, Rarity.UNCOMMON, mage.cards.o.OrcGeneral.class, RETRO_ART));
|
||||
cards.add(new SetCardInfo("Orcish Cannoneers", 138, Rarity.UNCOMMON, mage.cards.o.OrcishCannoneers.class, RETRO_ART));
|
||||
cards.add(new SetCardInfo("Orcish Captain", 139, Rarity.UNCOMMON, mage.cards.o.OrcishCaptain.class, RETRO_ART));
|
||||
cards.add(new SetCardInfo("Orcish Farmer", 141, Rarity.COMMON, mage.cards.o.OrcishFarmer.class, RETRO_ART));
|
||||
cards.add(new SetCardInfo("Orcish Lumberjack", 142, Rarity.COMMON, mage.cards.o.OrcishLumberjack.class, RETRO_ART));
|
||||
cards.add(new SetCardInfo("Orcish Squatters", 143, Rarity.RARE, mage.cards.o.OrcishSquatters.class, RETRO_ART));
|
||||
cards.add(new SetCardInfo("Orcish Veteran", 144, Rarity.COMMON, mage.cards.o.OrcishVeteran.class, RETRO_ART));
|
||||
|
|
|
|||
|
|
@ -266,4 +266,29 @@ public class LandTypeChangingEffectsTest extends CardTestPlayerBase {
|
|||
assertType(urborgtoy, CardType.LAND, SubType.ISLAND);
|
||||
assertType("Mountain", CardType.LAND, SubType.ISLAND);
|
||||
}
|
||||
@Test
|
||||
public void testOrcishFarmer() {
|
||||
// {T}: Target land becomes a Swamp until its controller's next untap step
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Orcish Farmer", 2);
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Plains");
|
||||
addCard(Zone.BATTLEFIELD, playerB, "Reliquary Tower");
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Target", "Plains");
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Target", "Reliquary Tower");
|
||||
checkSubType("Plains is Swamp on same turn", 1, PhaseStep.END_TURN, playerA, "Plains", SubType.SWAMP, true);
|
||||
checkSubType("Plains is no longer Plains on same turn", 1, PhaseStep.END_TURN, playerA, "Plains", SubType.PLAINS, false);
|
||||
checkSubType("Reliquary Tower is Swamp on same turn", 1, PhaseStep.END_TURN, playerB, "Reliquary Tower", SubType.SWAMP, true);
|
||||
|
||||
checkSubType("Plains is Swamp on next turn", 2, PhaseStep.UPKEEP, playerA, "Plains", SubType.SWAMP, true);
|
||||
checkSubType("Plains is no longer Plains on next turn", 2, PhaseStep.UPKEEP, playerA, "Plains", SubType.PLAINS, false);
|
||||
checkSubType("Reliquary Tower no longer Swamp on next turn", 2, PhaseStep.UPKEEP, playerB, "Reliquary Tower", SubType.SWAMP, false);
|
||||
|
||||
setStrictChooseMode(true);
|
||||
setStopAt(3, PhaseStep.UPKEEP);
|
||||
execute();
|
||||
|
||||
assertNotSubtype("Plains", SubType.SWAMP);
|
||||
assertSubtype("Plains", SubType.PLAINS);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -248,6 +248,10 @@ public abstract class ContinuousEffectImpl extends EffectImpl implements Continu
|
|||
return startingControllerId;
|
||||
}
|
||||
|
||||
protected int getEffectStartingOnTurn() {
|
||||
return effectStartingOnTurn;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStartingControllerAndTurnNum(Game game, UUID startingController, UUID activePlayerId) {
|
||||
this.startingControllerId = startingController;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue