[SLX] update Street Fighter cards to Universes Within versions

This commit is contained in:
Evan Kranzler 2022-12-14 09:34:16 -05:00
parent 88e82d12a0
commit 50a52d18e3
10 changed files with 167 additions and 121 deletions

View file

@ -1,4 +1,4 @@
package mage.cards.k; package mage.cards.a;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
@ -24,9 +24,9 @@ import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
public final class KenBurningBrawler extends CardImpl { public final class AishaOfSparksAndSmoke extends CardImpl {
public KenBurningBrawler(UUID ownerId, CardSetInfo setInfo) { public AishaOfSparksAndSmoke(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}{R}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}{R}");
this.addSuperType(SuperType.LEGENDARY); this.addSuperType(SuperType.LEGENDARY);
@ -45,35 +45,35 @@ public final class KenBurningBrawler extends CardImpl {
// ShoryukenWhenever Ken deals combat damage, you may cast a sorcery spell from your hand with mana value less than or equal to that damage without paying its mana cost. // ShoryukenWhenever Ken deals combat damage, you may cast a sorcery spell from your hand with mana value less than or equal to that damage without paying its mana cost.
this.addAbility(new DealsCombatDamageTriggeredAbility( this.addAbility(new DealsCombatDamageTriggeredAbility(
new KenBurningBrawlerEffect(), false new AishaOfSparksAndSmokeEffect(), false
).withFlavorWord("Shoryuken")); ).withFlavorWord("Shoryuken"));
} }
private KenBurningBrawler(final KenBurningBrawler card) { private AishaOfSparksAndSmoke(final AishaOfSparksAndSmoke card) {
super(card); super(card);
} }
@Override @Override
public KenBurningBrawler copy() { public AishaOfSparksAndSmoke copy() {
return new KenBurningBrawler(this); return new AishaOfSparksAndSmoke(this);
} }
} }
class KenBurningBrawlerEffect extends OneShotEffect { class AishaOfSparksAndSmokeEffect extends OneShotEffect {
KenBurningBrawlerEffect() { AishaOfSparksAndSmokeEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "you may cast a sorcery spell from your hand with mana value " + staticText = "you may cast a sorcery spell from your hand with mana value " +
"less than or equal to that damage without paying its mana cost"; "less than or equal to that damage without paying its mana cost";
} }
private KenBurningBrawlerEffect(final KenBurningBrawlerEffect effect) { private AishaOfSparksAndSmokeEffect(final AishaOfSparksAndSmokeEffect effect) {
super(effect); super(effect);
} }
@Override @Override
public KenBurningBrawlerEffect copy() { public AishaOfSparksAndSmokeEffect copy() {
return new KenBurningBrawlerEffect(this); return new AishaOfSparksAndSmokeEffect(this);
} }
@Override @Override

View file

@ -1,4 +1,4 @@
package mage.cards.e; package mage.cards.b;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
@ -6,7 +6,10 @@ import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.MyTurnCondition; import mage.abilities.condition.common.MyTurnCondition;
import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.ChooseOpponentEffect;
import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.abilities.effects.common.ruleModifying.CombatDamageByToughnessEffect; import mage.abilities.effects.common.ruleModifying.CombatDamageByToughnessEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -16,16 +19,21 @@ import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.game.Game;
import mage.players.Player;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.UUID; import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
public final class EHondaSumoChampion extends CardImpl { public final class BaldinCenturyHerdmaster extends CardImpl {
public EHondaSumoChampion(UUID ownerId, CardSetInfo setInfo) { public BaldinCenturyHerdmaster(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{W}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{W}{W}");
this.addSuperType(SuperType.LEGENDARY); this.addSuperType(SuperType.LEGENDARY);
@ -43,18 +51,48 @@ public final class EHondaSumoChampion extends CardImpl {
// Hundred Hand SlapWhenever E. Honda, Sumo Champion attacks, up to one hundred target creatures each get +0/+X until end of turn, where X is the number of cards in your hand. // Hundred Hand SlapWhenever E. Honda, Sumo Champion attacks, up to one hundred target creatures each get +0/+X until end of turn, where X is the number of cards in your hand.
Ability ability = new AttacksTriggeredAbility(new BoostTargetEffect( Ability ability = new AttacksTriggeredAbility(new BoostTargetEffect(
StaticValue.get(0), CardsInTargetPlayerHandCount.instance, Duration.EndOfTurn StaticValue.get(0), BaldinCenturyHerdmasterValue.instance, Duration.EndOfTurn
).setText("up to one hundred target creatures each get +0/+X until end of turn, where X is the number of cards in your hand")); ).setText("up to one hundred target creatures each get +0/+X until end of turn, where X is the number of cards in your hand"));
ability.addTarget(new TargetCreaturePermanent(0, 100)); ability.addTarget(new TargetCreaturePermanent(0, 100));
this.addAbility(ability.withFlavorWord("Hundred Hand Slap")); this.addAbility(ability.withFlavorWord("Hundred Hand Slap"));
} }
private EHondaSumoChampion(final EHondaSumoChampion card) { private BaldinCenturyHerdmaster(final BaldinCenturyHerdmaster card) {
super(card); super(card);
} }
@Override @Override
public EHondaSumoChampion copy() { public BaldinCenturyHerdmaster copy() {
return new EHondaSumoChampion(this); return new BaldinCenturyHerdmaster(this);
}
}
enum BaldinCenturyHerdmasterValue implements DynamicValue {
instance;
@Override
public int calculate(Game game, Ability sourceAbility, Effect effect) {
return Optional.ofNullable(game.getPlayer(
(UUID) game.getState().getValue(sourceAbility.getSourceId() + ChooseOpponentEffect.VALUE_KEY)
))
.filter(Objects::nonNull)
.map(Player::getHand)
.map(Set::size)
.orElse(0);
}
@Override
public BaldinCenturyHerdmasterValue copy() {
return this;
}
@Override
public String getMessage() {
return "";
}
@Override
public String toString() {
return "1";
} }
} }

View file

@ -1,4 +1,4 @@
package mage.cards.g; package mage.cards.i;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
@ -25,9 +25,9 @@ import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
public final class GuileSonicSoldier extends CardImpl { public final class ImmardTheStormcleaver extends CardImpl {
public GuileSonicSoldier(UUID ownerId, CardSetInfo setInfo) { public ImmardTheStormcleaver(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{R}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{R}{W}");
this.addSuperType(SuperType.LEGENDARY); this.addSuperType(SuperType.LEGENDARY);
@ -39,36 +39,36 @@ public final class GuileSonicSoldier extends CardImpl {
// Whenever Guile, Sonic Soldier enters the battlefield or attacks, put a charge counter on him or remove one from him. When you remove a counter this way, choose one // Whenever Guile, Sonic Soldier enters the battlefield or attacks, put a charge counter on him or remove one from him. When you remove a counter this way, choose one
// Sonic BoomGuile, Sonic Soldier deals 4 damage to any target. // Sonic BoomGuile, Sonic Soldier deals 4 damage to any target.
// Flash KickGuile, Sonic Soldier gains lifelink and indestructible until end of turn. // Flash KickGuile, Sonic Soldier gains lifelink and indestructible until end of turn.
this.addAbility(new EntersBattlefieldOrAttacksSourceTriggeredAbility(new GuileSonicSoldierEffect())); this.addAbility(new EntersBattlefieldOrAttacksSourceTriggeredAbility(new ImmardTheStormcleaverEffect()));
} }
private GuileSonicSoldier(final GuileSonicSoldier card) { private ImmardTheStormcleaver(final ImmardTheStormcleaver card) {
super(card); super(card);
} }
@Override @Override
public GuileSonicSoldier copy() { public ImmardTheStormcleaver copy() {
return new GuileSonicSoldier(this); return new ImmardTheStormcleaver(this);
} }
} }
class GuileSonicSoldierEffect extends OneShotEffect { class ImmardTheStormcleaverEffect extends OneShotEffect {
private final ReflexiveTriggeredAbility ability = makeAbility(); private final ReflexiveTriggeredAbility ability = makeAbility();
GuileSonicSoldierEffect() { ImmardTheStormcleaverEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "put a charge counter on him or remove one from him. When you remove a counter this way, " staticText = "put a charge counter on him or remove one from him. When you remove a counter this way, "
+ CardUtil.getTextWithFirstCharLowerCase(ability.getRule()); + CardUtil.getTextWithFirstCharLowerCase(ability.getRule());
} }
private GuileSonicSoldierEffect(final GuileSonicSoldierEffect effect) { private ImmardTheStormcleaverEffect(final ImmardTheStormcleaverEffect effect) {
super(effect); super(effect);
} }
@Override @Override
public GuileSonicSoldierEffect copy() { public ImmardTheStormcleaverEffect copy() {
return new GuileSonicSoldierEffect(this); return new ImmardTheStormcleaverEffect(this);
} }
@Override @Override

View file

@ -1,4 +1,4 @@
package mage.cards.z; package mage.cards.m;
import mage.MageInt; import mage.MageInt;
import mage.MageObjectReference; import mage.MageObjectReference;
@ -33,15 +33,15 @@ import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
public final class ZangiefTheRedCyclone extends CardImpl { public final class MaarikaBrutalGladiator extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature"); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature");
static { static {
filter.add(ZangiefTheRedCycloneWatcher::checkPermanent); filter.add(MaarikaBrutalGladiatorWatcher::checkPermanent);
} }
public ZangiefTheRedCyclone(UUID ownerId, CardSetInfo setInfo) { public MaarikaBrutalGladiator(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{R}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{R}{G}");
this.addSuperType(SuperType.LEGENDARY); this.addSuperType(SuperType.LEGENDARY);
@ -61,21 +61,21 @@ public final class ZangiefTheRedCyclone extends CardImpl {
// Spinning PiledriverWhenever Zangief deals damage to a creature, if that creature was dealt excess damage this turn, that creature's controller sacrifices a noncreature, nonland permanent. // Spinning PiledriverWhenever Zangief deals damage to a creature, if that creature was dealt excess damage this turn, that creature's controller sacrifices a noncreature, nonland permanent.
this.addAbility(new DealsDamageToACreatureTriggeredAbility( this.addAbility(new DealsDamageToACreatureTriggeredAbility(
new ZangiefTheRedCycloneEffect(), false, false, true, filter new MaarikaBrutalGladiatorEffect(), false, false, true, filter
).withFlavorWord("Spinning Piledriver"), new ZangiefTheRedCycloneWatcher()); ).withFlavorWord("Spinning Piledriver"), new MaarikaBrutalGladiatorWatcher());
} }
private ZangiefTheRedCyclone(final ZangiefTheRedCyclone card) { private MaarikaBrutalGladiator(final MaarikaBrutalGladiator card) {
super(card); super(card);
} }
@Override @Override
public ZangiefTheRedCyclone copy() { public MaarikaBrutalGladiator copy() {
return new ZangiefTheRedCyclone(this); return new MaarikaBrutalGladiator(this);
} }
} }
class ZangiefTheRedCycloneEffect extends OneShotEffect { class MaarikaBrutalGladiatorEffect extends OneShotEffect {
private static final FilterPermanent filter = new FilterNonlandPermanent("noncreature, nonland permanent"); private static final FilterPermanent filter = new FilterNonlandPermanent("noncreature, nonland permanent");
@ -83,19 +83,19 @@ class ZangiefTheRedCycloneEffect extends OneShotEffect {
filter.add(Predicates.not(CardType.CREATURE.getPredicate())); filter.add(Predicates.not(CardType.CREATURE.getPredicate()));
} }
ZangiefTheRedCycloneEffect() { MaarikaBrutalGladiatorEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "if that creature was dealt excess damage this turn, " + staticText = "if that creature was dealt excess damage this turn, " +
"that creature's controller sacrifices a noncreature, nonland permanent"; "that creature's controller sacrifices a noncreature, nonland permanent";
} }
private ZangiefTheRedCycloneEffect(final ZangiefTheRedCycloneEffect effect) { private MaarikaBrutalGladiatorEffect(final MaarikaBrutalGladiatorEffect effect) {
super(effect); super(effect);
} }
@Override @Override
public ZangiefTheRedCycloneEffect copy() { public MaarikaBrutalGladiatorEffect copy() {
return new ZangiefTheRedCycloneEffect(this); return new MaarikaBrutalGladiatorEffect(this);
} }
@Override @Override
@ -110,11 +110,11 @@ class ZangiefTheRedCycloneEffect extends OneShotEffect {
} }
} }
class ZangiefTheRedCycloneWatcher extends Watcher { class MaarikaBrutalGladiatorWatcher extends Watcher {
private final Set<MageObjectReference> morSet = new HashSet<>(); private final Set<MageObjectReference> morSet = new HashSet<>();
ZangiefTheRedCycloneWatcher() { MaarikaBrutalGladiatorWatcher() {
super(WatcherScope.GAME); super(WatcherScope.GAME);
} }
@ -135,7 +135,7 @@ class ZangiefTheRedCycloneWatcher extends Watcher {
static boolean checkPermanent(Permanent input, Game game) { static boolean checkPermanent(Permanent input, Game game) {
return game return game
.getState() .getState()
.getWatcher(ZangiefTheRedCycloneWatcher.class) .getWatcher(MaarikaBrutalGladiatorWatcher.class)
.morSet .morSet
.stream() .stream()
.anyMatch(mor -> mor.refersTo(input, game)); .anyMatch(mor -> mor.refersTo(input, game));

View file

@ -1,4 +1,4 @@
package mage.cards.d; package mage.cards.t;
import mage.MageInt; import mage.MageInt;
import mage.MageObjectReference; import mage.MageObjectReference;
@ -33,7 +33,7 @@ import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
public final class DhalsimPliablePacifist extends CardImpl { public final class TadeasJuniperAscendant extends CardImpl {
private static final Condition condition = new InvertCondition(SourceAttackingCondition.instance); private static final Condition condition = new InvertCondition(SourceAttackingCondition.instance);
private static final FilterControlledCreaturePermanent filter private static final FilterControlledCreaturePermanent filter
@ -43,7 +43,7 @@ public final class DhalsimPliablePacifist extends CardImpl {
filter.add(new AbilityPredicate(ReachAbility.class)); filter.add(new AbilityPredicate(ReachAbility.class));
} }
public DhalsimPliablePacifist(UUID ownerId, CardSetInfo setInfo) { public TadeasJuniperAscendant(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{W}");
this.addSuperType(SuperType.LEGENDARY); this.addSuperType(SuperType.LEGENDARY);
@ -63,37 +63,37 @@ public final class DhalsimPliablePacifist extends CardImpl {
// Whenever a creature you control with reach attacks, untap it and it can't be blocked by creatures with greater power this combat. // Whenever a creature you control with reach attacks, untap it and it can't be blocked by creatures with greater power this combat.
this.addAbility(new AttacksCreatureYouControlTriggeredAbility( this.addAbility(new AttacksCreatureYouControlTriggeredAbility(
new DhalsimPliablePacifistEffect(), false, filter, true new TadeasJuniperAscendantEffect(), false, filter, true
)); ));
// Fierce PunchWhenever one or more creatures you control deal combat damage to a player, draw a card. // Fierce PunchWhenever one or more creatures you control deal combat damage to a player, draw a card.
this.addAbility(new DhalsimPliablePacifistTriggeredAbility()); this.addAbility(new TadeasJuniperAscendantTriggeredAbility());
} }
private DhalsimPliablePacifist(final DhalsimPliablePacifist card) { private TadeasJuniperAscendant(final TadeasJuniperAscendant card) {
super(card); super(card);
} }
@Override @Override
public DhalsimPliablePacifist copy() { public TadeasJuniperAscendant copy() {
return new DhalsimPliablePacifist(this); return new TadeasJuniperAscendant(this);
} }
} }
class DhalsimPliablePacifistEffect extends OneShotEffect { class TadeasJuniperAscendantEffect extends OneShotEffect {
DhalsimPliablePacifistEffect() { TadeasJuniperAscendantEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "untap it and it can't be blocked by creatures with greater power this combat"; staticText = "untap it and it can't be blocked by creatures with greater power this combat";
} }
private DhalsimPliablePacifistEffect(final DhalsimPliablePacifistEffect effect) { private TadeasJuniperAscendantEffect(final TadeasJuniperAscendantEffect effect) {
super(effect); super(effect);
} }
@Override @Override
public DhalsimPliablePacifistEffect copy() { public TadeasJuniperAscendantEffect copy() {
return new DhalsimPliablePacifistEffect(this); return new TadeasJuniperAscendantEffect(this);
} }
@Override @Override
@ -103,28 +103,28 @@ class DhalsimPliablePacifistEffect extends OneShotEffect {
return false; return false;
} }
permanent.untap(game); permanent.untap(game);
game.addEffect(new DhalsimPliablePacifistBlockEffect(permanent, game), source); game.addEffect(new TadeasJuniperAscendantBlockEffect(permanent, game), source);
return true; return true;
} }
} }
class DhalsimPliablePacifistBlockEffect extends RestrictionEffect { class TadeasJuniperAscendantBlockEffect extends RestrictionEffect {
private final MageObjectReference mor; private final MageObjectReference mor;
DhalsimPliablePacifistBlockEffect(Permanent permanent, Game game) { TadeasJuniperAscendantBlockEffect(Permanent permanent, Game game) {
super(Duration.EndOfTurn); super(Duration.EndOfTurn);
this.mor = new MageObjectReference(permanent, game); this.mor = new MageObjectReference(permanent, game);
} }
private DhalsimPliablePacifistBlockEffect(final DhalsimPliablePacifistBlockEffect effect) { private TadeasJuniperAscendantBlockEffect(final TadeasJuniperAscendantBlockEffect effect) {
super(effect); super(effect);
this.mor = effect.mor; this.mor = effect.mor;
} }
@Override @Override
public DhalsimPliablePacifistBlockEffect copy() { public TadeasJuniperAscendantBlockEffect copy() {
return new DhalsimPliablePacifistBlockEffect(this); return new TadeasJuniperAscendantBlockEffect(this);
} }
@Override @Override
@ -143,23 +143,23 @@ class DhalsimPliablePacifistBlockEffect extends RestrictionEffect {
} }
} }
class DhalsimPliablePacifistTriggeredAbility extends TriggeredAbilityImpl { class TadeasJuniperAscendantTriggeredAbility extends TriggeredAbilityImpl {
private final Set<UUID> damagedPlayerIds = new HashSet<>(); private final Set<UUID> damagedPlayerIds = new HashSet<>();
DhalsimPliablePacifistTriggeredAbility() { TadeasJuniperAscendantTriggeredAbility() {
super(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), false); super(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), false);
this.withFlavorWord("Fierce Punch"); this.withFlavorWord("Fierce Punch");
setTriggerPhrase("Whenever one or more creatures you control deal combat damage to a player, "); setTriggerPhrase("Whenever one or more creatures you control deal combat damage to a player, ");
} }
private DhalsimPliablePacifistTriggeredAbility(final DhalsimPliablePacifistTriggeredAbility ability) { private TadeasJuniperAscendantTriggeredAbility(final TadeasJuniperAscendantTriggeredAbility ability) {
super(ability); super(ability);
} }
@Override @Override
public DhalsimPliablePacifistTriggeredAbility copy() { public TadeasJuniperAscendantTriggeredAbility copy() {
return new DhalsimPliablePacifistTriggeredAbility(this); return new TadeasJuniperAscendantTriggeredAbility(this);
} }
@Override @Override

