X-Git-Url: https://git.sesse.net/?p=remoteglot;a=blobdiff_plain;f=remoteglot.pl;h=049cdabaafaa0f0f824bec3cb0df34f147176fe2;hp=19f0446cb496128cc4fa4b04cf80f8d7ad345cdb;hb=b4059a786029132eb27769a42ca52eca6d8b44cc;hpb=de36b0b19903bcd95cc1ea131733e69b91b81c6b diff --git a/remoteglot.pl b/remoteglot.pl index 19f0446..049cdab 100755 --- a/remoteglot.pl +++ b/remoteglot.pl @@ -286,7 +286,23 @@ sub handle_pgn { my $black = $pgn->black; $white =~ s/,.*//; # Remove first name. $black =~ s/,.*//; # Remove first name. - my $pos = Position->start_pos($white, $black); + my $tags = $pgn->tags(); + my $pos; + if (exists($tags->{'FEN'})) { + $pos = Position->from_fen($tags->{'FEN'}); + $pos->{'last_move'} = 'none'; + $pos->{'player_w'} = $white; + $pos->{'player_b'} = $black; + $pos->{'start_fen'} = $tags->{'FEN'}; + } else { + $pos = Position->start_pos($white, $black); + } + if (exists($tags->{'Variant'}) && + $tags->{'Variant'} =~ /960|fischer/i) { + $pos->{'chess960'} = 1; + } else { + $pos->{'chess960'} = 0; + } my $moves = $pgn->moves; my @uci_moves = (); my @repretty_moves = (); @@ -377,6 +393,10 @@ sub handle_position { # It's wrong to just give the FEN (the move history is useful, # and per the UCI spec, we should really have sent "ucinewgame"), # but it's easier, and it works around a Stockfish repetition issue. + if ($engine->{'chess960'} != $pos->{'chess960'}) { + uciprint($engine, "setoption name UCI_Chess960 value " . ($pos->{'chess960'} ? 'true' : 'false')); + $engine->{'chess960'} = $pos->{'chess960'}; + } uciprint($engine, "position fen " . $pos->fen()); uciprint($engine, "go infinite"); $pos_calculating = $pos; @@ -386,6 +406,10 @@ sub handle_position { $engine2->{'stopping'} = 1; uciprint($engine2, "stop"); } + if ($engine2->{'chess960'} != $pos->{'chess960'}) { + uciprint($engine2, "setoption name UCI_Chess960 value " . ($pos->{'chess960'} ? 'true' : 'false')); + $engine2->{'chess960'} = $pos->{'chess960'}; + } uciprint($engine2, "position fen " . $pos->fen()); uciprint($engine2, "go infinite"); $pos_calculating_second_engine = $pos; @@ -880,7 +904,13 @@ sub output_json { local $dbh->{AutoCommit} = 0; my $q = $dbh->prepare('SELECT * FROM scores WHERE id=?'); - my $pos = Position->start_pos('white', 'black'); + my $pos; + if (exists($pos_calculating->{'start_fen'})) { + $pos = Position->from_fen($pos_calculating->{'start_fen'}); + } else { + $pos = Position->start_pos('white', 'black'); + } + $pos->{'chess960'} = $pos_calculating->{'chess960'}; my $halfmove_num = 0; for my $move (@{$pos_calculating->{'history'}}) { my $id = id_for_pos($pos, $halfmove_num);