rnd-19980920
authorHolger Schemel <info@artsoft.org>
Mon, 21 Sep 1998 09:07:48 +0000 (11:07 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:30:40 +0000 (10:30 +0200)
src/events.c
src/game.c
src/game.h
src/main.c
src/main.h
src/misc.c

index 02a13795d1573693e8dd55b6a7c89f1ad2267215..238aa066ed72188b931a4509121db9ec9d220af4 100644 (file)
@@ -516,10 +516,11 @@ void HandleKey(KeySym key, int key_status)
        case XK_8:
        case XK_9:
          if (key == XK_0)
-           GameSpeed = 500;
+           GameFrameDelay = 500;
          else
-           GameSpeed = (key - XK_0) * 10;
-         printf("GameSpeed == %d\n", GameSpeed);
+           GameFrameDelay = (key - XK_0) * 10;
+         printf("Game speed == %d%% (%d ms delay between two frames)\n",
+                GAME_FRAME_DELAY * 100 / GameFrameDelay, GameFrameDelay);
          break;
 
        case XK_a:
index 384d7431d4b14e611113d302da44945d288b0089..0a7bbd4d7dbcd4a41430c65de4e6a6bbf9841aa5 100644 (file)
@@ -2588,7 +2588,7 @@ void GameActions()
 
 #ifdef DEBUG
   action_delay_value =
-    (tape.playing && tape.fast_forward ? FFWD_FRAME_DELAY : GameSpeed);
+    (tape.playing && tape.fast_forward ? FFWD_FRAME_DELAY : GameFrameDelay);
 #else
   action_delay_value =
     (tape.playing && tape.fast_forward ? FFWD_FRAME_DELAY : GAME_FRAME_DELAY);
@@ -2727,7 +2727,7 @@ void GameActions()
     }
   }
 
-  if (TimeLeft>0 && TimeFrames>=(1000/GameSpeed) && !tape.pausing)
+  if (TimeLeft>0 && TimeFrames>=(1000/GameFrameDelay) && !tape.pausing)
   {
     TimeFrames = 0;
     TimeLeft--;
index 18a9010d3e35710c760201fec43f1dcbe19e67a7..dabcb1afaa9c1d2c3303575ffe8ea04c1d78db37 100644 (file)
@@ -32,7 +32,7 @@
 
 /* fundamental game speed */
 #define GAME_FRAME_DELAY       20      /* frame delay in milliseconds */
-#define FFWD_FRAME_DELAY       1
+#define FFWD_FRAME_DELAY       10      /* 200% speed for fast forward */
 #define FRAMES_PER_SECOND      (1000 / GAME_FRAME_DELAY)
 
 void GetPlayerConfig(void);
index aa4d14bd74124685ac61702223f0ce6411672eda..443a433610c5ab31d86aba2283cf4368f61d22d4 100644 (file)
@@ -64,7 +64,6 @@ int           fading_on = FALSE;
 int            autorecord_on = FALSE;
 int            joystick_nr = 0;
 int            quick_doors = FALSE;
-int            cpu_friendly = TRUE;
 
 BOOL           redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE];
 int            redraw_x1 = 0, redraw_y1 = 0;
@@ -89,7 +88,7 @@ int           level_nr, leveldir_nr, num_leveldirs;
 int            lev_fieldx,lev_fieldy, scroll_x,scroll_y;
 
 int            FX = SX, FY = SY, ScreenMovPos = 0, ScrollStepSize = TILEX/8;
-int            GameSpeed = GAME_FRAME_DELAY, MoveSpeed = 8;
+int            GameFrameDelay = GAME_FRAME_DELAY, MoveSpeed = 8;
 int            BX1 = 0, BY1 = 0, BX2 = SCR_FIELDX-1, BY2 = SCR_FIELDY-1;
 int            JX,JY, lastJX,lastJY, ZX,ZY, ExitX,ExitY;
 int            PlayerMovDir, PlayerMovPos, PlayerPushing;
index d34fbb96085bbae64644fcad02f29afde17b0bd2..bf9fbfec0b7f5e480a0fce97199fcaaee4ae2fd9 100644 (file)
@@ -302,7 +302,6 @@ extern int          fading_on;
 extern int             autorecord_on;
 extern int             joystick_nr;
 extern int             quick_doors;
-extern int             cpu_friendly;
 
 extern BOOL            redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE];
 extern int             redraw_x1, redraw_y1;
@@ -327,7 +326,7 @@ extern int          level_nr, leveldir_nr, num_leveldirs;
 extern int             lev_fieldx,lev_fieldy, scroll_x,scroll_y;
 
 extern int             FX,FY, ScreenMovPos, ScrollStepSize;
-extern int             GameSpeed, MoveSpeed;
+extern int             GameFrameDelay, MoveSpeed;
 extern int             BX1,BY1, BX2,BY2;
 extern int             JX,JY, lastJX,lastJY, ZX,ZY, ExitX,ExitY;
 extern int             PlayerMovDir, PlayerMovPos, PlayerPushing;
index 944458f5669d0bd63d486123b3978d773c5aa8cc..8a17d8c3a1437719ea803e932ad489f75a12c3e6 100644 (file)
@@ -53,9 +53,9 @@ unsigned long Counter()       /* get milliseconds since last call of InitCounter() */
 
 static void sleep_milliseconds(unsigned long milliseconds_delay)
 {
-  if (milliseconds_delay < 5 || !cpu_friendly)
+  if (milliseconds_delay < 5)
   {
-    /* we want to wait less than 5 ms -- if we assume that we have a
+    /* we want to wait only a few ms -- if we assume that we have a
        kernel timer resolution of 10 ms, we would wait far to long;
        therefore it's better to do a short interval of busy waiting
        to get our sleeping time more accurate */
@@ -110,10 +110,18 @@ BOOL DelayReached(unsigned long *counter_var, unsigned long delay)
 
 void WaitUntilDelayReached(unsigned long *counter_var, unsigned long delay)
 {
-  unsigned long actual_counter = Counter();
+  unsigned long actual_counter;
+
+  while(1)
+  {
+    actual_counter = Counter();
 
-  if (actual_counter < *counter_var + delay && actual_counter >= *counter_var)
-    sleep_milliseconds(*counter_var + delay - actual_counter);
+    if (actual_counter < *counter_var + delay &&
+       actual_counter >= *counter_var)
+      sleep_milliseconds((*counter_var + delay - actual_counter) / 2);
+    else
+      break;
+  }
 
   *counter_var = actual_counter;
 }