View file

@ -1,4 +1,4 @@
package mage.cards.b; package mage.cards.t;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
@ -23,9 +23,9 @@ import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
public final class BlankaFerociousFriend extends CardImpl { public final class TheHowlingAbomination extends CardImpl {
public BlankaFerociousFriend(UUID ownerId, CardSetInfo setInfo) { public TheHowlingAbomination(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}{G}");
this.addSuperType(SuperType.LEGENDARY); this.addSuperType(SuperType.LEGENDARY);
@ -40,7 +40,7 @@ public final class BlankaFerociousFriend extends CardImpl {
// Rolling AttackBlanka, Ferocious Friend has trample as long as you've cast three or more spells this turn. // Rolling AttackBlanka, Ferocious Friend has trample as long as you've cast three or more spells this turn.
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
new GainAbilitySourceEffect(TrampleAbility.getInstance()), BlankaFerociousFriendCondition.instance, new GainAbilitySourceEffect(TrampleAbility.getInstance()), TheHowlingAbominationCondition.instance,
"{this} has trample as long as you've cast three or more spells this turn" "{this} has trample as long as you've cast three or more spells this turn"
)).withFlavorWord("Rolling Attack")); )).withFlavorWord("Rolling Attack"));
@ -53,17 +53,17 @@ public final class BlankaFerociousFriend extends CardImpl {
this.addAbility(ability.withFlavorWord("Electric Thunder")); this.addAbility(ability.withFlavorWord("Electric Thunder"));
} }
private BlankaFerociousFriend(final BlankaFerociousFriend card) { private TheHowlingAbomination(final TheHowlingAbomination card) {
super(card); super(card);
} }
@Override @Override
public BlankaFerociousFriend copy() { public TheHowlingAbomination copy() {
return new BlankaFerociousFriend(this); return new TheHowlingAbomination(this);
} }
} }
enum BlankaFerociousFriendCondition implements Condition { enum TheHowlingAbominationCondition implements Condition {
instance; instance;
@Override @Override

View file

@ -1,4 +1,4 @@
package mage.cards.r; package mage.cards.v;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
@ -24,9 +24,9 @@ import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
public final class RyuWorldWarrior extends CardImpl { public final class VikyaScorchingStalwart extends CardImpl {
public RyuWorldWarrior(UUID ownerId, CardSetInfo setInfo) { public VikyaScorchingStalwart(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
this.addSuperType(SuperType.LEGENDARY); this.addSuperType(SuperType.LEGENDARY);
@ -39,38 +39,38 @@ public final class RyuWorldWarrior extends CardImpl {
this.addAbility(new TrainingAbility()); this.addAbility(new TrainingAbility());
// Hadoken{4}{R}, {Q}, Discard a card: Ryu, World Warrior deals damage equal to his power to any target. If excess damage was dealt to a creature this way, draw a card. // Hadoken{4}{R}, {Q}, Discard a card: Ryu, World Warrior deals damage equal to his power to any target. If excess damage was dealt to a creature this way, draw a card.
Ability ability = new SimpleActivatedAbility(new RyuWorldWarriorEffect(), new ManaCostsImpl<>("{4}{R}")); Ability ability = new SimpleActivatedAbility(new VikyaScorchingStalwartEffect(), new ManaCostsImpl<>("{4}{R}"));
ability.addCost(new UntapSourceCost()); ability.addCost(new UntapSourceCost());
ability.addCost(new DiscardCardCost()); ability.addCost(new DiscardCardCost());
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());
this.addAbility(ability.withFlavorWord("Hadoken")); this.addAbility(ability.withFlavorWord("Hadoken"));
} }
private RyuWorldWarrior(final RyuWorldWarrior card) { private VikyaScorchingStalwart(final VikyaScorchingStalwart card) {
super(card); super(card);
} }
@Override @Override
public RyuWorldWarrior copy() { public VikyaScorchingStalwart copy() {
return new RyuWorldWarrior(this); return new VikyaScorchingStalwart(this);
} }
} }
class RyuWorldWarriorEffect extends OneShotEffect { class VikyaScorchingStalwartEffect extends OneShotEffect {
RyuWorldWarriorEffect() { VikyaScorchingStalwartEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "{this} deals damage equal to his power to any target. " + staticText = "{this} deals damage equal to his power to any target. " +
"If excess damage was dealt to a creature this way, draw a card"; "If excess damage was dealt to a creature this way, draw a card";
} }
private RyuWorldWarriorEffect(final RyuWorldWarriorEffect effect) { private VikyaScorchingStalwartEffect(final VikyaScorchingStalwartEffect effect) {
super(effect); super(effect);
} }
@Override @Override
public RyuWorldWarriorEffect copy() { public VikyaScorchingStalwartEffect copy() {
return new RyuWorldWarriorEffect(this); return new VikyaScorchingStalwartEffect(this);
} }
@Override @Override

View file

@ -1,4 +1,4 @@
package mage.cards.c; package mage.cards.z;
import mage.ApprovingObject; import mage.ApprovingObject;
import mage.MageInt; import mage.MageInt;
@ -23,9 +23,9 @@ import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
public final class ChunLiCountlessKicks extends CardImpl { public final class ZethiArcaneBlademaster extends CardImpl {
public ChunLiCountlessKicks(UUID ownerId, CardSetInfo setInfo) { public ZethiArcaneBlademaster(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}{U}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}{U}");
this.addSuperType(SuperType.LEGENDARY); this.addSuperType(SuperType.LEGENDARY);
@ -38,24 +38,24 @@ public final class ChunLiCountlessKicks extends CardImpl {
this.addAbility(new MultikickerAbility("{W/U}")); this.addAbility(new MultikickerAbility("{W/U}"));
// When Chun-Li enters the battlefield, exile up to X target instant cards from your graveyard, where X is the number of times Chun-Li was kicked. Put a kick counter on each of them. // When Chun-Li enters the battlefield, exile up to X target instant cards from your graveyard, where X is the number of times Chun-Li was kicked. Put a kick counter on each of them.
this.addAbility(new EntersBattlefieldTriggeredAbility(new ChunLiCountlessKicksExileEffect()) this.addAbility(new EntersBattlefieldTriggeredAbility(new ZethiArcaneBlademasterExileEffect())
.setTargetAdjuster(ChunLiCountlessKicksAdjuster.instance)); .setTargetAdjuster(ZethiArcaneBlademasterAdjuster.instance));
// Lightning KickWhenever Chun-Li attacks, copy each exiled card you own with a kick counter on it. You may cast the copies. // Lightning KickWhenever Chun-Li attacks, copy each exiled card you own with a kick counter on it. You may cast the copies.
this.addAbility(new AttacksTriggeredAbility(new ChunLiCountlessKicksCastEffect()).withFlavorWord("Lightning Kick")); this.addAbility(new AttacksTriggeredAbility(new ZethiArcaneBlademasterCastEffect()).withFlavorWord("Lightning Kick"));
} }
private ChunLiCountlessKicks(final ChunLiCountlessKicks card) { private ZethiArcaneBlademaster(final ZethiArcaneBlademaster card) {
super(card); super(card);
} }
@Override @Override
public ChunLiCountlessKicks copy() { public ZethiArcaneBlademaster copy() {
return new ChunLiCountlessKicks(this); return new ZethiArcaneBlademaster(this);
} }
} }
enum ChunLiCountlessKicksAdjuster implements TargetAdjuster { enum ZethiArcaneBlademasterAdjuster implements TargetAdjuster {
instance; instance;
private static final FilterCard filter = new FilterCard("instant cards from your graveyard"); private static final FilterCard filter = new FilterCard("instant cards from your graveyard");
@ -71,21 +71,21 @@ enum ChunLiCountlessKicksAdjuster implements TargetAdjuster {
} }
} }
class ChunLiCountlessKicksExileEffect extends OneShotEffect { class ZethiArcaneBlademasterExileEffect extends OneShotEffect {
ChunLiCountlessKicksExileEffect() { ZethiArcaneBlademasterExileEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "exile up to X target instant cards from your graveyard, " staticText = "exile up to X target instant cards from your graveyard, "
+ "where X is the number of times {this} was kicked. Put a kick counter on each of them"; + "where X is the number of times {this} was kicked. Put a kick counter on each of them";
} }
private ChunLiCountlessKicksExileEffect(final ChunLiCountlessKicksExileEffect effect) { private ZethiArcaneBlademasterExileEffect(final ZethiArcaneBlademasterExileEffect effect) {
super(effect); super(effect);
} }
@Override @Override
public ChunLiCountlessKicksExileEffect copy() { public ZethiArcaneBlademasterExileEffect copy() {
return new ChunLiCountlessKicksExileEffect(this); return new ZethiArcaneBlademasterExileEffect(this);
} }
@Override @Override
@ -101,20 +101,20 @@ class ChunLiCountlessKicksExileEffect extends OneShotEffect {
} }
} }
class ChunLiCountlessKicksCastEffect extends OneShotEffect { class ZethiArcaneBlademasterCastEffect extends OneShotEffect {
ChunLiCountlessKicksCastEffect() { ZethiArcaneBlademasterCastEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "copy each exiled card you own with a kick counter on it. You may cast the copies"; staticText = "copy each exiled card you own with a kick counter on it. You may cast the copies";
} }
private ChunLiCountlessKicksCastEffect(final ChunLiCountlessKicksCastEffect effect) { private ZethiArcaneBlademasterCastEffect(final ZethiArcaneBlademasterCastEffect effect) {
super(effect); super(effect);
} }
@Override @Override
public ChunLiCountlessKicksCastEffect copy() { public ZethiArcaneBlademasterCastEffect copy() {
return new ChunLiCountlessKicksCastEffect(this); return new ZethiArcaneBlademasterCastEffect(this);
} }
@Override @Override
@ -153,7 +153,7 @@ class ChunLiCountlessKicksCastEffect extends OneShotEffect {
); );
game.getState().setValue("PlayFromNotOwnHandZone" + copiedCard.getId(), null); game.getState().setValue("PlayFromNotOwnHandZone" + copiedCard.getId(), null);
} else { } else {
Logger.getLogger(ChunLiCountlessKicksCastEffect.class).error("Chun Li, Countless Kicks: " Logger.getLogger(ZethiArcaneBlademasterCastEffect.class).error("Chun Li, Countless Kicks: "
+ "spell ability == null " + copiedCard.getName()); + "spell ability == null " + copiedCard.getName());
} }
} }

