rnd-19980828
authorHolger Schemel <info@artsoft.org>
Fri, 28 Aug 1998 09:49:05 +0000 (11:49 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:30:29 +0000 (10:30 +0200)
src/events.c
src/game.c
src/game.h
src/main.c
src/main.h
src/tools.c

index b563a8605e0c54fd28fea397576e9a119613eadf..4fecf14437dd6b978217d74840d7f6fcc37734d0 100644 (file)
@@ -468,12 +468,6 @@ void HandleKey(KeySym key, int key_status)
        case XK_7:
        case XK_8:
        case XK_9:
-         /*
-         MoveSpeed = key - XK_0;
-         printf("speed == %d\n", MoveSpeed);
-         break;
-         */
-
          if (key == XK_0)
            GameSpeed = 50;
          else
@@ -482,27 +476,28 @@ void HandleKey(KeySym key, int key_status)
          break;
 
        case XK_a:
-         if (ScrollSteps == TILEX/4)
-           ScrollSteps = TILEX/8;
+         if (ScrollStepSize == TILEX/8)
+           ScrollStepSize = TILEX/4;
          else
-           ScrollSteps = TILEX/4;
+           ScrollStepSize = TILEX/8;
+         printf("ScrollStepSize == %d\n", ScrollStepSize);
          break;
 
        case XK_f:
-         GameSpeed = 2;
-         printf("GameSpeed == %d\n", GameSpeed);
+         ScrollStepSize = TILEX/8;
+         printf("ScrollStepSize == %d (1/8)\n", ScrollStepSize);
          break;
        case XK_g:
-         GameSpeed = 3;
-         printf("GameSpeed == %d\n", GameSpeed);
+         ScrollStepSize = TILEX/4;
+         printf("ScrollStepSize == %d (1/4)\n", ScrollStepSize);
          break;
        case XK_h:
-         GameSpeed = 4;
-         printf("GameSpeed == %d\n", GameSpeed);
+         ScrollStepSize = TILEX/2;
+         printf("ScrollStepSize == %d (1/2)\n", ScrollStepSize);
          break;
        case XK_l:
-         GameSpeed = 50;
-         printf("GameSpeed == %d\n", GameSpeed);
+         ScrollStepSize = TILEX;
+         printf("ScrollStepSize == %d (1/1)\n", ScrollStepSize);
          break;
 
        case XK_Q:
index 2ed2996640d37d969c134f6d6975ecb351eddf72..424ca530d32b6650498dfe2de6a3cbcb52cbd4d8 100644 (file)
@@ -174,7 +174,7 @@ void InitGame()
        }
        break;
       case EL_DYNAMIT:
-       MovDelay[x][y] = 48;
+       MovDelay[x][y] = 96;
        break;
       case EL_BIRNE_AUS:
        Lights++;
@@ -597,12 +597,12 @@ void DrawDynamite(int x, int y)
 
   if (Feld[x][y]==EL_DYNAMIT)
   {
-    if ((phase = (48-MovDelay[x][y])/6) > 6)
+    if ((phase = (96-MovDelay[x][y])/12) > 6)
       phase = 6;
   }
   else
   {
-    if ((phase = ((48-MovDelay[x][y])/3) % 8) > 3)
+    if ((phase = ((96-MovDelay[x][y])/6) % 8) > 3)
       phase = 7-phase;
   }
 
