diff --git a/include/decl.h b/include/decl.h index 6d4bef737..9a9fcc099 100644 --- a/include/decl.h +++ b/include/decl.h @@ -752,6 +752,7 @@ struct instance_globals_o { boolean opt_need_redraw; /* for doset() */ boolean opt_need_glyph_reset; boolean opt_need_promptstyle; + boolean opt_reset_customizations; /* pickup.c */ int oldcap; /* last encumbrance */ diff --git a/include/extern.h b/include/extern.h index 2d99f5add..67620e010 100644 --- a/include/extern.h +++ b/include/extern.h @@ -1110,6 +1110,8 @@ extern void apply_customizations(enum graphics_sets which_set); extern void purge_custom_entries(enum graphics_sets which_set); extern void purge_all_custom_entries(void); extern void dump_glyphids(void); +extern void clear_all_glyphmap_colors(void); +extern void reset_customizations(void); /* ### hack.c ### */ @@ -3031,7 +3033,6 @@ extern const struct symparse *match_sym(char *) NONNULLARG1; extern void savedsym_free(void); extern void savedsym_strbuf(strbuf_t *) NONNULLARG1; extern boolean parsesymbols(char *, int) NONNULLARG1; -extern void clear_all_glyphmap_colors(void); /* ### sys.c ### */ diff --git a/include/flag.h b/include/flag.h index 04bf482e2..0bff96054 100644 --- a/include/flag.h +++ b/include/flag.h @@ -375,6 +375,7 @@ struct instance_flags { boolean fireassist; /* autowield launcher when using fire-command */ boolean wizweight; /* display weight of everything in wizard mode */ boolean wizmgender; /* test gender info from core in window port */ + boolean customcolors; /* support customcolors defined in glyphmap */ /* * Window capability support. */ diff --git a/include/optlist.h b/include/optlist.h index 51f5bbaa4..81d2b626a 100644 --- a/include/optlist.h +++ b/include/optlist.h @@ -250,6 +250,9 @@ static int optfn_##a(int, int, boolean, char *, char *); No, Yes, No, No, NoAlias, "load curses display symbols into symset") #endif + NHOPTB(customcolors, Map, 0, opt_out, set_in_game, + On, Yes, No, No, "customcolours", &iflags.customcolors, + Term_False, "use custom colors in map") NHOPTB(dark_room, Advanced, 0, opt_out, set_in_game, On, Yes, No, No, NoAlias, &flags.dark_room, Term_False, "show floor outside line of sight differently") diff --git a/src/decl.c b/src/decl.c index 0bef158d7..a90d140a7 100644 --- a/src/decl.c +++ b/src/decl.c @@ -655,6 +655,7 @@ static const struct instance_globals_o g_init_o = { FALSE, /* opt_need_redraw */ FALSE, /* opt_need_glyph_reset */ FALSE, /* opt_need_promptstyle */ + FALSE, /* opt_reset_customizations */ /* pickup.c */ 0, /* oldcap */ /* restore.c */ diff --git a/src/glyphs.c b/src/glyphs.c index 07917ae68..e8e741db0 100644 --- a/src/glyphs.c +++ b/src/glyphs.c @@ -474,10 +474,12 @@ apply_customizations(enum graphics_sets which_set) details->content.urep.u.utf8str); } #endif - if (sc->custtype == custom_nhcolor) { - gmap = &glyphmap[details->content.ccolor.glyphidx]; - (void) set_map_nhcolor(gmap, - details->content.ccolor.nhcolor); + if (iflags.customcolors) { + if (sc->custtype == custom_nhcolor) { + gmap = &glyphmap[details->content.ccolor.glyphidx]; + (void) set_map_nhcolor(gmap, + details->content.ccolor.nhcolor); + } } details = details->next; } @@ -1033,6 +1035,25 @@ parse_id(const char *id, struct find_struct *findwhat) return 0; } +/* extern glyph_map glyphmap[MAX_GLYPH]; */ + +void +clear_all_glyphmap_colors(void) +{ + int glyph; + + for (glyph = 0; glyph < MAX_GLYPH; ++glyph) { + if (glyphmap[glyph].customcolor) + glyphmap[glyph].customcolor = 0; + } +} + +void reset_customizations(void) +{ + clear_all_glyphmap_colors(); + apply_customizations(gc.currentgraphics); +} + /* not used yet */ #if 0 diff --git a/src/options.c b/src/options.c index 6b4ee4f60..68e63e529 100644 --- a/src/options.c +++ b/src/options.c @@ -5229,6 +5229,9 @@ optfn_boolean( go.opt_need_redraw = TRUE; go.opt_need_glyph_reset = TRUE; break; + case opt_customcolors: + go.opt_reset_customizations = TRUE; + break; case opt_menucolors: case opt_guicolor: update_inventory(); @@ -8389,6 +8392,7 @@ doset_simple_menu(void) go.opt_need_redraw = FALSE; go.opt_need_glyph_reset = FALSE; + go.opt_reset_customizations = FALSE; pick_cnt = select_menu(tmpwin, PICK_ONE, &pick_list); /* note: without the complication of a preselected entry, a PICK_ONE menu returning pick_cnt > 0 implies exactly 1 */ @@ -8479,7 +8483,11 @@ doset_simple(void) } if (go.opt_need_promptstyle) adjust_menu_promptstyle(WIN_INVEN, &iflags.menu_headings); -/* + if (go.opt_reset_customizations) { + reset_customizations(); + docrt_flags(opt_crt_flags); + } + /* * I don't think the status window requires updating between * simplemenu iterations. if (disp.botl || disp.botlx) { @@ -8729,6 +8737,10 @@ doset(void) /* changing options via menu by Per Liboriussen */ if (go.opt_need_glyph_reset) { reset_glyphmap(gm_optionchange); } + if (go.opt_reset_customizations) { + reset_customizations(); + docrt(); + } if (go.opt_need_redraw) { check_gold_symbol(); reglyph_darkroom(); diff --git a/src/symbols.c b/src/symbols.c index ec3e305a2..2e9a0650a 100644 --- a/src/symbols.c +++ b/src/symbols.c @@ -1094,19 +1094,6 @@ do_symset(boolean rogueflag) return TRUE; } -extern glyph_map glyphmap[MAX_GLYPH]; - -void -clear_all_glyphmap_colors(void) -{ - int glyph; - - for (glyph = 0; glyph < MAX_GLYPH; ++glyph) { - if (glyphmap[glyph].customcolor) - glyphmap[glyph].customcolor = 0; - } -} - RESTORE_WARNING_FORMAT_NONLITERAL /*symbols.c*/