[ECL] Implement Collective Inferno

This commit is contained in:
theelk801 2026-01-16 13:36:49 -05:00
parent 05f4f2b5a8
commit ff0a231d1a
3 changed files with 105 additions and 6 deletions

View file

@ -104,7 +104,7 @@ enum CallerOfTheHuntAdjuster implements CostAdjuster {
} else {
// human choose
// TODO: need early target cost instead dialog here
Effect effect = new ChooseCreatureTypeEffect(Outcome.Benefit);
Effect effect = new CallerOfTheHuntChooseEffect(Outcome.Benefit);
effect.apply(game, ability);
}
typeChoice = (SubType) game.getState().getValue(sourceObject.getId() + "_type");
@ -125,14 +125,14 @@ enum CallerOfTheHuntAdjuster implements CostAdjuster {
}
}
class ChooseCreatureTypeEffect extends OneShotEffect {
class CallerOfTheHuntChooseEffect extends OneShotEffect {
ChooseCreatureTypeEffect(Outcome outcome) {
CallerOfTheHuntChooseEffect(Outcome outcome) {
super(outcome);
staticText = "choose a creature type";
}
private ChooseCreatureTypeEffect(final ChooseCreatureTypeEffect effect) {
private CallerOfTheHuntChooseEffect(final CallerOfTheHuntChooseEffect effect) {
super(effect);
}
@ -156,7 +156,7 @@ class ChooseCreatureTypeEffect extends OneShotEffect {
}
@Override
public ChooseCreatureTypeEffect copy() {
return new ChooseCreatureTypeEffect(this);
public CallerOfTheHuntChooseEffect copy() {
return new CallerOfTheHuntChooseEffect(this);
}
}

View file

@ -0,0 +1,95 @@
package mage.cards.c;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.ReplacementEffectImpl;
import mage.abilities.effects.common.ChooseCreatureTypeEffect;
import mage.abilities.keyword.ConvokeAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.util.CardUtil;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class CollectiveInferno extends CardImpl {
public CollectiveInferno(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{R}{R}");
// Convoke
this.addAbility(new ConvokeAbility());
// As this enchantment enters, choose a creature type.
this.addAbility(new SimpleStaticAbility(new ChooseCreatureTypeEffect(Outcome.Benefit)));
// Double all damage that sources you control of the chosen type would deal.
this.addAbility(new SimpleStaticAbility(new CollectiveInfernoEffect()));
}
private CollectiveInferno(final CollectiveInferno card) {
super(card);
}
@Override
public CollectiveInferno copy() {
return new CollectiveInferno(this);
}
}
class CollectiveInfernoEffect extends ReplacementEffectImpl {
CollectiveInfernoEffect() {
super(Duration.WhileOnBattlefield, Outcome.Damage);
staticText = "double all damage that sources you control of the chosen type would deal";
}
private CollectiveInfernoEffect(final CollectiveInfernoEffect effect) {
super(effect);
}
@Override
public CollectiveInfernoEffect copy() {
return new CollectiveInfernoEffect(this);
}
@Override
public boolean checksEventType(GameEvent event, Game game) {
switch (event.getType()) {
case DAMAGE_PLAYER:
case DAMAGE_PERMANENT:
return true;
default:
return false;
}
}
@Override
public boolean applies(GameEvent event, Ability source, Game game) {
if (!source.isControlledBy(game.getControllerId(event.getSourceId()))) {
return false;
}
SubType subType = ChooseCreatureTypeEffect.getChosenCreatureType(source.getSourceId(), game);
if (subType == null) {
return false;
}
MageObject mageObject = game.getObject(event.getSourceId());
return mageObject != null && mageObject.hasSubtype(subType, game);
}
@Override
public boolean replaceEvent(GameEvent event, Ability source, Game game) {
event.setAmount(CardUtil.overflowMultiply(event.getAmount(), 2));
return false;
}
}

View file

@ -99,6 +99,10 @@ public final class LorwynEclipsed extends ExpansionSet {
cards.add(new SetCardInfo("Chronicle of Victory", 346, Rarity.MYTHIC, mage.cards.c.ChronicleOfVictory.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Cinder Strike", 131, Rarity.COMMON, mage.cards.c.CinderStrike.class));
cards.add(new SetCardInfo("Clachan Festival", 10, Rarity.UNCOMMON, mage.cards.c.ClachanFestival.class));
cards.add(new SetCardInfo("Collective Inferno", 132, Rarity.RARE, mage.cards.c.CollectiveInferno.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Collective Inferno", 363, Rarity.RARE, mage.cards.c.CollectiveInferno.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Collective Inferno", 387, Rarity.MYTHIC, mage.cards.c.CollectiveInferno.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Collective Inferno", 397, Rarity.MYTHIC, mage.cards.c.CollectiveInferno.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Creakwood Safewright", 96, Rarity.UNCOMMON, mage.cards.c.CreakwoodSafewright.class));
cards.add(new SetCardInfo("Crib Swap", 11, Rarity.UNCOMMON, mage.cards.c.CribSwap.class));
cards.add(new SetCardInfo("Crossroads Watcher", 173, Rarity.COMMON, mage.cards.c.CrossroadsWatcher.class));