rnd-20060819-1-src
[rocksndiamonds.git] / src / game.c
index aa9fa6f4d27b3e07483d5a6cc55c414ecbe872d3..c1dc08634f037aca2257e542d0fb669afbba5eb9 100644 (file)
@@ -2634,16 +2634,21 @@ void InitGame()
 
   StopAnimation();
 
-  if (do_fading)
-    FadeOutField(TITLE_SCREEN_FADE_DELAY, TITLE_SCREEN_POST_DELAY);
-
   if (!game.restart_level)
     CloseDoor(DOOR_CLOSE_1);
 
+  if (do_fading)
+    FadeOut(REDRAW_FIELD);
+
   /* !!! FIX THIS (START) !!! */
   if (level.game_engine_type == GAME_ENGINE_TYPE_EM)
   {
     InitGameEngine_EM();
+
+#if 1
+    /* blit playfield from scroll buffer to normal back buffer for fading in */
+    BlitScreenToBitmap_EM(backbuffer);
+#endif
   }
   else
   {
@@ -2654,6 +2659,7 @@ void InitGame()
     if (game.timegate_time_left == 0)
       CloseAllOpenTimegates();
 
+    /* blit playfield from scroll buffer to normal back buffer for fading in */
     if (setup.soft_scrolling)
       BlitBitmap(fieldbuffer, backbuffer, FX, FY, SXSIZE, SYSIZE, SX, SY);
 
@@ -2666,7 +2672,9 @@ void InitGame()
   /* !!! FIX THIS (END) !!! */
 
   if (do_fading)
-    FadeInField(TITLE_SCREEN_FADE_DELAY);
+    FadeIn(REDRAW_FIELD);
+
+  BackToFront();
 
   if (!game.restart_level)
   {
@@ -3059,11 +3067,11 @@ void GameEnd()
 
   if (!local_player->LevelSolved_SaveScore)
   {
-    FadeOutField(TITLE_SCREEN_FADE_DELAY, TITLE_SCREEN_POST_DELAY);
+    FadeOut(REDRAW_FIELD);
 
     game_status = GAME_MODE_MAIN;
 
-    DrawMainMenuExt(TITLE_SCREEN_FADE_DELAY, REDRAW_FIELD);
+    DrawAndFadeInMainMenu(REDRAW_FIELD);
 
     return;
   }
@@ -3093,7 +3101,7 @@ void GameEnd()
   }
   else
   {
-    FadeOutField(TITLE_SCREEN_FADE_DELAY, TITLE_SCREEN_POST_DELAY);
+    FadeOut(REDRAW_FIELD);
 
     game_status = GAME_MODE_MAIN;
 
@@ -3103,7 +3111,7 @@ void GameEnd()
       TapeErase();
     }
 
-    DrawMainMenuExt(TITLE_SCREEN_FADE_DELAY, REDRAW_FIELD);
+    DrawAndFadeInMainMenu(REDRAW_FIELD);
   }
 
   local_player->LevelSolved_SaveScore = FALSE;
@@ -9924,8 +9932,26 @@ void GameActions()
   network_player_action_received = FALSE;
 #endif
 
+  /* when playing tape, read previously recorded player input from tape data */
   recorded_player_action = (tape.playing ? TapePlayAction() : NULL);
 
+#if 1
+  /* TapePlayAction() may return NULL when toggling to "pause before death" */
+  if (tape.pausing)
+    return;
+#endif
+
+#if 0
+  if (tape.playing)
+  {
+    if (recorded_player_action == NULL)
+      printf("!!! THIS SHOULD NOT HAPPEN !!!\n");
+    else
+      printf("::: %05d: TAPE PLAYING: %08x\n",
+            FrameCounter, recorded_player_action[0]);
+  }
+#endif
+
   if (tape.set_centered_player)
   {
     game.centered_player_nr_next = tape.centered_player_nr_next;
@@ -9972,6 +9998,12 @@ void GameActions()
   if (tape.recording)
     TapeRecordAction(tape_action);
 
+#if 0
+  if (tape.recording)
+    printf("::: %05d: TAPE RECORDING: %08x\n",
+          FrameCounter, tape_action[0]);
+#endif
+
   if (level.game_engine_type == GAME_ENGINE_TYPE_EM)
   {
     GameActions_EM_Main();
@@ -13434,11 +13466,11 @@ void RequestQuitGame(boolean ask_if_really_quit)
       }
       else
       {
-       FadeOutField(TITLE_SCREEN_FADE_DELAY, TITLE_SCREEN_POST_DELAY);
+       FadeOut(REDRAW_FIELD);
 
        game_status = GAME_MODE_MAIN;
 
-       DrawMainMenuExt(TITLE_SCREEN_FADE_DELAY, REDRAW_FIELD);
+       DrawAndFadeInMainMenu(REDRAW_FIELD);
       }
     }
   }