]> granicus.if.org Git - nethack/commitdiff
Clear all room data
authorPasi Kallinen <paxed@alt.org>
Sat, 26 Jun 2021 12:10:38 +0000 (15:10 +0300)
committerPasi Kallinen <paxed@alt.org>
Sat, 26 Jun 2021 12:10:43 +0000 (15:10 +0300)
Restoring a level cleared residence pointer from those subrooms
which were in the restored level, but if the previous level had
more subrooms, those pointers weren't cleared.
This caused weird problems when a shopkeeper data was looked
up based on the subroom number.

Just to be safe, clear all the room data when freeing the level.

src/save.c

index 0153d40189dc1d776d3087b64daee10f83af54ee..735a0d4191b2b4fe1a5b3ab79925fe29a3cb59cd 100644 (file)
@@ -523,6 +523,9 @@ savelev(NHFILE* nhfp, xchar lev)
         g.level.buriedobjlist = 0;
         g.billobjs = 0;
         stairway_free_all();
+        (void) memset(g.rooms, 0, sizeof(g.rooms));
+        g.nroom = g.nsubroom = 0;
+        g.rooms[0].hx = g.subrooms[0].hx = -1;
         /* level.bonesinfo = 0; -- handled by savecemetery() */
     }
     save_engravings(nhfp);