Saga ETB counters aren't intrinsic (#8549)

This commit is contained in:
tool4ever
2025-08-26 14:47:17 +01:00
committed by GitHub
parent 9b8441d45b
commit efbf2e1a9c
3 changed files with 17 additions and 24 deletions

View File

@@ -215,6 +215,7 @@ public class GameView extends TrackableObject {
}
public void setDependencies(Table<StaticAbility, StaticAbility, Set<StaticAbilityLayer>> dependencies) {
if (dependencies.isEmpty()) {
set(TrackableProperty.Dependencies, "");
return;
}
StringBuilder sb = new StringBuilder();

View File

@@ -605,18 +605,18 @@ public class CardState extends GameObject implements IHasSVars, ITranslatable {
result.add(loyaltyRep);
}
if (type.isBattle()) {
// TODO This is currently breaking for Battle/Defense
// Going to script the cards to work but ideally it would happen here
if (defenseRep == null) {
defenseRep = CardFactoryUtil.makeEtbCounter("etbCounter:DEFENSE:" + this.baseDefense, this, true);
}
result.add(defenseRep);
// TODO add Siege "Choose a player to protect it"
}
card.updateReplacementEffects(result, this);
// below are global rules
if (type.hasSubtype("Saga") && !hasKeyword(Keyword.READ_AHEAD)) {
if (sagaRep == null) {
sagaRep = CardFactoryUtil.makeEtbCounter("etbCounter:LORE:1", this, true);
sagaRep = CardFactoryUtil.makeEtbCounter("etbCounter:LORE:1", this, false);
}
result.add(sagaRep);
}
@@ -633,7 +633,6 @@ public class CardState extends GameObject implements IHasSVars, ITranslatable {
result.add(omenRep);
}
card.updateReplacementEffects(result, this);
return result;
}
public boolean addReplacementEffect(final ReplacementEffect replacementEffect) {

View File

@@ -847,35 +847,26 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
}
public boolean addAllTriggeredAbilitiesToStack() {
boolean result = false;
Player playerTurn = game.getPhaseHandler().getPlayerTurn();
if (playerTurn == null) {
// caused by DevTools before first turn
return false;
}
if (!hasSimultaneousStackEntries()) {
return false;
}
Player playerTurn = game.getPhaseHandler().getPlayerTurn();
if (playerTurn == null) {
// caused by DevTools before first turn
return false;
}
if (!playerTurn.isInGame()) {
playerTurn = game.getNextPlayerAfter(playerTurn);
}
// Grab players in turn order starting with the active player
List<Player> players = game.getPlayersInTurnOrder(playerTurn);
boolean result = false;
// CR 603.3b
for (Player p : players) {
if (p.hasLost()) {
continue;
}
result |= chooseOrderOfSimultaneousStackEntry(p, false);
}
for (Player p : players) {
if (p.hasLost()) {
continue;
}
result |= chooseOrderOfSimultaneousStackEntry(p, true);
}
@@ -883,10 +874,12 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
}
private boolean chooseOrderOfSimultaneousStackEntry(final Player activePlayer, boolean isAbilityTriggered) {
if (simultaneousStackEntryList.isEmpty()) {
if (!activePlayer.isInGame()) {
return false;
}
if (!hasSimultaneousStackEntries()) {
return false;
}
activePlayerSAs.clear();
for (SpellAbility sa : simultaneousStackEntryList) {
if (isAbilityTriggered != (sa.isTrigger() && sa.getTrigger().getMode() == TriggerType.AbilityTriggered)) {