#include "you.h"
E NEARDATA struct you u;
E NEARDATA time_t ubirthday;
+E NEARDATA struct u_realtime urealtime;
#include "onames.h"
#ifndef PM_H /* (pm.h has already been included via youprop.h) */
* Incrementing EDITLEVEL can be used to force invalidation of old bones
* and save files.
*/
-#define EDITLEVEL 56
+#define EDITLEVEL 57
#define COPYRIGHT_BANNER_A \
"NetHack, Copyright 1985-2012"
unsigned udg_cnt; /* how long you have been demigod */
struct u_achieve uachieve; /* achievements */
- struct u_realtime urealtime;
struct u_event uevent; /* certain events have happened */
struct u_have uhave; /* you're carrying special objects */
struct u_conduct uconduct; /* KMH, conduct */
#endif
program_state.something_worth_saving++; /* useful data now exists */
- u.urealtime.realtime = (time_t)0L;
+ urealtime.realtime = (time_t)0L;
#if defined(BSD) && !defined(POSIX_TYPES)
- (void) time((long *)&u.urealtime.restored);
+ (void) time((long *)&urealtime.restored);
#else
- (void) time(&u.urealtime.restored);
+ (void) time(&urealtime.restored);
#endif
/* Success! */
NEARDATA struct instance_flags iflags = DUMMY;
NEARDATA struct you u = DUMMY;
NEARDATA time_t ubirthday = DUMMY;
+NEARDATA struct u_realtime urealtime = DUMMY;
schar lastseentyp[COLNO][ROWNO] = {DUMMY}; /* last seen/touched dungeon typ */
topten figure it out separately and possibly getting different
time or even day if player is slow responding to --More-- */
endtime = getnow();
- u.urealtime.realtime += (endtime - u.urealtime.restored);
+ urealtime.realtime += (endtime - urealtime.restored);
/* Sometimes you die on the first move. Life's not fair.
* On those rare occasions you get hosed immediately, go out
amii_setpens(amii_numcolors); /* use colors from save file */
#endif
mread(fd, (genericptr_t) &u, sizeof(struct you));
- mread(fd, (genericptr_t) timebuf, 14);
- timebuf[14] = '\0';
- ubirthday = time_from_yyyymmddhhmmss(timebuf);
+
+#define ReadTimebuf(foo) mread(fd, (genericptr_t) timebuf, 14); \
+ timebuf[14] = '\0'; \
+ foo = time_from_yyyymmddhhmmss(timebuf);
+
+ ReadTimebuf(ubirthday);
+ ReadTimebuf(urealtime.realtime);
+ ReadTimebuf(urealtime.restored);
#if defined(BSD) && !defined(POSIX_TYPES)
- (void) time((long *)&u.urealtime.restored);
+ (void) time((long *)&urealtime.restored);
#else
- (void) time(&u.urealtime.restored);
+ (void) time(&urealtime.restored);
#endif
#ifdef SYSFLAGS
bwrite(fd, (genericptr_t) &sysflags, sizeof(struct sysflag));
#endif
- u.urealtime.realtime += (getnow() - u.urealtime.restored);
+ urealtime.realtime += (getnow() - urealtime.restored);
bwrite(fd, (genericptr_t) &u, sizeof(struct you));
bwrite(fd, yyyymmddhhmmss(ubirthday), 14);
+ bwrite(fd, yyyymmddhhmmss(urealtime.realtime), 14);
+ bwrite(fd, yyyymmddhhmmss(urealtime.restored), 14);
save_killers(fd, mode);
/* must come before migrating_objs and migrating_mons are freed */
XLOG_SEP, encodeconduct(),
XLOG_SEP, moves,
XLOG_SEP, encodeachieve());
- Fprintf(rfile, "%crealtime=%ld%cstarttime=%ld%cendtime%ld",
- XLOG_SEP, (long)u.urealtime.realtime,
+ Fprintf(rfile, "%crealtime=%ld%cstarttime=%ld%cendtime=%ld",
+ XLOG_SEP, (long)urealtime.realtime,
XLOG_SEP, (long)ubirthday,
- XLOG_SEP, (long)u.urealtime.endtime);
+ XLOG_SEP, (long)urealtime.endtime);
Fprintf(rfile, "%cgender0=%s%calign0=%s",
XLOG_SEP, genders[flags.initgend].filecode,
XLOG_SEP, aligns[1 - u.ualignbase[A_ORIGINAL]].filecode);
t0->birthdate = yyyymmdd(ubirthday);
t0->deathdate = yyyymmdd(when);
t0->tt_next = 0;
- u.urealtime.endtime = when;
+ urealtime.endtime = when;
#ifdef UPDATE_RECORD_IN_PLACE
t0->fpos = -1L;
#endif
(void) memset((genericptr_t)&u, 0, sizeof(u));
u.ustuck = (struct monst *)0;
(void) memset((genericptr_t)&ubirthday, 0, sizeof(ubirthday));
+ (void) memset((genericptr_t)&urealtime, 0, sizeof(urealtime));
#if 0 /* documentation of more zero values as desirable */
u.usick_cause[0] = 0;