strchr(basename, '%') == NULL)
return LEVEL_FILE_TYPE_SB;
+ // check for typical filename of a Boulder Dash (GDash) level package file
+ if (strSuffixLower(basename, ".bd") ||
+ strSuffixLower(basename, ".bdr") ||
+ strSuffixLower(basename, ".brc") ||
+ strSuffixLower(basename, ".gds"))
+ return LEVEL_FILE_TYPE_BD;
+
// ---------- try to determine file type from filesize ----------
checked_free(filename);
// functions for handling native levels
// -------------------------------------------------------------------------
+static void LoadLevelFromFileInfo_BD(struct LevelInfo *level,
+ struct LevelFileInfo *level_file_info,
+ boolean level_info_only)
+{
+ int pos = 0;
+
+ // determine position of requested level inside level package
+ if (level_file_info->packed)
+ pos = level_file_info->nr - leveldir_current->first_level;
+
+ if (!LoadNativeLevel_BD(level_file_info->filename, pos, level_info_only))
+ level->no_valid_file = TRUE;
+}
+
static void LoadLevelFromFileInfo_EM(struct LevelInfo *level,
struct LevelFileInfo *level_file_info,
boolean level_info_only)
LoadLevelFromFileInfo_RND(level, level_file_info, level_info_only);
break;
+ case LEVEL_FILE_TYPE_BD:
+ LoadLevelFromFileInfo_BD(level, level_file_info, level_info_only);
+ level->game_engine_type = GAME_ENGINE_TYPE_BD;
+ break;
+
case LEVEL_FILE_TYPE_EM:
LoadLevelFromFileInfo_EM(level, level_file_info, level_info_only);
level->game_engine_type = GAME_ENGINE_TYPE_EM;
if (level->no_valid_file)
setLevelInfoToDefaults(level, level_info_only, FALSE);
+ if (check_special_flags("use_native_bd_game_engine"))
+ level->game_engine_type = GAME_ENGINE_TYPE_BD;
+
if (level->game_engine_type == GAME_ENGINE_TYPE_UNKNOWN)
level->game_engine_type = GAME_ENGINE_TYPE_RND;
TYPE_INTEGER,
&setup.game_frame_delay, "game_frame_delay"
},
+ {
+ TYPE_SWITCH,
+ &setup.bd_skip_uncovering, "bd_skip_uncovering"
+ },
+ {
+ TYPE_SWITCH,
+ &setup.bd_skip_hatching, "bd_skip_hatching"
+ },
{
TYPE_SWITCH,
&setup.sp_show_border_elements, "sp_show_border_elements"
si->prefer_extra_panel_items = TRUE;
si->game_speed_extended = FALSE;
si->game_frame_delay = GAME_FRAME_DELAY;
+ si->bd_skip_uncovering = FALSE;
+ si->bd_skip_hatching = FALSE;
si->sp_show_border_elements = FALSE;
si->small_game_graphics = FALSE;
si->show_load_save_buttons = FALSE;