All notable changes to this project will be documented in this file.
- Fixed: the fifty-move rule was not applied correctly.
- Fixed: castling was not legal when more than two rooks of the same side on the board.
- Support for TCP connections to remote UCI chess engines.
- Environment variable
UCI_ENGINE_PATH
renamed toBINBO_UCI_ENGINE_PATH
used in UCI tests.
- In case of checkmate the functions listed bellow now return
{ok, {checkmate, white_wins}}
or{ok, {checkmate, black_wins}}
:binbo:game_status/1
;binbo:new_game/2
;binbo:move/2
;binbo:san_move/2
;binbo:index_move/3,4
;binbo:set_game_state/2
;binbo:load_pgn/2
;binbo:load_pgn_file/2
;binbo:new_uci_game/2
;binbo:uci_play/2,3
;binbo:uci_set_position/2
.
movetime
option for functionsbinbo:uci_bestmove/1,2
andbinbo:uci_play/2,3
defaults to 1000 ms.- New functions:
binbo:get_pieces_list/2
;binbo:index_move/3,4
;binbo:set_game_winner/2,3
.
- Added options for the game process at start (
binbo:new_server(Options)
).Options
is a map now! - New function
binbo:set_server_options/2
. - New function
binbo:set_game_state/2
.
- Performance improvements.
- Dependency
uef-lib
updated to 2.5.3.
- Fixed: PGN could not be loaded if it contained Tab characters.
- UCI protocol support added.
- UCI protocol related functions:
binbo:new_uci_game/2
;binbo:uci_command_call/2
;binbo:uci_command_cast/2
;binbo:uci_mode/1
;binbo:uci_bestmove/1
;binbo:set_uci_handler/2
;binbo:uci_play/2,3
;binbo:uci_set_position/2
.binbo:uci_sync_position/1
.
- New function
binbo:side_to_move/1
.
- Performance optimization in game state update.
- Some binary optimizations for FEN/SAN parsing.
- Dependency
uef-lib
updated to 2.5.1. - More perft tests added.
- Optimized move generation using bitboards instead of lists of square indices.
- Improved performance of all legal moves generation.
- All perft tests are passed much faster.
- New function
binbo_board:int_move/2
. - New function
binbo_board:int_move/3
. - New function
binbo_board:int_move_from/1
. - New function
binbo_board:int_move_to/1
. - New function
binbo_move:validate_int_move/2
. - Count all legal moves with
binbo:all_legal_moves(Pid, count)
.
- Fixed: Castling was allowed with enemy piece after capturing a friendly rook. The bug was found during testing Position 5 at depth 3 from Perft Results.
- Fixed: Wrong castling allowed by FEN was not properly validated.
- Passes all perft tests now.
- Fixed:
binbo:all_legal_moves/1,2
did not include possible pawn promotions. It now returns a list of legal moves where each element is a tuple{From, To}
or{From, To, Promo}
.
- API of
binbo_movegen
module has been changed regarding functionall_valid_moves/*
. It now returns a list of legal moves where each element is a tuple{From, To}
. - New function
binbo:all_legal_moves/1
. - New function
binbo:all_legal_moves/2
.
- Support for loading PGN from file.
- New function
binbo:load_pgn_file/2
.
- Support for PGN loading.
- New function
binbo:load_pgn/2
. - New function
binbo:san_move/2
.
- Initial release.