Subversion Repositories Games.Chess Giants

Rev

Rev 108 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
108 pmbaty 1
#include "chess.h"
2
/* *INDENT-OFF* */
3
/*
4
 ************************************************************
5
 *                                                          *
6
 *  Pawn scoring terms.                                     *
7
 *                                                          *
8
 ************************************************************
9
 */
10
const int pawn_can_promote          = 525;
11
const int pawn_file_width           =   8;
12
const int pawn_unsupported[2]       = { -8, -4 };
13
const int pawn_defects[2][8] = {
14
  { 0, 0, 0, 1, 2, 3, 0, 0 },               /* [black][8] */
15
  { 0, 0, 3, 2, 1, 0, 0, 0 }                /* [white][8] */
16
};
17
const int passed_pawn[8] = { 0, 0, 0, 2, 6, 12, 21, 0 };
18
const int passed_pawn_base[2] = { 4, 8 };
19
const int passed_pawn_free_advance = 8;
20
const int passed_pawn_free_advance_1 = 5;
21
const int passed_pawn_defended = 3;
22
const int passed_pawn_defended_1 = 2;
23
const int passed_pawn_candidate[2][8] = {
24
  { 0, 2, 2,  6, 13, 32, 0, 0 },            /* [mg][rank] */
25
  { 0, 5, 5, 11, 27, 65, 0, 0 }             /* [eg][rank] */
26
};
27
const int pawn_doubled[2][8] = {
154 pmbaty 28
  { 7,  8,  9,  9,  9,  9,  8,  7},
29
  {22, 19, 19, 19, 19, 19, 19, 22}
108 pmbaty 30
};
31
const int pawn_isolated[2][8] = {
32
  {14, 21, 23, 23, 23, 23, 21, 14},
154 pmbaty 33
  { 5,  7,  8,  8,  8,  8,  7,  5}
108 pmbaty 34
};
35
const int pawn_backward[2][8] = {
154 pmbaty 36
  { 8, 12, 14, 14, 14, 14, 12,  8},
37
  { 2,  3,  3,  3,  3,  3,  3,  2}
108 pmbaty 38
};
154 pmbaty 39
const int pawn_connected[2][8][8] = {
40
  {{  0,  0,  0,  0,  0,  0,  0,  0 },
41
   {  0,  1,  1,  2,  2,  1,  1,  0 },
42
   {  1,  2,  2,  3,  3,  2,  2,  1 },
43
   {  3,  5,  6, 10, 10,  6,  5,  3 },  /* [mg][file][rank] */
44
   { 12, 14, 17, 22, 22, 17, 14, 12 },
45
   { 27, 29, 31, 35, 35, 31, 29, 27 },
46
   { 54, 63, 65, 70, 70, 65, 63, 54 },
47
   {  0,  0,  0,  0,  0,  0,  0,  0 }},
48
 
49
  {{  0,  0,  0,  0,  0,  0,  0,  0 },
50
   {  1,  3,  3,  3,  3,  3,  1,  1 },
51
   {  3,  6,  6,  6,  6,  6,  6,  1 },
52
   {  6, 10, 10, 10, 10, 10, 10,  3 },  /* [eg][file][rank] */
53
   { 13, 17, 17, 17, 17, 17, 17, 13 },
54
   { 32, 38, 38, 38, 38, 38, 38, 32 },
55
   { 76, 87, 87, 87, 87, 87, 87, 76 },
56
   {  0,  0,  0,  0,  0,  0,  0,  0 }}
108 pmbaty 57
};
154 pmbaty 58
const int pval[2][64] = {
59
   { 0,  0,  0,  0,  0,  0,  0,  0,
60
    -5,  0,  0,  0,  0,  0,  0, -5,
61
    -5,  0,  0,  0,  0,  0,  0, -5,
62
    -5,  0,  3,  5,  5,  3,  0, -5,  /* [mg][black][sq] */
63
    -5,  0,  5, 10, 10,  5,  0, -5,
64
    -5,  0,  3,  5,  5,  3,  0, -5,
65
    -5,  0,  0,  0,  0,  0,  0, -5,
66
     0,  0,  0,  0,  0,  0,  0,  0 },
108 pmbaty 67
 
154 pmbaty 68
   { 0,  0,  0,  0,  0,  0,  0,  0,
69
    -5,  0,  0,  0,  0,  0,  0, -5,
70
    -5,  0,  3,  5,  5,  3,  0, -5,
71
    -5,  0,  5, 10, 10,  5,  0, -5,  /* [mg][white][sq] */
72
    -5,  0,  3,  5,  5,  3,  0, -5,
73
    -5,  0,  0,  0,  0,  0,  0, -5,
74
    -5,  0,  0,  0,  0,  0,  0, -5,
75
     0,  0,  0,  0,  0,  0,  0,  0 }
108 pmbaty 76
};
77
/*
78
 ************************************************************
79
 *                                                          *
80
 *  Knight scoring terms.                                   *
81
 *                                                          *
82
 ************************************************************
83
 */
