fixed player entering pot when using smooth movement
[rocksndiamonds.git] / src / files.c
index 451edb8bd45e879c46f4ef4f7262758cdd1d8202..e15996394b425f80a04db6a99e767ecbe97c4c8f 100644 (file)
@@ -274,7 +274,7 @@ static struct LevelFileConfigInfo chunk_config_INFO[] =
   {
     -1,                                        -1,
     TYPE_INTEGER,                      CONF_VALUE_16_BIT(6),
-    &li.bd_cycle_delay_ms,             200
+    &li.bd_cycle_delay_ms,             160
   },
   {
     -1,                                        -1,
@@ -2675,13 +2675,18 @@ static void ActivateLevelTemplate(void)
   }
 }
 
+boolean isLevelsetFilename_BD(char *filename)
+{
+  return (strSuffixLower(filename, ".bd") ||
+         strSuffixLower(filename, ".bdr") ||
+         strSuffixLower(filename, ".brc") ||
+         strSuffixLower(filename, ".gds"));
+}
+
 static boolean checkForPackageFromBasename_BD(char *basename)
 {
   // check for native BD level file extensions
-  if (!strSuffixLower(basename, ".bd") &&
-      !strSuffixLower(basename, ".bdr") &&
-      !strSuffixLower(basename, ".brc") &&
-      !strSuffixLower(basename, ".gds"))
+  if (!isLevelsetFilename_BD(basename))
     return FALSE;
 
   // check for standard single-level BD files (like "001.bd")
@@ -4639,9 +4644,12 @@ static void CopyNativeLevel_BD_to_RND(struct LevelInfo *level)
   SetDefaultLevelColors_BD();
 
   // level name
-  char *cave_name = getStringPrint("%s / %d", cave->name, bd_level_nr + 1);
+  char *cave_name_latin1 = getLatin1FromUTF8(cave->name);
+  char *cave_name_final = (gd_caveset_has_levels() ?
+                           getStringPrint("%s / %d", cave_name_latin1, bd_level_nr + 1) :
+                           getStringCopy(cave_name_latin1));
 
-  strncpy(level->name, cave_name, MAX_LEVEL_NAME_LEN);
+  strncpy(level->name, cave_name_final, MAX_LEVEL_NAME_LEN);
   level->name[MAX_LEVEL_NAME_LEN] = '\0';
 
   // playfield elements
@@ -4649,7 +4657,8 @@ static void CopyNativeLevel_BD_to_RND(struct LevelInfo *level)
     for (y = 0; y < level->fieldy; y++)
       level->field[x][y] = CAVE_TO_LEVEL(cave->map[y][x]);
 
-  checked_free(cave_name);
+  checked_free(cave_name_latin1);
+  checked_free(cave_name_final);
 }
 
 static void setTapeInfoToDefaults(void);
@@ -9036,6 +9045,46 @@ void DumpLevels(void)
   CloseAllAndExit(0);
 }
 
+void DumpLevelsetFromFilename_BD(char *filename)
+{
+  if (leveldir_current == NULL)        // no levelsets loaded yet
+    bd_open_all();
+
+  if (!LoadNativeLevel_BD(filename, 0, FALSE))
+    CloseAllAndExit(0);                // function has already printed warning
+
+  PrintLine("-", 79);
+  Print("Levelset '%s'\n", filename);
+  PrintLine("-", 79);
+
+  DumpLevelset_BD();
+
+  PrintLine("-", 79);
+
+  CloseAllAndExit(0);
+}
+
+void DumpLevelset(void)
+{
+  static LevelDirTree *dumplevelset_leveldir = NULL;
+
+  dumplevelset_leveldir = getTreeInfoFromIdentifier(leveldir_first,
+                                                    global.dumplevelset_leveldir);
+  if (dumplevelset_leveldir == NULL)
+    Fail("no such level identifier: '%s'", global.dumplevelset_leveldir);
+
+  PrintLine("-", 79);
+  Print("Levelset '%s'\n", dumplevelset_leveldir->identifier);
+  PrintLine("-", 79);
+
+  Print("Number of levels:   %d\n", dumplevelset_leveldir->levels);
+  Print("First level number: %d\n", dumplevelset_leveldir->first_level);
+
+  PrintLine("-", 79);
+
+  CloseAllAndExit(0);
+}
+
 
 // ============================================================================
 // tape file functions
@@ -10797,7 +10846,7 @@ static struct TokenInfo global_setup_tokens[] =
   },
   {
     TYPE_SWITCH_3_STATES,
-    &setup.bd_skip_falling_sounds,             "bd_skip_falling_sounds"
+    &setup.bd_falling_sounds,                  "bd_falling_sounds"
   },
   {
     TYPE_INTEGER,
@@ -11015,6 +11064,10 @@ static struct TokenInfo editor_setup_tokens[] =
     TYPE_SWITCH,
     &setup.editor.show_element_token,          "editor.show_element_token"
   },
+  {
+    TYPE_SWITCH,
+    &setup.editor.fast_game_start,             "editor.fast_game_start"
+  },
   {
     TYPE_SWITCH,
     &setup.editor.show_read_only_warning,      "editor.show_read_only_warning"
@@ -11661,10 +11714,10 @@ static void setSetupInfoToDefaults(struct SetupInfo *si)
   si->bd_skip_hatching = FALSE;
   si->bd_scroll_delay = TRUE;
   si->bd_show_invisible_outbox = FALSE;
-  si->bd_smooth_movements = STATE_AUTO;
+  si->bd_smooth_movements = STATE_TRUE;
   si->bd_pushing_graphics = STATE_TRUE;
   si->bd_up_down_graphics = STATE_TRUE;
-  si->bd_skip_falling_sounds = STATE_AUTO;
+  si->bd_falling_sounds = STATE_AUTO;
   si->bd_palette_c64 = GD_DEFAULT_PALETTE_C64;
   si->bd_palette_c64dtv = GD_DEFAULT_PALETTE_C64DTV;
   si->bd_palette_atari = GD_DEFAULT_PALETTE_ATARI;
@@ -11777,6 +11830,7 @@ static void setSetupInfoToDefaults(struct SetupInfo *si)
   si->editor.el_headlines              = TRUE;
 
   si->editor.show_element_token                = FALSE;
+  si->editor.fast_game_start           = FALSE;
 
   si->editor.show_read_only_warning    = TRUE;