diff --git a/src/restore.c b/src/restore.c index 3622c02ab..e28648769 100644 --- a/src/restore.c +++ b/src/restore.c @@ -926,6 +926,10 @@ NHFILE *nhfp; if (nhfp->structlevel) { len += (int) sizeof (stairway); mread(nhfp->fd, (genericptr_t) &stway, sizeof (stairway)); + if (stway.tolev.dnum == u.uz.dnum) { + /* stairway dlevel is relative, make it absolute */ + stway.tolev.dlevel += u.uz.dlevel; + } } stairway_add(stway.sx, stway.sy, stway.up, stway.isladder, diff --git a/src/save.c b/src/save.c index d1dcf15fd..bc8def125 100644 --- a/src/save.c +++ b/src/save.c @@ -669,8 +669,16 @@ NHFILE *nhfp; while (stway) { if (perform_bwrite(nhfp)) { if (nhfp->structlevel) { + if (stway->tolev.dnum == u.uz.dnum) { + /* make dlevel relative to current level */ + stway->tolev.dlevel -= u.uz.dlevel; + } bwrite(nhfp->fd, (genericptr_t) &buflen, sizeof buflen); bwrite(nhfp->fd, (genericptr_t) stway, sizeof *stway); + if (stway->tolev.dnum == u.uz.dnum) { + /* reset staiway dlevel back to absolute */ + stway->tolev.dlevel += u.uz.dlevel; + } } } stway = stway->next;