UCI compliant chess engine
Play online
Challenge me on Lichess: https://lichess.org/@/FataliiBot
Download
Binaries for Linux and Windows are available on the
release page.
Building from source
To build the engine from source, you need a Rust
compiler. Clone the repo:
# Using SSH
git clone git@github.com:FitzOReilly/fatalii.git
# Alternatively, using HTTPS
git clone https://github.com/FitzOReilly/fatalii.git
and build the engine:
cd fatalii
cargo build --profile release-lto --bin fatalii
The binary will be in target/release-lto/fatalii
.
Usage
Fatalii supports the UCI protocol (universal chess interface), so it can be used
with a UCI compatible GUI. Some choices are
Cute Chess, Arena or
Lucas Chess.
UCI options
Hash
\
The size of the hash table in MB
Move Overhead
\
Subtract this value from the movetime to compensate for network delays or GUI overheads
UCI_Chess960
\
Enable Chess960 if this is set to true
Supported variants
Fatalii supports both standard chess and Chess960 (a.k.a. Fischer Random Chess).
Features
- Bitboards using file rank mapping
- Move generator using kindergarten bitboards for sliding pieces
- Evaluation
- Piece square tables (symmetrical)
- Pawn structure: passed, isolated, backward and doubled pawns
- Mobility
- Bishop pair
- Tempo
- King tropism
- Tapered evaluation for all parameters
- Tuned with training positions from the
Zurichess dataset quiet-labeled.v7
- Search
- Iterative deepening
- Principal variation search
- Aspiration windows
- Quiescence search
- Move ordering
- Root move ordering based on the previous iteration and on subtree size
- Principal variation move
- Hash move from the transposition table (if there are multiple TT entries
for the position, all of them will be used)
- Queen promotions
- Winning and equal captures (estimated by static exchange evaluation (SEE))
- Killer heuristic
- Countermove heuristic
- History heuristic
- Losing captures (negative SEE)
- Underpromotions last
- Pruning
- Fail-soft alpha-beta pruning
- Null move pruning
- Futility pruning
- Reverse futility pruning
- Late move reductions
- Late move pruning
- Delta pruning in quiescence search
- Check extensions
- Transposition table
- Zobrist hashing
- 4 entries per bucket
- Replacement scheme based on entry age and depth
- Draw detection
- 3-fold repetition
- 50 move rule
- Insufficient material
Thanks to
- The Chess Programming Wiki. It has been
extremely helpful during development. A lot of ideas have been taken from it
and I've also learned a lot from it.
- Other open source chess engines.
- Lichess for being an awesome chess site and for
letting bots play there. And https://github.com/lichess-bot-devs/lichess-bot
for making it easy to create such a bot.
- The folks at CCRL for rating the engine.
- Cute Chess. The CLI was extensively used for
self-play testing.
More helpful resources