| 193 | } |
| 194 | |
| 195 | void |
| 196 | Gem_player_selection() |
| 197 | { |
| 198 | int i, k, n; |
| 199 | char pick4u = 'n', pbuf[QBUFSZ], lastch = 0, currch; |
| 200 | winid win; |
| 201 | anything any; |
| 202 | menu_item *selected = NULL; |
| 203 | |
| 204 | /* avoid unnecessary prompts further down */ |
| 205 | rigid_role_checks(); |
| 206 | |
| 207 | /* Should we randomly pick for the player? */ |
| 208 | if (!flags.randomall |
| 209 | && (flags.initrole == ROLE_NONE || flags.initrace == ROLE_NONE |
| 210 | || flags.initgend == ROLE_NONE || flags.initalign == ROLE_NONE)) { |
| 211 | /* pick4u = yn_function("Shall I pick a character for you? |
| 212 | * [ynq]",ynqchars,'n');*/ |
| 213 | pick4u = yn_function(build_plselection_prompt( |
| 214 | pbuf, QBUFSZ, flags.initrole, flags.initrace, |
| 215 | flags.initgend, flags.initalign), |
| 216 | ynqchars, 'n'); |
| 217 | if (pick4u == 'q') { |
| 218 | give_up: /* Just quit */ |
| 219 | if (selected) |
| 220 | free((genericptr_t) selected); |
| 221 | bail((char *) 0); |
| 222 | /*NOTREACHED*/ |
| 223 | return; |
| 224 | } |
| 225 | } |
| 226 | |
| 227 | /* Select a role, if necessary */ |
| 228 | if (flags.initrole < 0) { |
| 229 | /* Process the choice */ |
| 230 | if (pick4u == 'y' || flags.initrole == ROLE_RANDOM |
| 231 | || flags.randomall) { |
| 232 | /* Pick a random role */ |
| 233 | flags.initrole = pick_role(flags.initrace, flags.initgend, |
| 234 | flags.initalign, PICK_RANDOM); |
| 235 | if (flags.initrole < 0) { |
| 236 | mar_add_message("Incompatible role!"); |
| 237 | mar_display_nhwindow(WIN_MESSAGE); |
| 238 | flags.initrole = randrole(FALSE); |
| 239 | } |
| 240 | } else { |
| 241 | /* Prompt for a role */ |
| 242 | win = create_nhwindow(NHW_MENU); |
| 243 | start_menu(win, MENU_BEHAVE_STANDARD); |
| 244 | any.a_void = 0; /* zero out all bits */ |
| 245 | for (i = 0; roles[i].name.m; i++) { |
| 246 | if (ok_role(i, flags.initrace, flags.initgend, |
| 247 | flags.initalign)) { |
| 248 | any.a_int = i + 1; /* must be non-zero */ |
| 249 | currch = lowc(roles[i].name.m[0]); |
| 250 | if (currch == lastch) |
| 251 | currch = highc(currch); |
| 252 | add_menu(win, roles[i].mnum, &any, currch, 0, ATR_NONE, |
nothing calls this directly
no test coverage detected