; tiles, flags, actors and exits
; rooms are always in the order specified here:
; room_struct, tiles, flags, actor_table, exit_table
-#define ROOM_SIZE_TOTAL room_size + ROOM_TILES_SIZE + ROOM_FLAGS_SIZE + ACTOR_TABLE_SIZE + ROOM_EXIT_TABLE_SIZE
; save game struct
.se 0
.de save_game_chksm, 1
; saving rng seed
.de save_game_seed, 1
- ; saving all rooms
-.de save_game_rooms, ROOM_SIZE_TOTAL * ROOMS_TOTAL
+ ; saving all room headers
+ ; it is important to ensure
+ ; that the rooms are loaded back in their intended memory space
+ ; to not corrupt room header pointers
+.de save_game_rooms, room_size * ROOMS_TOTAL
+.de save_game_room_tiles, ROOM_TILES_SIZE * ROOMS_TOTAL
+.de save_game_room_flags, ROOM_FLAGS_SIZE * ROOMS_TOTAL
+.de save_game_room_actors, ACTOR_TABLE_SIZE * ROOMS_TOTAL
+.de save_game_room_exits, ROOM_EXIT_TABLE_SIZE * ROOMS_TOTAL
; saving player state
.de save_game_player, player_size
; this is a canary value to detect out of bounds reads in sram