X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame.c;h=58162eb893889bbdfbb935f703c03dcdf9b54d83;hb=34392542ff9022d786f7ffe513c8119d49fd5bc5;hp=d8f34be03724384d6fd7f5295e60134bc2d2cf65;hpb=77eea34405c119f20f461acae08cd77ec5c21dd6;p=rocksndiamonds.git diff --git a/src/game.c b/src/game.c index d8f34be0..58162eb8 100644 --- a/src/game.c +++ b/src/game.c @@ -3809,6 +3809,8 @@ void InitGame(void) game.switchgate_pos = 0; game.wind_direction = level.wind_direction_initial; + game.time_final = 0; + game.score = 0; game.score_final = 0; @@ -4706,6 +4708,7 @@ static void LevelSolved(void) game.LevelSolved = TRUE; game.GameOver = TRUE; + game.time_final = (game.no_time_limit ? TimePlayed : TimeLeft); game.score_final = (level.game_engine_type == GAME_ENGINE_TYPE_EM ? game_em.lev->score : level.game_engine_type == GAME_ENGINE_TYPE_MM ? @@ -4715,7 +4718,7 @@ static void LevelSolved(void) MM_HEALTH(game_mm.laser_overload_value) : game.health); - game.LevelSolved_CountingTime = (game.no_time_limit ? TimePlayed : TimeLeft); + game.LevelSolved_CountingTime = game.time_final; game.LevelSolved_CountingScore = game.score_final; game.LevelSolved_CountingHealth = game.health_final; } @@ -4760,23 +4763,27 @@ void GameWon(void) game_over_delay_2 = FRAMES_PER_SECOND / 2; // delay before counting health game_over_delay_3 = FRAMES_PER_SECOND; // delay before ending the game - time = time_final = (game.no_time_limit ? TimePlayed : TimeLeft); + time = time_final = game.time_final; score = score_final = game.score_final; health = health_final = game.health_final; if (time_score > 0) { + int time_final_max = 999; + int time_frames_final_max = time_final_max * FRAMES_PER_SECOND; int time_frames = 0; + int time_frames_left = TimeLeft * FRAMES_PER_SECOND - TimeFrames; + int time_frames_played = TimePlayed * FRAMES_PER_SECOND + TimeFrames; if (TimeLeft > 0) { time_final = 0; - time_frames = TimeLeft * FRAMES_PER_SECOND - TimeFrames; + time_frames = time_frames_left; } - else if (game.no_time_limit && TimePlayed < 999) + else if (game.no_time_limit && TimePlayed < time_final_max) { - time_final = 999; - time_frames = (999 - TimePlayed) * FRAMES_PER_SECOND - TimeFrames; + time_final = time_final_max; + time_frames = time_frames_final_max - time_frames_played; } score_final += time_score * time_frames / FRAMES_PER_SECOND + 0.5;