arogue5: add the savedir feature.

This commit is contained in:
John "Elwin" Edwards 2012-08-10 05:16:08 +00:00
parent 14fad3b319
commit 38a8534eb5
5 changed files with 40 additions and 4 deletions

View file

@ -25,7 +25,8 @@
/*
* where scorefile should live
*/
#define SCOREFILE "/bnr/contrib/lib/rogue/scorefile"
#define SCOREFILE "/var/local/games/roguelike/arogue5.scr"
#define SAVEDIR "/var/local/games/roguelike/arogue5save/"
/*
* Variables for checking to make sure the system isn't too loaded

View file

@ -57,10 +57,29 @@ char **envp;
strncpy(home,md_gethomedir(),LINELEN);
#ifdef SAVEDIR
if (argc >= 3 && !strcmp(argv[1], "-n")) {
use_savedir = TRUE;
strncpy(whoami, argv[2], LINELEN);
whoami[LINELEN - 1] = '\0';
if (snprintf(file_name, LINELEN, "%s%d-%.10s.ar5sav", SAVEDIR,
md_getuid(), whoami) >= LINELEN)
{
/* The name is too long */
use_savedir = FALSE;
}
}
#endif
/* Get default save file */
strcpy(file_name, home);
strcat(file_name, "arogue58.sav");
if (!use_savedir) {
strcpy(file_name, home);
strcat(file_name, "arogue58.sav");
}
#ifdef SCOREFILE
strncpy(score_file, SCOREFILE, LINELEN);
score_file[LINELEN - 1] = '\0';
#else
/* Get default score file */
strcpy(score_file, roguedir);
@ -68,6 +87,7 @@ char **envp;
strcat(score_file,"/");
strcat(score_file, "arogue58.scr");
#endif
if ((env = getenv("ROGUEOPTS")) != NULL)
parse_opts(env);
@ -139,7 +159,15 @@ char **envp;
exit(1);
}
#endif
if (argc == 2)
if (use_savedir)
{
/* Try to restore from file_name first. */
if (!restore(file_name, envp))
exit(1);
/* If restore() returns true, there is no such saved game.
So start a new one. */
}
else if (argc == 2)
if (!restore(argv[1], envp)) /* Note: restore will never return */
exit(1);
lowtime = (int) time(&now);

View file

@ -114,6 +114,7 @@ bool firstmove = FALSE;
bool askme = FALSE;
bool in_shell = FALSE;
bool daytime = TRUE;
bool use_savedir = FALSE;
coord delta; /* Change indicated to get_dir() */
LEVTYPE levtype; /* type of level i'm on */

View file

@ -1096,6 +1096,7 @@ extern bool ws_know[]; /* Does he know what a stick does */
extern bool m_know[]; /* Does he know what a MM does */
extern bool in_shell; /* True if executing a shell */
extern bool daytime; /* Indicates whether it is daytime */
extern bool use_savedir; /* True if using systemwide save area */
extern coord oldpos; /* Position before last look() call */
extern coord delta; /* Change indicated to get_dir() */
extern coord grid[]; /* used for random pos generation */

View file

@ -152,6 +152,11 @@ char **envp;
if ((inf = open(file, O_RDONLY)) < 0)
{
if (use_savedir && errno == ENOENT)
{
/* No such game in SAVEDIR */
return TRUE;
}
perror(file);
return FALSE;
}