84
const int king_tropism_n[8] = { 3, 3, 3, 2, 1, 0, 0, 0 };
85
const int knight_outpost[2][64] = {
86
  { 0, 0, 0, 0, 0, 0, 0, 0,
87
    0, 0, 0, 0, 0, 0, 0, 0,
88
    0, 1, 4, 4, 4, 4, 1, 0,
89
    0, 2, 6, 8, 8, 6, 2, 0,
154 pmbaty 90
    0, 1, 4, 4, 4, 4, 1, 0,   /* [black][sq] */
108 pmbaty 91
    0, 0, 0, 0, 0, 0, 0, 0,
92
    0, 0, 0, 0, 0, 0, 0, 0,
93
    0, 0, 0, 0, 0, 0, 0, 0 },
94
 
95
  { 0, 0, 0, 0, 0, 0, 0, 0,
96
    0, 0, 0, 0, 0, 0, 0, 0,
97
    0, 0, 0, 0, 0, 0, 0, 0,
98
    0, 1, 4, 4, 4, 4, 1, 0,
154 pmbaty 99
    0, 2, 6, 8, 8, 6, 2, 0,   /* [white][sq] */
108 pmbaty 100
    0, 1, 4, 4, 4, 4, 1, 0,
101
    0, 0, 0, 0, 0, 0, 0, 0,
102
    0, 0, 0, 0, 0, 0, 0, 0 }
103
};
104
const int nval[2][2][64] = {
105
  {{ -41, -29, -27, -15, -15, -27, -29, -41,
106
      -9,   4,  14,  20,  20,  14,   4,  -9,
107
      -7,  10,  23,  29,  29,  23,  10,  -7,
154 pmbaty 108
      -5,  12,  25,  32,  32,  25,  12,  -5,  /* [mg][black][sq] */
108 pmbaty 109
      -5,  10,  23,  28,  28,  23,  10,  -5,
110
      -7,  -2,  19,  19,  19,  19,  -2,  -7,
111
      -9,  -6,  -2,   0,   0,  -2,  -6,  -9,
112
     -31, -29, -27, -25, -25, -27, -29, -31 },
113
 
114
   { -31, -29, -27, -25, -25, -27, -29, -31,
115
      -9,  -6,  -2,   0,   0,  -2,  -6,  -9,
116
      -7,  -2,  19,  19,  19,  19,  -2,  -7,
154 pmbaty 117
      -5,  10,  23,  28,  28,  23,  10,  -5,  /* [mg][white][sq] */
108 pmbaty 118
      -5,  12,  25,  32,  32,  25,  12,  -5,
119
      -7,  10,  23,  29,  29,  23,  10,  -7,
120
      -9,   4,  14,  20,  20,  14,   4,  -9,
121
     -41, -29, -27, -15, -15, -27, -29, -41 }},
122
 
123
  {{ -41, -29, -27, -15, -15, -27, -29, -41,
124
      -9,   4,  14,  20,  20,  14,   4,  -9,
125
      -7,  10,  23,  29,  29,  23,  10,  -7,
154 pmbaty 126
      -5,  12,  25,  32,  32,  25,  12,  -5,  /* [eg][black][sq] */
108 pmbaty 127
      -5,  10,  23,  28,  28,  23,  10,  -5,
128
      -7,  -2,  19,  19,  19,  19,  -2,  -7,
129
      -9,  -6,  -2,   0,   0,  -2,  -6,  -9,
130
     -31, -29, -27, -25, -25, -27, -29, -31 },
131
 
132
   { -31, -29, -27, -25, -25, -27, -29, -31,
133
      -9,  -6,  -2,   0,   0,  -2,  -6,  -9,
134
      -7,  -2,  19,  19,  19,  19,  -2,  -7,
154 pmbaty 135
      -5,  10,  23,  28,  28,  23,  10,  -5,  /* [eg][white][sq] */
108 pmbaty 136
      -5,  12,  25,  32,  32,  25,  12,  -5,
137
      -7,  10,  23,  29,  29,  23,  10,  -7,
138
      -9,   4,  14,  20,  20,  14,   4,  -9,
139
     -41, -29, -27, -15, -15, -27, -29, -41 }}
140
};
141
/*
142
 ************************************************************
143
 *                                                          *
144
 *  Bishop scoring terms.                                   *
145
 *                                                          *
146
 ************************************************************
147
 */
