--- src/end.c 2004-06-04 13:24:40.000000000 +0300 +++ src/end.c 2006-06-26 10:07:56.000000000 +0300 @@ -44,6 +44,8 @@ STATIC_DCL void FDECL(savelife, (int)); void FDECL(list_vanquished, (CHAR_P,BOOLEAN_P)); #ifdef DUMP_LOG +extern char msgs[][BUFSZ]; +extern int lastmsg; extern void NDECL(dump_spells); void FDECL(do_vanquished, (int, BOOLEAN_P, BOOLEAN_P)); STATIC_DCL void FDECL(list_genocided, (int, BOOLEAN_P, BOOLEAN_P)); @@ -683,6 +685,7 @@ #endif struct obj *corpse = (struct obj *)0; long umoney; + int i; if (how == TRICKED) { if (killer) { @@ -877,8 +880,23 @@ if (have_windows) display_nhwindow(WIN_MESSAGE, FALSE); - if (strcmp(flags.end_disclose, "none") && how != PANICKED) + if (strcmp(flags.end_disclose, "none") && how != PANICKED) { disclose(how, taken); +#if defined(DUMP_LOG) && defined(DUMPMSGS) + if (lastmsg >= 0) { + dump ("", "Latest messages"); + for (i = lastmsg + 1; i < DUMPMSGS; i++) { + if (msgs[i] && strcmp(msgs[i], "") ) + dump (" ", msgs[i]); + } + for (i = 0; i <= lastmsg; i++) { + if (msgs[i] && strcmp(msgs[i], "") ) + dump (" ", msgs[i]); + } + dump ("",""); + } +#endif + } /* finish_paybill should be called after disclosure but before bones */ if (bones_ok && taken) finish_paybill(); #ifdef DEATH_EXPLORE --- src/pline.c 2003-12-08 01:39:13.000000000 +0200 +++ src/pline.c 2007-01-29 10:07:57.000000000 +0300 @@ -15,6 +15,11 @@ static char *FDECL(You_buf, (int)); +#if defined(DUMP_LOG) && defined(DUMPMSGS) +char msgs[DUMPMSGS][BUFSZ]; +int lastmsg = -1; +#endif + /*VARARGS1*/ /* Note that these declarations rely on knowledge of the internals * of the variable argument handling stuff in "tradstdc.h" @@ -55,6 +60,12 @@ Vsprintf(pbuf,line,VA_ARGS); line = pbuf; } +#if defined(DUMP_LOG) && defined(DUMPMSGS) + if (DUMPMSGS > 0 && !program_state.gameover) { + lastmsg = (lastmsg + 1) % DUMPMSGS; + strncpy(msgs[lastmsg], line, BUFSZ); + } +#endif if (!iflags.window_inited) { raw_print(line); return;