Martymoose98

NieR Collision function

May 1st, 2022
1,317
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.47 KB | None | 0 0
  1. __int64 __fastcall CCollisionDataObjectManager::sub_1401BB970(__int64 *a1, __int64 a2, __int64 a3, __int64 a4, _DWORD *a5)
  2. {
  3.   CCollisionDataObjectManager *v5; // rsi
  4.   __int64 v6; // rbx
  5.   signed __int64 v8; // rax
  6.   unsigned int v9; // ecx
  7.   __m128 v10; // xmm2
  8.   CCollisionDataEntry *pEntries; // rbx
  9.   CCollisionDataObject *pObject; // r10
  10.   __int64 v13; // r10
  11.   __int64 v14; // [rsp+20h] [rbp-A8h]
  12.   __int64 v15; // [rsp+28h] [rbp-A0h]
  13.   __int64 v16; // [rsp+30h] [rbp-98h]
  14.   int v17; // [rsp+38h] [rbp-90h]
  15.   unsigned int v18; // [rsp+3Ch] [rbp-8Ch]
  16.   float a2a[4]; // [rsp+40h] [rbp-88h]
  17.   __m128 v20; // [rsp+50h] [rbp-78h]
  18.   __m128 v21; // [rsp+60h] [rbp-68h]
  19.   __m128 v22; // [rsp+70h] [rbp-58h]
  20.  
  21.   v5 = (CCollisionDataObjectManager *)*a1;
  22.   v6 = a2;
  23.   if ( !*a1 )
  24.     return 0i64;
  25.   sub_1402679B0((__int64)&v21, (__m128 *)a3, (__m128 *)a4);
  26.   v8 = v6 + 16;
  27.   v9 = 0;
  28.   v15 = v6;
  29.   v14 = v6;
  30.   v16 = v6 + 16;
  31.   v18 = 0;
  32.   v10 = _mm_max_ps(v21, v22);
  33.   *(__m128 *)a2a = _mm_min_ps(v21, v22);
  34.   *(_OWORD *)v6 = 0i64;
  35.   *(_DWORD *)(v6 + 12) = 0x3F800000;
  36.   *(_OWORD *)v8 = 0i64;
  37.   *(_DWORD *)(v8 + 12) = 0x3F800000;
  38.   *(_QWORD *)(v6 + 40) = 0i64;
  39.   *(_DWORD *)(v6 + 56) = 0;
  40.   *(_DWORD *)(v6 + 32) = 0x7F7FFFFF;
  41.   *(_QWORD *)(v6 + 48) = 0i64;
  42.   *(_DWORD *)(v6 + 64) = -1;
  43.   pEntries = v5->m_Data.m_pEntries;
  44.   v20 = v10;
  45.   v17 = 0x7F7FFFFF;
  46.   a2a[3] = 1.0;
  47.   v20.m128_i32[3] = 0x3F800000;
  48.   if ( pEntries )
  49.   {
  50.     do
  51.     {
  52.       pObject = pEntries->m_pObject;
  53.       pEntries = pEntries->m_pNext;
  54.       if ( pObject && !pObject->dword54 && pObject->dword58 && pObject->dword50 && *a5 != pObject->m_uScenePropIndex && pObject->dword38 & a5[1] && pObject->dword30 & a5[2] )
  55.       {
  56.         if ( (unsigned int)OBB::Contains(&pObject->m_vMax.x, a2a) )
  57.           (*(void (__fastcall **)(__int64, __int64 *, _DWORD *, float *, __int64, __int64, __int64, _QWORD, _QWORD, _QWORD, unsigned __int64, unsigned __int64))(*(_QWORD *)v13// v13 = rdx
  58.                                                                                                                                                                + 32i64))(
  59.             v13,
  60.             &v14,
  61.             a5,
  62.             a2a,
  63.             v14,
  64.             v15,
  65.             v16,
  66.             *(_QWORD *)&v17,
  67.             *(_QWORD *)a2a,
  68.             *(_QWORD *)&a2a[2],
  69.             v20.m128_u64[0],
  70.             v20.m128_u64[1]);
  71.       }
  72.     }
  73.     while ( pEntries );
  74.     v9 = v18;
  75.   }
  76.   return v9;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment