diff --git a/doc/fixes3-7-0.txt b/doc/fixes3-7-0.txt index 69958e5ec..1f281f47c 100644 --- a/doc/fixes3-7-0.txt +++ b/doc/fixes3-7-0.txt @@ -1,4 +1,4 @@ -NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1614 $ $NHDT-Date: 1769342601 2026/01/25 04:03:21 $ +NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1649 $ $NHDT-Date: 1777000050 2026/04/23 19:07:30 $ General Fixes and Modified Features ----------------------------------- @@ -1598,6 +1598,10 @@ prevent selecting all options in #optionsfull menu shapeshifters change shape less rolling boulder traps aren't removed when stepped on and move boulders pushed onto them +when starting a new game as a monk, newsym(0,0) was being called (adjabil -> + postadjabil -> see_monsters when initializing See_invisible as hero + became level 1; seen 'monster' was the hero who hadn't been placed + on the map yet) Fixes to 3.7.0-x General Problems Exposed Via git Repository diff --git a/src/attrib.c b/src/attrib.c index 23e8117c7..27f454fd8 100644 --- a/src/attrib.c +++ b/src/attrib.c @@ -1,4 +1,4 @@ -/* NetHack 3.7 attrib.c $NHDT-Date: 1754979443 2025/08/11 22:17:23 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.134 $ */ +/* NetHack 3.7 attrib.c $NHDT-Date: 1777000050 2026/04/23 19:07:30 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.137 $ */ /* Copyright 1988, 1989, 1990, 1992, M. Stephenson */ /* NetHack may be freely redistributed. See license for details. */ @@ -107,7 +107,7 @@ static const struct innate { staticfn void exerper(void); staticfn int rnd_attr(void); staticfn int init_attr_role_redist(int, boolean); -staticfn void postadjabil(long *); +staticfn void postadjabil(long *) NONNULLARG1; staticfn const struct innate *role_abil(int); staticfn const struct innate *check_innate_abil(long *, long); staticfn int innately(long *); @@ -779,7 +779,7 @@ staticfn void postadjabil(long *ability) { - if (!ability) + if (!u.ulevel) /* initializing hero; don't attempt screen update yet */ return; if (ability == &(HWarning) || ability == &(HSee_invisible)) see_monsters(); diff --git a/src/display.c b/src/display.c index 5f854c64d..d3241ce9f 100644 --- a/src/display.c +++ b/src/display.c @@ -1,4 +1,4 @@ -/* NetHack 3.7 display.c $NHDT-Date: 1745114235 2025/04/19 17:57:15 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.260 $ */ +/* NetHack 3.7 display.c $NHDT-Date: 1777000050 2026/04/23 19:07:30 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.263 $ */ /* Copyright (c) Dean Luick, with acknowledgements to Kevin Darcy */ /* and Dave Cohrs, 1990. */ /* NetHack may be freely redistributed. See license for details. */ @@ -753,10 +753,9 @@ feel_location(coordxy x, coordxy y) /* replicate safeguards used by newsym(); might not be required here */ if (_suppress_map_output()) return; - if (!isok(x, y)) return; - lev = &(levl[x][y]); + lev = &levl[x][y]; /* If hero's memory of an invisible monster is accurate, we want to keep * him from detecting the same monster over and over again on each turn. * We must return (so we don't erase the monster). (We must also, in the @@ -917,15 +916,24 @@ feel_location(coordxy x, coordxy y) void newsym(coordxy x, coordxy y) { + struct rm *lev; + struct engr *ep; struct monst *mon; int see_it; boolean worm_tail; - struct rm *lev = &(levl[x][y]); - struct engr *ep; /* don't try to produce map output when level is in a state of flux */ if (_suppress_map_output()) return; + /* should never happen; same error handling as u_on_newpos() */ + if (!isok(x, y)) { + void (*errfunc)(const char *, ...) PRINTF_F_PTR(1, 2); + + errfunc = (x < 0 || y < 0 || x > COLNO - 1 || y > ROWNO - 1) ? panic + : impossible; /* misuse of column 0 is less severe */ + (*errfunc)("newsym: attempting screen update for <%d,%d>", x, y); + return; + } /* only permit updating the hero when swallowed */ if (u.uswallow) { @@ -939,6 +947,7 @@ newsym(coordxy x, coordxy y) if (!(is_pool_or_lava(x, y) || is_ice(x, y)) || !next2u(x, y)) return; } + lev = &levl[x][y]; /* Can physically see the location. */ if (cansee(x, y)) {