Recent change to the stairs structure now lets each stair keep
the destination level number and dungeon where the stairs go to.
When a level that can be on different depth (such as the Oracle)
became a bones level, and it was loaded in another game at different
depth, the stairs were still pointing to the old level number.
Save it as relative to the current level instead of absolute.
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,
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;