Subversion Repositories Games.Chess Giants

Rev

Rev 108 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
33 pmbaty 1
#include "chess.h"
2
/* *INDENT-OFF* */#if !defined(INLINEASM)
3
unsigned char msb[65536];
4
unsigned char lsb[65536];
5
#endif
6
unsigned char msb_8bit[256];
7
unsigned char lsb_8bit[256];
8
unsigned char pop_cnt_8bit[256];
9
unsigned char is_outside[256][256];
10
uint64_t mask_pawn_connected[64];
11
uint64_t mask_pawn_isolated[64];
12
uint64_t mask_passed[2][64];
13
uint64_t mask_no_pattacks[2][64];
14
uint64_t mask_hidden_left[2][8];
15
uint64_t mask_hidden_right[2][8];
16
uint64_t pawn_race[2][2][64];
17
BOOK_POSITION book_buffer[BOOK_CLUSTER_SIZE];
18
BOOK_POSITION book_buffer_char[BOOK_CLUSTER_SIZE];
19
int OOsqs[2][3] = {{ E8, F8, G8 }, { E1, F1, G1 }};
20
int OOOsqs[2][3] = {{ E8, D8, C8 }, { E1, D1, C1 }};
21
int OOfrom[2] = { E8, E1 };
22
int OOto[2] = { G8, G1 };
23
int OOOto[2] = { C8, C1 };
24
#define    VERSION                             "24.0"
25
char version[8] = { VERSION };
26
PLAYING_MODE mode = normal_mode;
27
int batch_mode = 0;             /* no asynch reads */
28
int swindle_mode = 1;           /* try to swindle */
29
int call_flag = 0;
30
int crafty_rating = 2500;
31
int opponent_rating = 2500;
32
int last_search_value = 0;
33
int pruning_margin[10] = {0, 100, 100, 200, 200, 300, 300, 400};
34
int pruning_depth = 6;
35
int pgn_suggested_percent = 0;
36
char pgn_event[128] = { "?" };
37
char pgn_site[128] = { "?" };
38
char pgn_date[128] = { "????.??.??" };
39
char pgn_round[128] = { "?" };
40
char pgn_white[128] = { "unknown" };
41
char pgn_white_elo[128] = { "" };
42
char pgn_black[128] = { "Crafty " VERSION };
43
char pgn_black_elo[128] = { "" };
44
char pgn_result[128] = { "*" };
45
char *B_list[128];
46
char *AK_list[128];
47
char *GM_list[128];
48
char *IM_list[128];
49
char *SP_list[128];
50
char *SP_opening_filename[128];
51
char *SP_personality_filename[128];
52
int output_format = 0;
53
#if !defined(NOEGTB)
54
int EGTBlimit = 0;
55
int EGTB_use = 0;
56
int EGTB_draw = 0;
57
int EGTB_search = 0;
58
size_t EGTB_cache_size = 4096 * 4096;
59
void *EGTB_cache = (void *) 0;
60
int EGTB_setup = 0;
61
#endif
62
int xboard = 0;
63
int pong = 0;
64
int early_exit = 99;
65
int new_game = 0;
66
char book_path[128] = { BOOKDIR };
67
char log_path[128] = { LOGDIR };
68
char tb_path[128] = { TBDIR };
69
char rc_path[128] = { RCDIR };
70
int initialized = 0;
71
int kibitz = 0;
72
int post = 0;
73
int log_id = 0;
74
int game_wtm = 1;
75
int last_opponent_move = 0;
76
int check_depth = 1;
77
int null_depth = 3;               /* R=3 */
78
int LMR_remaining_depth = 1;      /* leave 1 full ply after reductions */
79
int LMR_min_reduction = 1;        /* minimum reduction 1 ply */
80
int LMR_max_reduction = 2;        /* maximum reduction 2 plies */
81
int search_depth = 0;
82
/*uint64_t*/ unsigned int search_nodes = 0; // Pierre-Marie Baty -- fixed type
83
/*uint64_t*/ unsigned int temp_search_nodes = 0; // Pierre-Marie Baty -- fixed type
84
int search_move = 0;
85
int predicted = 0;
86
int time_used = 0;
87
int time_used_opponent = 0;
88
int analyze_mode = 0;
89
int annotate_mode = 0;
90
int input_status = 0;
91
int resign = 9;
92
int resign_counter = 0;
93
int resign_count = 5;
94
int draw_counter = 0;
95
int draw_count = 5;
96
int draw_offer_pending = 0;
97
int draw_offered = 0;
98
int offer_draws = 1;
99
int adaptive_hash = 0;
100
size_t adaptive_hash_min = 0;
101
size_t adaptive_hash_max = 0;
102
size_t adaptive_hashp_min = 0;
103
size_t adaptive_hashp_max = 0;
104
int time_limit = 100;
105
int force = 0;
106
char initial_position[80] = { "" };
107
char hint[512] = { "" };
108
char book_hint[512] = { "" };
109
int over = 0;
110
int usage_level = 0;
111
char audible_alarm = 0x07;
112
char speech = 0;
113
int book_accept_mask = ~03;
114
int book_reject_mask = 3;
115
int book_random = 1;
116
float book_weight_learn = 1.0;
117
float book_weight_freq = 1.0;
118
float book_weight_eval = 0.1f; // Pierre-Marie Baty -- added float suffix
119
int book_search_trigger = 20;
120
int learn = 1;
121
int learning = 100;
122
int learn_value = 0;
123
int abort_search;      /*  1 = abort / print stats, 2 = abort no print stats */
124
int iteration_depth;
125
int root_wtm;
126
int root_beta;
127
int last_root_value;
128
ROOT_MOVE root_moves[256];
129
int n_root_moves;
130
int difficulty;
131
int absolute_time_limit;
132
int search_time_limit;
133
int burp;
134
int quit = 0;
135
unsigned int opponent_start_time, opponent_end_time;
136
unsigned int program_start_time, program_end_time;
137
unsigned int start_time, end_time;
138
TREE *block[MAX_BLOCKS + 1];
139
THREAD thread[CPUS];
140
#if (CPUS > 1)
141
lock_t lock_split, lock_smp, lock_io, lock_root;
142
#if defined(UNIX)
143
  pthread_attr_t attributes;
144
#endif
145
#endif
146
int smp_max_threads = 0;
147
int smp_split_group = 5;           /* max threads per group - 1 */
148
int smp_split_at_root = 1;
149
int smp_min_split_depth = 5;
150
unsigned int smp_split_nodes = 2000;
151
unsigned int parallel_splits;
152
unsigned int parallel_aborts;
153
unsigned int idle_time;
154
unsigned int max_split_blocks = 0;
155
unsigned int idle_percent = 0;
156
volatile int smp_idle = 0;
157
volatile int smp_split = 0;
158
volatile int smp_threads = 0;
159
volatile int initialized_threads = 0;
160
int crafty_is_white = 0;
161
unsigned int nodes_between_time_checks = 1000000;
162
unsigned int nodes_per_second = 1000000;
163
int next_time_check = 100000;
164
int transposition_age = 0;
165
int thinking = 0;
166
int pondering = 0;
167
int puzzling = 0;
168
int booking = 0;
169
int display_options = 4095 - 256 - 512;
170
unsigned int noise_level = 200000;
171
int noise_block = 0;
172
int tc_moves = 60;
173
int tc_time = 180000;
174
int tc_time_remaining[2] = { 180000, 180000 };
175
int tc_moves_remaining[2] = { 60, 60 };
176
int tc_secondary_moves = 30;
177
int tc_secondary_time = 90000;
178
int tc_increment = 0;
179
int tc_sudden_death = 0;
180
int tc_operator_time = 0;
181
int tc_safety_margin = 0;
182
int draw_score[2] = { 0, 0 };
183
char kibitz_text[4096];
184
int kibitz_depth;
185
int move_number = 1;
186
int moves_out_of_book = 0;
187
int first_nonbook_factor = 0;
188
int first_nonbook_span = 0;
189
int smp_nice = 1;
190
#if defined(SKILL)
191
int skill = 100;
192
#endif
193
int show_book = 0;
194
int book_selection_width = 5;
195
int ponder = 1;
196
int trace_level = 0;
197
/*  for the following 6 lines, each pair should have */
198
/*  the same numeric value (the size value).         */
199
size_t hash_table_size = 524288;
200
uint64_t hash_mask = (524288 -1) & ~3;
201
size_t hash_path_size = 65536;
202
uint64_t hash_path_mask = (65536 - 1) & ~15;
203
size_t pawn_hash_table_size = 16384;
204
uint64_t pawn_hash_mask = 16384 - 1;
205
int abs_draw_score = 1;
206
int accept_draws = 1;
207
const char translate[13] =
208
    { 'k', 'q', 'r', 'b', 'n', 'p', 0, 'P', 'N', 'B', 'R', 'Q', 'K' };
