Improve calculation of thinking time in sudden-death games
[gnushogi.git] / gnushogi / tcontrl.c
index 4e1da41..afdb32c 100644 (file)
@@ -163,11 +163,14 @@ void SetResponseTime(short side)
             {
                 short rtf = in_opening_stage ? 8 : 2;
                 short tcq = in_opening_stage ? 2 : 4;
+                int moves = TimeControl.moves[side];
 
                 if(!xboard) /* no pre-add of increment in XBoard mode */
                     TimeControl.clock[side] += TCadd;
+                if(TCflag == 2 && TCadd == 0) /* sudden death */
+                    moves = (moves < 30 ? 30 : moves);
                 ResponseTime = (TimeControl.clock[side])
-                    / (((TimeControl.moves[side]) * rtf) + 1);
+                    / (moves * rtf + 1);
                 TCleft = (long)ResponseTime / tcq;
                 ResponseTime += TCadd / 2;
             }
@@ -253,12 +256,15 @@ void SetResponseTime(short side)
         else
         {
             /* calculate avg time per move remaining */
+            int moves = TimeControl.moves[side];
 
             if(!xboard) /* no pre-add of increment in XBoard mode */
                 TimeControl.clock[side] += TCadd;
 
+            if(TCflag == 2 && TCadd == 0) /* sudden death */
+                moves = (moves < 30 ? 30 : moves);
             ResponseTime = (TimeControl.clock[side])
-                / (((TimeControl.moves[side]) * 2) + 1);
+                / (moves * 2 + 1);
             TCleft = (int) ResponseTime / 3;
             ResponseTime += TCadd / 2;