rnd-20020907-1-src
authorHolger Schemel <info@artsoft.org>
Sat, 7 Sep 2002 10:07:47 +0000 (12:07 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:38:19 +0000 (10:38 +0200)
Makefile
src/conftime.h
src/init.c
src/libgame/image.c
src/libgame/image.h
src/libgame/misc.c
src/libgame/sound.c
src/libgame/sound.h
src/libgame/system.h
src/main.c
src/main.h

index 96b73c56520626702994a3b00c6a0a38ffb3175d..f4921768319dae2ee6a07e5b020a069d7cab3f18 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -89,6 +89,9 @@ clean:
 run:
        @$(MAKE_CMD) TARGET=$(DEFAULT_TARGET) && ./rocksndiamonds --verbose
 
+gdb:
+       @$(MAKE_CMD) TARGET=$(DEFAULT_TARGET) && gdb ./rocksndiamonds
+
 backup:
        ./Scripts/make_backup.sh src
 
index 8e53e013100160ee28665ea7ede11c9e4847f9a9..0be54307f697b1b46ac92288cc778481e7e2e856 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "[2002-09-06 22:45]"
+#define COMPILE_DATE_STRING "[2002-09-07 12:06]"
index bb5dd45075a1945b90d2acf65df2a00fbda6c391..4c49a23762f59494ae018bca325f64fafc1ee85d 100644 (file)
@@ -55,6 +55,7 @@ static void InitGadgets(void);
 static void InitElementProperties(void);
 static void InitElementInfo(void);
 static void InitGraphicInfo(void);
+static void InitSoundInfo();
 static void Execute_Debug_Command(char *);
 
 void OpenAll(void)
@@ -175,37 +176,19 @@ void InitNetworkServer()
 
 static void InitImages()
 {
-  static char *suffix_list[] =
-  {
-    ".frame_xpos",
-    ".frame_ypos",
-    ".num_frames",
-    NULL
-  };
-
-  image_files =
-    getFileListFromConfigList(image_config, suffix_list, NUM_IMAGE_FILES);
-
-  InitImageList(image_files, NUM_IMAGE_FILES);
+  InitImageList(image_config, image_config_suffix, NUM_IMAGE_FILES);
 
   /* load custom images */
   ReloadCustomImages();
+
   InitGraphicInfo();
 }
 
 static void InitMixer()
 {
-  static char *suffix_list[] =
-  {
-    NULL
-  };
-
   OpenAudio();
 
-  sound_files =
-    getFileListFromConfigList(sound_config, suffix_list, NUM_SOUND_FILES);
-
-  InitSoundList(sound_files, NUM_SOUND_FILES);
+  InitSoundList(sound_config, sound_config_suffix, NUM_SOUND_FILES);
 
   StartMixer();
 }
@@ -216,8 +199,7 @@ static void InitSound()
   InitReloadSounds(artwork.snd_current->identifier);
   InitReloadMusic(artwork.mus_current->identifier);
 
-  /* initialize sound effect lookup table for element actions */
-  InitGameSound();
+  InitSoundInfo();
 }
 
 static void InitTileClipmasks()
@@ -869,13 +851,15 @@ void InitElementInfo()
   }
 }
 
-void InitGraphicInfo()
+static void InitGraphicInfo()
 {
   int i;
 
-  /* always start with reliable default values */
+  image_files = getCurrentImageList();
+
   for(i=0; i<MAX_GRAPHICS; i++)
   {
+    /* always start with reliable default values */
     graphic_info[i].bitmap = NULL;
     graphic_info[i].src_x = 0;
     graphic_info[i].src_y = 0;
@@ -888,6 +872,14 @@ void InitGraphicInfo()
   }
 }
 
+static void InitSoundInfo()
+{
+  sound_files = getCurrentSoundList();
+
+  /* initialize sound effect lookup table for element actions */
+  InitGameSound();
+}
+
 void InitElementProperties()
 {
   int i, j;
index ec8b0fdcbee349129df4d8dccd91d2bb11d305fb..a65eb20dbb800368485d57def0dddd051236c328 100644 (file)
@@ -695,19 +695,35 @@ static void FreeImage(void *ptr)
   free(image);
 }
 
-void InitImageList(struct FileInfo *file_list, int num_list_entries)
+struct FileInfo *getCurrentImageList()
 {
-  if (image_info == NULL)
-    image_info = checked_calloc(sizeof(struct ArtworkListInfo));
+  return image_info->file_list;
+}
 
