diff --git a/include/hack.h b/include/hack.h index fab579b66..6912f3066 100644 --- a/include/hack.h +++ b/include/hack.h @@ -1,4 +1,4 @@ -/* NetHack 3.7 hack.h $NHDT-Date: 1700869696 2023/11/24 23:48:16 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.238 $ */ +/* NetHack 3.7 hack.h $NHDT-Date: 1701132211 2023/11/28 00:43:31 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.240 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Pasi Kallinen, 2017. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1013,32 +1013,41 @@ typedef struct { /* The UNDEFINED_ROLE macro is used to initialize Role variables */ #define UNDEFINED_ROLE \ - { {0}, { {0} }, \ - /* strings */ \ - NULL, NULL, NULL, \ - NULL, NULL, NULL, \ - /* indices */ \ - 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, \ - /* Bitmasks */ \ - 0, \ - /* Attributes */ \ - {0}, {0}, {0}, {0}, 0, 0, \ - /* spell statistics */ \ + { \ + /* role name, set of rank names */ \ + { NULL }, { { NULL } }, \ + /* strings: pantheon deity names */ \ + NULL, NULL, NULL, \ + /* file code, quest home+goal names */ \ + NULL, NULL, NULL, \ + /* indices: base mon type, pet */ \ + NON_PM, NON_PM, \ + /* quest leader, guardians, nemesis */ \ + NON_PM, NON_PM, NON_PM, \ + /* quest enemy types (index, symbol) */ \ + NON_PM, NON_PM, '\0', '\0', \ + /* quest artifact object index */ \ + STRANGE_OBJECT, \ + /* Bitmasks */ \ + 0, \ + /* Attributes */ \ + {0}, {0}, {0}, {0}, 0, 0, \ + /* spell statistics */ \ 0, 0, 0, 0, 0, 0, 0 } /* The UNDEFINED_RACE macro is used to initialize Race variables */ #define UNDEFINED_RACE \ - { \ - /* strings */ \ - NULL, NULL, NULL, NULL, {0}, \ - /* Indices */ \ - NON_PM, 0, 0, \ - /* Bitmasks */ \ - 0, 0, 0, 0, \ - /* Attributes */ \ - {0}, {0}, {0}, {0} \ - /* Properties */ \ + { \ + /* strings */ \ + NULL, NULL, NULL, NULL, { NULL, NULL }, \ + /* Indices: base race, mummy, zombie */ \ + NON_PM, NON_PM, NON_PM, \ + /* Bitmasks */ \ + 0, 0, 0, 0, \ + /* Characteristic limits */ \ + {0}, {0}, \ + /* Level change HP and Pw adjustments */ \ + {0}, {0} \ } #define MATCH_WARN_OF_MON(mon) \ diff --git a/src/decl.c b/src/decl.c index 94096320d..19ffbb53d 100644 --- a/src/decl.c +++ b/src/decl.c @@ -1,4 +1,4 @@ -/* NetHack 3.7 decl.c $NHDT-Date: 1698264780 2023/10/25 20:13:00 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.293 $ */ +/* NetHack 3.7 decl.c $NHDT-Date: 1701132220 2023/11/28 00:43:40 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.304 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Michael Allison, 2009. */ /* NetHack may be freely redistributed. See license for details. */ @@ -829,7 +829,7 @@ const struct instance_globals_u g_init_u = { FALSE, /* unweapon */ /* role.c */ UNDEFINED_ROLE, /* urole */ - UNDEFINED_VALUES, /* urace */ + UNDEFINED_RACE, /* urace */ /* save.c */ { 0, 0 }, /* uz_save */ TRUE, /* havestate*/ diff --git a/src/role.c b/src/role.c index 852f51174..055dca9b1 100644 --- a/src/role.c +++ b/src/role.c @@ -1,4 +1,4 @@ -/* NetHack 3.7 role.c $NHDT-Date: 1596498206 2020/08/03 23:43:26 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.71 $ */ +/* NetHack 3.7 role.c $NHDT-Date: 1701132222 2023/11/28 00:43:42 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.94 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985-1999. */ /*-Copyright (c) Robert Patrick Rankin, 2012. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1301,7 +1301,7 @@ gotrolefilter(void) if (gr.rfilter.mask) return TRUE; - for (i = 0; i < SIZE(roles); ++i) + for (i = 0; i < SIZE(roles) - 1; ++i) if (gr.rfilter.roles[i]) return TRUE; return FALSE; @@ -1317,25 +1317,25 @@ rolefilterstring(char *outbuf, int which) outbuf[0] = outbuf[1] = '\0'; switch (which) { case RS_ROLE: - for (i = 0; i < SIZE(roles); ++i) { + for (i = 0; i < SIZE(roles) - 1; ++i) { if (gr.rfilter.roles[i]) Sprintf(eos(outbuf), " !%.3s", roles[i].name.m); } break; case RS_RACE: - for (i = 0; i < SIZE(races); ++i) { + for (i = 0; i < SIZE(races) - 1; ++i) { if ((gr.rfilter.mask & races[i].selfmask) != 0) Sprintf(eos(outbuf), " !%s", races[i].noun); } break; case RS_GENDER: - for (i = 0; i < SIZE(genders); ++i) { + for (i = 0; i < SIZE(genders) - 1; ++i) { if ((gr.rfilter.mask & genders[i].allow) != 0) Sprintf(eos(outbuf), " !%s", genders[i].adj); } break; case RS_ALGNMNT: - for (i = 0; i < SIZE(aligns); ++i) { + for (i = 0; i < SIZE(aligns) - 1; ++i) { if ((gr.rfilter.mask & aligns[i].allow) != 0) Sprintf(eos(outbuf), " !%s", aligns[i].adj); } @@ -1359,7 +1359,7 @@ clearrolefilter(int which) gr.rfilter.mask = 0; /* clear race, gender, and alignment filters */ /*FALLTHRU*/ case RS_ROLE: - for (i = 0; i < SIZE(roles); ++i) + for (i = 0; i < SIZE(roles) - 1; ++i) gr.rfilter.roles[i] = FALSE; break; case RS_RACE: @@ -1822,10 +1822,10 @@ role_menu_extra(int which, winid where, boolean preselect) case RS_ROLE: what = "role"; f = r; - for (i = 0; i < SIZE(roles); ++i) + for (i = 0; i < SIZE(roles) - 1; ++i) if (i != f && !gr.rfilter.roles[i]) break; - if (i == SIZE(roles)) { + if (i == SIZE(roles) - 1) { constrainer = "filter"; forcedvalue = "role"; } @@ -2139,13 +2139,14 @@ Goodbye(void) } /* if pmindex is any player race (not necessarily the hero's), - return a pointer to the races[] entry for it */ + return a pointer to the races[] entry for it; if pmindex is for some + other type of monster which isn't a player race, return Null */ const struct Race * character_race(short pmindex) { const struct Race *r; - for (r = races; r->mnum >= LOW_PM; ++r) + for (r = races; r->noun != NULL; ++r) if (r->mnum == pmindex) return r; return (const struct Race *) NULL;