#overview enhancements (trunk only)
1) add graves to the dungeon features being tracked;
2) report on known bones (determined by seeing map spot(s) where previous
hero(es) died since there's no guarantee of graves or ghosts);
3) add automatic annotations for oracle, sokoban, bigroom, rogue level,
Ft.Ludios, castle, valley, and Moloch's sanctum. For bigroom and rogue
level you just need to visit that level, for the others you need to get
far enough along to learn something specific (oracle: her room, sokoban:
annotation is either "solved" or "unsolved" depending upon whether all
the holes and pits have been filled, fort and castle: see the drawbridge,
valley and sanctum: see inside the tended temple). Discovering the
relevant locations via magic mapping counts as "far enough along".
There should probably also be automatic annotations for Medusa and the
vibrating square but I'm not sure what criteria should be used for the
former or what phrasing to use for the latter. Demon lord/prince lairs fall
into similar category as Medusa.
TODO: add final #overview as an end of game disclosure option. (I was
planning this even before I saw that nitrohack has implemented it....)
This commit is contained in:
19
src/save.c
19
src/save.c
@@ -22,7 +22,6 @@ int dotcnt, dotrow; /* also used in restore */
|
||||
#endif
|
||||
|
||||
STATIC_DCL void FDECL(savelevchn, (int,int));
|
||||
STATIC_DCL void FDECL(savecemetery, (int,int));
|
||||
STATIC_DCL void FDECL(savedamage, (int,int));
|
||||
STATIC_DCL void FDECL(saveobj, (int,struct obj *));
|
||||
STATIC_DCL void FDECL(saveobjchn, (int,struct obj *,int));
|
||||
@@ -521,7 +520,7 @@ int mode;
|
||||
#else
|
||||
bwrite(fd,(genericptr_t) &lev,sizeof(lev));
|
||||
#endif
|
||||
savecemetery(fd, mode);
|
||||
savecemetery(fd, mode, &level.bonesinfo);
|
||||
savelevl(fd, (boolean)((sfsaveinfo.sfi1 & SFI1_RLECOMP) == SFI1_RLECOMP));
|
||||
#ifdef DUNGEON_OVERVIEW
|
||||
bwrite(fd,(genericptr_t) lastseentyp,sizeof(lastseentyp));
|
||||
@@ -540,6 +539,8 @@ int mode;
|
||||
|
||||
/* from here on out, saving also involves allocated memory cleanup */
|
||||
skip_lots:
|
||||
/* this comes before the map, so need cleanup here if we skipped */
|
||||
if (mode == FREE_SAVE) savecemetery(fd, mode, &level.bonesinfo);
|
||||
/* must be saved before mons, objs, and buried objs */
|
||||
save_timers(fd, mode, RANGE_LEVEL);
|
||||
save_light_sources(fd, mode, RANGE_LEVEL);
|
||||
@@ -556,7 +557,7 @@ int mode;
|
||||
fobj = 0;
|
||||
level.buriedobjlist = 0;
|
||||
billobjs = 0;
|
||||
level.bonesinfo = 0;
|
||||
/* level.bonesinfo = 0; -- handled by savecemetery() */
|
||||
}
|
||||
save_engravings(fd, mode);
|
||||
savedamage(fd, mode);
|
||||
@@ -921,18 +922,20 @@ register int fd, mode;
|
||||
sp_levchn = 0;
|
||||
}
|
||||
|
||||
STATIC_OVL void
|
||||
savecemetery(fd, mode)
|
||||
/* used when saving a level and also when saving dungeon overview data */
|
||||
void
|
||||
savecemetery(fd, mode, cemeteryaddr)
|
||||
int fd;
|
||||
int mode;
|
||||
struct cemetery **cemeteryaddr;
|
||||
{
|
||||
struct cemetery *thisbones, *nextbones;
|
||||
int flag;
|
||||
|
||||
flag = level.bonesinfo ? 0 : -1;
|
||||
flag = *cemeteryaddr ? 0 : -1;
|
||||
if (perform_bwrite(mode))
|
||||
bwrite(fd, (genericptr_t)&flag, sizeof flag);
|
||||
nextbones = level.bonesinfo;
|
||||
nextbones = *cemeteryaddr;
|
||||
while ((thisbones = nextbones) != 0) {
|
||||
nextbones = thisbones->next;
|
||||
if (perform_bwrite(mode))
|
||||
@@ -940,6 +943,8 @@ int mode;
|
||||
if (release_data(mode))
|
||||
free((genericptr_t)thisbones);
|
||||
}
|
||||
if (release_data(mode))
|
||||
*cemeteryaddr = 0;
|
||||
}
|
||||
|
||||
STATIC_OVL void
|
||||
|
||||
Reference in New Issue
Block a user