fixed wrap-around with entering EM style door (gate) for EM engine
authorHolger Schemel <info@artsoft.org>
Tue, 1 Dec 2020 20:18:01 +0000 (21:18 +0100)
committerHolger Schemel <info@artsoft.org>
Tue, 1 Dec 2020 20:18:01 +0000 (21:18 +0100)
src/game_em/graphics.c
src/game_em/logic.c

index 7f303a2a6510b78fda2ae33728a6037669e5cf6d..a29d2e0e7208ab4d45cf1e7cad2a4bb1bd1311a0 100644 (file)
@@ -441,16 +441,17 @@ static void blitplayer(int nr)
       ply[nr].x > lev.right - 1)
   {
     struct PLAYER ply_last = ply[nr];
+    int direction = (ply[nr].x < lev.left ? -1 : 1);
     int dx = ply[nr].x - ply[nr].prev_x;
 
-    ply[nr].x = (ply[nr].x < lev.left ? lev.right - 1 : lev.left);
+    ply[nr].x += -direction * lev.width;
     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].y += direction;
       ply[nr].prev_y = ply[nr].y - dy;
     }
 
index bfb387f468727b5dce51e57b2e766b8de5b69593..a56547b14a462365e830a8cdfbdb59ac0adead0b 100644 (file)
@@ -7695,10 +7695,12 @@ void logic_move(void)
     if (ply[i].x < lev.left ||
        ply[i].x > lev.right - 1)
     {
-      ply[i].x = (ply[i].x < lev.left ? lev.right - 1 : lev.left);
+      int direction = (ply[i].x < lev.left ? -1 : 1);
+
+      ply[i].x += -direction * lev.width;
 
       if (!lev.infinite_true)
-       ply[i].y += (ply[i].x == lev.left ? 1 : -1);
+       ply[i].y += direction;
 
       game.centered_player_nr_next = i;
       game.set_centered_player = TRUE;