209
int16_t knight_mobility_table[64];
210
uint64_t magic_bishop[64] = {
211
  0x0002020202020200ull, 0x0002020202020000ull, 0x0004010202000000ull,
212
  0x0004040080000000ull, 0x0001104000000000ull, 0x0000821040000000ull,
213
  0x0000410410400000ull, 0x0000104104104000ull, 0x0000040404040400ull,
214
  0x0000020202020200ull, 0x0000040102020000ull, 0x0000040400800000ull,
215
  0x0000011040000000ull, 0x0000008210400000ull, 0x0000004104104000ull,
216
  0x0000002082082000ull, 0x0004000808080800ull, 0x0002000404040400ull,
217
  0x0001000202020200ull, 0x0000800802004000ull, 0x0000800400A00000ull,
218
  0x0000200100884000ull, 0x0000400082082000ull, 0x0000200041041000ull,
219
  0x0002080010101000ull, 0x0001040008080800ull, 0x0000208004010400ull,
220
  0x0000404004010200ull, 0x0000840000802000ull, 0x0000404002011000ull,
221
  0x0000808001041000ull, 0x0000404000820800ull, 0x0001041000202000ull,
222
  0x0000820800101000ull, 0x0000104400080800ull, 0x0000020080080080ull,
223
  0x0000404040040100ull, 0x0000808100020100ull, 0x0001010100020800ull,
224
  0x0000808080010400ull, 0x0000820820004000ull, 0x0000410410002000ull,
225
  0x0000082088001000ull, 0x0000002011000800ull, 0x0000080100400400ull,
226
  0x0001010101000200ull, 0x0002020202000400ull, 0x0001010101000200ull,
227
  0x0000410410400000ull, 0x0000208208200000ull, 0x0000002084100000ull,
228
  0x0000000020880000ull, 0x0000001002020000ull, 0x0000040408020000ull,
229
  0x0004040404040000ull, 0x0002020202020000ull, 0x0000104104104000ull,
230
  0x0000002082082000ull, 0x0000000020841000ull, 0x0000000000208800ull,
231
  0x0000000010020200ull, 0x0000000404080200ull, 0x0000040404040400ull,
232
  0x0002020202020200ull
233
};
234
uint64_t magic_bishop_mask[64] = {
235
  0x0040201008040200ull, 0x0000402010080400ull, 0x0000004020100A00ull,
236
  0x0000000040221400ull, 0x0000000002442800ull, 0x0000000204085000ull,
237
  0x0000020408102000ull, 0x0002040810204000ull, 0x0020100804020000ull,
238
  0x0040201008040000ull, 0x00004020100A0000ull, 0x0000004022140000ull,
239
  0x0000000244280000ull, 0x0000020408500000ull, 0x0002040810200000ull,
240
  0x0004081020400000ull, 0x0010080402000200ull, 0x0020100804000400ull,
241
  0x004020100A000A00ull, 0x0000402214001400ull, 0x0000024428002800ull,
242
  0x0002040850005000ull, 0x0004081020002000ull, 0x0008102040004000ull,
243
  0x0008040200020400ull, 0x0010080400040800ull, 0x0020100A000A1000ull,
244
  0x0040221400142200ull, 0x0002442800284400ull, 0x0004085000500800ull,
245
  0x0008102000201000ull, 0x0010204000402000ull, 0x0004020002040800ull,
246
  0x0008040004081000ull, 0x00100A000A102000ull, 0x0022140014224000ull,
247
  0x0044280028440200ull, 0x0008500050080400ull, 0x0010200020100800ull,
248
  0x0020400040201000ull, 0x0002000204081000ull, 0x0004000408102000ull,
249
  0x000A000A10204000ull, 0x0014001422400000ull, 0x0028002844020000ull,
250
  0x0050005008040200ull, 0x0020002010080400ull, 0x0040004020100800ull,
251
  0x0000020408102000ull, 0x0000040810204000ull, 0x00000A1020400000ull,
252
  0x0000142240000000ull, 0x0000284402000000ull, 0x0000500804020000ull,
253
  0x0000201008040200ull, 0x0000402010080400ull, 0x0002040810204000ull,
254
  0x0004081020400000ull, 0x000A102040000000ull, 0x0014224000000000ull,
255
  0x0028440200000000ull, 0x0050080402000000ull, 0x0020100804020000ull,
256
  0x0040201008040200ull
257
};
258
unsigned int magic_bishop_shift[64] = {
259
  58, 59, 59, 59, 59, 59, 59, 58,
260
  59, 59, 59, 59, 59, 59, 59, 59,
261
  59, 59, 57, 57, 57, 57, 59, 59,
262
  59, 59, 57, 55, 55, 57, 59, 59,
263
  59, 59, 57, 55, 55, 57, 59, 59,
264
  59, 59, 57, 57, 57, 57, 59, 59,
265
  59, 59, 59, 59, 59, 59, 59, 59,
266
  58, 59, 59, 59, 59, 59, 59, 58
267
};
268
uint64_t magic_bishop_table[5248];
269
uint64_t *magic_bishop_indices[64] = {
270
  magic_bishop_table + 4992, magic_bishop_table + 2624,
271
  magic_bishop_table + 256, magic_bishop_table + 896,
272
  magic_bishop_table + 1280, magic_bishop_table + 1664,
273
  magic_bishop_table + 4800, magic_bishop_table + 5120,
274
  magic_bishop_table + 2560, magic_bishop_table + 2656,
275
  magic_bishop_table + 288, magic_bishop_table + 928,
276
  magic_bishop_table + 1312, magic_bishop_table + 1696,
277
  magic_bishop_table + 4832, magic_bishop_table + 4928,
278
  magic_bishop_table + 0, magic_bishop_table + 128,
279
  magic_bishop_table + 320, magic_bishop_table + 960,
280
  magic_bishop_table + 1344, magic_bishop_table + 1728,
281
  magic_bishop_table + 2304, magic_bishop_table + 2432,
282
  magic_bishop_table + 32, magic_bishop_table + 160,
283
  magic_bishop_table + 448, magic_bishop_table + 2752,
284
  magic_bishop_table + 3776, magic_bishop_table + 1856,
285
  magic_bishop_table + 2336, magic_bishop_table + 2464,
286
  magic_bishop_table + 64, magic_bishop_table + 192,
287
  magic_bishop_table + 576, magic_bishop_table + 3264,
288
  magic_bishop_table + 4288, magic_bishop_table + 1984,
289
  magic_bishop_table + 2368, magic_bishop_table + 2496,
290
  magic_bishop_table + 96, magic_bishop_table + 224,
291
  magic_bishop_table + 704, magic_bishop_table + 1088,
292
  magic_bishop_table + 1472, magic_bishop_table + 2112,
293
  magic_bishop_table + 2400, magic_bishop_table + 2528,
294
  magic_bishop_table + 2592, magic_bishop_table + 2688,
295
  magic_bishop_table + 832, magic_bishop_table + 1216,
296
  magic_bishop_table + 1600, magic_bishop_table + 2240,
297
  magic_bishop_table + 4864, magic_bishop_table + 4960,
298
  magic_bishop_table + 5056, magic_bishop_table + 2720,
299
  magic_bishop_table + 864, magic_bishop_table + 1248,
300
  magic_bishop_table + 1632, magic_bishop_table + 2272,
301
  magic_bishop_table + 4896, magic_bishop_table + 5184
302
};
303
int16_t magic_bishop_mobility_table[5248];
304
int16_t *magic_bishop_mobility_indices[64] = {
305
  magic_bishop_mobility_table + 4992, magic_bishop_mobility_table + 2624,
306
  magic_bishop_mobility_table + 256, magic_bishop_mobility_table + 896,
307
  magic_bishop_mobility_table + 1280, magic_bishop_mobility_table + 1664,
308
  magic_bishop_mobility_table + 4800, magic_bishop_mobility_table + 5120,
309
  magic_bishop_mobility_table + 2560, magic_bishop_mobility_table + 2656,
310
  magic_bishop_mobility_table + 288, magic_bishop_mobility_table + 928,
311
  magic_bishop_mobility_table + 1312, magic_bishop_mobility_table + 1696,
312
  magic_bishop_mobility_table + 4832, magic_bishop_mobility_table + 4928,
313
  magic_bishop_mobility_table + 0, magic_bishop_mobility_table + 128,
314
  magic_bishop_mobility_table + 320, magic_bishop_mobility_table + 960,
315
  magic_bishop_mobility_table + 1344, magic_bishop_mobility_table + 1728,
316
  magic_bishop_mobility_table + 2304, magic_bishop_mobility_table + 2432,
317
  magic_bishop_mobility_table + 32, magic_bishop_mobility_table + 160,
318
  magic_bishop_mobility_table + 448, magic_bishop_mobility_table + 2752,
319
  magic_bishop_mobility_table + 3776, magic_bishop_mobility_table + 1856,
320
  magic_bishop_mobility_table + 2336, magic_bishop_mobility_table + 2464,
321
  magic_bishop_mobility_table + 64, magic_bishop_mobility_table + 192,
322
  magic_bishop_mobility_table + 576, magic_bishop_mobility_table + 3264,
323
  magic_bishop_mobility_table + 4288, magic_bishop_mobility_table + 1984,
324
  magic_bishop_mobility_table + 2368, magic_bishop_mobility_table + 2496,
325
  magic_bishop_mobility_table + 96, magic_bishop_mobility_table + 224,
326
  magic_bishop_mobility_table + 704, magic_bishop_mobility_table + 1088,
327
  magic_bishop_mobility_table + 1472, magic_bishop_mobility_table + 2112,
328
  magic_bishop_mobility_table + 2400, magic_bishop_mobility_table + 2528,
329
  magic_bishop_mobility_table + 2592, magic_bishop_mobility_table + 2688,
330
  magic_bishop_mobility_table + 832, magic_bishop_mobility_table + 1216,
331
  magic_bishop_mobility_table + 1600, magic_bishop_mobility_table + 2240,
332
  magic_bishop_mobility_table + 4864, magic_bishop_mobility_table + 4960,
333
  magic_bishop_mobility_table + 5056, magic_bishop_mobility_table + 2720,
334
  magic_bishop_mobility_table + 864, magic_bishop_mobility_table + 1248,
335
  magic_bishop_mobility_table + 1632, magic_bishop_mobility_table + 2272,
336
  magic_bishop_mobility_table + 4896, magic_bishop_mobility_table + 5184
337
};
338
uint64_t magic_rook_table[102400];
339
uint64_t *magic_rook_indices[64] = {
340
  magic_rook_table + 86016, magic_rook_table + 73728,
341
  magic_rook_table + 36864, magic_rook_table + 43008,
342
  magic_rook_table + 47104, magic_rook_table + 51200,
343
  magic_rook_table + 77824, magic_rook_table + 94208,
344
  magic_rook_table + 69632, magic_rook_table + 32768,
345
  magic_rook_table + 38912, magic_rook_table + 10240,
346
  magic_rook_table + 14336, magic_rook_table + 53248,
347
  magic_rook_table + 57344, magic_rook_table + 81920,
348
  magic_rook_table + 24576, magic_rook_table + 33792,
349
  magic_rook_table + 6144, magic_rook_table + 11264,
350
  magic_rook_table + 15360, magic_rook_table + 18432,
351
  magic_rook_table + 58368, magic_rook_table + 61440,
352
  magic_rook_table + 26624, magic_rook_table + 4096,
353
  magic_rook_table + 7168, magic_rook_table + 0,
354
  magic_rook_table + 2048, magic_rook_table + 19456,
355
  magic_rook_table + 22528, magic_rook_table + 63488,
356
  magic_rook_table + 28672, magic_rook_table + 5120,
357
  magic_rook_table + 8192, magic_rook_table + 1024,
358
  magic_rook_table + 3072, magic_rook_table + 20480,
359
  magic_rook_table + 23552, magic_rook_table + 65536,
360
  magic_rook_table + 30720, magic_rook_table + 34816,
361
  magic_rook_table + 9216, magic_rook_table + 12288,
362
  magic_rook_table + 16384, magic_rook_table + 21504,
363
  magic_rook_table + 59392, magic_rook_table + 67584,
364
  magic_rook_table + 71680, magic_rook_table + 35840,
365
  magic_rook_table + 39936, magic_rook_table + 13312,
366
  magic_rook_table + 17408, magic_rook_table + 54272,
367
  magic_rook_table + 60416, magic_rook_table + 83968,
368
  magic_rook_table + 90112, magic_rook_table + 75776,
369
  magic_rook_table + 40960, magic_rook_table + 45056,
370
  magic_rook_table + 49152, magic_rook_table + 55296,
371
  magic_rook_table + 79872, magic_rook_table + 98304
372
};
373
int16_t magic_rook_mobility_table[102400];
374
int16_t *magic_rook_mobility_indices[64] = {
375
  magic_rook_mobility_table + 86016, magic_rook_mobility_table + 73728,
376
  magic_rook_mobility_table + 36864, magic_rook_mobility_table + 43008,
377
  magic_rook_mobility_table + 47104, magic_rook_mobility_table + 51200,
378
 
379
  magic_rook_mobility_table + 69632, magic_rook_mobility_table + 32768,
380
  magic_rook_mobility_table + 38912, magic_rook_mobility_table + 10240,
381
  magic_rook_mobility_table + 14336, magic_rook_mobility_table + 53248,
382
  magic_rook_mobility_table + 57344, magic_rook_mobility_table + 81920,
383
  magic_rook_mobility_table + 24576, magic_rook_mobility_table + 33792,
384
  magic_rook_mobility_table + 6144, magic_rook_mobility_table + 11264,
385
  magic_rook_mobility_table + 15360, magic_rook_mobility_table + 18432,
386
  magic_rook_mobility_table + 58368, magic_rook_mobility_table + 61440,
387
  magic_rook_mobility_table + 26624, magic_rook_mobility_table + 4096,
388
  magic_rook_mobility_table + 7168, magic_rook_mobility_table + 0,
389
  magic_rook_mobility_table + 2048, magic_rook_mobility_table + 19456,
390
  magic_rook_mobility_table + 22528, magic_rook_mobility_table + 63488,
391
  magic_rook_mobility_table + 28672, magic_rook_mobility_table + 5120,
392
  magic_rook_mobility_table + 8192, magic_rook_mobility_table + 1024,
393
  magic_rook_mobility_table + 3072, magic_rook_mobility_table + 20480,
394
  magic_rook_mobility_table + 23552, magic_rook_mobility_table + 65536,
395
  magic_rook_mobility_table + 30720, magic_rook_mobility_table + 34816,
396
  magic_rook_mobility_table + 9216, magic_rook_mobility_table + 12288,
397
  magic_rook_mobility_table + 16384, magic_rook_mobility_table + 21504,
398
  magic_rook_mobility_table + 59392, magic_rook_mobility_table + 67584,
399
  magic_rook_mobility_table + 71680, magic_rook_mobility_table + 35840,
400
  magic_rook_mobility_table + 39936, magic_rook_mobility_table + 13312,
401
  magic_rook_mobility_table + 17408, magic_rook_mobility_table + 54272,
402
  magic_rook_mobility_table + 60416, magic_rook_mobility_table + 83968,
403
  magic_rook_mobility_table + 90112, magic_rook_mobility_table + 75776,
404
  magic_rook_mobility_table + 40960, magic_rook_mobility_table + 45056,
405
  magic_rook_mobility_table + 49152, magic_rook_mobility_table + 55296,
406
  magic_rook_mobility_table + 79872, magic_rook_mobility_table + 98304
407
};
408
uint64_t magic_rook[64] = {
409
  0x0080001020400080ull, 0x0040001000200040ull, 0x0080081000200080ull,
410
  0x0080040800100080ull, 0x0080020400080080ull, 0x0080010200040080ull,
411
  0x0080008001000200ull, 0x0080002040800100ull, 0x0000800020400080ull,
412
  0x0000400020005000ull, 0x0000801000200080ull, 0x0000800800100080ull,
413
  0x0000800400080080ull, 0x0000800200040080ull, 0x0000800100020080ull,
414
  0x0000800040800100ull, 0x0000208000400080ull, 0x0000404000201000ull,
415
  0x0000808010002000ull, 0x0000808008001000ull, 0x0000808004000800ull,
416
  0x0000808002000400ull, 0x0000010100020004ull, 0x0000020000408104ull,
417
  0x0000208080004000ull, 0x0000200040005000ull, 0x0000100080200080ull,
418
  0x0000080080100080ull, 0x0000040080080080ull, 0x0000020080040080ull,
419
  0x0000010080800200ull, 0x0000800080004100ull, 0x0000204000800080ull,
420
  0x0000200040401000ull, 0x0000100080802000ull, 0x0000080080801000ull,
421
  0x0000040080800800ull, 0x0000020080800400ull, 0x0000020001010004ull,
422
  0x0000800040800100ull, 0x0000204000808000ull, 0x0000200040008080ull,
423
  0x0000100020008080ull, 0x0000080010008080ull, 0x0000040008008080ull,
424
  0x0000020004008080ull, 0x0000010002008080ull, 0x0000004081020004ull,
425
  0x0000204000800080ull, 0x0000200040008080ull, 0x0000100020008080ull,
426
  0x0000080010008080ull, 0x0000040008008080ull, 0x0000020004008080ull,
427
  0x0000800100020080ull, 0x0000800041000080ull, 0x00FFFCDDFCED714Aull,
428
  0x007FFCDDFCED714Aull, 0x003FFFCDFFD88096ull, 0x0000040810002101ull,
429
  0x0001000204080011ull, 0x0001000204000801ull, 0x0001000082000401ull,
430
  0x0001FFFAABFAD1A2ull
431
};
432
uint64_t magic_rook_mask[64] = {
433
  0x000101010101017Eull, 0x000202020202027Cull, 0x000404040404047Aull,
434
  0x0008080808080876ull, 0x001010101010106Eull, 0x002020202020205Eull,
435
  0x004040404040403Eull, 0x008080808080807Eull, 0x0001010101017E00ull,
436
  0x0002020202027C00ull, 0x0004040404047A00ull, 0x0008080808087600ull,
437
  0x0010101010106E00ull, 0x0020202020205E00ull, 0x0040404040403E00ull,
438
  0x0080808080807E00ull, 0x00010101017E0100ull, 0x00020202027C0200ull,
439
  0x00040404047A0400ull, 0x0008080808760800ull, 0x00101010106E1000ull,
440
  0x00202020205E2000ull, 0x00404040403E4000ull, 0x00808080807E8000ull,
441
  0x000101017E010100ull, 0x000202027C020200ull, 0x000404047A040400ull,
442
  0x0008080876080800ull, 0x001010106E101000ull, 0x002020205E202000ull,
443
  0x004040403E404000ull, 0x008080807E808000ull, 0x0001017E01010100ull,
444
  0x0002027C02020200ull, 0x0004047A04040400ull, 0x0008087608080800ull,
445
  0x0010106E10101000ull, 0x0020205E20202000ull, 0x0040403E40404000ull,
446
  0x0080807E80808000ull, 0x00017E0101010100ull, 0x00027C0202020200ull,
447
  0x00047A0404040400ull, 0x0008760808080800ull, 0x00106E1010101000ull,
448
  0x00205E2020202000ull, 0x00403E4040404000ull, 0x00807E8080808000ull,
449
  0x007E010101010100ull, 0x007C020202020200ull, 0x007A040404040400ull,
450
  0x0076080808080800ull, 0x006E101010101000ull, 0x005E202020202000ull,
451
  0x003E404040404000ull, 0x007E808080808000ull, 0x7E01010101010100ull,
452
  0x7C02020202020200ull, 0x7A04040404040400ull, 0x7608080808080800ull,
453
  0x6E10101010101000ull, 0x5E20202020202000ull, 0x3E40404040404000ull,
454
  0x7E80808080808000ull
455
};
456
unsigned int magic_rook_shift[64] = {
457
  52, 53, 53, 53, 53, 53, 53, 52,
458
  53, 54, 54, 54, 54, 54, 54, 53,
459
  53, 54, 54, 54, 54, 54, 54, 53,
460
  53, 54, 54, 54, 54, 54, 54, 53,
461
  53, 54, 54, 54, 54, 54, 54, 53,
462
  53, 54, 54, 54, 54, 54, 54, 53,
463
  53, 54, 54, 54, 54, 54, 54, 53,
464
  53, 54, 54, 53, 53, 53, 53, 53
465
};
466
uint64_t mobility_mask_n[4] = {
467
  0xFF818181818181FFull, 0x007E424242427E00ull,
468
  0x00003C24243C0000ull, 0x0000001818000000ull
469
};
470
uint64_t mobility_mask_b[4] = {
471
  0xFF818181818181FFull, 0x007E424242427E00ull,
472
  0x00003C24243C0000ull, 0x0000001818000000ull
473
};
474
uint64_t mobility_mask_r[4] = {
475
  0x8181818181818181ull, 0x4242424242424242ull,
476
  0x2424242424242424ull, 0x1818181818181818ull
477
};
478
/*
479
  values use to deal with white/black independently
480
 */