148
const int bishop_trapped            = 174;
149
const int bishop_pawns_on_color[2]  = { 4, 6 };
150
const int bishop_wing_pawns[2]      = { 18, 36 };
151
const int bishop_pair[2]            = { 38, 56 };
152
const int king_tropism_b[8] = { 2, 2, 2, 1, 0, 0, 0, 0 };
153
const int bishop_outpost[2][64] = {
154
  { 0, 0, 0, 0, 0, 0, 0, 0,
155
    0, 0, 0, 0, 0, 0, 0, 0,
156
    0, 1, 3, 3, 3, 3, 1, 0,
157
    0, 3, 5, 5, 5, 5, 3, 0,
154 pmbaty 158
    0, 1, 2, 2, 2, 2, 1, 0,   /* [black][sq] */
108 pmbaty 159
    0, 0, 1, 1, 1, 1, 0, 0,
160
    0, 0, 0, 0, 0, 0, 0, 0,
161
    0, 0, 0, 0, 0, 0, 0, 0 },
162
 
163
  { 0, 0, 0, 0, 0, 0, 0, 0,
164
    0, 0, 0, 0, 0, 0, 0, 0,
165
    0, 0, 1, 1, 1, 1, 0, 0,
166
    0, 1, 2, 2, 2, 2, 1, 0,
154 pmbaty 167
    0, 3, 5, 5, 5, 5, 3, 0,   /* [white][sq] */
108 pmbaty 168
    0, 1, 3, 3, 3, 3, 1, 0,
169
    0, 0, 0, 0, 0, 0, 0, 0,
170
    0, 0, 0, 0, 0, 0, 0, 0 }
171
};
172
const int bval[2][2][64] = {
173
  {{  0,   0,   0,   0,   0,   0,   0,   0,
174
      0,   4,   4,   4,   4,   4,   4,   0,
175
      0,   4,   8,   8,   8,   8,   4,   0,
176
      0,   4,   8,  12,  12,   8,   4,   0,
154 pmbaty 177
      0,   4,   8,  12,  12,   8,   4,   0,  /* [mg][black][sq] */
108 pmbaty 178
      0,   4,   8,   8,   8,   8,   4,   0,
179
      0,   4,   4,   4,   4,   4,   4,   0,
180
    -15, -15, -15, -15, -15, -15, -15, -15},
181
 
182
   {-15, -15, -15, -15, -15, -15, -15, -15,
183
      0,   4,   4,   4,   4,   4,   4,   0,
184
      0,   4,   8,   8,   8,   8,   4,   0,
185
      0,   4,   8,  12,  12,   8,   4,   0,
154 pmbaty 186
      0,   4,   8,  12,  12,   8,   4,   0,  /* [mg][white][sq] */
108 pmbaty 187
      0,   4,   8,   8,   8,   8,   4,   0,
188
      0,   4,   4,   4,   4,   4,   4,   0,
189
      0,   0,   0,   0,   0,   0,   0,   0}},
190
 
191
  {{  0,   0,   0,   0,   0,   0,   0,   0,
192
      0,   4,   4,   4,   4,   4,   4,   0,
193
      0,   4,   8,   8,   8,   8,   4,   0,
194
      0,   4,   8,  12,  12,   8,   4,   0,
154 pmbaty 195
      0,   4,   8,  12,  12,   8,   4,   0,  /* [eg][black][sq] */
108 pmbaty 196
      0,   4,   8,   8,   8,   8,   4,   0,
197
      0,   4,   4,   4,   4,   4,   4,   0,
198
    -15, -15, -15, -15, -15, -15, -15, -15},
199
 
200
   {-15, -15, -15, -15, -15, -15, -15, -15,
201
      0,   4,   4,   4,   4,   4,   4,   0,
202
      0,   4,   8,   8,   8,   8,   4,   0,
203
      0,   4,   8,  12,  12,   8,   4,   0,
154 pmbaty 204
      0,   4,   8,  12,  12,   8,   4,   0,  /* [eg][white][sq] */
108 pmbaty 205
      0,   4,   8,   8,   8,   8,   4,   0,
206
      0,   4,   4,   4,   4,   4,   4,   0,
207
      0,   0,   0,   0,   0,   0,   0,   0}}
208
};
209
/*
210
 ************************************************************
211
 *                                                          *
212
 *  Rook scoring terms.                                     *
213
 *                                                          *
214
 ************************************************************
215
 */
