Skulk is now singleton

This commit is contained in:
Evan Kranzler 2017-09-13 20:38:29 -04:00
parent 9e228caff3
commit 6ca03a339a
16 changed files with 40 additions and 34 deletions

View file

@ -52,7 +52,7 @@ public class BehindTheScenes extends CardImpl {
// Creatures you control have skulk.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
new GainAbilityControlledEffect(new SkulkAbility(), Duration.WhileOnBattlefield, FILTER_PERMANENT_CREATURES)));
new GainAbilityControlledEffect(SkulkAbility.getInstance(), Duration.WhileOnBattlefield, FILTER_PERMANENT_CREATURES)));
// {4}{W}: Creatures you control get +1/+1 until end of turn.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD,

View file

@ -49,7 +49,7 @@ public class FarbogRevenant extends CardImpl {
this.toughness = new MageInt(3);
// Skulk
this.addAbility(new SkulkAbility());
this.addAbility(SkulkAbility.getInstance());
// Lifelink
this.addAbility(LifelinkAbility.getInstance());

View file

@ -60,7 +60,7 @@ public class Fogwalker extends CardImpl {
this.toughness = new MageInt(3);
// Skulk
this.addAbility(new SkulkAbility());
this.addAbility(SkulkAbility.getInstance());
// When Fogwalker enters the battlefield, target creature an opponent controls doesn't untap during it controler's next untap step.
EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new DontUntapInControllersNextUntapStepTargetEffect());
ability.addTarget(new TargetCreaturePermanent(filter));

View file

@ -56,7 +56,7 @@ public class ForgottenCreation extends CardImpl {
this.toughness = new MageInt(3);
// Skulk
this.addAbility(new SkulkAbility());
this.addAbility(SkulkAbility.getInstance());
// At the beginning of your upkeep, you may discard all the cards in your hand. If you do, draw that many cards.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new ForgottenCreationEffect(), TargetController.YOU, true));
}

View file

@ -48,7 +48,7 @@ public class FurtiveHomunculus extends CardImpl {
this.toughness = new MageInt(1);
// Skulk (This creature can't be blocked by creatures with greater power.)
this.addAbility(new SkulkAbility());
this.addAbility(SkulkAbility.getInstance());
}
public FurtiveHomunculus(final FurtiveHomunculus card) {

View file

@ -171,7 +171,7 @@ class OdricLunarchMarshalEffect extends OneShotEffect {
// Skulk
if (game.getBattlefield().contains(filterSkulk, source.getControllerId(), 1, game)) {
game.addEffect(new GainAbilityControlledEffect(new SkulkAbility(), Duration.EndOfTurn, filterCreatures), source);
game.addEffect(new GainAbilityControlledEffect(SkulkAbility.getInstance(), Duration.EndOfTurn, filterCreatures), source);
}
// Trample

View file

@ -50,7 +50,7 @@ public class PaleRiderOfTrostad extends CardImpl {
this.toughness = new MageInt(3);
// Skulk
this.addAbility(new SkulkAbility());
this.addAbility(SkulkAbility.getInstance());
// When Pale Rider of Trostad enters the battlefield, discard a card.
this.addAbility(new EntersBattlefieldTriggeredAbility(new DiscardControllerEffect(1), false));

View file

@ -54,7 +54,7 @@ public class PersistentNightmare extends CardImpl {
this.nightCard = true;
// Skulk
this.addAbility(new SkulkAbility());
this.addAbility(SkulkAbility.getInstance());
// When Persistent Nightmare deals combat damage to a player, return it to its owner's hand.
this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new ReturnToHandSourceEffect(), false));

View file

@ -50,7 +50,7 @@ public class RancidRats extends CardImpl {
this.toughness = new MageInt(1);
// Skulk
this.addAbility(new SkulkAbility());
this.addAbility(SkulkAbility.getInstance());
// Deathtouch
this.addAbility(DeathtouchAbility.getInstance());
}

View file

@ -57,7 +57,7 @@ public class SkeletonKey extends CardImpl {
this.subtype.add(SubType.EQUIPMENT);
// Equipped creature has skulk.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(new SkulkAbility(), AttachmentType.EQUIPMENT)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(SkulkAbility.getInstance(), AttachmentType.EQUIPMENT)));
// Whenever equipped creature deals combat damage to a player, you may draw a card. if you do, discard a card.
Ability ability = new DealsDamageToAPlayerAttachedTriggeredAbility(new DrawCardSourceControllerEffect(1), "equipped creature", true);

View file

@ -54,7 +54,7 @@ public class UninvitedGeist extends CardImpl {
this.secondSideCardClazz = UnimpededTrespasser.class;
// Skulk (This creature can't be blocked by creatures with greater power.)
this.addAbility(new SkulkAbility());
this.addAbility(SkulkAbility.getInstance());
// When Uninvited Geist deals combat damage to a player, transform it.
this.addAbility(new TransformAbility());

View file

@ -50,7 +50,7 @@ public class VampireCutthroat extends CardImpl {
this.toughness = new MageInt(1);
// Skulk
this.addAbility(new SkulkAbility());
this.addAbility(SkulkAbility.getInstance());
// Lifelink
this.addAbility(LifelinkAbility.getInstance());
}

View file

@ -62,7 +62,7 @@ public class WharfInfiltrator extends CardImpl {
this.toughness = new MageInt(1);
// Skulk
this.addAbility(new SkulkAbility());
this.addAbility(SkulkAbility.getInstance());
// Whenever Wharf Infiltrator deals combat damage to a player, you may draw a card. If you do, discard a card.
Effect effect = new DrawDiscardControllerEffect();

View file

@ -14,34 +14,34 @@ public class GainAbilitiesTest extends CardTestPlayerBase {
/*
Reported bug: Behind the Scenes grants skulk to all creatures instead of just ones under owner's control
*/
*/
@Test
public void behindTheScenesShouldOnlyGrantSkulkToCreaturesYouControl() {
/*
Behind the Scenes {2}{B}
Enchantment
Creatures you control have skulk. (They can't be blocked by creatures with greater power.)
{4}{W}: Creatures you control get +1/+1 until end of turn
*/
String bScenes = "Behind the Scenes";
*/
String bScenes = "Behind the Scenes";
String hGiant = "Hill Giant"; // {3}{R} 3/3
String bSable = "Bronze Sable"; // {2} 2/1
String memnite = "Memnite"; // {0} 1/1
String gBears = "Grizzly Bears"; // {1}{G} 2/2
addCard(Zone.BATTLEFIELD, playerA, bScenes);
addCard(Zone.BATTLEFIELD, playerA, hGiant);
addCard(Zone.BATTLEFIELD, playerA, bSable);
addCard(Zone.BATTLEFIELD, playerB, memnite);
addCard(Zone.BATTLEFIELD, playerB, gBears);
setStopAt(1, PhaseStep.PRECOMBAT_MAIN);
execute();
assertAbility(playerA, hGiant, new SkulkAbility(), true);
assertAbility(playerA, bSable, new SkulkAbility(), true);
assertAbility(playerB, memnite, new SkulkAbility(), false);
assertAbility(playerB, gBears, new SkulkAbility(), false);
assertAbility(playerA, hGiant, SkulkAbility.getInstance(), true);
assertAbility(playerA, bSable, SkulkAbility.getInstance(), true);
assertAbility(playerB, memnite, SkulkAbility.getInstance(), false);
assertAbility(playerB, gBears, SkulkAbility.getInstance(), false);
}
}

View file

@ -5,11 +5,12 @@
*/
package mage.abilities.keyword;
import java.io.ObjectStreamException;
import mage.abilities.Ability;
import mage.abilities.StaticAbility;
import mage.abilities.EvasionAbility;
import mage.abilities.MageSingleton;
import mage.abilities.effects.RestrictionEffect;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.permanent.Permanent;
@ -17,26 +18,31 @@ import mage.game.permanent.Permanent;
*
* @author LevelX2
*/
public class SkulkAbility extends StaticAbility {
public class SkulkAbility extends EvasionAbility implements MageSingleton {
public SkulkAbility() {
super(Zone.BATTLEFIELD, new SkulkEffect(Duration.WhileOnBattlefield));
private static final SkulkAbility instance = new SkulkAbility();
private Object readResolve() throws ObjectStreamException {
return instance;
}
public SkulkAbility(final SkulkAbility ability) {
super(ability);
public static SkulkAbility getInstance() {
return instance;
}
private SkulkAbility() {
this.addEffect(new SkulkEffect(Duration.WhileOnBattlefield));
}
@Override
public Ability copy() {
return new SkulkAbility(this);
return instance;
}
@Override
public String getRule() {
return "Skulk <i>(This creature can't be blocked by creatures with greater power.)</i>";
}
}
class SkulkEffect extends RestrictionEffect {

View file

@ -76,7 +76,7 @@ Shadow|instance|
Shroud|instance|
Soulbond|instance|
Soulshift|number|
Skulk|new|
Skulk|instance|
Storm|new|
Sunburst|new|
Swampcycling|cost|