When using DF style reflecting steel walls together with MM style
fixed steel grid, it is possible to point the laser towards the grid
in a non 90° angle and still passing through it (with the laser beam
being reflected inside the grid until it leaves the grid on the other
side). However, this did not work when passing the steel grid from
bottom to top (upwards) into an "empty space" element.
This change fixes handling this special case.
+ 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
int end = 0, rf = laser.num_edges;
// do not scan laser again after the game was lost for whatever reason
hit_mask, LX, LY, ELX, ELY);
#endif
hit_mask, LX, LY, ELX, ELY);
#endif
+ last_element = element;
+
element = Tile[ELX][ELY];
laser.dest_element = element;
element = Tile[ELX][ELY];
laser.dest_element = element;
ELX, ELY, element);
#endif
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))
if (element == EL_EMPTY)
{
if (!HitOnlyAnEdge(hit_mask))