mirror of
https://github.com/magefree/mage.git
synced 2026-01-09 20:32:06 -08:00
[TDM] Implement Betor, Kin to All (#13508)
* Implemented Betor, Kin to All * intervenening if in ability * update betor * reduce ident
This commit is contained in:
parent
504a2c2bf8
commit
db8102a94c
2 changed files with 171 additions and 3 deletions
165
Mage.Sets/src/mage/cards/b/BetorKinToAll.java
Normal file
165
Mage.Sets/src/mage/cards/b/BetorKinToAll.java
Normal file
|
|
@ -0,0 +1,165 @@
|
|||
package mage.cards.b;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.MageObject;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.hint.Hint;
|
||||
import mage.abilities.hint.ValueHint;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author androosss
|
||||
*/
|
||||
public final class BetorKinToAll extends CardImpl {
|
||||
|
||||
private static final Hint hint = new ValueHint(
|
||||
"Total toughness of creatures you control", ControlledCreaturesToughnessValue.instance);
|
||||
|
||||
public BetorKinToAll(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[] { CardType.CREATURE }, "{2}{W}{B}{G}");
|
||||
|
||||
this.supertype.add(SuperType.LEGENDARY);
|
||||
this.subtype.add(SubType.SPIRIT);
|
||||
this.subtype.add(SubType.DRAGON);
|
||||
this.power = new MageInt(5);
|
||||
this.toughness = new MageInt(7);
|
||||
|
||||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// At the beginning of your end step, if creatures you control have total
|
||||
// toughness 10 or greater, draw a card. Then if creatures you control have
|
||||
// total toughness 20 or greater, untap each creature you control. Then if
|
||||
// creatures you control have total toughness 40 or greater, each opponent loses
|
||||
// half their life, rounded up.
|
||||
Ability betorAbility = new BeginningOfEndStepTriggeredAbility(new DrawCardSourceControllerEffect(1))
|
||||
.withInterveningIf(BetorKinToAllCondition.instance).addHint(hint);
|
||||
betorAbility.addEffect(new BetorKinToAllEffect());
|
||||
this.addAbility(betorAbility);
|
||||
}
|
||||
|
||||
private BetorKinToAll(final BetorKinToAll card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BetorKinToAll copy() {
|
||||
return new BetorKinToAll(this);
|
||||
}
|
||||
}
|
||||
|
||||
enum BetorKinToAllCondition implements Condition {
|
||||
instance;
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
return ControlledCreaturesToughnessValue.instance.calculate(game, source, null) >= 10;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class BetorKinToAllEffect extends OneShotEffect {
|
||||
|
||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent();
|
||||
|
||||
BetorKinToAllEffect() {
|
||||
super(Outcome.Benefit);
|
||||
this.staticText = "Then if creatures you control have total toughness 20 or greater, untap each creature you control. Then if creatures you control have total toughness 40 or greater, each opponent loses half their life, rounded up.";
|
||||
}
|
||||
|
||||
private BetorKinToAllEffect(final BetorKinToAllEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BetorKinToAllEffect copy() {
|
||||
return new BetorKinToAllEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
int sumToughness = ControlledCreaturesToughnessValue.instance.calculate(game, source, null);
|
||||
|
||||
if (sumToughness < 20) {
|
||||
return true;
|
||||
}
|
||||
for (Permanent permanent : game.getBattlefield().getAllActivePermanents(filter, source.getControllerId(),
|
||||
game)) {
|
||||
permanent.untap(game);
|
||||
}
|
||||
|
||||
if (sumToughness < 40) {
|
||||
return true;
|
||||
}
|
||||
|
||||
for (UUID playerId : game.getOpponents(controller.getId())) {
|
||||
Player opponent = game.getPlayer(playerId);
|
||||
if (opponent == null) {
|
||||
continue;
|
||||
}
|
||||
int amount = (int) Math.ceil(opponent.getLife() / 2f);
|
||||
if (amount > 0) {
|
||||
opponent.loseLife(amount, game, source, false);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
enum ControlledCreaturesToughnessValue implements DynamicValue {
|
||||
instance;
|
||||
|
||||
@Override
|
||||
public int calculate(Game game, Ability sourceAbility, Effect effect) {
|
||||
return game
|
||||
.getBattlefield()
|
||||
.getActivePermanents(
|
||||
StaticFilters.FILTER_CONTROLLED_CREATURE,
|
||||
sourceAbility.getControllerId(), sourceAbility, game)
|
||||
.stream()
|
||||
.map(MageObject::getToughness)
|
||||
.mapToInt(MageInt::getValue)
|
||||
.sum();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ControlledCreaturesToughnessValue copy() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return "total toughness of creatures you control";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "X";
|
||||
}
|
||||
}
|
||||
|
|
@ -1,12 +1,12 @@
|
|||
package mage.sets;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import mage.cards.ExpansionSet;
|
||||
import mage.constants.Rarity;
|
||||
import mage.constants.SetType;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
|
|
@ -43,6 +43,9 @@ public final class TarkirDragonstorm extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Awaken the Honored Dead", 170, Rarity.RARE, mage.cards.a.AwakenTheHonoredDead.class));
|
||||
cards.add(new SetCardInfo("Barrensteppe Siege", 171, Rarity.RARE, mage.cards.b.BarrensteppeSiege.class));
|
||||
cards.add(new SetCardInfo("Bearer of Glory", 4, Rarity.COMMON, mage.cards.b.BearerOfGlory.class));
|
||||
cards.add(new SetCardInfo("Betor, Kin to All", 172, Rarity.MYTHIC, mage.cards.b.BetorKinToAll.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Betor, Kin to All", 308, Rarity.MYTHIC, mage.cards.b.BetorKinToAll.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Betor, Kin to All", 353, Rarity.MYTHIC, mage.cards.b.BetorKinToAll.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Bewildering Blizzard", 38, Rarity.UNCOMMON, mage.cards.b.BewilderingBlizzard.class));
|
||||
cards.add(new SetCardInfo("Bloodfell Caves", 250, Rarity.COMMON, mage.cards.b.BloodfellCaves.class));
|
||||
cards.add(new SetCardInfo("Bloomvine Regent", 136, Rarity.RARE, mage.cards.b.BloomvineRegent.class));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue