diff --git a/src/main/java/commanderailab/batch/BatchRunner.java b/src/main/java/commanderailab/batch/BatchRunner.java index 2f7edf7..3315b68 100644 --- a/src/main/java/commanderailab/batch/BatchRunner.java +++ b/src/main/java/commanderailab/batch/BatchRunner.java @@ -557,8 +557,13 @@ public class BatchRunner { Map lossReasons = new HashMap<>(); // ── Issue #1: Track last-known life totals from verbose log ────── - int[] lastKnownLife = {40, 40, 40}; // Start at Commander default - boolean[] lifeTracked = {false, false, false}; + int numPlayers = decks.size(); + int[] lastKnownLife = new int[numPlayers]; + boolean[] lifeTracked = new boolean[numPlayers]; + for (int i = 0; i < numPlayers; i++) { + lastKnownLife[i] = 40; // Commander starting life + lifeTracked[i] = false; + } Set loserSeats = new HashSet<>(); for (String line : lines) { @@ -1060,7 +1065,8 @@ public class BatchRunner { // Track current turn per seat int globalTurn = 0; - boolean[] openingHandPhase = {true, true, true}; // before first turn + boolean[] openingHandPhase = new boolean[decks.size()]; + java.util.Arrays.fill(openingHandPhase, true); // before first turn for (String rawLine : lines) { String line = rawLine.trim(); diff --git a/src/main/java/commanderailab/cli/LabCli.java b/src/main/java/commanderailab/cli/LabCli.java index 5ad10ca..4cd31bf 100644 --- a/src/main/java/commanderailab/cli/LabCli.java +++ b/src/main/java/commanderailab/cli/LabCli.java @@ -383,6 +383,7 @@ public class LabCli implements Callable { result.metadata.masterSeed = masterSeed; result.metadata.threads = threads; result.metadata.elapsedMs = elapsedMs; + result.metadata.podSize = decks.size(); result.decks = decks; result.games = games; result.summary = summary; diff --git a/src/main/java/commanderailab/schema/JsonExporter.java b/src/main/java/commanderailab/schema/JsonExporter.java index 6d98343..cf13130 100644 --- a/src/main/java/commanderailab/schema/JsonExporter.java +++ b/src/main/java/commanderailab/schema/JsonExporter.java @@ -62,11 +62,11 @@ public class JsonExporter { try { BatchResult result = GSON.fromJson(json, BatchResult.class); return result.metadata != null - && result.decks != null && result.decks.size() == 3 + && result.decks != null && result.decks.size() >= 3 && result.decks.size() <= 4 && result.games != null && result.summary != null && result.metadata.schemaVersion.equals("1.0.0") - && result.metadata.podSize == 3; + && result.metadata.podSize >= 3 && result.metadata.podSize <= 4; } catch (Exception e) { return false; }