/*****************************************************************/\r
\r
#define MULTIPATH\r
-#define VERSION "4.8R"\r
+#define VERSION "4.8S"\r
\r
#include <stdio.h>\r
#include <stdlib.h>\r
v+=e+i;V=m>q?m:q; /*** new eval & alpha ****/\r
if(z&S)V=m-margin>q?m-margin:q; /* multiPV */\r
C=d-1-(d>5&p>2&!t&!h); /* nw depth, reduce non-cpt.*/\r
- C=R<EG|P-I|d<3||t&&p-3?C:d; /* extend 1 ply if in-check */\r
+ C=R<EG|P-I|d<3||t&&w[p]>0?C:d; /* extend 1 ply if in-check */\r
do\r
s=C>2|v>V?-D(16-k,-l,-V,-v,/*** futility, recursive eval. of reply */\r
F,y&255,C):v;\r
if(z&S&&K-I) /* move pending: check legal*/\r
{if(v+I&&x==K&y==L>==GT) /* if move found */\r
{Q=-e-i;O=F;LL=L;prom=gt;\r
- if(b[y]-u&15)prom=b[y]-=PromPiece, /* under-promotion, correct */\r
- Z+=PromPiece; /* piece & invalidate hash */\r
+ if(b[y]-u&15)prom=b[y]-=PromPiece, /* (under-)promotion: */\r
+ Q-=abs(w[prom&=15])-w[p]-6*S, /* correct piece & score & */\r
+ Z+=PromPiece; /* invalidate hash */\r
a->D=99;a->V=0; /* lock game in hash as draw*/\r
R-=i/FAC; /*** total captd material ***/\r
Fifty = t|p<3?0:Fifty+1;\r
printf("move ");\r
printf("%c%c%c%c",'a'+(K&15),'0'+BH-(K>>4),\r
'a'+(L&15),'0'+BH-(L>>4));\r
- if(prom)printf("%c",piecename[prom&15]+'a'-1);\r
+ if(prom)printf("%c",piecename[prom]+'a'-1);\r
printf("\n");\r
\r
/* time-control accounting */\r
continue;\r
}\r
if (!strcmp(command, "edit")) {\r
- int color = WHITE, p;\r
+ int color = WHITE, p, r;\r
\r
while(fgets(line, 256, stdin)) {\r
m = line[0];\r
} else\r
if(line[1] >= 'a' && line[1] <= 'a'+BW-1\r
&& line[2] >= '1' && line[2] <= '0'+BH) {\r
- m = line[1]-16*line[2]+799;\r
+ m = line[1]-16*line[2]+799; r = m & 0x70;\r
switch(p)\r
{\r
case 1:\r
case 2:\r
if(color==WHITE)\r
- b[m]=(m&0x70)==0x60?1:33,\r
- Q+=w[1];\r
- else b[m]=(m&0x70)==0x10?18:50,\r
- Q+=w[2];\r
+ b[m]=r==0x10?161:r==0x20?97:r==0x60?1:33,\r
+ Q+=w[1]+(r==0x10?S:r==0x20?64:0);\r
+ else b[m]=r==0x60?178:r==0x50?114:r==0x10?18:50,\r
+ Q+=w[2]+(r==0x60?S:r==0x50?64:0);\r
break;\r
default:\r
b[m]=p+color+32; // assume non-virgin\r