C++ UCI Chess engine inspired by Stockfish. Created using ideas learned during the development of Boxfish.
Example of the engine running here. (built to WebAssembly with Emscripten, note there is ~10x speed decrease compared to native code)
Storm currently can use the same NNUE as Stockfish (future plans to train network independently). For now you should download a network from https://tests.stockfishchess.org/nns and copy it into the working directory before you run the program. Storm will default to a classical evaluation if no network file is found.
- Bitboards and magic bitboard move generation
- UCI protocol
- Search:
- Transposition table with Zobrist hashing
- PVS search
- Aspiration windows and iterative deepening
- Razoring
- Adaptive null move pruning
- Futility pruning
- Late move reduction
- Evaluation:
- NNUE
- All perft tests passed
- Pondering
- SEE move ordering
- Download or clone this repository (use flag
--recurse-submodulesor--recursiveto include submodules). - If on windows run the
Scripts/Win-GenProjects.batscript to generate the Visual Studio 2019 project and solution files. - For best performance, download a compatible NNUE from here and copy into working directory. Working network nn-76a8a7ffb820.nnue. Storm will default to a classical evaluation if no valid network is found.
- Run
Scripts/Win-GenProjects.batand build the solution using Visual Studio 2019. - Build outputs are located in the
bindirectory.
- Run
Scripts/Linux-GenProjects.shto generate the Makefiles. - Run
make -j<number_of_cores> Storm-Cli config=distto build Storm. - Build outputs are located in the
bindirectory.
On linux, must use the config=distshared when building.
- Install SWIG
- Setup a
SwigConfigWindows.luaorSwigConfigLinux.luadepending on your platform. (Copy fromSwigConfig.example.lua) - Build the
Storm-Swigproject as above for your platform
- Install emsdk
- If using NNUE, copy your NNUE network into the
Storm-Emscriptendirectory - Run
emsdk activatethen insideStorm-Emscriptenrunpython build.py - Outputs are located in
bin/Web