1
0
Fork 0
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:
Evan Kranzler 2021-01-12 17:44:17 -05:00
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

View 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;
}
}

View file

@ -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));

View file

@ -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);
}
}