fairy-stockfish / Fairy-Stockfish

chess variant engine supporting Xiangqi, Shogi, Janggi, Makruk, S-Chess, Crazyhouse, Bughouse, and many more
https://fairy-stockfish.github.io/
GNU General Public License v3.0
615 stars 192 forks source link

10x10 Chess #328

Closed ulliit closed 1 year ago

ulliit commented 3 years ago

Hi,

I tried to figure out a "true" 10x10 chess version, and I think the result is quite promising. Would it be possible to implement it?

https://chessxp.com/docs/rules.html

The adjustments would only include a "big knight" as an additional piece and faster pawns.

Ulli

ianfab commented 3 years ago

Hi, if I understood the rules correctly, the only rule that can not be configured as of now would be the pawn triple steps. The board size, new piece type, castling rules, extended region for pawn double steps, etc., can all be configured via the variants.ini file, see e.g. https://github.com/ianfab/Fairy-Stockfish/wiki/Variant-configuration.

ulliit commented 3 years ago

Thanks, I kind of thought that a configuration without source code modification indeed might be possible. However, this triple step is probably essential, otherwise the game would be too slow. Ok, I'll take a look at .ini and source.

ianfab commented 3 years ago

If you are interested in trying it yourself, hacking together pawn triple steps in the code should be relatively straightforward, introducing a bitboard b3 analogous to the double steps (b2) in https://github.com/ianfab/Fairy-Stockfish/blob/7231c780cc86325636ab01765b33fe3a3cdaf94a/src/movegen.cpp#L126-L159 but the generalized en passant handling would be somewhat problematic. I am hesitant to implement more extensions to pawn movements, because I would be in favor of a more general solution, also see the related #305.

ulliit commented 3 years ago

May be we can talk on lichess? I left a message for you.

ulliit commented 1 year ago

Hi Fabian,

thanks for implementing the pawn move. However, I think there's a bug that prevents the engine from accepting variants with more than 8 ranks/files. Neither my custom definition did work then nor the predefined variants Wildebeest and Indiangreat.

I tried a minimum configuration using the 5x6chess definition as a bedrock and placed it at the top of the variants.ini. The following works:

[10x10chess:gardner] customPiece1 = e:CZ maxRank = 6 maxFile = e promotionRegionWhite = 6 promotionRegionBlack = 1 startFen = 5/2k1K/5/5/5/3e1 w - - 0 1

... :~/sf_fairy_faf18f3/src$ ./stockfish Fairy-Stockfish 290323 by Fabian Fichter uci id name Fairy-Stockfish 290323 ... uciok setoption name VariantPath value variants.ini Variant template 'xiangqi' does not exist. Variant template 'janggi' does not exist. Variant template 'janus' does not exist. Variant template 'grand' does not exist. Variant template 'capablanca' does not exist. setoption name UCI_Variant value 10x10chess info string variant 10x10chess files 5 ranks 6 pocket 0 template fairy startpos 5/2k1K/5/5/5/3e1 w - - 0 1 position startpos move e5e6 go movetime 1000 info string classical evaluation enabled info depth 1 seldepth 1 multipv 1 score mate 1 nodes 11 nps 11000 tbhits 0 time 1 pv d1b4 ... bestmove d1b4

Defining the custom piece as a combination of the Betza pieces Camel and Zebra seems to work. The engine plays d1b4# as the correct move here.

A version with maxRank = 8, maxFile = h works as well. The following doesn't work:

[10x10chess:gardner] customPiece1 = e:CZ maxRank = 9 maxFile = i promotionRegionWhite = 9 promotionRegionBlack = 1 startFen = 9/9/9/9/6k1K/9/9/9/7e1 w - - 0 1

... :~/sf_fairy_faf18f3/src$ ./stockfish Fairy-Stockfish 290323 by Fabian Fichter uci id name Fairy-Stockfish 290323 ... uciok setoption name VariantPath value variants.ini Variant template 'xiangqi' does not exist. Variant template 'janggi' does not exist. Variant template 'janus' does not exist. Variant template 'grand' does not exist. Variant template 'capablanca' does not exist. setoption name UCI_Variant value 10x10chess position startpos move i5i6 go movetime 1000 ... info depth 17 seldepth 25 multipv 1 score cp 53 nodes 749488 nps 747992 hashfull 436 tbhits 0 time 1002 pv e2e4 d7d5 e4d5 c7c6 d2d4 c6d5 g1f3 g8f6 f1d3 e7e6 c2c3 b8c6 f3e5 f8d6 e1g1 d6e5 d4e5 bestmove e2e4 ponder d7d5

The engine throws no info string here after setting the variant and plays classical chess afterwards.

Wildebeest:

:~/sf_fairy_faf18f3/src$ ./stockfish Fairy-Stockfish 290323 by Fabian Fichter uci ... uciok setoption name VariantPath value variants.ini Variant template 'xiangqi' does not exist. Variant template 'janggi' does not exist. Variant template 'janus' does not exist. Variant template 'grand' does not exist. Variant template 'capablanca' does not exist. setoption name UCI_Variant value wildebeest position startpos move e2e5 go movetime 1000 ... info depth 17 seldepth 25 multipv 1 score cp 53 nodes 749488 nps 748739 hashfull 436 tbhits 0 time 1001 pv e2e4 d7d5 e4d5 c7c6 d2d4 c6d5 g1f3 g8f6 f1d3 e7e6 c2c3 b8c6 f3e5 f8d6 e1g1 d6e5 d4e5 bestmove e2e4 ponder d7d5

Grüße, Ulrich

ianfab commented 1 year ago

Hi, this likely means you are using the non-largeboard version. Please make sure to download or compile a binary with largeboard support.