mirror of
https://github.com/correl/mage.git
synced 2025-04-09 01:01:06 -09:00
[KHM] Implemented Rise of the Dread Marn
This commit is contained in:
parent
d515496b6e
commit
8c9d285d80
3 changed files with 133 additions and 0 deletions
Mage.Sets/src/mage
Mage/src/main/java/mage/game/permanent/token
100
Mage.Sets/src/mage/cards/r/RiseOfTheDreadMarn.java
Normal file
100
Mage.Sets/src/mage/cards/r/RiseOfTheDreadMarn.java
Normal file
|
@ -0,0 +1,100 @@
|
|||
package mage.cards.r;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.keyword.ForetellAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.WatcherScope;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.events.ZoneChangeEvent;
|
||||
import mage.game.permanent.PermanentToken;
|
||||
import mage.game.permanent.token.ZombieBerserkerToken;
|
||||
import mage.watchers.Watcher;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class RiseOfTheDreadMarn extends CardImpl {
|
||||
|
||||
public RiseOfTheDreadMarn(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{B}");
|
||||
|
||||
// Create X 2/2 black Zombie Berserker creature tokens, where X is the number of nontoken creatures that died this turn.
|
||||
this.getSpellAbility().addEffect(new CreateTokenEffect(
|
||||
new ZombieBerserkerToken(), RiseOfTheDreadMarnValue.instance
|
||||
));
|
||||
this.getSpellAbility().addWatcher(new RiseOfTheDreadMarnWatcher());
|
||||
|
||||
// Foretell {B}
|
||||
this.addAbility(new ForetellAbility(this, "{B}"));
|
||||
}
|
||||
|
||||
private RiseOfTheDreadMarn(final RiseOfTheDreadMarn card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RiseOfTheDreadMarn copy() {
|
||||
return new RiseOfTheDreadMarn(this);
|
||||
}
|
||||
}
|
||||
|
||||
enum RiseOfTheDreadMarnValue implements DynamicValue {
|
||||
instance;
|
||||
|
||||
@Override
|
||||
public int calculate(Game game, Ability sourceAbility, Effect effect) {
|
||||
RiseOfTheDreadMarnWatcher watcher = game.getState().getWatcher(RiseOfTheDreadMarnWatcher.class);
|
||||
return watcher != null ? watcher.getCreaturesDied() : 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RiseOfTheDreadMarnValue copy() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "X";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return "the number of nontoken creatures that died this turn";
|
||||
}
|
||||
}
|
||||
|
||||
class RiseOfTheDreadMarnWatcher extends Watcher {
|
||||
|
||||
private int creaturesDied = 0;
|
||||
|
||||
RiseOfTheDreadMarnWatcher() {
|
||||
super(WatcherScope.GAME);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void watch(GameEvent event, Game game) {
|
||||
if (event.getType() == GameEvent.EventType.ZONE_CHANGE
|
||||
&& ((ZoneChangeEvent) event).isDiesEvent()
|
||||
&& !(((ZoneChangeEvent) event).getTarget() instanceof PermanentToken)) {
|
||||
creaturesDied += 1;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
creaturesDied = 0;
|
||||
super.reset();
|
||||
}
|
||||
|
||||
int getCreaturesDied() {
|
||||
return creaturesDied;
|
||||
}
|
||||
}
|
|
@ -124,6 +124,7 @@ public final class Kaldheim extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Renegade Reaper", 386, Rarity.UNCOMMON, mage.cards.r.RenegadeReaper.class));
|
||||
cards.add(new SetCardInfo("Replicating Ring", 244, Rarity.UNCOMMON, mage.cards.r.ReplicatingRing.class));
|
||||
cards.add(new SetCardInfo("Rimewood Falls", 266, Rarity.COMMON, mage.cards.r.RimewoodFalls.class));
|
||||
cards.add(new SetCardInfo("Rise of the Dread Marn", 107, Rarity.RARE, mage.cards.r.RiseOfTheDreadMarn.class));
|
||||
cards.add(new SetCardInfo("Roots of Wisdom", 190, Rarity.COMMON, mage.cards.r.RootsOfWisdom.class));
|
||||
cards.add(new SetCardInfo("Run Ashore", 74, Rarity.COMMON, mage.cards.r.RunAshore.class));
|
||||
cards.add(new SetCardInfo("Sarulf's Packmate", 192, Rarity.COMMON, mage.cards.s.SarulfsPackmate.class));
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
|
||||
|
||||
package mage.game.permanent.token;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class ZombieBerserkerToken extends TokenImpl {
|
||||
|
||||
public ZombieBerserkerToken() {
|
||||
super("Zombie Berserker", "2/2 black Zombie Berserker creature token");
|
||||
cardType.add(CardType.CREATURE);
|
||||
color.setBlack(true);
|
||||
subtype.add(SubType.ZOMBIE);
|
||||
subtype.add(SubType.BERSERKER);
|
||||
power = new MageInt(2);
|
||||
toughness = new MageInt(2);
|
||||
}
|
||||
|
||||
private ZombieBerserkerToken(final ZombieBerserkerToken token) {
|
||||
super(token);
|
||||
}
|
||||
|
||||
public ZombieBerserkerToken copy() {
|
||||
return new ZombieBerserkerToken(this);
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue