stringstream ss;
+ if (Options["Protocol"] == "xboard")
+ {
- if (abs(v) < VALUE_MATE - MAX_PLY)
++ if (abs(v) < VALUE_MATE_IN_MAX_PLY)
+ ss << v * 100 / PawnValueEg;
+ else
+ ss << (v > 0 ? XBOARD_VALUE_MATE + VALUE_MATE - v + 1 : -XBOARD_VALUE_MATE - VALUE_MATE - v - 1) / 2;
+ } else
+
- if (abs(v) < VALUE_MATE - MAX_PLY)
+ if (abs(v) < VALUE_MATE_IN_MAX_PLY)
ss << "cp " << v * 100 / PawnValueEg;
+ else if (Options["Protocol"] == "usi")
+ // In USI, mate distance is given in ply
+ ss << "mate " << (v > 0 ? VALUE_MATE - v : -VALUE_MATE - v);
else
- ss << "mate " << (v > 0 ? VALUE_MATE - v + 1 : -VALUE_MATE - v) / 2;
+ ss << "mate " << (v > 0 ? VALUE_MATE - v + 1 : -VALUE_MATE - v - 1) / 2;
return ss.str();
}