fixed overloading laser due to duplicated tiles in damage list in MM engine
authorHolger Schemel <info@artsoft.org>
Sat, 28 Jan 2023 13:29:08 +0000 (14:29 +0100)
committerHolger Schemel <info@artsoft.org>
Sat, 28 Jan 2023 13:31:40 +0000 (14:31 +0100)
Repeatedly adding tiles to the damage list that have already been
added before for the same laser edge can cause filling up the list
very quickly, causing the laser to overload as a result.

src/game_mm/mm_game.c

index 63e892c5eda19f7ad3f497aec8ee140ede460951..641aa4fde5c8fdf0759e408bb686fdf80fddc4d6 100644 (file)
@@ -825,6 +825,13 @@ void AddLaserEdge(int lx, int ly)
 
 void AddDamagedField(int ex, int ey)
 {
+  // prevent adding the same field position again
+  if (laser.num_damages > 0 &&
+      laser.damage[laser.num_damages - 1].x == ex &&
+      laser.damage[laser.num_damages - 1].y == ey &&
+      laser.damage[laser.num_damages - 1].edge == laser.num_edges)
+    return;
+
   laser.damage[laser.num_damages].is_mirror = FALSE;
   laser.damage[laser.num_damages].angle = laser.current_angle;
   laser.damage[laser.num_damages].edge = laser.num_edges;