#include "old.h" /* * mobility * 1 for each potential move */ wheur1() { int *p1, *p2, *p3, i; int pto; if(amp[-2]) { i = amp[-3]; pto = board[i]; board[i] = 0; } p1 = lmp; wgen(); p2 = lmp; lmp = p1; bgen(); p3 = lmp; lmp = p1; i = p2-p3; i >>= 1; if(amp[-2]) board[amp[-3]] = pto; return(i); } /* * opening 'goodies' */ wheur2() { int i; i = 0; if(game > 2) return(i); /* * minor pieces out * knights before bishops */ i += 9*((board[57] != -2)+ (board[62] != -2)); i += 8*((board[58] != -3)+ (board[61] != -3)); /* * blocked central pawns */ if(board[51] == -1 && board[51-8]!=0) i -= 10; if(board[52] == -1 && board[52-8]!=0) i -= 10; return(i); } /* * castle */ wheur3() { int i; i = 0; /* * queenside ability */ if(flag&02 && board[48]== -1 && board[49]== -1 && board[50]== -1) i += 20; /* * kingside ability */ if(flag&01 && board[53]== -1 && board[54]== -1 && board[55]== -1) i += 20; /* * if both */ if(i == 40) i = 22; /* * if castled, * keep pawns in */ if(wkpos==58) if(board[50]== -1 && (board[48]== -1 || board[48-8]== -1) && (board[49]== -1 || board[49-8]== -1)) i += 40; if(wkpos==62) if(board[53]== -1 && (board[54]== -1 || board[54-8]== -1) && (board[55]== -1 || board[55-8]== -1)) i += 40; return(i); } /* * prance * a percentage if the * piece on the move * can be driven back * by a smaller piece */ wheur4() { int *p1, *p2, ploc, i; if(amp[-1] != 1) return(0); ploc = amp[-3]; if(board[ploc] == -1) return(0); if(xheur(ploc)) return(0); p1 = lmp; p2 = p1; bagen(); i = 0; while(p2 != lmp) { p2++; bmove(*p2++); i = xheur(ploc); bremove(); if(i) break; } lmp = p1; return(i); } /* * control * center control * opening * beginning * king control * middle * end */ wheur5() { int i, j, k; int s, n, d, pto; if(amp[-2]) { i = amp[-3]; pto = board[i]; board[i] = 0; } i = 64; while(i--) control[i] = 0; if(game < 2) { i = 64; while(i--) control[i] += center[i]; } if(mantom) { if((flag&03)==0) srnd(wkpos); } else { if((flag&030)==0) srnd(bkpos); } i = 64; s = 0; while(i--) { n = control[i]*100; attack(i); j = 0; while(k = attacv[j++]) { d = (pval+6)[k]; if(d < 0) s -= n/(-d); else s += n/d; } } if(amp[-2]) board[amp[-3]] = pto; return(-s); } /* * mate threat * minus for captures */ wheur6() { int i; i = 0; *amp++ = -1; if(wattack(bkpos)) if(mate(2, 0)) i += 15; amp--; return(i); }