X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ffiles.c;h=5631595e6b59c70f5fbaf5f13ad59e0e27606da1;hb=64d0700c316f0c9dee9730c93ad2b13785b3dad4;hp=aa6ce2595cd11b718e80c263d58f0e806762f455;hpb=1847b9f73a9189758958980912c005dc289e1b08;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index aa6ce259..5631595e 100644 --- a/src/files.c +++ b/src/files.c @@ -227,8 +227,8 @@ static struct LevelFileConfigInfo chunk_config_INFO[] = { -1, -1, -1, -1, - NULL, -1, - }, + NULL, -1 + } }; static struct LevelFileConfigInfo chunk_config_ELEM[] = @@ -722,8 +722,8 @@ static struct LevelFileConfigInfo chunk_config_ELEM[] = { -1, -1, -1, -1, - NULL, -1, - }, + NULL, -1 + } }; static struct LevelFileConfigInfo chunk_config_NOTE[] = @@ -750,8 +750,8 @@ static struct LevelFileConfigInfo chunk_config_NOTE[] = { -1, -1, -1, -1, - NULL, -1, - }, + NULL, -1 + } }; static struct LevelFileConfigInfo chunk_config_CUSX_base[] = @@ -956,7 +956,7 @@ static struct LevelFileConfigInfo chunk_config_CUSX_base[] = -1, -1, NULL, -1, NULL - }, + } }; static struct LevelFileConfigInfo chunk_config_CUSX_change[] = @@ -1094,8 +1094,8 @@ static struct LevelFileConfigInfo chunk_config_CUSX_change[] = { -1, -1, -1, -1, - NULL, -1, - }, + NULL, -1 + } }; static struct LevelFileConfigInfo chunk_config_GRPX[] = @@ -1135,8 +1135,63 @@ static struct LevelFileConfigInfo chunk_config_GRPX[] = { -1, -1, -1, -1, - NULL, -1, + NULL, -1 + } +}; + +static struct LevelFileConfigInfo chunk_config_CONF[] = /* (OBSOLETE) */ +{ + { + EL_PLAYER_1, -1, + TYPE_BOOLEAN, CONF_VALUE_8_BIT(9), + &li.block_snap_field, TRUE + }, + { + EL_PLAYER_1, -1, + TYPE_BOOLEAN, CONF_VALUE_8_BIT(13), + &li.continuous_snapping, TRUE + }, + { + EL_PLAYER_1, -1, + TYPE_INTEGER, CONF_VALUE_8_BIT(1), + &li.initial_player_stepsize[0], STEPSIZE_NORMAL + }, + { + EL_PLAYER_1, -1, + TYPE_BOOLEAN, CONF_VALUE_8_BIT(10), + &li.use_start_element[0], FALSE + }, + { + EL_PLAYER_1, -1, + TYPE_ELEMENT, CONF_VALUE_16_BIT(1), + &li.start_element[0], EL_PLAYER_1 + }, + { + EL_PLAYER_1, -1, + TYPE_BOOLEAN, CONF_VALUE_8_BIT(11), + &li.use_artwork_element[0], FALSE + }, + { + EL_PLAYER_1, -1, + TYPE_ELEMENT, CONF_VALUE_16_BIT(2), + &li.artwork_element[0], EL_PLAYER_1 + }, + { + EL_PLAYER_1, -1, + TYPE_BOOLEAN, CONF_VALUE_8_BIT(12), + &li.use_explosion_element[0], FALSE }, + { + EL_PLAYER_1, -1, + TYPE_ELEMENT, CONF_VALUE_16_BIT(3), + &li.explosion_element[0], EL_PLAYER_1 + }, + + { + -1, -1, + -1, -1, + NULL, -1 + } }; static struct @@ -2527,6 +2582,11 @@ static int LoadLevel_CUS1(FILE *file, int chunk_size, struct LevelInfo *level) #endif #if 1 + /* older game versions that wrote level files with CUS1 chunks used + different default push delay values (not yet stored in level file) */ + element_info[element].push_delay_fixed = 2; + element_info[element].push_delay_random = 8; +#else /* needed for older levels (see src/init.c for details) */ element_info[element].push_delay_fixed = -1; /* initialize later */ element_info[element].push_delay_random = -1; /* initialize later */ @@ -3005,6 +3065,28 @@ static int LoadLevel_INFO(FILE *file, int chunk_size, struct LevelInfo *level) return real_chunk_size; } +static int LoadLevel_CONF(FILE *file, int chunk_size, struct LevelInfo *level) +{ + int real_chunk_size = 0; + + li = *level; /* copy level data into temporary buffer */ + + while (!feof(file)) + { + int element = getMappedElement(getFile16BitBE(file)); + + real_chunk_size += 2; + real_chunk_size += LoadLevel_MicroChunk(file, chunk_config_CONF, + element, element); + if (real_chunk_size >= chunk_size) + break; + } + + *level = li; /* copy temporary buffer back to level data */ + + return real_chunk_size; +} + static int LoadLevel_ELEM(FILE *file, int chunk_size, struct LevelInfo *level) { int real_chunk_size = 0; @@ -3353,6 +3435,7 @@ static void LoadLevelFromFileInfo_RND(struct LevelInfo *level, { "CUS3", -1, LoadLevel_CUS3 }, { "CUS4", -1, LoadLevel_CUS4 }, { "GRP1", -1, LoadLevel_GRP1 }, + { "CONF", -1, LoadLevel_CONF }, { "ELEM", -1, LoadLevel_ELEM }, { "NOTE", -1, LoadLevel_NOTE }, { "CUSX", -1, LoadLevel_CUSX }, @@ -4930,6 +5013,7 @@ static void LoadLevel_InitElements(struct LevelInfo *level, char *filename) /* initialize element properties for level editor etc. */ InitElementPropertiesEngine(level->game_version); + InitElementPropertiesAfterLoading(level->game_version); } static void LoadLevel_InitPlayfield(struct LevelInfo *level, char *filename) @@ -6470,6 +6554,7 @@ void LoadTapeFromFilename(char *filename) tape.length_seconds = GetTapeLength(); #if 0 + printf("::: tape file version: %d\n", tape.file_version); printf("::: tape game version: %d\n", tape.game_version); printf("::: tape engine version: %d\n", tape.engine_version); #endif