&li.rate_time_over_score, FALSE
},
+ {
+ -1, -1,
+ TYPE_BOOLEAN, CONF_VALUE_8_BIT(14),
+ &li.bd_intermission, FALSE
+ },
+
{
-1, -1,
-1, -1,
&li.initial_inventory_size[3], 1, MAX_INITIAL_INVENTORY_SIZE
},
+ // (these values are only valid for BD style levels)
+ {
+ EL_BD_PLAYER, -1,
+ TYPE_BOOLEAN, CONF_VALUE_8_BIT(1),
+ &li.bd_diagonal_movements, FALSE
+ },
+
+ // (the following values are related to various game elements)
+
{
EL_EMERALD, -1,
TYPE_INTEGER, CONF_VALUE_16_BIT(1),
}
}
+static boolean checkForPackageFromBasename_BD(char *basename)
+{
+ // check for native BD level file extensions
+ if (!strSuffixLower(basename, ".bd") &&
+ !strSuffixLower(basename, ".bdr") &&
+ !strSuffixLower(basename, ".brc") &&
+ !strSuffixLower(basename, ".gds"))
+ return FALSE;
+
+ // check for standard single-level BD files (like "001.bd")
+ if (strSuffixLower(basename, ".bd") &&
+ strlen(basename) == 6 &&
+ basename[0] >= '0' && basename[0] <= '9' &&
+ basename[1] >= '0' && basename[1] <= '9' &&
+ basename[2] >= '0' && basename[2] <= '9')
+ return FALSE;
+
+ // this is a level package in native BD file format
+ return TRUE;
+}
+
static char *getLevelFilenameFromBasename(char *basename)
{
static char *filename = 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"))
+ if (checkForPackageFromBasename_BD(basename))
return LEVEL_FILE_TYPE_BD;
// ---------- try to determine file type from filesize ----------
if (fileExists(lfi->filename))
return;
+ // check for native Boulder Dash level file
+ setLevelFileInfo_FormatLevelFilename(lfi, LEVEL_FILE_TYPE_BD, "%03d.bd", nr);
+ if (fileExists(lfi->filename))
+ return;
+
// check for Emerald Mine level file (V1)
setLevelFileInfo_FormatLevelFilename(lfi, LEVEL_FILE_TYPE_EM, "a%c%c",
'a' + (nr / 10) % 26, '0' + nr % 10);
cave->level_speed[0] = 160; // set cave speed
+ cave->intermission = level->bd_intermission;
+ cave->diagonal_movements = level->bd_diagonal_movements;
+
strncpy(cave->name, level->name, sizeof(GdString));
cave->name[sizeof(GdString) - 1] = '\0';
level->score[SC_TIME_BONUS] = cave->level_timevalue[bd_level_nr];
level->score[SC_DIAMOND] = cave->diamond_value;
+ level->bd_intermission = cave->intermission;
+ level->bd_diagonal_movements = cave->diagonal_movements;
+
strncpy(level->name, cave->name, MAX_LEVEL_NAME_LEN);
level->name[MAX_LEVEL_NAME_LEN] = '\0';