From b3045790c3486c4ddcaeb6525874f300085a7deb Mon Sep 17 00:00:00 2001 From: H.G.Muller Date: Tue, 3 Mar 2015 22:44:32 +0100 Subject: [PATCH] Change book Zobrist key for Chu promoted pieces Promoted pieces for Chu (i.e. above Lion, with the exception of King) now get keys derived from their base type, by XORing in a square-dependent 'promoted' key. This makes it possible to extend the unpromoted series with new pieces without altering the keys for the promoted pieces. So that the current book code works upto 48 unpromoted piece types, rather than 48 piece types total. --- book.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/book.c b/book.c index 8b4a43c..caa61b1 100644 --- a/book.c +++ b/book.c @@ -313,8 +313,9 @@ hash (int moveNr) ChessSquare p = boards[moveNr][r][f]; if(f == BOARD_LEFT-1 || f == BOARD_RGHT) continue; // between board and holdings if(p != EmptySquare){ - int j = (int)p; + int j = (int)p, promoted = 0; j -= (j >= (int)BlackPawn) ? (int)BlackPawn :(int)WhitePawn; + if(j >= CHUPROMOTED WhitePawn) promoted++, j -= CHUPROMOTED WhitePawn; if(j > (int)WhiteQueen) j++; // make space for King if(j > (int) WhiteKing) j = (int)WhiteQueen + 1; p_enc = 2*j + ((int)p < (int)BlackPawn); @@ -340,6 +341,7 @@ hash (int moveNr) Zobrist = (Zobrist << 48) ^ (Zobrist >> 16); break; } + if(promoted) Zobrist ^= 123456789*RandomPiece[squareNr & 63]; if(squareNr & 64) Zobrist = (Zobrist << 8) ^ (Zobrist >> 56); if(squareNr & 128) Zobrist = (Zobrist << 4) ^ (Zobrist >> 60); // holdings have separate (additive) key, to encode presence of multiple pieces on same square -- 1.7.0.4