mirror of
https://github.com/correl/mage.git
synced 2024-11-15 03:00:16 +00:00
[LGN] fixed Berserk Murlodont not functioning correctly (fixes #7801)
This commit is contained in:
parent
ff64cb0cec
commit
6bb474a6d0
11 changed files with 88 additions and 63 deletions
|
@ -39,7 +39,7 @@ public final class AsajjVentress extends CardImpl {
|
|||
this.addAbility(DoubleStrikeAbility.getInstance());
|
||||
|
||||
// When Asajj Ventress becomes blocked, she gets +1/+1 for each creature blocking her until end of turn.
|
||||
BlockedCreatureCount value = new BlockedCreatureCount();
|
||||
BlockedCreatureCount value = BlockedCreatureCount.ALL;
|
||||
Effect effect = new BoostSourceEffect(value, value, Duration.EndOfTurn, true);
|
||||
effect.setText("she gets +1/+1 for each creature blocking her until end of turn");
|
||||
this.addAbility(new BecomesBlockedSourceTriggeredAbility(effect, false));
|
||||
|
|
|
@ -46,7 +46,7 @@ public final class BeastmastersMagemark extends CardImpl {
|
|||
ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostAllEffect(1, 1, Duration.WhileOnBattlefield, filter, false));
|
||||
this.addAbility(ability);
|
||||
// Whenever a creature you control that's enchanted becomes blocked, it gets +1/+1 until end of turn for each creature blocking it.
|
||||
BlockedCreatureCount value = new BlockedCreatureCount();
|
||||
BlockedCreatureCount value = BlockedCreatureCount.ALL;
|
||||
Effect effect = new BoostSourceEffect(value, value, Duration.EndOfTurn, true);
|
||||
effect.setText("it gets +1/+1 until end of turn for each creature blocking it");
|
||||
this.addAbility(new BecomesBlockedAllTriggeredAbility(effect, false, filter, false));
|
||||
|
|
|
@ -1,42 +1,42 @@
|
|||
|
||||
package mage.cards.b;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.BecomesBlockedAllTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.common.BlockedCreatureCount;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
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.filter.common.FilterCreaturePermanent;
|
||||
import mage.game.Game;
|
||||
import mage.game.combat.CombatGroup;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Markedagain
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class BerserkMurlodont extends CardImpl {
|
||||
|
||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a Beast");
|
||||
|
||||
static {
|
||||
filter.add(SubType.BEAST.getPredicate());
|
||||
}
|
||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(SubType.BEAST, "a Beast");
|
||||
|
||||
public BerserkMurlodont(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{G}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}");
|
||||
this.subtype.add(SubType.BEAST);
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// Whenever a Beast becomes blocked, it gets +1/+1 until end of turn for each creature blocking it.
|
||||
BlockedCreatureCount value = new BlockedCreatureCount();
|
||||
Effect effect = new BoostSourceEffect(value, value, Duration.EndOfTurn, true);
|
||||
effect.setText("it gets +1/+1 until end of turn for each creature blocking it");
|
||||
this.addAbility(new BecomesBlockedAllTriggeredAbility(effect, false, filter, false));
|
||||
this.addAbility(new BecomesBlockedAllTriggeredAbility(
|
||||
new BerserkMurlodontEffect(), false, filter, false
|
||||
));
|
||||
}
|
||||
|
||||
private BerserkMurlodont(final BerserkMurlodont card) {
|
||||
|
@ -48,3 +48,40 @@ public final class BerserkMurlodont extends CardImpl {
|
|||
return new BerserkMurlodont(this);
|
||||
}
|
||||
}
|
||||
|
||||
class BerserkMurlodontEffect extends OneShotEffect {
|
||||
|
||||
BerserkMurlodontEffect() {
|
||||
super(Outcome.Benefit);
|
||||
staticText = "it gets +1/+1 until end of turn for each creature blocking it";
|
||||
}
|
||||
|
||||
private BerserkMurlodontEffect(final BerserkMurlodontEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BerserkMurlodontEffect copy() {
|
||||
return new BerserkMurlodontEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source));
|
||||
if (permanent == null) {
|
||||
return false;
|
||||
}
|
||||
int blockers = game
|
||||
.getCombat()
|
||||
.getGroups()
|
||||
.stream()
|
||||
.filter(combatGroup -> combatGroup.getAttackers().contains(permanent.getId()))
|
||||
.map(CombatGroup::getBlockers)
|
||||
.mapToInt(List::size)
|
||||
.sum();
|
||||
game.addEffect(new BoostTargetEffect(
|
||||
blockers, blockers, Duration.EndOfTurn
|
||||
).setTargetPointer(new FixedTarget(permanent, game)), source);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,7 +27,7 @@ public final class ElvishBerserker extends CardImpl {
|
|||
this.toughness = new MageInt(1);
|
||||
|
||||
// Whenever Elvish Berserker becomes blocked, it gets +1/+1 until end of turn for each creature blocking it.
|
||||
BlockedCreatureCount value = new BlockedCreatureCount();
|
||||
BlockedCreatureCount value = BlockedCreatureCount.ALL;
|
||||
Effect effect = new BoostSourceEffect(value, value, Duration.EndOfTurn, true);
|
||||
effect.setText("it gets +1/+1 until end of turn for each creature blocking it");
|
||||
this.addAbility(new BecomesBlockedSourceTriggeredAbility(effect, false));
|
||||
|
|
|
@ -30,7 +30,7 @@ public final class GangOfElk extends CardImpl {
|
|||
this.toughness = new MageInt(4);
|
||||
|
||||
// Whenever Gang of Elk becomes blocked, it gets +2/+2 until end of turn for each creature blocking it.
|
||||
DynamicValue value = new MultipliedValue(new BlockedCreatureCount(), 2);
|
||||
DynamicValue value = new MultipliedValue(BlockedCreatureCount.ALL, 2);
|
||||
Effect effect = new BoostSourceEffect(value, value, Duration.EndOfTurn, true);
|
||||
effect.setText("it gets +2/+2 until end of turn for each creature blocking it");
|
||||
this.addAbility(new BecomesBlockedSourceTriggeredAbility(effect, false));
|
||||
|
|
|
@ -1,37 +1,37 @@
|
|||
|
||||
package mage.cards.j;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.BecomesBlockedSourceTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.MultipliedValue;
|
||||
import mage.abilities.dynamicvalue.common.BlockedCreatureCount;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public final class JohtullWurm extends CardImpl {
|
||||
|
||||
private static final DynamicValue xValue1 = new MultipliedValue(BlockedCreatureCount.BEYOND_FIRST, -2);
|
||||
private static final DynamicValue xValue2 = new MultipliedValue(BlockedCreatureCount.BEYOND_FIRST, -1);
|
||||
|
||||
public JohtullWurm(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{5}{G}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{G}");
|
||||
this.subtype.add(SubType.WURM);
|
||||
this.power = new MageInt(6);
|
||||
this.toughness = new MageInt(6);
|
||||
|
||||
// Whenever Johtull Wurm becomes blocked, it gets -2/-1 until end of turn for each creature blocking it beyond the first.
|
||||
DynamicValue blockedCreatureCount = new BlockedCreatureCount("each creature blocking it beyond the first", true);
|
||||
Effect effect = new BoostSourceEffect(new MultipliedValue(blockedCreatureCount, -2), new MultipliedValue(blockedCreatureCount, -1), Duration.EndOfTurn, true);
|
||||
effect.setText("it gets -2/-1 until end of turn for each creature blocking it beyond the first");
|
||||
this.addAbility(new BecomesBlockedSourceTriggeredAbility(effect, false));
|
||||
this.addAbility(new BecomesBlockedSourceTriggeredAbility(new BoostSourceEffect(
|
||||
xValue2, xValue1, Duration.EndOfTurn, true
|
||||
).setText("it gets -2/-1 until end of turn for each creature blocking it beyond the first"), false));
|
||||
}
|
||||
|
||||
private JohtullWurm(final JohtullWurm card) {
|
||||
|
|
|
@ -20,7 +20,7 @@ import java.util.UUID;
|
|||
public final class JungleWurm extends CardImpl {
|
||||
|
||||
private static final DynamicValue xValue = new MultipliedValue(
|
||||
new BlockedCreatureCount("", true), -1
|
||||
BlockedCreatureCount.BEYOND_FIRST, -1
|
||||
);
|
||||
|
||||
public JungleWurm(UUID ownerId, CardSetInfo setInfo) {
|
||||
|
|
|
@ -29,7 +29,7 @@ public final class RabidElephant extends CardImpl {
|
|||
this.toughness = new MageInt(4);
|
||||
|
||||
// Whenever Rabid Elephant becomes blocked, it gets +2/+2 until end of turn for each creature blocking it.
|
||||
DynamicValue value = new MultipliedValue(new BlockedCreatureCount(), 2);
|
||||
DynamicValue value = new MultipliedValue(BlockedCreatureCount.ALL, 2);
|
||||
Effect effect = new BoostSourceEffect(value, value, Duration.EndOfTurn, true);
|
||||
effect.setText("it gets +2/+2 until end of turn for each creature blocking it");
|
||||
this.addAbility(new BecomesBlockedSourceTriggeredAbility(effect, false));
|
||||
|
|
|
@ -26,7 +26,7 @@ public final class SparringGolem extends CardImpl {
|
|||
this.toughness = new MageInt(2);
|
||||
|
||||
// Whenever Sparring Golem becomes blocked, it gets +1/+1 until end of turn for each creature blocking it.
|
||||
BlockedCreatureCount value = new BlockedCreatureCount();
|
||||
BlockedCreatureCount value = BlockedCreatureCount.ALL;
|
||||
Effect effect = new BoostSourceEffect(value, value, Duration.EndOfTurn, true);
|
||||
effect.setText("it gets +1/+1 until end of turn for each creature blocking it");
|
||||
this.addAbility(new BecomesBlockedSourceTriggeredAbility(effect, false));
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
|
||||
package mage.abilities.common;
|
||||
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
|
@ -11,16 +11,15 @@ import mage.game.permanent.Permanent;
|
|||
import mage.target.targetpointer.FixedTarget;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public class BecomesBlockedAllTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
private FilterCreaturePermanent filter;
|
||||
private boolean setTargetPointer;
|
||||
private final FilterCreaturePermanent filter;
|
||||
private final boolean setTargetPointer;
|
||||
|
||||
public BecomesBlockedAllTriggeredAbility(Effect effect, boolean optional) {
|
||||
this(effect, optional, new FilterCreaturePermanent("a creature"), false);
|
||||
this(effect, optional, StaticFilters.FILTER_PERMANENT_CREATURE_A, false);
|
||||
}
|
||||
|
||||
public BecomesBlockedAllTriggeredAbility(Effect effect, boolean optional, FilterCreaturePermanent filter, boolean setTargetPointer) {
|
||||
|
@ -45,7 +44,7 @@ public class BecomesBlockedAllTriggeredAbility extends TriggeredAbilityImpl {
|
|||
Permanent permanent = game.getPermanent(event.getTargetId());
|
||||
if (filter.match(permanent, getSourceId(), getControllerId(), game)) {
|
||||
if (setTargetPointer) {
|
||||
this.getEffects().setTargetPointer(new FixedTarget(event.getTargetId()));
|
||||
this.getEffects().setTargetPointer(new FixedTarget(event.getTargetId(), game));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -10,47 +10,36 @@ import mage.game.combat.CombatGroup;
|
|||
/**
|
||||
* @author Markedagain
|
||||
*/
|
||||
public class BlockedCreatureCount implements DynamicValue {
|
||||
public enum BlockedCreatureCount implements DynamicValue {
|
||||
ALL("each creature blocking it", false),
|
||||
BEYOND_FIRST("each creature blocking it beyond the first", true);
|
||||
|
||||
private final String message;
|
||||
private final boolean beyondTheFirst;
|
||||
|
||||
public BlockedCreatureCount() {
|
||||
this("each creature blocking it");
|
||||
}
|
||||
|
||||
public BlockedCreatureCount(String message) {
|
||||
this(message, false);
|
||||
}
|
||||
|
||||
public BlockedCreatureCount(String message, boolean beyondTheFirst) {
|
||||
BlockedCreatureCount(String message, boolean beyondTheFirst) {
|
||||
this.message = message;
|
||||
this.beyondTheFirst = beyondTheFirst;
|
||||
}
|
||||
|
||||
public BlockedCreatureCount(final BlockedCreatureCount dynamicValue) {
|
||||
super();
|
||||
this.message = dynamicValue.message;
|
||||
this.beyondTheFirst = dynamicValue.beyondTheFirst;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int calculate(Game game, Ability sourceAbility, Effect effect) {
|
||||
for (CombatGroup combatGroup : game.getCombat().getGroups()) {
|
||||
if (combatGroup.getAttackers().contains(sourceAbility.getSourceId())) {
|
||||
int blockers = combatGroup.getBlockers().size();
|
||||
if (beyondTheFirst) {
|
||||
blockers = blockers > 0 ? blockers - 1 : 0;
|
||||
}
|
||||
return blockers;
|
||||
if (!combatGroup.getAttackers().contains(sourceAbility.getSourceId())) {
|
||||
continue;
|
||||
}
|
||||
int blockers = combatGroup.getBlockers().size();
|
||||
if (beyondTheFirst) {
|
||||
blockers = blockers > 0 ? blockers - 1 : 0;
|
||||
}
|
||||
return blockers;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockedCreatureCount copy() {
|
||||
return new BlockedCreatureCount(this);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Reference in a new issue