From 9bbb2e17cf4d7e1b82193aa4db09342be964846f Mon Sep 17 00:00:00 2001 From: nhmall Date: Mon, 30 Jan 2023 12:07:03 -0500 Subject: [PATCH] add a master off/on switch for sounds sounds can be set in the config file or on the fly with the Options menu. This also adds a mechanism for specifying a terminology preference for a boolean option in the options menu. The choices are: Term_False, Term_Off, Term_Disabled Term_False, the default, will use the terms "false" and "true" in the Options menu. Term_Off will use the terms "off" and "on" in the Options menu. Term_Disabled will use the terms "disabled" and "enabled" in the Options menu. I didn't review any of the existing options to see if one of the new alternative terms might be a better fit. They were all left at the default. --- doc/Guidebook.mn | 4 +- doc/Guidebook.tex | 5 +- include/flag.h | 1 + include/optlist.h | 242 ++++++++++++++++++++++++--------------------- include/sndprocs.h | 10 +- src/options.c | 24 ++++- 6 files changed, 164 insertions(+), 122 deletions(-) diff --git a/doc/Guidebook.mn b/doc/Guidebook.mn index 37517cb5b..a3bbea0bd 100644 --- a/doc/Guidebook.mn +++ b/doc/Guidebook.mn @@ -37,7 +37,7 @@ .ds f0 "\*(vr .ds f1 .\"DO NOT REMOVE NH_DATESUB .ds f2 "DATE(%B %-d, %Y) -.ds f2 "December 28, 2022 +.ds f2 "January 30, 2023 . .\" A note on some special characters: .\" \(lq = left double quote @@ -4483,6 +4483,8 @@ order by count, low to high; ties broken by internal index. .PE Can be interactively set via the \(oq\f(CRm O\fP\(cq command or via using the \(oq\f(CRm\fP\(cq prefix before the #vanquished command. +.lp "sounds " +Allow sounds to be emitted from an integrated sound library (default on). .lp "sparkle " Display a sparkly effect when a monster (including yourself) is hit by an attack to which it is resistant (default on). diff --git a/doc/Guidebook.tex b/doc/Guidebook.tex index b39f1ca9e..c13e93ea4 100644 --- a/doc/Guidebook.tex +++ b/doc/Guidebook.tex @@ -46,7 +46,7 @@ \author{Original version - Eric S. Raymond\\ (Edited and expanded for 3.7 by Mike Stephenson and others)} %DO NOT REMOVE NH_DATESUB \date{DATE(%B %-d, %Y)} -\date{December 28, 2022} +\date{January 30, 2023} \maketitle @@ -4903,6 +4903,9 @@ order by count, low to high; ties broken by internal index. Can be interactively set via the `{\tt m O}' command or via using the `{\tt m}' prefix before the \#vanquished command. %.lp +\item[\ib{sounds}] +Allow sounds to be emitted from an integrated sound library (default on). +%.lp \item[\ib{sparkle}] Display a sparkly effect when a monster (including yourself) is hit by an attack to which it is resistant (default on). Persistent. diff --git a/include/flag.h b/include/flag.h index cba15ec07..7edec9119 100644 --- a/include/flag.h +++ b/include/flag.h @@ -265,6 +265,7 @@ struct instance_flags { boolean perm_invent; /* keep full inventories up until dismissed */ boolean renameallowed; /* can change hero name during role selection */ boolean renameinprogress; /* we are changing hero name */ + boolean sounds; /* master on/off switch for using soundlib */ boolean status_updates; /* allow updates to bottom status lines; * disable to avoid excessive noise when using * a screen reader (use ^X to review status) */ diff --git a/include/optlist.h b/include/optlist.h index 11cf4a11a..b71417d8c 100644 --- a/include/optlist.h +++ b/include/optlist.h @@ -20,6 +20,9 @@ enum Off_On { Off, On }; enum OptSection { OptS_General, OptS_Behavior, OptS_Map, OptS_Status, OptS_Advanced }; +enum menu_terminology_preference { + Term_False, Term_Off, Term_Disabled, num_terms +}; struct allopt_t { const char *name; @@ -33,6 +36,7 @@ struct allopt_t { enum Y_N valok; enum Y_N dupeok; enum Y_N pfx; + enum menu_terminology_preference termpref; boolean opt_in_out, *addr; int (*optfn)(int, int, boolean, char *, char *); const char *alias; @@ -50,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) /*empty*/ +#define NHOPTB(a, sec, b, c, s, i, n, v, d, al, bp, termp) /*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) \ @@ -59,23 +63,23 @@ 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) 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, +#define NHOPTB(a, sec, b, c, s, i, n, v, d, al, bp, termp) 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) \ - { #a, OptS_##sec, 0, b, opt_##a, s, BoolOpt, n, v, d, No, c, \ +#define NHOPTB(a, sec, b, c, s, i, n, v, d, al, bp, termp) \ + { #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 }, #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, c, \ + { #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 }, #define NHOPTP(a, sec, b, c, s, n, v, d, h, al, z) \ - { #a, OptS_##sec, 0, b, pfx_##a, s, CompOpt, n, v, d, Yes, c, \ + { #a, OptS_##sec, 0, b, pfx_##a, s, CompOpt, n, v, d, Yes, 0, c, \ (boolean *) 0, &pfxfn_##a, al, z, #a, Off, h, 0 }, #define NHOPTO(m, sec, a, b, c, s, n, v, d, al, z) \ - { m, OptS_##sec, 0, b, opt_##a, s, OthrOpt, n, v, d, No, c, \ + { m, OptS_##sec, 0, b, opt_##a, s, OthrOpt, n, v, d, No, 0, c, \ (boolean *) 0, &optfn_##a, al, z, (const char *) 0, On, On, 0 }, /* this is not reliable because TILES_IN_GLYPHMAP might be defined @@ -89,7 +93,7 @@ static int optfn_##a(int, int, boolean, char *, char *); #endif #endif -/* B:nm, ln, opt_*, setwhere?, on?, negat?, val?, dup?, hndlr? Alias, bool_p */ +/* B:nm, ln, opt_*, setwhere?, on?, negat?, val?, dup?, hndlr? Alias, bool_p, term */ /* C:nm, ln, opt_*, setwhere?, negateok?, valok?, dupok?, hndlr? Alias, desc */ /* P:pfx, ln, opt_*, setwhere?, negateok?, valok?, dupok?, hndlr? Alias, desc*/ @@ -129,7 +133,7 @@ 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) + On, Yes, No, No, NoAlias, &flags.acoustics, Term_False) /* NHOPTC(align) -- moved to top */ NHOPTC(align_message, Advanced, 20, opt_in, set_gameview, Yes, Yes, No, Yes, NoAlias, "message window alignment") @@ -144,26 +148,27 @@ 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) + Off, Yes, No, No, NoAlias, &iflags.altmeta, Term_False) #else NHOPTB(altmeta, Advanced, 0, opt_out, set_in_config, - Off, Yes, No, No, NoAlias, (boolean *) 0) + Off, Yes, No, No, NoAlias, (boolean *) 0, Term_False) #endif NHOPTB(ascii_map, Advanced, 0, opt_in, set_in_game, - ascii_map_Def, Yes, No, No, NoAlias, &iflags.wc_ascii_map) + ascii_map_Def, Yes, No, No, NoAlias, &iflags.wc_ascii_map, + Term_False) NHOPTB(autodescribe, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &iflags.autodescribe) + On, Yes, No, No, NoAlias, &iflags.autodescribe, Term_False) NHOPTB(autodig, Behavior, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &flags.autodig) + Off, Yes, No, No, NoAlias, &flags.autodig, Term_False) NHOPTB(autoopen, Behavior, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.autoopen) + On, Yes, No, No, NoAlias, &flags.autoopen, Term_False) NHOPTB(autopickup, Behavior, 0, opt_out, set_in_game, - Off, Yes, No, No, NoAlias, &flags.pickup) + Off, Yes, No, No, NoAlias, &flags.pickup, Term_False) 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) + Off, Yes, No, No, NoAlias, &flags.autoquiver, Term_False) NHOPTC(autounlock, Behavior, 80, opt_out, set_in_game, Yes, Yes, No, Yes, NoAlias, "action to take when encountering locked door or chest") @@ -171,15 +176,15 @@ static int optfn_##a(int, int, boolean, char *, char *); 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) + Off, Yes, No, No, NoAlias, &iflags.BIOS, Term_False) #else NHOPTB(BIOS, Advanced, 0, opt_in, set_in_config, - Off, No, No, No, NoAlias, (boolean *) 0) + Off, No, No, No, NoAlias, (boolean *) 0, Term_False) #endif NHOPTB(blind, Advanced, 0, opt_in, set_in_config, - Off, Yes, No, No, "permablind", &u.uroleplay.blind) + Off, Yes, No, No, "permablind", &u.uroleplay.blind, Term_False) NHOPTB(bones, Advanced, 0, opt_out, set_in_config, - On, Yes, No, No, NoAlias, &flags.bones) + On, Yes, No, No, NoAlias, &flags.bones, Term_False) #ifdef BACKWARD_COMPAT NHOPTC(boulder, Advanced, 1, opt_in, set_in_game, No, Yes, No, No, NoAlias, @@ -190,35 +195,36 @@ 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) + On, Yes, No, No, NoAlias, &flags.ins_chkpt, Term_False) #else NHOPTB(checkpoint, Advanced, 0, opt_out, set_in_config, - Off, No, No, No, NoAlias, (boolean *) 0) + Off, No, No, No, NoAlias, (boolean *) 0, Term_False) #endif NHOPTB(cmdassist, Behavior, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &iflags.cmdassist) + On, Yes, No, No, NoAlias, &iflags.cmdassist, Term_False) NHOPTB(color, Map, 0, opt_in, set_in_game, - On, Yes, No, No, "colour", &iflags.wc_color) + On, Yes, No, No, "colour", &iflags.wc_color, Term_False) NHOPTB(confirm, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.confirm) + On, Yes, No, No, NoAlias, &flags.confirm, Term_False) #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) + On, Yes, No, No, NoAlias, &flags.dark_room, Term_False) #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) + Off, Yes, No, No, NoAlias, &iflags.debug_hunger, Term_False) NHOPTB(debug_mongen, Advanced, 0, opt_in, set_wiznofuz, - Off, Yes, No, No, NoAlias, &iflags.debug_mongen) + Off, Yes, No, No, NoAlias, &iflags.debug_mongen, Term_False) NHOPTB(debug_overwrite_stairs, Advanced, 0, opt_in, set_wiznofuz, - Off, Yes, No, No, NoAlias, &iflags.debug_overwrite_stairs) + Off, Yes, No, No, NoAlias, &iflags.debug_overwrite_stairs, + Term_False) NHOPTC(disclose, Advanced, sizeof flags.end_disclose * 2, opt_in, set_in_game, Yes, Yes, No, Yes, NoAlias, @@ -233,15 +239,16 @@ static int optfn_##a(int, int, boolean, char *, char *); No, Yes, No, No, NoAlias, "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) + Off, Yes, No, No, NoAlias, &iflags.wc_eight_bit_input, + Term_False) NHOPTB(extmenu, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &iflags.extmenu) + Off, Yes, No, No, NoAlias, &iflags.extmenu, Term_False) NHOPTB(female, Advanced, 0, opt_in, set_in_config, - Off, Yes, No, No, "male", &flags.female) + Off, Yes, No, No, "male", &flags.female, Term_False) NHOPTB(fireassist, Behavior, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &iflags.fireassist) + On, Yes, No, No, NoAlias, &iflags.fireassist, Term_False) NHOPTB(fixinv, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.invlet_constant) + On, Yes, No, No, NoAlias, &flags.invlet_constant, Term_False) 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, @@ -264,32 +271,32 @@ 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) + Off, Yes, No, No, NoAlias, &iflags.force_invmenu, Term_False) 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) + Off, Yes, No, No, NoAlias, &iflags.wc2_fullscreen, Term_False) /* 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) + Off, Yes, No, No, NoAlias, &flags.goldX, Term_False) NHOPTB(guicolor, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &iflags.wc2_guicolor) + On, Yes, No, No, NoAlias, &iflags.wc2_guicolor, Term_False) NHOPTB(help, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.help) + On, Yes, No, No, NoAlias, &flags.help, Term_False) NHOPTB(herecmd_menu, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &iflags.herecmd_menu) + Off, Yes, No, No, NoAlias, &iflags.herecmd_menu, Term_False) #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) + Off, Yes, No, No, NoAlias, &iflags.wc_hilite_pet, Term_False) NHOPTB(hilite_pile, Map, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &iflags.hilite_pile) + Off, Yes, No, No, NoAlias, &iflags.hilite_pile, Term_False) #ifdef STATUS_HILITES NHOPTC(hilite_status, Advanced, 13, opt_out, set_in_game, Yes, Yes, Yes, No, NoAlias, @@ -299,7 +306,7 @@ 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) + Off, Yes, No, No, NoAlias, &iflags.wc2_hitpointbar, Term_False) NHOPTC(horsename, Advanced, PL_PSIZ, opt_in, set_gameview, No, Yes, No, No, NoAlias, "name of your starting pet if it is a pony") @@ -310,36 +317,36 @@ 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) + Off, Yes, No, No, NoAlias, &flags.ignintr, Term_False) #else NHOPTB(ignintr, Advanced, 0, opt_in, set_in_config, - Off, Yes, No, No, NoAlias, (boolean *) 0) + Off, Yes, No, No, NoAlias, (boolean *) 0, Term_False) #endif NHOPTB(implicit_uncursed, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.implicit_uncursed) + On, Yes, No, No, NoAlias, &flags.implicit_uncursed, Term_False) #if 0 /* obsolete - pre-OSX Mac */ NHOPTB(large_font, Advanced, 0, opt_in, set_in_config, Off, Yes, No, No, NoAlias, &iflags.obsolete) #endif NHOPTB(legacy, Advanced, 0, opt_out, set_in_config, - On, Yes, No, No, NoAlias, &flags.legacy) + On, Yes, No, No, NoAlias, &flags.legacy, Term_False) NHOPTB(lit_corridor, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &flags.lit_corridor) + Off, Yes, No, No, NoAlias, &flags.lit_corridor, Term_False) NHOPTB(lootabc, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &flags.lootabc) + Off, Yes, No, No, NoAlias, &flags.lootabc, Term_False) #if defined(BACKWARD_COMPAT) && defined(MAC_GRAPHICS_ENV) NHOPTC(Macgraphics, Advanced, 70, opt_in, set_in_config, No, Yes, No, No, NoAlias, "load MACGraphics display symbols into symset") #endif NHOPTB(mail, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.biff) + On, Yes, No, No, NoAlias, &flags.biff, Term_False) 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) + Off, Yes, No, No, NoAlias, &flags.mention_decor, Term_False) NHOPTB(mention_walls, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &flags.mention_walls) + Off, Yes, No, No, NoAlias, &flags.mention_walls, Term_False) 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, @@ -359,13 +366,14 @@ static int optfn_##a(int, int, boolean, char *, char *); NHOPTC(menu_next_page, Advanced, 4, opt_in, set_in_config, 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) + Off, Yes, No, No, NoAlias, &iflags.menu_head_objsym, + Term_False) #ifdef TTY_GRAPHICS NHOPTB(menu_overlay, Advanced, 0, opt_in, set_in_game, - On, Yes, No, No, NoAlias, &iflags.menu_overlay) + On, Yes, No, No, NoAlias, &iflags.menu_overlay, Term_False) #else NHOPTB(menu_overlay, Advanced, 0, opt_in, set_in_config, - Off, No, No, No, NoAlias, (boolean *) 0) + Off, No, No, No, NoAlias, (boolean *) 0, Term_False) #endif NHOPTC(menu_previous_page, Advanced, 4, opt_in, set_in_config, No, Yes, No, No, NoAlias, "go to the previous menu page") @@ -381,9 +389,9 @@ 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) + Off, Yes, No, No, NoAlias, &iflags.menu_tab_sep, Term_False) NHOPTB(menucolors, Advanced, 0, opt_in, set_in_game, - Off, Yes, Yes, No, NoAlias, &iflags.use_menu_color) + Off, Yes, Yes, No, NoAlias, &iflags.use_menu_color, Term_False) NHOPTO("menu colors", Status, o_menu_colors, BUFSZ, opt_in, set_in_game, No, Yes, No, NoAlias, "edit menu colors") NHOPTC(menuinvertmode, Advanced, 5, opt_in, set_in_game, @@ -396,7 +404,7 @@ 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) + Off, Yes, No, No, NoAlias, &iflags.mon_polycontrol, Term_False) NHOPTC(monsters, Advanced, MAXMCLASSES, opt_in, set_in_config, No, Yes, No, No, NoAlias, "list of symbols to use for monsters") @@ -417,15 +425,15 @@ 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) + Off, Yes, No, No, NoAlias, &iflags.news, Term_False) #else NHOPTB(news, Advanced, 0, opt_in, set_in_config, - Off, No, No, No, NoAlias, (boolean *) 0) + Off, No, No, No, NoAlias, (boolean *) 0, Term_False) #endif NHOPTB(nudist, Advanced, 0, opt_in, set_in_config, - Off, Yes, No, No, NoAlias, &u.uroleplay.nudist) + Off, Yes, No, No, NoAlias, &u.uroleplay.nudist, Term_False) NHOPTB(null, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.null) + On, Yes, No, No, NoAlias, &flags.null, Term_False) NHOPTC(number_pad, General, 1, opt_in, set_in_game, No, Yes, No, Yes, NoAlias, "use the number pad for movement") @@ -451,7 +459,7 @@ 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) + Off, Yes, No, No, NoAlias, &iflags.perm_invent, Term_False) 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 */ @@ -461,7 +469,7 @@ 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) + On, Yes, No, No, NoAlias, &flags.pickup_thrown, Term_False) NHOPTC(pickup_types, Behavior, MAXOCLASSES, opt_in, set_in_game, No, Yes, No, Yes, NoAlias, "types of objects to pick up automatically") @@ -473,23 +481,23 @@ 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) + Off, Yes, No, No, NoAlias, &iflags.wc_popup_dialog, Term_False) NHOPTB(preload_tiles, Advanced, 0, opt_out, set_in_config, /* MSDOS only */ - On, Yes, No, No, NoAlias, &iflags.wc_preload_tiles) + On, Yes, No, No, NoAlias, &iflags.wc_preload_tiles, Term_False) NHOPTB(pushweapon, Behavior, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &flags.pushweapon) + Off, Yes, No, No, NoAlias, &flags.pushweapon, Term_False) NHOPTB(quick_farsight, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &flags.quick_farsight) + Off, Yes, No, No, NoAlias, &flags.quick_farsight, Term_False) /* NHOPTC(race) -- moved to top */ #ifdef MICRO NHOPTB(rawio, Advanced, 0, opt_in, set_in_config, - Off, Yes, No, No, NoAlias, &iflags.rawio) + Off, Yes, No, No, NoAlias, &iflags.rawio, Term_False) #else NHOPTB(rawio, Advanced, 0, opt_in, set_in_config, - Off, No, No, No, NoAlias, (boolean *) 0) + Off, No, No, No, NoAlias, (boolean *) 0, Term_False) #endif NHOPTB(rest_on_space, Advanced, 0, opt_in, set_in_game, Off, - Yes, No, No, NoAlias, &flags.rest_on_space) + Yes, No, No, NoAlias, &flags.rest_on_space, Term_False) NHOPTC(roguesymset, Advanced, 70, opt_in, set_in_game, No, Yes, No, Yes, NoAlias, "load a set of rogue display symbols from symbols file") @@ -498,11 +506,11 @@ 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) + On, Yes, No, No, NoAlias, &flags.safe_dog, Term_False) NHOPTB(safe_wait, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.safe_wait) + On, Yes, No, No, NoAlias, &flags.safe_wait, Term_False) NHOPTB(sanity_check, Advanced, 0, opt_in, set_wizonly, - Off, Yes, No, No, NoAlias, &iflags.sanity_check) + Off, Yes, No, No, NoAlias, &iflags.sanity_check, Term_False) NHOPTC(scores, Advanced, 32, opt_in, set_in_game, No, Yes, No, No, NoAlias, "the parts of the score list you wish to see") @@ -513,22 +521,23 @@ 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) + On, Yes, No, No, NoAlias, &iflags.wc2_selectsaved, Term_False) NHOPTB(showexp, Status, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &flags.showexp) + Off, Yes, No, No, NoAlias, &flags.showexp, Term_False) NHOPTB(showrace, Map, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &flags.showrace) + Off, Yes, No, No, NoAlias, &flags.showrace, Term_False) #ifdef SCORE_ON_BOTL NHOPTB(showscore, Status, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &flags.showscore) + Off, Yes, No, No, NoAlias, &flags.showscore, Term_False) #else NHOPTB(showscore, Status, 0, opt_in, set_in_config, - Off, Yes, No, No, NoAlias, (boolean *) 0) + Off, Yes, No, No, NoAlias, (boolean *) 0, Term_False) #endif NHOPTB(silent, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.silent) + On, Yes, No, No, NoAlias, &flags.silent, Term_False) NHOPTB(softkeyboard, Advanced, 0, opt_in, set_in_config, - Off, Yes, No, No, NoAlias, &iflags.wc2_softkeyboard) + Off, Yes, No, No, NoAlias, &iflags.wc2_softkeyboard, + Term_False) NHOPTC(sortdiscoveries, Advanced, 0, opt_in, set_in_game, Yes, Yes, No, Yes, NoAlias, "preferred order when displaying discovered objects") @@ -536,21 +545,28 @@ 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) + On, Yes, No, No, NoAlias, &flags.sortpack, Term_False) NHOPTC(sortvanquished, Advanced, 0, opt_in, set_in_game, Yes, Yes, No, Yes, NoAlias, "preferred order when displaying vanquished monsters") NHOPTC(soundlib, Advanced, WINTYPELEN, opt_in, set_gameview, No, Yes, No, No, NoAlias, "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) +#else + NHOPTB(sounds, Advanced, 0, opt_in, set_in_game, + Off, Yes, No, No, NoAlias, &iflags.sounds, Term_Off) +#endif NHOPTB(sparkle, Map, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.sparkle) + On, Yes, No, No, NoAlias, &flags.sparkle, Term_False) NHOPTB(splash_screen, Advanced, 0, opt_out, set_in_config, - On, Yes, No, No, NoAlias, &iflags.wc_splash_screen) + On, Yes, No, No, NoAlias, &iflags.wc_splash_screen, Term_False) NHOPTB(standout, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &flags.standout) + Off, Yes, No, No, NoAlias, &flags.standout, Term_False) NHOPTB(status_updates, Advanced, 0, opt_out, set_in_config, - On, Yes, No, No, NoAlias, &iflags.status_updates) + On, Yes, No, No, NoAlias, &iflags.status_updates, Term_False) NHOPTO("status condition fields", Status, o_status_cond, BUFSZ, opt_in, set_in_game, No, Yes, No, NoAlias, "edit status condition fields") @@ -588,43 +604,45 @@ static int optfn_##a(int, int, boolean, char *, char *); NHOPTC(tile_width, Advanced, 20, opt_in, set_gameview, 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) + tiled_map_Def, Yes, No, No, NoAlias, &iflags.wc_tiled_map, + Term_False) NHOPTB(time, Status, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &flags.time) + Off, Yes, No, No, NoAlias, &flags.time, Term_False) #ifdef TIMED_DELAY NHOPTB(timed_delay, Map, 0, opt_out, set_in_game, - Off, Yes, No, No, NoAlias, &flags.nap) + Off, Yes, No, No, NoAlias, &flags.nap, Term_False) #else NHOPTB(timed_delay, Map, 0, opt_in, set_in_config, - Off, No, No, No, NoAlias, (boolean *) 0) + Off, No, No, No, NoAlias, (boolean *) 0, Term_False) #endif NHOPTB(tombstone, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &flags.tombstone) + On, Yes, No, No, NoAlias, &flags.tombstone, Term_False) NHOPTB(toptenwin, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &iflags.toptenwin) + Off, Yes, No, No, NoAlias, &iflags.toptenwin, Term_False) 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) + On, Yes, No, No, NoAlias, &flags.travelcmd, Term_False) #ifdef DEBUG NHOPTB(travel_debug, Advanced, 0, opt_out, set_wizonly, - Off, Yes, No, No, NoAlias, &iflags.trav_debug) + Off, Yes, No, No, NoAlias, &iflags.trav_debug, Term_False) #else NHOPTB(travel_debug, Advanced, 0, opt_out, set_wizonly, - Off, No, No, No, NoAlias, (boolean *) 0) + Off, No, No, No, NoAlias, (boolean *) 0, Term_False) #endif NHOPTB(use_darkgray, Advanced, 0, opt_out, set_in_config, - On, Yes, No, No, NoAlias, &iflags.wc2_darkgray) + On, Yes, No, No, NoAlias, &iflags.wc2_darkgray, Term_False) NHOPTB(use_inverse, Advanced, 0, opt_out, set_in_game, - On, Yes, No, No, NoAlias, &iflags.wc_inverse) + On, Yes, No, No, NoAlias, &iflags.wc_inverse, Term_False) NHOPTB(use_truecolor, Advanced, 0, opt_in, set_in_config, - Off, Yes, No, No, "use_truecolour", &iflags.use_truecolor) + Off, Yes, No, No, "use_truecolour", + &iflags.use_truecolor, Term_False) 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) + On, Yes, No, No, NoAlias, &flags.verbose, Term_False) #endif #ifdef MSDOS NHOPTC(video, Advanced, 20, opt_in, set_in_config, @@ -646,17 +664,17 @@ static int optfn_##a(int, int, boolean, char *, char *); #endif #ifdef TTY_TILES_ESCCODES NHOPTB(vt_tiledata, Advanced, 0, opt_in, set_in_config, - Off, Yes, No, No, NoAlias, &iflags.vt_tiledata) + Off, Yes, No, No, NoAlias, &iflags.vt_tiledata, Term_False) #else NHOPTB(vt_tiledata, Advanced, 0, opt_in, set_in_config, - Off, Yes, No, No, NoAlias, (boolean *) 0) + Off, Yes, No, No, NoAlias, (boolean *) 0, Term_False) #endif #ifdef TTY_SOUND_ESCCODES NHOPTB(vt_sounddata, Advanced, 0, opt_in, set_in_config, - Off, Yes, No, No, NoAlias, &iflags.vt_sounddata) + Off, Yes, No, No, NoAlias, &iflags.vt_sounddata, Term_False) #else NHOPTB(vt_sounddata, Advanced, 0, opt_in, set_in_config, - Off, Yes, No, No, NoAlias, (boolean *) 0) + Off, Yes, No, No, NoAlias, (boolean *) 0, Term_False) #endif NHOPTC(warnings, Advanced, 10, opt_in, set_in_config, No, Yes, No, No, NoAlias, "display characters for warnings") @@ -667,9 +685,9 @@ 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) + Off, Yes, No, No, NoAlias, &iflags.getloc_usemenu, Term_False) NHOPTB(whatis_moveskip, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &iflags.getloc_moveskip) + Off, Yes, No, No, NoAlias, &iflags.getloc_moveskip, Term_False) NHOPTC(windowborders, Advanced, 9, opt_in, set_in_game, Yes, Yes, No, Yes, NoAlias, "0 (off), 1 (on), 2 (auto)") #ifdef WINCHAIN @@ -681,11 +699,11 @@ 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) + Off, Yes, No, No, NoAlias, &iflags.wizmgender, Term_False) NHOPTB(wizweight, Advanced, 0, opt_in, set_wizonly, - Off, Yes, No, No, NoAlias, &iflags.wizweight) + Off, Yes, No, No, NoAlias, &iflags.wizweight, Term_False) NHOPTB(wraptext, Advanced, 0, opt_in, set_in_game, - Off, Yes, No, No, NoAlias, &iflags.wc2_wraptext) + Off, Yes, No, No, NoAlias, &iflags.wc2_wraptext, Term_False) /* * Prefix-based Options diff --git a/include/sndprocs.h b/include/sndprocs.h index 625d3ee44..ce644f88a 100755 --- a/include/sndprocs.h +++ b/include/sndprocs.h @@ -357,14 +357,14 @@ SoundAchievement(0, sa2_xpleveldown, level); #define Play_usersound(filename, vol, idx) \ do { \ - if (!Deaf && soundprocs.sound_play_usersound \ + if (iflags.sounds && !Deaf && soundprocs.sound_play_usersound \ && ((soundprocs.sound_triggers & SOUND_TRIGGER_USERSOUNDS) != 0)) \ (*soundprocs.sound_play_usersound)((filename), (vol), (idx)); \ } while(0) #define Soundeffect(seid, vol) \ do { \ - if (!Deaf && soundprocs.sound_soundeffect \ + if (iflags.sounds && !Deaf && soundprocs.sound_soundeffect \ && ((soundprocs.sound_triggers & SOUND_TRIGGER_SOUNDEFFECTS) != 0)) \ (*soundprocs.sound_soundeffect)(emptystr, (seid), (vol)); \ } while(0) @@ -372,14 +372,14 @@ SoundAchievement(0, sa2_xpleveldown, level); /* Player's perspective, not the hero's; no Deaf suppression */ #define SoundeffectEvenIfDeaf(seid, vol) \ do { \ - if (!soundprocs.sound_soundeffect \ + if (iflags.sounds && !soundprocs.sound_soundeffect \ && ((soundprocs.sound_triggers & SOUND_TRIGGER_SOUNDEFFECTS) != 0)) \ (*soundprocs.sound_soundeffect)(emptystr, (seid), (vol)); \ } while(0) #define Hero_playnotes(instrument, str, vol) \ do { \ - if (!Deaf && soundprocs.sound_hero_playnotes \ + if (iflags.sounds && !Deaf && soundprocs.sound_hero_playnotes \ && ((soundprocs.sound_triggers & SOUND_TRIGGER_HEROMUSIC) != 0)) \ (*soundprocs.sound_hero_playnotes)((instrument), (str), (vol)); \ } while(0) @@ -389,7 +389,7 @@ SoundAchievement(0, sa2_xpleveldown, level); /* Player's perspective, not the hero's; no Deaf suppression */ #define SoundAchievement(arg1, arg2, avals) \ do { \ - if (soundprocs.sound_achievement \ + if (iflags.sounds && soundprocs.sound_achievement \ && ((soundprocs.sound_triggers & SOUND_TRIGGER_ACHIEVEMENTS) != 0)) \ (*soundprocs.sound_achievement)((arg1), (arg2), (avals)); \ } while(0) diff --git a/src/options.c b/src/options.c index 3080086a9..471a0443c 100644 --- a/src/options.c +++ b/src/options.c @@ -65,9 +65,9 @@ enum opt { static struct allopt_t allopt_init[] = { #include "optlist.h" {(const char *) 0, OptS_Advanced, 0, 0, 0, set_in_sysconf, BoolOpt, - No, No, No, No, 0, (boolean *) 0, + No, No, No, No, Term_False, 0, (boolean *) 0, (int (*)(int, int, boolean, char *, char *)) 0, - (char *) 0, (const char *) 0, (const char *) 0, 0, 0, 0} + (char *) 0, (const char *) 0, (const char *) 0, 0, 0, 0 } }; #undef NHOPT_PARSE @@ -362,6 +362,7 @@ static boolean wc2_supported(const char *); static void wc_set_font_name(int, char *); static int wc_set_window_colors(char *); static boolean illegal_menu_cmd_key(uchar); +static const char *term_for_boolean(int, boolean *); #ifdef CURSES_GRAPHICS extern int curses_read_attrs(const char *attrs); extern char *curses_fmt_attrs(char *); @@ -8565,6 +8566,23 @@ doset_simple(void) return ECMD_OK; } +static const char * +term_for_boolean(int idx, boolean *b) +{ + int i, f_t = (*b) ? 1: 0; + const char *boolean_term; + static const char *const booleanterms[2][num_terms] = { + { "false", "off", "disabled", }, + { "true", "on", "enabled", }, + }; + + boolean_term = booleanterms[f_t][0]; + i = (int) allopt[idx].termpref; + if (i > Term_False && i < num_terms) + boolean_term = booleanterms[f_t][i]; + return boolean_term; +} + /* the #optionsfull command */ int doset(void) /* changing options via menu by Per Liboriussen */ @@ -8666,7 +8684,7 @@ doset(void) /* changing options via menu by Per Liboriussen */ any.a_int = (pass == 0) ? 0 : i + 1 + indexoffset; indent = (pass == 0 && !iflags.menu_tab_sep) ? " " : ""; Sprintf(buf, fmtstr_doset, indent, - name, *bool_p ? "true" : "false"); + name, term_for_boolean(i, bool_p)); if (pass == 0) enhance_menu_text(buf, sizeof buf, pass, bool_p, &allopt[i]); -- 2.50.1