&li.time_score_base, 1
},
+ {
+ -1, -1,
+ TYPE_BOOLEAN, CONF_VALUE_8_BIT(13),
+ &li.rate_time_over_score, FALSE
+ },
+
{
-1, -1,
-1, -1,
for (i = 0; i < MAX_SCORE_ENTRIES; i++)
{
- strcpy(highscore[i].Name, EMPTY_PLAYER_NAME);
- highscore[i].Score = 0;
+ strcpy(scores.entry[i].name, EMPTY_PLAYER_NAME);
+ scores.entry[i].score = 0;
+ scores.entry[i].time = 0;
}
}
for (i = 0; i < MAX_SCORE_ENTRIES; i++)
{
- if (fscanf(file, "%d", &highscore[i].Score) == EOF)
+ if (fscanf(file, "%d", &scores.entry[i].score) == EOF)
Warn("fscanf() failed; %s", strerror(errno));
if (fgets(line, MAX_LINE_LEN, file) == NULL)
{
if (*line_ptr != ' ' && *line_ptr != '\t' && *line_ptr != '\0')
{
- strncpy(highscore[i].Name, line_ptr, MAX_PLAYER_NAME_LEN);
- highscore[i].Name[MAX_PLAYER_NAME_LEN] = '\0';
+ strncpy(scores.entry[i].name, line_ptr, MAX_PLAYER_NAME_LEN);
+ scores.entry[i].name[MAX_PLAYER_NAME_LEN] = '\0';
break;
}
}
for (i = 0; i < scores->num_entries; i++)
{
for (j = 0; j < MAX_PLAYER_NAME_LEN; j++)
- highscore[i].Name[j] = getFile8Bit(file);
+ scores->entry[i].name[j] = getFile8Bit(file);
- highscore[i].Name[MAX_PLAYER_NAME_LEN] = '\0';
+ scores->entry[i].name[MAX_PLAYER_NAME_LEN] = '\0';
}
chunk_size = scores->num_entries * MAX_PLAYER_NAME_LEN;
int i;
for (i = 0; i < scores->num_entries; i++)
- highscore[i].Score = getFile16BitBE(file);
+ scores->entry[i].score = getFile16BitBE(file);
chunk_size = scores->num_entries * 2;
return chunk_size;
}
+static int LoadScore_TIME(File *file, int chunk_size, struct ScoreInfo *scores)
+{
+ int i;
+
+ for (i = 0; i < scores->num_entries; i++)
+ scores->entry[i].time = getFile32BitBE(file);
+
+ chunk_size = scores->num_entries * 4;
+
+ return chunk_size;
+}
+
void LoadScore(int nr)
{
char *filename = getScoreFilename(nr);
{ "INFO", -1, LoadScore_INFO },
{ "NAME", -1, LoadScore_NAME },
{ "SCOR", -1, LoadScore_SCOR },
+ { "TIME", -1, LoadScore_TIME },
{ NULL, 0, NULL }
};
fprintf(file, "%s\n\n", SCORE_COOKIE);
for (i = 0; i < MAX_SCORE_ENTRIES; i++)
- fprintf(file, "%d %s\n", highscore[i].Score, highscore[i].Name);
+ fprintf(file, "%d %s\n", scores.entry[i].score, scores.entry[i].name);
fclose(file);
for (i = 0; i < scores->num_entries; i++)
{
- int name_size = strlen(highscore[i].Name);
+ int name_size = strlen(scores->entry[i].name);
for (j = 0; j < MAX_PLAYER_NAME_LEN; j++)
- putFile8Bit(file, (j < name_size ? highscore[i].Name[j] : 0));
+ putFile8Bit(file, (j < name_size ? scores->entry[i].name[j] : 0));
}
}
int i;
for (i = 0; i < scores->num_entries; i++)
- putFile16BitBE(file, highscore[i].Score);
+ putFile16BitBE(file, scores->entry[i].score);
+}
+
+static void SaveScore_TIME(FILE *file, struct ScoreInfo *scores)
+{
+ int i;
+
+ for (i = 0; i < scores->num_entries; i++)
+ putFile32BitBE(file, scores->entry[i].time);
}
static void SaveScoreToFilename(char *filename)
int info_chunk_size;
int name_chunk_size;
int scor_chunk_size;
+ int time_chunk_size;
if (!(file = fopen(filename, MODE_WRITE)))
{
info_chunk_size = 2 + (strlen(scores.level_identifier) + 1) + 2 + 2;
name_chunk_size = scores.num_entries * MAX_PLAYER_NAME_LEN;
scor_chunk_size = scores.num_entries * 2;
+ time_chunk_size = scores.num_entries * 4;
putFileChunkBE(file, "RND1", CHUNK_SIZE_UNDEFINED);
putFileChunkBE(file, "SCOR", CHUNK_SIZE_NONE);
putFileChunkBE(file, "SCOR", scor_chunk_size);
SaveScore_SCOR(file, &scores);
+ putFileChunkBE(file, "TIME", time_chunk_size);
+ SaveScore_TIME(file, &scores);
+
fclose(file);
SetFilePermissions(filename, permissions);
scores.level_nr = level_nr;
for (i = 0; i < MAX_SCORE_ENTRIES; i++)
- if (highscore[i].Score == 0 &&
- strEqual(highscore[i].Name, EMPTY_PLAYER_NAME))
+ if (scores.entry[i].score == 0 &&
+ scores.entry[i].time == 0 &&
+ strEqual(scores.entry[i].name, EMPTY_PLAYER_NAME))
break;
scores.num_entries = i;