rnd-19990604-1-src
[rocksndiamonds.git] / src / files.c
index d3e85c3f1417f0fd713d6011d047e1e623c1bb68..7e1ad30bc6dafa99c5a9478dc6929c6a34b41678 100644 (file)
 static void SaveUserLevelInfo();               /* for 'InitUserLevelDir()' */
 static char *getSetupLine(char *, int);                /* for 'SaveUserLevelInfo()' */
 
-static char *getGlobalDataDir()
-{
-  return GAME_DIR;
-}
-
 char *getUserDataDir()
 {
   static char *userdata_dir = NULL;
@@ -178,7 +173,7 @@ static char *getTapeDir(char *level_subdir)
 static char *getScoreDir(char *level_subdir)
 {
   static char *score_dir = NULL;
-  char *data_dir = getGlobalDataDir();
+  char *data_dir = options.rw_base_directory;
   char *score_subdir = SCORES_DIRECTORY;
 
   if (score_dir)
@@ -493,6 +488,9 @@ void LoadLevel(int level_nr)
     Error(ERR_WARN, "using high speed movement for player");
     level.double_speed = TRUE;
   }
+
+  /* determine border element for this level */
+  SetBorderElement();
 }
 
 void SaveLevel(int level_nr)
@@ -829,15 +827,15 @@ void LoadScore(int level_nr)
     fscanf(file, "%d", &highscore[i].Score);
     fgets(line, MAX_LINE_LEN, file);
 
-    if (line[strlen(line)-1] == '\n')
-      line[strlen(line)-1] = '\0';
+    if (line[strlen(line) - 1] == '\n')
+      line[strlen(line) - 1] = '\0';
 
     for (line_ptr = line; *line_ptr; line_ptr++)
     {
       if (*line_ptr != ' ' && *line_ptr != '\t' && *line_ptr != '\0')
       {
-       strncpy(highscore[i].Name, line_ptr, MAX_NAMELEN - 1);
-       highscore[i].Name[MAX_NAMELEN - 1] = '\0';
+       strncpy(highscore[i].Name, line_ptr, MAX_PLAYER_NAME_LEN);
+       highscore[i].Name[MAX_PLAYER_NAME_LEN] = '\0';
        break;
       }
     }
@@ -977,6 +975,7 @@ static struct
 
   /* level directory info */
   { TYPE_STRING,  &ldi.name,           "name"                          },
+  { TYPE_STRING,  &ldi.name_short,     "name_short"                    },
   { TYPE_STRING,  &ldi.author,         "author"                        },
   { TYPE_INTEGER, &ldi.levels,         "levels"                        },
   { TYPE_INTEGER, &ldi.first_level,    "first_level"                   },
@@ -1242,6 +1241,7 @@ static void checkSetupFileListIdentifier(struct SetupFileList *setup_file_list,
 static void setLevelDirInfoToDefaults(struct LevelDirInfo *ldi)
 {
   ldi->name = getStringCopy(ANONYMOUS_NAME);
+  ldi->name_short = NULL;
   ldi->author = getStringCopy(ANONYMOUS_NAME);
   ldi->levels = 0;
   ldi->first_level = 0;
@@ -1464,6 +1464,10 @@ static int LoadLevelInfoFromLevelDir(char *level_directory, int start_entry)
        setSetupInfo(i, getTokenValue(setup_file_list, token_info[i].text));
       leveldir[current_entry] = ldi;
 
+      if (leveldir[current_entry].name_short == NULL)
+       leveldir[current_entry].name_short =
+         getStringCopy(leveldir[current_entry].name);
+
       leveldir[current_entry].filename = getStringCopy(dir_entry->d_name);
       leveldir[current_entry].last_level =
        leveldir[current_entry].first_level +
@@ -1534,6 +1538,7 @@ static void SaveUserLevelInfo()
   setLevelDirInfoToDefaults(&ldi);
 
   ldi.name = getLoginName();
+  ldi.name_short = getLoginName();
   ldi.author = getRealName();
   ldi.levels = 100;
   ldi.first_level = 1;
@@ -1574,11 +1579,11 @@ void LoadSetup()
     freeSetupFileList(setup_file_list);
 
     /* needed to work around problems with fixed length strings */
-    if (strlen(setup.player_name) >= MAX_NAMELEN)
-      setup.player_name[MAX_NAMELEN - 1] = '\0';
-    else if (strlen(setup.player_name) < MAX_NAMELEN - 1)
+    if (strlen(setup.player_name) > MAX_PLAYER_NAME_LEN)
+      setup.player_name[MAX_PLAYER_NAME_LEN] = '\0';
+    else if (strlen(setup.player_name) < MAX_PLAYER_NAME_LEN)
     {
-      char *new_name = checked_malloc(MAX_NAMELEN);
+      char *new_name = checked_malloc(MAX_PLAYER_NAME_LEN + 1);
 
       strcpy(new_name, setup.player_name);
       free(setup.player_name);