game.restart_level = FALSE;
game.restart_game_message = NULL;
+ game.request_active = FALSE;
if (level.game_engine_type == GAME_ENGINE_TYPE_MM)
InitGameActions_MM();
}
}
+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 */