From fca15e4422d32bf4ab27401d4df14c7dce3ba4fa Mon Sep 17 00:00:00 2001 From: ricardoofnl Date: Sun, 30 Aug 2026 12:56:48 +0700 Subject: [PATCH] [saco] Implement/match `CPhysical__ProcessEntityCollision_Hook` --- saco/game/hooks.cpp | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/saco/game/hooks.cpp b/saco/game/hooks.cpp index 9ff9529..f7d9dce 100644 --- a/saco/game/hooks.cpp +++ b/saco/game/hooks.cpp @@ -1346,7 +1346,48 @@ NUDE CMonsterTruck__ProcessEntityCollision_Hook() NUDE CPhysical__ProcessEntityCollision_Hook() { - // TODO: CPhysical__ProcessEntityCollision_Hook + __asm + { + mov dwCollisionThis, ecx + mov edx, [esp] + mov dwCollisionRetAddr, edx + mov edx, [esp+4] + mov dwCollisionEntity, edx + pushad + cmp pNetGame, 0 + jz process_collision + mov eax, pNetGame + movzx ecx, byte ptr [eax+0x232] // pNetGame->field_232 + test ecx, ecx + jz process_collision + cmp dwCollisionThis, 0 + jz process_collision + cmp dwCollisionEntity, 0 + jz process_collision + mov edx, dwCollisionEntity + movzx eax, word ptr [edx+0x22] // entity.nModelIndex + cmp eax, 400 + jl process_collision + mov ecx, dwCollisionEntity + movzx edx, word ptr [ecx+0x22] + cmp edx, 611 // only vehicle models pass + jg process_collision + mov eax, dwCollisionThis + cmp dword ptr [eax+0x460], 0 // pVehicle->pDriver + jz process_collision + mov ecx, dwCollisionEntity + cmp dword ptr [ecx+0x460], 0 + jz process_collision + popad + + // both vehicles are being driven, so don't collide them + mov eax, 0 + retn 8 + process_collision: + popad + mov edx, 0x546D00 // CPhysical::ProcessEntityCollision + jmp edx + } } //-----------------------------------------------------------