Rev 33 | Rev 154 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 33 | Rev 108 | ||
|---|---|---|---|
| Line 1... | Line 1... | ||
| 1 | #include "chess.h" | 1 | #include "chess.h" | 
| 2 | /* *INDENT-OFF* */#if !defined(INLINEASM) | 2 | /* *INDENT-OFF* */#if !defined(INLINEASM) | 
| 3 | unsigned char msb[65536]; | 3 | unsigned char msb[65536]; | 
| 4 | unsigned char lsb[65536]; | 4 | unsigned char lsb[65536]; | 
| 5 | #endif | 5 | #endif | 
| 6 | unsigned char msb_8bit[256]; | 6 | unsigned char msb_8bit[256]; | 
| 7 | unsigned char lsb_8bit[256]; | 7 | unsigned char lsb_8bit[256]; | 
| 8 | unsigned char pop_cnt_8bit[256]; | 8 | unsigned char pop_cnt_8bit[256]; | 
| 9 | unsigned char is_outside[256][256]; | 9 | uint64_t mask_pawn_connected[2][64]; | 
| 10 | uint64_t mask_pawn_connected[64]; | 10 | uint64_t mask_pawn_isolated[64]; | 
| 11 | uint64_t mask_pawn_isolated[64]; | 11 | uint64_t mask_passed[2][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]; | 12 | uint64_t mask_pattacks[2][64]; | 
| 16 | uint64_t pawn_race[2][2][64]; | 13 | uint64_t pawn_race[2][2][64]; | 
| 17 | BOOK_POSITION book_buffer[BOOK_CLUSTER_SIZE]; | 14 | BOOK_POSITION book_buffer[BOOK_CLUSTER_SIZE]; | 
| 18 | BOOK_POSITION book_buffer_char[BOOK_CLUSTER_SIZE]; | 15 | BOOK_POSITION book_buffer_char[BOOK_CLUSTER_SIZE]; | 
| 19 | int OOsqs[2][3] = {{ E8, F8, G8 }, { E1, F1, G1 }}; | 16 | const int OOsqs[2][3] = {{E8, F8, G8}, {E1, F1, G1}}; | 
| Line 29... | Line 26... | ||
| 29 | int call_flag = 0; | 26 | int call_flag = 0; | 
| 30 | int crafty_rating = 2500; | 27 | int crafty_rating = 2500; | 
| 31 | int opponent_rating = 2500; | 28 | int opponent_rating = 2500; | 
| 32 | int last_search_value = 0; | 29 | int last_search_value = 0; | 
| 33 | int pruning_margin[10] = {0, 100, 100, 200, 200, 300, 300, 400}; | 30 | int pruning_margin[10] = {0, 100, 150, 200, 250, 300, 400, 500, 600, 700}; | 
| 34 | int pruning_depth = | 31 | int pruning_depth = 7; | 
| 35 | int pgn_suggested_percent = 0; | 32 | int movecnt_pruning[4] = {0, 12, 15, 18}; | 
| 36 | char pgn_event[128] = { "?" }; | 33 | int movecnt_depth = 3; | 
| 37 | char pgn_site[128] = { "?" }; | 34 | int pgn_suggested_percent = 0; | 
| 38 | char pgn_date[128] = { "????.??.??" }; | 35 | char pgn_event[128] = {"?"}; | 
| 39 | char pgn_round[128] = { "?" }; | 36 | char pgn_site[128] = {"?"}; | 
| Line 41... | Line 38... | ||
| 41 | char pgn_white_elo[128] = { "" }; | 38 | char pgn_round[128] = {"?"}; | 
| 42 | char pgn_black[128] = { "Crafty " VERSION }; | 39 | char pgn_white[128] = {"unknown"}; | 
| 43 | char pgn_black_elo[128] = { "" }; | 40 | char pgn_white_elo[128] = {""}; | 
| 44 | char pgn_result[128] = { "*" }; | 41 | char pgn_black[128] = {"Crafty " VERSION}; | 
| 45 | char *B_list[128]; | 42 | char pgn_black_elo[128] = {""}; | 
| 46 | char | 43 | char pgn_result[128] = {"*"}; | 
| 47 | char *GM_list[128]; | 44 | char *B_list[128]; | 
| 48 | char *IM_list[128]; | 45 | char *AK_list[128]; | 
| - | 46 | char *GM_list[128]; | |
| 49 | char *SP_list[128]; | 47 | char *IM_list[128]; | 
| 50 | char *SP_opening_filename[128]; | 48 | char *SP_list[128]; | 
| 51 | char *SP_personality_filename[128]; | 49 | char *SP_opening_filename[128]; | 
| 52 | int output_format = 0; | 50 | char *SP_personality_filename[128]; | 
| 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; | 51 | int output_format = 0; | 
| - | 52 | #if !defined(NOEGTB) | |
| - | 53 | int EGTBlimit = 0; | |
| - | 54 | int EGTB_use = 0; | |
| 63 | int | 55 | int EGTB_draw = 0; | 
| 64 | int early_exit = 99; | 56 | int EGTB_depth = 6; | 
| 65 | 
 | 57 | size_t EGTB_cache_size = 4096 * 4096; | 
| 66 | 
 | 58 | void *EGTB_cache = (void *) 0; | 
| 67 | 
 | 59 | int EGTB_setup = 0; | 
| 68 | 
 | 60 | #endif | 
| 69 | 
 | 61 | int xboard = 0; | 
| 70 | int | 62 | int xboard_done = 0; | 
| 71 | int | 63 | int pong = 0; | 
| 72 | int | 64 | int early_exit = 99; | 
| 73 | int | 65 | int new_game = 0; | 
| 74 | 
 | 66 | char book_path[128] = {BOOKDIR}; | 
| 75 | 
 | 67 | char log_path[128] = {LOGDIR}; | 
| 76 | 
 | 68 | char tb_path[128] = {TBDIR}; | 
| 77 | 
 | 69 | char rc_path[128] = {RCDIR}; | 
| 78 | int | 70 | int initialized = 0; | 
| 79 | int | 71 | int kibitz = 0; | 
| 80 | int | 72 | int post = 0; | 
| 81 | int | 73 | int log_id = 0; | 
| 82 | 
 | 74 | int game_wtm = 1; | 
| 83 | 
 | 75 | int last_opponent_move = 0; | 
| 84 | int | 76 | int check_depth = 1; /* extend checks one ply */ | 
| 85 | int | 77 | int null_depth = 3; /* R=3 + (next line) */ | 
| 86 | int | 78 | int null_divisor = 6; /* R = null_depth + depth / 6 */ | 
| 87 | int | 79 | int LMR_rdepth = 1; /* leave 1 full ply after reductions */ | 
| 88 | int | 80 | int LMR_min= 1; /* minimum reduction 1 ply */ | 
| 89 | int | 81 | int LMR_max= 15; /* maximum reduction 15 plies */ | 
| 90 | 
 | 82 | double LMR_db = 1.8; /* depth is 1.8x as important as */ | 
| 91 | 
 | 83 | double LMR_mb = 1.0; /* moves searched in the formula. */ | 
| 92 | 
 | 84 | double LMR_s = 2.0; /* smaller numbers increase reductions. */ | 
| 93 | 
 | 85 | uint8_t LMR[32][64]; | 
| 94 | int | 86 | int rep_index; | 
| 95 | int | 87 | int search_depth = 0; | 
| 96 | 
 | 88 | uint64_t search_nodes = 0; | 
| 97 | 
 | 89 | uint64_t temp_search_nodes = 0; | 
| 98 | int | 90 | int search_move = 0; | 
| 99 | int | 91 | int predicted = 0; | 
| 100 | 
 | 92 | int time_used = 0; | 
| 101 | 
 | 93 | int time_used_opponent = 0; | 
| 102 | 
 | 94 | int analyze_mode = 0; | 
| 103 | 
 | 95 | int annotate_mode = 0; | 
| 104 | int | 96 | int input_status = 0; | 
| 105 | int | 97 | int resign = 9; | 
| 106 | 
 | 98 | int resign_counter = 0; | 
| 107 | 
 | 99 | int resign_count = 5; | 
| 108 | 
 | 100 | int draw_counter = 0; | 
| 109 | int | 101 | int draw_count = 5; | 
| 110 | int | 102 | int draw_offer_pending = 0; | 
| 111 | 
 | 103 | int draw_offered = 0; | 
| 112 | 
 | 104 | int offer_draws = 1; | 
| 113 | int | 105 | int dynamic_draw_score = 1; | 
| 114 | int | 106 | int adaptive_hash = 0; | 
| 115 | 
 | 107 | size_t adaptive_hash_min = 0; | 
| 116 | 
 | 108 | size_t adaptive_hash_max = 0; | 
| 117 | 
 | 109 | size_t adaptive_hashp_min = 0; | 
| 118 | 
 | 110 | size_t adaptive_hashp_max = 0; | 
| 119 | int | 111 | int time_limit = 100; | 
| 120 | int | 112 | int force = 0; | 
| 121 | 
 | 113 | char initial_position[80] = {""}; | 
| 122 | 
 | 114 | char ponder_text[512] = {""}; | 
| 123 | 
 | 115 | char book_hint[512] = {""}; | 
| 124 | int | 116 | int over = 0; | 
| 125 | int | 117 | int usage_level = 0; | 
| 126 | 
 | 118 | char audible_alarm = 0x07; | 
| 127 | 
 | 119 | char speech = 0; | 
| 128 | 
 | 120 | int book_accept_mask = ~03; | 
| 129 | int | 121 | int book_reject_mask = 3; | 
| 130 | int | 122 | int book_random = 1; | 
| 131 | 
 | 123 | float book_weight_learn = 1.0; | 
| 132 | 
 | 124 | float book_weight_freq = 1.0; | 
| 133 | 
 | 125 | float book_weight_eval = 0.1f; // Pierre-Marie Baty -- added type cast | 
| 134 | int | 126 | int book_search_trigger = 20; | 
| 135 | 
 | 127 | int learn = 1; | 
| 136 | 
 | 128 | int learning = 100; | 
| 137 | 
 | 129 | int learn_value = 0; | 
| 138 | 
 | 130 | int abort_search; /* 1 = abort / print stats, 2 = abort no print stats */ | 
| 139 | 
 | 131 | int iteration; | 
| 140 |  | 132 | int root_wtm = 1; | 
| 141 | 
 | 133 | int last_root_value; | 
| 142 |  | 134 | ROOT_MOVE root_moves[256]; | 
| 143 | 
 | 135 | int n_root_moves; | 
| 144 |  | 136 | int difficulty; | 
| 145 |  | 137 | int absolute_time_limit; | 
| 146 | int | 138 | int search_time_limit; | 
| 147 | int | 139 | int burp; | 
| 148 | int | 140 | int quit = 0; | 
| 149 | 
 | 141 | unsigned opponent_start_time, opponent_end_time; | 
| 150 | unsigned | 142 | unsigned program_start_time, program_end_time; | 
| 151 | unsigned | 143 | unsigned start_time, end_time; | 
| 152 | 
 | 144 | TREE *block[MAX_BLOCKS + 1]; | 
