Mercurial > hg > early-roguelike
changeset 64:a98834ce7e04
arogue5: add the savedir feature.
author | elwin |
---|---|
date | Fri, 10 Aug 2012 05:16:08 +0000 |
parents | 0ed67132cf10 |
children | 7aff18a8d508 |
files | arogue5/mach_dep.h arogue5/main.c arogue5/rogue.c arogue5/rogue.h arogue5/save.c |
diffstat | 5 files changed, 40 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/arogue5/mach_dep.h Thu Aug 09 22:58:48 2012 +0000 +++ b/arogue5/mach_dep.h Fri Aug 10 05:16:08 2012 +0000 @@ -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
--- a/arogue5/main.c Thu Aug 09 22:58:48 2012 +0000 +++ b/arogue5/main.c Fri Aug 10 05:16:08 2012 +0000 @@ -57,10 +57,29 @@ 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 @@ strcat(score_file,"/"); strcat(score_file, "arogue58.scr"); +#endif if ((env = getenv("ROGUEOPTS")) != NULL) parse_opts(env); @@ -139,7 +159,15 @@ 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);
--- a/arogue5/rogue.c Thu Aug 09 22:58:48 2012 +0000 +++ b/arogue5/rogue.c Fri Aug 10 05:16:08 2012 +0000 @@ -114,6 +114,7 @@ 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 */
--- a/arogue5/rogue.h Thu Aug 09 22:58:48 2012 +0000 +++ b/arogue5/rogue.h Fri Aug 10 05:16:08 2012 +0000 @@ -1096,6 +1096,7 @@ 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 */