if (sscanf(sx, "%d %d %d", &mps, &min, &inc) != 3)
sscanf(sx, "%d %d:%d %d", &mps, &min, &sec, &inc);
TCminutes = min; TCseconds = sec;
- TCadd = inc*100; TCmoves = mps ? mps : 50;
+ TCadd = inc*100; TCmoves = mps;
MaxResponseTime = 0; TCflag = true;
+ if (!mps) /* Fischer TC or sudden death */
+ {
+ TCmoves = 50;
+ TCflag = 2; /* kludge to requests special calculation of ResponseTime */
+ }
}
TimeControl.clock[black] = TimeControl.clock[white] = 0;
{
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;
}
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;