X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame.c;h=eed459776345f33d6bc402864eb4ba6bf1a56c00;hb=050269ccfc40b94a2255939df38831d2c75340d3;hp=c0fa1680b8c8ada252f5abe538d633499756930a;hpb=ef4236ac56bedd0e83777505c4ed63fbf4a74698;p=rocksndiamonds.git diff --git a/src/game.c b/src/game.c index c0fa1680..eed45977 100644 --- a/src/game.c +++ b/src/game.c @@ -14949,6 +14949,64 @@ void RequestRestartGame(char *message) } } +void CheckGameOver(void) +{ + static boolean last_game_over = FALSE; + static int game_over_delay = 0; + int game_over_delay_value = 50; + boolean game_over = checkGameFailed(); + + /* do not handle game over if request dialog is already active */ + if (game.request_active) + return; + + if (!game_over) + { + last_game_over = FALSE; + game_over_delay = game_over_delay_value; + + return; + } + + if (game_over_delay > 0) + { + game_over_delay--; + + return; + } + + if (last_game_over != game_over) + game.restart_game_message = "Game over! Play it again?"; + + last_game_over = game_over; +} + +boolean checkGameSolved(void) +{ + /* set for all game engines if level was solved */ + return local_player->LevelSolved_GameEnd; +} + +boolean checkGameFailed(void) +{ + if (!AllPlayersGone) + return FALSE; + + if (level.game_engine_type == GAME_ENGINE_TYPE_EM) + return (level.native_em_level->lev->home > 0); + else if (level.game_engine_type == GAME_ENGINE_TYPE_SP) + return (game_sp.GameOver && !game_sp.LevelSolved); + else if (level.game_engine_type == GAME_ENGINE_TYPE_MM) + return (game_mm.game_over && !game_mm.level_solved); + else /* GAME_ENGINE_TYPE_RND */ + return (local_player->GameOver && !local_player->LevelSolved); +} + +boolean checkGameEnded(void) +{ + return (checkGameSolved() || checkGameFailed()); +} + /* ------------------------------------------------------------------------- */ /* random generator functions */