From fa9c72bb286c8e5e5095e666dbf85981ad3a8ea2 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Mon, 20 Jan 2003 22:55:44 +0100 Subject: [PATCH] rnd-20030120-4-src --- src/conftime.h | 2 +- src/game.c | 31 ++++++++++++++++++++++------ src/game.h | 3 +++ src/init.c | 49 ++++++++++++++++++++++++++++++++------------- src/libgame/image.c | 24 +++++++++++++++++----- src/libgame/image.h | 4 ++-- src/libgame/sound.c | 14 +++++++++++-- src/libgame/sound.h | 4 +++- src/main.c | 6 ++---- src/main.h | 5 ++--- 10 files changed, 104 insertions(+), 38 deletions(-) diff --git a/src/conftime.h b/src/conftime.h index 89b3aa24..939aaac0 100644 --- a/src/conftime.h +++ b/src/conftime.h @@ -1 +1 @@ -#define COMPILE_DATE_STRING "[2003-01-20 20:13]" +#define COMPILE_DATE_STRING "[2003-01-20 22:54]" diff --git a/src/game.c b/src/game.c index 533119c9..7fd22944 100644 --- a/src/game.c +++ b/src/game.c @@ -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; diff --git a/src/game.h b/src/game.h index 57fd8a81..dfc4312f 100644 --- a/src/game.h +++ b/src/game.h @@ -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); diff --git a/src/init.c b/src/init.c index ea3e538b..61838c68 100644 --- a/src/init.c +++ b/src/init.c @@ -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; iparameter); /* 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; itoken); +#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; jtoken, 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 */ { diff --git a/src/libgame/image.c b/src/libgame/image.c index 12bfc916..ddec954a 100644 --- a/src/libgame/image.c +++ b/src/libgame/image.c @@ -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) diff --git a/src/libgame/image.h b/src/libgame/image.h index ccb1c8d8..e8eaaca9 100644 --- a/src/libgame/image.h +++ b/src/libgame/image.h @@ -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(); diff --git a/src/libgame/sound.c b/src/libgame/sound.c index 9b0282bc..e5994e55 100644 --- a/src/libgame/sound.c +++ b/src/libgame/sound.c @@ -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, diff --git a/src/libgame/sound.h b/src/libgame/sound.h index 89e54059..f304e812 100644 --- a/src/libgame/sound.h +++ b/src/libgame/sound.h @@ -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 *); diff --git a/src/main.c b/src/main.c index 4e4f38ac..df8b8f62 100644 --- a/src/main.c +++ b/src/main.c @@ -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; /* ------------------------------------------------------------------------- */ diff --git a/src/main.h b/src/main.h index aab0040c..4ee539f6 100644 --- a/src/main.h +++ b/src/main.h @@ -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 */ -- 2.34.1