From 7f0db19abd6b6f3699cd7c84d2f2e5d366e5a952 Mon Sep 17 00:00:00 2001 From: Misa Date: Sat, 4 Apr 2020 12:54:55 -0700 Subject: [PATCH] Fix memory leak from warping moving platforms It turns out that when the game warps moving platforms, it won't remove the block from the position before they warped. Eventually, these blocks will pile up and will never be removed, causing a memory leak. --- desktop_version/src/Logic.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/desktop_version/src/Logic.cpp b/desktop_version/src/Logic.cpp index 082ba220..20a3dbb8 100644 --- a/desktop_version/src/Logic.cpp +++ b/desktop_version/src/Logic.cpp @@ -1045,10 +1045,12 @@ void gamelogic() //ascii snakes if (obj.entities[i].xp <= -80) { + if (obj.entities[i].isplatform) obj.removeblockat(obj.entities[i].xp, obj.entities[i].yp); obj.entities[i].xp += 400; } else if (obj.entities[i].xp > 320) { + if (obj.entities[i].isplatform) obj.removeblockat(obj.entities[i].xp, obj.entities[i].yp); obj.entities[i].xp -= 400; } } @@ -1056,10 +1058,12 @@ void gamelogic() { if (obj.entities[i].xp <= -10) { + if (obj.entities[i].isplatform) obj.removeblockat(obj.entities[i].xp, obj.entities[i].yp); obj.entities[i].xp += 320; } else if (obj.entities[i].xp > 310) { + if (obj.entities[i].isplatform) obj.removeblockat(obj.entities[i].xp, obj.entities[i].yp); obj.entities[i].xp -= 320; } } @@ -1074,10 +1078,12 @@ void gamelogic() if(obj.entities[i].type<50){ //Don't warp warp lines if (obj.entities[i].yp <= -12) { + if (obj.entities[i].isplatform) obj.removeblockat(obj.entities[i].xp, obj.entities[i].yp); obj.entities[i].yp += 232; } else if (obj.entities[i].yp > 226) { + if (obj.entities[i].isplatform) obj.removeblockat(obj.entities[i].xp, obj.entities[i].yp); obj.entities[i].yp -= 232; } } @@ -1094,10 +1100,12 @@ void gamelogic() { if (obj.entities[i].xp <= -30) { + if (obj.entities[i].isplatform) obj.removeblockat(obj.entities[i].xp, obj.entities[i].yp); obj.entities[i].xp += 350; } else if (obj.entities[i].xp > 320) { + if (obj.entities[i].isplatform) obj.removeblockat(obj.entities[i].xp, obj.entities[i].yp); obj.entities[i].xp -= 350; } }