| 153 | 
 | 145 | THREAD thread[CPUS]; | 
| 154 | 
 | 146 | #if (CPUS > 1) | 
| 155 | 
 | 147 | lock_t lock_smp, lock_io; | 
| 156 | 
 | 148 | #if defined(UNIX) | 
| 157 | 
 | 149 |   pthread_attr_t attributes; | 
| 158 | 
 | 150 | #endif | 
| 159 | 
 | 151 | #endif | 
| 160 | int | 152 | unsigned int smp_max_threads = 0; | 
| 161 | unsigned int | 153 | unsigned int smp_split_group = 8; /* max threads per group */ | 
| 162 | unsigned int | 154 | unsigned int smp_split_at_root = 1; /* enable split at root */ | 
| 163 | int | 155 | unsigned int smp_min_split_depth = 5; /* don't split within 5 plies of tips */ | 
| 164 | int | 156 | unsigned int smp_gratuitous_depth = 10; /* gratuitous splits if depth > 10 */ | 
| 165 | int | 157 | unsigned int smp_gratuitous_limit = 6; /* max gratuitous splits / thread */ | 
| 166 | int | 158 | int smp_affinity = 0; /* anything >= 0 is enabled */ | 
| 167 | int | 159 | int smp_numa = 0; /* disables NUMA mode by default */ | 
| 168 | 
 | 160 |                                         /* enable if you really have NUMA     */ | 
| 169 | 
 | 161 | /* | 
| 170 | 
 | 162 |       This is the autotune configuration section.  Each line represents one | 
| 171 | 
 | 163 |       smp search parameter that can be tuned.  The first three values are the | 
| 172 | 
 | 164 |       min, max and increment that autotune will use for this paramenter.  The | 
| 173 | 
 | 165 |       fourth parameter is a string autotune will display to explain what it is | 
| 174 | 
 | 166 |       currently tuning.  The fifth parameter is the command used to change this | 
| 175 | 
 | 167 |       parameter (this is added to the .craftyrc/crafty.rc file after tuning is | 
| 176 | 
 | 168 |       completed.  The last parameter is a pointer to the variable that must be | 
| 177 | 
 | 169 |       changed to adjust the parameter while running the autotune tests. | 
| 178 | 
 | 170 | */ | 
| 179 | int | 171 | int autotune_params = 4; | 
| 180 | 
 | 172 | struct autotune tune[16] = { | 
| 181 | 
 | 173 | { 4, 20, 4, "max thread group", "smpgroup", &smp_split_group}, | 
| 182 | 
 | 174 | { 4, 8, 1, "min split depth", "smpmin", &smp_min_split_depth}, | 
| 183 | 
 | 175 | {10, 16, 2, "min gratuitous split depth", "smpgsd", &smp_gratuitous_depth}, | 
| 184 | 
 | 176 | { 1, 8, 2, "gratuitous split limit", "smpgsl", &smp_gratuitous_limit}, | 
| 185 | 
 | 177 | }; | 
| 186 | 
 | 178 | unsigned parallel_splits; | 
| 187 | 
 | 179 | unsigned parallel_splits_wasted; | 
| 188 | 
 | 180 | unsigned parallel_aborts; | 
| 189 | 
 | 181 | unsigned parallel_joins; | 
| 190 |  | 182 | unsigned busy_percent = 0; | 
| 191 | 
 | 183 | uint64_t game_max_blocks = 0; | 
| 192 |  | 184 | volatile int smp_split = 0; | 
| 193 | int | 185 | volatile int smp_threads = 0; | 
| 194 | int | 186 | volatile int initialized_threads = 0; | 
| 195 | int | 187 | int crafty_is_white = 0; | 
| 196 | 
 | 188 | unsigned nodes_between_time_checks = 1000000; | 
| 197 | 
 | 189 | unsigned nodes_per_second = 1000000; | 
| 198 | 
 | 190 | int next_time_check = 100000; | 
| 199 | 
 | 191 | int transposition_age = 0; | 
| 200 | 
 | 192 | int thinking = 0; | 
| 201 | 
 | 193 | int pondering = 0; | 
| 202 | 
 | 194 | int puzzling = 0; | 
| 203 | 
 | 195 | int booking = 0; | 
| 204 | 
 | 196 | /************************************************************ | 
| 205 | 
 | 197 |  *                                                          * | 
| 206 | 
 | 198 |  *    1 -> display move/time/results/etc.                   * | 
| 207 | 
 | 199 |  *    2 -> display PV.                                      * | 
| 208 | 
 | 200 | * 4 -> display fail high / fail low moves * | 
| 209 | 
 | 201 |  *    8 -> display search statistics.                       * | 
| 210 | 
 | 202 |  *   16 -> display root moves as they are searched.         * | 
| 211 | 
 | 203 | * 32 -> display general informational messages. * | 
| 212 | 
 | 204 | * 64 -> display ply-1 move list / flags after each * | 
| 213 | 
 | 205 | * iteration. * | 
| 214 | 
 | 206 | * 128 -> display root moves and scores before search * | 
| 215 | 
 | 207 | * begins. * | 
| 216 | 
 | 208 | * 2048 -> error messages (can not be disabled). * | 
| 217 | 
 | 209 | * * | 
| 218 | 
 | 210 | ************************************************************ | 
| 219 | 
 | 211 | */ | 
| 220 | 
 | 212 | int display_options = 1 | 2 | 8 | 16 | 32 | 2048; | 
| 221 | 
 | 213 | unsigned noise_level = 100; | 
| 222 | 
 | 214 | int noise_block = 0; | 
| 223 | 
 | 215 | int tc_moves = 60; | 
| 224 | 
 | 216 | int tc_time = 180000; | 
| 225 | 
 | 217 | int tc_time_remaining[2] = {180000, 180000}; | 
| 226 | 
 | 218 | int tc_moves_remaining[2] = {60, 60}; | 
| 227 | 
 | 219 | int tc_secondary_moves = 30; | 
| 228 | 
 | 220 | int tc_secondary_time = 90000; | 
| 229 | 
 | 221 | int tc_increment = 0; | 
| 230 | 
 | 222 | int tc_sudden_death = 0; | 
| 231 | 
 | 223 | int tc_safety_margin = 0; | 
| 232 | 
 | 224 | int draw_score[2] = {0, 0}; | 
| 233 | 
 | 225 | char kibitz_text[4096]; | 
| 234 | 
 | 226 | int kibitz_depth; | 
| 235 | 
 | 227 | int move_number = 1; | 
| 236 | 
 | 228 | int moves_out_of_book = 0; | 
| 237 | 
 | 229 | int first_nonbook_factor = 0; | 
| 238 | 
 | 230 | int first_nonbook_span = 0; | 
| 239 | 
 | 231 | int smp_nice = 1; | 
| 240 | 
 | 232 | #if defined(SKILL) | 
| 241 | 
 | 233 | int skill = 100; | 
| 242 | 
 | 234 | #endif | 
| 243 | 
 | 235 | int show_book = 0; | 
| 244 | 
 | 236 | int book_selection_width = 5; | 
| 245 | 
 | 237 | int ponder = 1; | 
| 246 | 
 | 238 | int trace_level = 0; | 
| 247 | 
 | 239 | /*  for the following 6 lines, each pair should have */ | 
| 248 | 
 | 240 | /*  the same numeric value (the size value).         */ | 
| 249 | 
 | 241 | size_t hash_table_size = 1ull << 20; | 
| 250 | 
 | 242 | uint64_t hash_mask = ((1ull << 20) - 1) & ~3; | 
| 251 | 
 | 243 | size_t hash_path_size = 1ull << 16; | 
| 252 | 
 | 244 | uint64_t hash_path_mask = ((1ull << 16) - 1) & ~15; | 
| 253 | 
 | 245 | size_t pawn_hash_table_size = 1ull << 18; | 
| 254 | 
 | 246 | uint64_t pawn_hash_mask = (1ull << 18) - 1; | 
| 255 | 
 | 247 | uint64_t mask_clear_entry = 0xff9ffffffffe0000ull; | 
| 256 | 
 | 248 | size_t eval_hash_table_size = 65536; | 
| 257 | 
 | 249 | uint64_t eval_hash_mask = 65536 - 1; | 
| 258 | 
 | 250 | int abs_draw_score = 0; | 
| 259 | 
 | 251 | int accept_draws = 1; | 
| 260 | 
 | 252 | const char translate[13] = | 
| 261 | 
 | 253 | {'k', 'q', 'r', 'b', 'n', 'p', 0, 'P', 'N', 'B', 'R', 'Q', 'K'}; | 
| 262 | 
 | 254 | const uint64_t magic_bishop[64] = { | 
| 263 | 
 | 255 | 0x0002020202020200ull, 0x0002020202020000ull, 0x0004010202000000ull, | 
| 264 | 
 | 256 | 0x0004040080000000ull, 0x0001104000000000ull, 0x0000821040000000ull, | 
| 265 | 
 | 257 | 0x0000410410400000ull, 0x0000104104104000ull, 0x0000040404040400ull, | 
| 266 | 
 | 258 | 0x0000020202020200ull, 0x0000040102020000ull, 0x0000040400800000ull, | 
| 267 | 
 | 259 | 0x0000011040000000ull, 0x0000008210400000ull, 0x0000004104104000ull, | 
| 268 | 
 | 260 | 0x0000002082082000ull, 0x0004000808080800ull, 0x0002000404040400ull, | 
| 269 | 
 | 261 | 0x0001000202020200ull, 0x0000800802004000ull, 0x0000800400A00000ull, | 
| 270 | 
 | 262 | 0x0000200100884000ull, 0x0000400082082000ull, 0x0000200041041000ull, | 
| 271 | 
 | 263 | 0x0002080010101000ull, 0x0001040008080800ull, 0x0000208004010400ull, | 
| 272 | 
 | 264 | 0x0000404004010200ull, 0x0000840000802000ull, 0x0000404002011000ull, | 
| 273 | 
 | 265 | 0x0000808001041000ull, 0x0000404000820800ull, 0x0001041000202000ull, | 
| 274 | 
 | 266 | 0x0000820800101000ull, 0x0000104400080800ull, 0x0000020080080080ull, | 
| 275 | 
 | 267 | 0x0000404040040100ull, 0x0000808100020100ull, 0x0001010100020800ull, | 
| 276 | 
 | 268 | 0x0000808080010400ull, 0x0000820820004000ull, 0x0000410410002000ull, | 
| 277 | 
 | 269 | 0x0000082088001000ull, 0x0000002011000800ull, 0x0000080100400400ull, | 
| 278 | 
 | 270 | 0x0001010101000200ull, 0x0002020202000400ull, 0x0001010101000200ull, | 
| 279 | 
 | 271 | 0x0000410410400000ull, 0x0000208208200000ull, 0x0000002084100000ull, | 
| 280 | 
 | 272 | 0x0000000020880000ull, 0x0000001002020000ull, 0x0000040408020000ull, | 
| 281 | 
 | 273 | 0x0004040404040000ull, 0x0002020202020000ull, 0x0000104104104000ull, | 
| 282 | 
 | 274 | 0x0000002082082000ull, 0x0000000020841000ull, 0x0000000000208800ull, | 
| 283 | 
 | 275 | 0x0000000010020200ull, 0x0000000404080200ull, 0x0000040404040400ull, | 
| 284 | 
 | 276 | 0x0002020202020200ull | 
| 285 | 
 | 277 | }; | 
