fixed bug with leaving steel grid after passing it in an irregular way
[rocksndiamonds.git] / src / game_mm / mm_game.c
index bb027cd06f3e33d32271e283fa0941f9fec3cd7e..316c891edea811616016ef637d49bde1764c50ed 100644 (file)
@@ -958,7 +958,8 @@ static void DeactivateLaserTargetElement(void)
 
 void ScanLaser(void)
 {
-  int element;
+  int element = EL_EMPTY;
+  int last_element = EL_EMPTY;
   int end = 0, rf = laser.num_edges;
 
   // do not scan laser again after the game was lost for whatever reason
@@ -1044,6 +1045,8 @@ void ScanLaser(void)
          hit_mask, LX, LY, ELX, ELY);
 #endif
 
+    last_element = element;
+
     element = Tile[ELX][ELY];
     laser.dest_element = element;
 
@@ -1062,6 +1065,12 @@ void ScanLaser(void)
            ELX, ELY, element);
 #endif
 
+    // special case: leaving fixed MM steel grid (upwards) with non-90° angle
+    if (element == EL_EMPTY &&
+       IS_GRID_STEEL(last_element) &&
+       laser.current_angle % 4)                // angle is not 90°
+      element = last_element;
+
     if (element == EL_EMPTY)
     {
       if (!HitOnlyAnEdge(hit_mask))