X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ffiles.c;h=284ed51fc0c7a8099d7834c099b903756e8de1b2;hb=cfe0b06c84dc509e45c616c21ca1d5ef71f2304f;hp=e349c062a9366d9971933f415ade98c6a96dd33d;hpb=c3d03cdffce070695ba0520d00667b42b8460087;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index e349c062..284ed51f 100644 --- a/src/files.c +++ b/src/files.c @@ -15,6 +15,8 @@ #include "files.h" #include "tools.h" #include "misc.h" +#include "tape.h" +#include "joystick.h" BOOL CreateNewScoreFile() { @@ -24,7 +26,7 @@ BOOL CreateNewScoreFile() FILE *file; sprintf(filename,"%s/%s/%s", - SCORE_PATH,leveldir[leveldir_nr].filename,SCORE_FILENAME); + level_directory,leveldir[leveldir_nr].filename,SCORE_FILENAME); if (!(file=fopen(filename,"w"))) return(FALSE); @@ -34,7 +36,7 @@ BOOL CreateNewScoreFile() strncpy(empty_alias,EMPTY_ALIAS,MAX_NAMELEN-1); fputs(SCORE_COOKIE,file); /* Formatkennung */ - for(i=0;i=MAX_TAPELEN) + int j; + + if (i >= MAX_TAPELEN) break; - tape.pos[i].joystickdata = fgetc(file); - tape.pos[i].delay = fgetc(file); + + for(j=0; j0) + { + tape.pos[i].joystickdata[j] = MV_NO_MOVING; + continue; + } + tape.pos[i].joystickdata[j] = fgetc(file); + } + + tape.pos[i].delay = fgetc(file); + if (feof(file)) break; } + fclose(file); + if (i != tape.length) fprintf(stderr,"%s: level recording file '%s' corrupted!\n", progname,filename); - fclose(file); - - master_tape = tape; + tape.length_seconds = GetTapeLength(); } void LoadScore(int level_nr) @@ -276,7 +303,7 @@ void LoadScore(int level_nr) FILE *file; sprintf(filename,"%s/%s/%s", - SCORE_PATH,leveldir[leveldir_nr].filename,SCORE_FILENAME); + level_directory,leveldir[leveldir_nr].filename,SCORE_FILENAME); if (!(file=fopen(filename,"r"))) { @@ -334,10 +361,11 @@ void LoadPlayerInfo(int mode) FILE *file; char *login_name = GetLoginName(); struct PlayerInfo default_player, new_player; + int version_10_file = FALSE; if (mode==PLAYER_LEVEL) sprintf(filename,"%s/%s/%s", - NAMES_PATH,leveldir[leveldir_nr].filename,NAMES_FILENAME); + level_directory,leveldir[leveldir_nr].filename,NAMES_FILENAME); else sprintf(filename,"%s/%s",CONFIG_PATH,NAMES_FILENAME); @@ -348,6 +376,7 @@ void LoadPlayerInfo(int mode) default_player.handicap = 0; default_player.setup = DEFAULT_SETUP; default_player.leveldir_nr = 0; + default_player.level_nr = 0; new_player = default_player; @@ -368,7 +397,9 @@ void LoadPlayerInfo(int mode) if (file) { fgets(cookie,NAMES_COOKIE_LEN,file); - if (strcmp(cookie,NAMES_COOKIE)) /* ungültiges Format? */ + if (!strcmp(cookie,NAMES_COOKIE_10)) /* altes Format? */ + version_10_file = TRUE; + else if (strcmp(cookie,NAMES_COOKIE)) /* ungültiges Format? */ { fprintf(stderr,"%s: wrong format of names file '%s'!\n", progname,filename); @@ -379,8 +410,8 @@ void LoadPlayerInfo(int mode) if (!file) { - player = default_player; - level_nr = default_player.handicap; + *local_player = default_player; + level_nr = default_player.level_nr; return; } @@ -393,6 +424,14 @@ void LoadPlayerInfo(int mode) new_player.handicap = fgetc(file); new_player.setup = (fgetc(file)<<8) | fgetc(file); new_player.leveldir_nr = fgetc(file); + if (!version_10_file) + { + new_player.level_nr = fgetc(file); + for(i=0;i<10;i++) /* currently unused bytes */ + fgetc(file); + } + else + new_player.level_nr = new_player.handicap; if (feof(file)) /* Spieler noch nicht in Liste enthalten */ { @@ -414,6 +453,12 @@ void LoadPlayerInfo(int mode) fputc(new_player.setup / 256,file); fputc(new_player.setup % 256,file); fputc(new_player.leveldir_nr,file); + if (!version_10_file) + { + fputc(new_player.level_nr,file); + for(i=0;i<10;i++) /* currently unused bytes */ + fputc(0,file); + } } break; } @@ -424,16 +469,19 @@ void LoadPlayerInfo(int mode) if (mode==PLAYER_SETUP) { - player = new_player; - if (player.leveldir_nr < num_leveldirs) - leveldir_nr = player.leveldir_nr; + *local_player = new_player; + if (local_player->leveldir_nr < num_leveldirs) + leveldir_nr = local_player->leveldir_nr; else leveldir_nr = 0; } else - player.handicap = new_player.handicap; + { + local_player->handicap = new_player.handicap; + local_player->level_nr = new_player.level_nr; + } - level_nr = player.handicap; + level_nr = local_player->level_nr; fclose(file); } @@ -444,7 +492,7 @@ void SaveLevel(int level_nr) FILE *file; sprintf(filename,"%s/%s/%d", - LEVEL_PATH,leveldir[leveldir_nr].filename,level_nr); + level_directory,leveldir[leveldir_nr].filename,level_nr); if (!(file=fopen(filename,"w"))) { @@ -464,9 +512,8 @@ void SaveLevel(int level_nr) for(i=0;i> 24) & 0xff,file); fputc((tape.random_seed >> 16) & 0xff,file); fputc((tape.random_seed >> 8) & 0xff,file); @@ -536,7 +587,11 @@ void SaveLevelTape(int level_nr) for(i=0;ilogin_name, MAX_NAMELEN-1)) { - fseek(file,-(2*MAX_NAMELEN+1+2+1),SEEK_CUR); + fseek(file,-(2*MAX_NAMELEN+1+2+1+(version_10_file ? 0 : 11)),SEEK_CUR); break; } } + local_player->level_nr = level_nr; + for(i=0;ilogin_name[i],file); for(i=0;ialias_name[i],file); + fputc(local_player->handicap,file); + fputc(local_player->setup / 256,file); + fputc(local_player->setup % 256,file); + fputc(local_player->leveldir_nr,file); + if (!version_10_file) + { + fputc(local_player->level_nr,file); + for(i=0;i<10;i++) /* currently unused bytes */ + fputc(0,file); + } fclose(file); } @@ -648,6 +725,7 @@ void LoadJoystickData() if (joystick_status==JOYSTICK_OFF) return; +#ifndef MSDOS if (!(file=fopen(JOYDAT_FILE,"r"))) return; @@ -670,6 +748,9 @@ void LoadJoystickData() fclose(file); CheckJoystickData(); +#else + load_joystick_data(JOYDAT_FILE); +#endif } void SaveJoystickData() @@ -680,6 +761,7 @@ void SaveJoystickData() if (joystick_status==JOYSTICK_OFF) return; +#ifndef MSDOS CheckJoystickData(); if (!(file=fopen(JOYDAT_FILE,"w"))) @@ -700,4 +782,8 @@ void SaveJoystickData() fclose(file); chmod(JOYDAT_FILE, JOYDAT_PERMS); +#else + save_joystick_data(JOYDAT_FILE); +#endif + }