From 89a21aefdc2b040ae12b536d9205a2251254f574 Mon Sep 17 00:00:00 2001 From: Gleb Piskunov Date: Fri, 22 Mar 2024 11:56:08 +0700 Subject: [PATCH 1/3] fix infinite loop when moto part hits level from the bottom --- src/GamePhysics.cpp | 86 ++++++++++++++++++++++----------------------- 1 file changed, 42 insertions(+), 44 deletions(-) diff --git a/src/GamePhysics.cpp b/src/GamePhysics.cpp index d776b18..f46300a 100644 --- a/src/GamePhysics.cpp +++ b/src/GamePhysics.cpp @@ -508,63 +508,61 @@ int GamePhysics::method_39(int var1) int var3 = 0; int var4 = var1; -label77: - do { + while (var3 < var1) { int var5; - while (var3 < var1) { - method_45(var4 - var3); - if (!var2 && method_38()) { - var5 = 3; - } else { - var5 = method_46(index10); - } - - if (!var2 && field_68) { - if (var5 != 3) { - return 2; - } + method_45(var4 - var3); + if (!var2 && method_38()) { + var5 = 3; + } else { + var5 = method_46(index10); + } - return 1; + if (!var2 && field_68) { + if (var5 != 3) { + return 2; } - if (var5 == 0) { - var4 = (var3 + var4) >> 1; - goto label77; - } + return 1; + } - if (var5 == 3) { - field_68 = true; - var4 = (var3 + var4) >> 1; - } else { - int var6; - if (var5 == 1) { - do { - method_47(index10); - if ((var6 = method_46(index10)) == 0) { - return 5; - } - } while (var6 != 2); - } + if (var5 == 0) { + var4 = (var3 + var4) >> 1; - var3 = var4; - var4 = var1; - index01 = index01 == 1 ? 0 : 1; - index10 = index10 == 1 ? 0 : 1; + if (((var4 = (var3 + var4) >> 1) - var3 < 0 ? -(var4 - var3) : var4 - var3) >= 65) { + return 5; } } - if ((var5 = (int)((int64_t)(field_29[1]->motoComponents[index01]->xF16 - field_29[2]->motoComponents[index01]->xF16) * (int64_t)(field_29[1]->motoComponents[index01]->xF16 - field_29[2]->motoComponents[index01]->xF16) >> 16) + (int)((int64_t)(field_29[1]->motoComponents[index01]->yF16 - field_29[2]->motoComponents[index01]->yF16) * (int64_t)(field_29[1]->motoComponents[index01]->yF16 - field_29[2]->motoComponents[index01]->yF16) >> 16)) < 983040) { - field_35 = true; - } + if (var5 == 3) { + field_68 = true; + var4 = (var3 + var4) >> 1; + } else { + int var6; + if (var5 == 1) { + do { + method_47(index10); + if ((var6 = method_46(index10)) == 0) { + return 5; + } + } while (var6 != 2); + } - if (var5 > 4587520) { - field_35 = true; + var3 = var4; + var4 = var1; + index01 = index01 == 1 ? 0 : 1; + index10 = index10 == 1 ? 0 : 1; } + } - return 0; - } while (((var4 = (var3 + var4) >> 1) - var3 < 0 ? -(var4 - var3) : var4 - var3) >= 65); + int wheelDist = (int)((int64_t)(field_29[1]->motoComponents[index01]->xF16 - field_29[2]->motoComponents[index01]->xF16) * (int64_t)(field_29[1]->motoComponents[index01]->xF16 - field_29[2]->motoComponents[index01]->xF16) >> 16) + (int)((int64_t)(field_29[1]->motoComponents[index01]->yF16 - field_29[2]->motoComponents[index01]->yF16) * (int64_t)(field_29[1]->motoComponents[index01]->yF16 - field_29[2]->motoComponents[index01]->yF16) >> 16); + if (wheelDist < 983040) { + field_35 = true; + } + if (wheelDist > 4587520) { + field_35 = true; + } - return 5; + return 0; } void GamePhysics::method_40(int var1) From aa428c225d455f677ee524e5155dda369728fbda Mon Sep 17 00:00:00 2001 From: Gleb Piskunov Date: Fri, 22 Mar 2024 11:59:19 +0700 Subject: [PATCH 2/3] fix identation --- src/GamePhysics.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GamePhysics.cpp b/src/GamePhysics.cpp index f46300a..142b576 100644 --- a/src/GamePhysics.cpp +++ b/src/GamePhysics.cpp @@ -529,7 +529,7 @@ int GamePhysics::method_39(int var1) var4 = (var3 + var4) >> 1; if (((var4 = (var3 + var4) >> 1) - var3 < 0 ? -(var4 - var3) : var4 - var3) >= 65) { - return 5; + return 5; } } From a4c9916e20b074b51c4d921af2c9b98693cb4a09 Mon Sep 17 00:00:00 2001 From: Gleb Piskunov Date: Tue, 26 Mar 2024 09:46:51 +0700 Subject: [PATCH 3/3] fix bad ground collision detection --- src/GamePhysics.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/GamePhysics.cpp b/src/GamePhysics.cpp index 142b576..530bfbc 100644 --- a/src/GamePhysics.cpp +++ b/src/GamePhysics.cpp @@ -528,9 +528,11 @@ int GamePhysics::method_39(int var1) if (var5 == 0) { var4 = (var3 + var4) >> 1; - if (((var4 = (var3 + var4) >> 1) - var3 < 0 ? -(var4 - var3) : var4 - var3) >= 65) { + if ((var4 - var3 < 0 ? -(var4 - var3) : var4 - var3) < 65) { return 5; } + + continue; } if (var5 == 3) {