mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 18:50:06 -08:00
[LCI] Implement Grasping Shadows / Shadows' Lair
This commit is contained in:
parent
e4ae0f6df5
commit
d10b6ca12f
4 changed files with 111 additions and 0 deletions
57
Mage.Sets/src/mage/cards/g/GraspingShadows.java
Normal file
57
Mage.Sets/src/mage/cards/g/GraspingShadows.java
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
package mage.cards.g;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.AttacksAloneControlledTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.SourceHasCounterCondition;
|
||||
import mage.abilities.decorator.ConditionalOneShotEffect;
|
||||
import mage.abilities.effects.common.TransformSourceEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.abilities.keyword.DeathtouchAbility;
|
||||
import mage.abilities.keyword.LifelinkAbility;
|
||||
import mage.abilities.keyword.TransformAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.counters.CounterType;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class GraspingShadows extends CardImpl {
|
||||
|
||||
private static final Condition condition = new SourceHasCounterCondition(CounterType.DREAD, 3);
|
||||
|
||||
public GraspingShadows(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{B}");
|
||||
this.secondSideCardClazz = mage.cards.s.ShadowsLair.class;
|
||||
|
||||
// Whenever a creature you control attacks alone, it gains deathtouch and lifelink until end of turn. Put a dread counter on Grasping Shadows. Then if there are three or more dread counters on it, transform it.
|
||||
Ability ability = new AttacksAloneControlledTriggeredAbility(
|
||||
new GainAbilityTargetEffect(DeathtouchAbility.getInstance())
|
||||
.setText("it gains deathtouch"),
|
||||
true, false
|
||||
);
|
||||
ability.addEffect(new GainAbilityTargetEffect(LifelinkAbility.getInstance())
|
||||
.setText("and lifelink until end of turn"));
|
||||
ability.addEffect(new AddCountersSourceEffect(CounterType.DREAD.createInstance()));
|
||||
ability.addEffect(new ConditionalOneShotEffect(
|
||||
new TransformSourceEffect(), condition,
|
||||
"Then if there are three or more dread counters on it, transform it"
|
||||
));
|
||||
this.addAbility(new TransformAbility());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private GraspingShadows(final GraspingShadows card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GraspingShadows copy() {
|
||||
return new GraspingShadows(this);
|
||||
}
|
||||
}
|
||||
51
Mage.Sets/src/mage/cards/s/ShadowsLair.java
Normal file
51
Mage.Sets/src/mage/cards/s/ShadowsLair.java
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
package mage.cards.s;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.RemoveCountersSourceCost;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
|
||||
import mage.abilities.mana.BlackManaAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.counters.CounterType;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class ShadowsLair extends CardImpl {
|
||||
|
||||
public ShadowsLair(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
|
||||
|
||||
this.subtype.add(SubType.CAVE);
|
||||
this.nightCard = true;
|
||||
|
||||
// {T}: Add {B}.
|
||||
this.addAbility(new BlackManaAbility());
|
||||
|
||||
// {B}, {T}, Remove a dread counter from Shadows' Lair: You draw a card and you lose 1 life.
|
||||
Ability ability = new SimpleActivatedAbility(
|
||||
new DrawCardSourceControllerEffect(1, "you"), new ManaCostsImpl<>("{B}")
|
||||
);
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addCost(new RemoveCountersSourceCost(CounterType.DREAD.createInstance()));
|
||||
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private ShadowsLair(final ShadowsLair card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ShadowsLair copy() {
|
||||
return new ShadowsLair(this);
|
||||
}
|
||||
}
|
||||
|
|
@ -147,6 +147,7 @@ public final class TheLostCavernsOfIxalan extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Glowcap Lantern", 187, Rarity.UNCOMMON, mage.cards.g.GlowcapLantern.class));
|
||||
cards.add(new SetCardInfo("Goblin Tomb Raider", 151, Rarity.COMMON, mage.cards.g.GoblinTombRaider.class));
|
||||
cards.add(new SetCardInfo("Goldfury Strider", 152, Rarity.UNCOMMON, mage.cards.g.GoldfuryStrider.class));
|
||||
cards.add(new SetCardInfo("Grasping Shadows", 108, Rarity.UNCOMMON, mage.cards.g.GraspingShadows.class));
|
||||
cards.add(new SetCardInfo("Greedy Freebooter", 109, Rarity.COMMON, mage.cards.g.GreedyFreebooter.class));
|
||||
cards.add(new SetCardInfo("Growing Rites of Itlimoc", 188, Rarity.RARE, mage.cards.g.GrowingRitesOfItlimoc.class));
|
||||
cards.add(new SetCardInfo("Guardian of the Great Door", 16, Rarity.UNCOMMON, mage.cards.g.GuardianOfTheGreatDoor.class));
|
||||
|
|
@ -265,6 +266,7 @@ public final class TheLostCavernsOfIxalan extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Seismic Monstrosaur", 166, Rarity.COMMON, mage.cards.s.SeismicMonstrosaur.class));
|
||||
cards.add(new SetCardInfo("Self-Reflection", 74, Rarity.UNCOMMON, mage.cards.s.SelfReflection.class));
|
||||
cards.add(new SetCardInfo("Sentinel of the Nameless City", 211, Rarity.RARE, mage.cards.s.SentinelOfTheNamelessCity.class));
|
||||
cards.add(new SetCardInfo("Shadows' Lair", 108, Rarity.UNCOMMON, mage.cards.s.ShadowsLair.class));
|
||||
cards.add(new SetCardInfo("Shipwreck Sentry", 75, Rarity.COMMON, mage.cards.s.ShipwreckSentry.class));
|
||||
cards.add(new SetCardInfo("Sinuous Benthisaur", 76, Rarity.UNCOMMON, mage.cards.s.SinuousBenthisaur.class));
|
||||
cards.add(new SetCardInfo("Skullcap Snail", 119, Rarity.COMMON, mage.cards.s.SkullcapSnail.class));
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@ public enum CounterType {
|
|||
DIVINITY("divinity"),
|
||||
DOOM("doom"),
|
||||
DOUBLE_STRIKE("double strike"),
|
||||
DREAD("dread"),
|
||||
DREAM("dream"),
|
||||
ECHO("echo"),
|
||||
EGG("egg"),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue