rnd-20040606-1-src
authorHolger Schemel <info@artsoft.org>
Sun, 6 Jun 2004 15:07:53 +0000 (17:07 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:47:18 +0000 (10:47 +0200)
* added option "convert LEVELDIR [NR]" to command line batch commands
* re-converted Supaplex levels to apply latest engine fixes
* changed "use graphic/sound of element" to "use graphic of element"
  due to compatibility problems with some levels ("bug machine" etc.)

ChangeLog
src/conftime.h
src/editor.c
src/files.c
src/files.h
src/init.c
src/main.c
src/main.h
src/tape.c

index 41bf977bce1dbd44fcfc38049d7a1f179a2f74c6..4c579db97d6bd0584dcfa4f609ce999bb66e81bc 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2004-06-06
+       * added option "convert LEVELDIR [NR]" to command line batch commands
+       * re-converted Supaplex levels to apply latest engine fixes
+       * changed "use graphic/sound of element" to "use graphic of element"
+         due to compatibility problems with some levels ("bug machine" etc.)
+
 2004-05-23
        * fixed bug with CE change replacing player with same or other player
 
index 90af2d019ab851414fd1d75ba92f103102abd088..e2b33e8d433426d98d9e12d69745e02b1cdfb648 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "[2004-05-23 22:37]"
+#define COMPILE_DATE_STRING "[2004-06-06 16:37]"
index 89363f8fcdfe23ee9967ad29ec3effed27b374cd..9236f0a910ae59ed43758a5845921672d10bb7c4 100644 (file)
@@ -2039,7 +2039,11 @@ static struct
     ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(1),
     GADGET_ID_CUSTOM_USE_GRAPHIC,      GADGET_ID_NONE,
     &custom_element.use_gfx_element,
+#if 0
     NULL, "use graphic/sound of element:", "use existing graphic and sound"
+#else
+    NULL, "use graphic of element:",   "use existing element graphic"
+#endif
   },
   {
     ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(2),
index 956a8df4019ac33a5ab23e235dac443f744b7a29..3d4670f0b0f76bedc515645cd3e1a7e234839bb7 100644 (file)
@@ -4821,3 +4821,117 @@ void LoadHelpTextInfo()
   END_HASH_ITERATION(hash, itr)
 #endif
 }
+
+
+/* ------------------------------------------------------------------------- *
+ * convert levels
+ * ------------------------------------------------------------------------- */
+
+#define MAX_NUM_CONVERT_LEVELS         1000
+
+void ConvertLevels()
+{
+  static LevelDirTree *convert_leveldir = NULL;
+  static int convert_level_nr = -1;
+  static int num_levels_handled = 0;
+  static int num_levels_converted = 0;
+  static boolean levels_failed[MAX_NUM_CONVERT_LEVELS];
+  int i;
+
+  convert_leveldir = getTreeInfoFromIdentifier(leveldir_first,
+                                              global.convert_leveldir);
+
+  if (convert_leveldir == NULL)
+    Error(ERR_EXIT, "no such level identifier: '%s'",
+         global.convert_leveldir);
+
+  leveldir_current = convert_leveldir;
+
+  if (global.convert_level_nr != -1)
+  {
+    convert_leveldir->first_level = global.convert_level_nr;
+    convert_leveldir->last_level  = global.convert_level_nr;
+  }
+
+  convert_level_nr = convert_leveldir->first_level;
+
+  printf_line("=", 79);
+  printf("Converting levels\n");
+  printf_line("-", 79);
+  printf("Level series identifier: '%s'\n", convert_leveldir->identifier);
+  printf("Level series name:       '%s'\n", convert_leveldir->name);
+  printf("Level series author:     '%s'\n", convert_leveldir->author);
+  printf("Number of levels:        %d\n",   convert_leveldir->levels);
+  printf_line("=", 79);
+  printf("\n");
+
+  for (i = 0; i < MAX_NUM_CONVERT_LEVELS; i++)
+    levels_failed[i] = FALSE;
+
+  while (convert_level_nr <= convert_leveldir->last_level)
+  {
+    char *level_filename;
+    boolean new_level;
+
+    level_nr = convert_level_nr++;
+
+    printf("Level %03d: ", level_nr);
+
+    LoadLevel(level_nr);
+    if (level.no_valid_file)
+    {
+      printf("(no level)\n");
+      continue;
+    }
+
+    printf("converting level ... ");
+
+    level_filename = getDefaultLevelFilename(level_nr);
+    new_level = !fileExists(level_filename);
+
+    if (new_level)
+    {
+      SaveLevel(level_nr);
+
+      num_levels_converted++;
+
+      printf("converted.\n");
+    }
+    else
+    {
+      if (level_nr >= 0 && level_nr < MAX_NUM_CONVERT_LEVELS)
+       levels_failed[level_nr] = TRUE;
+
+      printf("NOT CONVERTED -- LEVEL ALREADY EXISTS.\n");
+    }
+
+    num_levels_handled++;
+  }
+
+  printf("\n");
+  printf_line("=", 79);
+  printf("Number of levels handled: %d\n", num_levels_handled);
+  printf("Number of levels converted: %d (%d%%)\n", num_levels_converted,
+        (num_levels_handled ?
+         num_levels_converted * 100 / num_levels_handled : 0));
+  printf_line("-", 79);
+  printf("Summary (for automatic parsing by scripts):\n");
+  printf("LEVELDIR '%s', CONVERTED %d/%d (%d%%)",
+        convert_leveldir->identifier, num_levels_converted,
+        num_levels_handled,
+        (num_levels_handled ?
+         num_levels_converted * 100 / num_levels_handled : 0));
+
+  if (num_levels_handled != num_levels_converted)
+  {
+    printf(", FAILED:");
+    for (i = 0; i < MAX_NUM_CONVERT_LEVELS; i++)
+      if (levels_failed[i])
+       printf(" %03d", i);
+  }
+
+  printf("\n");
+  printf_line("=", 79);
+
+  CloseAllAndExit(0);
+}
index fe7be5ca939b9b687cd238b9ff8c63fcc130575f..1dffbe610ef77a0af56582303f241aab4d088e72 100644 (file)
@@ -47,4 +47,6 @@ void LoadMusicInfo();
 void LoadHelpAnimInfo();
 void LoadHelpTextInfo();
 
