rnd-20030422-1-src
[rocksndiamonds.git] / src / tools.c
index 8582ac846da647c0845d04e6fe45ce27cbfdb786..0c7bf17b1d6e647eec594cc2e5b723f828dd0ab7 100644 (file)
@@ -575,9 +575,9 @@ void DrawPlayer(struct PlayerInfo *player)
 
   if (player_is_moving)
   {
-    if (Store[last_jx][last_jy] && IS_DRAWABLE(last_element))
+    if (Back[last_jx][last_jy] && IS_DRAWABLE(last_element))
     {
-      DrawLevelElement(last_jx, last_jy, Store[last_jx][last_jy]);
+      DrawLevelElement(last_jx, last_jy, Back[last_jx][last_jy]);
 
       if (last_element == EL_DYNAMITE_ACTIVE ||
          last_element == EL_SP_DISK_RED_ACTIVE)
@@ -615,8 +615,8 @@ void DrawPlayer(struct PlayerInfo *player)
   /* draw things behind the player, if needed                                */
   /* ----------------------------------------------------------------------- */
 
-  if (Store[jx][jy])
-    DrawLevelElement(jx, jy, Store[jx][jy]);
+  if (Back[jx][jy])
+    DrawLevelElement(jx, jy, Back[jx][jy]);
   else if (IS_ACTIVE_BOMB(element))
     DrawLevelElement(jx, jy, EL_EMPTY);
   else
@@ -745,16 +745,20 @@ void DrawPlayer(struct PlayerInfo *player)
   }
 
   /* ----------------------------------------------------------------------- */
-  /* draw elements that stay over the player                                 */
+  /* draw elements the player is just walking/passing through/under          */
   /* ----------------------------------------------------------------------- */
 
   /* handle the field the player is leaving ... */
-  if (player_is_moving && IS_OVER_PLAYER(last_element))
+  if (player_is_moving && IS_ACCESSIBLE_INSIDE(last_element))
     DrawLevelField(last_jx, last_jy);
+  else if (player_is_moving && IS_ACCESSIBLE_UNDER(last_element))
+    DrawLevelFieldThruMask(last_jx, last_jy);
 
   /* ... and the field the player is entering */
-  if (IS_OVER_PLAYER(element))
+  if (IS_ACCESSIBLE_INSIDE(element))
     DrawLevelField(jx, jy);
+  else if (IS_ACCESSIBLE_UNDER(element))
+    DrawLevelFieldThruMask(jx, jy);
 
   if (setup.direct_draw)
   {
@@ -1068,9 +1072,9 @@ void DrawScreenElementExt(int x, int y, int dx, int dy, int element,
   {
     boolean left_stopped = FALSE, right_stopped = FALSE;
 
-    if (!IN_LEV_FIELD(lx - 1, ly) || IS_MAUER(Feld[lx - 1][ly]))
+    if (!IN_LEV_FIELD(lx - 1, ly) || IS_WALL(Feld[lx - 1][ly]))
       left_stopped = TRUE;
-    if (!IN_LEV_FIELD(lx + 1, ly) || IS_MAUER(Feld[lx + 1][ly]))
+    if (!IN_LEV_FIELD(lx + 1, ly) || IS_WALL(Feld[lx + 1][ly]))
       right_stopped = TRUE;
 
     if (left_stopped && right_stopped)