'O' vs bouldersym
The 'O' handling for bouldersym was updating the display value for boulder even if the value had been rejected, and if it still had the default of '\0', the map would end up with <NUL> characters. (When examined via '//' or ';', those matched dummy monster class #0 and led to the impossible "Alphabet soup: 'an("")'" that was suppressed yesterday.) Attempting to set bouldersym to ^@ or \0 would also be rejected as duplicating a monster symbol. That is now accepted and used to reset the boulder symbol to default. However, other control characters are also accepted--not due to this patch, they already are, and from a config file in addition to via 'O'--so bouldersym can still disrupt the map. But that's no different from putting control characters into a symbol set or setting them from config file via S_foo:^C.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 drawing.c $NHDT-Date: 1463706747 2016/05/20 01:12:27 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.51 $ */
|
||||
/* NetHack 3.6 drawing.c $NHDT-Date: 1546212616 2018/12/30 23:30:16 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.58 $ */
|
||||
/* Copyright (c) NetHack Development Team 1992. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -357,9 +357,13 @@ init_symbols()
|
||||
void
|
||||
update_bouldersym()
|
||||
{
|
||||
showsyms[SYM_BOULDER + SYM_OFF_X] = iflags.bouldersym;
|
||||
l_syms[SYM_BOULDER + SYM_OFF_X] = iflags.bouldersym;
|
||||
r_syms[SYM_BOULDER + SYM_OFF_X] = iflags.bouldersym;
|
||||
nhsym boulder = (nhsym) iflags.bouldersym;
|
||||
|
||||
if (!boulder)
|
||||
boulder = def_oc_syms[ROCK_CLASS].sym; /* (nhsym) ROCK_SYM */
|
||||
showsyms[SYM_BOULDER + SYM_OFF_X] = boulder;
|
||||
l_syms[SYM_BOULDER + SYM_OFF_X] = boulder;
|
||||
r_syms[SYM_BOULDER + SYM_OFF_X] = boulder;
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 options.c $NHDT-Date: 1546144857 2018/12/30 04:40:57 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.349 $ */
|
||||
/* NetHack 3.6 options.c $NHDT-Date: 1546212618 2018/12/30 23:30:18 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.350 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Michael Allison, 2008. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -2724,27 +2724,31 @@ boolean tinitial, tfrom_file;
|
||||
if (!(opts = string_for_opt(opts, FALSE)))
|
||||
return FALSE;
|
||||
escapes(opts, opts);
|
||||
/* note: dummy monclass #0 has symbol value '\0'; we allow that--
|
||||
attempting to set bouldersym to '^@'/'\0' will reset to default */
|
||||
if (def_char_to_monclass(opts[0]) != MAXMCLASSES)
|
||||
clash = 1;
|
||||
else if (opts[0] >= '1' && opts[0] <= '5')
|
||||
clash = opts[0] ? 1 : 0;
|
||||
else if (opts[0] >= '1' && opts[0] < WARNCOUNT + '0')
|
||||
clash = 2;
|
||||
if (clash) {
|
||||
/* symbol chosen matches a used monster or warning
|
||||
symbol which is not good - reject it*/
|
||||
symbol which is not good - reject it */
|
||||
config_error_add(
|
||||
"Badoption - boulder symbol '%c' conflicts with a %s symbol.",
|
||||
opts[0], (clash == 1) ? "monster" : "warning");
|
||||
"Badoption - boulder symbol '%s' would conflict with a %s symbol",
|
||||
visctrl(opts[0]),
|
||||
(clash == 1) ? "monster" : "warning");
|
||||
} else {
|
||||
/*
|
||||
* Override the default boulder symbol.
|
||||
*/
|
||||
iflags.bouldersym = (uchar) opts[0];
|
||||
}
|
||||
/* for 'initial', update_bouldersym() is done in initoptions_finish(),
|
||||
after all symset options have been processed */
|
||||
if (!initial) {
|
||||
update_bouldersym();
|
||||
need_redraw = TRUE;
|
||||
/* for 'initial', update_bouldersym() is done in
|
||||
initoptions_finish(), after all symset options
|
||||
have been processed */
|
||||
if (!initial) {
|
||||
update_bouldersym();
|
||||
need_redraw = TRUE;
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
#else
|
||||
|
||||
Reference in New Issue
Block a user