+void ConvertLevels(void);
+
 #endif /* FILES_H */
index bbc20e0dfbf51dbd757cfb9bce1abf97c18d1d57..02b29cdc66275026b1f57773c30654ef56a791c0 100644 (file)
@@ -3656,6 +3656,7 @@ void InitElementPropertiesEngine(int engine_version)
 static void InitGlobal()
 {
   global.autoplay_leveldir = NULL;
+  global.convert_leveldir = NULL;
 
   global.frames_per_second = 0;
   global.fps_slowdown = FALSE;
@@ -3791,6 +3792,20 @@ void Execute_Command(char *command)
       global.autoplay_level_nr = atoi(str_ptr);        /* get level_nr value */
     }
   }
+  else if (strncmp(command, "convert ", 8) == 0)
+  {
+    char *str_copy = getStringCopy(&command[8]);
+    char *str_ptr = strchr(str_copy, ' ');
+
+    global.convert_leveldir = str_copy;
+    global.convert_level_nr = -1;
+
+    if (str_ptr != NULL)
+    {
+      *str_ptr++ = '\0';                       /* terminate leveldir string */
+      global.convert_level_nr = atoi(str_ptr); /* get level_nr value */
+    }
+  }
   else
   {
     Error(ERR_EXIT_HELP, "unrecognized command '%s'", command);
@@ -4396,6 +4411,11 @@ void OpenAll()
     AutoPlayTape();
     return;
   }
+  else if (global.convert_leveldir)
+  {
+    ConvertLevels();
+    return;
+  }
 
   game_status = GAME_MODE_MAIN;
 
index e36ce905c75a66a3078721a6d4980bb54375a02b..81319ed6b8899c868f75dea121e7f51b0d9b6b44 100644 (file)
@@ -4151,7 +4151,7 @@ static void print_usage()
         "      --serveronly                 only start network server\n"
         "  -v, --verbose                    verbose mode\n"
         "      --debug                      display debugging information\n"
-        "  -e, --execute COMMAND            execute batch COMMAND:\n"
+        "  -e, --execute COMMAND            execute batch COMMAND\n"
         "\n"
         "Valid commands for '--execute' option:\n"
         "  \"print graphicsinfo.conf\"        print default graphics config\n"
@@ -4162,7 +4162,8 @@ static void print_usage()
         "  \"print helptext.conf\"            print default helptext config\n"
         "  \"dump level FILE\"                dump level data from FILE\n"
         "  \"dump tape FILE\"                 dump tape data from FILE\n"
-        "  \"autoplay LEVELDIR\"              play level tapes for LEVELDIR\n"
+        "  \"autoplay LEVELDIR [NR]\"         play level tapes for LEVELDIR\n"
+        "  \"convert LEVELDIR [NR]\"          convert levels in LEVELDIR\n"
         "\n",
         program.command_basename);
 }
index 64698879d130042567b0c561aa9dd6f9800b0f06..0bf9a3656e22650716758a556dfda283bb39f93b 100644 (file)
 #define GFX_ELEMENT(e)         (element_info[e].use_gfx_element ?      \
                                 element_info[e].gfx_element : e)
 
+/* !!! "use sound" deactivated due to problems with level "bug machine" !!! */
+/* (solution: add separate "use sound of element" to level file and editor) */
+#if 0
 #define SND_ELEMENT(e)         GFX_ELEMENT(e)
+#else
+#define SND_ELEMENT(e)         (e)
+#endif
 
 #define IS_PLAYER(x, y)                (ELEM_IS_PLAYER(StorePlayer[x][y]))
 
@@ -1585,6 +1591,9 @@ struct GlobalInfo
   char *autoplay_leveldir;
   int autoplay_level_nr;
 
+  char *convert_leveldir;
+  int convert_level_nr;
+
   int num_toons;
 
   float frames_per_second;
index fb705a9f9204bfea3fa3aaed7a6b27b5c9428cdf..66ca33c035107081a8ae9274c113ad9323db5794 100644 (file)
@@ -1304,6 +1304,7 @@ void AutoPlayTape()
   printf("LEVELDIR '%s', SOLVED %d/%d (%d%%)",
         autoplay_leveldir->identifier, num_levels_solved, num_levels_played,
         (num_levels_played ? num_levels_solved * 100 / num_levels_played :0));
+
   if (num_levels_played != num_levels_solved)
   {
     printf(", FAILED:");
@@ -1311,6 +1312,7 @@ void AutoPlayTape()
       if (levels_failed[i])
        printf(" %03d", i);
   }
+
   printf("\n");
   printf_line("=", 79);