mirror of
https://github.com/rehlds/metamod-r.git
synced 2025-01-26 05:28:19 +03:00
Added example plugin
This commit is contained in:
parent
7005773f10
commit
4929127adc
200
metamod/extra/example/dllapi.cpp
Normal file
200
metamod/extra/example/dllapi.cpp
Normal file
@ -0,0 +1,200 @@
|
|||||||
|
#include <extdll.h>
|
||||||
|
#include <meta_api.h>
|
||||||
|
|
||||||
|
DLL_FUNCTIONS g_DllFunctionTable =
|
||||||
|
{
|
||||||
|
NULL, // pfnGameInit
|
||||||
|
NULL, // pfnSpawn
|
||||||
|
NULL, // pfnThink
|
||||||
|
NULL, // pfnUse
|
||||||
|
NULL, // pfnTouch
|
||||||
|
NULL, // pfnBlocked
|
||||||
|
NULL, // pfnKeyValue
|
||||||
|
NULL, // pfnSave
|
||||||
|
NULL, // pfnRestore
|
||||||
|
NULL, // pfnSetAbsBox
|
||||||
|
NULL, // pfnSaveWriteFields
|
||||||
|
NULL, // pfnSaveReadFields
|
||||||
|
NULL, // pfnSaveGlobalState
|
||||||
|
NULL, // pfnRestoreGlobalState
|
||||||
|
NULL, // pfnResetGlobalState
|
||||||
|
NULL, // pfnClientConnect
|
||||||
|
NULL, // pfnClientDisconnect
|
||||||
|
NULL, // pfnClientKill
|
||||||
|
NULL, // pfnClientPutInServer
|
||||||
|
NULL, // pfnClientCommand
|
||||||
|
NULL, // pfnClientUserInfoChanged
|
||||||
|
NULL, // pfnServerActivate
|
||||||
|
NULL, // pfnServerDeactivate
|
||||||
|
NULL, // pfnPlayerPreThink
|
||||||
|
NULL, // pfnPlayerPostThink
|
||||||
|
NULL, // pfnStartFrame
|
||||||
|
NULL, // pfnParmsNewLevel
|
||||||
|
NULL, // pfnParmsChangeLevel
|
||||||
|
NULL, // pfnGetGameDescription
|
||||||
|
NULL, // pfnPlayerCustomization
|
||||||
|
NULL, // pfnSpectatorConnect
|
||||||
|
NULL, // pfnSpectatorDisconnect
|
||||||
|
NULL, // pfnSpectatorThink
|
||||||
|
NULL, // pfnSys_Error
|
||||||
|
NULL, // pfnPM_Move
|
||||||
|
NULL, // pfnPM_Init
|
||||||
|
NULL, // pfnPM_FindTextureType
|
||||||
|
NULL, // pfnSetupVisibility
|
||||||
|
NULL, // pfnUpdateClientData
|
||||||
|
NULL, // pfnAddToFullPack
|
||||||
|
NULL, // pfnCreateBaseline
|
||||||
|
NULL, // pfnRegisterEncoders
|
||||||
|
NULL, // pfnGetWeaponData
|
||||||
|
NULL, // pfnCmdStart
|
||||||
|
NULL, // pfnCmdEnd
|
||||||
|
NULL, // pfnConnectionlessPacket
|
||||||
|
NULL, // pfnGetHullBounds
|
||||||
|
NULL, // pfnCreateInstancedBaselines
|
||||||
|
NULL, // pfnInconsistentFile
|
||||||
|
NULL, // pfnAllowLagCompensation
|
||||||
|
};
|
||||||
|
|
||||||
|
DLL_FUNCTIONS g_DllFunctionTable_Post =
|
||||||
|
{
|
||||||
|
NULL, // pfnGameInit
|
||||||
|
NULL, // pfnSpawn
|
||||||
|
NULL, // pfnThink
|
||||||
|
NULL, // pfnUse
|
||||||
|
NULL, // pfnTouch
|
||||||
|
NULL, // pfnBlocked
|
||||||
|
NULL, // pfnKeyValue
|
||||||
|
NULL, // pfnSave
|
||||||
|
NULL, // pfnRestore
|
||||||
|
NULL, // pfnSetAbsBox
|
||||||
|
NULL, // pfnSaveWriteFields
|
||||||
|
NULL, // pfnSaveReadFields
|
||||||
|
NULL, // pfnSaveGlobalState
|
||||||
|
NULL, // pfnRestoreGlobalState
|
||||||
|
NULL, // pfnResetGlobalState
|
||||||
|
NULL, // pfnClientConnect
|
||||||
|
NULL, // pfnClientDisconnect
|
||||||
|
NULL, // pfnClientKill
|
||||||
|
NULL, // pfnClientPutInServer
|
||||||
|
NULL, // pfnClientCommand
|
||||||
|
NULL, // pfnClientUserInfoChanged
|
||||||
|
NULL, // pfnServerActivate
|
||||||
|
NULL, // pfnServerDeactivate
|
||||||
|
NULL, // pfnPlayerPreThink
|
||||||
|
NULL, // pfnPlayerPostThink
|
||||||
|
NULL, // pfnStartFrame
|
||||||
|
NULL, // pfnParmsNewLevel
|
||||||
|
NULL, // pfnParmsChangeLevel
|
||||||
|
NULL, // pfnGetGameDescription
|
||||||
|
NULL, // pfnPlayerCustomization
|
||||||
|
NULL, // pfnSpectatorConnect
|
||||||
|
NULL, // pfnSpectatorDisconnect
|
||||||
|
NULL, // pfnSpectatorThink
|
||||||
|
NULL, // pfnSys_Error
|
||||||
|
NULL, // pfnPM_Move
|
||||||
|
NULL, // pfnPM_Init
|
||||||
|
NULL, // pfnPM_FindTextureType
|
||||||
|
NULL, // pfnSetupVisibility
|
||||||
|
NULL, // pfnUpdateClientData
|
||||||
|
NULL, // pfnAddToFullPack
|
||||||
|
NULL, // pfnCreateBaseline
|
||||||
|
NULL, // pfnRegisterEncoders
|
||||||
|
NULL, // pfnGetWeaponData
|
||||||
|
NULL, // pfnCmdStart
|
||||||
|
NULL, // pfnCmdEnd
|
||||||
|
NULL, // pfnConnectionlessPacket
|
||||||
|
NULL, // pfnGetHullBounds
|
||||||
|
NULL, // pfnCreateInstancedBaselines
|
||||||
|
NULL, // pfnInconsistentFile
|
||||||
|
NULL, // pfnAllowLagCompensation
|
||||||
|
};
|
||||||
|
|
||||||
|
NEW_DLL_FUNCTIONS g_NewDllFunctionTable =
|
||||||
|
{
|
||||||
|
NULL, //! pfnOnFreeEntPrivateData() Called right before the object's memory is freed. Calls its destructor.
|
||||||
|
NULL, //! pfnGameShutdown()
|
||||||
|
NULL, //! pfnShouldCollide()
|
||||||
|
NULL, //! pfnCvarValue()
|
||||||
|
NULL, //! pfnCvarValue2()
|
||||||
|
};
|
||||||
|
|
||||||
|
NEW_DLL_FUNCTIONS g_NewDllFunctionTable_Post =
|
||||||
|
{
|
||||||
|
NULL, //! pfnOnFreeEntPrivateData() Called right before the object's memory is freed. Calls its destructor.
|
||||||
|
NULL, //! pfnGameShutdown()
|
||||||
|
NULL, //! pfnShouldCollide()
|
||||||
|
NULL, //! pfnCvarValue()
|
||||||
|
NULL, //! pfnCvarValue2()
|
||||||
|
};
|
||||||
|
|
||||||
|
C_DLLEXPORT int GetEntityAPI2(DLL_FUNCTIONS *pFunctionTable, int *interfaceVersion)
|
||||||
|
{
|
||||||
|
if (!pFunctionTable)
|
||||||
|
{
|
||||||
|
ALERT(at_logged, __FUNCTION__ " called with null pFunctionTable");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (*interfaceVersion != INTERFACE_VERSION)
|
||||||
|
{
|
||||||
|
ALERT(at_logged, __FUNCTION__ " version mismatch; requested=%d ours=%d", *interfaceVersion, INTERFACE_VERSION);
|
||||||
|
*interfaceVersion = INTERFACE_VERSION;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(pFunctionTable, &g_DllFunctionTable, sizeof(DLL_FUNCTIONS));
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
C_DLLEXPORT int GetEntityAPI2_Post(DLL_FUNCTIONS *pFunctionTable, int *interfaceVersion)
|
||||||
|
{
|
||||||
|
if (!pFunctionTable)
|
||||||
|
{
|
||||||
|
ALERT(at_logged, __FUNCTION__ " called with null pFunctionTable");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (*interfaceVersion != INTERFACE_VERSION)
|
||||||
|
{
|
||||||
|
ALERT(at_logged, __FUNCTION__ " version mismatch; requested=%d ours=%d", *interfaceVersion, INTERFACE_VERSION);
|
||||||
|
*interfaceVersion = INTERFACE_VERSION;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(pFunctionTable, &g_DllFunctionTable_Post, sizeof(DLL_FUNCTIONS));
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
C_DLLEXPORT int GetNewDLLFunctions(NEW_DLL_FUNCTIONS *pNewFunctionTable, int *interfaceVersion)
|
||||||
|
{
|
||||||
|
if (!pNewFunctionTable)
|
||||||
|
{
|
||||||
|
ALERT(at_logged, __FUNCTION__ " called with null pNewFunctionTable");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (*interfaceVersion != NEW_DLL_FUNCTIONS_VERSION)
|
||||||
|
{
|
||||||
|
ALERT(at_logged, __FUNCTION__ " version mismatch; requested=%d ours=%d", *interfaceVersion, NEW_DLL_FUNCTIONS_VERSION);
|
||||||
|
*interfaceVersion = NEW_DLL_FUNCTIONS_VERSION;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(pNewFunctionTable, &g_NewDllFunctionTable, sizeof(NEW_DLL_FUNCTIONS));
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
C_DLLEXPORT int GetNewDLLFunctions_Post(NEW_DLL_FUNCTIONS *pNewFunctionTable, int *interfaceVersion)
|
||||||
|
{
|
||||||
|
if (!pNewFunctionTable)
|
||||||
|
{
|
||||||
|
ALERT(at_logged, __FUNCTION__ " called with null pNewFunctionTable");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (*interfaceVersion != NEW_DLL_FUNCTIONS_VERSION)
|
||||||
|
{
|
||||||
|
ALERT(at_logged, __FUNCTION__ " version mismatch; requested=%d ours=%d", *interfaceVersion, NEW_DLL_FUNCTIONS_VERSION);
|
||||||
|
*interfaceVersion = NEW_DLL_FUNCTIONS_VERSION;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(pNewFunctionTable, &g_NewDllFunctionTable_Post, sizeof(NEW_DLL_FUNCTIONS));
|
||||||
|
return TRUE;
|
||||||
|
}
|
380
metamod/extra/example/engine_api.cpp
Normal file
380
metamod/extra/example/engine_api.cpp
Normal file
@ -0,0 +1,380 @@
|
|||||||
|
#include <extdll.h>
|
||||||
|
#include <meta_api.h>
|
||||||
|
|
||||||
|
enginefuncs_t g_EngineFunctionsTable =
|
||||||
|
{
|
||||||
|
NULL, // pfnPrecacheModel()
|
||||||
|
NULL, // pfnPrecacheSound()
|
||||||
|
NULL, // pfnSetModel()
|
||||||
|
NULL, // pfnModelIndex()
|
||||||
|
NULL, // pfnModelFrames()
|
||||||
|
NULL, // pfnSetSize()
|
||||||
|
NULL, // pfnChangeLevel()
|
||||||
|
NULL, // pfnGetSpawnParms()
|
||||||
|
NULL, // pfnSaveSpawnParms()
|
||||||
|
NULL, // pfnVecToYaw()
|
||||||
|
NULL, // pfnVecToAngles()
|
||||||
|
NULL, // pfnMoveToOrigin()
|
||||||
|
NULL, // pfnChangeYaw()
|
||||||
|
NULL, // pfnChangePitch()
|
||||||
|
NULL, // pfnFindEntityByString()
|
||||||
|
NULL, // pfnGetEntityIllum()
|
||||||
|
NULL, // pfnFindEntityInSphere()
|
||||||
|
NULL, // pfnFindClientInPVS()
|
||||||
|
NULL, // pfnEntitiesInPVS()
|
||||||
|
NULL, // pfnMakeVectors()
|
||||||
|
NULL, // pfnAngleVectors()
|
||||||
|
NULL, // pfnCreateEntity()
|
||||||
|
NULL, // pfnRemoveEntity()
|
||||||
|
NULL, // pfnCreateNamedEntity()
|
||||||
|
NULL, // pfnMakeStatic()
|
||||||
|
NULL, // pfnEntIsOnFloor()
|
||||||
|
NULL, // pfnDropToFloor()
|
||||||
|
NULL, // pfnWalkMove()
|
||||||
|
NULL, // pfnSetOrigin()
|
||||||
|
NULL, // pfnEmitSound()
|
||||||
|
NULL, // pfnEmitAmbientSound()
|
||||||
|
NULL, // pfnTraceLine()
|
||||||
|
NULL, // pfnTraceToss()
|
||||||
|
NULL, // pfnTraceMonsterHull()
|
||||||
|
NULL, // pfnTraceHull()
|
||||||
|
NULL, // pfnTraceModel()
|
||||||
|
NULL, // pfnTraceTexture()
|
||||||
|
NULL, // pfnTraceSphere()
|
||||||
|
NULL, // pfnGetAimVector()
|
||||||
|
NULL, // pfnServerCommand()
|
||||||
|
NULL, // pfnServerExecute()
|
||||||
|
NULL, // pfnClientCommand()
|
||||||
|
NULL, // pfnParticleEffect()
|
||||||
|
NULL, // pfnLightStyle()
|
||||||
|
NULL, // pfnDecalIndex()
|
||||||
|
NULL, // pfnPointContents()
|
||||||
|
NULL, // pfnMessageBegin()
|
||||||
|
NULL, // pfnMessageEnd()
|
||||||
|
NULL, // pfnWriteByte()
|
||||||
|
NULL, // pfnWriteChar()
|
||||||
|
NULL, // pfnWriteShort()
|
||||||
|
NULL, // pfnWriteLong()
|
||||||
|
NULL, // pfnWriteAngle()
|
||||||
|
NULL, // pfnWriteCoord()
|
||||||
|
NULL, // pfnWriteString()
|
||||||
|
NULL, // pfnWriteEntity()
|
||||||
|
NULL, // pfnCVarRegister()
|
||||||
|
NULL, // pfnCVarGetFloat()
|
||||||
|
NULL, // pfnCVarGetString()
|
||||||
|
NULL, // pfnCVarSetFloat()
|
||||||
|
NULL, // pfnCVarSetString()
|
||||||
|
NULL, // pfnAlertMessage()
|
||||||
|
NULL, // pfnEngineFprintf()
|
||||||
|
NULL, // pfnPvAllocEntPrivateData()
|
||||||
|
NULL, // pfnPvEntPrivateData()
|
||||||
|
NULL, // pfnFreeEntPrivateData()
|
||||||
|
NULL, // pfnSzFromIndex()
|
||||||
|
NULL, // pfnAllocString()
|
||||||
|
NULL, // pfnGetVarsOfEnt()
|
||||||
|
NULL, // pfnPEntityOfEntOffset()
|
||||||
|
NULL, // pfnEntOffsetOfPEntity()
|
||||||
|
NULL, // pfnIndexOfEdict()
|
||||||
|
NULL, // pfnPEntityOfEntIndex()
|
||||||
|
NULL, // pfnFindEntityByVars()
|
||||||
|
NULL, // pfnGetModelPtr()
|
||||||
|
NULL, // pfnRegUserMsg()
|
||||||
|
NULL, // pfnAnimationAutomove()
|
||||||
|
NULL, // pfnGetBonePosition()
|
||||||
|
NULL, // pfnFunctionFromName()
|
||||||
|
NULL, // pfnNameForFunction()
|
||||||
|
NULL, // pfnClientPrintf()
|
||||||
|
NULL, // pfnServerPrint()
|
||||||
|
NULL, // pfnCmd_Args()
|
||||||
|
NULL, // pfnCmd_Argv()
|
||||||
|
NULL, // pfnCmd_Argc()
|
||||||
|
NULL, // pfnGetAttachment()
|
||||||
|
NULL, // pfnCRC32_Init()
|
||||||
|
NULL, // pfnCRC32_ProcessBuffer()
|
||||||
|
NULL, // pfnCRC32_ProcessByte()
|
||||||
|
NULL, // pfnCRC32_Final()
|
||||||
|
NULL, // pfnRandomLong()
|
||||||
|
NULL, // pfnRandomFloat()
|
||||||
|
NULL, // pfnSetView()
|
||||||
|
NULL, // pfnTime()
|
||||||
|
NULL, // pfnCrosshairAngle()
|
||||||
|
NULL, // pfnLoadFileForMe()
|
||||||
|
NULL, // pfnFreeFile()
|
||||||
|
NULL, // pfnEndSection()
|
||||||
|
NULL, // pfnCompareFileTime()
|
||||||
|
NULL, // pfnGetGameDir()
|
||||||
|
NULL, // pfnCvar_RegisterVariable()
|
||||||
|
NULL, // pfnFadeClientVolume()
|
||||||
|
NULL, // pfnSetClientMaxspeed()
|
||||||
|
NULL, // pfnCreateFakeClient()
|
||||||
|
NULL, // pfnRunPlayerMove()
|
||||||
|
NULL, // pfnNumberOfEntities()
|
||||||
|
NULL, // pfnGetInfoKeyBuffer()
|
||||||
|
NULL, // pfnInfoKeyValue()
|
||||||
|
NULL, // pfnSetKeyValue()
|
||||||
|
NULL, // pfnSetClientKeyValue()
|
||||||
|
NULL, // pfnIsMapValid()
|
||||||
|
NULL, // pfnStaticDecal()
|
||||||
|
NULL, // pfnPrecacheGeneric()
|
||||||
|
NULL, // pfnGetPlayerUserId()
|
||||||
|
NULL, // pfnBuildSoundMsg()
|
||||||
|
NULL, // pfnIsDedicatedServer()
|
||||||
|
NULL, // pfnCVarGetPointer()
|
||||||
|
NULL, // pfnGetPlayerWONId()
|
||||||
|
NULL, // pfnInfo_RemoveKey()
|
||||||
|
NULL, // pfnGetPhysicsKeyValue()
|
||||||
|
NULL, // pfnSetPhysicsKeyValue()
|
||||||
|
NULL, // pfnGetPhysicsInfoString()
|
||||||
|
NULL, // pfnPrecacheEvent()
|
||||||
|
NULL, // pfnPlaybackEvent()
|
||||||
|
NULL, // pfnSetFatPVS()
|
||||||
|
NULL, // pfnSetFatPAS()
|
||||||
|
NULL, // pfnCheckVisibility()
|
||||||
|
NULL, // pfnDeltaSetField()
|
||||||
|
NULL, // pfnDeltaUnsetField()
|
||||||
|
NULL, // pfnDeltaAddEncoder()
|
||||||
|
NULL, // pfnGetCurrentPlayer()
|
||||||
|
NULL, // pfnCanSkipPlayer()
|
||||||
|
NULL, // pfnDeltaFindField()
|
||||||
|
NULL, // pfnDeltaSetFieldByIndex()
|
||||||
|
NULL, // pfnDeltaUnsetFieldByIndex()
|
||||||
|
NULL, // pfnSetGroupMask()
|
||||||
|
NULL, // pfnCreateInstancedBaseline()
|
||||||
|
NULL, // pfnCvar_DirectSet()
|
||||||
|
NULL, // pfnForceUnmodified()
|
||||||
|
NULL, // pfnGetPlayerStats()
|
||||||
|
NULL, // pfnAddServerCommand()
|
||||||
|
|
||||||
|
// Added in SDK 2.2:
|
||||||
|
NULL, // pfnVoice_GetClientListening()
|
||||||
|
NULL, // pfnVoice_SetClientListening()
|
||||||
|
|
||||||
|
// Added for HL 1109 (no SDK update):
|
||||||
|
NULL, // pfnGetPlayerAuthId()
|
||||||
|
|
||||||
|
// Added 2003/11/10 (no SDK update):
|
||||||
|
NULL, // pfnSequenceGet()
|
||||||
|
NULL, // pfnSequencePickSentence()
|
||||||
|
NULL, // pfnGetFileSize()
|
||||||
|
NULL, // pfnGetApproxWavePlayLen()
|
||||||
|
NULL, // pfnIsCareerMatch()
|
||||||
|
NULL, // pfnGetLocalizedStringLength()
|
||||||
|
NULL, // pfnRegisterTutorMessageShown()
|
||||||
|
NULL, // pfnGetTimesTutorMessageShown()
|
||||||
|
NULL, // pfnProcessTutorMessageDecayBuffer()
|
||||||
|
NULL, // pfnConstructTutorMessageDecayBuffer()
|
||||||
|
NULL, // pfnResetTutorMessageDecayData()
|
||||||
|
|
||||||
|
// Added Added 2005-08-11 (no SDK update)
|
||||||
|
NULL, // pfnQueryClientCvarValue()
|
||||||
|
// Added Added 2005-11-22 (no SDK update)
|
||||||
|
NULL, // pfnQueryClientCvarValue2()
|
||||||
|
// Added 2009-06-17 (no SDK update)
|
||||||
|
// NULL, // pfnEngCheckParm() // s1lent: comment out this, for compatibility with older versions metamod
|
||||||
|
};
|
||||||
|
|
||||||
|
enginefuncs_t g_EngineFunctionsTable_Post =
|
||||||
|
{
|
||||||
|
NULL, // pfnPrecacheModel()
|
||||||
|
NULL, // pfnPrecacheSound()
|
||||||
|
NULL, // pfnSetModel()
|
||||||
|
NULL, // pfnModelIndex()
|
||||||
|
NULL, // pfnModelFrames()
|
||||||
|
NULL, // pfnSetSize()
|
||||||
|
NULL, // pfnChangeLevel()
|
||||||
|
NULL, // pfnGetSpawnParms()
|
||||||
|
NULL, // pfnSaveSpawnParms()
|
||||||
|
NULL, // pfnVecToYaw()
|
||||||
|
NULL, // pfnVecToAngles()
|
||||||
|
NULL, // pfnMoveToOrigin()
|
||||||
|
NULL, // pfnChangeYaw()
|
||||||
|
NULL, // pfnChangePitch()
|
||||||
|
NULL, // pfnFindEntityByString()
|
||||||
|
NULL, // pfnGetEntityIllum()
|
||||||
|
NULL, // pfnFindEntityInSphere()
|
||||||
|
NULL, // pfnFindClientInPVS()
|
||||||
|
NULL, // pfnEntitiesInPVS()
|
||||||
|
NULL, // pfnMakeVectors()
|
||||||
|
NULL, // pfnAngleVectors()
|
||||||
|
NULL, // pfnCreateEntity()
|
||||||
|
NULL, // pfnRemoveEntity()
|
||||||
|
NULL, // pfnCreateNamedEntity()
|
||||||
|
NULL, // pfnMakeStatic()
|
||||||
|
NULL, // pfnEntIsOnFloor()
|
||||||
|
NULL, // pfnDropToFloor()
|
||||||
|
NULL, // pfnWalkMove()
|
||||||
|
NULL, // pfnSetOrigin()
|
||||||
|
NULL, // pfnEmitSound()
|
||||||
|
NULL, // pfnEmitAmbientSound()
|
||||||
|
NULL, // pfnTraceLine()
|
||||||
|
NULL, // pfnTraceToss()
|
||||||
|
NULL, // pfnTraceMonsterHull()
|
||||||
|
NULL, // pfnTraceHull()
|
||||||
|
NULL, // pfnTraceModel()
|
||||||
|
NULL, // pfnTraceTexture()
|
||||||
|
NULL, // pfnTraceSphere()
|
||||||
|
NULL, // pfnGetAimVector()
|
||||||
|
NULL, // pfnServerCommand()
|
||||||
|
NULL, // pfnServerExecute()
|
||||||
|
NULL, // pfnClientCommand()
|
||||||
|
NULL, // pfnParticleEffect()
|
||||||
|
NULL, // pfnLightStyle()
|
||||||
|
NULL, // pfnDecalIndex()
|
||||||
|
NULL, // pfnPointContents()
|
||||||
|
NULL, // pfnMessageBegin()
|
||||||
|
NULL, // pfnMessageEnd()
|
||||||
|
NULL, // pfnWriteByte()
|
||||||
|
NULL, // pfnWriteChar()
|
||||||
|
NULL, // pfnWriteShort()
|
||||||
|
NULL, // pfnWriteLong()
|
||||||
|
NULL, // pfnWriteAngle()
|
||||||
|
NULL, // pfnWriteCoord()
|
||||||
|
NULL, // pfnWriteString()
|
||||||
|
NULL, // pfnWriteEntity()
|
||||||
|
NULL, // pfnCVarRegister()
|
||||||
|
NULL, // pfnCVarGetFloat()
|
||||||
|
NULL, // pfnCVarGetString()
|
||||||
|
NULL, // pfnCVarSetFloat()
|
||||||
|
NULL, // pfnCVarSetString()
|
||||||
|
NULL, // pfnAlertMessage()
|
||||||
|
NULL, // pfnEngineFprintf()
|
||||||
|
NULL, // pfnPvAllocEntPrivateData()
|
||||||
|
NULL, // pfnPvEntPrivateData()
|
||||||
|
NULL, // pfnFreeEntPrivateData()
|
||||||
|
NULL, // pfnSzFromIndex()
|
||||||
|
NULL, // pfnAllocString()
|
||||||
|
NULL, // pfnGetVarsOfEnt()
|
||||||
|
NULL, // pfnPEntityOfEntOffset()
|
||||||
|
NULL, // pfnEntOffsetOfPEntity()
|
||||||
|
NULL, // pfnIndexOfEdict()
|
||||||
|
NULL, // pfnPEntityOfEntIndex()
|
||||||
|
NULL, // pfnFindEntityByVars()
|
||||||
|
NULL, // pfnGetModelPtr()
|
||||||
|
NULL, // pfnRegUserMsg()
|
||||||
|
NULL, // pfnAnimationAutomove()
|
||||||
|
NULL, // pfnGetBonePosition()
|
||||||
|
NULL, // pfnFunctionFromName()
|
||||||
|
NULL, // pfnNameForFunction()
|
||||||
|
NULL, // pfnClientPrintf()
|
||||||
|
NULL, // pfnServerPrint()
|
||||||
|
NULL, // pfnCmd_Args()
|
||||||
|
NULL, // pfnCmd_Argv()
|
||||||
|
NULL, // pfnCmd_Argc()
|
||||||
|
NULL, // pfnGetAttachment()
|
||||||
|
NULL, // pfnCRC32_Init()
|
||||||
|
NULL, // pfnCRC32_ProcessBuffer()
|
||||||
|
NULL, // pfnCRC32_ProcessByte()
|
||||||
|
NULL, // pfnCRC32_Final()
|
||||||
|
NULL, // pfnRandomLong()
|
||||||
|
NULL, // pfnRandomFloat()
|
||||||
|
NULL, // pfnSetView()
|
||||||
|
NULL, // pfnTime()
|
||||||
|
NULL, // pfnCrosshairAngle()
|
||||||
|
NULL, // pfnLoadFileForMe()
|
||||||
|
NULL, // pfnFreeFile()
|
||||||
|
NULL, // pfnEndSection()
|
||||||
|
NULL, // pfnCompareFileTime()
|
||||||
|
NULL, // pfnGetGameDir()
|
||||||
|
NULL, // pfnCvar_RegisterVariable()
|
||||||
|
NULL, // pfnFadeClientVolume()
|
||||||
|
NULL, // pfnSetClientMaxspeed()
|
||||||
|
NULL, // pfnCreateFakeClient()
|
||||||
|
NULL, // pfnRunPlayerMove()
|
||||||
|
NULL, // pfnNumberOfEntities()
|
||||||
|
NULL, // pfnGetInfoKeyBuffer()
|
||||||
|
NULL, // pfnInfoKeyValue()
|
||||||
|
NULL, // pfnSetKeyValue()
|
||||||
|
NULL, // pfnSetClientKeyValue()
|
||||||
|
NULL, // pfnIsMapValid()
|
||||||
|
NULL, // pfnStaticDecal()
|
||||||
|
NULL, // pfnPrecacheGeneric()
|
||||||
|
NULL, // pfnGetPlayerUserId()
|
||||||
|
NULL, // pfnBuildSoundMsg()
|
||||||
|
NULL, // pfnIsDedicatedServer()
|
||||||
|
NULL, // pfnCVarGetPointer()
|
||||||
|
NULL, // pfnGetPlayerWONId()
|
||||||
|
NULL, // pfnInfo_RemoveKey()
|
||||||
|
NULL, // pfnGetPhysicsKeyValue()
|
||||||
|
NULL, // pfnSetPhysicsKeyValue()
|
||||||
|
NULL, // pfnGetPhysicsInfoString()
|
||||||
|
NULL, // pfnPrecacheEvent()
|
||||||
|
NULL, // pfnPlaybackEvent()
|
||||||
|
NULL, // pfnSetFatPVS()
|
||||||
|
NULL, // pfnSetFatPAS()
|
||||||
|
NULL, // pfnCheckVisibility()
|
||||||
|
NULL, // pfnDeltaSetField()
|
||||||
|
NULL, // pfnDeltaUnsetField()
|
||||||
|
NULL, // pfnDeltaAddEncoder()
|
||||||
|
NULL, // pfnGetCurrentPlayer()
|
||||||
|
NULL, // pfnCanSkipPlayer()
|
||||||
|
NULL, // pfnDeltaFindField()
|
||||||
|
NULL, // pfnDeltaSetFieldByIndex()
|
||||||
|
NULL, // pfnDeltaUnsetFieldByIndex()
|
||||||
|
NULL, // pfnSetGroupMask()
|
||||||
|
NULL, // pfnCreateInstancedBaseline()
|
||||||
|
NULL, // pfnCvar_DirectSet()
|
||||||
|
NULL, // pfnForceUnmodified()
|
||||||
|
NULL, // pfnGetPlayerStats()
|
||||||
|
NULL, // pfnAddServerCommand()
|
||||||
|
|
||||||
|
// Added in SDK 2.2:
|
||||||
|
NULL, // pfnVoice_GetClientListening()
|
||||||
|
NULL, // pfnVoice_SetClientListening()
|
||||||
|
|
||||||
|
// Added for HL 1109 (no SDK update):
|
||||||
|
NULL, // pfnGetPlayerAuthId()
|
||||||
|
|
||||||
|
// Added 2003/11/10 (no SDK update):
|
||||||
|
NULL, // pfnSequenceGet()
|
||||||
|
NULL, // pfnSequencePickSentence()
|
||||||
|
NULL, // pfnGetFileSize()
|
||||||
|
NULL, // pfnGetApproxWavePlayLen()
|
||||||
|
NULL, // pfnIsCareerMatch()
|
||||||
|
NULL, // pfnGetLocalizedStringLength()
|
||||||
|
NULL, // pfnRegisterTutorMessageShown()
|
||||||
|
NULL, // pfnGetTimesTutorMessageShown()
|
||||||
|
NULL, // pfnProcessTutorMessageDecayBuffer()
|
||||||
|
NULL, // pfnConstructTutorMessageDecayBuffer()
|
||||||
|
NULL, // pfnResetTutorMessageDecayData()
|
||||||
|
|
||||||
|
// Added Added 2005-08-11 (no SDK update)
|
||||||
|
NULL, // pfnQueryClientCvarValue()
|
||||||
|
// Added Added 2005-11-22 (no SDK update)
|
||||||
|
NULL, // pfnQueryClientCvarValue2()
|
||||||
|
// Added 2009-06-17 (no SDK update)
|
||||||
|
// NULL, // pfnEngCheckParm() // s1lent: comment out this, for compatibility with older versions metamod
|
||||||
|
};
|
||||||
|
|
||||||
|
C_DLLEXPORT int GetEngineFunctions(enginefuncs_t *pengfuncsFromEngine, int *interfaceVersion)
|
||||||
|
{
|
||||||
|
if (!pengfuncsFromEngine) {
|
||||||
|
ALERT(at_logged, __FUNCTION__ " called with null pengfuncsFromEngine");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (*interfaceVersion != ENGINE_INTERFACE_VERSION) {
|
||||||
|
ALERT(at_logged, __FUNCTION__ " version mismatch; requested=%d ours=%d", *interfaceVersion, ENGINE_INTERFACE_VERSION);
|
||||||
|
*interfaceVersion = ENGINE_INTERFACE_VERSION;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(pengfuncsFromEngine, &g_EngineFunctionsTable, sizeof(enginefuncs_t));
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
C_DLLEXPORT int GetEngineFunctions_Post(enginefuncs_t *pengfuncsFromEngine, int *interfaceVersion)
|
||||||
|
{
|
||||||
|
if (!pengfuncsFromEngine)
|
||||||
|
{
|
||||||
|
ALERT(at_logged, __FUNCTION__ " called with null pengfuncsFromEngine");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (*interfaceVersion != ENGINE_INTERFACE_VERSION)
|
||||||
|
{
|
||||||
|
ALERT(at_logged, __FUNCTION__ " version mismatch; requested=%d ours=%d", *interfaceVersion, ENGINE_INTERFACE_VERSION);
|
||||||
|
*interfaceVersion = ENGINE_INTERFACE_VERSION;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(pengfuncsFromEngine, &g_EngineFunctionsTable_Post, sizeof(enginefuncs_t));
|
||||||
|
return TRUE;
|
||||||
|
}
|
71
metamod/extra/example/ex_rehlds_api.cpp
Normal file
71
metamod/extra/example/ex_rehlds_api.cpp
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
#include <extdll.h>
|
||||||
|
#include <meta_api.h>
|
||||||
|
#include "ex_rehlds_api.h"
|
||||||
|
|
||||||
|
IRehldsApi* g_RehldsApi;
|
||||||
|
const RehldsFuncs_t* g_RehldsFuncs;
|
||||||
|
IRehldsHookchains* g_RehldsHookchains;
|
||||||
|
IRehldsServerStatic* g_RehldsSvs;
|
||||||
|
|
||||||
|
bool rehlds_api_try_init(CSysModule* engineModule, char* failureReason)
|
||||||
|
{
|
||||||
|
if (!engineModule) {
|
||||||
|
gpMetaUtilFuncs->pfnLogConsole(PLID, "Failed to locate engine module\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
CreateInterfaceFn ifaceFactory = Sys_GetFactory(engineModule);
|
||||||
|
if (!ifaceFactory) {
|
||||||
|
sprintf(failureReason, "Failed to locate interface factory in engine module\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int retCode = 0;
|
||||||
|
g_RehldsApi = (IRehldsApi*)ifaceFactory(VREHLDS_HLDS_API_VERSION, &retCode);
|
||||||
|
if (!g_RehldsApi) {
|
||||||
|
sprintf(failureReason, "Failed to locate retrieve rehlds api interface from engine module, return code is %d\n", retCode);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int majorVersion = g_RehldsApi->GetMajorVersion();
|
||||||
|
int minorVersion = g_RehldsApi->GetMinorVersion();
|
||||||
|
|
||||||
|
if (majorVersion != REHLDS_API_VERSION_MAJOR) {
|
||||||
|
sprintf(failureReason, "REHLDS Api major version mismatch; expected %d, real %d\n", REHLDS_API_VERSION_MAJOR, majorVersion);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (minorVersion < REHLDS_API_VERSION_MINOR) {
|
||||||
|
sprintf(failureReason, "REHLDS Api minor version mismatch; expected at least %d, real %d\n", REHLDS_API_VERSION_MINOR, minorVersion);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_RehldsFuncs = g_RehldsApi->GetFuncs();
|
||||||
|
g_RehldsHookchains = g_RehldsApi->GetHookchains();
|
||||||
|
g_RehldsSvs = g_RehldsApi->GetServerStatic();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool meta_init_rehlds_api() {
|
||||||
|
char failReason[2048];
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
CSysModule* engineModule = Sys_LoadModule("swds.dll");
|
||||||
|
if (!rehlds_api_try_init(engineModule, failReason)) {
|
||||||
|
engineModule = Sys_LoadModule("filesystem_stdio.dll");
|
||||||
|
if (!rehlds_api_try_init(engineModule, failReason)) {
|
||||||
|
gpMetaUtilFuncs->pfnLogConsole(PLID, "%s", failReason);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
CSysModule* engineModule = Sys_LoadModule("engine_i486.so");
|
||||||
|
if (!rehlds_api_try_init(engineModule, failReason)) {
|
||||||
|
gpMetaUtilFuncs->pfnLogConsole(PLID, "%s", failReason);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
10
metamod/extra/example/ex_rehlds_api.h
Normal file
10
metamod/extra/example/ex_rehlds_api.h
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <rehlds_api.h>
|
||||||
|
|
||||||
|
extern IRehldsApi* g_RehldsApi;
|
||||||
|
extern const RehldsFuncs_t* g_RehldsFuncs;
|
||||||
|
extern IRehldsHookchains* g_RehldsHookchains;
|
||||||
|
extern IRehldsServerStatic* g_RehldsSvs;
|
||||||
|
|
||||||
|
extern bool ex_init_rehlds_api();
|
15
metamod/extra/example/h_export.cpp
Normal file
15
metamod/extra/example/h_export.cpp
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#include <string.h>
|
||||||
|
#include <extdll.h>
|
||||||
|
#include <meta_api.h>
|
||||||
|
|
||||||
|
enginefuncs_t g_engfuncs;
|
||||||
|
globalvars_t *gpGlobals;
|
||||||
|
|
||||||
|
// Receive engine function table from engine.
|
||||||
|
// This appears to be the _first_ DLL routine called by the engine, so we
|
||||||
|
// do some setup operations here.
|
||||||
|
C_DLLEXPORT void WINAPI GiveFnptrsToDll(enginefuncs_t *pengfuncsFromEngine, globalvars_t *pGlobals)
|
||||||
|
{
|
||||||
|
memcpy(&g_engfuncs, pengfuncsFromEngine, sizeof(enginefuncs_t));
|
||||||
|
gpGlobals = pGlobals;
|
||||||
|
}
|
165
metamod/extra/example/include/hlsdk/common/BaseSystemModule.cpp
Normal file
165
metamod/extra/example/include/hlsdk/common/BaseSystemModule.cpp
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 2 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "precompiled.h"
|
||||||
|
|
||||||
|
|
||||||
|
BaseSystemModule::BaseSystemModule()
|
||||||
|
{
|
||||||
|
m_System = nullptr;
|
||||||
|
m_Serial = 0;
|
||||||
|
m_SystemTime = 0;
|
||||||
|
m_State = MODULE_UNDEFINED;
|
||||||
|
|
||||||
|
memset(m_Name, 0, sizeof(m_Name));
|
||||||
|
}
|
||||||
|
|
||||||
|
char *BaseSystemModule::GetName()
|
||||||
|
{
|
||||||
|
return m_Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *BaseSystemModule::GetType()
|
||||||
|
{
|
||||||
|
return "GenericModule";
|
||||||
|
}
|
||||||
|
|
||||||
|
char *BaseSystemModule::GetStatusLine()
|
||||||
|
{
|
||||||
|
return "No status available.\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
void BaseSystemModule::ExecuteCommand(int commandID, char *commandLine)
|
||||||
|
{
|
||||||
|
m_System->DPrintf("WARNING! Undeclared ExecuteCommand().\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
extern int COM_BuildNumber();
|
||||||
|
|
||||||
|
int BaseSystemModule::GetVersion()
|
||||||
|
{
|
||||||
|
return COM_BuildNumber();
|
||||||
|
}
|
||||||
|
|
||||||
|
int BaseSystemModule::GetSerial()
|
||||||
|
{
|
||||||
|
return m_Serial;
|
||||||
|
}
|
||||||
|
|
||||||
|
IBaseSystem *BaseSystemModule::GetSystem()
|
||||||
|
{
|
||||||
|
return m_System;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool BaseSystemModule::Init(IBaseSystem *system, int serial, char *name)
|
||||||
|
{
|
||||||
|
if (!system)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
m_State = MODULE_INITIALIZING;
|
||||||
|
m_System = system;
|
||||||
|
m_Serial = serial;
|
||||||
|
m_SystemTime = 0;
|
||||||
|
|
||||||
|
if (name) {
|
||||||
|
strcopy(m_Name, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BaseSystemModule::RunFrame(double time)
|
||||||
|
{
|
||||||
|
m_SystemTime = time;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BaseSystemModule::ShutDown()
|
||||||
|
{
|
||||||
|
if (m_State == MODULE_DISCONNECTED)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_Listener.Clear();
|
||||||
|
m_State = MODULE_DISCONNECTED;
|
||||||
|
|
||||||
|
if (!m_System->RemoveModule(this))
|
||||||
|
{
|
||||||
|
m_System->DPrintf("ERROR! BaseSystemModule::ShutDown: faild to remove module %s.\n", m_Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BaseSystemModule::RegisterListener(ISystemModule *module)
|
||||||
|
{
|
||||||
|
ISystemModule *listener = (ISystemModule *)m_Listener.GetFirst();
|
||||||
|
while (listener)
|
||||||
|
{
|
||||||
|
if (listener->GetSerial() == module->GetSerial())
|
||||||
|
{
|
||||||
|
m_System->DPrintf("WARNING! BaseSystemModule::RegisterListener: module %s already added.\n", module->GetName());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
listener = (ISystemModule *)m_Listener.GetNext();
|
||||||
|
}
|
||||||
|
|
||||||
|
m_Listener.Add(module);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BaseSystemModule::RemoveListener(ISystemModule *module)
|
||||||
|
{
|
||||||
|
ISystemModule *listener = (ISystemModule *)m_Listener.GetFirst();
|
||||||
|
while (listener)
|
||||||
|
{
|
||||||
|
if (listener->GetSerial() == module->GetSerial())
|
||||||
|
{
|
||||||
|
m_Listener.Remove(module);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
listener = (ISystemModule *)m_Listener.GetNext();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BaseSystemModule::FireSignal(unsigned int signal, void *data)
|
||||||
|
{
|
||||||
|
ISystemModule *listener = (ISystemModule *)m_Listener.GetFirst();
|
||||||
|
while (listener)
|
||||||
|
{
|
||||||
|
listener->ReceiveSignal(this, signal, data);
|
||||||
|
listener = (ISystemModule *)m_Listener.GetNext();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BaseSystemModule::ReceiveSignal(ISystemModule *module, unsigned int signal, void *data)
|
||||||
|
{
|
||||||
|
m_System->DPrintf("WARNING! Unhandled signal (%i) from module %s.\n", signal, module->GetName());
|
||||||
|
}
|
||||||
|
|
||||||
|
int BaseSystemModule::GetState()
|
||||||
|
{
|
||||||
|
return m_State;
|
||||||
|
}
|
@ -0,0 +1,75 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 2 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ObjectList.h"
|
||||||
|
#include "IBaseSystem.h"
|
||||||
|
|
||||||
|
// C4250 - 'class1' : inherits 'BaseSystemModule::member' via dominance
|
||||||
|
#pragma warning(disable:4250)
|
||||||
|
|
||||||
|
class BaseSystemModule: virtual public ISystemModule {
|
||||||
|
public:
|
||||||
|
BaseSystemModule();
|
||||||
|
virtual ~BaseSystemModule() {}
|
||||||
|
|
||||||
|
virtual bool Init(IBaseSystem *system, int serial, char *name);
|
||||||
|
virtual void RunFrame(double time);
|
||||||
|
virtual void ReceiveSignal(ISystemModule *module, unsigned int signal, void *data);
|
||||||
|
virtual void ExecuteCommand(int commandID, char *commandLine);
|
||||||
|
virtual void RegisterListener(ISystemModule *module);
|
||||||
|
virtual void RemoveListener(ISystemModule *module);
|
||||||
|
virtual IBaseSystem *GetSystem();
|
||||||
|
virtual int GetSerial();
|
||||||
|
virtual char *GetStatusLine();
|
||||||
|
virtual char *GetType();
|
||||||
|
virtual char *GetName();
|
||||||
|
|
||||||
|
enum ModuleState {
|
||||||
|
MODULE_UNDEFINED = 0,
|
||||||
|
MODULE_INITIALIZING,
|
||||||
|
MODULE_CONNECTING,
|
||||||
|
MODULE_RUNNING,
|
||||||
|
MODULE_DISCONNECTED
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual int GetState();
|
||||||
|
virtual int GetVersion();
|
||||||
|
virtual void ShutDown();
|
||||||
|
virtual char *GetBaseDir() { return ""; }
|
||||||
|
void FireSignal(unsigned int signal, void *data = nullptr);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
IBaseSystem *m_System;
|
||||||
|
ObjectList m_Listener;
|
||||||
|
char m_Name[255];
|
||||||
|
unsigned int m_State;
|
||||||
|
unsigned int m_Serial;
|
||||||
|
double m_SystemTime;
|
||||||
|
};
|
54
metamod/extra/example/include/hlsdk/common/IAdminServer.h
Normal file
54
metamod/extra/example/include/hlsdk/common/IAdminServer.h
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 2 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "interface.h"
|
||||||
|
|
||||||
|
// handle to a game window
|
||||||
|
typedef unsigned int ManageServerUIHandle_t;
|
||||||
|
class IManageServer;
|
||||||
|
|
||||||
|
// Purpose: Interface to server administration functions
|
||||||
|
class IAdminServer: public IBaseInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// opens a manage server dialog for a local server
|
||||||
|
virtual ManageServerUIHandle_t OpenManageServerDialog(const char *serverName, const char *gameDir) = 0;
|
||||||
|
|
||||||
|
// opens a manage server dialog to a remote server
|
||||||
|
virtual ManageServerUIHandle_t OpenManageServerDialog(unsigned int gameIP, unsigned int gamePort, const char *password) = 0;
|
||||||
|
|
||||||
|
// forces the game info dialog closed
|
||||||
|
virtual void CloseManageServerDialog(ManageServerUIHandle_t gameDialog) = 0;
|
||||||
|
|
||||||
|
// Gets a handle to the interface
|
||||||
|
virtual IManageServer *GetManageServerInterface(ManageServerUIHandle_t handle) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define ADMINSERVER_INTERFACE_VERSION "AdminServer002"
|
91
metamod/extra/example/include/hlsdk/common/IBaseSystem.h
Normal file
91
metamod/extra/example/include/hlsdk/common/IBaseSystem.h
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 2 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
#define LIBRARY_PREFIX "dll"
|
||||||
|
#elif defined(OSX)
|
||||||
|
#define LIBRARY_PREFIX "dylib"
|
||||||
|
#else
|
||||||
|
#define LIBRARY_PREFIX "so"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "ISystemModule.h"
|
||||||
|
#include "IVGuiModule.h"
|
||||||
|
|
||||||
|
class Panel;
|
||||||
|
class ObjectList;
|
||||||
|
class IFileSystem;
|
||||||
|
|
||||||
|
class IBaseSystem: virtual public ISystemModule {
|
||||||
|
public:
|
||||||
|
virtual ~IBaseSystem() {}
|
||||||
|
|
||||||
|
virtual double GetTime() = 0;
|
||||||
|
virtual unsigned int GetTick() = 0;
|
||||||
|
virtual void SetFPS(float fps) = 0;
|
||||||
|
|
||||||
|
virtual void Printf(char *fmt, ...) = 0;
|
||||||
|
virtual void DPrintf(char *fmt, ...) = 0;
|
||||||
|
|
||||||
|
virtual void RedirectOutput(char *buffer = nullptr, int maxSize = 0) = 0;
|
||||||
|
|
||||||
|
virtual IFileSystem *GetFileSystem() = 0;
|
||||||
|
virtual unsigned char *LoadFile(const char *name, int *length = nullptr) = 0;
|
||||||
|
virtual void FreeFile(unsigned char *fileHandle) = 0;
|
||||||
|
|
||||||
|
virtual void SetTitle(char *text) = 0;
|
||||||
|
virtual void SetStatusLine(char *text) = 0;
|
||||||
|
|
||||||
|
virtual void ShowConsole(bool visible) = 0;
|
||||||
|
virtual void LogConsole(char *filename) = 0;
|
||||||
|
|
||||||
|
virtual bool InitVGUI(IVGuiModule *module) = 0;
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
virtual Panel *GetPanel() = 0;
|
||||||
|
#endif // _WIN32
|
||||||
|
|
||||||
|
virtual bool RegisterCommand(char *name, ISystemModule *module, int commandID) = 0;
|
||||||
|
virtual void GetCommandMatches(char *string, ObjectList *pMatchList) = 0;
|
||||||
|
virtual void ExecuteString(char *commands) = 0;
|
||||||
|
virtual void ExecuteFile(char *filename) = 0;
|
||||||
|
virtual void Errorf(char *fmt, ...) = 0;
|
||||||
|
|
||||||
|
virtual char *CheckParam(char *param) = 0;
|
||||||
|
|
||||||
|
virtual bool AddModule(ISystemModule *module, char *name) = 0;
|
||||||
|
virtual ISystemModule *GetModule(char *interfacename, char *library, char *instancename = nullptr) = 0;
|
||||||
|
virtual bool RemoveModule(ISystemModule *module) = 0;
|
||||||
|
|
||||||
|
virtual void Stop() = 0;
|
||||||
|
virtual char *GetBaseDir() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define BASESYSTEM_INTERFACE_VERSION "basesystem002"
|
93
metamod/extra/example/include/hlsdk/common/IDemoPlayer.h
Normal file
93
metamod/extra/example/include/hlsdk/common/IDemoPlayer.h
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 2 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ref_params.h"
|
||||||
|
|
||||||
|
class IWorld;
|
||||||
|
class IProxy;
|
||||||
|
class DirectorCmd;
|
||||||
|
class IBaseSystem;
|
||||||
|
class ISystemModule;
|
||||||
|
class IObjectContainer;
|
||||||
|
|
||||||
|
class IDemoPlayer {
|
||||||
|
public:
|
||||||
|
virtual ~IDemoPlayer() {}
|
||||||
|
|
||||||
|
virtual bool Init(IBaseSystem *system, int serial, char *name) = 0;
|
||||||
|
virtual void RunFrame(double time) = 0;
|
||||||
|
virtual void ReceiveSignal(ISystemModule *module, unsigned int signal, void *data) = 0;
|
||||||
|
virtual void ExecuteCommand(int commandID, char *commandLine) = 0;
|
||||||
|
virtual void RegisterListener(ISystemModule *module) = 0;
|
||||||
|
virtual void RemoveListener(ISystemModule *module) = 0;
|
||||||
|
virtual IBaseSystem *GetSystem() = 0;
|
||||||
|
virtual int GetSerial() = 0;
|
||||||
|
virtual char *GetStatusLine() = 0;
|
||||||
|
virtual char *GetType() = 0;
|
||||||
|
virtual char *GetName() = 0;
|
||||||
|
virtual int GetState() = 0;
|
||||||
|
virtual int GetVersion() = 0;
|
||||||
|
virtual void ShutDown() = 0;
|
||||||
|
|
||||||
|
virtual void NewGame(IWorld *world, IProxy *proxy = nullptr) = 0;
|
||||||
|
virtual char *GetModName() = 0;
|
||||||
|
virtual void WriteCommands(BitBuffer *stream, float startTime, float endTime) = 0;
|
||||||
|
virtual int AddCommand(DirectorCmd *cmd) = 0;
|
||||||
|
virtual bool RemoveCommand(int index) = 0;
|
||||||
|
virtual DirectorCmd *GetLastCommand() = 0;
|
||||||
|
virtual IObjectContainer *GetCommands() = 0;
|
||||||
|
virtual void SetWorldTime(double time, bool relative) = 0;
|
||||||
|
virtual void SetTimeScale(float scale) = 0;
|
||||||
|
virtual void SetPaused(bool state) = 0;
|
||||||
|
virtual void SetEditMode(bool state) = 0;
|
||||||
|
virtual void SetMasterMode(bool state) = 0;
|
||||||
|
virtual bool IsPaused() = 0;
|
||||||
|
virtual bool IsLoading() = 0;
|
||||||
|
virtual bool IsActive() = 0;
|
||||||
|
virtual bool IsEditMode() = 0;
|
||||||
|
virtual bool IsMasterMode() = 0;
|
||||||
|
virtual void RemoveFrames(double starttime, double endtime) = 0;
|
||||||
|
virtual void ExecuteDirectorCmd(DirectorCmd *cmd) = 0;
|
||||||
|
virtual double GetWorldTime() = 0;
|
||||||
|
virtual double GetStartTime() = 0;
|
||||||
|
virtual double GetEndTime() = 0;
|
||||||
|
virtual float GetTimeScale() = 0;
|
||||||
|
virtual IWorld *GetWorld() = 0;
|
||||||
|
virtual char *GetFileName() = 0;
|
||||||
|
virtual bool SaveGame(char *filename) = 0;
|
||||||
|
virtual bool LoadGame(char *filename) = 0;
|
||||||
|
virtual void Stop() = 0;
|
||||||
|
virtual void ForceHLTV(bool state) = 0;
|
||||||
|
virtual void GetDemoViewInfo(ref_params_t *rp, float *view, int *viewmodel) = 0;
|
||||||
|
virtual int ReadDemoMessage(unsigned char *buffer, int size) = 0;
|
||||||
|
virtual void ReadNetchanState(int *incoming_sequence, int *incoming_acknowledged, int *incoming_reliable_acknowledged, int *incoming_reliable_sequence, int *outgoing_sequence, int *reliable_sequence, int *last_reliable_sequence) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define DEMOPLAYER_INTERFACE_VERSION "demoplayer001"
|
74
metamod/extra/example/include/hlsdk/common/IEngineWrapper.h
Normal file
74
metamod/extra/example/include/hlsdk/common/IEngineWrapper.h
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 2 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "event_args.h"
|
||||||
|
#include "vmodes.h"
|
||||||
|
#include "cdll_int.h"
|
||||||
|
|
||||||
|
class IBaseSystem;
|
||||||
|
class ISystemModule;
|
||||||
|
|
||||||
|
class IEngineWrapper {
|
||||||
|
public:
|
||||||
|
virtual ~IEngineWrapper() {}
|
||||||
|
|
||||||
|
virtual bool Init(IBaseSystem *system, int serial, char *name) = 0;
|
||||||
|
virtual void RunFrame(double time) = 0;
|
||||||
|
virtual void ReceiveSignal(ISystemModule *module, unsigned int signal, void *data) = 0;
|
||||||
|
virtual void ExecuteCommand(int commandID, char *commandLine) = 0;
|
||||||
|
virtual void RegisterListener(ISystemModule *module) = 0;
|
||||||
|
virtual void RemoveListener(ISystemModule *module) = 0;
|
||||||
|
|
||||||
|
virtual IBaseSystem *GetSystem() = 0;
|
||||||
|
|
||||||
|
virtual int GetSerial() = 0;
|
||||||
|
virtual char *GetStatusLine() = 0;
|
||||||
|
virtual char *GetType() = 0;
|
||||||
|
virtual char *GetName() = 0;
|
||||||
|
|
||||||
|
virtual int GetState() = 0;
|
||||||
|
virtual int GetVersion() = 0;
|
||||||
|
virtual void ShutDown() = 0;
|
||||||
|
|
||||||
|
virtual bool GetViewOrigin(float *origin) = 0;
|
||||||
|
virtual bool GetViewAngles(float *angles) = 0;
|
||||||
|
virtual int GetTraceEntity() = 0;
|
||||||
|
virtual float GetCvarFloat(char *szName) = 0;
|
||||||
|
virtual char *GetCvarString(char *szName) = 0;
|
||||||
|
virtual void SetCvar(char *szName, char *szValue) = 0;
|
||||||
|
virtual void Cbuf_AddText(char *text) = 0;
|
||||||
|
virtual void DemoUpdateClientData(client_data_t *cdat) = 0;
|
||||||
|
virtual void CL_QueueEvent(int flags, int index, float delay, event_args_t *pargs) = 0;
|
||||||
|
virtual void HudWeaponAnim(int iAnim, int body) = 0;
|
||||||
|
virtual void CL_DemoPlaySound(int channel, char *sample, float attenuation, float volume, int flags, int pitch) = 0;
|
||||||
|
virtual void ClientDLL_ReadDemoBuffer(int size, unsigned char *buffer) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define ENGINEWRAPPER_INTERFACE_VERSION "enginewrapper001"
|
15
metamod/extra/example/include/hlsdk/common/IGameServerData.h
Normal file
15
metamod/extra/example/include/hlsdk/common/IGameServerData.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "maintypes.h"
|
||||||
|
#include "interface.h"
|
||||||
|
|
||||||
|
class IGameServerData : public IBaseInterface {
|
||||||
|
public:
|
||||||
|
virtual ~IGameServerData() { };
|
||||||
|
|
||||||
|
virtual void WriteDataRequest(const void *buffer, int bufferSize) = 0;
|
||||||
|
|
||||||
|
virtual int ReadDataResponse(void *data, int len) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define GAMESERVERDATA_INTERFACE_VERSION "GameServerData001"
|
@ -0,0 +1,47 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 2 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
class IObjectContainer {
|
||||||
|
public:
|
||||||
|
virtual ~IObjectContainer() {}
|
||||||
|
|
||||||
|
virtual void Init() = 0;
|
||||||
|
|
||||||
|
virtual bool Add(void *newObject) = 0;
|
||||||
|
virtual bool Remove(void *object) = 0;
|
||||||
|
virtual void Clear(bool freeElementsMemory) = 0;
|
||||||
|
|
||||||
|
virtual void *GetFirst() = 0;
|
||||||
|
virtual void *GetNext() = 0;
|
||||||
|
|
||||||
|
virtual int CountElements() = 0;
|
||||||
|
virtual bool Contains(void *object) = 0;
|
||||||
|
virtual bool IsEmpty() = 0;
|
||||||
|
};
|
57
metamod/extra/example/include/hlsdk/common/ISystemModule.h
Normal file
57
metamod/extra/example/include/hlsdk/common/ISystemModule.h
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 2 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "interface.h"
|
||||||
|
|
||||||
|
class IBaseSystem;
|
||||||
|
class ISystemModule;
|
||||||
|
|
||||||
|
class ISystemModule: public IBaseInterface {
|
||||||
|
public:
|
||||||
|
virtual ~ISystemModule() {}
|
||||||
|
virtual bool Init(IBaseSystem *system, int serial, char *name) = 0;
|
||||||
|
|
||||||
|
virtual void RunFrame(double time) = 0;
|
||||||
|
virtual void ReceiveSignal(ISystemModule *module, unsigned int signal, void *data = nullptr) = 0;
|
||||||
|
virtual void ExecuteCommand(int commandID, char *commandLine) = 0;
|
||||||
|
virtual void RegisterListener(ISystemModule *module) = 0;
|
||||||
|
virtual void RemoveListener(ISystemModule *module) = 0;
|
||||||
|
|
||||||
|
virtual IBaseSystem *GetSystem() = 0;
|
||||||
|
|
||||||
|
virtual int GetSerial() = 0;
|
||||||
|
virtual char *GetStatusLine() = 0;
|
||||||
|
virtual char *GetType() = 0;
|
||||||
|
virtual char *GetName() = 0;
|
||||||
|
|
||||||
|
virtual int GetState() = 0;
|
||||||
|
virtual int GetVersion() = 0;
|
||||||
|
virtual void ShutDown() = 0;
|
||||||
|
};
|
76
metamod/extra/example/include/hlsdk/common/IVGuiModule.h
Normal file
76
metamod/extra/example/include/hlsdk/common/IVGuiModule.h
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 2 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <vgui/VGUI.h>
|
||||||
|
#include "interface.h"
|
||||||
|
|
||||||
|
// Purpose: Standard interface to loading vgui modules
|
||||||
|
class IVGuiModule: public IBaseInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// called first to setup the module with the vgui
|
||||||
|
// returns true on success, false on failure
|
||||||
|
virtual bool Initialize(CreateInterfaceFn *vguiFactories, int factoryCount) = 0;
|
||||||
|
|
||||||
|
// called after all the modules have been initialized
|
||||||
|
// modules should use this time to link to all the other module interfaces
|
||||||
|
virtual bool PostInitialize(CreateInterfaceFn *modules = nullptr, int factoryCount = 0) = 0;
|
||||||
|
|
||||||
|
// called when the module is selected from the menu or otherwise activated
|
||||||
|
virtual bool Activate() = 0;
|
||||||
|
|
||||||
|
// returns true if the module is successfully initialized and available
|
||||||
|
virtual bool IsValid() = 0;
|
||||||
|
|
||||||
|
// requests that the UI is temporarily disabled and all data files saved
|
||||||
|
virtual void Deactivate() = 0;
|
||||||
|
|
||||||
|
// restart from a Deactivate()
|
||||||
|
virtual void Reactivate() = 0;
|
||||||
|
|
||||||
|
// called when the module is about to be shutdown
|
||||||
|
virtual void Shutdown() = 0;
|
||||||
|
|
||||||
|
// returns a handle to the main module panel
|
||||||
|
virtual vgui2::VPANEL GetPanel() = 0;
|
||||||
|
|
||||||
|
// sets the parent of the main module panel
|
||||||
|
virtual void SetParent(vgui2::VPANEL parent) = 0;
|
||||||
|
|
||||||
|
// messages sent through through the panel returned by GetPanel():
|
||||||
|
//
|
||||||
|
// "ConnectedToGame" "ip" "port" "gamedir"
|
||||||
|
// "DisconnectedFromGame"
|
||||||
|
// "ActiveGameName" "name"
|
||||||
|
// "LoadingStarted" "type" "name"
|
||||||
|
// "LoadingFinished" "type" "name"
|
||||||
|
};
|
||||||
|
|
||||||
|
#define VGUIMODULE_INTERFACE_VERSION "VGuiModuleAdminServer001"
|
515
metamod/extra/example/include/hlsdk/common/ObjectDictionary.cpp
Normal file
515
metamod/extra/example/include/hlsdk/common/ObjectDictionary.cpp
Normal file
@ -0,0 +1,515 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 2 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "precompiled.h"
|
||||||
|
|
||||||
|
ObjectDictionary::ObjectDictionary()
|
||||||
|
{
|
||||||
|
m_currentEntry = 0;
|
||||||
|
m_findKey = 0;
|
||||||
|
m_entries = nullptr;
|
||||||
|
|
||||||
|
memset(m_cache, 0, sizeof(m_cache));
|
||||||
|
|
||||||
|
m_cacheIndex = 0;
|
||||||
|
m_size = 0;
|
||||||
|
m_maxSize = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ObjectDictionary::~ObjectDictionary()
|
||||||
|
{
|
||||||
|
if (m_entries) {
|
||||||
|
Mem_Free(m_entries);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ObjectDictionary::Clear(bool freeObjectssMemory)
|
||||||
|
{
|
||||||
|
if (freeObjectssMemory)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < m_size; i++)
|
||||||
|
{
|
||||||
|
void *obj = m_entries[i].object;
|
||||||
|
if (obj) {
|
||||||
|
Mem_Free(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_size = 0;
|
||||||
|
CheckSize();
|
||||||
|
ClearCache();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ObjectDictionary::Add(void *object, float key)
|
||||||
|
{
|
||||||
|
if (m_size == m_maxSize && !CheckSize())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
entry_t *p;
|
||||||
|
if (m_size && key < m_entries[m_size - 1].key)
|
||||||
|
{
|
||||||
|
p = &m_entries[FindClosestAsIndex(key)];
|
||||||
|
|
||||||
|
entry_t *e1 = &m_entries[m_size];
|
||||||
|
entry_t *e2 = &m_entries[m_size - 1];
|
||||||
|
|
||||||
|
while (p->key <= key) { p++; }
|
||||||
|
while (p != e1)
|
||||||
|
{
|
||||||
|
e1->object = e2->object;
|
||||||
|
e1->key = e2->key;
|
||||||
|
|
||||||
|
e1--;
|
||||||
|
e2--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
p = &m_entries[m_size];
|
||||||
|
|
||||||
|
p->key = key;
|
||||||
|
p->object = object;
|
||||||
|
m_size++;
|
||||||
|
|
||||||
|
ClearCache();
|
||||||
|
AddToCache(p);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ObjectDictionary::FindClosestAsIndex(float key)
|
||||||
|
{
|
||||||
|
if (m_size <= 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (key <= m_entries->key)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
int index = FindKeyInCache(key);
|
||||||
|
if (index >= 0) {
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
|
||||||
|
int middle;
|
||||||
|
int first = 0;
|
||||||
|
int last = m_size - 1;
|
||||||
|
float keyMiddle, keyNext;
|
||||||
|
|
||||||
|
if (key < m_entries[last].key)
|
||||||
|
{
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
middle = (last + first) >> 1;
|
||||||
|
keyMiddle = m_entries[middle].key;
|
||||||
|
|
||||||
|
if (keyMiddle == key)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (keyMiddle < key)
|
||||||
|
{
|
||||||
|
if (m_entries[middle + 1].key >= key)
|
||||||
|
{
|
||||||
|
if (m_entries[middle + 1].key - key < key - keyMiddle)
|
||||||
|
++middle;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
first = (last + first) >> 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
last = (last + first) >> 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
middle = last;
|
||||||
|
}
|
||||||
|
|
||||||
|
keyNext = m_entries[middle - 1].key;
|
||||||
|
while (keyNext == key) {
|
||||||
|
keyNext = m_entries[middle--].key;
|
||||||
|
}
|
||||||
|
|
||||||
|
AddToCache(&m_entries[middle], key);
|
||||||
|
return middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ObjectDictionary::ClearCache()
|
||||||
|
{
|
||||||
|
memset(m_cache, 0, sizeof(m_cache));
|
||||||
|
m_cacheIndex = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ObjectDictionary::RemoveIndex(int index, bool freeObjectMemory)
|
||||||
|
{
|
||||||
|
if (index < 0 || index >= m_size)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
entry_t *p = &m_entries[m_size - 1];
|
||||||
|
entry_t *e1 = &m_entries[index];
|
||||||
|
entry_t *e2 = &m_entries[index + 1];
|
||||||
|
|
||||||
|
if (freeObjectMemory && e1->object)
|
||||||
|
Mem_Free(e1->object);
|
||||||
|
|
||||||
|
while (p != e1)
|
||||||
|
{
|
||||||
|
e1->object = e2->object;
|
||||||
|
e1->key = e2->key;
|
||||||
|
|
||||||
|
e1++;
|
||||||
|
e2++;
|
||||||
|
}
|
||||||
|
|
||||||
|
p->object = nullptr;
|
||||||
|
p->key = 0;
|
||||||
|
m_size--;
|
||||||
|
|
||||||
|
CheckSize();
|
||||||
|
ClearCache();
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ObjectDictionary::RemoveIndexRange(int minIndex, int maxIndex)
|
||||||
|
{
|
||||||
|
if (minIndex > maxIndex)
|
||||||
|
{
|
||||||
|
if (maxIndex < 0)
|
||||||
|
maxIndex = 0;
|
||||||
|
|
||||||
|
if (minIndex >= m_size)
|
||||||
|
minIndex = m_size - 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (minIndex < 0)
|
||||||
|
minIndex = 0;
|
||||||
|
|
||||||
|
if (maxIndex >= m_size)
|
||||||
|
maxIndex = m_size - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int offset = minIndex + maxIndex - 1;
|
||||||
|
m_size -= offset;
|
||||||
|
CheckSize();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ObjectDictionary::Remove(void *object)
|
||||||
|
{
|
||||||
|
bool found = false;
|
||||||
|
for (int i = 0; i < m_size; i++)
|
||||||
|
{
|
||||||
|
if (m_entries[i].object == object) {
|
||||||
|
RemoveIndex(i);
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return found ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ObjectDictionary::RemoveSingle(void *object)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < m_size; i++)
|
||||||
|
{
|
||||||
|
if (m_entries[i].object == object) {
|
||||||
|
RemoveIndex(i);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ObjectDictionary::RemoveKey(float key)
|
||||||
|
{
|
||||||
|
int i = FindClosestAsIndex(key);
|
||||||
|
if (m_entries[i].key == key)
|
||||||
|
{
|
||||||
|
int j = i;
|
||||||
|
do {
|
||||||
|
++j;
|
||||||
|
}
|
||||||
|
while (key == m_entries[j + 1].key);
|
||||||
|
|
||||||
|
return RemoveIndexRange(i, j);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ObjectDictionary::CheckSize()
|
||||||
|
{
|
||||||
|
int newSize = m_maxSize;
|
||||||
|
if (m_size == m_maxSize)
|
||||||
|
{
|
||||||
|
newSize = 1 - (int)(m_maxSize * -1.25f);
|
||||||
|
}
|
||||||
|
else if (m_maxSize * 0.5f > m_size)
|
||||||
|
{
|
||||||
|
newSize = (int)(m_maxSize * 0.75f);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newSize != m_maxSize)
|
||||||
|
{
|
||||||
|
entry_t *newEntries = (entry_t *)Mem_Malloc(sizeof(entry_t) * newSize);
|
||||||
|
if (!newEntries)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
memset(&newEntries[m_size], 0, sizeof(entry_t) * (newSize - m_size));
|
||||||
|
|
||||||
|
if (m_entries && m_size)
|
||||||
|
{
|
||||||
|
memcpy(newEntries, m_entries, sizeof(entry_t) * m_size);
|
||||||
|
Mem_Free(m_entries);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_entries = newEntries;
|
||||||
|
m_maxSize = newSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ObjectDictionary::Init()
|
||||||
|
{
|
||||||
|
m_size = 0;
|
||||||
|
m_maxSize = 0;
|
||||||
|
m_entries = nullptr;
|
||||||
|
|
||||||
|
CheckSize();
|
||||||
|
ClearCache();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ObjectDictionary::Init(int baseSize)
|
||||||
|
{
|
||||||
|
m_size = 0;
|
||||||
|
m_maxSize = 0;
|
||||||
|
m_entries = (entry_t *)Mem_ZeroMalloc(sizeof(entry_t) * baseSize);
|
||||||
|
|
||||||
|
if (m_entries) {
|
||||||
|
m_maxSize = baseSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ObjectDictionary::Add(void *object)
|
||||||
|
{
|
||||||
|
return Add(object, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int ObjectDictionary::CountElements()
|
||||||
|
{
|
||||||
|
return m_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ObjectDictionary::IsEmpty()
|
||||||
|
{
|
||||||
|
return (m_size == 0) ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ObjectDictionary::Contains(void *object)
|
||||||
|
{
|
||||||
|
if (FindObjectInCache(object) >= 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
for (int i = 0; i < m_size; i++)
|
||||||
|
{
|
||||||
|
entry_t *e = &m_entries[i];
|
||||||
|
if (e->object == object) {
|
||||||
|
AddToCache(e);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *ObjectDictionary::GetFirst()
|
||||||
|
{
|
||||||
|
m_currentEntry = 0;
|
||||||
|
return GetNext();
|
||||||
|
}
|
||||||
|
|
||||||
|
void *ObjectDictionary::GetLast()
|
||||||
|
{
|
||||||
|
return (m_size > 0) ? m_entries[m_size - 1].object : nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ObjectDictionary::ChangeKey(void *object, float newKey)
|
||||||
|
{
|
||||||
|
int pos = FindObjectInCache(object);
|
||||||
|
if (pos < 0)
|
||||||
|
{
|
||||||
|
for (pos = 0; pos < m_size; pos++)
|
||||||
|
{
|
||||||
|
if (m_entries[pos].object == object) {
|
||||||
|
AddToCache(&m_entries[pos]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pos == m_size) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
entry_t *p, *e;
|
||||||
|
|
||||||
|
p = &m_entries[pos];
|
||||||
|
if (p->key == newKey)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
int newpos = FindClosestAsIndex(newKey);
|
||||||
|
e = &m_entries[newpos];
|
||||||
|
if (pos < newpos)
|
||||||
|
{
|
||||||
|
if (e->key > newKey)
|
||||||
|
e--;
|
||||||
|
|
||||||
|
entry_t *e2 = &m_entries[pos + 1];
|
||||||
|
while (p < e)
|
||||||
|
{
|
||||||
|
p->object = e2->object;
|
||||||
|
p->key = e2->key;
|
||||||
|
|
||||||
|
p++;
|
||||||
|
e2++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (pos > newpos)
|
||||||
|
{
|
||||||
|
if (e->key > newKey)
|
||||||
|
e++;
|
||||||
|
|
||||||
|
entry_t *e2 = &m_entries[pos - 1];
|
||||||
|
while (p > e)
|
||||||
|
{
|
||||||
|
p->object = e2->object;
|
||||||
|
p->key = e2->key;
|
||||||
|
|
||||||
|
p--;
|
||||||
|
e2--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
p->object = object;
|
||||||
|
p->key = newKey;
|
||||||
|
ClearCache();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ObjectDictionary::UnsafeChangeKey(void *object, float newKey)
|
||||||
|
{
|
||||||
|
int pos = FindObjectInCache(object);
|
||||||
|
if (pos < 0)
|
||||||
|
{
|
||||||
|
for (pos = 0; pos < m_size; pos++)
|
||||||
|
{
|
||||||
|
if (m_entries[pos].object == object) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pos == m_size) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_entries[pos].key = newKey;
|
||||||
|
ClearCache();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ObjectDictionary::AddToCache(entry_t *entry)
|
||||||
|
{
|
||||||
|
int i = (m_cacheIndex % MAX_OBJECT_CACHE);
|
||||||
|
|
||||||
|
m_cache[i].object = entry;
|
||||||
|
m_cache[i].key = entry->key;
|
||||||
|
m_cacheIndex++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ObjectDictionary::AddToCache(entry_t *entry, float key)
|
||||||
|
{
|
||||||
|
int i = (m_cacheIndex % MAX_OBJECT_CACHE);
|
||||||
|
|
||||||
|
m_cache[i].object = entry;
|
||||||
|
m_cache[i].key = key;
|
||||||
|
m_cacheIndex++;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ObjectDictionary::FindKeyInCache(float key)
|
||||||
|
{
|
||||||
|
for (auto& ch : m_cache)
|
||||||
|
{
|
||||||
|
if (ch.object && ch.key == key) {
|
||||||
|
return (entry_t *)ch.object - m_entries;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ObjectDictionary::FindObjectInCache(void *object)
|
||||||
|
{
|
||||||
|
for (auto& ch : m_cache)
|
||||||
|
{
|
||||||
|
if (ch.object && ch.object == object) {
|
||||||
|
return (entry_t *)ch.object - m_entries;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *ObjectDictionary::FindClosestKey(float key)
|
||||||
|
{
|
||||||
|
m_currentEntry = FindClosestAsIndex(key);
|
||||||
|
return GetNext();
|
||||||
|
}
|
||||||
|
|
||||||
|
void *ObjectDictionary::GetNext()
|
||||||
|
{
|
||||||
|
if (m_currentEntry < 0 || m_currentEntry >= m_size)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
return m_entries[m_currentEntry++].object;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *ObjectDictionary::FindExactKey(float key)
|
||||||
|
{
|
||||||
|
if ((m_currentEntry = FindClosestAsIndex(key)) < 0)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
return (m_entries[m_currentEntry].key == key) ? GetNext() : nullptr;
|
||||||
|
}
|
@ -0,0 +1,94 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 2 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "IObjectContainer.h"
|
||||||
|
|
||||||
|
class ObjectDictionary: public IObjectContainer {
|
||||||
|
public:
|
||||||
|
ObjectDictionary();
|
||||||
|
virtual ~ObjectDictionary();
|
||||||
|
|
||||||
|
void Init();
|
||||||
|
void Init(int baseSize);
|
||||||
|
|
||||||
|
bool Add(void *object);
|
||||||
|
bool Contains(void *object);
|
||||||
|
bool IsEmpty();
|
||||||
|
int CountElements();
|
||||||
|
|
||||||
|
void Clear(bool freeObjectssMemory = false);
|
||||||
|
|
||||||
|
bool Add(void *object, float key);
|
||||||
|
bool ChangeKey(void *object, float newKey);
|
||||||
|
bool UnsafeChangeKey(void *object, float newKey);
|
||||||
|
|
||||||
|
bool Remove(void *object);
|
||||||
|
bool RemoveSingle(void *object);
|
||||||
|
bool RemoveKey(float key);
|
||||||
|
bool RemoveRange(float startKey, float endKey);
|
||||||
|
|
||||||
|
void *FindClosestKey(float key);
|
||||||
|
void *FindExactKey(float key);
|
||||||
|
|
||||||
|
void *GetFirst();
|
||||||
|
void *GetLast();
|
||||||
|
void *GetNext();
|
||||||
|
|
||||||
|
int FindKeyInCache(float key);
|
||||||
|
int FindObjectInCache(void *object);
|
||||||
|
|
||||||
|
void ClearCache();
|
||||||
|
bool CheckSize();
|
||||||
|
|
||||||
|
typedef struct entry_s {
|
||||||
|
void *object;
|
||||||
|
float key;
|
||||||
|
} entry_t;
|
||||||
|
|
||||||
|
void AddToCache(entry_t *entry);
|
||||||
|
void AddToCache(entry_t *entry, float key);
|
||||||
|
|
||||||
|
bool RemoveIndex(int index, bool freeObjectMemory = false);
|
||||||
|
bool RemoveIndexRange(int minIndex, int maxIndex);
|
||||||
|
int FindClosestAsIndex(float key);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
int m_currentEntry;
|
||||||
|
float m_findKey;
|
||||||
|
|
||||||
|
enum { MAX_OBJECT_CACHE = 32 };
|
||||||
|
|
||||||
|
entry_t *m_entries;
|
||||||
|
entry_t m_cache[MAX_OBJECT_CACHE];
|
||||||
|
|
||||||
|
int m_cacheIndex;
|
||||||
|
int m_size;
|
||||||
|
int m_maxSize;
|
||||||
|
};
|
259
metamod/extra/example/include/hlsdk/common/ObjectList.cpp
Normal file
259
metamod/extra/example/include/hlsdk/common/ObjectList.cpp
Normal file
@ -0,0 +1,259 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 2 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "precompiled.h"
|
||||||
|
|
||||||
|
ObjectList::ObjectList()
|
||||||
|
{
|
||||||
|
m_head = m_tail = m_current = nullptr;
|
||||||
|
m_number = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ObjectList::~ObjectList()
|
||||||
|
{
|
||||||
|
Clear(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ObjectList::AddHead(void *newObject)
|
||||||
|
{
|
||||||
|
// create new element
|
||||||
|
element_t *newElement = (element_t *)Mem_ZeroMalloc(sizeof(element_t));
|
||||||
|
|
||||||
|
// out of memory
|
||||||
|
if (!newElement)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// insert element
|
||||||
|
newElement->object = newObject;
|
||||||
|
|
||||||
|
if (m_head)
|
||||||
|
{
|
||||||
|
newElement->next = m_head;
|
||||||
|
m_head->prev = newElement;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_head = newElement;
|
||||||
|
|
||||||
|
// if list was empty set new m_tail
|
||||||
|
if (!m_tail)
|
||||||
|
m_tail = m_head;
|
||||||
|
|
||||||
|
m_number++;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *ObjectList::RemoveHead()
|
||||||
|
{
|
||||||
|
void *retObj;
|
||||||
|
|
||||||
|
// check m_head is present
|
||||||
|
if (m_head)
|
||||||
|
{
|
||||||
|
retObj = m_head->object;
|
||||||
|
element_t *newHead = m_head->next;
|
||||||
|
if (newHead)
|
||||||
|
newHead->prev = nullptr;
|
||||||
|
|
||||||
|
// if only one element is in list also update m_tail
|
||||||
|
// if we remove this prev element
|
||||||
|
if (m_tail == m_head)
|
||||||
|
m_tail = nullptr;
|
||||||
|
|
||||||
|
Mem_Free(m_head);
|
||||||
|
m_head = newHead;
|
||||||
|
|
||||||
|
m_number--;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
retObj = nullptr;
|
||||||
|
|
||||||
|
return retObj;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ObjectList::AddTail(void *newObject)
|
||||||
|
{
|
||||||
|
// create new element
|
||||||
|
element_t *newElement = (element_t *)Mem_ZeroMalloc(sizeof(element_t));
|
||||||
|
|
||||||
|
// out of memory
|
||||||
|
if (!newElement)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// insert element
|
||||||
|
newElement->object = newObject;
|
||||||
|
|
||||||
|
if (m_tail)
|
||||||
|
{
|
||||||
|
newElement->prev = m_tail;
|
||||||
|
m_tail->next = newElement;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_tail = newElement;
|
||||||
|
|
||||||
|
// if list was empty set new m_tail
|
||||||
|
if (!m_head)
|
||||||
|
m_head = m_tail;
|
||||||
|
|
||||||
|
m_number++;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *ObjectList::RemoveTail()
|
||||||
|
{
|
||||||
|
void *retObj;
|
||||||
|
|
||||||
|
// check m_tail is present
|
||||||
|
if (m_tail)
|
||||||
|
{
|
||||||
|
retObj = m_tail->object;
|
||||||
|
element_t *newTail = m_tail->prev;
|
||||||
|
if (newTail)
|
||||||
|
newTail->next = nullptr;
|
||||||
|
|
||||||
|
// if only one element is in list also update m_tail
|
||||||
|
// if we remove this prev element
|
||||||
|
if (m_head == m_tail)
|
||||||
|
m_head = nullptr;
|
||||||
|
|
||||||
|
Mem_Free(m_tail);
|
||||||
|
m_tail = newTail;
|
||||||
|
|
||||||
|
m_number--;
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
retObj = nullptr;
|
||||||
|
|
||||||
|
return retObj;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ObjectList::IsEmpty()
|
||||||
|
{
|
||||||
|
return (m_head == nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
int ObjectList::CountElements()
|
||||||
|
{
|
||||||
|
return m_number;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ObjectList::Contains(void *object)
|
||||||
|
{
|
||||||
|
element_t *e = m_head;
|
||||||
|
|
||||||
|
while (e && e->object != object) { e = e->next; }
|
||||||
|
|
||||||
|
if (e)
|
||||||
|
{
|
||||||
|
m_current = e;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ObjectList::Clear(bool freeElementsMemory)
|
||||||
|
{
|
||||||
|
element_t *ne;
|
||||||
|
element_t *e = m_head;
|
||||||
|
|
||||||
|
while (e)
|
||||||
|
{
|
||||||
|
ne = e->next;
|
||||||
|
|
||||||
|
if (freeElementsMemory && e->object)
|
||||||
|
Mem_Free(e->object);
|
||||||
|
|
||||||
|
Mem_Free(e);
|
||||||
|
e = ne;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_head = m_tail = m_current = nullptr;
|
||||||
|
m_number = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ObjectList::Remove(void *object)
|
||||||
|
{
|
||||||
|
element_t *e = m_head;
|
||||||
|
|
||||||
|
while (e && e->object != object) { e = e->next; }
|
||||||
|
|
||||||
|
if (e)
|
||||||
|
{
|
||||||
|
if (e->prev) e->prev->next = e->next;
|
||||||
|
if (e->next) e->next->prev = e->prev;
|
||||||
|
|
||||||
|
if (m_head == e) m_head = e->next;
|
||||||
|
if (m_tail == e) m_tail = e->prev;
|
||||||
|
if (m_current == e) m_current= e->next;
|
||||||
|
|
||||||
|
Mem_Free(e);
|
||||||
|
m_number--;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (e != nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ObjectList::Init()
|
||||||
|
{
|
||||||
|
m_head = m_tail = m_current = nullptr;
|
||||||
|
m_number = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *ObjectList::GetFirst()
|
||||||
|
{
|
||||||
|
if (m_head)
|
||||||
|
{
|
||||||
|
m_current = m_head->next;
|
||||||
|
return m_head->object;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_current = nullptr;
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void *ObjectList::GetNext()
|
||||||
|
{
|
||||||
|
void *retObj = nullptr;
|
||||||
|
if (m_current)
|
||||||
|
{
|
||||||
|
retObj = m_current->object;
|
||||||
|
m_current = m_current->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
return retObj;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ObjectList::Add(void *newObject)
|
||||||
|
{
|
||||||
|
return AddTail(newObject);
|
||||||
|
}
|
65
metamod/extra/example/include/hlsdk/common/ObjectList.h
Normal file
65
metamod/extra/example/include/hlsdk/common/ObjectList.h
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 2 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "IObjectContainer.h"
|
||||||
|
|
||||||
|
class ObjectList: public IObjectContainer {
|
||||||
|
public:
|
||||||
|
void Init();
|
||||||
|
bool Add(void *newObject);
|
||||||
|
void *GetFirst();
|
||||||
|
void *GetNext();
|
||||||
|
|
||||||
|
ObjectList();
|
||||||
|
virtual ~ObjectList();
|
||||||
|
|
||||||
|
void Clear(bool freeElementsMemory = false);
|
||||||
|
int CountElements();
|
||||||
|
void *RemoveTail();
|
||||||
|
void *RemoveHead();
|
||||||
|
|
||||||
|
bool AddTail(void *newObject);
|
||||||
|
bool AddHead(void *newObject);
|
||||||
|
bool Remove(void *object);
|
||||||
|
bool Contains(void *object);
|
||||||
|
bool IsEmpty();
|
||||||
|
|
||||||
|
typedef struct element_s {
|
||||||
|
struct element_s *prev; // pointer to the last element or NULL
|
||||||
|
struct element_s *next; // pointer to the next elemnet or NULL
|
||||||
|
void *object; // the element's object
|
||||||
|
} element_t;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
element_t *m_head; // first element in list
|
||||||
|
element_t *m_tail; // last element in list
|
||||||
|
element_t *m_current; // current element in list
|
||||||
|
int m_number;
|
||||||
|
};
|
201
metamod/extra/example/include/hlsdk/common/Sequence.h
Normal file
201
metamod/extra/example/include/hlsdk/common/Sequence.h
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// S c r i p t e d S e q u e n c e s
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#ifndef _INCLUDE_SEQUENCE_H_
|
||||||
|
#define _INCLUDE_SEQUENCE_H_
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef _DEF_BYTE_
|
||||||
|
typedef unsigned char byte;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
// client_textmessage_t
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
typedef struct client_textmessage_s
|
||||||
|
{
|
||||||
|
int effect;
|
||||||
|
byte r1, g1, b1, a1; // 2 colors for effects
|
||||||
|
byte r2, g2, b2, a2;
|
||||||
|
float x;
|
||||||
|
float y;
|
||||||
|
float fadein;
|
||||||
|
float fadeout;
|
||||||
|
float holdtime;
|
||||||
|
float fxtime;
|
||||||
|
const char *pName;
|
||||||
|
const char *pMessage;
|
||||||
|
} client_textmessage_t;
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------
|
||||||
|
// sequenceDefaultBits_e
|
||||||
|
//
|
||||||
|
// Enumerated list of possible modifiers for a command. This enumeration
|
||||||
|
// is used in a bitarray controlling what modifiers are specified for a command.
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
enum sequenceModifierBits
|
||||||
|
{
|
||||||
|
SEQUENCE_MODIFIER_EFFECT_BIT = (1 << 1),
|
||||||
|
SEQUENCE_MODIFIER_POSITION_BIT = (1 << 2),
|
||||||
|
SEQUENCE_MODIFIER_COLOR_BIT = (1 << 3),
|
||||||
|
SEQUENCE_MODIFIER_COLOR2_BIT = (1 << 4),
|
||||||
|
SEQUENCE_MODIFIER_FADEIN_BIT = (1 << 5),
|
||||||
|
SEQUENCE_MODIFIER_FADEOUT_BIT = (1 << 6),
|
||||||
|
SEQUENCE_MODIFIER_HOLDTIME_BIT = (1 << 7),
|
||||||
|
SEQUENCE_MODIFIER_FXTIME_BIT = (1 << 8),
|
||||||
|
SEQUENCE_MODIFIER_SPEAKER_BIT = (1 << 9),
|
||||||
|
SEQUENCE_MODIFIER_LISTENER_BIT = (1 << 10),
|
||||||
|
SEQUENCE_MODIFIER_TEXTCHANNEL_BIT = (1 << 11),
|
||||||
|
};
|
||||||
|
typedef enum sequenceModifierBits sequenceModifierBits_e ;
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
// sequenceCommandEnum_e
|
||||||
|
//
|
||||||
|
// Enumerated sequence command types.
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
enum sequenceCommandEnum_
|
||||||
|
{
|
||||||
|
SEQUENCE_COMMAND_ERROR = -1,
|
||||||
|
SEQUENCE_COMMAND_PAUSE = 0,
|
||||||
|
SEQUENCE_COMMAND_FIRETARGETS,
|
||||||
|
SEQUENCE_COMMAND_KILLTARGETS,
|
||||||
|
SEQUENCE_COMMAND_TEXT,
|
||||||
|
SEQUENCE_COMMAND_SOUND,
|
||||||
|
SEQUENCE_COMMAND_GOSUB,
|
||||||
|
SEQUENCE_COMMAND_SENTENCE,
|
||||||
|
SEQUENCE_COMMAND_REPEAT,
|
||||||
|
SEQUENCE_COMMAND_SETDEFAULTS,
|
||||||
|
SEQUENCE_COMMAND_MODIFIER,
|
||||||
|
SEQUENCE_COMMAND_POSTMODIFIER,
|
||||||
|
SEQUENCE_COMMAND_NOOP,
|
||||||
|
|
||||||
|
SEQUENCE_MODIFIER_EFFECT,
|
||||||
|
SEQUENCE_MODIFIER_POSITION,
|
||||||
|
SEQUENCE_MODIFIER_COLOR,
|
||||||
|
SEQUENCE_MODIFIER_COLOR2,
|
||||||
|
SEQUENCE_MODIFIER_FADEIN,
|
||||||
|
SEQUENCE_MODIFIER_FADEOUT,
|
||||||
|
SEQUENCE_MODIFIER_HOLDTIME,
|
||||||
|
SEQUENCE_MODIFIER_FXTIME,
|
||||||
|
SEQUENCE_MODIFIER_SPEAKER,
|
||||||
|
SEQUENCE_MODIFIER_LISTENER,
|
||||||
|
SEQUENCE_MODIFIER_TEXTCHANNEL,
|
||||||
|
};
|
||||||
|
typedef enum sequenceCommandEnum_ sequenceCommandEnum_e;
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
// sequenceCommandType_e
|
||||||
|
//
|
||||||
|
// Typeerated sequence command types.
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
enum sequenceCommandType_
|
||||||
|
{
|
||||||
|
SEQUENCE_TYPE_COMMAND,
|
||||||
|
SEQUENCE_TYPE_MODIFIER,
|
||||||
|
};
|
||||||
|
typedef enum sequenceCommandType_ sequenceCommandType_e;
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
// sequenceCommandMapping_s
|
||||||
|
//
|
||||||
|
// A mapping of a command enumerated-value to its name.
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
typedef struct sequenceCommandMapping_ sequenceCommandMapping_s;
|
||||||
|
struct sequenceCommandMapping_
|
||||||
|
{
|
||||||
|
sequenceCommandEnum_e commandEnum;
|
||||||
|
const char* commandName;
|
||||||
|
sequenceCommandType_e commandType;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
// sequenceCommandLine_s
|
||||||
|
//
|
||||||
|
// Structure representing a single command (usually 1 line) from a
|
||||||
|
// .SEQ file entry.
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
typedef struct sequenceCommandLine_ sequenceCommandLine_s;
|
||||||
|
struct sequenceCommandLine_
|
||||||
|
{
|
||||||
|
int commandType; // Specifies the type of command
|
||||||
|
client_textmessage_t clientMessage; // Text HUD message struct
|
||||||
|
char* speakerName; // Targetname of speaking entity
|
||||||
|
char* listenerName; // Targetname of entity being spoken to
|
||||||
|
char* soundFileName; // Name of sound file to play
|
||||||
|
char* sentenceName; // Name of sentences.txt to play
|
||||||
|
char* fireTargetNames; // List of targetnames to fire
|
||||||
|
char* killTargetNames; // List of targetnames to remove
|
||||||
|
float delay; // Seconds 'till next command
|
||||||
|
int repeatCount; // If nonzero, reset execution pointer to top of block (N times, -1 = infinite)
|
||||||
|
int textChannel; // Display channel on which text message is sent
|
||||||
|
int modifierBitField; // Bit field to specify what clientmessage fields are valid
|
||||||
|
sequenceCommandLine_s* nextCommandLine; // Next command (linked list)
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
// sequenceEntry_s
|
||||||
|
//
|
||||||
|
// Structure representing a single command (usually 1 line) from a
|
||||||
|
// .SEQ file entry.
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
typedef struct sequenceEntry_ sequenceEntry_s;
|
||||||
|
struct sequenceEntry_
|
||||||
|
{
|
||||||
|
char* fileName; // Name of sequence file without .SEQ extension
|
||||||
|
char* entryName; // Name of entry label in file
|
||||||
|
sequenceCommandLine_s* firstCommand; // Linked list of commands in entry
|
||||||
|
sequenceEntry_s* nextEntry; // Next loaded entry
|
||||||
|
qboolean isGlobal; // Is entry retained over level transitions?
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
// sentenceEntry_s
|
||||||
|
// Structure representing a single sentence of a group from a .SEQ
|
||||||
|
// file entry. Sentences are identical to entries in sentences.txt, but
|
||||||
|
// can be unique per level and are loaded/unloaded with the level.
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
typedef struct sentenceEntry_ sentenceEntry_s;
|
||||||
|
struct sentenceEntry_
|
||||||
|
{
|
||||||
|
char* data; // sentence data (ie "We have hostiles" )
|
||||||
|
sentenceEntry_s* nextEntry; // Next loaded entry
|
||||||
|
qboolean isGlobal; // Is entry retained over level transitions?
|
||||||
|
unsigned int index; // this entry's position in the file.
|
||||||
|
};
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------
|
||||||
|
// sentenceGroupEntry_s
|
||||||
|
// Structure representing a group of sentences found in a .SEQ file.
|
||||||
|
// A sentence group is defined by all sentences with the same name, ignoring
|
||||||
|
// the number at the end of the sentence name. Groups enable a sentence
|
||||||
|
// to be picked at random across a group.
|
||||||
|
//--------------------------------------------------------------------------
|
||||||
|
typedef struct sentenceGroupEntry_ sentenceGroupEntry_s;
|
||||||
|
struct sentenceGroupEntry_
|
||||||
|
{
|
||||||
|
char* groupName; // name of the group (ie CT_ALERT )
|
||||||
|
unsigned int numSentences; // number of sentences in group
|
||||||
|
sentenceEntry_s* firstSentence; // head of linked list of sentences in group
|
||||||
|
sentenceGroupEntry_s* nextEntry; // next loaded group
|
||||||
|
};
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
// Function declarations
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
sequenceEntry_s* SequenceGet( const char* fileName, const char* entryName );
|
||||||
|
void Sequence_ParseFile( const char* fileName, qboolean isGlobal );
|
||||||
|
void Sequence_OnLevelLoad( const char* mapName );
|
||||||
|
sentenceEntry_s* SequencePickSentence( const char *groupName, int pickMethod, int *picked );
|
||||||
|
|
||||||
|
#endif // _INCLUDE_SEQUENCE_H_
|
211
metamod/extra/example/include/hlsdk/common/SteamAppStartUp.cpp
Normal file
211
metamod/extra/example/include/hlsdk/common/SteamAppStartUp.cpp
Normal file
@ -0,0 +1,211 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 2 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "precompiled.h"
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include "SteamAppStartup.h"
|
||||||
|
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#include <assert.h>
|
||||||
|
#include <windows.h>
|
||||||
|
#include <process.h>
|
||||||
|
#include <direct.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#define STEAM_PARM "-steam"
|
||||||
|
|
||||||
|
bool FileExists(const char *fileName)
|
||||||
|
{
|
||||||
|
struct _stat statbuf;
|
||||||
|
return (_stat(fileName, &statbuf) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handles launching the game indirectly via steam
|
||||||
|
void LaunchSelfViaSteam(const char *params)
|
||||||
|
{
|
||||||
|
// calculate the details of our launch
|
||||||
|
char appPath[MAX_PATH];
|
||||||
|
::GetModuleFileName((HINSTANCE)GetModuleHandle(NULL), appPath, sizeof(appPath));
|
||||||
|
|
||||||
|
// strip out the exe name
|
||||||
|
char *slash = strrchr(appPath, '\\');
|
||||||
|
if (slash)
|
||||||
|
{
|
||||||
|
*slash = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
// save out our details to the registry
|
||||||
|
HKEY hKey;
|
||||||
|
if (ERROR_SUCCESS == RegOpenKey(HKEY_CURRENT_USER, "Software\\Valve\\Steam", &hKey))
|
||||||
|
{
|
||||||
|
DWORD dwType = REG_SZ;
|
||||||
|
DWORD dwSize = static_cast<DWORD>( strlen(appPath) + 1 );
|
||||||
|
RegSetValueEx(hKey, "TempAppPath", NULL, dwType, (LPBYTE)appPath, dwSize);
|
||||||
|
dwSize = static_cast<DWORD>( strlen(params) + 1 );
|
||||||
|
RegSetValueEx(hKey, "TempAppCmdLine", NULL, dwType, (LPBYTE)params, dwSize);
|
||||||
|
// clear out the appID (since we don't know it yet)
|
||||||
|
dwType = REG_DWORD;
|
||||||
|
int appID = -1;
|
||||||
|
RegSetValueEx(hKey, "TempAppID", NULL, dwType, (LPBYTE)&appID, sizeof(appID));
|
||||||
|
RegCloseKey(hKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
// search for an active steam instance
|
||||||
|
HWND hwnd = ::FindWindow("Valve_SteamIPC_Class", "Hidden Window");
|
||||||
|
if (hwnd)
|
||||||
|
{
|
||||||
|
::PostMessage(hwnd, WM_USER + 3, 0, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// couldn't find steam, find and launch it
|
||||||
|
|
||||||
|
// first, search backwards through our current set of directories
|
||||||
|
char steamExe[MAX_PATH] = "";
|
||||||
|
char dir[MAX_PATH];
|
||||||
|
|
||||||
|
if (::GetCurrentDirectoryA(sizeof(dir), dir))
|
||||||
|
{
|
||||||
|
char *slash = strrchr(dir, '\\');
|
||||||
|
while (slash)
|
||||||
|
{
|
||||||
|
// see if steam_dev.exe is in the directory first
|
||||||
|
slash[1] = 0;
|
||||||
|
strcat(slash, "steam_dev.exe");
|
||||||
|
FILE *f = fopen(dir, "rb");
|
||||||
|
if (f)
|
||||||
|
{
|
||||||
|
// found it
|
||||||
|
fclose(f);
|
||||||
|
strcpy(steamExe, dir);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// see if steam.exe is in the directory
|
||||||
|
slash[1] = 0;
|
||||||
|
strcat(slash, "steam.exe");
|
||||||
|
f = fopen(dir, "rb");
|
||||||
|
if (f)
|
||||||
|
{
|
||||||
|
// found it
|
||||||
|
fclose(f);
|
||||||
|
strcpy(steamExe, dir);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// kill the string at the slash
|
||||||
|
slash[0] = 0;
|
||||||
|
|
||||||
|
// move to the previous slash
|
||||||
|
slash = strrchr(dir, '\\');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!steamExe[0])
|
||||||
|
{
|
||||||
|
// still not found, use the one in the registry
|
||||||
|
HKEY hKey;
|
||||||
|
if (ERROR_SUCCESS == RegOpenKey(HKEY_CURRENT_USER, "Software\\Valve\\Steam", &hKey))
|
||||||
|
{
|
||||||
|
DWORD dwType;
|
||||||
|
DWORD dwSize = sizeof(steamExe);
|
||||||
|
RegQueryValueEx(hKey, "SteamExe", NULL, &dwType, (LPBYTE)steamExe, &dwSize);
|
||||||
|
RegCloseKey(hKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!steamExe[0])
|
||||||
|
{
|
||||||
|
// still no path, error
|
||||||
|
::MessageBox(NULL, "Error running game: could not find steam.exe to launch", "Fatal Error", MB_OK | MB_ICONERROR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// fix any slashes
|
||||||
|
for (char *slash = steamExe; *slash; slash++)
|
||||||
|
{
|
||||||
|
if (*slash == '/')
|
||||||
|
{
|
||||||
|
*slash = '\\';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// change to the steam directory
|
||||||
|
strcpy(dir, steamExe);
|
||||||
|
char *delimiter = strrchr(dir, '\\');
|
||||||
|
if (delimiter)
|
||||||
|
{
|
||||||
|
*delimiter = 0;
|
||||||
|
_chdir(dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
// exec steam.exe, in silent mode, with the launch app param
|
||||||
|
char *args[4] = { steamExe, "-silent", "-applaunch", '\0' };
|
||||||
|
_spawnv(_P_NOWAIT, steamExe, args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Launches steam if necessary
|
||||||
|
bool ShouldLaunchAppViaSteam(const char *lpCmdLine, const char *steamFilesystemDllName, const char *stdioFilesystemDllName)
|
||||||
|
{
|
||||||
|
// see if steam is on the command line
|
||||||
|
const char *steamStr = strstr(lpCmdLine, STEAM_PARM);
|
||||||
|
|
||||||
|
// check the character following it is a whitespace or null
|
||||||
|
if (steamStr)
|
||||||
|
{
|
||||||
|
const char *postChar = steamStr + strlen(STEAM_PARM);
|
||||||
|
if (*postChar == 0 || isspace(*postChar))
|
||||||
|
{
|
||||||
|
// we're running under steam already, let the app continue
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// we're not running under steam, see which filesystems are available
|
||||||
|
if (FileExists(stdioFilesystemDllName))
|
||||||
|
{
|
||||||
|
// we're being run with a stdio filesystem, so we can continue without steam
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// make sure we have a steam filesystem available
|
||||||
|
if (!FileExists(steamFilesystemDllName))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// we have the steam filesystem, and no stdio filesystem, so we must need to be run under steam
|
||||||
|
// launch steam
|
||||||
|
LaunchSelfViaSteam(lpCmdLine);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // _WIN32
|
37
metamod/extra/example/include/hlsdk/common/SteamAppStartUp.h
Normal file
37
metamod/extra/example/include/hlsdk/common/SteamAppStartUp.h
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 2 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Call this first thing at startup
|
||||||
|
// Works out if the app is a steam app that is being ran outside of steam,
|
||||||
|
// and if so, launches steam and tells it to run us as a steam app
|
||||||
|
//
|
||||||
|
// if it returns true, then exit
|
||||||
|
// if it ruturns false, then continue with normal startup
|
||||||
|
bool ShouldLaunchAppViaSteam(const char *cmdLine, const char *steamFilesystemDllName, const char *stdioFilesystemDllName);
|
703
metamod/extra/example/include/hlsdk/common/SteamCommon.h
Normal file
703
metamod/extra/example/include/hlsdk/common/SteamCommon.h
Normal file
@ -0,0 +1,703 @@
|
|||||||
|
|
||||||
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||||
|
/*
|
||||||
|
** The copyright to the contents herein is the property of Valve Corporation.
|
||||||
|
** The contents may be used and/or copied only with the written permission of
|
||||||
|
** Valve, or in accordance with the terms and conditions stipulated in
|
||||||
|
** the agreement/contract under which the contents have been supplied.
|
||||||
|
**
|
||||||
|
*******************************************************************************
|
||||||
|
**
|
||||||
|
** Contents:
|
||||||
|
**
|
||||||
|
** Common types used in the Steam DLL interface.
|
||||||
|
**
|
||||||
|
** This file is distributed to Steam application developers.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#ifndef INCLUDED_STEAM_COMMON_STEAMCOMMON_H
|
||||||
|
#define INCLUDED_STEAM_COMMON_STEAMCOMMON_H
|
||||||
|
|
||||||
|
#if defined(_MSC_VER) && (_MSC_VER > 1000)
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Applications should not define STEAM_EXPORTS. */
|
||||||
|
|
||||||
|
#if defined ( _WIN32 )
|
||||||
|
|
||||||
|
#ifdef STEAM_EXPORTS
|
||||||
|
#define STEAM_API __declspec(dllexport)
|
||||||
|
#else
|
||||||
|
#define STEAM_API __declspec(dllimport)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define STEAM_CALL __cdecl
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define STEAM_API /* */
|
||||||
|
#define STEAM_CALL /* */
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef void (STEAM_CALL *KeyValueIteratorCallback_t )(const char *Key, const char *Val, void *pvParam);
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
**
|
||||||
|
** Exported macros and constants
|
||||||
|
**
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/* DEPRECATED -- these are ignored now, all API access is granted on SteamStartup */
|
||||||
|
#define STEAM_USING_FILESYSTEM (0x00000001)
|
||||||
|
#define STEAM_USING_LOGGING (0x00000002)
|
||||||
|
#define STEAM_USING_USERID (0x00000004)
|
||||||
|
#define STEAM_USING_ACCOUNT (0x00000008)
|
||||||
|
#define STEAM_USING_ALL (0x0000000f)
|
||||||
|
/* END DEPRECATED */
|
||||||
|
|
||||||
|
#define STEAM_MAX_PATH (255)
|
||||||
|
#define STEAM_QUESTION_MAXLEN (255)
|
||||||
|
#define STEAM_SALT_SIZE (8)
|
||||||
|
#define STEAM_PROGRESS_PERCENT_SCALE (0x00001000)
|
||||||
|
|
||||||
|
/* These are maximum significant string lengths, excluding nul-terminator. */
|
||||||
|
#define STEAM_CARD_NUMBER_SIZE (17)
|
||||||
|
#define STEAM_CARD_HOLDERNAME_SIZE (100)
|
||||||
|
#define STEAM_CARD_EXPYEAR_SIZE (4)
|
||||||
|
#define STEAM_CARD_EXPMONTH_SIZE (2)
|
||||||
|
#define STEAM_CARD_CVV2_SIZE (5)
|
||||||
|
#define STEAM_BILLING_ADDRESS1_SIZE (128)
|
||||||
|
#define STEAM_BILLING_ADDRESS2_SIZE (128)
|
||||||
|
#define STEAM_BILLING_CITY_SIZE (50)
|
||||||
|
#define STEAM_BILLING_ZIP_SIZE (16)
|
||||||
|
#define STEAM_BILLING_STATE_SIZE (32)
|
||||||
|
#define STEAM_BILLING_COUNTRY_SIZE (32)
|
||||||
|
#define STEAM_BILLING_PHONE_SIZE (20)
|
||||||
|
#define STEAM_BILLING_EMAIL_ADDRESS_SIZE (100)
|
||||||
|
#define STEAM_TYPE_OF_PROOF_OF_PURCHASE_SIZE (20)
|
||||||
|
#define STEAM_PROOF_OF_PURCHASE_TOKEN_SIZE (200)
|
||||||
|
#define STEAM_EXTERNAL_ACCOUNTNAME_SIZE (100)
|
||||||
|
#define STEAM_EXTERNAL_ACCOUNTPASSWORD_SIZE (80)
|
||||||
|
#define STEAM_BILLING_CONFIRMATION_CODE_SIZE (22)
|
||||||
|
#define STEAM_BILLING_CARD_APPROVAL_CODE_SIZE (100)
|
||||||
|
#define STEAM_BILLING_TRANS_DATE_SIZE (9) // mm/dd/yy
|
||||||
|
#define STEAM_BILLING_TRANS_TIME_SIZE (9) // hh:mm:ss
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
**
|
||||||
|
** Scalar type and enumerated type definitions.
|
||||||
|
**
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
typedef unsigned int SteamHandle_t;
|
||||||
|
|
||||||
|
typedef void * SteamUserIDTicketValidationHandle_t;
|
||||||
|
|
||||||
|
typedef unsigned int SteamCallHandle_t;
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
typedef unsigned __int64 SteamUnsigned64_t;
|
||||||
|
#else
|
||||||
|
typedef unsigned long long SteamUnsigned64_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
eSteamSeekMethodSet = 0,
|
||||||
|
eSteamSeekMethodCur = 1,
|
||||||
|
eSteamSeekMethodEnd = 2
|
||||||
|
} ESteamSeekMethod;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
eSteamBufferMethodFBF = 0,
|
||||||
|
eSteamBufferMethodNBF = 1
|
||||||
|
} ESteamBufferMethod;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
eSteamErrorNone = 0,
|
||||||
|
eSteamErrorUnknown = 1,
|
||||||
|
eSteamErrorLibraryNotInitialized = 2,
|
||||||
|
eSteamErrorLibraryAlreadyInitialized = 3,
|
||||||
|
eSteamErrorConfig = 4,
|
||||||
|
eSteamErrorContentServerConnect = 5,
|
||||||
|
eSteamErrorBadHandle = 6,
|
||||||
|
eSteamErrorHandlesExhausted = 7,
|
||||||
|
eSteamErrorBadArg = 8,
|
||||||
|
eSteamErrorNotFound = 9,
|
||||||
|
eSteamErrorRead = 10,
|
||||||
|
eSteamErrorEOF = 11,
|
||||||
|
eSteamErrorSeek = 12,
|
||||||
|
eSteamErrorCannotWriteNonUserConfigFile = 13,
|
||||||
|
eSteamErrorCacheOpen = 14,
|
||||||
|
eSteamErrorCacheRead = 15,
|
||||||
|
eSteamErrorCacheCorrupted = 16,
|
||||||
|
eSteamErrorCacheWrite = 17,
|
||||||
|
eSteamErrorCacheSession = 18,
|
||||||
|
eSteamErrorCacheInternal = 19,
|
||||||
|
eSteamErrorCacheBadApp = 20,
|
||||||
|
eSteamErrorCacheVersion = 21,
|
||||||
|
eSteamErrorCacheBadFingerPrint = 22,
|
||||||
|
|
||||||
|
eSteamErrorNotFinishedProcessing = 23,
|
||||||
|
eSteamErrorNothingToDo = 24,
|
||||||
|
eSteamErrorCorruptEncryptedUserIDTicket = 25,
|
||||||
|
eSteamErrorSocketLibraryNotInitialized = 26,
|
||||||
|
eSteamErrorFailedToConnectToUserIDTicketValidationServer = 27,
|
||||||
|
eSteamErrorBadProtocolVersion = 28,
|
||||||
|
eSteamErrorReplayedUserIDTicketFromClient = 29,
|
||||||
|
eSteamErrorReceiveResultBufferTooSmall = 30,
|
||||||
|
eSteamErrorSendFailed = 31,
|
||||||
|
eSteamErrorReceiveFailed = 32,
|
||||||
|
eSteamErrorReplayedReplyFromUserIDTicketValidationServer = 33,
|
||||||
|
eSteamErrorBadSignatureFromUserIDTicketValidationServer = 34,
|
||||||
|
eSteamErrorValidationStalledSoAborted = 35,
|
||||||
|
eSteamErrorInvalidUserIDTicket = 36,
|
||||||
|
eSteamErrorClientLoginRateTooHigh = 37,
|
||||||
|
eSteamErrorClientWasNeverValidated = 38,
|
||||||
|
eSteamErrorInternalSendBufferTooSmall = 39,
|
||||||
|
eSteamErrorInternalReceiveBufferTooSmall = 40,
|
||||||
|
eSteamErrorUserTicketExpired = 41,
|
||||||
|
eSteamErrorCDKeyAlreadyInUseOnAnotherClient = 42,
|
||||||
|
|
||||||
|
eSteamErrorNotLoggedIn = 101,
|
||||||
|
eSteamErrorAlreadyExists = 102,
|
||||||
|
eSteamErrorAlreadySubscribed = 103,
|
||||||
|
eSteamErrorNotSubscribed = 104,
|
||||||
|
eSteamErrorAccessDenied = 105,
|
||||||
|
eSteamErrorFailedToCreateCacheFile = 106,
|
||||||
|
eSteamErrorCallStalledSoAborted = 107,
|
||||||
|
eSteamErrorEngineNotRunning = 108,
|
||||||
|
eSteamErrorEngineConnectionLost = 109,
|
||||||
|
eSteamErrorLoginFailed = 110,
|
||||||
|
eSteamErrorAccountPending = 111,
|
||||||
|
eSteamErrorCacheWasMissingRetry = 112,
|
||||||
|
eSteamErrorLocalTimeIncorrect = 113,
|
||||||
|
eSteamErrorCacheNeedsDecryption = 114,
|
||||||
|
eSteamErrorAccountDisabled = 115,
|
||||||
|
eSteamErrorCacheNeedsRepair = 116,
|
||||||
|
eSteamErrorRebootRequired = 117,
|
||||||
|
|
||||||
|
eSteamErrorNetwork = 200,
|
||||||
|
eSteamErrorOffline = 201
|
||||||
|
|
||||||
|
|
||||||
|
} ESteamError;
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
eNoDetailedErrorAvailable,
|
||||||
|
eStandardCerrno,
|
||||||
|
eWin32LastError,
|
||||||
|
eWinSockLastError,
|
||||||
|
eDetailedPlatformErrorCount
|
||||||
|
} EDetailedPlatformErrorType;
|
||||||
|
|
||||||
|
typedef enum /* Filter elements returned by SteamFind{First,Next} */
|
||||||
|
{
|
||||||
|
eSteamFindLocalOnly, /* limit search to local filesystem */
|
||||||
|
eSteamFindRemoteOnly, /* limit search to remote repository */
|
||||||
|
eSteamFindAll /* do not limit search (duplicates allowed) */
|
||||||
|
} ESteamFindFilter;
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
**
|
||||||
|
** Exported structure and complex type definitions.
|
||||||
|
**
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
ESteamError eSteamError;
|
||||||
|
EDetailedPlatformErrorType eDetailedErrorType;
|
||||||
|
int nDetailedErrorCode;
|
||||||
|
char szDesc[STEAM_MAX_PATH];
|
||||||
|
} TSteamError;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int bIsDir; /* If non-zero, element is a directory; if zero, element is a file */
|
||||||
|
unsigned int uSizeOrCount; /* If element is a file, this contains size of file in bytes */
|
||||||
|
int bIsLocal; /* If non-zero, reported item is a standalone element on local filesystem */
|
||||||
|
char cszName[STEAM_MAX_PATH]; /* Base element name (no path) */
|
||||||
|
long lLastAccessTime; /* Seconds since 1/1/1970 (like time_t) when element was last accessed */
|
||||||
|
long lLastModificationTime; /* Seconds since 1/1/1970 (like time_t) when element was last modified */
|
||||||
|
long lCreationTime; /* Seconds since 1/1/1970 (like time_t) when element was created */
|
||||||
|
} TSteamElemInfo;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned int uNumSubscriptions;
|
||||||
|
unsigned int uMaxNameChars;
|
||||||
|
unsigned int uMaxApps;
|
||||||
|
|
||||||
|
} TSteamSubscriptionStats;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned int uNumApps;
|
||||||
|
unsigned int uMaxNameChars;
|
||||||
|
unsigned int uMaxInstallDirNameChars;
|
||||||
|
unsigned int uMaxVersionLabelChars;
|
||||||
|
unsigned int uMaxLaunchOptions;
|
||||||
|
unsigned int uMaxLaunchOptionDescChars;
|
||||||
|
unsigned int uMaxLaunchOptionCmdLineChars;
|
||||||
|
unsigned int uMaxNumIcons;
|
||||||
|
unsigned int uMaxIconSize;
|
||||||
|
unsigned int uMaxDependencies;
|
||||||
|
|
||||||
|
} TSteamAppStats;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char *szLabel;
|
||||||
|
unsigned int uMaxLabelChars;
|
||||||
|
unsigned int uVersionId;
|
||||||
|
int bIsNotAvailable;
|
||||||
|
} TSteamAppVersion;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char *szDesc;
|
||||||
|
unsigned int uMaxDescChars;
|
||||||
|
char *szCmdLine;
|
||||||
|
unsigned int uMaxCmdLineChars;
|
||||||
|
unsigned int uIndex;
|
||||||
|
unsigned int uIconIndex;
|
||||||
|
int bNoDesktopShortcut;
|
||||||
|
int bNoStartMenuShortcut;
|
||||||
|
int bIsLongRunningUnattended;
|
||||||
|
|
||||||
|
} TSteamAppLaunchOption;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char *szName;
|
||||||
|
unsigned int uMaxNameChars;
|
||||||
|
char *szLatestVersionLabel;
|
||||||
|
unsigned int uMaxLatestVersionLabelChars;
|
||||||
|
char *szCurrentVersionLabel;
|
||||||
|
unsigned int uMaxCurrentVersionLabelChars;
|
||||||
|
char *szInstallDirName;
|
||||||
|
unsigned int uMaxInstallDirNameChars;
|
||||||
|
unsigned int uId;
|
||||||
|
unsigned int uLatestVersionId;
|
||||||
|
unsigned int uCurrentVersionId;
|
||||||
|
unsigned int uMinCacheFileSizeMB;
|
||||||
|
unsigned int uMaxCacheFileSizeMB;
|
||||||
|
unsigned int uNumLaunchOptions;
|
||||||
|
unsigned int uNumIcons;
|
||||||
|
unsigned int uNumVersions;
|
||||||
|
unsigned int uNumDependencies;
|
||||||
|
|
||||||
|
} TSteamApp;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
eNoCost = 0,
|
||||||
|
eBillOnceOnly = 1,
|
||||||
|
eBillMonthly = 2,
|
||||||
|
eProofOfPrepurchaseOnly = 3,
|
||||||
|
eGuestPass = 4,
|
||||||
|
eHardwarePromo = 5,
|
||||||
|
eNumBillingTypes,
|
||||||
|
} EBillingType;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char *szName;
|
||||||
|
unsigned int uMaxNameChars;
|
||||||
|
unsigned int *puAppIds;
|
||||||
|
unsigned int uMaxAppIds;
|
||||||
|
unsigned int uId;
|
||||||
|
unsigned int uNumApps;
|
||||||
|
EBillingType eBillingType;
|
||||||
|
unsigned int uCostInCents;
|
||||||
|
unsigned int uNumDiscounts;
|
||||||
|
int bIsPreorder;
|
||||||
|
int bRequiresShippingAddress;
|
||||||
|
unsigned int uDomesticShippingCostInCents;
|
||||||
|
unsigned int uInternationalShippingCostInCents;
|
||||||
|
bool bIsCyberCafeSubscription;
|
||||||
|
unsigned int uGameCode;
|
||||||
|
char szGameCodeDesc[STEAM_MAX_PATH];
|
||||||
|
bool bIsDisabled;
|
||||||
|
bool bRequiresCD;
|
||||||
|
unsigned int uTerritoryCode;
|
||||||
|
bool bIsSteam3Subscription;
|
||||||
|
|
||||||
|
} TSteamSubscription;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char szName[STEAM_MAX_PATH];
|
||||||
|
unsigned int uDiscountInCents;
|
||||||
|
unsigned int uNumQualifiers;
|
||||||
|
|
||||||
|
} TSteamSubscriptionDiscount;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char szName[STEAM_MAX_PATH];
|
||||||
|
unsigned int uRequiredSubscription;
|
||||||
|
int bIsDisqualifier;
|
||||||
|
|
||||||
|
} TSteamDiscountQualifier;
|
||||||
|
|
||||||
|
typedef struct TSteamProgress
|
||||||
|
{
|
||||||
|
int bValid; /* non-zero if call provides progress info */
|
||||||
|
unsigned int uPercentDone; /* 0 to 100 * STEAM_PROGRESS_PERCENT_SCALE if bValid */
|
||||||
|
char szProgress[STEAM_MAX_PATH]; /* additional progress info */
|
||||||
|
} TSteamProgress;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
eSteamNotifyTicketsWillExpire,
|
||||||
|
eSteamNotifyAccountInfoChanged,
|
||||||
|
eSteamNotifyContentDescriptionChanged,
|
||||||
|
eSteamNotifyPleaseShutdown,
|
||||||
|
eSteamNotifyNewContentServer,
|
||||||
|
eSteamNotifySubscriptionStatusChanged,
|
||||||
|
eSteamNotifyContentServerConnectionLost,
|
||||||
|
eSteamNotifyCacheLoadingCompleted,
|
||||||
|
eSteamNotifyCacheNeedsDecryption,
|
||||||
|
eSteamNotifyCacheNeedsRepair
|
||||||
|
} ESteamNotificationCallbackEvent;
|
||||||
|
|
||||||
|
|
||||||
|
typedef void(*SteamNotificationCallback_t)(ESteamNotificationCallbackEvent eEvent, unsigned int nData);
|
||||||
|
|
||||||
|
|
||||||
|
typedef char SteamPersonalQuestion_t[ STEAM_QUESTION_MAXLEN + 1 ];
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned char uchSalt[STEAM_SALT_SIZE];
|
||||||
|
} SteamSalt_t;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
eVisa = 1,
|
||||||
|
eMaster = 2,
|
||||||
|
eAmericanExpress = 3,
|
||||||
|
eDiscover = 4,
|
||||||
|
eDinnersClub = 5,
|
||||||
|
eJCB = 6
|
||||||
|
} ESteamPaymentCardType;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
ESteamPaymentCardType eCardType;
|
||||||
|
char szCardNumber[ STEAM_CARD_NUMBER_SIZE +1 ];
|
||||||
|
char szCardHolderName[ STEAM_CARD_HOLDERNAME_SIZE + 1];
|
||||||
|
char szCardExpYear[ STEAM_CARD_EXPYEAR_SIZE + 1 ];
|
||||||
|
char szCardExpMonth[ STEAM_CARD_EXPMONTH_SIZE+ 1 ];
|
||||||
|
char szCardCVV2[ STEAM_CARD_CVV2_SIZE + 1 ];
|
||||||
|
char szBillingAddress1[ STEAM_BILLING_ADDRESS1_SIZE + 1 ];
|
||||||
|
char szBillingAddress2[ STEAM_BILLING_ADDRESS2_SIZE + 1 ];
|
||||||
|
char szBillingCity[ STEAM_BILLING_CITY_SIZE + 1 ];
|
||||||
|
char szBillingZip[ STEAM_BILLING_ZIP_SIZE + 1 ];
|
||||||
|
char szBillingState[ STEAM_BILLING_STATE_SIZE + 1 ];
|
||||||
|
char szBillingCountry[ STEAM_BILLING_COUNTRY_SIZE + 1 ];
|
||||||
|
char szBillingPhone[ STEAM_BILLING_PHONE_SIZE + 1 ];
|
||||||
|
char szBillingEmailAddress[ STEAM_BILLING_EMAIL_ADDRESS_SIZE + 1 ];
|
||||||
|
unsigned int uExpectedCostInCents;
|
||||||
|
unsigned int uExpectedTaxInCents;
|
||||||
|
/* If the TSteamSubscription says that shipping info is required, */
|
||||||
|
/* then the following fields must be filled out. */
|
||||||
|
/* If szShippingName is empty, then assumes so are the rest. */
|
||||||
|
char szShippingName[ STEAM_CARD_HOLDERNAME_SIZE + 1];
|
||||||
|
char szShippingAddress1[ STEAM_BILLING_ADDRESS1_SIZE + 1 ];
|
||||||
|
char szShippingAddress2[ STEAM_BILLING_ADDRESS2_SIZE + 1 ];
|
||||||
|
char szShippingCity[ STEAM_BILLING_CITY_SIZE + 1 ];
|
||||||
|
char szShippingZip[ STEAM_BILLING_ZIP_SIZE + 1 ];
|
||||||
|
char szShippingState[ STEAM_BILLING_STATE_SIZE + 1 ];
|
||||||
|
char szShippingCountry[ STEAM_BILLING_COUNTRY_SIZE + 1 ];
|
||||||
|
char szShippingPhone[ STEAM_BILLING_PHONE_SIZE + 1 ];
|
||||||
|
unsigned int uExpectedShippingCostInCents;
|
||||||
|
|
||||||
|
} TSteamPaymentCardInfo;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char szTypeOfProofOfPurchase[ STEAM_TYPE_OF_PROOF_OF_PURCHASE_SIZE + 1 ];
|
||||||
|
|
||||||
|
/* A ProofOfPurchase token is not necessarily a nul-terminated string; it may be binary data
|
||||||
|
(perhaps encrypted). Hence we need a length and an array of bytes. */
|
||||||
|
unsigned int uLengthOfBinaryProofOfPurchaseToken;
|
||||||
|
char cBinaryProofOfPurchaseToken[ STEAM_PROOF_OF_PURCHASE_TOKEN_SIZE + 1 ];
|
||||||
|
} TSteamPrepurchaseInfo;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char szAccountName[ STEAM_EXTERNAL_ACCOUNTNAME_SIZE + 1 ];
|
||||||
|
char szPassword[ STEAM_EXTERNAL_ACCOUNTPASSWORD_SIZE + 1 ];
|
||||||
|
} TSteamExternalBillingInfo;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
ePaymentCardInfo = 1,
|
||||||
|
ePrepurchasedInfo = 2,
|
||||||
|
eAccountBillingInfo = 3,
|
||||||
|
eExternalBillingInfo = 4, /* indirect billing via ISP etc (not supported yet) */
|
||||||
|
ePaymentCardReceipt = 5,
|
||||||
|
ePrepurchaseReceipt = 6,
|
||||||
|
eEmptyReceipt = 7
|
||||||
|
} ESteamSubscriptionBillingInfoType;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
ESteamSubscriptionBillingInfoType eBillingInfoType;
|
||||||
|
union {
|
||||||
|
TSteamPaymentCardInfo PaymentCardInfo;
|
||||||
|
TSteamPrepurchaseInfo PrepurchaseInfo;
|
||||||
|
TSteamExternalBillingInfo ExternalBillingInfo;
|
||||||
|
char bUseAccountBillingInfo;
|
||||||
|
};
|
||||||
|
|
||||||
|
} TSteamSubscriptionBillingInfo;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
/* Subscribed */
|
||||||
|
eSteamSubscriptionOK = 0, /* Subscribed */
|
||||||
|
eSteamSubscriptionPending = 1, /* Awaiting transaction completion */
|
||||||
|
eSteamSubscriptionPreorder = 2, /* Is currently a pre-order */
|
||||||
|
eSteamSubscriptionPrepurchaseTransferred = 3, /* hop to this account */
|
||||||
|
/* Unusbscribed */
|
||||||
|
eSteamSubscriptionPrepurchaseInvalid = 4, /* Invalid cd-key */
|
||||||
|
eSteamSubscriptionPrepurchaseRejected = 5, /* hopped out / banned / etc */
|
||||||
|
eSteamSubscriptionPrepurchaseRevoked = 6, /* hop away from this account */
|
||||||
|
eSteamSubscriptionPaymentCardDeclined = 7, /* CC txn declined */
|
||||||
|
eSteamSubscriptionCancelledByUser = 8, /* Cancelled by client */
|
||||||
|
eSteamSubscriptionCancelledByVendor = 9, /* Cancelled by us */
|
||||||
|
eSteamSubscriptionPaymentCardUseLimit = 10, /* Card used too many times, potential fraud */
|
||||||
|
eSteamSubscriptionPaymentCardAlert = 11, /* Got a "pick up card" or the like from bank */
|
||||||
|
eSteamSubscriptionFailed = 12, /* Other Error in subscription data or transaction failed/lost */
|
||||||
|
eSteamSubscriptionPaymentCardAVSFailure = 13, /* Card failed Address Verification check */
|
||||||
|
eSteamSubscriptionPaymentCardInsufficientFunds = 14, /* Card failed due to insufficient funds */
|
||||||
|
eSteamSubscriptionRestrictedCountry = 15 /* The subscription is not available in the user's country */
|
||||||
|
|
||||||
|
} ESteamSubscriptionStatus;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
ESteamPaymentCardType eCardType;
|
||||||
|
char szCardLastFourDigits[ 4 + 1 ];
|
||||||
|
char szCardHolderName[ STEAM_CARD_HOLDERNAME_SIZE + 1];
|
||||||
|
char szBillingAddress1[ STEAM_BILLING_ADDRESS1_SIZE + 1 ];
|
||||||
|
char szBillingAddress2[ STEAM_BILLING_ADDRESS2_SIZE + 1 ];
|
||||||
|
char szBillingCity[ STEAM_BILLING_CITY_SIZE + 1 ];
|
||||||
|
char szBillingZip[ STEAM_BILLING_ZIP_SIZE + 1 ];
|
||||||
|
char szBillingState[ STEAM_BILLING_STATE_SIZE + 1 ];
|
||||||
|
char szBillingCountry[ STEAM_BILLING_COUNTRY_SIZE + 1 ];
|
||||||
|
|
||||||
|
// The following are only available after the subscription leaves "pending" status
|
||||||
|
char szCardApprovalCode[ STEAM_BILLING_CARD_APPROVAL_CODE_SIZE + 1];
|
||||||
|
char szTransDate[ STEAM_BILLING_TRANS_DATE_SIZE + 1]; /* mm/dd/yy */
|
||||||
|
char szTransTime[ STEAM_BILLING_TRANS_TIME_SIZE + 1]; /* hh:mm:ss */
|
||||||
|
unsigned int uPriceWithoutTax;
|
||||||
|
unsigned int uTaxAmount;
|
||||||
|
unsigned int uShippingCost;
|
||||||
|
|
||||||
|
} TSteamPaymentCardReceiptInfo;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char szTypeOfProofOfPurchase[ STEAM_TYPE_OF_PROOF_OF_PURCHASE_SIZE + 1 ];
|
||||||
|
} TSteamPrepurchaseReceiptInfo;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
ESteamSubscriptionStatus eStatus;
|
||||||
|
ESteamSubscriptionStatus ePreviousStatus;
|
||||||
|
ESteamSubscriptionBillingInfoType eReceiptInfoType;
|
||||||
|
char szConfirmationCode[ STEAM_BILLING_CONFIRMATION_CODE_SIZE + 1];
|
||||||
|
union {
|
||||||
|
TSteamPaymentCardReceiptInfo PaymentCardReceiptInfo;
|
||||||
|
TSteamPrepurchaseReceiptInfo PrepurchaseReceiptInfo;
|
||||||
|
};
|
||||||
|
|
||||||
|
} TSteamSubscriptionReceipt;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
ePhysicalBytesReceivedThisSession = 1,
|
||||||
|
eAppReadyToLaunchStatus = 2,
|
||||||
|
eAppPreloadStatus = 3,
|
||||||
|
eAppEntireDepot = 4,
|
||||||
|
eCacheBytesPresent = 5
|
||||||
|
} ESteamAppUpdateStatsQueryType;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
SteamUnsigned64_t uBytesTotal;
|
||||||
|
SteamUnsigned64_t uBytesPresent;
|
||||||
|
} TSteamUpdateStats;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
eSteamUserAdministrator = 0x00000001, /* May subscribe, unsubscribe, etc */
|
||||||
|
eSteamUserDeveloper = 0x00000002, /* Steam or App developer */
|
||||||
|
eSteamUserCyberCafe = 0x00000004 /* CyberCafe, school, etc -- UI should ask for password */
|
||||||
|
/* before allowing logout, unsubscribe, etc */
|
||||||
|
} ESteamUserTypeFlags;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
eSteamAccountStatusDefault = 0x00000000,
|
||||||
|
eSteamAccountStatusEmailVerified = 0x00000001,
|
||||||
|
/* Note: Mask value 0x2 is reserved for future use. (Some, but not all, public accounts already have this set.) */
|
||||||
|
eSteamAccountDisabled = 0x00000004
|
||||||
|
} ESteamAccountStatusBitFields ;
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
eSteamBootstrapperError = -1,
|
||||||
|
eSteamBootstrapperDontCheckForUpdate = 0,
|
||||||
|
eSteamBootstrapperCheckForUpdateAndRerun = 7
|
||||||
|
|
||||||
|
} ESteamBootStrapperClientAppResult;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
eSteamOnline = 0,
|
||||||
|
eSteamOffline = 1,
|
||||||
|
eSteamNoAuthMode = 2,
|
||||||
|
eSteamBillingOffline = 3
|
||||||
|
} eSteamOfflineStatus;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int eOfflineNow;
|
||||||
|
int eOfflineNextSession;
|
||||||
|
} TSteamOfflineStatus;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned int uAppId;
|
||||||
|
int bIsSystemDefined;
|
||||||
|
char szMountPath[STEAM_MAX_PATH];
|
||||||
|
} TSteamAppDependencyInfo;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
eSteamOpenFileRegular = 0x0,
|
||||||
|
eSteamOpenFileIgnoreLocal = 0x1,
|
||||||
|
eSteamOpenFileChecksumReads = 0x2
|
||||||
|
} ESteamOpenFileFlags;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
eSteamValveCDKeyValidationServer = 0,
|
||||||
|
eSteamHalfLifeMasterServer = 1,
|
||||||
|
eSteamFriendsServer = 2,
|
||||||
|
eSteamCSERServer = 3,
|
||||||
|
eSteamHalfLife2MasterServer = 4,
|
||||||
|
eSteamRDKFMasterServer = 5,
|
||||||
|
eMaxServerTypes = 6
|
||||||
|
} ESteamServerType;
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
**
|
||||||
|
** More exported constants
|
||||||
|
**
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
|
||||||
|
const SteamHandle_t STEAM_INVALID_HANDLE = 0;
|
||||||
|
const SteamCallHandle_t STEAM_INVALID_CALL_HANDLE = 0;
|
||||||
|
const SteamUserIDTicketValidationHandle_t STEAM_INACTIVE_USERIDTICKET_VALIDATION_HANDLE = 0;
|
||||||
|
const unsigned int STEAM_USE_LATEST_VERSION = 0xFFFFFFFF;
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define STEAM_INVALID_HANDLE ((SteamHandle_t)(0))
|
||||||
|
#define STEAM_INVALID_CALL_HANDLE ((SteamCallHandle_t)(0))
|
||||||
|
#define STEAM_INACTIVE_USERIDTICKET_VALIDATION_HANDLE ((SteamUserIDTicketValidationHandle_t)(0))
|
||||||
|
#define STEAM_USE_LATEST_VERSION (0xFFFFFFFFu);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
** Each Steam instance (licensed Steam Service Provider) has a unique SteamInstanceID_t.
|
||||||
|
**
|
||||||
|
** Each Steam instance as its own DB of users.
|
||||||
|
** Each user in the DB has a unique SteamLocalUserID_t (a serial number, with possible
|
||||||
|
** rare gaps in the sequence).
|
||||||
|
**
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
typedef unsigned short SteamInstanceID_t; // MUST be 16 bits
|
||||||
|
|
||||||
|
|
||||||
|
#if defined ( _WIN32 )
|
||||||
|
typedef unsigned __int64 SteamLocalUserID_t; // MUST be 64 bits
|
||||||
|
#else
|
||||||
|
typedef unsigned long long SteamLocalUserID_t; // MUST be 64 bits
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
**
|
||||||
|
** Applications need to be able to authenticate Steam users from ANY instance.
|
||||||
|
** So a SteamIDTicket contains SteamGlobalUserID, which is a unique combination of
|
||||||
|
** instance and user id.
|
||||||
|
**
|
||||||
|
** SteamLocalUserID is an unsigned 64-bit integer.
|
||||||
|
** For platforms without 64-bit int support, we provide access via a union that splits it into
|
||||||
|
** high and low unsigned 32-bit ints. Such platforms will only need to compare LocalUserIDs
|
||||||
|
** for equivalence anyway - not perform arithmetic with them.
|
||||||
|
**
|
||||||
|
********************************************************************************/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned int Low32bits;
|
||||||
|
unsigned int High32bits;
|
||||||
|
} TSteamSplitLocalUserID;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
SteamInstanceID_t m_SteamInstanceID;
|
||||||
|
|
||||||
|
union
|
||||||
|
{
|
||||||
|
SteamLocalUserID_t As64bits;
|
||||||
|
TSteamSplitLocalUserID Split;
|
||||||
|
} m_SteamLocalUserID;
|
||||||
|
|
||||||
|
} TSteamGlobalUserID;
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
324
metamod/extra/example/include/hlsdk/common/TextConsoleUnix.cpp
Normal file
324
metamod/extra/example/include/hlsdk/common/TextConsoleUnix.cpp
Normal file
@ -0,0 +1,324 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 2 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "precompiled.h"
|
||||||
|
|
||||||
|
#if !defined(_WIN32)
|
||||||
|
|
||||||
|
#include "TextConsoleUnix.h"
|
||||||
|
#include "icommandline.h"
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <signal.h>
|
||||||
|
|
||||||
|
CTextConsoleUnix console;
|
||||||
|
|
||||||
|
CTextConsoleUnix::~CTextConsoleUnix()
|
||||||
|
{
|
||||||
|
CTextConsoleUnix::ShutDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CTextConsoleUnix::Init(IBaseSystem *system)
|
||||||
|
{
|
||||||
|
static struct termios termNew;
|
||||||
|
sigset_t block_ttou;
|
||||||
|
|
||||||
|
sigemptyset(&block_ttou);
|
||||||
|
sigaddset(&block_ttou, SIGTTOU);
|
||||||
|
sigprocmask(SIG_BLOCK, &block_ttou, NULL);
|
||||||
|
|
||||||
|
tty = stdout;
|
||||||
|
|
||||||
|
// this code is for echo-ing key presses to the connected tty
|
||||||
|
// (which is != STDOUT)
|
||||||
|
if (isatty(STDIN_FILENO))
|
||||||
|
{
|
||||||
|
tty = fopen(ctermid(NULL), "w+");
|
||||||
|
if (!tty)
|
||||||
|
{
|
||||||
|
printf("Unable to open tty(%s) for output\n", ctermid(NULL));
|
||||||
|
tty = stdout;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// turn buffering off
|
||||||
|
setbuf(tty, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tty = fopen("/dev/null", "w+");
|
||||||
|
if (!tty)
|
||||||
|
{
|
||||||
|
tty = stdout;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tcgetattr(STDIN_FILENO, &termStored);
|
||||||
|
|
||||||
|
memcpy(&termNew, &termStored, sizeof(struct termios));
|
||||||
|
|
||||||
|
// Disable canonical mode, and set buffer size to 1 byte
|
||||||
|
termNew.c_lflag &= (~ICANON);
|
||||||
|
termNew.c_cc[ VMIN ] = 1;
|
||||||
|
termNew.c_cc[ VTIME ] = 0;
|
||||||
|
|
||||||
|
// disable echo
|
||||||
|
termNew.c_lflag &= (~ECHO);
|
||||||
|
|
||||||
|
tcsetattr(STDIN_FILENO, TCSANOW, &termNew);
|
||||||
|
sigprocmask(SIG_UNBLOCK, &block_ttou, NULL);
|
||||||
|
|
||||||
|
return CTextConsole::Init(system);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTextConsoleUnix::ShutDown()
|
||||||
|
{
|
||||||
|
sigset_t block_ttou;
|
||||||
|
|
||||||
|
sigemptyset(&block_ttou);
|
||||||
|
sigaddset(&block_ttou, SIGTTOU);
|
||||||
|
sigprocmask(SIG_BLOCK, &block_ttou, NULL);
|
||||||
|
tcsetattr(STDIN_FILENO, TCSANOW, &termStored);
|
||||||
|
sigprocmask(SIG_UNBLOCK, &block_ttou, NULL);
|
||||||
|
|
||||||
|
CTextConsole::ShutDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
// return 0 if the kb isn't hit
|
||||||
|
int CTextConsoleUnix::kbhit()
|
||||||
|
{
|
||||||
|
fd_set rfds;
|
||||||
|
struct timeval tv;
|
||||||
|
|
||||||
|
// Watch stdin (fd 0) to see when it has input.
|
||||||
|
FD_ZERO(&rfds);
|
||||||
|
FD_SET(STDIN_FILENO, &rfds);
|
||||||
|
|
||||||
|
// Return immediately.
|
||||||
|
tv.tv_sec = 0;
|
||||||
|
tv.tv_usec = 0;
|
||||||
|
|
||||||
|
// Must be in raw or cbreak mode for this to work correctly.
|
||||||
|
return select(STDIN_FILENO + 1, &rfds, NULL, NULL, &tv) != -1 && FD_ISSET(STDIN_FILENO, &rfds);
|
||||||
|
}
|
||||||
|
|
||||||
|
char *CTextConsoleUnix::GetLine()
|
||||||
|
{
|
||||||
|
// early return for 99.999% case :)
|
||||||
|
if (!kbhit())
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
escape_sequence_t es;
|
||||||
|
|
||||||
|
es = ESCAPE_CLEAR;
|
||||||
|
sigset_t block_ttou;
|
||||||
|
|
||||||
|
sigemptyset(&block_ttou);
|
||||||
|
sigaddset(&block_ttou, SIGTTOU);
|
||||||
|
sigaddset(&block_ttou, SIGTTIN);
|
||||||
|
sigprocmask(SIG_BLOCK, &block_ttou, NULL);
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
if (!kbhit())
|
||||||
|
break;
|
||||||
|
|
||||||
|
int nLen;
|
||||||
|
char ch = 0;
|
||||||
|
int numRead = read(STDIN_FILENO, &ch, 1);
|
||||||
|
if (!numRead)
|
||||||
|
break;
|
||||||
|
|
||||||
|
switch (ch)
|
||||||
|
{
|
||||||
|
case '\n': // Enter
|
||||||
|
es = ESCAPE_CLEAR;
|
||||||
|
|
||||||
|
nLen = ReceiveNewline();
|
||||||
|
if (nLen)
|
||||||
|
{
|
||||||
|
sigprocmask(SIG_UNBLOCK, &block_ttou, NULL);
|
||||||
|
return m_szConsoleText;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 127: // Backspace
|
||||||
|
case '\b': // Backspace
|
||||||
|
es = ESCAPE_CLEAR;
|
||||||
|
ReceiveBackspace();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '\t': // TAB
|
||||||
|
es = ESCAPE_CLEAR;
|
||||||
|
ReceiveTab();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 27: // Escape character
|
||||||
|
es = ESCAPE_RECEIVED;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '[': // 2nd part of escape sequence
|
||||||
|
case 'O':
|
||||||
|
case 'o':
|
||||||
|
switch (es)
|
||||||
|
{
|
||||||
|
case ESCAPE_CLEAR:
|
||||||
|
case ESCAPE_BRACKET_RECEIVED:
|
||||||
|
es = ESCAPE_CLEAR;
|
||||||
|
ReceiveStandardChar(ch);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ESCAPE_RECEIVED:
|
||||||
|
es = ESCAPE_BRACKET_RECEIVED;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'A':
|
||||||
|
if (es == ESCAPE_BRACKET_RECEIVED)
|
||||||
|
{
|
||||||
|
es = ESCAPE_CLEAR;
|
||||||
|
ReceiveUpArrow();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
es = ESCAPE_CLEAR;
|
||||||
|
ReceiveStandardChar(ch);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'B':
|
||||||
|
if (es == ESCAPE_BRACKET_RECEIVED)
|
||||||
|
{
|
||||||
|
es = ESCAPE_CLEAR;
|
||||||
|
ReceiveDownArrow();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
es = ESCAPE_CLEAR;
|
||||||
|
ReceiveStandardChar(ch);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'C':
|
||||||
|
if (es == ESCAPE_BRACKET_RECEIVED)
|
||||||
|
{
|
||||||
|
es = ESCAPE_CLEAR;
|
||||||
|
ReceiveRightArrow();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
es = ESCAPE_CLEAR;
|
||||||
|
ReceiveStandardChar(ch);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'D':
|
||||||
|
if (es == ESCAPE_BRACKET_RECEIVED)
|
||||||
|
{
|
||||||
|
es = ESCAPE_CLEAR;
|
||||||
|
ReceiveLeftArrow();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
es = ESCAPE_CLEAR;
|
||||||
|
ReceiveStandardChar(ch);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// Just eat this char if it's an unsupported escape
|
||||||
|
if (es != ESCAPE_BRACKET_RECEIVED)
|
||||||
|
{
|
||||||
|
// dont' accept nonprintable chars
|
||||||
|
if ((ch >= ' ') && (ch <= '~'))
|
||||||
|
{
|
||||||
|
es = ESCAPE_CLEAR;
|
||||||
|
ReceiveStandardChar(ch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
fflush(stdout);
|
||||||
|
}
|
||||||
|
|
||||||
|
sigprocmask(SIG_UNBLOCK, &block_ttou, NULL);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTextConsoleUnix::PrintRaw(char *pszMsg, int nChars)
|
||||||
|
{
|
||||||
|
if (nChars == 0)
|
||||||
|
{
|
||||||
|
printf("%s", pszMsg);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (int nCount = 0; nCount < nChars; nCount++)
|
||||||
|
{
|
||||||
|
putchar(pszMsg[ nCount ]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTextConsoleUnix::Echo(char *pszMsg, int nChars)
|
||||||
|
{
|
||||||
|
if (nChars == 0)
|
||||||
|
{
|
||||||
|
fputs(pszMsg, tty);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (int nCount = 0; nCount < nChars; nCount++)
|
||||||
|
{
|
||||||
|
fputc(pszMsg[ nCount ], tty);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int CTextConsoleUnix::GetWidth()
|
||||||
|
{
|
||||||
|
struct winsize ws;
|
||||||
|
int nWidth = 0;
|
||||||
|
|
||||||
|
if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws) == 0)
|
||||||
|
{
|
||||||
|
nWidth = (int)ws.ws_col;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nWidth <= 1)
|
||||||
|
{
|
||||||
|
nWidth = 80;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // !defined(_WIN32)
|
59
metamod/extra/example/include/hlsdk/common/TextConsoleUnix.h
Normal file
59
metamod/extra/example/include/hlsdk/common/TextConsoleUnix.h
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 2 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <termios.h>
|
||||||
|
#include "textconsole.h"
|
||||||
|
|
||||||
|
enum escape_sequence_t
|
||||||
|
{
|
||||||
|
ESCAPE_CLEAR,
|
||||||
|
ESCAPE_RECEIVED,
|
||||||
|
ESCAPE_BRACKET_RECEIVED
|
||||||
|
};
|
||||||
|
|
||||||
|
class CTextConsoleUnix: public CTextConsole {
|
||||||
|
public:
|
||||||
|
virtual ~CTextConsoleUnix();
|
||||||
|
|
||||||
|
bool Init(IBaseSystem *system = nullptr);
|
||||||
|
void ShutDown();
|
||||||
|
void PrintRaw(char *pszMsg, int nChars = 0);
|
||||||
|
void Echo(char *pszMsg, int nChars = 0);
|
||||||
|
char *GetLine();
|
||||||
|
int GetWidth();
|
||||||
|
|
||||||
|
private:
|
||||||
|
int kbhit();
|
||||||
|
|
||||||
|
struct termios termStored;
|
||||||
|
FILE *tty;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern CTextConsoleUnix console;
|
282
metamod/extra/example/include/hlsdk/common/TextConsoleWin32.cpp
Normal file
282
metamod/extra/example/include/hlsdk/common/TextConsoleWin32.cpp
Normal file
@ -0,0 +1,282 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 2 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "precompiled.h"
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
|
||||||
|
CTextConsoleWin32 console;
|
||||||
|
#pragma comment(lib, "user32.lib")
|
||||||
|
|
||||||
|
BOOL WINAPI ConsoleHandlerRoutine(DWORD CtrlType)
|
||||||
|
{
|
||||||
|
// TODO ?
|
||||||
|
/*if (CtrlType != CTRL_C_EVENT && CtrlType != CTRL_BREAK_EVENT)
|
||||||
|
{
|
||||||
|
// don't quit on break or ctrl+c
|
||||||
|
m_System->Stop();
|
||||||
|
}*/
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetConsoleHwnd() helper function from MSDN Knowledge Base Article Q124103
|
||||||
|
// needed, because HWND GetConsoleWindow(VOID) is not avaliable under Win95/98/ME
|
||||||
|
HWND GetConsoleHwnd()
|
||||||
|
{
|
||||||
|
HWND hwndFound; // This is what is returned to the caller.
|
||||||
|
char pszNewWindowTitle[1024]; // Contains fabricated WindowTitle
|
||||||
|
char pszOldWindowTitle[1024]; // Contains original WindowTitle
|
||||||
|
|
||||||
|
// Fetch current window title.
|
||||||
|
GetConsoleTitle(pszOldWindowTitle, sizeof(pszOldWindowTitle));
|
||||||
|
|
||||||
|
// Format a "unique" NewWindowTitle.
|
||||||
|
wsprintf(pszNewWindowTitle, "%d/%d", GetTickCount(), GetCurrentProcessId());
|
||||||
|
|
||||||
|
// Change current window title.
|
||||||
|
SetConsoleTitle(pszNewWindowTitle);
|
||||||
|
|
||||||
|
// Ensure window title has been updated.
|
||||||
|
Sleep(40);
|
||||||
|
|
||||||
|
// Look for NewWindowTitle.
|
||||||
|
hwndFound = FindWindow(nullptr, pszNewWindowTitle);
|
||||||
|
|
||||||
|
// Restore original window title.
|
||||||
|
SetConsoleTitle(pszOldWindowTitle);
|
||||||
|
|
||||||
|
return hwndFound;
|
||||||
|
}
|
||||||
|
|
||||||
|
CTextConsoleWin32::~CTextConsoleWin32()
|
||||||
|
{
|
||||||
|
CTextConsoleWin32::ShutDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CTextConsoleWin32::Init(IBaseSystem *system)
|
||||||
|
{
|
||||||
|
if (!AllocConsole())
|
||||||
|
m_System = system;
|
||||||
|
|
||||||
|
SetTitle(m_System ? m_System->GetName() : "Console");
|
||||||
|
|
||||||
|
hinput = GetStdHandle(STD_INPUT_HANDLE);
|
||||||
|
houtput = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||||
|
|
||||||
|
if (!SetConsoleCtrlHandler(&ConsoleHandlerRoutine, TRUE)) {
|
||||||
|
Print("WARNING! TextConsole::Init: Could not attach console hook.\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
Attrib = FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_INTENSITY;
|
||||||
|
SetWindowPos(GetConsoleHwnd(), HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOREPOSITION | SWP_SHOWWINDOW);
|
||||||
|
|
||||||
|
return CTextConsole::Init(system);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTextConsoleWin32::ShutDown()
|
||||||
|
{
|
||||||
|
FreeConsole();
|
||||||
|
CTextConsole::ShutDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTextConsoleWin32::SetVisible(bool visible)
|
||||||
|
{
|
||||||
|
ShowWindow(GetConsoleHwnd(), visible ? SW_SHOW : SW_HIDE);
|
||||||
|
m_ConsoleVisible = visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *CTextConsoleWin32::GetLine()
|
||||||
|
{
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
INPUT_RECORD recs[1024];
|
||||||
|
unsigned long numread;
|
||||||
|
unsigned long numevents;
|
||||||
|
|
||||||
|
if (!GetNumberOfConsoleInputEvents(hinput, &numevents))
|
||||||
|
{
|
||||||
|
if (m_System) {
|
||||||
|
m_System->Errorf("CTextConsoleWin32::GetLine: !GetNumberOfConsoleInputEvents\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (numevents <= 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (!ReadConsoleInput(hinput, recs, ARRAYSIZE(recs), &numread))
|
||||||
|
{
|
||||||
|
if (m_System) {
|
||||||
|
m_System->Errorf("CTextConsoleWin32::GetLine: !ReadConsoleInput\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (numread == 0)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
for (int i = 0; i < (int)numread; i++)
|
||||||
|
{
|
||||||
|
INPUT_RECORD *pRec = &recs[i];
|
||||||
|
if (pRec->EventType != KEY_EVENT)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (pRec->Event.KeyEvent.bKeyDown)
|
||||||
|
{
|
||||||
|
// check for cursor keys
|
||||||
|
if (pRec->Event.KeyEvent.wVirtualKeyCode == VK_UP)
|
||||||
|
{
|
||||||
|
ReceiveUpArrow();
|
||||||
|
}
|
||||||
|
else if (pRec->Event.KeyEvent.wVirtualKeyCode == VK_DOWN)
|
||||||
|
{
|
||||||
|
ReceiveDownArrow();
|
||||||
|
}
|
||||||
|
else if (pRec->Event.KeyEvent.wVirtualKeyCode == VK_LEFT)
|
||||||
|
{
|
||||||
|
ReceiveLeftArrow();
|
||||||
|
}
|
||||||
|
else if (pRec->Event.KeyEvent.wVirtualKeyCode == VK_RIGHT)
|
||||||
|
{
|
||||||
|
ReceiveRightArrow();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int nLen;
|
||||||
|
char ch = pRec->Event.KeyEvent.uChar.AsciiChar;
|
||||||
|
switch (ch)
|
||||||
|
{
|
||||||
|
case '\r': // Enter
|
||||||
|
nLen = ReceiveNewline();
|
||||||
|
if (nLen)
|
||||||
|
{
|
||||||
|
return m_szConsoleText;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case '\b': // Backspace
|
||||||
|
ReceiveBackspace();
|
||||||
|
break;
|
||||||
|
case '\t': // TAB
|
||||||
|
ReceiveTab();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// dont' accept nonprintable chars
|
||||||
|
if ((ch >= ' ') && (ch <= '~'))
|
||||||
|
{
|
||||||
|
ReceiveStandardChar(ch);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTextConsoleWin32::PrintRaw(char *pszMsg, int nChars)
|
||||||
|
{
|
||||||
|
#ifdef LAUNCHER_FIXES
|
||||||
|
char outputStr[2048];
|
||||||
|
WCHAR unicodeStr[1024];
|
||||||
|
|
||||||
|
DWORD nSize = MultiByteToWideChar(CP_UTF8, 0, pszMsg, -1, NULL, 0);
|
||||||
|
if (nSize > sizeof(unicodeStr))
|
||||||
|
return;
|
||||||
|
|
||||||
|
MultiByteToWideChar(CP_UTF8, 0, pszMsg, -1, unicodeStr, nSize);
|
||||||
|
DWORD nLength = WideCharToMultiByte(CP_OEMCP, 0, unicodeStr, -1, 0, 0, NULL, NULL);
|
||||||
|
if (nLength > sizeof(outputStr))
|
||||||
|
return;
|
||||||
|
|
||||||
|
WideCharToMultiByte(CP_OEMCP, 0, unicodeStr, -1, outputStr, nLength, NULL, NULL);
|
||||||
|
WriteFile(houtput, outputStr, nChars ? nChars : strlen(outputStr), NULL, NULL);
|
||||||
|
#else
|
||||||
|
WriteFile(houtput, pszMsg, nChars ? nChars : strlen(pszMsg), NULL, NULL);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTextConsoleWin32::Echo(char *pszMsg, int nChars)
|
||||||
|
{
|
||||||
|
PrintRaw(pszMsg, nChars);
|
||||||
|
}
|
||||||
|
|
||||||
|
int CTextConsoleWin32::GetWidth()
|
||||||
|
{
|
||||||
|
CONSOLE_SCREEN_BUFFER_INFO csbi;
|
||||||
|
int nWidth = 0;
|
||||||
|
|
||||||
|
if (GetConsoleScreenBufferInfo(houtput, &csbi)) {
|
||||||
|
nWidth = csbi.dwSize.X;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nWidth <= 1)
|
||||||
|
nWidth = 80;
|
||||||
|
|
||||||
|
return nWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTextConsoleWin32::SetStatusLine(char *pszStatus)
|
||||||
|
{
|
||||||
|
strncpy(statusline, pszStatus, sizeof(statusline) - 1);
|
||||||
|
statusline[sizeof(statusline) - 2] = '\0';
|
||||||
|
UpdateStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTextConsoleWin32::UpdateStatus()
|
||||||
|
{
|
||||||
|
COORD coord;
|
||||||
|
DWORD dwWritten = 0;
|
||||||
|
WORD wAttrib[ 80 ];
|
||||||
|
|
||||||
|
for (int i = 0; i < 80; i++)
|
||||||
|
{
|
||||||
|
wAttrib[i] = Attrib; // FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_INTENSITY;
|
||||||
|
}
|
||||||
|
|
||||||
|
coord.X = coord.Y = 0;
|
||||||
|
|
||||||
|
WriteConsoleOutputAttribute(houtput, wAttrib, 80, coord, &dwWritten);
|
||||||
|
WriteConsoleOutputCharacter(houtput, statusline, 80, coord, &dwWritten);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTextConsoleWin32::SetTitle(char *pszTitle)
|
||||||
|
{
|
||||||
|
SetConsoleTitle(pszTitle);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTextConsoleWin32::SetColor(WORD attrib)
|
||||||
|
{
|
||||||
|
Attrib = attrib;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // defined(_WIN32)
|
@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 2 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||||
|
#include <windows.h>
|
||||||
|
#include "TextConsole.h"
|
||||||
|
|
||||||
|
class CTextConsoleWin32: public CTextConsole {
|
||||||
|
public:
|
||||||
|
virtual ~CTextConsoleWin32();
|
||||||
|
|
||||||
|
bool Init(IBaseSystem *system = nullptr);
|
||||||
|
void ShutDown();
|
||||||
|
|
||||||
|
void SetTitle(char *pszTitle);
|
||||||
|
void SetStatusLine(char *pszStatus);
|
||||||
|
void UpdateStatus();
|
||||||
|
|
||||||
|
void PrintRaw(char * pszMsz, int nChars = 0);
|
||||||
|
void Echo(char * pszMsz, int nChars = 0);
|
||||||
|
char *GetLine();
|
||||||
|
int GetWidth();
|
||||||
|
|
||||||
|
void SetVisible(bool visible);
|
||||||
|
void SetColor(WORD);
|
||||||
|
|
||||||
|
private:
|
||||||
|
HANDLE hinput; // standard input handle
|
||||||
|
HANDLE houtput; // standard output handle
|
||||||
|
WORD Attrib; // attrib colours for status bar
|
||||||
|
|
||||||
|
char statusline[81]; // first line in console is status line
|
||||||
|
};
|
||||||
|
|
||||||
|
extern CTextConsoleWin32 console;
|
132
metamod/extra/example/include/hlsdk/common/TokenLine.cpp
Normal file
132
metamod/extra/example/include/hlsdk/common/TokenLine.cpp
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
#include "precompiled.h"
|
||||||
|
|
||||||
|
TokenLine::TokenLine()
|
||||||
|
{
|
||||||
|
memset(m_token, 0, sizeof(m_token));
|
||||||
|
memset(m_fullLine, 0, sizeof(m_fullLine));
|
||||||
|
memset(m_tokenBuffer, 0, sizeof(m_tokenBuffer));
|
||||||
|
|
||||||
|
m_tokenNumber = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
TokenLine::TokenLine(char *string)
|
||||||
|
{
|
||||||
|
SetLine(string);
|
||||||
|
}
|
||||||
|
|
||||||
|
TokenLine::~TokenLine()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TokenLine::SetLine(const char *newLine)
|
||||||
|
{
|
||||||
|
m_tokenNumber = 0;
|
||||||
|
|
||||||
|
if (!newLine || (strlen(newLine) >= (MAX_LINE_CHARS - 1)))
|
||||||
|
{
|
||||||
|
memset(m_fullLine, 0, sizeof(m_fullLine));
|
||||||
|
memset(m_tokenBuffer, 0, sizeof(m_tokenBuffer));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
strcopy(m_fullLine, newLine);
|
||||||
|
strcopy(m_tokenBuffer, newLine);
|
||||||
|
|
||||||
|
// parse tokens
|
||||||
|
char *charPointer = m_tokenBuffer;
|
||||||
|
while (*charPointer && (m_tokenNumber < MAX_LINE_TOKENS))
|
||||||
|
{
|
||||||
|
// skip nonprintable chars
|
||||||
|
while (*charPointer && ((*charPointer <= ' ') || (*charPointer > '~')))
|
||||||
|
charPointer++;
|
||||||
|
|
||||||
|
if (*charPointer)
|
||||||
|
{
|
||||||
|
m_token[m_tokenNumber] = charPointer;
|
||||||
|
|
||||||
|
// special treatment for quotes
|
||||||
|
if (*charPointer == '\"')
|
||||||
|
{
|
||||||
|
charPointer++;
|
||||||
|
m_token[m_tokenNumber] = charPointer;
|
||||||
|
while (*charPointer && (*charPointer != '\"'))
|
||||||
|
charPointer++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_token[m_tokenNumber] = charPointer;
|
||||||
|
while (*charPointer && ((*charPointer > 32) && (*charPointer <= 126)))
|
||||||
|
charPointer++;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_tokenNumber++;
|
||||||
|
|
||||||
|
if (*charPointer)
|
||||||
|
{
|
||||||
|
*charPointer = '\0';
|
||||||
|
charPointer++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (m_tokenNumber != MAX_LINE_TOKENS);
|
||||||
|
}
|
||||||
|
|
||||||
|
char *TokenLine::GetLine()
|
||||||
|
{
|
||||||
|
return m_fullLine;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *TokenLine::GetToken(int i)
|
||||||
|
{
|
||||||
|
if (i >= m_tokenNumber)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return m_token[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
// if the given parm is not present return NULL
|
||||||
|
// otherwise return the address of the following token, or an empty string
|
||||||
|
char *TokenLine::CheckToken(char *parm)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < m_tokenNumber; i++)
|
||||||
|
{
|
||||||
|
if (!m_token[i])
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!strcmp(parm, m_token[i]))
|
||||||
|
{
|
||||||
|
char *ret = m_token[i + 1];
|
||||||
|
|
||||||
|
// if this token doesn't exist, since index i was the last
|
||||||
|
// return an empty string
|
||||||
|
if (m_tokenNumber == (i + 1))
|
||||||
|
ret = "";
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int TokenLine::CountToken()
|
||||||
|
{
|
||||||
|
int c = 0;
|
||||||
|
for (int i = 0; i < m_tokenNumber; i++)
|
||||||
|
{
|
||||||
|
if (m_token[i])
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *TokenLine::GetRestOfLine(int i)
|
||||||
|
{
|
||||||
|
if (i >= m_tokenNumber)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return m_fullLine + (m_token[i] - m_tokenBuffer);
|
||||||
|
}
|
51
metamod/extra/example/include/hlsdk/common/TokenLine.h
Normal file
51
metamod/extra/example/include/hlsdk/common/TokenLine.h
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 2 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
class TokenLine {
|
||||||
|
public:
|
||||||
|
TokenLine();
|
||||||
|
TokenLine(char *string);
|
||||||
|
virtual ~TokenLine();
|
||||||
|
|
||||||
|
char *GetRestOfLine(int i); // returns all chars after token i
|
||||||
|
int CountToken(); // returns number of token
|
||||||
|
char *CheckToken(char *parm); // returns token after token parm or ""
|
||||||
|
char *GetToken(int i); // returns token i
|
||||||
|
char *GetLine(); // returns full line
|
||||||
|
bool SetLine(const char *newLine); // set new token line and parses it
|
||||||
|
|
||||||
|
private:
|
||||||
|
enum { MAX_LINE_CHARS = 2048, MAX_LINE_TOKENS = 128 };
|
||||||
|
|
||||||
|
char m_tokenBuffer[MAX_LINE_CHARS];
|
||||||
|
char m_fullLine[MAX_LINE_CHARS];
|
||||||
|
char *m_token[MAX_LINE_TOKENS];
|
||||||
|
int m_tokenNumber;
|
||||||
|
};
|
62
metamod/extra/example/include/hlsdk/common/beamdef.h
Normal file
62
metamod/extra/example/include/hlsdk/common/beamdef.h
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#if !defined ( BEAMDEFH )
|
||||||
|
#define BEAMDEFH
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define FBEAM_STARTENTITY 0x00000001
|
||||||
|
#define FBEAM_ENDENTITY 0x00000002
|
||||||
|
#define FBEAM_FADEIN 0x00000004
|
||||||
|
#define FBEAM_FADEOUT 0x00000008
|
||||||
|
#define FBEAM_SINENOISE 0x00000010
|
||||||
|
#define FBEAM_SOLID 0x00000020
|
||||||
|
#define FBEAM_SHADEIN 0x00000040
|
||||||
|
#define FBEAM_SHADEOUT 0x00000080
|
||||||
|
#define FBEAM_STARTVISIBLE 0x10000000 // Has this client actually seen this beam's start entity yet?
|
||||||
|
#define FBEAM_ENDVISIBLE 0x20000000 // Has this client actually seen this beam's end entity yet?
|
||||||
|
#define FBEAM_ISACTIVE 0x40000000
|
||||||
|
#define FBEAM_FOREVER 0x80000000
|
||||||
|
|
||||||
|
typedef struct beam_s BEAM;
|
||||||
|
struct beam_s
|
||||||
|
{
|
||||||
|
BEAM *next;
|
||||||
|
int type;
|
||||||
|
int flags;
|
||||||
|
vec3_t source;
|
||||||
|
vec3_t target;
|
||||||
|
vec3_t delta;
|
||||||
|
float t; // 0 .. 1 over lifetime of beam
|
||||||
|
float freq;
|
||||||
|
float die;
|
||||||
|
float width;
|
||||||
|
float amplitude;
|
||||||
|
float r, g, b;
|
||||||
|
float brightness;
|
||||||
|
float speed;
|
||||||
|
float frameRate;
|
||||||
|
float frame;
|
||||||
|
int segments;
|
||||||
|
int startEntity;
|
||||||
|
int endEntity;
|
||||||
|
int modelIndex;
|
||||||
|
int frameCount;
|
||||||
|
struct model_s *pFollowModel;
|
||||||
|
struct particle_s *particles;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
115
metamod/extra/example/include/hlsdk/common/cl_entity.h
Normal file
115
metamod/extra/example/include/hlsdk/common/cl_entity.h
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
// cl_entity.h
|
||||||
|
#if !defined( CL_ENTITYH )
|
||||||
|
#define CL_ENTITYH
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct efrag_s
|
||||||
|
{
|
||||||
|
struct mleaf_s *leaf;
|
||||||
|
struct efrag_s *leafnext;
|
||||||
|
struct cl_entity_s *entity;
|
||||||
|
struct efrag_s *entnext;
|
||||||
|
} efrag_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
byte mouthopen; // 0 = mouth closed, 255 = mouth agape
|
||||||
|
byte sndcount; // counter for running average
|
||||||
|
int sndavg; // running average
|
||||||
|
} mouth_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
float prevanimtime;
|
||||||
|
float sequencetime;
|
||||||
|
byte prevseqblending[2];
|
||||||
|
vec3_t prevorigin;
|
||||||
|
vec3_t prevangles;
|
||||||
|
|
||||||
|
int prevsequence;
|
||||||
|
float prevframe;
|
||||||
|
|
||||||
|
byte prevcontroller[4];
|
||||||
|
byte prevblending[2];
|
||||||
|
} latchedvars_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
// Time stamp for this movement
|
||||||
|
float animtime;
|
||||||
|
|
||||||
|
vec3_t origin;
|
||||||
|
vec3_t angles;
|
||||||
|
} position_history_t;
|
||||||
|
|
||||||
|
typedef struct cl_entity_s cl_entity_t;
|
||||||
|
|
||||||
|
#define HISTORY_MAX 64 // Must be power of 2
|
||||||
|
#define HISTORY_MASK ( HISTORY_MAX - 1 )
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined( ENTITY_STATEH )
|
||||||
|
#include "entity_state.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined( PROGS_H )
|
||||||
|
#include "progs.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct cl_entity_s
|
||||||
|
{
|
||||||
|
int index; // Index into cl_entities ( should match actual slot, but not necessarily )
|
||||||
|
|
||||||
|
qboolean player; // True if this entity is a "player"
|
||||||
|
|
||||||
|
entity_state_t baseline; // The original state from which to delta during an uncompressed message
|
||||||
|
entity_state_t prevstate; // The state information from the penultimate message received from the server
|
||||||
|
entity_state_t curstate; // The state information from the last message received from server
|
||||||
|
|
||||||
|
int current_position; // Last received history update index
|
||||||
|
position_history_t ph[ HISTORY_MAX ]; // History of position and angle updates for this player
|
||||||
|
|
||||||
|
mouth_t mouth; // For synchronizing mouth movements.
|
||||||
|
|
||||||
|
latchedvars_t latched; // Variables used by studio model rendering routines
|
||||||
|
|
||||||
|
// Information based on interplocation, extrapolation, prediction, or just copied from last msg received.
|
||||||
|
//
|
||||||
|
float lastmove;
|
||||||
|
|
||||||
|
// Actual render position and angles
|
||||||
|
vec3_t origin;
|
||||||
|
vec3_t angles;
|
||||||
|
|
||||||
|
// Attachment points
|
||||||
|
vec3_t attachment[4];
|
||||||
|
|
||||||
|
// Other entity local information
|
||||||
|
int trivial_accept;
|
||||||
|
|
||||||
|
struct model_s *model; // cl.model_precache[ curstate.modelindes ]; all visible entities have a model
|
||||||
|
struct efrag_s *efrag; // linked list of efrags
|
||||||
|
struct mnode_s *topnode; // for bmodels, first world node that splits bmodel, or NULL if not split
|
||||||
|
|
||||||
|
float syncbase; // for client-side animations -- used by obsolete alias animation system, remove?
|
||||||
|
int visframe; // last frame this entity was found in an active leaf
|
||||||
|
colorVec cvFloorColor;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // !CL_ENTITYH
|
340
metamod/extra/example/include/hlsdk/common/com_model.h
Normal file
340
metamod/extra/example/include/hlsdk/common/com_model.h
Normal file
@ -0,0 +1,340 @@
|
|||||||
|
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//
|
||||||
|
// $NoKeywords: $
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
// com_model.h
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define STUDIO_RENDER 1
|
||||||
|
#define STUDIO_EVENTS 2
|
||||||
|
|
||||||
|
//#define MAX_MODEL_NAME 64
|
||||||
|
//#define MAX_MAP_HULLS 4
|
||||||
|
//#define MIPLEVELS 4
|
||||||
|
//#define NUM_AMBIENTS 4 // automatic ambient sounds
|
||||||
|
//#define MAXLIGHTMAPS 4
|
||||||
|
#define PLANE_ANYZ 5
|
||||||
|
|
||||||
|
#define ALIAS_Z_CLIP_PLANE 5
|
||||||
|
|
||||||
|
// flags in finalvert_t.flags
|
||||||
|
#define ALIAS_LEFT_CLIP 0x0001
|
||||||
|
#define ALIAS_TOP_CLIP 0x0002
|
||||||
|
#define ALIAS_RIGHT_CLIP 0x0004
|
||||||
|
#define ALIAS_BOTTOM_CLIP 0x0008
|
||||||
|
#define ALIAS_Z_CLIP 0x0010
|
||||||
|
#define ALIAS_ONSEAM 0x0020
|
||||||
|
#define ALIAS_XY_CLIP_MASK 0x000F
|
||||||
|
|
||||||
|
#define ZISCALE ((float)0x8000)
|
||||||
|
|
||||||
|
#define CACHE_SIZE 32 // used to align key data structures
|
||||||
|
|
||||||
|
//typedef enum
|
||||||
|
//{
|
||||||
|
// mod_brush,
|
||||||
|
// mod_sprite,
|
||||||
|
// mod_alias,
|
||||||
|
// mod_studio
|
||||||
|
//} modtype_t;
|
||||||
|
|
||||||
|
// must match definition in modelgen.h
|
||||||
|
//#ifndef SYNCTYPE_T
|
||||||
|
//#define SYNCTYPE_T
|
||||||
|
//
|
||||||
|
//typedef enum
|
||||||
|
//{
|
||||||
|
// ST_SYNC=0,
|
||||||
|
// ST_RAND
|
||||||
|
//} synctype_t;
|
||||||
|
//
|
||||||
|
//#endif
|
||||||
|
|
||||||
|
//typedef struct
|
||||||
|
//{
|
||||||
|
// float mins[3], maxs[3];
|
||||||
|
// float origin[3];
|
||||||
|
// int headnode[MAX_MAP_HULLS];
|
||||||
|
// int visleafs; // not including the solid leaf 0
|
||||||
|
// int firstface, numfaces;
|
||||||
|
//} dmodel_t;
|
||||||
|
|
||||||
|
// plane_t structure
|
||||||
|
//typedef struct mplane_s
|
||||||
|
//{
|
||||||
|
// vec3_t normal; // surface normal
|
||||||
|
// float dist; // closest appoach to origin
|
||||||
|
// byte type; // for texture axis selection and fast side tests
|
||||||
|
// byte signbits; // signx + signy<<1 + signz<<1
|
||||||
|
// byte pad[2];
|
||||||
|
//} mplane_t;
|
||||||
|
|
||||||
|
//typedef struct
|
||||||
|
//{
|
||||||
|
// vec3_t position;
|
||||||
|
//} mvertex_t;
|
||||||
|
|
||||||
|
//typedef struct
|
||||||
|
//{
|
||||||
|
// unsigned short v[2];
|
||||||
|
// unsigned int cachededgeoffset;
|
||||||
|
//} medge_t;
|
||||||
|
|
||||||
|
//typedef struct texture_s
|
||||||
|
//{
|
||||||
|
// char name[16];
|
||||||
|
// unsigned width, height;
|
||||||
|
// int anim_total; // total tenths in sequence ( 0 = no)
|
||||||
|
// int anim_min, anim_max; // time for this frame min <=time< max
|
||||||
|
// struct texture_s *anim_next; // in the animation sequence
|
||||||
|
// struct texture_s *alternate_anims; // bmodels in frame 1 use these
|
||||||
|
// unsigned offsets[MIPLEVELS]; // four mip maps stored
|
||||||
|
// unsigned paloffset;
|
||||||
|
//} texture_t;
|
||||||
|
|
||||||
|
//typedef struct
|
||||||
|
//{
|
||||||
|
// float vecs[2][4]; // [s/t] unit vectors in world space.
|
||||||
|
// // [i][3] is the s/t offset relative to the origin.
|
||||||
|
// // s or t = dot(3Dpoint,vecs[i])+vecs[i][3]
|
||||||
|
// float mipadjust; // ?? mipmap limits for very small surfaces
|
||||||
|
// texture_t *texture;
|
||||||
|
// int flags; // sky or slime, no lightmap or 256 subdivision
|
||||||
|
//} mtexinfo_t;
|
||||||
|
|
||||||
|
//typedef struct mnode_s
|
||||||
|
//{
|
||||||
|
// // common with leaf
|
||||||
|
// int contents; // 0, to differentiate from leafs
|
||||||
|
// int visframe; // node needs to be traversed if current
|
||||||
|
//
|
||||||
|
// short minmaxs[6]; // for bounding box culling
|
||||||
|
//
|
||||||
|
// struct mnode_s *parent;
|
||||||
|
//
|
||||||
|
// // node specific
|
||||||
|
// mplane_t *plane;
|
||||||
|
// struct mnode_s *children[2];
|
||||||
|
//
|
||||||
|
// unsigned short firstsurface;
|
||||||
|
// unsigned short numsurfaces;
|
||||||
|
//} mnode_t;
|
||||||
|
|
||||||
|
//typedef struct msurface_s msurface_t;
|
||||||
|
//typedef struct decal_s decal_t;
|
||||||
|
|
||||||
|
// JAY: Compress this as much as possible
|
||||||
|
//struct decal_s
|
||||||
|
//{
|
||||||
|
// decal_t *pnext; // linked list for each surface
|
||||||
|
// msurface_t *psurface; // Surface id for persistence / unlinking
|
||||||
|
// short dx; // Offsets into surface texture (in texture coordinates, so we don't need floats)
|
||||||
|
// short dy;
|
||||||
|
// short texture; // Decal texture
|
||||||
|
// byte scale; // Pixel scale
|
||||||
|
// byte flags; // Decal flags
|
||||||
|
//
|
||||||
|
// short entityIndex; // Entity this is attached to
|
||||||
|
//};
|
||||||
|
|
||||||
|
//typedef struct mleaf_s
|
||||||
|
//{
|
||||||
|
// // common with node
|
||||||
|
// int contents; // wil be a negative contents number
|
||||||
|
// int visframe; // node needs to be traversed if current
|
||||||
|
//
|
||||||
|
// short minmaxs[6]; // for bounding box culling
|
||||||
|
//
|
||||||
|
// struct mnode_s *parent;
|
||||||
|
//
|
||||||
|
// // leaf specific
|
||||||
|
// byte *compressed_vis;
|
||||||
|
// struct efrag_s *efrags;
|
||||||
|
//
|
||||||
|
// msurface_t **firstmarksurface;
|
||||||
|
// int nummarksurfaces;
|
||||||
|
// int key; // BSP sequence number for leaf's contents
|
||||||
|
// byte ambient_sound_level[NUM_AMBIENTS];
|
||||||
|
//} mleaf_t;
|
||||||
|
|
||||||
|
//struct msurface_s
|
||||||
|
//{
|
||||||
|
// int visframe; // should be drawn when node is crossed
|
||||||
|
//
|
||||||
|
// int dlightframe; // last frame the surface was checked by an animated light
|
||||||
|
// int dlightbits; // dynamically generated. Indicates if the surface illumination
|
||||||
|
// // is modified by an animated light.
|
||||||
|
//
|
||||||
|
// mplane_t *plane; // pointer to shared plane
|
||||||
|
// int flags; // see SURF_ #defines
|
||||||
|
//
|
||||||
|
// int firstedge; // look up in model->surfedges[], negative numbers
|
||||||
|
// int numedges; // are backwards edges
|
||||||
|
//
|
||||||
|
// // surface generation data
|
||||||
|
// struct surfcache_s *cachespots[MIPLEVELS];
|
||||||
|
//
|
||||||
|
// short texturemins[2]; // smallest s/t position on the surface.
|
||||||
|
// short extents[2]; // ?? s/t texture size, 1..256 for all non-sky surfaces
|
||||||
|
//
|
||||||
|
// mtexinfo_t *texinfo;
|
||||||
|
//
|
||||||
|
// // lighting info
|
||||||
|
// byte styles[MAXLIGHTMAPS]; // index into d_lightstylevalue[] for animated lights
|
||||||
|
// // no one surface can be effected by more than 4
|
||||||
|
// // animated lights.
|
||||||
|
// color24 *samples;
|
||||||
|
//
|
||||||
|
// decal_t *pdecals;
|
||||||
|
//};
|
||||||
|
|
||||||
|
//typedef struct
|
||||||
|
//{
|
||||||
|
// int planenum;
|
||||||
|
// short children[2]; // negative numbers are contents
|
||||||
|
//} dclipnode_t;
|
||||||
|
|
||||||
|
//typedef struct hull_s
|
||||||
|
//{
|
||||||
|
// dclipnode_t *clipnodes;
|
||||||
|
// mplane_t *planes;
|
||||||
|
// int firstclipnode;
|
||||||
|
// int lastclipnode;
|
||||||
|
// vec3_t clip_mins;
|
||||||
|
// vec3_t clip_maxs;
|
||||||
|
//} hull_t;
|
||||||
|
|
||||||
|
typedef struct cache_user_s
|
||||||
|
{
|
||||||
|
void *data;
|
||||||
|
} cache_user_t;
|
||||||
|
|
||||||
|
//typedef struct model_s
|
||||||
|
//{
|
||||||
|
// char name[ MAX_MODEL_NAME ];
|
||||||
|
// qboolean needload; // bmodels and sprites don't cache normally
|
||||||
|
//
|
||||||
|
// modtype_t type;
|
||||||
|
// int numframes;
|
||||||
|
// synctype_t synctype;
|
||||||
|
//
|
||||||
|
// int flags;
|
||||||
|
//
|
||||||
|
// //
|
||||||
|
// // volume occupied by the model
|
||||||
|
// //
|
||||||
|
// vec3_t mins, maxs;
|
||||||
|
// float radius;
|
||||||
|
//
|
||||||
|
// //
|
||||||
|
// // brush model
|
||||||
|
// //
|
||||||
|
// int firstmodelsurface, nummodelsurfaces;
|
||||||
|
//
|
||||||
|
// int numsubmodels;
|
||||||
|
// dmodel_t *submodels;
|
||||||
|
//
|
||||||
|
// int numplanes;
|
||||||
|
// mplane_t *planes;
|
||||||
|
//
|
||||||
|
// int numleafs; // number of visible leafs, not counting 0
|
||||||
|
// struct mleaf_s *leafs;
|
||||||
|
//
|
||||||
|
// int numvertexes;
|
||||||
|
// mvertex_t *vertexes;
|
||||||
|
//
|
||||||
|
// int numedges;
|
||||||
|
// medge_t *edges;
|
||||||
|
//
|
||||||
|
// int numnodes;
|
||||||
|
// mnode_t *nodes;
|
||||||
|
//
|
||||||
|
// int numtexinfo;
|
||||||
|
// mtexinfo_t *texinfo;
|
||||||
|
//
|
||||||
|
// int numsurfaces;
|
||||||
|
// msurface_t *surfaces;
|
||||||
|
//
|
||||||
|
// int numsurfedges;
|
||||||
|
// int *surfedges;
|
||||||
|
//
|
||||||
|
// int numclipnodes;
|
||||||
|
// dclipnode_t *clipnodes;
|
||||||
|
//
|
||||||
|
// int nummarksurfaces;
|
||||||
|
// msurface_t **marksurfaces;
|
||||||
|
//
|
||||||
|
// hull_t hulls[MAX_MAP_HULLS];
|
||||||
|
//
|
||||||
|
// int numtextures;
|
||||||
|
// texture_t **textures;
|
||||||
|
//
|
||||||
|
// byte *visdata;
|
||||||
|
//
|
||||||
|
// color24 *lightdata;
|
||||||
|
//
|
||||||
|
// char *entities;
|
||||||
|
//
|
||||||
|
// //
|
||||||
|
// // additional model data
|
||||||
|
// //
|
||||||
|
// cache_user_t cache; // only access through Mod_Extradata
|
||||||
|
//
|
||||||
|
//} model_t;
|
||||||
|
|
||||||
|
//typedef vec_t vec4_t[4];
|
||||||
|
|
||||||
|
typedef struct alight_s
|
||||||
|
{
|
||||||
|
int ambientlight; // clip at 128
|
||||||
|
int shadelight; // clip at 192 - ambientlight
|
||||||
|
vec3_t color;
|
||||||
|
float *plightvec;
|
||||||
|
} alight_t;
|
||||||
|
|
||||||
|
typedef struct auxvert_s
|
||||||
|
{
|
||||||
|
float fv[3]; // viewspace x, y
|
||||||
|
} auxvert_t;
|
||||||
|
|
||||||
|
#include "custom.h"
|
||||||
|
|
||||||
|
//#define MAX_SCOREBOARDNAME 32
|
||||||
|
|
||||||
|
// Defined in client.h differently
|
||||||
|
//typedef struct player_info_s
|
||||||
|
//{
|
||||||
|
// // User id on server
|
||||||
|
// int userid;
|
||||||
|
//
|
||||||
|
// // User info string
|
||||||
|
// char userinfo[ MAX_INFO_STRING ];
|
||||||
|
//
|
||||||
|
// // Name
|
||||||
|
// char name[ MAX_SCOREBOARDNAME ];
|
||||||
|
//
|
||||||
|
// // Spectator or not, unused
|
||||||
|
// int spectator;
|
||||||
|
//
|
||||||
|
// int ping;
|
||||||
|
// int packet_loss;
|
||||||
|
//
|
||||||
|
// // skin information
|
||||||
|
// char model[MAX_QPATH];
|
||||||
|
// int topcolor;
|
||||||
|
// int bottomcolor;
|
||||||
|
//
|
||||||
|
// // last frame rendered
|
||||||
|
// int renderframe;
|
||||||
|
//
|
||||||
|
// // Gait frame estimation
|
||||||
|
// int gaitsequence;
|
||||||
|
// float gaitframe;
|
||||||
|
// float gaityaw;
|
||||||
|
// vec3_t prevgaitorigin;
|
||||||
|
//
|
||||||
|
// customization_t customdata;
|
||||||
|
//} player_info_t;
|
355
metamod/extra/example/include/hlsdk/common/commandline.cpp
Normal file
355
metamod/extra/example/include/hlsdk/common/commandline.cpp
Normal file
@ -0,0 +1,355 @@
|
|||||||
|
#include "precompiled.h"
|
||||||
|
|
||||||
|
class CCommandLine: public ICommandLine {
|
||||||
|
public:
|
||||||
|
CCommandLine();
|
||||||
|
virtual ~CCommandLine();
|
||||||
|
|
||||||
|
void CreateCmdLine(const char *commandline);
|
||||||
|
void CreateCmdLine(int argc, const char *argv[]);
|
||||||
|
const char *GetCmdLine() const;
|
||||||
|
|
||||||
|
// Check whether a particular parameter exists
|
||||||
|
const char *CheckParm(const char *psz, char **ppszValue = nullptr) const;
|
||||||
|
void RemoveParm(const char *pszParm);
|
||||||
|
void AppendParm(const char *pszParm, const char *pszValues);
|
||||||
|
|
||||||
|
void SetParm(const char *pszParm, const char *pszValues);
|
||||||
|
void SetParm(const char *pszParm, int iValue);
|
||||||
|
|
||||||
|
// When the commandline contains @name, it reads the parameters from that file
|
||||||
|
void LoadParametersFromFile(const char *&pSrc, char *&pDst, int maxDestLen);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// Copy of actual command line
|
||||||
|
char *m_pszCmdLine;
|
||||||
|
};
|
||||||
|
|
||||||
|
CCommandLine g_CmdLine;
|
||||||
|
ICommandLine *cmdline = &g_CmdLine;
|
||||||
|
|
||||||
|
ICommandLine *CommandLine()
|
||||||
|
{
|
||||||
|
return &g_CmdLine;
|
||||||
|
}
|
||||||
|
|
||||||
|
CCommandLine::CCommandLine()
|
||||||
|
{
|
||||||
|
m_pszCmdLine = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
CCommandLine::~CCommandLine()
|
||||||
|
{
|
||||||
|
if (m_pszCmdLine)
|
||||||
|
{
|
||||||
|
delete [] m_pszCmdLine;
|
||||||
|
m_pszCmdLine = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char *CopyString(const char *src)
|
||||||
|
{
|
||||||
|
if (!src)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
char *out = (char *)new char[strlen(src) + 1];
|
||||||
|
strcpy(out, src);
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Creates a command line from the arguments passed in
|
||||||
|
void CCommandLine::CreateCmdLine(int argc, const char *argv[])
|
||||||
|
{
|
||||||
|
char cmdline[4096] = "";
|
||||||
|
const int MAX_CHARS = sizeof(cmdline) - 1;
|
||||||
|
|
||||||
|
for (int i = 0; i < argc; ++i)
|
||||||
|
{
|
||||||
|
if (strchr(argv[i], ' '))
|
||||||
|
{
|
||||||
|
strncat(cmdline, "\"", MAX_CHARS);
|
||||||
|
strncat(cmdline, argv[i], MAX_CHARS);
|
||||||
|
strncat(cmdline, "\"", MAX_CHARS);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
strncat(cmdline, argv[i], MAX_CHARS);
|
||||||
|
}
|
||||||
|
|
||||||
|
strncat(cmdline, " ", MAX_CHARS);
|
||||||
|
}
|
||||||
|
|
||||||
|
cmdline[strlen(cmdline)] = '\0';
|
||||||
|
CreateCmdLine(cmdline);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CCommandLine::LoadParametersFromFile(const char *&pSrc, char *&pDst, int maxDestLen)
|
||||||
|
{
|
||||||
|
// Suck out the file name
|
||||||
|
char szFileName[ MAX_PATH ];
|
||||||
|
char *pOut;
|
||||||
|
char *pDestStart = pDst;
|
||||||
|
|
||||||
|
// Skip the @ sign
|
||||||
|
pSrc++;
|
||||||
|
pOut = szFileName;
|
||||||
|
|
||||||
|
while (*pSrc && *pSrc != ' ')
|
||||||
|
{
|
||||||
|
*pOut++ = *pSrc++;
|
||||||
|
#if 0
|
||||||
|
if ((pOut - szFileName) >= (MAX_PATH - 1))
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
*pOut = '\0';
|
||||||
|
|
||||||
|
// Skip the space after the file name
|
||||||
|
if (*pSrc)
|
||||||
|
pSrc++;
|
||||||
|
|
||||||
|
// Now read in parameters from file
|
||||||
|
FILE *fp = fopen(szFileName, "r");
|
||||||
|
if (fp)
|
||||||
|
{
|
||||||
|
char c;
|
||||||
|
c = (char)fgetc(fp);
|
||||||
|
while (c != EOF)
|
||||||
|
{
|
||||||
|
// Turn return characters into spaces
|
||||||
|
if (c == '\n')
|
||||||
|
c = ' ';
|
||||||
|
|
||||||
|
*pDst++ = c;
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
// Don't go past the end, and allow for our terminating space character AND a terminating null character.
|
||||||
|
if ((pDst - pDestStart) >= (maxDestLen - 2))
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Get the next character, if there are more
|
||||||
|
c = (char)fgetc(fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add a terminating space character
|
||||||
|
*pDst++ = ' ';
|
||||||
|
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("Parameter file '%s' not found, skipping...", szFileName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Purpose: Create a command line from the passed in string
|
||||||
|
// Note that if you pass in a @filename, then the routine will read settings from a file instead of the command line
|
||||||
|
void CCommandLine::CreateCmdLine(const char *commandline)
|
||||||
|
{
|
||||||
|
if (m_pszCmdLine)
|
||||||
|
{
|
||||||
|
delete[] m_pszCmdLine;
|
||||||
|
m_pszCmdLine = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
char szFull[4096];
|
||||||
|
|
||||||
|
char *pDst = szFull;
|
||||||
|
const char *pSrc = commandline;
|
||||||
|
|
||||||
|
bool allowAtSign = true;
|
||||||
|
|
||||||
|
while (*pSrc)
|
||||||
|
{
|
||||||
|
if (*pSrc == '@')
|
||||||
|
{
|
||||||
|
if (allowAtSign)
|
||||||
|
{
|
||||||
|
LoadParametersFromFile(pSrc, pDst, sizeof(szFull) - (pDst - szFull));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
allowAtSign = isspace(*pSrc) != 0;
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
// Don't go past the end.
|
||||||
|
if ((pDst - szFull) >= (sizeof(szFull) - 1))
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
*pDst++ = *pSrc++;
|
||||||
|
}
|
||||||
|
|
||||||
|
*pDst = '\0';
|
||||||
|
|
||||||
|
int len = strlen(szFull) + 1;
|
||||||
|
m_pszCmdLine = new char[len];
|
||||||
|
memcpy(m_pszCmdLine, szFull, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Purpose: Remove specified string ( and any args attached to it ) from command line
|
||||||
|
void CCommandLine::RemoveParm(const char *pszParm)
|
||||||
|
{
|
||||||
|
if (!m_pszCmdLine)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!pszParm || *pszParm == '\0')
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Search for first occurrence of pszParm
|
||||||
|
char *p, *found;
|
||||||
|
char *pnextparam;
|
||||||
|
int n;
|
||||||
|
int curlen;
|
||||||
|
|
||||||
|
p = m_pszCmdLine;
|
||||||
|
while (*p)
|
||||||
|
{
|
||||||
|
curlen = strlen(p);
|
||||||
|
found = strstr(p, pszParm);
|
||||||
|
|
||||||
|
if (!found)
|
||||||
|
break;
|
||||||
|
|
||||||
|
pnextparam = found + 1;
|
||||||
|
while (pnextparam && *pnextparam && (*pnextparam != '-') && (*pnextparam != '+'))
|
||||||
|
pnextparam++;
|
||||||
|
|
||||||
|
if (pnextparam && *pnextparam)
|
||||||
|
{
|
||||||
|
// We are either at the end of the string, or at the next param. Just chop out the current param.
|
||||||
|
// # of characters after this param.
|
||||||
|
n = curlen - (pnextparam - p);
|
||||||
|
|
||||||
|
memcpy(found, pnextparam, n);
|
||||||
|
found[n] = '\0';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Clear out rest of string.
|
||||||
|
n = pnextparam - found;
|
||||||
|
memset(found, 0, n);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Strip and trailing ' ' characters left over.
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
int curpos = strlen(m_pszCmdLine);
|
||||||
|
if (curpos == 0 || m_pszCmdLine[ curpos - 1 ] != ' ')
|
||||||
|
break;
|
||||||
|
|
||||||
|
m_pszCmdLine[curpos - 1] = '\0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Purpose: Append parameter and argument values to command line
|
||||||
|
void CCommandLine::AppendParm(const char *pszParm, const char *pszValues)
|
||||||
|
{
|
||||||
|
int nNewLength = 0;
|
||||||
|
char *pCmdString;
|
||||||
|
|
||||||
|
// Parameter.
|
||||||
|
nNewLength = strlen(pszParm);
|
||||||
|
|
||||||
|
// Values + leading space character.
|
||||||
|
if (pszValues)
|
||||||
|
nNewLength += strlen(pszValues) + 1;
|
||||||
|
|
||||||
|
// Terminal 0;
|
||||||
|
nNewLength++;
|
||||||
|
|
||||||
|
if (!m_pszCmdLine)
|
||||||
|
{
|
||||||
|
m_pszCmdLine = new char[ nNewLength ];
|
||||||
|
strcpy(m_pszCmdLine, pszParm);
|
||||||
|
if (pszValues)
|
||||||
|
{
|
||||||
|
strcat(m_pszCmdLine, " ");
|
||||||
|
strcat(m_pszCmdLine, pszValues);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove any remnants from the current Cmd Line.
|
||||||
|
RemoveParm(pszParm);
|
||||||
|
|
||||||
|
nNewLength += strlen(m_pszCmdLine) + 1 + 1;
|
||||||
|
|
||||||
|
pCmdString = new char[ nNewLength ];
|
||||||
|
memset(pCmdString, 0, nNewLength);
|
||||||
|
|
||||||
|
strcpy(pCmdString, m_pszCmdLine); // Copy old command line.
|
||||||
|
strcat(pCmdString, " "); // Put in a space
|
||||||
|
strcat(pCmdString, pszParm);
|
||||||
|
|
||||||
|
if (pszValues)
|
||||||
|
{
|
||||||
|
strcat(pCmdString, " ");
|
||||||
|
strcat(pCmdString, pszValues);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Kill off the old one
|
||||||
|
delete[] m_pszCmdLine;
|
||||||
|
|
||||||
|
// Point at the new command line.
|
||||||
|
m_pszCmdLine = pCmdString;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CCommandLine::SetParm(const char *pszParm, const char *pszValues)
|
||||||
|
{
|
||||||
|
RemoveParm(pszParm);
|
||||||
|
AppendParm(pszParm, pszValues);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CCommandLine::SetParm(const char *pszParm, int iValue)
|
||||||
|
{
|
||||||
|
char buf[64];
|
||||||
|
_snprintf(buf, sizeof(buf), "%d", iValue);
|
||||||
|
SetParm(pszParm, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Purpose: Search for the parameter in the current commandline
|
||||||
|
const char *CCommandLine::CheckParm(const char *psz, char **ppszValue) const
|
||||||
|
{
|
||||||
|
static char sz[128] = "";
|
||||||
|
|
||||||
|
if (!m_pszCmdLine)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
if (ppszValue)
|
||||||
|
*ppszValue = nullptr;
|
||||||
|
|
||||||
|
char *pret = strstr(m_pszCmdLine, psz);
|
||||||
|
if (!pret || !ppszValue)
|
||||||
|
return pret;
|
||||||
|
|
||||||
|
// find the next whitespace
|
||||||
|
char *p1 = pret;
|
||||||
|
do {
|
||||||
|
++p1;
|
||||||
|
} while (*p1 != ' ' && *p1);
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
char *p2 = p1 + 1;
|
||||||
|
|
||||||
|
do {
|
||||||
|
if (p2[i] == '\0' || p2[i] == ' ')
|
||||||
|
break;
|
||||||
|
|
||||||
|
sz[i++] = p2[i];
|
||||||
|
} while (i < sizeof(sz));
|
||||||
|
|
||||||
|
sz[i] = '\0';
|
||||||
|
*ppszValue = sz;
|
||||||
|
|
||||||
|
return pret;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *CCommandLine::GetCmdLine() const
|
||||||
|
{
|
||||||
|
return m_pszCmdLine;
|
||||||
|
}
|
38
metamod/extra/example/include/hlsdk/common/con_nprint.h
Normal file
38
metamod/extra/example/include/hlsdk/common/con_nprint.h
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#if !defined( CON_NPRINTH )
|
||||||
|
#define CON_NPRINTH
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct con_nprint_s
|
||||||
|
{
|
||||||
|
int index; // Row #
|
||||||
|
float time_to_live; // # of seconds before it dissappears
|
||||||
|
float color[ 3 ]; // RGB colors ( 0.0 -> 1.0 scale )
|
||||||
|
} con_nprint_t;
|
||||||
|
|
||||||
|
void Con_NPrintf( int idx, const char *fmt, ... );
|
||||||
|
void Con_NXPrintf( struct con_nprint_s *info, const char *fmt, ... );
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
806
metamod/extra/example/include/hlsdk/common/const.h
Normal file
806
metamod/extra/example/include/hlsdk/common/const.h
Normal file
@ -0,0 +1,806 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
|
||||||
|
#ifndef CONST_H
|
||||||
|
#define CONST_H
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Max # of clients allowed in a server.
|
||||||
|
#define MAX_CLIENTS 32
|
||||||
|
|
||||||
|
// How many bits to use to encode an edict.
|
||||||
|
#define MAX_EDICT_BITS 11 // # of bits needed to represent max edicts
|
||||||
|
// Max # of edicts in a level (2048)
|
||||||
|
#define MAX_EDICTS (1<<MAX_EDICT_BITS)
|
||||||
|
|
||||||
|
// How many data slots to use when in multiplayer (must be power of 2)
|
||||||
|
#define MULTIPLAYER_BACKUP 64
|
||||||
|
// Same for single player
|
||||||
|
#define SINGLEPLAYER_BACKUP 8
|
||||||
|
//
|
||||||
|
// Constants shared by the engine and dlls
|
||||||
|
// This header file included by engine files and DLL files.
|
||||||
|
// Most came from server.h
|
||||||
|
|
||||||
|
// edict->flags
|
||||||
|
#define FL_FLY (1<<0) // Changes the SV_Movestep() behavior to not need to be on ground
|
||||||
|
#define FL_SWIM (1<<1) // Changes the SV_Movestep() behavior to not need to be on ground (but stay in water)
|
||||||
|
#define FL_CONVEYOR (1<<2)
|
||||||
|
#define FL_CLIENT (1<<3)
|
||||||
|
#define FL_INWATER (1<<4)
|
||||||
|
#define FL_MONSTER (1<<5)
|
||||||
|
#define FL_GODMODE (1<<6)
|
||||||
|
#define FL_NOTARGET (1<<7)
|
||||||
|
#define FL_SKIPLOCALHOST (1<<8) // Don't send entity to local host, it's predicting this entity itself
|
||||||
|
#define FL_ONGROUND (1<<9) // At rest / on the ground
|
||||||
|
#define FL_PARTIALGROUND (1<<10) // not all corners are valid
|
||||||
|
#define FL_WATERJUMP (1<<11) // player jumping out of water
|
||||||
|
#define FL_FROZEN (1<<12) // Player is frozen for 3rd person camera
|
||||||
|
#define FL_FAKECLIENT (1<<13) // JAC: fake client, simulated server side; don't send network messages to them
|
||||||
|
#define FL_DUCKING (1<<14) // Player flag -- Player is fully crouched
|
||||||
|
#define FL_FLOAT (1<<15) // Apply floating force to this entity when in water
|
||||||
|
#define FL_GRAPHED (1<<16) // worldgraph has this ent listed as something that blocks a connection
|
||||||
|
|
||||||
|
// UNDONE: Do we need these?
|
||||||
|
#define FL_IMMUNE_WATER (1<<17)
|
||||||
|
#define FL_IMMUNE_SLIME (1<<18)
|
||||||
|
#define FL_IMMUNE_LAVA (1<<19)
|
||||||
|
|
||||||
|
#define FL_PROXY (1<<20) // This is a spectator proxy
|
||||||
|
#define FL_ALWAYSTHINK (1<<21) // Brush model flag -- call think every frame regardless of nextthink - ltime (for constantly changing velocity/path)
|
||||||
|
#define FL_BASEVELOCITY (1<<22) // Base velocity has been applied this frame (used to convert base velocity into momentum)
|
||||||
|
#define FL_MONSTERCLIP (1<<23) // Only collide in with monsters who have FL_MONSTERCLIP set
|
||||||
|
#define FL_ONTRAIN (1<<24) // Player is _controlling_ a train, so movement commands should be ignored on client during prediction.
|
||||||
|
#define FL_WORLDBRUSH (1<<25) // Not moveable/removeable brush entity (really part of the world, but represented as an entity for transparency or something)
|
||||||
|
#define FL_SPECTATOR (1<<26) // This client is a spectator, don't run touch functions, etc.
|
||||||
|
#define FL_CUSTOMENTITY (1<<29) // This is a custom entity
|
||||||
|
#define FL_KILLME (1<<30) // This entity is marked for death -- This allows the engine to kill ents at the appropriate time
|
||||||
|
#define FL_DORMANT (1<<31) // Entity is dormant, no updates to client
|
||||||
|
|
||||||
|
// SV_EmitSound2 flags
|
||||||
|
#define SND_EMIT2_NOPAS (1<<0) // never to do check PAS
|
||||||
|
#define SND_EMIT2_INVOKER (1<<1) // do not send to the client invoker
|
||||||
|
|
||||||
|
// Engine edict->spawnflags
|
||||||
|
#define SF_NOTINDEATHMATCH 0x0800 // Do not spawn when deathmatch and loading entities from a file
|
||||||
|
|
||||||
|
|
||||||
|
// Goes into globalvars_t.trace_flags
|
||||||
|
#define FTRACE_SIMPLEBOX (1<<0) // Traceline with a simple box
|
||||||
|
|
||||||
|
|
||||||
|
// walkmove modes
|
||||||
|
#define WALKMOVE_NORMAL 0 // normal walkmove
|
||||||
|
#define WALKMOVE_WORLDONLY 1 // doesn't hit ANY entities, no matter what the solid type
|
||||||
|
#define WALKMOVE_CHECKONLY 2 // move, but don't touch triggers
|
||||||
|
|
||||||
|
// edict->movetype values
|
||||||
|
#define MOVETYPE_NONE 0 // never moves
|
||||||
|
//#define MOVETYPE_ANGLENOCLIP 1
|
||||||
|
//#define MOVETYPE_ANGLECLIP 2
|
||||||
|
#define MOVETYPE_WALK 3 // Player only - moving on the ground
|
||||||
|
#define MOVETYPE_STEP 4 // gravity, special edge handling -- monsters use this
|
||||||
|
#define MOVETYPE_FLY 5 // No gravity, but still collides with stuff
|
||||||
|
#define MOVETYPE_TOSS 6 // gravity/collisions
|
||||||
|
#define MOVETYPE_PUSH 7 // no clip to world, push and crush
|
||||||
|
#define MOVETYPE_NOCLIP 8 // No gravity, no collisions, still do velocity/avelocity
|
||||||
|
#define MOVETYPE_FLYMISSILE 9 // extra size to monsters
|
||||||
|
#define MOVETYPE_BOUNCE 10 // Just like Toss, but reflect velocity when contacting surfaces
|
||||||
|
#define MOVETYPE_BOUNCEMISSILE 11 // bounce w/o gravity
|
||||||
|
#define MOVETYPE_FOLLOW 12 // track movement of aiment
|
||||||
|
#define MOVETYPE_PUSHSTEP 13 // BSP model that needs physics/world collisions (uses nearest hull for world collision)
|
||||||
|
|
||||||
|
// edict->solid values
|
||||||
|
// NOTE: Some movetypes will cause collisions independent of SOLID_NOT/SOLID_TRIGGER when the entity moves
|
||||||
|
// SOLID only effects OTHER entities colliding with this one when they move - UGH!
|
||||||
|
#define SOLID_NOT 0 // no interaction with other objects
|
||||||
|
#define SOLID_TRIGGER 1 // touch on edge, but not blocking
|
||||||
|
#define SOLID_BBOX 2 // touch on edge, block
|
||||||
|
#define SOLID_SLIDEBOX 3 // touch on edge, but not an onground
|
||||||
|
#define SOLID_BSP 4 // bsp clip, touch on edge, block
|
||||||
|
|
||||||
|
// edict->deadflag values
|
||||||
|
#define DEAD_NO 0 // alive
|
||||||
|
#define DEAD_DYING 1 // playing death animation or still falling off of a ledge waiting to hit ground
|
||||||
|
#define DEAD_DEAD 2 // dead. lying still.
|
||||||
|
#define DEAD_RESPAWNABLE 3
|
||||||
|
#define DEAD_DISCARDBODY 4
|
||||||
|
|
||||||
|
#define DAMAGE_NO 0
|
||||||
|
#define DAMAGE_YES 1
|
||||||
|
#define DAMAGE_AIM 2
|
||||||
|
|
||||||
|
// entity effects
|
||||||
|
#define EF_BRIGHTFIELD 1 // swirling cloud of particles
|
||||||
|
#define EF_MUZZLEFLASH 2 // single frame ELIGHT on entity attachment 0
|
||||||
|
#define EF_BRIGHTLIGHT 4 // DLIGHT centered at entity origin
|
||||||
|
#define EF_DIMLIGHT 8 // player flashlight
|
||||||
|
#define EF_INVLIGHT 16 // get lighting from ceiling
|
||||||
|
#define EF_NOINTERP 32 // don't interpolate the next frame
|
||||||
|
#define EF_LIGHT 64 // rocket flare glow sprite
|
||||||
|
#define EF_NODRAW 128 // don't draw entity
|
||||||
|
#define EF_NIGHTVISION 256 // player nightvision
|
||||||
|
#define EF_SNIPERLASER 512 // sniper laser effect
|
||||||
|
#define EF_FIBERCAMERA 1024// fiber camera
|
||||||
|
|
||||||
|
|
||||||
|
// entity flags
|
||||||
|
#define EFLAG_SLERP 1 // do studio interpolation of this entity
|
||||||
|
|
||||||
|
//
|
||||||
|
// temp entity events
|
||||||
|
//
|
||||||
|
#define TE_BEAMPOINTS 0 // beam effect between two points
|
||||||
|
// coord coord coord (start position)
|
||||||
|
// coord coord coord (end position)
|
||||||
|
// short (sprite index)
|
||||||
|
// byte (starting frame)
|
||||||
|
// byte (frame rate in 0.1's)
|
||||||
|
// byte (life in 0.1's)
|
||||||
|
// byte (line width in 0.1's)
|
||||||
|
// byte (noise amplitude in 0.01's)
|
||||||
|
// byte,byte,byte (color)
|
||||||
|
// byte (brightness)
|
||||||
|
// byte (scroll speed in 0.1's)
|
||||||
|
|
||||||
|
#define TE_BEAMENTPOINT 1 // beam effect between point and entity
|
||||||
|
// short (start entity)
|
||||||
|
// coord coord coord (end position)
|
||||||
|
// short (sprite index)
|
||||||
|
// byte (starting frame)
|
||||||
|
// byte (frame rate in 0.1's)
|
||||||
|
// byte (life in 0.1's)
|
||||||
|
// byte (line width in 0.1's)
|
||||||
|
// byte (noise amplitude in 0.01's)
|
||||||
|
// byte,byte,byte (color)
|
||||||
|
// byte (brightness)
|
||||||
|
// byte (scroll speed in 0.1's)
|
||||||
|
|
||||||
|
#define TE_GUNSHOT 2 // particle effect plus ricochet sound
|
||||||
|
// coord coord coord (position)
|
||||||
|
|
||||||
|
#define TE_EXPLOSION 3 // additive sprite, 2 dynamic lights, flickering particles, explosion sound, move vertically 8 pps
|
||||||
|
// coord coord coord (position)
|
||||||
|
// short (sprite index)
|
||||||
|
// byte (scale in 0.1's)
|
||||||
|
// byte (framerate)
|
||||||
|
// byte (flags)
|
||||||
|
//
|
||||||
|
// The Explosion effect has some flags to control performance/aesthetic features:
|
||||||
|
#define TE_EXPLFLAG_NONE 0 // all flags clear makes default Half-Life explosion
|
||||||
|
#define TE_EXPLFLAG_NOADDITIVE 1 // sprite will be drawn opaque (ensure that the sprite you send is a non-additive sprite)
|
||||||
|
#define TE_EXPLFLAG_NODLIGHTS 2 // do not render dynamic lights
|
||||||
|
#define TE_EXPLFLAG_NOSOUND 4 // do not play client explosion sound
|
||||||
|
#define TE_EXPLFLAG_NOPARTICLES 8 // do not draw particles
|
||||||
|
|
||||||
|
|
||||||
|
#define TE_TAREXPLOSION 4 // Quake1 "tarbaby" explosion with sound
|
||||||
|
// coord coord coord (position)
|
||||||
|
|
||||||
|
#define TE_SMOKE 5 // alphablend sprite, move vertically 30 pps
|
||||||
|
// coord coord coord (position)
|
||||||
|
// short (sprite index)
|
||||||
|
// byte (scale in 0.1's)
|
||||||
|
// byte (framerate)
|
||||||
|
|
||||||
|
#define TE_TRACER 6 // tracer effect from point to point
|
||||||
|
// coord, coord, coord (start)
|
||||||
|
// coord, coord, coord (end)
|
||||||
|
|
||||||
|
#define TE_LIGHTNING 7 // TE_BEAMPOINTS with simplified parameters
|
||||||
|
// coord, coord, coord (start)
|
||||||
|
// coord, coord, coord (end)
|
||||||
|
// byte (life in 0.1's)
|
||||||
|
// byte (width in 0.1's)
|
||||||
|
// byte (amplitude in 0.01's)
|
||||||
|
// short (sprite model index)
|
||||||
|
|
||||||
|
#define TE_BEAMENTS 8
|
||||||
|
// short (start entity)
|
||||||
|
// short (end entity)
|
||||||
|
// short (sprite index)
|
||||||
|
// byte (starting frame)
|
||||||
|
// byte (frame rate in 0.1's)
|
||||||
|
// byte (life in 0.1's)
|
||||||
|
// byte (line width in 0.1's)
|
||||||
|
// byte (noise amplitude in 0.01's)
|
||||||
|
// byte,byte,byte (color)
|
||||||
|
// byte (brightness)
|
||||||
|
// byte (scroll speed in 0.1's)
|
||||||
|
|
||||||
|
#define TE_SPARKS 9 // 8 random tracers with gravity, ricochet sprite
|
||||||
|
// coord coord coord (position)
|
||||||
|
|
||||||
|
#define TE_LAVASPLASH 10 // Quake1 lava splash
|
||||||
|
// coord coord coord (position)
|
||||||
|
|
||||||
|
#define TE_TELEPORT 11 // Quake1 teleport splash
|
||||||
|
// coord coord coord (position)
|
||||||
|
|
||||||
|
#define TE_EXPLOSION2 12 // Quake1 colormaped (base palette) particle explosion with sound
|
||||||
|
// coord coord coord (position)
|
||||||
|
// byte (starting color)
|
||||||
|
// byte (num colors)
|
||||||
|
|
||||||
|
#define TE_BSPDECAL 13 // Decal from the .BSP file
|
||||||
|
// coord, coord, coord (x,y,z), decal position (center of texture in world)
|
||||||
|
// short (texture index of precached decal texture name)
|
||||||
|
// short (entity index)
|
||||||
|
// [optional - only included if previous short is non-zero (not the world)] short (index of model of above entity)
|
||||||
|
|
||||||
|
#define TE_IMPLOSION 14 // tracers moving toward a point
|
||||||
|
// coord, coord, coord (position)
|
||||||
|
// byte (radius)
|
||||||
|
// byte (count)
|
||||||
|
// byte (life in 0.1's)
|
||||||
|
|
||||||
|
#define TE_SPRITETRAIL 15 // line of moving glow sprites with gravity, fadeout, and collisions
|
||||||
|
// coord, coord, coord (start)
|
||||||
|
// coord, coord, coord (end)
|
||||||
|
// short (sprite index)
|
||||||
|
// byte (count)
|
||||||
|
// byte (life in 0.1's)
|
||||||
|
// byte (scale in 0.1's)
|
||||||
|
// byte (velocity along vector in 10's)
|
||||||
|
// byte (randomness of velocity in 10's)
|
||||||
|
|
||||||
|
#define TE_BEAM 16 // obsolete
|
||||||
|
|
||||||
|
#define TE_SPRITE 17 // additive sprite, plays 1 cycle
|
||||||
|
// coord, coord, coord (position)
|
||||||
|
// short (sprite index)
|
||||||
|
// byte (scale in 0.1's)
|
||||||
|
// byte (brightness)
|
||||||
|
|
||||||
|
#define TE_BEAMSPRITE 18 // A beam with a sprite at the end
|
||||||
|
// coord, coord, coord (start position)
|
||||||
|
// coord, coord, coord (end position)
|
||||||
|
// short (beam sprite index)
|
||||||
|
// short (end sprite index)
|
||||||
|
|
||||||
|
#define TE_BEAMTORUS 19 // screen aligned beam ring, expands to max radius over lifetime
|
||||||
|
// coord coord coord (center position)
|
||||||
|
// coord coord coord (axis and radius)
|
||||||
|
// short (sprite index)
|
||||||
|
// byte (starting frame)
|
||||||
|
// byte (frame rate in 0.1's)
|
||||||
|
// byte (life in 0.1's)
|
||||||
|
// byte (line width in 0.1's)
|
||||||
|
// byte (noise amplitude in 0.01's)
|
||||||
|
// byte,byte,byte (color)
|
||||||
|
// byte (brightness)
|
||||||
|
// byte (scroll speed in 0.1's)
|
||||||
|
|
||||||
|
#define TE_BEAMDISK 20 // disk that expands to max radius over lifetime
|
||||||
|
// coord coord coord (center position)
|
||||||
|
// coord coord coord (axis and radius)
|
||||||
|
// short (sprite index)
|
||||||
|
// byte (starting frame)
|
||||||
|
// byte (frame rate in 0.1's)
|
||||||
|
// byte (life in 0.1's)
|
||||||
|
// byte (line width in 0.1's)
|
||||||
|
// byte (noise amplitude in 0.01's)
|
||||||
|
// byte,byte,byte (color)
|
||||||
|
// byte (brightness)
|
||||||
|
// byte (scroll speed in 0.1's)
|
||||||
|
|
||||||
|
#define TE_BEAMCYLINDER 21 // cylinder that expands to max radius over lifetime
|
||||||
|
// coord coord coord (center position)
|
||||||
|
// coord coord coord (axis and radius)
|
||||||
|
// short (sprite index)
|
||||||
|
// byte (starting frame)
|
||||||
|
// byte (frame rate in 0.1's)
|
||||||
|
// byte (life in 0.1's)
|
||||||
|
// byte (line width in 0.1's)
|
||||||
|
// byte (noise amplitude in 0.01's)
|
||||||
|
// byte,byte,byte (color)
|
||||||
|
// byte (brightness)
|
||||||
|
// byte (scroll speed in 0.1's)
|
||||||
|
|
||||||
|
#define TE_BEAMFOLLOW 22 // create a line of decaying beam segments until entity stops moving
|
||||||
|
// short (entity:attachment to follow)
|
||||||
|
// short (sprite index)
|
||||||
|
// byte (life in 0.1's)
|
||||||
|
// byte (line width in 0.1's)
|
||||||
|
// byte,byte,byte (color)
|
||||||
|
// byte (brightness)
|
||||||
|
|
||||||
|
#define TE_GLOWSPRITE 23
|
||||||
|
// coord, coord, coord (pos) short (model index) byte (scale / 10)
|
||||||
|
|
||||||
|
#define TE_BEAMRING 24 // connect a beam ring to two entities
|
||||||
|
// short (start entity)
|
||||||
|
// short (end entity)
|
||||||
|
// short (sprite index)
|
||||||
|
// byte (starting frame)
|
||||||
|
// byte (frame rate in 0.1's)
|
||||||
|
// byte (life in 0.1's)
|
||||||
|
// byte (line width in 0.1's)
|
||||||
|
// byte (noise amplitude in 0.01's)
|
||||||
|
// byte,byte,byte (color)
|
||||||
|
// byte (brightness)
|
||||||
|
// byte (scroll speed in 0.1's)
|
||||||
|
|
||||||
|
#define TE_STREAK_SPLASH 25 // oriented shower of tracers
|
||||||
|
// coord coord coord (start position)
|
||||||
|
// coord coord coord (direction vector)
|
||||||
|
// byte (color)
|
||||||
|
// short (count)
|
||||||
|
// short (base speed)
|
||||||
|
// short (ramdon velocity)
|
||||||
|
|
||||||
|
#define TE_BEAMHOSE 26 // obsolete
|
||||||
|
|
||||||
|
#define TE_DLIGHT 27 // dynamic light, effect world, minor entity effect
|
||||||
|
// coord, coord, coord (pos)
|
||||||
|
// byte (radius in 10's)
|
||||||
|
// byte byte byte (color)
|
||||||
|
// byte (brightness)
|
||||||
|
// byte (life in 10's)
|
||||||
|
// byte (decay rate in 10's)
|
||||||
|
|
||||||
|
#define TE_ELIGHT 28 // point entity light, no world effect
|
||||||
|
// short (entity:attachment to follow)
|
||||||
|
// coord coord coord (initial position)
|
||||||
|
// coord (radius)
|
||||||
|
// byte byte byte (color)
|
||||||
|
// byte (life in 0.1's)
|
||||||
|
// coord (decay rate)
|
||||||
|
|
||||||
|
#define TE_TEXTMESSAGE 29
|
||||||
|
// short 1.2.13 x (-1 = center)
|
||||||
|
// short 1.2.13 y (-1 = center)
|
||||||
|
// byte Effect 0 = fade in/fade out
|
||||||
|
// 1 is flickery credits
|
||||||
|
// 2 is write out (training room)
|
||||||
|
|
||||||
|
// 4 bytes r,g,b,a color1 (text color)
|
||||||
|
// 4 bytes r,g,b,a color2 (effect color)
|
||||||
|
// ushort 8.8 fadein time
|
||||||
|
// ushort 8.8 fadeout time
|
||||||
|
// ushort 8.8 hold time
|
||||||
|
// optional ushort 8.8 fxtime (time the highlight lags behing the leading text in effect 2)
|
||||||
|
// string text message (512 chars max sz string)
|
||||||
|
#define TE_LINE 30
|
||||||
|
// coord, coord, coord startpos
|
||||||
|
// coord, coord, coord endpos
|
||||||
|
// short life in 0.1 s
|
||||||
|
// 3 bytes r, g, b
|
||||||
|
|
||||||
|
#define TE_BOX 31
|
||||||
|
// coord, coord, coord boxmins
|
||||||
|
// coord, coord, coord boxmaxs
|
||||||
|
// short life in 0.1 s
|
||||||
|
// 3 bytes r, g, b
|
||||||
|
|
||||||
|
#define TE_KILLBEAM 99 // kill all beams attached to entity
|
||||||
|
// short (entity)
|
||||||
|
|
||||||
|
#define TE_LARGEFUNNEL 100
|
||||||
|
// coord coord coord (funnel position)
|
||||||
|
// short (sprite index)
|
||||||
|
// short (flags)
|
||||||
|
|
||||||
|
#define TE_BLOODSTREAM 101 // particle spray
|
||||||
|
// coord coord coord (start position)
|
||||||
|
// coord coord coord (spray vector)
|
||||||
|
// byte (color)
|
||||||
|
// byte (speed)
|
||||||
|
|
||||||
|
#define TE_SHOWLINE 102 // line of particles every 5 units, dies in 30 seconds
|
||||||
|
// coord coord coord (start position)
|
||||||
|
// coord coord coord (end position)
|
||||||
|
|
||||||
|
#define TE_BLOOD 103 // particle spray
|
||||||
|
// coord coord coord (start position)
|
||||||
|
// coord coord coord (spray vector)
|
||||||
|
// byte (color)
|
||||||
|
// byte (speed)
|
||||||
|
|
||||||
|
#define TE_DECAL 104 // Decal applied to a brush entity (not the world)
|
||||||
|
// coord, coord, coord (x,y,z), decal position (center of texture in world)
|
||||||
|
// byte (texture index of precached decal texture name)
|
||||||
|
// short (entity index)
|
||||||
|
|
||||||
|
#define TE_FIZZ 105 // create alpha sprites inside of entity, float upwards
|
||||||
|
// short (entity)
|
||||||
|
// short (sprite index)
|
||||||
|
// byte (density)
|
||||||
|
|
||||||
|
#define TE_MODEL 106 // create a moving model that bounces and makes a sound when it hits
|
||||||
|
// coord, coord, coord (position)
|
||||||
|
// coord, coord, coord (velocity)
|
||||||
|
// angle (initial yaw)
|
||||||
|
// short (model index)
|
||||||
|
// byte (bounce sound type)
|
||||||
|
// byte (life in 0.1's)
|
||||||
|
|
||||||
|
#define TE_EXPLODEMODEL 107 // spherical shower of models, picks from set
|
||||||
|
// coord, coord, coord (origin)
|
||||||
|
// coord (velocity)
|
||||||
|
// short (model index)
|
||||||
|
// short (count)
|
||||||
|
// byte (life in 0.1's)
|
||||||
|
|
||||||
|
#define TE_BREAKMODEL 108 // box of models or sprites
|
||||||
|
// coord, coord, coord (position)
|
||||||
|
// coord, coord, coord (size)
|
||||||
|
// coord, coord, coord (velocity)
|
||||||
|
// byte (random velocity in 10's)
|
||||||
|
// short (sprite or model index)
|
||||||
|
// byte (count)
|
||||||
|
// byte (life in 0.1 secs)
|
||||||
|
// byte (flags)
|
||||||
|
|
||||||
|
#define TE_GUNSHOTDECAL 109 // decal and ricochet sound
|
||||||
|
// coord, coord, coord (position)
|
||||||
|
// short (entity index???)
|
||||||
|
// byte (decal???)
|
||||||
|
|
||||||
|
#define TE_SPRITE_SPRAY 110 // spay of alpha sprites
|
||||||
|
// coord, coord, coord (position)
|
||||||
|
// coord, coord, coord (velocity)
|
||||||
|
// short (sprite index)
|
||||||
|
// byte (count)
|
||||||
|
// byte (speed)
|
||||||
|
// byte (noise)
|
||||||
|
|
||||||
|
#define TE_ARMOR_RICOCHET 111 // quick spark sprite, client ricochet sound.
|
||||||
|
// coord, coord, coord (position)
|
||||||
|
// byte (scale in 0.1's)
|
||||||
|
|
||||||
|
#define TE_PLAYERDECAL 112 // ???
|
||||||
|
// byte (playerindex)
|
||||||
|
// coord, coord, coord (position)
|
||||||
|
// short (entity???)
|
||||||
|
// byte (decal number???)
|
||||||
|
// [optional] short (model index???)
|
||||||
|
|
||||||
|
#define TE_BUBBLES 113 // create alpha sprites inside of box, float upwards
|
||||||
|
// coord, coord, coord (min start position)
|
||||||
|
// coord, coord, coord (max start position)
|
||||||
|
// coord (float height)
|
||||||
|
// short (model index)
|
||||||
|
// byte (count)
|
||||||
|
// coord (speed)
|
||||||
|
|
||||||
|
#define TE_BUBBLETRAIL 114 // create alpha sprites along a line, float upwards
|
||||||
|
// coord, coord, coord (min start position)
|
||||||
|
// coord, coord, coord (max start position)
|
||||||
|
// coord (float height)
|
||||||
|
// short (model index)
|
||||||
|
// byte (count)
|
||||||
|
// coord (speed)
|
||||||
|
|
||||||
|
#define TE_BLOODSPRITE 115 // spray of opaque sprite1's that fall, single sprite2 for 1..2 secs (this is a high-priority tent)
|
||||||
|
// coord, coord, coord (position)
|
||||||
|
// short (sprite1 index)
|
||||||
|
// short (sprite2 index)
|
||||||
|
// byte (color)
|
||||||
|
// byte (scale)
|
||||||
|
|
||||||
|
#define TE_WORLDDECAL 116 // Decal applied to the world brush
|
||||||
|
// coord, coord, coord (x,y,z), decal position (center of texture in world)
|
||||||
|
// byte (texture index of precached decal texture name)
|
||||||
|
|
||||||
|
#define TE_WORLDDECALHIGH 117 // Decal (with texture index > 256) applied to world brush
|
||||||
|
// coord, coord, coord (x,y,z), decal position (center of texture in world)
|
||||||
|
// byte (texture index of precached decal texture name - 256)
|
||||||
|
|
||||||
|
#define TE_DECALHIGH 118 // Same as TE_DECAL, but the texture index was greater than 256
|
||||||
|
// coord, coord, coord (x,y,z), decal position (center of texture in world)
|
||||||
|
// byte (texture index of precached decal texture name - 256)
|
||||||
|
// short (entity index)
|
||||||
|
|
||||||
|
#define TE_PROJECTILE 119 // Makes a projectile (like a nail) (this is a high-priority tent)
|
||||||
|
// coord, coord, coord (position)
|
||||||
|
// coord, coord, coord (velocity)
|
||||||
|
// short (modelindex)
|
||||||
|
// byte (life)
|
||||||
|
// byte (owner) projectile won't collide with owner (if owner == 0, projectile will hit any client).
|
||||||
|
|
||||||
|
#define TE_SPRAY 120 // Throws a shower of sprites or models
|
||||||
|
// coord, coord, coord (position)
|
||||||
|
// coord, coord, coord (direction)
|
||||||
|
// short (modelindex)
|
||||||
|
// byte (count)
|
||||||
|
// byte (speed)
|
||||||
|
// byte (noise)
|
||||||
|
// byte (rendermode)
|
||||||
|
|
||||||
|
#define TE_PLAYERSPRITES 121 // sprites emit from a player's bounding box (ONLY use for players!)
|
||||||
|
// byte (playernum)
|
||||||
|
// short (sprite modelindex)
|
||||||
|
// byte (count)
|
||||||
|
// byte (variance) (0 = no variance in size) (10 = 10% variance in size)
|
||||||
|
|
||||||
|
#define TE_PARTICLEBURST 122 // very similar to lavasplash.
|
||||||
|
// coord (origin)
|
||||||
|
// short (radius)
|
||||||
|
// byte (particle color)
|
||||||
|
// byte (duration * 10) (will be randomized a bit)
|
||||||
|
|
||||||
|
#define TE_FIREFIELD 123 // makes a field of fire.
|
||||||
|
// coord (origin)
|
||||||
|
// short (radius) (fire is made in a square around origin. -radius, -radius to radius, radius)
|
||||||
|
// short (modelindex)
|
||||||
|
// byte (count)
|
||||||
|
// byte (flags)
|
||||||
|
// byte (duration (in seconds) * 10) (will be randomized a bit)
|
||||||
|
//
|
||||||
|
// to keep network traffic low, this message has associated flags that fit into a byte:
|
||||||
|
#define TEFIRE_FLAG_ALLFLOAT 1 // all sprites will drift upwards as they animate
|
||||||
|
#define TEFIRE_FLAG_SOMEFLOAT 2 // some of the sprites will drift upwards. (50% chance)
|
||||||
|
#define TEFIRE_FLAG_LOOP 4 // if set, sprite plays at 15 fps, otherwise plays at whatever rate stretches the animation over the sprite's duration.
|
||||||
|
#define TEFIRE_FLAG_ALPHA 8 // if set, sprite is rendered alpha blended at 50% else, opaque
|
||||||
|
#define TEFIRE_FLAG_PLANAR 16 // if set, all fire sprites have same initial Z instead of randomly filling a cube.
|
||||||
|
#define TEFIRE_FLAG_ADDITIVE 32 // if set, sprite is rendered non-opaque with additive
|
||||||
|
|
||||||
|
#define TE_PLAYERATTACHMENT 124 // attaches a TENT to a player (this is a high-priority tent)
|
||||||
|
// byte (entity index of player)
|
||||||
|
// coord (vertical offset) ( attachment origin.z = player origin.z + vertical offset )
|
||||||
|
// short (model index)
|
||||||
|
// short (life * 10 );
|
||||||
|
|
||||||
|
#define TE_KILLPLAYERATTACHMENTS 125 // will expire all TENTS attached to a player.
|
||||||
|
// byte (entity index of player)
|
||||||
|
|
||||||
|
#define TE_MULTIGUNSHOT 126 // much more compact shotgun message
|
||||||
|
// This message is used to make a client approximate a 'spray' of gunfire.
|
||||||
|
// Any weapon that fires more than one bullet per frame and fires in a bit of a spread is
|
||||||
|
// a good candidate for MULTIGUNSHOT use. (shotguns)
|
||||||
|
//
|
||||||
|
// NOTE: This effect makes the client do traces for each bullet, these client traces ignore
|
||||||
|
// entities that have studio models.Traces are 4096 long.
|
||||||
|
//
|
||||||
|
// coord (origin)
|
||||||
|
// coord (origin)
|
||||||
|
// coord (origin)
|
||||||
|
// coord (direction)
|
||||||
|
// coord (direction)
|
||||||
|
// coord (direction)
|
||||||
|
// coord (x noise * 100)
|
||||||
|
// coord (y noise * 100)
|
||||||
|
// byte (count)
|
||||||
|
// byte (bullethole decal texture index)
|
||||||
|
|
||||||
|
#define TE_USERTRACER 127 // larger message than the standard tracer, but allows some customization.
|
||||||
|
// coord (origin)
|
||||||
|
// coord (origin)
|
||||||
|
// coord (origin)
|
||||||
|
// coord (velocity)
|
||||||
|
// coord (velocity)
|
||||||
|
// coord (velocity)
|
||||||
|
// byte ( life * 10 )
|
||||||
|
// byte ( color ) this is an index into an array of color vectors in the engine. (0 - )
|
||||||
|
// byte ( length * 10 )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define MSG_BROADCAST 0 // unreliable to all
|
||||||
|
#define MSG_ONE 1 // reliable to one (msg_entity)
|
||||||
|
#define MSG_ALL 2 // reliable to all
|
||||||
|
#define MSG_INIT 3 // write to the init string
|
||||||
|
#define MSG_PVS 4 // Ents in PVS of org
|
||||||
|
#define MSG_PAS 5 // Ents in PAS of org
|
||||||
|
#define MSG_PVS_R 6 // Reliable to PVS
|
||||||
|
#define MSG_PAS_R 7 // Reliable to PAS
|
||||||
|
#define MSG_ONE_UNRELIABLE 8 // Send to one client, but don't put in reliable stream, put in unreliable datagram ( could be dropped )
|
||||||
|
#define MSG_SPEC 9 // Sends to all spectator proxies
|
||||||
|
|
||||||
|
// contents of a spot in the world
|
||||||
|
#define CONTENTS_EMPTY -1
|
||||||
|
#define CONTENTS_SOLID -2
|
||||||
|
#define CONTENTS_WATER -3
|
||||||
|
#define CONTENTS_SLIME -4
|
||||||
|
#define CONTENTS_LAVA -5
|
||||||
|
#define CONTENTS_SKY -6
|
||||||
|
/* These additional contents constants are defined in bspfile.h
|
||||||
|
#define CONTENTS_ORIGIN -7 // removed at csg time
|
||||||
|
#define CONTENTS_CLIP -8 // changed to contents_solid
|
||||||
|
#define CONTENTS_CURRENT_0 -9
|
||||||
|
#define CONTENTS_CURRENT_90 -10
|
||||||
|
#define CONTENTS_CURRENT_180 -11
|
||||||
|
#define CONTENTS_CURRENT_270 -12
|
||||||
|
#define CONTENTS_CURRENT_UP -13
|
||||||
|
#define CONTENTS_CURRENT_DOWN -14
|
||||||
|
|
||||||
|
#define CONTENTS_TRANSLUCENT -15
|
||||||
|
*/
|
||||||
|
#define CONTENTS_LADDER -16
|
||||||
|
|
||||||
|
#define CONTENT_FLYFIELD -17
|
||||||
|
#define CONTENT_GRAVITY_FLYFIELD -18
|
||||||
|
#define CONTENT_FOG -19
|
||||||
|
|
||||||
|
#define CONTENT_EMPTY -1
|
||||||
|
#define CONTENT_SOLID -2
|
||||||
|
#define CONTENT_WATER -3
|
||||||
|
#define CONTENT_SLIME -4
|
||||||
|
#define CONTENT_LAVA -5
|
||||||
|
#define CONTENT_SKY -6
|
||||||
|
|
||||||
|
// channels
|
||||||
|
#define CHAN_AUTO 0
|
||||||
|
#define CHAN_WEAPON 1
|
||||||
|
#define CHAN_VOICE 2
|
||||||
|
#define CHAN_ITEM 3
|
||||||
|
#define CHAN_BODY 4
|
||||||
|
#define CHAN_STREAM 5 // allocate stream channel from the static or dynamic area
|
||||||
|
#define CHAN_STATIC 6 // allocate channel from the static area
|
||||||
|
#define CHAN_NETWORKVOICE_BASE 7 // voice data coming across the network
|
||||||
|
#define CHAN_NETWORKVOICE_END 500 // network voice data reserves slots (CHAN_NETWORKVOICE_BASE through CHAN_NETWORKVOICE_END).
|
||||||
|
#define CHAN_BOT 501 // channel used for bot chatter.
|
||||||
|
|
||||||
|
// attenuation values
|
||||||
|
#define ATTN_NONE 0
|
||||||
|
#define ATTN_NORM (float)0.8
|
||||||
|
#define ATTN_IDLE (float)2
|
||||||
|
#define ATTN_STATIC (float)1.25
|
||||||
|
|
||||||
|
// pitch values
|
||||||
|
#define PITCH_NORM 100 // non-pitch shifted
|
||||||
|
#define PITCH_LOW 95 // other values are possible - 0-255, where 255 is very high
|
||||||
|
#define PITCH_HIGH 120
|
||||||
|
|
||||||
|
// volume values
|
||||||
|
#define VOL_NORM 1.0
|
||||||
|
|
||||||
|
// plats
|
||||||
|
#define PLAT_LOW_TRIGGER 1
|
||||||
|
|
||||||
|
// Trains
|
||||||
|
#define SF_TRAIN_WAIT_RETRIGGER 1
|
||||||
|
#define SF_TRAIN_START_ON 4 // Train is initially moving
|
||||||
|
#define SF_TRAIN_PASSABLE 8 // Train is not solid -- used to make water trains
|
||||||
|
|
||||||
|
// buttons
|
||||||
|
#ifndef IN_BUTTONS_H
|
||||||
|
#include "in_buttons.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Break Model Defines
|
||||||
|
|
||||||
|
#define BREAK_TYPEMASK 0x4F
|
||||||
|
#define BREAK_GLASS 0x01
|
||||||
|
#define BREAK_METAL 0x02
|
||||||
|
#define BREAK_FLESH 0x04
|
||||||
|
#define BREAK_WOOD 0x08
|
||||||
|
|
||||||
|
#define BREAK_SMOKE 0x10
|
||||||
|
#define BREAK_TRANS 0x20
|
||||||
|
#define BREAK_CONCRETE 0x40
|
||||||
|
#define BREAK_2 0x80
|
||||||
|
|
||||||
|
// Colliding temp entity sounds
|
||||||
|
|
||||||
|
#define BOUNCE_GLASS BREAK_GLASS
|
||||||
|
#define BOUNCE_METAL BREAK_METAL
|
||||||
|
#define BOUNCE_FLESH BREAK_FLESH
|
||||||
|
#define BOUNCE_WOOD BREAK_WOOD
|
||||||
|
#define BOUNCE_SHRAP 0x10
|
||||||
|
#define BOUNCE_SHELL 0x20
|
||||||
|
#define BOUNCE_CONCRETE BREAK_CONCRETE
|
||||||
|
#define BOUNCE_SHOTSHELL 0x80
|
||||||
|
|
||||||
|
// Temp entity bounce sound types
|
||||||
|
#define TE_BOUNCE_NULL 0
|
||||||
|
#define TE_BOUNCE_SHELL 1
|
||||||
|
#define TE_BOUNCE_SHOTSHELL 2
|
||||||
|
|
||||||
|
// Rendering constants
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
kRenderNormal, // src
|
||||||
|
kRenderTransColor, // c*a+dest*(1-a)
|
||||||
|
kRenderTransTexture, // src*a+dest*(1-a)
|
||||||
|
kRenderGlow, // src*a+dest -- No Z buffer checks
|
||||||
|
kRenderTransAlpha, // src*srca+dest*(1-srca)
|
||||||
|
kRenderTransAdd, // src*a+dest
|
||||||
|
};
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
kRenderFxNone = 0,
|
||||||
|
kRenderFxPulseSlow,
|
||||||
|
kRenderFxPulseFast,
|
||||||
|
kRenderFxPulseSlowWide,
|
||||||
|
kRenderFxPulseFastWide,
|
||||||
|
kRenderFxFadeSlow,
|
||||||
|
kRenderFxFadeFast,
|
||||||
|
kRenderFxSolidSlow,
|
||||||
|
kRenderFxSolidFast,
|
||||||
|
kRenderFxStrobeSlow,
|
||||||
|
kRenderFxStrobeFast,
|
||||||
|
kRenderFxStrobeFaster,
|
||||||
|
kRenderFxFlickerSlow,
|
||||||
|
kRenderFxFlickerFast,
|
||||||
|
kRenderFxNoDissipation,
|
||||||
|
kRenderFxDistort, // Distort/scale/translate flicker
|
||||||
|
kRenderFxHologram, // kRenderFxDistort + distance fade
|
||||||
|
kRenderFxDeadPlayer, // kRenderAmt is the player index
|
||||||
|
kRenderFxExplode, // Scale up really big!
|
||||||
|
kRenderFxGlowShell, // Glowing Shell
|
||||||
|
kRenderFxClampMinScale, // Keep this sprite from getting very small (SPRITES only!)
|
||||||
|
kRenderFxLightMultiplier, //CTM !!!CZERO added to tell the studiorender that the value in iuser2 is a lightmultiplier
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
typedef unsigned int func_t;
|
||||||
|
typedef unsigned int string_t;
|
||||||
|
|
||||||
|
typedef unsigned char byte;
|
||||||
|
typedef unsigned short word;
|
||||||
|
#define _DEF_BYTE_
|
||||||
|
|
||||||
|
#undef true
|
||||||
|
#undef false
|
||||||
|
|
||||||
|
#ifndef __cplusplus
|
||||||
|
typedef enum {false, true} qboolean;
|
||||||
|
#else
|
||||||
|
typedef int qboolean;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
byte r, g, b;
|
||||||
|
} color24;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned r, g, b, a;
|
||||||
|
} colorVec;
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma pack(push,2)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned short r, g, b, a;
|
||||||
|
} PackedColorVec;
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma pack(pop)
|
||||||
|
#endif
|
||||||
|
typedef struct link_s
|
||||||
|
{
|
||||||
|
struct link_s *prev, *next;
|
||||||
|
} link_t;
|
||||||
|
|
||||||
|
typedef struct edict_s edict_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
vec3_t normal;
|
||||||
|
float dist;
|
||||||
|
} plane_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
qboolean allsolid; // if true, plane is not valid
|
||||||
|
qboolean startsolid; // if true, the initial point was in a solid area
|
||||||
|
qboolean inopen, inwater;
|
||||||
|
float fraction; // time completed, 1.0 = didn't hit anything
|
||||||
|
vec3_t endpos; // final position
|
||||||
|
plane_t plane; // surface normal at impact
|
||||||
|
edict_t * ent; // entity the surface is on
|
||||||
|
int hitgroup; // 0 == generic, non zero is specific body part
|
||||||
|
} trace_t;
|
||||||
|
|
||||||
|
#endif // CONST_H
|
38
metamod/extra/example/include/hlsdk/common/crc.h
Normal file
38
metamod/extra/example/include/hlsdk/common/crc.h
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
/* crc.h */
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "quakedef.h"
|
||||||
|
|
||||||
|
typedef unsigned int CRC32_t;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void CRC32_Init(CRC32_t *pulCRC);
|
||||||
|
CRC32_t CRC32_Final(CRC32_t pulCRC);
|
||||||
|
void CRC32_ProcessByte(CRC32_t *pulCRC, unsigned char ch);
|
||||||
|
void CRC32_ProcessBuffer(CRC32_t *pulCRC, void *pBuffer, int nBuffer);
|
||||||
|
BOOL CRC_File(CRC32_t *crcvalue, char *pszFileName);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
byte COM_BlockSequenceCRCByte(byte *base, int length, int sequence);
|
||||||
|
int CRC_MapFile(CRC32_t *crcvalue, char *pszFileName);
|
39
metamod/extra/example/include/hlsdk/common/cvardef.h
Normal file
39
metamod/extra/example/include/hlsdk/common/cvardef.h
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
|
||||||
|
#ifndef CVARDEF_H
|
||||||
|
#define CVARDEF_H
|
||||||
|
|
||||||
|
#define FCVAR_ARCHIVE (1<<0) // set to cause it to be saved to vars.rc
|
||||||
|
#define FCVAR_USERINFO (1<<1) // changes the client's info string
|
||||||
|
#define FCVAR_SERVER (1<<2) // notifies players when changed
|
||||||
|
#define FCVAR_EXTDLL (1<<3) // defined by external DLL
|
||||||
|
#define FCVAR_CLIENTDLL (1<<4) // defined by the client dll
|
||||||
|
#define FCVAR_PROTECTED (1<<5) // It's a server cvar, but we don't send the data since it's a password, etc. Sends 1 if it's not bland/zero, 0 otherwise as value
|
||||||
|
#define FCVAR_SPONLY (1<<6) // This cvar cannot be changed by clients connected to a multiplayer server.
|
||||||
|
#define FCVAR_PRINTABLEONLY (1<<7) // This cvar's string cannot contain unprintable characters ( e.g., used for player name etc ).
|
||||||
|
#define FCVAR_UNLOGGED (1<<8) // If this is a FCVAR_SERVER, don't log changes to the log file / console if we are creating a log
|
||||||
|
#define FCVAR_NOEXTRAWHITEPACE (1<<9) // strip trailing/leading white space from this cvar
|
||||||
|
|
||||||
|
typedef struct cvar_s
|
||||||
|
{
|
||||||
|
const char *name;
|
||||||
|
char *string;
|
||||||
|
int flags;
|
||||||
|
float value;
|
||||||
|
struct cvar_s *next;
|
||||||
|
} cvar_t;
|
||||||
|
|
||||||
|
#endif // CVARDEF_H
|
31
metamod/extra/example/include/hlsdk/common/demo_api.h
Normal file
31
metamod/extra/example/include/hlsdk/common/demo_api.h
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#if !defined ( DEMO_APIH )
|
||||||
|
#define DEMO_APIH
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct demo_api_s
|
||||||
|
{
|
||||||
|
int ( *IsRecording ) ( void );
|
||||||
|
int ( *IsPlayingback ) ( void );
|
||||||
|
int ( *IsTimeDemo ) ( void );
|
||||||
|
void ( *WriteBuffer ) ( int size, unsigned char *buffer );
|
||||||
|
} demo_api_t;
|
||||||
|
|
||||||
|
extern demo_api_t demoapi;
|
||||||
|
|
||||||
|
#endif
|
38
metamod/extra/example/include/hlsdk/common/director_cmds.h
Normal file
38
metamod/extra/example/include/hlsdk/common/director_cmds.h
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//
|
||||||
|
// $NoKeywords: $
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
// director_cmds.h
|
||||||
|
// sub commands for svc_director
|
||||||
|
|
||||||
|
#define DRC_ACTIVE 0 // tells client that he's an spectator and will get director command
|
||||||
|
#define DRC_STATUS 1 // send status infos about proxy
|
||||||
|
#define DRC_CAMERA 2 // set the actual director camera position
|
||||||
|
#define DRC_EVENT 3 // informs the dircetor about ann important game event
|
||||||
|
|
||||||
|
|
||||||
|
#define DRC_FLAG_PRIO_MASK 0x0F // priorities between 0 and 15 (15 most important)
|
||||||
|
#define DRC_FLAG_SIDE (1<<4)
|
||||||
|
#define DRC_FLAG_DRAMATIC (1<<5)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// commands of the director API function CallDirectorProc(...)
|
||||||
|
|
||||||
|
#define DRCAPI_NOP 0 // no operation
|
||||||
|
#define DRCAPI_ACTIVE 1 // de/acivates director mode in engine
|
||||||
|
#define DRCAPI_STATUS 2 // request proxy information
|
||||||
|
#define DRCAPI_SETCAM 3 // set camera n to given position and angle
|
||||||
|
#define DRCAPI_GETCAM 4 // request camera n position and angle
|
||||||
|
#define DRCAPI_DIRPLAY 5 // set director time and play with normal speed
|
||||||
|
#define DRCAPI_DIRFREEZE 6 // freeze directo at this time
|
||||||
|
#define DRCAPI_SETVIEWMODE 7 // overview or 4 cameras
|
||||||
|
#define DRCAPI_SETOVERVIEWPARAMS 8 // sets parameter for overview mode
|
||||||
|
#define DRCAPI_SETFOCUS 9 // set the camera which has the input focus
|
||||||
|
#define DRCAPI_GETTARGETS 10 // queries engine for player list
|
||||||
|
#define DRCAPI_SETVIEWPOINTS 11 // gives engine all waypoints
|
||||||
|
|
||||||
|
|
33
metamod/extra/example/include/hlsdk/common/dlight.h
Normal file
33
metamod/extra/example/include/hlsdk/common/dlight.h
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#if !defined ( DLIGHTH )
|
||||||
|
#define DLIGHTH
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct dlight_s
|
||||||
|
{
|
||||||
|
vec3_t origin;
|
||||||
|
float radius;
|
||||||
|
color24 color;
|
||||||
|
float die; // stop lighting after this time
|
||||||
|
float decay; // drop this each second
|
||||||
|
float minlight; // don't add when contributing less
|
||||||
|
int key;
|
||||||
|
qboolean dark; // subtracts light instead of adding
|
||||||
|
} dlight_t;
|
||||||
|
|
||||||
|
#endif
|
23
metamod/extra/example/include/hlsdk/common/dll_state.h
Normal file
23
metamod/extra/example/include/hlsdk/common/dll_state.h
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//
|
||||||
|
// $NoKeywords: $
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
//DLL State Flags
|
||||||
|
|
||||||
|
#define DLL_INACTIVE 0 // no dll
|
||||||
|
#define DLL_ACTIVE 1 // dll is running
|
||||||
|
#define DLL_PAUSED 2 // dll is paused
|
||||||
|
#define DLL_CLOSE 3 // closing down dll
|
||||||
|
#define DLL_TRANS 4 // Level Transition
|
||||||
|
|
||||||
|
// DLL Pause reasons
|
||||||
|
|
||||||
|
#define DLL_NORMAL 0 // User hit Esc or something.
|
||||||
|
#define DLL_QUIT 4 // Quit now
|
||||||
|
#define DLL_RESTART 5 // Switch to launcher for linux, does a quit but returns 1
|
||||||
|
|
||||||
|
// DLL Substate info ( not relevant )
|
||||||
|
#define ENG_NORMAL (1<<0)
|
198
metamod/extra/example/include/hlsdk/common/entity_state.h
Normal file
198
metamod/extra/example/include/hlsdk/common/entity_state.h
Normal file
@ -0,0 +1,198 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
|
||||||
|
#ifndef ENTITY_STATE_H
|
||||||
|
#define ENTITY_STATE_H
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "const.h"
|
||||||
|
|
||||||
|
|
||||||
|
// For entityType below
|
||||||
|
#define ENTITY_NORMAL (1<<0)
|
||||||
|
#define ENTITY_BEAM (1<<1)
|
||||||
|
#define ENTITY_UNINITIALIZED (1<<30)
|
||||||
|
|
||||||
|
// Entity state is used for the baseline and for delta compression of a packet of
|
||||||
|
// entities that is sent to a client.
|
||||||
|
typedef struct entity_state_s entity_state_t;
|
||||||
|
|
||||||
|
struct entity_state_s
|
||||||
|
{
|
||||||
|
// Fields which are filled in by routines outside of delta compression
|
||||||
|
int entityType;
|
||||||
|
// Index into cl_entities array for this entity.
|
||||||
|
int number;
|
||||||
|
float msg_time;
|
||||||
|
|
||||||
|
// Message number last time the player/entity state was updated.
|
||||||
|
int messagenum;
|
||||||
|
|
||||||
|
// Fields which can be transitted and reconstructed over the network stream
|
||||||
|
vec3_t origin;
|
||||||
|
vec3_t angles;
|
||||||
|
|
||||||
|
int modelindex;
|
||||||
|
int sequence;
|
||||||
|
float frame;
|
||||||
|
int colormap;
|
||||||
|
short skin;
|
||||||
|
short solid;
|
||||||
|
int effects;
|
||||||
|
float scale;
|
||||||
|
|
||||||
|
byte eflags;
|
||||||
|
|
||||||
|
// Render information
|
||||||
|
int rendermode;
|
||||||
|
int renderamt;
|
||||||
|
color24 rendercolor;
|
||||||
|
int renderfx;
|
||||||
|
|
||||||
|
int movetype;
|
||||||
|
float animtime;
|
||||||
|
float framerate;
|
||||||
|
int body;
|
||||||
|
byte controller[4];
|
||||||
|
byte blending[4];
|
||||||
|
vec3_t velocity;
|
||||||
|
|
||||||
|
// Send bbox down to client for use during prediction.
|
||||||
|
vec3_t mins;
|
||||||
|
vec3_t maxs;
|
||||||
|
|
||||||
|
int aiment;
|
||||||
|
// If owned by a player, the index of that player ( for projectiles ).
|
||||||
|
int owner;
|
||||||
|
|
||||||
|
// Friction, for prediction.
|
||||||
|
float friction;
|
||||||
|
// Gravity multiplier
|
||||||
|
float gravity;
|
||||||
|
|
||||||
|
// PLAYER SPECIFIC
|
||||||
|
int team;
|
||||||
|
int playerclass;
|
||||||
|
int health;
|
||||||
|
qboolean spectator;
|
||||||
|
int weaponmodel;
|
||||||
|
int gaitsequence;
|
||||||
|
// If standing on conveyor, e.g.
|
||||||
|
vec3_t basevelocity;
|
||||||
|
// Use the crouched hull, or the regular player hull.
|
||||||
|
int usehull;
|
||||||
|
// Latched buttons last time state updated.
|
||||||
|
int oldbuttons;
|
||||||
|
// -1 = in air, else pmove entity number
|
||||||
|
int onground;
|
||||||
|
int iStepLeft;
|
||||||
|
// How fast we are falling
|
||||||
|
float flFallVelocity;
|
||||||
|
|
||||||
|
float fov;
|
||||||
|
int weaponanim;
|
||||||
|
|
||||||
|
// Parametric movement overrides
|
||||||
|
vec3_t startpos;
|
||||||
|
vec3_t endpos;
|
||||||
|
float impacttime;
|
||||||
|
float starttime;
|
||||||
|
|
||||||
|
// For mods
|
||||||
|
int iuser1;
|
||||||
|
int iuser2;
|
||||||
|
int iuser3;
|
||||||
|
int iuser4;
|
||||||
|
float fuser1;
|
||||||
|
float fuser2;
|
||||||
|
float fuser3;
|
||||||
|
float fuser4;
|
||||||
|
vec3_t vuser1;
|
||||||
|
vec3_t vuser2;
|
||||||
|
vec3_t vuser3;
|
||||||
|
vec3_t vuser4;
|
||||||
|
};
|
||||||
|
|
||||||
|
#include "pm_info.h"
|
||||||
|
|
||||||
|
typedef struct clientdata_s
|
||||||
|
{
|
||||||
|
vec3_t origin;
|
||||||
|
vec3_t velocity;
|
||||||
|
|
||||||
|
int viewmodel;
|
||||||
|
vec3_t punchangle;
|
||||||
|
int flags;
|
||||||
|
int waterlevel;
|
||||||
|
int watertype;
|
||||||
|
vec3_t view_ofs;
|
||||||
|
float health;
|
||||||
|
|
||||||
|
int bInDuck;
|
||||||
|
|
||||||
|
int weapons; // remove?
|
||||||
|
|
||||||
|
int flTimeStepSound;
|
||||||
|
int flDuckTime;
|
||||||
|
int flSwimTime;
|
||||||
|
int waterjumptime;
|
||||||
|
|
||||||
|
float maxspeed;
|
||||||
|
|
||||||
|
float fov;
|
||||||
|
int weaponanim;
|
||||||
|
|
||||||
|
int m_iId;
|
||||||
|
int ammo_shells;
|
||||||
|
int ammo_nails;
|
||||||
|
int ammo_cells;
|
||||||
|
int ammo_rockets;
|
||||||
|
float m_flNextAttack;
|
||||||
|
|
||||||
|
int tfstate;
|
||||||
|
|
||||||
|
int pushmsec;
|
||||||
|
|
||||||
|
int deadflag;
|
||||||
|
|
||||||
|
char physinfo[ MAX_PHYSINFO_STRING ];
|
||||||
|
|
||||||
|
// For mods
|
||||||
|
int iuser1;
|
||||||
|
int iuser2;
|
||||||
|
int iuser3;
|
||||||
|
int iuser4;
|
||||||
|
float fuser1;
|
||||||
|
float fuser2;
|
||||||
|
float fuser3;
|
||||||
|
float fuser4;
|
||||||
|
vec3_t vuser1;
|
||||||
|
vec3_t vuser2;
|
||||||
|
vec3_t vuser3;
|
||||||
|
vec3_t vuser4;
|
||||||
|
} clientdata_t;
|
||||||
|
|
||||||
|
#include "weaponinfo.h"
|
||||||
|
|
||||||
|
typedef struct local_state_s
|
||||||
|
{
|
||||||
|
entity_state_t playerstate;
|
||||||
|
clientdata_t client;
|
||||||
|
weapon_data_t weapondata[ 64 ];
|
||||||
|
} local_state_t;
|
||||||
|
|
||||||
|
#endif // ENTITY_STATE_H
|
26
metamod/extra/example/include/hlsdk/common/entity_types.h
Normal file
26
metamod/extra/example/include/hlsdk/common/entity_types.h
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
// entity_types.h
|
||||||
|
#if !defined( ENTITY_TYPESH )
|
||||||
|
#define ENTITY_TYPESH
|
||||||
|
|
||||||
|
#define ET_NORMAL 0
|
||||||
|
#define ET_PLAYER 1
|
||||||
|
#define ET_TEMPENTITY 2
|
||||||
|
#define ET_BEAM 3
|
||||||
|
// BMODEL or SPRITE that was split across BSP nodes
|
||||||
|
#define ET_FRAGMENTED 4
|
||||||
|
|
||||||
|
#endif // !ENTITY_TYPESH
|
28
metamod/extra/example/include/hlsdk/common/enums.h
Normal file
28
metamod/extra/example/include/hlsdk/common/enums.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
|
||||||
|
#ifndef ENUMS_H
|
||||||
|
#define ENUMS_H
|
||||||
|
|
||||||
|
// Used as array indexer
|
||||||
|
typedef enum netsrc_s
|
||||||
|
{
|
||||||
|
NS_CLIENT = 0,
|
||||||
|
NS_SERVER,
|
||||||
|
NS_MULTICAST, // xxxMO
|
||||||
|
NS_MAX
|
||||||
|
} netsrc_t;
|
||||||
|
|
||||||
|
#endif
|
51
metamod/extra/example/include/hlsdk/common/event_api.h
Normal file
51
metamod/extra/example/include/hlsdk/common/event_api.h
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#if !defined ( EVENT_APIH )
|
||||||
|
#define EVENT_APIH
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define EVENT_API_VERSION 1
|
||||||
|
|
||||||
|
typedef struct event_api_s
|
||||||
|
{
|
||||||
|
int version;
|
||||||
|
void ( *EV_PlaySound ) ( int ent, float *origin, int channel, const char *sample, float volume, float attenuation, int fFlags, int pitch );
|
||||||
|
void ( *EV_StopSound ) ( int ent, int channel, const char *sample );
|
||||||
|
int ( *EV_FindModelIndex )( const char *pmodel );
|
||||||
|
int ( *EV_IsLocal ) ( int playernum );
|
||||||
|
int ( *EV_LocalPlayerDucking ) ( void );
|
||||||
|
void ( *EV_LocalPlayerViewheight ) ( float * );
|
||||||
|
void ( *EV_LocalPlayerBounds ) ( int hull, float *mins, float *maxs );
|
||||||
|
int ( *EV_IndexFromTrace) ( struct pmtrace_s *pTrace );
|
||||||
|
struct physent_s *( *EV_GetPhysent ) ( int idx );
|
||||||
|
void ( *EV_SetUpPlayerPrediction ) ( int dopred, int bIncludeLocalClient );
|
||||||
|
void ( *EV_PushPMStates ) ( void );
|
||||||
|
void ( *EV_PopPMStates ) ( void );
|
||||||
|
void ( *EV_SetSolidPlayers ) (int playernum);
|
||||||
|
void ( *EV_SetTraceHull ) ( int hull );
|
||||||
|
void ( *EV_PlayerTrace ) ( float *start, float *end, int traceFlags, int ignore_pe, struct pmtrace_s *tr );
|
||||||
|
void ( *EV_WeaponAnimation ) ( int sequence, int body );
|
||||||
|
unsigned short ( *EV_PrecacheEvent ) ( int type, const char* psz );
|
||||||
|
void ( *EV_PlaybackEvent ) ( int flags, const struct edict_s *pInvoker, unsigned short eventindex, float delay, float *origin, float *angles, float fparam1, float fparam2, int iparam1, int iparam2, int bparam1, int bparam2 );
|
||||||
|
const char *( *EV_TraceTexture ) ( int ground, float *vstart, float *vend );
|
||||||
|
void ( *EV_StopAllSounds ) ( int entnum, int entchannel );
|
||||||
|
void ( *EV_KillEvents ) ( int entnum, const char *eventname );
|
||||||
|
} event_api_t;
|
||||||
|
|
||||||
|
extern event_api_t eventapi;
|
||||||
|
|
||||||
|
#endif
|
50
metamod/extra/example/include/hlsdk/common/event_args.h
Normal file
50
metamod/extra/example/include/hlsdk/common/event_args.h
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#if !defined( EVENT_ARGSH )
|
||||||
|
#define EVENT_ARGSH
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Event was invoked with stated origin
|
||||||
|
#define FEVENT_ORIGIN ( 1<<0 )
|
||||||
|
|
||||||
|
// Event was invoked with stated angles
|
||||||
|
#define FEVENT_ANGLES ( 1<<1 )
|
||||||
|
|
||||||
|
typedef struct event_args_s
|
||||||
|
{
|
||||||
|
int flags;
|
||||||
|
|
||||||
|
// Transmitted
|
||||||
|
int entindex;
|
||||||
|
|
||||||
|
float origin[3];
|
||||||
|
float angles[3];
|
||||||
|
float velocity[3];
|
||||||
|
|
||||||
|
int ducking;
|
||||||
|
|
||||||
|
float fparam1;
|
||||||
|
float fparam2;
|
||||||
|
|
||||||
|
int iparam1;
|
||||||
|
int iparam2;
|
||||||
|
|
||||||
|
int bparam1;
|
||||||
|
int bparam2;
|
||||||
|
} event_args_t;
|
||||||
|
|
||||||
|
#endif
|
47
metamod/extra/example/include/hlsdk/common/event_flags.h
Normal file
47
metamod/extra/example/include/hlsdk/common/event_flags.h
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#if !defined( EVENT_FLAGSH )
|
||||||
|
#define EVENT_FLAGSH
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Skip local host for event send.
|
||||||
|
#define FEV_NOTHOST (1<<0)
|
||||||
|
|
||||||
|
// Send the event reliably. You must specify the origin and angles and use
|
||||||
|
// PLAYBACK_EVENT_FULL for this to work correctly on the server for anything
|
||||||
|
// that depends on the event origin/angles. I.e., the origin/angles are not
|
||||||
|
// taken from the invoking edict for reliable events.
|
||||||
|
#define FEV_RELIABLE (1<<1)
|
||||||
|
|
||||||
|
// Don't restrict to PAS/PVS, send this event to _everybody_ on the server ( useful for stopping CHAN_STATIC
|
||||||
|
// sounds started by client event when client is not in PVS anymore ( hwguy in TFC e.g. ).
|
||||||
|
#define FEV_GLOBAL (1<<2)
|
||||||
|
|
||||||
|
// If this client already has one of these events in its queue, just update the event instead of sending it as a duplicate
|
||||||
|
//
|
||||||
|
#define FEV_UPDATE (1<<3)
|
||||||
|
|
||||||
|
// Only send to entity specified as the invoker
|
||||||
|
#define FEV_HOSTONLY (1<<4)
|
||||||
|
|
||||||
|
// Only send if the event was created on the server.
|
||||||
|
#define FEV_SERVER (1<<5)
|
||||||
|
|
||||||
|
// Only issue event client side ( from shared code )
|
||||||
|
#define FEV_CLIENT (1<<6)
|
||||||
|
|
||||||
|
#endif
|
60
metamod/extra/example/include/hlsdk/common/hltv.h
Normal file
60
metamod/extra/example/include/hlsdk/common/hltv.h
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//
|
||||||
|
// $NoKeywords: $
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
// hltv.h
|
||||||
|
// all shared consts between server, clients and proxy
|
||||||
|
|
||||||
|
#ifndef HLTV_H
|
||||||
|
#define HLTV_H
|
||||||
|
|
||||||
|
#define TYPE_CLIENT 0 // client is a normal HL client (default)
|
||||||
|
#define TYPE_PROXY 1 // client is another proxy
|
||||||
|
#define TYPE_DIRECTOR 2
|
||||||
|
#define TYPE_COMMENTATOR 3 // client is a commentator
|
||||||
|
#define TYPE_DEMO 4 // client is a demo file
|
||||||
|
|
||||||
|
// sub commands of svc_hltv:
|
||||||
|
#define HLTV_ACTIVE 0 // tells client that he's an spectator and will get director commands
|
||||||
|
#define HLTV_STATUS 1 // send status infos about proxy
|
||||||
|
#define HLTV_LISTEN 2 // tell client to listen to a multicast stream
|
||||||
|
|
||||||
|
// director command types:
|
||||||
|
#define DRC_CMD_NONE 0 // NULL director command
|
||||||
|
#define DRC_CMD_START 1 // start director mode
|
||||||
|
#define DRC_CMD_EVENT 2 // informs about director command
|
||||||
|
#define DRC_CMD_MODE 3 // switches camera modes
|
||||||
|
#define DRC_CMD_CAMERA 4 // set fixed camera
|
||||||
|
#define DRC_CMD_TIMESCALE 5 // sets time scale
|
||||||
|
#define DRC_CMD_MESSAGE 6 // send HUD centerprint
|
||||||
|
#define DRC_CMD_SOUND 7 // plays a particular sound
|
||||||
|
#define DRC_CMD_STATUS 8 // HLTV broadcast status
|
||||||
|
#define DRC_CMD_BANNER 9 // set GUI banner
|
||||||
|
#define DRC_CMD_STUFFTEXT 10 // like the normal svc_stufftext but as director command
|
||||||
|
#define DRC_CMD_CHASE 11 // chase a certain player
|
||||||
|
#define DRC_CMD_INEYE 12 // view player through own eyes
|
||||||
|
#define DRC_CMD_MAP 13 // show overview map
|
||||||
|
#define DRC_CMD_CAMPATH 14 // define camera waypoint
|
||||||
|
#define DRC_CMD_WAYPOINTS 15 // start moving camera, inetranl message
|
||||||
|
|
||||||
|
#define DRC_CMD_LAST 15
|
||||||
|
|
||||||
|
// DRC_CMD_EVENT event flags
|
||||||
|
#define DRC_FLAG_PRIO_MASK 0x0F // priorities between 0 and 15 (15 most important)
|
||||||
|
#define DRC_FLAG_SIDE (1<<4) //
|
||||||
|
#define DRC_FLAG_DRAMATIC (1<<5) // is a dramatic scene
|
||||||
|
#define DRC_FLAG_SLOWMOTION (1<<6) // would look good in SloMo
|
||||||
|
#define DRC_FLAG_FACEPLAYER (1<<7) // player is doning something (reload/defuse bomb etc)
|
||||||
|
#define DRC_FLAG_INTRO (1<<8) // is a introduction scene
|
||||||
|
#define DRC_FLAG_FINAL (1<<9) // is a final scene
|
||||||
|
#define DRC_FLAG_NO_RANDOM (1<<10) // don't randomize event data
|
||||||
|
|
||||||
|
// DRC_CMD_WAYPOINT flags
|
||||||
|
#define DRC_FLAG_STARTPATH 1 // end with speed 0.0
|
||||||
|
#define DRC_FLAG_SLOWSTART 2 // start with speed 0.0
|
||||||
|
#define DRC_FLAG_SLOWEND 4 // end with speed 0.0
|
||||||
|
|
||||||
|
#endif // HLTV_H
|
38
metamod/extra/example/include/hlsdk/common/in_buttons.h
Normal file
38
metamod/extra/example/include/hlsdk/common/in_buttons.h
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#ifndef IN_BUTTONS_H
|
||||||
|
#define IN_BUTTONS_H
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define IN_ATTACK (1 << 0)
|
||||||
|
#define IN_JUMP (1 << 1)
|
||||||
|
#define IN_DUCK (1 << 2)
|
||||||
|
#define IN_FORWARD (1 << 3)
|
||||||
|
#define IN_BACK (1 << 4)
|
||||||
|
#define IN_USE (1 << 5)
|
||||||
|
#define IN_CANCEL (1 << 6)
|
||||||
|
#define IN_LEFT (1 << 7)
|
||||||
|
#define IN_RIGHT (1 << 8)
|
||||||
|
#define IN_MOVELEFT (1 << 9)
|
||||||
|
#define IN_MOVERIGHT (1 << 10)
|
||||||
|
#define IN_ATTACK2 (1 << 11)
|
||||||
|
#define IN_RUN (1 << 12)
|
||||||
|
#define IN_RELOAD (1 << 13)
|
||||||
|
#define IN_ALT1 (1 << 14)
|
||||||
|
#define IN_SCORE (1 << 15) // Used by client.dll for when scoreboard is held down
|
||||||
|
|
||||||
|
#endif // IN_BUTTONS_H
|
38
metamod/extra/example/include/hlsdk/common/ivoicetweak.h
Normal file
38
metamod/extra/example/include/hlsdk/common/ivoicetweak.h
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//
|
||||||
|
// $NoKeywords: $
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
#ifndef IVOICETWEAK_H
|
||||||
|
#define IVOICETWEAK_H
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// These provide access to the voice controls.
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
MicrophoneVolume=0, // values 0-1.
|
||||||
|
OtherSpeakerScale, // values 0-1. Scales how loud other players are.
|
||||||
|
MicBoost, // 20 db gain to voice input
|
||||||
|
} VoiceTweakControl;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct IVoiceTweak_s
|
||||||
|
{
|
||||||
|
// These turn voice tweak mode on and off. While in voice tweak mode, the user's voice is echoed back
|
||||||
|
// without sending to the server.
|
||||||
|
int (*StartVoiceTweakMode)(); // Returns 0 on error.
|
||||||
|
void (*EndVoiceTweakMode)();
|
||||||
|
|
||||||
|
// Get/set control values.
|
||||||
|
void (*SetControlFloat)(VoiceTweakControl iControl, float value);
|
||||||
|
float (*GetControlFloat)(VoiceTweakControl iControl);
|
||||||
|
|
||||||
|
int (*GetSpeakingVolume)();
|
||||||
|
} IVoiceTweak;
|
||||||
|
|
||||||
|
|
||||||
|
#endif // IVOICETWEAK_H
|
41
metamod/extra/example/include/hlsdk/common/kbutton.h
Normal file
41
metamod/extra/example/include/hlsdk/common/kbutton.h
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 2 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef KBUTTON_H
|
||||||
|
#define KBUTTON_H
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct kbutton_s
|
||||||
|
{
|
||||||
|
int down[2];
|
||||||
|
int state;
|
||||||
|
} kbutton_t;
|
||||||
|
|
||||||
|
#endif // KBUTTON_H
|
108
metamod/extra/example/include/hlsdk/common/mathlib.h
Normal file
108
metamod/extra/example/include/hlsdk/common/mathlib.h
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 2 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MATHLIB_H
|
||||||
|
#define MATHLIB_H
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef float vec_t;
|
||||||
|
|
||||||
|
#if !defined DID_VEC3_T_DEFINE && !defined vec3_t
|
||||||
|
#define DID_VEC3_T_DEFINE
|
||||||
|
typedef vec_t vec3_t[3];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef vec_t vec4_t[4];
|
||||||
|
typedef int fixed16_t;
|
||||||
|
|
||||||
|
typedef union DLONG_u
|
||||||
|
{
|
||||||
|
int i[2];
|
||||||
|
double d;
|
||||||
|
float f;
|
||||||
|
} DLONG;
|
||||||
|
|
||||||
|
#define M_PI 3.14159265358979323846
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
#ifdef min
|
||||||
|
#undef min
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef max
|
||||||
|
#undef max
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef clamp
|
||||||
|
#undef clamp
|
||||||
|
#endif
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
inline T min(T a, T b)
|
||||||
|
{
|
||||||
|
return (a < b) ? a : b;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
inline T max(T a, T b)
|
||||||
|
{
|
||||||
|
return (a < b) ? b : a;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
inline T clamp(T a, T min, T max)
|
||||||
|
{
|
||||||
|
return (a > max) ? max : (a < min) ? min : a;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
inline T bswap(T s)
|
||||||
|
{
|
||||||
|
switch (sizeof(T))
|
||||||
|
{
|
||||||
|
case 2: {auto res = __builtin_bswap16(*(uint16 *)&s); return *(T *)&res; }
|
||||||
|
case 4: {auto res = __builtin_bswap32(*(uint32 *)&s); return *(T *)&res; }
|
||||||
|
case 8: {auto res = __builtin_bswap64(*(uint64 *)&s); return *(T *)&res; }
|
||||||
|
default: return s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else // __cplusplus
|
||||||
|
#ifndef max
|
||||||
|
#define max(a,b) (((a) > (b)) ? (a) : (b))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef min
|
||||||
|
#define min(a,b) (((a) < (b)) ? (a) : (b))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define clamp(val, min, max) (((val) > (max)) ? (max) : (((val) < (min)) ? (min) : (val)))
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
#endif // MATHLIB_H
|
34
metamod/extra/example/include/hlsdk/common/md5.h
Normal file
34
metamod/extra/example/include/hlsdk/common/md5.h
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <quakedef.h>
|
||||||
|
|
||||||
|
// MD5 Hash
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned int buf[4];
|
||||||
|
unsigned int bits[2];
|
||||||
|
unsigned char in[64];
|
||||||
|
} MD5Context_t;
|
||||||
|
|
||||||
|
void MD5Init(MD5Context_t *ctx);
|
||||||
|
void MD5Update(MD5Context_t *ctx, const unsigned char *buf, unsigned int len);
|
||||||
|
void MD5Final(unsigned char digest[16], MD5Context_t *ctx);
|
||||||
|
void MD5Transform(unsigned int buf[4], const unsigned int in[16]);
|
||||||
|
|
||||||
|
BOOL MD5_Hash_File(unsigned char digest[16], char *pszFileName, BOOL bUsefopen, BOOL bSeed, unsigned int seed[4]);
|
||||||
|
char *MD5_Print(unsigned char hash[16]);
|
99
metamod/extra/example/include/hlsdk/common/net_api.h
Normal file
99
metamod/extra/example/include/hlsdk/common/net_api.h
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//
|
||||||
|
// $NoKeywords: $
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
#if !defined( NET_APIH )
|
||||||
|
#define NET_APIH
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined ( NETADRH )
|
||||||
|
#include "netadr.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define NETAPI_REQUEST_SERVERLIST ( 0 ) // Doesn't need a remote address
|
||||||
|
#define NETAPI_REQUEST_PING ( 1 )
|
||||||
|
#define NETAPI_REQUEST_RULES ( 2 )
|
||||||
|
#define NETAPI_REQUEST_PLAYERS ( 3 )
|
||||||
|
#define NETAPI_REQUEST_DETAILS ( 4 )
|
||||||
|
|
||||||
|
// Set this flag for things like broadcast requests, etc. where the engine should not
|
||||||
|
// kill the request hook after receiving the first response
|
||||||
|
#define FNETAPI_MULTIPLE_RESPONSE ( 1<<0 )
|
||||||
|
|
||||||
|
typedef void ( *net_api_response_func_t ) ( struct net_response_s *response );
|
||||||
|
|
||||||
|
#define NET_SUCCESS ( 0 )
|
||||||
|
#define NET_ERROR_TIMEOUT ( 1<<0 )
|
||||||
|
#define NET_ERROR_PROTO_UNSUPPORTED ( 1<<1 )
|
||||||
|
#define NET_ERROR_UNDEFINED ( 1<<2 )
|
||||||
|
|
||||||
|
typedef struct net_adrlist_s
|
||||||
|
{
|
||||||
|
struct net_adrlist_s *next;
|
||||||
|
netadr_t remote_address;
|
||||||
|
} net_adrlist_t;
|
||||||
|
|
||||||
|
typedef struct net_response_s
|
||||||
|
{
|
||||||
|
// NET_SUCCESS or an error code
|
||||||
|
int error;
|
||||||
|
|
||||||
|
// Context ID
|
||||||
|
int context;
|
||||||
|
// Type
|
||||||
|
int type;
|
||||||
|
|
||||||
|
// Server that is responding to the request
|
||||||
|
netadr_t remote_address;
|
||||||
|
|
||||||
|
// Response RTT ping time
|
||||||
|
double ping;
|
||||||
|
// Key/Value pair string ( separated by backlash \ characters )
|
||||||
|
// WARNING: You must copy this buffer in the callback function, because it is freed
|
||||||
|
// by the engine right after the call!!!!
|
||||||
|
// ALSO: For NETAPI_REQUEST_SERVERLIST requests, this will be a pointer to a linked list of net_adrlist_t's
|
||||||
|
void *response;
|
||||||
|
} net_response_t;
|
||||||
|
|
||||||
|
typedef struct net_status_s
|
||||||
|
{
|
||||||
|
// Connected to remote server? 1 == yes, 0 otherwise
|
||||||
|
int connected;
|
||||||
|
// Client's IP address
|
||||||
|
netadr_t local_address;
|
||||||
|
// Address of remote server
|
||||||
|
netadr_t remote_address;
|
||||||
|
// Packet Loss ( as a percentage )
|
||||||
|
int packet_loss;
|
||||||
|
// Latency, in seconds ( multiply by 1000.0 to get milliseconds )
|
||||||
|
double latency;
|
||||||
|
// Connection time, in seconds
|
||||||
|
double connection_time;
|
||||||
|
// Rate setting ( for incoming data )
|
||||||
|
double rate;
|
||||||
|
} net_status_t;
|
||||||
|
|
||||||
|
typedef struct net_api_s
|
||||||
|
{
|
||||||
|
// APIs
|
||||||
|
void ( *InitNetworking )( void );
|
||||||
|
void ( *Status ) ( struct net_status_s *status );
|
||||||
|
void ( *SendRequest) ( int context, int request, int flags, double timeout, struct netadr_s *remote_address, net_api_response_func_t response );
|
||||||
|
void ( *CancelRequest ) ( int context );
|
||||||
|
void ( *CancelAllRequests ) ( void );
|
||||||
|
char *( *AdrToString ) ( struct netadr_s *a );
|
||||||
|
int ( *CompareAdr ) ( struct netadr_s *a, struct netadr_s *b );
|
||||||
|
int ( *StringToAdr ) ( char *s, struct netadr_s *a );
|
||||||
|
const char *( *ValueForKey ) ( const char *s, const char *key );
|
||||||
|
void ( *RemoveKey ) ( char *s, const char *key );
|
||||||
|
void ( *SetValueForKey ) (char *s, const char *key, const char *value, int maxsize );
|
||||||
|
} net_api_t;
|
||||||
|
|
||||||
|
extern net_api_t netapi;
|
||||||
|
|
||||||
|
#endif // NET_APIH
|
40
metamod/extra/example/include/hlsdk/common/netadr.h
Normal file
40
metamod/extra/example/include/hlsdk/common/netadr.h
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
|
||||||
|
#ifndef NETADR_H
|
||||||
|
#define NETADR_H
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
NA_UNUSED,
|
||||||
|
NA_LOOPBACK,
|
||||||
|
NA_BROADCAST,
|
||||||
|
NA_IP,
|
||||||
|
NA_IPX,
|
||||||
|
NA_BROADCAST_IPX,
|
||||||
|
} netadrtype_t;
|
||||||
|
|
||||||
|
typedef struct netadr_s
|
||||||
|
{
|
||||||
|
netadrtype_t type;
|
||||||
|
unsigned char ip[4];
|
||||||
|
unsigned char ipx[10];
|
||||||
|
unsigned short port;
|
||||||
|
} netadr_t;
|
||||||
|
|
||||||
|
#endif // NETADR_H
|
208
metamod/extra/example/include/hlsdk/common/netapi.cpp
Normal file
208
metamod/extra/example/include/hlsdk/common/netapi.cpp
Normal file
@ -0,0 +1,208 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include "winsock.h"
|
||||||
|
#else
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif // _WIN32
|
||||||
|
|
||||||
|
#include "netapi.h"
|
||||||
|
|
||||||
|
class CNetAPI: public INetAPI {
|
||||||
|
public:
|
||||||
|
virtual void NetAdrToSockAddr(netadr_t *a, struct sockaddr *s);
|
||||||
|
virtual void SockAddrToNetAdr(struct sockaddr *s, netadr_t *a);
|
||||||
|
|
||||||
|
virtual char *AdrToString(netadr_t *a);
|
||||||
|
virtual bool StringToAdr(const char *s, netadr_t *a);
|
||||||
|
|
||||||
|
virtual void GetSocketAddress(int socket, netadr_t *a);
|
||||||
|
virtual bool CompareAdr(netadr_t *a, netadr_t *b);
|
||||||
|
virtual void GetLocalIP(netadr_t *a);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Expose interface
|
||||||
|
CNetAPI g_NetAPI;
|
||||||
|
INetAPI *net = (INetAPI *)&g_NetAPI;
|
||||||
|
|
||||||
|
void CNetAPI::NetAdrToSockAddr(netadr_t *a, struct sockaddr *s)
|
||||||
|
{
|
||||||
|
memset(s, 0, sizeof(*s));
|
||||||
|
|
||||||
|
if (a->type == NA_BROADCAST)
|
||||||
|
{
|
||||||
|
((struct sockaddr_in *)s)->sin_family = AF_INET;
|
||||||
|
((struct sockaddr_in *)s)->sin_port = a->port;
|
||||||
|
((struct sockaddr_in *)s)->sin_addr.s_addr = INADDR_BROADCAST;
|
||||||
|
}
|
||||||
|
else if (a->type == NA_IP)
|
||||||
|
{
|
||||||
|
((struct sockaddr_in *)s)->sin_family = AF_INET;
|
||||||
|
((struct sockaddr_in *)s)->sin_addr.s_addr = *(int *)&a->ip;
|
||||||
|
((struct sockaddr_in *)s)->sin_port = a->port;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CNetAPI::SockAddrToNetAdr(struct sockaddr *s, netadr_t *a)
|
||||||
|
{
|
||||||
|
if (s->sa_family == AF_INET)
|
||||||
|
{
|
||||||
|
a->type = NA_IP;
|
||||||
|
*(int *)&a->ip = ((struct sockaddr_in *)s)->sin_addr.s_addr;
|
||||||
|
a->port = ((struct sockaddr_in *)s)->sin_port;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char *CNetAPI::AdrToString(netadr_t *a)
|
||||||
|
{
|
||||||
|
static char s[64];
|
||||||
|
memset(s, 0, sizeof(s));
|
||||||
|
|
||||||
|
if (a)
|
||||||
|
{
|
||||||
|
if (a->type == NA_LOOPBACK)
|
||||||
|
{
|
||||||
|
sprintf(s, "loopback");
|
||||||
|
}
|
||||||
|
else if (a->type == NA_IP)
|
||||||
|
{
|
||||||
|
sprintf(s, "%i.%i.%i.%i:%i", a->ip[0], a->ip[1], a->ip[2], a->ip[3], ntohs(a->port));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool StringToSockaddr(const char *s, struct sockaddr *sadr)
|
||||||
|
{
|
||||||
|
struct hostent *h;
|
||||||
|
char *colon;
|
||||||
|
char copy[128];
|
||||||
|
struct sockaddr_in *p;
|
||||||
|
|
||||||
|
memset(sadr, 0, sizeof(*sadr));
|
||||||
|
|
||||||
|
p = (struct sockaddr_in *)sadr;
|
||||||
|
p->sin_family = AF_INET;
|
||||||
|
p->sin_port = 0;
|
||||||
|
|
||||||
|
strcpy(copy, s);
|
||||||
|
|
||||||
|
// strip off a trailing :port if present
|
||||||
|
for (colon = copy ; *colon ; colon++)
|
||||||
|
{
|
||||||
|
if (*colon == ':')
|
||||||
|
{
|
||||||
|
// terminate
|
||||||
|
*colon = '\0';
|
||||||
|
|
||||||
|
// Start at next character
|
||||||
|
p->sin_port = htons((short)atoi(colon + 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Numeric IP, no DNS
|
||||||
|
if (copy[0] >= '0' && copy[0] <= '9' && strstr(copy, "."))
|
||||||
|
{
|
||||||
|
*(int *)&p->sin_addr = inet_addr(copy);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// DNS it
|
||||||
|
if (!(h = gethostbyname(copy)))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use first result
|
||||||
|
*(int *)&p->sin_addr = *(int *)h->h_addr_list[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CNetAPI::StringToAdr(const char *s, netadr_t *a)
|
||||||
|
{
|
||||||
|
struct sockaddr sadr;
|
||||||
|
if (!strcmp(s, "localhost"))
|
||||||
|
{
|
||||||
|
memset(a, 0, sizeof(*a));
|
||||||
|
a->type = NA_LOOPBACK;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!StringToSockaddr(s, &sadr))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
SockAddrToNetAdr(&sadr, a);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Lookup the IP address for the specified IP socket
|
||||||
|
void CNetAPI::GetSocketAddress(int socket, netadr_t *a)
|
||||||
|
{
|
||||||
|
char buff[512];
|
||||||
|
struct sockaddr_in address;
|
||||||
|
int namelen;
|
||||||
|
|
||||||
|
memset(a, 0, sizeof(*a));
|
||||||
|
gethostname(buff, sizeof(buff));
|
||||||
|
|
||||||
|
// Ensure that it doesn't overrun the buffer
|
||||||
|
buff[sizeof buff - 1] = '\0';
|
||||||
|
StringToAdr(buff, a);
|
||||||
|
|
||||||
|
namelen = sizeof(address);
|
||||||
|
if (getsockname(socket, (struct sockaddr *)&address, (int *)&namelen) == 0)
|
||||||
|
{
|
||||||
|
a->port = address.sin_port;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CNetAPI::CompareAdr(netadr_t *a, netadr_t *b)
|
||||||
|
{
|
||||||
|
if (a->type != b->type)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a->type == NA_LOOPBACK)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a->type == NA_IP &&
|
||||||
|
a->ip[0] == b->ip[0] &&
|
||||||
|
a->ip[1] == b->ip[1] &&
|
||||||
|
a->ip[2] == b->ip[2] &&
|
||||||
|
a->ip[3] == b->ip[3] &&
|
||||||
|
a->port == b->port)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CNetAPI::GetLocalIP(netadr_t *a)
|
||||||
|
{
|
||||||
|
char s[64];
|
||||||
|
if(!::gethostname(s, 64))
|
||||||
|
{
|
||||||
|
struct hostent *localip = ::gethostbyname(s);
|
||||||
|
if(localip)
|
||||||
|
{
|
||||||
|
a->type = NA_IP;
|
||||||
|
a->port = 0;
|
||||||
|
memcpy(a->ip, localip->h_addr_list[0], 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
25
metamod/extra/example/include/hlsdk/common/netapi.h
Normal file
25
metamod/extra/example/include/hlsdk/common/netapi.h
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#ifndef NETAPI_H
|
||||||
|
#define NETAPI_H
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "netadr.h"
|
||||||
|
|
||||||
|
class INetAPI {
|
||||||
|
public:
|
||||||
|
virtual void NetAdrToSockAddr(netadr_t *a, struct sockaddr *s) = 0; // Convert a netadr_t to sockaddr
|
||||||
|
virtual void SockAddrToNetAdr(struct sockaddr *s, netadr_t *a) = 0; // Convert a sockaddr to netadr_t
|
||||||
|
|
||||||
|
virtual char *AdrToString(netadr_t *a) = 0; // Convert a netadr_t to a string
|
||||||
|
virtual bool StringToAdr(const char *s, netadr_t *a) = 0; // Convert a string address to a netadr_t, doing DNS if needed
|
||||||
|
virtual void GetSocketAddress(int socket, netadr_t *a) = 0; // Look up IP address for socket
|
||||||
|
virtual bool CompareAdr(netadr_t *a, netadr_t *b) = 0;
|
||||||
|
|
||||||
|
// return the IP of the local host
|
||||||
|
virtual void GetLocalIP(netadr_t *a) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern INetAPI *net;
|
||||||
|
|
||||||
|
#endif // NETAPI_H
|
16
metamod/extra/example/include/hlsdk/common/nowin.h
Normal file
16
metamod/extra/example/include/hlsdk/common/nowin.h
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//
|
||||||
|
// $NoKeywords: $
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
#ifndef INC_NOWIN_H
|
||||||
|
#define INC_NOWIN_H
|
||||||
|
#ifndef _WIN32
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#endif //!_WIN32
|
||||||
|
#endif //INC_NOWIN_H
|
259
metamod/extra/example/include/hlsdk/common/parsemsg.cpp
Normal file
259
metamod/extra/example/include/hlsdk/common/parsemsg.cpp
Normal file
@ -0,0 +1,259 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1999, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
//
|
||||||
|
// parsemsg.cpp
|
||||||
|
//
|
||||||
|
//--------------------------------------------------------------------------------------------------------------
|
||||||
|
#include "parsemsg.h"
|
||||||
|
#include <port.h>
|
||||||
|
|
||||||
|
typedef unsigned char byte;
|
||||||
|
#define true 1
|
||||||
|
|
||||||
|
static byte *gpBuf;
|
||||||
|
static int giSize;
|
||||||
|
static int giRead;
|
||||||
|
static int giBadRead;
|
||||||
|
|
||||||
|
int READ_OK( void )
|
||||||
|
{
|
||||||
|
return !giBadRead;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BEGIN_READ( void *buf, int size )
|
||||||
|
{
|
||||||
|
giRead = 0;
|
||||||
|
giBadRead = 0;
|
||||||
|
giSize = size;
|
||||||
|
gpBuf = (byte*)buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int READ_CHAR( void )
|
||||||
|
{
|
||||||
|
int c;
|
||||||
|
|
||||||
|
if (giRead + 1 > giSize)
|
||||||
|
{
|
||||||
|
giBadRead = true;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
c = (signed char)gpBuf[giRead];
|
||||||
|
giRead++;
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
int READ_BYTE( void )
|
||||||
|
{
|
||||||
|
int c;
|
||||||
|
|
||||||
|
if (giRead+1 > giSize)
|
||||||
|
{
|
||||||
|
giBadRead = true;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
c = (unsigned char)gpBuf[giRead];
|
||||||
|
giRead++;
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
int READ_SHORT( void )
|
||||||
|
{
|
||||||
|
int c;
|
||||||
|
|
||||||
|
if (giRead+2 > giSize)
|
||||||
|
{
|
||||||
|
giBadRead = true;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
c = (short)( gpBuf[giRead] + ( gpBuf[giRead+1] << 8 ) );
|
||||||
|
|
||||||
|
giRead += 2;
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
int READ_WORD( void )
|
||||||
|
{
|
||||||
|
return READ_SHORT();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int READ_LONG( void )
|
||||||
|
{
|
||||||
|
int c;
|
||||||
|
|
||||||
|
if (giRead+4 > giSize)
|
||||||
|
{
|
||||||
|
giBadRead = true;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
c = gpBuf[giRead] + (gpBuf[giRead + 1] << 8) + (gpBuf[giRead + 2] << 16) + (gpBuf[giRead + 3] << 24);
|
||||||
|
|
||||||
|
giRead += 4;
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
float READ_FLOAT( void )
|
||||||
|
{
|
||||||
|
union
|
||||||
|
{
|
||||||
|
byte b[4];
|
||||||
|
float f;
|
||||||
|
int l;
|
||||||
|
} dat;
|
||||||
|
|
||||||
|
dat.b[0] = gpBuf[giRead];
|
||||||
|
dat.b[1] = gpBuf[giRead+1];
|
||||||
|
dat.b[2] = gpBuf[giRead+2];
|
||||||
|
dat.b[3] = gpBuf[giRead+3];
|
||||||
|
giRead += 4;
|
||||||
|
|
||||||
|
// dat.l = LittleLong (dat.l);
|
||||||
|
|
||||||
|
return dat.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
char* READ_STRING( void )
|
||||||
|
{
|
||||||
|
static char string[2048];
|
||||||
|
int l,c;
|
||||||
|
|
||||||
|
string[0] = 0;
|
||||||
|
|
||||||
|
l = 0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if ( giRead+1 > giSize )
|
||||||
|
break; // no more characters
|
||||||
|
|
||||||
|
c = READ_CHAR();
|
||||||
|
if (c == -1 || c == 0)
|
||||||
|
break;
|
||||||
|
string[l] = c;
|
||||||
|
l++;
|
||||||
|
} while (l < sizeof(string)-1);
|
||||||
|
|
||||||
|
string[l] = 0;
|
||||||
|
|
||||||
|
return string;
|
||||||
|
}
|
||||||
|
|
||||||
|
float READ_COORD( void )
|
||||||
|
{
|
||||||
|
return (float)(READ_SHORT() * (1.0/8));
|
||||||
|
}
|
||||||
|
|
||||||
|
float READ_ANGLE( void )
|
||||||
|
{
|
||||||
|
return (float)(READ_CHAR() * (360.0/256));
|
||||||
|
}
|
||||||
|
|
||||||
|
float READ_HIRESANGLE( void )
|
||||||
|
{
|
||||||
|
return (float)(READ_SHORT() * (360.0/65536));
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------------------
|
||||||
|
BufferWriter::BufferWriter()
|
||||||
|
{
|
||||||
|
Init( NULL, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------------------
|
||||||
|
BufferWriter::BufferWriter( unsigned char *buffer, int bufferLen )
|
||||||
|
{
|
||||||
|
Init( buffer, bufferLen );
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------------------
|
||||||
|
void BufferWriter::Init( unsigned char *buffer, int bufferLen )
|
||||||
|
{
|
||||||
|
m_overflow = false;
|
||||||
|
m_buffer = buffer;
|
||||||
|
m_remaining = bufferLen;
|
||||||
|
m_overallLength = bufferLen;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------------------
|
||||||
|
void BufferWriter::WriteByte( unsigned char data )
|
||||||
|
{
|
||||||
|
if (!m_buffer || !m_remaining)
|
||||||
|
{
|
||||||
|
m_overflow = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
*m_buffer = data;
|
||||||
|
++m_buffer;
|
||||||
|
--m_remaining;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------------------
|
||||||
|
void BufferWriter::WriteLong( int data )
|
||||||
|
{
|
||||||
|
if (!m_buffer || m_remaining < 4)
|
||||||
|
{
|
||||||
|
m_overflow = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_buffer[0] = data&0xff;
|
||||||
|
m_buffer[1] = (data>>8)&0xff;
|
||||||
|
m_buffer[2] = (data>>16)&0xff;
|
||||||
|
m_buffer[3] = data>>24;
|
||||||
|
m_buffer += 4;
|
||||||
|
m_remaining -= 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------------------
|
||||||
|
void BufferWriter::WriteString( const char *str )
|
||||||
|
{
|
||||||
|
if (!m_buffer || !m_remaining)
|
||||||
|
{
|
||||||
|
m_overflow = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!str)
|
||||||
|
str = "";
|
||||||
|
|
||||||
|
int len = strlen(str)+1;
|
||||||
|
if ( len > m_remaining )
|
||||||
|
{
|
||||||
|
m_overflow = true;
|
||||||
|
str = "";
|
||||||
|
len = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
strcpy((char *)m_buffer, str);
|
||||||
|
m_remaining -= len;
|
||||||
|
m_buffer += len;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------------------
|
||||||
|
int BufferWriter::GetSpaceUsed()
|
||||||
|
{
|
||||||
|
return m_overallLength - m_remaining;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------------------
|
66
metamod/extra/example/include/hlsdk/common/parsemsg.h
Normal file
66
metamod/extra/example/include/hlsdk/common/parsemsg.h
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1999, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
//
|
||||||
|
// parsemsg.h
|
||||||
|
// MDC - copying from cstrike\cl_dll so career-mode stuff can catch messages
|
||||||
|
// in this dll. (and C++ifying it)
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef PARSEMSG_H
|
||||||
|
#define PARSEMSG_H
|
||||||
|
|
||||||
|
#define ASSERT( x )
|
||||||
|
//--------------------------------------------------------------------------------------------------------------
|
||||||
|
void BEGIN_READ( void *buf, int size );
|
||||||
|
int READ_CHAR( void );
|
||||||
|
int READ_BYTE( void );
|
||||||
|
int READ_SHORT( void );
|
||||||
|
int READ_WORD( void );
|
||||||
|
int READ_LONG( void );
|
||||||
|
float READ_FLOAT( void );
|
||||||
|
char* READ_STRING( void );
|
||||||
|
float READ_COORD( void );
|
||||||
|
float READ_ANGLE( void );
|
||||||
|
float READ_HIRESANGLE( void );
|
||||||
|
int READ_OK( void );
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------------------
|
||||||
|
class BufferWriter
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
BufferWriter();
|
||||||
|
BufferWriter( unsigned char *buffer, int bufferLen );
|
||||||
|
void Init( unsigned char *buffer, int bufferLen );
|
||||||
|
|
||||||
|
void WriteByte( unsigned char data );
|
||||||
|
void WriteLong( int data );
|
||||||
|
void WriteString( const char *str );
|
||||||
|
|
||||||
|
bool HasOverflowed();
|
||||||
|
int GetSpaceUsed();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
unsigned char *m_buffer;
|
||||||
|
int m_remaining;
|
||||||
|
bool m_overflow;
|
||||||
|
int m_overallLength;
|
||||||
|
};
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#endif // PARSEMSG_H
|
||||||
|
|
||||||
|
|
||||||
|
|
57
metamod/extra/example/include/hlsdk/common/particledef.h
Normal file
57
metamod/extra/example/include/hlsdk/common/particledef.h
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#if !defined( PARTICLEDEFH )
|
||||||
|
#define PARTICLEDEFH
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
pt_static,
|
||||||
|
pt_grav,
|
||||||
|
pt_slowgrav,
|
||||||
|
pt_fire,
|
||||||
|
pt_explode,
|
||||||
|
pt_explode2,
|
||||||
|
pt_blob,
|
||||||
|
pt_blob2,
|
||||||
|
pt_vox_slowgrav,
|
||||||
|
pt_vox_grav,
|
||||||
|
pt_clientcustom // Must have callback function specified
|
||||||
|
} ptype_t;
|
||||||
|
|
||||||
|
// !!! if this is changed, it must be changed in d_ifacea.h too !!!
|
||||||
|
typedef struct particle_s
|
||||||
|
{
|
||||||
|
// driver-usable fields
|
||||||
|
vec3_t org;
|
||||||
|
short color;
|
||||||
|
short packedColor;
|
||||||
|
// drivers never touch the following fields
|
||||||
|
struct particle_s *next;
|
||||||
|
vec3_t vel;
|
||||||
|
float ramp;
|
||||||
|
float die;
|
||||||
|
ptype_t type;
|
||||||
|
void (*deathfunc)( struct particle_s *particle );
|
||||||
|
|
||||||
|
// for pt_clientcusttom, we'll call this function each frame
|
||||||
|
void (*callback)( struct particle_s *particle, float frametime );
|
||||||
|
|
||||||
|
// For deathfunc, etc.
|
||||||
|
unsigned char context;
|
||||||
|
} particle_t;
|
||||||
|
|
||||||
|
#endif
|
43
metamod/extra/example/include/hlsdk/common/pmtrace.h
Normal file
43
metamod/extra/example/include/hlsdk/common/pmtrace.h
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#if !defined( PMTRACEH )
|
||||||
|
#define PMTRACEH
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
vec3_t normal;
|
||||||
|
float dist;
|
||||||
|
} pmplane_t;
|
||||||
|
|
||||||
|
typedef struct pmtrace_s pmtrace_t;
|
||||||
|
|
||||||
|
struct pmtrace_s
|
||||||
|
{
|
||||||
|
qboolean allsolid; // if true, plane is not valid
|
||||||
|
qboolean startsolid; // if true, the initial point was in a solid area
|
||||||
|
qboolean inopen, inwater; // End point is in empty space or in water
|
||||||
|
float fraction; // time completed, 1.0 = didn't hit anything
|
||||||
|
vec3_t endpos; // final position
|
||||||
|
pmplane_t plane; // surface normal at impact
|
||||||
|
int ent; // entity at impact
|
||||||
|
vec3_t deltavelocity; // Change in player's velocity caused by impact.
|
||||||
|
// Only run on server.
|
||||||
|
int hitgroup;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
119
metamod/extra/example/include/hlsdk/common/port.h
Normal file
119
metamod/extra/example/include/hlsdk/common/port.h
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
// port.h: portability helper
|
||||||
|
//
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "archtypes.h" // DAL
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
|
||||||
|
// Insert your headers here
|
||||||
|
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||||
|
#define WIN32_EXTRA_LEAN
|
||||||
|
|
||||||
|
#include "winsani_in.h"
|
||||||
|
#include <windows.h>
|
||||||
|
#include "winsani_out.h"
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
#else // _WIN32
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h> // exit()
|
||||||
|
#include <string.h> // strncpy()
|
||||||
|
#include <ctype.h> // tolower()
|
||||||
|
#include <limits.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
|
||||||
|
typedef unsigned char BYTE;
|
||||||
|
|
||||||
|
typedef int32 LONG;
|
||||||
|
//typedef uint32 ULONG;
|
||||||
|
|
||||||
|
#ifndef ARCHTYPES_H
|
||||||
|
typedef uint32 ULONG;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef void *HANDLE;
|
||||||
|
|
||||||
|
#ifndef HMODULE
|
||||||
|
typedef void *HMODULE;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef char * LPSTR;
|
||||||
|
|
||||||
|
#define __cdecl
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __linux__
|
||||||
|
typedef struct POINT_s
|
||||||
|
{
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
} POINT;
|
||||||
|
typedef void *HINSTANCE;
|
||||||
|
typedef void *HWND;
|
||||||
|
typedef void *HDC;
|
||||||
|
typedef void *HGLRC;
|
||||||
|
|
||||||
|
typedef struct RECT_s
|
||||||
|
{
|
||||||
|
int left;
|
||||||
|
int right;
|
||||||
|
int top;
|
||||||
|
int bottom;
|
||||||
|
} RECT;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
|
||||||
|
//#undef FALSE
|
||||||
|
//#undef TRUE
|
||||||
|
|
||||||
|
#ifdef OSX
|
||||||
|
//#else
|
||||||
|
//const bool FALSE = false;
|
||||||
|
//const bool TRUE = true;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NULL
|
||||||
|
#ifdef __cplusplus
|
||||||
|
#define NULL 0
|
||||||
|
#else
|
||||||
|
#define NULL ((void *)0)
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
inline int ioctlsocket( int d, int cmd, uint32 *argp ) { return ioctl( d, cmd, argp ); }
|
||||||
|
inline int closesocket( int fd ) { return close( fd ); }
|
||||||
|
inline char * GetCurrentDirectory( size_t size, char * buf ) { return getcwd( buf, size ); }
|
||||||
|
inline int WSAGetLastError() { return errno; }
|
||||||
|
|
||||||
|
inline void DebugBreak( void ) { exit( 1 ); }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern char g_szEXEName[ 4096 ];
|
||||||
|
|
||||||
|
#define _snprintf snprintf
|
||||||
|
|
||||||
|
#if defined(OSX)
|
||||||
|
#define SO_ARCH_SUFFIX ".dylib"
|
||||||
|
#else
|
||||||
|
#if defined ( __x86_64__ )
|
||||||
|
#define SO_ARCH_SUFFIX "_amd64.so"
|
||||||
|
#else
|
||||||
|
#define SO_ARCH_SUFFIX ".so"
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
41
metamod/extra/example/include/hlsdk/common/qfont.h
Normal file
41
metamod/extra/example/include/hlsdk/common/qfont.h
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#if !defined( QFONTH )
|
||||||
|
#define QFONTH
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Font stuff
|
||||||
|
|
||||||
|
#define NUM_GLYPHS 256
|
||||||
|
// does not exist: // #include "basetypes.h"
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
short startoffset;
|
||||||
|
short charwidth;
|
||||||
|
} charinfo;
|
||||||
|
|
||||||
|
typedef struct qfont_s
|
||||||
|
{
|
||||||
|
int width, height;
|
||||||
|
int rowcount;
|
||||||
|
int rowheight;
|
||||||
|
charinfo fontinfo[ NUM_GLYPHS ];
|
||||||
|
unsigned char data[4];
|
||||||
|
} qfont_t;
|
||||||
|
|
||||||
|
#endif // qfont.h
|
43
metamod/extra/example/include/hlsdk/common/qlimits.h
Normal file
43
metamod/extra/example/include/hlsdk/common/qlimits.h
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
//========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ==========
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//
|
||||||
|
// $NoKeywords: $
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
#ifndef QLIMITS_H
|
||||||
|
#define QLIMITS_H
|
||||||
|
|
||||||
|
#if defined( _WIN32 )
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// DATA STRUCTURE INFO
|
||||||
|
|
||||||
|
#define MAX_NUM_ARGVS 50
|
||||||
|
|
||||||
|
// SYSTEM INFO
|
||||||
|
#define MAX_QPATH 64 // max length of a game pathname
|
||||||
|
#define MAX_OSPATH 260 // max length of a filesystem pathname
|
||||||
|
|
||||||
|
#define ON_EPSILON 0.1 // point on plane side epsilon
|
||||||
|
|
||||||
|
#define MAX_LIGHTSTYLE_INDEX_BITS 6
|
||||||
|
#define MAX_LIGHTSTYLES (1<<MAX_LIGHTSTYLE_INDEX_BITS)
|
||||||
|
|
||||||
|
// Resource counts
|
||||||
|
#define MAX_MODEL_INDEX_BITS 9 // sent as a short
|
||||||
|
#define MAX_MODELS (1<<MAX_MODEL_INDEX_BITS)
|
||||||
|
#define MAX_SOUND_INDEX_BITS 9
|
||||||
|
#define MAX_SOUNDS (1<<MAX_SOUND_INDEX_BITS)
|
||||||
|
#define MAX_SOUNDS_HASHLOOKUP_SIZE (MAX_SOUNDS * 2 - 1)
|
||||||
|
|
||||||
|
#define MAX_GENERIC_INDEX_BITS 9
|
||||||
|
#define MAX_GENERIC (1<<MAX_GENERIC_INDEX_BITS)
|
||||||
|
#define MAX_DECAL_INDEX_BITS 9
|
||||||
|
#define MAX_BASE_DECALS (1<<MAX_DECAL_INDEX_BITS)
|
||||||
|
|
||||||
|
#define MAX_EVENTS 256
|
||||||
|
#define MAX_PACKET_ENTITIES 256 // 256 visible entities per frame
|
||||||
|
|
||||||
|
#endif // QLIMITS_H
|
41
metamod/extra/example/include/hlsdk/common/quakedef.h
Normal file
41
metamod/extra/example/include/hlsdk/common/quakedef.h
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 2 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
typedef int BOOL;
|
||||||
|
|
||||||
|
// user message
|
||||||
|
#define MAX_USER_MSG_DATA 192
|
||||||
|
|
||||||
|
//moved to com_model.h
|
||||||
|
//typedef struct cache_user_s
|
||||||
|
//{
|
||||||
|
// void *data;
|
||||||
|
//} cache_user_t;
|
||||||
|
|
||||||
|
typedef int (*pfnUserMsgHook)(const char *, int, void *);
|
197
metamod/extra/example/include/hlsdk/common/r_efx.h
Normal file
197
metamod/extra/example/include/hlsdk/common/r_efx.h
Normal file
@ -0,0 +1,197 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#if !defined ( R_EFXH )
|
||||||
|
#define R_EFXH
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// particle_t
|
||||||
|
#if !defined( PARTICLEDEFH )
|
||||||
|
#include "particledef.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// BEAM
|
||||||
|
#if !defined( BEAMDEFH )
|
||||||
|
#include "beamdef.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// dlight_t
|
||||||
|
#if !defined ( DLIGHTH )
|
||||||
|
#include "dlight.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// cl_entity_t
|
||||||
|
#if !defined( CL_ENTITYH )
|
||||||
|
#include "cl_entity.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
// FOR REFERENCE, These are the built-in tracer colors. Note, color 4 is the one
|
||||||
|
// that uses the tracerred/tracergreen/tracerblue and traceralpha cvar settings
|
||||||
|
color24 gTracerColors[] =
|
||||||
|
{
|
||||||
|
{ 255, 255, 255 }, // White
|
||||||
|
{ 255, 0, 0 }, // Red
|
||||||
|
{ 0, 255, 0 }, // Green
|
||||||
|
{ 0, 0, 255 }, // Blue
|
||||||
|
{ 0, 0, 0 }, // Tracer default, filled in from cvars, etc.
|
||||||
|
{ 255, 167, 17 }, // Yellow-orange sparks
|
||||||
|
{ 255, 130, 90 }, // Yellowish streaks (garg)
|
||||||
|
{ 55, 60, 144 }, // Blue egon streak
|
||||||
|
{ 255, 130, 90 }, // More Yellowish streaks (garg)
|
||||||
|
{ 255, 140, 90 }, // More Yellowish streaks (garg)
|
||||||
|
{ 200, 130, 90 }, // More red streaks (garg)
|
||||||
|
{ 255, 120, 70 }, // Darker red streaks (garg)
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Temporary entity array
|
||||||
|
#define TENTPRIORITY_LOW 0
|
||||||
|
#define TENTPRIORITY_HIGH 1
|
||||||
|
|
||||||
|
// TEMPENTITY flags
|
||||||
|
#define FTENT_NONE 0x00000000
|
||||||
|
#define FTENT_SINEWAVE 0x00000001
|
||||||
|
#define FTENT_GRAVITY 0x00000002
|
||||||
|
#define FTENT_ROTATE 0x00000004
|
||||||
|
#define FTENT_SLOWGRAVITY 0x00000008
|
||||||
|
#define FTENT_SMOKETRAIL 0x00000010
|
||||||
|
#define FTENT_COLLIDEWORLD 0x00000020
|
||||||
|
#define FTENT_FLICKER 0x00000040
|
||||||
|
#define FTENT_FADEOUT 0x00000080
|
||||||
|
#define FTENT_SPRANIMATE 0x00000100
|
||||||
|
#define FTENT_HITSOUND 0x00000200
|
||||||
|
#define FTENT_SPIRAL 0x00000400
|
||||||
|
#define FTENT_SPRCYCLE 0x00000800
|
||||||
|
#define FTENT_COLLIDEALL 0x00001000 // will collide with world and slideboxes
|
||||||
|
#define FTENT_PERSIST 0x00002000 // tent is not removed when unable to draw
|
||||||
|
#define FTENT_COLLIDEKILL 0x00004000 // tent is removed upon collision with anything
|
||||||
|
#define FTENT_PLYRATTACHMENT 0x00008000 // tent is attached to a player (owner)
|
||||||
|
#define FTENT_SPRANIMATELOOP 0x00010000 // animating sprite doesn't die when last frame is displayed
|
||||||
|
#define FTENT_SPARKSHOWER 0x00020000
|
||||||
|
#define FTENT_NOMODEL 0x00040000 // Doesn't have a model, never try to draw ( it just triggers other things )
|
||||||
|
#define FTENT_CLIENTCUSTOM 0x00080000 // Must specify callback. Callback function is responsible for killing tempent and updating fields ( unless other flags specify how to do things )
|
||||||
|
|
||||||
|
typedef struct tempent_s
|
||||||
|
{
|
||||||
|
int flags;
|
||||||
|
float die;
|
||||||
|
float frameMax;
|
||||||
|
float x;
|
||||||
|
float y;
|
||||||
|
float z;
|
||||||
|
float fadeSpeed;
|
||||||
|
float bounceFactor;
|
||||||
|
int hitSound;
|
||||||
|
void ( *hitcallback ) ( struct tempent_s *ent, struct pmtrace_s *ptr );
|
||||||
|
void ( *callback ) ( struct tempent_s *ent, float frametime, float currenttime );
|
||||||
|
struct tempent_s *next;
|
||||||
|
int priority;
|
||||||
|
short clientIndex; // if attached, this is the index of the client to stick to
|
||||||
|
// if COLLIDEALL, this is the index of the client to ignore
|
||||||
|
// TENTS with FTENT_PLYRATTACHMENT MUST set the clientindex!
|
||||||
|
|
||||||
|
vec3_t tentOffset; // if attached, client origin + tentOffset = tent origin.
|
||||||
|
cl_entity_t entity;
|
||||||
|
|
||||||
|
// baseline.origin - velocity
|
||||||
|
// baseline.renderamt - starting fadeout intensity
|
||||||
|
// baseline.angles - angle velocity
|
||||||
|
} TEMPENTITY;
|
||||||
|
|
||||||
|
typedef struct efx_api_s efx_api_t;
|
||||||
|
|
||||||
|
struct efx_api_s
|
||||||
|
{
|
||||||
|
particle_t *( *R_AllocParticle ) ( void ( *callback ) ( struct particle_s *particle, float frametime ) );
|
||||||
|
void ( *R_BlobExplosion ) ( float * org );
|
||||||
|
void ( *R_Blood ) ( float * org, float * dir, int pcolor, int speed );
|
||||||
|
void ( *R_BloodSprite ) ( float * org, int colorindex, int modelIndex, int modelIndex2, float size );
|
||||||
|
void ( *R_BloodStream ) ( float * org, float * dir, int pcolor, int speed );
|
||||||
|
void ( *R_BreakModel ) ( float *pos, float *size, float *dir, float random, float life, int count, int modelIndex, char flags );
|
||||||
|
void ( *R_Bubbles ) ( float * mins, float * maxs, float height, int modelIndex, int count, float speed );
|
||||||
|
void ( *R_BubbleTrail ) ( float * start, float * end, float height, int modelIndex, int count, float speed );
|
||||||
|
void ( *R_BulletImpactParticles ) ( float * pos );
|
||||||
|
void ( *R_EntityParticles ) ( struct cl_entity_s *ent );
|
||||||
|
void ( *R_Explosion ) ( float *pos, int model, float scale, float framerate, int flags );
|
||||||
|
void ( *R_FizzEffect ) ( struct cl_entity_s *pent, int modelIndex, int density );
|
||||||
|
void ( *R_FireField ) ( float * org, int radius, int modelIndex, int count, int flags, float life );
|
||||||
|
void ( *R_FlickerParticles ) ( float * org );
|
||||||
|
void ( *R_FunnelSprite ) ( float *org, int modelIndex, int reverse );
|
||||||
|
void ( *R_Implosion ) ( float * end, float radius, int count, float life );
|
||||||
|
void ( *R_LargeFunnel ) ( float * org, int reverse );
|
||||||
|
void ( *R_LavaSplash ) ( float * org );
|
||||||
|
void ( *R_MultiGunshot ) ( float * org, float * dir, float * noise, int count, int decalCount, int *decalIndices );
|
||||||
|
void ( *R_MuzzleFlash ) ( float *pos1, int type );
|
||||||
|
void ( *R_ParticleBox ) ( float *mins, float *maxs, unsigned char r, unsigned char g, unsigned char b, float life );
|
||||||
|
void ( *R_ParticleBurst ) ( float * pos, int size, int color, float life );
|
||||||
|
void ( *R_ParticleExplosion ) ( float * org );
|
||||||
|
void ( *R_ParticleExplosion2 ) ( float * org, int colorStart, int colorLength );
|
||||||
|
void ( *R_ParticleLine ) ( float * start, float *end, unsigned char r, unsigned char g, unsigned char b, float life );
|
||||||
|
void ( *R_PlayerSprites ) ( int client, int modelIndex, int count, int size );
|
||||||
|
void ( *R_Projectile ) ( float * origin, float * velocity, int modelIndex, int life, int owner, void (*hitcallback)( struct tempent_s *ent, struct pmtrace_s *ptr ) );
|
||||||
|
void ( *R_RicochetSound ) ( float * pos );
|
||||||
|
void ( *R_RicochetSprite ) ( float *pos, struct model_s *pmodel, float duration, float scale );
|
||||||
|
void ( *R_RocketFlare ) ( float *pos );
|
||||||
|
void ( *R_RocketTrail ) ( float * start, float * end, int type );
|
||||||
|
void ( *R_RunParticleEffect ) ( float * org, float * dir, int color, int count );
|
||||||
|
void ( *R_ShowLine ) ( float * start, float * end );
|
||||||
|
void ( *R_SparkEffect ) ( float *pos, int count, int velocityMin, int velocityMax );
|
||||||
|
void ( *R_SparkShower ) ( float *pos );
|
||||||
|
void ( *R_SparkStreaks ) ( float * pos, int count, int velocityMin, int velocityMax );
|
||||||
|
void ( *R_Spray ) ( float * pos, float * dir, int modelIndex, int count, int speed, int spread, int rendermode );
|
||||||
|
void ( *R_Sprite_Explode ) ( TEMPENTITY *pTemp, float scale, int flags );
|
||||||
|
void ( *R_Sprite_Smoke ) ( TEMPENTITY *pTemp, float scale );
|
||||||
|
void ( *R_Sprite_Spray ) ( float * pos, float * dir, int modelIndex, int count, int speed, int iRand );
|
||||||
|
void ( *R_Sprite_Trail ) ( int type, float * start, float * end, int modelIndex, int count, float life, float size, float amplitude, int renderamt, float speed );
|
||||||
|
void ( *R_Sprite_WallPuff ) ( TEMPENTITY *pTemp, float scale );
|
||||||
|
void ( *R_StreakSplash ) ( float * pos, float * dir, int color, int count, float speed, int velocityMin, int velocityMax );
|
||||||
|
void ( *R_TracerEffect ) ( float * start, float * end );
|
||||||
|
void ( *R_UserTracerParticle ) ( float * org, float * vel, float life, int colorIndex, float length, unsigned char deathcontext, void ( *deathfunc)( struct particle_s *particle ) );
|
||||||
|
particle_t *( *R_TracerParticles ) ( float * org, float * vel, float life );
|
||||||
|
void ( *R_TeleportSplash ) ( float * org );
|
||||||
|
void ( *R_TempSphereModel ) ( float *pos, float speed, float life, int count, int modelIndex );
|
||||||
|
TEMPENTITY *( *R_TempModel ) ( float *pos, float *dir, float *angles, float life, int modelIndex, int soundtype );
|
||||||
|
TEMPENTITY *( *R_DefaultSprite ) ( float *pos, int spriteIndex, float framerate );
|
||||||
|
TEMPENTITY *( *R_TempSprite ) ( float *pos, float *dir, float scale, int modelIndex, int rendermode, int renderfx, float a, float life, int flags );
|
||||||
|
int ( *Draw_DecalIndex ) ( int id );
|
||||||
|
int ( *Draw_DecalIndexFromName ) ( char *name );
|
||||||
|
void ( *R_DecalShoot ) ( int textureIndex, int entity, int modelIndex, float * position, int flags );
|
||||||
|
void ( *R_AttachTentToPlayer ) ( int client, int modelIndex, float zoffset, float life );
|
||||||
|
void ( *R_KillAttachedTents ) ( int client );
|
||||||
|
BEAM *( *R_BeamCirclePoints ) ( int type, float * start, float * end, int modelIndex, float life, float width, float amplitude, float brightness, float speed, int startFrame, float framerate, float r, float g, float b );
|
||||||
|
BEAM *( *R_BeamEntPoint ) ( int startEnt, float * end, int modelIndex, float life, float width, float amplitude, float brightness, float speed, int startFrame, float framerate, float r, float g, float b );
|
||||||
|
BEAM *( *R_BeamEnts ) ( int startEnt, int endEnt, int modelIndex, float life, float width, float amplitude, float brightness, float speed, int startFrame, float framerate, float r, float g, float b );
|
||||||
|
BEAM *( *R_BeamFollow ) ( int startEnt, int modelIndex, float life, float width, float r, float g, float b, float brightness );
|
||||||
|
void ( *R_BeamKill ) ( int deadEntity );
|
||||||
|
BEAM *( *R_BeamLightning ) ( float * start, float * end, int modelIndex, float life, float width, float amplitude, float brightness, float speed );
|
||||||
|
BEAM *( *R_BeamPoints ) ( float * start, float * end, int modelIndex, float life, float width, float amplitude, float brightness, float speed, int startFrame, float framerate, float r, float g, float b );
|
||||||
|
BEAM *( *R_BeamRing ) ( int startEnt, int endEnt, int modelIndex, float life, float width, float amplitude, float brightness, float speed, int startFrame, float framerate, float r, float g, float b );
|
||||||
|
dlight_t *( *CL_AllocDlight ) ( int key );
|
||||||
|
dlight_t *( *CL_AllocElight ) ( int key );
|
||||||
|
TEMPENTITY *( *CL_TempEntAlloc ) ( float * org, struct model_s *model );
|
||||||
|
TEMPENTITY *( *CL_TempEntAllocNoModel ) ( float * org );
|
||||||
|
TEMPENTITY *( *CL_TempEntAllocHigh ) ( float * org, struct model_s *model );
|
||||||
|
TEMPENTITY *( *CL_TentEntAllocCustom ) ( float *origin, struct model_s *model, int high, void ( *callback ) ( struct tempent_s *ent, float frametime, float currenttime ) );
|
||||||
|
void ( *R_GetPackedColor ) ( short *packed, short color );
|
||||||
|
short ( *R_LookupColor ) ( unsigned char r, unsigned char g, unsigned char b );
|
||||||
|
void ( *R_DecalRemoveAll ) ( int textureIndex ); //textureIndex points to the decal index in the array, not the actual texture index.
|
||||||
|
void ( *R_FireCustomDecal ) ( int textureIndex, int entity, int modelIndex, float * position, int flags, float scale );
|
||||||
|
};
|
||||||
|
|
||||||
|
extern efx_api_t efx;
|
||||||
|
|
||||||
|
#endif
|
151
metamod/extra/example/include/hlsdk/common/r_studioint.h
Normal file
151
metamod/extra/example/include/hlsdk/common/r_studioint.h
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//
|
||||||
|
// $NoKeywords: $
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
#if !defined( R_STUDIOINT_H )
|
||||||
|
#define R_STUDIOINT_H
|
||||||
|
#if defined( _WIN32 )
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define STUDIO_INTERFACE_VERSION 1
|
||||||
|
|
||||||
|
typedef struct engine_studio_api_s
|
||||||
|
{
|
||||||
|
// Allocate number*size bytes and zero it
|
||||||
|
void *( *Mem_Calloc ) ( int number, size_t size );
|
||||||
|
// Check to see if pointer is in the cache
|
||||||
|
void *( *Cache_Check ) ( struct cache_user_s *c );
|
||||||
|
// Load file into cache ( can be swapped out on demand )
|
||||||
|
void ( *LoadCacheFile ) ( char *path, struct cache_user_s *cu );
|
||||||
|
// Retrieve model pointer for the named model
|
||||||
|
struct model_s *( *Mod_ForName ) ( const char *name, int crash_if_missing );
|
||||||
|
// Retrieve pointer to studio model data block from a model
|
||||||
|
void *( *Mod_Extradata ) ( struct model_s *mod );
|
||||||
|
// Retrieve indexed model from client side model precache list
|
||||||
|
struct model_s *( *GetModelByIndex ) ( int index );
|
||||||
|
// Get entity that is set for rendering
|
||||||
|
struct cl_entity_s * ( *GetCurrentEntity ) ( void );
|
||||||
|
// Get referenced player_info_t
|
||||||
|
struct player_info_s *( *PlayerInfo ) ( int index );
|
||||||
|
// Get most recently received player state data from network system
|
||||||
|
struct entity_state_s *( *GetPlayerState ) ( int index );
|
||||||
|
// Get viewentity
|
||||||
|
struct cl_entity_s * ( *GetViewEntity ) ( void );
|
||||||
|
// Get current frame count, and last two timestampes on client
|
||||||
|
void ( *GetTimes ) ( int *framecount, double *current, double *old );
|
||||||
|
// Get a pointer to a cvar by name
|
||||||
|
struct cvar_s *( *GetCvar ) ( const char *name );
|
||||||
|
// Get current render origin and view vectors ( up, right and vpn )
|
||||||
|
void ( *GetViewInfo ) ( float *origin, float *upv, float *rightv, float *vpnv );
|
||||||
|
// Get sprite model used for applying chrome effect
|
||||||
|
struct model_s *( *GetChromeSprite ) ( void );
|
||||||
|
// Get model counters so we can incement instrumentation
|
||||||
|
void ( *GetModelCounters ) ( int **s, int **a );
|
||||||
|
// Get software scaling coefficients
|
||||||
|
void ( *GetAliasScale ) ( float *x, float *y );
|
||||||
|
|
||||||
|
// Get bone, light, alias, and rotation matrices
|
||||||
|
float ****( *StudioGetBoneTransform ) ( void );
|
||||||
|
float ****( *StudioGetLightTransform )( void );
|
||||||
|
float ***( *StudioGetAliasTransform ) ( void );
|
||||||
|
float ***( *StudioGetRotationMatrix ) ( void );
|
||||||
|
|
||||||
|
// Set up body part, and get submodel pointers
|
||||||
|
void ( *StudioSetupModel ) ( int bodypart, void **ppbodypart, void **ppsubmodel );
|
||||||
|
// Check if entity's bbox is in the view frustum
|
||||||
|
int ( *StudioCheckBBox ) ( void );
|
||||||
|
// Apply lighting effects to model
|
||||||
|
void ( *StudioDynamicLight ) ( struct cl_entity_s *ent, struct alight_s *plight );
|
||||||
|
void ( *StudioEntityLight ) ( struct alight_s *plight );
|
||||||
|
void ( *StudioSetupLighting ) ( struct alight_s *plighting );
|
||||||
|
|
||||||
|
// Draw mesh vertices
|
||||||
|
void ( *StudioDrawPoints ) ( void );
|
||||||
|
|
||||||
|
// Draw hulls around bones
|
||||||
|
void ( *StudioDrawHulls ) ( void );
|
||||||
|
// Draw bbox around studio models
|
||||||
|
void ( *StudioDrawAbsBBox ) ( void );
|
||||||
|
// Draws bones
|
||||||
|
void ( *StudioDrawBones ) ( void );
|
||||||
|
// Loads in appropriate texture for model
|
||||||
|
void ( *StudioSetupSkin ) ( void *ptexturehdr, int index );
|
||||||
|
// Sets up for remapped colors
|
||||||
|
void ( *StudioSetRemapColors ) ( int top, int bottom );
|
||||||
|
// Set's player model and returns model pointer
|
||||||
|
struct model_s *( *SetupPlayerModel ) ( int index );
|
||||||
|
// Fires any events embedded in animation
|
||||||
|
void ( *StudioClientEvents ) ( void );
|
||||||
|
// Retrieve/set forced render effects flags
|
||||||
|
int ( *GetForceFaceFlags ) ( void );
|
||||||
|
void ( *SetForceFaceFlags ) ( int flags );
|
||||||
|
// Tell engine the value of the studio model header
|
||||||
|
void ( *StudioSetHeader ) ( void *header );
|
||||||
|
// Tell engine which model_t * is being renderered
|
||||||
|
void ( *SetRenderModel ) ( struct model_s *model );
|
||||||
|
|
||||||
|
// Final state setup and restore for rendering
|
||||||
|
void ( *SetupRenderer ) ( int rendermode );
|
||||||
|
void ( *RestoreRenderer ) ( void );
|
||||||
|
|
||||||
|
// Set render origin for applying chrome effect
|
||||||
|
void ( *SetChromeOrigin ) ( void );
|
||||||
|
|
||||||
|
// True if using D3D/OpenGL
|
||||||
|
int ( *IsHardware ) ( void );
|
||||||
|
|
||||||
|
// Only called by hardware interface
|
||||||
|
void ( *GL_StudioDrawShadow ) ( void );
|
||||||
|
void ( *GL_SetRenderMode ) ( int mode );
|
||||||
|
|
||||||
|
void ( *StudioSetRenderamt ) (int iRenderamt); //!!!CZERO added for rendering glass on viewmodels
|
||||||
|
void ( *StudioSetCullState ) ( int iCull );
|
||||||
|
void ( *StudioRenderShadow ) ( int iSprite, float *p1, float *p2, float *p3, float *p4 );
|
||||||
|
} engine_studio_api_t;
|
||||||
|
|
||||||
|
typedef struct server_studio_api_s
|
||||||
|
{
|
||||||
|
// Allocate number*size bytes and zero it
|
||||||
|
void *( *Mem_Calloc ) ( int number, size_t size );
|
||||||
|
// Check to see if pointer is in the cache
|
||||||
|
void *( *Cache_Check ) ( struct cache_user_s *c );
|
||||||
|
// Load file into cache ( can be swapped out on demand )
|
||||||
|
void ( *LoadCacheFile ) ( char *path, struct cache_user_s *cu );
|
||||||
|
// Retrieve pointer to studio model data block from a model
|
||||||
|
void *( *Mod_Extradata ) ( struct model_s *mod );
|
||||||
|
} server_studio_api_t;
|
||||||
|
|
||||||
|
|
||||||
|
// client blending
|
||||||
|
typedef struct r_studio_interface_s
|
||||||
|
{
|
||||||
|
int version;
|
||||||
|
int ( *StudioDrawModel ) ( int flags );
|
||||||
|
int ( *StudioDrawPlayer ) ( int flags, struct entity_state_s *pplayer );
|
||||||
|
} r_studio_interface_t;
|
||||||
|
|
||||||
|
extern r_studio_interface_t *pStudioAPI;
|
||||||
|
|
||||||
|
// server blending
|
||||||
|
#define SV_BLENDING_INTERFACE_VERSION 1
|
||||||
|
|
||||||
|
typedef struct sv_blending_interface_s
|
||||||
|
{
|
||||||
|
int version;
|
||||||
|
|
||||||
|
void ( *SV_StudioSetupBones )( struct model_s *pModel,
|
||||||
|
float frame,
|
||||||
|
int sequence,
|
||||||
|
const vec3_t angles,
|
||||||
|
const vec3_t origin,
|
||||||
|
const byte *pcontroller,
|
||||||
|
const byte *pblending,
|
||||||
|
int iBone,
|
||||||
|
const edict_t *pEdict );
|
||||||
|
} sv_blending_interface_t;
|
||||||
|
|
||||||
|
#endif // R_STUDIOINT_H
|
75
metamod/extra/example/include/hlsdk/common/ref_params.h
Normal file
75
metamod/extra/example/include/hlsdk/common/ref_params.h
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#if !defined( REF_PARAMSH )
|
||||||
|
#define REF_PARAMSH
|
||||||
|
|
||||||
|
typedef struct ref_params_s
|
||||||
|
{
|
||||||
|
// Output
|
||||||
|
float vieworg[3];
|
||||||
|
float viewangles[3];
|
||||||
|
|
||||||
|
float forward[3];
|
||||||
|
float right[3];
|
||||||
|
float up[3];
|
||||||
|
|
||||||
|
// Client frametime;
|
||||||
|
float frametime;
|
||||||
|
// Client time
|
||||||
|
float time;
|
||||||
|
|
||||||
|
// Misc
|
||||||
|
int intermission;
|
||||||
|
int paused;
|
||||||
|
int spectator;
|
||||||
|
int onground;
|
||||||
|
int waterlevel;
|
||||||
|
|
||||||
|
float simvel[3];
|
||||||
|
float simorg[3];
|
||||||
|
|
||||||
|
float viewheight[3];
|
||||||
|
float idealpitch;
|
||||||
|
|
||||||
|
float cl_viewangles[3];
|
||||||
|
|
||||||
|
int health;
|
||||||
|
float crosshairangle[3];
|
||||||
|
float viewsize;
|
||||||
|
|
||||||
|
float punchangle[3];
|
||||||
|
int maxclients;
|
||||||
|
int viewentity;
|
||||||
|
int playernum;
|
||||||
|
int max_entities;
|
||||||
|
int demoplayback;
|
||||||
|
int hardware;
|
||||||
|
|
||||||
|
int smoothing;
|
||||||
|
|
||||||
|
// Last issued usercmd
|
||||||
|
struct usercmd_s *cmd;
|
||||||
|
|
||||||
|
// Movevars
|
||||||
|
struct movevars_s *movevars;
|
||||||
|
|
||||||
|
int viewport[4]; // the viewport coordinates x ,y , width, height
|
||||||
|
|
||||||
|
int nextView; // the renderer calls ClientDLL_CalcRefdef() and Renderview
|
||||||
|
// so long in cycles until this value is 0 (multiple views)
|
||||||
|
int onlyClientDraw; // if !=0 nothing is drawn by the engine except clientDraw functions
|
||||||
|
} ref_params_t;
|
||||||
|
|
||||||
|
#endif // !REF_PARAMSH
|
24
metamod/extra/example/include/hlsdk/common/screenfade.h
Normal file
24
metamod/extra/example/include/hlsdk/common/screenfade.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//
|
||||||
|
// $NoKeywords: $
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
#if !defined( SCREENFADEH )
|
||||||
|
#define SCREENFADEH
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct screenfade_s
|
||||||
|
{
|
||||||
|
float fadeSpeed; // How fast to fade (tics / second) (+ fade in, - fade out)
|
||||||
|
float fadeEnd; // When the fading hits maximum
|
||||||
|
float fadeTotalEnd; // Total End Time of the fade (used for FFADE_OUT)
|
||||||
|
float fadeReset; // When to reset to not fading (for fadeout and hold)
|
||||||
|
byte fader, fadeg, fadeb, fadealpha; // Fade color
|
||||||
|
int fadeFlags; // Fading flags
|
||||||
|
} screenfade_t;
|
||||||
|
|
||||||
|
#endif // !SCREENFADEH
|
33
metamod/extra/example/include/hlsdk/common/stdc++compat.cpp
Normal file
33
metamod/extra/example/include/hlsdk/common/stdc++compat.cpp
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#if !defined(_WIN32)
|
||||||
|
void NORETURN Sys_Error(const char *error, ...);
|
||||||
|
|
||||||
|
// This file adds the necessary compatibility tricks to avoid symbols with
|
||||||
|
// version GLIBCXX_3.4.16 and bigger, keeping binary compatibility with libstdc++ 4.6.1.
|
||||||
|
namespace std
|
||||||
|
{
|
||||||
|
// We shouldn't be throwing exceptions at all, but it sadly turns out we call STL (inline) functions that do.
|
||||||
|
void __throw_out_of_range_fmt(const char *fmt, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
char buf[1024]; // That should be big enough.
|
||||||
|
|
||||||
|
va_start(ap, fmt);
|
||||||
|
vsnprintf(buf, sizeof(buf), fmt, ap);
|
||||||
|
buf[sizeof(buf) - 1] = '\0';
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
|
Sys_Error(buf);
|
||||||
|
}
|
||||||
|
}; // namespace std
|
||||||
|
|
||||||
|
// Technically, this symbol is not in GLIBCXX_3.4.20, but in CXXABI_1.3.8,
|
||||||
|
// but that's equivalent, version-wise. Those calls are added by the compiler
|
||||||
|
// itself on `new Class[n]` calls.
|
||||||
|
extern "C"
|
||||||
|
void __cxa_throw_bad_array_new_length()
|
||||||
|
{
|
||||||
|
Sys_Error("Bad array new length.");
|
||||||
|
}
|
||||||
|
#endif // !defined(_WIN32)
|
29
metamod/extra/example/include/hlsdk/common/studio_event.h
Normal file
29
metamod/extra/example/include/hlsdk/common/studio_event.h
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#if !defined( STUDIO_EVENTH )
|
||||||
|
#define STUDIO_EVENTH
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct mstudioevent_s
|
||||||
|
{
|
||||||
|
int frame;
|
||||||
|
int event;
|
||||||
|
int type;
|
||||||
|
char options[64];
|
||||||
|
} mstudioevent_t;
|
||||||
|
|
||||||
|
#endif // STUDIO_EVENTH
|
392
metamod/extra/example/include/hlsdk/common/textconsole.cpp
Normal file
392
metamod/extra/example/include/hlsdk/common/textconsole.cpp
Normal file
@ -0,0 +1,392 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 2 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "precompiled.h"
|
||||||
|
|
||||||
|
bool CTextConsole::Init(IBaseSystem *system)
|
||||||
|
{
|
||||||
|
// NULL or a valid base system interface
|
||||||
|
m_System = system;
|
||||||
|
|
||||||
|
memset(m_szConsoleText, 0, sizeof(m_szConsoleText));
|
||||||
|
m_nConsoleTextLen = 0;
|
||||||
|
m_nCursorPosition = 0;
|
||||||
|
|
||||||
|
memset(m_szSavedConsoleText, 0, sizeof(m_szSavedConsoleText));
|
||||||
|
m_nSavedConsoleTextLen = 0;
|
||||||
|
|
||||||
|
memset(m_aszLineBuffer, 0, sizeof(m_aszLineBuffer));
|
||||||
|
m_nTotalLines = 0;
|
||||||
|
m_nInputLine = 0;
|
||||||
|
m_nBrowseLine = 0;
|
||||||
|
|
||||||
|
// these are log messages, not related to console
|
||||||
|
Sys_Printf("\n");
|
||||||
|
Sys_Printf("Console initialized.\n");
|
||||||
|
|
||||||
|
m_ConsoleVisible = true;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTextConsole::InitSystem(IBaseSystem *system)
|
||||||
|
{
|
||||||
|
m_System = system;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTextConsole::SetVisible(bool visible)
|
||||||
|
{
|
||||||
|
m_ConsoleVisible = visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CTextConsole::IsVisible()
|
||||||
|
{
|
||||||
|
return m_ConsoleVisible;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTextConsole::ShutDown()
|
||||||
|
{
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTextConsole::Print(char *pszMsg)
|
||||||
|
{
|
||||||
|
if (m_nConsoleTextLen)
|
||||||
|
{
|
||||||
|
int nLen = m_nConsoleTextLen;
|
||||||
|
while (nLen--)
|
||||||
|
{
|
||||||
|
PrintRaw("\b \b");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PrintRaw(pszMsg);
|
||||||
|
|
||||||
|
if (m_nConsoleTextLen)
|
||||||
|
{
|
||||||
|
PrintRaw(m_szConsoleText, m_nConsoleTextLen);
|
||||||
|
}
|
||||||
|
|
||||||
|
UpdateStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
int CTextConsole::ReceiveNewline()
|
||||||
|
{
|
||||||
|
int nLen = 0;
|
||||||
|
|
||||||
|
Echo("\n");
|
||||||
|
|
||||||
|
if (m_nConsoleTextLen)
|
||||||
|
{
|
||||||
|
nLen = m_nConsoleTextLen;
|
||||||
|
|
||||||
|
m_szConsoleText[ m_nConsoleTextLen ] = '\0';
|
||||||
|
m_nConsoleTextLen = 0;
|
||||||
|
m_nCursorPosition = 0;
|
||||||
|
|
||||||
|
// cache line in buffer, but only if it's not a duplicate of the previous line
|
||||||
|
if ((m_nInputLine == 0) || (strcmp(m_aszLineBuffer[ m_nInputLine - 1 ], m_szConsoleText)))
|
||||||
|
{
|
||||||
|
strncpy(m_aszLineBuffer[ m_nInputLine ], m_szConsoleText, MAX_CONSOLE_TEXTLEN);
|
||||||
|
m_nInputLine++;
|
||||||
|
|
||||||
|
if (m_nInputLine > m_nTotalLines)
|
||||||
|
m_nTotalLines = m_nInputLine;
|
||||||
|
|
||||||
|
if (m_nInputLine >= MAX_BUFFER_LINES)
|
||||||
|
m_nInputLine = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
m_nBrowseLine = m_nInputLine;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nLen;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTextConsole::ReceiveBackspace()
|
||||||
|
{
|
||||||
|
int nCount;
|
||||||
|
|
||||||
|
if (m_nCursorPosition == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_nConsoleTextLen--;
|
||||||
|
m_nCursorPosition--;
|
||||||
|
|
||||||
|
Echo("\b");
|
||||||
|
|
||||||
|
for (nCount = m_nCursorPosition; nCount < m_nConsoleTextLen; ++nCount)
|
||||||
|
{
|
||||||
|
m_szConsoleText[ nCount ] = m_szConsoleText[ nCount + 1 ];
|
||||||
|
Echo(m_szConsoleText + nCount, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
Echo(" ");
|
||||||
|
|
||||||
|
nCount = m_nConsoleTextLen;
|
||||||
|
while (nCount >= m_nCursorPosition)
|
||||||
|
{
|
||||||
|
Echo("\b");
|
||||||
|
nCount--;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_nBrowseLine = m_nInputLine;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTextConsole::ReceiveTab()
|
||||||
|
{
|
||||||
|
if (!m_System)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ObjectList matches;
|
||||||
|
m_szConsoleText[ m_nConsoleTextLen ] = '\0';
|
||||||
|
m_System->GetCommandMatches(m_szConsoleText, &matches);
|
||||||
|
|
||||||
|
if (matches.IsEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (matches.CountElements() == 1)
|
||||||
|
{
|
||||||
|
char *pszCmdName = (char *)matches.GetFirst();
|
||||||
|
char *pszRest = pszCmdName + strlen(m_szConsoleText);
|
||||||
|
|
||||||
|
if (pszRest)
|
||||||
|
{
|
||||||
|
Echo(pszRest);
|
||||||
|
strcat(m_szConsoleText, pszRest);
|
||||||
|
m_nConsoleTextLen += strlen(pszRest);
|
||||||
|
|
||||||
|
Echo(" ");
|
||||||
|
strcat(m_szConsoleText, " ");
|
||||||
|
m_nConsoleTextLen++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int nLongestCmd = 0;
|
||||||
|
int nSmallestCmd = 0;
|
||||||
|
int nCurrentColumn;
|
||||||
|
int nTotalColumns;
|
||||||
|
char szCommonCmd[256]; // Should be enough.
|
||||||
|
char szFormatCmd[256];
|
||||||
|
char *pszSmallestCmd;
|
||||||
|
char *pszCurrentCmd = (char *)matches.GetFirst();
|
||||||
|
nSmallestCmd = strlen(pszCurrentCmd);
|
||||||
|
pszSmallestCmd = pszCurrentCmd;
|
||||||
|
while (pszCurrentCmd)
|
||||||
|
{
|
||||||
|
if ((int)strlen(pszCurrentCmd) > nLongestCmd)
|
||||||
|
{
|
||||||
|
nLongestCmd = strlen(pszCurrentCmd);
|
||||||
|
}
|
||||||
|
if ((int)strlen(pszCurrentCmd) < nSmallestCmd)
|
||||||
|
{
|
||||||
|
nSmallestCmd = strlen(pszCurrentCmd);
|
||||||
|
pszSmallestCmd = pszCurrentCmd;
|
||||||
|
}
|
||||||
|
pszCurrentCmd = (char *)matches.GetNext();
|
||||||
|
}
|
||||||
|
|
||||||
|
nTotalColumns = (GetWidth() - 1) / (nLongestCmd + 1);
|
||||||
|
nCurrentColumn = 0;
|
||||||
|
|
||||||
|
Echo("\n");
|
||||||
|
Q_strcpy(szCommonCmd, pszSmallestCmd);
|
||||||
|
|
||||||
|
// Would be nice if these were sorted, but not that big a deal
|
||||||
|
pszCurrentCmd = (char *)matches.GetFirst();
|
||||||
|
while (pszCurrentCmd)
|
||||||
|
{
|
||||||
|
if (++nCurrentColumn > nTotalColumns)
|
||||||
|
{
|
||||||
|
Echo("\n");
|
||||||
|
nCurrentColumn = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
_snprintf(szFormatCmd, sizeof(szFormatCmd), "%-*s ", nLongestCmd, pszCurrentCmd);
|
||||||
|
Echo(szFormatCmd);
|
||||||
|
for (char *pCur = pszCurrentCmd, *pCommon = szCommonCmd; (*pCur && *pCommon); pCur++, pCommon++)
|
||||||
|
{
|
||||||
|
if (*pCur != *pCommon)
|
||||||
|
{
|
||||||
|
*pCommon = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pszCurrentCmd = (char *)matches.GetNext();
|
||||||
|
}
|
||||||
|
|
||||||
|
Echo("\n");
|
||||||
|
if (Q_strcmp(szCommonCmd, m_szConsoleText))
|
||||||
|
{
|
||||||
|
Q_strcpy(m_szConsoleText, szCommonCmd);
|
||||||
|
m_nConsoleTextLen = Q_strlen(szCommonCmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
Echo(m_szConsoleText);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_nCursorPosition = m_nConsoleTextLen;
|
||||||
|
m_nBrowseLine = m_nInputLine;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTextConsole::ReceiveStandardChar(const char ch)
|
||||||
|
{
|
||||||
|
int nCount;
|
||||||
|
|
||||||
|
// If the line buffer is maxed out, ignore this char
|
||||||
|
if (m_nConsoleTextLen >= (sizeof(m_szConsoleText) - 2))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
nCount = m_nConsoleTextLen;
|
||||||
|
while (nCount > m_nCursorPosition)
|
||||||
|
{
|
||||||
|
m_szConsoleText[ nCount ] = m_szConsoleText[ nCount - 1 ];
|
||||||
|
nCount--;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_szConsoleText[ m_nCursorPosition ] = ch;
|
||||||
|
|
||||||
|
Echo(m_szConsoleText + m_nCursorPosition, m_nConsoleTextLen - m_nCursorPosition + 1);
|
||||||
|
|
||||||
|
m_nConsoleTextLen++;
|
||||||
|
m_nCursorPosition++;
|
||||||
|
|
||||||
|
nCount = m_nConsoleTextLen;
|
||||||
|
while (nCount > m_nCursorPosition)
|
||||||
|
{
|
||||||
|
Echo("\b");
|
||||||
|
nCount--;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_nBrowseLine = m_nInputLine;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTextConsole::ReceiveUpArrow()
|
||||||
|
{
|
||||||
|
int nLastCommandInHistory = m_nInputLine + 1;
|
||||||
|
if (nLastCommandInHistory > m_nTotalLines)
|
||||||
|
nLastCommandInHistory = 0;
|
||||||
|
|
||||||
|
if (m_nBrowseLine == nLastCommandInHistory)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (m_nBrowseLine == m_nInputLine)
|
||||||
|
{
|
||||||
|
if (m_nConsoleTextLen > 0)
|
||||||
|
{
|
||||||
|
// Save off current text
|
||||||
|
strncpy(m_szSavedConsoleText, m_szConsoleText, m_nConsoleTextLen);
|
||||||
|
// No terminator, it's a raw buffer we always know the length of
|
||||||
|
}
|
||||||
|
|
||||||
|
m_nSavedConsoleTextLen = m_nConsoleTextLen;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_nBrowseLine--;
|
||||||
|
if (m_nBrowseLine < 0)
|
||||||
|
{
|
||||||
|
m_nBrowseLine = m_nTotalLines - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// delete old line
|
||||||
|
while (m_nConsoleTextLen--)
|
||||||
|
{
|
||||||
|
Echo("\b \b");
|
||||||
|
}
|
||||||
|
|
||||||
|
// copy buffered line
|
||||||
|
Echo(m_aszLineBuffer[ m_nBrowseLine ]);
|
||||||
|
|
||||||
|
strncpy(m_szConsoleText, m_aszLineBuffer[ m_nBrowseLine ], MAX_CONSOLE_TEXTLEN);
|
||||||
|
|
||||||
|
m_nConsoleTextLen = strlen(m_aszLineBuffer[ m_nBrowseLine ]);
|
||||||
|
m_nCursorPosition = m_nConsoleTextLen;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTextConsole::ReceiveDownArrow()
|
||||||
|
{
|
||||||
|
if (m_nBrowseLine == m_nInputLine)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (++m_nBrowseLine > m_nTotalLines)
|
||||||
|
m_nBrowseLine = 0;
|
||||||
|
|
||||||
|
// delete old line
|
||||||
|
while (m_nConsoleTextLen--)
|
||||||
|
{
|
||||||
|
Echo("\b \b");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_nBrowseLine == m_nInputLine)
|
||||||
|
{
|
||||||
|
if (m_nSavedConsoleTextLen > 0)
|
||||||
|
{
|
||||||
|
// Restore current text
|
||||||
|
strncpy(m_szConsoleText, m_szSavedConsoleText, m_nSavedConsoleTextLen);
|
||||||
|
// No terminator, it's a raw buffer we always know the length of
|
||||||
|
|
||||||
|
Echo(m_szConsoleText, m_nSavedConsoleTextLen);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_nConsoleTextLen = m_nSavedConsoleTextLen;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// copy buffered line
|
||||||
|
Echo(m_aszLineBuffer[ m_nBrowseLine ]);
|
||||||
|
strncpy(m_szConsoleText, m_aszLineBuffer[ m_nBrowseLine ], MAX_CONSOLE_TEXTLEN);
|
||||||
|
m_nConsoleTextLen = strlen(m_aszLineBuffer[ m_nBrowseLine ]);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_nCursorPosition = m_nConsoleTextLen;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTextConsole::ReceiveLeftArrow()
|
||||||
|
{
|
||||||
|
if (m_nCursorPosition == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Echo("\b");
|
||||||
|
m_nCursorPosition--;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTextConsole::ReceiveRightArrow()
|
||||||
|
{
|
||||||
|
if (m_nCursorPosition == m_nConsoleTextLen)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Echo(m_szConsoleText + m_nCursorPosition, 1);
|
||||||
|
m_nCursorPosition++;
|
||||||
|
}
|
95
metamod/extra/example/include/hlsdk/common/textconsole.h
Normal file
95
metamod/extra/example/include/hlsdk/common/textconsole.h
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 2 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "IBaseSystem.h"
|
||||||
|
|
||||||
|
#define MAX_CONSOLE_TEXTLEN 256
|
||||||
|
#define MAX_BUFFER_LINES 30
|
||||||
|
|
||||||
|
class CTextConsole {
|
||||||
|
public:
|
||||||
|
virtual ~CTextConsole() {}
|
||||||
|
|
||||||
|
virtual bool Init(IBaseSystem *system = nullptr);
|
||||||
|
virtual void ShutDown();
|
||||||
|
virtual void Print(char *pszMsg);
|
||||||
|
|
||||||
|
virtual void SetTitle(char *pszTitle) {}
|
||||||
|
virtual void SetStatusLine(char *pszStatus) {}
|
||||||
|
virtual void UpdateStatus() {}
|
||||||
|
|
||||||
|
// Must be provided by children
|
||||||
|
virtual void PrintRaw(char *pszMsg, int nChars = 0) = 0;
|
||||||
|
virtual void Echo(char *pszMsg, int nChars = 0) = 0;
|
||||||
|
virtual char *GetLine() = 0;
|
||||||
|
virtual int GetWidth() = 0;
|
||||||
|
|
||||||
|
virtual void SetVisible(bool visible);
|
||||||
|
virtual bool IsVisible();
|
||||||
|
|
||||||
|
void InitSystem(IBaseSystem *system);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
char m_szConsoleText[MAX_CONSOLE_TEXTLEN]; // console text buffer
|
||||||
|
int m_nConsoleTextLen; // console textbuffer length
|
||||||
|
int m_nCursorPosition; // position in the current input line
|
||||||
|
|
||||||
|
// Saved input data when scrolling back through command history
|
||||||
|
char m_szSavedConsoleText[MAX_CONSOLE_TEXTLEN]; // console text buffer
|
||||||
|
int m_nSavedConsoleTextLen; // console textbuffer length
|
||||||
|
|
||||||
|
char m_aszLineBuffer[MAX_BUFFER_LINES][MAX_CONSOLE_TEXTLEN]; // command buffer last MAX_BUFFER_LINES commands
|
||||||
|
int m_nInputLine; // Current line being entered
|
||||||
|
int m_nBrowseLine; // current buffer line for up/down arrow
|
||||||
|
int m_nTotalLines; // # of nonempty lines in the buffer
|
||||||
|
|
||||||
|
bool m_ConsoleVisible;
|
||||||
|
|
||||||
|
IBaseSystem *m_System;
|
||||||
|
|
||||||
|
int ReceiveNewline();
|
||||||
|
void ReceiveBackspace();
|
||||||
|
void ReceiveTab();
|
||||||
|
void ReceiveStandardChar(const char ch);
|
||||||
|
void ReceiveUpArrow();
|
||||||
|
void ReceiveDownArrow();
|
||||||
|
void ReceiveLeftArrow();
|
||||||
|
void ReceiveRightArrow();
|
||||||
|
};
|
||||||
|
|
||||||
|
#include "SteamAppStartUp.h"
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
#include "TextConsoleWin32.h"
|
||||||
|
#else
|
||||||
|
#include "TextConsoleUnix.h"
|
||||||
|
#endif // defined(_WIN32)
|
||||||
|
|
||||||
|
void Sys_Printf(char *fmt, ...);
|
64
metamod/extra/example/include/hlsdk/common/triangleapi.h
Normal file
64
metamod/extra/example/include/hlsdk/common/triangleapi.h
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#if !defined( TRIANGLEAPIH )
|
||||||
|
#define TRIANGLEAPIH
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
TRI_FRONT = 0,
|
||||||
|
TRI_NONE = 1,
|
||||||
|
} TRICULLSTYLE;
|
||||||
|
|
||||||
|
#define TRI_API_VERSION 1
|
||||||
|
|
||||||
|
#define TRI_TRIANGLES 0
|
||||||
|
#define TRI_TRIANGLE_FAN 1
|
||||||
|
#define TRI_QUADS 2
|
||||||
|
#define TRI_POLYGON 3
|
||||||
|
#define TRI_LINES 4
|
||||||
|
#define TRI_TRIANGLE_STRIP 5
|
||||||
|
#define TRI_QUAD_STRIP 6
|
||||||
|
|
||||||
|
typedef struct triangleapi_s
|
||||||
|
{
|
||||||
|
int version;
|
||||||
|
|
||||||
|
void ( *RenderMode )( int mode );
|
||||||
|
void ( *Begin )( int primitiveCode );
|
||||||
|
void ( *End ) ( void );
|
||||||
|
|
||||||
|
void ( *Color4f ) ( float r, float g, float b, float a );
|
||||||
|
void ( *Color4ub ) ( unsigned char r, unsigned char g, unsigned char b, unsigned char a );
|
||||||
|
void ( *TexCoord2f ) ( float u, float v );
|
||||||
|
void ( *Vertex3fv ) ( float *worldPnt );
|
||||||
|
void ( *Vertex3f ) ( float x, float y, float z );
|
||||||
|
void ( *Brightness ) ( float brightness );
|
||||||
|
void ( *CullFace ) ( TRICULLSTYLE style );
|
||||||
|
int ( *SpriteTexture ) ( struct model_s *pSpriteModel, int frame );
|
||||||
|
int ( *WorldToScreen ) ( float *world, float *screen ); // Returns 1 if it's z clipped
|
||||||
|
void ( *Fog ) ( float flFogColor[3], float flStart, float flEnd, int bOn ); // Works just like GL_FOG, flFogColor is r/g/b.
|
||||||
|
void ( *ScreenToWorld ) ( float *screen, float *world );
|
||||||
|
void ( *GetMatrix ) ( const int pname, float *matrix );
|
||||||
|
int ( *BoxInPVS ) ( float *mins, float *maxs );
|
||||||
|
void ( *LightAtPoint ) ( float *pos, float *value );
|
||||||
|
void ( *Color4fRendermode ) ( float r, float g, float b, float a, int rendermode );
|
||||||
|
void ( *FogParams ) ( float flDensity, int iFogSkybox ); // Used with Fog()...sets fog density and whether the fog should be applied to the skybox
|
||||||
|
|
||||||
|
} triangleapi_t;
|
||||||
|
|
||||||
|
#endif // !TRIANGLEAPIH
|
41
metamod/extra/example/include/hlsdk/common/usercmd.h
Normal file
41
metamod/extra/example/include/hlsdk/common/usercmd.h
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#ifndef USERCMD_H
|
||||||
|
#define USERCMD_H
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct usercmd_s
|
||||||
|
{
|
||||||
|
short lerp_msec; // Interpolation time on client
|
||||||
|
byte msec; // Duration in ms of command
|
||||||
|
vec3_t viewangles; // Command view angles.
|
||||||
|
|
||||||
|
// intended velocities
|
||||||
|
float forwardmove; // Forward velocity.
|
||||||
|
float sidemove; // Sideways velocity.
|
||||||
|
float upmove; // Upward velocity.
|
||||||
|
byte lightlevel; // Light level at spot where we are standing.
|
||||||
|
unsigned short buttons; // Attack buttons
|
||||||
|
byte impulse; // Impulse command issued.
|
||||||
|
byte weaponselect; // Current weapon id
|
||||||
|
|
||||||
|
// Experimental player impact stuff.
|
||||||
|
int impact_index;
|
||||||
|
vec3_t impact_position;
|
||||||
|
} usercmd_t;
|
||||||
|
|
||||||
|
#endif // USERCMD_H
|
33
metamod/extra/example/include/hlsdk/common/vmodes.h
Normal file
33
metamod/extra/example/include/hlsdk/common/vmodes.h
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 2 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
typedef struct rect_s
|
||||||
|
{
|
||||||
|
int left, right, top, bottom;
|
||||||
|
} wrect_t;
|
53
metamod/extra/example/include/hlsdk/common/weaponinfo.h
Normal file
53
metamod/extra/example/include/hlsdk/common/weaponinfo.h
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
|
||||||
|
#ifndef WEAPONINFO_H
|
||||||
|
#define WEAPONINFO_H
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Info about weapons player might have in his/her possession
|
||||||
|
typedef struct weapon_data_s
|
||||||
|
{
|
||||||
|
int m_iId;
|
||||||
|
int m_iClip;
|
||||||
|
|
||||||
|
float m_flNextPrimaryAttack;
|
||||||
|
float m_flNextSecondaryAttack;
|
||||||
|
float m_flTimeWeaponIdle;
|
||||||
|
|
||||||
|
int m_fInReload;
|
||||||
|
int m_fInSpecialReload;
|
||||||
|
float m_flNextReload;
|
||||||
|
float m_flPumpTime;
|
||||||
|
float m_fReloadTime;
|
||||||
|
|
||||||
|
float m_fAimedDamage;
|
||||||
|
float m_fNextAimBonus;
|
||||||
|
int m_fInZoom;
|
||||||
|
int m_iWeaponState;
|
||||||
|
|
||||||
|
int iuser1;
|
||||||
|
int iuser2;
|
||||||
|
int iuser3;
|
||||||
|
int iuser4;
|
||||||
|
float fuser1;
|
||||||
|
float fuser2;
|
||||||
|
float fuser3;
|
||||||
|
float fuser4;
|
||||||
|
} weapon_data_t;
|
||||||
|
|
||||||
|
#endif // WEAPONINFO_H
|
7
metamod/extra/example/include/hlsdk/common/winsani_in.h
Normal file
7
metamod/extra/example/include/hlsdk/common/winsani_in.h
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#if _MSC_VER >= 1500 // MSVC++ 9.0 (Visual Studio 2008)
|
||||||
|
#pragma push_macro("ARRAYSIZE")
|
||||||
|
#ifdef ARRAYSIZE
|
||||||
|
#undef ARRAYSIZE
|
||||||
|
#endif
|
||||||
|
#define HSPRITE WINDOWS_HSPRITE
|
||||||
|
#endif
|
4
metamod/extra/example/include/hlsdk/common/winsani_out.h
Normal file
4
metamod/extra/example/include/hlsdk/common/winsani_out.h
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
#if _MSC_VER >= 1500 // MSVC++ 9.0 (Visual Studio 2008)
|
||||||
|
#undef HSPRITE
|
||||||
|
#pragma pop_macro("ARRAYSIZE")
|
||||||
|
#endif
|
109
metamod/extra/example/include/hlsdk/dlls/activity.h
Normal file
109
metamod/extra/example/include/hlsdk/dlls/activity.h
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
|
||||||
|
#ifndef ACTIVITY_H
|
||||||
|
#define ACTIVITY_H
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
ACT_RESET = 0, // Set m_Activity to this invalid value to force a reset to m_IdealActivity
|
||||||
|
ACT_IDLE = 1,
|
||||||
|
ACT_GUARD,
|
||||||
|
ACT_WALK,
|
||||||
|
ACT_RUN,
|
||||||
|
ACT_FLY, // Fly (and flap if appropriate)
|
||||||
|
ACT_SWIM,
|
||||||
|
ACT_HOP, // vertical jump
|
||||||
|
ACT_LEAP, // long forward jump
|
||||||
|
ACT_FALL,
|
||||||
|
ACT_LAND,
|
||||||
|
ACT_STRAFE_LEFT,
|
||||||
|
ACT_STRAFE_RIGHT,
|
||||||
|
ACT_ROLL_LEFT, // tuck and roll, left
|
||||||
|
ACT_ROLL_RIGHT, // tuck and roll, right
|
||||||
|
ACT_TURN_LEFT, // turn quickly left (stationary)
|
||||||
|
ACT_TURN_RIGHT, // turn quickly right (stationary)
|
||||||
|
ACT_CROUCH, // the act of crouching down from a standing position
|
||||||
|
ACT_CROUCHIDLE, // holding body in crouched position (loops)
|
||||||
|
ACT_STAND, // the act of standing from a crouched position
|
||||||
|
ACT_USE,
|
||||||
|
ACT_SIGNAL1,
|
||||||
|
ACT_SIGNAL2,
|
||||||
|
ACT_SIGNAL3,
|
||||||
|
ACT_TWITCH,
|
||||||
|
ACT_COWER,
|
||||||
|
ACT_SMALL_FLINCH,
|
||||||
|
ACT_BIG_FLINCH,
|
||||||
|
ACT_RANGE_ATTACK1,
|
||||||
|
ACT_RANGE_ATTACK2,
|
||||||
|
ACT_MELEE_ATTACK1,
|
||||||
|
ACT_MELEE_ATTACK2,
|
||||||
|
ACT_RELOAD,
|
||||||
|
ACT_ARM, // pull out gun, for instance
|
||||||
|
ACT_DISARM, // reholster gun
|
||||||
|
ACT_EAT, // monster chowing on a large food item (loop)
|
||||||
|
ACT_DIESIMPLE,
|
||||||
|
ACT_DIEBACKWARD,
|
||||||
|
ACT_DIEFORWARD,
|
||||||
|
ACT_DIEVIOLENT,
|
||||||
|
ACT_BARNACLE_HIT, // barnacle tongue hits a monster
|
||||||
|
ACT_BARNACLE_PULL, // barnacle is lifting the monster ( loop )
|
||||||
|
ACT_BARNACLE_CHOMP, // barnacle latches on to the monster
|
||||||
|
ACT_BARNACLE_CHEW, // barnacle is holding the monster in its mouth ( loop )
|
||||||
|
ACT_SLEEP,
|
||||||
|
ACT_INSPECT_FLOOR, // for active idles, look at something on or near the floor
|
||||||
|
ACT_INSPECT_WALL, // for active idles, look at something directly ahead of you ( doesn't HAVE to be a wall or on a wall )
|
||||||
|
ACT_IDLE_ANGRY, // alternate idle animation in which the monster is clearly agitated. (loop)
|
||||||
|
ACT_WALK_HURT, // limp (loop)
|
||||||
|
ACT_RUN_HURT, // limp (loop)
|
||||||
|
ACT_HOVER, // Idle while in flight
|
||||||
|
ACT_GLIDE, // Fly (don't flap)
|
||||||
|
ACT_FLY_LEFT, // Turn left in flight
|
||||||
|
ACT_FLY_RIGHT, // Turn right in flight
|
||||||
|
ACT_DETECT_SCENT, // this means the monster smells a scent carried by the air
|
||||||
|
ACT_SNIFF, // this is the act of actually sniffing an item in front of the monster
|
||||||
|
ACT_BITE, // some large monsters can eat small things in one bite. This plays one time, EAT loops.
|
||||||
|
ACT_THREAT_DISPLAY, // without attacking, monster demonstrates that it is angry. (Yell, stick out chest, etc )
|
||||||
|
ACT_FEAR_DISPLAY, // monster just saw something that it is afraid of
|
||||||
|
ACT_EXCITED, // for some reason, monster is excited. Sees something he really likes to eat, or whatever.
|
||||||
|
ACT_SPECIAL_ATTACK1, // very monster specific special attacks.
|
||||||
|
ACT_SPECIAL_ATTACK2,
|
||||||
|
ACT_COMBAT_IDLE, // agitated idle.
|
||||||
|
ACT_WALK_SCARED,
|
||||||
|
ACT_RUN_SCARED,
|
||||||
|
ACT_VICTORY_DANCE, // killed a player, do a victory dance.
|
||||||
|
ACT_DIE_HEADSHOT, // die, hit in head.
|
||||||
|
ACT_DIE_CHESTSHOT, // die, hit in chest
|
||||||
|
ACT_DIE_GUTSHOT, // die, hit in gut
|
||||||
|
ACT_DIE_BACKSHOT, // die, hit in back
|
||||||
|
ACT_FLINCH_HEAD,
|
||||||
|
ACT_FLINCH_CHEST,
|
||||||
|
ACT_FLINCH_STOMACH,
|
||||||
|
ACT_FLINCH_LEFTARM,
|
||||||
|
ACT_FLINCH_RIGHTARM,
|
||||||
|
ACT_FLINCH_LEFTLEG,
|
||||||
|
ACT_FLINCH_RIGHTLEG,
|
||||||
|
} Activity;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int type;
|
||||||
|
char *name;
|
||||||
|
} activity_map_t;
|
||||||
|
|
||||||
|
extern activity_map_t activity_map[];
|
||||||
|
|
||||||
|
|
||||||
|
#endif //ACTIVITY_H
|
97
metamod/extra/example/include/hlsdk/dlls/activitymap.h
Normal file
97
metamod/extra/example/include/hlsdk/dlls/activitymap.h
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
|
||||||
|
#define _A( a ) { a, #a }
|
||||||
|
|
||||||
|
activity_map_t activity_map[] =
|
||||||
|
{
|
||||||
|
_A( ACT_IDLE ),
|
||||||
|
_A( ACT_GUARD ),
|
||||||
|
_A( ACT_WALK ),
|
||||||
|
_A( ACT_RUN ),
|
||||||
|
_A( ACT_FLY ),
|
||||||
|
_A( ACT_SWIM ),
|
||||||
|
_A( ACT_HOP ),
|
||||||
|
_A( ACT_LEAP ),
|
||||||
|
_A( ACT_FALL ),
|
||||||
|
_A( ACT_LAND ),
|
||||||
|
_A( ACT_STRAFE_LEFT ),
|
||||||
|
_A( ACT_STRAFE_RIGHT ),
|
||||||
|
_A( ACT_ROLL_LEFT ),
|
||||||
|
_A( ACT_ROLL_RIGHT ),
|
||||||
|
_A( ACT_TURN_LEFT ),
|
||||||
|
_A( ACT_TURN_RIGHT ),
|
||||||
|
_A( ACT_CROUCH ),
|
||||||
|
_A( ACT_CROUCHIDLE ),
|
||||||
|
_A( ACT_STAND ),
|
||||||
|
_A( ACT_USE ),
|
||||||
|
_A( ACT_SIGNAL1 ),
|
||||||
|
_A( ACT_SIGNAL2 ),
|
||||||
|
_A( ACT_SIGNAL3 ),
|
||||||
|
_A( ACT_TWITCH ),
|
||||||
|
_A( ACT_COWER ),
|
||||||
|
_A( ACT_SMALL_FLINCH ),
|
||||||
|
_A( ACT_BIG_FLINCH ),
|
||||||
|
_A( ACT_RANGE_ATTACK1 ),
|
||||||
|
_A( ACT_RANGE_ATTACK2 ),
|
||||||
|
_A( ACT_MELEE_ATTACK1 ),
|
||||||
|
_A( ACT_MELEE_ATTACK2 ),
|
||||||
|
_A( ACT_RELOAD ),
|
||||||
|
_A( ACT_ARM ),
|
||||||
|
_A( ACT_DISARM ),
|
||||||
|
_A( ACT_EAT ),
|
||||||
|
_A( ACT_DIESIMPLE ),
|
||||||
|
_A( ACT_DIEBACKWARD ),
|
||||||
|
_A( ACT_DIEFORWARD ),
|
||||||
|
_A( ACT_DIEVIOLENT ),
|
||||||
|
_A( ACT_BARNACLE_HIT ),
|
||||||
|
_A( ACT_BARNACLE_PULL ),
|
||||||
|
_A( ACT_BARNACLE_CHOMP ),
|
||||||
|
_A( ACT_BARNACLE_CHEW ),
|
||||||
|
_A( ACT_SLEEP ),
|
||||||
|
_A( ACT_INSPECT_FLOOR ),
|
||||||
|
_A( ACT_INSPECT_WALL ),
|
||||||
|
_A( ACT_IDLE_ANGRY ),
|
||||||
|
_A( ACT_WALK_HURT ),
|
||||||
|
_A( ACT_RUN_HURT ),
|
||||||
|
_A( ACT_HOVER ),
|
||||||
|
_A( ACT_GLIDE ),
|
||||||
|
_A( ACT_FLY_LEFT ),
|
||||||
|
_A( ACT_FLY_RIGHT ),
|
||||||
|
_A( ACT_DETECT_SCENT ),
|
||||||
|
_A( ACT_SNIFF ),
|
||||||
|
_A( ACT_BITE ),
|
||||||
|
_A( ACT_THREAT_DISPLAY ),
|
||||||
|
_A( ACT_FEAR_DISPLAY ),
|
||||||
|
_A( ACT_EXCITED ),
|
||||||
|
_A( ACT_SPECIAL_ATTACK1 ),
|
||||||
|
_A( ACT_SPECIAL_ATTACK2 ),
|
||||||
|
_A( ACT_COMBAT_IDLE ),
|
||||||
|
_A( ACT_WALK_SCARED ),
|
||||||
|
_A( ACT_RUN_SCARED ),
|
||||||
|
_A( ACT_VICTORY_DANCE ),
|
||||||
|
_A( ACT_DIE_HEADSHOT ),
|
||||||
|
_A( ACT_DIE_CHESTSHOT ),
|
||||||
|
_A( ACT_DIE_GUTSHOT ),
|
||||||
|
_A( ACT_DIE_BACKSHOT ),
|
||||||
|
_A( ACT_FLINCH_HEAD ),
|
||||||
|
_A( ACT_FLINCH_CHEST ),
|
||||||
|
_A( ACT_FLINCH_STOMACH ),
|
||||||
|
_A( ACT_FLINCH_LEFTARM ),
|
||||||
|
_A( ACT_FLINCH_RIGHTARM ),
|
||||||
|
_A( ACT_FLINCH_LEFTLEG ),
|
||||||
|
_A( ACT_FLINCH_RIGHTLEG ),
|
||||||
|
0, NULL
|
||||||
|
};
|
47
metamod/extra/example/include/hlsdk/dlls/animation.h
Normal file
47
metamod/extra/example/include/hlsdk/dlls/animation.h
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#ifndef ANIMATION_H
|
||||||
|
#define ANIMATION_H
|
||||||
|
|
||||||
|
#define ACTIVITY_NOT_AVAILABLE -1
|
||||||
|
|
||||||
|
#ifndef MONSTEREVENT_H
|
||||||
|
#include "monsterevent.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern int IsSoundEvent( int eventNumber );
|
||||||
|
|
||||||
|
int LookupActivity( void *pmodel, entvars_t *pev, int activity );
|
||||||
|
int LookupActivityHeaviest( void *pmodel, entvars_t *pev, int activity );
|
||||||
|
int LookupSequence( void *pmodel, const char *label );
|
||||||
|
void GetSequenceInfo( void *pmodel, entvars_t *pev, float *pflFrameRate, float *pflGroundSpeed );
|
||||||
|
int GetSequenceFlags( void *pmodel, entvars_t *pev );
|
||||||
|
int LookupAnimationEvents( void *pmodel, entvars_t *pev, float flStart, float flEnd );
|
||||||
|
float SetController( void *pmodel, entvars_t *pev, int iController, float flValue );
|
||||||
|
float SetBlending( void *pmodel, entvars_t *pev, int iBlender, float flValue );
|
||||||
|
void GetEyePosition( void *pmodel, float *vecEyePosition );
|
||||||
|
void SequencePrecache( void *pmodel, const char *pSequenceName );
|
||||||
|
int FindTransition( void *pmodel, int iEndingAnim, int iGoalAnim, int *piDir );
|
||||||
|
void SetBodygroup( void *pmodel, entvars_t *pev, int iGroup, int iValue );
|
||||||
|
int GetBodygroup( void *pmodel, entvars_t *pev, int iGroup );
|
||||||
|
|
||||||
|
int GetAnimationEvent( void *pmodel, entvars_t *pev, MonsterEvent_t *pMonsterEvent, float flStart, float flEnd, int index );
|
||||||
|
int ExtractBbox( void *pmodel, int sequence, float *mins, float *maxs );
|
||||||
|
|
||||||
|
// From /engine/studio.h
|
||||||
|
#define STUDIO_LOOPING 0x0001
|
||||||
|
|
||||||
|
|
||||||
|
#endif //ANIMATION_H
|
94
metamod/extra/example/include/hlsdk/dlls/basemonster.h
Normal file
94
metamod/extra/example/include/hlsdk/dlls/basemonster.h
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#ifndef BASEMONSTER_H
|
||||||
|
#define BASEMONSTER_H
|
||||||
|
|
||||||
|
class CBaseMonster : public CBaseToggle
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Activity m_Activity;// what the monster is doing (animation)
|
||||||
|
Activity m_IdealActivity;// monster should switch to this activity
|
||||||
|
int m_LastHitGroup; // the last body region that took damage
|
||||||
|
int m_bitsDamageType; // what types of damage has monster (player) taken
|
||||||
|
BYTE m_rgbTimeBasedDamage[CDMG_TIMEBASED];
|
||||||
|
MONSTERSTATE m_MonsterState;// monster's current state
|
||||||
|
MONSTERSTATE m_IdealMonsterState;// monster should change to this state
|
||||||
|
int m_afConditions;
|
||||||
|
int m_afMemory;
|
||||||
|
float m_flNextAttack; // cannot attack again until this time
|
||||||
|
EHANDLE m_hEnemy; // the entity that the monster is fighting.
|
||||||
|
EHANDLE m_hTargetEnt; // the entity that the monster is trying to reach
|
||||||
|
float m_flFieldOfView;// width of monster's field of view ( dot product )
|
||||||
|
int m_bloodColor; // color of blood particless
|
||||||
|
Vector m_HackedGunPos; // HACK until we can query end of gun
|
||||||
|
Vector m_vecEnemyLKP;// last known position of enemy. (enemy's origin)
|
||||||
|
|
||||||
|
|
||||||
|
void KeyValue( KeyValueData *pkvd );
|
||||||
|
|
||||||
|
void MakeIdealYaw( Vector vecTarget );
|
||||||
|
virtual float ChangeYaw ( int speed );
|
||||||
|
virtual BOOL HasHumanGibs( void );
|
||||||
|
virtual BOOL HasAlienGibs( void );
|
||||||
|
virtual void FadeMonster( void ); // Called instead of GibMonster() when gibs are disabled
|
||||||
|
virtual void GibMonster( void );
|
||||||
|
virtual Activity GetDeathActivity ( void );
|
||||||
|
Activity GetSmallFlinchActivity( void );
|
||||||
|
virtual void BecomeDead( void );
|
||||||
|
BOOL ShouldGibMonster( int iGib );
|
||||||
|
void CallGibMonster( void );
|
||||||
|
virtual BOOL ShouldFadeOnDeath( void );
|
||||||
|
BOOL FCheckAITrigger( void );// checks and, if necessary, fires the monster's trigger target.
|
||||||
|
virtual int IRelationship ( CBaseEntity *pTarget );
|
||||||
|
virtual int TakeHealth( float flHealth, int bitsDamageType );
|
||||||
|
virtual int TakeDamage( entvars_t* pevInflictor, entvars_t* pevAttacker, float flDamage, int bitsDamageType);
|
||||||
|
int DeadTakeDamage( entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType );
|
||||||
|
float DamageForce( float damage );
|
||||||
|
virtual void Killed( entvars_t *pevAttacker, int iGib );
|
||||||
|
virtual void PainSound ( void ) { return; };
|
||||||
|
|
||||||
|
void RadiusDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int iClassIgnore, int bitsDamageType );
|
||||||
|
void RadiusDamage(Vector vecSrc, entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int iClassIgnore, int bitsDamageType );
|
||||||
|
|
||||||
|
inline void SetConditions( int iConditions ) { m_afConditions |= iConditions; }
|
||||||
|
inline void ClearConditions( int iConditions ) { m_afConditions &= ~iConditions; }
|
||||||
|
inline BOOL HasConditions( int iConditions ) { if ( m_afConditions & iConditions ) return TRUE; return FALSE; }
|
||||||
|
inline BOOL HasAllConditions( int iConditions ) { if ( (m_afConditions & iConditions) == iConditions ) return TRUE; return FALSE; }
|
||||||
|
|
||||||
|
inline void Remember( int iMemory ) { m_afMemory |= iMemory; }
|
||||||
|
inline void Forget( int iMemory ) { m_afMemory &= ~iMemory; }
|
||||||
|
inline BOOL HasMemory( int iMemory ) { if ( m_afMemory & iMemory ) return TRUE; return FALSE; }
|
||||||
|
inline BOOL HasAllMemories( int iMemory ) { if ( (m_afMemory & iMemory) == iMemory ) return TRUE; return FALSE; }
|
||||||
|
|
||||||
|
// This will stop animation until you call ResetSequenceInfo() at some point in the future
|
||||||
|
inline void StopAnimation( void ) { pev->framerate = 0; }
|
||||||
|
|
||||||
|
virtual void ReportAIState( void );
|
||||||
|
virtual void MonsterInitDead( void ); // Call after animation/pose is set up
|
||||||
|
void EXPORT CorpseFallThink( void );
|
||||||
|
|
||||||
|
virtual void Look ( int iDistance );// basic sight function for monsters
|
||||||
|
virtual CBaseEntity* BestVisibleEnemy ( void );// finds best visible enemy for attack
|
||||||
|
CBaseEntity *CheckTraceHullAttack( float flDist, int iDamage, int iDmgType );
|
||||||
|
virtual BOOL FInViewCone ( CBaseEntity *pEntity );// see if pEntity is in monster's view cone
|
||||||
|
virtual BOOL FInViewCone ( Vector *pOrigin );// see if given location is in monster's view cone
|
||||||
|
void TraceAttack( entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType);
|
||||||
|
void MakeDamageBloodDecal ( int cCount, float flNoise, TraceResult *ptr, const Vector &vecDir );
|
||||||
|
virtual BOOL IsAlive( void ) { return (pev->deadflag != DEAD_DEAD); }
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
802
metamod/extra/example/include/hlsdk/dlls/cbase.h
Normal file
802
metamod/extra/example/include/hlsdk/dlls/cbase.h
Normal file
@ -0,0 +1,802 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
/*
|
||||||
|
|
||||||
|
Class Hierachy
|
||||||
|
|
||||||
|
CBaseEntity
|
||||||
|
CBaseDelay
|
||||||
|
CBaseToggle
|
||||||
|
CBaseItem
|
||||||
|
CBaseMonster
|
||||||
|
CBaseCycler
|
||||||
|
CBasePlayer
|
||||||
|
CBaseGroup
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define MAX_PATH_SIZE 10 // max number of nodes available for a path.
|
||||||
|
|
||||||
|
// These are caps bits to indicate what an object's capabilities (currently used for save/restore and level transitions)
|
||||||
|
#define FCAP_CUSTOMSAVE 0x00000001
|
||||||
|
#define FCAP_ACROSS_TRANSITION 0x00000002 // should transfer between transitions
|
||||||
|
#define FCAP_MUST_SPAWN 0x00000004 // Spawn after restore
|
||||||
|
#define FCAP_DONT_SAVE 0x80000000 // Don't save this
|
||||||
|
#define FCAP_IMPULSE_USE 0x00000008 // can be used by the player
|
||||||
|
#define FCAP_CONTINUOUS_USE 0x00000010 // can be used by the player
|
||||||
|
#define FCAP_ONOFF_USE 0x00000020 // can be used by the player
|
||||||
|
#define FCAP_DIRECTIONAL_USE 0x00000040 // Player sends +/- 1 when using (currently only tracktrains)
|
||||||
|
#define FCAP_MASTER 0x00000080 // Can be used to "master" other entities (like multisource)
|
||||||
|
|
||||||
|
// UNDONE: This will ignore transition volumes (trigger_transition), but not the PVS!!!
|
||||||
|
#define FCAP_FORCE_TRANSITION 0x00000080 // ALWAYS goes across transitions
|
||||||
|
|
||||||
|
#include "archtypes.h" // DAL
|
||||||
|
#include "saverestore.h"
|
||||||
|
#include "schedule.h"
|
||||||
|
|
||||||
|
#ifndef MONSTEREVENT_H
|
||||||
|
#include "monsterevent.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// C functions for external declarations that call the appropriate C++ methods
|
||||||
|
|
||||||
|
#ifndef CBASE_DLLEXPORT
|
||||||
|
#ifdef _WIN32
|
||||||
|
#define CBASE_DLLEXPORT _declspec( dllexport )
|
||||||
|
#else
|
||||||
|
#define CBASE_DLLEXPORT __attribute__ ((visibility("default")))
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define EXPORT CBASE_DLLEXPORT
|
||||||
|
|
||||||
|
extern "C" CBASE_DLLEXPORT int GetEntityAPI( DLL_FUNCTIONS *pFunctionTable, int interfaceVersion );
|
||||||
|
extern "C" CBASE_DLLEXPORT int GetEntityAPI2( DLL_FUNCTIONS *pFunctionTable, int *interfaceVersion );
|
||||||
|
|
||||||
|
extern int DispatchSpawn( edict_t *pent );
|
||||||
|
extern void DispatchKeyValue( edict_t *pentKeyvalue, KeyValueData *pkvd );
|
||||||
|
extern void DispatchTouch( edict_t *pentTouched, edict_t *pentOther );
|
||||||
|
extern void DispatchUse( edict_t *pentUsed, edict_t *pentOther );
|
||||||
|
extern void DispatchThink( edict_t *pent );
|
||||||
|
extern void DispatchBlocked( edict_t *pentBlocked, edict_t *pentOther );
|
||||||
|
extern void DispatchSave( edict_t *pent, SAVERESTOREDATA *pSaveData );
|
||||||
|
extern int DispatchRestore( edict_t *pent, SAVERESTOREDATA *pSaveData, int globalEntity );
|
||||||
|
extern void DispatchObjectCollsionBox( edict_t *pent );
|
||||||
|
extern void SaveWriteFields( SAVERESTOREDATA *pSaveData, const char *pname, void *pBaseData, TYPEDESCRIPTION *pFields, int fieldCount );
|
||||||
|
extern void SaveReadFields( SAVERESTOREDATA *pSaveData, const char *pname, void *pBaseData, TYPEDESCRIPTION *pFields, int fieldCount );
|
||||||
|
extern void SaveGlobalState( SAVERESTOREDATA *pSaveData );
|
||||||
|
extern void RestoreGlobalState( SAVERESTOREDATA *pSaveData );
|
||||||
|
extern void ResetGlobalState( void );
|
||||||
|
|
||||||
|
typedef enum { USE_OFF = 0, USE_ON = 1, USE_SET = 2, USE_TOGGLE = 3 } USE_TYPE;
|
||||||
|
|
||||||
|
extern void FireTargets( const char *targetName, CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
|
||||||
|
|
||||||
|
typedef void (CBaseEntity::*BASEPTR)(void);
|
||||||
|
typedef void (CBaseEntity::*ENTITYFUNCPTR)(CBaseEntity *pOther );
|
||||||
|
typedef void (CBaseEntity::*USEPTR)( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
|
||||||
|
|
||||||
|
// For CLASSIFY
|
||||||
|
#define CLASS_NONE 0
|
||||||
|
#define CLASS_MACHINE 1
|
||||||
|
#define CLASS_PLAYER 2
|
||||||
|
#define CLASS_HUMAN_PASSIVE 3
|
||||||
|
#define CLASS_HUMAN_MILITARY 4
|
||||||
|
#define CLASS_ALIEN_MILITARY 5
|
||||||
|
#define CLASS_ALIEN_PASSIVE 6
|
||||||
|
#define CLASS_ALIEN_MONSTER 7
|
||||||
|
#define CLASS_ALIEN_PREY 8
|
||||||
|
#define CLASS_ALIEN_PREDATOR 9
|
||||||
|
#define CLASS_INSECT 10
|
||||||
|
#define CLASS_PLAYER_ALLY 11
|
||||||
|
#define CLASS_PLAYER_BIOWEAPON 12 // hornets and snarks.launched by players
|
||||||
|
#define CLASS_ALIEN_BIOWEAPON 13 // hornets and snarks.launched by the alien menace
|
||||||
|
#define CLASS_BARNACLE 99 // special because no one pays attention to it, and it eats a wide cross-section of creatures.
|
||||||
|
|
||||||
|
class CBaseEntity;
|
||||||
|
class CBaseMonster;
|
||||||
|
class CBasePlayerItem;
|
||||||
|
class CSquadMonster;
|
||||||
|
|
||||||
|
|
||||||
|
#define SF_NORESPAWN ( 1 << 30 )// !!!set this bit on guns and stuff that should never respawn.
|
||||||
|
|
||||||
|
//
|
||||||
|
// EHANDLE. Safe way to point to CBaseEntities who may die between frames
|
||||||
|
//
|
||||||
|
class EHANDLE
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
edict_t *m_pent;
|
||||||
|
int m_serialnumber;
|
||||||
|
public:
|
||||||
|
edict_t *Get( void );
|
||||||
|
edict_t *Set( edict_t *pent );
|
||||||
|
|
||||||
|
operator int ();
|
||||||
|
|
||||||
|
operator CBaseEntity *();
|
||||||
|
|
||||||
|
CBaseEntity * operator = (CBaseEntity *pEntity);
|
||||||
|
CBaseEntity * operator ->();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Base Entity. All entity types derive from this
|
||||||
|
//
|
||||||
|
class CBaseEntity
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// Constructor. Set engine to use C/C++ callback functions
|
||||||
|
// pointers to engine data
|
||||||
|
entvars_t *pev; // Don't need to save/restore this pointer, the engine resets it
|
||||||
|
|
||||||
|
// path corners
|
||||||
|
CBaseEntity *m_pGoalEnt;// path corner we are heading towards
|
||||||
|
CBaseEntity *m_pLink;// used for temporary link-list operations.
|
||||||
|
|
||||||
|
// initialization functions
|
||||||
|
virtual void Spawn( void ) { return; }
|
||||||
|
virtual void Precache( void ) { return; }
|
||||||
|
virtual void KeyValue( KeyValueData* pkvd) { pkvd->fHandled = FALSE; }
|
||||||
|
virtual int Save( CSave &save );
|
||||||
|
virtual int Restore( CRestore &restore );
|
||||||
|
virtual int ObjectCaps( void ) { return FCAP_ACROSS_TRANSITION; }
|
||||||
|
virtual void Activate( void ) {}
|
||||||
|
|
||||||
|
// Setup the object->object collision box (pev->mins / pev->maxs is the object->world collision box)
|
||||||
|
virtual void SetObjectCollisionBox( void );
|
||||||
|
|
||||||
|
// Classify - returns the type of group (i.e, "houndeye", or "human military" so that monsters with different classnames
|
||||||
|
// still realize that they are teammates. (overridden for monsters that form groups)
|
||||||
|
virtual int Classify ( void ) { return CLASS_NONE; };
|
||||||
|
virtual void DeathNotice ( entvars_t *pevChild ) {}// monster maker children use this to tell the monster maker that they have died.
|
||||||
|
|
||||||
|
|
||||||
|
static TYPEDESCRIPTION m_SaveData[];
|
||||||
|
|
||||||
|
virtual void TraceAttack( entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType);
|
||||||
|
virtual int TakeDamage( entvars_t* pevInflictor, entvars_t* pevAttacker, float flDamage, int bitsDamageType );
|
||||||
|
virtual int TakeHealth( float flHealth, int bitsDamageType );
|
||||||
|
virtual void Killed( entvars_t *pevAttacker, int iGib );
|
||||||
|
virtual int BloodColor( void ) { return DONT_BLEED; }
|
||||||
|
virtual void TraceBleed( float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType );
|
||||||
|
virtual BOOL IsTriggered( CBaseEntity *pActivator ) {return TRUE;}
|
||||||
|
virtual CBaseMonster *MyMonsterPointer( void ) { return NULL;}
|
||||||
|
virtual CSquadMonster *MySquadMonsterPointer( void ) { return NULL;}
|
||||||
|
virtual int GetToggleState( void ) { return TS_AT_TOP; }
|
||||||
|
virtual void AddPoints( int score, BOOL bAllowNegativeScore ) {}
|
||||||
|
virtual void AddPointsToTeam( int score, BOOL bAllowNegativeScore ) {}
|
||||||
|
virtual BOOL AddPlayerItem( CBasePlayerItem *pItem ) { return 0; }
|
||||||
|
virtual BOOL RemovePlayerItem( CBasePlayerItem *pItem ) { return 0; }
|
||||||
|
virtual int GiveAmmo( int iAmount, char *szName, int iMax ) { return -1; };
|
||||||
|
virtual float GetDelay( void ) { return 0; }
|
||||||
|
virtual int IsMoving( void ) { return pev->velocity != g_vecZero; }
|
||||||
|
virtual void OverrideReset( void ) {}
|
||||||
|
virtual int DamageDecal( int bitsDamageType );
|
||||||
|
// This is ONLY used by the node graph to test movement through a door
|
||||||
|
virtual void SetToggleState( int state ) {}
|
||||||
|
virtual void StartSneaking( void ) {}
|
||||||
|
virtual void StopSneaking( void ) {}
|
||||||
|
virtual BOOL OnControls( entvars_t *pev ) { return FALSE; }
|
||||||
|
virtual BOOL IsSneaking( void ) { return FALSE; }
|
||||||
|
virtual BOOL IsAlive( void ) { return (pev->deadflag == DEAD_NO) && pev->health > 0; }
|
||||||
|
virtual BOOL IsBSPModel( void ) { return pev->solid == SOLID_BSP || pev->movetype == MOVETYPE_PUSHSTEP; }
|
||||||
|
virtual BOOL ReflectGauss( void ) { return ( IsBSPModel() && !pev->takedamage ); }
|
||||||
|
virtual BOOL HasTarget( string_t targetname ) { return FStrEq(STRING(targetname), STRING(pev->targetname) ); }
|
||||||
|
virtual BOOL IsInWorld( void );
|
||||||
|
virtual BOOL IsPlayer( void ) { return FALSE; }
|
||||||
|
virtual BOOL IsNetClient( void ) { return FALSE; }
|
||||||
|
virtual const char *TeamID( void ) { return ""; }
|
||||||
|
|
||||||
|
|
||||||
|
// virtual void SetActivator( CBaseEntity *pActivator ) {}
|
||||||
|
virtual CBaseEntity *GetNextTarget( void );
|
||||||
|
|
||||||
|
// fundamental callbacks
|
||||||
|
void (CBaseEntity ::*m_pfnThink)(void);
|
||||||
|
void (CBaseEntity ::*m_pfnTouch)( CBaseEntity *pOther );
|
||||||
|
void (CBaseEntity ::*m_pfnUse)( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
|
||||||
|
void (CBaseEntity ::*m_pfnBlocked)( CBaseEntity *pOther );
|
||||||
|
|
||||||
|
virtual void Think( void ) { if (m_pfnThink) (this->*m_pfnThink)(); };
|
||||||
|
virtual void Touch( CBaseEntity *pOther ) { if (m_pfnTouch) (this->*m_pfnTouch)( pOther ); };
|
||||||
|
virtual void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value )
|
||||||
|
{
|
||||||
|
if (m_pfnUse)
|
||||||
|
(this->*m_pfnUse)( pActivator, pCaller, useType, value );
|
||||||
|
}
|
||||||
|
virtual void Blocked( CBaseEntity *pOther ) { if (m_pfnBlocked) (this->*m_pfnBlocked)( pOther ); };
|
||||||
|
|
||||||
|
// allow engine to allocate instance data
|
||||||
|
void *operator new( size_t stAllocateBlock, entvars_t *pev )
|
||||||
|
{
|
||||||
|
return (void *)ALLOC_PRIVATE(ENT(pev), stAllocateBlock);
|
||||||
|
};
|
||||||
|
|
||||||
|
// don't use this.
|
||||||
|
#if _MSC_VER >= 1200 // only build this code if MSVC++ 6.0 or higher
|
||||||
|
void operator delete(void *pMem, entvars_t *pev)
|
||||||
|
{
|
||||||
|
pev->flags |= FL_KILLME;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void UpdateOnRemove( void );
|
||||||
|
|
||||||
|
// common member functions
|
||||||
|
void EXPORT SUB_Remove( void );
|
||||||
|
void EXPORT SUB_DoNothing( void );
|
||||||
|
void EXPORT SUB_StartFadeOut ( void );
|
||||||
|
void EXPORT SUB_FadeOut ( void );
|
||||||
|
void EXPORT SUB_CallUseToggle( void ) { this->Use( this, this, USE_TOGGLE, 0 ); }
|
||||||
|
int ShouldToggle( USE_TYPE useType, BOOL currentState );
|
||||||
|
void FireBullets( ULONG cShots, Vector vecSrc, Vector vecDirShooting, Vector vecSpread, float flDistance, int iBulletType, int iTracerFreq = 4, int iDamage = 0, entvars_t *pevAttacker = NULL );
|
||||||
|
Vector FireBulletsPlayer( ULONG cShots, Vector vecSrc, Vector vecDirShooting, Vector vecSpread, float flDistance, int iBulletType, int iTracerFreq = 4, int iDamage = 0, entvars_t *pevAttacker = NULL, int shared_rand = 0 );
|
||||||
|
|
||||||
|
virtual CBaseEntity *Respawn( void ) { return NULL; }
|
||||||
|
|
||||||
|
void SUB_UseTargets( CBaseEntity *pActivator, USE_TYPE useType, float value );
|
||||||
|
// Do the bounding boxes of these two intersect?
|
||||||
|
int Intersects( CBaseEntity *pOther );
|
||||||
|
void MakeDormant( void );
|
||||||
|
int IsDormant( void );
|
||||||
|
BOOL IsLockedByMaster( void ) { return FALSE; }
|
||||||
|
|
||||||
|
static CBaseEntity *Instance( edict_t *pent )
|
||||||
|
{
|
||||||
|
if ( !pent )
|
||||||
|
pent = ENT(0);
|
||||||
|
CBaseEntity *pEnt = (CBaseEntity *)GET_PRIVATE(pent);
|
||||||
|
return pEnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
static CBaseEntity *Instance( entvars_t *pev ) { return Instance( ENT( pev ) ); }
|
||||||
|
static CBaseEntity *Instance( int eoffset) { return Instance( ENT( eoffset) ); }
|
||||||
|
|
||||||
|
CBaseMonster *GetMonsterPointer( entvars_t *pevMonster )
|
||||||
|
{
|
||||||
|
CBaseEntity *pEntity = Instance( pevMonster );
|
||||||
|
if ( pEntity )
|
||||||
|
return pEntity->MyMonsterPointer();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
CBaseMonster *GetMonsterPointer( edict_t *pentMonster )
|
||||||
|
{
|
||||||
|
CBaseEntity *pEntity = Instance( pentMonster );
|
||||||
|
if ( pEntity )
|
||||||
|
return pEntity->MyMonsterPointer();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Ugly code to lookup all functions to make sure they are exported when set.
|
||||||
|
#ifdef _DEBUG
|
||||||
|
void FunctionCheck( void *pFunction, char *name )
|
||||||
|
{
|
||||||
|
if (pFunction && !NAME_FOR_FUNCTION((uint32)pFunction) )
|
||||||
|
ALERT( at_error, "No EXPORT: %s:%s (%08lx)\n", STRING(pev->classname), name, (uint32)pFunction );
|
||||||
|
}
|
||||||
|
|
||||||
|
BASEPTR ThinkSet( BASEPTR func, char *name )
|
||||||
|
{
|
||||||
|
m_pfnThink = func;
|
||||||
|
FunctionCheck( (void *)*((int *)((char *)this + ( offsetof(CBaseEntity,m_pfnThink)))), name );
|
||||||
|
return func;
|
||||||
|
}
|
||||||
|
ENTITYFUNCPTR TouchSet( ENTITYFUNCPTR func, char *name )
|
||||||
|
{
|
||||||
|
m_pfnTouch = func;
|
||||||
|
FunctionCheck( (void *)*((int *)((char *)this + ( offsetof(CBaseEntity,m_pfnTouch)))), name );
|
||||||
|
return func;
|
||||||
|
}
|
||||||
|
USEPTR UseSet( USEPTR func, char *name )
|
||||||
|
{
|
||||||
|
m_pfnUse = func;
|
||||||
|
FunctionCheck( (void *)*((int *)((char *)this + ( offsetof(CBaseEntity,m_pfnUse)))), name );
|
||||||
|
return func;
|
||||||
|
}
|
||||||
|
ENTITYFUNCPTR BlockedSet( ENTITYFUNCPTR func, char *name )
|
||||||
|
{
|
||||||
|
m_pfnBlocked = func;
|
||||||
|
FunctionCheck( (void *)*((int *)((char *)this + ( offsetof(CBaseEntity,m_pfnBlocked)))), name );
|
||||||
|
return func;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// virtual functions used by a few classes
|
||||||
|
|
||||||
|
// used by monsters that are created by the MonsterMaker
|
||||||
|
virtual void UpdateOwner( void ) { return; };
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
static CBaseEntity *Create( char *szName, const Vector &vecOrigin, const Vector &vecAngles, edict_t *pentOwner = NULL );
|
||||||
|
|
||||||
|
virtual BOOL FBecomeProne( void ) {return FALSE;};
|
||||||
|
edict_t *edict() { return ENT( pev ); };
|
||||||
|
EOFFSET eoffset( ) { return OFFSET( pev ); };
|
||||||
|
int entindex( ) { return ENTINDEX( edict() ); };
|
||||||
|
|
||||||
|
virtual Vector Center( ) { return (pev->absmax + pev->absmin) * 0.5; }; // center point of entity
|
||||||
|
virtual Vector EyePosition( ) { return pev->origin + pev->view_ofs; }; // position of eyes
|
||||||
|
virtual Vector EarPosition( ) { return pev->origin + pev->view_ofs; }; // position of ears
|
||||||
|
virtual Vector BodyTarget( const Vector &posSrc ) { return Center( ); }; // position to shoot at
|
||||||
|
|
||||||
|
virtual int Illumination( ) { return GETENTITYILLUM( ENT( pev ) ); };
|
||||||
|
|
||||||
|
virtual BOOL FVisible ( CBaseEntity *pEntity );
|
||||||
|
virtual BOOL FVisible ( const Vector &vecOrigin );
|
||||||
|
|
||||||
|
//We use this variables to store each ammo count.
|
||||||
|
int ammo_9mm;
|
||||||
|
int ammo_357;
|
||||||
|
int ammo_bolts;
|
||||||
|
int ammo_buckshot;
|
||||||
|
int ammo_rockets;
|
||||||
|
int ammo_uranium;
|
||||||
|
int ammo_hornets;
|
||||||
|
int ammo_argrens;
|
||||||
|
//Special stuff for grenades and satchels.
|
||||||
|
float m_flStartThrow;
|
||||||
|
float m_flReleaseThrow;
|
||||||
|
int m_chargeReady;
|
||||||
|
int m_fInAttack;
|
||||||
|
|
||||||
|
enum EGON_FIRESTATE { FIRE_OFF, FIRE_CHARGE };
|
||||||
|
int m_fireState;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Ugly technique to override base member functions
|
||||||
|
// Normally it's illegal to cast a pointer to a member function of a derived class to a pointer to a
|
||||||
|
// member function of a base class. static_cast is a sleezy way around that problem.
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
|
||||||
|
#define SetThink( a ) ThinkSet( static_cast <void (CBaseEntity::*)(void)> (a), #a )
|
||||||
|
#define SetTouch( a ) TouchSet( static_cast <void (CBaseEntity::*)(CBaseEntity *)> (a), #a )
|
||||||
|
#define SetUse( a ) UseSet( static_cast <void (CBaseEntity::*)( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value )> (a), #a )
|
||||||
|
#define SetBlocked( a ) BlockedSet( static_cast <void (CBaseEntity::*)(CBaseEntity *)> (a), #a )
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define SetThink( a ) m_pfnThink = static_cast <void (CBaseEntity::*)(void)> (a)
|
||||||
|
#define SetTouch( a ) m_pfnTouch = static_cast <void (CBaseEntity::*)(CBaseEntity *)> (a)
|
||||||
|
#define SetUse( a ) m_pfnUse = static_cast <void (CBaseEntity::*)( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value )> (a)
|
||||||
|
#define SetBlocked( a ) m_pfnBlocked = static_cast <void (CBaseEntity::*)(CBaseEntity *)> (a)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
class CPointEntity : public CBaseEntity
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void Spawn( void );
|
||||||
|
virtual int ObjectCaps( void ) { return CBaseEntity :: ObjectCaps() & ~FCAP_ACROSS_TRANSITION; }
|
||||||
|
private:
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct locksounds // sounds that doors and buttons make when locked/unlocked
|
||||||
|
{
|
||||||
|
string_t sLockedSound; // sound a door makes when it's locked
|
||||||
|
string_t sLockedSentence; // sentence group played when door is locked
|
||||||
|
string_t sUnlockedSound; // sound a door makes when it's unlocked
|
||||||
|
string_t sUnlockedSentence; // sentence group played when door is unlocked
|
||||||
|
|
||||||
|
int iLockedSentence; // which sentence in sentence group to play next
|
||||||
|
int iUnlockedSentence; // which sentence in sentence group to play next
|
||||||
|
|
||||||
|
float flwaitSound; // time delay between playing consecutive 'locked/unlocked' sounds
|
||||||
|
float flwaitSentence; // time delay between playing consecutive sentences
|
||||||
|
BYTE bEOFLocked; // true if hit end of list of locked sentences
|
||||||
|
BYTE bEOFUnlocked; // true if hit end of list of unlocked sentences
|
||||||
|
} locksound_t;
|
||||||
|
|
||||||
|
void PlayLockSounds(entvars_t *pev, locksound_t *pls, int flocked, int fbutton);
|
||||||
|
|
||||||
|
//
|
||||||
|
// MultiSouce
|
||||||
|
//
|
||||||
|
|
||||||
|
#define MAX_MULTI_TARGETS 16 // maximum number of targets a single multi_manager entity may be assigned.
|
||||||
|
#define MS_MAX_TARGETS 32
|
||||||
|
|
||||||
|
class CMultiSource : public CPointEntity
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void Spawn( );
|
||||||
|
void KeyValue( KeyValueData *pkvd );
|
||||||
|
void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
|
||||||
|
int ObjectCaps( void ) { return (CPointEntity::ObjectCaps() | FCAP_MASTER); }
|
||||||
|
BOOL IsTriggered( CBaseEntity *pActivator );
|
||||||
|
void EXPORT Register( void );
|
||||||
|
virtual int Save( CSave &save );
|
||||||
|
virtual int Restore( CRestore &restore );
|
||||||
|
|
||||||
|
static TYPEDESCRIPTION m_SaveData[];
|
||||||
|
|
||||||
|
EHANDLE m_rgEntities[MS_MAX_TARGETS];
|
||||||
|
int m_rgTriggered[MS_MAX_TARGETS];
|
||||||
|
|
||||||
|
int m_iTotal;
|
||||||
|
string_t m_globalstate;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// generic Delay entity.
|
||||||
|
//
|
||||||
|
class CBaseDelay : public CBaseEntity
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
float m_flDelay;
|
||||||
|
int m_iszKillTarget;
|
||||||
|
|
||||||
|
virtual void KeyValue( KeyValueData* pkvd);
|
||||||
|
virtual int Save( CSave &save );
|
||||||
|
virtual int Restore( CRestore &restore );
|
||||||
|
|
||||||
|
static TYPEDESCRIPTION m_SaveData[];
|
||||||
|
// common member functions
|
||||||
|
void SUB_UseTargets( CBaseEntity *pActivator, USE_TYPE useType, float value );
|
||||||
|
void EXPORT DelayThink( void );
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class CBaseAnimating : public CBaseDelay
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual int Save( CSave &save );
|
||||||
|
virtual int Restore( CRestore &restore );
|
||||||
|
|
||||||
|
static TYPEDESCRIPTION m_SaveData[];
|
||||||
|
|
||||||
|
// Basic Monster Animation functions
|
||||||
|
float StudioFrameAdvance( float flInterval = 0.0 ); // accumulate animation frame time from last time called until now
|
||||||
|
int GetSequenceFlags( void );
|
||||||
|
int LookupActivity ( int activity );
|
||||||
|
int LookupActivityHeaviest ( int activity );
|
||||||
|
int LookupSequence ( const char *label );
|
||||||
|
void ResetSequenceInfo ( );
|
||||||
|
void DispatchAnimEvents ( float flFutureInterval = 0.1 ); // Handle events that have happend since last time called up until X seconds into the future
|
||||||
|
virtual void HandleAnimEvent( MonsterEvent_t *pEvent ) { return; };
|
||||||
|
float SetBoneController ( int iController, float flValue );
|
||||||
|
void InitBoneControllers ( void );
|
||||||
|
float SetBlending ( int iBlender, float flValue );
|
||||||
|
void GetBonePosition ( int iBone, Vector &origin, Vector &angles );
|
||||||
|
void GetAutomovement( Vector &origin, Vector &angles, float flInterval = 0.1 );
|
||||||
|
int FindTransition( int iEndingSequence, int iGoalSequence, int *piDir );
|
||||||
|
void GetAttachment ( int iAttachment, Vector &origin, Vector &angles );
|
||||||
|
void SetBodygroup( int iGroup, int iValue );
|
||||||
|
int GetBodygroup( int iGroup );
|
||||||
|
int ExtractBbox( int sequence, float *mins, float *maxs );
|
||||||
|
void SetSequenceBox( void );
|
||||||
|
|
||||||
|
// animation needs
|
||||||
|
float m_flFrameRate; // computed FPS for current sequence
|
||||||
|
float m_flGroundSpeed; // computed linear movement rate for current sequence
|
||||||
|
float m_flLastEventCheck; // last time the event list was checked
|
||||||
|
BOOL m_fSequenceFinished;// flag set when StudioAdvanceFrame moves across a frame boundry
|
||||||
|
BOOL m_fSequenceLoops; // true if the sequence loops
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// generic Toggle entity.
|
||||||
|
//
|
||||||
|
#define SF_ITEM_USE_ONLY 256 // ITEM_USE_ONLY = BUTTON_USE_ONLY = DOOR_USE_ONLY!!!
|
||||||
|
|
||||||
|
class CBaseToggle : public CBaseAnimating
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void KeyValue( KeyValueData *pkvd );
|
||||||
|
|
||||||
|
TOGGLE_STATE m_toggle_state;
|
||||||
|
float m_flActivateFinished;//like attack_finished, but for doors
|
||||||
|
float m_flMoveDistance;// how far a door should slide or rotate
|
||||||
|
float m_flWait;
|
||||||
|
float m_flLip;
|
||||||
|
float m_flTWidth;// for plats
|
||||||
|
float m_flTLength;// for plats
|
||||||
|
|
||||||
|
Vector m_vecPosition1;
|
||||||
|
Vector m_vecPosition2;
|
||||||
|
Vector m_vecAngle1;
|
||||||
|
Vector m_vecAngle2;
|
||||||
|
|
||||||
|
int m_cTriggersLeft; // trigger_counter only, # of activations remaining
|
||||||
|
float m_flHeight;
|
||||||
|
EHANDLE m_hActivator;
|
||||||
|
void (CBaseToggle::*m_pfnCallWhenMoveDone)(void);
|
||||||
|
Vector m_vecFinalDest;
|
||||||
|
Vector m_vecFinalAngle;
|
||||||
|
|
||||||
|
int m_bitsDamageInflict; // DMG_ damage type that the door or tigger does
|
||||||
|
|
||||||
|
virtual int Save( CSave &save );
|
||||||
|
virtual int Restore( CRestore &restore );
|
||||||
|
|
||||||
|
static TYPEDESCRIPTION m_SaveData[];
|
||||||
|
|
||||||
|
virtual int GetToggleState( void ) { return m_toggle_state; }
|
||||||
|
virtual float GetDelay( void ) { return m_flWait; }
|
||||||
|
|
||||||
|
// common member functions
|
||||||
|
void LinearMove( Vector vecDest, float flSpeed );
|
||||||
|
void EXPORT LinearMoveDone( void );
|
||||||
|
void AngularMove( Vector vecDestAngle, float flSpeed );
|
||||||
|
void EXPORT AngularMoveDone( void );
|
||||||
|
BOOL IsLockedByMaster( void );
|
||||||
|
|
||||||
|
static float AxisValue( int flags, const Vector &angles );
|
||||||
|
static void AxisDir( entvars_t *pev );
|
||||||
|
static float AxisDelta( int flags, const Vector &angle1, const Vector &angle2 );
|
||||||
|
|
||||||
|
string_t m_sMaster; // If this button has a master switch, this is the targetname.
|
||||||
|
// A master switch must be of the multisource type. If all
|
||||||
|
// of the switches in the multisource have been triggered, then
|
||||||
|
// the button will be allowed to operate. Otherwise, it will be
|
||||||
|
// deactivated.
|
||||||
|
};
|
||||||
|
#define SetMoveDone( a ) m_pfnCallWhenMoveDone = static_cast <void (CBaseToggle::*)(void)> (a)
|
||||||
|
|
||||||
|
|
||||||
|
// people gib if their health is <= this at the time of death
|
||||||
|
#define GIB_HEALTH_VALUE -30
|
||||||
|
|
||||||
|
#define ROUTE_SIZE 8 // how many waypoints a monster can store at one time
|
||||||
|
#define MAX_OLD_ENEMIES 4 // how many old enemies to remember
|
||||||
|
|
||||||
|
#define bits_CAP_DUCK ( 1 << 0 )// crouch
|
||||||
|
#define bits_CAP_JUMP ( 1 << 1 )// jump/leap
|
||||||
|
#define bits_CAP_STRAFE ( 1 << 2 )// strafe ( walk/run sideways)
|
||||||
|
#define bits_CAP_SQUAD ( 1 << 3 )// can form squads
|
||||||
|
#define bits_CAP_SWIM ( 1 << 4 )// proficiently navigate in water
|
||||||
|
#define bits_CAP_CLIMB ( 1 << 5 )// climb ladders/ropes
|
||||||
|
#define bits_CAP_USE ( 1 << 6 )// open doors/push buttons/pull levers
|
||||||
|
#define bits_CAP_HEAR ( 1 << 7 )// can hear forced sounds
|
||||||
|
#define bits_CAP_AUTO_DOORS ( 1 << 8 )// can trigger auto doors
|
||||||
|
#define bits_CAP_OPEN_DOORS ( 1 << 9 )// can open manual doors
|
||||||
|
#define bits_CAP_TURN_HEAD ( 1 << 10)// can turn head, always bone controller 0
|
||||||
|
|
||||||
|
#define bits_CAP_RANGE_ATTACK1 ( 1 << 11)// can do a range attack 1
|
||||||
|
#define bits_CAP_RANGE_ATTACK2 ( 1 << 12)// can do a range attack 2
|
||||||
|
#define bits_CAP_MELEE_ATTACK1 ( 1 << 13)// can do a melee attack 1
|
||||||
|
#define bits_CAP_MELEE_ATTACK2 ( 1 << 14)// can do a melee attack 2
|
||||||
|
|
||||||
|
#define bits_CAP_FLY ( 1 << 15)// can fly, move all around
|
||||||
|
|
||||||
|
#define bits_CAP_DOORS_GROUP (bits_CAP_USE | bits_CAP_AUTO_DOORS | bits_CAP_OPEN_DOORS)
|
||||||
|
|
||||||
|
// used by suit voice to indicate damage sustained and repaired type to player
|
||||||
|
|
||||||
|
// instant damage
|
||||||
|
|
||||||
|
#define DMG_GENERIC 0 // generic damage was done
|
||||||
|
#define DMG_CRUSH (1 << 0) // crushed by falling or moving object
|
||||||
|
#define DMG_BULLET (1 << 1) // shot
|
||||||
|
#define DMG_SLASH (1 << 2) // cut, clawed, stabbed
|
||||||
|
#define DMG_BURN (1 << 3) // heat burned
|
||||||
|
#define DMG_FREEZE (1 << 4) // frozen
|
||||||
|
#define DMG_FALL (1 << 5) // fell too far
|
||||||
|
#define DMG_BLAST (1 << 6) // explosive blast damage
|
||||||
|
#define DMG_CLUB (1 << 7) // crowbar, punch, headbutt
|
||||||
|
#define DMG_SHOCK (1 << 8) // electric shock
|
||||||
|
#define DMG_SONIC (1 << 9) // sound pulse shockwave
|
||||||
|
#define DMG_ENERGYBEAM (1 << 10) // laser or other high energy beam
|
||||||
|
#define DMG_NEVERGIB (1 << 12) // with this bit OR'd in, no damage type will be able to gib victims upon death
|
||||||
|
#define DMG_ALWAYSGIB (1 << 13) // with this bit OR'd in, any damage type can be made to gib victims upon death.
|
||||||
|
#define DMG_DROWN (1 << 14) // Drowning
|
||||||
|
// time-based damage
|
||||||
|
#define DMG_TIMEBASED (~(0x3fff)) // mask for time-based damage
|
||||||
|
|
||||||
|
#define DMG_PARALYZE (1 << 15) // slows affected creature down
|
||||||
|
#define DMG_NERVEGAS (1 << 16) // nerve toxins, very bad
|
||||||
|
#define DMG_POISON (1 << 17) // blood poisioning
|
||||||
|
#define DMG_RADIATION (1 << 18) // radiation exposure
|
||||||
|
#define DMG_DROWNRECOVER (1 << 19) // drowning recovery
|
||||||
|
#define DMG_ACID (1 << 20) // toxic chemicals or acid burns
|
||||||
|
#define DMG_SLOWBURN (1 << 21) // in an oven
|
||||||
|
#define DMG_SLOWFREEZE (1 << 22) // in a subzero freezer
|
||||||
|
#define DMG_MORTAR (1 << 23) // Hit by air raid (done to distinguish grenade from mortar)
|
||||||
|
|
||||||
|
// these are the damage types that are allowed to gib corpses
|
||||||
|
#define DMG_GIB_CORPSE ( DMG_CRUSH | DMG_FALL | DMG_BLAST | DMG_SONIC | DMG_CLUB )
|
||||||
|
|
||||||
|
// these are the damage types that have client hud art
|
||||||
|
#define DMG_SHOWNHUD (DMG_POISON | DMG_ACID | DMG_FREEZE | DMG_SLOWFREEZE | DMG_DROWN | DMG_BURN | DMG_SLOWBURN | DMG_NERVEGAS | DMG_RADIATION | DMG_SHOCK)
|
||||||
|
|
||||||
|
// NOTE: tweak these values based on gameplay feedback:
|
||||||
|
|
||||||
|
#define PARALYZE_DURATION 2 // number of 2 second intervals to take damage
|
||||||
|
#define PARALYZE_DAMAGE 1.0 // damage to take each 2 second interval
|
||||||
|
|
||||||
|
#define NERVEGAS_DURATION 2
|
||||||
|
#define NERVEGAS_DAMAGE 5.0
|
||||||
|
|
||||||
|
#define POISON_DURATION 5
|
||||||
|
#define POISON_DAMAGE 2.0
|
||||||
|
|
||||||
|
#define RADIATION_DURATION 2
|
||||||
|
#define RADIATION_DAMAGE 1.0
|
||||||
|
|
||||||
|
#define ACID_DURATION 2
|
||||||
|
#define ACID_DAMAGE 5.0
|
||||||
|
|
||||||
|
#define SLOWBURN_DURATION 2
|
||||||
|
#define SLOWBURN_DAMAGE 1.0
|
||||||
|
|
||||||
|
#define SLOWFREEZE_DURATION 2
|
||||||
|
#define SLOWFREEZE_DAMAGE 1.0
|
||||||
|
|
||||||
|
|
||||||
|
#define itbd_Paralyze 0
|
||||||
|
#define itbd_NerveGas 1
|
||||||
|
#define itbd_Poison 2
|
||||||
|
#define itbd_Radiation 3
|
||||||
|
#define itbd_DrownRecover 4
|
||||||
|
#define itbd_Acid 5
|
||||||
|
#define itbd_SlowBurn 6
|
||||||
|
#define itbd_SlowFreeze 7
|
||||||
|
#define CDMG_TIMEBASED 8
|
||||||
|
|
||||||
|
// when calling KILLED(), a value that governs gib behavior is expected to be
|
||||||
|
// one of these three values
|
||||||
|
#define GIB_NORMAL 0// gib if entity was overkilled
|
||||||
|
#define GIB_NEVER 1// never gib, no matter how much death damage is done ( freezing, etc )
|
||||||
|
#define GIB_ALWAYS 2// always gib ( Houndeye Shock, Barnacle Bite )
|
||||||
|
|
||||||
|
class CBaseMonster;
|
||||||
|
class CCineMonster;
|
||||||
|
class CSound;
|
||||||
|
|
||||||
|
#include "basemonster.h"
|
||||||
|
|
||||||
|
|
||||||
|
char *ButtonSound( int sound ); // get string of button sound number
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Generic Button
|
||||||
|
//
|
||||||
|
class CBaseButton : public CBaseToggle
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void Spawn( void );
|
||||||
|
virtual void Precache( void );
|
||||||
|
void RotSpawn( void );
|
||||||
|
virtual void KeyValue( KeyValueData* pkvd);
|
||||||
|
|
||||||
|
void ButtonActivate( );
|
||||||
|
void SparkSoundCache( void );
|
||||||
|
|
||||||
|
void EXPORT ButtonShot( void );
|
||||||
|
void EXPORT ButtonTouch( CBaseEntity *pOther );
|
||||||
|
void EXPORT ButtonSpark ( void );
|
||||||
|
void EXPORT TriggerAndWait( void );
|
||||||
|
void EXPORT ButtonReturn( void );
|
||||||
|
void EXPORT ButtonBackHome( void );
|
||||||
|
void EXPORT ButtonUse ( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
|
||||||
|
virtual int TakeDamage( entvars_t* pevInflictor, entvars_t* pevAttacker, float flDamage, int bitsDamageType );
|
||||||
|
virtual int Save( CSave &save );
|
||||||
|
virtual int Restore( CRestore &restore );
|
||||||
|
|
||||||
|
enum BUTTON_CODE { BUTTON_NOTHING, BUTTON_ACTIVATE, BUTTON_RETURN };
|
||||||
|
BUTTON_CODE ButtonResponseToTouch( void );
|
||||||
|
|
||||||
|
static TYPEDESCRIPTION m_SaveData[];
|
||||||
|
// Buttons that don't take damage can be IMPULSE used
|
||||||
|
virtual int ObjectCaps( void ) { return (CBaseToggle:: ObjectCaps() & ~FCAP_ACROSS_TRANSITION) | (pev->takedamage?0:FCAP_IMPULSE_USE); }
|
||||||
|
|
||||||
|
BOOL m_fStayPushed; // button stays pushed in until touched again?
|
||||||
|
BOOL m_fRotating; // a rotating button? default is a sliding button.
|
||||||
|
|
||||||
|
string_t m_strChangeTarget; // if this field is not null, this is an index into the engine string array.
|
||||||
|
// when this button is touched, it's target entity's TARGET field will be set
|
||||||
|
// to the button's ChangeTarget. This allows you to make a func_train switch paths, etc.
|
||||||
|
|
||||||
|
locksound_t m_ls; // door lock sounds
|
||||||
|
|
||||||
|
BYTE m_bLockedSound; // ordinals from entity selection
|
||||||
|
BYTE m_bLockedSentence;
|
||||||
|
BYTE m_bUnlockedSound;
|
||||||
|
BYTE m_bUnlockedSentence;
|
||||||
|
int m_sounds;
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// Weapons
|
||||||
|
//
|
||||||
|
|
||||||
|
#define BAD_WEAPON 0x00007FFF
|
||||||
|
|
||||||
|
//
|
||||||
|
// Converts a entvars_t * to a class pointer
|
||||||
|
// It will allocate the class and entity if necessary
|
||||||
|
//
|
||||||
|
template <class T> T * GetClassPtr( T *a )
|
||||||
|
{
|
||||||
|
entvars_t *pev = (entvars_t *)a;
|
||||||
|
|
||||||
|
// allocate entity if necessary
|
||||||
|
if (pev == NULL)
|
||||||
|
pev = VARS(CREATE_ENTITY());
|
||||||
|
|
||||||
|
// get the private data
|
||||||
|
a = (T *)GET_PRIVATE(ENT(pev));
|
||||||
|
|
||||||
|
if (a == NULL)
|
||||||
|
{
|
||||||
|
// allocate private data
|
||||||
|
a = new(pev) T;
|
||||||
|
a->pev = pev;
|
||||||
|
}
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
bit_PUSHBRUSH_DATA | bit_TOGGLE_DATA
|
||||||
|
bit_MONSTER_DATA
|
||||||
|
bit_DELAY_DATA
|
||||||
|
bit_TOGGLE_DATA | bit_DELAY_DATA | bit_MONSTER_DATA
|
||||||
|
bit_PLAYER_DATA | bit_MONSTER_DATA
|
||||||
|
bit_MONSTER_DATA | CYCLER_DATA
|
||||||
|
bit_LIGHT_DATA
|
||||||
|
path_corner_data
|
||||||
|
bit_MONSTER_DATA | wildcard_data
|
||||||
|
bit_MONSTER_DATA | bit_GROUP_DATA
|
||||||
|
boid_flock_data
|
||||||
|
boid_data
|
||||||
|
CYCLER_DATA
|
||||||
|
bit_ITEM_DATA
|
||||||
|
bit_ITEM_DATA | func_hud_data
|
||||||
|
bit_TOGGLE_DATA | bit_ITEM_DATA
|
||||||
|
EOFFSET
|
||||||
|
env_sound_data
|
||||||
|
env_sound_data
|
||||||
|
push_trigger_data
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define TRACER_FREQ 4 // Tracers fire every 4 bullets
|
||||||
|
|
||||||
|
typedef struct _SelAmmo
|
||||||
|
{
|
||||||
|
BYTE Ammo1Type;
|
||||||
|
BYTE Ammo1;
|
||||||
|
BYTE Ammo2Type;
|
||||||
|
BYTE Ammo2;
|
||||||
|
} SelAmmo;
|
||||||
|
|
||||||
|
|
||||||
|
// this moved here from world.cpp, to allow classes to be derived from it
|
||||||
|
//=======================
|
||||||
|
// CWorld
|
||||||
|
//
|
||||||
|
// This spawns first when each level begins.
|
||||||
|
//=======================
|
||||||
|
class CWorld : public CBaseEntity
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void Spawn( void );
|
||||||
|
void Precache( void );
|
||||||
|
void KeyValue( KeyValueData *pkvd );
|
||||||
|
};
|
46
metamod/extra/example/include/hlsdk/dlls/cdll_dll.h
Normal file
46
metamod/extra/example/include/hlsdk/dlls/cdll_dll.h
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
//
|
||||||
|
// cdll_dll.h
|
||||||
|
|
||||||
|
// this file is included by both the game-dll and the client-dll,
|
||||||
|
|
||||||
|
#ifndef CDLL_DLL_H
|
||||||
|
#define CDLL_DLL_H
|
||||||
|
|
||||||
|
#define MAX_WEAPONS 32 // ???
|
||||||
|
|
||||||
|
#define MAX_WEAPON_SLOTS 5 // hud item selection slots
|
||||||
|
#define MAX_ITEM_TYPES 6 // hud item selection slots
|
||||||
|
|
||||||
|
#define MAX_ITEMS 5 // hard coded item types
|
||||||
|
|
||||||
|
#define HIDEHUD_WEAPONS ( 1<<0 )
|
||||||
|
#define HIDEHUD_FLASHLIGHT ( 1<<1 )
|
||||||
|
#define HIDEHUD_ALL ( 1<<2 )
|
||||||
|
#define HIDEHUD_HEALTH ( 1<<3 )
|
||||||
|
|
||||||
|
#define MAX_AMMO_TYPES 32 // ???
|
||||||
|
#define MAX_AMMO_SLOTS 32 // not really slots
|
||||||
|
|
||||||
|
#define HUD_PRINTNOTIFY 1
|
||||||
|
#define HUD_PRINTCONSOLE 2
|
||||||
|
#define HUD_PRINTTALK 3
|
||||||
|
#define HUD_PRINTCENTER 4
|
||||||
|
|
||||||
|
|
||||||
|
#define WEAPON_SUIT 31
|
||||||
|
|
||||||
|
#endif
|
65
metamod/extra/example/include/hlsdk/dlls/client.h
Normal file
65
metamod/extra/example/include/hlsdk/dlls/client.h
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#ifndef CLIENT_H
|
||||||
|
#define CLIENT_H
|
||||||
|
|
||||||
|
extern void respawn( entvars_t* pev, BOOL fCopyCorpse );
|
||||||
|
extern BOOL ClientConnect( edict_t *pEntity, const char *pszName, const char *pszAddress, char szRejectReason[ 128 ] );
|
||||||
|
extern void ClientDisconnect( edict_t *pEntity );
|
||||||
|
extern void ClientKill( edict_t *pEntity );
|
||||||
|
extern void ClientPutInServer( edict_t *pEntity );
|
||||||
|
extern void ClientCommand( edict_t *pEntity );
|
||||||
|
extern void ClientUserInfoChanged( edict_t *pEntity, char *infobuffer );
|
||||||
|
extern void ServerActivate( edict_t *pEdictList, int edictCount, int clientMax );
|
||||||
|
extern void ServerDeactivate( void );
|
||||||
|
extern void StartFrame( void );
|
||||||
|
extern void PlayerPostThink( edict_t *pEntity );
|
||||||
|
extern void PlayerPreThink( edict_t *pEntity );
|
||||||
|
extern void ParmsNewLevel( void );
|
||||||
|
extern void ParmsChangeLevel( void );
|
||||||
|
|
||||||
|
extern void ClientPrecache( void );
|
||||||
|
|
||||||
|
extern const char *GetGameDescription( void );
|
||||||
|
extern void PlayerCustomization( edict_t *pEntity, customization_t *pCust );
|
||||||
|
|
||||||
|
extern void SpectatorConnect ( edict_t *pEntity );
|
||||||
|
extern void SpectatorDisconnect ( edict_t *pEntity );
|
||||||
|
extern void SpectatorThink ( edict_t *pEntity );
|
||||||
|
|
||||||
|
extern void Sys_Error( const char *error_string );
|
||||||
|
|
||||||
|
extern void SetupVisibility( edict_t *pViewEntity, edict_t *pClient, unsigned char **pvs, unsigned char **pas );
|
||||||
|
extern void UpdateClientData ( const struct edict_s *ent, int sendweapons, struct clientdata_s *cd );
|
||||||
|
extern int AddToFullPack( struct entity_state_s *state, int e, edict_t *ent, edict_t *host, int hostflags, int player, unsigned char *pSet );
|
||||||
|
extern void CreateBaseline( int player, int eindex, struct entity_state_s *baseline, struct edict_s *entity, int playermodelindex, vec3_t player_mins, vec3_t player_maxs );
|
||||||
|
extern void RegisterEncoders( void );
|
||||||
|
|
||||||
|
extern int GetWeaponData( struct edict_s *player, struct weapon_data_s *info );
|
||||||
|
|
||||||
|
extern void CmdStart( const edict_t *player, const struct usercmd_s *cmd, unsigned int random_seed );
|
||||||
|
extern void CmdEnd ( const edict_t *player );
|
||||||
|
|
||||||
|
extern int ConnectionlessPacket( const struct netadr_s *net_from, const char *args, char *response_buffer, int *response_buffer_size );
|
||||||
|
|
||||||
|
extern int GetHullBounds( int hullnumber, float *mins, float *maxs );
|
||||||
|
|
||||||
|
extern void CreateInstancedBaselines ( void );
|
||||||
|
|
||||||
|
extern int InconsistentFile( const edict_t *player, const char *filename, char *disconnect_message );
|
||||||
|
|
||||||
|
extern int AllowLagCompensation( void );
|
||||||
|
|
||||||
|
#endif // CLIENT_H
|
84
metamod/extra/example/include/hlsdk/dlls/decals.h
Normal file
84
metamod/extra/example/include/hlsdk/dlls/decals.h
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#ifndef DECALS_H
|
||||||
|
#define DECALS_H
|
||||||
|
|
||||||
|
//
|
||||||
|
// Dynamic Decals
|
||||||
|
//
|
||||||
|
enum decal_e
|
||||||
|
{
|
||||||
|
DECAL_GUNSHOT1 = 0,
|
||||||
|
DECAL_GUNSHOT2,
|
||||||
|
DECAL_GUNSHOT3,
|
||||||
|
DECAL_GUNSHOT4,
|
||||||
|
DECAL_GUNSHOT5,
|
||||||
|
DECAL_LAMBDA1,
|
||||||
|
DECAL_LAMBDA2,
|
||||||
|
DECAL_LAMBDA3,
|
||||||
|
DECAL_LAMBDA4,
|
||||||
|
DECAL_LAMBDA5,
|
||||||
|
DECAL_LAMBDA6,
|
||||||
|
DECAL_SCORCH1,
|
||||||
|
DECAL_SCORCH2,
|
||||||
|
DECAL_BLOOD1,
|
||||||
|
DECAL_BLOOD2,
|
||||||
|
DECAL_BLOOD3,
|
||||||
|
DECAL_BLOOD4,
|
||||||
|
DECAL_BLOOD5,
|
||||||
|
DECAL_BLOOD6,
|
||||||
|
DECAL_YBLOOD1,
|
||||||
|
DECAL_YBLOOD2,
|
||||||
|
DECAL_YBLOOD3,
|
||||||
|
DECAL_YBLOOD4,
|
||||||
|
DECAL_YBLOOD5,
|
||||||
|
DECAL_YBLOOD6,
|
||||||
|
DECAL_GLASSBREAK1,
|
||||||
|
DECAL_GLASSBREAK2,
|
||||||
|
DECAL_GLASSBREAK3,
|
||||||
|
DECAL_BIGSHOT1,
|
||||||
|
DECAL_BIGSHOT2,
|
||||||
|
DECAL_BIGSHOT3,
|
||||||
|
DECAL_BIGSHOT4,
|
||||||
|
DECAL_BIGSHOT5,
|
||||||
|
DECAL_SPIT1,
|
||||||
|
DECAL_SPIT2,
|
||||||
|
DECAL_BPROOF1, // Bulletproof glass decal
|
||||||
|
DECAL_GARGSTOMP1, // Gargantua stomp crack
|
||||||
|
DECAL_SMALLSCORCH1, // Small scorch mark
|
||||||
|
DECAL_SMALLSCORCH2, // Small scorch mark
|
||||||
|
DECAL_SMALLSCORCH3, // Small scorch mark
|
||||||
|
DECAL_MOMMABIRTH, // Big momma birth splatter
|
||||||
|
DECAL_MOMMASPLAT,
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char *name;
|
||||||
|
short entityIndex;
|
||||||
|
byte depth;
|
||||||
|
byte flags;
|
||||||
|
vec3_t position;
|
||||||
|
} DECALLIST;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char *name;
|
||||||
|
int index;
|
||||||
|
} DLL_DECALLIST;
|
||||||
|
|
||||||
|
extern DLL_DECALLIST gDecals[];
|
||||||
|
|
||||||
|
#endif // DECALS_H
|
33
metamod/extra/example/include/hlsdk/dlls/doors.h
Normal file
33
metamod/extra/example/include/hlsdk/dlls/doors.h
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#ifndef DOORS_H
|
||||||
|
#define DOORS_H
|
||||||
|
|
||||||
|
// doors
|
||||||
|
#define SF_DOOR_ROTATE_Y 0
|
||||||
|
#define SF_DOOR_START_OPEN 1
|
||||||
|
#define SF_DOOR_ROTATE_BACKWARDS 2
|
||||||
|
#define SF_DOOR_PASSABLE 8
|
||||||
|
#define SF_DOOR_ONEWAY 16
|
||||||
|
#define SF_DOOR_NO_AUTO_RETURN 32
|
||||||
|
#define SF_DOOR_ROTATE_Z 64
|
||||||
|
#define SF_DOOR_ROTATE_X 128
|
||||||
|
#define SF_DOOR_USE_ONLY 256 // door must be opened by player's use button.
|
||||||
|
#define SF_DOOR_NOMONSTERS 512 // Monster can't open
|
||||||
|
#define SF_DOOR_SILENT 0x80000000
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif //DOORS_H
|
209
metamod/extra/example/include/hlsdk/dlls/effects.h
Normal file
209
metamod/extra/example/include/hlsdk/dlls/effects.h
Normal file
@ -0,0 +1,209 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#ifndef EFFECTS_H
|
||||||
|
#define EFFECTS_H
|
||||||
|
|
||||||
|
#define SF_BEAM_STARTON 0x0001
|
||||||
|
#define SF_BEAM_TOGGLE 0x0002
|
||||||
|
#define SF_BEAM_RANDOM 0x0004
|
||||||
|
#define SF_BEAM_RING 0x0008
|
||||||
|
#define SF_BEAM_SPARKSTART 0x0010
|
||||||
|
#define SF_BEAM_SPARKEND 0x0020
|
||||||
|
#define SF_BEAM_DECALS 0x0040
|
||||||
|
#define SF_BEAM_SHADEIN 0x0080
|
||||||
|
#define SF_BEAM_SHADEOUT 0x0100
|
||||||
|
#define SF_BEAM_TEMPORARY 0x8000
|
||||||
|
|
||||||
|
#define SF_SPRITE_STARTON 0x0001
|
||||||
|
#define SF_SPRITE_ONCE 0x0002
|
||||||
|
#define SF_SPRITE_TEMPORARY 0x8000
|
||||||
|
|
||||||
|
class CSprite : public CPointEntity
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void Spawn( void );
|
||||||
|
void Precache( void );
|
||||||
|
|
||||||
|
int ObjectCaps( void )
|
||||||
|
{
|
||||||
|
int flags = 0;
|
||||||
|
if ( pev->spawnflags & SF_SPRITE_TEMPORARY )
|
||||||
|
flags = FCAP_DONT_SAVE;
|
||||||
|
return (CBaseEntity :: ObjectCaps() & ~FCAP_ACROSS_TRANSITION) | flags;
|
||||||
|
}
|
||||||
|
void EXPORT AnimateThink( void );
|
||||||
|
void EXPORT ExpandThink( void );
|
||||||
|
void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
|
||||||
|
void Animate( float frames );
|
||||||
|
void Expand( float scaleSpeed, float fadeSpeed );
|
||||||
|
void SpriteInit( const char *pSpriteName, const Vector &origin );
|
||||||
|
|
||||||
|
inline void SetAttachment( edict_t *pEntity, int attachment )
|
||||||
|
{
|
||||||
|
if ( pEntity )
|
||||||
|
{
|
||||||
|
pev->skin = ENTINDEX(pEntity);
|
||||||
|
pev->body = attachment;
|
||||||
|
pev->aiment = pEntity;
|
||||||
|
pev->movetype = MOVETYPE_FOLLOW;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void TurnOff( void );
|
||||||
|
void TurnOn( void );
|
||||||
|
inline float Frames( void ) { return m_maxFrame; }
|
||||||
|
inline void SetTransparency( int rendermode, int r, int g, int b, int a, int fx )
|
||||||
|
{
|
||||||
|
pev->rendermode = rendermode;
|
||||||
|
pev->rendercolor.x = r;
|
||||||
|
pev->rendercolor.y = g;
|
||||||
|
pev->rendercolor.z = b;
|
||||||
|
pev->renderamt = a;
|
||||||
|
pev->renderfx = fx;
|
||||||
|
}
|
||||||
|
inline void SetTexture( int spriteIndex ) { pev->modelindex = spriteIndex; }
|
||||||
|
inline void SetScale( float scale ) { pev->scale = scale; }
|
||||||
|
inline void SetColor( int r, int g, int b ) { pev->rendercolor.x = r; pev->rendercolor.y = g; pev->rendercolor.z = b; }
|
||||||
|
inline void SetBrightness( int brightness ) { pev->renderamt = brightness; }
|
||||||
|
|
||||||
|
inline void AnimateAndDie( float framerate )
|
||||||
|
{
|
||||||
|
SetThink(&CSprite::AnimateUntilDead);
|
||||||
|
pev->framerate = framerate;
|
||||||
|
pev->dmgtime = gpGlobals->time + (m_maxFrame / framerate);
|
||||||
|
pev->nextthink = gpGlobals->time;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EXPORT AnimateUntilDead( void );
|
||||||
|
|
||||||
|
virtual int Save( CSave &save );
|
||||||
|
virtual int Restore( CRestore &restore );
|
||||||
|
static TYPEDESCRIPTION m_SaveData[];
|
||||||
|
static CSprite *SpriteCreate( const char *pSpriteName, const Vector &origin, BOOL animate );
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
float m_lastTime;
|
||||||
|
float m_maxFrame;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class CBeam : public CBaseEntity
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void Spawn( void );
|
||||||
|
void Precache( void );
|
||||||
|
int ObjectCaps( void )
|
||||||
|
{
|
||||||
|
int flags = 0;
|
||||||
|
if ( pev->spawnflags & SF_BEAM_TEMPORARY )
|
||||||
|
flags = FCAP_DONT_SAVE;
|
||||||
|
return (CBaseEntity :: ObjectCaps() & ~FCAP_ACROSS_TRANSITION) | flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EXPORT TriggerTouch( CBaseEntity *pOther );
|
||||||
|
|
||||||
|
// These functions are here to show the way beams are encoded as entities.
|
||||||
|
// Encoding beams as entities simplifies their management in the client/server architecture
|
||||||
|
inline void SetType( int type ) { pev->rendermode = (pev->rendermode & 0xF0) | (type&0x0F); }
|
||||||
|
inline void SetFlags( int flags ) { pev->rendermode = (pev->rendermode & 0x0F) | (flags&0xF0); }
|
||||||
|
inline void SetStartPos( const Vector& pos ) { pev->origin = pos; }
|
||||||
|
inline void SetEndPos( const Vector& pos ) { pev->angles = pos; }
|
||||||
|
void SetStartEntity( int entityIndex );
|
||||||
|
void SetEndEntity( int entityIndex );
|
||||||
|
|
||||||
|
inline void SetStartAttachment( int attachment ) { pev->sequence = (pev->sequence & 0x0FFF) | ((attachment&0xF)<<12); }
|
||||||
|
inline void SetEndAttachment( int attachment ) { pev->skin = (pev->skin & 0x0FFF) | ((attachment&0xF)<<12); }
|
||||||
|
|
||||||
|
inline void SetTexture( int spriteIndex ) { pev->modelindex = spriteIndex; }
|
||||||
|
inline void SetWidth( int width ) { pev->scale = width; }
|
||||||
|
inline void SetNoise( int amplitude ) { pev->body = amplitude; }
|
||||||
|
inline void SetColor( int r, int g, int b ) { pev->rendercolor.x = r; pev->rendercolor.y = g; pev->rendercolor.z = b; }
|
||||||
|
inline void SetBrightness( int brightness ) { pev->renderamt = brightness; }
|
||||||
|
inline void SetFrame( float frame ) { pev->frame = frame; }
|
||||||
|
inline void SetScrollRate( int speed ) { pev->animtime = speed; }
|
||||||
|
|
||||||
|
inline int GetType( void ) { return pev->rendermode & 0x0F; }
|
||||||
|
inline int GetFlags( void ) { return pev->rendermode & 0xF0; }
|
||||||
|
inline int GetStartEntity( void ) { return pev->sequence & 0xFFF; }
|
||||||
|
inline int GetEndEntity( void ) { return pev->skin & 0xFFF; }
|
||||||
|
|
||||||
|
const Vector &GetStartPos( void );
|
||||||
|
const Vector &GetEndPos( void );
|
||||||
|
|
||||||
|
Vector Center( void ) { return (GetStartPos() + GetEndPos()) * 0.5; }; // center point of beam
|
||||||
|
|
||||||
|
inline int GetTexture( void ) { return pev->modelindex; }
|
||||||
|
inline int GetWidth( void ) { return pev->scale; }
|
||||||
|
inline int GetNoise( void ) { return pev->body; }
|
||||||
|
// inline void GetColor( int r, int g, int b ) { pev->rendercolor.x = r; pev->rendercolor.y = g; pev->rendercolor.z = b; }
|
||||||
|
inline int GetBrightness( void ) { return pev->renderamt; }
|
||||||
|
inline int GetFrame( void ) { return pev->frame; }
|
||||||
|
inline int GetScrollRate( void ) { return pev->animtime; }
|
||||||
|
|
||||||
|
// Call after you change start/end positions
|
||||||
|
void RelinkBeam( void );
|
||||||
|
// void SetObjectCollisionBox( void );
|
||||||
|
|
||||||
|
void DoSparks( const Vector &start, const Vector &end );
|
||||||
|
CBaseEntity *RandomTargetname( const char *szName );
|
||||||
|
void BeamDamage( TraceResult *ptr );
|
||||||
|
// Init after BeamCreate()
|
||||||
|
void BeamInit( const char *pSpriteName, int width );
|
||||||
|
void PointsInit( const Vector &start, const Vector &end );
|
||||||
|
void PointEntInit( const Vector &start, int endIndex );
|
||||||
|
void EntsInit( int startIndex, int endIndex );
|
||||||
|
void HoseInit( const Vector &start, const Vector &direction );
|
||||||
|
|
||||||
|
static CBeam *BeamCreate( const char *pSpriteName, int width );
|
||||||
|
|
||||||
|
inline void LiveForTime( float time ) { SetThink(&CBeam::SUB_Remove); pev->nextthink = gpGlobals->time + time; }
|
||||||
|
inline void BeamDamageInstant( TraceResult *ptr, float damage )
|
||||||
|
{
|
||||||
|
pev->dmg = damage;
|
||||||
|
pev->dmgtime = gpGlobals->time - 1;
|
||||||
|
BeamDamage(ptr);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#define SF_MESSAGE_ONCE 0x0001 // Fade in, not out
|
||||||
|
#define SF_MESSAGE_ALL 0x0002 // Send to all clients
|
||||||
|
|
||||||
|
|
||||||
|
class CLaser : public CBeam
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void Spawn( void );
|
||||||
|
void Precache( void );
|
||||||
|
void KeyValue( KeyValueData *pkvd );
|
||||||
|
|
||||||
|
void TurnOn( void );
|
||||||
|
void TurnOff( void );
|
||||||
|
int IsOn( void );
|
||||||
|
|
||||||
|
void FireAtPoint( TraceResult &point );
|
||||||
|
|
||||||
|
void EXPORT StrikeThink( void );
|
||||||
|
void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
|
||||||
|
virtual int Save( CSave &save );
|
||||||
|
virtual int Restore( CRestore &restore );
|
||||||
|
static TYPEDESCRIPTION m_SaveData[];
|
||||||
|
|
||||||
|
CSprite *m_pSprite;
|
||||||
|
int m_iszSpriteName;
|
||||||
|
Vector m_firePosition;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //EFFECTS_H
|
160
metamod/extra/example/include/hlsdk/dlls/enginecallback.h
Normal file
160
metamod/extra/example/include/hlsdk/dlls/enginecallback.h
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#ifndef ENGINECALLBACK_H
|
||||||
|
#define ENGINECALLBACK_H
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "event_flags.h"
|
||||||
|
|
||||||
|
// Must be provided by user of this code
|
||||||
|
extern enginefuncs_t g_engfuncs;
|
||||||
|
|
||||||
|
// The actual engine callbacks
|
||||||
|
#define GETPLAYERUSERID (*g_engfuncs.pfnGetPlayerUserId)
|
||||||
|
#define PRECACHE_MODEL (*g_engfuncs.pfnPrecacheModel)
|
||||||
|
#define PRECACHE_SOUND (*g_engfuncs.pfnPrecacheSound)
|
||||||
|
#define PRECACHE_GENERIC (*g_engfuncs.pfnPrecacheGeneric)
|
||||||
|
#define SET_MODEL (*g_engfuncs.pfnSetModel)
|
||||||
|
#define MODEL_INDEX (*g_engfuncs.pfnModelIndex)
|
||||||
|
#define MODEL_FRAMES (*g_engfuncs.pfnModelFrames)
|
||||||
|
#define SET_SIZE (*g_engfuncs.pfnSetSize)
|
||||||
|
#define CHANGE_LEVEL (*g_engfuncs.pfnChangeLevel)
|
||||||
|
#define GET_SPAWN_PARMS (*g_engfuncs.pfnGetSpawnParms)
|
||||||
|
#define SAVE_SPAWN_PARMS (*g_engfuncs.pfnSaveSpawnParms)
|
||||||
|
#define VEC_TO_YAW (*g_engfuncs.pfnVecToYaw)
|
||||||
|
#define VEC_TO_ANGLES (*g_engfuncs.pfnVecToAngles)
|
||||||
|
#define MOVE_TO_ORIGIN (*g_engfuncs.pfnMoveToOrigin)
|
||||||
|
#define oldCHANGE_YAW (*g_engfuncs.pfnChangeYaw)
|
||||||
|
#define CHANGE_PITCH (*g_engfuncs.pfnChangePitch)
|
||||||
|
#define MAKE_VECTORS (*g_engfuncs.pfnMakeVectors)
|
||||||
|
#define CREATE_ENTITY (*g_engfuncs.pfnCreateEntity)
|
||||||
|
#define REMOVE_ENTITY (*g_engfuncs.pfnRemoveEntity)
|
||||||
|
#define CREATE_NAMED_ENTITY (*g_engfuncs.pfnCreateNamedEntity)
|
||||||
|
#define MAKE_STATIC (*g_engfuncs.pfnMakeStatic)
|
||||||
|
#define ENT_IS_ON_FLOOR (*g_engfuncs.pfnEntIsOnFloor)
|
||||||
|
#define DROP_TO_FLOOR (*g_engfuncs.pfnDropToFloor)
|
||||||
|
#define WALK_MOVE (*g_engfuncs.pfnWalkMove)
|
||||||
|
#define SET_ORIGIN (*g_engfuncs.pfnSetOrigin)
|
||||||
|
#define EMIT_SOUND_DYN2 (*g_engfuncs.pfnEmitSound)
|
||||||
|
#define BUILD_SOUND_MSG (*g_engfuncs.pfnBuildSoundMsg)
|
||||||
|
#define TRACE_LINE (*g_engfuncs.pfnTraceLine)
|
||||||
|
#define TRACE_TOSS (*g_engfuncs.pfnTraceToss)
|
||||||
|
#define TRACE_MONSTER_HULL (*g_engfuncs.pfnTraceMonsterHull)
|
||||||
|
#define TRACE_HULL (*g_engfuncs.pfnTraceHull)
|
||||||
|
#define GET_AIM_VECTOR (*g_engfuncs.pfnGetAimVector)
|
||||||
|
#define SERVER_COMMAND (*g_engfuncs.pfnServerCommand)
|
||||||
|
#define SERVER_EXECUTE (*g_engfuncs.pfnServerExecute)
|
||||||
|
#define CLIENT_COMMAND (*g_engfuncs.pfnClientCommand)
|
||||||
|
#define PARTICLE_EFFECT (*g_engfuncs.pfnParticleEffect)
|
||||||
|
#define LIGHT_STYLE (*g_engfuncs.pfnLightStyle)
|
||||||
|
#define DECAL_INDEX (*g_engfuncs.pfnDecalIndex)
|
||||||
|
#define POINT_CONTENTS (*g_engfuncs.pfnPointContents)
|
||||||
|
#define CRC32_INIT (*g_engfuncs.pfnCRC32_Init)
|
||||||
|
#define CRC32_PROCESS_BUFFER (*g_engfuncs.pfnCRC32_ProcessBuffer)
|
||||||
|
#define CRC32_PROCESS_BYTE (*g_engfuncs.pfnCRC32_ProcessByte)
|
||||||
|
#define CRC32_FINAL (*g_engfuncs.pfnCRC32_Final)
|
||||||
|
#define RANDOM_LONG (*g_engfuncs.pfnRandomLong)
|
||||||
|
#define RANDOM_FLOAT (*g_engfuncs.pfnRandomFloat)
|
||||||
|
#define GETPLAYERAUTHID (*g_engfuncs.pfnGetPlayerAuthId)
|
||||||
|
|
||||||
|
inline void MESSAGE_BEGIN( int msg_dest, int msg_type, const float *pOrigin = NULL, edict_t *ed = NULL ) {
|
||||||
|
(*g_engfuncs.pfnMessageBegin)(msg_dest, msg_type, pOrigin, ed);
|
||||||
|
}
|
||||||
|
#define MESSAGE_END (*g_engfuncs.pfnMessageEnd)
|
||||||
|
#define WRITE_BYTE (*g_engfuncs.pfnWriteByte)
|
||||||
|
#define WRITE_CHAR (*g_engfuncs.pfnWriteChar)
|
||||||
|
#define WRITE_SHORT (*g_engfuncs.pfnWriteShort)
|
||||||
|
#define WRITE_LONG (*g_engfuncs.pfnWriteLong)
|
||||||
|
#define WRITE_ANGLE (*g_engfuncs.pfnWriteAngle)
|
||||||
|
#define WRITE_COORD (*g_engfuncs.pfnWriteCoord)
|
||||||
|
#define WRITE_STRING (*g_engfuncs.pfnWriteString)
|
||||||
|
#define WRITE_ENTITY (*g_engfuncs.pfnWriteEntity)
|
||||||
|
#define CVAR_REGISTER (*g_engfuncs.pfnCVarRegister)
|
||||||
|
#define CVAR_GET_FLOAT (*g_engfuncs.pfnCVarGetFloat)
|
||||||
|
#define CVAR_GET_STRING (*g_engfuncs.pfnCVarGetString)
|
||||||
|
#define CVAR_SET_FLOAT (*g_engfuncs.pfnCVarSetFloat)
|
||||||
|
#define CVAR_SET_STRING (*g_engfuncs.pfnCVarSetString)
|
||||||
|
#define CVAR_GET_POINTER (*g_engfuncs.pfnCVarGetPointer)
|
||||||
|
#define ALERT (*g_engfuncs.pfnAlertMessage)
|
||||||
|
#define ENGINE_FPRINTF (*g_engfuncs.pfnEngineFprintf)
|
||||||
|
#define ALLOC_PRIVATE (*g_engfuncs.pfnPvAllocEntPrivateData)
|
||||||
|
inline void *GET_PRIVATE( edict_t *pent )
|
||||||
|
{
|
||||||
|
if ( pent )
|
||||||
|
return pent->pvPrivateData;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define FREE_PRIVATE (*g_engfuncs.pfnFreeEntPrivateData)
|
||||||
|
//#define STRING (*g_engfuncs.pfnSzFromIndex)
|
||||||
|
#define ALLOC_STRING (*g_engfuncs.pfnAllocString)
|
||||||
|
#define FIND_ENTITY_BY_STRING (*g_engfuncs.pfnFindEntityByString)
|
||||||
|
#define GETENTITYILLUM (*g_engfuncs.pfnGetEntityIllum)
|
||||||
|
#define FIND_ENTITY_IN_SPHERE (*g_engfuncs.pfnFindEntityInSphere)
|
||||||
|
#define FIND_CLIENT_IN_PVS (*g_engfuncs.pfnFindClientInPVS)
|
||||||
|
#define EMIT_AMBIENT_SOUND (*g_engfuncs.pfnEmitAmbientSound)
|
||||||
|
#define GET_MODEL_PTR (*g_engfuncs.pfnGetModelPtr)
|
||||||
|
#define REG_USER_MSG (*g_engfuncs.pfnRegUserMsg)
|
||||||
|
#define GET_BONE_POSITION (*g_engfuncs.pfnGetBonePosition)
|
||||||
|
#define FUNCTION_FROM_NAME (*g_engfuncs.pfnFunctionFromName)
|
||||||
|
#define NAME_FOR_FUNCTION (*g_engfuncs.pfnNameForFunction)
|
||||||
|
#define TRACE_TEXTURE (*g_engfuncs.pfnTraceTexture)
|
||||||
|
#define CLIENT_PRINTF (*g_engfuncs.pfnClientPrintf)
|
||||||
|
#define CMD_ARGS (*g_engfuncs.pfnCmd_Args)
|
||||||
|
#define CMD_ARGC (*g_engfuncs.pfnCmd_Argc)
|
||||||
|
#define CMD_ARGV (*g_engfuncs.pfnCmd_Argv)
|
||||||
|
#define GET_ATTACHMENT (*g_engfuncs.pfnGetAttachment)
|
||||||
|
#define SET_VIEW (*g_engfuncs.pfnSetView)
|
||||||
|
#define SET_CROSSHAIRANGLE (*g_engfuncs.pfnCrosshairAngle)
|
||||||
|
#define LOAD_FILE_FOR_ME (*g_engfuncs.pfnLoadFileForMe)
|
||||||
|
#define FREE_FILE (*g_engfuncs.pfnFreeFile)
|
||||||
|
#define COMPARE_FILE_TIME (*g_engfuncs.pfnCompareFileTime)
|
||||||
|
#define GET_GAME_DIR (*g_engfuncs.pfnGetGameDir)
|
||||||
|
#define IS_MAP_VALID (*g_engfuncs.pfnIsMapValid)
|
||||||
|
#define NUMBER_OF_ENTITIES (*g_engfuncs.pfnNumberOfEntities)
|
||||||
|
#define IS_DEDICATED_SERVER (*g_engfuncs.pfnIsDedicatedServer)
|
||||||
|
|
||||||
|
#define PRECACHE_EVENT (*g_engfuncs.pfnPrecacheEvent)
|
||||||
|
#define PLAYBACK_EVENT_FULL (*g_engfuncs.pfnPlaybackEvent)
|
||||||
|
|
||||||
|
#define ENGINE_SET_PVS (*g_engfuncs.pfnSetFatPVS)
|
||||||
|
#define ENGINE_SET_PAS (*g_engfuncs.pfnSetFatPAS)
|
||||||
|
|
||||||
|
#define ENGINE_CHECK_VISIBILITY (*g_engfuncs.pfnCheckVisibility)
|
||||||
|
|
||||||
|
#define DELTA_SET ( *g_engfuncs.pfnDeltaSetField )
|
||||||
|
#define DELTA_UNSET ( *g_engfuncs.pfnDeltaUnsetField )
|
||||||
|
#define DELTA_ADDENCODER ( *g_engfuncs.pfnDeltaAddEncoder )
|
||||||
|
#define ENGINE_CURRENT_PLAYER ( *g_engfuncs.pfnGetCurrentPlayer )
|
||||||
|
|
||||||
|
#define ENGINE_CANSKIP ( *g_engfuncs.pfnCanSkipPlayer )
|
||||||
|
|
||||||
|
#define DELTA_FINDFIELD ( *g_engfuncs.pfnDeltaFindField )
|
||||||
|
#define DELTA_SETBYINDEX ( *g_engfuncs.pfnDeltaSetFieldByIndex )
|
||||||
|
#define DELTA_UNSETBYINDEX ( *g_engfuncs.pfnDeltaUnsetFieldByIndex )
|
||||||
|
|
||||||
|
#define ENGINE_GETPHYSINFO ( *g_engfuncs.pfnGetPhysicsInfoString )
|
||||||
|
|
||||||
|
#define ENGINE_SETGROUPMASK ( *g_engfuncs.pfnSetGroupMask )
|
||||||
|
|
||||||
|
#define ENGINE_INSTANCE_BASELINE ( *g_engfuncs.pfnCreateInstancedBaseline )
|
||||||
|
|
||||||
|
#define ENGINE_FORCE_UNMODIFIED ( *g_engfuncs.pfnForceUnmodified )
|
||||||
|
|
||||||
|
#define PLAYER_CNX_STATS ( *g_engfuncs.pfnGetPlayerStats )
|
||||||
|
|
||||||
|
#endif //ENGINECALLBACK_H
|
32
metamod/extra/example/include/hlsdk/dlls/explode.h
Normal file
32
metamod/extra/example/include/hlsdk/dlls/explode.h
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#ifndef EXPLODE_H
|
||||||
|
#define EXPLODE_H
|
||||||
|
|
||||||
|
|
||||||
|
#define SF_ENVEXPLOSION_NODAMAGE ( 1 << 0 ) // when set, ENV_EXPLOSION will not actually inflict damage
|
||||||
|
#define SF_ENVEXPLOSION_REPEATABLE ( 1 << 1 ) // can this entity be refired?
|
||||||
|
#define SF_ENVEXPLOSION_NOFIREBALL ( 1 << 2 ) // don't draw the fireball
|
||||||
|
#define SF_ENVEXPLOSION_NOSMOKE ( 1 << 3 ) // don't draw the smoke
|
||||||
|
#define SF_ENVEXPLOSION_NODECAL ( 1 << 4 ) // don't make a scorch mark
|
||||||
|
#define SF_ENVEXPLOSION_NOSPARKS ( 1 << 5 ) // don't make a scorch mark
|
||||||
|
|
||||||
|
extern DLL_GLOBAL short g_sModelIndexFireball;
|
||||||
|
extern DLL_GLOBAL short g_sModelIndexSmoke;
|
||||||
|
|
||||||
|
|
||||||
|
extern void ExplosionCreate( const Vector ¢er, const Vector &angles, edict_t *pOwner, int magnitude, BOOL doDamage );
|
||||||
|
|
||||||
|
#endif //EXPLODE_H
|
97
metamod/extra/example/include/hlsdk/dlls/extdll.h
Normal file
97
metamod/extra/example/include/hlsdk/dlls/extdll.h
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#ifndef EXTDLL_H
|
||||||
|
#define EXTDLL_H
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Global header file for extension DLLs
|
||||||
|
//
|
||||||
|
|
||||||
|
// Allow "DEBUG" in addition to default "_DEBUG"
|
||||||
|
#ifdef _DEBUG
|
||||||
|
#define DEBUG 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Silence certain warnings
|
||||||
|
#pragma warning(disable : 4244) // int or float down-conversion
|
||||||
|
#pragma warning(disable : 4305) // int or float data truncation
|
||||||
|
#pragma warning(disable : 4201) // nameless struct/union
|
||||||
|
#pragma warning(disable : 4514) // unreferenced inline function removed
|
||||||
|
#pragma warning(disable : 4100) // unreferenced formal parameter
|
||||||
|
|
||||||
|
#include "archtypes.h" // DAL
|
||||||
|
|
||||||
|
// Prevent tons of unused windows definitions
|
||||||
|
#ifdef _WIN32
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#define NOWINRES
|
||||||
|
#define NOSERVICE
|
||||||
|
#define NOMCX
|
||||||
|
#define NOIME
|
||||||
|
#include "winsani_in.h"
|
||||||
|
#include "windows.h"
|
||||||
|
#include "winsani_out.h"
|
||||||
|
#else // _WIN32
|
||||||
|
#ifndef TRUE
|
||||||
|
#define FALSE 0
|
||||||
|
#define TRUE (!FALSE)
|
||||||
|
#endif //TRUE
|
||||||
|
typedef uint32 ULONG;
|
||||||
|
typedef unsigned char BYTE;
|
||||||
|
typedef int BOOL;
|
||||||
|
#ifndef MAX_PATH
|
||||||
|
#define MAX_PATH PATH_MAX
|
||||||
|
#endif // MAX_PATH
|
||||||
|
#include <limits.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <string.h> // memset
|
||||||
|
#ifndef min
|
||||||
|
#define min(a,b) (((a) < (b)) ? (a) : (b))
|
||||||
|
#endif
|
||||||
|
#ifndef max
|
||||||
|
#define max(a,b) (((a) > (b)) ? (a) : (b))
|
||||||
|
#define _vsnprintf(a,b,c,d) vsnprintf(a,b,c,d)
|
||||||
|
#endif
|
||||||
|
#endif //_WIN32
|
||||||
|
|
||||||
|
// Misc C-runtime library headers
|
||||||
|
#include "stdio.h"
|
||||||
|
#include "stdlib.h"
|
||||||
|
#include "math.h"
|
||||||
|
|
||||||
|
// Header file containing definition of globalvars_t and entvars_t
|
||||||
|
typedef unsigned int func_t; //
|
||||||
|
typedef unsigned int string_t; // from engine's pr_comp.h;
|
||||||
|
typedef float vec_t; // needed before including progdefs.h
|
||||||
|
|
||||||
|
// Vector class
|
||||||
|
#include "vector.h"
|
||||||
|
|
||||||
|
// Defining it as a (bogus) struct helps enforce type-checking
|
||||||
|
#define vec3_t Vector
|
||||||
|
|
||||||
|
// Shared engine/DLL constants
|
||||||
|
#include "const.h"
|
||||||
|
#include "progdefs.h"
|
||||||
|
#include "edict.h"
|
||||||
|
|
||||||
|
// Shared header describing protocol between engine and DLLs
|
||||||
|
#include "eiface.h"
|
||||||
|
|
||||||
|
// Shared header between the client DLL and the game DLLs
|
||||||
|
#include "cdll_dll.h"
|
||||||
|
|
||||||
|
#endif //EXTDLL_H
|
74
metamod/extra/example/include/hlsdk/dlls/func_break.h
Normal file
74
metamod/extra/example/include/hlsdk/dlls/func_break.h
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#ifndef FUNC_BREAK_H
|
||||||
|
#define FUNC_BREAK_H
|
||||||
|
|
||||||
|
typedef enum { expRandom, expDirected} Explosions;
|
||||||
|
typedef enum { matGlass = 0, matWood, matMetal, matFlesh, matCinderBlock, matCeilingTile, matComputer, matUnbreakableGlass, matRocks, matNone, matLastMaterial } Materials;
|
||||||
|
|
||||||
|
#define NUM_SHARDS 6 // this many shards spawned when breakable objects break;
|
||||||
|
|
||||||
|
class CBreakable : public CBaseDelay
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// basic functions
|
||||||
|
void Spawn( void );
|
||||||
|
void Precache( void );
|
||||||
|
void KeyValue( KeyValueData* pkvd);
|
||||||
|
void EXPORT BreakTouch( CBaseEntity *pOther );
|
||||||
|
void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
|
||||||
|
void DamageSound( void );
|
||||||
|
|
||||||
|
// breakables use an overridden takedamage
|
||||||
|
virtual int TakeDamage( entvars_t* pevInflictor, entvars_t* pevAttacker, float flDamage, int bitsDamageType );
|
||||||
|
// To spark when hit
|
||||||
|
void TraceAttack( entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType );
|
||||||
|
|
||||||
|
BOOL IsBreakable( void );
|
||||||
|
BOOL SparkWhenHit( void );
|
||||||
|
|
||||||
|
int DamageDecal( int bitsDamageType );
|
||||||
|
|
||||||
|
void EXPORT Die( void );
|
||||||
|
virtual int ObjectCaps( void ) { return (CBaseEntity :: ObjectCaps() & ~FCAP_ACROSS_TRANSITION); }
|
||||||
|
virtual int Save( CSave &save );
|
||||||
|
virtual int Restore( CRestore &restore );
|
||||||
|
|
||||||
|
inline BOOL Explodable( void ) { return ExplosionMagnitude() > 0; }
|
||||||
|
inline int ExplosionMagnitude( void ) { return pev->impulse; }
|
||||||
|
inline void ExplosionSetMagnitude( int magnitude ) { pev->impulse = magnitude; }
|
||||||
|
|
||||||
|
static void MaterialSoundPrecache( Materials precacheMaterial );
|
||||||
|
static void MaterialSoundRandom( edict_t *pEdict, Materials soundMaterial, float volume );
|
||||||
|
static const char **MaterialSoundList( Materials precacheMaterial, int &soundCount );
|
||||||
|
|
||||||
|
static const char *pSoundsWood[];
|
||||||
|
static const char *pSoundsFlesh[];
|
||||||
|
static const char *pSoundsGlass[];
|
||||||
|
static const char *pSoundsMetal[];
|
||||||
|
static const char *pSoundsConcrete[];
|
||||||
|
static const char *pSpawnObjects[];
|
||||||
|
|
||||||
|
static TYPEDESCRIPTION m_SaveData[];
|
||||||
|
|
||||||
|
Materials m_Material;
|
||||||
|
Explosions m_Explosion;
|
||||||
|
int m_idShard;
|
||||||
|
float m_angle;
|
||||||
|
int m_iszGibModel;
|
||||||
|
int m_iszSpawnObject;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // FUNC_BREAK_H
|
45
metamod/extra/example/include/hlsdk/dlls/game.h
Normal file
45
metamod/extra/example/include/hlsdk/dlls/game.h
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
|
||||||
|
#ifndef GAME_H
|
||||||
|
#define GAME_H
|
||||||
|
|
||||||
|
extern void GameDLLInit( void );
|
||||||
|
|
||||||
|
|
||||||
|
extern cvar_t displaysoundlist;
|
||||||
|
|
||||||
|
// multiplayer server rules
|
||||||
|
extern cvar_t teamplay;
|
||||||
|
extern cvar_t fraglimit;
|
||||||
|
extern cvar_t timelimit;
|
||||||
|
extern cvar_t friendlyfire;
|
||||||
|
extern cvar_t falldamage;
|
||||||
|
extern cvar_t weaponstay;
|
||||||
|
extern cvar_t forcerespawn;
|
||||||
|
extern cvar_t flashlight;
|
||||||
|
extern cvar_t aimcrosshair;
|
||||||
|
extern cvar_t decalfrequency;
|
||||||
|
extern cvar_t teamlist;
|
||||||
|
extern cvar_t teamoverride;
|
||||||
|
extern cvar_t defaultteam;
|
||||||
|
extern cvar_t allowmonsters;
|
||||||
|
|
||||||
|
// Engine Cvars
|
||||||
|
extern cvar_t *g_psv_gravity;
|
||||||
|
extern cvar_t *g_psv_aim;
|
||||||
|
extern cvar_t *g_footsteps;
|
||||||
|
|
||||||
|
#endif // GAME_H
|
360
metamod/extra/example/include/hlsdk/dlls/gamerules.h
Normal file
360
metamod/extra/example/include/hlsdk/dlls/gamerules.h
Normal file
@ -0,0 +1,360 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
//=========================================================
|
||||||
|
// GameRules
|
||||||
|
//=========================================================
|
||||||
|
|
||||||
|
//#include "weapons.h"
|
||||||
|
//#include "items.h"
|
||||||
|
class CBasePlayerItem;
|
||||||
|
class CBasePlayer;
|
||||||
|
class CItem;
|
||||||
|
class CBasePlayerAmmo;
|
||||||
|
|
||||||
|
// weapon respawning return codes
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
GR_NONE = 0,
|
||||||
|
|
||||||
|
GR_WEAPON_RESPAWN_YES,
|
||||||
|
GR_WEAPON_RESPAWN_NO,
|
||||||
|
|
||||||
|
GR_AMMO_RESPAWN_YES,
|
||||||
|
GR_AMMO_RESPAWN_NO,
|
||||||
|
|
||||||
|
GR_ITEM_RESPAWN_YES,
|
||||||
|
GR_ITEM_RESPAWN_NO,
|
||||||
|
|
||||||
|
GR_PLR_DROP_GUN_ALL,
|
||||||
|
GR_PLR_DROP_GUN_ACTIVE,
|
||||||
|
GR_PLR_DROP_GUN_NO,
|
||||||
|
|
||||||
|
GR_PLR_DROP_AMMO_ALL,
|
||||||
|
GR_PLR_DROP_AMMO_ACTIVE,
|
||||||
|
GR_PLR_DROP_AMMO_NO,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Player relationship return codes
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
GR_NOTTEAMMATE = 0,
|
||||||
|
GR_TEAMMATE,
|
||||||
|
GR_ENEMY,
|
||||||
|
GR_ALLY,
|
||||||
|
GR_NEUTRAL,
|
||||||
|
};
|
||||||
|
|
||||||
|
class CGameRules
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual void RefreshSkillData( void );// fill skill data struct with proper values
|
||||||
|
virtual void Think( void ) = 0;// GR_Think - runs every server frame, should handle any timer tasks, periodic events, etc.
|
||||||
|
virtual BOOL IsAllowedToSpawn( CBaseEntity *pEntity ) = 0; // Can this item spawn (eg monsters don't spawn in deathmatch).
|
||||||
|
|
||||||
|
virtual BOOL FAllowFlashlight( void ) = 0;// Are players allowed to switch on their flashlight?
|
||||||
|
virtual BOOL FShouldSwitchWeapon( CBasePlayer *pPlayer, CBasePlayerItem *pWeapon ) = 0;// should the player switch to this weapon?
|
||||||
|
virtual BOOL GetNextBestWeapon( CBasePlayer *pPlayer, CBasePlayerItem *pCurrentWeapon ) = 0;// I can't use this weapon anymore, get me the next best one.
|
||||||
|
|
||||||
|
// Functions to verify the single/multiplayer status of a game
|
||||||
|
virtual BOOL IsMultiplayer( void ) = 0;// is this a multiplayer game? (either coop or deathmatch)
|
||||||
|
virtual BOOL IsDeathmatch( void ) = 0;//is this a deathmatch game?
|
||||||
|
virtual BOOL IsTeamplay( void ) { return FALSE; };// is this deathmatch game being played with team rules?
|
||||||
|
virtual BOOL IsCoOp( void ) = 0;// is this a coop game?
|
||||||
|
virtual const char *GetGameDescription( void ) { return "Half-Life"; } // this is the game name that gets seen in the server browser
|
||||||
|
|
||||||
|
// Client connection/disconnection
|
||||||
|
virtual BOOL ClientConnected( edict_t *pEntity, const char *pszName, const char *pszAddress, char szRejectReason[ 128 ] ) = 0;// a client just connected to the server (player hasn't spawned yet)
|
||||||
|
virtual void InitHUD( CBasePlayer *pl ) = 0; // the client dll is ready for updating
|
||||||
|
virtual void ClientDisconnected( edict_t *pClient ) = 0;// a client just disconnected from the server
|
||||||
|
virtual void UpdateGameMode( CBasePlayer *pPlayer ) {} // the client needs to be informed of the current game mode
|
||||||
|
|
||||||
|
// Client damage rules
|
||||||
|
virtual float FlPlayerFallDamage( CBasePlayer *pPlayer ) = 0;// this client just hit the ground after a fall. How much damage?
|
||||||
|
virtual BOOL FPlayerCanTakeDamage( CBasePlayer *pPlayer, CBaseEntity *pAttacker ) {return TRUE;};// can this player take damage from this attacker?
|
||||||
|
virtual BOOL ShouldAutoAim( CBasePlayer *pPlayer, edict_t *target ) { return TRUE; }
|
||||||
|
|
||||||
|
// Client spawn/respawn control
|
||||||
|
virtual void PlayerSpawn( CBasePlayer *pPlayer ) = 0;// called by CBasePlayer::Spawn just before releasing player into the game
|
||||||
|
virtual void PlayerThink( CBasePlayer *pPlayer ) = 0; // called by CBasePlayer::PreThink every frame, before physics are run and after keys are accepted
|
||||||
|
virtual BOOL FPlayerCanRespawn( CBasePlayer *pPlayer ) = 0;// is this player allowed to respawn now?
|
||||||
|
virtual float FlPlayerSpawnTime( CBasePlayer *pPlayer ) = 0;// When in the future will this player be able to spawn?
|
||||||
|
virtual edict_t *GetPlayerSpawnSpot( CBasePlayer *pPlayer );// Place this player on their spawnspot and face them the proper direction.
|
||||||
|
|
||||||
|
virtual BOOL AllowAutoTargetCrosshair( void ) { return TRUE; };
|
||||||
|
virtual BOOL ClientCommand( CBasePlayer *pPlayer, const char *pcmd ) { return FALSE; }; // handles the user commands; returns TRUE if command handled properly
|
||||||
|
virtual void ClientUserInfoChanged( CBasePlayer *pPlayer, char *infobuffer ) {} // the player has changed userinfo; can change it now
|
||||||
|
|
||||||
|
// Client kills/scoring
|
||||||
|
virtual int IPointsForKill( CBasePlayer *pAttacker, CBasePlayer *pKilled ) = 0;// how many points do I award whoever kills this player?
|
||||||
|
virtual void PlayerKilled( CBasePlayer *pVictim, entvars_t *pKiller, entvars_t *pInflictor ) = 0;// Called each time a player dies
|
||||||
|
virtual void DeathNotice( CBasePlayer *pVictim, entvars_t *pKiller, entvars_t *pInflictor )= 0;// Call this from within a GameRules class to report an obituary.
|
||||||
|
// Weapon retrieval
|
||||||
|
virtual BOOL CanHavePlayerItem( CBasePlayer *pPlayer, CBasePlayerItem *pWeapon );// The player is touching an CBasePlayerItem, do I give it to him?
|
||||||
|
virtual void PlayerGotWeapon( CBasePlayer *pPlayer, CBasePlayerItem *pWeapon ) = 0;// Called each time a player picks up a weapon from the ground
|
||||||
|
|
||||||
|
// Weapon spawn/respawn control
|
||||||
|
virtual int WeaponShouldRespawn( CBasePlayerItem *pWeapon ) = 0;// should this weapon respawn?
|
||||||
|
virtual float FlWeaponRespawnTime( CBasePlayerItem *pWeapon ) = 0;// when may this weapon respawn?
|
||||||
|
virtual float FlWeaponTryRespawn( CBasePlayerItem *pWeapon ) = 0; // can i respawn now, and if not, when should i try again?
|
||||||
|
virtual Vector VecWeaponRespawnSpot( CBasePlayerItem *pWeapon ) = 0;// where in the world should this weapon respawn?
|
||||||
|
|
||||||
|
// Item retrieval
|
||||||
|
virtual BOOL CanHaveItem( CBasePlayer *pPlayer, CItem *pItem ) = 0;// is this player allowed to take this item?
|
||||||
|
virtual void PlayerGotItem( CBasePlayer *pPlayer, CItem *pItem ) = 0;// call each time a player picks up an item (battery, healthkit, longjump)
|
||||||
|
|
||||||
|
// Item spawn/respawn control
|
||||||
|
virtual int ItemShouldRespawn( CItem *pItem ) = 0;// Should this item respawn?
|
||||||
|
virtual float FlItemRespawnTime( CItem *pItem ) = 0;// when may this item respawn?
|
||||||
|
virtual Vector VecItemRespawnSpot( CItem *pItem ) = 0;// where in the world should this item respawn?
|
||||||
|
|
||||||
|
// Ammo retrieval
|
||||||
|
virtual BOOL CanHaveAmmo( CBasePlayer *pPlayer, const char *pszAmmoName, int iMaxCarry );// can this player take more of this ammo?
|
||||||
|
virtual void PlayerGotAmmo( CBasePlayer *pPlayer, char *szName, int iCount ) = 0;// called each time a player picks up some ammo in the world
|
||||||
|
|
||||||
|
// Ammo spawn/respawn control
|
||||||
|
virtual int AmmoShouldRespawn( CBasePlayerAmmo *pAmmo ) = 0;// should this ammo item respawn?
|
||||||
|
virtual float FlAmmoRespawnTime( CBasePlayerAmmo *pAmmo ) = 0;// when should this ammo item respawn?
|
||||||
|
virtual Vector VecAmmoRespawnSpot( CBasePlayerAmmo *pAmmo ) = 0;// where in the world should this ammo item respawn?
|
||||||
|
// by default, everything spawns
|
||||||
|
|
||||||
|
// Healthcharger respawn control
|
||||||
|
virtual float FlHealthChargerRechargeTime( void ) = 0;// how long until a depleted HealthCharger recharges itself?
|
||||||
|
virtual float FlHEVChargerRechargeTime( void ) { return 0; }// how long until a depleted HealthCharger recharges itself?
|
||||||
|
|
||||||
|
// What happens to a dead player's weapons
|
||||||
|
virtual int DeadPlayerWeapons( CBasePlayer *pPlayer ) = 0;// what do I do with a player's weapons when he's killed?
|
||||||
|
|
||||||
|
// What happens to a dead player's ammo
|
||||||
|
virtual int DeadPlayerAmmo( CBasePlayer *pPlayer ) = 0;// Do I drop ammo when the player dies? How much?
|
||||||
|
|
||||||
|
// Teamplay stuff
|
||||||
|
virtual const char *GetTeamID( CBaseEntity *pEntity ) = 0;// what team is this entity on?
|
||||||
|
virtual int PlayerRelationship( CBaseEntity *pPlayer, CBaseEntity *pTarget ) = 0;// What is the player's relationship with this entity?
|
||||||
|
virtual int GetTeamIndex( const char *pTeamName ) { return -1; }
|
||||||
|
virtual const char *GetIndexedTeamName( int teamIndex ) { return ""; }
|
||||||
|
virtual BOOL IsValidTeam( const char *pTeamName ) { return TRUE; }
|
||||||
|
virtual void ChangePlayerTeam( CBasePlayer *pPlayer, const char *pTeamName, BOOL bKill, BOOL bGib ) {}
|
||||||
|
virtual const char *SetDefaultPlayerTeam( CBasePlayer *pPlayer ) { return ""; }
|
||||||
|
|
||||||
|
// Sounds
|
||||||
|
virtual BOOL PlayTextureSounds( void ) { return TRUE; }
|
||||||
|
virtual BOOL PlayFootstepSounds( CBasePlayer *pl, float fvol ) { return TRUE; }
|
||||||
|
|
||||||
|
// Monsters
|
||||||
|
virtual BOOL FAllowMonsters( void ) = 0;//are monsters allowed
|
||||||
|
|
||||||
|
// Immediately end a multiplayer game
|
||||||
|
virtual void EndMultiplayerGame( void ) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
extern CGameRules *InstallGameRules( void );
|
||||||
|
|
||||||
|
|
||||||
|
//=========================================================
|
||||||
|
// CHalfLifeRules - rules for the single player Half-Life
|
||||||
|
// game.
|
||||||
|
//=========================================================
|
||||||
|
class CHalfLifeRules : public CGameRules
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CHalfLifeRules ( void );
|
||||||
|
|
||||||
|
// GR_Think
|
||||||
|
virtual void Think( void );
|
||||||
|
virtual BOOL IsAllowedToSpawn( CBaseEntity *pEntity );
|
||||||
|
virtual BOOL FAllowFlashlight( void ) { return TRUE; };
|
||||||
|
|
||||||
|
virtual BOOL FShouldSwitchWeapon( CBasePlayer *pPlayer, CBasePlayerItem *pWeapon );
|
||||||
|
virtual BOOL GetNextBestWeapon( CBasePlayer *pPlayer, CBasePlayerItem *pCurrentWeapon );
|
||||||
|
|
||||||
|
// Functions to verify the single/multiplayer status of a game
|
||||||
|
virtual BOOL IsMultiplayer( void );
|
||||||
|
virtual BOOL IsDeathmatch( void );
|
||||||
|
virtual BOOL IsCoOp( void );
|
||||||
|
|
||||||
|
// Client connection/disconnection
|
||||||
|
virtual BOOL ClientConnected( edict_t *pEntity, const char *pszName, const char *pszAddress, char szRejectReason[ 128 ] );
|
||||||
|
virtual void InitHUD( CBasePlayer *pl ); // the client dll is ready for updating
|
||||||
|
virtual void ClientDisconnected( edict_t *pClient );
|
||||||
|
|
||||||
|
// Client damage rules
|
||||||
|
virtual float FlPlayerFallDamage( CBasePlayer *pPlayer );
|
||||||
|
|
||||||
|
// Client spawn/respawn control
|
||||||
|
virtual void PlayerSpawn( CBasePlayer *pPlayer );
|
||||||
|
virtual void PlayerThink( CBasePlayer *pPlayer );
|
||||||
|
virtual BOOL FPlayerCanRespawn( CBasePlayer *pPlayer );
|
||||||
|
virtual float FlPlayerSpawnTime( CBasePlayer *pPlayer );
|
||||||
|
|
||||||
|
virtual BOOL AllowAutoTargetCrosshair( void );
|
||||||
|
|
||||||
|
// Client kills/scoring
|
||||||
|
virtual int IPointsForKill( CBasePlayer *pAttacker, CBasePlayer *pKilled );
|
||||||
|
virtual void PlayerKilled( CBasePlayer *pVictim, entvars_t *pKiller, entvars_t *pInflictor );
|
||||||
|
virtual void DeathNotice( CBasePlayer *pVictim, entvars_t *pKiller, entvars_t *pInflictor );
|
||||||
|
|
||||||
|
// Weapon retrieval
|
||||||
|
virtual void PlayerGotWeapon( CBasePlayer *pPlayer, CBasePlayerItem *pWeapon );
|
||||||
|
|
||||||
|
// Weapon spawn/respawn control
|
||||||
|
virtual int WeaponShouldRespawn( CBasePlayerItem *pWeapon );
|
||||||
|
virtual float FlWeaponRespawnTime( CBasePlayerItem *pWeapon );
|
||||||
|
virtual float FlWeaponTryRespawn( CBasePlayerItem *pWeapon );
|
||||||
|
virtual Vector VecWeaponRespawnSpot( CBasePlayerItem *pWeapon );
|
||||||
|
|
||||||
|
// Item retrieval
|
||||||
|
virtual BOOL CanHaveItem( CBasePlayer *pPlayer, CItem *pItem );
|
||||||
|
virtual void PlayerGotItem( CBasePlayer *pPlayer, CItem *pItem );
|
||||||
|
|
||||||
|
// Item spawn/respawn control
|
||||||
|
virtual int ItemShouldRespawn( CItem *pItem );
|
||||||
|
virtual float FlItemRespawnTime( CItem *pItem );
|
||||||
|
virtual Vector VecItemRespawnSpot( CItem *pItem );
|
||||||
|
|
||||||
|
// Ammo retrieval
|
||||||
|
virtual void PlayerGotAmmo( CBasePlayer *pPlayer, char *szName, int iCount );
|
||||||
|
|
||||||
|
// Ammo spawn/respawn control
|
||||||
|
virtual int AmmoShouldRespawn( CBasePlayerAmmo *pAmmo );
|
||||||
|
virtual float FlAmmoRespawnTime( CBasePlayerAmmo *pAmmo );
|
||||||
|
virtual Vector VecAmmoRespawnSpot( CBasePlayerAmmo *pAmmo );
|
||||||
|
|
||||||
|
// Healthcharger respawn control
|
||||||
|
virtual float FlHealthChargerRechargeTime( void );
|
||||||
|
|
||||||
|
// What happens to a dead player's weapons
|
||||||
|
virtual int DeadPlayerWeapons( CBasePlayer *pPlayer );
|
||||||
|
|
||||||
|
// What happens to a dead player's ammo
|
||||||
|
virtual int DeadPlayerAmmo( CBasePlayer *pPlayer );
|
||||||
|
|
||||||
|
// Monsters
|
||||||
|
virtual BOOL FAllowMonsters( void );
|
||||||
|
|
||||||
|
// Teamplay stuff
|
||||||
|
virtual const char *GetTeamID( CBaseEntity *pEntity ) {return "";};
|
||||||
|
virtual int PlayerRelationship( CBaseEntity *pPlayer, CBaseEntity *pTarget );
|
||||||
|
};
|
||||||
|
|
||||||
|
//=========================================================
|
||||||
|
// CHalfLifeMultiplay - rules for the basic half life multiplayer
|
||||||
|
// competition
|
||||||
|
//=========================================================
|
||||||
|
class CHalfLifeMultiplay : public CGameRules
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CHalfLifeMultiplay();
|
||||||
|
|
||||||
|
// GR_Think
|
||||||
|
virtual void Think( void );
|
||||||
|
virtual void RefreshSkillData( void );
|
||||||
|
virtual BOOL IsAllowedToSpawn( CBaseEntity *pEntity );
|
||||||
|
virtual BOOL FAllowFlashlight( void );
|
||||||
|
|
||||||
|
virtual BOOL FShouldSwitchWeapon( CBasePlayer *pPlayer, CBasePlayerItem *pWeapon );
|
||||||
|
virtual BOOL GetNextBestWeapon( CBasePlayer *pPlayer, CBasePlayerItem *pCurrentWeapon );
|
||||||
|
|
||||||
|
// Functions to verify the single/multiplayer status of a game
|
||||||
|
virtual BOOL IsMultiplayer( void );
|
||||||
|
virtual BOOL IsDeathmatch( void );
|
||||||
|
virtual BOOL IsCoOp( void );
|
||||||
|
|
||||||
|
// Client connection/disconnection
|
||||||
|
// If ClientConnected returns FALSE, the connection is rejected and the user is provided the reason specified in
|
||||||
|
// svRejectReason
|
||||||
|
// Only the client's name and remote address are provided to the dll for verification.
|
||||||
|
virtual BOOL ClientConnected( edict_t *pEntity, const char *pszName, const char *pszAddress, char szRejectReason[ 128 ] );
|
||||||
|
virtual void InitHUD( CBasePlayer *pl ); // the client dll is ready for updating
|
||||||
|
virtual void ClientDisconnected( edict_t *pClient );
|
||||||
|
virtual void UpdateGameMode( CBasePlayer *pPlayer ); // the client needs to be informed of the current game mode
|
||||||
|
|
||||||
|
// Client damage rules
|
||||||
|
virtual float FlPlayerFallDamage( CBasePlayer *pPlayer );
|
||||||
|
virtual BOOL FPlayerCanTakeDamage( CBasePlayer *pPlayer, CBaseEntity *pAttacker );
|
||||||
|
|
||||||
|
// Client spawn/respawn control
|
||||||
|
virtual void PlayerSpawn( CBasePlayer *pPlayer );
|
||||||
|
virtual void PlayerThink( CBasePlayer *pPlayer );
|
||||||
|
virtual BOOL FPlayerCanRespawn( CBasePlayer *pPlayer );
|
||||||
|
virtual float FlPlayerSpawnTime( CBasePlayer *pPlayer );
|
||||||
|
virtual edict_t *GetPlayerSpawnSpot( CBasePlayer *pPlayer );
|
||||||
|
|
||||||
|
virtual BOOL AllowAutoTargetCrosshair( void );
|
||||||
|
virtual BOOL ClientCommand( CBasePlayer *pPlayer, const char *pcmd );
|
||||||
|
|
||||||
|
// Client kills/scoring
|
||||||
|
virtual int IPointsForKill( CBasePlayer *pAttacker, CBasePlayer *pKilled );
|
||||||
|
virtual void PlayerKilled( CBasePlayer *pVictim, entvars_t *pKiller, entvars_t *pInflictor );
|
||||||
|
virtual void DeathNotice( CBasePlayer *pVictim, entvars_t *pKiller, entvars_t *pInflictor );
|
||||||
|
|
||||||
|
// Weapon retrieval
|
||||||
|
virtual void PlayerGotWeapon( CBasePlayer *pPlayer, CBasePlayerItem *pWeapon );
|
||||||
|
virtual BOOL CanHavePlayerItem( CBasePlayer *pPlayer, CBasePlayerItem *pWeapon );// The player is touching an CBasePlayerItem, do I give it to him?
|
||||||
|
|
||||||
|
// Weapon spawn/respawn control
|
||||||
|
virtual int WeaponShouldRespawn( CBasePlayerItem *pWeapon );
|
||||||
|
virtual float FlWeaponRespawnTime( CBasePlayerItem *pWeapon );
|
||||||
|
virtual float FlWeaponTryRespawn( CBasePlayerItem *pWeapon );
|
||||||
|
virtual Vector VecWeaponRespawnSpot( CBasePlayerItem *pWeapon );
|
||||||
|
|
||||||
|
// Item retrieval
|
||||||
|
virtual BOOL CanHaveItem( CBasePlayer *pPlayer, CItem *pItem );
|
||||||
|
virtual void PlayerGotItem( CBasePlayer *pPlayer, CItem *pItem );
|
||||||
|
|
||||||
|
// Item spawn/respawn control
|
||||||
|
virtual int ItemShouldRespawn( CItem *pItem );
|
||||||
|
virtual float FlItemRespawnTime( CItem *pItem );
|
||||||
|
virtual Vector VecItemRespawnSpot( CItem *pItem );
|
||||||
|
|
||||||
|
// Ammo retrieval
|
||||||
|
virtual void PlayerGotAmmo( CBasePlayer *pPlayer, char *szName, int iCount );
|
||||||
|
|
||||||
|
// Ammo spawn/respawn control
|
||||||
|
virtual int AmmoShouldRespawn( CBasePlayerAmmo *pAmmo );
|
||||||
|
virtual float FlAmmoRespawnTime( CBasePlayerAmmo *pAmmo );
|
||||||
|
virtual Vector VecAmmoRespawnSpot( CBasePlayerAmmo *pAmmo );
|
||||||
|
|
||||||
|
// Healthcharger respawn control
|
||||||
|
virtual float FlHealthChargerRechargeTime( void );
|
||||||
|
virtual float FlHEVChargerRechargeTime( void );
|
||||||
|
|
||||||
|
// What happens to a dead player's weapons
|
||||||
|
virtual int DeadPlayerWeapons( CBasePlayer *pPlayer );
|
||||||
|
|
||||||
|
// What happens to a dead player's ammo
|
||||||
|
virtual int DeadPlayerAmmo( CBasePlayer *pPlayer );
|
||||||
|
|
||||||
|
// Teamplay stuff
|
||||||
|
virtual const char *GetTeamID( CBaseEntity *pEntity ) {return "";}
|
||||||
|
virtual int PlayerRelationship( CBaseEntity *pPlayer, CBaseEntity *pTarget );
|
||||||
|
|
||||||
|
virtual BOOL PlayTextureSounds( void ) { return FALSE; }
|
||||||
|
virtual BOOL PlayFootstepSounds( CBasePlayer *pl, float fvol );
|
||||||
|
|
||||||
|
// Monsters
|
||||||
|
virtual BOOL FAllowMonsters( void );
|
||||||
|
|
||||||
|
// Immediately end a multiplayer game
|
||||||
|
virtual void EndMultiplayerGame( void ) { GoToIntermission(); }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void ChangeLevel( void );
|
||||||
|
virtual void GoToIntermission( void );
|
||||||
|
float m_flIntermissionEndTime;
|
||||||
|
BOOL m_iEndIntermissionButtonHit;
|
||||||
|
void SendMOTDToClient( edict_t *client );
|
||||||
|
};
|
||||||
|
|
||||||
|
extern DLL_GLOBAL CGameRules* g_pGameRules;
|
58
metamod/extra/example/include/hlsdk/dlls/hornet.h
Normal file
58
metamod/extra/example/include/hlsdk/dlls/hornet.h
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
//=========================================================
|
||||||
|
// Hornets
|
||||||
|
//=========================================================
|
||||||
|
|
||||||
|
//=========================================================
|
||||||
|
// Hornet Defines
|
||||||
|
//=========================================================
|
||||||
|
#define HORNET_TYPE_RED 0
|
||||||
|
#define HORNET_TYPE_ORANGE 1
|
||||||
|
#define HORNET_RED_SPEED (float)600
|
||||||
|
#define HORNET_ORANGE_SPEED (float)800
|
||||||
|
#define HORNET_BUZZ_VOLUME (float)0.8
|
||||||
|
|
||||||
|
extern int iHornetPuff;
|
||||||
|
|
||||||
|
//=========================================================
|
||||||
|
// Hornet - this is the projectile that the Alien Grunt fires.
|
||||||
|
//=========================================================
|
||||||
|
class CHornet : public CBaseMonster
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void Spawn( void );
|
||||||
|
void Precache( void );
|
||||||
|
int Classify ( void );
|
||||||
|
int IRelationship ( CBaseEntity *pTarget );
|
||||||
|
virtual int Save( CSave &save );
|
||||||
|
virtual int Restore( CRestore &restore );
|
||||||
|
static TYPEDESCRIPTION m_SaveData[];
|
||||||
|
|
||||||
|
void IgniteTrail( void );
|
||||||
|
void EXPORT StartTrack ( void );
|
||||||
|
void EXPORT StartDart ( void );
|
||||||
|
void EXPORT TrackTarget ( void );
|
||||||
|
void EXPORT TrackTouch ( CBaseEntity *pOther );
|
||||||
|
void EXPORT DartTouch( CBaseEntity *pOther );
|
||||||
|
void EXPORT DieTouch ( CBaseEntity *pOther );
|
||||||
|
|
||||||
|
int TakeDamage( entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType );
|
||||||
|
|
||||||
|
float m_flStopAttack;
|
||||||
|
int m_iHornetType;
|
||||||
|
float m_flFlySpeed;
|
||||||
|
};
|
||||||
|
|
29
metamod/extra/example/include/hlsdk/dlls/items.h
Normal file
29
metamod/extra/example/include/hlsdk/dlls/items.h
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#ifndef ITEMS_H
|
||||||
|
#define ITEMS_H
|
||||||
|
|
||||||
|
|
||||||
|
class CItem : public CBaseEntity
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void Spawn( void );
|
||||||
|
CBaseEntity* Respawn( void );
|
||||||
|
void EXPORT ItemTouch( CBaseEntity *pOther );
|
||||||
|
void EXPORT Materialize( void );
|
||||||
|
virtual BOOL MyTouch( CBasePlayer *pPlayer ) { return FALSE; };
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // ITEMS_H
|
22
metamod/extra/example/include/hlsdk/dlls/maprules.h
Normal file
22
metamod/extra/example/include/hlsdk/dlls/maprules.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
|
||||||
|
#ifndef MAPRULES_H
|
||||||
|
#define MAPRULES_H
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // MAPRULES_H
|
||||||
|
|
34
metamod/extra/example/include/hlsdk/dlls/monsterevent.h
Normal file
34
metamod/extra/example/include/hlsdk/dlls/monsterevent.h
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* This product contains software technology licensed from Id
|
||||||
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
|
* object code is restricted to non-commercial enhancements to products from
|
||||||
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||||
|
* without written permission from Valve LLC.
|
||||||
|
*
|
||||||
|
****/
|
||||||
|
#ifndef MONSTEREVENT_H
|
||||||
|
#define MONSTEREVENT_H
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int event;
|
||||||
|
char *options;
|
||||||
|
} MonsterEvent_t;
|
||||||
|
|
||||||
|
#define EVENT_SPECIFIC 0
|
||||||
|
#define EVENT_SCRIPTED 1000
|
||||||
|
#define EVENT_SHARED 2000
|
||||||
|
#define EVENT_CLIENT 5000
|
||||||
|
|
||||||
|
#define MONSTER_EVENT_BODYDROP_LIGHT 2001
|
||||||
|
#define MONSTER_EVENT_BODYDROP_HEAVY 2002
|
||||||
|
|
||||||
|
#define MONSTER_EVENT_SWISHSOUND 2010
|
||||||
|
|
||||||
|
#endif // MONSTEREVENT_H
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user