rnd-20030313-1-src
[rocksndiamonds.git] / src / tools.c
index 4226eec9824ac3ac2fa454b577463eb624003d00..4a97ee8ede78654d89c1978f2cea293521c4f806 100644 (file)
@@ -542,6 +542,7 @@ void DrawPlayer(struct PlayerInfo *player)
   int graphic;
   int frame = 0;
   boolean player_is_moving = (last_jx != jx || last_jy != jy ? TRUE : FALSE);
+  int current_action = ACTION_DEFAULT;
 
   if (!player->active || !IN_SCR_FIELD(SCREENX(last_jx), SCREENY(last_jy)))
     return;
@@ -559,6 +560,14 @@ void DrawPlayer(struct PlayerInfo *player)
   if (element == EL_EXPLOSION)
     return;
 
+  current_action = (player->Pushing ? ACTION_PUSHING :
+                   player->is_digging ? ACTION_DIGGING :
+                   player->is_collecting ? ACTION_COLLECTING :
+                   player->is_moving ? ACTION_MOVING :
+                   player->snapped ? ACTION_SNAPPING : ACTION_DEFAULT);
+
+  InitPlayerGfxAnimation(player, current_action, player->MovDir);
+
   /* ----------------------------------------------------------------------- */
   /* draw things in the field the player is leaving, if needed               */
   /* ----------------------------------------------------------------------- */
@@ -616,7 +625,8 @@ void DrawPlayer(struct PlayerInfo *player)
       int old_element = GfxElement[jx][jy];
       int old_graphic =
        el_act_dir2img(old_element, ACTION_DIGGING, player->MovDir);
-      int frame = getGraphicAnimationFrame(old_graphic, player->Frame);
+      int frame = getGraphicAnimationFrame(old_graphic, player->StepFrame);
+
 #if 0
       Bitmap *src_bitmap;
       int src_x, src_y;
@@ -650,10 +660,10 @@ void DrawPlayer(struct PlayerInfo *player)
                 width, height, FX + sx * TILEX + cx, FY + sy * TILEY + cy);
 #else
 #if 0
-      printf("::: %d, %d, %d, %d => %d, %d [%d]\n",
+      printf("::: %d, %d, %d, %d => %d, %d [%d, %d, %d]\n",
             old_element, ACTION_DIGGING, player->MovDir, player->Frame,
             old_graphic, frame,
-            player->GfxPos);
+            player->MovPos, player->GfxPos, player->StepFrame);
 #endif
 
       DrawGraphic(sx, sy, old_graphic, frame);
@@ -671,11 +681,6 @@ void DrawPlayer(struct PlayerInfo *player)
   /* draw player himself                                                     */
   /* ----------------------------------------------------------------------- */
 
-  player->GfxAction = (player->Pushing ? ACTION_PUSHING :
-                      player->is_digging ? ACTION_DIGGING :
-                      player->is_moving ? ACTION_MOVING :
-                      player->snapped ? ACTION_SNAPPING : ACTION_DEFAULT);
-
   if (player->use_murphy_graphic)
   {
     static int last_horizontal_dir = MV_LEFT;
@@ -2052,8 +2057,8 @@ unsigned int MoveDoor(unsigned int door_state)
   static int door1 = DOOR_OPEN_1;
   static int door2 = DOOR_CLOSE_2;
   static unsigned long door_delay = 0;
-  int x, start, stepsize = 2;
-  unsigned long door_delay_value = stepsize * 5;
+  int x, start, stepsize = global.door_step_offset;
+  unsigned long door_delay_value = global.door_step_delay;
 
   if (door_state == DOOR_GET_STATE)
     return(door1 | door2);
@@ -2082,8 +2087,8 @@ unsigned int MoveDoor(unsigned int door_state)
     stepsize = 20;
     door_delay_value = 0;
 
-    StopSound(SND_MENU_DOOR_OPENING);
-    StopSound(SND_MENU_DOOR_CLOSING);
+    StopSound(SND_DOOR_OPENING);
+    StopSound(SND_DOOR_CLOSING);
   }
 
   if (global.autoplay_leveldir)
@@ -2098,9 +2103,9 @@ unsigned int MoveDoor(unsigned int door_state)
     {
       /* opening door sound has priority over simultaneously closing door */
       if (door_state & (DOOR_OPEN_1 | DOOR_OPEN_2))
-       PlaySoundStereo(SND_MENU_DOOR_OPENING, SOUND_MAX_RIGHT);
+       PlaySoundStereo(SND_DOOR_OPENING, SOUND_MIDDLE);
       else if (door_state & (DOOR_CLOSE_1 | DOOR_CLOSE_2))
-       PlaySoundStereo(SND_MENU_DOOR_CLOSING, SOUND_MAX_RIGHT);
+       PlaySoundStereo(SND_DOOR_CLOSING, SOUND_MIDDLE);
     }
 
     start = ((door_state & DOOR_NO_DELAY) ? DXSIZE : 0);
@@ -2198,8 +2203,8 @@ unsigned int MoveDoor(unsigned int door_state)
 
   if (setup.quick_doors)
   {
-    StopSound(SND_MENU_DOOR_OPENING);
-    StopSound(SND_MENU_DOOR_CLOSING);
+    StopSound(SND_DOOR_OPENING);
+    StopSound(SND_DOOR_CLOSING);
   }
 
   if (door_state & DOOR_ACTION_1)