rnd-20030305-1-src
[rocksndiamonds.git] / src / tools.c
index 7330f9f9c2e11bce490501dc316342efb56c787b..a58a51c22bfa466675615c2d8e25321fe80f04f0 100644 (file)
@@ -243,19 +243,18 @@ void BackToFront()
                     VX+VIDEO_CONTROL_XPOS,VY+VIDEO_CONTROL_YPOS);
       }
     }
+
     if (redraw_mask & REDRAW_DOOR_3)
       BlitBitmap(backbuffer, window, EX, EY, EXSIZE, EYSIZE, EX, EY);
+
     redraw_mask &= ~REDRAW_DOORS;
   }
 
   if (redraw_mask & REDRAW_MICROLEVEL)
   {
-    BlitBitmap(backbuffer, window,
-              MICROLEV_XPOS, MICROLEV_YPOS, MICROLEV_XSIZE, MICROLEV_YSIZE,
-              MICROLEV_XPOS, MICROLEV_YPOS);
-    BlitBitmap(backbuffer, window,
-              SX, MICROLABEL_YPOS, SXSIZE, getFontHeight(FONT_SPECIAL_GAME),
-              SX, MICROLABEL_YPOS);
+    BlitBitmap(backbuffer, window, SX, SY + 10 * TILEY, SXSIZE, 7 * TILEY,
+              SX, SY + 10 * TILEY);
+
     redraw_mask &= ~REDRAW_MICROLEVEL;
   }
 
@@ -279,7 +278,7 @@ void BackToFront()
       info1[0] = '\0';
 
     sprintf(text, "%.1f fps%s", global.frames_per_second, info1);
-    DrawTextExt(window, SX, SY, text, FONT_DEFAULT_SMALL, FONT_OPAQUE);
+    DrawTextExt(window, SX, SY, text, FONT_TEXT_2, FONT_OPAQUE);
   }
 
   FlushDisplay();
@@ -570,12 +569,14 @@ void DrawPlayer(struct PlayerInfo *player)
     {
       DrawLevelElement(last_jx, last_jy, Store[last_jx][last_jy]);
 
-      if (last_element == EL_DYNAMITE_ACTIVE)
+      if (last_element == EL_DYNAMITE_ACTIVE ||
+         last_element == EL_SP_DISK_RED_ACTIVE)
        DrawDynamite(last_jx, last_jy);
       else
        DrawLevelFieldThruMask(last_jx, last_jy);
     }
-    else if (last_element == EL_DYNAMITE_ACTIVE)
+    else if (last_element == EL_DYNAMITE_ACTIVE ||
+            last_element == EL_SP_DISK_RED_ACTIVE)
       DrawDynamite(last_jx, last_jy);
     else
       DrawLevelField(last_jx, last_jy);
@@ -1044,7 +1045,7 @@ void DrawScreenElementExt(int x, int y, int dx, int dy, int element,
     frame = getGraphicAnimationFrame(graphic, -1);
   }
 
