Fix FEN generation for S-Chess
authorFabian Fichter <ianfab@users.noreply.github.com>
Mon, 5 Aug 2019 21:01:27 +0000 (23:01 +0200)
committerFabian Fichter <ianfab@users.noreply.github.com>
Mon, 5 Aug 2019 21:01:27 +0000 (23:01 +0200)
Prevents generation of illegal castling moves.

Example: reb2rk1/ppppqppp/2nb1n2/4p3/4P3/N1P2N2/PB1PQPPP/RE2KBHR[h] w KQacgh - 3 7

src/position.cpp

index a9449cc..def94c0 100644 (file)
@@ -639,7 +639,7 @@ const string Position::fen() const {
 
   if (gating() && gates(WHITE))
       for (File f = FILE_A; f <= max_file(); ++f)
-          if (gates(WHITE) & file_bb(f))
+          if ((gates(WHITE) & file_bb(f)) && count_in_hand(WHITE, ALL_PIECES))
               ss << char('A' + f);
 
   if (can_castle(BLACK_OO))
@@ -650,7 +650,7 @@ const string Position::fen() const {
 
   if (gating() && gates(BLACK))
       for (File f = FILE_A; f <= max_file(); ++f)
-          if (gates(BLACK) & file_bb(f))
+          if ((gates(BLACK) & file_bb(f)) && count_in_hand(BLACK, ALL_PIECES))
               ss << char('a' + f);
 
   if (!can_castle(ANY_CASTLING) && !(gating() && (gates(WHITE) | gates(BLACK))))