action = -1;
}
+ // for BD effect editor graphics, replace element with effect element, if exists
+ if (action != -1 && special == GFX_SPECIAL_ARG_EDITOR)
+ {
+ int element_bd = map_element_RND_to_BD_effect(element, action);
+ int element_ef = map_element_BD_to_RND_cave(element_bd);
+
+ if (element_ef != EL_UNKNOWN)
+ {
+ element = element_ef;
+ action = -1;
+ }
+ }
+
if (element >= MAX_NUM_ELEMENTS)
continue;
g->sort_priority = 0; // default for title screens
g->class = 0;
g->style = STYLE_DEFAULT;
+ g->alpha = -1;
g->bitmaps = src_bitmaps;
g->bitmap = src_bitmap;
// 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;
g->class = parameter[GFX_ARG_CLASS];
if (parameter[GFX_ARG_STYLE] != ARG_UNDEFINED_VALUE)
g->style = parameter[GFX_ARG_STYLE];
+ if (parameter[GFX_ARG_ALPHA] != ARG_UNDEFINED_VALUE)
+ g->alpha = parameter[GFX_ARG_ALPHA];
// this is only used for drawing menu buttons and text
g->active_xoffset = parameter[GFX_ARG_ACTIVE_XOFFSET];
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");
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,
EL_AMOEBA_DRY,
EL_AMOEBA_FULL,
EL_BD_AMOEBA,
+ EL_BD_AMOEBA_2,
+ EL_BD_SLIME,
+ EL_BD_ACID,
+ EL_BD_BITER,
+ EL_BD_BITER_RIGHT,
+ EL_BD_BITER_UP,
+ EL_BD_BITER_LEFT,
+ EL_BD_BITER_DOWN,
+ EL_BD_BLADDER,
+ EL_BD_NUT,
EL_EMC_MAGIC_BALL,
EL_EMC_ANDROID,
EL_MM_GRAY_BALL,
static int ep_editor_cascade_active[] =
{
EL_INTERNAL_CASCADE_BD_ACTIVE,
+ EL_INTERNAL_CASCADE_BD_NATIVE_ACTIVE,
+ EL_INTERNAL_CASCADE_BD_EFFECTS_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_BD_EFFECTS,
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
// required if door size definitions have changed
InitGraphicCompatibilityInfo_Doors();
+ InitGfxBuffers_BD();
InitGfxBuffers_EM();
InitGfxBuffers_SP();
InitGfxBuffers_MM();
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");
InitGfxBackground();
+ bd_open_all();
em_open_all();
sp_open_all();
mm_open_all();
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);
FreeAllMusic();
CloseAudio(); // called after freeing sounds (needed for SDL)
+ bd_close_all();
em_close_all();
sp_close_all();