X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ffiles.c;h=d4751ae52b8a4cfb6622a499e9f4f5d3e302be84;hb=a8167a69b6d4a308f4501b55609ec66dd3082375;hp=04151ff10bbecb90ec2f92ad7e11fddf32dfaf8b;hpb=5b0c9b194a5a219450d09a84131d4feaba5c4ff1;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index 04151ff1..d4751ae5 100644 --- a/src/files.c +++ b/src/files.c @@ -768,9 +768,15 @@ static struct LevelFileConfigInfo chunk_config_ELEM[] = &li.android_clone_time, 10 }, { - EL_EMC_ANDROID, -1, + EL_EMC_ANDROID, SAVE_CONF_NEVER, TYPE_ELEMENT_LIST, CONF_VALUE_BYTES(1), &li.android_clone_element[0], EL_EMPTY, NULL, + &li.num_android_clone_elements, 1, MAX_ANDROID_ELEMENTS_OLD + }, + { + EL_EMC_ANDROID, -1, + TYPE_ELEMENT_LIST, CONF_VALUE_BYTES(2), + &li.android_clone_element[0], EL_EMPTY, NULL, &li.num_android_clone_elements, 1, MAX_ANDROID_ELEMENTS }, @@ -3515,14 +3521,14 @@ static void CopyNativeLevel_RND_to_EM(struct LevelInfo *level) { 2, 2 }, }; struct LevelInfo_EM *level_em = level->native_em_level; - struct LEVEL *cav = level_em->cav; + struct CAVE *cav = level_em->cav; int i, j, x, y; cav->width = MIN(level->fieldx, MAX_PLAYFIELD_WIDTH); cav->height = MIN(level->fieldy, MAX_PLAYFIELD_HEIGHT); - cav->time_seconds = level->time; - cav->required_initial = level->gems_needed; + cav->time_seconds = level->time; + cav->gems_needed = level->gems_needed; cav->emerald_score = level->score[SC_EMERALD]; cav->diamond_score = level->score[SC_DIAMOND]; @@ -3539,16 +3545,16 @@ static void CopyNativeLevel_RND_to_EM(struct LevelInfo *level) for (y = 0; y < 3; y++) for (x = 0; x < 3; x++) cav->eater_array[i][y * 3 + x] = - map_element_RND_to_EM(level->yamyam_content[i].e[x][y]); + map_element_RND_to_EM_cave(level->yamyam_content[i].e[x][y]); cav->amoeba_time = level->amoeba_speed; - cav->wonderwall_time_initial = level->time_magic_wall; + cav->wonderwall_time = level->time_magic_wall; cav->wheel_time = level->time_wheel; cav->android_move_time = level->android_move_time; cav->android_clone_time = level->android_clone_time; cav->ball_random = level->ball_random; - cav->ball_state_initial = level->ball_state_initial; + cav->ball_state = level->ball_state_initial; cav->ball_time = level->ball_time; cav->num_ball_arrays = level->num_ball_contents; @@ -3559,33 +3565,33 @@ static void CopyNativeLevel_RND_to_EM(struct LevelInfo *level) cav->lenses_time = level->lenses_time; cav->magnify_time = level->magnify_time; - cav->wind_direction_initial = + cav->wind_direction = map_direction_RND_to_EM(level->wind_direction_initial); - cav->wind_cnt_initial = (level->wind_direction_initial != MV_NONE ? - cav->wind_time : 0); + cav->wind_cnt = (level->wind_direction_initial != MV_NONE ? + cav->wind_time : 0); for (i = 0; i < MAX_ELEMENT_CONTENTS; i++) for (j = 0; j < 8; j++) cav->ball_array[i][j] = - map_element_RND_to_EM(level-> - ball_content[i].e[ball_xy[j][0]][ball_xy[j][1]]); + map_element_RND_to_EM_cave(level->ball_content[i]. + e[ball_xy[j][0]][ball_xy[j][1]]); map_android_clone_elements_RND_to_EM(level); - // first fill the complete playfield with the default border element + // first fill the complete playfield with the empty space element for (y = 0; y < EM_MAX_CAVE_HEIGHT; y++) for (x = 0; x < EM_MAX_CAVE_WIDTH; x++) - cav->cave_raw[x][y] = Zborder; + cav->cave[x][y] = Cblank; // then copy the real level contents from level file into the playfield for (y = 0; y < cav->height; y++) for (x = 0; x < cav->width; x++) { - int new_element = map_element_RND_to_EM(level->field[x][y]); + int new_element = map_element_RND_to_EM_cave(level->field[x][y]); if (level->field[x][y] == EL_AMOEBA_DEAD) - new_element = map_element_RND_to_EM(EL_AMOEBA_WET); + new_element = map_element_RND_to_EM_cave(EL_AMOEBA_WET); - cav->cave_raw[x][y] = new_element; + cav->cave[x][y] = new_element; } for (i = 0; i < MAX_PLAYERS; i++) @@ -3604,7 +3610,7 @@ static void CopyNativeLevel_RND_to_EM(struct LevelInfo *level) cav->player_x[player_nr] = x; cav->player_y[player_nr] = y; - cav->cave_raw[x][y] = map_element_RND_to_EM(EL_EMPTY); + cav->cave[x][y] = map_element_RND_to_EM_cave(EL_EMPTY); } } } @@ -3623,14 +3629,14 @@ static void CopyNativeLevel_EM_to_RND(struct LevelInfo *level) { 2, 2 }, }; struct LevelInfo_EM *level_em = level->native_em_level; - struct LEVEL *cav = level_em->cav; + struct CAVE *cav = level_em->cav; int i, j, x, y; level->fieldx = MIN(cav->width, MAX_LEV_FIELDX); level->fieldy = MIN(cav->height, MAX_LEV_FIELDY); level->time = cav->time_seconds; - level->gems_needed = cav->required_initial; + level->gems_needed = cav->gems_needed; sprintf(level->name, "Level %d", level->file_info.nr); @@ -3651,16 +3657,16 @@ static void CopyNativeLevel_EM_to_RND(struct LevelInfo *level) for (y = 0; y < 3; y++) for (x = 0; x < 3; x++) level->yamyam_content[i].e[x][y] = - map_element_EM_to_RND(cav->eater_array[i][y * 3 + x]); + map_element_EM_to_RND_cave(cav->eater_array[i][y * 3 + x]); level->amoeba_speed = cav->amoeba_time; - level->time_magic_wall = cav->wonderwall_time_initial; + level->time_magic_wall = cav->wonderwall_time; level->time_wheel = cav->wheel_time; level->android_move_time = cav->android_move_time; level->android_clone_time = cav->android_clone_time; level->ball_random = cav->ball_random; - level->ball_state_initial = cav->ball_state_initial; + level->ball_state_initial = cav->ball_state; level->ball_time = cav->ball_time; level->num_ball_contents = cav->num_ball_arrays; @@ -3672,19 +3678,19 @@ static void CopyNativeLevel_EM_to_RND(struct LevelInfo *level) level->magnify_time = cav->magnify_time; level->wind_direction_initial = - map_direction_EM_to_RND(cav->wind_direction_initial); + map_direction_EM_to_RND(cav->wind_direction); for (i = 0; i < MAX_ELEMENT_CONTENTS; i++) for (j = 0; j < 8; j++) level->ball_content[i].e[ball_xy[j][0]][ball_xy[j][1]] = - map_element_EM_to_RND(cav->ball_array[i][j]); + map_element_EM_to_RND_cave(cav->ball_array[i][j]); map_android_clone_elements_EM_to_RND(level); // convert the playfield (some elements need special treatment) for (y = 0; y < level->fieldy; y++) for (x = 0; x < level->fieldx; x++) { - int new_element = map_element_EM_to_RND(cav->cave_raw[x][y]); + int new_element = map_element_EM_to_RND_cave(cav->cave[x][y]); if (new_element == EL_AMOEBA_WET && level->amoeba_speed == 0) new_element = EL_AMOEBA_DEAD; @@ -8361,6 +8367,10 @@ static struct TokenInfo global_setup_tokens[] = TYPE_SWITCH, &setup.scroll_delay, "scroll_delay" }, + { + TYPE_SWITCH, + &setup.forced_scroll_delay, "forced_scroll_delay" + }, { TYPE_INTEGER, &setup.scroll_delay_value, "scroll_delay_value" @@ -9106,6 +9116,7 @@ static void setSetupInfoToDefaults(struct SetupInfo *si) si->sound_simple = TRUE; si->toons = TRUE; si->scroll_delay = TRUE; + si->forced_scroll_delay = FALSE; si->scroll_delay_value = STD_SCROLL_DELAY; si->engine_snapshot_mode = getStringCopy(STR_SNAPSHOT_MODE_DEFAULT); si->engine_snapshot_memory = SNAPSHOT_MEMORY_DEFAULT;