diff -r 5762f2b5f87a -r c58ae152733e src/chess/fen.c --- a/src/chess/fen.c Sun Jun 07 16:56:22 2026 +0200 +++ b/src/chess/fen.c Fri Jun 12 13:34:35 2026 +0200 @@ -72,11 +72,7 @@ } static size_t fen_color(char *str, GameState *gamestate) { - uint8_t color = opponent_color(gamestate->movecount > 0 ? - (last_move(gamestate).piece & COLOR_MASK) : BLACK); - - str[0] = color == WHITE ? 'w' : 'b'; - + str[0] = current_color(gamestate) == WHITE ? 'w' : 'b'; return 1; } @@ -121,7 +117,7 @@ static size_t fen_enpassant(char *str, GameState *gamestate) { - str[0] = '-'; str[1] = '\0'; + str[0] = '-'; for (int file = 0 ; file < 8 ; file++) { if (gamestate->board[3][file] & ENPASSANT_THREAT) { @@ -155,17 +151,22 @@ return sprintf(str, "%u", gamestate->movecount); } +static size_t fen_space(char *str) { + *str = ' '; + return 1; +} + void fen_compute(char *str, GameState *gamestate) { str += fen_pieces(str, gamestate); - *str = ' '; str++; + str += fen_space(str); str += fen_color(str, gamestate); - *str = ' '; str++; + str += fen_space(str); str += fen_castling(str, gamestate); - *str = ' '; str++; + str += fen_space(str); str += fen_enpassant(str, gamestate); - *str = ' '; str++; + str += fen_space(str); str += fen_halfmove(str, gamestate); - *str = ' '; str++; + str += fen_space(str); str += fen_movenr(str, gamestate); - str[0] = '\0'; + *str = '\0'; }