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

Function mswin_player_selection

win/win32/mswproc.c:271–330  ·  view source on GitHub ↗

Do a window-port specific player type selection. If player_selection() offers a Quit option, it is its responsibility to clean up and terminate the process. You need to fill in pl_character[0]. */

Source from the content-addressed store, hash-verified

269 the process. You need to fill in pl_character[0].
270*/
271void
272mswin_player_selection(void)
273{
274 logDebug("mswin_player_selection()\n");
275
276 if (iflags.wc_player_selection == VIA_DIALOG) {
277 /* pick player type randomly (use pre-selected
278 * role/race/gender/alignment) */
279 if (flags.randomall) {
280 if (flags.initrole < 0) {
281 flags.initrole = pick_role(flags.initrace, flags.initgend,
282 flags.initalign, PICK_RANDOM);
283 if (flags.initrole < 0) {
284 raw_print("Incompatible role!");
285 flags.initrole = randrole(FALSE);
286 }
287 }
288
289 if (flags.initrace < 0
290 || !validrace(flags.initrole, flags.initrace)) {
291 flags.initrace = pick_race(flags.initrole, flags.initgend,
292 flags.initalign, PICK_RANDOM);
293 if (flags.initrace < 0) {
294 raw_print("Incompatible race!");
295 flags.initrace = randrace(flags.initrole);
296 }
297 }
298
299 if (flags.initgend < 0
300 || !validgend(flags.initrole, flags.initrace,
301 flags.initgend)) {
302 flags.initgend = pick_gend(flags.initrole, flags.initrace,
303 flags.initalign, PICK_RANDOM);
304 if (flags.initgend < 0) {
305 raw_print("Incompatible gender!");
306 flags.initgend = randgend(flags.initrole, flags.initrace);
307 }
308 }
309
310 if (flags.initalign < 0
311 || !validalign(flags.initrole, flags.initrace,
312 flags.initalign)) {
313 flags.initalign = pick_align(flags.initrole, flags.initrace,
314 flags.initgend, PICK_RANDOM);
315 if (flags.initalign < 0) {
316 raw_print("Incompatible alignment!");
317 flags.initalign =
318 randalign(flags.initrole, flags.initrace);
319 }
320 }
321 } else {
322 /* select a role */
323 if (!mswin_player_selection_window()) {
324 bail(0);
325 }
326 }
327 } else { /* iflags.wc_player_selection == VIA_PROMPTS */
328 prompt_for_player_selection();

Callers

nothing calls this directly

Calls 15

pick_roleFunction · 0.85
raw_printFunction · 0.85
randroleFunction · 0.85
validraceFunction · 0.85
pick_raceFunction · 0.85
randraceFunction · 0.85
validgendFunction · 0.85
pick_gendFunction · 0.85
randgendFunction · 0.85
validalignFunction · 0.85
pick_alignFunction · 0.85
randalignFunction · 0.85

Tested by

no test coverage detected