| 472 | } |
| 473 | |
| 474 | static void |
| 475 | X11_player_selection_randomize(void) |
| 476 | { |
| 477 | int nrole = plsel_n_roles; |
| 478 | int nrace = plsel_n_races; |
| 479 | int ro, ra, al, gend; |
| 480 | boolean choose_race_first; |
| 481 | boolean picksomething = (flags.initrole == ROLE_NONE |
| 482 | || flags.initrace == ROLE_NONE |
| 483 | || flags.initgend == ROLE_NONE |
| 484 | || flags.initalign == ROLE_NONE); |
| 485 | |
| 486 | if (flags.randomall && picksomething) { |
| 487 | if (flags.initrole == ROLE_NONE) |
| 488 | flags.initrole = ROLE_RANDOM; |
| 489 | if (flags.initrace == ROLE_NONE) |
| 490 | flags.initrace = ROLE_RANDOM; |
| 491 | if (flags.initgend == ROLE_NONE) |
| 492 | flags.initgend = ROLE_RANDOM; |
| 493 | if (flags.initalign == ROLE_NONE) |
| 494 | flags.initalign = ROLE_RANDOM; |
| 495 | } |
| 496 | |
| 497 | rigid_role_checks(); |
| 498 | |
| 499 | /* Randomize race and role, unless specified in config */ |
| 500 | ro = flags.initrole; |
| 501 | if (ro == ROLE_NONE || ro == ROLE_RANDOM) { |
| 502 | ro = rn2(nrole); |
| 503 | } |
| 504 | ra = flags.initrace; |
| 505 | if (ra == ROLE_NONE || ra == ROLE_RANDOM) { |
| 506 | ra = rn2(nrace); |
| 507 | if (flags.initrace != ROLE_RANDOM) { |
| 508 | } |
| 509 | } |
| 510 | |
| 511 | /* make sure we have a valid combination, honoring |
| 512 | the users request if possible. */ |
| 513 | choose_race_first = FALSE; |
| 514 | if (flags.initrace >= 0 && flags.initrole < 0) { |
| 515 | choose_race_first = TRUE; |
| 516 | } |
| 517 | |
| 518 | while (!validrace(ro, ra)) { |
| 519 | if (choose_race_first) { |
| 520 | ro = rn2(nrole); |
| 521 | } else { |
| 522 | ra = rn2(nrace); |
| 523 | } |
| 524 | } |
| 525 | |
| 526 | gend = flags.initgend; |
| 527 | if (gend == ROLE_NONE) { |
| 528 | gend = rn2(ROLE_GENDERS); |
| 529 | } |
| 530 | while (!validgend(ro, ra, gend)) { |
| 531 | gend = rn2(ROLE_GENDERS); |
no test coverage detected