X-Git-Url: https://git.sesse.net/?p=remoteglot;a=blobdiff_plain;f=www%2Fjs%2Fremoteglot.js;h=37f5c7bd1b61a034e56e9471fc4cd74f074be7ce;hp=be95b1a8449a1d4e8f86e442692a10eeea94f638;hb=f8c7d9bb05d38e91899b0bd81282239f076fbb37;hpb=09d3665b67729593880a9baba48e723f592b3bf3 diff --git a/www/js/remoteglot.js b/www/js/remoteglot.js index be95b1a..37f5c7b 100644 --- a/www/js/remoteglot.js +++ b/www/js/remoteglot.js @@ -7,7 +7,7 @@ * @type {Number} * @const * @private */ -var SCRIPT_VERSION = 2016113008; +var SCRIPT_VERSION = 2021021300; /** * The current backend URL. @@ -660,15 +660,24 @@ var add_pv = function(start_fen, pv, move_num, toplay, scores, start_display_mov scores: scores, start_display_move_num: start_display_move_num }); - return print_pv(display_lines.length - 1, opt_limit, opt_showlast); + var splicepos = null; + if (scores !== null && scores.length >= 1 && + scores[scores.length - 1].score !== undefined && + scores[scores.length - 1].score !== null && + (scores[scores.length - 1].score[0] === 'T' || + scores[scores.length - 1].score[0] === 't')) { + splicepos = scores[scores.length - 1].score[1]; + } + return print_pv(display_lines.length - 1, splicepos, opt_limit, opt_showlast); } /** * @param {number} line_num + * @param {?number} splicepos If non-null, where the tablebase-spliced portion of the TB starts. * @param {number=} opt_limit If set, show at most this number of moves. * @param {boolean=} opt_showlast If limit is set, show the last moves instead of the first ones. */ -var print_pv = function(line_num, opt_limit, opt_showlast) { +var print_pv = function(line_num, splicepos, opt_limit, opt_showlast) { var display_line = display_lines[line_num]; var pv = display_line.pv; var move_num = display_line.move_num; @@ -689,10 +698,14 @@ var print_pv = function(line_num, opt_limit, opt_showlast) { --to_add; } move_num += to_add / 2; + if (splicepos !== null && splicepos > 0) { + --splicepos; + } } var ret = ''; var i = 0; + var in_tb = false; if (opt_limit && opt_showlast && pv.length > opt_limit) { // Truncate the PV at the beginning (instead of at the end). // We assume here that toplay is 'W'. We also assume that if @@ -705,7 +718,12 @@ var print_pv = function(line_num, opt_limit, opt_showlast) { } move_num += i / 2; } else if (toplay == 'B' && pv.length > 0) { - var move = "" + pv[0] + ""; + var move = ""; + if (splicepos === 0) { + move += "(TB: "; + in_tb = true; + } + move += "" + pv[0] + ""; ret = move_num + '. … ' + move; toplay = 'W'; ++i; @@ -713,9 +731,16 @@ var print_pv = function(line_num, opt_limit, opt_showlast) { } for ( ; i < pv.length; ++i) { var move = "" + pv[i] + ""; + if (splicepos === i) { + ret += " (TB: "; + in_tb = true; + } if (toplay == 'W') { if (i > opt_limit && !opt_showlast) { + if (in_tb) { + ret += ")"; + } return ret + ' (…)'; } if (ret != '') { @@ -729,6 +754,9 @@ var print_pv = function(line_num, opt_limit, opt_showlast) { toplay = 'W'; } } + if (in_tb) { + ret += ")"; + } return ret; } @@ -748,11 +776,11 @@ var update_history = function() { if (display_lines[0] === null || display_lines[0].pv.length == 0) { $("#history").html("No history"); } else if (truncate_display_history) { - $("#history").html(print_pv(0, 8, true)); + $("#history").html(print_pv(0, null, 8, true)); } else { $("#history").html( '(collapse) ' + - print_pv(0)); + print_pv(0, null)); } } @@ -1273,6 +1301,11 @@ var update_board = function() { hiddenboard = new Chess(base_fen); hiddenboard.move(line['pv'][0]); var this_response = hiddenboard.move(line['pv'][1]); + if (this_response === null) { + console.log("BUG: ", i); + console.log(data); + console.log(line['pv']); + } if (response.from !== this_response.from || response.to !== this_response.to) { // Different response depending on lines, abort. response = undefined; @@ -1743,7 +1776,7 @@ var update_move_highlight = function() { $("#pvtitle").text("Exploring:"); current_display_line.start_display_move_num = 0; display_lines.push(current_display_line); - $("#pv").html(print_pv(display_lines.length - 1)); + $("#pv").html(print_pv(display_lines.length - 1, null)); // FIXME display_line_num = display_lines.length - 1; // Clear out the PV, so it's not selected by anything later. @@ -2089,14 +2122,25 @@ var format_short_score = function(score) { if (!score) { return "???"; } - if (score[0] === 'm') { + if (score[0] === 'T' || score[0] === 't') { + var ret = "TB\u00a0"; if (score[2]) { // Is a bound. - return score[2] + "\u00a0M " + score[1]; + ret = score[2] + "\u00a0TB\u00a0"; + } + if (score[0] === 'T') { + return ret + Math.ceil(score[1] / 2); } else { - return "M " + score[1]; + return ret + "-" + Math.ceil(score[1] / 2); + } + } else if (score[0] === 'M' || score[0] === 'm') { + var sign = (score[0] === 'm') ? '-' : ''; + if (score[2]) { // Is a bound. + return score[2] + "\u00a0M " + sign + score[1]; + } else { + return "M " + sign + score[1]; } } else if (score[0] === 'd') { - return "TB draw"; + return "TB =0"; } else if (score[0] === 'cp') { if (score[2]) { // Is a bound. return score[2] + "\u00a0" + fmt_cp(score[1]); @@ -2111,11 +2155,29 @@ var format_long_score = function(score) { if (!score) { return "???"; } - if (score[0] === 'm') { - if (score[1] > 0) { + if (score[0] === 'T') { + if (score[1] == 0) { + return "Won for white (tablebase)"; + } else { + return "White wins in " + Math.ceil(score[1] / 2); + } + } else if (score[0] === 't') { + if (score[1] == -1) { + return "Won for black (tablebase)"; + } else { + return "Black wins in " + Math.ceil(score[1] / 2); + } + } else if (score[0] === 'M') { + if (score[1] == 0) { + return "White wins by checkmate"; + } else { return "White mates in " + score[1]; + } + } else if (score[0] === 'm') { + if (score[1] == 0) { + return "Black wins by checkmate"; } else { - return "Black mates in " + (-score[1]); + return "Black mates in " + score[1]; } } else if (score[0] === 'd') { return "Theoretical draw"; @@ -2126,12 +2188,10 @@ var format_long_score = function(score) { } var compute_plot_score = function(score) { - if (score[0] === 'm') { - if (score[1] > 0) { - return 500; - } else { - return -500; - } + if (score[0] === 'M' || score[0] === 'T') { + return 500; + } else if (score[0] === 'm' || score[0] === 't') { + return -500; } else if (score[0] === 'd') { return 0; } else if (score[0] === 'cp') { @@ -2158,14 +2218,18 @@ var compute_score_sort_key = function(score, depth, invert, depth_secondary_key) if (!score) { return -10000000; } - if (score[0] === 'm') { - if (score[1] > 0) { - // White mates. - s = 99999 - score[1]; - } else { - // Black mates (note the double negative for score[1]). - s = -99999 - score[1]; - } + if (score[0] === 'T') { + // White reaches TB win. + s = 89999 - score[1]; + } else if (score[0] === 't') { + // Black reaches TB win. + s = -(89999 - score[1]); + } else if (score[0] === 'M') { + // White mates. + s = 99999 - score[1]; + } else if (score[0] === 'm') { + // Black mates. + s = -(99999 - score[1]); } else if (score[0] === 'd') { s = 0; } else if (score[0] === 'cp') {