View file

@ -421,14 +421,14 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Freed from the Real", 425, Rarity.RARE, mage.cards.f.FreedFromTheReal.class)); cards.add(new SetCardInfo("Freed from the Real", 425, Rarity.RARE, mage.cards.f.FreedFromTheReal.class));
cards.add(new SetCardInfo("Boseiju, Who Shelters All", 426, Rarity.RARE, mage.cards.b.BoseijuWhoSheltersAll.class)); cards.add(new SetCardInfo("Boseiju, Who Shelters All", 426, Rarity.RARE, mage.cards.b.BoseijuWhoSheltersAll.class));
cards.add(new SetCardInfo("Hall of the Bandit Lord", 427, Rarity.RARE, mage.cards.h.HallOfTheBanditLord.class)); cards.add(new SetCardInfo("Hall of the Bandit Lord", 427, Rarity.RARE, mage.cards.h.HallOfTheBanditLord.class));
cards.add(new SetCardInfo("E. Honda, Sumo Champion", 428, Rarity.RARE, mage.cards.e.EHondaSumoChampion.class)); cards.add(new SetCardInfo("Baldin, Century Herdmaster", 428, Rarity.RARE, mage.cards.b.BaldinCenturyHerdmaster.class));
cards.add(new SetCardInfo("Ryu, World Warrior", 429, Rarity.RARE, mage.cards.r.RyuWorldWarrior.class)); cards.add(new SetCardInfo("Vikya, Scorching Stalwart", 429, Rarity.RARE, mage.cards.v.VikyaScorchingStalwart.class));
cards.add(new SetCardInfo("Ken, Burning Brawler", 430, Rarity.RARE, mage.cards.k.KenBurningBrawler.class)); cards.add(new SetCardInfo("Aisha of Sparks and Smoke", 430, Rarity.RARE, mage.cards.a.AishaOfSparksAndSmoke.class));
cards.add(new SetCardInfo("Blanka, Ferocious Friend", 431, Rarity.RARE, mage.cards.b.BlankaFerociousFriend.class)); cards.add(new SetCardInfo("The Howling Abomination", 431, Rarity.RARE, mage.cards.t.TheHowlingAbomination.class));
cards.add(new SetCardInfo("Chun-Li, Countless Kicks", 432, Rarity.RARE, mage.cards.c.ChunLiCountlessKicks.class)); cards.add(new SetCardInfo("Zethi, Arcane Blademaster", 432, Rarity.RARE, mage.cards.z.ZethiArcaneBlademaster.class));
cards.add(new SetCardInfo("Dhalsim, Pliable Pacifist", 433, Rarity.RARE, mage.cards.d.DhalsimPliablePacifist.class)); cards.add(new SetCardInfo("Tadeas, Juniper Ascendant", 433, Rarity.RARE, mage.cards.t.TadeasJuniperAscendant.class));
cards.add(new SetCardInfo("Guile, Sonic Soldier", 434, Rarity.RARE, mage.cards.g.GuileSonicSoldier.class)); cards.add(new SetCardInfo("Immard, the Stormcleaver", 434, Rarity.RARE, mage.cards.i.ImmardTheStormcleaver.class));
cards.add(new SetCardInfo("Zangief, the Red Cyclone", 435, Rarity.RARE, mage.cards.z.ZangiefTheRedCyclone.class)); cards.add(new SetCardInfo("Maarika, Brutal Gladiator", 435, Rarity.RARE, mage.cards.m.MaarikaBrutalGladiator.class));
cards.add(new SetCardInfo("Windbrisk Heights", 436, Rarity.RARE, mage.cards.w.WindbriskHeights.class)); cards.add(new SetCardInfo("Windbrisk Heights", 436, Rarity.RARE, mage.cards.w.WindbriskHeights.class));
cards.add(new SetCardInfo("Shelldock Isle", 437, Rarity.RARE, mage.cards.s.ShelldockIsle.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Shelldock Isle", 437, Rarity.RARE, mage.cards.s.ShelldockIsle.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Howltooth Hollow", 438, Rarity.RARE, mage.cards.h.HowltoothHollow.class)); cards.add(new SetCardInfo("Howltooth Hollow", 438, Rarity.RARE, mage.cards.h.HowltoothHollow.class));