-  if (image_info->artwork_list == NULL)
-    image_info->artwork_list =
-      checked_calloc(num_list_entries * sizeof(ImageInfo *));
+void InitImageList(struct ConfigInfo *config_list, char *config_suffix_list[],
+                  int num_file_list_entries)
+{
+  int i;
+
+  image_info = checked_calloc(sizeof(struct ArtworkListInfo));
 
   image_info->type = ARTWORK_TYPE_GRAPHICS;
-  image_info->num_list_entries = num_list_entries;
-  image_info->file_list = file_list;
+
+  image_info->num_file_list_entries = num_file_list_entries;
+  image_info->num_suffix_list_entries = 0;
+  for (i=0; config_suffix_list[i] != NULL; i++)
+    image_info->num_suffix_list_entries++;
+
+  image_info->file_list =
+    getFileListFromConfigList(config_list, config_suffix_list,
+                             num_file_list_entries);
+  image_info->suffix_list = config_suffix_list;
+
+  image_info->artwork_list =
+    checked_calloc(num_file_list_entries * sizeof(ImageInfo *));
+
   image_info->content_list = NULL;
+
   image_info->load_artwork = Load_PCX;
   image_info->free_artwork = FreeImage;
 }
index f96b61708ddbe6e5305a07f64489f3f11d0bd74d..b968fee16623e5ef2e44c6b0d7253c4ff2706fc8 100644 (file)
@@ -72,7 +72,8 @@ int Read_PCX_to_Pixmap(Display *, Window, GC, char *, Pixmap *, Pixmap *);
 #endif /* TARGET_X11 */
 
 
-void InitImageList(struct FileInfo *, int);
+struct FileInfo *getCurrentImageList();
+void InitImageList(struct ConfigInfo *, char **, int);
 void ReloadCustomImages();
 void FreeAllImages();
 
