Merge branch 'NetHack-3.6'

This commit is contained in:
nhmall
2019-10-28 00:45:56 -04:00
20 changed files with 323 additions and 130 deletions

View File

@@ -17,9 +17,13 @@
#define C(n)
#endif
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 */
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().
@@ -297,7 +301,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
@@ -313,8 +317,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.
*
@@ -324,37 +328,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 */
g.showsyms[SYM_BOULDER + SYM_OFF_X] = boulder;
g.l_syms[SYM_BOULDER + SYM_OFF_X] = boulder;
g.r_syms[SYM_BOULDER + SYM_OFF_X] = boulder;
init_rogue_symbols();
}
void
@@ -370,44 +370,78 @@ init_showsyms()
g.showsyms[i + SYM_OFF_M] = def_monsyms[i].sym;
for (i = 0; i < WARNCOUNT; i++)
g.showsyms[i + SYM_OFF_W] = def_warnsyms[i].sym;
for (i = 0; i < MAXOTHER; i++) {
if (i == SYM_BOULDER)
g.showsyms[i + SYM_OFF_X] = iflags.bouldersym
? iflags.bouldersym
: def_oc_syms[ROCK_CLASS].sym;
else if (i == SYM_INVISIBLE)
g.showsyms[i + SYM_OFF_X] = DEF_INVISIBLE;
}
for (i = 0; i < MAXOTHER; i++)
g.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++)
g.l_syms[i + SYM_OFF_P] = defsyms[i].sym;
primary_syms[i + SYM_OFF_P] = defsyms[i].sym;
for (i = 0; i < MAXOCLASSES; i++)
g.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++)
g.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++)
g.l_syms[i + SYM_OFF_W] = def_warnsyms[i].sym;
for (i = 0; i < MAXOTHER; i++) {
if (i == SYM_BOULDER)
g.l_syms[i + SYM_OFF_X] = iflags.bouldersym
? iflags.bouldersym
: def_oc_syms[ROCK_CLASS].sym;
else if (i == SYM_INVISIBLE)
g.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;
@@ -415,24 +449,18 @@ init_r_symbols()
later by the roguesymbols option */
for (i = 0; i < MAXPCHARS; i++)
g.r_syms[i + SYM_OFF_P] = defsyms[i].sym;
g.r_syms[S_vodoor] = g.r_syms[S_hodoor] = g.r_syms[S_ndoor] = '+';
g.r_syms[S_upstair] = g.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++)
g.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++)
g.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++)
g.r_syms[i + SYM_OFF_W] = def_warnsyms[i].sym;
for (i = 0; i < MAXOTHER; i++) {
if (i == SYM_BOULDER)
g.r_syms[i + SYM_OFF_X] = iflags.bouldersym
? iflags.bouldersym
: def_oc_syms[ROCK_CLASS].sym;
else if (i == SYM_INVISIBLE)
g.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
@@ -452,7 +480,8 @@ int whichset;
/* Adjust graphics display characters on Rogue levels */
for (i = 0; i < SYM_MAX; i++)
g.showsyms[i] = g.r_syms[i];
g.showsyms[i] = ov_rogue_syms[i] ? ov_rogue_syms[i]
: rogue_syms[i];
#if defined(MSDOS) && defined(USE_TILES)
if (iflags.grmode)
@@ -464,7 +493,8 @@ int whichset;
case PRIMARY:
default:
for (i = 0; i < SYM_MAX; i++)
g.showsyms[i] = g.l_syms[i];
g.showsyms[i] = ov_primary_syms[i] ? ov_primary_syms[i]
: primary_syms[i];
#if defined(MSDOS) && defined(USE_TILES)
if (iflags.grmode)
@@ -483,7 +513,8 @@ int nondefault;
if (nondefault) {
for (i = 0; i < SYM_MAX; i++)
g.showsyms[i] = g.l_syms[i];
g.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)();
@@ -504,25 +535,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;
{
g.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;
{
g.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
@@ -763,6 +810,8 @@ const 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 */
};