@@ -619,12 +619,12 @@ void CheckDynamite(int x, int y)
     MovDelay[x][y]--;
     if (MovDelay[x][y])
     {
-      if (!(MovDelay[x][y] % 6))
+      if (!(MovDelay[x][y] % 12))
        PlaySoundLevel(x,y,SND_ZISCH);
 
-      if (Feld[x][y]==EL_DYNAMIT && !(MovDelay[x][y] % 6))
+      if (Feld[x][y]==EL_DYNAMIT && !(MovDelay[x][y] % 12))
        DrawDynamite(x,y);
-      else if (Feld[x][y]==EL_DYNABOMB && !(MovDelay[x][y] % 3))
+      else if (Feld[x][y]==EL_DYNABOMB && !(MovDelay[x][y] % 6))
        DrawDynamite(x,y);
 
       return;
@@ -638,7 +638,7 @@ void CheckDynamite(int x, int y)
 void Explode(int ex, int ey, int phase, int mode)
 {
   int x,y;
-  int num_phase = 9, delay = 1;
+  int num_phase = 9, delay = 2;
   int last_phase = num_phase*delay;
   int half_phase = (num_phase/2)*delay;
 
@@ -868,13 +868,13 @@ void Blurb(int x, int y)
     int graphic = (element==EL_BLURB_LEFT ? GFX_BLURB_LEFT : GFX_BLURB_RIGHT);
 
     if (!MovDelay[x][y])       /* neue Phase / noch nicht gewartet */
-      MovDelay[x][y] = 5;
+      MovDelay[x][y] = 9;
 
     if (MovDelay[x][y])                /* neue Phase / in Wartezustand */
     {
       MovDelay[x][y]--;
       if (MovDelay[x][y] && IN_SCR_FIELD(SCROLLX(x),SCROLLY(y)))
-       DrawGraphic(SCROLLX(x),SCROLLY(y),graphic+4-MovDelay[x][y]);
+       DrawGraphic(SCROLLX(x),SCROLLY(y),graphic+4-MovDelay[x][y]/2);
 
       if (!MovDelay[x][y])
       {
@@ -1093,7 +1093,7 @@ void TurnRound(int x, int y)
       MovDir[x][y] = left_dir;
 
     if (element==EL_KAEFER && MovDir[x][y] != old_move_dir)
-      MovDelay[x][y] = 5;
+      MovDelay[x][y] = 9;
     else if (element==EL_BUTTERFLY)    /* && MovDir[x][y]==left_dir) */
       MovDelay[x][y] = 1;
   }
@@ -1109,7 +1109,7 @@ void TurnRound(int x, int y)
       MovDir[x][y] = right_dir;
 
     if (element==EL_FLIEGER && MovDir[x][y] != old_move_dir)
-      MovDelay[x][y] = 5;
+      MovDelay[x][y] = 9;
     else if (element==EL_FIREFLY)      /* && MovDir[x][y]==right_dir) */
       MovDelay[x][y] = 1;
   }
@@ -1135,7 +1135,7 @@ void TurnRound(int x, int y)
     else
       MovDir[x][y] = back_dir;
 
-    MovDelay[x][y] = 8+8*RND(3);
+    MovDelay[x][y] = 16+16*RND(3);
   }
   else if (element==EL_MAMPFER2)
   {
@@ -1159,7 +1159,7 @@ void TurnRound(int x, int y)
     else
       MovDir[x][y] = back_dir;
 
-    MovDelay[x][y] = 8+8*RND(3);
+    MovDelay[x][y] = 16+16*RND(3);
   }
   else if (element==EL_PACMAN)
   {
@@ -1183,7 +1183,7 @@ void TurnRound(int x, int y)
     else
       MovDir[x][y] = back_dir;
 
-    MovDelay[x][y] = 3+RND(20);
+    MovDelay[x][y] = 6+RND(40);
   }
   else if (element==EL_SCHWEIN)
   {
@@ -1346,9 +1346,9 @@ void TurnRound(int x, int y)
       Moving2Blocked(x,y,&newx,&newy);
 
       if (IN_LEV_FIELD(newx,newy) && IS_FREE_OR_PLAYER(newx,newy))
-       MovDelay[x][y] = 4+4*!RND(3);
+       MovDelay[x][y] = 8+8*!RND(3);
       else
-       MovDelay[x][y] = 8;
+       MovDelay[x][y] = 16;
     }
     else
     {
@@ -1419,7 +1419,7 @@ void StartMoving(int x, int y)
       else if (Feld[x][y+1]==EL_MORAST_LEER)
       {
        if (!MovDelay[x][y])
-         MovDelay[x][y] = 16;
+         MovDelay[x][y] = TILEY + 1;
 
        if (MovDelay[x][y])
        {
@@ -1448,7 +1448,7 @@ void StartMoving(int x, int y)
       else if (Feld[x][y+1]==EL_SIEB_LEER)
       {
        if (!MovDelay[x][y])
-         MovDelay[x][y] = 2;
+         MovDelay[x][y] = TILEY/4 + 1;
 
        if (MovDelay[x][y])
        {
@@ -1474,7 +1474,7 @@ void StartMoving(int x, int y)
       else if (Feld[x][y+1]==EL_SIEB2_LEER)
       {
        if (!MovDelay[x][y])
-         MovDelay[x][y] = 2;
+         MovDelay[x][y] = TILEY/4 + 1;
 
        if (MovDelay[x][y])
        {
@@ -1728,7 +1728,7 @@ void StartMoving(int x, int y)
          else
            DrawLevelField(x,y);
 
-         MovDelay[x][y] = 25;
+         MovDelay[x][y] = 50;
          Feld[newx][newy] = EL_BURNING;
          if (IN_LEV_FIELD(newx1,newy1) && Feld[newx1][newy1] == EL_LEERRAUM)
            Feld[newx1][newy1] = EL_BURNING;
@@ -1787,9 +1787,9 @@ void StartMoving(int x, int y)
       if (element == EL_KAEFER || element == EL_FLIEGER)
        DrawLevelField(x,y);
       else if (element == EL_BUTTERFLY || element == EL_FIREFLY)
-       DrawGraphicAnimation(x,y, el2gfx(element), 2, 2, ANIM_NORMAL);
+       DrawGraphicAnimation(x,y, el2gfx(element), 2, 4, ANIM_NORMAL);
       else if (element==EL_SONDE)
-       DrawGraphicAnimation(x,y, GFX_SONDE_START, 8, 1, ANIM_NORMAL);
+       DrawGraphicAnimation(x,y, GFX_SONDE_START, 8, 2, ANIM_NORMAL);
 
       return;
     }
@@ -2041,7 +2041,7 @@ void AmoebeWaechst(int x, int y)
 
   if (!MovDelay[x][y])         /* neue Phase / noch nicht gewartet */
   {
-    MovDelay[x][y] = 4;
+    MovDelay[x][y] = 7;
 
     if (DelayReached(&sound_delay,sound_delay_value))
     {
@@ -2054,7 +2054,7 @@ void AmoebeWaechst(int x, int y)
   {
     MovDelay[x][y]--;
     if (MovDelay[x][y] && IN_SCR_FIELD(SCROLLX(x),SCROLLY(y)))
-      DrawGraphic(SCROLLX(x),SCROLLY(y),GFX_AMOEBING+3-MovDelay[x][y]);
+      DrawGraphic(SCROLLX(x),SCROLLY(y),GFX_AMOEBING+3-MovDelay[x][y]/2);
 
     if (!MovDelay[x][y])
     {
@@ -2198,7 +2198,7 @@ void Life(int ax, int ay)
 {
   int x1,y1,x2,y2;
   static int life[4] = { 2,3,3,3 };    /* "Life"-Parameter */
-  int life_time = 20;
+  int life_time = 40;
   int element = Feld[ax][ay];
 
   if (Stop[ax][ay])
@@ -2286,7 +2286,7 @@ void Ablenk(int x, int y)
 void Birne(int x, int y)
 {
   if (!MovDelay[x][y])         /* neue Phase / noch nicht gewartet */
-    MovDelay[x][y] = 400;
+    MovDelay[x][y] = 800;
 
   if (MovDelay[x][y])          /* neue Phase / in Wartezustand */
   {
@@ -2314,19 +2314,19 @@ void Birne(int x, int y)
 
 void Blubber(int x, int y)
 {
-  DrawGraphicAnimation(x,y, GFX_GEBLUBBER, 4, 5, ANIM_NORMAL);
+  DrawGraphicAnimation(x,y, GFX_GEBLUBBER, 4, 10, ANIM_NORMAL);
 }
 
 void NussKnacken(int x, int y)
 {
   if (!MovDelay[x][y])         /* neue Phase / noch nicht gewartet */
-    MovDelay[x][y] = 4;
+    MovDelay[x][y] = 7;
 
   if (MovDelay[x][y])          /* neue Phase / in Wartezustand */
   {
     MovDelay[x][y]--;
     if (MovDelay[x][y] && IN_SCR_FIELD(SCROLLX(x),SCROLLY(y)))
-      DrawGraphic(SCROLLX(x),SCROLLY(y),GFX_CRACKINGNUT+3-MovDelay[x][y]);
+      DrawGraphic(SCROLLX(x),SCROLLY(y),GFX_CRACKINGNUT+3-MovDelay[x][y]/2);
 
     if (!MovDelay[x][y])
     {
@@ -2358,18 +2358,18 @@ void AusgangstuerPruefen(int x, int y)
 
 void AusgangstuerOeffnen(int x, int y)
 {
-  int speed = 3;
+  int delay = 6;
 
   if (!MovDelay[x][y])         /* neue Phase / noch nicht gewartet */
-    MovDelay[x][y] = 5*speed;
+    MovDelay[x][y] = 5*delay;
 
   if (MovDelay[x][y])          /* neue Phase / in Wartezustand */
   {
     int tuer;
 
     MovDelay[x][y]--;
-    tuer = MovDelay[x][y]/speed;
-    if (!(MovDelay[x][y]%speed) && IN_SCR_FIELD(SCROLLX(x),SCROLLY(y)))
+    tuer = MovDelay[x][y]/delay;
+    if (!(MovDelay[x][y]%delay) && IN_SCR_FIELD(SCROLLX(x),SCROLLY(y)))
       DrawGraphic(SCROLLX(x),SCROLLY(y),GFX_AUSGANG_AUF-tuer);
 
     if (!MovDelay[x][y])
@@ -2382,7 +2382,7 @@ void AusgangstuerOeffnen(int x, int y)
 
 void AusgangstuerBlinken(int x, int y)
 {
-  DrawGraphicAnimation(x,y, GFX_AUSGANG_AUF, 4, 2, ANIM_OSCILLATE);
+  DrawGraphicAnimation(x,y, GFX_AUSGANG_AUF, 4, 4, ANIM_OSCILLATE);
 }
 
 void EdelsteinFunkeln(int x, int y)
@@ -2391,18 +2391,11 @@ void EdelsteinFunkeln(int x, int y)
     return;
 
   if (Feld[x][y] == EL_EDELSTEIN_BD)
-  {
-    const int delay = 4; /* war: 2 */
-    const int frames = 4;
-    int phase = (FrameCounter % (delay*frames)) / delay;
-
-    if (!(FrameCounter % delay))
-      DrawGraphic(SCROLLX(x),SCROLLY(y), GFX_EDELSTEIN_BD - phase);
-  }
+    DrawGraphicAnimation(x,y, GFX_EDELSTEIN_BD, 4, 4, ANIM_REVERSE);
   else
   {
     if (!MovDelay[x][y])       /* neue Phase / noch nicht gewartet */
-      MovDelay[x][y] = 6*!SimpleRND(500);
+      MovDelay[x][y] = 11 * !SimpleRND(500);
 
     if (MovDelay[x][y])                /* neue Phase / in Wartezustand */
     {
@@ -2416,7 +2409,7 @@ void EdelsteinFunkeln(int x, int y)
       if (MovDelay[x][y])
       {
        int src_x,src_y, dest_x,dest_y;
-       int phase = MovDelay[x][y]-1;
+       int phase = (MovDelay[x][y]-1)/2;
 
        src_x  = SX+GFX_PER_LINE*TILEX;
        src_y  = SY+(phase > 2 ? 4-phase : phase)*TILEY;
@@ -2440,18 +2433,18 @@ void EdelsteinFunkeln(int x, int y)
 
 void MauerWaechst(int x, int y)
 {
-  int speed = 3;
+  int delay = 6;
 
   if (!MovDelay[x][y])         /* neue Phase / noch nicht gewartet */
-    MovDelay[x][y] = 3*speed;
+    MovDelay[x][y] = 3*delay;
 
   if (MovDelay[x][y])          /* neue Phase / in Wartezustand */
   {
     int phase;
 
     MovDelay[x][y]--;
-    phase = 2-MovDelay[x][y]/speed;
-    if (!(MovDelay[x][y]%speed) && IN_SCR_FIELD(SCROLLX(x),SCROLLY(y)))
+    phase = 2-MovDelay[x][y]/delay;
+    if (!(MovDelay[x][y]%delay) && IN_SCR_FIELD(SCROLLX(x),SCROLLY(y)))
       DrawGraphic(SCROLLX(x),SCROLLY(y),
                  (Store[x][y]==MV_LEFT ? GFX_MAUER_L1 : GFX_MAUER_R1)+phase);
 
@@ -2481,7 +2474,7 @@ void MauerAbleger(int ax, int ay)
   BOOL links_massiv = FALSE, rechts_massiv = FALSE;
 
   if (!MovDelay[ax][ay])       /* neue Mauer / noch nicht gewartet */
-    MovDelay[ax][ay] = 3;
+    MovDelay[ax][ay] = 6;
 
   if (MovDelay[ax][ay])                /* neue Mauer / in Wartezustand */
   {
@@ -2995,8 +2988,16 @@ void ScrollFigure(int init)
   if (init)
   {
 
-    PlayerGfxPos =
-      (TILEX/ScrollSteps) * (PlayerMovPos / (TILEX/ScrollSteps));
+
+
+    PlayerGfxPos = ScrollStepSize * (PlayerMovPos / ScrollStepSize);
+
+
+
+    /*
+    ScreenMovPos = PlayerGfxPos;
+    redraw_mask |= REDRAW_FIELD;
+    */
 
 
 
@@ -3061,12 +3062,15 @@ void ScrollFigure(int init)
     return;
 
   PlayerMovPos += (PlayerMovPos > 0 ? -1 : 1) * TILEX/8;
+  PlayerGfxPos = ScrollStepSize * (PlayerMovPos / ScrollStepSize);
 
 
-  PlayerGfxPos =
-    (TILEX/ScrollSteps) * (PlayerMovPos / (TILEX/ScrollSteps));
+  /*
+  printf("PlayerGfxPos = %d\n", PlayerGfxPos);
+  */
+
 
-  if (ScreenMovPos)
+  if (ScreenMovPos && ScreenMovPos != PlayerGfxPos)
   {
     ScreenMovPos = PlayerGfxPos;
     redraw_mask |= REDRAW_FIELD;
@@ -3638,7 +3642,7 @@ BOOL PlaceBomb(void)
   if (Dynamite)
   {
     Feld[JX][JY] = EL_DYNAMIT;
-    MovDelay[JX][JY] = 48;
+    MovDelay[JX][JY] = 96;
     Dynamite--;
     DrawText(DX_DYNAMITE,DY_DYNAMITE,int2str(Dynamite,3),FS_SMALL,FC_YELLOW);
     DrawGraphicThruMask(SCROLLX(JX),SCROLLY(JY),GFX_DYNAMIT);
@@ -3646,7 +3650,7 @@ BOOL PlaceBomb(void)
   else
   {
     Feld[JX][JY] = EL_DYNABOMB;
-    MovDelay[JX][JY] = 48;
+    MovDelay[JX][JY] = 96;
     DynaBombsLeft--;
     DrawGraphicThruMask(SCROLLX(JX),SCROLLY(JY),GFX_DYNABOMB);
   }
index 3fdd4a5290207d1fa69f51c58fc2bd978586ec59..54c3784f8687a09218c38fa418e0fe9641dc0f0b 100644 (file)
@@ -31,7 +31,7 @@
 #define EX_BORDER              2
 
 /* fundamental game speed */
-#define GAME_FRAME_DELAY       4
+#define GAME_FRAME_DELAY       2
 #define FFWD_FRAME_DELAY       1
 #define FRAMES_PER_SECOND      (100 / GAME_FRAME_DELAY)
 
index 4f178700577979f0f3bc013c16d2954cb02c9a52..eed5609420106a9984b6cbec570c84d38565a414 100644 (file)
@@ -82,7 +82,7 @@ long          Elementeigenschaften[MAX_ELEMENTS];
 int            level_nr, leveldir_nr, num_leveldirs;
 int            lev_fieldx,lev_fieldy, scroll_x,scroll_y;
 
-int            FX = SX, FY = SY, ScreenMovPos = 0, ScrollSteps = TILEX/4;
+int            FX = SX, FY = SY, ScreenMovPos = 0, ScrollStepSize = TILEX/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 92de9f7972e52bf06eda9dc1b8f200f5d480a1d2..aff6db83ee537004cd4b0bfb976841e0cc95586b 100644 (file)
@@ -306,7 +306,7 @@ extern long         Elementeigenschaften[MAX_ELEMENTS];
 extern int             level_nr, leveldir_nr, num_leveldirs;
 extern int             lev_fieldx,lev_fieldy, scroll_x,scroll_y;
 
-extern int             FX,FY, ScreenMovPos, ScrollSteps;
+extern int             FX,FY, ScreenMovPos, ScrollStepSize;
 extern int             BX1,BY1, BX2,BY2;
 extern int             JX,JY, lastJX,lastJY, ZX,ZY, ExitX,ExitY;
 extern int             PlayerMovDir, PlayerMovPos, PlayerPushing;
@@ -1052,5 +1052,6 @@ extern char               *progname;
 /* für DrawGraphicAnimation (tools.c) und AnimateToon (cartoons.c) */
 #define ANIM_NORMAL    0
 #define ANIM_OSCILLATE 1
+#define ANIM_REVERSE   2
 
 #endif
index a17288a1bf1fc5ae2eb2936cbe98d5fc1fb966c5..befacb27d300fe6b6cb142b4ef7af1621dad0a8a 100644 (file)
@@ -68,7 +68,7 @@ void BackToFront()
   if (redraw_mask & REDRAW_TILES && redraw_tiles > REDRAWTILES_THRESHOLD)
     redraw_mask |= REDRAW_FIELD;
 
-  if (redraw_mask & REDRAW_FIELD)
+  if (redraw_mask & REDRAW_FIELD || ScreenMovPos)
     redraw_mask &= ~REDRAW_TILES;
 
   if (!redraw_mask)
@@ -101,6 +101,15 @@ void BackToFront()
       XCopyArea(display,buffer,window,gc,
                fx,fy, SXSIZE,SYSIZE,
                SX,SY);
+
+
+
+#if 0
+      printf("FULL SCREEN REDRAW [%d]\n", ScreenMovPos);
+#endif
+
+
+
     }
     redraw_mask &= ~REDRAW_MAIN;
   }
@@ -407,6 +416,9 @@ void DrawPlayerField()
 
 
 
+
+
+
   if (draw_thru_mask)
     DrawGraphicShiftedThruMask(sx,sy,sxx,syy,graphic,CUT_NO_CUTTING);
     /*
@@ -442,12 +454,19 @@ void DrawPlayerField()
 
       if (element == EL_FELSBROCKEN && sxx)
       {
-       int phase = PlayerGfxPos / (TILEX/4);
+       int phase = (PlayerGfxPos / (TILEX/4));
 
        if (PlayerMovDir == MV_LEFT)
          graphic += phase;
        else
-         graphic += phase+4;
+         graphic += (phase+4)%4;
+
+
+       /*
+       printf("----> (%d, %d, %d)\n",
+              PlayerGfxPos, phase, graphic);
+              */
+
       }
 
       DrawGraphicShifted(px,py, sxx,syy, graphic, CUT_NO_CUTTING);
@@ -464,12 +483,12 @@ void DrawPlayerField()
 
     if (element == EL_DYNAMIT)
     {
-      if ((phase = (48-MovDelay[x][y])/6) > 6)
+      if ((phase = (96-MovDelay[x][y])/12) > 6)
        phase = 6;
     }
     else
     {
-      if ((phase = ((48-MovDelay[x][y])/3) % 8) > 3)
+      if ((phase = ((96-MovDelay[x][y])/6) % 8) > 3)
        phase = 7-phase;
     }
 
@@ -510,6 +529,9 @@ static int getGraphicAnimationPhase(int frames, int delay, int mode)
   else
     phase = (FrameCounter % (delay * frames)) / delay;
 
+  if (mode == ANIM_REVERSE)
+    phase = -phase;
+
   return(phase);
 }
 
@@ -518,19 +540,6 @@ void DrawGraphicAnimation(int x, int y, int graphic,
 {
   int phase = getGraphicAnimationPhase(frames, delay, mode);
 
-/*
-  int phase;
-
-  if (mode == ANIM_OSCILLATE)
-  {
-    int max_anim_frames = frames*2 - 2;
-    phase = (FrameCounter % (delay * max_anim_frames)) / delay;
-    phase = (phase < frames ? phase : max_anim_frames - phase);
-  }
-  else
-    phase = (FrameCounter % (delay * frames)) / delay;
-*/
-
   if (!(FrameCounter % delay) && IN_SCR_FIELD(SCROLLX(x),SCROLLY(y)))
     DrawGraphic(SCROLLX(x),SCROLLY(y), graphic + phase);
 }