]> git.sesse.net Git - remoteglot/blobdiff - remoteglot.pl
Fix another Chess960 Chess.js issue.
[remoteglot] / remoteglot.pl
index c6815af33932e967e671ee140b139994ef2b8080..d8a7925c9137cfe548b0b9729a98f8daf3defac7 100755 (executable)
@@ -76,17 +76,11 @@ my $last_move;
 my $last_text = '';
 my ($pos_calculating, $pos_calculating_second_engine);
 
-uciprint($engine, "setoption name UCI_AnalyseMode value true");
-while (my ($key, $value) = each %remoteglotconf::engine_config) {
-       uciprint($engine, "setoption name $key value $value");
-}
+setoptions($engine, \%remoteglotconf::engine_config);
 uciprint($engine, "ucinewgame");
 
 if (defined($engine2)) {
-       uciprint($engine2, "setoption name UCI_AnalyseMode value true");
-       while (my ($key, $value) = each %remoteglotconf::engine2_config) {
-               uciprint($engine2, "setoption name $key value $value");
-       }
+       setoptions($engine2, \%remoteglotconf::engine2_config);
        uciprint($engine2, "setoption name MultiPV value 500");
        uciprint($engine2, "ucinewgame");
 }
@@ -591,13 +585,13 @@ sub complete_using_tbprobe {
                        $pos = $pos->make_move(parse_uci_move($move));
                }
 
-               while ($pos->num_pieces() > 6 && $#pv > -1) {
+               while ($pos->num_pieces() > 7 && $#pv > -1) {
                        my $move = shift @pv;
                        push @moves, $move;
                        $pos = $pos->make_move(parse_uci_move($move));
                }
 
-               return if ($pos->num_pieces() > 6);
+               return if ($pos->num_pieces() > 7);
 
                my $fen = $pos->fen();
                my $pgn_text = `fathom --path=/srv/syzygy "$fen"`;
@@ -609,6 +603,9 @@ sub complete_using_tbprobe {
                # Splice the PV from the tablebase onto what we have so far.
                for my $move (@{$pgn->moves}) {
                        last if $move eq '#';
+                       last if $move eq '1-0';
+                       last if $move eq '0-1';
+                       last if $move eq '1/2-1/2';
                        my $uci_move;
                        ($pos, $uci_move) = $pos->make_pretty_move($move);
                        push @moves, $uci_move;
@@ -1473,3 +1470,16 @@ sub parse_uci_move {
        my $promo    = substr($move, 4, 1);
        return ($from_row, $from_col, $to_row, $to_col, $promo);
 }
+
+sub setoptions {
+       my ($engine, $config) = @_;
+       uciprint($engine, "setoption name UCI_AnalyseMode value true");
+       uciprint($engine, "setoption name Analysis Contempt value Off");
+       if (exists($config->{'Threads'})) {  # Threads first, because clearing hash can be multithreaded then.
+               uciprint($engine, "setoption name Threads value " . $config->{'Threads'});
+       }
+       while (my ($key, $value) = each %$config) {
+               next if $key eq 'Threads';
+               uciprint($engine, "setoption name $key value $value");
+       }
+}