diff --git a/forge-game/src/main/java/forge/game/GameView.java b/forge-game/src/main/java/forge/game/GameView.java index 2c5540db3ddb..db597afa820a 100644 --- a/forge-game/src/main/java/forge/game/GameView.java +++ b/forge-game/src/main/java/forge/game/GameView.java @@ -215,6 +215,7 @@ public String getDependencies() { } public void setDependencies(Table> dependencies) { if (dependencies.isEmpty()) { + set(TrackableProperty.Dependencies, ""); return; } StringBuilder sb = new StringBuilder(); diff --git a/forge-game/src/main/java/forge/game/card/CardState.java b/forge-game/src/main/java/forge/game/card/CardState.java index d0bb304503be..20dc321ba44e 100644 --- a/forge-game/src/main/java/forge/game/card/CardState.java +++ b/forge-game/src/main/java/forge/game/card/CardState.java @@ -605,18 +605,18 @@ public FCollectionView getReplacementEffects() { 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 FCollectionView getReplacementEffects() { result.add(omenRep); } - card.updateReplacementEffects(result, this); return result; } public boolean addReplacementEffect(final ReplacementEffect replacementEffect) { diff --git a/forge-game/src/main/java/forge/game/zone/MagicStack.java b/forge-game/src/main/java/forge/game/zone/MagicStack.java index 0c76a6394d02..b024dce4438b 100644 --- a/forge-game/src/main/java/forge/game/zone/MagicStack.java +++ b/forge-game/src/main/java/forge/game/zone/MagicStack.java @@ -847,35 +847,26 @@ public final void addSimultaneousStackEntry(final SpellAbility sa) { } public boolean addAllTriggeredAbilitiesToStack() { - boolean result = false; - Player playerTurn = game.getPhaseHandler().getPlayerTurn(); + if (!hasSimultaneousStackEntries()) { + return false; + } + Player playerTurn = game.getPhaseHandler().getPlayerTurn(); if (playerTurn == null) { // caused by DevTools before first turn return false; } - if (!hasSimultaneousStackEntries()) { - return false; - } - if (!playerTurn.isInGame()) { playerTurn = game.getNextPlayerAfter(playerTurn); } - - // Grab players in turn order starting with the active player List 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 boolean addAllTriggeredAbilitiesToStack() { } 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)) {