481
const int rankflip[2][8] = {
482
  { RANK8, RANK7, RANK6, RANK5, RANK4, RANK3, RANK2, RANK1 },
483
  { RANK1, RANK2, RANK3, RANK4, RANK5, RANK6, RANK7, RANK8 }
484
};
485
const int sqflip[2][64] = {
486
 { A8, B8, C8, D8, E8, F8, G8, H8,
487
   A7, B7, C7, D7, E7, F7, G7, H7,
488
   A6, B6, C6, D6, E6, F6, G6, H6,
489
   A5, B5, C5, D5, E5, F5, G5, H5,
490
   A4, B4, C4, D4, E4, F4, G4, H4,   /* black */
491
   A3, B3, C3, D3, E3, F3, G3, H3,
492
   A2, B2, C2, D2, E2, F2, G2, H2,
493
   A1, B1, C1, D1, E1, F1, G1, H1 },
494
495
 { A1, B1, C1, D1, E1, F1, G1, H1,
496
   A2, B2, C2, D2, E2, F2, G2, H2,
497
   A3, B3, C3, D3, E3, F3, G3, H3,
498
   A4, B4, C4, D4, E4, F4, G4, H4,
499
   A5, B5, C5, D5, E5, F5, G5, H5,   /* white */
500
   A6, B6, C6, D6, E6, F6, G6, H6,
501
   A7, B7, C7, D7, E7, F7, G7, H7,
502
   A8, B8, C8, D8, E8, F8, G8, H8 }
503
};
504
const int sign[2] = { -1, 1 };
505
int direction[2] = { -8, 8 };
506
int dark_corner[2] = { FILEA, FILEH };
507
int light_corner[2] = { FILEH, FILEA };
508
int epsq[2] = { +8, -8 };
509
int rook_A[2] = { A8, A1 };
510
int rook_D[2] = { D8, D1 };
511
int rook_F[2] = { F8, F1 };
512
int rook_G[2] = { G8, G1 };
513
int rook_H[2] = { H8, H1 };
514
int pawnadv1[2] = { +8, -8 };
515
int pawnadv2[2] = { +16, -16 };
516
int capleft[2] = { +9, -7 };
517
int capright[2] = { +7, -9 };
518
const char empty_sqs[9] = { 0, '1', '2', '3', '4', '5', '6', '7', '8' };
519
/*
520
   This array is indexed by rook advantage and minor piece advantage.
521
   rook advantage is 4 + white rook equivalents - black rook equivalents
522
   where a rook equivalent is number of rooks + 2 * number of queens.
523
   minor piece advantage is 4 + white minors - black minors.  
524
525
   The classic bad trade case is two minors for a rook.  If white trades
526
   two minors for a rook, rook advantage is +5 and minor advantage is +2.
527
   imbalance[5][2] gives a penalty of -42 for this trade.
528
*/
529
int imbalance[9][9] = {
530
/* M=-4  M=-3  M=-2  M=-1   M=0  M=+1  M=+2  M=+3  M=+4 */
531
  {-126, -126, -126, -126, -126, -126, -126, -126,  -42 }, /* R=-4 */
532
  {-126, -126, -126, -126, -126, -126, -126,  -42,   42 }, /* R=-3 */
533
  {-126, -126, -126, -126, -126, -126,  -42,   84,   84 }, /* R=-2 */
534
  {-126, -126, -126, -126, -104,  -42,   84,  126,  126 }, /* R=-1 */
535
  {-126, -126, -126,  -88,    0,   88,  126,  126,  126 }, /*  R=0 */
536
  {-126, -126,  -84,   42,  104,  126,  126,  126,  126 }, /* R=+1 */
537
  { -84,  -84,   42,  126,  126,  126,  126,  126,  126 }, /* R=+2 */
538
  { -42,   42,  126,  126,  126,  126,  126,  126,  126 }, /* R=+3 */
539
  {  42,  126,  126,  126,  126,  126,  126,  126,  126 }  /* R=+4 */
540
};
541
int pp_dist_bonus[8] = { 0, 0, 0, 2, 7, 19, 31, 0 };
542
int king_tropism_n[8] = { 0, 3, 3, 2, 1, 0, 0, 0 };
543
int king_tropism_b[8] = { 0, 2, 2, 1, 0, 0, 0, 0 };
544
int king_tropism_r[8] = { 0, 4, 3, 2, 1, 1, 1, 1 };
545
int king_tropism_q[8] = { 0, 6, 5, 4, 3, 2, 2, 2 };
546
int passed_pawn_value[2][8] = {
547
  { 0, 6, 6, 30, 70, 120, 200, 0 },              /* [mg][8] */
548
  { 0, 7, 7, 33, 77, 132, 220, 0 }               /* [eg][8] */
549
};
550
int passed_pawn_connected[2][8] = {
551
  { 0, 1, 1, 3,  7, 12, 20, 0 },                 /* [mg][8] */
552
  { 0, 2, 2, 9, 21, 36, 60, 0 }                  /* [eg][8] */
553
};
554
int rook_behind_passed_pawn[2][8] = {
555
  { 0, 1, 1, 3,  7, 12, 20, 0 },                 /* [mg][8] */
556
  { 0, 2, 2, 9, 21, 36, 60, 0 }                  /* [eg][8] */
557
};
558
int passed_pawn_blockaded_by_enemy[2][8] = {
559
  { 0, 3, 3, 14, 33, 57, 95, 0 },                /* [mg][8] */
560
  { 0, 2, 2, 11, 25, 42, 70, 0 }                 /* [eg][8] */
561
};
562
int passed_pawn_blockaded_by_friendly[2][8] = {
563
  { 0, 1, 1, 7, 16, 27, 45, 0 },                 /* [mg][8] */
564
  { 0, 1, 1, 3,  7, 12, 20, 0 }                  /* [eg][8] */
565
};
566
int passed_pawn_obstructed[8] = { 0, 1, 1, 4, 9, 15, 25, 0 };
567
int passed_pawn_far_away[8] = { 0, 1, 1, 6, 14, 24, 40, 0 };
568
int passed_pawn_not_far_away[8] = { 0, 1, 1, 4, 9, 15, 25, 0 };
569
int passed_pawn_candidate[2][8] = {
570
  { 0,  4,  4,  8, 16, 36,  0, 0 },         /* [mg][rank] */
571
  { 0,  9,  9, 16, 32, 48,  0, 0 }          /* [eg][rank] */
572
};
573
int passed_pawn_hidden[2] = { 0, 40 };
574
int doubled_pawn_value[2] = { 5, 6 };
575
int outside_passed[2] = { 20, 60 };
576
int pawn_defects[2][8] = {
577
  { 0, 0, 0, 1, 2, 3, 0, 0 },               /* [black][8] */
578
  { 0, 0, 3, 2, 1, 0, 0, 0 }                /* [white][8] */
579
};
580
const char square_color[64] = {
581
  1, 0, 1, 0, 1, 0, 1, 0,
582
  0, 1, 0, 1, 0, 1, 0, 1,
583
  1, 0, 1, 0, 1, 0, 1, 0,
584
  0, 1, 0, 1, 0, 1, 0, 1,
585
  1, 0, 1, 0, 1, 0, 1, 0,
586
  0, 1, 0, 1, 0, 1, 0, 1,
587
  1, 0, 1, 0, 1, 0, 1, 0,
588
  0, 1, 0, 1, 0, 1, 0, 1
589
};
590
const char b_n_mate_dark_squares[64] = {
591
  99, 90, 80, 70, 60, 50, 40, 30,
592
  90, 80, 70, 60, 50, 40, 30, 40,
593
  80, 70, 60, 50, 40, 30, 40, 50,
594
  70, 60, 50, 40, 30, 40, 50, 60,
595
  60, 50, 40, 30, 40, 50, 60, 70,
596
  50, 40, 30, 40, 50, 60, 70, 80,
597
  40, 30, 40, 50, 60, 70, 80, 90,
598
  30, 40, 50, 60, 70, 80, 90, 99
599
};
600
const char b_n_mate_light_squares[64] = {
601
  30, 40, 50, 60, 70, 80, 90, 99,
602
  40, 30, 40, 50, 60, 70, 80, 90,
603
  50, 40, 30, 40, 50, 60, 70, 80,
604
  60, 50, 40, 30, 40, 50, 60, 70,
605
  70, 60, 50, 40, 30, 40, 50, 60,
606
  80, 70, 60, 50, 40, 30, 40, 50,
607
  90, 80, 70, 60, 50, 40, 30, 40,
608
  99, 90, 80, 70, 60, 50, 40, 30
609
};
610
const int mate[64] = {
611
  200, 180, 160, 140, 140, 160, 180, 200,
612
  180, 160, 140, 120, 120, 140, 160, 180,
613
  160, 140, 120, 100, 100, 120, 140, 160,
614
  140, 120, 100, 100, 100, 100, 120, 140,
615
  140, 120, 100, 100, 100, 100, 120, 140,
616
  160, 140, 120, 100, 100, 120, 140, 160,
617
  180, 160, 140, 120, 120, 140, 160, 180,
618
  200, 180, 160, 140, 140, 160, 180, 200
619
};
620
int knight_outpost[2][64] = {
621
  { 0, 0, 0, 0, 0, 0, 0, 0,
622
    0, 0, 0, 0, 0, 0, 0, 0,
623
    0, 1, 4, 4, 4, 4, 1, 0,
624
    0, 2, 6, 8, 8, 6, 2, 0,
625
    0, 1, 4, 4, 4, 4, 1, 0,   /* [black][64] */
626
    0, 0, 0, 0, 0, 0, 0, 0,
627
    0, 0, 0, 0, 0, 0, 0, 0,
628
    0, 0, 0, 0, 0, 0, 0, 0 },
629
630
  { 0, 0, 0, 0, 0, 0, 0, 0,
631
    0, 0, 0, 0, 0, 0, 0, 0,
632
    0, 0, 0, 0, 0, 0, 0, 0,
633
    0, 1, 4, 4, 4, 4, 1, 0,
634
    0, 2, 6, 8, 8, 6, 2, 0,   /* [white][64] */
635
    0, 1, 4, 4, 4, 4, 1, 0,
636
    0, 0, 0, 0, 0, 0, 0, 0,
637
    0, 0, 0, 0, 0, 0, 0, 0 }
638
};
639
int bishop_outpost[2][64] = {
640
  { 0, 0, 0, 0, 0, 0, 0, 0,
641
   -1, 0, 0, 0, 0, 0, 0,-1,
642
    0, 0, 1, 1, 1, 1, 0, 0,
643
    0, 1, 3, 3, 3, 3, 1, 0,
644
    0, 3, 5, 5, 5, 5, 3, 0,   /* [black][64] */
645
    0, 1, 2, 2, 2, 2, 1, 0,
646
    0, 0, 0, 0, 0, 0, 0, 0,
647
    0, 0, 0, 0, 0, 0, 0, 0 },
648
649
  { 0, 0, 0, 0, 0, 0, 0, 0,
650
    0, 0, 0, 0, 0, 0, 0, 0,
651
    0, 1, 2, 2, 2, 2, 1, 0,
652
    0, 3, 5, 5, 5, 5, 3, 0,
653
    0, 1, 3, 3, 3, 3, 1, 0,   /* [white][64] */
654
    0, 0, 1, 1, 1, 1, 0, 0,
655
   -1, 0, 0, 0, 0, 0, 0,-1,
656
    0, 0, 0, 0, 0, 0, 0, 0 }
657
};
658
int pval[2][2][64] = {
659
   {{ 0,   0,   0,   0,   0,   0,   0,   0,
660
     56,  66,  66,  66,  66,  66,  66,  56,
661
      0,  10,  10,  30,  30,  10,  10,   0,
662
     -4,   6,   6,  16,  16,   6,   6,  -4,
663
     -7,   3,   3,  13,  13,   3,   3,  -7,   /* [mg][black][64] */
664
     -9,   1,   1,  10,  10,   1,   1,  -9,
665
    -10,   0,   0, -12, -12,   0,   0, -10,
666
      0,   0,   0,   0,   0,   0,   0,   0 },
667
668
    { 0,   0,   0,   0,   0,   0,   0,   0,
669
    -10,   0,   0, -12, -12,   0,   0, -10,
670
     -9,   1,   1,  10,  10,   1,   1,  -9,
671
     -7,   3,   3,  13,  13,   3,   3,  -7,
672
     -4,   6,   6,  16,  16,   6,   6,  -4,   /* [mg][white][64] */
673
      0,  10,  10,  30,  30,  10,  10,   0,
674
     56,  66,  66,  66,  66,  66,  66,  56,
675
      0,   0,   0,   0,   0,   0,   0,   0 }},
676
677
   {{ 0,   0,   0,   0,   0,   0,   0,   0,
678
     56,  66,  66,  66,  66,  66,  66,  56,
679
      0,  10,  10,  30,  30,  10,  10,   0,
680
     -4,   6,   6,  16,  16,   6,   6,  -4,
681
     -7,   3,   3,  13,  13,   3,   3,  -7,   /* [eg][black][64] */
682
     -9,   1,   1,  10,  10,   1,   1,  -9,
683
    -10,   0,   0, -12, -12,   0,   0, -10,
684
      0,   0,   0,   0,   0,   0,   0,   0 },
685
686
    { 0,   0,   0,   0,   0,   0,   0,   0,
687
    -10,   0,   0, -12, -12,   0,   0, -10,
688
     -9,   1,   1,  10,  10,   1,   1,  -9,
689
     -7,   3,   3,  13,  13,   3,   3,  -7,
690
     -4,   6,   6,  16,  16,   6,   6,  -4,   /* [eg][white][64] */
691
      0,  10,  10,  30,  30,  10,  10,   0,
692
     56,  66,  66,  66,  66,  66,  66,  56,
693
      0,   0,   0,   0,   0,   0,   0,   0 }}
694
};
695
int nval[2][2][64] = {
696
  {{-29, -19, -19,  -9,  -9, -19, -19, -29,
697
      1,  12,  18,  22,  22,  18,  12,   1,
698
      1,  14,  23,  27,  27,  23,  14,   1,
699
      1,  14,  23,  28,  28,  23,  14,   1,
700
      1,  12,  21,  24,  24,  21,  12,   1,  /* [mg][black][64] */
701
      1,   2,  19,  17,  17,  19,   2,   1,
702
      1,   2,   2,   2,   2,   2,   2,   1,
703
    -19, -19, -19, -19, -19, -19, -19, -19 },
704
705
   {-19, -19, -19, -19, -19, -19, -19, -19,
706
      1,   2,   2,   2,   2,   2,   2,   1,
707
      1,   2,  19,  17,  17,  19,   2,   1,
708
      1,  12,  21,  24,  24,  21,  12,   1,
709
      1,  14,  23,  28,  28,  23,  14,   1,  /* [mg][white][64] */
710
      1,  14,  23,  27,  27,  23,  14,   1,
711
      1,  12,  18,  22,  22,  18,  12,   1,
712
    -29, -19, -19,  -9,  -9, -19, -19, -29 }},
713
714
  {{-29, -19, -19,  -9,  -9, -19, -19, -29,
715
      1,  12,  18,  22,  22,  18,  12,   1,
716
      1,  14,  23,  27,  27,  23,  14,   1,
717
      1,  14,  23,  28,  28,  23,  14,   1,
718
      1,  12,  21,  24,  24,  21,  12,   1,  /* [eg][black][64] */
719
      1,   2,  19,  17,  17,  19,   2,   1,
720
      1,   2,   2,   2,   2,   2,   2,   1,
721
    -19, -19, -19, -19, -19, -19, -19, -19 },
722
723
   {-19, -19, -19, -19, -19, -19, -19, -19,
724
      1,   2,   2,   2,   2,   2,   2,   1,
725
      1,   2,  19,  17,  17,  19,   2,   1,
726
      1,  12,  21,  24,  24,  21,  12,   1,
727
      1,  14,  23,  28,  28,  23,  14,   1,  /* [eg][white][64] */
728
      1,  14,  23,  27,  27,  23,  14,   1,
729
      1,  12,  18,  22,  22,  18,  12,   1,
730
    -29, -19, -19,  -9,  -9, -19, -19, -29 }}
731
};
732
int bval[2][2][64] = {
733
  {{  0,   0,   0,   0,   0,   0,   0,   0,
734
      0,   4,   4,   4,   4,   4,   4,   0,
735
      0,   4,   8,   8,   8,   8,   4,   0,
736
      0,   4,   8,  12,  12,   8,   4,   0,
737
      0,   4,   8,  12,  12,   8,   4,   0,  /* [mg][black][64] */
738
      0,   4,   8,   8,   8,   8,   4,   0,
739
      0,   4,   4,   4,   4,   4,   4,   0,
740
    -15, -15, -15, -15, -15, -15, -15, -15},
741
742
   {-15, -15, -15, -15, -15, -15, -15, -15,
743
      0,   4,   4,   4,   4,   4,   4,   0,
744
      0,   4,   8,   8,   8,   8,   4,   0,
745
      0,   4,   8,  12,  12,   8,   4,   0,
746
      0,   4,   8,  12,  12,   8,   4,   0,  /* [mg][white][64] */
747
      0,   4,   8,   8,   8,   8,   4,   0,
748
      0,   4,   4,   4,   4,   4,   4,   0,
749
      0,   0,   0,   0,   0,   0,   0,   0}},
750
  {{  0,   0,   0,   0,   0,   0,   0,   0,
751
      0,   4,   4,   4,   4,   4,   4,   0,
752
      0,   4,   8,   8,   8,   8,   4,   0,
753
      0,   4,   8,  12,  12,   8,   4,   0,
754
      0,   4,   8,  12,  12,   8,   4,   0,  /* [eg][black][64] */
755
      0,   4,   8,   8,   8,   8,   4,   0,
756
      0,   4,   4,   4,   4,   4,   4,   0,
757
    -15, -15, -15, -15, -15, -15, -15, -15},
758
759
   {-15, -15, -15, -15, -15, -15, -15, -15,
760
      0,   4,   4,   4,   4,   4,   4,   0,
761
      0,   4,   8,   8,   8,   8,   4,   0,
762
      0,   4,   8,  12,  12,   8,   4,   0,
763
      0,   4,   8,  12,  12,   8,   4,   0,  /* [eg][white][64] */
764
      0,   4,   8,   8,   8,   8,   4,   0,
765
      0,   4,   4,   4,   4,   4,   4,   0,
766
      0,   0,   0,   0,   0,   0,   0,   0}}
767
};
768
int qval[2][2][64] = {
769
   {{ 0,   0,   0,   0,   0,   0,   0,   0,
770
      0,   0,   4,   4,   4,   4,   0,   0,
771
      0,   4,   4,   6,   6,   4,   4,   0,
772
      0,   4,   6,   8,   8,   6,   4,   0,
773
      0,   4,   6,   8,   8,   6,   4,   0,   /* [mg][black][64] */
774
      0,   4,   4,   6,   6,   4,   4,   0,
775
      0,   0,   4,   4,   4,   4,   0,   0,
776
      0,   0,   0,   0,   0,   0,   0,   0 },
777
778
    { 0,   0,   0,   0,   0,   0,   0,   0,
779
      0,   0,   4,   4,   4,   4,   0,   0,
780
      0,   4,   4,   6,   6,   4,   4,   0,
781
      0,   4,   6,   8,   8,   6,   4,   0,
782
      0,   4,   6,   8,   8,   6,   4,   0,   /* [mg][white][64] */
783
      0,   4,   4,   6,   6,   4,   4,   0,
784
      0,   0,   4,   4,   4,   4,   0,   0,
785
      0,   0,   0,   0,   0,   0,   0,   0 }},
786
787
   {{ 0,   0,   0,   0,   0,   0,   0,   0,
788
      0,   0,   4,   4,   4,   4,   0,   0,
789
      0,   4,   4,   6,   6,   4,   4,   0,
790
      0,   4,   6,   8,   8,   6,   4,   0,
791
      0,   4,   6,   8,   8,   6,   4,   0,   /* [eg][black][64] */
792
      0,   4,   4,   6,   6,   4,   4,   0,
793
      0,   0,   4,   4,   4,   4,   0,   0,
794
      0,   0,   0,   0,   0,   0,   0,   0 },
795
796
    { 0,   0,   0,   0,   0,   0,   0,   0,
797
      0,   0,   4,   4,   4,   4,   0,   0,
798
      0,   4,   4,   6,   6,   4,   4,   0,
799
      0,   4,   6,   8,   8,   6,   4,   0,
800
      0,   4,   6,   8,   8,   6,   4,   0,   /* [eg][white][64] */
801
      0,   4,   4,   6,   6,   4,   4,   0,
802
      0,   0,   4,   4,   4,   4,   0,   0,
803
      0,   0,   0,   0,   0,   0,   0,   0 }}
804
};
805
int kval_n[2][64] = {
806
   {-40, -40, -40, -40, -40, -40, -40, -40,
807
    -40, -10, -10, -10, -10, -10, -10, -40,
808
    -40, -10,  60,  60,  60,  60, -10, -40,
809
    -40, -10,  60,  60,  60,  60, -10, -40,
810
    -40, -10,  40,  40,  40,  40, -10, -40,   /* [black][64] */
811
    -40, -10,  20,  20,  20,  20, -10, -40,
812
    -40, -10, -10, -10, -10, -10, -10, -40,
813
    -40, -40, -40, -40, -40, -40, -40, -40 },
814
815
   {-40, -40, -40, -40, -40, -40, -40, -40,
816
    -40, -10, -10, -10, -10, -10, -10, -40,
817
    -40, -10,  20,  20,  20,  20, -10, -40,
818
    -40, -10,  40,  40,  40,  40, -10, -40,
819
    -40, -10,  60,  60,  60,  60, -10, -40,   /* [white][64] */
820
    -40, -10,  60,  60,  60,  60, -10, -40,
821
    -40, -10, -10, -10, -10, -10, -10, -40,
822
    -40, -40, -40, -40, -40, -40, -40, -40 }
823
};
824
int kval_k[2][64] = {
825
   {-60, -40, -20, -20, -20, -20, -20, -20,
826
    -60, -40, -20,  20,  40,  40,  40,  40,
827
    -60, -40, -20,  20,  60,  60,  60,  40,
828
    -60, -40, -20,  20,  60,  60,  60,  40,
829
    -60, -40, -20,  20,  40,  40,  40,  40,   /* [black][64] */
830
    -60, -40, -20,  20,  20,  20,  20,  20,
831
    -60, -40, -20,   0,   0,   0,   0,   0,
832
    -60, -40, -20, -20, -20, -20, -20, -20 },
833
834
   {-60, -40, -20, -20, -20, -20, -20, -20,
835
    -60, -40, -20,   0,   0,   0,   0,   0,
836
    -60, -40, -20,  20,  20,  20,  20,  20,
837
    -60, -40, -20,  20,  40,  40,  40,  40,
838
    -60, -40, -20,  20,  60,  60,  60,  40,   /* [white][64] */
839
    -60, -40, -20,  20,  60,  60,  60,  40,
840
    -60, -40, -20,  20,  40,  40,  40,  40,
841
    -60, -40, -20, -20, -20, -20, -20, -20 }
842
};
843
int kval_q[2][64] = {
844
   {-20, -20, -20, -20, -20, -20, -40, -60,
845
     40,  40,  40,  40,  20, -20, -40, -60,
846
     40,  60,  60,  60,  20, -20, -40, -60,
847
     40,  60,  60,  60,  20, -20, -40, -60,
848
     40,  40,  40,  40,  20, -20, -40, -60,   /* [black][64] */
849
     20,  20,  20,  20,  20, -20, -40, -60,
850
      0,   0,   0,   0,   0, -20, -40, -60,
851
    -20, -20, -20, -20, -20, -20, -40, -60 },
852
853
   {-20, -20, -20, -20, -20, -20, -40, -60,
854
      0,   0,   0,   0,   0, -20, -40, -60,
855
     20,  20,  20,  20,  20, -20, -40, -60,
856
     40,  40,  40,  40,  20, -20, -40, -60,
857
     40,  60,  60,  60,  20, -20, -40, -60,   /* [white][64] */
858
     40,  60,  60,  60,  20, -20, -40, -60,
859
     40,  40,  40,  40,  20, -20, -40, -60,
860
    -20, -20, -20, -20, -20, -20, -40, -60 }
861
};
862
int safety_vector[16] = {
863
   0,  7, 14, 21, 28, 35, 42,  49,
864
  56, 63, 70, 77, 84, 91, 98, 105
865
};
866
int tropism_vector[16] = {
867
   0,  1,  2,  3,   4,   5,  11,  20,
868
  32, 47, 65, 86, 110, 137, 167, 200
869
};
870
const int p_values[13] = { 10000, 900, 500, 300, 300, 100, 0,
871
  100, 300, 300, 500, 900, 9900
872
};
873
const int pcval[7] = { 0, 100, 300, 300, 500, 900, 9900 };
874
const int p_vals[7] = { 0, 1, 3, 3, 5, 9, 99 };
875
const int pieces[2][7] = {
876
  { 0, -1, -2, -3, -4, -5, -6 },
877
  { 0, +1, +2, +3, +4, +5, +6 }
878
};
879
int piece_values[7][2] = { {0, 0},
880
  {-PAWN_VALUE, PAWN_VALUE},     {-KNIGHT_VALUE, KNIGHT_VALUE},
881
  {-BISHOP_VALUE, BISHOP_VALUE}, {-ROOK_VALUE, ROOK_VALUE},
882
  {-QUEEN_VALUE, QUEEN_VALUE},   {-KING_VALUE, KING_VALUE}
883
};
884
int pawn_can_promote = 525;
885
int wtm_bonus[2] = { 5, 8 };
886
int undeveloped_piece = 12;
887
int pawn_connected[2] = { 4, 8 };
888
int pawn_isolated[2] = { 18, 21 };
889
int pawn_weak[2] = { 8, 18 };
890
int lower_n = 16;
891
int mobility_score_n[4] = { 1, 2, 3, 4 };
892
int lower_b = 10;
893
int bishop_trapped = 174;
894
int bishop_with_wing_pawns[2] = { 18, 36 };
895
int bishop_pair[2] = { 38, 56 };
896
int mobility_score_b[4] = { 1, 2, 3, 4 };
897
int mobility_score_r[4] = { 1, 2, 3, 4 };
898
int rook_on_7th[2] = { 25, 35 };
899
int rook_open_file[2] = { 35, 20 };
900
int rook_half_open_file[2] = { 10, 10 };
901
int rook_trapped = 60;
902
int open_file[8] = { 6, 5, 4, 4, 4, 4, 5, 6 };
903
int half_open_file[8] = { 4, 4, 3, 3, 3, 3, 4, 4 };
904
int king_safety_mate_threat = 600;
905
int king_king_tropism = 10;
906
int development_thematic = 12;
907
int development_losing_castle = 20;
908
int development_not_castled = 20;
909
/*
910
   First term is a character string explaining what the eval
911
   term is used for.
912
913
  Second term is the "type" of the value.  
914
     0 = heading entry (no values, just a category name to display).
915
     1 = scalar value.
916
     2 = array[mg]
917
     3 = array[mg][side][64].  These values are displayed as 8x8
918
       boards with white values at the bottom, and the ranks/files
919
       labeled to make them easier to read.
920
     4 = array[side][64]
921
     5 = array[rank]
922
     6 = array[mg][8]
923
924
   Third term is the "size" of the scoring term, where 0 is a
925
     scalar value, otherwise it is the actual number of elements in
926
     an array of values.
927
928
   Fourth term is a pointer to the data value(s).
929
*/
930
 
