From 202afc3b55243e18278aee5fd2ff2e56e583333e Mon Sep 17 00:00:00 2001 From: PatR Date: Thu, 25 May 2023 15:43:37 -0700 Subject: [PATCH] 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.) --- src/options.c | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/src/options.c b/src/options.c index 4be94833d..a1280f2f6 100644 --- a/src/options.c +++ b/src/options.c @@ -368,14 +368,9 @@ extern int curses_read_attrs(const char *attrs); extern char *curses_fmt_attrs(char *); #endif -/* ask user if they want a tutorial, except if tutorial boolean option has been - set in config - either on or off - in which case just obey that setting - without asking. */ -#ifdef SAFERHANGUP -#define DONE_HUP gp.program_state.done_hup -#else -#define DONE_HUP 0 -#endif +/* ask user if they want a tutorial, except if tutorial boolean option has + been set in config - either on or off - in which case just obey that + setting without asking */ boolean ask_do_tutorial(void) { @@ -385,8 +380,16 @@ ask_do_tutorial(void) winid win; menu_item *sel; 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 { win = create_nhwindow(NHW_MENU); start_menu(win, MENU_BEHAVE_STANDARD); @@ -396,29 +399,32 @@ ask_do_tutorial(void) ATR_NONE, 0, "Yes, do a tutorial", MENU_ITEMFLAGS_NONE); any.a_char = 'n'; 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; add_menu(win, &nul_glyphinfo, &any, 0, 0, ATR_NONE, 0, "", MENU_ITEMFLAGS_NONE); add_menu(win, &nul_glyphinfo, &any, 0, 0, - ATR_NONE, 0, "", MENU_ITEMFLAGS_NONE); - add_menu(win, &nul_glyphinfo, &any, 0, 0, - ATR_NONE, 0, "Put \"OPTIONS=notutorial\" in the config file to skip this query.", MENU_ITEMFLAGS_NONE); + ATR_NONE, 0, buf, MENU_ITEMFLAGS_NONE); + if (pass++) /* we'll get here after or */ + 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?"); n = select_menu(win, PICK_ONE, &sel); destroy_nhwindow(win); - } while (n <= 0 && !DONE_HUP); + } while (!n); if (n > 0) { dotut = (sel[0].item.a_char == 'y'); free((genericptr_t) sel); + } else { /* ESC */ + dotut = FALSE; } } return dotut; } -#undef DONE_HUP /* **********************************