#include "files.h"
#include "tools.h"
#include "misc.h"
+#include "tape.h"
+#include "joystick.h"
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);
strncpy(empty_alias,EMPTY_ALIAS,MAX_NAMELEN-1);
fputs(SCORE_COOKIE,file); /* Formatkennung */
- for(i=0;i<LEVELDIR_SIZE(leveldir[leveldir_nr]);i++)
+ for(i=0;i<leveldir[leveldir_nr].levels;i++)
{
for(j=0;j<MAX_SCORE_ENTRIES;j++)
{
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);
char cookie[MAX_FILENAME];
FILE *file;
- sprintf(filename,"%s/%s",LEVEL_PATH,LEVDIR_FILENAME);
+ sprintf(filename,"%s/%s",level_directory,LEVDIR_FILENAME);
if (!(file=fopen(filename,"r")))
{
{
fscanf(file,"%s",leveldir[i].filename);
fscanf(file,"%s",leveldir[i].name);
- fscanf(file,"%d",&leveldir[i].num_ready);
- fscanf(file,"%d",&leveldir[i].num_free);
+ fscanf(file,"%d",&leveldir[i].levels);
+ fscanf(file,"%d",&leveldir[i].readonly);
if (feof(file))
break;
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,"r")))
{
{
fgets(cookie,LEVEL_COOKIE_LEN,file);
fgetc(file);
+
if (strcmp(cookie,LEVEL_COOKIE)) /* ungültiges Format? */
{
fprintf(stderr,"%s: wrong format of level file '%s'!\n",
level.edelsteine = (fgetc(file)<<8) | fgetc(file);
for(i=0;i<MAX_LEVNAMLEN;i++)
level.name[i] = fgetc(file);
- for(i=0;i<MAX_SC_ENTRIES;i++)
+ level.name[MAX_LEVNAMLEN-1] = 0;
+ for(i=0;i<MAX_LEVSCORE_ENTRIES;i++)
level.score[i] = fgetc(file);
- level.amoebe_inhalt = fgetc(file);
for(i=0;i<4;i++)
for(y=0;y<3;y++)
for(x=0;x<3;x++)
level.tempo_amoebe = fgetc(file);
level.dauer_sieb = fgetc(file);
level.dauer_ablenk = fgetc(file);
+ level.amoebe_inhalt = fgetc(file);
- for(i=0;i<19;i++) /* Rest reserviert / Headergröße 80 Bytes */
+ for(i=0;i<NUM_FREE_LVHD_BYTES;i++) /* Rest frei / Headergröße 80 Bytes */
fgetc(file);
for(y=0;y<MAX_LEV_FIELDY;y++)
level.time = 100;
level.edelsteine = 0;
strncpy(level.name,"Nameless Level",MAX_LEVNAMLEN-1);
- for(i=0;i<MAX_SC_ENTRIES;i++)
+ for(i=0;i<MAX_LEVSCORE_ENTRIES;i++)
level.score[i] = 10;
- level.amoebe_inhalt = EL_DIAMANT;
for(i=0;i<4;i++)
for(y=0;y<3;y++)
for(x=0;x<3;x++)
level.tempo_amoebe = 10;
level.dauer_sieb = 10;
level.dauer_ablenk = 10;
+ level.amoebe_inhalt = EL_DIAMANT;
for(y=0;y<STD_LEV_FIELDY;y++)
for(x=0;x<STD_LEV_FIELDX;x++)
char cookie[MAX_FILENAME];
FILE *file;
+#ifndef MSDOS
sprintf(filename,"%s/%s/%d.tape",
- LEVEL_PATH,leveldir[leveldir_nr].filename,level_nr);
+ level_directory,leveldir[leveldir_nr].filename,level_nr);
+#else
+ sprintf(filename,"%s/%s/%d.tap",
+ level_directory,leveldir[leveldir_nr].filename,level_nr);
+#endif
if ((file=fopen(filename,"r")))
{
tape.level_nr = level_nr;
tape.counter = 0;
+ tape.changed = FALSE;
+
tape.recording = FALSE;
tape.playing = FALSE;
tape.pausing = FALSE;
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)
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")))
{
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);
default_player.handicap = 0;
default_player.setup = DEFAULT_SETUP;
default_player.leveldir_nr = 0;
+ default_player.level_nr = 0;
new_player = default_player;
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);
if (!file)
{
player = default_player;
- level_nr = default_player.handicap;
+ level_nr = default_player.level_nr;
return;
}
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 */
{
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;
}
leveldir_nr = 0;
}
else
+ {
player.handicap = new_player.handicap;
+ player.level_nr = new_player.level_nr;
+ }
- level_nr = player.handicap;
+ level_nr = player.level_nr;
fclose(file);
}
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")))
{
for(i=0;i<MAX_LEVNAMLEN;i++)
fputc(level.name[i],file);
- for(i=0;i<MAX_SC_ENTRIES;i++)
+ for(i=0;i<MAX_LEVSCORE_ENTRIES;i++)
fputc(level.score[i],file);
- fputc(level.amoebe_inhalt,file);
for(i=0;i<4;i++)
for(y=0;y<3;y++)
for(x=0;x<3;x++)
fputc(level.tempo_amoebe,file);
fputc(level.dauer_sieb,file);
fputc(level.dauer_ablenk,file);
+ fputc(level.amoebe_inhalt,file);
- for(i=0;i<19;i++) /* Rest reserviert / Headergröße 80 Bytes */
+ for(i=0;i<NUM_FREE_LVHD_BYTES;i++) /* Rest frei / Headergröße 80 Bytes */
fputc(0,file);
for(y=0;y<lev_fieldy;y++)
FILE *file;
BOOL new_tape = TRUE;
+#ifndef MSDOS
sprintf(filename,"%s/%s/%d.tape",
- LEVEL_PATH,leveldir[leveldir_nr].filename,level_nr);
+ level_directory,leveldir[leveldir_nr].filename,level_nr);
+#else
+ sprintf(filename,"%s/%s/%d.tap",
+ level_directory,leveldir[leveldir_nr].filename,level_nr);
+#endif
/* Testen, ob bereits eine Aufnahme existiert */
if ((file=fopen(filename,"r")))
fputs(LEVELREC_COOKIE,file); /* Formatkennung */
fputc(0x0a,file);
- tape = master_tape;
-
fputc((tape.random_seed >> 24) & 0xff,file);
fputc((tape.random_seed >> 16) & 0xff,file);
fputc((tape.random_seed >> 8) & 0xff,file);
chmod(filename, LEVREC_PERMS);
+ tape.changed = FALSE;
+
if (new_tape)
AreYouSure("tape saved !",AYS_CONFIRM);
}
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+")))
{
char cookie[MAX_FILENAME];
FILE *file;
struct PlayerInfo default_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);
}
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);
default_player.handicap = fgetc(file);
default_player.setup = (fgetc(file)<<8) | fgetc(file);
default_player.leveldir_nr = fgetc(file);
+ if (!version_10_file)
+ {
+ default_player.level_nr = fgetc(file);
+ for(i=0;i<10;i++) /* currently unused bytes */
+ fgetc(file);
+ }
+ else
+ default_player.level_nr = default_player.handicap;
if (feof(file)) /* Spieler noch nicht in Liste enthalten */
break;
else /* prüfen, ob Spieler in Liste enthalten */
if (!strncmp(default_player.login_name,player.login_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;
}
}
+ player.level_nr = level_nr;
+
for(i=0;i<MAX_NAMELEN;i++)
fputc(player.login_name[i],file);
for(i=0;i<MAX_NAMELEN;i++)
fputc(player.setup / 256,file);
fputc(player.setup % 256,file);
fputc(player.leveldir_nr,file);
+ if (!version_10_file)
+ {
+ fputc(player.level_nr,file);
+ for(i=0;i<10;i++) /* currently unused bytes */
+ fputc(0,file);
+ }
fclose(file);
}
if (joystick_status==JOYSTICK_OFF)
return;
+#ifndef MSDOS
if (!(file=fopen(JOYDAT_FILE,"r")))
return;
fclose(file);
CheckJoystickData();
+#else
+ load_joystick_data(JOYDAT_FILE);
+#endif
}
void SaveJoystickData()
if (joystick_status==JOYSTICK_OFF)
return;
+#ifndef MSDOS
CheckJoystickData();
if (!(file=fopen(JOYDAT_FILE,"w")))
fclose(file);
chmod(JOYDAT_FILE, JOYDAT_PERMS);
+#else
+ save_joystick_data(JOYDAT_FILE);
+#endif
+
}