X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=f2e78edebab08a46d38b37f73b18953fb0d0657c;hb=45483d224aed58ac2cf856b0fcdd2d4707084047;hp=af11e4c7a5242329fcab1d5c112ddf05c50b90bb;hpb=263c1f057f081555ae53ad16d9b65ea026180441;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index af11e4c7..f2e78ede 100644 --- a/src/init.c +++ b/src/init.c @@ -1550,7 +1550,7 @@ static void set_graphic_parameters_ext(int graphic, int *parameter, // optionally, the second movement tile can be specified as start tile if (parameter[GFX_ARG_2ND_SWAP_TILES] != ARG_UNDEFINED_VALUE) - g->swap_double_tiles= parameter[GFX_ARG_2ND_SWAP_TILES]; + g->swap_double_tiles = parameter[GFX_ARG_2ND_SWAP_TILES]; // automatically determine correct number of frames, if not defined if (parameter[GFX_ARG_FRAMES] != ARG_UNDEFINED_VALUE) @@ -2446,6 +2446,8 @@ static void ReinitializeGraphics(void) InitImageTextures(); // create textures for certain images print_timestamp_time("InitImageTextures"); + InitGraphicInfo_BD(); // graphic mapping for BD engine + print_timestamp_time("InitGraphicInfo_BD"); InitGraphicInfo_EM(); // graphic mapping for EM engine print_timestamp_time("InitGraphicInfo_EM"); @@ -3615,15 +3617,15 @@ void InitElementPropertiesStatic(void) EL_PLAYER_3, EL_PLAYER_4, EL_BD_FIREFLY, - EL_BD_FIREFLY_1, - EL_BD_FIREFLY_2, - EL_BD_FIREFLY_3, - EL_BD_FIREFLY_4, + EL_BD_FIREFLY_LEFT, + EL_BD_FIREFLY_DOWN, + EL_BD_FIREFLY_RIGHT, + EL_BD_FIREFLY_UP, EL_BD_BUTTERFLY, - EL_BD_BUTTERFLY_1, - EL_BD_BUTTERFLY_2, - EL_BD_BUTTERFLY_3, - EL_BD_BUTTERFLY_4, + EL_BD_BUTTERFLY_DOWN, + EL_BD_BUTTERFLY_LEFT, + EL_BD_BUTTERFLY_UP, + EL_BD_BUTTERFLY_RIGHT, EL_BD_AMOEBA, EL_CHAR_QUESTION, EL_UNKNOWN, @@ -4571,6 +4573,7 @@ void InitElementPropertiesStatic(void) static int ep_editor_cascade_active[] = { EL_INTERNAL_CASCADE_BD_ACTIVE, + EL_INTERNAL_CASCADE_BD_NATIVE_ACTIVE, EL_INTERNAL_CASCADE_EM_ACTIVE, EL_INTERNAL_CASCADE_EMC_ACTIVE, EL_INTERNAL_CASCADE_RND_ACTIVE, @@ -4595,6 +4598,7 @@ void InitElementPropertiesStatic(void) static int ep_editor_cascade_inactive[] = { EL_INTERNAL_CASCADE_BD, + EL_INTERNAL_CASCADE_BD_NATIVE, EL_INTERNAL_CASCADE_EM, EL_INTERNAL_CASCADE_EMC, EL_INTERNAL_CASCADE_RND, @@ -5028,7 +5032,7 @@ static void InitGlobal(void) element_info[i].token_name = element_name_info[i].token_name; element_info[i].class_name = element_name_info[i].class_name; - element_info[i].editor_description= element_name_info[i].editor_description; + element_info[i].editor_description = element_name_info[i].editor_description; } for (i = 0; i < NUM_GLOBAL_ANIM_TOKENS + 1; i++) @@ -5051,6 +5055,13 @@ static void InitGlobal(void) image_config[i].token, image_config[i].value); + // create hash from sound config list + sound_config_hash = newSetupFileHash(); + for (i = 0; sound_config[i].token != NULL; i++) + setHashEntry(sound_config_hash, + sound_config[i].token, + sound_config[i].value); + // create hash from element token list element_token_hash = newSetupFileHash(); for (i = 0; element_name_info[i].token_name != NULL; i++) @@ -5593,10 +5604,15 @@ static void InitArtworkConfig(void) // dynamically determine list of sound tokens to be ignored num_ignore_sound_tokens = num_ignore_generic_tokens; + for (i = 0; sound_config_vars[i].token != NULL; i++) + num_ignore_sound_tokens++; ignore_sound_tokens = checked_malloc((num_ignore_sound_tokens + 1) * sizeof(char *)); for (i = 0; i < num_ignore_generic_tokens; i++) ignore_sound_tokens[i] = ignore_generic_tokens[i]; + for (i = 0; i < num_ignore_sound_tokens - num_ignore_generic_tokens; i++) + ignore_sound_tokens[num_ignore_generic_tokens + i] = + sound_config_vars[i].token; ignore_sound_tokens[num_ignore_sound_tokens] = NULL; // dynamically determine list of music tokens to be ignored @@ -5713,6 +5729,7 @@ void InitGfxBuffers(void) // required if door size definitions have changed InitGraphicCompatibilityInfo_Doors(); + InitGfxBuffers_BD(); InitGfxBuffers_EM(); InitGfxBuffers_SP(); InitGfxBuffers_MM(); @@ -5938,6 +5955,29 @@ static void InitGfxBackground(void) redraw_mask = REDRAW_ALL; } +static void InitSnd(void) +{ + InitSoundSettings_Static(); + + // read settings for initial sounds from default custom artwork config + char *snd_config_filename = getPath3(options.sounds_directory, + SND_DEFAULT_SUBDIR, + SOUNDSINFO_FILENAME); + + if (fileExists(snd_config_filename)) + { + SetupFileHash *setup_file_hash = loadSetupFileHash(snd_config_filename); + + if (setup_file_hash) + { + // read values from custom sounds config file + InitSoundSettings_FromHash(setup_file_hash, FALSE); + + freeSetupFileHash(setup_file_hash); + } + } +} + static void InitLevelInfo(void) { LoadLevelInfo(); // global level info @@ -6036,6 +6076,9 @@ static void InitSound(void) InitReloadCustomSounds(); print_timestamp_time("InitReloadCustomSounds"); + LoadSoundSettings(); + print_timestamp_time("LoadSoundSettings"); + ReinitializeSounds(); print_timestamp_time("ReinitializeSounds"); @@ -6477,8 +6520,8 @@ void DisplayExitMessage(char *format, va_list ap) BackToFront(); - // deactivate toons on error message screen - setup.toons = FALSE; + // deactivate toons and global animations on error message screen + setup.global_animations = FALSE; WaitForEventToContinue(); } @@ -6559,6 +6602,7 @@ void OpenAll(void) print_timestamp_time("[init element properties stuff]"); InitGfx(); + InitSnd(); print_timestamp_time("InitGfx"); @@ -6587,6 +6631,7 @@ void OpenAll(void) InitGfxBackground(); + bd_open_all(); em_open_all(); sp_open_all(); mm_open_all(); @@ -6671,7 +6716,7 @@ static boolean WaitForApiThreads(void) return TRUE; // deactivate global animations (not accessible in game state "loading") - setup.toons = FALSE; + setup.global_animations = FALSE; // set game state to "loading" to be able to show busy animation SetGameStatus(GAME_MODE_LOADING); @@ -6705,6 +6750,7 @@ void CloseAllAndExit(int exit_value) FreeAllMusic(); CloseAudio(); // called after freeing sounds (needed for SDL) + bd_close_all(); em_close_all(); sp_close_all();