rnd-20000718-1-src
[rocksndiamonds.git] / src / tools.c
index 57fb652d2c3a58bc0b1cc7426bc251fba259127b..0c9cd1766e69264bcacc83ed69a7f278ac7d9e96 100644 (file)
@@ -338,6 +338,15 @@ int getFontHeight(int font_size, int font_type)
 
 void DrawInitText(char *text, int ypos, int color)
 {
+#ifdef USE_SDL_LIBRARY
+  if (sdl_window && sdl_pix[PIX_SMALLFONT])
+  {
+    SDLFillRectangle(sdl_window, 0, ypos, WIN_XSIZE, FONT2_YSIZE, 0x000000);
+    DrawTextExt(window, gc, (WIN_XSIZE - strlen(text) * FONT2_XSIZE)/2,
+               ypos,text,FS_SMALL,color);
+    SDL_Flip(sdl_window);
+  }
+#else
   if (display && window && pix[PIX_SMALLFONT])
   {
     XFillRectangle(display, window, gc, 0, ypos, WIN_XSIZE, FONT2_YSIZE);
@@ -345,6 +354,7 @@ void DrawInitText(char *text, int ypos, int color)
                ypos,text,FS_SMALL,color);
     XFlush(display);
   }
+#endif
 }
 
 void DrawTextFCentered(int y, int font_type, char *format, ...)
@@ -447,8 +457,15 @@ void DrawTextExt(Drawable d, GC gc, int x, int y,
                  0, 0, font_width, font_height, dest_x, dest_y);
       }
       else
+      {
+#ifdef USE_SDL_LIBRARY
+       SDLCopyArea(sdl_pix[font_pixmap], sdl_window,
+                   src_x, src_y, font_width, font_height, dest_x, dest_y);
+#else
        XCopyArea(display, pix[font_pixmap], d, gc,
                  src_x, src_y, font_width, font_height, dest_x, dest_y);
+#endif
+      }
     }
 
     x += font_width;
@@ -586,6 +603,8 @@ void DrawPlayer(struct PlayerInfo *player)
        graphic = GFX_MURPHY_GO_LEFT;
       else if (player->MovDir & (MV_UP | MV_DOWN) && last_dir == MV_RIGHT)
        graphic = GFX_MURPHY_GO_RIGHT;
+      else
+       graphic = GFX_MURPHY_GO_LEFT;
 
       graphic += getGraphicAnimationPhase(3, 2, ANIM_OSCILLATE);
     }
@@ -645,7 +664,9 @@ void DrawPlayer(struct PlayerInfo *player)
       int element = Feld[next_jx][next_jy];
       int graphic = el2gfx(element);
 
