Dec 15, 2015
Patch for 3.6.0 source tree to correct realtime value.

*** NetHack-3.6.0/include/you.h	Tue Dec 15 21:32:34 2015
--- include/you.h	Tue Dec 15 21:35:33 2015
***************
*** 68,77 ****
  };
  
  struct u_realtime {
!     long
!         realtime; /* actual playing time up until the last restore, seconds */
!     time_t restored; /* time the game was started or restored */
!     time_t endtime;
  };
  
  /* KMH, conduct --
--- 68,78 ----
  };
  
  struct u_realtime {
!     long   realtime;     /* accumulated playing time in seconds */
!     time_t start_timing; /* time game was started or restored or 'realtime'
!                             was last updated (savegamestate for checkpoint) */
!     time_t finish_time;  /* end of 'realtime' interval: time of save or
!                             end of game; used for topten/logfile/xlogfile */
  };
  
  /* KMH, conduct --
*** NetHack-3.6.0/src/allmain.c	Tue Dec 15 21:32:34 2015
--- src/allmain.c	Tue Dec 15 21:35:33 2015
***************
*** 587,603 ****
          com_pager(1);
      }
  
  #ifdef INSURANCE
      save_currentstate();
  #endif
      program_state.something_worth_saving++; /* useful data now exists */
- 
-     urealtime.realtime = 0L;
- #if defined(BSD) && !defined(POSIX_TYPES)
-     (void) time((long *) &urealtime.restored);
- #else
-     (void) time(&urealtime.restored);
- #endif
  
      /* Success! */
      welcome(TRUE);
--- 587,598 ----
          com_pager(1);
      }
  
+     urealtime.realtime = 0L;
+     urealtime.start_timing = getnow();
  #ifdef INSURANCE
      save_currentstate();
  #endif
      program_state.something_worth_saving++; /* useful data now exists */
  
      /* Success! */
      welcome(TRUE);
*** NetHack-3.6.0/src/end.c	Tue Dec 15 21:32:34 2015
--- src/end.c	Tue Dec 15 21:35:33 2015
***************
*** 951,958 ****
      /* remember time of death here instead of having bones, rip, and
         topten figure it out separately and possibly getting different
         time or even day if player is slow responding to --More-- */
!     endtime = getnow();
!     urealtime.realtime += (long) (endtime - urealtime.restored);
  
      /* Sometimes you die on the first move.  Life's not fair.
       * On those rare occasions you get hosed immediately, go out
--- 951,958 ----
      /* remember time of death here instead of having bones, rip, and
         topten figure it out separately and possibly getting different
         time or even day if player is slow responding to --More-- */
!     urealtime.finish_time = endtime = getnow();
!     urealtime.realtime += (long) (endtime - urealtime.start_timing);
  
      /* Sometimes you die on the first move.  Life's not fair.
       * On those rare occasions you get hosed immediately, go out
*** NetHack-3.6.0/src/restore.c	Tue Dec 15 21:32:35 2015
--- src/restore.c	Tue Dec 15 21:35:33 2015
***************
*** 568,580 ****
      foo = time_from_yyyymmddhhmmss(timebuf);
  
      ReadTimebuf(ubirthday);
!     mread(fd, &urealtime.realtime, sizeof(urealtime.realtime));
!     ReadTimebuf(urealtime.restored);
! #if defined(BSD) && !defined(POSIX_TYPES)
!     (void) time((long *) &urealtime.restored);
! #else
!     (void) time(&urealtime.restored);
! #endif
  
      set_uasmon();
  #ifdef CLIPPING
--- 568,577 ----
      foo = time_from_yyyymmddhhmmss(timebuf);
  
      ReadTimebuf(ubirthday);
!     mread(fd, &urealtime.realtime, sizeof urealtime.realtime);
!     ReadTimebuf(urealtime.start_timing); /** [not used] **/
!     /* current time is the time to use for next urealtime.realtime update */
!     urealtime.start_timing = getnow();
  
      set_uasmon();
  #ifdef CLIPPING
*** NetHack-3.6.0/src/save.c	Tue Dec 15 21:32:35 2015
--- src/save.c	Tue Dec 15 21:35:34 2015
***************
*** 289,300 ****
  #ifdef SYSFLAGS
      bwrite(fd, (genericptr_t) &sysflags, sizeof(struct sysflag));
  #endif
!     urealtime.realtime += (long) (getnow() - urealtime.restored);
      bwrite(fd, (genericptr_t) &u, sizeof(struct you));
      bwrite(fd, yyyymmddhhmmss(ubirthday), 14);
!     bwrite(fd, (genericptr_t) &urealtime.realtime,
!            sizeof(urealtime.realtime));
!     bwrite(fd, yyyymmddhhmmss(urealtime.restored), 14);
      save_killers(fd, mode);
  
      /* must come before migrating_objs and migrating_mons are freed */
--- 289,303 ----
  #ifdef SYSFLAGS
      bwrite(fd, (genericptr_t) &sysflags, sizeof(struct sysflag));
  #endif
!     urealtime.finish_time = getnow();
!     urealtime.realtime += (long) (urealtime.finish_time
!                                   - urealtime.start_timing);
      bwrite(fd, (genericptr_t) &u, sizeof(struct you));
      bwrite(fd, yyyymmddhhmmss(ubirthday), 14);
!     bwrite(fd, (genericptr_t) &urealtime.realtime, sizeof urealtime.realtime);
!     bwrite(fd, yyyymmddhhmmss(urealtime.start_timing), 14);  /** Why? **/
!     /* this is the value to use for the next update of urealtime.realtime */
!     urealtime.start_timing = urealtime.finish_time;
      save_killers(fd, mode);
  
      /* must come before migrating_objs and migrating_mons are freed */
*** NetHack-3.6.0/src/topten.c	Tue Dec 15 21:32:35 2015
--- src/topten.c	Tue Dec 15 21:35:34 2015
***************
*** 330,337 ****
      Fprintf(rfile, "%cconduct=0x%lx%cturns=%ld%cachieve=0x%lx", XLOG_SEP,
              encodeconduct(), XLOG_SEP, moves, XLOG_SEP, encodeachieve());
      Fprintf(rfile, "%crealtime=%ld%cstarttime=%ld%cendtime=%ld", XLOG_SEP,
!             (long) urealtime.realtime, XLOG_SEP, (long) ubirthday, 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);
--- 330,337 ----
      Fprintf(rfile, "%cconduct=0x%lx%cturns=%ld%cachieve=0x%lx", XLOG_SEP,
              encodeconduct(), XLOG_SEP, moves, XLOG_SEP, encodeachieve());
      Fprintf(rfile, "%crealtime=%ld%cstarttime=%ld%cendtime=%ld", XLOG_SEP,
!             (long) urealtime.realtime, XLOG_SEP,
!             (long) ubirthday, XLOG_SEP, (long) urealtime.finish_time);
      Fprintf(rfile, "%cgender0=%s%calign0=%s", XLOG_SEP,
              genders[flags.initgend].filecode, XLOG_SEP,
              aligns[1 - u.ualignbase[A_ORIGINAL]].filecode);
***************
*** 516,522 ****
      t0->birthdate = yyyymmdd(ubirthday);
      t0->deathdate = yyyymmdd(when);
      t0->tt_next = 0;
-     urealtime.endtime = when;
  #ifdef UPDATE_RECORD_IN_PLACE
      t0->fpos = -1L;
  #endif
--- 516,521 ----
