X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ffiles.c;h=ee42c99071149d56b57ac3293f64ed5b28032cfa;hb=d9c8ce45df9d28dfe8061b67f10677d63b804f0a;hp=ef38d17026b1277b953e48e0a19997601f148c50;hpb=a4fa40cbdd9ef5a4c9a4c18e34298fa9ec49f53d;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index ef38d170..ee42c990 100644 --- a/src/files.c +++ b/src/files.c @@ -114,7 +114,7 @@ CONF_CONTENT_NUM_BYTES : 1) #define CONF_ELEMENT_BYTE_POS(i) ((i) * CONF_ELEMENT_NUM_BYTES) -#define CONF_ELEMENTS_ELEMENT(b,i) ((b[CONF_ELEMENT_BYTE_POS(i)] << 8) | \ +#define CONF_ELEMENTS_ELEMENT(b, i) ((b[CONF_ELEMENT_BYTE_POS(i)] << 8) | \ (b[CONF_ELEMENT_BYTE_POS(i) + 1])) #define CONF_CONTENT_ELEMENT_POS(c,x,y) ((c) * CONF_CONTENT_NUM_ELEMENTS + \ @@ -921,6 +921,16 @@ static struct LevelFileConfigInfo chunk_config_ELEM[] = &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(3), + &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, @@ -3703,6 +3713,7 @@ static void CopyNativeLevel_RND_to_EM(struct LevelInfo *level) 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); @@ -4186,6 +4197,8 @@ static void CopyNativeLevel_RND_to_MM(struct LevelInfo *level) 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] = @@ -4237,6 +4250,8 @@ static void CopyNativeLevel_MM_to_RND(struct LevelInfo *level) 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] = @@ -10371,6 +10386,14 @@ static struct TokenInfo options_setup_tokens[] = 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) @@ -10642,6 +10665,8 @@ 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; @@ -12085,7 +12110,7 @@ static void InitMenuDesignSettings_SpecialPostProcessing(void) vp_playfield->width = MIN(vp_playfield->width, vp_playfield->max_width); if (vp_playfield->max_height != -1) - vp_playfield->height = MIN(vp_playfield->height,vp_playfield->max_height); + vp_playfield->height = MIN(vp_playfield->height, vp_playfield->max_height); // adjust playfield position according to specified alignment @@ -12454,7 +12479,9 @@ static void LoadMenuDesignSettingsFromFilename(char *filename) { { "menu.draw_xoffset.INFO", &menu.draw_xoffset_info[i] }, { "menu.draw_yoffset.INFO", &menu.draw_yoffset_info[i] }, - { "menu.list_size.INFO", &menu.list_size_info[i] } + { "menu.list_size.INFO", &menu.list_size_info[i] }, + { "menu.list_entry_size.INFO", &menu.list_entry_size_info[i] }, + { "menu.tile_size.INFO", &menu.tile_size_info[i] } }; for (j = 0; j < ARRAY_SIZE(menu_config); j++) @@ -12494,6 +12521,7 @@ static void LoadMenuDesignSettingsFromFilename(char *filename) struct TokenIntPtrInfo menu_config[] = { { "menu.left_spacing.INFO", &menu.left_spacing_info[i] }, + { "menu.middle_spacing.INFO", &menu.middle_spacing_info[i] }, { "menu.right_spacing.INFO", &menu.right_spacing_info[i] }, { "menu.top_spacing.INFO", &menu.top_spacing_info[i] }, { "menu.bottom_spacing.INFO", &menu.bottom_spacing_info[i] }, @@ -12909,14 +12937,22 @@ static boolean sound_info_listed(struct MusicFileInfo *list, char *basename) 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[i] == MUS_UNDEFINED) + return TRUE; + + return FALSE; +} + void LoadMusicInfo(void) { - char *music_directory = getCustomMusicDirectory_NoConf(); int num_music = getMusicListSize(); - int num_music_noconf = 0; int num_sounds = getSoundListSize(); - Directory *dir; - DirectoryEntry *dir_entry; struct FileInfo *music, *sound; struct MusicFileInfo *next, **new; int i; @@ -12944,6 +12980,7 @@ void LoadMusicInfo(void) new = &music_file_info; + // get music file info for all configured music files for (i = 0; i < num_music; i++) { music = getMusicListEntry(i); @@ -12967,53 +13004,31 @@ void LoadMusicInfo(void) } } - if ((dir = openDirectory(music_directory)) == NULL) - { - Warn("cannot read music directory '%s'", music_directory); - - return; - } - - while ((dir_entry = readDirectory(dir)) != NULL) // loop all entries + // if some levels have no game music configured, use unconfigured music + if (checkLevelSetHasMusic_NoConf()) { - char *basename = dir_entry->basename; - boolean music_already_used = FALSE; - int i; + int num_music_noconf = getMusicListSize_NoConf(); - // skip all music files that are configured in music config file - for (i = 0; i < num_music; i++) + // get music file info for all unconfigured music files + for (i = 0; i < num_music_noconf; i++) { - music = getMusicListEntry(i); + int music_nr_noconf = MAP_NOCONF_MUSIC(i); + char *basename = getMusicInfoEntryFilename(music_nr_noconf); - if (music->filename == NULL) + if (basename == NULL) continue; - if (strEqual(basename, music->filename)) + if (!music_info_listed(music_file_info, basename)) { - music_already_used = TRUE; - break; - } - } + *new = get_music_file_info(basename, music_nr_noconf); - if (music_already_used) - continue; - - if (!FileIsMusic(dir_entry->filename)) - continue; - - if (!music_info_listed(music_file_info, basename)) - { - *new = get_music_file_info(basename, MAP_NOCONF_MUSIC(num_music_noconf)); - - if (*new != NULL) - new = &(*new)->next; + if (*new != NULL) + new = &(*new)->next; + } } - - num_music_noconf++; } - closeDirectory(dir); - + // get sound file info for all configured sound files for (i = 0; i < num_sounds; i++) { sound = getSoundListEntry(i);