| 1232 | } |
| 1233 | |
| 1234 | void |
| 1235 | rigid_role_checks(void) |
| 1236 | { |
| 1237 | int tmp; |
| 1238 | |
| 1239 | /* Some roles are limited to a single race, alignment, or gender and |
| 1240 | * calling this routine prior to XXX_player_selection() will help |
| 1241 | * prevent an extraneous prompt that actually doesn't allow |
| 1242 | * you to choose anything further. Note the use of PICK_RIGID which |
| 1243 | * causes the pick_XX() routine to return a value only if there is one |
| 1244 | * single possible selection, otherwise it returns ROLE_NONE. |
| 1245 | * |
| 1246 | */ |
| 1247 | if (flags.initrole == ROLE_RANDOM) { |
| 1248 | /* If the role was explicitly specified as ROLE_RANDOM |
| 1249 | * via -uXXXX-@ or OPTIONS=role:random then choose the role |
| 1250 | * in here to narrow down later choices. |
| 1251 | */ |
| 1252 | flags.initrole = pick_role(flags.initrace, flags.initgend, |
| 1253 | flags.initalign, PICK_RANDOM); |
| 1254 | if (flags.initrole < 0) |
| 1255 | flags.initrole = randrole_filtered(); |
| 1256 | } |
| 1257 | if (flags.initrace == ROLE_RANDOM |
| 1258 | && (tmp = pick_race(flags.initrole, flags.initgend, |
| 1259 | flags.initalign, PICK_RANDOM)) != ROLE_NONE) |
| 1260 | flags.initrace = tmp; |
| 1261 | if (flags.initalign == ROLE_RANDOM |
| 1262 | && (tmp = pick_align(flags.initrole, flags.initrace, |
| 1263 | flags.initgend, PICK_RANDOM)) != ROLE_NONE) |
| 1264 | flags.initalign = tmp; |
| 1265 | if (flags.initgend == ROLE_RANDOM |
| 1266 | && (tmp = pick_gend(flags.initrole, flags.initrace, |
| 1267 | flags.initalign, PICK_RANDOM)) != ROLE_NONE) |
| 1268 | flags.initgend = tmp; |
| 1269 | |
| 1270 | if (flags.initrole != ROLE_NONE) { |
| 1271 | if (flags.initrace == ROLE_NONE) |
| 1272 | flags.initrace = pick_race(flags.initrole, flags.initgend, |
| 1273 | flags.initalign, PICK_RIGID); |
| 1274 | if (flags.initalign == ROLE_NONE) |
| 1275 | flags.initalign = pick_align(flags.initrole, flags.initrace, |
| 1276 | flags.initgend, PICK_RIGID); |
| 1277 | if (flags.initgend == ROLE_NONE) |
| 1278 | flags.initgend = pick_gend(flags.initrole, flags.initrace, |
| 1279 | flags.initalign, PICK_RIGID); |
| 1280 | } |
| 1281 | } |
| 1282 | |
| 1283 | boolean |
| 1284 | setrolefilter(const char *bufp) |
no test coverage detected