Subversion Repositories Games.Chess Giants

Rev

Rev 108 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  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.   magic_rook_mobility_table + 77824, magic_rook_mobility_table + 94208,
  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. struct personality_term personality_packet[256] = {
  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.   {NULL, 0, 0, NULL},
  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.