Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- BOOL __fastcall ExCollision::check(ExCollision *a1)
- {
- ExCollision *v1; // rbx
- BOOL result; // eax
- __int64 pOwner; // rdi
- Vector4 v4; // xmm3
- __m128i v5; // xmm1
- int v6; // ecx
- int v7; // ecx
- int v8; // ecx
- __int64 v9; // rdx
- Vector4 v10; // xmm6
- Vector4 vBonePos; // xmm7
- int bone_index; // eax
- Bone *pBone; // rax
- __m128 v14; // xmm1
- __m128 v15; // xmm0
- __m128 v16; // xmm6
- int v17; // xmm0_4
- __m128 v18; // xmm2
- Vector4 a2; // [rsp+30h] [rbp-48h]
- __m128 v20; // [rsp+40h] [rbp-38h]
- EntityHandle hOwner; // [rsp+88h] [rbp+10h]
- v1 = a1;
- if ( (qword_141415BD0 & 0x80000000) != 0i64 || qword_141415BC8 & 0x200000000000i64 || !a1->m_bEnabled || !*(_DWORD *)&a1->gap60[40] || !GetEntityInfoFromHandle(&a1->m_hOwner) )
- return 0;
- hOwner = v1->m_hOwner;
- pOwner = (__int64)GetEntityFromHandleFast(&hOwner);
- if ( !pOwner )
- return 0;
- ExCollision::sub_140135140(v1, &a2);
- v4 = a2;
- if ( (_mm_movemask_ps(_mm_cmpeqps(a2.vec, (__m128)0i64)) & 7) == 7 )
- return 0;
- v5 = _mm_cmpeq_epi32(_mm_and_si128(_mm_load_si128((const __m128i *)&g_vMaxVector), (__m128i)a2), (__m128i)g_vMaxVector);
- if ( _mm_movemask_ps((__m128)_mm_andnot_si128(_mm_cmpeq_epi32(_mm_and_si128(_mm_load_si128((const __m128i *)&stru_140E940C0), (__m128i)a2), (__m128i)stru_140E94130), v5)) & 7 )
- return 0;
- v1->v0xD0 = a2;
- v6 = *(_DWORD *)&v1->gap60[36];
- *(_DWORD *)&v1->gap60[28] = v1->dword110;
- v7 = v6 - 1;
- if ( v7 )
- {
- v8 = v7 - 1;
- if ( !v8 )
- {
- if ( g_qword_1417C0358 )
- {
- result = sub_140896730((__int64)&v1->m_vec0x20, (__int64)g_qword_1417C0358, (__m128 *)&a2, (__int128 *)v5.m128i_i64[0], *(float *)&v1->dwordB0, &v1->gap60[16]);
- v1->dword18 = result;
- return result;
- }
- goto LABEL_26;
- }
- if ( v8 == 1 )
- {
- v9 = (unsigned int)v1->dword88;
- v10 = g_vDefault;
- vBonePos = g_vDefault;
- if ( (_DWORD)v9 == -1 )
- {
- vBonePos = *(Vector4 *)(pOwner + 0x50);
- }
- else
- {
- bone_index = GetBoneIndex((CModelData *)(pOwner + 0x550), v9);
- if ( bone_index >= 0 && bone_index < *(_DWORD *)(pOwner + 0x568) )
- {
- pBone = (Bone *)(*(_QWORD *)(pOwner + 0x560) + 0xB0i64 * bone_index);// bones
- if ( pBone )
- vBonePos = pBone->m_vPosition;
- }
- }
- v14 = _mm_mul_ps(*(__m128 *)&v1->dword98, *(__m128 *)&v1->dword98);
- v15 = _mm_shuffle_ps(v14, v14, 102);
- v14.m128_f32[0] = (float)(v14.m128_f32[0] + v15.m128_f32[0]) + COERCE_FLOAT(_mm_shuffle_ps(v15, v15, 85));
- if ( COERCE_FLOAT(_mm_sqrt_ps(_mm_shuffle_ps(v14, v14, 0))) > 0.0 )
- {
- v16 = *(__m128 *)&v1->dword98;
- v10 = (Vector4)_mm_add_ps(
- _mm_mul_ps(_mm_shuffle_ps(v16, v16, 170), *(__m128 *)(pOwner + 0xE0)),
- _mm_add_ps(_mm_mul_ps(_mm_shuffle_ps(v16, v16, 85), *(__m128 *)(pOwner + 0xD0)), _mm_mul_ps(_mm_shuffle_ps(*(__m128 *)&v1->dword98, v16, 0), *(__m128 *)(pOwner + 0xC0))));
- }
- v17 = v1->dwordB0;
- v20 = _mm_add_ps(vBonePos.vec, v10.vec);
- if ( g_qword_1417C0358 )
- {
- result = sub_1408968A0((__int64)g_qword_1417C0358, (__int64)&v1->m_vec0x20, (__int64)&a2, (__int64)&v20, v17, &v1->gap60[16]);
- v1->dword18 = result;
- return result;
- }
- goto LABEL_26;
- }
- }
- else
- {
- v18 = *(__m128 *)&v1->dwordC0;
- v20 = _mm_add_ps(
- _mm_mul_ps(
- _mm_add_ps(
- _mm_mul_ps(_mm_shuffle_ps(v18, v18, 170), *(__m128 *)(pOwner + 224)),
- _mm_add_ps(_mm_mul_ps(_mm_shuffle_ps(v18, v18, 85), *(__m128 *)(pOwner + 208)), _mm_mul_ps(_mm_shuffle_ps(*(__m128 *)&v1->dwordC0, v18, 0), *(__m128 *)(pOwner + 192)))),
- _mm_shuffle_ps((__m128)(unsigned int)v1->dwordB0, (__m128)(unsigned int)v1->dwordB0, 0)),
- v4.vec);
- if ( !g_qword_1417C0358 )
- {
- LABEL_26:
- result = 0;
- v1->dword18 = 0;
- return result;
- }
- v1->dword18 = sub_1408965C0((__int64)g_qword_1417C0358, (__int64)&v1->m_vec0x20, (__int64)&a2, (__int64)&v20, &v1->gap60[16]);
- }
- return v1->dword18;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement