rnd-20040430-2-src
[rocksndiamonds.git] / src / tools.c
index 8f3798a41f6e23541994274f933a96315c85808a..da54ef1821561a608adcabe99c3e0563ef33d202 100644 (file)
@@ -40,6 +40,24 @@ static int el_act2crm(int, int);
 static struct GadgetInfo *tool_gadget[NUM_TOOL_BUTTONS];
 static int request_gadget_id = -1;
 
+static char *print_if_not_empty(int element)
+{
+  static char *s = NULL;
+  char *token_name = element_info[element].token_name;
+
+  if (s != NULL)
+    free(s);
+
+  s = checked_malloc(strlen(token_name) + 10 + 1);
+
+  if (element != EL_EMPTY)
+    sprintf(s, "%d\t['%s']", element, token_name);
+  else
+    sprintf(s, "%d", element);
+
+  return s;
+}
+
 void DumpTile(int x, int y)
 {
   int sx = SCREENX(x);
@@ -57,12 +75,12 @@ void DumpTile(int x, int y)
     return;
   }
 
-  printf("  Feld:        %d ['%s']\n", Feld[x][y],
+  printf("  Feld:        %d\t['%s']\n", Feld[x][y],
         element_info[Feld[x][y]].token_name);
-  printf("  Back:        %d\n", Back[x][y]);
-  printf("  Store:       %d\n", Store[x][y]);
-  printf("  Store2:      %d\n", Store2[x][y]);
-  printf("  StorePlayer: %d\n", StorePlayer[x][y]);
+  printf("  Back:        %s\n", print_if_not_empty(Back[x][y]));
+  printf("  Store:       %s\n", print_if_not_empty(Store[x][y]));
+  printf("  Store2:      %s\n", print_if_not_empty(Store2[x][y]));
+  printf("  StorePlayer: %s\n", print_if_not_empty(StorePlayer[x][y]));
   printf("  MovPos:      %d\n", MovPos[x][y]);
   printf("  MovDir:      %d\n", MovDir[x][y]);
   printf("  MovDelay:    %d\n", MovDelay[x][y]);
@@ -256,28 +274,33 @@ void BackToFront()
   {
     if (redraw_mask & REDRAW_DOOR_1)
       BlitBitmap(backbuffer, window, DX, DY, DXSIZE, DYSIZE, DX, DY);
+
     if (redraw_mask & REDRAW_DOOR_2)
     {
+#if 0
       if ((redraw_mask & REDRAW_DOOR_2) == REDRAW_DOOR_2)
-       BlitBitmap(backbuffer, window, VX,VY, VXSIZE,VYSIZE, VX,VY);
+#endif
+       BlitBitmap(backbuffer, window, VX, VY, VXSIZE, VYSIZE, VX, VY);
+#if 0
       else
       {
        if (redraw_mask & REDRAW_VIDEO_1)
          BlitBitmap(backbuffer, window,
-                    VX+VIDEO_DISPLAY1_XPOS,VY+VIDEO_DISPLAY1_YPOS,
-                    VIDEO_DISPLAY_XSIZE,VIDEO_DISPLAY_YSIZE,
-                    VX+VIDEO_DISPLAY1_XPOS,VY+VIDEO_DISPLAY1_YPOS);
+                    VX + VIDEO_DISPLAY1_XPOS, VY + VIDEO_DISPLAY1_YPOS,
+                    VIDEO_DISPLAY_XSIZE, VIDEO_DISPLAY_YSIZE,
+                    VX + VIDEO_DISPLAY1_XPOS, VY + VIDEO_DISPLAY1_YPOS);
        if (redraw_mask & REDRAW_VIDEO_2)
          BlitBitmap(backbuffer, window,
-                    VX+VIDEO_DISPLAY2_XPOS,VY+VIDEO_DISPLAY2_YPOS,
-                    VIDEO_DISPLAY_XSIZE,VIDEO_DISPLAY_YSIZE,
-                    VX+VIDEO_DISPLAY2_XPOS,VY+VIDEO_DISPLAY2_YPOS);
+                    VX + VIDEO_DISPLAY2_XPOS, VY + VIDEO_DISPLAY2_YPOS,
+                    VIDEO_DISPLAY_XSIZE, VIDEO_DISPLAY_YSIZE,
+                    VX + VIDEO_DISPLAY2_XPOS, VY + VIDEO_DISPLAY2_YPOS);
        if (redraw_mask & REDRAW_VIDEO_3)
          BlitBitmap(backbuffer, window,
-                    VX+VIDEO_CONTROL_XPOS,VY+VIDEO_CONTROL_YPOS,
-                    VIDEO_CONTROL_XSIZE,VIDEO_CONTROL_YSIZE,
-                    VX+VIDEO_CONTROL_XPOS,VY+VIDEO_CONTROL_YPOS);
+                    VX + VIDEO_CONTROL_XPOS, VY + VIDEO_CONTROL_YPOS,
+                    VIDEO_CONTROL_XSIZE, VIDEO_CONTROL_YSIZE,
+                    VX + VIDEO_CONTROL_XPOS, VY + VIDEO_CONTROL_YPOS);
       }
+#endif
     }
 
     if (redraw_mask & REDRAW_DOOR_3)
