&li.mm_ball_content, EL_EMPTY, NULL,
&li.num_mm_ball_contents, 8, MAX_MM_BALL_CONTENTS
},
+ {
+ EL_MM_GRAY_BALL, -1,
+ TYPE_BOOLEAN, CONF_VALUE_8_BIT(1),
+ &li.rotate_mm_ball_content, TRUE
+ },
+ {
+ EL_MM_GRAY_BALL, -1,
+ TYPE_BOOLEAN, CONF_VALUE_8_BIT(2),
+ &li.explode_mm_ball, FALSE
+ },
{
EL_MM_STEEL_BLOCK, -1,
cav->lenses_time = level->lenses_time;
cav->magnify_time = level->magnify_time;
+ cav->wind_time = 9999;
cav->wind_direction =
map_direction_RND_to_EM(level->wind_direction_initial);
level_mm->kettles_needed = level->gems_needed;
level_mm->auto_count_kettles = level->auto_count_gems;
- level_mm->laser_red = level->mm_laser_red;
- level_mm->laser_green = level->mm_laser_green;
- level_mm->laser_blue = level->mm_laser_blue;
+ level_mm->mm_laser_red = level->mm_laser_red;
+ level_mm->mm_laser_green = level->mm_laser_green;
+ level_mm->mm_laser_blue = level->mm_laser_blue;
+
+ level_mm->df_laser_red = level->df_laser_red;
+ level_mm->df_laser_green = level->df_laser_green;
+ level_mm->df_laser_blue = level->df_laser_blue;
strcpy(level_mm->name, level->name);
strcpy(level_mm->author, level->author);
level_mm->num_ball_contents = level->num_mm_ball_contents;
level_mm->ball_choice_mode = level->mm_ball_choice_mode;
+ level_mm->rotate_ball_content = level->rotate_mm_ball_content;
+ level_mm->explode_ball = level->explode_mm_ball;
for (i = 0; i < level->num_mm_ball_contents; i++)
level_mm->ball_content[i] =
level->gems_needed = level_mm->kettles_needed;
level->auto_count_gems = level_mm->auto_count_kettles;
- level->mm_laser_red = level_mm->laser_red;
- level->mm_laser_green = level_mm->laser_green;
- level->mm_laser_blue = level_mm->laser_blue;
+ level->mm_laser_red = level_mm->mm_laser_red;
+ level->mm_laser_green = level_mm->mm_laser_green;
+ level->mm_laser_blue = level_mm->mm_laser_blue;
+
+ level->df_laser_red = level_mm->df_laser_red;
+ level->df_laser_green = level_mm->df_laser_green;
+ level->df_laser_blue = level_mm->df_laser_blue;
strcpy(level->name, level_mm->name);
level->num_mm_ball_contents = level_mm->num_ball_contents;
level->mm_ball_choice_mode = level_mm->ball_choice_mode;
+ level->rotate_mm_ball_content = level_mm->rotate_ball_content;
+ level->explode_mm_ball = level_mm->explode_ball;
for (i = 0; i < level->num_mm_ball_contents; i++)
level->mm_ball_content[i] =
TYPE_BOOLEAN,
&setup.options.verbose, "options.verbose"
},
+ {
+ TYPE_BOOLEAN,
+ &setup.options.debug, "options.debug"
+ },
+ {
+ TYPE_STRING,
+ &setup.options.debug_mode, "options.debug_mode"
+ },
};
static void setSetupInfoToDefaults(struct SetupInfo *si)
si->debug.xsn_percent = 0;
si->options.verbose = FALSE;
+ si->options.debug = FALSE;
+ si->options.debug_mode = getStringCopy(ARG_UNDEFINED_STRING);
#if defined(PLATFORM_ANDROID)
si->fullscreen = TRUE;
return music_info_listed_ext(list, basename, TRUE);
}
+static boolean checkLevelSetHasMusic_NoConf(void)
+{
+ int i;
+
+ for (i = leveldir_current->first_level;
+ i <= leveldir_current->last_level; i++)
+ if (levelset.music[level_nr] == MUS_UNDEFINED)
+ return TRUE;
+
+ return FALSE;
+}
+
void LoadMusicInfo(void)
{
- char *music_directory = getCustomMusicDirectory();
+ char *music_directory = getCustomMusicDirectory_NoConf();
int num_music = getMusicListSize();
int num_music_noconf = 0;
int num_sounds = getSoundListSize();
- Directory *dir;
+ Directory *dir = NULL;
DirectoryEntry *dir_entry;
struct FileInfo *music, *sound;
struct MusicFileInfo *next, **new;
+ boolean read_music_from_directory = TRUE;
int i;
while (music_file_info != NULL)
}
}
- if ((dir = openDirectory(music_directory)) == NULL)
+ // if all levels have game music configured, do not read music from directory
+ if (!checkLevelSetHasMusic_NoConf())
+ {
+ read_music_from_directory = FALSE;
+ }
+ else if (music_directory == NULL)
+ {
+ Warn("cannot find music directory with unconfigured music");
+
+ read_music_from_directory = FALSE;
+ }
+ else if ((dir = openDirectory(music_directory)) == NULL)
{
Warn("cannot read music directory '%s'", music_directory);
- return;
+ read_music_from_directory = FALSE;
}
- while ((dir_entry = readDirectory(dir)) != NULL) // loop all entries
+ while (read_music_from_directory &&
+ (dir_entry = readDirectory(dir)) != NULL) // loop all entries
{
char *basename = dir_entry->basename;
boolean music_already_used = FALSE;
num_music_noconf++;
}
- closeDirectory(dir);
+ if (dir != NULL)
+ closeDirectory(dir);
for (i = 0; i < num_sounds; i++)
{