Oh no, I'm terribly sorry this happened!
Thank you for submitting the debug data to track down the problem of the dsync.
So what happened is that the simulation on my server calculated a different outcome as your client device. I will look into the debug data and post an update here as soon as I know what was going on.
Wow this was unexpected!
The problem was a treasure goblin...
So this was my code to calculate the gold for a round (since treasure goblin is alone he will later get all gold for himself):
public static int getGoldForRound(int round) { int gold = (int) StrictMath.round(StrictMath.pow(1.0125, round) * 50.0); return gold > 1000 ? 1000 : gold; }Now, in the high bonus round this causes an integer overflow. The gold becomes negative! Which by itself is already a bug, but somehow your device decided to do the integer cast slightly different:
Client: int=-1738923812 Server: int=-1738923813And this is what caused the dsync in the end. My fixed code is now this:
public static int getGoldForRound(int round, int version) { double rawGold = StrictMath.pow(1.0125, round) * 50.0; int gold = (int) StrictMath.round(rawGold); if (version >= Sim.v16) { if (rawGold > 1000.0) { return 1000; } } else { if (gold > 1000) { return 1000; } } return gold; }I have to keep the old, broken code in here, otherwise games with older versions will suddenly stop working and it won't be possible to watch their replays anymore.. I will release a new version this weekend with this (and another health related dsync) bugfix.
I've uploaded a new release tonight, including this fix! Thanks again for helping me to track it down.
If you're interested in the details, I wrote a little blog post about that dsync bug hunt, as it was quite a ride the last weeks :-) I really hope it is over now!