X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ffiles.c;h=f0be82d6186dc501db9796719a447beab665b576;hb=6df84aae03094174b7418a8c1cce7657d3378d59;hp=211a38d1f295572b094e2bbb094f6702b19514a0;hpb=0918c3eb2f6219a8cc72aa85bd9c4889788dd474;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index 211a38d1..f0be82d6 100644 --- a/src/files.c +++ b/src/files.c @@ -253,12 +253,15 @@ static void setLevelInfoToDefaults() level.dauer_ablenk = 10; level.amoebe_inhalt = EL_DIAMANT; + level.high_speed = FALSE; + strcpy(level.name, "Nameless Level"); for(i=0; i= FILE_VERSION_1_2) { - /* next check body chunk identifier and chunk length */ fgets(chunk, CHUNK_ID_LEN + 1, file); chunk_length = (fgetc(file)<<24) | (fgetc(file)<<16) | (fgetc(file)<<8) | fgetc(file); + + /* look for optional content chunk */ + if (strcmp(chunk, "CONT") == 0 && chunk_length == 4 + 8 * 3 * 3) + { + fgetc(file); + MampferMax = fgetc(file); + fgetc(file); + fgetc(file); + + for(i=0; i<8; i++) + for(y=0; y<3; y++) + for(x=0; x<3; x++) + level.mampfer_inhalt[i][x][y] = fgetc(file); + + fgets(chunk, CHUNK_ID_LEN + 1, file); + chunk_length = + (fgetc(file)<<24) | (fgetc(file)<<16) | (fgetc(file)<<8) | fgetc(file); + } + + /* next check body chunk identifier and chunk length */ if (strcmp(chunk, "BODY") || chunk_length != lev_fieldx * lev_fieldy) { Error(ERR_WARN, "wrong 'BODY' chunk of level file '%s'", filename); @@ -363,8 +395,17 @@ void LoadLevel(int level_nr) fclose(file); +#if 0 if (level.time <= 10) /* minimum playing time of each level */ level.time = 10; +#endif + + if (file_version == FILE_VERSION_1_0) + { + Error(ERR_WARN, "level file '%s' has version number 1.0", filename); + Error(ERR_WARN, "using high speed movement for player"); + level.high_speed = TRUE; + } } void SaveLevel(int level_nr) @@ -415,6 +456,25 @@ void SaveLevel(int level_nr) for(i=0; i> 24) & 0xff, file); + fputc((chunk_length >> 16) & 0xff, file); + fputc((chunk_length >> 8) & 0xff, file); + fputc((chunk_length >> 0) & 0xff, file); + + fputc(EL_MAMPFER, file); + fputc(MampferMax, file); + fputc(0, file); + fputc(0, file); + + for(i=0; i<8; i++) + for(y=0; y<3; y++) + for(x=0; x<3; x++) + fputc(level.mampfer_inhalt[i][x][y], file); + fputs("BODY", file); /* chunk identifier for file body */ chunk_length = lev_fieldx * lev_fieldy; @@ -443,6 +503,17 @@ void LoadTape(int level_nr) int file_version = FILE_VERSION_1_2; /* last version of tape files */ int chunk_length; + /* always start with reliable default values (empty tape) */ + TapeErase(); + + /* default values (also for pre-1.2 tapes) with only the first player */ + tape.player_participates[0] = TRUE; + for(i=1; i 0) - continue; - if (tape.player_participates[j]) tape.pos[i].action[j] = fgetc(file); } @@ -1144,16 +1211,16 @@ static void setSetupInfoToDefaults(struct SetupInfo *si) si->player_name = getStringCopy(getLoginName()); si->sound = TRUE; - si->sound_loops = FALSE; - si->sound_music = FALSE; - si->sound_simple = FALSE; + si->sound_loops = TRUE; + si->sound_music = TRUE; + si->sound_simple = TRUE; si->toons = TRUE; si->double_buffering = TRUE; si->direct_draw = !si->double_buffering; - si->scroll_delay = FALSE; + si->scroll_delay = TRUE; si->soft_scrolling = TRUE; si->fading = FALSE; - si->autorecord = FALSE; + si->autorecord = TRUE; si->quick_doors = FALSE; for (i=0; i