diff --git a/src/restore.c b/src/restore.c index e4d50d942..03b480201 100644 --- a/src/restore.c +++ b/src/restore.c @@ -670,8 +670,12 @@ restgamestate(NHFILE* nhfp, unsigned int* stuckid, unsigned int* steedid) restlevchn(nhfp); if (nhfp->structlevel) { mread(nhfp->fd, (genericptr_t) &g.moves, sizeof g.moves); - mread(nhfp->fd, (genericptr_t) &g.quest_status, sizeof (struct q_score)); - mread(nhfp->fd, (genericptr_t) g.spl_book, (MAXSPELL + 1) * sizeof (struct spell)); + /* hero_seq isn't saved and restored because it can be recalculated */ + g.hero_seq = g.moves << 3; /* normally handled in moveloop() */ + mread(nhfp->fd, (genericptr_t) &g.quest_status, + sizeof (struct q_score)); + mread(nhfp->fd, (genericptr_t) g.spl_book, + (MAXSPELL + 1) * sizeof (struct spell)); } restore_artifacts(nhfp); restore_oracles(nhfp); diff --git a/win/curses/cursmesg.c b/win/curses/cursmesg.c index e213e45a5..2d0995bbf 100644 --- a/win/curses/cursmesg.c +++ b/win/curses/cursmesg.c @@ -371,6 +371,17 @@ curses_prev_mesg(void) nhprev_mesg *mesg; menu_item *selected = NULL; boolean do_lifo = (iflags.prevmsg_window != 'f'); +#ifdef DEBUG + static int showturn = 0; /* 1: show hero_seq value in separators */ + + /* + * Set DEBUGFILES=MesgTurn in environment or sysconf to decorate + * separator line between blocks of messages with the turn they + * were issued. + */ + if (!showturn) + showturn = (wizard && explicitdebug("MesgTurn")) ? 1 : -1; +#endif wid = curses_get_wid(NHW_MENU); curses_create_nhmenu(wid, 0UL); @@ -379,9 +390,18 @@ curses_prev_mesg(void) for (count = 0; count < num_messages; ++count) { mesg = get_msg_line(do_lifo, count); if (mesg->turn != turn) { - if (count > 0) /* skip separator for first line */ + if (count > 0) { /* skip separator for first line */ + char sepbuf[50]; + + Strcpy(sepbuf, "---"); +#ifdef DEBUG + if (showturn == 1) + Sprintf(sepbuf, "- %ld+%ld", + (mesg->turn >> 3), (mesg->turn & 7L)); +#endif curses_add_menu(wid, &nul_glyphinfo, &Id, 0, 0, - A_NORMAL, "---", MENU_ITEMFLAGS_NONE); + A_NORMAL, sepbuf, MENU_ITEMFLAGS_NONE); + } turn = mesg->turn; } curses_add_menu(wid, &nul_glyphinfo, &Id, 0, 0, @@ -895,12 +915,10 @@ curses_getmsghistory(boolean init) void curses_putmsghistory(const char *msg, boolean restoring_msghist) { + /* FIXME: these should be moved to struct instance_globals g */ static boolean initd = FALSE; static int stash_count; static nhprev_mesg *stash_head = 0; -#ifdef DUMPLOG - /* extern unsigned g.saved_pline_index; */ /* pline.c */ -#endif if (restoring_msghist && !initd) { /* hide any messages we've gathered since starting current session @@ -918,8 +936,11 @@ curses_putmsghistory(const char *msg, boolean restoring_msghist) if (msg) { mesg_add_line(msg); - /* treat all saved and restored messages as turn #1 */ - last_mesg->turn = 1L; + /* treat all saved and restored messages as turn #1; + however, we aren't only called when restoring history; + core uses putmsghistory() for other stuff during play + and those messages should have a normal turn value */ + last_mesg->turn = restoring_msghist ? (1L << 3) : g.hero_seq; #ifdef DUMPLOG dumplogmsg(last_mesg->str); #endif