931
  {"search options                       ", 0, 0, NULL},        /* 0 */
932
  {"check extension                      ", 1, 0, &check_depth},
933
  {"null-move reduction                  ", 1, 0, &null_depth},
934
  {"LMR min distance to frontier         ", 1, 0, &LMR_remaining_depth},
935
  {"LMR min reduction                    ", 1, 0, &LMR_min_reduction},
936
  {"LMR max reduction                    ", 1, 0, &LMR_max_reduction},
937
  {"prune depth                          ", 1, 0, &pruning_depth},
938
  {"prune margin [remain_depth]          ", 5, 8, pruning_margin},
939
  {NULL, 0, 0, NULL},
940
  {NULL, 0, 0, NULL},
941
  {"raw piece values                     ", 0, 0, NULL},        /* 10 */
942
  {"pawn value                           ", 2, 2, piece_values[pawn]},
943
  {"knight value                         ", 2, 2, piece_values[knight]},
944
  {"bishop value                         ", 2, 2, piece_values[bishop]},
945
  {"rook value                           ", 2, 2, piece_values[rook]},
946
  {"queen value                          ", 2, 2, piece_values[queen]},
947
  {NULL, 0, 0, NULL},
948
  {NULL, 0, 0, NULL},
949
  {NULL, 0, 0, NULL},