@@ -297,10 +320,10 @@ void BackToFront()
   if (redraw_mask & REDRAW_TILES)
   {
     for (x = 0; x < SCR_FIELDX; x++)
-      for (y =0 ; y < SCR_FIELDY; y++)
+      for (y = 0 ; y < SCR_FIELDY; y++)
        if (redraw[redraw_x1 + x][redraw_y1 + y])
          BlitBitmap(buffer, window,
-                    FX + x * TILEX, FX + y * TILEY, TILEX, TILEY,
+                    FX + x * TILEX, FY + y * TILEY, TILEX, TILEY,
                     SX + x * TILEX, SY + y * TILEY);
   }
 
@@ -873,11 +896,18 @@ void DrawPlayer(struct PlayerInfo *player)
   else if (player_is_moving && IS_ACCESSIBLE_UNDER(last_element))
     DrawLevelFieldThruMask(last_jx, last_jy);
 
-  /* ... and the field the player is entering */
-  if (IS_ACCESSIBLE_INSIDE(element))
-    DrawLevelField(jx, jy);
-  else if (IS_ACCESSIBLE_UNDER(element))
-    DrawLevelFieldThruMask(jx, jy);
+#if 0
+  /* !!! I have forgotton what this should be good for !!! */
+  /* !!! causes player being visible when pushing from within tubes !!! */
+  if (!player->is_pushing)
+#endif
+  {
+    /* ... and the field the player is entering */
+    if (IS_ACCESSIBLE_INSIDE(element))
+      DrawLevelField(jx, jy);
+    else if (IS_ACCESSIBLE_UNDER(element))
+      DrawLevelFieldThruMask(jx, jy);
+  }
 
   if (setup.direct_draw)
   {
@@ -1658,7 +1688,7 @@ void AnimateEnvelope(int envelope_nr, int anim_mode, int action)
   boolean draw_masked = graphic_info[graphic].draw_masked;
   int mask_mode = (draw_masked ? BLIT_MASKED : BLIT_ON_BACKGROUND);
   boolean ffwd_delay = (tape.playing && tape.fast_forward);
-  boolean no_delay = (tape.index_search);
+  boolean no_delay = (tape.warp_forward);
   unsigned long anim_delay = 0;
   int frame_delay_value = (ffwd_delay ? FfwdFrameDelay : GameFrameDelay);
   int anim_delay_value = (no_delay ? 0 : frame_delay_value);
@@ -1710,7 +1740,7 @@ void ShowEnvelope(int envelope_nr)
   int sound_opening = element_info[element].sound[ACTION_OPENING];
   int sound_closing = element_info[element].sound[ACTION_CLOSING];
   boolean ffwd_delay = (tape.playing && tape.fast_forward);
-  boolean no_delay = (tape.index_search);
+  boolean no_delay = (tape.warp_forward);
   int normal_delay_value = ONE_SECOND_DELAY / (ffwd_delay ? 2 : 1);
   int wait_delay_value = (no_delay ? 0 : normal_delay_value);
   int anim_mode = graphic_info[graphic].anim_mode;
@@ -2050,11 +2080,17 @@ boolean Request(char *text, unsigned int req_state)
     }
   }
 
+#if 1
+  /* disable deactivated drawing when quick-loading level tape recording */
+  if (tape.playing && tape.deactivate_display)
+    TapeDeactivateDisplayOff(TRUE);
+#endif
+
 #if 1
   SetMouseCursor(CURSOR_DEFAULT);
 #endif
 
-#if defined(PLATFORM_UNIX)
+#if defined(NETWORK_AVALIABLE)
   /* pause network game while waiting for request to answer */
   if (options.network &&
       game_status == GAME_MODE_PLAYING &&
@@ -2295,8 +2331,8 @@ boolean Request(char *text, unsigned int req_state)
     if (!(req_state & REQ_STAY_CLOSED) && (old_door_state & DOOR_OPEN_1))
     {
       BlitBitmap(bitmap_db_door, bitmap_db_door,
-                DOOR_GFX_PAGEX2,DOOR_GFX_PAGEY1, DXSIZE,DYSIZE,
-                DOOR_GFX_PAGEX1,DOOR_GFX_PAGEY1);
+                DOOR_GFX_PAGEX2, DOOR_GFX_PAGEY1, DXSIZE, DYSIZE,
+                DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1);
       OpenDoor(DOOR_OPEN_1);
     }
   }
@@ -2305,7 +2341,7 @@ boolean Request(char *text, unsigned int req_state)
 
   SetDrawBackgroundMask(REDRAW_FIELD);
 
-#if defined(PLATFORM_UNIX)
+#if defined(NETWORK_AVALIABLE)
   /* continue network game after request */
   if (options.network &&
       game_status == GAME_MODE_PLAYING &&
@@ -2313,6 +2349,12 @@ boolean Request(char *text, unsigned int req_state)
     SendToServer_ContinuePlaying();
 #endif
 
+#if 1
+  /* restore deactivated drawing when quick-loading level tape recording */
+  if (tape.playing && tape.deactivate_display)
+    TapeDeactivateDisplayOn();
+#endif
+
   return result;
 }
 
@@ -2872,6 +2914,11 @@ int el_dir2img(int element, int direction)
   return el_act_dir2img(element, ACTION_DEFAULT, direction);
 }
 
+int el2baseimg(int element)
+{
+  return element_info[element].graphic[ACTION_DEFAULT];
+}
+
 int el2img(int element)
 {
   element = GFX_ELEMENT(element);