projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixed bugs with wrong X/Y access in element mask in MM engine
[rocksndiamonds.git]
/
src
/
files.c
diff --git
a/src/files.c
b/src/files.c
index 5439ca15d7e9cbf711c4e3a812ac3c19e60662d1..47dfe11972294618b3aaa16a27516a5242f7e69d 100644
(file)
--- 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)
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 + \
(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
},
&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,
{
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->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);
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->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] =
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->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] =
for (i = 0; i < level->num_mm_ball_contents; i++)
level->mm_ball_content[i] =
@@
-12095,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->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
// adjust playfield position according to specified alignment
@@
-12464,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.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++)
};
for (j = 0; j < ARRAY_SIZE(menu_config); j++)
@@
-12504,6
+12521,7
@@
static void LoadMenuDesignSettingsFromFilename(char *filename)
struct TokenIntPtrInfo menu_config[] =
{
{ "menu.left_spacing.INFO", &menu.left_spacing_info[i] },
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] },
{ "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] },
@@
-12921,14
+12939,12
@@
static boolean sound_info_listed(struct MusicFileInfo *list, char *basename)
void LoadMusicInfo(void)
{
void LoadMusicInfo(void)
{
-
char *music_directory = getCustomMusicDirectory
_NoConf();
+
int num_music_noconf = getMusicListSize
_NoConf();
int num_music = getMusicListSize();
int num_music = getMusicListSize();
- int num_music_noconf = 0;
int num_sounds = getSoundListSize();
int num_sounds = getSoundListSize();
- Directory *dir;
- DirectoryEntry *dir_entry;
struct FileInfo *music, *sound;
struct MusicFileInfo *next, **new;
struct FileInfo *music, *sound;
struct MusicFileInfo *next, **new;
+
int i;
while (music_file_info != NULL)
int i;
while (music_file_info != NULL)
@@
-12954,76
+12970,64
@@
void LoadMusicInfo(void)
new = &music_file_info;
new = &music_file_info;
- for (i = 0; i < num_music; i++)
+ // get (configured or unconfigured) music file info for all levels
+ for (i = leveldir_current->first_level;
+ i <= leveldir_current->last_level; i++)
{
{
-
music = getMusicListEntry(i)
;
+
int music_nr
;
- if (music->filename == NULL)
- continue;
+ if (levelset.music[i] != MUS_UNDEFINED)
+ {
+ // get music file info for configured level music
+ music_nr = levelset.music[i];
+ }
+ else
+ {
+ // get music file info for unconfigured level music
+ int level_pos = i - leveldir_current->first_level;
- if (strEqual(music->filename, UNDEFINED_FILENAME))
- continue;
+ music_nr = MAP_NOCONF_MUSIC(level_pos % num_music_noconf);
+ }
- // a configured file may be not recognized as music
- if (!FileIsMusic(music->filename))
+ char *basename = getMusicInfoEntryFilename(music_nr);
+
+ if (basename == NULL)
continue;
continue;
- if (!music_info_listed(music_file_info,
music->fil
ename))
+ if (!music_info_listed(music_file_info,
bas
ename))
{
{
- *new = get_music_file_info(
music->filename, i
);
+ *new = get_music_file_info(
basename, music_nr
);
if (*new != NULL)
new = &(*new)->next;
}
}
if (*new != NULL)
new = &(*new)->next;
}
}
- if ((dir = openDirectory(music_directory)) == NULL)
- {
- Warn("cannot read music directory '%s'", music_directory);
-
- return;
- }
-
- while ((dir_entry = readDirectory(dir)) != NULL) // loop all entries
+ // get music file info for all remaining configured music files
+ for (i = 0; i < num_music; i++)
{
{
- char *basename = dir_entry->basename;
- boolean music_already_used = FALSE;
- int i;
-
- // skip all music files that are configured in music config file
- for (i = 0; i < num_music; i++)
- {
- music = getMusicListEntry(i);
-
- if (music->filename == NULL)
- continue;
+ music = getMusicListEntry(i);
- if (strEqual(basename, music->filename))
- {
- music_already_used = TRUE;
- break;
- }
- }
+ if (music->filename == NULL)
+ continue;
- if (
music_already_used
)
+ if (
strEqual(music->filename, UNDEFINED_FILENAME)
)
continue;
continue;
- if (!FileIsMusic(dir_entry->filename))
+ // a configured file may be not recognized as music
+ if (!FileIsMusic(music->filename))
continue;
continue;
- if (!music_info_listed(music_file_info,
bas
ename))
+ if (!music_info_listed(music_file_info,
music->fil
ename))
{
{
- *new = get_music_file_info(
basename, MAP_NOCONF_MUSIC(num_music_noconf)
);
+ *new = get_music_file_info(
music->filename, i
);
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);
for (i = 0; i < num_sounds; i++)
{
sound = getSoundListEntry(i);