X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ffiles.c;h=2ba8e9e6126e867d8f5c7edc6b92479707e1711f;hb=d01e22a131aef25baab99c9478faf9e94531c4fd;hp=a803819762d3daca9157ef986524a5e7d32a2480;hpb=9568a8a313939c3cafcc1e25b9f5625403797373;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index a8038197..2ba8e9e6 100644 --- a/src/files.c +++ b/src/files.c @@ -244,6 +244,12 @@ static struct LevelFileConfigInfo chunk_config_INFO[] = &li.auto_exit_sokoban, FALSE }, + { + -1, -1, + TYPE_BOOLEAN, CONF_VALUE_8_BIT(10), + &li.auto_count_gems, FALSE + }, + { -1, -1, -1, -1, @@ -800,6 +806,44 @@ static struct LevelFileConfigInfo chunk_config_ELEM[] = &li.num_ball_contents, 4, MAX_ELEMENT_CONTENTS }, + { + EL_MM_MCDUFFIN, -1, + TYPE_BOOLEAN, CONF_VALUE_8_BIT(1), + &li.mm_laser_red, FALSE + }, + { + EL_MM_MCDUFFIN, -1, + TYPE_BOOLEAN, CONF_VALUE_8_BIT(2), + &li.mm_laser_green, FALSE + }, + { + EL_MM_MCDUFFIN, -1, + TYPE_BOOLEAN, CONF_VALUE_8_BIT(3), + &li.mm_laser_blue, TRUE + }, + + { + EL_DF_LASER, -1, + TYPE_BOOLEAN, CONF_VALUE_8_BIT(1), + &li.df_laser_red, TRUE + }, + { + EL_DF_LASER, -1, + TYPE_BOOLEAN, CONF_VALUE_8_BIT(2), + &li.df_laser_green, TRUE + }, + { + EL_DF_LASER, -1, + TYPE_BOOLEAN, CONF_VALUE_8_BIT(3), + &li.df_laser_blue, FALSE + }, + + { + EL_MM_FUSE, -1, + TYPE_INTEGER, CONF_VALUE_16_BIT(1), + &li.mm_time_fuse, 0 + }, + /* ---------- unused values ----------------------------------------------- */ { @@ -3941,10 +3985,11 @@ void CopyNativeLevel_RND_to_MM(struct LevelInfo *level) level_mm->time = level->time; level_mm->kettles_needed = level->gems_needed; - level_mm->auto_count_kettles = FALSE; - level_mm->laser_red = FALSE; - level_mm->laser_green = FALSE; - level_mm->laser_blue = TRUE; + 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; strcpy(level_mm->name, level->name); strcpy(level_mm->author, level->author); @@ -3954,7 +3999,7 @@ void CopyNativeLevel_RND_to_MM(struct LevelInfo *level) level_mm->score[SC_TIME_BONUS] = level->score[SC_TIME_BONUS]; level_mm->amoeba_speed = level->amoeba_speed; - level_mm->time_fuse = 0; + level_mm->time_fuse = level->mm_time_fuse; for (x = 0; x < level->fieldx; x++) for (y = 0; y < level->fieldy; y++) @@ -3976,6 +4021,11 @@ void CopyNativeLevel_MM_to_RND(struct LevelInfo *level) level->time = level_mm->time; 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; strcpy(level->name, level_mm->name); @@ -3988,21 +4038,11 @@ void CopyNativeLevel_MM_to_RND(struct LevelInfo *level) level->score[SC_TIME_BONUS] = level_mm->score[SC_TIME_BONUS]; level->amoeba_speed = level_mm->amoeba_speed; + level->mm_time_fuse = level_mm->time_fuse; for (x = 0; x < level->fieldx; x++) for (y = 0; y < level->fieldy; y++) level->field[x][y] = map_element_MM_to_RND(level_mm->field[x][y]); - - if (level_mm->auto_count_kettles) - { - level->gems_needed = 0; - - for (x = 0; x < level->fieldx; x++) - for (y = 0; y < level->fieldy; y++) - if (level->field[x][y] == EL_MM_KETTLE || - level->field[x][y] == EL_DF_CELL) - level->gems_needed++; - } } @@ -6452,6 +6492,20 @@ static void LoadLevel_InitCustomElements(struct LevelInfo *level) } } } + + /* set some other uninitialized values of custom elements in older levels */ + if (level->game_version < VERSION_IDENT(3,1,0,0)) + { + for (i = 0; i < NUM_CUSTOM_ELEMENTS; i++) + { + int element = EL_CUSTOM_START + i; + + element_info[element].access_direction = MV_ALL_DIRECTIONS; + + element_info[element].explosion_delay = 17; + element_info[element].ignition_delay = 8; + } + } } static void LoadLevel_InitElements(struct LevelInfo *level, char *filename) @@ -6461,9 +6515,6 @@ static void LoadLevel_InitElements(struct LevelInfo *level, char *filename) if (level->file_has_custom_elements) LoadLevel_InitCustomElements(level); - if (level->file_has_custom_elements) - InitElementPropertiesAfterLoading(level->game_version); - /* initialize element properties for level editor etc. */ InitElementPropertiesEngine(level->game_version); InitElementPropertiesGfxElement();