| 286 | 
 | 278 | const uint64_t magic_bishop_mask[64] = { | 
| 287 | 
 | 279 | 0x0040201008040200ull, 0x0000402010080400ull, 0x0000004020100A00ull, | 
| 288 | 
 | 280 | 0x0000000040221400ull, 0x0000000002442800ull, 0x0000000204085000ull, | 
| 289 | 
 | 281 | 0x0000020408102000ull, 0x0002040810204000ull, 0x0020100804020000ull, | 
| 290 | 
 | 282 | 0x0040201008040000ull, 0x00004020100A0000ull, 0x0000004022140000ull, | 
| 291 | 
 | 283 | 0x0000000244280000ull, 0x0000020408500000ull, 0x0002040810200000ull, | 
| 292 | 
 | 284 | 0x0004081020400000ull, 0x0010080402000200ull, 0x0020100804000400ull, | 
| 293 | 
 | 285 | 0x004020100A000A00ull, 0x0000402214001400ull, 0x0000024428002800ull, | 
| 294 | 
 | 286 | 0x0002040850005000ull, 0x0004081020002000ull, 0x0008102040004000ull, | 
| 295 | 
 | 287 | 0x0008040200020400ull, 0x0010080400040800ull, 0x0020100A000A1000ull, | 
| 296 | 
 | 288 | 0x0040221400142200ull, 0x0002442800284400ull, 0x0004085000500800ull, | 
| 297 | 
 | 289 | 0x0008102000201000ull, 0x0010204000402000ull, 0x0004020002040800ull, | 
| 298 | 
 | 290 | 0x0008040004081000ull, 0x00100A000A102000ull, 0x0022140014224000ull, | 
| 299 | 
 | 291 | 0x0044280028440200ull, 0x0008500050080400ull, 0x0010200020100800ull, | 
| 300 | 
 | 292 | 0x0020400040201000ull, 0x0002000204081000ull, 0x0004000408102000ull, | 
| 301 | 
 | 293 | 0x000A000A10204000ull, 0x0014001422400000ull, 0x0028002844020000ull, | 
| 302 | 
 | 294 | 0x0050005008040200ull, 0x0020002010080400ull, 0x0040004020100800ull, | 
| 303 | 
 | 295 | 0x0000020408102000ull, 0x0000040810204000ull, 0x00000A1020400000ull, | 
| 304 | 
 | 296 | 0x0000142240000000ull, 0x0000284402000000ull, 0x0000500804020000ull, | 
| 305 | 
 | 297 | 0x0000201008040200ull, 0x0000402010080400ull, 0x0002040810204000ull, | 
| 306 | 
 | 298 | 0x0004081020400000ull, 0x000A102040000000ull, 0x0014224000000000ull, | 
| 307 | 
 | 299 | 0x0028440200000000ull, 0x0050080402000000ull, 0x0020100804020000ull, | 
| 308 | 
 | 300 | 0x0040201008040200ull | 
| 309 | 
 | 301 | }; | 
| 310 | 
 | 302 | const unsigned magic_bishop_shift[64] = { | 
| 311 | 
 | 303 | 58, 59, 59, 59, 59, 59, 59, 58, | 
| 312 | 
 | 304 | 59, 59, 59, 59, 59, 59, 59, 59, | 
| 313 | 
 | 305 | 59, 59, 57, 57, 57, 57, 59, 59, | 
| 314 | 
 | 306 | 59, 59, 57, 55, 55, 57, 59, 59, | 
| 315 | 
 | 307 | 59, 59, 57, 55, 55, 57, 59, 59, | 
| 316 | 
 | 308 | 59, 59, 57, 57, 57, 57, 59, 59, | 
| 317 | 
 | 309 | 59, 59, 59, 59, 59, 59, 59, 59, | 
| 318 | 
 | 310 | 58, 59, 59, 59, 59, 59, 59, 58 | 
| 319 | 
 | 311 | }; | 
| 320 | 
 | 312 | uint64_t magic_bishop_table[5248]; | 
| 321 | 
 | 313 | uint64_t *magic_bishop_indices[64] = { | 
| 322 | 
 | 314 | magic_bishop_table + 4992, magic_bishop_table + 2624, | 
| 323 | 
 | 315 | magic_bishop_table + 256, magic_bishop_table + 896, | 
| 324 | 
 | 316 | magic_bishop_table + 1280, magic_bishop_table + 1664, | 
| 325 | 
 | 317 | magic_bishop_table + 4800, magic_bishop_table + 5120, | 
| 326 | 
 | 318 | magic_bishop_table + 2560, magic_bishop_table + 2656, | 
| 327 | 
 | 319 | magic_bishop_table + 288, magic_bishop_table + 928, | 
| 328 | 
 | 320 | magic_bishop_table + 1312, magic_bishop_table + 1696, | 
| 329 | 
 | 321 | magic_bishop_table + 4832, magic_bishop_table + 4928, | 
| 330 | 
 | 322 | magic_bishop_table + 0, magic_bishop_table + 128, | 
| 331 | 
 | 323 | magic_bishop_table + 320, magic_bishop_table + 960, | 
| 332 | 
 | 324 | magic_bishop_table + 1344, magic_bishop_table + 1728, | 
| 333 | 
 | 325 | magic_bishop_table + 2304, magic_bishop_table + 2432, | 
| 334 | 
 | 326 | magic_bishop_table + 32, magic_bishop_table + 160, | 
| 335 | 
 | 327 | magic_bishop_table + 448, magic_bishop_table + 2752, | 
| 336 | 
 | 328 | magic_bishop_table + 3776, magic_bishop_table + 1856, | 
| 337 | 
 | 329 | magic_bishop_table + 2336, magic_bishop_table + 2464, | 
| 338 | 
 | 330 | magic_bishop_table + 64, magic_bishop_table + 192, | 
| 339 | 
 | 331 | magic_bishop_table + 576, magic_bishop_table + 3264, | 
| 340 | 
 | 332 | magic_bishop_table + 4288, magic_bishop_table + 1984, | 
| 341 | 
 | 333 | magic_bishop_table + 2368, magic_bishop_table + 2496, | 
| 342 | 
 | 334 | magic_bishop_table + 96, magic_bishop_table + 224, | 
| 343 | 
 | 335 | magic_bishop_table + 704, magic_bishop_table + 1088, | 
| 344 | 
 | 336 | magic_bishop_table + 1472, magic_bishop_table + 2112, | 
| 345 | 
 | 337 | magic_bishop_table + 2400, magic_bishop_table + 2528, | 
| 346 | 
 | 338 | magic_bishop_table + 2592, magic_bishop_table + 2688, | 
| 347 | 
 | 339 | magic_bishop_table + 832, magic_bishop_table + 1216, | 
| 348 | 
 | 340 | magic_bishop_table + 1600, magic_bishop_table + 2240, | 
| 349 | 
 | 341 | magic_bishop_table + 4864, magic_bishop_table + 4960, | 
| 350 | 
 | 342 | magic_bishop_table + 5056, magic_bishop_table + 2720, | 
| 351 | 
 | 343 | magic_bishop_table + 864, magic_bishop_table + 1248, | 
| 352 | 
 | 344 | magic_bishop_table + 1632, magic_bishop_table + 2272, | 
| 353 | 
 | 345 | magic_bishop_table + 4896, magic_bishop_table + 5184 | 
| 354 | 
 | 346 | }; | 
| 355 | 
 | 347 | int16_t magic_bishop_mobility_table[5248]; | 
