pick a random role subject to any racenum/gendnum/alignnum constraints */ If pickhow == PICK_RIGID a role is returned only if there is */ a single possibility */
| 1012 | /* If pickhow == PICK_RIGID a role is returned only if there is */ |
| 1013 | /* a single possibility */ |
| 1014 | int |
| 1015 | pick_role(int racenum, int gendnum, int alignnum, int pickhow) |
| 1016 | { |
| 1017 | int i; |
| 1018 | int roles_ok = 0, set[SIZE(roles)]; |
| 1019 | |
| 1020 | for (i = 0; i < SIZE(roles) - 1; i++) { |
| 1021 | if (ok_role(i, racenum, gendnum, alignnum) |
| 1022 | && ok_race(i, (racenum >= 0) ? racenum : ROLE_RANDOM, |
| 1023 | gendnum, alignnum) |
| 1024 | && ok_gend(i, racenum, |
| 1025 | (gendnum >= 0) ? gendnum : ROLE_RANDOM, alignnum) |
| 1026 | && ok_align(i, racenum, |
| 1027 | gendnum, (alignnum >= 0) ? alignnum : ROLE_RANDOM)) |
| 1028 | set[roles_ok++] = i; |
| 1029 | } |
| 1030 | if (roles_ok == 0 || (roles_ok > 1 && pickhow == PICK_RIGID)) |
| 1031 | return ROLE_NONE; |
| 1032 | return set[rn2(roles_ok)]; |
| 1033 | } |
| 1034 | |
| 1035 | /* is racenum compatible with any rolenum/gendnum/alignnum constraints? */ |
| 1036 | boolean |
no test coverage detected