added full compatibility for wrap-around levels in EM engine
[rocksndiamonds.git] / src / game_em / graphics.c
index 19000a7de764047c836a1e6b2e943ccab698cf8a..7f303a2a6510b78fda2ae33728a6037669e5cf6d 100644 (file)
@@ -446,6 +446,14 @@ static void blitplayer(int nr)
     ply[nr].x = (ply[nr].x < lev.left ? lev.right - 1 : lev.left);
     ply[nr].prev_x = ply[nr].x - dx;
 
+    if (!lev.infinite_true)
+    {
+      int dy = ply[nr].y - ply[nr].prev_y;
+
+      ply[nr].y += (ply[nr].x == lev.left ? 1 : -1);
+      ply[nr].prev_y = ply[nr].y - dy;
+    }
+
     /* draw player entering playfield from the opposite side */
     blitplayer_ext(nr);
 
@@ -666,8 +674,11 @@ void RedrawPlayfield_EM(boolean force_redraw)
 
     if (draw_new_player_location_wrap)
     {
-      // when wrapping around (horizontally), keep vertical player position
-      screen_yy = screen_y;
+      if (lev.infinite_true)
+      {
+       // when wrapping around (horizontally), keep vertical player position
+       screen_yy = screen_y;
+      }
 
       // scrolling for wrapping should be faster than for switching players
       wait_delay_value /= 4;