I’m using Vassal 3.2
Here’s how the turn and round sequence works:
Player turns during a round are played out in random order. This is done by having a deck in a hidden window called “Resources” which contains a player shield icon for each active player. When a new player turn begins, an icon is drawn from this deck and sent to a turn display area on the map. Next to this shield icon is a phase button. The player clicks the phase button to go from one phase to the next (or right-clicks their token and selects “Next Phase”, which sends a command to the phase button to switch to the next phase as if it were clicked).
The last phase is the “Personal Phase”. When a player clicks the “Personal Phase” button, they are essentially ending their turn. The game then checks the RoundStatus GP. If it’s 0, it gets the next player shield and starts the new player’s turn. If the RoundStatus GP is 1, the games knows this is the last player and starts a new round.
The switching of the RoundStatus GP from 0 to 1 is controlled by the deck that contains the player shield icons. When the last shield is drawn, the deck fires a hotkey to set the RoundStatus GP to 1.
The “Personal Phase” button triggers are as follows. The order shown here is the order of execution on the piece, i.e., from the bottom of the trait list up:
Trigger Action - Start new round
Trigger when properties match
$ActivePlayerSide$Phase = 6 && RoundStatus = 1
Keyboard Command
RunNextCheck
Perform These Keystrokes
BeginANewRound
Global Key Command - Begin a new round
Keyboard Command
BeginANewRound
Global Key Command
BeginNewRound
Matching Properties
CurrentMap = Kingdom && BasicName = Round Control
(This sends a command to “Round Control” to set up a new round)
Trigger Action - Get next player
Trigger when properties match
$ActivePlayerSide$Phase = 6 && RoundStatus = 0
Keyboard Command
RunNextCheck
Perform These Keystrokes
GetNewPlayerShield
Global Key Command - Get next player shield
Keyboard Command
GetNewPlayerShield
Global Key Command
SendShieldToTurnTrack
Matching Properties
CurrentMap = Resources && DeckName = Shield Active
Apply to 1 piece
(This sends a command to “Shield Active” deck, draws a new player shield and starts that player’s turn)
Let’s say you have 4 players in the game. This works perfectly for the first 2 players. When the third player is ending his “Personal Phase”, the RoundStatus is obviously still 0 as there is still one more shield in the deck. But, the 4th players turn is skipped entirely and a new round begins. This is telling me that the RoundStatus = 0 trigger is activated to get the next player. Since this is the last player shield in the deck, RoundStatus is switched to 1. Then it appears the trigger for RoundStatus = 1 is triggered (even though it’s below the RoundStatus = 0 trigger in the trait list) and a new round starts. Therefore, the last player get’s skipped.
As I’ve noted above, if I’m testing the game by myself (switching player sides when necessary) this all works perfectly. If I’m connected to another computer, the last player is always skipped. That’s why I was wondering if the other computer is just matching the game state of the computer that’s generating the action or if the other computer is actually triggering the same commands. If that’s the case, then I can see why the error occurs: The first computer sees RoundStatus as 0 and draws the last shield. The other computer may be excuting the same trigger but, by this point, the RoundStatus GP has already switched to 1 by the removal of the last card and, therefore, the second computer is starting a new round.