Merge branch 'sliver' into 'master'

Fix Dementia Sliver

See merge request core-developers/forge!6069
This commit is contained in:
Michael Kamensky
2022-01-23 04:58:25 +00:00
10 changed files with 16 additions and 16 deletions

View File

@@ -43,7 +43,7 @@ public class DamagePreventAi extends SpellAbilityAi {
final TargetRestrictions tgt = sa.getTargetRestrictions();
if (tgt == null) {
// As far as I can tell these Defined Cards will only have one of them
final List<GameObject> objects = AbilityUtils.getDefinedObjects(sa.getHostCard(), sa.getParam("Defined"), sa);
final List<GameObject> objects = AbilityUtils.getDefinedObjects(hostCard, sa.getParam("Defined"), sa);
// react to threats on the stack
if (!game.getStack().isEmpty()) {
@@ -138,7 +138,7 @@ public class DamagePreventAi extends SpellAbilityAi {
}
}
if (sa.usesTargeting() && sa.isDividedAsYouChoose() && !sa.getTargets().isEmpty()) {
sa.addDividedAllocation(sa.getTargets().get(0), AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("Amount"), sa));
sa.addDividedAllocation(sa.getTargets().get(0), AbilityUtils.calculateAmount(hostCard, sa.getParam("Amount"), sa));
}
return chance;

View File

@@ -476,10 +476,10 @@ public class CountersPutEffect extends SpellAbilityEffect {
// these trigger are one per counter
for (int i = 0; i < added; i++) {
final Trigger trig = TriggerHandler.parseTrigger(delTrig.toString(), sa.getHostCard(), intrinsic);
final Trigger trig = TriggerHandler.parseTrigger(delTrig.toString(), host, intrinsic);
trig.addRemembered(tgt);
final SpellAbility newSa = AbilityFactory.getAbility(trigSA, sa.getHostCard());
final SpellAbility newSa = AbilityFactory.getAbility(trigSA, host);
newSa.setIntrinsic(intrinsic);
trig.setOverridingAbility(newSa);
sa.getActivatingPlayer().getGame().getTriggerHandler().registerDelayedTrigger(trig);

View File

@@ -79,7 +79,7 @@ public class CountersRemoveAllEffect extends SpellAbilityEffect {
}
}
if (sa.hasParam("RememberAmount")) {
sa.getHostCard().setChosenNumber(numberRemoved);
sa.getHostCard().addRemembered(Integer.valueOf(numberRemoved));
}
}
}

View File

