diff --git a/src/main/java/net/rptools/maptool/model/Zone.java b/src/main/java/net/rptools/maptool/model/Zone.java index 7736e44760..2459ab8f44 100644 --- a/src/main/java/net/rptools/maptool/model/Zone.java +++ b/src/main/java/net/rptools/maptool/model/Zone.java @@ -601,18 +601,29 @@ public Zone(Zone zone, boolean keepIds) { } } // Set the initiative list using the newly create tokens. + // We also have to work around old campaign issues where there may be empty positions in the + // initiative list + int newCurrent = -1; + int oldCurrent = zone.initiativeList.getCurrent(); if (saveInitiative.length > 0) { + int newInd = 0; for (int i = 0; i < saveInitiative.length; i++) { Token token = (Token) saveInitiative[i][0]; - initiativeList.insertToken(i, token); - TokenInitiative ti = initiativeList.getTokenInitiative(i); - TokenInitiative oldti = (TokenInitiative) saveInitiative[i][1]; - ti.setHolding(oldti.isHolding()); - ti.setState(oldti.getState()); + if (token != null) { + initiativeList.insertToken(newInd, token); + TokenInitiative ti = initiativeList.getTokenInitiative(newInd); + TokenInitiative oldti = (TokenInitiative) saveInitiative[i][1]; + ti.setHolding(oldti.isHolding()); + ti.setState(oldti.getState()); + if (oldCurrent == i) { + newCurrent = newInd; + } + newInd++; + } } } initiativeList.setZone(this); - initiativeList.setCurrent(zone.initiativeList.getCurrent()); + initiativeList.setCurrent(newCurrent); initiativeList.setRound(zone.initiativeList.getRound()); initiativeList.setHideNPC(zone.initiativeList.isHideNPC());