rnd-20001125-3-src
[rocksndiamonds.git] / src / tools.c
index 559e06bfb8f3e036f83840f7e0e350a8af3a3de6..77f574db3c25be10c396853295bf822bf25191ea 100644 (file)
@@ -99,6 +99,36 @@ void BackToFront()
   if (!redraw_mask)
     return;
 
+  if (global.fps_slowdown && game_status == PLAYING)
+  {
+    static boolean last_frame_skipped = FALSE;
+    boolean skip_even_when_not_scrolling = TRUE;
+    boolean just_scrolling = (ScreenMovDir != 0);
+    boolean verbose = FALSE;
+
+    if (global.fps_slowdown_factor > 1 &&
+       (FrameCounter % global.fps_slowdown_factor) &&
+       (just_scrolling || skip_even_when_not_scrolling))
+    {
+      redraw_mask &= ~REDRAW_MAIN;
+
+      last_frame_skipped = TRUE;
+
+      if (verbose)
+       printf("FRAME SKIPPED\n");
+    }
+    else
+    {
+      if (last_frame_skipped)
+       redraw_mask |= REDRAW_FIELD;
+
+      last_frame_skipped = FALSE;
+
+      if (verbose)
+       printf("frame not skipped\n");
+    }
+  }
+
   /* synchronize X11 graphics at this point; if we would synchronize the
      display immediately after the buffer switching (after the XFlush),
      this could mean that we have to wait for the graphics to complete,
@@ -151,6 +181,7 @@ void BackToFront()
 #endif
       }
     }
+
     redraw_mask &= ~REDRAW_MAIN;
   }
 
@@ -207,6 +238,19 @@ void BackToFront()
                     SX + x * TILEX, SY + y * TILEY);
   }
 
+  if (redraw_mask & REDRAW_FPS)                /* display frames per second */
+  {
+    char text[100];
+    char info1[100];
+
+    sprintf(info1, " (only every %d. frame)", global.fps_slowdown_factor);
+    if (!global.fps_slowdown)
+      info1[0] = '\0';
+
+    sprintf(text, "%.1f fps%s", global.frames_per_second, info1);
+    DrawTextExt(window, gc, SX, SY, text, FS_SMALL, FC_YELLOW);
+  }
+
   FlushDisplay();
 
   for(x=0; x<MAX_BUF_XSIZE; x++)
@@ -883,7 +927,7 @@ void DrawGraphicThruMaskExt(DrawBuffer d, int dest_x, int dest_y, int graphic)
   else
   {
 #if DEBUG
-#ifndef USE_SDL_LIBRARY
+#ifndef TARGET_SDL
     printf("DrawGraphicThruMask(): tile '%d' needs clipping!\n", tile);
 #endif
 #endif
@@ -1066,7 +1110,7 @@ void DrawGraphicShifted(int x,int y, int dx,int dy, int graphic,
     else
     {
 #if DEBUG
-#ifndef        USE_SDL_LIBRARY
+#ifndef        TARGET_SDL
       printf("DrawGraphicShifted(): tile '%d' needs clipping!\n", tile);
 #endif
 #endif
@@ -1783,7 +1827,7 @@ boolean Request(char *text, unsigned int req_state)
   int mx, my, ty, result = -1;
   unsigned int old_door_state;
 
-#ifndef MSDOS
+#if !defined(MSDOS) && !defined(WIN32)
   /* pause network game while waiting for request to answer */
   if (options.network &&
       game_status == PLAYING &&
@@ -2007,7 +2051,7 @@ boolean Request(char *text, unsigned int req_state)
 
   RemapAllGadgets();
 
-#ifndef MSDOS
+#if !defined(MSDOS) && !defined(WIN32)
   /* continue network game after request */
   if (options.network &&
       game_status == PLAYING &&
@@ -2205,7 +2249,7 @@ void UndrawSpecialEditorDoor()
   redraw_mask |= REDRAW_ALL;
 }
 
-#ifndef        USE_SDL_LIBRARY
+#ifndef        TARGET_SDL
 int ReadPixel(DrawBuffer d, int x, int y)
 {
   XImage *pixel_image;