X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Ffiles.c;h=e0446de5604e47c9569087d904856e86b508b3d8;hb=4f99eecc06f270aa3c8f536c0b3813c743d19ef5;hp=e4b5a7315df438f675407942898129d4d1c089d2;hpb=2d603d06ca862f3ca0721b66f62da188faf866c4;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index e4b5a731..e0446de5 100644 --- a/src/files.c +++ b/src/files.c @@ -1,7 +1,7 @@ /*********************************************************** * Rocks'n'Diamonds -- McDuffin Strikes Back! * *----------------------------------------------------------* -* (c) 1995-2001 Artsoft Entertainment * +* (c) 1995-2002 Artsoft Entertainment * * Holger Schemel * * Detmolder Strasse 189 * * 33604 Bielefeld * @@ -58,7 +58,7 @@ static void setLevelInfoToDefaults() for(x=0; xauthor, ANONYMOUS_NAME) != 0) @@ -129,11 +129,15 @@ static void setLevelInfoToDefaults() static int checkLevelElement(int element) { - if (element >= EL_FIRST_RUNTIME_EL) + if (element >= NUM_FILE_ELEMENTS) { Error(ERR_WARN, "invalid level element %d", element); - element = EL_CHAR_FRAGE; + element = EL_CHAR_QUESTION; } + else if (element == EL_PLAYER_OBSOLETE) + element = EL_PLAYER1; + else if (element == EL_KEY_OBSOLETE) + element = EL_KEY1; return element; } @@ -283,7 +287,7 @@ static int LoadLevel_CNT2(FILE *file, int chunk_size, struct LevelInfo *level) if (num_contents < 1 || num_contents > MAX_ELEMENT_CONTENTS) num_contents = STD_ELEMENT_CONTENTS; - if (element == EL_MAMPFER) + if (element == EL_YAMYAM) { level->num_yam_contents = num_contents; @@ -292,7 +296,7 @@ static int LoadLevel_CNT2(FILE *file, int chunk_size, struct LevelInfo *level) for(x=0; x<3; x++) level->yam_content[i][x][y] = content_array[i][x][y]; } - else if (element == EL_AMOEBE_BD) + else if (element == EL_BD_AMOEBA) { level->amoeba_content = content_array[0][0][0]; } @@ -501,13 +505,13 @@ static void SaveLevel_HEAD(FILE *file, struct LevelInfo *level) for(i=0; iencoding_16bit_yamyam ? EL_LEERRAUM : + fputc((level->encoding_16bit_yamyam ? EL_EMPTY : level->yam_content[i][x][y]), file); fputc(level->amoeba_speed, file); fputc(level->time_magic_wall, file); fputc(level->time_wheel, file); - fputc((level->encoding_16bit_amoeba ? EL_LEERRAUM : level->amoeba_content), + fputc((level->encoding_16bit_amoeba ? EL_EMPTY : level->amoeba_content), file); fputc((level->double_speed ? 1 : 0), file); fputc((level->gravity ? 1 : 0), file); @@ -530,7 +534,7 @@ static void SaveLevel_CONT(FILE *file, struct LevelInfo *level) { int i, x, y; - fputc(EL_MAMPFER, file); + fputc(EL_YAMYAM, file); fputc(level->num_yam_contents, file); fputc(0, file); fputc(0, file); @@ -563,7 +567,7 @@ static void SaveLevel_CNT2(FILE *file, struct LevelInfo *level, int element) int num_contents, content_xsize, content_ysize; int content_array[MAX_ELEMENT_CONTENTS][3][3]; - if (element == EL_MAMPFER) + if (element == EL_YAMYAM) { num_contents = level->num_yam_contents; content_xsize = 3; @@ -574,7 +578,7 @@ static void SaveLevel_CNT2(FILE *file, struct LevelInfo *level, int element) for(x=0; x<3; x++) content_array[i][x][y] = level->yam_content[i][x][y]; } - else if (element == EL_AMOEBE_BD) + else if (element == EL_BD_AMOEBA) { num_contents = 1; content_xsize = 1; @@ -583,7 +587,7 @@ static void SaveLevel_CNT2(FILE *file, struct LevelInfo *level, int element) for(i=0; iamoeba_content; } else @@ -666,13 +670,13 @@ void SaveLevel(int level_nr) level.num_yam_contents != STD_ELEMENT_CONTENTS) { putFileChunkBE(file, "CNT2", LEVEL_CHUNK_CNT2_SIZE); - SaveLevel_CNT2(file, &level, EL_MAMPFER); + SaveLevel_CNT2(file, &level, EL_YAMYAM); } if (level.encoding_16bit_amoeba) { putFileChunkBE(file, "CNT2", LEVEL_CHUNK_CNT2_SIZE); - SaveLevel_CNT2(file, &level, EL_AMOEBE_BD); + SaveLevel_CNT2(file, &level, EL_BD_AMOEBA); } fclose(file); @@ -690,8 +694,6 @@ static void setTapeInfoToDefaults() int i; /* always start with reliable default values (empty tape) */ - tape.file_version = FILE_VERSION_ACTUAL; - tape.game_version = GAME_VERSION_ACTUAL; TapeErase(); /* default values (also for pre-1.2 tapes) with only the first player */ @@ -731,8 +733,7 @@ static int LoadTape_HEAD(FILE *file, int chunk_size, struct TapeInfo *tape) if (tape->file_version >= FILE_VERSION_1_2) { byte store_participating_players = fgetc(file); - - ReadUnusedBytesFromFile(file, TAPE_HEADER_UNUSED); + int engine_version; /* since version 1.2, tapes store which players participate in the tape */ tape->num_participating_players = 0; @@ -747,7 +748,11 @@ static int LoadTape_HEAD(FILE *file, int chunk_size, struct TapeInfo *tape) } } - ReadUnusedBytesFromFile(file, 4); + ReadUnusedBytesFromFile(file, TAPE_HEADER_UNUSED); + + engine_version = getFileVersion(file); + if (engine_version > 0) + tape->engine_version = engine_version; } return chunk_size; @@ -977,9 +982,10 @@ static void SaveTape_HEAD(FILE *file, struct TapeInfo *tape) fputc(store_participating_players, file); + /* unused bytes not at the end here for 4-byte alignment of engine_version */ WriteUnusedBytesToFile(file, TAPE_HEADER_UNUSED); - WriteUnusedBytesToFile(file, 4); + putFileVersion(file, tape->engine_version); } static void SaveTape_BODY(FILE *file, struct TapeInfo *tape) @@ -1065,7 +1071,7 @@ void DumpTape(struct TapeInfo *tape) printf("\n"); printf("-------------------------------------------------------------------------------\n"); - printf("Tape of Level %d (file version %06d, game version %06d\n", + printf("Tape of Level %d (file version %06d, game version %06d)\n", tape->level_nr, tape->file_version, tape->game_version); printf("-------------------------------------------------------------------------------\n");