From 5fc8770ee2e203dc30e17398cc517adb4198c535 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20B=C3=A1lint=20Misius?= Date: Sun, 16 Apr 2023 11:05:37 +0200 Subject: [PATCH] Fix pmap usage in Simulation::flood_water flood_water would occasionally corrupt pmap by moving the pmap entry at i's location even if the entry itself didn't refer to i. pmap updates are tricky, they are best handled by Simulation::move. --- src/simulation/Simulation.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/simulation/Simulation.cpp b/src/simulation/Simulation.cpp index 44a429321..e0393c6dc 100644 --- a/src/simulation/Simulation.cpp +++ b/src/simulation/Simulation.cpp @@ -736,7 +736,7 @@ int Simulation::FloodINST(int x, int y) bool Simulation::flood_water(int x, int y, int i) { - int x1, x2, originalY = y; + int x1, x2, originalX = x, originalY = y; int r = pmap[y][x]; if (!r) return false; @@ -780,12 +780,7 @@ bool Simulation::flood_water(int x, int y, int i) else if (!eval_move(parts[i].type, x, y - 1, nullptr)) continue; - int oldx = (int)(parts[i].x + 0.5f); - int oldy = (int)(parts[i].y + 0.5f); - pmap[y - 1][x] = pmap[oldy][oldx]; - pmap[oldy][oldx] = 0; - parts[i].x = float(x); - parts[i].y = float(y - 1); + move(i, originalX, originalY, x, y - 1); return true; }