store relative timestamps in save and bones
This commit is contained in:
@@ -2827,6 +2827,8 @@ extern void freedynamicdata(void);
|
||||
extern void store_savefileinfo(NHFILE *) NONNULLARG1;
|
||||
extern void store_savefileinfo(NHFILE *) NONNULLARG1;
|
||||
extern int nhdatatypes_size(void);
|
||||
extern void moves_to_relative_time(long *);
|
||||
extern void relative_time_to_moves(long *);
|
||||
#if 0
|
||||
extern void assignlog(char *, char*, int);
|
||||
extern FILE *getlog(NHFILE *);
|
||||
|
||||
@@ -35,6 +35,7 @@ staticfn boolean restgamestate(NHFILE *);
|
||||
staticfn void rest_bubbles(NHFILE *);
|
||||
staticfn void restore_gamelog(NHFILE *);
|
||||
staticfn void restore_msghistory(NHFILE *);
|
||||
staticfn void rest_adjust_levelflags(void);
|
||||
#endif
|
||||
|
||||
/*
|
||||
@@ -1106,7 +1107,7 @@ getlev(NHFILE *nhfp, int pid, xint8 lev)
|
||||
Sfi_dest_area(nhfp, &svu.updest, "lev-updest");
|
||||
Sfi_dest_area(nhfp, &svd.dndest, "lev-dndest");
|
||||
Sfi_levelflags(nhfp, &svl.level.flags, "lev-level_flags");
|
||||
|
||||
rest_adjust_levelflags();
|
||||
if (svd.doors) {
|
||||
free(svd.doors);
|
||||
svd.doors = 0;
|
||||
@@ -1302,6 +1303,13 @@ getlev(NHFILE *nhfp, int pid, xint8 lev)
|
||||
program_state.in_getlev = FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
rest_adjust_levelflags(void)
|
||||
{
|
||||
/* adjust timestamps */
|
||||
relative_time_to_moves(&svl.level.flags.stasis_until);
|
||||
}
|
||||
|
||||
/* "name-role-race-gend-algn" occurs very early in a save file; sometimes we
|
||||
want the whole thing, other times just "name" (for svp.plname[]) */
|
||||
void
|
||||
|
||||
27
src/save.c
27
src/save.c
@@ -31,7 +31,7 @@ staticfn void save_gamelog(NHFILE *);
|
||||
staticfn void savegamestate(NHFILE *);
|
||||
staticfn void savelev_core(NHFILE *, xint8);
|
||||
staticfn void save_msghistory(NHFILE *);
|
||||
|
||||
staticfn void save_adjust_levelflags(void);
|
||||
#if defined(HANGUPHANDLING)
|
||||
#define HUP if (!program_state.done_hup)
|
||||
#else
|
||||
@@ -509,7 +509,9 @@ savelev_core(NHFILE *nhfp, xint8 lev)
|
||||
save_stairs(nhfp);
|
||||
Sfo_dest_area(nhfp, &svu.updest, "lev-updest");
|
||||
Sfo_dest_area(nhfp, &svd.dndest, "lev-dndest");
|
||||
save_adjust_levelflags();
|
||||
Sfo_levelflags(nhfp, &svl.level.flags, "lev-level_flags");
|
||||
rest_adjust_levelflags();
|
||||
|
||||
Sfo_int(nhfp, &svd.doors_alloc, "lev-doors_alloc");
|
||||
/* don't rely on underlying write() behavior to write
|
||||
@@ -556,6 +558,13 @@ savelev_core(NHFILE *nhfp, xint8 lev)
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
save_adjust_levelflags(void)
|
||||
{
|
||||
/* adjust any timestamps */
|
||||
moves_to_relative_time(&svl.level.flags.stasis_until);
|
||||
}
|
||||
|
||||
staticfn void
|
||||
savelevl(NHFILE *nhfp)
|
||||
{
|
||||
@@ -1033,6 +1042,22 @@ save_msghistory(NHFILE *nhfp)
|
||||
/* note: we don't attempt to handle release_data() here */
|
||||
}
|
||||
|
||||
void
|
||||
moves_to_relative_time(long *timestamp)
|
||||
{
|
||||
long prevts = *timestamp;
|
||||
|
||||
*timestamp = prevts - svm.moves;
|
||||
}
|
||||
|
||||
void
|
||||
relative_time_to_moves(long *timestamp)
|
||||
{
|
||||
long prevts = *timestamp;
|
||||
|
||||
*timestamp = svm.moves + prevts;
|
||||
}
|
||||
|
||||
/* also called by prscore(); this probably belongs in dungeon.c... */
|
||||
void
|
||||
free_dungeons(void)
|
||||
|
||||
Reference in New Issue
Block a user