| 356 | 
 | 348 | int16_t *magic_bishop_mobility_indices[64] = { | 
| 357 | 
 | 349 | magic_bishop_mobility_table + 4992, magic_bishop_mobility_table + 2624, | 
| 358 | 
 | 350 | magic_bishop_mobility_table + 256, magic_bishop_mobility_table + 896, | 
| 359 | 
 | 351 | magic_bishop_mobility_table + 1280, magic_bishop_mobility_table + 1664, | 
| 360 | 
 | 352 | magic_bishop_mobility_table + 4800, magic_bishop_mobility_table + 5120, | 
| 361 | 
 | 353 | magic_bishop_mobility_table + 2560, magic_bishop_mobility_table + 2656, | 
| 362 | 
 | 354 | magic_bishop_mobility_table + 288, magic_bishop_mobility_table + 928, | 
| 363 | 
 | 355 | magic_bishop_mobility_table + 1312, magic_bishop_mobility_table + 1696, | 
| 364 | 
 | 356 | magic_bishop_mobility_table + 4832, magic_bishop_mobility_table + 4928, | 
| 365 | 
 | 357 | magic_bishop_mobility_table + 0, magic_bishop_mobility_table + 128, | 
| 366 | 
 | 358 | magic_bishop_mobility_table + 320, magic_bishop_mobility_table + 960, | 
| 367 | 
 | 359 | magic_bishop_mobility_table + 1344, magic_bishop_mobility_table + 1728, | 
| 368 | 
 | 360 | magic_bishop_mobility_table + 2304, magic_bishop_mobility_table + 2432, | 
| 369 | 
 | 361 | magic_bishop_mobility_table + 32, magic_bishop_mobility_table + 160, | 
| 370 | 
 | 362 | magic_bishop_mobility_table + 448, magic_bishop_mobility_table + 2752, | 
| 371 | 
 | 363 | magic_bishop_mobility_table + 3776, magic_bishop_mobility_table + 1856, | 
| 372 | 
 | 364 | magic_bishop_mobility_table + 2336, magic_bishop_mobility_table + 2464, | 
| 373 | 
 | 365 | magic_bishop_mobility_table + 64, magic_bishop_mobility_table + 192, | 
| 374 | int16_t *magic_rook_mobility_indices[64] = { | 366 | magic_bishop_mobility_table + 576, magic_bishop_mobility_table + 3264, | 
| 375 | 
 | 367 | magic_bishop_mobility_table + 4288, magic_bishop_mobility_table + 1984, | 
| 376 | 
 | 368 | magic_bishop_mobility_table + 2368, magic_bishop_mobility_table + 2496, | 
| 377 | 
 | 369 | magic_bishop_mobility_table + 96, magic_bishop_mobility_table + 224, | 
| 378 | magic_rook_mobility_table + 77824, magic_rook_mobility_table + 94208, | - | |
| 379 | magic_rook_mobility_table + 69632, magic_rook_mobility_table + 32768, | 370 | magic_bishop_mobility_table + 704, magic_bishop_mobility_table + 1088, | 
| 380 | 
 | 371 | magic_bishop_mobility_table + 1472, magic_bishop_mobility_table + 2112, | 
| 381 | magic_rook_mobility_table + 14336, magic_rook_mobility_table + 53248, | 372 | magic_bishop_mobility_table + 2400, magic_bishop_mobility_table + 2528, | 
| 382 | magic_rook_mobility_table + 57344, magic_rook_mobility_table + 81920, | 373 | magic_bishop_mobility_table + 2592, magic_bishop_mobility_table + 2688, | 
| 383 | magic_rook_mobility_table + 24576, magic_rook_mobility_table + 33792, | 374 | magic_bishop_mobility_table + 832, magic_bishop_mobility_table + 1216, | 
| 384 | magic_rook_mobility_table + 6144, magic_rook_mobility_table + 11264, | 375 | magic_bishop_mobility_table + 1600, magic_bishop_mobility_table + 2240, | 
| 385 | magic_rook_mobility_table + 15360, magic_rook_mobility_table + 18432, | 376 | magic_bishop_mobility_table + 4864, magic_bishop_mobility_table + 4960, | 
| Line 409... | Line 400... | ||
| 409 | 0x0080001020400080ull, 0x0040001000200040ull, 0x0080081000200080ull, | 400 | magic_rook_table + 28672, magic_rook_table + 5120, | 
| 410 | 0x0080040800100080ull, 0x0080020400080080ull, 0x0080010200040080ull, | 401 | magic_rook_table + 8192, magic_rook_table + 1024, | 
| 411 | 0x0080008001000200ull, 0x0080002040800100ull, 0x0000800020400080ull, | 402 | magic_rook_table + 3072, magic_rook_table + 20480, | 
| 412 | 0x0000400020005000ull, 0x0000801000200080ull, 0x0000800800100080ull, | 403 | magic_rook_table + 23552, magic_rook_table + 65536, | 
| 413 | 0x0000800400080080ull, 0x0000800200040080ull, 0x0000800100020080ull, | 404 | magic_rook_table + 30720, magic_rook_table + 34816, | 
| 414 | 
 | 405 | magic_rook_table + 9216, magic_rook_table + 12288, | 
| 415 | 
 | 406 | magic_rook_table + 16384, magic_rook_table + 21504, | 
| 416 | 
 | 407 | magic_rook_table + 59392, magic_rook_table + 67584, | 
| 417 | 
 | 408 | magic_rook_table + 71680, magic_rook_table + 35840, | 
| 418 | 
 | 409 | magic_rook_table + 39936, magic_rook_table + 13312, | 
| 419 | 
 | 410 | magic_rook_table + 17408, magic_rook_table + 54272, | 
| 420 | 
 | 411 | magic_rook_table + 60416, magic_rook_table + 83968, | 
| 421 | 
 | 412 | magic_rook_table + 90112, magic_rook_table + 75776, | 
| 422 | 
 | 413 | magic_rook_table + 40960, magic_rook_table + 45056, | 
| 423 | 
 | 414 | magic_rook_table + 49152, magic_rook_table + 55296, | 
| 424 | 
 | 415 | magic_rook_table + 79872, magic_rook_table + 98304 | 
| - | 416 | }; | |
| 425 | 
 | 417 | int16_t magic_rook_mobility_table[102400]; | 
| 426 | 
 | 418 | int16_t *magic_rook_mobility_indices[64] = { | 
| 427 | 0x0000800100020080ull, 0x0000800041000080ull, 0x00FFFCDDFCED714Aull, | 419 | magic_rook_mobility_table + 86016, magic_rook_mobility_table + 73728, | 
| 428 | 0x007FFCDDFCED714Aull, 0x003FFFCDFFD88096ull, 0x0000040810002101ull, | 420 | magic_rook_mobility_table + 36864, magic_rook_mobility_table + 43008, | 
| 429 | 0x0001000204080011ull, 0x0001000204000801ull, 0x0001000082000401ull, | 421 | magic_rook_mobility_table + 47104, magic_rook_mobility_table + 51200, | 
| 430 | 0x0001FFFAABFAD1A2ull | 422 | magic_rook_mobility_table + 77824, magic_rook_mobility_table + 94208, | 
| 431 | }; | 423 | magic_rook_mobility_table + 69632, magic_rook_mobility_table + 32768, | 
| 432 | uint64_t magic_rook_mask[64] = { | 424 | magic_rook_mobility_table + 38912, magic_rook_mobility_table + 10240, | 
| 433 | 0x000101010101017Eull, 0x000202020202027Cull, 0x000404040404047Aull, | 425 | magic_rook_mobility_table + 14336, magic_rook_mobility_table + 53248, | 
| 434 | 0x0008080808080876ull, 0x001010101010106Eull, 0x002020202020205Eull, | 426 | magic_rook_mobility_table + 57344, magic_rook_mobility_table + 81920, | 
| 435 | 0x004040404040403Eull, 0x008080808080807Eull, 0x0001010101017E00ull, | 427 | magic_rook_mobility_table + 24576, magic_rook_mobility_table + 33792, | 
| 436 | 0x0002020202027C00ull, 0x0004040404047A00ull, 0x0008080808087600ull, | - | |
| 437 | 0x0010101010106E00ull, 0x0020202020205E00ull, 0x0040404040403E00ull, | 428 | magic_rook_mobility_table + 6144, magic_rook_mobility_table + 11264, | 
| 438 | 0x0080808080807E00ull, 0x00010101017E0100ull, 0x00020202027C0200ull, | 429 | magic_rook_mobility_table + 15360, magic_rook_mobility_table + 18432, | 
| 439 | 0x00040404047A0400ull, 0x0008080808760800ull, 0x00101010106E1000ull, | 430 | magic_rook_mobility_table + 58368, magic_rook_mobility_table + 61440, | 
| 440 | 0x00202020205E2000ull, 0x00404040403E4000ull, 0x00808080807E8000ull, | 431 | magic_rook_mobility_table + 26624, magic_rook_mobility_table + 4096, | 
| 441 | 0x000101017E010100ull, 0x000202027C020200ull, 0x000404047A040400ull, | 432 | magic_rook_mobility_table + 7168, magic_rook_mobility_table + 0, | 
| 442 | 0x0008080876080800ull, 0x001010106E101000ull, 0x002020205E202000ull, | 433 | magic_rook_mobility_table + 2048, magic_rook_mobility_table + 19456, | 
| 443 | 0x004040403E404000ull, 0x008080807E808000ull, 0x0001017E01010100ull, | 434 | magic_rook_mobility_table + 22528, magic_rook_mobility_table + 63488, | 
| 444 | 0x0002027C02020200ull, 0x0004047A04040400ull, 0x0008087608080800ull, | 435 | magic_rook_mobility_table + 28672, magic_rook_mobility_table + 5120, | 
| 445 | 0x0010106E10101000ull, 0x0020205E20202000ull, 0x0040403E40404000ull, | - | |
| 446 | 
 | 436 | magic_rook_mobility_table + 8192, magic_rook_mobility_table + 1024, | 
| 447 | 0x00047A0404040400ull, 0x0008760808080800ull, 0x00106E1010101000ull, | 437 | magic_rook_mobility_table + 3072, magic_rook_mobility_table + 20480, | 
| 448 | 0x00205E2020202000ull, 0x00403E4040404000ull, 0x00807E8080808000ull, | 438 | magic_rook_mobility_table + 23552, magic_rook_mobility_table + 65536, | 
| 449 | 
 | 439 | magic_rook_mobility_table + 30720, magic_rook_mobility_table + 34816, | 
| 450 | 0x0076080808080800ull, 0x006E101010101000ull, 0x005E202020202000ull, | - | |
| 451 | 0x003E404040404000ull, 0x007E808080808000ull, 0x7E01010101010100ull, | - | |
| 452 | 0x7C02020202020200ull, 0x7A04040404040400ull, 0x7608080808080800ull, | 440 | magic_rook_mobility_table + 9216, magic_rook_mobility_table + 12288, | 
| 453 | 0x6E10101010101000ull, 0x5E20202020202000ull, 0x3E40404040404000ull, | 441 | magic_rook_mobility_table + 16384, magic_rook_mobility_table + 21504, | 
| 454 | 0x7E80808080808000ull | 442 | magic_rook_mobility_table + 59392, magic_rook_mobility_table + 67584, | 
| 455 | 
 | 443 | magic_rook_mobility_table + 71680, magic_rook_mobility_table + 35840, | 
| 456 | 
 | 444 | magic_rook_mobility_table + 39936, magic_rook_mobility_table + 13312, | 
| 457 | 
 | 445 | magic_rook_mobility_table + 17408, magic_rook_mobility_table + 54272, | 
| 458 | 
 | 446 | magic_rook_mobility_table + 60416, magic_rook_mobility_table + 83968, | 
| 459 | 
 | 447 | magic_rook_mobility_table + 90112, magic_rook_mobility_table + 75776, | 
| 460 | 
 | 448 | magic_rook_mobility_table + 40960, magic_rook_mobility_table + 45056, | 
| 461 | 
 | 449 | magic_rook_mobility_table + 49152, magic_rook_mobility_table + 55296, | 
| 462 | 53, 54, 54, 54, 54, 54, 54, 53, | 450 | magic_rook_mobility_table + 79872, magic_rook_mobility_table + 98304 | 
| 463 | 
 | 451 | }; | 
| 464 | 
 | 452 | const uint64_t magic_rook[64] = { | 
| 465 | }; | 453 | 0x0080001020400080ull, 0x0040001000200040ull, 0x0080081000200080ull, | 
| 466 | uint64_t mobility_mask_n[4] = { | 454 | 0x0080040800100080ull, 0x0080020400080080ull, 0x0080010200040080ull, | 
| 467 | 0xFF818181818181FFull, 0x007E424242427E00ull, | 455 | 0x0080008001000200ull, 0x0080002040800100ull, 0x0000800020400080ull, | 
| 468 |   0x00003C24243C0000ull, 0x0000001818000000ull | 456 | 0x0000400020005000ull, 0x0000801000200080ull, 0x0000800800100080ull, | 
| 469 | 
 | 457 | 0x0000800400080080ull, 0x0000800200040080ull, 0x0000800100020080ull, | 
| 470 | 
 | 458 | 0x0000800040800100ull, 0x0000208000400080ull, 0x0000404000201000ull, | 
| - | 459 | 0x0000808010002000ull, 0x0000808008001000ull, 0x0000808004000800ull, | |
| - | 460 | 0x0000808002000400ull, 0x0000010100020004ull, 0x0000020000408104ull, | |
| 471 | 0xFF818181818181FFull, 0x007E424242427E00ull, | 461 | 0x0000208080004000ull, 0x0000200040005000ull, 0x0000100080200080ull, | 
| 472 | 
 | 462 | 0x0000080080100080ull, 0x0000040080080080ull, 0x0000020080040080ull, | 
| 473 | 
 | 463 | 0x0000010080800200ull, 0x0000800080004100ull, 0x0000204000800080ull, | 
| 474 | 
 | 464 | 0x0000200040401000ull, 0x0000100080802000ull, 0x0000080080801000ull, | 
| 475 | 
 | 465 | 0x0000040080800800ull, 0x0000020080800400ull, 0x0000020001010004ull, | 
| 476 | 
 | 466 | 0x0000800040800100ull, 0x0000204000808000ull, 0x0000200040008080ull, | 
| 477 | 
 | 467 | 0x0000100020008080ull, 0x0000080010008080ull, 0x0000040008008080ull, | 
| 478 | 
 | 468 | 0x0000020004008080ull, 0x0000010002008080ull, 0x0000004081020004ull, | 
| 479 | 
 | 469 | 0x0000204000800080ull, 0x0000200040008080ull, 0x0000100020008080ull, | 
| 480 | 
 | 470 | 0x0000080010008080ull, 0x0000040008008080ull, 0x0000020004008080ull, | 
| 481 | const int rankflip[2][8] = { | 471 | 0x0000800100020080ull, 0x0000800041000080ull, 0x00FFFCDDFCED714Aull, | 
| 482 | { RANK8, RANK7, RANK6, RANK5, RANK4, RANK3, RANK2, RANK1 }, | 472 | 0x007FFCDDFCED714Aull, 0x003FFFCDFFD88096ull, 0x0000040810002101ull, | 
| 483 | { RANK1, RANK2, RANK3, RANK4, RANK5, RANK6, RANK7, RANK8 } | 473 | 0x0001000204080011ull, 0x0001000204000801ull, 0x0001000082000401ull, | 
| 484 | }; | 474 | 0x0001FFFAABFAD1A2ull | 
| 485 | const int sqflip[2][64] = { | 475 | }; | 
| Line 488... | Line 478... | ||
| 488 | A6, B6, C6, D6, E6, F6, G6, H6, | 478 | 0x0008080808080876ull, 0x001010101010106Eull, 0x002020202020205Eull, | 
| 489 | A5, B5, C5, D5, E5, F5, G5, H5, | 479 | 0x004040404040403Eull, 0x008080808080807Eull, 0x0001010101017E00ull, | 
| 490 | A4, B4, C4, D4, E4, F4, G4, H4, /* black */ | 480 | 0x0002020202027C00ull, 0x0004040404047A00ull, 0x0008080808087600ull, | 
| 491 | A3, B3, C3, D3, E3, F3, G3, H3, | 481 | 0x0010101010106E00ull, 0x0020202020205E00ull, 0x0040404040403E00ull, | 
| 492 | A2, B2, C2, D2, E2, F2, G2, H2, | 482 | 0x0080808080807E00ull, 0x00010101017E0100ull, 0x00020202027C0200ull, | 
| 493 | 
 | 483 | 0x00040404047A0400ull, 0x0008080808760800ull, 0x00101010106E1000ull, | 
| 494 | 484 | 0x00202020205E2000ull, 0x00404040403E4000ull, 0x00808080807E8000ull, | |
| 495 | { A1, B1, C1, D1, E1, F1, G1, H1, | 485 | 0x000101017E010100ull, 0x000202027C020200ull, 0x000404047A040400ull, | 
| 496 | A2, B2, C2, D2, E2, F2, G2, H2, | 486 | 0x0008080876080800ull, 0x001010106E101000ull, 0x002020205E202000ull, | 
| 497 | A3, B3, C3, D3, E3, F3, G3, H3, | 487 | 0x004040403E404000ull, 0x008080807E808000ull, 0x0001017E01010100ull, | 
| 498 | A4, B4, C4, D4, E4, F4, G4, H4, | 488 | 0x0002027C02020200ull, 0x0004047A04040400ull, 0x0008087608080800ull, | 
| - | 489 | 0x0010106E10101000ull, 0x0020205E20202000ull, 0x0040403E40404000ull, | |
| 499 | A5, B5, C5, D5, E5, F5, G5, H5, /* white */ | 490 | 0x0080807E80808000ull, 0x00017E0101010100ull, 0x00027C0202020200ull, | 
| 500 | A6, B6, C6, D6, E6, F6, G6, H6, | 491 | 0x00047A0404040400ull, 0x0008760808080800ull, 0x00106E1010101000ull, | 
| 501 | A7, B7, C7, D7, E7, F7, G7, H7, | 492 | 0x00205E2020202000ull, 0x00403E4040404000ull, 0x00807E8080808000ull, | 
| 502 | 
 | 493 | 0x007E010101010100ull, 0x007C020202020200ull, 0x007A040404040400ull, | 
| 503 | 
 | 494 | 0x0076080808080800ull, 0x006E101010101000ull, 0x005E202020202000ull, | 
| 504 | 
 | 495 | 0x003E404040404000ull, 0x007E808080808000ull, 0x7E01010101010100ull, | 
| 505 | 
 | 496 | 0x7C02020202020200ull, 0x7A04040404040400ull, 0x7608080808080800ull, | 
| 506 | int dark_corner[2] = { FILEA, FILEH }; | 497 | 0x6E10101010101000ull, 0x5E20202020202000ull, 0x3E40404040404000ull, | 
| 507 | int light_corner[2] = { FILEH, FILEA }; | 498 | 0x7E80808080808000ull | 
| 508 | int epsq[2] = { +8, -8 }; | 499 | }; | 
| 509 | int rook_A[2] = { A8, A1 }; | 500 | const unsigned magic_rook_shift[64] = { | 
| 510 | int rook_D[2] = { D8, D1 }; | 501 | 52, 53, 53, 53, 53, 53, 53, 52, | 
| 511 | int rook_F[2] = { F8, F1 }; | 502 | 53, 54, 54, 54, 54, 54, 54, 53, | 
| 512 | 
 | 503 | 53, 54, 54, 54, 54, 54, 54, 53, | 
| 513 | 
 | 504 | 53, 54, 54, 54, 54, 54, 54, 53, | 
| - | 505 | 53, 54, 54, 54, 54, 54, 54, 53, | |
| 514 | 
 | 506 | 53, 54, 54, 54, 54, 54, 54, 53, | 
| 515 | 
 | 507 | 53, 54, 54, 54, 54, 54, 54, 53, | 
| 516 | 
 | 508 | 53, 54, 54, 53, 53, 53, 53, 53 | 
| - | 509 | }; | |
| - | 510 | const uint64_t mobility_mask_b[4] = { | |
| - | 511 | 0xFF818181818181FFull, 0x007E424242427E00ull, | |
| - | 512 |   0x00003C24243C0000ull, 0x0000001818000000ull | |
| - | 513 | }; | |
| 517 | int capright[2] = { +7, -9 }; | 514 | const uint64_t mobility_mask_r[4] = { | 
| 518 | 
 | 515 | 0x8181818181818181ull, 0x4242424242424242ull, | 
| 519 | 
 | 516 |   0x2424242424242424ull, 0x1818181818181818ull | 
| 520 |    This array is indexed by rook advantage and minor piece advantage. | 517 | }; | 
| 521 |    rook advantage is 4 + white rook equivalents - black rook equivalents | 518 | /* | 
| 522 |    where a rook equivalent is number of rooks + 2 * number of queens. | 519 |   values use to deal with white/black independently | 
| 523 |    minor piece advantage is 4 + white minors - black minors.   | 520 |  */ | 
| 524 | 521 | const int rankflip[2][8] = { | |
| Line 530... | Line 527... | ||
| 530 | /* M=-4  M=-3  M=-2  M=-1   M=0  M=+1  M=+2  M=+3  M=+4 */ | 527 | A7, B7, C7, D7, E7, F7, G7, H7, | 
| 531 | {-126, -126, -126, -126, -126, -126, -126, -126, -42 }, /* R=-4 */ | 528 | A6, B6, C6, D6, E6, F6, G6, H6, | 
| 532 | {-126, -126, -126, -126, -126, -126, -126, -42, 42 }, /* R=-3 */ | 529 | A5, B5, C5, D5, E5, F5, G5, H5, | 
| 533 | {-126, -126, -126, -126, -126, -126, -42, 84, 84 }, /* R=-2 */ | 530 | A4, B4, C4, D4, E4, F4, G4, H4, /* black */ | 
| 534 | {-126, -126, -126, -126, -104, -42, 84, 126, 126 }, /* R=-1 */ | 531 | A3, B3, C3, D3, E3, F3, G3, H3, | 
| - | 532 | A2, B2, C2, D2, E2, F2, G2, H2, | |
| 535 | {-126, -126, -126, -88, 0, 88, 126, 126, 126 }, /* R=0 */ | 533 | A1, B1, C1, D1, E1, F1, G1, H1}, | 
| 536 | {-126, -126, -84, 42, 104, 126, 126, 126, 126 }, /* R=+1 */ | 534 | |
| 537 | { -84, -84, 42, 126, 126, 126, 126, 126, 126 }, /* R=+2 */ | 535 | {A1, B1, C1, D1, E1, F1, G1, H1, | 
| 538 | { -42, 42, 126, 126, 126, 126, 126, 126, 126 }, /* R=+3 */ | 536 | A2, B2, C2, D2, E2, F2, G2, H2, | 
| 539 | { 42, 126, 126, 126, 126, 126, 126, 126, 126 } /* R=+4 */ | 537 | A3, B3, C3, D3, E3, F3, G3, H3, | 
| 540 | }; | 538 | A4, B4, C4, D4, E4, F4, G4, H4, | 
| 541 | int pp_dist_bonus[8] = { 0, 0, 0, 2, 7, 19, 31, 0 }; | 539 | A5, B5, C5, D5, E5, F5, G5, H5, /* white */ | 
| 542 | 
 | 540 | A6, B6, C6, D6, E6, F6, G6, H6, | 
| 543 | 
 | 541 | A7, B7, C7, D7, E7, F7, G7, H7, | 
| 544 | 
 | 542 | A8, B8, C8, D8, E8, F8, G8, H8} | 
| 545 | int king_tropism_q[8] = { 0, 6, 5, 4, 3, 2, 2, 2 }; | 543 | }; | 
| 546 | int passed_pawn_value[2][8] = { | 544 | const int rank1[2] = {RANK8, RANK1}; | 
| 547 | { 0, 6, 6, 30, 70, 120, 200, 0 }, /* [mg][8] */ | 545 | const int rank2[2] = {RANK7, RANK2}; | 
| 548 | { 0, 7, 7, 33, 77, 132, 220, 0 } /* [eg][8] */ | 546 | const int rank3[2] = {RANK6, RANK3}; | 
| 549 | }; | 547 | const int rank4[2] = {RANK5, RANK4}; | 
| 550 | int passed_pawn_connected[2][8] = { | 548 | const int rank5[2] = {RANK4, RANK5}; | 
| 551 | { 0, 1, 1, 3, 7, 12, 20, 0 }, /* [mg][8] */ | 549 | const int rank6[2] = {RANK3, RANK6}; | 
| 552 | { 0, 2, 2, 9, 21, 36, 60, 0 } /* [eg][8] */ | 550 | const int rank7[2] = {RANK2, RANK7}; | 
| 553 | }; | 551 | const int rank8[2] = {RANK1, RANK8}; | 
| 554 | int | 552 | const int epdir[2] = {8, -8}; | 
| 555 | { 0, 1, 1, 3, 7, 12, 20, 0 }, /* [mg][8] */ | 553 | const int csq[2] = {C8, C1}; | 
| 556 | { 0, 2, 2, 9, 21, 36, 60, 0 } /* [eg][8] */ | 554 | const int dsq[2] = {D8, D1}; | 
| 557 | }; | 555 | const int esq[2] = {E8, E1}; | 
| 558 | int passed_pawn_blockaded_by_enemy[2][8] = { | 556 | const int fsq[2] = {F8, F1}; | 
| 559 | { 0, 3, 3, 14, 33, 57, 95, 0 }, /* [mg][8] */ | 557 | const int gsq[2] = {G8, G1}; | 
| 560 | 
 | 558 | uint64_t distance_ring[64][8]; | 
| 561 | }; | 559 | const int sign[2] = {-1, 1}; | 
| 562 | int passed_pawn_blockaded_by_friendly[2][8] = { | - | |
| 563 | { 0, 1, 1, 7, 16, 27, 45, 0 }, /* [mg][8] */ | 560 | const int epsq[2] = {+8, -8}; | 
| 564 | { 0, 1, 1, 3, 7, 12, 20, 0 } /* [eg][8] */ | 561 | const int rook_A[2] = {A8, A1}; | 
| 565 | }; | 562 | const int rook_D[2] = {D8, D1}; | 
| 566 | int passed_pawn_obstructed[8] = { 0, 1, 1, 4, 9, 15, 25, 0 }; | 563 | const int rook_F[2] = {F8, F1}; | 
| 567 | int passed_pawn_far_away[8] = { 0, 1, 1, 6, 14, 24, 40, 0 }; | 564 | const int rook_G[2] = {G8, G1}; | 
| 568 | int passed_pawn_not_far_away[8] = { 0, 1, 1, 4, 9, 15, 25, 0 }; | 565 | const int rook_H[2] = {H8, H1}; | 
| 569 | int passed_pawn_candidate[2][8] = { | 566 | const int pawnadv1[2] = {+8, -8}; | 
| 570 | { 0, 4, 4, 8, 16, 36, 0, 0 }, /* [mg][rank] */ | 567 | const int pawnadv2[2] = {+16, -16}; | 
| 571 | 
 | 568 | const int capleft[2] = {+9, -7}; | 
| 572 | }; | 569 | const int capright[2] = {+7, -9}; | 
| 573 | 
 | 570 | const char empty_sqs[9] = {0, '1', '2', '3', '4', '5', '6', '7', '8'}; | 
