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
__int64 v13 ; // rdx
__int64 v14 ; // rbx
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
__int64 v42 ; // rbx
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
unsigned __int64 v62 ; // r13
__int64 v63 ; // rdx
int v64 ; // er14
unsigned __int64 v65 ; // rdi
__int64 v66 ; // r13
__int64 v67 ; // r15
void * v68 ; // rbx
__int64 v69 ; // rcx
__int64 result ; // rax
__m128i v71 ; // [rsp+38h] [rbp-D0h] BYREF
__int64 v72 ; // [rsp+48h] [rbp-C0h]
__int64 v73 ; // [rsp+50h] [rbp-B8h]
__m128 v74 ; // [rsp+58h] [rbp-B0h] BYREF
__int64 v75 ; // [rsp+68h] [rbp-A0h]
__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]
__int64 v84 ; // [rsp+298h] [rbp+190h]
__int64 v85 ; // [rsp+2A8h] [rbp+1A0h]
2021-12-25 22:36:38 +01:00
2022-03-01 22:49:57 +01:00
v9 = 1.0 ;
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 ;
* ( float * ) ( a1 + 12 ) = 1.0 / ( float ) ( * ( float * ) & v11 * * ( float * ) & v11 ) ;
v13 = * ( unsigned __int16 * ) ( a7 + 320 ) ;
* ( _WORD * ) a1 = v13 ;
2022-05-01 05:38:51 +02:00
v14 = ( __int64 ) CMDLCache : : FindMDL ( g_MDLCache , v13 , 0 i64 ) ;
2022-03-01 22:49:57 +01:00
v84 = v14 ;
2022-05-01 21:09:05 +02:00
if ( ( * ( _BYTE * ) ( v14 + 156 ) & 0x10 ) = = 0 & & ( * dword_1696A9D20 ) < 100 )
+ + ( * 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 ;
v19 = v17 < * ( _DWORD * ) ( v14 + 228 ) ;
* ( _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 ;
sub_1404365A0 ( v77 , ( const __m128i * ) a5 , ( unsigned int * ) ( 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 ;
auto m1 = _mm_set_ps ( 0.003922 , 0.003922 , 0.003922 , 0.003922 ) ;
__m128i m2 = { 0 } ;
__m128i m3 = { 0 } ;
v74 = _mm_mul_ps ( _mm_cvtepi32_ps ( _mm_unpacklo_epi16 ( _mm_unpacklo_epi8 ( _mm_cvtsi32_si128 ( * ( _DWORD * ) ( a5 + 52 ) ) , m2 ) , m3 ) ) , m1 ) ;
v27 = sub_140270130 ( & v74 ) ;
2022-05-01 21:09:05 +02:00
* ( __m128 * ) ( v26 + ( * qword_141744EA8 ) + 48 ) = v27 ;
sub_140257F20 ( & * ( 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 ] ) ;
v72 = v71 . m128i_i8 [ 12 ] ; // may be wrong
2022-05-01 05:38:51 +02:00
v28 = * qword_141744EA0 ;
2022-03-01 22:49:57 +01:00
v29 = 3 * v12 ;
v75 = ( __int64 ) & v74 . m128_i64 [ 1 ] + 4 ; // may be wrong.
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-01 21:09:05 +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 ;
if ( v41 < = 0.0 )
{
if ( ( * ( _DWORD * ) ( v84 + 156 ) & 0x800 ) ! = 0 )
{
v41 = 227023.36 ;
}
else
{
v43 = * ( float * ) ( v84 + 364 ) ;
if ( v43 < = 0.0 )
v41 = fmaxf (
( float ) ( ( float ) ( sqrt (
( 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 ;
}
}
v44 = fmaxf ( v41 , 100.0 ) ;
* ( float * ) ( a1 + 16 ) = v44 * v44 ;
v45 = _mm_loadu_si32 ( ( unsigned int * ) ( v84 + 368 ) ) ; //v45 = (__m128i)*(unsigned int*)(v84 + 368);
if ( * ( float * ) v45 . m128i_i32 < = 0.0 )
{
LOWORD ( v48 ) = 0 ;
}
else
{
* ( float * ) v45 . m128i_i32 = * ( float * ) v45 . m128i_i32 * * ( float * ) v45 . m128i_i32 ;
v46 = v45 ;
* ( float * ) v46 . m128i_i32 = fmaxf ( * ( float * ) v45 . m128i_i32 , 1.0004883 ) ;
v47 = v46 ;
* ( float * ) v47 . m128i_i32 = fminf ( * ( float * ) v46 . m128i_i32 , 4293918700.0 ) ;
v48 = ( unsigned int ) ( _mm_cvtsi128_si32 ( v47 ) - 1065351168 ) > > 12 ;
}
* ( _WORD * ) ( a1 + 6 ) = v48 ;
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 ) ;
if ( v44 > = 227023.363449684 )
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-01 21:09:05 +02:00
* ( float * ) ( ( * qword_141744E88 ) + 8 i64 * a3 ) = v9 * ( float ) ( 1.0 / ( float ) ( v52 * staticProp_gather_size_weight - > GetFloat ( ) ) ) ;
* ( _BYTE * ) ( ( * qword_141744E88 ) + 8 i64 * a3 + 4 ) & = 0xFEu ;
* ( _BYTE * ) ( ( * qword_141744E88 ) + 8 i64 * a3 + 4 ) | = v44 > = 227023.363449684 ;
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-03-01 22:49:57 +01:00
v57 = v84 + * ( int * ) ( v84 + 232 ) + 2 i64 * v56 * * ( _DWORD * ) ( v84 + 224 ) ;
v58 = 0 ;
v85 = v57 ;
v83 = 0 ;
if ( * ( int * ) ( v84 + 236 ) < = 0 )
return 0 i64 ;
v59 = 0 i64 ;
v73 = 0 i64 ;
do
{
v60 = v59 + * ( int * ) ( v42 + 240 ) ;
v61 = 0 ;
v62 = v42 + v60 ;
v82 = 0 ;
v74 . m128_u64 [ 0 ] = v62 ;
if ( * ( int * ) ( v62 + 4 ) > 0 )
{
v63 = 0 i64 ;
v79 = 0 i64 ;
do
{
v64 = 0 ;
v65 = v62 + v63 + * ( int * ) ( v62 + 12 ) ;
if ( * ( int * ) ( v65 + 76 ) > 0 )
{
v66 = v76 ;
v67 = 0 i64 ;
do
{
v68 = * ( void * * ) ( v66 + 8 i64 * * ( __int16 * ) ( v57 + 2 i64 * * ( int * ) ( v67 + * ( int * ) ( v65 + 80 ) + v65 ) ) ) ;
2022-05-01 05:38:51 +02:00
2022-05-01 21:09:05 +02:00
//if (v68 > (void*)0x10000 && v68 < (void*)0xFFFFFFFFF) // ??? HACK ??? CHANGE ASAP ???
2022-03-01 22:49:57 +01:00
{
2022-05-01 05:38:51 +02:00
if ( ! ( * ( unsigned __int8 ( __fastcall * * ) ( void * ) ) ( * ( _QWORD * ) v68 + 688 i64 ) ) ( v68 ) )
2022-03-01 22:49:57 +01:00
{
2022-05-01 05:38:51 +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-01 05:38:51 +02:00
v69 = 0 i64 ;
if ( * dword_141744EE8 )
2022-03-01 22:49:57 +01:00
{
2022-05-01 21:09:05 +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).
while ( * ( & * ( void * * ) off_141744E70 + v69 + 16 ) ! = v68 )
2022-05-01 05:38:51 +02:00
{
2022-05-01 21:09:05 +02:00
v69 + + ; // = (unsigned int)(v69 + 1);
if ( static_cast < int32_t > ( v69 ) > = * dword_141744EE8 )
2022-05-01 05:38:51 +02:00
goto LABEL_42 ;
}
}
else
{
LABEL_42 :
2022-05-01 21:09:05 +02:00
* ( & * ( void * * ) off_141744E70 + ( * dword_141744EE8 ) + + + 16 ) = v68 ;
2022-03-01 22:49:57 +01:00
}
}
2022-05-01 05:38:51 +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 ;
} while ( v64 < * ( _DWORD * ) ( v65 + 76 ) ) ;
v62 = v74 . m128_u64 [ 0 ] ;
v61 = v82 ;
v63 = v79 ;
}
+ + v61 ;
v63 + = 136 i64 ;
v82 = v61 ;
v79 = v63 ;
} while ( v61 < * ( _DWORD * ) ( v62 + 4 ) ) ;
v42 = v84 ;
v58 = v83 ;
}
+ + v58 ;
v59 = v73 + 16 ;
v83 = v58 ;
v73 + = 16 i64 ;
} while ( v58 < * ( _DWORD * ) ( v42 + 236 ) ) ;
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
}