-      if ((element == EL_FELSBROCKEN || element == EL_SP_ZONK) && sxx)
+      if ((element == EL_FELSBROCKEN ||
+          element == EL_SP_ZONK ||
+          element == EL_BD_ROCK) && sxx)
       {
        int phase = (player->GfxPos / (TILEX / 4));
 
@@ -1170,12 +1191,16 @@ void DrawScreenElementExt(int x, int y, int dx, int dy, int element,
   {
     graphic += phase4;
   }
-  else if ((element == EL_FELSBROCKEN || element == EL_SP_ZONK ||
+  else if ((element == EL_FELSBROCKEN ||
+           element == EL_SP_ZONK ||
+           element == EL_BD_ROCK ||
            IS_GEM(element)) && !cut_mode)
   {
     if (uy >= lev_fieldy-1 || !IS_BELT(Feld[ux][uy+1]))
     {
-      if (element == EL_FELSBROCKEN || element == EL_SP_ZONK)
+      if (element == EL_FELSBROCKEN ||
+         element == EL_SP_ZONK ||
+         element == EL_BD_ROCK)
       {
        if (dir == MV_LEFT)
          graphic += (4 - phase4) % 4;
@@ -1188,8 +1213,10 @@ void DrawScreenElementExt(int x, int y, int dx, int dy, int element,
        graphic += phase2;
     }
   }
-  else if (element == EL_SIEB_LEER || element == EL_SIEB2_LEER ||
-          element == EL_SIEB_VOLL || element == EL_SIEB2_VOLL)
+  else if (element == EL_MAGIC_WALL_EMPTY ||
+          element == EL_MAGIC_WALL_BD_EMPTY ||
+          element == EL_MAGIC_WALL_FULL ||
+          element == EL_MAGIC_WALL_BD_FULL)
   {
     graphic += 3 + getGraphicAnimationPhase(4, 4, ANIM_REVERSE);
   }
@@ -1417,13 +1444,13 @@ void DrawScreenField(int x, int y)
     boolean cut_mode = NO_CUTTING;
 
     if (Store[ux][uy] == EL_MORAST_LEER ||
-       Store[ux][uy] == EL_SIEB_LEER ||
-       Store[ux][uy] == EL_SIEB2_LEER ||
+       Store[ux][uy] == EL_MAGIC_WALL_EMPTY ||
+       Store[ux][uy] == EL_MAGIC_WALL_BD_EMPTY ||
        Store[ux][uy] == EL_AMOEBE_NASS)
       cut_mode = CUT_ABOVE;
     else if (Store[ux][uy] == EL_MORAST_VOLL ||
-            Store[ux][uy] == EL_SIEB_VOLL ||
-            Store[ux][uy] == EL_SIEB2_VOLL)
+            Store[ux][uy] == EL_MAGIC_WALL_FULL ||
+            Store[ux][uy] == EL_MAGIC_WALL_BD_FULL)
       cut_mode = CUT_BELOW;
 
     if (cut_mode == CUT_ABOVE)
@@ -1453,8 +1480,8 @@ void DrawScreenField(int x, int y)
                  MovDir[oldx][oldy] == MV_RIGHT);
 
     if (Store[oldx][oldy] == EL_MORAST_LEER ||
-       Store[oldx][oldy] == EL_SIEB_LEER ||
-       Store[oldx][oldy] == EL_SIEB2_LEER ||
+       Store[oldx][oldy] == EL_MAGIC_WALL_EMPTY ||
+       Store[oldx][oldy] == EL_MAGIC_WALL_BD_EMPTY ||
        Store[oldx][oldy] == EL_AMOEBE_NASS)
       cut_mode = CUT_ABOVE;
 
@@ -2447,10 +2474,10 @@ int el2gfx(int element)
     case EL_MORAST_VOLL:       return GFX_MORAST_VOLL;
     case EL_TROPFEN:           return GFX_TROPFEN;
     case EL_BOMBE:             return GFX_BOMBE;
-    case EL_SIEB_INAKTIV:      return GFX_SIEB_INAKTIV;
-    case EL_SIEB_LEER:         return GFX_SIEB_LEER;
-    case EL_SIEB_VOLL:         return GFX_SIEB_VOLL;
-    case EL_SIEB_TOT:          return GFX_SIEB_TOT;
+    case EL_MAGIC_WALL_OFF:    return GFX_MAGIC_WALL_OFF;
+    case EL_MAGIC_WALL_EMPTY:  return GFX_MAGIC_WALL_EMPTY;
+    case EL_MAGIC_WALL_FULL:   return GFX_MAGIC_WALL_FULL;
+    case EL_MAGIC_WALL_DEAD:   return GFX_MAGIC_WALL_DEAD;
     case EL_SALZSAEURE:                return GFX_SALZSAEURE;
     case EL_AMOEBE_TOT:                return GFX_AMOEBE_TOT;
     case EL_AMOEBE_NASS:       return GFX_AMOEBE_NASS;
@@ -2508,10 +2535,10 @@ int el2gfx(int element)
     case EL_ERZ_EDEL_ROT:      return GFX_ERZ_EDEL_ROT;
     case EL_ERZ_EDEL_LILA:     return GFX_ERZ_EDEL_LILA;
     case EL_MAMPFER2:          return GFX_MAMPFER2;
-    case EL_SIEB2_INAKTIV:     return GFX_SIEB2_INAKTIV;
-    case EL_SIEB2_LEER:                return GFX_SIEB2_LEER;
-    case EL_SIEB2_VOLL:                return GFX_SIEB2_VOLL;
-    case EL_SIEB2_TOT:         return GFX_SIEB2_TOT;
+    case EL_MAGIC_WALL_BD_OFF: return GFX_MAGIC_WALL_BD_OFF;
+    case EL_MAGIC_WALL_BD_EMPTY:return GFX_MAGIC_WALL_BD_EMPTY;
+    case EL_MAGIC_WALL_BD_FULL:        return GFX_MAGIC_WALL_BD_FULL;
+    case EL_MAGIC_WALL_BD_DEAD:        return GFX_MAGIC_WALL_BD_DEAD;
     case EL_DYNABOMB_ACTIVE_1: return GFX_DYNABOMB;
     case EL_DYNABOMB_ACTIVE_2: return GFX_DYNABOMB;
     case EL_DYNABOMB_ACTIVE_3: return GFX_DYNABOMB;
@@ -2650,8 +2677,13 @@ int el2gfx(int element)
     case EL_TUBE_RIGHT_UP:     return GFX_TUBE_RIGHT_UP;
     case EL_TUBE_RIGHT_DOWN:   return GFX_TUBE_RIGHT_DOWN;
     case EL_SPRING:            return GFX_SPRING;
+    case EL_SPRING_MOVING:     return GFX_SPRING;
     case EL_TRAP_INACTIVE:     return GFX_TRAP_INACTIVE;
     case EL_TRAP_ACTIVE:       return GFX_TRAP_ACTIVE;
+    case EL_BD_WALL:           return GFX_BD_WALL;
+    case EL_BD_ROCK:           return GFX_BD_ROCK;
+    case EL_DX_SUPABOMB:       return GFX_DX_SUPABOMB;
+    case EL_SP_MURPHY_CLONE:   return GFX_SP_MURPHY_CLONE;
 
     default:
     {