| 574 | int doubled_pawn_value[2] = { 5, 6 }; | 571 | const int pcval[7] = {0, 100, 300, 300, 500, 900, 9900}; | 
| 575 | int outside_passed[2] = { 20, 60 }; | 572 | const int p_vals[7] = {0, 1, 3, 3, 5, 9, 99}; | 
| 576 | int pawn_defects[2][8] = { | 573 | const int MVV_LVA[7][7] = { | 
| 577 | { | 574 | {0, 5<<21, 4<<21, 4<<21, 3<<21, 2<<21, 1<<21}, | 
| 578 | { 0, 0, 3, 2, 1, 0, 0, 0 } /* [white][8] */ | 575 | {0, 10<<21, 9<<21, 9<<21, 8<<21, 7<<21, 6<<21}, | 
| 579 | }; | 576 | {0, 15<<21, 14<<21, 14<<21, 13<<21, 12<<21, 11<<21}, | 
| 580 | const char square_color[64] = { | 577 | {0, 15<<21, 14<<21, 14<<21, 13<<21, 12<<21, 11<<21}, | 
| 581 | 1, 0, 1, 0, 1, 0, 1, 0, | 578 | {0, 20<<21, 19<<21, 19<<21, 18<<21, 17<<21, 16<<21}, | 
| 582 | 0, | 579 | {0, 25<<21, 24<<21, 24<<21, 23<<21, 22<<21, 21<<21}, | 
| 583 | 
 | 580 | {0, 30<<21, 29<<21, 29<<21, 28<<21, 27<<21, 26<<21}}; | 
| - | 581 | const int pieces[2][7] = { | |
| - | 582 | {0, -1, -2, -3, -4, -5, -6}, | |
| - | 583 | {0, +1, +2, +3, +4, +5, +6} | |
| - | 584 | }; | |
| - | 585 | const int lower_n = 16; | |
| - | 586 | const int lower_b = 10; | |
| - | 587 | const int mobility_score_n[4] = {1, 2, 3, 4}; | |
| - | 588 | const int mobility_score_b[4] = {1, 2, 3, 4}; | |
| - | 589 | const int mobility_score_r[4] = {1, 2, 3, 4}; | |
| - | 590 | const int mob_curve_r[48] = { | |
| - | 591 | -27,-23,-21,-19,-15,-10, -9, -8, | |
| - | 592 | -7, -6, -5, -4, -3, -2, -1, 0, | |
| - | 593 | 1, 2, 3, 4, 5, 6, 7, 8, | |
| - | 594 | 9, 10, 11, 12, 13, 14, 15, 16, | |
| - | 595 | 17, 18, 19, 20, 21, 22, 23, 24, | |
| - | 596 | 25, 26, 27, 28, 29, 30, 31, 32 | |
| - | 597 | }; | |
| 584 | 
 | 598 | int piece_values[2][7] = { | 
| 585 | 
 | 599 | {0, -PAWN_VALUE, -KNIGHT_VALUE, -BISHOP_VALUE, | 
| - | 600 | -ROOK_VALUE, -QUEEN_VALUE, -KING_VALUE}, | |
| 586 | 
 | 601 | {0, PAWN_VALUE, KNIGHT_VALUE, BISHOP_VALUE, | 
| - | 602 | ROOK_VALUE, QUEEN_VALUE, KING_VALUE} | |
| - | 603 | }; | |
| - | 604 | /* | |
| 587 | 
 | 605 | First term is a character string explaining what the eval | 
| 588 | 
 | 606 | term is used for. | 
| 589 | 
 | 607 | |
| 590 | 
 | 608 |   Second term is the "type" of the value. | 
| 591 | 
 | 609 | 0 = heading entry (no values, just a category name to display). | 
| 592 | 
 | 610 | 1 = scalar value. | 
| 593 | 80, 70, 60, 50, 40, 30, 40, 50, | 611 |      2 = array[mg] | 
| 594 | 70, 60, 50, 40, 30, 40, 50, 60, | 612 |      3 = floating point value | 
| 595 | 60, 50, 40, 30, 40, 50, 60, 70, | 613 | |
| 596 | 50, 40, 30, 40, 50, 60, 70, 80, | 614 |    Third term is the "size" of the scoring term, where 0 is a | 
| 597 | 
 | 615 | scalar value, otherwise it is the actual number of elements in | 
| 598 | 
 | 616 | an array of values. | 
| 599 | }; | 617 | |
| 600 | const char b_n_mate_light_squares[64] = { | 618 |    Fourth term is a pointer to the data value(s). | 
| 601 | 30, 40, 50, 60, 70, 80, 90, 99, | 619 | */ | 
| 602 | 40, 30, 40, 50, 60, 70, 80, 90, | 620 | struct personality_term personality_packet[256] = { | 
| 603 | 50, 40, 30, 40, 50, 60, 70, 80, | 621 | {"search options ", 0, 0, NULL}, /* 0 */ | 
| 604 | 60, 50, 40, 30, 40, 50, 60, 70, | 622 | {"check extension ", 1, 0, &check_depth}, | 
| - | 623 | {"null-move reduction ", 1, 0, &null_depth}, | |
| - | 624 | {"null-move adaptive divisor ", 1, 0, &null_divisor}, | |
| - | 625 | {"LMR min distance to frontier ", 1, 0, &LMR_rdepth}, | |
| - | 626 | {"LMR min reduction ", 1, 0, &LMR_min}, | |
| - | 627 | {"LMR max reduction ", 1, 0, &LMR_max}, | |
| - | 628 | {"LMR formula depth bias ", 3, 0, &LMR_db}, | |
| - | 629 | {"LMR formula moves searched bias ", 3, 0, &LMR_mb}, | |
| - | 630 | {"LMR scale factor ", 3, 0, &LMR_s}, | |
| - | 631 | {"search options (continued) ", 0, 0, NULL}, /* 10 */ | |
| - | 632 | {"prune depth ", 1, 0, &pruning_depth}, | |
| - | 633 | {"prune margin [remain_depth] ", 4, 8, pruning_margin}, | |
| - | 634 | {NULL, 0, 0, NULL}, | |
| - | 635 | {NULL, 0, 0, NULL}, | |
| - | 636 | {NULL, 0, 0, NULL}, | |
| - | 637 | {NULL, 0, 0, NULL}, | |
| - | 638 | {NULL, 0, 0, NULL}, | |
| 605 | 
 | 639 | {NULL, 0, 0, NULL}, | 
| 606 | 
 | 640 | {NULL, 0, 0, NULL}, | 
| 607 | 90, 80, 70, 60, 50, 40, 30, 40, | 641 | }; | 
| 608 | 99, 90, 80, 70, 60, 50, 40, 30 | 642 | /* *INDENT-ON* */ | 
| 609 | }; | 643 | |
| 610 | 
 | 644 | |
| 611 | 
 | 645 | |
| 612 | 180, 160, 140, 120, 120, 140, 160, 180, | 646 | |
| 613 | 160, 140, 120, 100, 100, 120, 140, 160, | 647 | |
| 614 | 140, 120, 100, 100, 100, 100, 120, 140, | 648 | |
| 615 | 140, 120, 100, 100, 100, 100, 120, 140, | 649 | |
| 616 | 160, 140, 120, 100, 100, 120, 140, 160, | - | |
| 617 | 180, 160, 140, 120, 120, 140, 160, 180, | 650 | |
| 618 | 
 | 651 | |
| 619 | }; | 652 | |
| 620 | int knight_outpost[2][64] = { | 653 | |
| 621 | { 0, 0, 0, 0, 0, 0, 0, 0, | 654 | |
| 622 | 0, 0, 0, 0, 0, 0, 0, 0, | 655 | |
| 623 | 0, 1, 4, 4, 4, 4, 1, 0, | 656 | |
| Line 630... | Line 663... | ||
| 630 | { 0, 0, 0, 0, 0, 0, 0, 0, | 663 | |
| 631 | 0, 0, 0, 0, 0, 0, 0, 0, | 664 | |
| 632 | 0, 0, 0, 0, 0, 0, 0, 0, | 665 | |
| 633 | 0, 1, 4, 4, 4, 4, 1, 0, | 666 | |
| 634 | 0, 2, 6, 8, 8, 6, 2, 0, /* [white][64] */ | 667 | |
| 635 | 
 | 668 | |
| 636 | 
 | 669 | |
| 637 | 
 | 670 | |
| 638 | 
 | 671 | |
| 639 | 
 | 672 | |
| - | 673 | ||
| - | 674 | ||
| - | 675 | ||
| 640 | 
 | 676 | |
| 641 | 
 | 677 | |
| 642 | 0, 0, 1, 1, 1, 1, 0, 0, | 678 | |
| 643 | 0, 1, 3, 3, 3, 3, 1, 0, | 679 | |
| 644 | 
 | 680 | |
| 645 | 0, 1, 2, 2, 2, 2, 1, 0, | - | |
| 646 | 
 | 681 | |
| 647 | 0, 0, 0, 0, 0, 0, 0, 0 }, | 682 | |
| 648 | 683 | ||
| 649 | { 0, 0, 0, 0, 0, 0, 0, 0, | 684 | |
| 650 | 0, 0, 0, 0, 0, 0, 0, 0, | 685 | |
| 651 | 0, 1, 2, 2, 2, 2, 1, 0, | 686 | |
| Line 665... | Line 700... | ||
| 665 | -10, 0, 0, -12, -12, 0, 0, -10, | 700 | |
| 666 | 0, 0, 0, 0, 0, 0, 0, 0 }, | 701 | |
| 667 | 702 | ||
| 668 | { 0, 0, 0, 0, 0, 0, 0, 0, | 703 | |
| 669 | -10, 0, 0, -12, -12, 0, 0, -10, | 704 | |
| 670 | 
 | 705 | |
| 671 | -7, 3, 3, 13, 13, 3, 3, -7, | 706 | |
| 672 | -4, 6, 6, 16, 16, 6, 6, -4, /* [mg][white][64] */ | 707 | |
| 673 | 0, 10, 10, 30, 30, 10, 10, 0, | 708 | |
| 674 | 56, 66, 66, 66, 66, 66, 66, 56, | 709 | |
| 675 | 0, 0, 0, 0, 0, 0, 0, 0 }}, | 710 | |
| Line 689... | Line 724... | ||
| 689 | -7, 3, 3, 13, 13, 3, 3, -7, | 724 | |
| 690 | -4, 6, 6, 16, 16, 6, 6, -4, /* [eg][white][64] */ | 725 | |
| 691 | 0, 10, 10, 30, 30, 10, 10, 0, | 726 | |
| 692 | 56, 66, 66, 66, 66, 66, 66, 56, | 727 | |
| 693 | 0, 0, 0, 0, 0, 0, 0, 0 }} | 728 | |
| 694 | 
 | 729 | |
