improved support for restart key when playing BD games with multiple lives
authorHolger Schemel <holger.schemel@virtion.de>
Sun, 5 Jan 2025 21:41:58 +0000 (22:41 +0100)
committerHolger Schemel <holger.schemel@virtion.de>
Sun, 5 Jan 2025 21:41:58 +0000 (22:41 +0100)
src/game.c
src/tape.c

index 3e85cbc28cc809e905fc87ed39d8daf637f6c4a3..186e7749a7ccf6b962bf131a052ce10929d4e65d 100644 (file)
@@ -3747,13 +3747,20 @@ void InitGame(void)
   {
     if (!setup.bd_multiple_lives)
     {
-      // new BD game with normal, single life started (resetting global score is important here)
+      // newly started BD game with normal, single life (resetting global score is important here)
       game_bd.global_lives = 0;
       game_bd.global_score = 0;
     }
-    else if (game_status == GAME_MODE_MAIN)
+    else if (restarting && game_bd.global_lives > 1)
     {
-      // new BD game with multiple lives started, so set initial number of lives and global score
+      // restarted BD game with multiple (and remaining) lives, so decrement number of lives
+      // (also for intermissions; extra life will be added again later)
+      game_bd.global_lives--;
+    }
+    else if (restarting || game_status == GAME_MODE_MAIN)
+    {
+      // newly started BD game with multiple lives (or restarted BD game, but no remaining lives),
+      // so set initial number of lives and reset global score
       game_bd.global_lives = level.native_bd_level->caveset->initial_lives;
       game_bd.global_score = 0;
     }
index cefc170f9b66a357e11327bc27bc0890e9f4934a..35140ad4639565682854b11d6b5ecd65d0666db1 100644 (file)
@@ -1414,22 +1414,6 @@ void TapeRestartGame(void)
   if (!checkRestartGame("Restart game?"))
     return;
 
-  if (level.game_engine_type == GAME_ENGINE_TYPE_BD &&
-      setup.bd_multiple_lives && game_status == GAME_MODE_PLAYING)
-  {
-    if (game_bd.global_lives > 1)
-    {
-      // decrement number of lives (also for intermissions; will be added later)
-      game_bd.global_lives--;
-    }
-    else
-    {
-      // new BD game with multiple lives started, so set initial number of lives and global score
-      game_bd.global_lives = level.native_bd_level->caveset->initial_lives;
-      game_bd.global_score = 0;
-    }
-  }
-
   StartGameActions(network.enabled, setup.autorecord, level.random_seed);
 }