mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 04:38:00 +00:00
Saga ETB counters aren't intrinsic (#8549)
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user