mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 10:40:06 -08:00
[LCC] Implement Wayta, Trainer Prodigy (#11608)
This commit is contained in:
parent
3712d2319d
commit
a835dcf4fc
2 changed files with 189 additions and 0 deletions
188
Mage.Sets/src/mage/cards/w/WaytaTrainerProdigy.java
Normal file
188
Mage.Sets/src/mage/cards/w/WaytaTrainerProdigy.java
Normal file
|
|
@ -0,0 +1,188 @@
|
|||
package mage.cards.w;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.Objects;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.CostAdjuster;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.ReplacementEffectImpl;
|
||||
import mage.abilities.effects.common.FightTargetsEffect;
|
||||
import mage.abilities.effects.common.InfoEffect;
|
||||
import mage.constants.*;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.BatchGameEvent;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.events.NumberOfTriggersEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.Target;
|
||||
import mage.target.common.TargetControlledCreaturePermanent;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jimga150
|
||||
*/
|
||||
public final class WaytaTrainerProdigy extends CardImpl {
|
||||
|
||||
public WaytaTrainerProdigy(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}{G}{W}");
|
||||
|
||||
this.supertype.add(SuperType.LEGENDARY);
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.subtype.add(SubType.WARRIOR);
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(5);
|
||||
|
||||
// Haste
|
||||
this.addAbility(HasteAbility.getInstance());
|
||||
|
||||
// {2}{G}, {T}: Target creature you control fights another target creature. This ability costs {2} less to activate if it targets two creatures you control.
|
||||
// Based on Ulvenwald Tracker
|
||||
Ability ability = new SimpleActivatedAbility(new FightTargetsEffect(false), new ManaCostsImpl<>("{2}{G}"));
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addEffect(new InfoEffect("This ability costs {2} less to activate if it targets two creatures you control."));
|
||||
ability.setCostAdjuster(WaytaTrainerProdigyAdjuster.instance);
|
||||
|
||||
Target controlledTarget = new TargetControlledCreaturePermanent().setTargetTag(1);
|
||||
ability.addTarget(controlledTarget);
|
||||
|
||||
Target secondTarget =
|
||||
new TargetCreaturePermanent(StaticFilters.FILTER_ANOTHER_CREATURE_TARGET_2).setTargetTag(2);
|
||||
ability.addTarget(secondTarget);
|
||||
|
||||
this.addAbility(ability);
|
||||
|
||||
// If a creature you control being dealt damage causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time.
|
||||
// Based on Isshin, Two Heavens as One
|
||||
this.addAbility(new SimpleStaticAbility(new WaytaTrainerProdigyEffect()));
|
||||
|
||||
// Rulings:
|
||||
|
||||
// Wayta, Trainer Prodigy's last ability affects only triggered abilities whose trigger conditions refer
|
||||
// specifically to damage being dealt, such as the ability granted by Mephidross Vampire or the last ability
|
||||
// of Wrathful Raptors. It does not affect triggered abilities that would trigger because of the results of
|
||||
// that damage. For example, if you control an Ajani's Pridemate ("Whenever you gain life, put a +1/+1 counter
|
||||
// on Ajani's Pridemate") and you activate Wayta, Trainer Prodigy's second ability targeting a creature you
|
||||
// control with lifelink and another creature you control, the triggered ability of Ajani's Pridemate will
|
||||
// still trigger only once.
|
||||
// (2023-11-10)
|
||||
|
||||
// If you somehow control two copies of Wayta, Trainer Prodigy, a creature you control being dealt damage
|
||||
// causes abilities to trigger three times, not four. A third Wayta, Trainer Prodigy causes abilities to
|
||||
// trigger four times, a fourth causes abilities to trigger five times, and so on.
|
||||
// (2023-11-10)
|
||||
}
|
||||
|
||||
private WaytaTrainerProdigy(final WaytaTrainerProdigy card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public WaytaTrainerProdigy copy() {
|
||||
return new WaytaTrainerProdigy(this);
|
||||
}
|
||||
}
|
||||
|
||||
// Based on Crown of Gondor and SourceTargetsPermanentCondition
|
||||
enum WaytaTrainerProdigyAdjuster implements CostAdjuster {
|
||||
instance;
|
||||
|
||||
@Override
|
||||
public void adjustCosts(Ability ability, Game game) {
|
||||
Target secondTarget = null;
|
||||
for (Target target : ability.getTargets()){
|
||||
if (target.getTargetTag() == 2){
|
||||
secondTarget = target;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (secondTarget == null){
|
||||
return;
|
||||
}
|
||||
// Having to call getFirstTarget() on a Target object called secondTarget
|
||||
// (because it's the second target of a two-target ability)
|
||||
// seems like an insult, but this is just getting the UUID of that target
|
||||
Permanent permanent = game.getPermanentOrLKIBattlefield(secondTarget.getFirstTarget());
|
||||
if (permanent != null && permanent.isControlledBy(ability.getControllerId())) {
|
||||
CardUtil.reduceCost(ability, 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class WaytaTrainerProdigyEffect extends ReplacementEffectImpl {
|
||||
|
||||
WaytaTrainerProdigyEffect() {
|
||||
super(Duration.WhileOnBattlefield, Outcome.Benefit);
|
||||
staticText = "If a creature you control being dealt damage causes a triggered ability " +
|
||||
"of a permanent you control to trigger, that ability triggers an additional time";
|
||||
}
|
||||
|
||||
private WaytaTrainerProdigyEffect(final WaytaTrainerProdigyEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public WaytaTrainerProdigyEffect copy() {
|
||||
return new WaytaTrainerProdigyEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checksEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.NUMBER_OF_TRIGGERS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applies(GameEvent event, Ability source, Game game) {
|
||||
|
||||
NumberOfTriggersEvent numberOfTriggersEvent = (NumberOfTriggersEvent) event;
|
||||
|
||||
// Permanent whose ability is being triggered (and will be retriggered)
|
||||
Permanent triggeredPermanent = game.getPermanentOrLKIBattlefield(numberOfTriggersEvent.getSourceId());
|
||||
if (triggeredPermanent == null || !triggeredPermanent.isControlledBy(source.getControllerId())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
GameEvent sourceEvent = numberOfTriggersEvent.getSourceEvent();
|
||||
if (sourceEvent == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!(sourceEvent.getType() == GameEvent.EventType.DAMAGED_BATCH_FOR_PERMANENTS
|
||||
|| sourceEvent.getType() == GameEvent.EventType.DAMAGED_PERMANENT)){
|
||||
return false;
|
||||
}
|
||||
|
||||
// Get the one or more permanents damaged in this event
|
||||
List<UUID> damagedPermanents = new ArrayList<>();
|
||||
if (sourceEvent instanceof BatchGameEvent) {
|
||||
damagedPermanents.addAll(((BatchGameEvent<?>) sourceEvent).getTargets());
|
||||
} else {
|
||||
damagedPermanents.add(sourceEvent.getTargetId());
|
||||
}
|
||||
|
||||
// If none of them are controlled by you, this ability doesn't apply.
|
||||
return damagedPermanents
|
||||
.stream()
|
||||
.map(game::getPermanentOrLKIBattlefield)
|
||||
.filter(Objects::nonNull)
|
||||
.anyMatch(p -> p.isControlledBy(source.getControllerId()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean replaceEvent(GameEvent event, Ability source, Game game) {
|
||||
event.setAmount(event.getAmount() + 1);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -303,6 +303,7 @@ public final class LostCavernsOfIxalanCommander extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Warkite Marauder", 179, Rarity.RARE, mage.cards.w.WarkiteMarauder.class));
|
||||
cards.add(new SetCardInfo("Wave Goodbye", 79, Rarity.RARE, mage.cards.w.WaveGoodbye.class));
|
||||
cards.add(new SetCardInfo("Wayfarer's Bauble", 317, Rarity.COMMON, mage.cards.w.WayfarersBauble.class));
|
||||
cards.add(new SetCardInfo("Wayta, Trainer Prodigy", 7, Rarity.MYTHIC, mage.cards.w.WaytaTrainerProdigy.class));
|
||||
cards.add(new SetCardInfo("Wayward Swordtooth", 263, Rarity.RARE, mage.cards.w.WaywardSwordtooth.class));
|
||||
cards.add(new SetCardInfo("Wedding Ring", 102, Rarity.MYTHIC, mage.cards.w.WeddingRing.class));
|
||||
cards.add(new SetCardInfo("Welcoming Vampire", 140, Rarity.RARE, mage.cards.w.WelcomingVampire.class));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue