Issues known and planned for upcoming releases.
This is the TODO.md file for belofte, a promising chess program released under GNU - GPL v2.0. This list is what we call, a TODO list.
*In the source code, you will find comments in the form of TODO,
- Bug:
- , ... These elements need to be merged with below todo list. Run
grep -riE "TODO|@todo|@bug" *
in src folder.*
Bug fixes
testcase19.rc
, add + instead of # after check moves in game history;
UI improvements
- Command line input does not support key-up (history) and sometimes inserts characters when editing input line (use of del/backspace). Evaluate using readline
- If
go
is being run from a script, still allow ?
break. Useful for benchmarking tests;
- Implement load game and save game;
- Allow to pass commands with parameters on the command line;
- Make beloftemode the default engineinterface instead of specific sub-mode, implement unused methods in baseclass as xboard v1 or v2;
- Running
@script file
inside instance when having started with @script file
is not possible;
- App().sout << is not printing certain strings, need to stream to strstream first;
- No newline on debug output files;
UCI interface improvements
- Be able to resign, maybe by annotating the move score when returning move;
- Feedback to interface on
info
command. Options to be added: refutation (UCI_ShowRefutations=true
) currline (UCI_ShowCurrLine=true
), cpuload, sbhits, tbhits, hashfull, multipv, ...
- Implement
UCI_Analyze
;
- Fix
UCI_ShowCurrLine
, if not set, only show new best line;
- Announce mate correctly in uci info score tags;
- Avoid crash executing
ucinewgame
and go
(non uci compliant) sequence directly after start (no position nor level given);
Xboard interface improvements
- Implement
devide
command;
- Act on
otim
command to change playing style in case of time pressure;
- Take into account next time control using remaining moves;
undo
command does break game history (eg. game
or save
commands);
- No documented way to undo
sd
command, (sd 50
undoes, undocumented);
- Be able to resign;
- Implement
result
command;
- Implement
option
command.
Engine improvements
- AB search - cut off at certain depth if score does not improve;
- Split initial move evaluation from real evaluation, reuse initial evaluation to moderate real evaluation (allowing to score moves instead of resulting position);
- If score unstable during iterative search, allow more time;
- Threefold repetition is not looking at variations during search and is only looking at gamehistory;
- Keep bestmove of previous variation until score gets increase or refuted;
- Null-move pruning.
Position evaluation improvements
- Take into account space occupation;
- Take into account mobility (number of moves when not considering check);
- Take into account king safety (number of checks possible, number of empty fields that can lead to check with available material, open or semi open line to king or adjacent, mate on last line possible;
- Attacks on weak pawn;
- Defended and attacked pieces;
- In endgame, take into account mating material;
- Force develop pieces from their initial position;
- Take into account Bishops positional info:
- Bishop pair;
- Bishops in open positions;
- Bishops outside chain;
- Dynamic bishop evaluation (pair vs knight, single vs knight)
- Bad and good bishops (also in endgame).
Speed-ups
- Instead of calculating rook/queen/bishop looking at king, invert by king looking at those;
- Implement stand-pat in QS search;
- Decouple movelist from board structure (Suggested by Sven);
- During move generation, no need to keep all the board statistics;
- Board as [144] instead as [64] array;
- Use makeMove/unmakeMove instead of copying board in search algorithm;
- Keep count of number of knights per side, so attack check can get faster;
- Keep track of m_piecesonboard instead of calculating;
- Calculate pawncolumns when calculating pieces;
- Use
__builtin_clzll
and __builtin_ctzll
for bitfield operations to find possible moves (or use BLSI
);
- Only do material eval when playing move, make sure staticscore does not create cut-off on positional score;
- Use separate thread to check for time passed instead of checking elapsed time in search loop, this thread can be paused;
- Promotion move move-value can be improved;
- If king in check before eval, consider piece attacking king to order moves according to relevance, e.g. if knight gives check, only king move or capture move should be considered, and check for removal of check should be done with that piece in mind first;
- Keep track of position static value instead of calculating each time.
Platform specific improvements or bugs
Windows
- The source does not cater for the CR LF line termination;
- Unicode result strings on windows (compile flag with unicode?);
- Add version info to codeblocks generated exe.
Mac OS X
- Support for Mac OS X Power-PC and Apple Silicon (M1), multi-architecture binaries (Fat binaries) for PPC / x86 / ARM has not been tested;
- Debugging is currently not possible in NetBeans. Needs configuration of the debugger by signing it so it can attach to a process. (Sandboxing issue!)
- App().bout << std::endl creates segfault, App().bout.endl() is ok;
Other enhancements
Code purity
- Use stream operator for thinking output instead of
sendInfo*
functions;
- Inherit levels instead of global level class;
- Review implementation of
expect
.
More platforms
- Version for iOS;
- Support for AnBox (Android on Linux) and darling (Mac OS on Linux);
- Create WebAssembly version and integrate in WebAssembly UI;
- Compilation for Solaris Sparc and x86, 32 and 64 bit;
- More testing required with ICS servers;
- Create project for Eclipse environment;
- Compile instructions on different Linux environments.
Various
- Other chess variants. Chess 960, ...;
- Create man page;
- Create installer (possibly with integration in xboard/... etc.);
- Add locale for game save. Will allow for loading and saving games with different piece letters;
ls
command allows pattern or wildcard;
- Make sure the source code is hosted on a platform that will always allow universal access with no restrictions whatsoever (other than GPL);
- Support for OpenBench (https://github.com/AndyGrant/OpenBench);
eof