#define LEVELSETUP_FILENAME "lvlsetup.cnf"
#define LEVELINFO_FILENAME "lvlinfo.cnf"
#define LEVELFILE_EXTENSION "lvl"
-#define TAPEFILE_EXTENSION "rec"
+#define TAPEFILE_EXTENSION "tap"
#define SCOREFILE_EXTENSION "sco"
+#define ERROR_FILENAME "error.out"
#endif
/* file permissions for newly written files */
return GAME_DIR;
}
-static char *getUserDataDir()
+char *getUserDataDir()
{
static char *userdata_dir = NULL;
static char *getLevelFilename(int nr)
{
static char *filename = NULL;
- char basename[20 + strlen(LEVELFILE_EXTENSION)];
+ char basename[MAX_FILENAME_LEN];
if (filename != NULL)
free(filename);
static char *getTapeFilename(int nr)
{
static char *filename = NULL;
- char basename[20 + strlen(LEVELFILE_EXTENSION)];
+ char basename[MAX_FILENAME_LEN];
if (filename != NULL)
free(filename);
static char *getScoreFilename(int nr)
{
static char *filename = NULL;
- char basename[20 + strlen(LEVELFILE_EXTENSION)];
+ char basename[MAX_FILENAME_LEN];
if (filename != NULL)
free(filename);
int file_version = FILE_VERSION_1_2; /* last version of tape files */
int chunk_length;
+ /* always start with reliable default values (empty tape) */
+ TapeErase();
+
+ /* default values (also for pre-1.2 tapes) with only the first player */
+ tape.player_participates[0] = TRUE;
+ for(i=1; i<MAX_PLAYERS; i++)
+ tape.player_participates[i] = FALSE;
+
+ /* at least one (default: the first) player participates in every tape */
+ num_participating_players = 1;
+
if (!(file = fopen(filename, "r")))
return;
for(i=0; i<TAPE_HEADER_UNUSED; i++) /* skip unused header bytes */
fgetc(file);
- /* check which players participate in this tape recording */
+ /* since version 1.2, tapes store which players participate in the tape */
num_participating_players = 0;
for(i=0; i<MAX_PLAYERS; i++)
{
{
tape.pos[i].action[j] = MV_NO_MOVING;
- /* pre-1.2 tapes store data for only one player */
- if (file_version == FILE_VERSION_1_0 && j > 0)
- continue;
-
if (tape.player_participates[j])
tape.pos[i].action[j] = fgetc(file);
}
/* always start with reliable default values */
for(i=0; i<MAX_SCORE_ENTRIES; i++)
{
- strcpy(highscore[i].Name, EMPTY_ALIAS);
+ strcpy(highscore[i].Name, EMPTY_PLAYER_NAME);
highscore[i].Score = 0;
}
si->player_name = getStringCopy(getLoginName());
si->sound = TRUE;
- si->sound_loops = FALSE;
- si->sound_music = FALSE;
- si->sound_simple = FALSE;
+ si->sound_loops = TRUE;
+ si->sound_music = TRUE;
+ si->sound_simple = TRUE;
si->toons = TRUE;
si->double_buffering = TRUE;
si->direct_draw = !si->double_buffering;
- si->scroll_delay = FALSE;
+ si->scroll_delay = TRUE;
si->soft_scrolling = TRUE;
si->fading = FALSE;
- si->autorecord = FALSE;
+ si->autorecord = TRUE;
si->quick_doors = FALSE;
for (i=0; i<MAX_PLAYERS; i++)
chmod(filename, SETUP_PERMS);
}
+
+#ifdef MSDOS
+static boolean initErrorFile()
+{
+ char *filename;
+ FILE *error_file;
+
+ InitUserDataDirectory();
+
+ filename = getPath2(getUserDataDir(), ERROR_FILENAME);
+ error_file = fopen(filename, "w");
+ free(filename);
+
+ if (error_file == NULL)
+ return FALSE;
+
+ fclose(error_file);
+
+ return TRUE;
+}
+
+FILE *openErrorFile()
+{
+ static boolean first_access = TRUE;
+ char *filename;
+ FILE *error_file;
+
+ if (first_access)
+ {
+ if (!initErrorFile())
+ return NULL;
+
+ first_access = FALSE;
+ }
+
+ filename = getPath2(getUserDataDir(), ERROR_FILENAME);
+ error_file = fopen(filename, "a");
+ free(filename);
+
+ return error_file;
+}
+
+void dumpErrorFile()
+{
+ char *filename;
+ FILE *error_file;
+
+ filename = getPath2(getUserDataDir(), ERROR_FILENAME);
+ error_file = fopen(filename, "r");
+ free(filename);
+
+ if (error_file != NULL)
+ {
+ while (!feof(error_file))
+ fputc(fgetc(error_file), stderr);
+
+ fclose(error_file);
+ }
+}
+#endif