* Kicker abilities - fixed that some cards don't see kicked status of multikicker spells (example: Hallar, the Firefletcher, #4895);

This commit is contained in:
Oleg Agafonov 2020-12-15 21:00:39 +04:00
parent 4d362d7edc
commit 0c2c33e940
6 changed files with 99 additions and 17 deletions

View file

@ -278,6 +278,39 @@ public class KickerTest extends CardTestPlayerBase {
assertGraveyardCount(playerA, "Sunscape Battlemage", 1);
}
@Test
public void test_Conditional_TriggeredAbilityMustSeeMultikickedStatus() {
// bug:
// Hallar Not Procing Right: When I kick Thornscape Battlemage it doesn't proc Hallar effect for some reason.
// I tried this 3 times and it never triggered properly.
// Kicker {R} and/or {W} (You may pay an additional {R} and/or {W} as you cast this spell.)
// When Thornscape Battlemage enters the battlefield, if it was kicked with its {R} kicker, it deals 2 damage to any target.
// When Thornscape Battlemage enters the battlefield, if it was kicked with its {W} kicker, destroy target artifact.
addCard(Zone.HAND, playerA, "Thornscape Battlemage", 1); // {2}{G}
addCard(Zone.BATTLEFIELD, playerA, "Forest", 3);
addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1);
//
// Whenever you cast a spell, if that spell was kicked, put a +1/+1 counter on Hallar, the Firefletcher,
// then Hallar deals damage equal to the number of +1/+1 counters on it to each opponent.
addCard(Zone.BATTLEFIELD, playerA, "Hallar, the Firefletcher", 1);
// cast kicked spell
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Thornscape Battlemage");
setChoice(playerA, "Yes"); // use kicker {R} - 2 damage to any target
setChoice(playerA, "No"); // not use kicker {W} - destroy target
addTarget(playerA, playerB); // target for 2 damage
setChoice(playerA, "Yes"); // put counter on hallar
setStrictChooseMode(true);
setStopAt(1, PhaseStep.BEGIN_COMBAT);
execute();
assertAllCommandsUsed();
assertCounterCount(playerA, "Hallar, the Firefletcher", CounterType.P1P1, 1);
assertLife(playerB, 20 - 2 - 1); // 2 damage from kicked spell, 1 damage from hallar's trigger
}
@Test
public void test_ZCC_ReturnedPermanentMustNotBeKicked() {
// bug:

View file

@ -1869,6 +1869,20 @@ public class TestPlayer implements Player {
printAbilities(game, computerPlayer.getPlayable(game, true));
printEnd();
}
if (choiceType.equals("choice")) {
printStart("Unused choices");
if (!choices.isEmpty()) {
System.out.println(String.join("\n", choices));
}
printEnd();
}
if (choiceType.equals("target")) {
printStart("Unused targets");
if (targets.isEmpty()) {
System.out.println(String.join("\n", targets));
}
printEnd();
}
Assert.fail("Missing " + choiceType.toUpperCase(Locale.ENGLISH) + " def for"
+ " turn " + game.getTurnNum()
+ ", step " + (game.getStep() != null ? game.getStep().getType().name() : "not started")