950
  {NULL, 0, 0, NULL},
951
  {"miscellaneous scoring values         ", 0, 0, NULL},        /* 20 */
952
  {"wtm bonus                            ", 2, 2, wtm_bonus},
953
  {"draw score                           ", 1, 0, &abs_draw_score},
954
#if defined(SKILL)
955
  {"skill level setting                  ", 1, 0, &skill},
956
#else
957
  {NULL, 0, 0, NULL},
958
#endif
959
  {NULL, 0, 0, NULL},
960
 
961
  {NULL, 0, 0, NULL},
962
  {NULL, 0, 0, NULL},
963
  {NULL, 0, 0, NULL},
964
  {NULL, 0, 0, NULL},
965
  {"pawn evaluation                      ", 0, 0, NULL},        /* 30 */
966
  {"pawn piece/square table (white)      ", 3, 256, (int *) pval},
967
  {"pawn connected                       ", 2, 2, pawn_connected},
968
  {"pawn isolated                        ", 2, 2, pawn_isolated},
969
  {"pawn weak                            ", 2, 2, pawn_weak},
970
  {"outside passed pawn                  ", 2, 2, outside_passed},
971
  {"hidden passed pawn                   ", 2, 2, passed_pawn_hidden},
972
  {"doubled pawn                         ", 2, 2, doubled_pawn_value},