216
const int rook_on_7th[2]          = { 25, 35 };
217
const int rook_connected_7th[2]   = {  6, 10 };
218
const int rook_open_file[2]       = { 35, 20 };
219
const int rook_half_open_file[2]  = { 10, 10 };
220
const int king_tropism_r[8] = { 4, 4, 3, 2, 1, 1, 1, 1 };
221
/*
222
 ************************************************************
223
 *                                                          *
224
 *  Queen scoring terms.                                    *
225
 *                                                          *
226
 ************************************************************
227
 */
228
const int king_tropism_q[8] = { 6, 6, 5, 4, 3, 2, 2, 2 };
229
const int qval[2][2][64] = {
230
   {{ 0,   0,   0,   0,   0,   0,   0,   0,
231
      0,   0,   4,   4,   4,   4,   0,   0,
232
      0,   4,   4,   6,   6,   4,   4,   0,
233
      0,   4,   6,   8,   8,   6,   4,   0,
154 pmbaty 234
      0,   4,   6,   8,   8,   6,   4,   0,   /* [mg][black][sq] */
108 pmbaty 235
      0,   4,   4,   6,   6,   4,   4,   0,
236
      0,   0,   4,   4,   4,   4,   0,   0,
237
      0,   0,   0,   0,   0,   0,   0,   0 },
238
 
239
    { 0,   0,   0,   0,   0,   0,   0,   0,
240
      0,   0,   4,   4,   4,   4,   0,   0,
241
      0,   4,   4,   6,   6,   4,   4,   0,
242
      0,   4,   6,   8,   8,   6,   4,   0,
154 pmbaty 243
      0,   4,   6,   8,   8,   6,   4,   0,   /* [mg][white][sq] */
108 pmbaty 244
      0,   4,   4,   6,   6,   4,   4,   0,
245
      0,   0,   4,   4,   4,   4,   0,   0,
246
      0,   0,   0,   0,   0,   0,   0,   0 }},
247
 
248
   {{ 0,   0,   0,   0,   0,   0,   0,   0,
249
      0,   0,   4,   4,   4,   4,   0,   0,
250
      0,   4,   4,   6,   6,   4,   4,   0,
251
      0,   4,   6,   8,   8,   6,   4,   0,
154 pmbaty 252
      0,   4,   6,   8,   8,   6,   4,   0,   /* [eg][black][sq] */
108 pmbaty 253
      0,   4,   4,   6,   6,   4,   4,   0,
254
      0,   0,   4,   4,   4,   4,   0,   0,
255
      0,   0,   0,   0,   0,   0,   0,   0 },
256
 
257
    { 0,   0,   0,   0,   0,   0,   0,   0,
258
      0,   0,   4,   4,   4,   4,   0,   0,
259
      0,   4,   4,   6,   6,   4,   4,   0,
260
      0,   4,   6,   8,   8,   6,   4,   0,
154 pmbaty 261
      0,   4,   6,   8,   8,   6,   4,   0,   /* [eg][white][sq] */
108 pmbaty 262
      0,   4,   4,   6,   6,   4,   4,   0,
263
      0,   0,   4,   4,   4,   4,   0,   0,
264
      0,   0,   0,   0,   0,   0,   0,   0 }}
265
};
266
/*
267
 ************************************************************
268
 *                                                          *
269
 *  King scoring terms.                                     *
270
 *                                                          *
271
 ************************************************************
272
 */
273
int king_safety[16][16];
274
const int king_safety_mate_threat = 600;
275
const int king_king_tropism       =  10;
276
const int open_file[8]            = { 6, 5, 4, 4, 4, 4, 5, 6 };
277
const int half_open_file[8] = { 4, 4, 3, 3, 3, 3, 4, 4 };
278
const int safety_vector[16] = {
279
   0,  7, 14, 21, 28, 35, 42,  49,
280
  56, 63, 70, 77, 84, 91, 98, 105
281
};
282
const int tropism_vector[16] = {
283
   0,  1,  2,  3,   4,   5,  11,  20,
284
  32, 47, 65, 86, 110, 137, 167, 200
285
};
286
const int kval[2][64] = {
287
   {-40, -40, -40, -40, -40, -40, -40, -40,
288
    -40, -10, -10, -10, -10, -10, -10, -40,
289
    -40, -10,  60,  60,  60,  60, -10, -40,
290
    -40, -10,  60,  60,  60,  60, -10, -40,
154 pmbaty 291
    -40, -10,  40,  40,  40,  40, -10, -40,   /* [black][sq] */
108 pmbaty 292
    -40, -10,  20,  20,  20,  20, -10, -40,
293
    -40, -10, -10, -10, -10, -10, -10, -40,
294
    -40, -40, -40, -40, -40, -40, -40, -40 },
295
 
296
   {-40, -40, -40, -40, -40, -40, -40, -40,
297
    -40, -10, -10, -10, -10, -10, -10, -40,
298
    -40, -10,  20,  20,  20,  20, -10, -40,
299
    -40, -10,  40,  40,  40,  40, -10, -40,
154 pmbaty 300
    -40, -10,  60,  60,  60,  60, -10, -40,   /* [white][sq] */
108 pmbaty 301
    -40, -10,  60,  60,  60,  60, -10, -40,
302
    -40, -10, -10, -10, -10, -10, -10, -40,
303
    -40, -40, -40, -40, -40, -40, -40, -40 }
304
};
305
/*
306
 ************************************************************
307
 *                                                          *
308
 *  Miscellaneous evaluation constants.                     *
309
 *                                                          *
310
 ************************************************************
311
 */
