2
0
mirror of https://github.com/rehlds/metamod-r.git synced 2025-02-12 06:38:47 +03:00
metamod-r/metamod/src/meta_eiface.h

294 lines
12 KiB
C
Raw Normal View History

2016-07-26 07:22:47 +07:00
#pragma once
// We use our own versions of the engine/dll interface structs. We add a
// few dummy entries to the end and set them to 0. That way we are
// protected from updates to the HL SDK adding new functions which would
// cause a) the game dll copying arbitrary values from us and b) the game
// dll overwriting our memory when using an old Metamod with a new game
// dll.
// meta_new_dll_functions_t
struct meta_new_dll_functions_t: public NEW_DLL_FUNCTIONS {
public:
meta_new_dll_functions_t();
meta_new_dll_functions_t(
void (*pfnOnFreeEntPrivateData) (edict_t *),
void (*pfnGameShutdown) (),
int (*pfnShouldCollide) (edict_t *, edict_t *),
void (*pfnCvarValue) (const edict_t *, const char *),
void (*pfnCvarValue2) (const edict_t *, int, const char *, const char *)
);
meta_new_dll_functions_t(const meta_new_dll_functions_t&);
meta_new_dll_functions_t& operator=(const meta_new_dll_functions_t&);
// Fill this object with pointers copied from a NEW_DLL_FUNCTIONS struct.
void set_from(NEW_DLL_FUNCTIONS *pFuncs);
// Copy the pointers from this object to a NEW_DLL_FUNCTIONS struct.
void copy_to(NEW_DLL_FUNCTIONS *pFuncs);
};
// Inline functions
inline meta_new_dll_functions_t::meta_new_dll_functions_t()
{
Q_memset(this, 0, sizeof(meta_new_dll_functions_t));
}
inline meta_new_dll_functions_t::meta_new_dll_functions_t(const meta_new_dll_functions_t& _rhs)
{
Q_memcpy(this, &_rhs, sizeof(NEW_DLL_FUNCTIONS));
}
inline meta_new_dll_functions_t& meta_new_dll_functions_t::operator=(const meta_new_dll_functions_t& _rhs)
{
Q_memcpy(this, &_rhs, sizeof(NEW_DLL_FUNCTIONS));
return *this;
}
inline void meta_new_dll_functions_t::set_from(NEW_DLL_FUNCTIONS* _pFuncs)
{
Q_memcpy(this, _pFuncs, sizeof(NEW_DLL_FUNCTIONS));
}
// meta_enginefuncs_t
struct meta_enginefuncs_t: public enginefuncs_t {
public:
// functions:
meta_enginefuncs_t();
// Spawn of the devil
meta_enginefuncs_t(
int (*_pfnPrecacheModel)(const char *),
int (*_pfnPrecacheSound)(const char *),
void (*_pfnSetModel)(edict_t *, const char *),
int (*_pfnModelIndex)(const char *),
int (*_pfnModelFrames)(int),
void (*_pfnSetSize)(edict_t *, const float *, const float *),
void (*_pfnChangeLevel)(const char *, const char *),
void (*_pfnGetSpawnParms)(edict_t *),
void (*_pfnSaveSpawnParms)(edict_t *),
float (*_pfnVecToYaw)(const float *),
void (*_pfnVecToAngles)(const float *, float *),
void (*_pfnMoveToOrigin)(edict_t *, const float *, float, int),
void (*_pfnChangeYaw)(edict_t *),
void (*_pfnChangePitch)(edict_t *),
edict_t *(*_pfnFindEntityByString)(edict_t *, const char *, const char *),
int (*_pfnGetEntityIllum)(edict_t *),
edict_t *(*_pfnFindEntityInSphere)(edict_t *, const float *, float),
edict_t *(*_pfnFindClientInPVS)(edict_t *),
edict_t *(*_pfnEntitiesInPVS)(edict_t *),
void (*_pfnMakeVectors)(const float *),
void (*_pfnAngleVectors)(const float *, float *, float *, float *),
edict_t *(*_pfnCreateEntity)(),
void (*_pfnRemoveEntity)(edict_t *),
edict_t *(*_pfnCreateNamedEntity)(int),
void (*_pfnMakeStatic)(edict_t *),
int (*_pfnEntIsOnFloor)(edict_t *),
int (*_pfnDropToFloor)(edict_t *),
int (*_pfnWalkMove)(edict_t *, float, float, int),
void (*_pfnSetOrigin)(edict_t *, const float *),
void (*_pfnEmitSound)(edict_t *, int, const char *, float, float, int, int),
void (*_pfnEmitAmbientSound)(edict_t *, float *, const char *, float, float, int, int),
void (*_pfnTraceLine)(const float *, const float *, int, edict_t *, TraceResult*),
void (*_pfnTraceToss)(edict_t*, edict_t*, TraceResult *),
int (*_pfnTraceMonsterHull)(edict_t *, const float*, const float*, int, edict_t *, TraceResult *),
void (*_pfnTraceHull)(const float *, const float*, int, int, edict_t*, TraceResult *),
void (*_pfnTraceModel)(const float *, const float*, int, edict_t *, TraceResult *),
const char *(*_pfnTraceTexture)(edict_t *, const float*, const float*),
void (*_pfnTraceSphere)(const float *, const float*, int, float, edict_t*, TraceResult*),
void (*_pfnGetAimVector)(edict_t *, float, float*),
void (*_pfnServerCommand)(char*),
void (*_pfnServerExecute)(),
void (*_pfnClientCommand)(edict_t *, char *, ...),
void (*_pfnParticleEffect)(const float *, const float *, float, float),
void (*_pfnLightStyle)(int, char *),
int (*_pfnDecalIndex)(const char *),
int (*_pfnPointContents)(const float *),
void (*_pfnMessageBegin)(int, int, const float*, edict_t*),
void (*_pfnMessageEnd)(),
void (*_pfnWriteByte)(int),
void (*_pfnWriteChar)(int),
void (*_pfnWriteShort)(int),
void (*_pfnWriteLong)(int),
void (*_pfnWriteAngle)(float),
void (*_pfnWriteCoord)(float),
void (*_pfnWriteString)(const char *),
void (*_pfnWriteEntity)(int),
void (*_pfnCVarRegister)(cvar_t *),
float (*_pfnCVarGetFloat)(const char *),
const char *(*_pfnCVarGetString)(const char *),
void (*_pfnCVarSetFloat)(const char *, float),
void (*_pfnCVarSetString)(const char *, const char*),
void (*_pfnAlertMessage)(ALERT_TYPE, const char *, ...),
void (*_pfnEngineFprintf)(void *, const char *, ...),
void *(*_pfnPvAllocEntPrivateData)(edict_t *, int32),
void *(*_pfnPvEntPrivateData)(edict_t *),
void (*_pfnFreeEntPrivateData)(edict_t *),
const char *(*_pfnSzFromIndex)(int),
int (*_pfnAllocString)(const char *),
struct entvars_s*(*_pfnGetVarsOfEnt)(edict_t *),
edict_t *(*_pfnPEntityOfEntOffset)(int),
int (*_pfnEntOffsetOfPEntity)(const edict_t *),
int (*_pfnIndexOfEdict)(const edict_t *),
edict_t *(*_pfnPEntityOfEntIndex)(int),
edict_t *(*_pfnFindEntityByVars)(struct entvars_s *),
void *(*_pfnGetModelPtr)(edict_t *),
int (*_pfnRegUserMsg)(const char *, int),
void (*_pfnAnimationAutomove)(const edict_t *, float),
void (*_pfnGetBonePosition)(const edict_t *, int, float *, float *),
uint32 (*_pfnFunctionFromName)(const char*),
const char *(*_pfnNameForFunction)(uint32),
void (*_pfnClientPrintf)(edict_t *, PRINT_TYPE, const char *),
void (*_pfnServerPrint)(const char *),
const char *(*_pfnCmd_Args)(),
const char *(*_pfnCmd_Argv)(int argc),
int (*_pfnCmd_Argc)(),
void (*_pfnGetAttachment)(const edict_t *, int, float *, float *),
void (*_pfnCRC32_Init)(CRC32_t *),
void (*_pfnCRC32_ProcessBuffer)(CRC32_t *, void *, int),
void (*_pfnCRC32_ProcessByte)(CRC32_t *, unsigned char),
CRC32_t (*_pfnCRC32_Final)(CRC32_t),
int32 (*_pfnRandomLong)(int32, int32),
float (*_pfnRandomFloat)(float, float),
void (*_pfnSetView)(const edict_t *, const edict_t *),
float (*_pfnTime)(),
void (*_pfnCrosshairAngle)(const edict_t *, float, float),
byte *(*_pfnLoadFileForMe)(char *, int *),
void (*_pfnFreeFile)(void *),
void (*_pfnEndSection)(const char *),
int (*_pfnCompareFileTime)(char *, char *, int *),
void (*_pfnGetGameDir)(char *),
void (*_pfnCvar_RegisterVariable)(cvar_t *),
void (*_pfnFadeClientVolume)(const edict_t *, int, int, int, int),
void (*_pfnSetClientMaxspeed)(edict_t *, float),
edict_t *(*_pfnCreateFakeClient)(const char *),
void (*_pfnRunPlayerMove)(edict_t *, const float *, float, float, float, unsigned short, byte, byte),
int (*_pfnNumberOfEntities)(),
char *(*_pfnGetInfoKeyBuffer)(edict_t *),
char *(*_pfnInfoKeyValue)(char *, const char *),
void (*_pfnSetKeyValue)(char *, const char *, const char *),
void (*_pfnSetClientKeyValue)(int, char *, const char *, const char *),
int (*_pfnIsMapValid)(char *),
void (*_pfnStaticDecal)(const float *, int, int, int),
int (*_pfnPrecacheGeneric)(char *),
int (*_pfnGetPlayerUserId)(edict_t *),
void (*_pfnBuildSoundMsg)(edict_t *, int, const char*, float, float, int, int, int, int, const float *, edict_t *),
int (*_pfnIsDedicatedServer)(),
cvar_t *(*_pfnCVarGetPointer)(const char *),
unsigned int (*_pfnGetPlayerWONId)(edict_t *),
void (*_pfnInfo_RemoveKey)(char *, const char *),
const char *(*_pfnGetPhysicsKeyValue)(const edict_t *, const char *),
void (*_pfnSetPhysicsKeyValue)(const edict_t *, const char *, const char *),
const char *(*_pfnGetPhysicsInfoString)(const edict_t *),
unsigned short (*_pfnPrecacheEvent)(int, const char *),
void (*_pfnPlaybackEvent)(int, const edict_t *, unsigned short, float, float *, float *, float, float, int, int, int, int),
unsigned char *(*_pfnSetFatPVS)(float *),
unsigned char *(*_pfnSetFatPAS)(float *),
int (*_pfnCheckVisibility)(edict_t *, unsigned char *),
void (*_pfnDeltaSetField)(struct delta_s *, const char *),
void (*_pfnDeltaUnsetField)(struct delta_s *, const char *),
void (*_pfnDeltaAddEncoder)(char *, void (*)(struct delta_s *, const unsigned char *, const unsigned char *)),
int (*_pfnGetCurrentPlayer)(),
int (*_pfnCanSkipPlayer)(const edict_t *),
int (*_pfnDeltaFindField)(struct delta_s *, const char *),
void (*_pfnDeltaSetFieldByIndex)(struct delta_s *, int),
void (*_pfnDeltaUnsetFieldByIndex)(struct delta_s *, int),
void (*_pfnSetGroupMask)(int, int),
int (*_pfnCreateInstancedBaseline)(int, struct entity_state_s *),
void (*_pfnCvar_DirectSet)(struct cvar_s *, const char *),
void (*_pfnForceUnmodified)(FORCE_TYPE, float *, float *, const char *),
void (*_pfnGetPlayerStats)(const edict_t *, int *, int *),
void (*_pfnAddServerCommand)(char*, void (*)()),
qboolean (*_pfnVoice_GetClientListening)(int, int),
qboolean (*_pfnVoice_SetClientListening)(int, int, qboolean),
const char *(*_pfnGetPlayerAuthId)(edict_t *),
sequenceEntry_s *(*_pfnSequenceGet)(const char *, const char *),
sentenceEntry_s *(*_pfnSequencePickSentence)(const char *, int, int *),
int (*_pfnGetFileSize)(char *),
unsigned int (*_pfnGetApproxWavePlayLen)(const char *),
int (*_pfnIsCareerMatch)(),
int (*_pfnGetLocalizedStringLength)(const char *),
void (*_pfnRegisterTutorMessageShown)(int),
int (*_pfnGetTimesTutorMessageShown)(int),
void (*_pfnProcessTutorMessageDecayBuffer)(int*, int),
void (*_pfnConstructTutorMessageDecayBuffer)(int*, int),
void (*_pfnResetTutorMessageDecayData)(),
void (*_pfnQueryClientCvarValue)(const edict_t *, const char *),
void (*_pfnQueryClientCvarValue2)(const edict_t *, const char *, int),
int (*_pfnEngCheckParm)(const char *, char**)
);
meta_enginefuncs_t(const meta_enginefuncs_t &);
meta_enginefuncs_t& operator=(const meta_enginefuncs_t &);
// Fill this object with pointers copied from an enginefuncs_t struct.
void set_from(enginefuncs_t *pFuncs);
// Copy the pointers from this object to an enginefuncs_t struct.
void copy_to(enginefuncs_t *pFuncs);
};
inline meta_enginefuncs_t::meta_enginefuncs_t()
{
Q_memset(this, 0, sizeof(meta_enginefuncs_t));
}
inline meta_enginefuncs_t::meta_enginefuncs_t(const meta_enginefuncs_t &_rhs)
{
Q_memcpy(this, &_rhs, sizeof(enginefuncs_t));
}
inline meta_enginefuncs_t &meta_enginefuncs_t::operator=(const meta_enginefuncs_t &_rhs)
{
Q_memcpy(this, &_rhs, sizeof(enginefuncs_t));
return *this;
}
inline void meta_enginefuncs_t::set_from(enginefuncs_t *_pFuncs)
{
Q_memcpy(this, _pFuncs, sizeof(enginefuncs_t));
}
inline void meta_enginefuncs_t::copy_to(enginefuncs_t *_pFuncs)
{
Q_memcpy(_pFuncs, this, sizeof(enginefuncs_t));
}
// HL_enginefuncs_t
//
// This is a specialisation of the meta_enginefuncs_t struct which is only
// used for the initial copy of the engine functions, i.e. those we get
// passed from the HL engine right at the beginning.
// This specialisation does some extra initialisation when getting set up
// like calculating the engine interface version and fixing up any invalid
// pointers.
// Since there is only one master copy of engine functions this could be
// implemented as a singleton. This is left as an option for later.
//
struct HL_enginefuncs_t: public meta_enginefuncs_t {
public:
HL_enginefuncs_t();
// Fill this object with pointers copied from an enginefuncs_t struct
// and fixup the interface.
// For this class this happens in the GiveFptrsToDll() function
// with the pointers passed from the HL engine.
void initialise_interface(enginefuncs_t *pFuncs);
private:
// Moving copy_to() and set_from() to the private space.
void set_from(enginefuncs_t *pFuncs) { meta_enginefuncs_t::set_from(pFuncs); };
void copy_to(enginefuncs_t *pFuncs) { meta_enginefuncs_t::copy_to(pFuncs); };
};
inline HL_enginefuncs_t::HL_enginefuncs_t() : meta_enginefuncs_t() {};