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) { public void setDependencies(Table<StaticAbility, StaticAbility, Set<StaticAbilityLayer>> dependencies) {
if (dependencies.isEmpty()) { if (dependencies.isEmpty()) {
set(TrackableProperty.Dependencies, "");
return; return;
} }
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();

View File

@@ -605,18 +605,18 @@ public class CardState extends GameObject implements IHasSVars, ITranslatable {
result.add(loyaltyRep); result.add(loyaltyRep);
} }
if (type.isBattle()) { 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) { if (defenseRep == null) {
defenseRep = CardFactoryUtil.makeEtbCounter("etbCounter:DEFENSE:" + this.baseDefense, this, true); defenseRep = CardFactoryUtil.makeEtbCounter("etbCounter:DEFENSE:" + this.baseDefense, this, true);
} }
result.add(defenseRep); 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 (type.hasSubtype("Saga") && !hasKeyword(Keyword.READ_AHEAD)) {
if (sagaRep == null) { if (sagaRep == null) {
sagaRep = CardFactoryUtil.makeEtbCounter("etbCounter:LORE:1", this, true); sagaRep = CardFactoryUtil.makeEtbCounter("etbCounter:LORE:1", this, false);
} }
result.add(sagaRep); result.add(sagaRep);
} }
@@ -633,7 +633,6 @@ public class CardState extends GameObject implements IHasSVars, ITranslatable {
result.add(omenRep); result.add(omenRep);
} }
card.updateReplacementEffects(result, this);
return result; return result;
} }
public boolean addReplacementEffect(final ReplacementEffect replacementEffect) { public boolean addReplacementEffect(final ReplacementEffect replacementEffect) {

View File

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