312
const int bad_trade = 90;
313
const int dark_corner[2] =  { FILEA, FILEH };
314
const int light_corner[2] = { FILEH, FILEA };
315
const int direction[2] =    { -8, 8 };
316
const char square_color[64] = {
317
  1, 0, 1, 0, 1, 0, 1, 0,
318
  0, 1, 0, 1, 0, 1, 0, 1,
319
  1, 0, 1, 0, 1, 0, 1, 0,
320
  0, 1, 0, 1, 0, 1, 0, 1,
321
  1, 0, 1, 0, 1, 0, 1, 0,
322
  0, 1, 0, 1, 0, 1, 0, 1,
323
  1, 0, 1, 0, 1, 0, 1, 0,
324
  0, 1, 0, 1, 0, 1, 0, 1
325
};
326
/*
327
 ************************************************************
328
 *                                                          *
329
 *  Opening phase development terms.                        *
330
 *                                                          *
331
 ************************************************************
332
 */
333
const int development_thematic      =     12;
334
const int development_losing_castle =     20;
335
const int development_not_castled   =     20;
336
const int wtm_bonus[2]              = { 5, 8 };
337
/*
338
 ************************************************************
339
 *                                                          *
340
 *  Skill command constants (should not be changed)         *
341
 *                                                          *
342
 ************************************************************
343
 */
344
uint64_t burner[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
345
const int burnc[10] = {128000, 64000, 32400, 15200, 7600,
346
                         3800,  1960,  1040,   480,  140};
347
/*
348
 ************************************************************
349
 *                                                          *
350
 *  Mop-up scoring terms.  These are used in pawnless end-  *
351
 *  games to mate the weaker side.  There is a special PST  *
352
 *  B+N vs lone king to make it easier to win with very     *
353
 *  shallow search depths.                                  *
354
 *                                                          *
355
 ************************************************************
356
 */
357
const char b_n_mate_dark_squares[64] = {
358
  99, 90, 80, 70, 60, 50, 40, 30,
359
  90, 80, 70, 60, 50, 40, 30, 40,
360
  80, 70, 60, 50, 40, 30, 40, 50,
361
  70, 60, 50, 40, 30, 40, 50, 60,
362
  60, 50, 40, 30, 40, 50, 60, 70,
363
  50, 40, 30, 40, 50, 60, 70, 80,
364
  40, 30, 40, 50, 60, 70, 80, 90,
365
  30, 40, 50, 60, 70, 80, 90, 99
366
};
367
const char b_n_mate_light_squares[64] = {
368
  30, 40, 50, 60, 70, 80, 90, 99,
369
  40, 30, 40, 50, 60, 70, 80, 90,
370
  50, 40, 30, 40, 50, 60, 70, 80,
371
  60, 50, 40, 30, 40, 50, 60, 70,
372
  70, 60, 50, 40, 30, 40, 50, 60,
373
  80, 70, 60, 50, 40, 30, 40, 50,
374
  90, 80, 70, 60, 50, 40, 30, 40,
375
  99, 90, 80, 70, 60, 50, 40, 30
376
};
377
const int mate[64] = {
378
  200, 180, 160, 140, 140, 160, 180, 200,
379
  180, 160, 140, 120, 120, 140, 160, 180,
380
  160, 140, 120, 100, 100, 120, 140, 160,
381
  140, 120, 100, 100, 100, 100, 120, 140,
382
  140, 120, 100, 100, 100, 100, 120, 140,
383
  160, 140, 120, 100, 100, 120, 140, 160,
384
  180, 160, 140, 120, 120, 140, 160, 180,
385
  200, 180, 160, 140, 140, 160, 180, 200
386
};
387
/* *INDENT-ON* */