CloseDoor(DOOR_CLOSE_1);
SaveTapeChecked_LevelSolved(tape.level_nr); // ask to save tape
+
+ // set unique basename for score tape (also saved in high score table)
+ strcpy(tape.score_tape_basename, getScoreTapeBasename(setup.player_name));
}
// if no tape is to be saved, close both doors simultaneously
for (k = 0; k < MAX_SCORE_ENTRIES; k++)
{
- boolean score_is_better = (game.score_final > scores.entry[k].score);
- boolean score_is_equal = (game.score_final == scores.entry[k].score);
- boolean time_is_better = (game.score_time_final < scores.entry[k].time);
- boolean time_is_equal = (game.score_time_final == scores.entry[k].time);
+ struct ScoreEntry *entry = &scores.entry[k];
+ boolean score_is_better = (game.score_final > entry->score);
+ boolean score_is_equal = (game.score_final == entry->score);
+ boolean time_is_better = (game.score_time_final < entry->time);
+ boolean time_is_equal = (game.score_time_final == entry->time);
boolean better_by_score = (score_is_better ||
(score_is_equal && time_is_better));
boolean better_by_time = (time_is_better ||
(time_is_equal && score_is_better));
boolean is_better = (level.rate_time_over_score ? better_by_time :
better_by_score);
- boolean entry_is_empty = (scores.entry[k].score == 0 &&
- scores.entry[k].time == 0);
+ boolean entry_is_empty = (entry->score == 0 &&
+ entry->time == 0);
if (is_better || entry_is_empty)
{
put_into_list:
- strncpy(scores.entry[k].name, setup.player_name, MAX_PLAYER_NAME_LEN);
- scores.entry[k].name[MAX_PLAYER_NAME_LEN] = '\0';
- scores.entry[k].score = game.score_final;
- scores.entry[k].time = game.score_time_final;
+ strcpy(entry->tape_basename, tape.score_tape_basename);
+ strncpy(entry->name, setup.player_name, MAX_PLAYER_NAME_LEN);
+ entry->name[MAX_PLAYER_NAME_LEN] = '\0';
+ entry->score = game.score_final;
+ entry->time = game.score_time_final;
position = k;
break;
}
else if (one_score_entry_per_name &&
- !strncmp(setup.player_name, scores.entry[k].name,
- MAX_PLAYER_NAME_LEN))
+ !strncmp(setup.player_name, entry->name, MAX_PLAYER_NAME_LEN))
break; // player already there with a higher score
}
- if (position >= 0)
+ if (position >= 0)
+ {
+ SaveScoreTape(level_nr);
SaveScore(level_nr);
+ }
return position;
}
RemovePlayer(player);
}
- if (!game.LevelSolved && level.use_step_counter)
+ if (level.use_step_counter)
{
int i;
{
TimeLeft--;
- if (TimeLeft <= 10 && setup.time_limit)
+ if (TimeLeft <= 10 && setup.time_limit && !game.LevelSolved)
PlaySound(SND_GAME_RUNNING_OUT_OF_TIME);
game_panel_controls[GAME_PANEL_TIME].value = TimeLeft;
DisplayGameControlValues();
- if (!TimeLeft && setup.time_limit)
+ if (!TimeLeft && setup.time_limit && !game.LevelSolved)
for (i = 0; i < MAX_PLAYERS; i++)
KillPlayer(&stored_player[i]);
}