bones tracking (trunk only)
[See cvs log for include/rm.h or doc/window.doc for more complete description.] Attach hero info, death reason, and date+time to a level that's being saved as bones. Read such data back when loading a bones file, then treat it as part of that level for the rest of the game. Dying on a loaded bones file will chain the new hero+death+date to previous one(s) if new bones get saved. outrip() now takes an extra argument of type time_t, and interface-specific implementations of this routine need to be updated to handle that.
This commit is contained in:
24
src/save.c
24
src/save.c
@@ -22,6 +22,7 @@ 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));
|
||||
@@ -520,6 +521,7 @@ int mode;
|
||||
#else
|
||||
bwrite(fd,(genericptr_t) &lev,sizeof(lev));
|
||||
#endif
|
||||
savecemetery(fd, mode);
|
||||
savelevl(fd, (boolean)((sfsaveinfo.sfi1 & SFI1_RLECOMP) == SFI1_RLECOMP));
|
||||
#ifdef DUNGEON_OVERVIEW
|
||||
bwrite(fd,(genericptr_t) lastseentyp,sizeof(lastseentyp));
|
||||
@@ -554,6 +556,7 @@ int mode;
|
||||
fobj = 0;
|
||||
level.buriedobjlist = 0;
|
||||
billobjs = 0;
|
||||
level.bonesinfo = 0;
|
||||
}
|
||||
save_engravings(fd, mode);
|
||||
savedamage(fd, mode);
|
||||
@@ -918,6 +921,27 @@ register int fd, mode;
|
||||
sp_levchn = 0;
|
||||
}
|
||||
|
||||
STATIC_OVL void
|
||||
savecemetery(fd, mode)
|
||||
int fd;
|
||||
int mode;
|
||||
{
|
||||
struct cemetery *thisbones, *nextbones;
|
||||
int flag;
|
||||
|
||||
flag = level.bonesinfo ? 0 : -1;
|
||||
if (perform_bwrite(mode))
|
||||
bwrite(fd, (genericptr_t)&flag, sizeof flag);
|
||||
nextbones = level.bonesinfo;
|
||||
while ((thisbones = nextbones) != 0) {
|
||||
nextbones = thisbones->next;
|
||||
if (perform_bwrite(mode))
|
||||
bwrite(fd, (genericptr_t)thisbones, sizeof *thisbones);
|
||||
if (release_data(mode))
|
||||
free((genericptr_t)thisbones);
|
||||
}
|
||||
}
|
||||
|
||||
STATIC_OVL void
|
||||
savedamage(fd, mode)
|
||||
register int fd, mode;
|
||||
|
||||
Reference in New Issue
Block a user