Skip to content

Commit 956a428

Browse files
Synchronize changes from 1.6 master branch [ci skip]
e9c9a39 Fix #3612 Explosions breaking glass cause crash (#3613) 09699dc Update client en_US pot
2 parents d9d428f + e9c9a39 commit 956a428

File tree

1 file changed

+27
-41
lines changed

1 file changed

+27
-41
lines changed

Client/multiplayer_sa/CMultiplayerSA.cpp

Lines changed: 27 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -559,7 +559,6 @@ void HOOK_CObject_ProcessBreak();
559559
void HOOK_CObject_ProcessCollision();
560560
void HOOK_CGlass_WindowRespondsToCollision();
561561
void HOOK_CGlass__BreakGlassPhysically();
562-
void HOOK_CGlass_WindowRespondsToExplosion(); // get attacker & object
563562

564563
void HOOK_FxManager_c__DestroyFxSystem();
565564

@@ -754,7 +753,6 @@ void CMultiplayerSA::InitHooks()
754753
HookInstall(HOOKPOS_CObject_ProcessCollision, (DWORD)HOOK_CObject_ProcessCollision, 10);
755754
HookInstall(HOOKPOS_CGlass_WindowRespondsToCollision, (DWORD)HOOK_CGlass_WindowRespondsToCollision, 8);
756755
HookInstall(HOOKPOS_CGlass__BreakGlassPhysically, (DWORD)HOOK_CGlass__BreakGlassPhysically, 5);
757-
HookInstall(HOOKPOS_CGlass_WindowRespondsToExplosion, (DWORD)HOOK_CGlass_WindowRespondsToExplosion, 5);
758756

759757
// Post-destruction hook for FxSystems
760758
HookInstall(HOOKPOS_FxManager_c__DestroyFxSystem, (DWORD)HOOK_FxManager_c__DestroyFxSystem, 5);
@@ -6827,6 +6825,8 @@ void _declspec(naked) HOOK_CGlass_WindowRespondsToCollision()
68276825
pop eax
68286826
}
68296827

6828+
pObjectAttacker = nullptr;
6829+
68306830
if (WindowRespondsToCollision_CalledFrom != CALL_FROM_CGlass_WindowRespondsToExplosion)
68316831
{
68326832
_asm
@@ -6836,45 +6836,42 @@ void _declspec(naked) HOOK_CGlass_WindowRespondsToCollision()
68366836
}
68376837

68386838
// Get attacker for the glass break
6839-
switch (WindowRespondsToCollision_CalledFrom)
6839+
if (WindowRespondsToCollision_CalledFrom == CALL_FROM_CPhysical_ApplyCollision ||
6840+
WindowRespondsToCollision_CalledFrom == CALL_FROM_CPhysical_ApplyCollision_2 ||
6841+
WindowRespondsToCollision_CalledFrom == CALL_FROM_CPhysical_ApplySoftCollision)
68406842
{
6841-
case CALL_FROM_CPhysical_ApplyCollision:
6842-
case CALL_FROM_CPhysical_ApplyCollision_2:
6843-
case CALL_FROM_CPhysical_ApplySoftCollision:
6843+
_asm
68446844
{
6845-
_asm
6846-
{
6847-
mov pObjectAttacker, edi
6848-
}
6845+
mov pObjectAttacker, edi
6846+
}
6847+
}
68496848

6850-
break;
6849+
if (WindowRespondsToCollision_CalledFrom == CALL_FROM_CGlass_WasGlassHitByBullet)
6850+
{
6851+
_asm
6852+
{
6853+
mov pObjectAttacker, ebx // WasGlassHitByBullet called from CWeapon::DoBulletImpact
68516854
}
6852-
case CALL_FROM_CGlass_WasGlassHitByBullet:
6855+
6856+
if (!pObjectAttacker || (pObjectAttacker && !pObjectAttacker->m_pRwObject)) // WasGlassHitByBullet called from CBulletInfo::Update
68536857
{
68546858
_asm
68556859
{
6856-
mov pObjectAttacker, ebx // WasGlassHitByBullet called from CWeapon::DoBulletImpact
6860+
push ecx
6861+
mov ecx, [edi]
6862+
mov pObjectAttacker, ecx
6863+
pop ecx
68576864
}
6858-
6859-
if (!pObjectAttacker || (pObjectAttacker && !pObjectAttacker->m_pRwObject)) // WasGlassHitByBullet called from CBulletInfo::Update
6860-
{
6861-
_asm
6862-
{
6863-
push ecx
6864-
mov ecx, [edi]
6865-
mov pObjectAttacker, ecx
6866-
pop ecx
6867-
}
6868-
}
6869-
6870-
break;
68716865
}
6872-
case CALL_FROM_CGlass_WindowRespondsToExplosion:
6866+
}
6867+
6868+
if (WindowRespondsToCollision_CalledFrom == CALL_FROM_CGlass_WindowRespondsToExplosion)
6869+
{
6870+
_asm
68736871
{
6874-
break;
6872+
mov pDamagedObject, edx
6873+
mov pObjectAttacker, ebp
68756874
}
6876-
default:
6877-
pObjectAttacker = nullptr;
68786875
}
68796876

68806877
if (pObjectAttacker && !pObjectAttacker->m_pRwObject) // Still wrong?
@@ -6936,17 +6933,6 @@ void _declspec(naked) HOOK_CGlass__BreakGlassPhysically()
69366933
}
69376934
}
69386935

6939-
void _declspec(naked) HOOK_CGlass_WindowRespondsToExplosion()
6940-
{
6941-
_asm {
6942-
push 1
6943-
sub esp, 0Ch
6944-
mov pDamagedObject, edx
6945-
mov pObjectAttacker, ebp
6946-
jmp RETURN_CGlass_WindowRespondsToExplosion
6947-
}
6948-
}
6949-
69506936
void* pFxSystemToBeDestroyed;
69516937
void FxManager_c__DestroyFxSystem()
69526938
{

0 commit comments

Comments
 (0)