choosing whether to run the tutorial

Revise the menu that asks whether to run the tutorial so that it will
accept ESC for "no".

Also, in its hint about how to suppress the menu, change vague "the
config file" to the actual configuration file name.  (This might need
a new 'sysconf' directive to control what's shown on servers where
the player doesn't have access to the file system, but the vague
description wasn't adequate for single player systems.)
This commit is contained in:
PatR
2023-05-25 15:43:37 -07:00
parent cf8a49cae6
commit 202afc3b55
+21 -15
View File
@@ -368,14 +368,9 @@ extern int curses_read_attrs(const char *attrs);
extern char *curses_fmt_attrs(char *); extern char *curses_fmt_attrs(char *);
#endif #endif
/* ask user if they want a tutorial, except if tutorial boolean option has been /* ask user if they want a tutorial, except if tutorial boolean option has
set in config - either on or off - in which case just obey that setting been set in config - either on or off - in which case just obey that
without asking. */ setting without asking */
#ifdef SAFERHANGUP
#define DONE_HUP gp.program_state.done_hup
#else
#define DONE_HUP 0
#endif
boolean boolean
ask_do_tutorial(void) ask_do_tutorial(void)
{ {
@@ -385,8 +380,16 @@ ask_do_tutorial(void)
winid win; winid win;
menu_item *sel; menu_item *sel;
anything any; anything any;
int n; char buf[BUFSZ];
const char *rc;
boolean norc;
int n, pass = 0;
rc = nh_basename(configfile, TRUE);
norc = !strcmp(configfile, "/dev/null");
Snprintf(buf, sizeof buf,
"Put \"OPTIONS=!tutorial\" in %s to skip this query.",
(rc && *rc && !norc) ? rc : "your configuration file");
do { do {
win = create_nhwindow(NHW_MENU); win = create_nhwindow(NHW_MENU);
start_menu(win, MENU_BEHAVE_STANDARD); start_menu(win, MENU_BEHAVE_STANDARD);
@@ -396,29 +399,32 @@ ask_do_tutorial(void)
ATR_NONE, 0, "Yes, do a tutorial", MENU_ITEMFLAGS_NONE); ATR_NONE, 0, "Yes, do a tutorial", MENU_ITEMFLAGS_NONE);
any.a_char = 'n'; any.a_char = 'n';
add_menu(win, &nul_glyphinfo, &any, any.a_char, 0, add_menu(win, &nul_glyphinfo, &any, any.a_char, 0,
ATR_NONE, 0, "No", MENU_ITEMFLAGS_NONE); ATR_NONE, 0, "No, just start play", MENU_ITEMFLAGS_NONE);
any = cg.zeroany; any = cg.zeroany;
add_menu(win, &nul_glyphinfo, &any, 0, 0, add_menu(win, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, 0, "", MENU_ITEMFLAGS_NONE); ATR_NONE, 0, "", MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, 0, 0, add_menu(win, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, 0, "", MENU_ITEMFLAGS_NONE); ATR_NONE, 0, buf, MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, 0, 0, if (pass++) /* we'll get here after <space> or <return> */
ATR_NONE, 0, "Put \"OPTIONS=notutorial\" in the config file to skip this query.", MENU_ITEMFLAGS_NONE); add_menu(win, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, 0, "(Please choose 'y' or 'n'.)",
MENU_ITEMFLAGS_NONE);
end_menu(win, "Do you want a tutorial?"); end_menu(win, "Do you want a tutorial?");
n = select_menu(win, PICK_ONE, &sel); n = select_menu(win, PICK_ONE, &sel);
destroy_nhwindow(win); destroy_nhwindow(win);
} while (n <= 0 && !DONE_HUP); } while (!n);
if (n > 0) { if (n > 0) {
dotut = (sel[0].item.a_char == 'y'); dotut = (sel[0].item.a_char == 'y');
free((genericptr_t) sel); free((genericptr_t) sel);
} else { /* ESC */
dotut = FALSE;
} }
} }
return dotut; return dotut;
} }
#undef DONE_HUP
/* /*
********************************** **********************************