Martymoose98

NieR Pl0000::CollisionCheck

May 1st, 2022
1,516
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.73 KB | None | 0 0
  1. void __usercall Pl0000::CollisionCheck(__int64 a1@<rcx>, __int128 a2@<xmm0>)
  2. {
  3.   __int64 v2; // rbx
  4.   int v3; // edi
  5.   float v4; // xmm7_4
  6.   float v5; // xmm1_4
  7.   __int64 pEntInfo; // rcx
  8.   __int64 v7; // rax
  9.   signed int v8; // eax
  10.   __m128 *v9; // rdi
  11.   signed int v10; // edi
  12.   char v11; // [rsp+30h] [rbp-78h]
  13.   char v12; // [rsp+40h] [rbp-68h]
  14.   char v13; // [rsp+50h] [rbp-58h]
  15.  
  16.   v2 = a1;
  17.   *(_DWORD *)(a1 + 6640) = 0;
  18.   sub_140265F10((__m128 *)&v13, (__m128 *)(a1 + 80), (__m128 *)(a1 + 0x10680));
  19.   v3 = *(_DWORD *)(v2 + 0x670);
  20.   v4 = 0.0;
  21.   if ( (v3 - 59) & 0xFFFFFFFD )
  22.   {
  23.     if ( v3 == 66 )
  24.     {
  25.       LODWORD(a2) = 1065353216;
  26.       Vector3Aligned::sub_140265E60((unsigned __int64)&v12);
  27.       Vector4::Copy((_OWORD *)(v2 + 0x1960), &v12);
  28.       *(_DWORD *)(v2 + 0x1980) = 0x3E99999A;
  29.     }
  30.     else if ( v3 == 70 )
  31.     {
  32.       LODWORD(a2) = 1065353216;
  33.       Vector3Aligned::sub_140265E60((unsigned __int64)&v12);
  34.       Vector4::Copy((_OWORD *)(v2 + 6496), &v12);
  35.       *(_DWORD *)(v2 + 0x1980) = 0x3F000000;
  36.     }
  37.     else
  38.     {
  39.       Vector4::Copy((_OWORD *)(v2 + 6496), (_OWORD *)(v2 + 6736));
  40.       if ( v3 == 104 )
  41.         *(_DWORD *)(v2 + 0x1980) = 0x3E4CCCCD;
  42.       else
  43.         *(_DWORD *)(v2 + 0x1980) = 0x3F19999A;
  44.     }
  45.   }
  46.   else
  47.   {
  48.     Vector4::Copy((_OWORD *)(v2 + 6496), (_OWORD *)(v2 + 6736));
  49.     *(_DWORD *)(v2 + 6528) = 1036831949;
  50.   }
  51.   v5 = *(float *)(v2 + 89560);
  52.   if ( v5 > 0.0 )
  53.   {
  54.     pEntInfo = *(_QWORD *)(v2 + 0x610);
  55.     v7 = pEntInfo ? sub_140138630(pEntInfo) : &unk_141029FF0;
  56.     *(float *)&a2 = sub_14014B990(v7) * 0.016666668;
  57.     v5 = *(float *)(v2 + 89560) - *(float *)&a2;
  58.     *(float *)(v2 + 89560) = v5;
  59.     if ( v5 < 0.0 )
  60.     {
  61.       *(_DWORD *)(v2 + 89560) = 0;
  62.       v5 = 0.0;
  63.     }
  64.   }
  65.   if ( *(_BYTE *)(v2 + 2180) & 0x40 || *(_DWORD *)(v2 + 5344) || v5 > 0.0 )
  66.   {
  67.     v9 = (__m128 *)(v2 + 6336);
  68.     sub_14040D0F0(v2 + 6336);
  69.     v8 = 0;
  70.   }
  71.   else
  72.   {
  73.     v8 = 1;
  74.     v9 = (__m128 *)(v2 + 0x18C0);
  75.   }
  76.   *(_DWORD *)(v2 + 0x18D4) = v8;
  77.   sub_1404117A0((__int64)v9);
  78.   sub_1403FB680(v9);
  79.   if ( (unsigned int)ExCollision::Check((int *)v9, *(float *)&a2) )
  80.   {
  81.     *(_DWORD *)(v2 + 6640) = 1;
  82.     Vector4::Copy((_OWORD *)(v2 + 6656), (_OWORD *)(v2 + 0x18E0));
  83.     Vector4::Copy((_OWORD *)(v2 + 6672), (_OWORD *)(v2 + 6384));
  84.     *(_DWORD *)(v2 + 6688) = *(_DWORD *)(v2 + 6400);
  85.     *(_QWORD *)(v2 + 6696) = *(_QWORD *)(v2 + 6408);
  86.     *(_QWORD *)(v2 + 6704) = *(_QWORD *)(v2 + 6416);
  87.     *(_DWORD *)(v2 + 6712) = *(_DWORD *)(v2 + 6424);
  88.     *(_DWORD *)(v2 + 6716) = *(_DWORD *)(v2 + 6428);
  89.     *(_DWORD *)(v2 + 6720) = *(_DWORD *)(v2 + 6432);
  90.     sub_1403FB860(v9);
  91.     if ( (unsigned int)ExCollision::Check((int *)v9, *(float *)&a2) )
  92.     {
  93.       sub_140464230(v2 + 6656, v2 + 0x18E0);
  94.       sub_1403FB860(v9);
  95.     }
  96.   }
  97.   sub_140265F10((__m128 *)&v11, (__m128 *)(v2 + 80), (__m128 *)(v2 + 67200));
  98.   v10 = 0;
  99.   if ( *(_DWORD *)(v2 + 6640) )
  100.   {
  101.     a2 = (__int128)Vector3Aligned::Length((__m128 *)&v13);
  102.     sub_1402663A0(&v11);
  103.     if ( (float)((float)(*(float *)&a2 * 0.5) * (float)(*(float *)&a2 * 0.5)) > *(float *)&a2 )
  104.       v10 = 1;
  105.   }
  106.   if ( v10 )
  107.   {
  108.     *(float *)&a2 = *(float *)(v2 + 0x1470) + *(float *)(v2 + 6644);
  109.     *(_DWORD *)(v2 + 6644) = a2;
  110.   }
  111.   else
  112.   {
  113.     *(_DWORD *)(v2 + 6644) = 0;
  114.   }
  115.   if ( !(unk_1410297D0 & 0x200000) && !(dword_1410297D4 & 0x20000000) )
  116.   {
  117.     if ( dword_1410297F0 & 0x10000 )
  118.       goto LABEL_37;
  119.     v4 = *(float *)(v2 + 5172);
  120.   }
  121.   if ( v4 > 900.0 )
  122.   {
  123.     sub_1402663A0(&v11);
  124.     if ( *(float *)&a2 < 0.00039999999 )
  125.     {
  126.       *(float *)(v2 + 6648) = *(float *)(v2 + 5232) + *(float *)(v2 + 6648);
  127.       return;
  128.     }
  129.   }
  130. LABEL_37:
  131.   *(_DWORD *)(v2 + 6648) = 0;
  132. }
Advertisement
Add Comment
Please, Sign In to add comment