973
  {"candidate passed pawn [rank]         ", 6, 16, (int *) passed_pawn_candidate},
974
  {"passed pawn [rank]                   ", 6, 16, (int *) passed_pawn_value},
975
  {"passed pawn blocked by enemy [rank]  ", 6, 16, (int *) passed_pawn_blockaded_by_enemy},
976
  {"passed pawn blocked by friend [rank] ", 6, 16, (int *) passed_pawn_blockaded_by_friendly},
977
  {"passed pawn connected [rank]         ", 6, 16, (int *) passed_pawn_connected},
978
  {"passed pawn obstructed [rank]        ", 5, 8, (int *) passed_pawn_obstructed},
979
  {"passed pawn far away [rank]          ", 5, 8, (int *) passed_pawn_far_away},
980
  {"passed pawn not far away [rank]      ", 5, 8, (int *) passed_pawn_not_far_away},
981
  {"pawn can promote                     ", 1, 0, &pawn_can_promote},
982
  {NULL, 0, 0, NULL},
983
  {NULL, 0, 0, NULL},
984
  {NULL, 0, 0, NULL},
985
  {"knight scoring                       ", 0, 0, NULL},        /* 50 */
986
  {"knight piece/square table (white)    ", 3, 256, (int *) nval},
987
  {"knight outpost [square]              ", 4, 128, (int *) knight_outpost},