View file

@ -21,15 +21,23 @@ public final class UniversesWithin extends ExpansionSet {
this.hasBasicLands = false; this.hasBasicLands = false;
this.hasBoosters = false; this.hasBoosters = false;
cards.add(new SetCardInfo("Aisha of Sparks and Smoke", 12, Rarity.RARE, mage.cards.a.AishaOfSparksAndSmoke.class));
cards.add(new SetCardInfo("Arvinox, the Mind Flail", 1, Rarity.MYTHIC, mage.cards.a.ArvinoxTheMindFlail.class)); cards.add(new SetCardInfo("Arvinox, the Mind Flail", 1, Rarity.MYTHIC, mage.cards.a.ArvinoxTheMindFlail.class));
cards.add(new SetCardInfo("Baldin, Century Herdmaster", 10, Rarity.RARE, mage.cards.b.BaldinCenturyHerdmaster.class));
cards.add(new SetCardInfo("Bjorna, Nightfall Alchemist", 2, Rarity.RARE, mage.cards.b.BjornaNightfallAlchemist.class)); cards.add(new SetCardInfo("Bjorna, Nightfall Alchemist", 2, Rarity.RARE, mage.cards.b.BjornaNightfallAlchemist.class));
cards.add(new SetCardInfo("Cecily, Haunted Mage", 3, Rarity.RARE, mage.cards.c.CecilyHauntedMage.class)); cards.add(new SetCardInfo("Cecily, Haunted Mage", 3, Rarity.RARE, mage.cards.c.CecilyHauntedMage.class));
cards.add(new SetCardInfo("Elmar, Ulvenwald Informant", 4, Rarity.RARE, mage.cards.e.ElmarUlvenwaldInformant.class)); cards.add(new SetCardInfo("Elmar, Ulvenwald Informant", 4, Rarity.RARE, mage.cards.e.ElmarUlvenwaldInformant.class));
cards.add(new SetCardInfo("Hargilde, Kindly Runechanter", 5, Rarity.RARE, mage.cards.h.HargildeKindlyRunechanter.class)); cards.add(new SetCardInfo("Hargilde, Kindly Runechanter", 5, Rarity.RARE, mage.cards.h.HargildeKindlyRunechanter.class));
cards.add(new SetCardInfo("Havengul Laboratory", 9, Rarity.RARE, mage.cards.h.HavengulLaboratory.class)); cards.add(new SetCardInfo("Havengul Laboratory", 9, Rarity.RARE, mage.cards.h.HavengulLaboratory.class));
cards.add(new SetCardInfo("Havengul Mystery", 9, Rarity.RARE, mage.cards.h.HavengulMystery.class)); cards.add(new SetCardInfo("Havengul Mystery", 9, Rarity.RARE, mage.cards.h.HavengulMystery.class));
cards.add(new SetCardInfo("Immard, the Stormcleaver", 14, Rarity.RARE, mage.cards.i.ImmardTheStormcleaver.class));
cards.add(new SetCardInfo("Maarika, Brutal Gladiator", 15, Rarity.RARE, mage.cards.m.MaarikaBrutalGladiator.class));
cards.add(new SetCardInfo("Othelm, Sigardian Outcast", 6, Rarity.RARE, mage.cards.o.OthelmSigardianOutcast.class)); cards.add(new SetCardInfo("Othelm, Sigardian Outcast", 6, Rarity.RARE, mage.cards.o.OthelmSigardianOutcast.class));
cards.add(new SetCardInfo("Sophina, Spearsage Deserter", 7, Rarity.RARE, mage.cards.s.SophinaSpearsageDeserter.class)); cards.add(new SetCardInfo("Sophina, Spearsage Deserter", 7, Rarity.RARE, mage.cards.s.SophinaSpearsageDeserter.class));
cards.add(new SetCardInfo("Tadeas, Juniper Ascendant", 16, Rarity.RARE, mage.cards.t.TadeasJuniperAscendant.class));
cards.add(new SetCardInfo("The Howling Abomination", 13, Rarity.RARE, mage.cards.t.TheHowlingAbomination.class));
cards.add(new SetCardInfo("Vikya, Scorching Stalwart", 11, Rarity.RARE, mage.cards.v.VikyaScorchingStalwart.class));
cards.add(new SetCardInfo("Wernog, Rider's Chaplain", 8, Rarity.RARE, mage.cards.w.WernogRidersChaplain.class)); cards.add(new SetCardInfo("Wernog, Rider's Chaplain", 8, Rarity.RARE, mage.cards.w.WernogRidersChaplain.class));
cards.add(new SetCardInfo("Zethi, Arcane Blademaster", 17, Rarity.RARE, mage.cards.z.ZethiArcaneBlademaster.class));
} }
} }