[s] Refactoring the 'rollDice(...)' method.
[c] I found it very difficult to follow what was going on in 'rollDoce()' or am refactoring it in to what I hope will be an eraser to follow structure.

Firstly I have created a "rollDiceClicked(...)" method to be the entry point into the file when the button is clicked (at first I didn't realise "rollDice(...)" was invoked from an external source).
I have moved the 'state check' block into a seperate method to 1, save on indenting and 2, let "sendStateChanges()" (the intended last line to ge executed) be the last line of the method.

The 'rollDiceClicked()' method will always call 'rollDice()' once then determine if 'resolveDice(...)' should be called.  It is the 'resolveDice(...)' method that advances to the "Buy Cards" phase.
[!] Partway through a re-factor.
[c] The program is currently running but the entering Kyoto is not working.  I will sought this out soon.
[r] Changed 'modifyHealth()' to 'addHealth(...)' because this method is essentially functioning as a '+=' operation.  Same is alto true for VPs and snot.
[r] The 'updateState(...)' is now called from within the 'addHealth(...)' etc. methods rather than from there calling method.
[+] Added a method to add vips for monsters when they enter Kyoto.  I will also add a method to call when a monster 'holds' Kyoto.
[r] Renamed all the methods I'd created to use camel case notation instead of '_' as is used for variables.
[r] Removed the "canHealInKyoto()" method as there are no cards that let a monster heal in Kyoto.
[r] Removed the 'monster_in_kyoto_city' and 'monster_in_kyoto_bay' from Monsters and will store this information in the game (board).  Note, this is not yet working.
[+] Added several '_this_turn_monster' tempor varables to save constantly writing 'this.monsters[this.turn_monster]'.  There may well be a better way to do this but what I've done works for now.
[c] 'Yielding' is still a work in progress.
[C]  I've also noted that VPs are not being added, so given no one can get points from VPs and no one can enter Kyoto there is currently no way to end the game.
[-] Fixed bug that prevented VPs being updated.
[s] Re-factoring is finally stable.
[r] The algorithm for yielding Kyoto has been changed significantly.
[c] In the event of an attack on Kyoto, if there is a monster in Kyoto Bay the algorithm now always asks this monster first if it wants to yield and if it chooses to yields it is removed from Kyoto Bay.  Next, if there is a monster in Kyoto City the algorithm asks this monster first if it wants to yield and if does it is removed from Kyoto Bay.  Then finally the "current turn" monster attempts to enter Kyoto.  If there are empty slots the monster enters.  The algorithm then advances to the "Buy Cards" phase.
[r] The program now stores which monsters are in Kyoto in 'ROKGame' and uses a 'board_' prefix when serializing.
[r] Passing the 'add...' methods a reference to the owning 'ROKServerGame' so they can update these own state.
[r] Displaying absolute value of changes in health, VPs and snot.
[c] There are still no doubt some errors in the algorithm but in the whole the program is running properly.

One thing I just noticed is the end conditions aren't quite checked at the correct times.  Ideally this should be done whenever health or victory points are modified.
[r] Removed the 'that' parameters to 'add...' methods for health, VPs and snot.
[r] Still had the monster constructor nu-necessarily accepting a reference to the calling object.
[r] Also fixed a couple of minor indentation anomalies.
Merge branch 'master' of https://github.com/xird/rok
Trying to merge again???
Merge branch 'master' of https://github.com/xird/rok