projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
added command line function to write element collecting image to directory
[rocksndiamonds.git]
/
src
/
game.c
diff --git
a/src/game.c
b/src/game.c
index 6d5cf55307e91f756000f5a71c101ee3be496972..23fe5f91eae8572a6dc463d56e2392806bf28970 100644
(file)
--- a/
src/game.c
+++ b/
src/game.c
@@
-5041,9
+5041,9
@@
void GameEnd(void)
}
}
}
}
-static int addScoreEntry(struct ScoreInfo *list, struct ScoreEntry *new_entry)
+static int addScoreEntry(struct ScoreInfo *list, struct ScoreEntry *new_entry,
+ boolean one_score_entry_per_name)
{
{
- boolean one_score_entry_per_name = !program.many_scores_per_name;
int i;
if (strEqual(new_entry->name, EMPTY_PLAYER_NAME))
int i;
if (strEqual(new_entry->name, EMPTY_PLAYER_NAME))
@@
-5066,7
+5066,9
@@
static int addScoreEntry(struct ScoreInfo *list, struct ScoreEntry *new_entry)
entry->time == 0);
// prevent adding server score entries if also existing in local score file
entry->time == 0);
// prevent adding server score entries if also existing in local score file
- if (strEqual(new_entry->tape_basename, entry->tape_basename))
+ // (special case: historic score entries have an empty tape basename entry)
+ if (strEqual(new_entry->tape_basename, entry->tape_basename) &&
+ !strEqual(new_entry->tape_basename, UNDEFINED_FILENAME))
return -1;
if (is_better || entry_is_empty)
return -1;
if (is_better || entry_is_empty)
@@
-5113,6
+5115,7
@@
static int addScoreEntry(struct ScoreInfo *list, struct ScoreEntry *new_entry)
void NewHighScore(int level_nr)
{
struct ScoreEntry new_entry = {{ 0 }}; // (prevent warning from GCC bug 53119)
void NewHighScore(int level_nr)
{
struct ScoreEntry new_entry = {{ 0 }}; // (prevent warning from GCC bug 53119)
+ boolean one_per_name = FALSE;
strncpy(new_entry.tape_basename, tape.score_tape_basename, MAX_FILENAME_LEN);
strncpy(new_entry.name, setup.player_name, MAX_PLAYER_NAME_LEN);
strncpy(new_entry.tape_basename, tape.score_tape_basename, MAX_FILENAME_LEN);
strncpy(new_entry.name, setup.player_name, MAX_PLAYER_NAME_LEN);
@@
-5122,37
+5125,47
@@
void NewHighScore(int level_nr)
LoadScore(level_nr);
LoadScore(level_nr);
- scores.last_added = addScoreEntry(&scores, &new_entry);
+ scores.last_added = addScoreEntry(&scores, &new_entry
, one_per_name
);
if (scores.last_added >= 0)
{
SaveScore(level_nr);
if (scores.last_added >= 0)
{
SaveScore(level_nr);
- if (game.LevelSolved_SaveTape)
- {
- SaveScoreTape(level_nr);
- SaveServerScore(level_nr);
- }
-
// store last added local score entry (before merging server scores)
scores.last_added_local = scores.last_added;
}
// store last added local score entry (before merging server scores)
scores.last_added_local = scores.last_added;
}
+
+ if (game.LevelSolved_SaveTape)
+ {
+ SaveScoreTape(level_nr);
+ SaveServerScore(level_nr);
+ }
}
void MergeServerScore(void)
{
}
void MergeServerScore(void)
{
+ struct ScoreEntry last_added_entry;
+ boolean one_per_name = FALSE;
int i;
int i;
+ if (scores.last_added >= 0)
+ last_added_entry = scores.entry[scores.last_added];
+
for (i = 0; i < server_scores.num_entries; i++)
{
for (i = 0; i < server_scores.num_entries; i++)
{
- int pos = addScoreEntry(&scores, &server_scores.entry[i]);
+ int pos = addScoreEntry(&scores, &server_scores.entry[i]
, one_per_name
);
if (pos >= 0 && pos <= scores.last_added)
scores.last_added++;
}
if (scores.last_added >= MAX_SCORE_ENTRIES)
if (pos >= 0 && pos <= scores.last_added)
scores.last_added++;
}
if (scores.last_added >= MAX_SCORE_ENTRIES)
- scores.last_added = -1;
+ {
+ scores.last_added = MAX_SCORE_ENTRIES - 1;
+ scores.force_last_added = TRUE;
+
+ scores.entry[scores.last_added] = last_added_entry;
+ }
}
static int getElementMoveStepsizeExt(int x, int y, int direction)
}
static int getElementMoveStepsizeExt(int x, int y, int direction)