mirror of
https://github.com/correl/mage.git
synced 2024-11-14 19:19:32 +00:00
Skulk is now singleton
This commit is contained in:
parent
9e228caff3
commit
6ca03a339a
16 changed files with 40 additions and 34 deletions
|
@ -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,
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -76,7 +76,7 @@ Shadow|instance|
|
|||
Shroud|instance|
|
||||
Soulbond|instance|
|
||||
Soulshift|number|
|
||||
Skulk|new|
|
||||
Skulk|instance|
|
||||
Storm|new|
|
||||
Sunburst|new|
|
||||
Swampcycling|cost|
|
||||
|
|
Loading…
Reference in a new issue