index 5d4a4acc4b2474792327e10fdf44dde90f3fb0c2..3c61d46dd77a1dd033383856ec5371fce1ca61bb 100644 (file)
@@ -1350,13 +1350,35 @@ boolean FileIsArtworkType(char *basename, int type)
 
 struct FileInfo *getFileListFromConfigList(struct ConfigInfo *config_list,
                                           char *suffix_list[],
-                                          int num_list_entries)
+                                          int num_file_list_entries)
 {
-  struct FileInfo *file_list =
-    checked_calloc(num_list_entries * sizeof(struct FileInfo));
-  int list_pos = 0;
+  struct FileInfo *file_list;
+  int num_suffix_list_entries = 0;
+  int list_pos = -1;
   int i, j;
 
+  file_list = checked_calloc(num_file_list_entries * sizeof(struct FileInfo));
+
+  for (i=0; suffix_list[i] != NULL; i++)
+    num_suffix_list_entries++;
+
+  if (num_suffix_list_entries > 0)
+  {
+    for (i=0; i<num_file_list_entries; i++)
+    {
+      file_list[i].default_parameter =
+       checked_calloc(num_suffix_list_entries * sizeof(int));
+      file_list[i].parameter =
+       checked_calloc(num_suffix_list_entries * sizeof(int));
+
+      for (j=0; j<num_suffix_list_entries; j++)
+      {
+       file_list[i].default_parameter[j] = -1;
+       file_list[i].parameter[j] = -1;
+      }
+    }
+  }
+
   for (i=0; config_list[i].token != NULL; i++)
   {
     int len_config_token = strlen(config_list[i].token);
@@ -1370,6 +1392,8 @@ struct FileInfo *getFileListFromConfigList(struct ConfigInfo *config_list,
          strcmp(&config_list[i].token[len_config_token - len_suffix],
                 suffix_list[j]) == 0)
       {
+       file_list[list_pos].default_parameter[j] = atoi(config_list[i].value);
+
        is_file_entry = FALSE;
        break;
       }
@@ -1377,17 +1401,17 @@ struct FileInfo *getFileListFromConfigList(struct ConfigInfo *config_list,
 
     if (is_file_entry)
     {
-      if (list_pos >= num_list_entries)
+      list_pos++;
+
+      if (list_pos >= num_file_list_entries)
        Error(ERR_EXIT, "inconsistant config list information -- please fix");
 
       file_list[list_pos].token = config_list[i].token;
       file_list[list_pos].default_filename = config_list[i].value;
-
-      list_pos++;
     }
   }
 
-  if (list_pos != num_list_entries)
+  if (list_pos != num_file_list_entries - 1)
     Error(ERR_EXIT, "inconsistant config list information -- please fix");
 
   return file_list;
@@ -1395,33 +1419,41 @@ struct FileInfo *getFileListFromConfigList(struct ConfigInfo *config_list,
 
 static void LoadArtworkConfig(struct ArtworkListInfo *artwork_info)
 {
-  int num_list_entries = artwork_info->num_list_entries;
+  int num_file_list_entries = artwork_info->num_file_list_entries;
+  int num_suffix_list_entries = artwork_info->num_suffix_list_entries;
   struct FileInfo *file_list = artwork_info->file_list;
   char *filename = getCustomArtworkConfigFilename(artwork_info->type);
   struct SetupFileList *setup_file_list;
-  int i;
+  int i, j;
 
 #if 0
   printf("GOT CUSTOM ARTWORK CONFIG FILE '%s'\n", filename);
 #endif
 
   /* always start with reliable default values */
-  for (i=0; i<num_list_entries; i++)
+  for (i=0; i<num_file_list_entries; i++)
+  {
     file_list[i].filename = NULL;
 
+    for (j=0; j<num_suffix_list_entries; j++)
+    {
+      file_list[i].parameter[j] = file_list[i].default_parameter[j];
+    }
+  }
+
   if (filename == NULL)
     return;
 
   if ((setup_file_list = loadSetupFileList(filename)))
   {
-    for (i=0; i<num_list_entries; i++)
+    for (i=0; i<num_file_list_entries; i++)
       file_list[i].filename =
        getStringCopy(getTokenValue(setup_file_list, file_list[i].token));
 
     freeSetupFileList(setup_file_list);
 
 #if 0
-    for (i=0; i<num_list_entries; i++)
+    for (i=0; i<num_file_list_entries; i++)
     {
       printf("'%s' ", file_list[i].token);
       if (file_list[i].filename)
@@ -1528,7 +1560,7 @@ static void LoadArtworkToList(struct ArtworkListInfo *artwork_info,
                              char *basename, int list_pos)
 {
   if (artwork_info->artwork_list == NULL ||
-      list_pos >= artwork_info->num_list_entries)
+      list_pos >= artwork_info->num_file_list_entries)
     return;
 
 #if 0
@@ -1560,7 +1592,7 @@ void ReloadCustomArtworkList(struct ArtworkListInfo *artwork_info)
     { "Loading music:",                TRUE }
   };
 
-  int num_list_entries = artwork_info->num_list_entries;
+  int num_file_list_entries = artwork_info->num_file_list_entries;
   struct FileInfo *file_list = artwork_info->file_list;
   int i;
 
@@ -1570,10 +1602,10 @@ void ReloadCustomArtworkList(struct ArtworkListInfo *artwork_info)
     DrawInitText(draw_init[artwork_info->type].text, 120, FC_GREEN);
 
 #if 0
-  printf("DEBUG: reloading %d sounds ...\n", num_list_entries);
+  printf("DEBUG: reloading %d sounds ...\n", num_file_list_entries);
 #endif
 
-  for(i=0; i<num_list_entries; i++)
+  for(i=0; i<num_file_list_entries; i++)
   {
     if (draw_init[artwork_info->type].do_it)
       DrawInitText(file_list[i].token, 150, FC_YELLOW);
@@ -1607,7 +1639,7 @@ void FreeCustomArtworkList(struct ArtworkListInfo *artwork_info)
         IS_CHILD_PROCESS(audio.mixer_pid) ? "CHILD" : "PARENT");
 #endif
 
-  for(i=0; i<artwork_info->num_list_entries; i++)
+  for(i=0; i<artwork_info->num_file_list_entries; i++)
     deleteArtworkListEntry(artwork_info, &artwork_info->artwork_list[i]);
 
 #if 0
@@ -1618,7 +1650,7 @@ void FreeCustomArtworkList(struct ArtworkListInfo *artwork_info)
   free(artwork_info->artwork_list);
 
   artwork_info->artwork_list = NULL;
-  artwork_info->num_list_entries = 0;
+  artwork_info->num_file_list_entries = 0;
 }
 
 
index 2124343dccdc0fa54f4dec302ec163e2d971dfe5..f30c1d4cb4b91a58a91b24b535cb64a699e1a68a 100644 (file)
@@ -1721,23 +1721,39 @@ static void *Load_WAV(char *filename)
   return snd_info;
 }
 
-void InitSoundList(struct FileInfo *file_list, int num_list_entries)
+struct FileInfo *getCurrentSoundList()
 {
-  if (sound_info == NULL)
-    sound_info = checked_calloc(sizeof(struct ArtworkListInfo));
+  return sound_info->file_list;
+}
 
-  if (sound_info->artwork_list == NULL)
-    sound_info->artwork_list =
-      checked_calloc(num_list_entries * sizeof(SoundInfo *));
+void InitSoundList(struct ConfigInfo *config_list, char *config_suffix_list[],
+                  int num_file_list_entries)
+{
+  int i;
+
+  sound_info = checked_calloc(sizeof(struct ArtworkListInfo));
 
   sound_info->type = ARTWORK_TYPE_SOUNDS;
-  sound_info->num_list_entries = num_list_entries;
-  sound_info->file_list = file_list;
+
+  sound_info->num_file_list_entries = num_file_list_entries;
+  sound_info->num_suffix_list_entries = 0;
+  for (i=0; config_suffix_list[i] != NULL; i++)
+    sound_info->num_suffix_list_entries++;
+
+  sound_info->file_list =
+    getFileListFromConfigList(config_list, config_suffix_list,
+                             num_file_list_entries);
+  sound_info->suffix_list = config_suffix_list;
+
+  sound_info->artwork_list =
+    checked_calloc(num_file_list_entries * sizeof(SoundInfo *));
+
   sound_info->content_list = NULL;
+
   sound_info->load_artwork = Load_WAV;
   sound_info->free_artwork = FreeSound;
 
-  num_sounds = sound_info->num_list_entries;
+  num_sounds = sound_info->num_file_list_entries;
   Sound = (SoundInfo **)sound_info->artwork_list;
 }
 
index 3dcd0acb76419c1658691f81dd0b62fa2acd72cb..4b28e3ff205e88b51717bdf1d5f8440271d55bf9 100644 (file)
@@ -139,7 +139,8 @@ void StopMusic(void);
 void StopSound(int);
 void StopSounds(void);
 void StopSoundExt(int, int);
-void InitSoundList(struct FileInfo *, int);
+struct FileInfo *getCurrentSoundList();
+void InitSoundList(struct ConfigInfo *, char **, int);
 void InitReloadSounds(char *);
 void InitReloadMusic(char *);
 void FreeAllSounds(void);
index 4325ae7fd65e3d319c460279339fd92fd050a5e1..497a39585cd8091f30ac48d491cec08371072c21 100644 (file)
@@ -445,9 +445,12 @@ struct ConfigInfo
 struct FileInfo
 {
   char *token;
-  char *default_filename;
 
+  char *default_filename;
   char *filename;
+
+  int *default_parameter;                      /* array of file parameters */
+  int *parameter;                              /* array of file parameters */
 };
 
 struct ListNodeInfo
@@ -459,10 +462,17 @@ struct ListNodeInfo
 struct ArtworkListInfo
 {
   int type;                                    /* type of artwork */
-  int num_list_entries;
-  struct FileInfo *file_list;                  /* static artwork file list */
-  struct ListNodeInfo **artwork_list;          /* static artwork list */
-  struct ListNode *content_list;               /* dynamic artwork list */
+
+  int num_file_list_entries;
+  int num_suffix_list_entries;
+
+  struct FileInfo *file_list;                  /* static artwork file array */
+  char **suffix_list;                          /* parameter suffixes array */
+
+  struct ListNodeInfo **artwork_list;          /* static artwork node array */
+
+  struct ListNode *content_list;               /* dynamic artwork node list */
+
   void *(*load_artwork)(char *);               /* constructor function */
   void (*free_artwork)(void *);                        /* destructor function */
 };
index a7542a476fe312774656ba74ae4a82b26173db7b..68466fe5d63e82b1225da3aabfe6f9680c1c1816 100644 (file)
@@ -136,6 +136,19 @@ char *sound_name[NUM_SOUNDS] =
   "gate.wav"
 };
 
+char *image_config_suffix[] =
+{
+  ".frame_xpos",
+  ".frame_ypos",
+  ".num_frames",
+  NULL
+};
+
+char *sound_config_suffix[] =
+{
+  NULL
+};
+
 struct ConfigInfo image_config[] =
 {
   /* graphics for Boulder Dash style elements and actions */
index be60bd39da567849c0f856466b46bbe28ee6a4cb..976325dac8d68b13216a2f4f69d0563cebe76b4e 100644 (file)
@@ -417,6 +417,7 @@ extern struct ElementInfo   element_info[];
 extern struct GraphicInfo      graphic_info[];
 extern struct ConfigInfo       image_config[], sound_config[];
 extern struct FileInfo        *image_files, *sound_files;
+extern char                   *image_config_suffix[], *sound_config_suffix[];
 
 /* often used screen positions */
 #define SX                     8