rnd-20030120-4-src
authorHolger Schemel <info@artsoft.org>
Mon, 20 Jan 2003 21:55:44 +0000 (22:55 +0100)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:39:56 +0000 (10:39 +0200)
src/conftime.h
src/game.c
src/game.h
src/init.c
src/libgame/image.c
src/libgame/image.h
src/libgame/sound.c
src/libgame/sound.h
src/main.c
src/main.h

index 89b3aa24a760846ee23e473a8e20e6023c769413..939aaac0806c784d247a29816233ddfca07e2caa 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "[2003-01-20 20:13]"
+#define COMPILE_DATE_STRING "[2003-01-20 22:54]"
index 533119c92b368df93d484018f33fd3d2b35a7b42..7fd229444b19f2cbf55bfa2b9b51347a5c63f1ce 100644 (file)
@@ -119,10 +119,10 @@ static struct GadgetInfo *game_gadget[NUM_GAME_BUTTONS];
 #define IS_LOOP_SOUND(s)       (sound_info[s].loop)
 
 
-/* -------------------------------------------------------------------------
-   definition of elements that automatically change to other elements after
-   a specified time, eventually calling a function when changing
-   ------------------------------------------------------------------------- */
+/* ------------------------------------------------------------------------- */
+/* definition of elements that automatically change to other elements after  */
+/* a specified time, eventually calling a function when changing             */
+/* ------------------------------------------------------------------------- */
 
 /* forward declaration for changer functions */
 static void InitBuggyBase(int x, int y);
@@ -6908,10 +6908,29 @@ boolean PlaceBomb(struct PlayerInfo *player)
   return TRUE;
 }
 
