some symbol tweaks
A few symbol-related modifications: - fulfill a request from a blind player to allow them to specify a unique/recognizable character for all pets and/or the player in the config file for use when using a screen reader (S_player_override, S_pet_override). Requires sysconf setting ACCESSIBILITY to be set to have an effect, although they can still be specified in the config file. - Config file SYMBOLS entries were not working properly on the rogue level. Allow ROGUESYMBOLS as well as SYMBOLS to be specified in the config file independently. - When values are moved into showsyms[], the overriding SYMBOLS or ROGUESYMBOLS entry from the config file is used if there is one; if there is no overriding value for a particular symbol, the loaded symset value is used; if there is no symset entry loaded for the symbol then a default symbol is used.
This commit is contained in:
188
src/drawing.c
188
src/drawing.c
@@ -22,13 +22,14 @@ struct symsetentry symset[NUM_GRAPHICS];
|
||||
int currentgraphics = 0;
|
||||
|
||||
nhsym showsyms[SYM_MAX] = DUMMY; /* symbols to be displayed */
|
||||
nhsym l_syms[SYM_MAX] = DUMMY; /* loaded symbols */
|
||||
nhsym r_syms[SYM_MAX] = DUMMY; /* rogue symbols */
|
||||
|
||||
nhsym primary_syms[SYM_MAX] = DUMMY; /* primary symbols */
|
||||
nhsym rogue_syms[SYM_MAX] = DUMMY; /* rogue symbols */
|
||||
nhsym ov_primary_syms[SYM_MAX] = DUMMY; /* overides via config SYMBOL */
|
||||
nhsym ov_rogue_syms[SYM_MAX] = DUMMY; /* overides via config ROGUESYMBOL */
|
||||
nhsym warnsyms[WARNCOUNT] = DUMMY; /* the current warning display symbols */
|
||||
const char invisexplain[] = "remembered, unseen, creature",
|
||||
altinvisexplain[] = "unseen creature"; /* for clairvoyance */
|
||||
|
||||
|
||||
/* Default object class symbols. See objclass.h.
|
||||
* {symbol, name, explain}
|
||||
* name: used in object_detect().
|
||||
@@ -306,7 +307,7 @@ char ch;
|
||||
* init_symbols()
|
||||
* Sets the current display symbols, the
|
||||
* loadable symbols to the default NetHack
|
||||
* symbols, including the r_syms rogue level
|
||||
* symbols, including the rogue_syms rogue level
|
||||
* symbols. This would typically be done
|
||||
* immediately after execution begins. Any
|
||||
* previously loaded external symbol sets are
|
||||
@@ -322,8 +323,8 @@ char ch;
|
||||
*
|
||||
* If (arg != 0), which is the normal expected
|
||||
* usage, then showsyms are taken from the
|
||||
* adjustable display symbols found in l_syms.
|
||||
* l_syms may have been loaded from an external
|
||||
* adjustable display symbols found in primary_syms.
|
||||
* primary_syms may have been loaded from an external
|
||||
* symbol file by config file options or interactively
|
||||
* in the Options menu.
|
||||
*
|
||||
@@ -333,37 +334,33 @@ char ch;
|
||||
* out of other {rogue} level display modes.
|
||||
*
|
||||
* If arg is ROGUESET, this places the rogue level
|
||||
* symbols from r_syms into showsyms.
|
||||
* symbols from rogue_syms into showsyms.
|
||||
*
|
||||
* If arg is PRIMARY, this places the symbols
|
||||
* from l_monsyms into showsyms.
|
||||
*
|
||||
* update_l_symset()
|
||||
* Update a member of the loadable (l_*) symbol set.
|
||||
* update_primary_symset()
|
||||
* Update a member of the primary(primary_*) symbol set.
|
||||
*
|
||||
* update_r_symset()
|
||||
* Update a member of the rogue (r_*) symbol set.
|
||||
* update_rogue_symset()
|
||||
* Update a member of the rogue (rogue_*) symbol set.
|
||||
*
|
||||
* update_ov_primary_symset()
|
||||
* Update a member of the overrides for primary symbol set.
|
||||
*
|
||||
* update_ov_rogue_symset()
|
||||
* Update a member of the overrides for rogue symbol set.
|
||||
*
|
||||
*/
|
||||
|
||||
void
|
||||
init_symbols()
|
||||
{
|
||||
init_l_symbols();
|
||||
init_ov_primary_symbols();
|
||||
init_ov_rogue_symbols();
|
||||
init_primary_symbols();
|
||||
init_showsyms();
|
||||
init_r_symbols();
|
||||
}
|
||||
|
||||
void
|
||||
update_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;
|
||||
init_rogue_symbols();
|
||||
}
|
||||
|
||||
void
|
||||
@@ -379,44 +376,78 @@ init_showsyms()
|
||||
showsyms[i + SYM_OFF_M] = def_monsyms[i].sym;
|
||||
for (i = 0; i < WARNCOUNT; i++)
|
||||
showsyms[i + SYM_OFF_W] = def_warnsyms[i].sym;
|
||||
for (i = 0; i < MAXOTHER; i++) {
|
||||
if (i == SYM_BOULDER)
|
||||
showsyms[i + SYM_OFF_X] = iflags.bouldersym
|
||||
? iflags.bouldersym
|
||||
: def_oc_syms[ROCK_CLASS].sym;
|
||||
else if (i == SYM_INVISIBLE)
|
||||
showsyms[i + SYM_OFF_X] = DEF_INVISIBLE;
|
||||
}
|
||||
for (i = 0; i < MAXOTHER; i++)
|
||||
showsyms[i + SYM_OFF_X] = get_othersym(i, PRIMARY);
|
||||
}
|
||||
|
||||
/* initialize defaults for the loadable symset */
|
||||
/* initialize defaults for the overrides to the rogue symset */
|
||||
void
|
||||
init_l_symbols()
|
||||
init_ov_rogue_symbols()
|
||||
{
|
||||
register int i;
|
||||
|
||||
for (i = 0; i < SYM_MAX; i++)
|
||||
ov_rogue_syms[i] = (nhsym) 0;
|
||||
}
|
||||
/* initialize defaults for the overrides to the primary symset */
|
||||
void
|
||||
init_ov_primary_symbols()
|
||||
{
|
||||
register int i;
|
||||
|
||||
for (i = 0; i < SYM_MAX; i++)
|
||||
ov_primary_syms[i] = (nhsym) 0;
|
||||
}
|
||||
|
||||
nhsym
|
||||
get_othersym(idx, which_set)
|
||||
int idx, which_set;
|
||||
{
|
||||
nhsym sym = (nhsym) 0;
|
||||
int oidx = idx + SYM_OFF_X;
|
||||
|
||||
if (which_set == ROGUESET)
|
||||
sym = ov_rogue_syms[oidx] ? ov_rogue_syms[oidx]
|
||||
: rogue_syms[oidx];
|
||||
else
|
||||
sym = ov_primary_syms[oidx] ? ov_primary_syms[oidx]
|
||||
: primary_syms[oidx];
|
||||
if (!sym) {
|
||||
switch(idx) {
|
||||
case SYM_BOULDER:
|
||||
sym = def_oc_syms[ROCK_CLASS].sym;
|
||||
break;
|
||||
case SYM_INVISIBLE:
|
||||
sym = DEF_INVISIBLE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return sym;
|
||||
}
|
||||
|
||||
/* initialize defaults for the primary symset */
|
||||
void
|
||||
init_primary_symbols()
|
||||
{
|
||||
register int i;
|
||||
|
||||
for (i = 0; i < MAXPCHARS; i++)
|
||||
l_syms[i + SYM_OFF_P] = defsyms[i].sym;
|
||||
primary_syms[i + SYM_OFF_P] = defsyms[i].sym;
|
||||
for (i = 0; i < MAXOCLASSES; i++)
|
||||
l_syms[i + SYM_OFF_O] = def_oc_syms[i].sym;
|
||||
primary_syms[i + SYM_OFF_O] = def_oc_syms[i].sym;
|
||||
for (i = 0; i < MAXMCLASSES; i++)
|
||||
l_syms[i + SYM_OFF_M] = def_monsyms[i].sym;
|
||||
primary_syms[i + SYM_OFF_M] = def_monsyms[i].sym;
|
||||
for (i = 0; i < WARNCOUNT; i++)
|
||||
l_syms[i + SYM_OFF_W] = def_warnsyms[i].sym;
|
||||
for (i = 0; i < MAXOTHER; i++) {
|
||||
if (i == SYM_BOULDER)
|
||||
l_syms[i + SYM_OFF_X] = iflags.bouldersym
|
||||
? iflags.bouldersym
|
||||
: def_oc_syms[ROCK_CLASS].sym;
|
||||
else if (i == SYM_INVISIBLE)
|
||||
l_syms[i + SYM_OFF_X] = DEF_INVISIBLE;
|
||||
}
|
||||
primary_syms[i + SYM_OFF_W] = def_warnsyms[i].sym;
|
||||
for (i = 0; i < MAXOTHER; i++)
|
||||
primary_syms[i + SYM_OFF_X] = get_othersym(i, PRIMARY);
|
||||
|
||||
clear_symsetentry(PRIMARY, FALSE);
|
||||
}
|
||||
|
||||
/* initialize defaults for the rogue symset */
|
||||
void
|
||||
init_r_symbols()
|
||||
init_rogue_symbols()
|
||||
{
|
||||
register int i;
|
||||
|
||||
@@ -424,24 +455,18 @@ init_r_symbols()
|
||||
later by the roguesymbols option */
|
||||
|
||||
for (i = 0; i < MAXPCHARS; i++)
|
||||
r_syms[i + SYM_OFF_P] = defsyms[i].sym;
|
||||
r_syms[S_vodoor] = r_syms[S_hodoor] = r_syms[S_ndoor] = '+';
|
||||
r_syms[S_upstair] = r_syms[S_dnstair] = '%';
|
||||
rogue_syms[i + SYM_OFF_P] = defsyms[i].sym;
|
||||
rogue_syms[S_vodoor] = rogue_syms[S_hodoor] = rogue_syms[S_ndoor] = '+';
|
||||
rogue_syms[S_upstair] = rogue_syms[S_dnstair] = '%';
|
||||
|
||||
for (i = 0; i < MAXOCLASSES; i++)
|
||||
r_syms[i + SYM_OFF_O] = def_r_oc_syms[i];
|
||||
rogue_syms[i + SYM_OFF_O] = def_r_oc_syms[i];
|
||||
for (i = 0; i < MAXMCLASSES; i++)
|
||||
r_syms[i + SYM_OFF_M] = def_monsyms[i].sym;
|
||||
rogue_syms[i + SYM_OFF_M] = def_monsyms[i].sym;
|
||||
for (i = 0; i < WARNCOUNT; i++)
|
||||
r_syms[i + SYM_OFF_W] = def_warnsyms[i].sym;
|
||||
for (i = 0; i < MAXOTHER; i++) {
|
||||
if (i == SYM_BOULDER)
|
||||
r_syms[i + SYM_OFF_X] = iflags.bouldersym
|
||||
? iflags.bouldersym
|
||||
: def_oc_syms[ROCK_CLASS].sym;
|
||||
else if (i == SYM_INVISIBLE)
|
||||
r_syms[i + SYM_OFF_X] = DEF_INVISIBLE;
|
||||
}
|
||||
rogue_syms[i + SYM_OFF_W] = def_warnsyms[i].sym;
|
||||
for (i = 0; i < MAXOTHER; i++)
|
||||
rogue_syms[i + SYM_OFF_X] = get_othersym(i, ROGUESET);
|
||||
|
||||
clear_symsetentry(ROGUESET, FALSE);
|
||||
/* default on Rogue level is no color
|
||||
@@ -461,7 +486,8 @@ int whichset;
|
||||
/* Adjust graphics display characters on Rogue levels */
|
||||
|
||||
for (i = 0; i < SYM_MAX; i++)
|
||||
showsyms[i] = r_syms[i];
|
||||
showsyms[i] = ov_rogue_syms[i] ? ov_rogue_syms[i]
|
||||
: rogue_syms[i];
|
||||
|
||||
#if defined(MSDOS) && defined(USE_TILES)
|
||||
if (iflags.grmode)
|
||||
@@ -473,7 +499,8 @@ int whichset;
|
||||
case PRIMARY:
|
||||
default:
|
||||
for (i = 0; i < SYM_MAX; i++)
|
||||
showsyms[i] = l_syms[i];
|
||||
showsyms[i] = ov_primary_syms[i] ? ov_primary_syms[i]
|
||||
: primary_syms[i];
|
||||
|
||||
#if defined(MSDOS) && defined(USE_TILES)
|
||||
if (iflags.grmode)
|
||||
@@ -492,7 +519,8 @@ int nondefault;
|
||||
|
||||
if (nondefault) {
|
||||
for (i = 0; i < SYM_MAX; i++)
|
||||
showsyms[i] = l_syms[i];
|
||||
showsyms[i] = ov_primary_syms[i] ? ov_primary_syms[i]
|
||||
: primary_syms[i];
|
||||
#ifdef PC9800
|
||||
if (SYMHANDLING(H_IBM) && ibmgraphics_mode_callback)
|
||||
(*ibmgraphics_mode_callback)();
|
||||
@@ -513,25 +541,41 @@ int nondefault;
|
||||
# endif
|
||||
#endif
|
||||
} else {
|
||||
init_l_symbols();
|
||||
init_primary_symbols();
|
||||
init_showsyms();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
update_l_symset(symp, val)
|
||||
update_ov_primary_symset(symp, val)
|
||||
struct symparse *symp;
|
||||
int val;
|
||||
{
|
||||
l_syms[symp->idx] = val;
|
||||
ov_primary_syms[symp->idx] = val;
|
||||
}
|
||||
|
||||
void
|
||||
update_r_symset(symp, val)
|
||||
update_ov_rogue_symset(symp, val)
|
||||
struct symparse *symp;
|
||||
int val;
|
||||
{
|
||||
r_syms[symp->idx] = val;
|
||||
ov_rogue_syms[symp->idx] = val;
|
||||
}
|
||||
|
||||
void
|
||||
update_primary_symset(symp, val)
|
||||
struct symparse *symp;
|
||||
int val;
|
||||
{
|
||||
primary_syms[symp->idx] = val;
|
||||
}
|
||||
|
||||
void
|
||||
update_rogue_symset(symp, val)
|
||||
struct symparse *symp;
|
||||
int val;
|
||||
{
|
||||
rogue_syms[symp->idx] = val;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -772,6 +816,8 @@ struct symparse loadsyms[] = {
|
||||
{ SYM_MON, S_MIMIC_DEF + SYM_OFF_M, "S_mimic_def" },
|
||||
{ SYM_OTH, SYM_BOULDER + SYM_OFF_X, "S_boulder" },
|
||||
{ SYM_OTH, SYM_INVISIBLE + SYM_OFF_X, "S_invisible" },
|
||||
{ SYM_OTH, SYM_PET_OVERRIDE + SYM_OFF_X, "S_pet_override" },
|
||||
{ SYM_OTH, SYM_PLAYER_OVERRIDE + SYM_OFF_X, "S_player_override" },
|
||||
{ 0, 0, (const char *) 0 } /* fence post */
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user