X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ffiles.c;h=e4b5a7315df438f675407942898129d4d1c089d2;hb=2d603d06ca862f3ca0721b66f62da188faf866c4;hp=7683103022d5eab1ce410a2badb9a76e174692d7;hpb=cb5fe20318d9b2c18cb82bc1f7197150cfba7bc0;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index 76831030..e4b5a731 100644 --- a/src/files.c +++ b/src/files.c @@ -30,7 +30,7 @@ #define LEVEL_CHUNK_CNT2_SIZE 160 /* size of level CNT2 chunk */ #define LEVEL_CHUNK_CNT2_UNUSED 11 /* unused CNT2 chunk bytes */ #define TAPE_HEADER_SIZE 20 /* size of tape file header */ -#define TAPE_HEADER_UNUSED 7 /* unused tape header bytes */ +#define TAPE_HEADER_UNUSED 3 /* unused tape header bytes */ /* file identifier strings */ #define LEVEL_COOKIE_TMPL "ROCKSNDIAMONDS_LEVEL_FILE_VERSION_x.x" @@ -140,7 +140,8 @@ static int checkLevelElement(int element) static int LoadLevel_VERS(FILE *file, int chunk_size, struct LevelInfo *level) { - ReadChunk_VERS(file, &(level->file_version), &(level->game_version)); + level->file_version = getFileVersion(file); + level->game_version = getFileVersion(file); return chunk_size; } @@ -444,6 +445,10 @@ void LoadLevel(int level_nr) /* player was faster than monsters in (pre-)1.0 levels */ level.double_speed = TRUE; } + + /* Default behaviour for EM style gems was "slippery" only in 2.0.1 */ + if (level.game_version == VERSION_IDENT(2,0,1)) + level.em_slippery_gems = TRUE; } else { @@ -471,6 +476,12 @@ void LoadLevel(int level_nr) SetBorderElement(); } +static void SaveLevel_VERS(FILE *file, struct LevelInfo *level) +{ + putFileVersion(file, level->file_version); + putFileVersion(file, level->game_version); +} + static void SaveLevel_HEAD(FILE *file, struct LevelInfo *level) { int i, x, y; @@ -610,6 +621,8 @@ void SaveLevel(int level_nr) return; } + level.file_version = FILE_VERSION_ACTUAL; + level.game_version = GAME_VERSION_ACTUAL; /* check level field for 16-bit elements */ level.encoding_16bit_field = FALSE; @@ -638,7 +651,7 @@ void SaveLevel(int level_nr) putFileChunkBE(file, "CAVE", CHUNK_SIZE_NONE); putFileChunkBE(file, "VERS", FILE_VERS_CHUNK_SIZE); - WriteChunk_VERS(file, FILE_VERSION_ACTUAL, GAME_VERSION_ACTUAL); + SaveLevel_VERS(file, &level); putFileChunkBE(file, "HEAD", LEVEL_HEADER_SIZE); SaveLevel_HEAD(file, &level); @@ -700,7 +713,8 @@ static void setTapeInfoToDefaults() static int LoadTape_VERS(FILE *file, int chunk_size, struct TapeInfo *tape) { - ReadChunk_VERS(file, &(tape->file_version), &(tape->game_version)); + tape->file_version = getFileVersion(file); + tape->game_version = getFileVersion(file); return chunk_size; } @@ -732,6 +746,8 @@ static int LoadTape_HEAD(FILE *file, int chunk_size, struct TapeInfo *tape) tape->num_participating_players++; } } + + ReadUnusedBytesFromFile(file, 4); } return chunk_size; @@ -939,6 +955,12 @@ void LoadTape(int level_nr) tape.length_seconds = GetTapeLength(); } +static void SaveTape_VERS(FILE *file, struct TapeInfo *tape) +{ + putFileVersion(file, tape->file_version); + putFileVersion(file, tape->game_version); +} + static void SaveTape_HEAD(FILE *file, struct TapeInfo *tape) { int i; @@ -956,6 +978,8 @@ static void SaveTape_HEAD(FILE *file, struct TapeInfo *tape) fputc(store_participating_players, file); WriteUnusedBytesToFile(file, TAPE_HEADER_UNUSED); + + WriteUnusedBytesToFile(file, 4); } static void SaveTape_BODY(FILE *file, struct TapeInfo *tape) @@ -997,6 +1021,9 @@ void SaveTape(int level_nr) return; } + tape.file_version = FILE_VERSION_ACTUAL; + tape.game_version = GAME_VERSION_ACTUAL; + /* count number of participating players */ for(i=0; igraphics_set = getStringCopy(GRAPHICS_SUBDIR); si->sounds_set = getStringCopy(SOUNDS_SUBDIR); si->music_set = getStringCopy(MUSIC_SUBDIR); + si->override_level_graphics = FALSE; + si->override_level_sounds = FALSE; + si->override_level_music = FALSE; si->shortcut.save_game = DEFAULT_KEY_SAVE_GAME; si->shortcut.load_game = DEFAULT_KEY_LOAD_GAME;