diff -r bc3306c59a08 -r 9bb6abdb5675 hedgewars/uCommandHandlers.pas --- a/hedgewars/uCommandHandlers.pas Fri Jul 13 16:39:20 2012 +0400 +++ b/hedgewars/uCommandHandlers.pas Thu Jul 26 21:56:47 2012 +0400 @@ -413,18 +413,19 @@ end; procedure chNextTurn(var s: shortstring); -var checksum: Longword; +var i: Longword; gi: PGear; begin s:= s; // avoid compiler hint TryDo(AllInactive, '/nextturn called when not all gears are inactive', true); - checksum:= GameTicks; + CheckSum:= CheckSum xor 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; + 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; + AddRandomness(CheckSum); gi := gi^.NextGear end; @@ -432,11 +433,11 @@ begin s[0]:= #5; s[1]:= 'N'; - SDLNet_Write32(checksum, @s[2]); + SDLNet_Write32(CheckSum, @s[2]); SendIPC(s) end else - TryDo(checksum = lastTurnChecksum, 'Desync detected', true); + TryDo(CheckSum = lastTurnChecksum, 'Desync detected', true); AddFileLog('Next turn: time '+inttostr(GameTicks)); end; @@ -664,6 +665,7 @@ procedure chSpeedup_p(var s: shortstring); begin s:= s; // avoid compiler hint +SpeedStart:= RealTicks; isSpeed:= true end; @@ -776,7 +778,7 @@ procedure chGameFlags(var s: shortstring); begin GameFlags:= StrToInt(s); -if GameFlags and gfSharedAmmo <> 0 then GameFlags:= GameFlags and not gfPerHogAmmo +if GameFlags and gfSharedAmmo <> 0 then GameFlags:= GameFlags and (not gfPerHogAmmo) end; procedure chHedgehogTurnTime(var s: shortstring); @@ -797,21 +799,21 @@ procedure initModule; begin //////// Begin top sorted by freq analysis not including chatmsg - RegisterVariable('+right' , @chRight_p , false); - RegisterVariable('-right' , @chRight_m , false); - RegisterVariable('+up' , @chUp_p , false); - RegisterVariable('-up' , @chUp_m , false); - RegisterVariable('+left' , @chLeft_p , false); - RegisterVariable('-left' , @chLeft_m , false); + RegisterVariable('+right' , @chRight_p , false, true); + RegisterVariable('-right' , @chRight_m , false, true); + RegisterVariable('+up' , @chUp_p , false, true); + RegisterVariable('-up' , @chUp_m , false, true); + RegisterVariable('+left' , @chLeft_p , false, true); + RegisterVariable('-left' , @chLeft_m , false, true); RegisterVariable('+attack' , @chAttack_p , false); - RegisterVariable('+down' , @chDown_p , false); - RegisterVariable('-down' , @chDown_m , false); - RegisterVariable('hjump' , @chHJump , false); - RegisterVariable('ljump' , @chLJump , false); + RegisterVariable('+down' , @chDown_p , false, true); + RegisterVariable('-down' , @chDown_m , false, true); + RegisterVariable('hjump' , @chHJump , false, true); + RegisterVariable('ljump' , @chLJump , false, true); RegisterVariable('nextturn', @chNextTurn , false); RegisterVariable('-attack' , @chAttack_m , false); RegisterVariable('slot' , @chSlot , false); - RegisterVariable('setweap' , @chSetWeapon , false); + RegisterVariable('setweap' , @chSetWeapon , false, true); //////// End top by freq analysis RegisterVariable('gencmd' , @chGenCmd , false); RegisterVariable('flag' , @chFlag , false); @@ -857,10 +859,10 @@ RegisterVariable('zoomout' , @chZoomOut , true ); RegisterVariable('zoomreset',@chZoomReset , true ); RegisterVariable('ammomenu', @chAmmoMenu , true); - RegisterVariable('+precise', @chPrecise_p , false); - RegisterVariable('-precise', @chPrecise_m , false); + RegisterVariable('+precise', @chPrecise_p , false, true); + RegisterVariable('-precise', @chPrecise_m , false, true); RegisterVariable('switch' , @chSwitch , false); - RegisterVariable('timer' , @chTimer , false); + RegisterVariable('timer' , @chTimer , false, true); RegisterVariable('taunt' , @chTaunt , false); RegisterVariable('put' , @chPut , false); RegisterVariable('+volup' , @chVol_p , true );