Bien Pham
3 years ago
committed by
a1batross
2 changed files with 471 additions and 0 deletions
@ -0,0 +1,459 @@ |
|||||||
|
/*
|
||||||
|
cl_securedstub.c - secured client dll stub |
||||||
|
Copyright (C) 2022 FWGS |
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify |
||||||
|
it under the terms of the GNU General Public License as published by |
||||||
|
the Free Software Foundation, either version 3 of the License, or |
||||||
|
(at your option) any later version. |
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, |
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
GNU General Public License for more details. |
||||||
|
*/ |
||||||
|
|
||||||
|
#include "common.h" |
||||||
|
#include "client.h" |
||||||
|
|
||||||
|
typedef struct cldll_func_src_s |
||||||
|
{ |
||||||
|
int (*pfnInitialize)( cl_enginefunc_t *pEnginefuncs, int iVersion ); |
||||||
|
void (*pfnInit)( void ); |
||||||
|
int (*pfnVidInit)( void ); |
||||||
|
int (*pfnRedraw)( float flTime, int intermission ); |
||||||
|
int (*pfnUpdateClientData)( client_data_t *cdata, float flTime ); |
||||||
|
void (*pfnReset)( void ); |
||||||
|
void (*pfnPlayerMove)( struct playermove_s *ppmove, int server ); |
||||||
|
void (*pfnPlayerMoveInit)( struct playermove_s *ppmove ); |
||||||
|
char (*pfnPlayerMoveTexture)( char *name ); |
||||||
|
void (*IN_ActivateMouse)( void ); |
||||||
|
void (*IN_DeactivateMouse)( void ); |
||||||
|
void (*IN_MouseEvent)( int mstate ); |
||||||
|
void (*IN_ClearStates)( void ); |
||||||
|
void (*IN_Accumulate)( void ); |
||||||
|
void (*CL_CreateMove)( float frametime, struct usercmd_s *cmd, int active ); |
||||||
|
int (*CL_IsThirdPerson)( void ); |
||||||
|
void (*CL_CameraOffset)( float *ofs ); // unused
|
||||||
|
void *(*KB_Find)( const char *name ); |
||||||
|
void (*CAM_Think)( void ); // camera stuff
|
||||||
|
void (*pfnCalcRefdef)( ref_params_t *pparams ); |
||||||
|
int (*pfnAddEntity)( int type, cl_entity_t *ent, const char *modelname ); |
||||||
|
void (*pfnCreateEntities)( void ); |
||||||
|
void (*pfnDrawNormalTriangles)( void ); |
||||||
|
void (*pfnDrawTransparentTriangles)( void ); |
||||||
|
void (*pfnStudioEvent)( const struct mstudioevent_s *event, const cl_entity_t *entity ); |
||||||
|
void (*pfnPostRunCmd)( struct local_state_s *from, struct local_state_s *to, usercmd_t *cmd, int runfuncs, double time, unsigned int random_seed ); |
||||||
|
void (*pfnShutdown)( void ); |
||||||
|
void (*pfnTxferLocalOverrides)( entity_state_t *state, const clientdata_t *client ); |
||||||
|
void (*pfnProcessPlayerState)( entity_state_t *dst, const entity_state_t *src ); |
||||||
|
void (*pfnTxferPredictionData)( entity_state_t *ps, const entity_state_t *pps, clientdata_t *pcd, const clientdata_t *ppcd, weapon_data_t *wd, const weapon_data_t *pwd ); |
||||||
|
void (*pfnDemo_ReadBuffer)( int size, byte *buffer ); |
||||||
|
int (*pfnConnectionlessPacket)( const struct netadr_s *net_from, const char *args, char *buffer, int *size ); |
||||||
|
int (*pfnGetHullBounds)( int hullnumber, float *mins, float *maxs ); |
||||||
|
void (*pfnFrame)( double time ); |
||||||
|
int (*pfnKey_Event)( int eventcode, int keynum, const char *pszCurrentBinding ); |
||||||
|
void (*pfnTempEntUpdate)( double frametime, double client_time, double cl_gravity, struct tempent_s **ppTempEntFree, struct tempent_s **ppTempEntActive, int ( *Callback_AddVisibleEntity )( cl_entity_t *pEntity ), void ( *Callback_TempEntPlaySound )( struct tempent_s *pTemp, float damp )); |
||||||
|
cl_entity_t *(*pfnGetUserEntity)( int index ); |
||||||
|
void (*pfnVoiceStatus)( int entindex, qboolean bTalking ); |
||||||
|
void (*pfnDirectorMessage)( int iSize, void *pbuf ); |
||||||
|
int (*pfnGetStudioModelInterface)( int version, struct r_studio_interface_s **ppinterface, struct engine_studio_api_s *pstudio ); |
||||||
|
void (*pfnChatInputPosition)( int *x, int *y ); |
||||||
|
int (*pfnGetPlayerTeam)( int iPlayer ); |
||||||
|
void *(*pfnClientFactory)( void ); |
||||||
|
} cldll_func_src_t; |
||||||
|
|
||||||
|
typedef struct cldll_func_dst_s |
||||||
|
{ |
||||||
|
void (*pfnInitialize)( cl_enginefunc_t **pEnginefuncs, int *iVersion ); |
||||||
|
void (*pfnInit)( void ); |
||||||
|
void (*pfnVidInit)( void ); |
||||||
|
void (*pfnRedraw)( float *flTime, int *intermission ); |
||||||
|
void (*pfnUpdateClientData)( client_data_t **cdata, float *flTime ); |
||||||
|
void (*pfnReset)( void ); |
||||||
|
void (*pfnPlayerMove)( struct playermove_s **ppmove, int *server ); |
||||||
|
void (*pfnPlayerMoveInit)( struct playermove_s **ppmove ); |
||||||
|
void (*pfnPlayerMoveTexture)( char **name ); |
||||||
|
void (*IN_ActivateMouse)( void ); |
||||||
|
void (*IN_DeactivateMouse)( void ); |
||||||
|
void (*IN_MouseEvent)( int *mstate ); |
||||||
|
void (*IN_ClearStates)( void ); |
||||||
|
void (*IN_Accumulate)( void ); |
||||||
|
void (*CL_CreateMove)( float *frametime, struct usercmd_s **cmd, int *active ); |
||||||
|
void (*CL_IsThirdPerson)( void ); |
||||||
|
void (*CL_CameraOffset)( float **ofs ); |
||||||
|
void (*KB_Find)( const char **name ); |
||||||
|
void (*CAM_Think)( void ); |
||||||
|
void (*pfnCalcRefdef)( ref_params_t **pparams ); |
||||||
|
void (*pfnAddEntity)( int *type, cl_entity_t **ent, const char **modelname ); |
||||||
|
void (*pfnCreateEntities)( void ); |
||||||
|
void (*pfnDrawNormalTriangles)( void ); |
||||||
|
void (*pfnDrawTransparentTriangles)( void ); |
||||||
|
void (*pfnStudioEvent)( const struct mstudioevent_s **event, const cl_entity_t **entity ); |
||||||
|
void (*pfnPostRunCmd)( struct local_state_s **from, struct local_state_s **to, usercmd_t **cmd, int *runfuncs, double *time, unsigned int *random_seed ); |
||||||
|
void (*pfnShutdown)( void ); |
||||||
|
void (*pfnTxferLocalOverrides)( entity_state_t **state, const clientdata_t **client ); |
||||||
|
void (*pfnProcessPlayerState)( entity_state_t **dst, const entity_state_t **src ); |
||||||
|
void (*pfnTxferPredictionData)( entity_state_t **ps, const entity_state_t **pps, clientdata_t **pcd, const clientdata_t **ppcd, weapon_data_t **wd, const weapon_data_t **pwd ); |
||||||
|
void (*pfnDemo_ReadBuffer)( int *size, byte **buffer ); |
||||||
|
void (*pfnConnectionlessPacket)( const struct netadr_s **net_from, const char **args, char **buffer, int **size ); |
||||||
|
void (*pfnGetHullBounds)( int *hullnumber, float **mins, float **maxs ); |
||||||
|
void (*pfnFrame)( double *time ); |
||||||
|
void (*pfnKey_Event)( int *eventcode, int *keynum, const char **pszCurrentBinding ); |
||||||
|
void (*pfnTempEntUpdate)( double *frametime, double *client_time, double *cl_gravity, struct tempent_s ***ppTempEntFree, struct tempent_s ***ppTempEntActive, int ( **Callback_AddVisibleEntity )( cl_entity_t *pEntity ), void ( **Callback_TempEntPlaySound )( struct tempent_s *pTemp, float damp )); |
||||||
|
void (*pfnGetUserEntity)( int *index ); |
||||||
|
void (*pfnVoiceStatus)( int *entindex, qboolean *bTalking ); |
||||||
|
void (*pfnDirectorMessage)( int *iSize, void **pbuf ); |
||||||
|
void (*pfnGetStudioModelInterface)( int *version, struct r_studio_interface_s ***ppinterface, struct engine_studio_api_s **pstudio ); |
||||||
|
void (*pfnChatInputPosition)( int **x, int **y ); |
||||||
|
void (*pfnGetPlayerTeam)( int *iPlayer ); |
||||||
|
} cldll_func_dst_t; |
||||||
|
|
||||||
|
typedef struct modfuncs_s |
||||||
|
{ |
||||||
|
void (*m_pfnLoadMod)( char *pchModule ); |
||||||
|
void (*m_pfnCloseMod)( void ); |
||||||
|
int (*m_pfnNCall)( int ijump, int cnArg, ... ); |
||||||
|
void (*m_pfnGetClDstAddrs)( cldll_func_dst_t *pcldstAddrs ); |
||||||
|
void (*m_pfnGetEngDstAddrs)( struct cl_enginefunc_dst_s *pengdstAddrs ); |
||||||
|
void (*m_pfnModuleLoaded)( void ); |
||||||
|
void (*m_pfnProcessOutgoingNet)( struct netchan_s *pchan, struct sizebuf_s *psizebuf ); |
||||||
|
qboolean (*m_pfnProcessIncomingNet)( struct netchan_s *pchan, struct sizebuf_s *psizebuf ); |
||||||
|
void (*m_pfnTextureLoad)( char *pszName, int dxWidth, int dyHeight, char *pbData ); |
||||||
|
void (*m_pfnModelLoad)( struct model_s *pmodel, void *pvBuf ); |
||||||
|
void (*m_pfnFrameBegin)( void ); |
||||||
|
void (*m_pfnFrameRender1)( void ); |
||||||
|
void (*m_pfnFrameRender2)( void ); |
||||||
|
void (*m_pfnSetModSHelpers)( struct modshelpers_s *pmodshelpers ); |
||||||
|
void (*m_pfnSetModCHelpers)( struct modchelpers_s *pmodchelpers ); |
||||||
|
void (*m_pfnSetEngData)( struct engdata_s *pengdata ); |
||||||
|
int m_nVersion; |
||||||
|
void (*m_pfnConnectClient)( int iPlayer ); |
||||||
|
void (*m_pfnRecordIP)( unsigned int pnIP ); |
||||||
|
void (*m_pfnPlayerStatus)( unsigned char *pbData, int cbData ); |
||||||
|
void (*m_pfnSetEngineVersion)( int nVersion ); |
||||||
|
int m_nVoid2; |
||||||
|
int m_nVoid3; |
||||||
|
int m_nVoid4; |
||||||
|
int m_nVoid5; |
||||||
|
int m_nVoid6; |
||||||
|
int m_nVoid7; |
||||||
|
int m_nVoid8; |
||||||
|
int m_nVoid9; |
||||||
|
} modfuncs_t; |
||||||
|
|
||||||
|
static void DstInitialize( cl_enginefunc_t **pEnginefuncs, int *iVersion ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstInit( void ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstVidInit( void ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstRedraw( float *flTime, int *intermission ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstUpdateClientData( client_data_t **cdata, float *flTime ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstReset( void ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstPlayerMove( struct playermove_s **ppmove, int *server ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstPlayerMoveInit( struct playermove_s **ppmove ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstPlayerMoveTexture( char **name ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstIN_ActivateMouse( void ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstIN_DeactivateMouse( void ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstIN_MouseEvent( int *mstate ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstIN_ClearStates( void ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstIN_Accumulate( void ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstCL_CreateMove( float *frametime, struct usercmd_s **cmd, int *active ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstCL_IsThirdPerson( void ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstCL_CameraOffset( float **ofs ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstKB_Find( const char **name ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstCAM_Think( void ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstCalcRefdef( ref_params_t **pparams ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstAddEntity( int *type, cl_entity_t **ent, const char **modelname ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstCreateEntities( void ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstDrawNormalTriangles( void ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstDrawTransparentTriangles( void ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstStudioEvent( const struct mstudioevent_s **event, const cl_entity_t **entity ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstPostRunCmd( struct local_state_s **from, struct local_state_s **to, usercmd_t **cmd, int *runfuncs, double *time, unsigned int *random_seed ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstShutdown( void ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstTxferLocalOverrides( entity_state_t **state, const clientdata_t **client ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstProcessPlayerState( entity_state_t **dst, const entity_state_t **src ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstTxferPredictionData( entity_state_t **ps, const entity_state_t **pps, clientdata_t **pcd, const clientdata_t **ppcd, weapon_data_t **wd, const weapon_data_t **pwd ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstDemo_ReadBuffer( int *size, byte **buffer ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstConnectionlessPacket( const struct netadr_s **net_from, const char **args, char **buffer, int **size ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstGetHullBounds( int *hullnumber, float **mins, float **maxs ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstFrame( double *time ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstKey_Event( int *eventcode, int *keynum, const char **pszCurrentBinding ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstTempEntUpdate( double *frametime, double *client_time, double *cl_gravity, struct tempent_s ***ppTempEntFree, struct tempent_s ***ppTempEntActive, int ( **Callback_AddVisibleEntity )( cl_entity_t *pEntity ), void ( **Callback_TempEntPlaySound )( struct tempent_s *pTemp, float damp ) ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstGetUserEntity( int *index ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstVoiceStatus( int *entindex, qboolean *bTalking ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstDirectorMessage( int *iSize, void **pbuf ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstGetStudioModelInterface( int *version, struct r_studio_interface_s ***ppinterface, struct engine_studio_api_s **pstudio ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstChatInputPosition( int **x, int **y ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static void DstGetPlayerTeam( int *iPlayer ) |
||||||
|
{ |
||||||
|
// stub
|
||||||
|
} |
||||||
|
|
||||||
|
static cldll_func_dst_t cldllFuncDst = |
||||||
|
{ |
||||||
|
DstInitialize, |
||||||
|
DstInit, |
||||||
|
DstVidInit, |
||||||
|
DstRedraw, |
||||||
|
DstUpdateClientData, |
||||||
|
DstReset, |
||||||
|
DstPlayerMove, |
||||||
|
DstPlayerMoveInit, |
||||||
|
DstPlayerMoveTexture, |
||||||
|
DstIN_ActivateMouse, |
||||||
|
DstIN_DeactivateMouse, |
||||||
|
DstIN_MouseEvent, |
||||||
|
DstIN_ClearStates, |
||||||
|
DstIN_Accumulate, |
||||||
|
DstCL_CreateMove, |
||||||
|
DstCL_IsThirdPerson, |
||||||
|
DstCL_CameraOffset, |
||||||
|
DstKB_Find, |
||||||
|
DstCAM_Think, |
||||||
|
DstCalcRefdef, |
||||||
|
DstAddEntity, |
||||||
|
DstCreateEntities, |
||||||
|
DstDrawNormalTriangles, |
||||||
|
DstDrawTransparentTriangles, |
||||||
|
DstStudioEvent, |
||||||
|
DstPostRunCmd, |
||||||
|
DstShutdown, |
||||||
|
DstTxferLocalOverrides, |
||||||
|
DstProcessPlayerState, |
||||||
|
DstTxferPredictionData, |
||||||
|
DstDemo_ReadBuffer, |
||||||
|
DstConnectionlessPacket, |
||||||
|
DstGetHullBounds, |
||||||
|
DstFrame, |
||||||
|
DstKey_Event, |
||||||
|
DstTempEntUpdate, |
||||||
|
DstGetUserEntity, |
||||||
|
DstVoiceStatus, |
||||||
|
DstDirectorMessage, |
||||||
|
DstGetStudioModelInterface, |
||||||
|
DstChatInputPosition, |
||||||
|
DstGetPlayerTeam, |
||||||
|
}; |
||||||
|
|
||||||
|
void GetSecuredClientAPI( CL_EXPORT_FUNCS F ) |
||||||
|
{ |
||||||
|
cldll_func_src_t cldllFuncSrc; |
||||||
|
modfuncs_t modFuncs; |
||||||
|
const dllfunc_t *func; |
||||||
|
|
||||||
|
memset( &cldllFuncSrc, 0, sizeof( cldllFuncSrc ) ); |
||||||
|
memset( &modFuncs, 0, sizeof( modFuncs ) ); |
||||||
|
|
||||||
|
// secured client dlls need these
|
||||||
|
*(cldll_func_dst_t **)&cldllFuncSrc.pfnVidInit = &cldllFuncDst; |
||||||
|
*(modfuncs_t **)&cldllFuncSrc.pfnInitialize = &modFuncs; |
||||||
|
|
||||||
|
// trying to fill interface now
|
||||||
|
F( &cldllFuncSrc ); |
||||||
|
|
||||||
|
// map exports to xash's cldll_func_t
|
||||||
|
clgame.dllFuncs.pfnInitialize = cldllFuncSrc.pfnInitialize; |
||||||
|
clgame.dllFuncs.pfnInit = cldllFuncSrc.pfnInit; |
||||||
|
clgame.dllFuncs.pfnVidInit = cldllFuncSrc.pfnVidInit; |
||||||
|
clgame.dllFuncs.pfnRedraw = cldllFuncSrc.pfnRedraw; |
||||||
|
clgame.dllFuncs.pfnUpdateClientData = cldllFuncSrc.pfnUpdateClientData; |
||||||
|
clgame.dllFuncs.pfnReset = cldllFuncSrc.pfnReset; |
||||||
|
clgame.dllFuncs.pfnPlayerMove = cldllFuncSrc.pfnPlayerMove; |
||||||
|
clgame.dllFuncs.pfnPlayerMoveInit = cldllFuncSrc.pfnPlayerMoveInit; |
||||||
|
clgame.dllFuncs.pfnPlayerMoveTexture = cldllFuncSrc.pfnPlayerMoveTexture; |
||||||
|
clgame.dllFuncs.IN_ActivateMouse = cldllFuncSrc.IN_ActivateMouse; |
||||||
|
clgame.dllFuncs.IN_DeactivateMouse = cldllFuncSrc.IN_DeactivateMouse; |
||||||
|
clgame.dllFuncs.IN_MouseEvent = cldllFuncSrc.IN_MouseEvent; |
||||||
|
clgame.dllFuncs.IN_ClearStates = cldllFuncSrc.IN_ClearStates; |
||||||
|
clgame.dllFuncs.IN_Accumulate = cldllFuncSrc.IN_Accumulate; |
||||||
|
clgame.dllFuncs.CL_CreateMove = cldllFuncSrc.CL_CreateMove; |
||||||
|
clgame.dllFuncs.CL_IsThirdPerson = cldllFuncSrc.CL_IsThirdPerson; |
||||||
|
clgame.dllFuncs.CL_CameraOffset = cldllFuncSrc.CL_CameraOffset; |
||||||
|
clgame.dllFuncs.KB_Find = cldllFuncSrc.KB_Find; |
||||||
|
clgame.dllFuncs.CAM_Think = cldllFuncSrc.CAM_Think; |
||||||
|
clgame.dllFuncs.pfnCalcRefdef = cldllFuncSrc.pfnCalcRefdef; |
||||||
|
clgame.dllFuncs.pfnAddEntity = cldllFuncSrc.pfnAddEntity; |
||||||
|
clgame.dllFuncs.pfnCreateEntities = cldllFuncSrc.pfnCreateEntities; |
||||||
|
clgame.dllFuncs.pfnDrawNormalTriangles = cldllFuncSrc.pfnDrawNormalTriangles; |
||||||
|
clgame.dllFuncs.pfnDrawTransparentTriangles = cldllFuncSrc.pfnDrawTransparentTriangles; |
||||||
|
clgame.dllFuncs.pfnStudioEvent = cldllFuncSrc.pfnStudioEvent; |
||||||
|
clgame.dllFuncs.pfnPostRunCmd = cldllFuncSrc.pfnPostRunCmd; |
||||||
|
clgame.dllFuncs.pfnShutdown = cldllFuncSrc.pfnShutdown; |
||||||
|
clgame.dllFuncs.pfnTxferLocalOverrides = cldllFuncSrc.pfnTxferLocalOverrides; |
||||||
|
clgame.dllFuncs.pfnProcessPlayerState = cldllFuncSrc.pfnProcessPlayerState; |
||||||
|
clgame.dllFuncs.pfnTxferPredictionData = cldllFuncSrc.pfnTxferPredictionData; |
||||||
|
clgame.dllFuncs.pfnDemo_ReadBuffer = cldllFuncSrc.pfnDemo_ReadBuffer; |
||||||
|
clgame.dllFuncs.pfnConnectionlessPacket = cldllFuncSrc.pfnConnectionlessPacket; |
||||||
|
clgame.dllFuncs.pfnGetHullBounds = cldllFuncSrc.pfnGetHullBounds; |
||||||
|
clgame.dllFuncs.pfnFrame = cldllFuncSrc.pfnFrame; |
||||||
|
clgame.dllFuncs.pfnKey_Event = cldllFuncSrc.pfnKey_Event; |
||||||
|
clgame.dllFuncs.pfnTempEntUpdate = cldllFuncSrc.pfnTempEntUpdate; |
||||||
|
clgame.dllFuncs.pfnGetUserEntity = cldllFuncSrc.pfnGetUserEntity; |
||||||
|
clgame.dllFuncs.pfnVoiceStatus = cldllFuncSrc.pfnVoiceStatus; |
||||||
|
clgame.dllFuncs.pfnDirectorMessage = cldllFuncSrc.pfnDirectorMessage; |
||||||
|
clgame.dllFuncs.pfnGetStudioModelInterface = cldllFuncSrc.pfnGetStudioModelInterface; |
||||||
|
clgame.dllFuncs.pfnChatInputPosition = cldllFuncSrc.pfnChatInputPosition; |
||||||
|
} |
Loading…
Reference in new issue