988
  {"knight king tropism [distance]       ", 5, 8, king_tropism_n},
989
  {"knight mobility                      ", 5, 4, mobility_score_n},
990
  {NULL, 0, 0, NULL},
991
  {NULL, 0, 0, NULL},
992
  {NULL, 0, 0, NULL},
993
  {NULL, 0, 0, NULL},
994
  {NULL, 0, 0, NULL},
995
  {"bishop scoring                       ", 0, 0, NULL},        /* 60 */
996
  {"bishop piece/square table (white)    ", 3, 256, (int *) bval},
997
  {"bishop king tropism [distance]       ", 5, 8, king_tropism_b},
998
  {"bishop mobility/square table         ", 5, 4, mobility_score_b},
999
  {"bishop outpost [square]              ", 4, 128, (int *) bishop_outpost},
1000
  {"bishop with wing pawns               ", 2, 2, bishop_with_wing_pawns},
1001
  {"bishop pair                          ", 2, 2, bishop_pair},
1002
  {"bishop trapped                       ", 1, 0, &bishop_trapped},
1003
  {NULL, 0, 0, NULL},
1004
  {NULL, 0, 0, NULL},
1005
  {"rook scoring                         ", 0, 0, NULL},        /* 70 */
1006
  {"rook half open file                  ", 2, 2, rook_half_open_file},
