From 2d117230ed1fcee2a880ff7e1c6bca0d980e88da Mon Sep 17 00:00:00 2001 From: "John \"Elwin\" Edwards" Date: Fri, 9 Aug 2013 09:34:07 -0700 Subject: [PATCH] Refuse to restore if the character is dead. This prevents recovering from death by killing the game between death and exit, producing an automatic save. --- arogue5/save.c | 6 ++++++ rogue3/save.c | 6 ++++++ rogue4/save.c | 10 ++++++++++ srogue/save.c | 6 ++++++ 4 files changed, 28 insertions(+) diff --git a/arogue5/save.c b/arogue5/save.c index de5b657..2f944e2 100644 --- a/arogue5/save.c +++ b/arogue5/save.c @@ -245,6 +245,12 @@ char **envp; } } + if (pstats.s_hpt <= 0) { + endwin(); + printf("This character is already dead.\n"); + return FALSE; + } + environ = envp; strcpy(file_name, file); setup(); diff --git a/rogue3/save.c b/rogue3/save.c index 37d0e94..68566d1 100644 --- a/rogue3/save.c +++ b/rogue3/save.c @@ -234,6 +234,12 @@ restore(char *file, char **envp) return FALSE; } + if (pstats.s_hpt <= 0) { + endwin(); + printf("This character is already dead.\n"); + return FALSE; + } + environ = envp; strcpy(file_name, file); setup(); diff --git a/rogue4/save.c b/rogue4/save.c index 9a4324c..9cecb4e 100644 --- a/rogue4/save.c +++ b/rogue4/save.c @@ -245,6 +245,7 @@ char **envp; if (slines > LINES) { + endwin(); printf("Sorry, original game was played on a screen with %d lines.\n",slines); printf("Current screen only has %d lines. Unable to restore game\n",LINES); return(FALSE); @@ -252,6 +253,7 @@ char **envp; if (scols > COLS) { + endwin(); printf("Sorry, original game was played on a screen with %d columns.\n",scols); printf("Current screen only has %d columns. Unable to restore game\n",COLS); return(FALSE); @@ -276,6 +278,7 @@ char **envp; #endif md_unlink(file) < 0) { + endwin(); printf("Cannot unlink file\n"); return FALSE; } @@ -288,10 +291,17 @@ char **envp; #endif if (sbuf2.st_nlink != 1 || syml) { + endwin(); printf("Cannot restore from a linked file\n"); return FALSE; } + if (pstats.s_hpt <= 0) { + endwin(); + printf("This character is already dead.\n"); + return FALSE; + } + #ifdef SIGTSTP signal(SIGTSTP, tstp); #endif diff --git a/srogue/save.c b/srogue/save.c index 437b668..e4c9d75 100644 --- a/srogue/save.c +++ b/srogue/save.c @@ -342,6 +342,12 @@ char *file, **envp; } + if (him->s_hpt <= 0) { + endwin(); + printf("This character is already dead.\n"); + return FALSE; + } + environ = envp; strcpy(file_name, file);