+/* ------------------------------------------------------------------------- */
+/* game sound playing functions                                              */
+/* ------------------------------------------------------------------------- */
+
+static int *loop_sound_frame = NULL;
+static int *loop_sound_volume = NULL;
+
+void InitPlaySoundLevel()
+{
+  int num_sounds = getSoundListSize();
+
+  if (loop_sound_frame != NULL)
+    free(loop_sound_frame);
+
+  if (loop_sound_volume != NULL)
+    free(loop_sound_volume);
+
+  loop_sound_frame = checked_calloc(num_sounds * sizeof(int));
+  loop_sound_volume = checked_calloc(num_sounds * sizeof(int));
+}
+
 static void PlaySoundLevel(int x, int y, int nr)
 {
-  static int loop_sound_frame[NUM_SOUND_FILES];
-  static int loop_sound_volume[NUM_SOUND_FILES];
   int sx = SCREENX(x), sy = SCREENY(y);
   int volume, stereo_position;
   int max_distance = 8;
index 57fd8a81186534c229d40face3f94df9b362469d..dfc4312fb59ef6144241219b4489f824bf89c58d 100644 (file)
@@ -91,6 +91,9 @@ void RemoveHero(struct PlayerInfo *);
 int DigField(struct PlayerInfo *, int, int, int, int, int);
 boolean SnapField(struct PlayerInfo *, int, int);
 boolean PlaceBomb(struct PlayerInfo *);
+
+void InitPlaySoundLevel();
+
 void RaiseScore(int);
 void RaiseScoreElement(int);
 void RequestQuitGame(boolean);
index ea3e538bcb9411cf0b0fa286ef5c0fc33220e516..61838c68232306d4dda9e3da361cd8e0e9c774dc 100644 (file)
@@ -260,6 +260,8 @@ static void ReinitializeGraphics()
 static void ReinitializeSounds()
 {
   InitSoundInfo();     /* initialize sounds info from config file */
+
+  InitPlaySoundLevel();
 }
 
 static void ReinitializeMusic()
@@ -859,6 +861,7 @@ static void set_graphic_parameters(int graphic, int *parameter)
 static void InitGraphicInfo()
 {
   static boolean clipmasks_initialized = FALSE;
+  int num_images = getImageListSize();
   int i;
 #if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND)
   Pixmap src_pixmap;
@@ -867,12 +870,15 @@ static void InitGraphicInfo()
   GC copy_clipmask_gc = None;
 #endif
 
-  image_files = getCurrentImageList();
+  if (graphic_info != NULL)
+    free(graphic_info);
+
+  graphic_info = checked_calloc(num_images * sizeof(struct GraphicInfo));
 
 #if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND)
   if (clipmasks_initialized)
   {
-    for (i=0; i<NUM_IMAGE_FILES; i++)
+    for (i=0; i<num_images; i++)
     {
       if (graphic_info[i].clip_mask)
        XFreePixmap(display, graphic_info[i].clip_mask);
@@ -885,13 +891,14 @@ static void InitGraphicInfo()
   }
 #endif
 
-  for (i=0; i<NUM_IMAGE_FILES; i++)
+  for (i=0; i<num_images; i++)
   {
+    struct FileInfo *image = getImageListEntry(i);
     Bitmap *src_bitmap;
     int src_x, src_y;
     int first_frame, last_frame;
 
-    set_graphic_parameters(i, image_files[i].parameter);
+    set_graphic_parameters(i, image->parameter);
 
     /* now check if no animation frames are outside of the loaded image */
 
@@ -918,7 +925,7 @@ static void InitGraphicInfo()
       Error(ERR_RETURN, "custom graphic rejected for this element/action");
       Error(ERR_RETURN_LINE, "-");
 
-      set_graphic_parameters(i, image_files[i].default_parameter);
+      set_graphic_parameters(i, image->default_parameter);
     }
 
     last_frame = graphic_info[i].anim_frames - 1;
@@ -941,7 +948,7 @@ static void InitGraphicInfo()
       Error(ERR_RETURN, "custom graphic rejected for this element/action");
       Error(ERR_RETURN_LINE, "-");
 
-      set_graphic_parameters(i, image_files[i].default_parameter);
+      set_graphic_parameters(i, image->default_parameter);
     }
 
 #if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND)
@@ -988,31 +995,40 @@ static void set_sound_parameters(int sound, int *parameter)
 
 static void InitSoundInfo()
 {
-  int sound_effect_properties[NUM_SOUND_FILES];
+  int *sound_effect_properties;
+  int num_sounds = getSoundListSize();
   int i, j;
 
-  sound_files = getCurrentSoundList();
+  if (sound_info != NULL)
+    free(sound_info);
+
+  sound_effect_properties = checked_calloc(num_sounds * sizeof(int));
+  sound_info = checked_calloc(num_sounds * sizeof(struct SoundInfo));
 
   /* initialize sound effect for all elements to "no sound" */
   for (i=0; i<MAX_NUM_ELEMENTS; i++)
     for (j=0; j<NUM_ACTIONS; j++)
       element_info[i].sound[j] = SND_UNDEFINED;
 
-  for (i=0; i<NUM_SOUND_FILES; i++)
+  for (i=0; i<num_sounds; i++)
   {
-    int len_effect_text = strlen(sound_files[i].token);
+    struct FileInfo *sound = getSoundListEntry(i);
+    int len_effect_text = strlen(sound->token);
 
+#if 1
     sound_effect_properties[i] = ACTION_OTHER;
     sound_info[i].loop = FALSE;
+#endif
 
     /* determine all loop sounds and identify certain sound classes */
 
+#if 1
     for (j=0; element_action_info[j].suffix; j++)
     {
       int len_action_text = strlen(element_action_info[j].suffix);
 
       if (len_action_text < len_effect_text &&
-         strcmp(&sound_files[i].token[len_effect_text - len_action_text],
+         strcmp(&sound->token[len_effect_text - len_action_text],
                 element_action_info[j].suffix) == 0)
       {
        sound_effect_properties[i] = element_action_info[j].value;
@@ -1021,9 +1037,11 @@ static void InitSoundInfo()
          sound_info[i].loop = TRUE;
       }
     }
+#endif
 
     /* associate elements and some selected sound actions */
 
+#if 1
     for (j=0; j<MAX_NUM_ELEMENTS; j++)
     {
       if (element_info[j].sound_class_name)
@@ -1031,9 +1049,9 @@ static void InitSoundInfo()
        int len_class_text = strlen(element_info[j].sound_class_name);
 
        if (len_class_text + 1 < len_effect_text &&
-           strncmp(sound_files[i].token,
+           strncmp(sound->token,
                    element_info[j].sound_class_name, len_class_text) == 0 &&
-           sound_files[i].token[len_class_text] == '.')
+           sound->token[len_class_text] == '.')
        {
          int sound_action_value = sound_effect_properties[i];
 
@@ -1041,10 +1059,13 @@ static void InitSoundInfo()
        }
       }
     }
+#endif
 
-    set_sound_parameters(i, sound_files[i].parameter);
+    set_sound_parameters(i, sound->parameter);
   }
 
+  free(sound_effect_properties);
+
 #if 0
   /* TEST ONLY */
   {
index 12bfc91618f72563c5fa22d528d5320698842df1..ddec954a6dd3480e1469107eaa10aba67e4c5198 100644 (file)
@@ -696,16 +696,30 @@ static void FreeImage(void *ptr)
   free(image);
 }
 
-struct FileInfo *getCurrentImageList()
+int getImageListSize()
 {
-  return image_info->file_list;
+  return (image_info->num_file_list_entries +
+         image_info->num_dynamic_file_list_entries);
 }
 
-Bitmap *getBitmapFromImageID(int graphic)
+struct FileInfo *getImageListEntry(int pos)
 {
-  ImageInfo **img_info = (ImageInfo **)image_info->artwork_list;
+  int num_list_entries = image_info->num_file_list_entries;
+  int list_pos = (pos < num_list_entries ? pos : pos - num_list_entries);
 
-  return (img_info[graphic] != NULL ? img_info[graphic]->bitmap : NULL);
+  return (pos < num_list_entries ? &image_info->file_list[list_pos] :
+         &image_info->dynamic_file_list[list_pos]);
+}
+
+Bitmap *getBitmapFromImageID(int pos)
+{
+  int num_list_entries = image_info->num_file_list_entries;
+  int list_pos = (pos < num_list_entries ? pos : pos - num_list_entries);
+  ImageInfo **img_info =
+    (ImageInfo **)(pos < num_list_entries ? image_info->artwork_list :
+                  image_info->dynamic_artwork_list);
+
+  return (img_info[list_pos] != NULL ? img_info[list_pos]->bitmap : NULL);
 }
 
 char *getTokenFromImageID(int graphic)
index ccb1c8d88676962436e4a2921191d25c34865b89..e8eaaca9e97bf5c850bea6702a1246be6235f9c5 100644 (file)
@@ -71,8 +71,8 @@ int Read_PCX_to_Pixmap(Display *, Window, GC, char *, Pixmap *, Pixmap *);
 
 #endif /* TARGET_X11 */
 
-
-struct FileInfo *getCurrentImageList();
+int getImageListSize();
+struct FileInfo *getImageListEntry(int);
 Bitmap *getBitmapFromImageID(int);
 char *getTokenFromImageID(int);
 char *getImageConfigFilename();
index 9b0282bc6de704d38de2c9cffc894894accfd0bc..e5994e55c828346f3e8bdd380733d838ca27e8bc 100644 (file)
@@ -1765,9 +1765,19 @@ static void *Load_WAV(char *filename)
   return snd_info;
 }
 
-struct FileInfo *getCurrentSoundList()
+int getSoundListSize()
 {
-  return sound_info->file_list;
+  return (sound_info->num_file_list_entries +
+         sound_info->num_dynamic_file_list_entries);
+}
+
+struct FileInfo *getSoundListEntry(int pos)
+{
+  int num_list_entries = sound_info->num_file_list_entries;
+  int list_pos = (pos < num_list_entries ? pos : pos - num_list_entries);
+
+  return (pos < num_list_entries ? &sound_info->file_list[list_pos] :
+         &sound_info->dynamic_file_list[list_pos]);
 }
 
 void InitSoundList(struct ConfigInfo *config_list, int num_file_list_entries,
index 89e5405934f90f4a0f438600379696a8686bf914..f304e81233f278ba1fa83c02d573a5abe0b85c29 100644 (file)
@@ -142,7 +142,9 @@ void StopMusic(void);
 void StopSound(int);
 void StopSounds(void);
 void StopSoundExt(int, int);
-struct FileInfo *getCurrentSoundList();
+
+int getSoundListSize();
+struct FileInfo *getSoundListEntry(int);
 void InitSoundList(struct ConfigInfo *, int, struct ConfigInfo *,
                   char **, char **, char **);
 void InitReloadCustomSounds(char *);
index 4e4f38ac98d24a8a3094e0b529847780bcf5dff0..df8b8f62724e32b17ce9b35eafefadcb232d1123 100644 (file)
@@ -89,10 +89,8 @@ struct TapeInfo              tape;
 struct SetupInfo       setup;
 struct GameInfo                game;
 struct GlobalInfo      global;
-struct FileInfo               *image_files;
-struct FileInfo               *sound_files;
-struct GraphicInfo     graphic_info[NUM_IMAGE_FILES];
-struct SoundInfo       sound_info[NUM_SOUND_FILES];
+struct GraphicInfo     *graphic_info = NULL;
+struct SoundInfo       *sound_info = NULL;
 
 
 /* ------------------------------------------------------------------------- */
index aab0040c8c8a90d0d7fc83e17a0b6a6e126c0442..4ee539f6835428d7682b6b1377d8c79a9c64e2e5 100644 (file)
@@ -1148,10 +1148,9 @@ extern struct GlobalInfo global;
 extern struct ElementInfo      element_info[];
 extern struct ElementActionInfo        element_action_info[];
 extern struct ElementDirectionInfo element_direction_info[];
-extern struct GraphicInfo      graphic_info[];
-extern struct SoundInfo                sound_info[];
+extern struct GraphicInfo      *graphic_info;
+extern struct SoundInfo               *sound_info;
 extern struct ConfigInfo       image_config[], sound_config[];
 extern struct ConfigInfo       image_config_suffix[], sound_config_suffix[];
-extern struct FileInfo        *image_files, *sound_files;
 
 #endif /* MAIN_H */