rogue4: add -n option and system savedir

This commit is contained in:
John "Elwin" Edwards 2009-10-31 01:51:52 +00:00
parent 9f62c197cc
commit 18a08fce7e
6 changed files with 53 additions and 8 deletions

View file

@ -26,13 +26,14 @@ CFILES= vers.c extern.c armor.c chase.c command.c daemon.c daemons.c \
MISC= Makefile LICENSE.TXT rogue.6 rogue.me
CC = gcc
CFLAGS= -O3
CFLAGS= -O3 -DSAVEDIR=\"/usr/local/games/roguelike/rogue4save/\"
CRLIB = -lcurses
RM = rm -f
TAR = tar
SCOREFILE=
SF=-DSCOREFILE=\"rogue52.scr\" -DLOCKFILE=\"rogue52.lck\"
SF=-DSCOREFILE=\"/usr/local/games/roguelike/rogue4.scr\" \
-DLOCKFILE=\"/usr/local/games/roguelike/rogue4.lck\"
NAMELIST=
NL=
#MACHDEP= -DMAXLOAD=40 -DLOADAV -DCHECKTIME=4

View file

@ -32,6 +32,7 @@ bool running = FALSE; /* True if player is running */
bool save_msg = TRUE; /* Remember last msg */
bool slow_invent = FALSE; /* Inventory one line at a time */
bool terse = FALSE; /* True if we should be short */
bool use_savedir = FALSE; /* True if using system savefile area */
#ifdef WIZARD
bool wizard = FALSE; /* True if allows wizard commands */
#endif

View file

@ -28,7 +28,7 @@
extern bool after, amulet, askme, door_stop, fight_flush,
firstmove, in_shell, jump, noscore, p_know[], passgo,
playing, r_know[], running, s_know[], save_msg,
slow_invent, terse, wizard, ws_know[];
slow_invent, terse, use_savedir, wizard, ws_know[];
extern const char *p_colors[], *r_stones[], *w_names[],

View file

@ -77,7 +77,9 @@ open_score()
#else
fd = -1;
#endif
md_normaluser();
if (!use_savedir)
md_normaluser();
return;
}
/*

View file

@ -71,16 +71,36 @@ char **envp;
}
#endif
#ifdef SAVEDIR
if (argc >= 3 && !strcmp(argv[1], "-n"))
{
strncpy(whoami, argv[2], MAXSTR - 1);
whoami[MAXSTR - 1] = '\0'; /* insurance */
use_savedir = TRUE;
/* look for savefile at SAVEDIR/UIDplayername.r4sav */
if (snprintf(file_name, MAXSTR, "%s%d%.10s.r4sav", SAVEDIR, md_getuid(),
whoami) >= MAXSTR)
{
/* Name is too long- this shouldn't happen */
strcpy(file_name, "rogue4.save");
use_savedir = FALSE;
}
}
#endif
/*
* get home and options from environment
*/
strncpy(home, md_gethomedir(), PATH_MAX);
strcpy(file_name, home);
strcat(file_name, "rogue52.sav");
if (!use_savedir)
{
strcpy(file_name, home);
strcat(file_name, "/rogue4.save");
}
if ((env = getenv("ROGUEOPTS")) != NULL)
parse_opts(env);
if (env == NULL || whoami[0] == '\0')
if (!use_savedir && (env == NULL || whoami[0] == '\0'))
strucpy(whoami, md_getusername(md_getuid()), strlen(md_getusername(md_getuid())));
if (env == NULL || fruit[0] == '\0')
strcpy(fruit, "slime-mold");
@ -96,12 +116,27 @@ char **envp;
exit(0);
}
init_check(); /* check for legal startup */
if (argc == 2)
if (use_savedir)
{
/* Try to restore from file_name which we just set up. */
if (!restore(file_name, envp))
exit(1);
/* If restore() returns true, the system savefile doesn't exist.
So we'll start a new game. */
}
else if (argc == 2)
{
if (!restore(argv[1], envp)) /* Note: restore will never return */
{
endwin();
exit(1);
}
}
if (!use_savedir)
md_normaluser();
lowtime = (int) time(NULL);
#ifdef WIZARD

View file

@ -197,6 +197,12 @@ char **envp;
if ((inf = open(file, 0)) < 0)
{
if (use_savedir && errno == ENOENT)
{
/* We're using a system savefile which doesn't exist.
This isn't a fatal error, it means start a new game. */
return TRUE;
}
perror(file);
return FALSE;
}