-  if (element == EL_WALL_GROWING)
+  if (element == EL_EXPANDABLE_WALL)
   {
     boolean left_stopped = FALSE, right_stopped = FALSE;
 
@@ -1057,17 +1058,17 @@ void DrawScreenElementExt(int x, int y, int dx, int dy, int element,
       graphic = IMG_WALL;
     else if (left_stopped)
     {
-      graphic = IMG_WALL_GROWING_ACTIVE_RIGHT;
+      graphic = IMG_EXPANDABLE_WALL_GROWING_RIGHT;
       frame = graphic_info[graphic].anim_frames - 1;
     }
     else if (right_stopped)
     {
-      graphic = IMG_WALL_GROWING_ACTIVE_LEFT;
+      graphic = IMG_EXPANDABLE_WALL_GROWING_LEFT;
       frame = graphic_info[graphic].anim_frames - 1;
     }
   }
 #if 0
-  else if (IS_AMOEBOID(element) || element == EL_AMOEBA_DRIPPING)
+  else if (IS_AMOEBOID(element) || element == EL_AMOEBA_DROPPING)
   {
     graphic = (element == EL_BD_AMOEBA ? IMG_BD_AMOEBA_PART1 :
               element == EL_AMOEBA_WET ? IMG_AMOEBA_WET_PART1 :
@@ -1080,9 +1081,9 @@ void DrawScreenElementExt(int x, int y, int dx, int dy, int element,
 #endif
 
 #if 0
-  if (IS_AMOEBOID(element) || element == EL_AMOEBA_DRIPPING)
+  if (IS_AMOEBOID(element) || element == EL_AMOEBA_DROPPING)
   {
-    if (Feld[lx][ly] == EL_AMOEBA_DRIPPING)
+    if (Feld[lx][ly] == EL_AMOEBA_DROPPING)
       printf("---> %d -> %d / %d [%d]\n",
             element, graphic, frame, GfxRandom[lx][ly]);
   }
@@ -1321,7 +1322,7 @@ void DrawScreenField(int x, int y)
     if (element == EL_QUICKSAND_EMPTYING ||
        element == EL_MAGIC_WALL_EMPTYING ||
        element == EL_BD_MAGIC_WALL_EMPTYING ||
-       element == EL_AMOEBA_DRIPPING)
+       element == EL_AMOEBA_DROPPING)
       cut_mode = CUT_ABOVE;
     else if (element == EL_QUICKSAND_FILLING ||
             element == EL_MAGIC_WALL_FILLING ||
@@ -1363,7 +1364,7 @@ void DrawScreenField(int x, int y)
     if (element_old == EL_QUICKSAND_EMPTYING ||
        element_old == EL_MAGIC_WALL_EMPTYING ||
        element_old == EL_BD_MAGIC_WALL_EMPTYING ||
-       element_old == EL_AMOEBA_DRIPPING)
+       element_old == EL_AMOEBA_DROPPING)
       cut_mode = CUT_ABOVE;
 
     DrawScreenElement(x, y, EL_EMPTY);
@@ -1529,9 +1530,15 @@ static void DrawMicroLevelExt(int xpos, int ypos, int from_x, int from_y)
 static void DrawMicroLevelLabelExt(int mode)
 {
   char label_text[MAX_OUTPUT_LINESIZE + 1];
-  int max_len_label_text = SXSIZE / getFontWidth(FONT_SPECIAL_GAME);
+  int max_len_label_text;
+  int font_nr = FONT_TEXT_2;
+
+  if (mode == MICROLABEL_CREATED_BY || mode == MICROLABEL_IMPORTED_FROM)
+    font_nr = FONT_TEXT_3;
 
-  DrawBackground(SX, MICROLABEL_YPOS, SXSIZE,getFontHeight(FONT_SPECIAL_GAME));
+  max_len_label_text = SXSIZE / getFontWidth(font_nr);
+
+  DrawBackground(SX, MICROLABEL_YPOS, SXSIZE, getFontHeight(font_nr));
 
   strncpy(label_text, (mode == MICROLABEL_LEVEL_NAME ? level.name :
                       mode == MICROLABEL_CREATED_BY ? "created by" :
@@ -1544,11 +1551,11 @@ static void DrawMicroLevelLabelExt(int mode)
 
   if (strlen(label_text) > 0)
   {
-    int text_width = strlen(label_text) * getFontWidth(FONT_SPECIAL_GAME);
+    int text_width = strlen(label_text) * getFontWidth(font_nr);
     int lxpos = SX + (SXSIZE - text_width) / 2;
     int lypos = MICROLABEL_YPOS;
 
-    DrawText(lxpos, lypos, label_text, FONT_SPECIAL_GAME);
+    DrawText(lxpos, lypos, label_text, font_nr);
   }
 
   redraw_mask |= REDRAW_MICROLEVEL;
@@ -1560,6 +1567,9 @@ void DrawMicroLevel(int xpos, int ypos, boolean restart)
   static unsigned long label_delay = 0;
   static int from_x, from_y, scroll_direction;
   static int label_state, label_counter;
+  int last_game_status = game_status;  /* save current game status */
+
+  game_status = PSEUDO_PREVIEW;        /* force PREVIEW font on preview level */
 
   if (restart)
   {
@@ -1575,6 +1585,17 @@ void DrawMicroLevel(int xpos, int ypos, boolean restart)
     DelayReached(&scroll_delay, 0);
     DelayReached(&label_delay, 0);
 
+    if (leveldir_current->name)
+    {
+      int len = strlen(leveldir_current->name);
+      int lxpos = SX + (SXSIZE - len * getFontWidth(FONT_TEXT_1)) / 2;
+      int lypos = SY + 352;
+
+      DrawText(lxpos, lypos, leveldir_current->name, FONT_TEXT_1);
+    }
+
+    game_status = last_game_status;    /* restore current game status */
+
     return;
   }
 
@@ -1643,6 +1664,8 @@ void DrawMicroLevel(int xpos, int ypos, boolean restart)
                   MICROLABEL_LEVEL_IMPORT_INFO : MICROLABEL_EMPTY);
     DrawMicroLevelLabelExt(label_state);
   }
+
+  game_status = last_game_status;      /* restore current game status */
 }
 
 int REQ_in_range(int x, int y)
@@ -1664,6 +1687,7 @@ boolean Request(char *text, unsigned int req_state)
 {
   int mx, my, ty, result = -1;
   unsigned int old_door_state;
+  int last_game_status = game_status;  /* save current game status */
 
 #if defined(PLATFORM_UNIX)
   /* pause network game while waiting for request to answer */
@@ -1689,6 +1713,8 @@ boolean Request(char *text, unsigned int req_state)
   /* clear door drawing field */
   DrawBackground(DX, DY, DXSIZE, DYSIZE);
 
+  game_status = PSEUDO_DOOR;   /* force DOOR font on preview level */
+
   /* write text for request */
   for(ty=0; ty < MAX_REQUEST_LINES; ty++)
   {
@@ -1715,12 +1741,15 @@ boolean Request(char *text, unsigned int req_state)
     strncpy(text_line, text, tl);
     text_line[tl] = 0;
 
-    DrawText(DX + 50 - (tl * 14)/2, DY + 8 + ty * 16,
-            text_line, FONT_DEFAULT_SMALL);
+    DrawText(DX + (DXSIZE - tl * getFontWidth(FONT_TEXT_2)) / 2,
+            DY + 8 + ty * (getFontHeight(FONT_TEXT_2) + 2),
+            text_line, FONT_TEXT_2);
 
     text += tl + (tc == ' ' ? 1 : 0);
   }
 
+  game_status = last_game_status;      /* restore current game status */
+
   if (req_state & REQ_ASK)
   {
     MapGadget(tool_gadget[TOOL_CTRL_ID_YES]);
@@ -2284,7 +2313,7 @@ void CreateToolButtons()
     {
       int player_nr = id - TOOL_CTRL_ID_PLAYER_1;
 
-      getMiniGraphicSource(PLAYER_NR_GFX(IMG_PLAYER1, player_nr),
+      getMiniGraphicSource(PLAYER_NR_GFX(IMG_PLAYER_1, player_nr),
                           &deco_bitmap, &deco_x, &deco_y);
       deco_xpos = (toolbutton_info[i].width - MINI_TILEX) / 2;
       deco_ypos = (toolbutton_info[i].height - MINI_TILEY) / 2;
@@ -2346,7 +2375,7 @@ int get_next_element(int element)
     case EL_MAGIC_WALL_EMPTYING:       return EL_MAGIC_WALL_ACTIVE;
     case EL_BD_MAGIC_WALL_FILLING:     return EL_BD_MAGIC_WALL_FULL;
     case EL_BD_MAGIC_WALL_EMPTYING:    return EL_BD_MAGIC_WALL_ACTIVE;
-    case EL_AMOEBA_DRIPPING:           return EL_AMOEBA_WET;
+    case EL_AMOEBA_DROPPING:           return EL_AMOEBA_WET;
 
     default:                           return element;
   }