MCPcopy Create free account
hub / github.com/NetHack/NetHack / Gem_player_selection

Function Gem_player_selection

outdated/win/gem/wingem.c:195–491  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

193}
194
195void
196Gem_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,

Callers

nothing calls this directly

Calls 15

rigid_role_checksFunction · 0.85
yn_functionFunction · 0.85
build_plselection_promptFunction · 0.85
pick_roleFunction · 0.85
mar_add_messageFunction · 0.85
mar_display_nhwindowFunction · 0.85
randroleFunction · 0.85
ok_roleFunction · 0.85
highcFunction · 0.85
add_menuFunction · 0.85
anFunction · 0.85
select_menuFunction · 0.85

Tested by

no test coverage detected