X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_mm%2Fmm_game.c;h=316c891edea811616016ef637d49bde1764c50ed;hb=95d0baeb4a79a9a0c239c736d43729574751fa58;hp=bb027cd06f3e33d32271e283fa0941f9fec3cd7e;hpb=4b19c6f46ee4ba9aeb067e0384a5c2b1a1b1b9b1;p=rocksndiamonds.git diff --git a/src/game_mm/mm_game.c b/src/game_mm/mm_game.c index bb027cd0..316c891e 100644 --- a/src/game_mm/mm_game.c +++ b/src/game_mm/mm_game.c @@ -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))