From c7f2263ddbb5fe172be1d7df273e2849b69c603e Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Sat, 7 Jun 2025 21:02:26 -0400 Subject: [PATCH] Update rules for Sagas (#13728) * update saga rules * update test * update test --- .../mage/test/cards/enchantments/SagaTest.java | 16 ++++++++++++---- Mage/src/main/java/mage/game/GameImpl.java | 4 ++-- .../java/mage/game/turn/PreCombatMainStep.java | 3 +++ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/enchantments/SagaTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/enchantments/SagaTest.java index 25d12b4ea0e..0218ceb7a94 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/enchantments/SagaTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/enchantments/SagaTest.java @@ -1,5 +1,8 @@ package org.mage.test.cards.enchantments; +import mage.abilities.common.SagaAbility; +import mage.abilities.mana.ColorlessManaAbility; +import mage.abilities.mana.RedManaAbility; import mage.constants.PhaseStep; import mage.constants.Zone; import mage.counters.CounterType; @@ -148,8 +151,10 @@ public class SagaTest extends CardTestPlayerBase { setStopAt(1, PhaseStep.END_TURN); execute(); - assertPermanentCount(playerA, saga, 0); - assertGraveyardCount(playerA, saga, 1); + assertGraveyardCount(playerA, saga, 0); + assertAbilityCount(playerA, saga, ColorlessManaAbility.class, 1); + assertAbilityCount(playerA, saga, RedManaAbility.class, 1); + assertAbilityCount(playerA, saga, SagaAbility.class, 0); assertPermanentCount(playerA, moon, 1); } @@ -171,8 +176,11 @@ public class SagaTest extends CardTestPlayerBase { setStopAt(1, PhaseStep.END_TURN); execute(); - assertPermanentCount(playerA, saga, 0); - assertGraveyardCount(playerA, saga, 1); + assertGraveyardCount(playerA, saga, 0); + // TODO: This should be 0 but the ability still triggers due to blood moon issues + // assertAbilityCount(playerA, saga, ColorlessManaAbility.class, 0); + assertAbilityCount(playerA, saga, RedManaAbility.class, 1); + assertAbilityCount(playerA, saga, SagaAbility.class, 0); assertPermanentCount(playerA, moon, 1); } diff --git a/Mage/src/main/java/mage/game/GameImpl.java b/Mage/src/main/java/mage/game/GameImpl.java index 4b80538a332..06932787520 100644 --- a/Mage/src/main/java/mage/game/GameImpl.java +++ b/Mage/src/main/java/mage/game/GameImpl.java @@ -2711,9 +2711,9 @@ public abstract class GameImpl implements Game { .add(perm); } } - // 704.5s If the number of lore counters on a Saga permanent is greater than or equal to its final chapter number + // 704.5s If the number of lore counters on a Saga permanent with one or more chapter abilities is greater than or equal to its final chapter number // and it isn't the source of a chapter ability that has triggered but not yet left the stack, that Saga's controller sacrifices it. - if (perm.hasSubtype(SubType.SAGA, this)) { + if (perm.hasSubtype(SubType.SAGA, this) && perm.getAbilities(this).containsClass(SagaAbility.class)) { int maxChapter = perm .getAbilities(this) .stream() diff --git a/Mage/src/main/java/mage/game/turn/PreCombatMainStep.java b/Mage/src/main/java/mage/game/turn/PreCombatMainStep.java index 35d40f1d56e..4567c64731f 100644 --- a/Mage/src/main/java/mage/game/turn/PreCombatMainStep.java +++ b/Mage/src/main/java/mage/game/turn/PreCombatMainStep.java @@ -1,9 +1,11 @@ package mage.game.turn; +import mage.abilities.common.SagaAbility; import mage.constants.PhaseStep; import mage.constants.SubType; import mage.counters.CounterType; import mage.filter.FilterPermanent; +import mage.filter.predicate.mageobject.AbilityPredicate; import mage.game.Game; import mage.game.events.GameEvent.EventType; import mage.game.permanent.Permanent; @@ -19,6 +21,7 @@ public class PreCombatMainStep extends Step { static { filter.add(SubType.SAGA.getPredicate()); + filter.add(new AbilityPredicate(SagaAbility.class)); } public PreCombatMainStep() {