@@ -67,6 +67,7 @@ public class MustAttackEffect extends SpellAbilityEffect {
}
}
// TODO these should not override but add another requirement
for (final Player p : tgtPlayers) {
if ((tgt == null) || p.canBeTargetedBy(sa)) {
if (thisTurn) {

View File

@@ -65,7 +65,6 @@ public class MustBlockEffect extends SpellAbilityEffect {
} else {
final Card attacker = cards.get(0);
c.addMustBlockCard(attacker);
System.out.println(c + " is adding " + attacker + " to mustBlockCards: " + c.getMustBlockCards());
}
}
}

View File

@@ -1477,7 +1477,7 @@ public class CardFactoryUtil {
"TgtPrompt$ Select target artifact creature | CounterType$ P1P1 | CounterNum$ ModularX | Modular$ True";
String trigStr = "Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard" +
" | OptionalDecider$ TriggeredCardController | TriggerController$ TriggeredCardController" +
" | OptionalDecider$ TriggeredCardController" +
" | Secondary$ True | TriggerDescription$ When CARDNAME dies, " +
"you may put a +1/+1 counter on target artifact creature for each +1/+1 counter on CARDNAME";
@@ -1784,8 +1784,7 @@ public class CardFactoryUtil {
final String actualTrigger = "Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard"
+ "| Secondary$ True | OptionalDecider$ You | ValidCard$ Card.Self"
+ "| TriggerController$ TriggeredCardController | TriggerDescription$ " + k[0] + " " + k[1]
+ " (" + inst.getReminderText() + ")";
+ "| TriggerDescription$ " + k[0] + " " + k[1] + " (" + inst.getReminderText() + ")";
final String effect = "DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand"
+ "| ValidTgts$ Spirit.YouOwn+cmcLE" + k[1];
final Trigger parsedTrigger = TriggerHandler.parseTrigger(actualTrigger, card, intrinsic);

View File

@@ -870,7 +870,7 @@ public final class StaticAbilityContinuous {
// but only do it if the trigger doesn't already have a overriding ability
addedTrigger.add(actualTrigger);
if (params.containsKey("TriggerRememberDefined")) {
String triggerRemembered = (params.get("TriggerRememberDefined"));
String triggerRemembered = params.get("TriggerRememberDefined");
for (final String rem : triggerRemembered.split(",")) {
for (final Object o : AbilityUtils.getDefinedEntities(hostCard, rem, stAb)) {
actualTrigger.addRemembered(o);

View File

@@ -17,15 +17,15 @@ public class StaticAbilityIgnoreHexproofShroud {
final Game game = entity.getGame();
for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) {
for (final StaticAbility stAb : ca.getStaticAbilities()) {
if (stAb.isSuppressed() || !stAb.checkConditions()) {
continue;
}
if (keyword.equals(Keyword.HEXPROOF) && !stAb.getParam("Mode").equals(HEXPROOF_MODE)) {
continue;
}
if (keyword.equals(Keyword.SHROUD) && !stAb.getParam("Mode").equals(SHROUD_MODE)) {
continue;
}
if (stAb.isSuppressed() || !stAb.checkConditions()) {
continue;
}
if (commonAbility(stAb, entity, spellAbility)) {
return true;
}

View File

@@ -4,8 +4,9 @@ Types:Creature Sliver
PT:3/3
S:Mode$ Continuous | Affected$ Sliver | AddAbility$ ABDementiaNameCard | AddSVar$ DBDementiaReveal & DBDementiaDiscard | Description$ All Slivers have "{T}: Choose a card name. Target opponent reveals a card at random from their hand. If that card has the chosen name, that player discards it. Activate only during your turn."
SVar:ABDementiaNameCard:AB$ NameCard | Cost$ T | Defined$ You | SubAbility$ DBDementiaReveal | SpellDescription$ Choose a card name. Target opponent reveals a card at random from their hand. If that card has the chosen name, that player discards it. Activate only during your turn.
SVar:DBDementiaReveal:DB$ Reveal | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | Random$ True | PlayerTurn$ True | SubAbility$ DBDementiaDiscard
SVar:DBDementiaDiscard:DB$ Discard | DiscardValid$ Card.NamedCard | Mode$ TgtChoose | Defined$ Targeted
SVar:DBDementiaReveal:DB$ Reveal | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | Random$ True | PlayerTurn$ True | RememberRevealed$ True | SubAbility$ DBDementiaDiscard
SVar:DBDementiaDiscard:DB$ Discard | DiscardValid$ Card.NamedCard+IsRemembered | Mode$ TgtChoose | Defined$ Targeted | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
AI:RemoveDeck:All
AI:RemoveDeck:Random
SVar:Picture:http://www.wizards.com/global/images/magic/general/dementia_sliver.jpg

View File

@@ -7,7 +7,7 @@ K:ETBReplacement:Other:DBRemoveCounterAll
SVar:DBRemoveCounterAll:DB$ RemoveCounterAll | ValidCards$ Permanent | AllCounterTypes$ True | StackDescription$ SpellDescription | SubAbility$ DBPutCounters | RememberAmount$ True | SpellDescription$ As CARDNAME enters the battlefield, remove all counters from all permanents. CARDNAME enters the battlefield with a +1/+1 counter on it for each counter removed this way.
SVar:DBPutCounters:DB$ PutCounter | ETB$ True | Defined$ Self | CounterType$ P1P1 | CounterNum$ X | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Count$ChosenNumber
SVar:X:Count$RememberedNumber
AI:RemoveDeck:Random
DeckHas:Ability$Counters
Oracle:Flying\nAs Thief of Blood enters the battlefield, remove all counters from all permanents. Thief of Blood enters the battlefield with a +1/+1 counter on it for each counter removed this way.