1007
  {"rook open file                       ", 2, 2, rook_open_file},
1008
  {"rook king tropism [distance]         ", 5, 8, king_tropism_r},
1009
  {"rook mobility/square table           ", 5, 4, mobility_score_r},
1010
  {"rook on 7th                          ", 2, 2, rook_on_7th},
1011
  {"rook behind passed pawn              ", 6, 16, &rook_behind_passed_pawn[0][0]},
1012
  {"rook trapped                         ", 1, 0, &rook_trapped},
1013
  {NULL, 0, 0, NULL},
1014
  {NULL, 0, 0, NULL},
1015
  {"queen scoring                        ", 0, 0, NULL},        /* 80 */
1016
  {"queen piece/square table (white)     ", 3, 256, (int *) qval},
1017
  {"queen king tropism [distance]        ", 5, 8, king_tropism_q},
1018
  {NULL, 0, 0, NULL},
1019
  {NULL, 0, 0, NULL},
1020
  {NULL, 0, 0, NULL},
1021
  {NULL, 0, 0, NULL},
1022
  {NULL, 0, 0, NULL},
1023
  {NULL, 0, 0, NULL},
1024
  {NULL, 0, 0, NULL},
1025
  {"king scoring                         ", 0, 0, NULL},        /* 90 */
1026
  {"king piece/square normal             ", 4, 128, (int *)kval_n},
1027
  {"king piece/square kside pawns        ", 4, 128, (int *)kval_k},
1028
  {"king piece/square qside pawns        ", 4, 128, (int *)kval_q},
1029
  {"king safety pawn-shield vector       ", 6, 16, safety_vector},
1030
  {"king safety tropism vector           ", 6, 16, tropism_vector},
1031
  {"king safe open file [file]           ", 5, 8, open_file},
1032
  {"king safe half-open file [file]      ", 5, 8, half_open_file},
1033
  {"king king tropism (endgame)          ", 1, 0, &king_king_tropism},
1034
  {NULL, 0, 0, NULL},
1035
  {"development scoring                  ", 0, 0, NULL},        /* 100 */
1036
  {"development thematic                 ", 1, 0, &development_thematic},
1037
  {"development losing castle rights     ", 1, 0, &development_losing_castle},
1038
  {"development not castled              ", 1, 0, &development_not_castled},
1039
};
1040
/* *INDENT-ON* */
1041
 
1042