added asking for restart after game was lost (MM game engine only)
authorHolger Schemel <info@artsoft.org>
Sat, 10 Mar 2018 19:18:07 +0000 (20:18 +0100)
committerHolger Schemel <info@artsoft.org>
Fri, 23 Mar 2018 22:21:18 +0000 (23:21 +0100)
src/game.c
src/game.h
src/game_mm/mm_game.c
src/init.c
src/screens.c

index 464cdc0ba6d767e6b7d0c82d7f50fc7e7b416eb2..f8606638343c4427fddb0d3f93790a1d4a4e48e0 100644 (file)
@@ -4227,6 +4227,7 @@ void InitGame()
   }
 
   game.restart_level = FALSE;
+  game.restart_game_message = NULL;
 
   if (level.game_engine_type == GAME_ENGINE_TYPE_MM)
     InitGameActions_MM();
@@ -14958,6 +14959,22 @@ void RequestQuitGame(boolean ask_if_really_quit)
                     "Do you really want to quit the game?");
 }
 
+void RequestRestartGame(char *message)
+{
+  game.restart_game_message = NULL;
+
+  if (Request(message, REQ_ASK | REQ_STAY_CLOSED))
+  {
+    StartGameActions(options.network, setup.autorecord, level.random_seed);
+  }
+  else
+  {
+    SetGameStatus(GAME_MODE_MAIN);
+
+    DrawMainMenu();
+  }
+}
+
 
 /* ------------------------------------------------------------------------- */
 /* random generator functions                                                */
index 34854a773c1426a7b06487489407a8d6eb82a21b..93e1d0948fbd3de468f3ad1c870e48da4532106a 100644 (file)
@@ -207,6 +207,9 @@ struct GameInfo
   /* values for special game initialization control */
   boolean restart_level;
 
+  /* trigger message to ask for restarting the game */
+  char *restart_game_message;
+
   /* values for special game control */
   int centered_player_nr;
   int centered_player_nr_next;
@@ -410,6 +413,7 @@ void RaiseScoreElement(int);
 
 void RequestQuitGameExt(boolean, boolean, char *);
 void RequestQuitGame(boolean);
+void RequestRestartGame(char *);
 
 unsigned int InitEngineRandom_RND(int);
 unsigned int RND(int);
index 96be05c4f977ec5c56f52d8eed335ed0d85f862e..0a9d2da6fe061ecab630719923aba7ca3cf565ce 100644 (file)
@@ -2490,6 +2490,8 @@ static void Explode_MM(int x, int y, int phase, int mode)
     else if (IS_MCDUFFIN(Store[x][y]))
     {
       Store[x][y] = EL_EMPTY;
+
+      game.restart_game_message = "Bomb killed Mc Duffin ! Play it again ?";
     }
 
     Feld[x][y] = Store[x][y];
@@ -3181,6 +3183,8 @@ static void GameActions_MM_Ext(struct MouseActionInfo action, boolean warp_mode)
 
       SetTileCursorActive(FALSE);
 
+      game.restart_game_message = "Out of magic energy ! Play it again ?";
+
 #if 0
       if (Request("Out of magic energy ! Play it again ?",
                  REQ_ASK | REQ_STAY_CLOSED))
@@ -3313,6 +3317,8 @@ static void GameActions_MM_Ext(struct MouseActionInfo action, boolean warp_mode)
 
       SetTileCursorActive(FALSE);
 
+      game.restart_game_message = "Magic spell hit Mc Duffin ! Play it again ?";
+
 #if 0
       if (Request("Magic spell hit Mc Duffin ! Play it again ?",
                  REQ_ASK | REQ_STAY_CLOSED))
index dc929129d257df31797827dd1da0cbbea6e39765..45f08cd69aac51c75b34b248260252107111dc1f 100644 (file)
@@ -5064,6 +5064,7 @@ static void InitSetup()
 static void InitGameInfo()
 {
   game.restart_level = FALSE;
+  game.restart_game_message = NULL;
 }
 
 static void InitPlayerInfo()
index 1a2bc9b7e24a778c3e02402cbfa67ff26c6e370b..e20f4deb67a8fe729b207733fdf6dfc5d83ad83b 100644 (file)
@@ -7091,6 +7091,9 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button)
 
 void HandleGameActions()
 {
+  if (game.restart_game_message != NULL)
+    RequestRestartGame(game.restart_game_message);
+
   if (game_status != GAME_MODE_PLAYING)
     return;