Mercurial > hg > early-roguelike
comparison rogue4/main.c @ 13:63b9fd7d70ce
rogue4: add -n option and system savedir
author | edwarj4 |
---|---|
date | Sat, 31 Oct 2009 01:51:52 +0000 |
parents | 9535a08ddc39 |
children | ea7372f5d314 |
comparison
equal
deleted
inserted
replaced
12:9535a08ddc39 | 13:63b9fd7d70ce |
---|---|
69 argv++; | 69 argv++; |
70 argc--; | 70 argc--; |
71 } | 71 } |
72 #endif | 72 #endif |
73 | 73 |
74 #ifdef SAVEDIR | |
75 if (argc >= 3 && !strcmp(argv[1], "-n")) | |
76 { | |
77 strncpy(whoami, argv[2], MAXSTR - 1); | |
78 whoami[MAXSTR - 1] = '\0'; /* insurance */ | |
79 use_savedir = TRUE; | |
80 /* look for savefile at SAVEDIR/UIDplayername.r4sav */ | |
81 if (snprintf(file_name, MAXSTR, "%s%d%.10s.r4sav", SAVEDIR, md_getuid(), | |
82 whoami) >= MAXSTR) | |
83 { | |
84 /* Name is too long- this shouldn't happen */ | |
85 strcpy(file_name, "rogue4.save"); | |
86 use_savedir = FALSE; | |
87 } | |
88 } | |
89 #endif | |
90 | |
74 /* | 91 /* |
75 * get home and options from environment | 92 * get home and options from environment |
76 */ | 93 */ |
77 strncpy(home, md_gethomedir(), PATH_MAX); | 94 strncpy(home, md_gethomedir(), PATH_MAX); |
78 strcpy(file_name, home); | 95 if (!use_savedir) |
79 strcat(file_name, "rogue52.sav"); | 96 { |
97 strcpy(file_name, home); | |
98 strcat(file_name, "/rogue4.save"); | |
99 } | |
80 | 100 |
81 if ((env = getenv("ROGUEOPTS")) != NULL) | 101 if ((env = getenv("ROGUEOPTS")) != NULL) |
82 parse_opts(env); | 102 parse_opts(env); |
83 if (env == NULL || whoami[0] == '\0') | 103 if (!use_savedir && (env == NULL || whoami[0] == '\0')) |
84 strucpy(whoami, md_getusername(md_getuid()), strlen(md_getusername(md_getuid()))); | 104 strucpy(whoami, md_getusername(md_getuid()), strlen(md_getusername(md_getuid()))); |
85 if (env == NULL || fruit[0] == '\0') | 105 if (env == NULL || fruit[0] == '\0') |
86 strcpy(fruit, "slime-mold"); | 106 strcpy(fruit, "slime-mold"); |
87 | 107 |
88 /* | 108 /* |
94 noscore = TRUE; | 114 noscore = TRUE; |
95 score(0, -1); | 115 score(0, -1); |
96 exit(0); | 116 exit(0); |
97 } | 117 } |
98 init_check(); /* check for legal startup */ | 118 init_check(); /* check for legal startup */ |
99 if (argc == 2) | 119 |
120 if (use_savedir) | |
121 { | |
122 /* Try to restore from file_name which we just set up. */ | |
123 if (!restore(file_name, envp)) | |
124 exit(1); | |
125 /* If restore() returns true, the system savefile doesn't exist. | |
126 So we'll start a new game. */ | |
127 } | |
128 else if (argc == 2) | |
129 { | |
100 if (!restore(argv[1], envp)) /* Note: restore will never return */ | 130 if (!restore(argv[1], envp)) /* Note: restore will never return */ |
101 { | 131 { |
102 endwin(); | 132 endwin(); |
103 exit(1); | 133 exit(1); |
104 } | 134 } |
135 } | |
136 | |
137 if (!use_savedir) | |
138 md_normaluser(); | |
139 | |
105 lowtime = (int) time(NULL); | 140 lowtime = (int) time(NULL); |
106 | 141 |
107 #ifdef WIZARD | 142 #ifdef WIZARD |
108 noscore = wizard; | 143 noscore = wizard; |
109 #endif | 144 #endif |