X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame.c;h=259d19b6c54f858bee6ca6701bd6ce5b64ec94fd;hb=c87fc56ebe59b3d5158e7e6f01d7aa9bf667737e;hp=1c33d10b8ef21cceb3570c909ab408321434b2f4;hpb=b4d6d8ae51658490fd6d0a23b81a0d98c99df925;p=rocksndiamonds.git diff --git a/src/game.c b/src/game.c index 1c33d10b..259d19b6 100644 --- a/src/game.c +++ b/src/game.c @@ -5050,6 +5050,9 @@ void GameEnd(void) if (setup.auto_play_next_level) { + scores.continue_playing = TRUE; + scores.next_level_nr = level_nr; + LoadLevel(level_nr); SaveLevelSetup_SeriesInfo(); @@ -5062,9 +5065,7 @@ void GameEnd(void) DrawHallOfFame(last_level_nr); } - else if (setup.auto_play_next_level && setup.increment_levels && - last_level_nr < leveldir_current->last_level && - !network_playing) + else if (scores.continue_playing) { StartGameActions(network.enabled, setup.autorecord, level.random_seed); } @@ -5151,7 +5152,8 @@ static int addScoreEntry(struct ScoreInfo *list, struct ScoreEntry *new_entry, } } - return -1; + // special case: new score is beyond the last high score list position + return MAX_SCORE_ENTRIES; } void NewHighScore(int level_nr, boolean tape_saved) @@ -5169,6 +5171,19 @@ void NewHighScore(int level_nr, boolean tape_saved) scores.last_added = addScoreEntry(&scores, &new_entry, one_per_name); + if (scores.last_added >= MAX_SCORE_ENTRIES) + { + scores.last_added = MAX_SCORE_ENTRIES - 1; + scores.force_last_added = TRUE; + + scores.entry[scores.last_added] = new_entry; + + // store last added local score entry (before merging server scores) + scores.last_added_local = scores.last_added; + + return; + } + if (scores.last_added < 0) return;