$| = 1;
my $server = "freechess.org";
-my $target = "GMCarlsen";
+my $target = "Sesse";
# my $engine = "/usr/games/toga2";
my $engine = "wine Rybkav2.3.2a.mp.w32.exe";
uciprint("setoption name UCI_AnalyseMode value true");
uciprint("setoption name NalimovPath value c:\\nalimov");
-uciprint("setoption name NalimovUsage value Normally");
-uciprint("setoption name MultiPV value 3");
+uciprint("setoption name NalimovUsage value Rarely");
+uciprint("setoption name Hash value 1024");
+# uciprint("setoption name MultiPV value 3");
# uciprint("setoption name Contempt value 1000");
# uciprint("setoption name Outlook value Ultra Optimistic");
uciprint("ucinewgame");
my $pretty;
my $piece = substr($board->[$from_row], $from_col, 1);
+ if ($piece eq '-') {
+ die "Invalid move";
+ }
+
# white short castling
if ($pv eq 'e1g1' && $piece eq 'K') {
my @nb = @$board;
# rook
substr($nb[0], 7, 1, '-');
- substr($nb[0], 5, 1, 'R');
+ substr($nb[0], 5, 1, 'r');
return ('0-0', prettyprint_pv(\@nb, @pvs));
}
# rook
substr($nb[0], 0, 1, '-');
- substr($nb[0], 3, 1, 'R');
+ substr($nb[0], 3, 1, 'r');
return ('0-0-0', prettyprint_pv(\@nb, @pvs));
}
sub output_screen {
#return;
- print "\ecAnalysis:\n";
+ #
+ # Check the PVs first. if they're invalid, just wait, as our data
+ # is most likely out of sync. This isn't a very good solution, as
+ # it can frequently miss stuff, but it's good enough for most users.
+ #
+ eval {
+ my $dummy;
+ if (exists($uciinfo{'pv'})) {
+ $dummy = prettyprint_pv($ficsinfo{'board'}, @{$uciinfo{'pv'}});
+ }
+
+ my $mpv = 1;
+ while (exists($uciinfo{'pv' . $mpv})) {
+ $dummy = prettyprint_pv($ficsinfo{'board'}, @{$uciinfo{'pv' . $mpv}});
+ ++$mpv;
+ }
+ };
+ if ($@) {
+ return;
+ }
+
+ print "\e[H\e[2JAnalysis:\n\n";
return unless (exists($ficsinfo{'board'}));
} else {
# single-PV
if (defined($uciinfo{'score_mate'})) {
- printf " Mate in %d\n", $uciinfo{'score_mate'};
+ my $mate = $uciinfo{'score_mate'};
+ if ($ficsinfo{'toplay'} eq 'B') {
+ $mate = -$mate;
+ }
+ if ($mate > 0) {
+ printf " White mates in %u\n", $mate;
+ } else {
+ printf " Black mates in %u\n", -$mate;
+ }
} else {
if (exists($uciinfo{'score_cp'})) {
my $score = $uciinfo{'score_cp'} * 0.01;
for my $row (0..7) {
for my $col (0..7) {
my $piece = substr($board->[$row], $col, 1);
- next if ($piece eq '-' || lc($piece) eq 'k');
+ next if ($piece eq '-');
if (uc($piece) eq $piece) {
# white piece