Code: Select all
void Normalize() {
s32 sq;
s32 highWN;
s32 highBN;
s32 highWB;
s32 highBB;
s32 highWR;
s32 highBR;
s32 highWQ;
s32 highBQ;
s32 limit;
highWN = -INFINITY;
highBN = -INFINITY;
highWB = -INFINITY;
highBB = -INFINITY;
highWR = -INFINITY;
highBR = -INFINITY;
highWQ = -INFINITY;
highBQ = -INFINITY;
limit = 90;
for(sq = A1; sq <= H8; sq++) {
if(wKnightTbl[sq] > highWN) highWN = wKnightTbl[sq];
if(bKnightTbl[sq] > highBN) highBN = bKnightTbl[sq];
if(wBishopTbl[sq] > highWB) highWB = wBishopTbl[sq];
if(bBishopTbl[sq] > highBB) highBB = bBishopTbl[sq];
if(wRookTbl[sq] > highWR) highWR = wRookTbl[sq];
if(bRookTbl[sq] > highBR) highBR = bRookTbl[sq];
if(wQueenTbl[sq] > highWQ) highWQ = wQueenTbl[sq];
if(bQueenTbl[sq] > highBQ) highBQ = bQueenTbl[sq];
}
for(sq = A1; sq <= H8; sq++) {
if(highWN > limit) wKnightTbl[sq] *= (limit / highWN);
if(highBN > limit) bKnightTbl[sq] *= (limit / highBN);
if(highWB > limit) wBishopTbl[sq] *= (limit / highWB);
if(highBB > limit) bBishopTbl[sq] *= (limit / highBB);
if(highWR > limit) wRookTbl[sq] *= (limit / highWR);
if(highBR > limit) bRookTbl[sq] *= (limit / highBR);
if(highWQ > limit) wQueenTbl[sq] *= (limit / highWQ);
if(highBQ > limit) bQueenTbl[sq] *= (limit / highBQ);
}
}
I should add that the eval for each piece is all accumulated into the piece square tables.
Code: Select all
// Knight Tables
moves = knight[sq] & ~aPieces;
trgts = knight[sq] & (bRooks | bQueens | bKings);
wKnightTbl[sq] = PopCnt(moves) * 4 + PopCnt(trgts) * 8;
wKnightTbl[sq] += ((cenRow + cenRow) * (cenCol + cenCol) + row * 3);
if(cenCol == 0) wKnightTbl[sq] -= 20;
g = evalHistTblg[WN][sq]; n = evalHistTbln[WN][sq];
wKnightTbl[sq] += (n > 99 ? g/n : 0);