[NCC] Implemented Kitt Kanto, Mayhem Diva

This commit is contained in:
Evan Kranzler 2022-04-09 11:23:48 -04:00
parent 4a6fa15b37
commit 2d2763ebf6
3 changed files with 89 additions and 5 deletions

View file

@ -0,0 +1,79 @@
package mage.cards.k;
import mage.MageInt;
import mage.abilities.common.BeginningOfCombatTriggeredAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.delayed.ReflexiveTriggeredAbility;
import mage.abilities.costs.common.TapTargetCost;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DoWhenCostPaid;
import mage.abilities.effects.common.combat.GoadTargetEffect;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.permanent.token.CitizenGreenWhiteToken;
import mage.target.TargetPermanent;
import mage.target.common.TargetControlledPermanent;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class KittKantoMayhemDiva extends CardImpl {
private static final FilterPermanent filter
= new FilterCreaturePermanent("creature controlled by the active player");
static {
filter.add(TargetController.ACTIVE.getControllerPredicate());
}
public KittKantoMayhemDiva(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}{G}{W}");
this.addSuperType(SuperType.LEGENDARY);
this.subtype.add(SubType.CAT);
this.subtype.add(SubType.BARD);
this.subtype.add(SubType.DRUID);
this.power = new MageInt(3);
this.toughness = new MageInt(3);
// When Kitt Kanto enters the battlefield, create a 1/1 green and white Citizen creature token.
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new CitizenGreenWhiteToken())));
// At the beginning of combat on each player's turn, you may tap two untapped creatures you control. When you do, target creature that player controls gets +2/+2 and gains trample until end of turn. Goad that creature.
ReflexiveTriggeredAbility ability = new ReflexiveTriggeredAbility(
new BoostTargetEffect(2, 2)
.setText("target creature that player controls gets +2/+2"),
false
);
ability.addEffect(new GainAbilityTargetEffect(
TrampleAbility.getInstance(), Duration.EndOfTurn,
"and gains trample until end of turn"
));
ability.addEffect(new GoadTargetEffect().setText("Goad that creature"));
ability.addTarget(new TargetPermanent(filter));
this.addAbility(new BeginningOfCombatTriggeredAbility(new DoWhenCostPaid(
ability,
new TapTargetCost(new TargetControlledPermanent(
2, StaticFilters.FILTER_CONTROLLED_UNTAPPED_CREATURES
)), "Tap two untapped creatures you control?"
), TargetController.EACH_PLAYER, false));
}
private KittKantoMayhemDiva(final KittKantoMayhemDiva card) {
super(card);
}
@Override
public KittKantoMayhemDiva copy() {
return new KittKantoMayhemDiva(this);
}
}

View file

@ -1,6 +1,7 @@
package mage.sets;
import mage.cards.ExpansionSet;
import mage.constants.Rarity;
import mage.constants.SetType;
import java.util.Arrays;
@ -22,6 +23,8 @@ public final class NewCapennaCommander extends ExpansionSet {
super("New Capenna Commander", "NCC", ExpansionSet.buildDate(2022, 4, 29), SetType.SUPPLEMENTAL);
this.hasBasicLands = false;
cards.add(new SetCardInfo("Kitt Kanto, Mayhem Diva", 4, Rarity.MYTHIC, mage.cards.k.KittKantoMayhemDiva.class));
cards.removeIf(setCardInfo -> unfinished.contains(setCardInfo.getName())); // remove when shield counters are implemented
}
}

View file

@ -10,8 +10,8 @@ import mage.target.targetpointer.FixedTarget;
public class BeginningOfCombatTriggeredAbility extends TriggeredAbilityImpl {
private TargetController targetController;
private boolean setTargetPointer;
private final TargetController targetController;
private final boolean setTargetPointer;
public BeginningOfCombatTriggeredAbility(Effect effect, TargetController targetController, boolean isOptional) {
this(Zone.BATTLEFIELD, effect, targetController, isOptional, false);
@ -62,6 +62,7 @@ public class BeginningOfCombatTriggeredAbility extends TriggeredAbilityImpl {
return true;
}
break;
case EACH_PLAYER:
case ANY:
if (setTargetPointer) {
this.getEffects().forEach(effect -> {
@ -80,6 +81,8 @@ public class BeginningOfCombatTriggeredAbility extends TriggeredAbilityImpl {
return "At the beginning of combat on your turn, " + generateZoneString();
case OPPONENT:
return "At the beginning of each opponent's combat step, " + generateZoneString();
case EACH_PLAYER:
return "At the beginning of combat on each player's turn, " + generateZoneString();
case ANY:
return "At the beginning of each combat, " + generateZoneString();
}
@ -87,9 +90,8 @@ public class BeginningOfCombatTriggeredAbility extends TriggeredAbilityImpl {
}
private String generateZoneString() {
switch (getZone()) {
case GRAVEYARD:
return "if {this} is in your graveyard, ";
if (getZone() == Zone.GRAVEYARD) {
return "if {this} is in your graveyard, ";
}
return "";
}