| 695 | int nval[2][2][64] = { | 730 | |
| 696 | {{-29, -19, -19, -9, -9, -19, -19, -29, | 731 | |
| 697 | 1, 12, 18, 22, 22, 18, 12, 1, | 732 | |
| 698 | 1, 14, 23, 27, 27, 23, 14, 1, | 733 | |
| 699 | 1, 14, 23, 28, 28, 23, 14, 1, | 734 | |
| Line 839... | Line 874... | ||
| 839 | -60, -40, -20, 20, 60, 60, 60, 40, | 874 | |
| 840 | -60, -40, -20, 20, 40, 40, 40, 40, | 875 | |
| 841 | -60, -40, -20, -20, -20, -20, -20, -20 } | 876 | |
| 842 | }; | 877 | |
| 843 | int kval_q[2][64] = { | 878 | |
| 844 | 
 | 879 | |
| 845 | 40, 40, 40, 40, 20, -20, -40, -60, | 880 | |
| 846 | 40, 60, 60, 60, 20, -20, -40, -60, | 881 | |
| 847 | 40, 60, 60, 60, 20, -20, -40, -60, | 882 | |
| 848 | 40, 40, 40, 40, 20, -20, -40, -60, /* [black][64] */ | 883 | |
| 849 | 20, 20, 20, 20, 20, -20, -40, -60, | 884 | |
| Line 863... | Line 898... | ||
| 863 | 0, 7, 14, 21, 28, 35, 42, 49, | 898 | |
| 864 | 56, 63, 70, 77, 84, 91, 98, 105 | 899 | |
| 865 | }; | 900 | |
| 866 | int tropism_vector[16] = { | 901 | |
| 867 | 0, 1, 2, 3, 4, 5, 11, 20, | 902 | |
| 868 | 
 | 903 | |
| 869 | }; | 904 | |
| 870 | const int p_values[13] = { 10000, 900, 500, 300, 300, 100, 0, | 905 | |
| 871 | 100, 300, 300, 500, 900, 9900 | 906 | |
| 872 | }; | 907 | |
| 873 | const int pcval[7] = { 0, 100, 300, 300, 500, 900, 9900 }; | 908 | |
| Line 887... | Line 922... | ||
| 887 | int pawn_connected[2] = { 4, 8 }; | 922 | |
| 888 | int pawn_isolated[2] = { 18, 21 }; | 923 | |
| 889 | int pawn_weak[2] = { 8, 18 }; | 924 | |
| 890 | int lower_n = 16; | 925 | |
| 891 | int mobility_score_n[4] = { 1, 2, 3, 4 }; | 926 | |
| 892 | 
 | 927 | |
| 893 | int bishop_trapped = 174; | 928 | |
| 894 | int bishop_with_wing_pawns[2] = { 18, 36 }; | 929 | |
| 895 | int bishop_pair[2] = { 38, 56 }; | 930 | |
| 896 | int mobility_score_b[4] = { 1, 2, 3, 4 }; | 931 | |
| 897 | int mobility_score_r[4] = { 1, 2, 3, 4 }; | 932 | |
| 898 | int rook_on_7th[2] = { 25, 35 }; | 933 | |
| 899 | int rook_open_file[2] = { 35, 20 }; | 934 | |
| 900 | int rook_half_open_file[2] = { 10, 10 }; | 935 | |
| 901 | int rook_trapped = 60; | 936 | |
| 902 | 
 | 937 | |
| 903 | int half_open_file[8] = { 4, 4, 3, 3, 3, 3, 4, 4 }; | 938 | |
| 904 | int king_safety_mate_threat = 600; | 939 | |
| 905 | int king_king_tropism = 10; | 940 | |
| 906 | int development_thematic = 12; | - | |
| 907 | int development_losing_castle = 20; | - | |
| 908 | int development_not_castled = 20; | - | |
| 909 | /* | - | |
| 910 | 
 | 941 | |
| 911 |    term is used for. | 942 | |
| 912 | 943 | ||
| 913 |   Second term is the "type" of the value.   | 944 | |
| 914 |      0 = heading entry (no values, just a category name to display). | 945 | |
| 915 |      1 = scalar value. | 946 | |
| 916 |      2 = array[mg] | 947 | |
| 917 |      3 = array[mg][side][64].  These values are displayed as 8x8 | 948 | |
| 918 | 
 | 949 | |
| 919 | 
 | 950 | |
| 920 |      4 = array[side][64] | 951 | |
| 921 |      5 = array[rank] | 952 | |
| 922 | 
 | 953 | |
| 923 | 954 | ||
| 924 | 
 | 955 | |
| 925 | 
 | 956 | |
| 926 | 
 | 957 | |
| 927 | 958 | ||
| 928 | 
 | 959 | |
| 929 | 
 | 960 | |
| 930 | struct personality_term personality_packet[256] = { | 961 | |
| 931 | 
 | 962 | |
| 932 | 
 | 963 | |
| 933 | 
 | 964 | |
| 934 | 
 | 965 | |
| 935 | 
 | 966 | |
| 936 | 
 | 967 | |
| 937 | 
 | 968 | |
| 938 | 
 | 969 | |
| 939 | {NULL, 0, 0, NULL}, | 970 | |
| - | 971 | ||
| - | 972 | ||
| - | 973 | ||
| - | 974 | ||
| - | 975 | ||
| - | 976 | ||
| - | 977 | ||
| - | 978 | ||
| - | 979 | ||
| 940 | 
 | 980 | |
| 941 | 
 | 981 | |
| 942 | 
 | 982 | |
| 943 | 
 | 983 | |
| - | 984 | ||
| - | 985 | ||
| - | 986 | ||
| 944 | 
 | 987 | |
| 945 | 
 | 988 | |
| 946 | 
 | 989 | |
| 947 | 
 | 990 | |
| 948 | 
 | 991 | |
| 949 | 
 | 992 | |
| 950 | 
 | 993 | |
| 951 | 
 | 994 | |
| 952 | 
 | 995 | |
| 953 | 
 | 996 | |
| 954 | 
 | 997 | |
| 955 | {"skill level setting ", 1, 0, &skill}, | - | |
| 956 | #else | - | |
| 957 | {NULL, 0, 0, NULL}, | - | |
| 958 | #endif | - | |
| 959 | 
 | 998 | |
| 960 | {NULL, 0, 0, NULL}, | - | |
| 961 | {NULL, 0, 0, NULL}, | - | |
| 962 | {NULL, 0, 0, NULL}, | - | |
| 963 | 
 | 999 | |
| 964 | {NULL, 0, 0, NULL}, | - | |
| 965 | 
 | 1000 | |
| 966 | 
 | 1001 | |
| 967 | 
 | 1002 | |
| 968 | 
 | 1003 | |
| 969 | 
 | 1004 | |
| 970 | 
 | 1005 | |
| 971 | 
 | 1006 | |
| 972 | 
 | 1007 | |
| 973 | 
 | 1008 | |
| 974 | 
 | 1009 | |
| 975 | 
 | 1010 | |
| 976 | {"passed pawn blocked by friend [rank] ", 6, 16, (int *) passed_pawn_blockaded_by_friendly}, | 1011 | |
| 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 | 
 | 1012 | |
| 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 | 
 | 1013 | |
| 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 | 
 | 1014 | |
| 1010 | 
 | 1015 | |
| 1011 | 
 | 1016 | |
| 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 | - | ||
| 1043 | - | ||
| 1044 | - | ||
| 1045 | - | ||
| 1046 | 1017 | ||
| 1047 | - | ||
| 1048 | - | ||
| 1049 | - | ||
| 1050 | - | ||
| 1051 | - | ||
| 1052 | - | ||
| 1053 | 1018 | ||
| 1054 | - | ||
| 1055 | - | ||
| 1056 | - | ||
| 1057 | - | ||
| 1058 | - | ||
| 1059 | 1019 | ||
| 1060 | 1020 | ||
| 1061 | - | ||
| 1062 | - | ||
| 1063 | - | ||
| 1064 | - | ||
| 1065 | - | ||
| 1066 | - | ||
| 1067 | - | ||
| 1068 | - | ||
| 1069 | - | ||
| 1070 | - | ||
| 1071 | - | ||
| 1072 | - | ||
| 1073 | - | ||
| 1074 | - | ||
| 1075 | - | ||
| 1076 | - | ||
| 1077 | - | ||
| 1078 | 1021 | ||
| 1079 | - | ||
| 1080 | - | ||
| 1081 | 1022 | ||
| 1082 | - | ||
| 1083 | - | ||
| 1084 | - | ||
| 1085 | - | ||
| 1086 | - | ||
| 1087 | 1023 | ||
| 1088 | - | ||
| 1089 | - | ||
| 1090 | - | ||
| 1091 | - | ||
| 1092 | - | ||
| 1093 | - | ||
| 1094 | - | ||
| 1095 | - | ||
| 1096 | - | ||
| 1097 | - | ||
| 1098 | - | ||
| 1099 | - | ||
| 1100 | - | ||
| 1101 | - | ||
| 1102 | - | ||
| 1103 | - | ||
| 1104 | - | ||
| 1105 | - | ||
| 1106 | - | ||
| 1107 | - | ||
| 1108 | - | ||
| 1109 | - | ||
| 1110 | - | ||
| 1111 | - | ||
| 1112 | - | ||
| 1113 | - | ||
| 1114 | - | ||
| 1115 | - | ||
| 1116 | - | ||
| 1117 | - | ||
| 1118 | - | ||
| 1119 | - | ||
| 1120 | - | ||
| 1121 | - | ||
| 1122 | - | ||
| 1123 | - | ||
| 1124 | - | ||
| 1125 | - | ||
| 1126 | - | ||
| 1127 | - | ||
| 1128 | - | ||
| 1129 | - | ||
| 1130 | - | ||
| 1131 | - | ||
| 1132 | - | ||
| 1133 | - | ||
| 1134 | - | ||
| 1135 | - | ||
| 1136 | - | ||
| 1137 | - | ||
| 1138 | - | ||
| 1139 | - | ||
| 1140 | - | ||
| 1141 | - | ||
| 1142 | - | ||
| 1143 | - | ||
| 1144 | - | ||
| 1145 | - | ||
| 1146 | - | ||
| 1147 | - | ||
| 1148 | - | ||
| 1149 | - | ||
| 1150 | - | ||
| 1151 | - | ||
| 1152 | - | ||
| 1153 | - | ||
| 1154 | - | ||
| 1155 | - | ||
| 1156 | - | ||
| 1157 | - | ||
| 1158 | - | ||
| 1159 | - | ||
| 1160 | - | ||
| 1161 | - | ||
| 1162 | - | ||
| 1163 | - | ||
| 1164 | - | ||
| 1165 | - | ||
| 1166 | - | ||
| 1167 | - | ||
| 1168 | - | ||
| 1169 | - | ||
| 1170 | - | ||
| 1171 | - | ||
| 1172 | - | ||
| 1173 | - | ||
| 1174 | - | ||
| 1175 | - | ||
| 1176 | - | ||
| 1177 | - | ||
| 1178 | - | ||
| 1179 | - | ||
| 1180 | - | ||
| 1181 | - | ||
| 1182 | - | ||
| 1183 | - | ||
| 1184 | - | ||
| 1185 | - | ||
| 1186 | - | ||
| 1187 | - | ||
| 1188 | - | ||
| 1189 | - | ||
| 1190 | - | ||
| 1191 | - | ||
| 1192 | - | ||
| 1193 | - | ||
| 1194 | - | ||
| 1195 | - | ||
| 1196 | - | ||
| 1197 | - | ||
| 1198 | - | ||
| 1199 | - | ||
| 1200 | - | ||
| 1201 | - | ||
| 1202 | - | ||
| 1203 | - | ||
| 1204 | - | ||
| 1205 | - | ||
| 1206 | - | ||
| 1207 | - | ||
| 1208 | - | ||
| 1209 | - | ||
| 1210 | - | ||
| 1211 | - | ||
| 1212 | - | ||
| 1213 | - | ||
| 1214 | - | ||
| 1215 | - | ||
| 1216 | - | ||
| 1217 | - | ||
| 1218 | - | ||
| 1219 | - | ||
| 1220 | - | ||
| 1221 | - | ||
| 1222 | - | ||
| 1223 | - | ||
| 1224 | - | ||
| 1225 | - | ||
| 1226 | - | ||
| 1227 | - | ||
| 1228 | - | ||
| 1229 | - | ||
| 1230 | - | ||
| 1231 | - | ||
| 1232 | - | ||
| 1233 | - | ||
| 1234 | - | ||
| 1235 | - | ||
| 1236 | - | ||
| 1237 | - | ||
| 1238 | - | ||
| 1239 | - | ||
| 1240 | - | ||
| 1241 | - | ||
| 1242 | - | ||
| 1243 | - | ||
| 1244 | - | ||
| 1245 | - | ||
| 1246 | - | ||
| 1247 | - | ||
| 1248 | - | ||
| 1249 | - | ||
| 1250 | - | ||
| 1251 | - | ||
| 1252 | - | ||
| 1253 | - | ||
| 1254 | - | ||
| 1255 | - | ||
| 1256 | - | ||
| 1257 | - | ||
| 1258 | - | ||
| 1259 | - | ||
| 1260 | - | ||
| 1261 | - | ||
| 1262 | - | ||
| 1263 | - | ||
| 1264 | - | ||
| 1265 | - | ||
| 1266 | - | ||
| 1267 | - | ||
| 1268 | - | ||
| 1269 | - | ||
| 1270 | - | ||
| 1271 | - | ||
| 1272 | - | ||
| 1273 | - | ||
| 1274 | - | ||
| 1275 | - | ||
| 1276 | - | ||
| 1277 | - | ||
| 1278 | - | ||
| 1279 | - | ||
| 1280 | - | ||
| 1281 | - | ||
| 1282 | - | ||
| 1283 | - | ||
| 1284 | - | ||
| 1285 | - | ||
| 1286 | - | ||
| 1287 | - | ||
| 1288 | - | ||
| 1289 | - | ||
| 1290 | - | ||
| 1291 | - | ||
| 1292 | - | ||
| 1293 | - | ||
| 1294 | - | ||
| 1295 | - | ||
| 1296 | - | ||
| 1297 | - | ||
| 1298 | - | ||
| 1299 | - | ||
| 1300 | - | ||
| 1301 | - | ||
| 1302 | - | ||
| 1303 | - | ||
| 1304 | - | ||
| 1305 | - | ||
| 1306 | - | ||
| 1307 | - | ||
| 1308 | - | ||
| 1309 | - | ||
| 1310 | - | ||
| 1311 | - | ||
| 1312 | - | ||
| 1313 | - | ||
| 1314 | 1024 | ||
| 1315 | 1025 | ||
| 1316 | 1026 | ||
| 1317 | 1027 | ||
| - | 1028 | ||
| 1318 | 1029 | ||
| 1319 | 1030 | ||
| 1320 | - | ||
| 1321 | - | ||
| 1322 | - | ||
| 1323 | - | ||
| 1324 | - | ||
| 1325 | - | ||
| 1326 | - | ||
| 1327 | - | ||
| 1328 | - | ||
| 1329 | - | ||
| 1330 | - | ||
| 1331 | - | ||
| 1332 | - | ||
| 1333 | - | ||
| 1334 | - | ||
| 1335 | - | ||
| 1336 | - | ||
| 1337 | - | ||
| 1338 | - | ||
| 1339 | - | ||
| 1340 | - | ||
| 1341 | - | ||
| 1342 | - | ||
| 1343 | - | ||
| 1344 | - | ||
| 1345 | 1031 | ||
| 1346 | 1032 | ||
| 1347 | 1033 | ||
| 1348 | 1034 | ||
| 1349 | 1035 | ||
| 1350 | 1036 | ||
| 1351 | 1037 | ||
| 1352 | 1038 | ||
| 1353 | - | ||
| 1354 | - | ||
| 1355 | - | ||
| 1356 | 1039 | ||
| 1357 | - | ||
| 1358 | - | ||
| 1359 | 1040 | ||
| 1360 | 1041 | ||
| 1361 | 1042 | ||
| 1362 | 1043 | ||
| 1363 | 1044 | ||
| 1364 | 1045 | ||
| 1365 | 1046 | ||
| 1366 | 1047 | ||
| 1367 | 1048 | ||
| 1368 | 1049 | ||
| 1369 | 1050 | ||
| 1370 | 1051 | ||
| 1371 | 1052 | ||
| 1372 | 1053 | ||
| 1373 | 1054 | ||
| 1374 | - | ||
| 1375 | - | ||
| 1376 | - | ||
| 1377 | - | ||
| 1378 | - | ||
| 1379 | - | ||
| 1380 | - | ||
| 1381 | - | ||
| 1382 | - | ||
| 1383 | - | ||
| 1384 | - | ||
| 1385 | - | ||
| 1386 | - | ||
| 1387 | - | ||
| 1388 | 1055 | ||
| 1389 | - | ||
| 1390 | - | ||
| 1391 | 1056 | ||
| 1392 | - | ||
| 1393 | - | ||
| 1394 | - | ||
| 1395 | - | ||
| 1396 | - | ||
| 1397 | - | ||
| 1398 | - | ||
| 1399 | - | ||
| 1400 | - | ||
| 1401 | - | ||
| 1402 | - | ||
| 1403 | - | ||
| 1404 | - | ||
| 1405 | 1057 | ||
| 1406 | - | ||
| 1407 | - | ||
| 1408 | - | ||
| 1409 | - | ||
| 1410 | - | ||
| 1411 | - | ||
| 1412 | - | ||
| 1413 | - | ||
| 1414 | - | ||
| 1415 | - | ||
| 1416 | - | ||
| 1417 | - | ||
| 1418 | - | ||
| 1419 | - | ||
| 1420 | - | ||
| 1421 | - | ||
| 1422 | - | ||
| 1423 | - | ||
| 1424 | - | ||
| 1425 | - | ||
| 1426 | - | ||
| 1427 | - | ||
| 1428 | - | ||
| 1429 | - | ||
| 1430 | - | ||
| 1431 | - | ||
| 1432 | - | ||
| 1433 | - | ||
| 1434 | - | ||
| 1435 | - | ||
| 1436 | - | ||
| 1437 | - | ||
| 1438 | - | ||
| 1439 | - | ||
| 1440 | - | ||
| 1441 | 1058 | ||
| 1442 | - | ||
| 1443 | - | ||
| 1444 | - | ||
| 1445 | - | ||
| 1446 | 1059 | ||
| 1447 | - | ||
| 1448 | 1060 | ||
| 1449 | - | ||
| 1450 | - | ||
| 1451 | - | ||
| 1452 | - | ||
| 1453 | - | ||
| 1454 | - | ||
| 1455 | 1061 | ||
| 1456 | 1062 | ||
| 1457 | 1063 | ||
| 1458 | 1064 | ||
| 1459 | 1065 | ||
| 1460 | 1066 | ||
| 1461 | - | ||
| 1462 | - | ||
| 1463 | - | ||
| 1464 | - | ||
| 1465 | - | ||
| 1466 | - | ||
| 1467 | - | ||
| 1468 | - | ||
| 1469 | - | ||
| 1470 | 1067 | ||
| 1471 | - | ||
| 1472 | - | ||
| 1473 | - | ||
| 1474 | - | ||
| 1475 | 1068 | ||
| 1476 | 1069 | ||