diff --git a/include/decl.h b/include/decl.h index 6e741edee..9baadc442 100644 --- a/include/decl.h +++ b/include/decl.h @@ -865,6 +865,7 @@ struct instance_globals_s { * list of available sets */ boolean save_menucolors; /* copy of iflags.use_menu_colors */ struct menucoloring *save_colorings; /* copy of gm.menu_colorings */ + boolean simple_options_help; /* pickup.c */ boolean shop_filter; diff --git a/include/optlist.h b/include/optlist.h index d4b5953f5..8c380d14c 100644 --- a/include/optlist.h +++ b/include/optlist.h @@ -54,7 +54,7 @@ struct allopt_t { #define NoAlias ((const char *) 0) #if defined(NHOPT_PROTO) -#define NHOPTB(a, sec, b, c, s, i, n, v, d, al, bp, termp) /*empty*/ +#define NHOPTB(a, sec, b, c, s, i, n, v, d, al, bp, termp, desc) /*empty*/ #define NHOPTC(a, sec, b, c, s, n, v, d, h, al, z) \ static int optfn_##a(int, int, boolean, char *, char *); #define NHOPTP(a, sec, b, c, s, n, v, d, h, al, z) \ @@ -63,15 +63,15 @@ static int pfxfn_##a(int, int, boolean, char *, char *); static int optfn_##a(int, int, boolean, char *, char *); #elif defined(NHOPT_ENUM) -#define NHOPTB(a, sec, b, c, s, i, n, v, d, al, bp, termp) opt_##a, +#define NHOPTB(a, sec, b, c, s, i, n, v, d, al, bp, termp, desc) opt_##a, #define NHOPTC(a, sec, b, c, s, n, v, d, h, al, z) opt_##a, #define NHOPTP(a, sec, b, c, s, n, v, d, h, al, z) pfx_##a, #define NHOPTO(m, sec, a, b, c, s, n, v, d, al, z) opt_##a, #elif defined(NHOPT_PARSE) -#define NHOPTB(a, sec, b, c, s, i, n, v, d, al, bp, termp) \ +#define NHOPTB(a, sec, b, c, s, i, n, v, d, al, bp, termp, desc) \ { #a, OptS_##sec, 0, b, opt_##a, s, BoolOpt, n, v, d, No, termp, c, \ - bp, &optfn_boolean, al, (const char *) 0, (const char *) 0, i, 0, 0 }, + bp, &optfn_boolean, al, desc, (const char *) 0, i, 0, 0 }, #define NHOPTC(a, sec, b, c, s, n, v, d, h, al, z) \ { #a, OptS_##sec, 0, b, opt_##a, s, CompOpt, n, v, d, No, 0, c, \ (boolean *) 0, &optfn_##a, al, z, (const char *) 0, Off, h, 0 }, @@ -133,7 +133,8 @@ static int optfn_##a(int, int, boolean, char *, char *); /* end of special ordering; remainder of entries are in alphabetical order */ NHOPTB(acoustics, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.acoustics, Term_False) + On, Yes, No, No, NoAlias, &flags.acoustics, Term_False, + "can your character hear anything") /* NHOPTC(align) -- moved to top */ NHOPTC(align_message, Advanced, 20, opt_in, set_gameview, Yes, Yes, No, Yes, NoAlias, "message window alignment") @@ -148,45 +149,57 @@ static int optfn_##a(int, int, boolean, char *, char *); #endif #ifdef ALTMETA NHOPTB(altmeta, Advanced, 0, opt_out, set_in_game, - Off, Yes, No, No, NoAlias, &iflags.altmeta, Term_False) + Off, Yes, No, No, NoAlias, &iflags.altmeta, Term_False, + "treat \"ESC c\" as M-c (Meta+c, 8th bit set)") #else NHOPTB(altmeta, Advanced, 0, opt_out, set_in_config, - Off, Yes, No, No, NoAlias, (boolean *) 0, Term_False) + Off, Yes, No, No, NoAlias, (boolean *) 0, Term_False, + (char *)0) #endif NHOPTB(ascii_map, Advanced, 0, opt_in, set_in_game, ascii_map_Def, Yes, No, No, NoAlias, &iflags.wc_ascii_map, - Term_False) + Term_False, "show map as text") NHOPTB(autodescribe, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &iflags.autodescribe, Term_False) + On, Yes, No, No, NoAlias, &iflags.autodescribe, Term_False, + "describe terrain under cursor") NHOPTB(autodig, Behavior, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &flags.autodig, Term_False) + Off, Yes, No, No, NoAlias, &flags.autodig, Term_False, + "dig if moving and wielding a digging tool") NHOPTB(autoopen, Behavior, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.autoopen, Term_False) + On, Yes, No, No, NoAlias, &flags.autoopen, Term_False, + "walking into a door attempts to open it") NHOPTB(autopickup, Behavior, 0, opt_out, set_in_game, - Off, Yes, No, No, NoAlias, &flags.pickup, Term_False) + Off, Yes, No, No, NoAlias, &flags.pickup, Term_False, + "automatically pick up objects") NHOPTO("autopickup exceptions", Behavior, o_autopickup_exceptions, BUFSZ, opt_in, set_in_game, No, Yes, No, NoAlias, "edit autopickup exceptions") NHOPTB(autoquiver, Behavior, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &flags.autoquiver, Term_False) + Off, Yes, No, No, NoAlias, &flags.autoquiver, Term_False, + "fill empty quiver automatically when firing") NHOPTC(autounlock, Behavior, 80, opt_out, set_in_game, Yes, Yes, No, Yes, NoAlias, "action to take when encountering locked door or chest") NHOPTB(bgcolors, Behavior, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &iflags.bgcolors, Term_Off) + On, Yes, No, No, NoAlias, &iflags.bgcolors, Term_Off, + "use background color for some map hilighting") NHOPTO("bind keys", Advanced, o_bind_keys, BUFSZ, opt_in, set_in_game, No, Yes, No, NoAlias, "edit key binds") #if defined(MICRO) && !defined(AMIGA) NHOPTB(BIOS, Advanced, 0, opt_in, set_in_config, - Off, Yes, No, No, NoAlias, &iflags.BIOS, Term_False) + Off, Yes, No, No, NoAlias, &iflags.BIOS, Term_False, + "use IBM ROM BIOS calls") #else NHOPTB(BIOS, Advanced, 0, opt_in, set_in_config, - Off, No, No, No, NoAlias, (boolean *) 0, Term_False) + Off, No, No, No, NoAlias, (boolean *) 0, Term_False, + (char *)0) #endif NHOPTB(blind, Advanced, 0, opt_in, set_in_config, - Off, Yes, No, No, "permablind", &u.uroleplay.blind, Term_False) + Off, Yes, No, No, "permablind", &u.uroleplay.blind, Term_False, + "your character is permanently blind") NHOPTB(bones, Advanced, 0, opt_out, set_in_config, - On, Yes, No, No, NoAlias, &flags.bones, Term_False) + On, Yes, No, No, NoAlias, &flags.bones, Term_False, + "allow loading bones files") #ifdef BACKWARD_COMPAT NHOPTC(boulder, Advanced, 1, opt_in, set_in_game, No, Yes, No, No, NoAlias, @@ -197,38 +210,47 @@ static int optfn_##a(int, int, boolean, char *, char *); "name of your starting pet if it is a kitten") #ifdef INSURANCE NHOPTB(checkpoint, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.ins_chkpt, Term_False) + On, Yes, No, No, NoAlias, &flags.ins_chkpt, Term_False, + "save game state after each level change") #else NHOPTB(checkpoint, Advanced, 0, opt_out, set_in_config, - Off, No, No, No, NoAlias, (boolean *) 0, Term_False) + Off, No, No, No, NoAlias, (boolean *) 0, Term_False, + (char *)0) #endif NHOPTB(cmdassist, Behavior, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &iflags.cmdassist, Term_False) + On, Yes, No, No, NoAlias, &iflags.cmdassist, Term_False, + "give help for errors on direction input") NHOPTB(color, Map, 0, opt_in, set_in_game, - On, Yes, No, No, "colour", &iflags.wc_color, Term_False) + On, Yes, No, No, "colour", &iflags.wc_color, Term_False, + "use color in map") NHOPTB(confirm, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.confirm, Term_False) + On, Yes, No, No, NoAlias, &flags.confirm, Term_False, + "ask before hitting tame or peaceful monsters") #ifdef CURSES_GRAPHICS NHOPTC(cursesgraphics, Advanced, 70, opt_in, set_in_config, No, Yes, No, No, NoAlias, "load curses display symbols into symset") #endif NHOPTB(dark_room, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.dark_room, Term_False) + On, Yes, No, No, NoAlias, &flags.dark_room, Term_False, + "show floor outside line of sight differently") NHOPTB(deaf, Advanced, 0, opt_in, set_in_config, - Off, Yes, No, No, "permadeaf", &u.uroleplay.deaf, Term_False) + Off, Yes, No, No, "permadeaf", &u.uroleplay.deaf, Term_False, + "your character is permanently deaf") #ifdef BACKWARD_COMPAT NHOPTC(DECgraphics, Advanced, 70, opt_in, set_in_config, Yes, Yes, No, No, NoAlias, "load DECGraphics display symbols into symset") #endif NHOPTB(debug_hunger, Advanced, 0, opt_in, set_wiznofuz, - Off, Yes, No, No, NoAlias, &iflags.debug_hunger, Term_False) + Off, Yes, No, No, NoAlias, &iflags.debug_hunger, Term_False, + "no hunger") NHOPTB(debug_mongen, Advanced, 0, opt_in, set_wiznofuz, - Off, Yes, No, No, NoAlias, &iflags.debug_mongen, Term_False) + Off, Yes, No, No, NoAlias, &iflags.debug_mongen, Term_False, + "no random monster generation") NHOPTB(debug_overwrite_stairs, Advanced, 0, opt_in, set_wiznofuz, Off, Yes, No, No, NoAlias, &iflags.debug_overwrite_stairs, - Term_False) + Term_False, "level generation can overwrite stairs") NHOPTC(disclose, Advanced, sizeof flags.end_disclose * 2, opt_in, set_in_game, Yes, Yes, No, Yes, NoAlias, @@ -244,15 +266,19 @@ static int optfn_##a(int, int, boolean, char *, char *); "list of symbols to use in drawing special effects") NHOPTB(eight_bit_tty, Advanced, 0, opt_in, set_in_game, Off, Yes, No, No, NoAlias, &iflags.wc_eight_bit_input, - Term_False) + Term_False, "send 8-bit characters directly to terminal") NHOPTB(extmenu, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &iflags.extmenu, Term_False) + Off, Yes, No, No, NoAlias, &iflags.extmenu, Term_False, + "use menu for getting extended commands") NHOPTB(female, Advanced, 0, opt_in, set_in_config, - Off, Yes, No, No, "male", &flags.female, Term_False) + Off, Yes, No, No, "male", &flags.female, Term_False, + "deprecated; use gender:female") NHOPTB(fireassist, Behavior, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &iflags.fireassist, Term_False) + On, Yes, No, No, NoAlias, &iflags.fireassist, Term_False, + "fire-command tries to be helpful") NHOPTB(fixinv, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.invlet_constant, Term_False) + On, Yes, No, No, NoAlias, &flags.invlet_constant, Term_False, + "inventory items keep their letters") NHOPTC(font_map, Advanced, 40, opt_in, set_gameview, Yes, Yes, Yes, No, NoAlias, "font to use in the map window") NHOPTC(font_menu, Advanced, 40, opt_in, set_gameview, @@ -275,32 +301,40 @@ static int optfn_##a(int, int, boolean, char *, char *); NHOPTC(font_text, Advanced, 40, opt_in, set_gameview, Yes, Yes, Yes, No, NoAlias, "font to use in text windows") NHOPTB(force_invmenu, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &iflags.force_invmenu, Term_False) + Off, Yes, No, No, NoAlias, &iflags.force_invmenu, Term_False, + "commands asking for inventory item show a menu") NHOPTC(fruit, General, PL_FSIZ, opt_in, set_in_game, No, Yes, No, No, NoAlias, "name of a fruit you enjoy eating") NHOPTB(fullscreen, Advanced, 0, opt_in, set_in_config, - Off, Yes, No, No, NoAlias, &iflags.wc2_fullscreen, Term_False) + Off, Yes, No, No, NoAlias, &iflags.wc2_fullscreen, Term_False, + "toggle fullscreen") /* NHOPTC(gender) -- moved to top */ NHOPTC(glyph, Advanced, 40, opt_in, set_in_game, No, Yes, Yes, No, NoAlias, "set representation of a glyph to a unicode value and color") NHOPTB(goldX, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &flags.goldX, Term_False) + Off, Yes, No, No, NoAlias, &flags.goldX, Term_False, + "classify gold as unknown or uncursed") NHOPTB(guicolor, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &iflags.wc2_guicolor, Term_False) + On, Yes, No, No, NoAlias, &iflags.wc2_guicolor, Term_False, + "use color for UI") NHOPTB(help, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.help, Term_False) + On, Yes, No, No, NoAlias, &flags.help, Term_False, + "show all available info when using whatis-command") NHOPTB(herecmd_menu, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &iflags.herecmd_menu, Term_False) + Off, Yes, No, No, NoAlias, &iflags.herecmd_menu, Term_False, + "show commands available in this location") #if defined(MAC) NHOPTC(hicolor, Advanced, 15, opt_in, set_in_config, No, Yes, No, No, NoAlias, "same as palette, only order is reversed") #endif NHOPTB(hilite_pet, Map, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &iflags.wc_hilite_pet, Term_False) + Off, Yes, No, No, NoAlias, &iflags.wc_hilite_pet, Term_False, + "use highlight for pets") NHOPTB(hilite_pile, Map, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &iflags.hilite_pile, Term_False) + Off, Yes, No, No, NoAlias, &iflags.hilite_pile, Term_False, + "highlight piles of items") #ifdef STATUS_HILITES NHOPTC(hilite_status, Advanced, 13, opt_out, set_in_game, Yes, Yes, Yes, No, NoAlias, @@ -310,7 +344,8 @@ static int optfn_##a(int, int, boolean, char *, char *); Yes, Yes, Yes, No, NoAlias, "(not available)") #endif NHOPTB(hitpointbar, Status, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &iflags.wc2_hitpointbar, Term_False) + Off, Yes, No, No, NoAlias, &iflags.wc2_hitpointbar, Term_False, + "show colored bar for hit points") NHOPTC(horsename, Advanced, PL_PSIZ, opt_in, set_gameview, No, Yes, No, No, NoAlias, "name of your starting pet if it is a pony") @@ -321,31 +356,41 @@ static int optfn_##a(int, int, boolean, char *, char *); #endif #ifndef MAC NHOPTB(ignintr, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &flags.ignintr, Term_False) + Off, Yes, No, No, NoAlias, &flags.ignintr, Term_False, + "ignore interrupt signals") #else NHOPTB(ignintr, Advanced, 0, opt_in, set_in_config, - Off, Yes, No, No, NoAlias, (boolean *) 0, Term_False) + Off, Yes, No, No, NoAlias, (boolean *) 0, Term_False, + (char *)0) #endif NHOPTB(implicit_uncursed, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.implicit_uncursed, Term_False) + On, Yes, No, No, NoAlias, &flags.implicit_uncursed, Term_False, + "omit \"uncursed\" from inventory") #if 0 /* obsolete - pre-OSX Mac */ NHOPTB(large_font, Advanced, 0, opt_in, set_in_config, - Off, Yes, No, No, NoAlias, &iflags.obsolete) + Off, Yes, No, No, NoAlias, &iflags.obsolete, + (char *)0) #endif NHOPTB(legacy, Advanced, 0, opt_out, set_in_config, - On, Yes, No, No, NoAlias, &flags.legacy, Term_False) + On, Yes, No, No, NoAlias, &flags.legacy, Term_False, + "show introductory message") NHOPTB(lit_corridor, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &flags.lit_corridor, Term_False) + Off, Yes, No, No, NoAlias, &flags.lit_corridor, Term_False, + "show dark corridors as lit if in sight") NHOPTB(lootabc, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &flags.lootabc, Term_False) + Off, Yes, No, No, NoAlias, &flags.lootabc, Term_False, + "use a/b/c rather than o/i/c when looting") NHOPTB(mail, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.biff, Term_False) + On, Yes, No, No, NoAlias, &flags.biff, Term_False, + "enable the mail daemon") NHOPTC(map_mode, Advanced, 20, opt_in, set_gameview, Yes, Yes, No, No, NoAlias, "map display mode under Windows") NHOPTB(mention_decor, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &flags.mention_decor, Term_False) + Off, Yes, No, No, NoAlias, &flags.mention_decor, Term_False, + "give feedback when walking over interesting features") NHOPTB(mention_walls, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &flags.mention_walls, Term_False) + Off, Yes, No, No, NoAlias, &flags.mention_walls, Term_False, + "give feedback when walking into walls") NHOPTC(menu_deselect_all, Advanced, 4, opt_in, set_in_config, No, Yes, No, No, NoAlias, "deselect all items in a menu") NHOPTC(menu_deselect_page, Advanced, 4, opt_in, set_in_config, @@ -366,13 +411,15 @@ static int optfn_##a(int, int, boolean, char *, char *); No, Yes, No, No, NoAlias, "go to the next menu page") NHOPTB(menu_objsyms, Advanced, 0, opt_in, set_in_game, Off, Yes, No, No, NoAlias, &iflags.menu_head_objsym, - Term_False) + Term_False, "show object symbols in menus") #ifdef TTY_GRAPHICS NHOPTB(menu_overlay, Advanced, 0, opt_in, set_in_game, - On, Yes, No, No, NoAlias, &iflags.menu_overlay, Term_False) + On, Yes, No, No, NoAlias, &iflags.menu_overlay, Term_False, + "menus overlay and align to right") #else NHOPTB(menu_overlay, Advanced, 0, opt_in, set_in_config, - Off, No, No, No, NoAlias, (boolean *) 0, Term_False) + Off, No, No, No, NoAlias, (boolean *) 0, Term_False, + (char *)0) #endif NHOPTC(menu_previous_page, Advanced, 4, opt_in, set_in_config, No, Yes, No, No, NoAlias, "go to the previous menu page") @@ -388,11 +435,13 @@ static int optfn_##a(int, int, boolean, char *, char *); NHOPTC(menu_shift_right, Advanced, 4, opt_in, set_in_config, No, Yes, No, No, NoAlias, "pan current menu page right") NHOPTB(menu_tab_sep, Advanced, 0, opt_in, set_wizonly, - Off, Yes, No, No, NoAlias, &iflags.menu_tab_sep, Term_False) + Off, Yes, No, No, NoAlias, &iflags.menu_tab_sep, Term_False, + "menu formatting") NHOPTB(menucolors, Advanced, 0, opt_in, set_in_game, - Off, Yes, Yes, No, NoAlias, &iflags.use_menu_color, Term_False) + Off, Yes, Yes, No, NoAlias, &iflags.use_menu_color, Term_False, + "use colors in menus") NHOPTO("menu colors", Status, o_menu_colors, BUFSZ, opt_in, set_in_game, - No, Yes, No, NoAlias, "edit menu colors") + No, Yes, No, NoAlias, "change colors used in menus") NHOPTC(menuinvertmode, Advanced, 5, opt_in, set_in_game, No, Yes, No, No, NoAlias, "experimental behavior of menu inverts") @@ -403,7 +452,8 @@ static int optfn_##a(int, int, boolean, char *, char *); opt_in, set_in_game, No, Yes, No, NoAlias, "edit message types") NHOPTB(monpolycontrol, Advanced, 0, opt_in, set_wizonly, - Off, Yes, No, No, NoAlias, &iflags.mon_polycontrol, Term_False) + Off, Yes, No, No, NoAlias, &iflags.mon_polycontrol, Term_False, + "control monster polymorphs") NHOPTC(monsters, Advanced, MAXMCLASSES, opt_in, set_in_config, No, Yes, No, No, NoAlias, "list of symbols to use for monsters") @@ -424,15 +474,19 @@ static int optfn_##a(int, int, boolean, char *, char *); /* NHOPTC(name) -- moved to top */ #ifdef NEWS NHOPTB(news, Advanced, 0, opt_in, set_in_config, - Off, Yes, No, No, NoAlias, &iflags.news, Term_False) + Off, Yes, No, No, NoAlias, &iflags.news, Term_False, + "show any news at game start") #else NHOPTB(news, Advanced, 0, opt_in, set_in_config, - Off, No, No, No, NoAlias, (boolean *) 0, Term_False) + Off, No, No, No, NoAlias, (boolean *) 0, Term_False, + (char *)0) #endif NHOPTB(nudist, Advanced, 0, opt_in, set_in_config, - Off, Yes, No, No, NoAlias, &u.uroleplay.nudist, Term_False) + Off, Yes, No, No, NoAlias, &u.uroleplay.nudist, Term_False, + "start your character without armor") NHOPTB(null, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.null, Term_False) + On, Yes, No, No, NoAlias, &flags.null, Term_False, + "allow nulls to be sent to terminal") NHOPTC(number_pad, General, 1, opt_in, set_in_game, No, Yes, No, Yes, NoAlias, "use the number pad for movement") @@ -458,7 +512,8 @@ static int optfn_##a(int, int, boolean, char *, char *); Yes, Yes, Yes, Yes, "prayconfirm", "extra prompting in certain situations") NHOPTB(perm_invent, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &iflags.perm_invent, Term_False) + Off, Yes, No, No, NoAlias, &iflags.perm_invent, Term_False, + "show permanent inventory window") NHOPTC(petattr, Advanced, 88, opt_in, set_in_game, /* curses only */ No, Yes, No, No, NoAlias, "attributes for highlighting pets") /* pettype is ignored for some roles */ @@ -468,7 +523,8 @@ static int optfn_##a(int, int, boolean, char *, char *); No, Yes, No, Yes, NoAlias, "maximum burden picked up before prompt") NHOPTB(pickup_thrown, Behavior, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.pickup_thrown, Term_False) + On, Yes, No, No, NoAlias, &flags.pickup_thrown, Term_False, + "autopickup thrown items") NHOPTC(pickup_types, Behavior, MAXOCLASSES, opt_in, set_in_game, No, Yes, No, Yes, NoAlias, "types of objects to pick up automatically") @@ -480,23 +536,30 @@ static int optfn_##a(int, int, boolean, char *, char *); "choose character via dialog or prompts") /* NHOPTC(playmode) -- moved to top */ NHOPTB(popup_dialog, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &iflags.wc_popup_dialog, Term_False) + Off, Yes, No, No, NoAlias, &iflags.wc_popup_dialog, Term_False, + (char *)0) NHOPTB(preload_tiles, Advanced, 0, opt_out, set_in_config, /* MSDOS only */ - On, Yes, No, No, NoAlias, &iflags.wc_preload_tiles, Term_False) + On, Yes, No, No, NoAlias, &iflags.wc_preload_tiles, Term_False, + (char *)0) NHOPTB(pushweapon, Behavior, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &flags.pushweapon, Term_False) + Off, Yes, No, No, NoAlias, &flags.pushweapon, Term_False, + "previous weapon goes to secondary slot") NHOPTB(quick_farsight, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &flags.quick_farsight, Term_False) + Off, Yes, No, No, NoAlias, &flags.quick_farsight, Term_False, + "skip map browse when forced to looked at map") /* NHOPTC(race) -- moved to top */ #ifdef MICRO NHOPTB(rawio, Advanced, 0, opt_in, set_in_config, - Off, Yes, No, No, NoAlias, &iflags.rawio, Term_False) + Off, Yes, No, No, NoAlias, &iflags.rawio, Term_False, + "allow use to raw I/O") #else NHOPTB(rawio, Advanced, 0, opt_in, set_in_config, - Off, No, No, No, NoAlias, (boolean *) 0, Term_False) + Off, No, No, No, NoAlias, (boolean *) 0, Term_False, + (char *)0) #endif NHOPTB(rest_on_space, Advanced, 0, opt_in, set_in_game, Off, - Yes, No, No, NoAlias, &flags.rest_on_space, Term_False) + Yes, No, No, NoAlias, &flags.rest_on_space, Term_False, + "space bar is bound to the rest-command") NHOPTC(roguesymset, Advanced, 70, opt_in, set_in_game, No, Yes, No, Yes, NoAlias, "load a set of rogue display symbols from symbols file") @@ -505,11 +568,14 @@ static int optfn_##a(int, int, boolean, char *, char *); Yes, Yes, No, Yes, NoAlias, "display frequency when `running' or `travelling'") NHOPTB(safe_pet, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.safe_dog, Term_False) + On, Yes, No, No, NoAlias, &flags.safe_dog, Term_False, + "prevent you from hitting pets") NHOPTB(safe_wait, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.safe_wait, Term_False) + On, Yes, No, No, NoAlias, &flags.safe_wait, Term_False, + "prevent waiting next to hostiles") NHOPTB(sanity_check, Advanced, 0, opt_in, set_wizonly, - Off, Yes, No, No, NoAlias, &iflags.sanity_check, Term_False) + Off, Yes, No, No, NoAlias, &iflags.sanity_check, Term_False, + "perform data sanity checks") NHOPTC(scores, Advanced, 32, opt_in, set_in_game, No, Yes, No, No, NoAlias, "the parts of the score list you wish to see") @@ -520,23 +586,29 @@ static int optfn_##a(int, int, boolean, char *, char *); Yes, Yes, No, No, NoAlias, "scroll map when this far from the edge") NHOPTB(selectsaved, Advanced, 0, opt_out, set_in_config, - On, Yes, No, No, NoAlias, &iflags.wc2_selectsaved, Term_False) + On, Yes, No, No, NoAlias, &iflags.wc2_selectsaved, Term_False, + (char *)0) NHOPTB(showexp, Status, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &flags.showexp, Term_False) + Off, Yes, No, No, NoAlias, &flags.showexp, Term_False, + "show experience points in status line") NHOPTB(showrace, Map, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &flags.showrace, Term_False) + Off, Yes, No, No, NoAlias, &flags.showrace, Term_False, + "show your character by race rather than role") #ifdef SCORE_ON_BOTL NHOPTB(showscore, Status, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &flags.showscore, Term_False) + Off, Yes, No, No, NoAlias, &flags.showscore, Term_False, + "show current score in status line") #else NHOPTB(showscore, Status, 0, opt_in, set_in_config, - Off, Yes, No, No, NoAlias, (boolean *) 0, Term_False) + Off, Yes, No, No, NoAlias, (boolean *) 0, Term_False, + (char *)0) #endif NHOPTB(silent, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.silent, Term_False) + On, Yes, No, No, NoAlias, &flags.silent, Term_False, + "don't use terminal bell") NHOPTB(softkeyboard, Advanced, 0, opt_in, set_in_config, Off, Yes, No, No, NoAlias, &iflags.wc2_softkeyboard, - Term_False) + Term_False, (char *)0) NHOPTC(sortdiscoveries, Advanced, 0, opt_in, set_in_game, Yes, Yes, No, Yes, NoAlias, "preferred order when displaying discovered objects") @@ -544,7 +616,8 @@ static int optfn_##a(int, int, boolean, char *, char *); No, Yes, No, Yes, NoAlias, "sort object selection lists by description") NHOPTB(sortpack, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.sortpack, Term_False) + On, Yes, No, No, NoAlias, &flags.sortpack, Term_False, + "group inventory items by type") NHOPTC(sortvanquished, Advanced, 0, opt_in, set_in_game, Yes, Yes, No, Yes, NoAlias, "preferred order when displaying vanquished monsters") @@ -553,29 +626,35 @@ static int optfn_##a(int, int, boolean, char *, char *); "soundlib interface to use (if any)") #ifdef SND_LIB_INTEGRATED NHOPTB(sounds, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &iflags.sounds, Term_Off) + On, Yes, No, No, NoAlias, &iflags.sounds, Term_Off, + "use integrated sound effects") #else NHOPTB(sounds, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &iflags.sounds, Term_Off) + Off, Yes, No, No, NoAlias, &iflags.sounds, Term_Off, + "use sounds") #endif NHOPTB(sparkle, Map, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.sparkle, Term_False) + On, Yes, No, No, NoAlias, &flags.sparkle, Term_False, + "display sparkly effect when resisting magic") NHOPTB(splash_screen, Advanced, 0, opt_out, set_in_config, - On, Yes, No, No, NoAlias, &iflags.wc_splash_screen, Term_False) + On, Yes, No, No, NoAlias, &iflags.wc_splash_screen, Term_False, + (char *)0) NHOPTB(standout, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &flags.standout, Term_False) + Off, Yes, No, No, NoAlias, &flags.standout, Term_False, + "use standout for --more--") NHOPTB(status_updates, Advanced, 0, opt_out, set_in_config, - On, Yes, No, No, NoAlias, &iflags.status_updates, Term_False) + On, Yes, No, No, NoAlias, &iflags.status_updates, Term_False, + "allow the status lines to update") NHOPTO("status condition fields", Status, o_status_cond, BUFSZ, opt_in, set_in_game, - No, Yes, No, NoAlias, "edit status condition fields") + No, Yes, No, NoAlias, "change status condition highlighting") #ifdef STATUS_HILITES NHOPTC(statushilites, Advanced, 20, opt_in, set_in_game, Yes, Yes, Yes, No, NoAlias, "0=no status highlighting, N=show highlights for N turns") NHOPTO("status highlight rules", Status, o_status_hilites, BUFSZ, opt_in, set_in_game, - No, Yes, No, NoAlias, "edit status hilites") + No, Yes, No, NoAlias, "change status line highlighting") #else NHOPTC(statushilites, Advanced, 20, opt_in, set_in_config, Yes, Yes, Yes, No, NoAlias, "highlight control") @@ -604,48 +683,62 @@ static int optfn_##a(int, int, boolean, char *, char *); Yes, Yes, No, No, NoAlias, "width of tiles") NHOPTB(tiled_map, Advanced, 0, opt_in, set_in_game, tiled_map_Def, Yes, No, No, NoAlias, &iflags.wc_tiled_map, - Term_False) + Term_False, (char *)0) NHOPTB(time, Status, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &flags.time, Term_False) + Off, Yes, No, No, NoAlias, &flags.time, Term_False, + "display game turns in status line") #ifdef TIMED_DELAY NHOPTB(timed_delay, Map, 0, opt_out, set_in_game, - Off, Yes, No, No, NoAlias, &flags.nap, Term_False) + Off, Yes, No, No, NoAlias, &flags.nap, Term_False, + "use delay when pausing for display effects") #else NHOPTB(timed_delay, Map, 0, opt_in, set_in_config, - Off, No, No, No, NoAlias, (boolean *) 0, Term_False) + Off, No, No, No, NoAlias, (boolean *) 0, Term_False, + (char *)0) #endif NHOPTB(tips, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.tips, Term_False) + On, Yes, No, No, NoAlias, &flags.tips, Term_False, + "show some helpful tips during gameplay") NHOPTB(tombstone, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.tombstone, Term_False) + On, Yes, No, No, NoAlias, &flags.tombstone, Term_False, + "show tombstone when your character dies") NHOPTB(toptenwin, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &iflags.toptenwin, Term_False) + Off, Yes, No, No, NoAlias, &iflags.toptenwin, Term_False, + "show top scores in window") NHOPTC(traps, Advanced, MAXTCHARS + 1, opt_in, set_in_config, No, Yes, No, No, NoAlias, "list of symbols to use in drawing traps") NHOPTB(travel, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.travelcmd, Term_False) + On, Yes, No, No, NoAlias, &flags.travelcmd, Term_False, + "enable traveling via mouse click") #ifdef DEBUG NHOPTB(travel_debug, Advanced, 0, opt_out, set_wizonly, - Off, Yes, No, No, NoAlias, &iflags.trav_debug, Term_False) + Off, Yes, No, No, NoAlias, &iflags.trav_debug, Term_False, + (char *)0) #else NHOPTB(travel_debug, Advanced, 0, opt_out, set_wizonly, - Off, No, No, No, NoAlias, (boolean *) 0, Term_False) + Off, No, No, No, NoAlias, (boolean *) 0, Term_False, + (char *)0) #endif NHOPTB(tutorial, Advanced, 0, opt_out, set_in_config, - On, Yes, No, No, NoAlias, &flags.tutorial, Term_False) + On, Yes, No, No, NoAlias, &flags.tutorial, Term_False, + "ask if you want the tutorial") NHOPTB(use_darkgray, Advanced, 0, opt_out, set_in_config, - On, Yes, No, No, NoAlias, &iflags.wc2_darkgray, Term_False) + On, Yes, No, No, NoAlias, &iflags.wc2_darkgray, Term_False, + "use bold black color instead of blue") NHOPTB(use_inverse, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &iflags.wc_inverse, Term_False) + On, Yes, No, No, NoAlias, &iflags.wc_inverse, Term_False, + "display detected monsters in inverse") NHOPTB(use_truecolor, Advanced, 0, opt_in, set_in_config, Off, Yes, No, No, "use_truecolour", - &iflags.use_truecolor, Term_False) + &iflags.use_truecolor, Term_False, + (char *)0) NHOPTC(vary_msgcount, Advanced, 20, opt_in, set_gameview, No, Yes, No, No, NoAlias, "show more old messages at a time") #if defined(NO_VERBOSE_GRANULARITY) NHOPTB(verbose, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.verbose, Term_False) + On, Yes, No, No, NoAlias, &flags.verbose, Term_False, + (char *)0) #endif #ifdef MSDOS NHOPTC(video, Advanced, 20, opt_in, set_in_config, @@ -667,24 +760,30 @@ static int optfn_##a(int, int, boolean, char *, char *); #endif #ifdef SND_SPEECH NHOPTB(voices, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &iflags.voices, Term_Off) + Off, Yes, No, No, NoAlias, &iflags.voices, Term_Off, + (char *)0) #else NHOPTB(voices, Advanced, 0, opt_in, set_gameview, - Off, Yes, No, No, NoAlias, &iflags.voices, Term_Excluded) + Off, Yes, No, No, NoAlias, &iflags.voices, Term_Excluded, + (char *)0) #endif #ifdef TTY_TILES_ESCCODES NHOPTB(vt_tiledata, Advanced, 0, opt_in, set_in_config, - Off, Yes, No, No, NoAlias, &iflags.vt_tiledata, Term_False) + Off, Yes, No, No, NoAlias, &iflags.vt_tiledata, Term_False, + "output special escape codes") #else NHOPTB(vt_tiledata, Advanced, 0, opt_in, set_in_config, - Off, Yes, No, No, NoAlias, (boolean *) 0, Term_False) + Off, Yes, No, No, NoAlias, (boolean *) 0, Term_False, + (char *)0) #endif #ifdef TTY_SOUND_ESCCODES NHOPTB(vt_sounddata, Advanced, 0, opt_in, set_in_config, - Off, Yes, No, No, NoAlias, &iflags.vt_sounddata, Term_False) + Off, Yes, No, No, NoAlias, &iflags.vt_sounddata, Term_False, + "output sound data in special escape codes") #else NHOPTB(vt_sounddata, Advanced, 0, opt_in, set_in_config, - Off, Yes, No, No, NoAlias, (boolean *) 0, Term_False) + Off, Yes, No, No, NoAlias, (boolean *) 0, Term_False, + (char *)0) #endif NHOPTC(warnings, Advanced, 10, opt_in, set_in_config, No, Yes, No, No, NoAlias, "display characters for warnings") @@ -695,9 +794,11 @@ static int optfn_##a(int, int, boolean, char *, char *); Yes, Yes, No, Yes, NoAlias, "filter coordinate locations when targeting next or previous") NHOPTB(whatis_menu, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &iflags.getloc_usemenu, Term_False) + Off, Yes, No, No, NoAlias, &iflags.getloc_usemenu, Term_False, + "show menu when getting a map location") NHOPTB(whatis_moveskip, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &iflags.getloc_moveskip, Term_False) + Off, Yes, No, No, NoAlias, &iflags.getloc_moveskip, Term_False, + "skip same glyph when getting map location") NHOPTC(windowborders, Advanced, 9, opt_in, set_in_game, Yes, Yes, No, Yes, NoAlias, "0 (off), 1 (on), 2 (auto)") #ifdef WINCHAIN @@ -709,11 +810,14 @@ static int optfn_##a(int, int, boolean, char *, char *); "the foreground/background colors of windows") /* NHOPTC(windowtype) -- moved to top */ NHOPTB(wizmgender, Advanced, 0, opt_in, set_wizonly, - Off, Yes, No, No, NoAlias, &iflags.wizmgender, Term_False) + Off, Yes, No, No, NoAlias, &iflags.wizmgender, Term_False, + (char *)0) NHOPTB(wizweight, Advanced, 0, opt_in, set_wizonly, - Off, Yes, No, No, NoAlias, &iflags.wizweight, Term_False) + Off, Yes, No, No, NoAlias, &iflags.wizweight, Term_False, + (char *)0) NHOPTB(wraptext, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &iflags.wc2_wraptext, Term_False) + Off, Yes, No, No, NoAlias, &iflags.wc2_wraptext, Term_False, + (char *)0) /* * Prefix-based Options diff --git a/src/decl.c b/src/decl.c index 9caca237f..a73c7d604 100644 --- a/src/decl.c +++ b/src/decl.c @@ -736,6 +736,7 @@ const struct instance_globals_s g_init_s = { (struct symsetentry *) 0, /* symset_list */ FALSE, /* save_menucolors */ (struct menucoloring *) 0, /* save_colorings */ + FALSE, /* simple_options_help */ /* pickup.c */ FALSE, /* shop_filter */ /* pline.c */ diff --git a/src/options.c b/src/options.c index a59121ca6..08bfd70cf 100644 --- a/src/options.c +++ b/src/options.c @@ -8412,6 +8412,7 @@ doset_simple_menu(void) anything any; enum OptSection section; int i, k, pick_cnt, reslt; + boolean toggled_help = FALSE; /* we do this each time we're called instead of once in doset_simple() in case 'menu_tab_sep' ever gets included in the simple menu so @@ -8423,9 +8424,19 @@ doset_simple_menu(void) Strcpy(fmtstr_doset_simple, fmtstr_tab_doset_simple); fmtstr = fmtstr_doset_simple; + redo_opt_help: tmpwin = create_nhwindow(NHW_MENU); start_menu(tmpwin, MENU_BEHAVE_STANDARD); + any = cg.zeroany; + any.a_int = -2 + 1; + add_menu(tmpwin, &nul_glyphinfo, &any, '?', 0, ATR_NONE, 0, + gs.simple_options_help ? "hide help" : "show help", + MENU_ITEMFLAGS_NONE); + any = cg.zeroany; + add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE, + 0, "", MENU_ITEMFLAGS_NONE); + for (section = OptS_General; section < OptS_Advanced; section++) { any = cg.zeroany; if (section != OptS_General) @@ -8482,6 +8493,15 @@ doset_simple_menu(void) Strcat(buf, " (for autopickup)"); add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE, 0, buf, MENU_ITEMFLAGS_NONE); + if (gs.simple_options_help && allopt[i].descr) { + any = cg.zeroany; + Sprintf(buf, " %s", allopt[i].descr); + add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, + ATR_NONE, 0, buf, MENU_ITEMFLAGS_NONE); + any = cg.zeroany; + add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE, + 0, "", MENU_ITEMFLAGS_NONE); + } } } end_menu(tmpwin, "Options"); @@ -8495,7 +8515,10 @@ doset_simple_menu(void) k = pick_list[0].item.a_int - 1; abuf[0] = '\0'; - if (allopt[k].opttyp == BoolOpt) { + if (k == -2) { + gs.simple_options_help = !gs.simple_options_help; + toggled_help = TRUE; + } else if (allopt[k].opttyp == BoolOpt) { /* boolean option */ Sprintf(buf, "%s%s", *allopt[k].addr ? "!" : "", allopt[k].name); (void) parseoptions(buf, FALSE, FALSE); @@ -8521,7 +8544,7 @@ doset_simple_menu(void) 'picked 1' to caller which will loop for another choice */ } } - if (abuf[0] != '\033' + if (k >= 0 && abuf[0] != '\033' && (wc_supported(allopt[k].name) || wc2_supported(allopt[k].name))) preference_update(allopt[k].name); @@ -8532,6 +8555,11 @@ doset_simple_menu(void) will immediately call us back to put up another instance */ destroy_nhwindow(tmpwin); + if (toggled_help) { + toggled_help = FALSE; + goto redo_opt_help; + } + return pick_cnt; }