2021-12-25 22:36:38 +01:00
# include "core/stdafx.h"
2022-04-09 16:16:40 +02:00
# include "tier1/cvar.h"
2022-05-01 05:38:51 +02:00
# include "datacache/mdlcache.h"
2021-12-25 22:58:51 +01:00
# include "common/pseudodefs.h"
2022-05-01 05:38:51 +02:00
# include "materialsystem/cmaterialglue.h"
2022-03-01 22:49:57 +01:00
# include "engine/host_state.h"
2022-05-01 01:32:23 +02:00
# include "engine/modelloader.h"
2022-05-01 05:38:51 +02:00
# include "bsplib/bsplib.h"
struct CStaticPropMaterialGlue
{
void * m_pVTable0 ;
void * m_pVTable1 ;
} ;
2021-12-25 22:36:38 +01:00
//-----------------------------------------------------------------------------
// Purpose: calculates the view frustum culling data per static prop
//-----------------------------------------------------------------------------
2022-05-01 05:38:51 +02:00
__int64 __fastcall BuildPropStaticFrustumCullMap ( __int64 a1 , __int64 a2 , unsigned int a3 , unsigned int a4 , __int64 a5 , __int64 a6 , __int64 a7 )
2021-12-25 22:36:38 +01:00
{
2022-05-01 01:32:23 +02:00
if ( staticProp_defaultBuildFrustum - > GetBool ( ) )
2022-05-01 05:38:51 +02:00
return v_BuildPropStaticFrustumCullMap ( a1 , a2 , a3 , a4 , a5 , a6 , a7 ) ;
2022-05-01 01:32:23 +02:00
2022-03-01 22:49:57 +01:00
float v9 ; // xmm6_4
char v10 ; // r13
double v11 ; // xmm7_8
__int64 v12 ; // rsi
2022-05-02 03:13:39 +02:00
MDLHandle_t mdlhandle ; // dx
studiohdr_t * studio ; // rbx
2022-03-01 22:49:57 +01:00
unsigned __int8 v15 ; // r8
const char * v16 ; // rax
int v17 ; // eax
char v18 ; // dl
bool v19 ; // cc
char v20 ; // al
__int16 v21 ; // ax
__int64 v22 ; // rax
__m128 v23 ; // xmm9
__m128 v24 ; // xmm10
__m128 v25 ; // xmm11
unsigned __int64 v26 ; // rbx
__m128 v27 ; // xmm8
__int64 v28 ; // rax
__int64 v29 ; // rcx
__int64 v30 ; // xmm1_8
int v31 ; // er8
__m128i v32 ; // xmm0
__int64 v33 ; // rcx
unsigned __int64 v34 ; // rdx
__int64 v35 ; // rax
__int64 v36 ; // rax
unsigned __int64 v37 ; // rcx
__int64 v38 ; // rax
unsigned __int64 v39 ; // rcx
__int64 v40 ; // rax
float v41 ; // xmm2_4
2022-05-02 03:13:39 +02:00
studiohdr_t * v42 ; // rbx
2022-03-01 22:49:57 +01:00
float v43 ; // xmm2_4
float v44 ; // xmm4_4
__m128i v45 ; // xmm1
__m128i v46 ; // xmm2
__m128i v47 ; // xmm3
unsigned int v48 ; // eax
float v49 ; // xmm0_4
float v50 ; // xmm2_4
float v51 ; // xmm1_4
float v52 ; // xmm2_4
unsigned __int8 v53 ; // si
__int64 v54 ; // rax
__int64 v55 ; // rcx
int v56 ; // eax
__int64 v57 ; // rcx
int v58 ; // edx
__int64 v59 ; // rax
__int64 v60 ; // r13
int v61 ; // eax
2022-05-02 03:13:39 +02:00
char * v62 ; // r13
2022-03-01 22:49:57 +01:00
__int64 v63 ; // rdx
int v64 ; // er14
2022-05-02 03:13:39 +02:00
char * v65 ; // rdi
2022-03-01 22:49:57 +01:00
__int64 v66 ; // r13
__int64 v67 ; // r15
void * v68 ; // rbx
2022-05-02 03:13:39 +02:00
int32_t v69 ; // rcx
2022-03-01 22:49:57 +01:00
__int64 result ; // rax
__m128i v71 ; // [rsp+38h] [rbp-D0h] BYREF
2022-05-02 03:13:39 +02:00
__int64 v72 { } ; // [rsp+48h] [rbp-C0h]
2022-03-01 22:49:57 +01:00
__int64 v73 ; // [rsp+50h] [rbp-B8h]
__m128 v74 ; // [rsp+58h] [rbp-B0h] BYREF
2022-05-02 03:13:39 +02:00
__int64 v75 { } ; // [rsp+68h] [rbp-A0h]
2022-03-01 22:49:57 +01:00
__int64 v76 ; // [rsp+78h] [rbp-90h]
__m128 v77 [ 3 ] ; // [rsp+88h] [rbp-80h] BYREF
char Destination [ 376 ] ; // [rsp+B8h] [rbp-50h] BYREF
__int64 v79 ; // [rsp+278h] [rbp+170h]
int v82 ; // [rsp+288h] [rbp+180h]
int v83 ; // [rsp+290h] [rbp+188h]
2022-05-02 03:13:39 +02:00
studiohdr_t * v84 ; // [rsp+298h] [rbp+190h]
2022-03-01 22:49:57 +01:00
__int64 v85 ; // [rsp+2A8h] [rbp+1A0h]
2021-12-25 22:36:38 +01:00
2022-05-02 03:40:07 +02:00
v9 = 1.0f ;
2022-03-01 22:49:57 +01:00
v10 = a4 ;
* ( _QWORD * ) ( a1 + 20 ) = * ( _QWORD * ) a5 ;
* ( _DWORD * ) ( a1 + 28 ) = * ( _DWORD * ) ( a5 + 8 ) ;
* ( _DWORD * ) ( a1 + 8 ) = a4 ;
* ( _QWORD * ) & v11 = * ( unsigned int * ) ( a5 + 24 ) ;
v12 = a4 > > 1 ;
2022-05-02 03:40:07 +02:00
* ( float * ) ( a1 + 12 ) = 1.0f / ( float ) ( * ( float * ) & v11 * * ( float * ) & v11 ) ;
2022-05-02 03:13:39 +02:00
mdlhandle = * ( unsigned __int16 * ) ( a7 + 0x140 ) ;
* ( MDLHandle_t * ) a1 = mdlhandle ;
studio = CMDLCache : : FindMDL ( g_MDLCache , mdlhandle , nullptr ) ;
v84 = studio ;
if ( ( studio - > flags & STUDIOHDR_FLAGS_STATIC_PROP ) = = 0 & & ( * dword_1696A9D20 ) < 0x64 )
2022-05-01 21:09:05 +02:00
+ + ( * dword_1696A9D20 ) ;
2022-03-01 22:49:57 +01:00
v15 = * ( _BYTE * ) ( a5 + 30 ) ;
if ( v15 > 2u & & ( unsigned __int8 ) ( v15 - 6 ) > 2u )
{
2022-05-01 01:32:23 +02:00
v16 = ( const char * ) ( * ( ( __int64 ( __fastcall * * ) ( CModelLoader * * , __int64 ) ) g_pModelLoader + 4 ) ) ( & g_pModelLoader , a7 ) ;
2022-03-01 22:49:57 +01:00
strncpy ( Destination , v16 , 0x104u i64 ) ;
v15 = 0 ;
}
v17 = * ( unsigned __int8 * ) ( a5 + 32 ) ;
* ( _BYTE * ) ( a1 + 4 ) = v17 ;
v18 = v17 ;
2022-05-02 03:13:39 +02:00
v19 = v17 < studio - > numskinfamilies ;
2022-03-01 22:49:57 +01:00
* ( _BYTE * ) ( a1 + 5 ) = v15 ;
if ( ! v19 )
v18 = 0 ;
* ( _BYTE * ) ( a1 + 4 ) = v18 ;
v20 = * ( _BYTE * ) ( a5 + 31 ) ;
if ( ( v20 & 4 ) ! = 0 )
{
v15 | = 0x40u ;
* ( _BYTE * ) ( a1 + 5 ) = v15 ;
v20 = * ( _BYTE * ) ( a5 + 31 ) ;
}
if ( ( v20 & 8 ) ! = 0 )
{
v15 | = 0x20u ;
* ( _BYTE * ) ( a1 + 5 ) = v15 ;
v20 = * ( _BYTE * ) ( a5 + 31 ) ;
}
if ( ( v20 & 0x30 ) ! = 16 )
* ( _BYTE * ) ( a1 + 5 ) = v15 | 0x10 ;
v21 = 0 ;
if ( * ( _WORD * ) ( a5 + 34 ) ! = 0xFFFF )
v21 = * ( _WORD * ) ( a5 + 34 ) ;
* ( _WORD * ) ( a1 + 2 ) = v21 ;
2022-05-02 03:13:39 +02:00
sub_1404365A0 ( v77 , ( const __m128i * ) a5 , ( __m128i * ) ( a5 + 12 ) , v11 ) ;
2022-05-01 05:38:51 +02:00
v22 = * qword_141744EA8 ;
2022-03-01 22:49:57 +01:00
v23 = v77 [ 0 ] ;
v24 = v77 [ 1 ] ;
v25 = v77 [ 2 ] ;
v26 = ( unsigned __int64 ) ( unsigned int ) v12 < < 6 ;
2022-05-01 21:09:05 +02:00
* ( __m128 * ) ( v26 + ( * qword_141744EA8 ) ) = v77 [ 0 ] ;
2022-03-01 22:49:57 +01:00
* ( __m128 * ) ( v26 + v22 + 16 ) = v24 ;
* ( __m128 * ) ( v26 + v22 + 32 ) = v25 ;
__m128i m2 = { 0 } ;
__m128i m3 = { 0 } ;
2022-05-02 03:13:39 +02:00
v74 = _mm_mul_ps ( _mm_cvtepi32_ps ( _mm_unpacklo_epi16 ( _mm_unpacklo_epi8 ( _mm_cvtsi32_si128 ( * ( _DWORD * ) ( a5 + 52 ) ) , m2 ) , m3 ) ) , ( * xmmword_1415BD270 ) ) ;
2022-03-01 22:49:57 +01:00
v27 = sub_140270130 ( & v74 ) ;
2022-05-02 03:13:39 +02:00
* ( __m128 * ) ( v26 + ( * qword_141744EA8 ) + 48 ) = v27 ; // DIFF 1
( * ( ( void ( __fastcall * * ) ( void * * , __int64 , __m128i * , __int8 * ) ) * ( void * * ) off_141731448 + 10 ) ) ( & * ( void * * ) off_141731448 , a7 , & v71 , & v71 . m128i_i8 [ 12 ] ) ;
2022-03-01 22:49:57 +01:00
sub_14028F170 ( ( __int64 ) & v74 , ( __int64 ) & v74 . m128_i64 [ 1 ] + 4 , v77 , & v71 , ( const __m128i * ) & v71 . m128i_i8 [ 12 ] ) ;
2022-05-01 05:38:51 +02:00
v28 = * qword_141744EA0 ;
2022-03-01 22:49:57 +01:00
v29 = 3 * v12 ;
v30 = v75 ;
2022-05-01 21:09:05 +02:00
* ( __m128 * ) ( ( * qword_141744EA0 ) + 8 * v29 ) = v74 ;
2022-03-01 22:49:57 +01:00
* ( _QWORD * ) ( v28 + 8 * v29 + 16 ) = v30 ;
if ( ( v10 & 1 ) ! = 0 )
{
2022-05-01 05:38:51 +02:00
v31 = * dword_141744EBC ;
2022-03-01 22:49:57 +01:00
v32 = v71 ;
* ( _DWORD * ) a2 = * ( _DWORD * ) ( a6 + 48 ) ;
* ( _DWORD * ) ( a2 + 4 ) = * ( _DWORD * ) ( a6 + 52 ) ;
* ( _QWORD * ) ( a2 + 8 ) = 0 i64 ;
v33 = 3 i64 * ( unsigned int ) ( v31 + v12 ) ;
v34 = ( unsigned __int64 ) ( unsigned int ) ( v31 + v12 ) < < 6 ;
2022-05-01 05:38:51 +02:00
v35 = * qword_141744EA0 ;
2022-05-01 21:09:05 +02:00
* ( __m128i * ) ( ( * qword_141744EA0 ) + 8 * v33 ) = v32 ;
2022-03-01 22:49:57 +01:00
* ( _QWORD * ) ( v35 + 8 * v33 + 16 ) = v72 ;
2022-05-02 03:13:39 +02:00
v36 = * qword_141744EA8 ;
2022-03-01 22:49:57 +01:00
v37 = ( unsigned __int64 ) ( unsigned int ) ( v12 + 2 * v31 ) < < 6 ;
2022-05-01 21:09:05 +02:00
* ( __m128 * ) ( v34 + ( * qword_141744EA8 ) ) = v23 ;
2022-03-01 22:49:57 +01:00
* ( __m128 * ) ( v34 + v36 + 16 ) = v24 ;
* ( __m128 * ) ( v34 + v36 + 32 ) = v25 ;
2022-05-01 21:09:05 +02:00
* ( __m128 * ) ( v34 + ( * qword_141744EA8 ) + 48 ) = v27 ;
2022-05-01 05:38:51 +02:00
v38 = * qword_141744EA8 ;
2022-05-01 21:09:05 +02:00
* ( __m128 * ) ( v37 + ( * qword_141744EA8 ) ) = v23 ;
2022-03-01 22:49:57 +01:00
* ( __m128 * ) ( v37 + v38 + 16 ) = v24 ;
* ( __m128 * ) ( v37 + v38 + 32 ) = v25 ;
2022-05-01 21:09:05 +02:00
* ( __m128 * ) ( v37 + ( * qword_141744EA8 ) + 48 ) = v27 ;
2022-03-01 22:49:57 +01:00
v39 = ( unsigned __int64 ) ( unsigned int ) ( v31 + v12 + 2 * v31 ) < < 6 ;
2022-05-01 21:09:05 +02:00
* ( __m128 * ) ( v39 + ( * qword_141744EA8 ) + 48 ) = v27 ;
2022-05-01 05:38:51 +02:00
v40 = * qword_141744EA8 ;
2022-05-01 21:09:05 +02:00
* ( __m128 * ) ( v39 + ( * qword_141744EA8 ) ) = * ( __m128 * ) a6 ; //*(_OWORD*)(v39 + qword_141744EA8) = *(_OWORD*)a6;
2022-03-01 22:49:57 +01:00
* ( __m128 * ) ( v39 + v40 + 16 ) = * ( __m128 * ) ( a6 + 16 ) ; //*(_OWORD*)(v39 + v40 + 16) = *(_OWORD*)(a6 + 16);
* ( __m128 * ) ( v39 + v40 + 32 ) = * ( __m128 * ) ( a6 + 32 ) ; //*(__m128*)(v40 + v41 + 32) = *(__m128*)(a6 + 32);
}
v41 = * ( float * ) ( a5 + 36 ) ;
v42 = v84 ;
2022-05-02 03:40:07 +02:00
if ( v41 < = 0.0f )
2022-03-01 22:49:57 +01:00
{
2022-05-02 03:13:39 +02:00
if ( ( v84 - > flags & STUDIOHDR_FLAGS_NO_FORCED_FADE ) ! = 0 )
2022-03-01 22:49:57 +01:00
{
2022-05-02 03:40:07 +02:00
v41 = 227023.36f ;
2022-03-01 22:49:57 +01:00
}
else
{
2022-05-02 03:13:39 +02:00
v43 = v84 - > fadeDist ;
2022-05-02 03:40:07 +02:00
if ( v43 < = 0.0f )
2022-03-01 22:49:57 +01:00
v41 = fmaxf (
2022-05-02 03:40:07 +02:00
( float ) ( ( float ) ( sqrtf (
2022-03-01 22:49:57 +01:00
( float ) ( ( float ) ( ( float ) ( * ( float * ) v71 . m128i_i32 - * ( float * ) & v71 . m128i_i32 [ 3 ] ) * ( float ) ( * ( float * ) v71 . m128i_i32 - * ( float * ) & v71 . m128i_i32 [ 3 ] ) )
+ ( float ) ( ( float ) ( * ( float * ) & v71 . m128i_i32 [ 1 ] - * ( float * ) & v72 ) * ( float ) ( * ( float * ) & v71 . m128i_i32 [ 1 ] - * ( float * ) & v72 ) ) )
+ ( float ) ( ( float ) ( * ( float * ) & v71 . m128i_i32 [ 2 ] - * ( ( float * ) & v72 + 1 ) ) * ( float ) ( * ( float * ) & v71 . m128i_i32 [ 2 ] - * ( ( float * ) & v72 + 1 ) ) ) )
* 0.5 )
* * ( float * ) & v11 )
2022-05-01 17:59:56 +02:00
* model_defaultFadeDistScale - > GetFloat ( ) ,
model_defaultFadeDistMin - > GetFloat ( ) ) ;
2022-03-01 22:49:57 +01:00
else
v41 = v43 * * ( float * ) & v11 ;
}
}
2022-05-02 03:40:07 +02:00
v44 = fmaxf ( v41 , 100.0f ) ;
2022-05-02 14:53:48 +02:00
* ( float * ) ( a1 + 16 ) = v44 * v44 ; // <-- Data written here is incorrect [v41 used in the 'fmaxf' operation is most likely computed wrong]!
2022-05-02 14:14:07 +02:00
v45 = _mm_castps_si128 ( _mm_load_ss ( & v84 - > gatherSize ) ) ;
2022-05-02 03:40:07 +02:00
if ( * ( float * ) v45 . m128i_i32 < = 0.0f )
2022-03-01 22:49:57 +01:00
{
LOWORD ( v48 ) = 0 ;
}
else
{
* ( float * ) v45 . m128i_i32 = * ( float * ) v45 . m128i_i32 * * ( float * ) v45 . m128i_i32 ;
v46 = v45 ;
2022-05-02 03:40:07 +02:00
* ( float * ) v46 . m128i_i32 = fmaxf ( * ( float * ) v45 . m128i_i32 , 1.0004883f ) ;
2022-03-01 22:49:57 +01:00
v47 = v46 ;
2022-05-02 03:40:07 +02:00
* ( float * ) v47 . m128i_i32 = fminf ( * ( float * ) v46 . m128i_i32 , 4293918700.0f ) ;
2022-03-01 22:49:57 +01:00
v48 = ( unsigned int ) ( _mm_cvtsi128_si32 ( v47 ) - 1065351168 ) > > 12 ;
}
2022-05-02 14:14:07 +02:00
* ( _WORD * ) ( a1 + 6 ) = v48 ; // <-- DEBUG!
2022-05-01 21:09:05 +02:00
v49 = * ( float * ) ( ( * qword_141744EA0 ) + 24 * ( ( unsigned __int64 ) * ( unsigned int * ) ( a1 + 8 ) > > 1 ) + 8 ) - * ( float * ) ( ( * qword_141744EA0 ) + 24 * ( ( unsigned __int64 ) * ( unsigned int * ) ( a1 + 8 ) > > 1 ) + 20 ) ;
v50 = * ( float * ) ( ( * qword_141744EA0 ) + 24 * ( ( unsigned __int64 ) * ( unsigned int * ) ( a1 + 8 ) > > 1 ) + 4 ) - * ( float * ) ( ( * qword_141744EA0 ) + 24 * ( ( unsigned __int64 ) * ( unsigned int * ) ( a1 + 8 ) > > 1 ) + 16 ) ;
v51 = * ( float * ) ( ( * qword_141744EA0 ) + 24 * ( ( unsigned __int64 ) * ( unsigned int * ) ( a1 + 8 ) > > 1 ) ) - * ( float * ) ( ( * qword_141744EA0 ) + 24 * ( ( unsigned __int64 ) * ( unsigned int * ) ( a1 + 8 ) > > 1 ) + 12 ) ;
2022-03-01 22:49:57 +01:00
v52 = ( float ) ( ( float ) ( v50 * v50 ) + ( float ) ( v51 * v51 ) ) + ( float ) ( v49 * v49 ) ;
2022-05-02 03:40:07 +02:00
if ( v44 > = 227023.363449684f )
2022-05-01 17:59:56 +02:00
v9 = staticProp_no_fade_scalar - > GetFloat ( ) ;
2022-03-01 22:49:57 +01:00
v53 = 0 ;
2022-05-02 03:40:07 +02:00
* ( float * ) ( ( * qword_141744E88 ) + 8 i64 * a3 ) = v9 * ( float ) ( 1.0f / ( float ) ( v52 * staticProp_gather_size_weight - > GetFloat ( ) ) ) ;
2022-05-02 03:13:39 +02:00
v54 = * qword_141744E88 ;
2022-05-01 21:09:05 +02:00
* ( _BYTE * ) ( ( * qword_141744E88 ) + 8 i64 * a3 + 4 ) & = 0xFEu ;
2022-05-02 03:40:07 +02:00
* ( _BYTE * ) ( v54 + 8 i64 * a3 + 4 ) | = v44 > = 227023.363449684f ;
2022-05-01 05:38:51 +02:00
v55 = ( __int64 ) CMDLCache : : GetStudioMaterialGlue ( g_MDLCache , * ( unsigned __int16 * ) ( a7 + 320 ) ) ; // Gets some object containing pointer to 2 CMaterialGlue vtables.
2022-03-01 22:49:57 +01:00
v56 = * ( unsigned __int16 * ) ( a5 + 0x20 ) ;
2022-05-01 01:32:23 +02:00
v76 = * ( __int64 * ) v55 ;
2022-05-02 03:13:39 +02:00
v57 = ( __int64 ) v84 + 2 * v56 * v84 - > numskinref + v84 - > skinindex ;
2022-03-01 22:49:57 +01:00
v58 = 0 ;
v85 = v57 ;
v83 = 0 ;
2022-05-02 03:13:39 +02:00
if ( v84 - > numbodyparts < = 0 )
2022-03-01 22:49:57 +01:00
return 0 i64 ;
v59 = 0 i64 ;
v73 = 0 i64 ;
do
{
2022-05-02 03:13:39 +02:00
v60 = v59 + v42 - > bodypartindex ;
2022-03-01 22:49:57 +01:00
v61 = 0 ;
2022-05-02 03:13:39 +02:00
v62 = ( char * ) v42 + v60 ;
2022-03-01 22:49:57 +01:00
v82 = 0 ;
2022-05-02 03:13:39 +02:00
v74 . m128_u64 [ 0 ] = ( unsigned __int64 ) v62 ;
if ( * ( ( int * ) v62 + 1 ) > 0 )
2022-03-01 22:49:57 +01:00
{
v63 = 0 i64 ;
v79 = 0 i64 ;
do
{
v64 = 0 ;
2022-05-02 03:13:39 +02:00
v65 = & v62 [ v63 + * ( ( int * ) v62 + 3 ) ] ;
if ( * ( ( int * ) v65 + 19 ) > 0 )
2022-03-01 22:49:57 +01:00
{
v66 = v76 ;
v67 = 0 i64 ;
do
{
v68 = * ( void * * ) ( v66 + 8 i64 * * ( __int16 * ) ( v57 + 2 i64 * * ( int * ) ( v67 + * ( int * ) ( v65 + 80 ) + v65 ) ) ) ;
2022-05-02 03:13:39 +02:00
if ( ! ( * ( unsigned __int8 ( __fastcall * * ) ( void * ) ) ( * ( _QWORD * ) v68 + 688 i64 ) ) ( v68 ) )
2022-03-01 22:49:57 +01:00
{
2022-05-02 03:13:39 +02:00
if ( ! ( * ( unsigned __int8 ( __fastcall * * ) ( void * ) ) ( * ( _QWORD * ) v68 + 256 i64 ) ) ( v68 ) & & ( * ( unsigned __int8 ( __fastcall * * ) ( void * ) ) ( * ( _QWORD * ) v68 + 248 i64 ) ) ( v68 ) )
2022-03-01 22:49:57 +01:00
{
2022-05-02 03:13:39 +02:00
v69 = 0 ;
if ( * dword_141744EE8 )
2022-03-01 22:49:57 +01:00
{
2022-05-02 03:13:39 +02:00
// Compares equality of pointers to the CMaterial object
// between the current offset [v69] in the CStaticPropMgr buffer
// and that of v68 (obtained via operation in parent loop).
2022-05-01 21:09:05 +02:00
2022-05-02 03:13:39 +02:00
while ( * ( & * ( void * * ) off_141744E70 + v69 + 16 ) ! = v68 )
2022-05-01 05:38:51 +02:00
{
2022-05-02 03:13:39 +02:00
v69 + + ; // = (unsigned int)(v69 + 1);
if ( static_cast < int32_t > ( v69 ) > = * dword_141744EE8 )
goto LABEL_42 ;
2022-03-01 22:49:57 +01:00
}
}
2022-05-02 03:13:39 +02:00
else
{
LABEL_42 :
* ( & * ( void * * ) off_141744E70 + ( * dword_141744EE8 ) + + + 16 ) = v68 ;
}
2022-03-01 22:49:57 +01:00
}
2022-05-02 03:13:39 +02:00
if ( ( * ( unsigned __int8 ( __fastcall * * ) ( void * ) ) ( * ( _QWORD * ) v68 + 168 i64 ) ) ( v68 ) & & ( * ( unsigned int ( __fastcall * * ) ( void * , __int64 ) ) ( * ( _QWORD * ) v68 + 144 i64 ) ) ( v68 , 1 i64 ) )
* ( _BYTE * ) ( a1 + 5 ) | = 0x80u ;
if ( ! ( * ( unsigned __int8 ( __fastcall * * ) ( void * ) ) ( * ( _QWORD * ) v68 + 384 i64 ) ) ( v68 ) & & ( * ( unsigned int ( __fastcall * * ) ( void * , __int64 ) ) ( * ( _QWORD * ) v68 + 144 i64 ) ) ( v68 , 21844 i64 ) )
v53 | = 2u ;
v53 | = ( * ( unsigned __int8 ( __fastcall * * ) ( void * ) ) ( * ( _QWORD * ) v68 + 384 i64 ) ) ( v68 ) ! = 0 ;
2022-03-01 22:49:57 +01:00
}
v57 = v85 ;
+ + v64 ;
v67 + = 92 i64 ;
2022-05-02 03:13:39 +02:00
} while ( v64 < * ( ( _DWORD * ) v65 + 19 ) ) ;
v62 = ( char * ) v74 . m128_u64 [ 0 ] ;
2022-03-01 22:49:57 +01:00
v61 = v82 ;
v63 = v79 ;
}
+ + v61 ;
v63 + = 136 i64 ;
v82 = v61 ;
v79 = v63 ;
2022-05-02 03:13:39 +02:00
} while ( v61 < * ( ( _DWORD * ) v62 + 1 ) ) ;
2022-03-01 22:49:57 +01:00
v42 = v84 ;
v58 = v83 ;
}
+ + v58 ;
v59 = v73 + 16 ;
v83 = v58 ;
v73 + = 16 i64 ;
2022-05-02 03:13:39 +02:00
} while ( v58 < v42 - > numbodyparts ) ;
2022-03-01 22:49:57 +01:00
result = v53 ;
if ( v53 )
* ( _BYTE * ) ( a1 + 5 ) & = 0x7Fu ;
return result ;
2021-12-25 22:36:38 +01:00
}
void BspLib_Attach ( )
{
2022-05-01 05:38:51 +02:00
DetourAttach ( ( LPVOID * ) & v_BuildPropStaticFrustumCullMap , & BuildPropStaticFrustumCullMap ) ;
2021-12-25 22:36:38 +01:00
}
void BspLib_Detach ( )
{
2022-05-01 05:38:51 +02:00
DetourDetach ( ( LPVOID * ) & v_BuildPropStaticFrustumCullMap , & BuildPropStaticFrustumCullMap ) ;
2021-12-25 22:36:38 +01:00
}