rnd-20060319-2-src
[rocksndiamonds.git] / src / tools.c
index b5e022f620c79b6521d50adbd9278c8b95d7ccc7..3bdf371f09e197e831f5e95ad620ddb7c7f3e937 100644 (file)
@@ -63,6 +63,12 @@ void DumpTile(int x, int y)
   int sx = SCREENX(x);
   int sy = SCREENY(y);
 
+  if (level.game_engine_type == GAME_ENGINE_TYPE_EM)
+  {
+    x--;
+    y--;
+  }
+
   printf_line("-", 79);
   printf("Field Info: SCREEN(%d, %d), LEVEL(%d, %d)\n", sx, sy, x, y);
   printf_line("-", 79);
@@ -1825,6 +1831,7 @@ void DrawPlayer(struct PlayerInfo *player)
   int next_jx = jx + dx;
   int next_jy = jy + dy;
   boolean player_is_moving = (player->MovPos ? TRUE : FALSE);
+  boolean player_is_opaque = FALSE;
   int sx = SCREENX(jx), sy = SCREENY(jy);
   int sxx = 0, syy = 0;
   int element = Feld[jx][jy], last_element = Feld[last_jx][last_jy];
@@ -1865,6 +1872,11 @@ void DrawPlayer(struct PlayerInfo *player)
            player->is_dropping   ? ACTION_DROPPING        :
            player->is_waiting    ? player->action_waiting : ACTION_DEFAULT);
 
+#if 1
+  if (player->is_waiting)
+    move_dir = player->dir_waiting;
+#endif
+
   InitPlayerGfxAnimation(player, action, move_dir);
 
   /* ----------------------------------------------------------------------- */
@@ -1913,16 +1925,17 @@ void DrawPlayer(struct PlayerInfo *player)
   {
     if (player_is_moving && GfxElement[jx][jy] != EL_UNDEFINED)
     {
-      if (GFX_CRUMBLED(GfxElement[jx][jy]))
+      int old_element = GfxElement[jx][jy];
+      int old_graphic = el_act_dir2img(old_element, action, move_dir);
+      int frame = getGraphicAnimationFrame(old_graphic, player->StepFrame);
+
+      if (GFX_CRUMBLED(old_element))
        DrawLevelFieldCrumbledSandDigging(jx, jy, move_dir, player->StepFrame);
       else
-      {
-       int old_element = GfxElement[jx][jy];
-       int old_graphic = el_act_dir2img(old_element, action, move_dir);
-       int frame = getGraphicAnimationFrame(old_graphic, player->StepFrame);
-
        DrawGraphic(sx, sy, old_graphic, frame);
-      }
+
+      if (graphic_info[old_graphic].anim_mode & ANIM_OPAQUE_PLAYER)
+       player_is_opaque = TRUE;
     }
     else
     {
@@ -1960,7 +1973,10 @@ void DrawPlayer(struct PlayerInfo *player)
   if (!setup.soft_scrolling && ScreenMovPos)
     sxx = syy = 0;
 
-  DrawGraphicShiftedThruMask(sx, sy, sxx, syy, graphic, frame, NO_CUTTING);
+  if (player_is_opaque)
+    DrawGraphicShifted(sx, sy, sxx, syy, graphic, frame,NO_CUTTING,NO_MASKING);
+  else
+    DrawGraphicShiftedThruMask(sx, sy, sxx, syy, graphic, frame, NO_CUTTING);
 
   if (SHIELD_ON(player))
   {
@@ -3474,19 +3490,19 @@ em_object_mapping_list[] =
   },
   {
     Xeater_n,                          TRUE,   FALSE,
-    EL_YAMYAM,                         -1, -1
+    EL_YAMYAM_UP,                      -1, -1
   },
   {
-    Xeater_e,                          FALSE,  FALSE,
-    EL_YAMYAM,                         -1, -1
+    Xeater_e,                          TRUE,   FALSE,
+    EL_YAMYAM_RIGHT,                   -1, -1
   },
   {
-    Xeater_w,                          FALSE,  FALSE,
-    EL_YAMYAM,                         -1, -1
+    Xeater_w,                          TRUE,   FALSE,
+    EL_YAMYAM_LEFT,                    -1, -1
   },
   {
-    Xeater_s,                          FALSE,  FALSE,
-    EL_YAMYAM,                         -1, -1
+    Xeater_s,                          TRUE,   FALSE,
+    EL_YAMYAM_DOWN,                    -1, -1
   },
   {
     Yeater_n,                          FALSE,  FALSE,
@@ -4596,10 +4612,6 @@ em_object_mapping_list[] =
     Xalpha_copyr,                      TRUE,   FALSE,
     EL_CHAR('©'),                      -1, -1
   },
-  {
-    Xalpha_copyr,                      TRUE,   FALSE,
-    EL_CHAR('©'),                      -1, -1
-  },
 
   {
     Xboom_bug,                         FALSE,  FALSE,
@@ -5119,26 +5131,19 @@ int font2baseimg(int font_nr)
   return font_info[font_nr].special_graphic[GFX_SPECIAL_ARG_DEFAULT];
 }
 
-int getGameFrameDelay_EM(int native_em_game_frame_delay)
+#if 0
+void setCenteredPlayerNr_EM(int centered_player_nr)
 {
-  int game_frame_delay_value;
-
-  game_frame_delay_value =
-    (tape.playing && tape.fast_forward ? FfwdFrameDelay :
-     GameFrameDelay == GAME_FRAME_DELAY ? native_em_game_frame_delay :
-     GameFrameDelay);
-
-  if (tape.playing && tape.warp_forward && !tape.pausing)
-    game_frame_delay_value = 0;
-
-  return game_frame_delay_value;
+  game.centered_player_nr = game.centered_player_nr_next = centered_player_nr;
 }
 
 int getCenteredPlayerNr_EM()
 {
+#if 0
   if (game.centered_player_nr_next >= 0 &&
       !native_em_level.ply[game.centered_player_nr_next]->alive)
     game.centered_player_nr_next = game.centered_player_nr;
+#endif
 
   if (game.centered_player_nr != game.centered_player_nr_next)
     game.centered_player_nr = game.centered_player_nr_next;
@@ -5146,7 +5151,18 @@ int getCenteredPlayerNr_EM()
   return game.centered_player_nr;
 }
 
-int getActivePlayers_EM()
+void setSetCenteredPlayer_EM(boolean set_centered_player)
+{
+  game.set_centered_player = set_centered_player;
+}
+
+boolean getSetCenteredPlayer_EM()
+{
+  return game.set_centered_player;
+}
+#endif
+
+int getNumActivePlayers_EM()
 {
   int num_players = 0;
   int i;
@@ -5161,6 +5177,23 @@ int getActivePlayers_EM()
   return num_players;
 }
 
+#if 1
+int getGameFrameDelay_EM(int native_em_game_frame_delay)
+{
+  int game_frame_delay_value;
+
+  game_frame_delay_value =
+    (tape.playing && tape.fast_forward ? FfwdFrameDelay :
+     GameFrameDelay == GAME_FRAME_DELAY ? native_em_game_frame_delay :
+     GameFrameDelay);
+
+  if (tape.playing && tape.warp_forward && !tape.pausing)
+    game_frame_delay_value = 0;
+
+  return game_frame_delay_value;
+}
+#endif
+
 unsigned int InitRND(long seed)
 {
   if (level.game_engine_type == GAME_ENGINE_TYPE_EM)