hedgewars/uCommandHandlers.pas
changeset 7108 eaef11c0d039
parent 7104 2468316c1d9d
child 7151 ec15d9e1a7e3
--- a/hedgewars/uCommandHandlers.pas	Mon May 14 22:14:17 2012 +0200
+++ b/hedgewars/uCommandHandlers.pas	Tue May 22 09:18:46 2012 +0200
@@ -412,12 +412,30 @@
 end;
 
 procedure chNextTurn(var s: shortstring);
+var checksum: Longword;
+    gi: PGear;
 begin
     s:= s; // avoid compiler hint
+
     TryDo(AllInactive, '/nextturn called when not all gears are inactive', true);
 
+    checksum:= GameTicks;
+    gi := GearsList;
+    while gi <> nil do
+        begin
+        with gi^ do checksum:= checksum xor X.round xor X.frac xor dX.round xor dX.frac xor Y.round xor Y.frac xor dY.round xor dY.frac;
+        gi := gi^.NextGear
+        end;
+
     if not CurrentTeam^.ExtDriven then
-        SendIPC(_S'N');
+        begin
+        s[0]:= #5;
+        s[1]:= 'N';
+        SDLNet_Write32(checksum, @s[2]);
+        SendIPC(s)
+        end
+    else
+        TryDo(checksum = lastTurnChecksum, 'Desync detected', true);
     AddFileLog('Doing SwitchHedgehog: time '+inttostr(GameTicks));
 end;