| 284 | } |
| 285 | |
| 286 | void init_mut_index() |
| 287 | { |
| 288 | total_weight.clear(); |
| 289 | for (int i = 0; i < NUM_MUTATIONS; ++i) |
| 290 | mut_index[i] = -1; |
| 291 | |
| 292 | for (unsigned int i = 0; i < ARRAYSZ(mut_data); ++i) |
| 293 | { |
| 294 | const mutation_type mut = mut_data[i].mutation; |
| 295 | ASSERT_RANGE(mut, 0, NUM_MUTATIONS); |
| 296 | ASSERT(mut_index[mut] == -1); |
| 297 | mut_index[mut] = i; |
| 298 | for (const auto flag : mutflags::range()) |
| 299 | { |
| 300 | if (_mut_has_flag(mut_data[i], flag)) |
| 301 | total_weight[flag] += _mut_weight(mut_data[i], flag); |
| 302 | } |
| 303 | } |
| 304 | |
| 305 | // Add dummy data for removed mutations |
| 306 | vector<mutation_type> removed_muts = get_removed_mutations(); |
| 307 | for (unsigned int i = 0; i < removed_muts.size(); ++i) |
| 308 | mut_index[removed_muts[i]] = ARRAYSZ(mut_data) - 1; |
| 309 | |
| 310 | // this is all a bit silly but ok |
| 311 | for (int i = 0; i < MUT_NON_MUTATION - CATEGORY_MUTATIONS; ++i) |
| 312 | category_mut_index[i] = -1; |
| 313 | |
| 314 | for (unsigned int i = 0; i < ARRAYSZ(category_mut_data); ++i) |
| 315 | { |
| 316 | const mutation_type mut = category_mut_data[i].mutation; |
| 317 | ASSERT_RANGE(mut, CATEGORY_MUTATIONS, MUT_NON_MUTATION); |
| 318 | ASSERT(category_mut_index[mut-CATEGORY_MUTATIONS] == -1); |
| 319 | category_mut_index[mut-CATEGORY_MUTATIONS] = i; |
| 320 | } |
| 321 | |
| 322 | for (int i = 0; i < NUM_BANES; ++i) |
| 323 | bane_index[i] = -1; |
| 324 | for (unsigned int i = 0; i < ARRAYSZ(bane_data); ++i) |
| 325 | bane_index[bane_data[i].type] = i; |
| 326 | } |
| 327 | |
| 328 | /* |
| 329 | * Get the max number of possible levels for mutation `mut`. This is typically 1 or 3. |