// 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)
g->draw_yoffset = parameter[GFX_ARG_DRAW_YOFFSET];
// use a different default value for global animations and toons
- if ((graphic >= IMG_GFX_GLOBAL_ANIM_1 && graphic <= IMG_GFX_GLOBAL_ANIM_8) ||
+ if ((graphic >= IMG_GFX_GLOBAL_ANIM_1 && graphic <= IMG_GFX_GLOBAL_ANIM_32) ||
(graphic >= IMG_TOON_1 && graphic <= IMG_TOON_20))
g->draw_masked = TRUE;
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,
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,
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,
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++)
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++)
static void InitGameInfo(void)
{
game.restart_level = FALSE;
-
game.request_active = FALSE;
- game.request_active_or_moving = FALSE;
game.use_masked_elements_initial = FALSE;
}
// 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
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
InitReloadCustomSounds();
print_timestamp_time("InitReloadCustomSounds");
+ LoadSoundSettings();
+ print_timestamp_time("LoadSoundSettings");
+
ReinitializeSounds();
print_timestamp_time("ReinitializeSounds");
BackToFront();
- // deactivate toons on error message screen
- setup.toons = FALSE;
+ // deactivate toons and global animations on error message screen
+ setup.global_animations = FALSE;
WaitForEventToContinue();
}
print_timestamp_time("[init element properties stuff]");
InitGfx();
+ InitSnd();
print_timestamp_time("InitGfx");
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);