mirror of
https://github.com/rehlds/metamod-r.git
synced 2025-01-27 14:08:23 +03:00
Update rehlsdk up to 3.3
This commit is contained in:
parent
95f636a4dd
commit
94df0af371
@ -28,7 +28,6 @@
|
||||
|
||||
#include "precompiled.h"
|
||||
|
||||
|
||||
BaseSystemModule::BaseSystemModule()
|
||||
{
|
||||
m_System = nullptr;
|
||||
@ -36,7 +35,7 @@ BaseSystemModule::BaseSystemModule()
|
||||
m_SystemTime = 0;
|
||||
m_State = MODULE_UNDEFINED;
|
||||
|
||||
memset(m_Name, 0, sizeof(m_Name));
|
||||
Q_memset(m_Name, 0, sizeof(m_Name));
|
||||
}
|
||||
|
||||
char *BaseSystemModule::GetName()
|
||||
@ -87,7 +86,7 @@ bool BaseSystemModule::Init(IBaseSystem *system, int serial, char *name)
|
||||
m_SystemTime = 0;
|
||||
|
||||
if (name) {
|
||||
strcopy(m_Name, name);
|
||||
Q_strlcpy(m_Name, name);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -35,28 +35,10 @@
|
||||
class IBaseSystem;
|
||||
class ISystemModule;
|
||||
|
||||
class IEngineWrapper {
|
||||
class IEngineWrapper: virtual public ISystemModule {
|
||||
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;
|
||||
|
@ -34,7 +34,7 @@ ObjectDictionary::ObjectDictionary()
|
||||
m_findKey = 0;
|
||||
m_entries = nullptr;
|
||||
|
||||
memset(m_cache, 0, sizeof(m_cache));
|
||||
Q_memset(m_cache, 0, sizeof(m_cache));
|
||||
|
||||
m_cacheIndex = 0;
|
||||
m_size = 0;
|
||||
@ -163,7 +163,7 @@ int ObjectDictionary::FindClosestAsIndex(float key)
|
||||
|
||||
void ObjectDictionary::ClearCache()
|
||||
{
|
||||
memset(m_cache, 0, sizeof(m_cache));
|
||||
Q_memset(m_cache, 0, sizeof(m_cache));
|
||||
m_cacheIndex = 0;
|
||||
}
|
||||
|
||||
@ -285,11 +285,11 @@ bool ObjectDictionary::CheckSize()
|
||||
if (!newEntries)
|
||||
return false;
|
||||
|
||||
memset(&newEntries[m_size], 0, sizeof(entry_t) * (newSize - m_size));
|
||||
Q_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);
|
||||
Q_memcpy(newEntries, m_entries, sizeof(entry_t) * m_size);
|
||||
Mem_Free(m_entries);
|
||||
}
|
||||
|
||||
|
@ -55,7 +55,7 @@ void LaunchSelfViaSteam(const char *params)
|
||||
::GetModuleFileName((HINSTANCE)GetModuleHandle(NULL), appPath, sizeof(appPath));
|
||||
|
||||
// strip out the exe name
|
||||
char *slash = strrchr(appPath, '\\');
|
||||
char *slash = Q_strrchr(appPath, '\\');
|
||||
if (slash)
|
||||
{
|
||||
*slash = '\0';
|
||||
@ -66,9 +66,9 @@ void LaunchSelfViaSteam(const char *params)
|
||||
if (ERROR_SUCCESS == RegOpenKey(HKEY_CURRENT_USER, "Software\\Valve\\Steam", &hKey))
|
||||
{
|
||||
DWORD dwType = REG_SZ;
|
||||
DWORD dwSize = static_cast<DWORD>( strlen(appPath) + 1 );
|
||||
DWORD dwSize = static_cast<DWORD>(Q_strlen(appPath) + 1);
|
||||
RegSetValueEx(hKey, "TempAppPath", NULL, dwType, (LPBYTE)appPath, dwSize);
|
||||
dwSize = static_cast<DWORD>( strlen(params) + 1 );
|
||||
dwSize = static_cast<DWORD>(Q_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;
|
||||
@ -93,38 +93,38 @@ void LaunchSelfViaSteam(const char *params)
|
||||
|
||||
if (::GetCurrentDirectoryA(sizeof(dir), dir))
|
||||
{
|
||||
char *slash = strrchr(dir, '\\');
|
||||
char *slash = Q_strrchr(dir, '\\');
|
||||
while (slash)
|
||||
{
|
||||
// see if steam_dev.exe is in the directory first
|
||||
slash[1] = 0;
|
||||
strcat(slash, "steam_dev.exe");
|
||||
slash[1] = '\0';
|
||||
Q_strcat(slash, "steam_dev.exe");
|
||||
FILE *f = fopen(dir, "rb");
|
||||
if (f)
|
||||
{
|
||||
// found it
|
||||
fclose(f);
|
||||
strcpy(steamExe, dir);
|
||||
Q_strcpy(steamExe, dir);
|
||||
break;
|
||||
}
|
||||
|
||||
// see if steam.exe is in the directory
|
||||
slash[1] = 0;
|
||||
strcat(slash, "steam.exe");
|
||||
slash[1] = '\0';
|
||||
Q_strcat(slash, "steam.exe");
|
||||
f = fopen(dir, "rb");
|
||||
if (f)
|
||||
{
|
||||
// found it
|
||||
fclose(f);
|
||||
strcpy(steamExe, dir);
|
||||
Q_strcpy(steamExe, dir);
|
||||
break;
|
||||
}
|
||||
|
||||
// kill the string at the slash
|
||||
slash[0] = 0;
|
||||
slash[0] = '\0';
|
||||
|
||||
// move to the previous slash
|
||||
slash = strrchr(dir, '\\');
|
||||
slash = Q_strrchr(dir, '\\');
|
||||
}
|
||||
}
|
||||
|
||||
@ -158,11 +158,11 @@ void LaunchSelfViaSteam(const char *params)
|
||||
}
|
||||
|
||||
// change to the steam directory
|
||||
strcpy(dir, steamExe);
|
||||
char *delimiter = strrchr(dir, '\\');
|
||||
Q_strcpy(dir, steamExe);
|
||||
char *delimiter = Q_strrchr(dir, '\\');
|
||||
if (delimiter)
|
||||
{
|
||||
*delimiter = 0;
|
||||
*delimiter = '\0';
|
||||
_chdir(dir);
|
||||
}
|
||||
|
||||
@ -176,12 +176,12 @@ void LaunchSelfViaSteam(const char *params)
|
||||
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);
|
||||
const char *steamStr = Q_strstr(lpCmdLine, STEAM_PARM);
|
||||
|
||||
// check the character following it is a whitespace or null
|
||||
if (steamStr)
|
||||
{
|
||||
const char *postChar = steamStr + strlen(STEAM_PARM);
|
||||
const char *postChar = steamStr + Q_strlen(STEAM_PARM);
|
||||
if (*postChar == 0 || isspace(*postChar))
|
||||
{
|
||||
// we're running under steam already, let the app continue
|
||||
|
@ -86,7 +86,7 @@ bool CTextConsoleUnix::Init(IBaseSystem *system)
|
||||
|
||||
tcgetattr(STDIN_FILENO, &termStored);
|
||||
|
||||
memcpy(&termNew, &termStored, sizeof(struct termios));
|
||||
Q_memcpy(&termNew, &termStored, sizeof(struct termios));
|
||||
|
||||
// Disable canonical mode, and set buffer size to 1 byte
|
||||
termNew.c_lflag &= (~ICANON);
|
||||
|
@ -219,9 +219,9 @@ void CTextConsoleWin32::PrintRaw(char *pszMsg, int nChars)
|
||||
return;
|
||||
|
||||
WideCharToMultiByte(CP_OEMCP, 0, unicodeStr, -1, outputStr, nLength, NULL, NULL);
|
||||
WriteFile(houtput, outputStr, nChars ? nChars : strlen(outputStr), NULL, NULL);
|
||||
WriteFile(houtput, outputStr, nChars ? nChars : Q_strlen(outputStr), NULL, NULL);
|
||||
#else
|
||||
WriteFile(houtput, pszMsg, nChars ? nChars : strlen(pszMsg), NULL, NULL);
|
||||
WriteFile(houtput, pszMsg, nChars ? nChars : Q_strlen(pszMsg), NULL, NULL);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -247,7 +247,7 @@ int CTextConsoleWin32::GetWidth()
|
||||
|
||||
void CTextConsoleWin32::SetStatusLine(char *pszStatus)
|
||||
{
|
||||
strncpy(statusline, pszStatus, sizeof(statusline) - 1);
|
||||
Q_strncpy(statusline, pszStatus, sizeof(statusline) - 1);
|
||||
statusline[sizeof(statusline) - 2] = '\0';
|
||||
UpdateStatus();
|
||||
}
|
||||
|
@ -2,9 +2,9 @@
|
||||
|
||||
TokenLine::TokenLine()
|
||||
{
|
||||
memset(m_token, 0, sizeof(m_token));
|
||||
memset(m_fullLine, 0, sizeof(m_fullLine));
|
||||
memset(m_tokenBuffer, 0, sizeof(m_tokenBuffer));
|
||||
Q_memset(m_token, 0, sizeof(m_token));
|
||||
Q_memset(m_fullLine, 0, sizeof(m_fullLine));
|
||||
Q_memset(m_tokenBuffer, 0, sizeof(m_tokenBuffer));
|
||||
|
||||
m_tokenNumber = 0;
|
||||
}
|
||||
@ -23,15 +23,15 @@ bool TokenLine::SetLine(const char *newLine)
|
||||
{
|
||||
m_tokenNumber = 0;
|
||||
|
||||
if (!newLine || (strlen(newLine) >= (MAX_LINE_CHARS - 1)))
|
||||
if (!newLine || (Q_strlen(newLine) >= (MAX_LINE_CHARS - 1)))
|
||||
{
|
||||
memset(m_fullLine, 0, sizeof(m_fullLine));
|
||||
memset(m_tokenBuffer, 0, sizeof(m_tokenBuffer));
|
||||
Q_memset(m_fullLine, 0, sizeof(m_fullLine));
|
||||
Q_memset(m_tokenBuffer, 0, sizeof(m_tokenBuffer));
|
||||
return false;
|
||||
}
|
||||
|
||||
strcopy(m_fullLine, newLine);
|
||||
strcopy(m_tokenBuffer, newLine);
|
||||
Q_strlcpy(m_fullLine, newLine);
|
||||
Q_strlcpy(m_tokenBuffer, newLine);
|
||||
|
||||
// parse tokens
|
||||
char *charPointer = m_tokenBuffer;
|
||||
@ -95,7 +95,7 @@ char *TokenLine::CheckToken(char *parm)
|
||||
if (!m_token[i])
|
||||
continue;
|
||||
|
||||
if (!strcmp(parm, m_token[i]))
|
||||
if (!Q_strcmp(parm, m_token[i]))
|
||||
{
|
||||
char *ret = m_token[i + 1];
|
||||
|
||||
|
@ -52,8 +52,8 @@ char *CopyString(const char *src)
|
||||
if (!src)
|
||||
return nullptr;
|
||||
|
||||
char *out = (char *)new char[strlen(src) + 1];
|
||||
strcpy(out, src);
|
||||
char *out = (char *)new char[Q_strlen(src) + 1];
|
||||
Q_strcpy(out, src);
|
||||
return out;
|
||||
}
|
||||
|
||||
@ -65,21 +65,21 @@ void CCommandLine::CreateCmdLine(int argc, const char *argv[])
|
||||
|
||||
for (int i = 0; i < argc; ++i)
|
||||
{
|
||||
if (strchr(argv[i], ' '))
|
||||
if (Q_strchr(argv[i], ' '))
|
||||
{
|
||||
strncat(cmdline, "\"", MAX_CHARS);
|
||||
strncat(cmdline, argv[i], MAX_CHARS);
|
||||
strncat(cmdline, "\"", MAX_CHARS);
|
||||
Q_strlcat(cmdline, "\"");
|
||||
Q_strlcat(cmdline, argv[i]);
|
||||
Q_strlcat(cmdline, "\"");
|
||||
}
|
||||
else
|
||||
{
|
||||
strncat(cmdline, argv[i], MAX_CHARS);
|
||||
Q_strlcat(cmdline, argv[i]);
|
||||
}
|
||||
|
||||
strncat(cmdline, " ", MAX_CHARS);
|
||||
Q_strlcat(cmdline, " ");
|
||||
}
|
||||
|
||||
cmdline[strlen(cmdline)] = '\0';
|
||||
cmdline[Q_strlen(cmdline)] = '\0';
|
||||
CreateCmdLine(cmdline);
|
||||
}
|
||||
|
||||
@ -184,9 +184,9 @@ void CCommandLine::CreateCmdLine(const char *commandline)
|
||||
|
||||
*pDst = '\0';
|
||||
|
||||
int len = strlen(szFull) + 1;
|
||||
int len = Q_strlen(szFull) + 1;
|
||||
m_pszCmdLine = new char[len];
|
||||
memcpy(m_pszCmdLine, szFull, len);
|
||||
Q_memcpy(m_pszCmdLine, szFull, len);
|
||||
}
|
||||
|
||||
// Purpose: Remove specified string ( and any args attached to it ) from command line
|
||||
@ -207,8 +207,8 @@ void CCommandLine::RemoveParm(const char *pszParm)
|
||||
p = m_pszCmdLine;
|
||||
while (*p)
|
||||
{
|
||||
curlen = strlen(p);
|
||||
found = strstr(p, pszParm);
|
||||
curlen = Q_strlen(p);
|
||||
found = Q_strstr(p, pszParm);
|
||||
|
||||
if (!found)
|
||||
break;
|
||||
@ -223,21 +223,21 @@ void CCommandLine::RemoveParm(const char *pszParm)
|
||||
// # of characters after this param.
|
||||
n = curlen - (pnextparam - p);
|
||||
|
||||
memcpy(found, pnextparam, n);
|
||||
Q_memcpy(found, pnextparam, n);
|
||||
found[n] = '\0';
|
||||
}
|
||||
else
|
||||
{
|
||||
// Clear out rest of string.
|
||||
n = pnextparam - found;
|
||||
memset(found, 0, n);
|
||||
Q_memset(found, 0, n);
|
||||
}
|
||||
}
|
||||
|
||||
// Strip and trailing ' ' characters left over.
|
||||
while (1)
|
||||
{
|
||||
int curpos = strlen(m_pszCmdLine);
|
||||
int curpos = Q_strlen(m_pszCmdLine);
|
||||
if (curpos == 0 || m_pszCmdLine[ curpos - 1 ] != ' ')
|
||||
break;
|
||||
|
||||
@ -252,11 +252,11 @@ void CCommandLine::AppendParm(const char *pszParm, const char *pszValues)
|
||||
char *pCmdString;
|
||||
|
||||
// Parameter.
|
||||
nNewLength = strlen(pszParm);
|
||||
nNewLength = Q_strlen(pszParm);
|
||||
|
||||
// Values + leading space character.
|
||||
if (pszValues)
|
||||
nNewLength += strlen(pszValues) + 1;
|
||||
nNewLength += Q_strlen(pszValues) + 1;
|
||||
|
||||
// Terminal 0;
|
||||
nNewLength++;
|
||||
@ -264,11 +264,11 @@ void CCommandLine::AppendParm(const char *pszParm, const char *pszValues)
|
||||
if (!m_pszCmdLine)
|
||||
{
|
||||
m_pszCmdLine = new char[ nNewLength ];
|
||||
strcpy(m_pszCmdLine, pszParm);
|
||||
Q_strcpy(m_pszCmdLine, pszParm);
|
||||
if (pszValues)
|
||||
{
|
||||
strcat(m_pszCmdLine, " ");
|
||||
strcat(m_pszCmdLine, pszValues);
|
||||
Q_strcat(m_pszCmdLine, " ");
|
||||
Q_strcat(m_pszCmdLine, pszValues);
|
||||
}
|
||||
|
||||
return;
|
||||
@ -277,19 +277,19 @@ void CCommandLine::AppendParm(const char *pszParm, const char *pszValues)
|
||||
// Remove any remnants from the current Cmd Line.
|
||||
RemoveParm(pszParm);
|
||||
|
||||
nNewLength += strlen(m_pszCmdLine) + 1 + 1;
|
||||
nNewLength += Q_strlen(m_pszCmdLine) + 1 + 1;
|
||||
|
||||
pCmdString = new char[ nNewLength ];
|
||||
memset(pCmdString, 0, nNewLength);
|
||||
Q_memset(pCmdString, 0, nNewLength);
|
||||
|
||||
strcpy(pCmdString, m_pszCmdLine); // Copy old command line.
|
||||
strcat(pCmdString, " "); // Put in a space
|
||||
strcat(pCmdString, pszParm);
|
||||
Q_strcpy(pCmdString, m_pszCmdLine); // Copy old command line.
|
||||
Q_strcat(pCmdString, " "); // Put in a space
|
||||
Q_strcat(pCmdString, pszParm);
|
||||
|
||||
if (pszValues)
|
||||
{
|
||||
strcat(pCmdString, " ");
|
||||
strcat(pCmdString, pszValues);
|
||||
Q_strcat(pCmdString, " ");
|
||||
Q_strcat(pCmdString, pszValues);
|
||||
}
|
||||
|
||||
// Kill off the old one
|
||||
@ -308,7 +308,7 @@ void CCommandLine::SetParm(const char *pszParm, const char *pszValues)
|
||||
void CCommandLine::SetParm(const char *pszParm, int iValue)
|
||||
{
|
||||
char buf[64];
|
||||
_snprintf(buf, sizeof(buf), "%d", iValue);
|
||||
Q_snprintf(buf, sizeof(buf), "%d", iValue);
|
||||
SetParm(pszParm, buf);
|
||||
}
|
||||
|
||||
@ -323,7 +323,7 @@ const char *CCommandLine::CheckParm(const char *psz, char **ppszValue) const
|
||||
if (ppszValue)
|
||||
*ppszValue = nullptr;
|
||||
|
||||
char *pret = strstr(m_pszCmdLine, psz);
|
||||
char *pret = Q_strstr(m_pszCmdLine, psz);
|
||||
if (!pret || !ppszValue)
|
||||
return pret;
|
||||
|
||||
|
@ -36,4 +36,15 @@ typedef struct cvar_s
|
||||
struct cvar_s *next;
|
||||
} cvar_t;
|
||||
|
||||
using cvar_callback_t = void (*)(const char *pszNewValue);
|
||||
|
||||
struct cvar_listener_t
|
||||
{
|
||||
cvar_listener_t(const char *var_name, cvar_callback_t handler) :
|
||||
func(handler), name(var_name) {}
|
||||
|
||||
cvar_callback_t func;
|
||||
const char *name;
|
||||
};
|
||||
|
||||
#endif // CVARDEF_H
|
||||
|
@ -33,14 +33,14 @@ bool CTextConsole::Init(IBaseSystem *system)
|
||||
// NULL or a valid base system interface
|
||||
m_System = system;
|
||||
|
||||
memset(m_szConsoleText, 0, sizeof(m_szConsoleText));
|
||||
Q_memset(m_szConsoleText, 0, sizeof(m_szConsoleText));
|
||||
m_nConsoleTextLen = 0;
|
||||
m_nCursorPosition = 0;
|
||||
|
||||
memset(m_szSavedConsoleText, 0, sizeof(m_szSavedConsoleText));
|
||||
Q_memset(m_szSavedConsoleText, 0, sizeof(m_szSavedConsoleText));
|
||||
m_nSavedConsoleTextLen = 0;
|
||||
|
||||
memset(m_aszLineBuffer, 0, sizeof(m_aszLineBuffer));
|
||||
Q_memset(m_aszLineBuffer, 0, sizeof(m_aszLineBuffer));
|
||||
m_nTotalLines = 0;
|
||||
m_nInputLine = 0;
|
||||
m_nBrowseLine = 0;
|
||||
@ -110,9 +110,9 @@ int CTextConsole::ReceiveNewline()
|
||||
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)))
|
||||
if ((m_nInputLine == 0) || (Q_strcmp(m_aszLineBuffer[ m_nInputLine - 1 ], m_szConsoleText)))
|
||||
{
|
||||
strncpy(m_aszLineBuffer[ m_nInputLine ], m_szConsoleText, MAX_CONSOLE_TEXTLEN);
|
||||
Q_strncpy(m_aszLineBuffer[ m_nInputLine ], m_szConsoleText, MAX_CONSOLE_TEXTLEN);
|
||||
m_nInputLine++;
|
||||
|
||||
if (m_nInputLine > m_nTotalLines)
|
||||
@ -176,16 +176,16 @@ void CTextConsole::ReceiveTab()
|
||||
if (matches.CountElements() == 1)
|
||||
{
|
||||
char *pszCmdName = (char *)matches.GetFirst();
|
||||
char *pszRest = pszCmdName + strlen(m_szConsoleText);
|
||||
char *pszRest = pszCmdName + Q_strlen(m_szConsoleText);
|
||||
|
||||
if (pszRest)
|
||||
{
|
||||
Echo(pszRest);
|
||||
strcat(m_szConsoleText, pszRest);
|
||||
m_nConsoleTextLen += strlen(pszRest);
|
||||
Q_strlcat(m_szConsoleText, pszRest);
|
||||
m_nConsoleTextLen += Q_strlen(pszRest);
|
||||
|
||||
Echo(" ");
|
||||
strcat(m_szConsoleText, " ");
|
||||
Q_strlcat(m_szConsoleText, " ");
|
||||
m_nConsoleTextLen++;
|
||||
}
|
||||
}
|
||||
@ -199,17 +199,17 @@ void CTextConsole::ReceiveTab()
|
||||
char szFormatCmd[256];
|
||||
char *pszSmallestCmd;
|
||||
char *pszCurrentCmd = (char *)matches.GetFirst();
|
||||
nSmallestCmd = strlen(pszCurrentCmd);
|
||||
nSmallestCmd = Q_strlen(pszCurrentCmd);
|
||||
pszSmallestCmd = pszCurrentCmd;
|
||||
while (pszCurrentCmd)
|
||||
{
|
||||
if ((int)strlen(pszCurrentCmd) > nLongestCmd)
|
||||
if ((int)Q_strlen(pszCurrentCmd) > nLongestCmd)
|
||||
{
|
||||
nLongestCmd = strlen(pszCurrentCmd);
|
||||
nLongestCmd = Q_strlen(pszCurrentCmd);
|
||||
}
|
||||
if ((int)strlen(pszCurrentCmd) < nSmallestCmd)
|
||||
if ((int)Q_strlen(pszCurrentCmd) < nSmallestCmd)
|
||||
{
|
||||
nSmallestCmd = strlen(pszCurrentCmd);
|
||||
nSmallestCmd = Q_strlen(pszCurrentCmd);
|
||||
pszSmallestCmd = pszCurrentCmd;
|
||||
}
|
||||
pszCurrentCmd = (char *)matches.GetNext();
|
||||
@ -231,7 +231,7 @@ void CTextConsole::ReceiveTab()
|
||||
nCurrentColumn = 1;
|
||||
}
|
||||
|
||||
_snprintf(szFormatCmd, sizeof(szFormatCmd), "%-*s ", nLongestCmd, pszCurrentCmd);
|
||||
Q_snprintf(szFormatCmd, sizeof(szFormatCmd), "%-*s ", nLongestCmd, pszCurrentCmd);
|
||||
Echo(szFormatCmd);
|
||||
for (char *pCur = pszCurrentCmd, *pCommon = szCommonCmd; (*pCur && *pCommon); pCur++, pCommon++)
|
||||
{
|
||||
@ -307,7 +307,7 @@ void CTextConsole::ReceiveUpArrow()
|
||||
if (m_nConsoleTextLen > 0)
|
||||
{
|
||||
// Save off current text
|
||||
strncpy(m_szSavedConsoleText, m_szConsoleText, m_nConsoleTextLen);
|
||||
Q_strncpy(m_szSavedConsoleText, m_szConsoleText, m_nConsoleTextLen);
|
||||
// No terminator, it's a raw buffer we always know the length of
|
||||
}
|
||||
|
||||
@ -329,9 +329,9 @@ void CTextConsole::ReceiveUpArrow()
|
||||
// copy buffered line
|
||||
Echo(m_aszLineBuffer[ m_nBrowseLine ]);
|
||||
|
||||
strncpy(m_szConsoleText, m_aszLineBuffer[ m_nBrowseLine ], MAX_CONSOLE_TEXTLEN);
|
||||
Q_strncpy(m_szConsoleText, m_aszLineBuffer[ m_nBrowseLine ], MAX_CONSOLE_TEXTLEN);
|
||||
|
||||
m_nConsoleTextLen = strlen(m_aszLineBuffer[ m_nBrowseLine ]);
|
||||
m_nConsoleTextLen = Q_strlen(m_aszLineBuffer[ m_nBrowseLine ]);
|
||||
m_nCursorPosition = m_nConsoleTextLen;
|
||||
}
|
||||
|
||||
@ -354,7 +354,7 @@ void CTextConsole::ReceiveDownArrow()
|
||||
if (m_nSavedConsoleTextLen > 0)
|
||||
{
|
||||
// Restore current text
|
||||
strncpy(m_szConsoleText, m_szSavedConsoleText, m_nSavedConsoleTextLen);
|
||||
Q_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);
|
||||
@ -366,8 +366,8 @@ void CTextConsole::ReceiveDownArrow()
|
||||
{
|
||||
// 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 ]);
|
||||
Q_strncpy(m_szConsoleText, m_aszLineBuffer[ m_nBrowseLine ], MAX_CONSOLE_TEXTLEN);
|
||||
m_nConsoleTextLen = Q_strlen(m_aszLineBuffer[ m_nBrowseLine ]);
|
||||
}
|
||||
|
||||
m_nCursorPosition = m_nConsoleTextLen;
|
||||
|
@ -1,43 +1,56 @@
|
||||
/***
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
* 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 product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
* 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
|
||||
|
||||
#ifndef ACTIVITY_H
|
||||
#define ACTIVITY_H
|
||||
typedef enum Activity_s
|
||||
{
|
||||
ACT_INVALID = -1,
|
||||
|
||||
|
||||
typedef enum {
|
||||
ACT_RESET = 0, // Set m_Activity to this invalid value to force a reset to m_IdealActivity
|
||||
ACT_IDLE = 1,
|
||||
ACT_IDLE,
|
||||
ACT_GUARD,
|
||||
ACT_WALK,
|
||||
ACT_RUN,
|
||||
ACT_FLY, // Fly (and flap if appropriate)
|
||||
ACT_FLY,
|
||||
ACT_SWIM,
|
||||
ACT_HOP, // vertical jump
|
||||
ACT_LEAP, // long forward jump
|
||||
ACT_HOP,
|
||||
ACT_LEAP,
|
||||
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_ROLL_LEFT,
|
||||
ACT_ROLL_RIGHT,
|
||||
ACT_TURN_LEFT,
|
||||
ACT_TURN_RIGHT,
|
||||
ACT_CROUCH,
|
||||
ACT_CROUCHIDLE,
|
||||
ACT_STAND,
|
||||
ACT_USE,
|
||||
ACT_SIGNAL1,
|
||||
ACT_SIGNAL2,
|
||||
@ -51,43 +64,43 @@ typedef enum {
|
||||
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_ARM,
|
||||
ACT_DISARM,
|
||||
ACT_EAT,
|
||||
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_BARNACLE_HIT,
|
||||
ACT_BARNACLE_PULL,
|
||||
ACT_BARNACLE_CHOMP,
|
||||
ACT_BARNACLE_CHEW,
|
||||
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_INSPECT_FLOOR,
|
||||
ACT_INSPECT_WALL,
|
||||
ACT_IDLE_ANGRY,
|
||||
ACT_WALK_HURT,
|
||||
ACT_RUN_HURT,
|
||||
ACT_HOVER,
|
||||
ACT_GLIDE,
|
||||
ACT_FLY_LEFT,
|
||||
ACT_FLY_RIGHT,
|
||||
ACT_DETECT_SCENT,
|
||||
ACT_SNIFF,
|
||||
ACT_BITE,
|
||||
ACT_THREAT_DISPLAY,
|
||||
ACT_FEAR_DISPLAY,
|
||||
ACT_EXCITED,
|
||||
ACT_SPECIAL_ATTACK1,
|
||||
ACT_SPECIAL_ATTACK2,
|
||||
ACT_COMBAT_IDLE, // agitated idle.
|
||||
ACT_COMBAT_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_VICTORY_DANCE,
|
||||
ACT_DIE_HEADSHOT,
|
||||
ACT_DIE_CHESTSHOT,
|
||||
ACT_DIE_GUTSHOT,
|
||||
ACT_DIE_BACKSHOT,
|
||||
ACT_FLINCH_HEAD,
|
||||
ACT_FLINCH_CHEST,
|
||||
ACT_FLINCH_STOMACH,
|
||||
@ -95,15 +108,38 @@ typedef enum {
|
||||
ACT_FLINCH_RIGHTARM,
|
||||
ACT_FLINCH_LEFTLEG,
|
||||
ACT_FLINCH_RIGHTLEG,
|
||||
ACT_FLINCH,
|
||||
ACT_LARGE_FLINCH,
|
||||
ACT_HOLDBOMB,
|
||||
ACT_IDLE_FIDGET,
|
||||
ACT_IDLE_SCARED,
|
||||
ACT_IDLE_SCARED_FIDGET,
|
||||
ACT_FOLLOW_IDLE,
|
||||
ACT_FOLLOW_IDLE_FIDGET,
|
||||
ACT_FOLLOW_IDLE_SCARED,
|
||||
ACT_FOLLOW_IDLE_SCARED_FIDGET,
|
||||
ACT_CROUCH_IDLE,
|
||||
ACT_CROUCH_IDLE_FIDGET,
|
||||
ACT_CROUCH_IDLE_SCARED,
|
||||
ACT_CROUCH_IDLE_SCARED_FIDGET,
|
||||
ACT_CROUCH_WALK,
|
||||
ACT_CROUCH_WALK_SCARED,
|
||||
ACT_CROUCH_DIE,
|
||||
ACT_WALK_BACK,
|
||||
ACT_IDLE_SNEAKY,
|
||||
ACT_IDLE_SNEAKY_FIDGET,
|
||||
ACT_WALK_SNEAKY,
|
||||
ACT_WAVE,
|
||||
ACT_YES,
|
||||
ACT_NO,
|
||||
|
||||
} Activity;
|
||||
|
||||
|
||||
typedef struct {
|
||||
typedef struct
|
||||
{
|
||||
int type;
|
||||
char *name;
|
||||
|
||||
} activity_map_t;
|
||||
|
||||
extern activity_map_t activity_map[];
|
||||
|
||||
|
||||
#endif //ACTIVITY_H
|
||||
|
@ -1,97 +1,111 @@
|
||||
/***
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
* 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 product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#define _A( a ) { a, #a }
|
||||
#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
|
||||
_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
|
||||
};
|
||||
|
42
metamod/extra/example/include/hlsdk/dlls/airtank.h
Normal file
42
metamod/extra/example/include/hlsdk/dlls/airtank.h
Normal file
@ -0,0 +1,42 @@
|
||||
/*
|
||||
*
|
||||
* 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 CAirtank: public CGrenade {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual void Killed(entvars_t *pevAttacker, int iGib) = 0;
|
||||
virtual int BloodColor() = 0;
|
||||
|
||||
int GetState() const { return m_state; }
|
||||
private:
|
||||
int m_state;
|
||||
};
|
98
metamod/extra/example/include/hlsdk/dlls/ammo.h
Normal file
98
metamod/extra/example/include/hlsdk/dlls/ammo.h
Normal file
@ -0,0 +1,98 @@
|
||||
/*
|
||||
*
|
||||
* 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 C9MMAmmo: public CBasePlayerAmmo {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual BOOL AddAmmo(CBaseEntity *pOther) = 0;
|
||||
};
|
||||
|
||||
class CBuckShotAmmo: public CBasePlayerAmmo {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual BOOL AddAmmo(CBaseEntity *pOther) = 0;
|
||||
};
|
||||
|
||||
class C556NatoAmmo: public CBasePlayerAmmo {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual BOOL AddAmmo(CBaseEntity *pOther) = 0;
|
||||
};
|
||||
|
||||
class C556NatoBoxAmmo: public CBasePlayerAmmo {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual BOOL AddAmmo(CBaseEntity *pOther) = 0;
|
||||
};
|
||||
|
||||
class C762NatoAmmo: public CBasePlayerAmmo {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual BOOL AddAmmo(CBaseEntity *pOther) = 0;
|
||||
};
|
||||
|
||||
class C45ACPAmmo: public CBasePlayerAmmo {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual BOOL AddAmmo(CBaseEntity *pOther) = 0;
|
||||
};
|
||||
|
||||
class C50AEAmmo: public CBasePlayerAmmo {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual BOOL AddAmmo(CBaseEntity *pOther) = 0;
|
||||
};
|
||||
|
||||
class C338MagnumAmmo: public CBasePlayerAmmo {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual BOOL AddAmmo(CBaseEntity *pOther) = 0;
|
||||
};
|
||||
|
||||
class C57MMAmmo: public CBasePlayerAmmo {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual BOOL AddAmmo(CBaseEntity *pOther) = 0;
|
||||
};
|
||||
|
||||
class C357SIGAmmo: public CBasePlayerAmmo {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual BOOL AddAmmo(CBaseEntity *pOther) = 0;
|
||||
};
|
@ -1,94 +1,105 @@
|
||||
/***
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
* 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 product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
* 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
|
||||
*
|
||||
****/
|
||||
#ifndef BASEMONSTER_H
|
||||
#define BASEMONSTER_H
|
||||
* 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 CBaseMonster : public CBaseToggle
|
||||
#include "activity.h"
|
||||
|
||||
class EHANDLE;
|
||||
|
||||
enum MONSTERSTATE
|
||||
{
|
||||
MONSTERSTATE_NONE = 0,
|
||||
MONSTERSTATE_IDLE,
|
||||
MONSTERSTATE_COMBAT,
|
||||
MONSTERSTATE_ALERT,
|
||||
MONSTERSTATE_HUNT,
|
||||
MONSTERSTATE_PRONE,
|
||||
MONSTERSTATE_SCRIPT,
|
||||
MONSTERSTATE_PLAYDEAD,
|
||||
MONSTERSTATE_DEAD
|
||||
};
|
||||
|
||||
class CBaseToggle;
|
||||
class CBaseMonster: public CBaseToggle {
|
||||
public:
|
||||
Activity m_Activity;// what the monster is doing (animation)
|
||||
Activity m_IdealActivity;// monster should switch to this activity
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual void TraceAttack(entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType) = 0;
|
||||
virtual BOOL TakeDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType) = 0;
|
||||
virtual BOOL TakeHealth(float flHealth, int bitsDamageType) = 0;
|
||||
virtual void Killed(entvars_t *pevAttacker, int iGib) = 0;
|
||||
virtual int BloodColor() = 0;
|
||||
virtual BOOL IsAlive() = 0;
|
||||
virtual float ChangeYaw(int speed) = 0;
|
||||
virtual BOOL HasHumanGibs() = 0;
|
||||
virtual BOOL HasAlienGibs() = 0;
|
||||
virtual void FadeMonster() = 0;
|
||||
virtual void GibMonster() = 0;
|
||||
virtual Activity GetDeathActivity() = 0;
|
||||
virtual void BecomeDead() = 0;
|
||||
virtual BOOL ShouldFadeOnDeath() = 0;
|
||||
virtual int IRelationship(CBaseEntity *pTarget) = 0;
|
||||
virtual void PainSound() = 0;
|
||||
virtual void ResetMaxSpeed() = 0;
|
||||
virtual void ReportAIState() = 0;
|
||||
virtual void MonsterInitDead() = 0;
|
||||
virtual void Look(int iDistance) = 0;
|
||||
virtual CBaseEntity *BestVisibleEnemy() = 0;
|
||||
virtual BOOL FInViewCone(CBaseEntity *pEntity) = 0;
|
||||
virtual BOOL FInViewCone(const Vector *pOrigin) = 0;
|
||||
public:
|
||||
void SetConditions(int iConditions) { m_afConditions |= iConditions; }
|
||||
void ClearConditions(int iConditions) { m_afConditions &= ~iConditions; }
|
||||
BOOL HasConditions(int iConditions) { return (m_afConditions & iConditions) ? TRUE : FALSE; }
|
||||
BOOL HasAllConditions(int iConditions) { return ((m_afConditions & iConditions) == iConditions) ? TRUE : FALSE; }
|
||||
|
||||
void Remember(int iMemory) { m_afMemory |= iMemory; }
|
||||
void Forget(int iMemory) { m_afMemory &= ~iMemory; }
|
||||
BOOL HasMemory(int iMemory) { return (m_afMemory & iMemory) ? TRUE : FALSE; }
|
||||
BOOL HasAllMemories(int iMemory) { return ((m_afMemory & iMemory) == iMemory) ? TRUE : FALSE; }
|
||||
|
||||
void StopAnimation() { pev->framerate = 0.0f; }
|
||||
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
|
||||
byte m_rgbTimeBasedDamage[8];
|
||||
|
||||
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 )
|
||||
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); }
|
||||
|
||||
Vector m_vecEnemyLKP; // last known position of enemy. (enemy's origin)
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
150
metamod/extra/example/include/hlsdk/dlls/bmodels.h
Normal file
150
metamod/extra/example/include/hlsdk/dlls/bmodels.h
Normal file
@ -0,0 +1,150 @@
|
||||
/*
|
||||
*
|
||||
* 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
|
||||
|
||||
// func_rotating
|
||||
#define SF_BRUSH_ROTATE_Y_AXIS 0
|
||||
#define SF_BRUSH_ROTATE_INSTANT 1
|
||||
#define SF_BRUSH_ROTATE_BACKWARDS 2
|
||||
#define SF_BRUSH_ROTATE_Z_AXIS 4
|
||||
#define SF_BRUSH_ROTATE_X_AXIS 8
|
||||
|
||||
#define SF_BRUSH_ACCDCC 16 // brush should accelerate and decelerate when toggled
|
||||
#define SF_BRUSH_HURT 32 // rotating brush that inflicts pain based on rotation speed
|
||||
|
||||
#define SF_ROTATING_NOT_SOLID 64 // some special rotating objects are not solid.
|
||||
|
||||
#define SF_BRUSH_ROTATE_SMALLRADIUS 128
|
||||
#define SF_BRUSH_ROTATE_MEDIUMRADIUS 256
|
||||
#define SF_BRUSH_ROTATE_LARGERADIUS 512
|
||||
|
||||
#define FANPITCHMIN 30
|
||||
#define FANPITCHMAX 100
|
||||
|
||||
// func_pendulum
|
||||
#define SF_PENDULUM_SWING 2 // spawnflag that makes a pendulum a rope swing.
|
||||
#define SF_PENDULUM_AUTO_RETURN 16
|
||||
#define SF_PENDULUM_PASSABLE 32
|
||||
|
||||
// func_wall_toggle
|
||||
#define SF_WALL_START_OFF 0x0001
|
||||
#define SF_WALL_NOTSOLID 0x0008
|
||||
|
||||
// func_conveyor
|
||||
#define SF_CONVEYOR_VISUAL 0x0001
|
||||
#define SF_CONVEYOR_NOTSOLID 0x0002
|
||||
|
||||
// This is just a solid wall if not inhibited
|
||||
class CFuncWall: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
|
||||
// Bmodels don't go across transitions
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
};
|
||||
|
||||
class CFuncWallToggle: public CFuncWall {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Restart() = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
};
|
||||
|
||||
class CFuncConveyor: public CFuncWall {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
};
|
||||
|
||||
// A simple entity that looks solid but lets you walk through it.
|
||||
class CFuncIllusionary: public CBaseToggle {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
};
|
||||
|
||||
// Monster only clip brush
|
||||
//
|
||||
// This brush will be solid for any entity who has the FL_MONSTERCLIP flag set
|
||||
// in pev->flags
|
||||
//
|
||||
// otherwise it will be invisible and not solid. This can be used to keep
|
||||
// specific monsters out of certain areas
|
||||
class CFuncMonsterClip: public CFuncWall {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
|
||||
// Clear out func_wall's use function
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
};
|
||||
|
||||
class CFuncRotating: public CBaseEntity {
|
||||
public:
|
||||
// basic functions
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void Restart() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual void Blocked(CBaseEntity *pOther) = 0;
|
||||
public:
|
||||
|
||||
float m_flFanFriction;
|
||||
float m_flAttenuation;
|
||||
float m_flVolume;
|
||||
float m_pitch;
|
||||
int m_sounds;
|
||||
|
||||
Vector m_angles;
|
||||
};
|
||||
|
||||
class CPendulum: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual void Touch(CBaseEntity *pOther) = 0;
|
||||
virtual void Blocked(CBaseEntity *pOther) = 0;
|
||||
public:
|
||||
float m_accel; // Acceleration
|
||||
float m_distance;
|
||||
float m_time;
|
||||
float m_damp;
|
||||
float m_maxSpeed;
|
||||
float m_dampSpeed;
|
||||
|
||||
Vector m_center;
|
||||
Vector m_start;
|
||||
};
|
641
metamod/extra/example/include/hlsdk/dlls/bot/cs_bot.h
Normal file
641
metamod/extra/example/include/hlsdk/dlls/bot/cs_bot.h
Normal file
@ -0,0 +1,641 @@
|
||||
/*
|
||||
*
|
||||
* 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 "bot/cs_gamestate.h"
|
||||
#include "bot/cs_bot_manager.h"
|
||||
#include "bot/cs_bot_chatter.h"
|
||||
|
||||
#define PRIMARY_WEAPON_BUY_COUNT 13
|
||||
#define SECONDARY_WEAPON_BUY_COUNT 3
|
||||
|
||||
#define FLAG_PROGRESS_DRAW 0x0 // draw status bar progress
|
||||
#define FLAG_PROGRESS_START 0x1 // init status bar progress
|
||||
#define FLAG_PROGRESS_HIDE 0x2 // hide status bar progress
|
||||
|
||||
#define HI_X 0x01
|
||||
#define LO_X 0x02
|
||||
#define HI_Y 0x04
|
||||
#define LO_Y 0x08
|
||||
#define HI_Z 0x10
|
||||
#define LO_Z 0x20
|
||||
|
||||
extern int _navAreaCount;
|
||||
extern int _currentIndex;
|
||||
|
||||
extern struct BuyInfo primaryWeaponBuyInfoCT[PRIMARY_WEAPON_BUY_COUNT];
|
||||
extern struct BuyInfo secondaryWeaponBuyInfoCT[SECONDARY_WEAPON_BUY_COUNT];
|
||||
|
||||
extern struct BuyInfo primaryWeaponBuyInfoT[PRIMARY_WEAPON_BUY_COUNT];
|
||||
extern struct BuyInfo secondaryWeaponBuyInfoT[SECONDARY_WEAPON_BUY_COUNT];
|
||||
|
||||
class CCSBot;
|
||||
class BotChatterInterface;
|
||||
|
||||
class BotState {
|
||||
public:
|
||||
virtual void OnEnter(CCSBot *me) {}
|
||||
virtual void OnUpdate(CCSBot *me) {}
|
||||
virtual void OnExit(CCSBot *me) {}
|
||||
virtual const char *GetName() const = 0;
|
||||
};
|
||||
|
||||
class IdleState: public BotState {
|
||||
public:
|
||||
virtual void OnEnter(CCSBot *me) {}
|
||||
virtual void OnUpdate(CCSBot *me) {}
|
||||
virtual const char *GetName() const { return "Idle"; }
|
||||
};
|
||||
|
||||
class HuntState: public BotState {
|
||||
public:
|
||||
virtual void OnEnter(CCSBot *me) {}
|
||||
virtual void OnUpdate(CCSBot *me) {}
|
||||
virtual void OnExit(CCSBot *me) {}
|
||||
virtual const char *GetName() const { return "Hunt"; }
|
||||
public:
|
||||
CNavArea *m_huntArea;
|
||||
};
|
||||
|
||||
class AttackState: public BotState {
|
||||
public:
|
||||
virtual void OnEnter(CCSBot *me) {}
|
||||
virtual void OnUpdate(CCSBot *me) {}
|
||||
virtual void OnExit(CCSBot *me) {}
|
||||
virtual const char *GetName() const { return "Attack"; }
|
||||
public:
|
||||
enum DodgeStateType
|
||||
{
|
||||
STEADY_ON,
|
||||
SLIDE_LEFT,
|
||||
SLIDE_RIGHT,
|
||||
JUMP,
|
||||
NUM_ATTACK_STATES
|
||||
} m_dodgeState;
|
||||
|
||||
float m_nextDodgeStateTimestamp;
|
||||
CountdownTimer m_repathTimer;
|
||||
float m_scopeTimestamp;
|
||||
bool m_haveSeenEnemy;
|
||||
bool m_isEnemyHidden;
|
||||
float m_reacquireTimestamp;
|
||||
float m_shieldToggleTimestamp;
|
||||
bool m_shieldForceOpen;
|
||||
float m_pinnedDownTimestamp;
|
||||
bool m_crouchAndHold;
|
||||
bool m_didAmbushCheck;
|
||||
bool m_dodge;
|
||||
bool m_firstDodge;
|
||||
bool m_isCoward;
|
||||
CountdownTimer m_retreatTimer;
|
||||
};
|
||||
|
||||
class InvestigateNoiseState: public BotState {
|
||||
public:
|
||||
virtual void OnEnter(CCSBot *me) {}
|
||||
virtual void OnUpdate(CCSBot *me) {}
|
||||
virtual void OnExit(CCSBot *me) {}
|
||||
virtual const char *GetName() const { return "InvestigateNoise"; }
|
||||
private:
|
||||
void AttendCurrentNoise(CCSBot *me);
|
||||
Vector m_checkNoisePosition;
|
||||
};
|
||||
|
||||
class BuyState: public BotState {
|
||||
public:
|
||||
virtual void OnEnter(CCSBot *me) {}
|
||||
virtual void OnUpdate(CCSBot *me) {}
|
||||
virtual void OnExit(CCSBot *me) {}
|
||||
virtual const char *GetName() const { return "Buy"; }
|
||||
public:
|
||||
bool m_isInitialDelay;
|
||||
int m_prefRetries;
|
||||
int m_prefIndex;
|
||||
int m_retries;
|
||||
bool m_doneBuying;
|
||||
bool m_buyDefuseKit;
|
||||
bool m_buyGrenade;
|
||||
bool m_buyShield;
|
||||
bool m_buyPistol;
|
||||
};
|
||||
|
||||
class MoveToState: public BotState {
|
||||
public:
|
||||
virtual void OnEnter(CCSBot *me) {}
|
||||
virtual void OnUpdate(CCSBot *me) {}
|
||||
virtual void OnExit(CCSBot *me) {}
|
||||
virtual const char *GetName() const { return "MoveTo"; }
|
||||
|
||||
void SetGoalPosition(const Vector &pos) { m_goalPosition = pos; }
|
||||
void SetRouteType(RouteType route) { m_routeType = route; }
|
||||
|
||||
private:
|
||||
Vector m_goalPosition;
|
||||
RouteType m_routeType;
|
||||
bool m_radioedPlan;
|
||||
bool m_askedForCover;
|
||||
};
|
||||
|
||||
class FetchBombState: public BotState {
|
||||
public:
|
||||
virtual void OnEnter(CCSBot *me) {}
|
||||
virtual void OnUpdate(CCSBot *me) {}
|
||||
virtual const char *GetName() const { return "FetchBomb"; }
|
||||
};
|
||||
|
||||
class PlantBombState: public BotState {
|
||||
public:
|
||||
virtual void OnEnter(CCSBot *me) {}
|
||||
virtual void OnUpdate(CCSBot *me) {}
|
||||
virtual void OnExit(CCSBot *me) {}
|
||||
virtual const char *GetName() const { return "PlantBomb"; }
|
||||
};
|
||||
|
||||
class DefuseBombState: public BotState {
|
||||
public:
|
||||
virtual void OnEnter(CCSBot *me) {}
|
||||
virtual void OnUpdate(CCSBot *me) {}
|
||||
virtual void OnExit(CCSBot *me) {}
|
||||
virtual const char *GetName() const { return "DefuseBomb"; }
|
||||
};
|
||||
|
||||
class HideState: public BotState {
|
||||
public:
|
||||
virtual void OnEnter(CCSBot *me) {}
|
||||
virtual void OnUpdate(CCSBot *me) {}
|
||||
virtual void OnExit(CCSBot *me) {}
|
||||
virtual const char *GetName() const { return "Hide"; }
|
||||
|
||||
public:
|
||||
void SetHidingSpot(const Vector &pos) { m_hidingSpot = pos; }
|
||||
const Vector &GetHidingSpot() const { return m_hidingSpot; }
|
||||
|
||||
void SetSearchArea(CNavArea *area) { m_searchFromArea = area; }
|
||||
void SetSearchRange(float range) { m_range = range; }
|
||||
|
||||
void SetDuration(float time) { m_duration = time; }
|
||||
void SetHoldPosition(bool hold) { m_isHoldingPosition = hold; }
|
||||
|
||||
bool IsAtSpot() const { return m_isAtSpot; }
|
||||
|
||||
public:
|
||||
CNavArea *m_searchFromArea;
|
||||
float m_range;
|
||||
|
||||
Vector m_hidingSpot;
|
||||
bool m_isAtSpot;
|
||||
float m_duration;
|
||||
bool m_isHoldingPosition;
|
||||
float m_holdPositionTime;
|
||||
bool m_heardEnemy;
|
||||
|
||||
float m_firstHeardEnemyTime;
|
||||
int m_retry;
|
||||
Vector m_leaderAnchorPos;
|
||||
};
|
||||
|
||||
class EscapeFromBombState: public BotState {
|
||||
public:
|
||||
virtual void OnEnter(CCSBot *me) {}
|
||||
virtual void OnUpdate(CCSBot *me) {}
|
||||
virtual void OnExit(CCSBot *me) {}
|
||||
virtual const char *GetName() const { return "EscapeFromBomb"; }
|
||||
};
|
||||
|
||||
class FollowState: public BotState
|
||||
{
|
||||
public:
|
||||
virtual void OnEnter(CCSBot *me) {}
|
||||
virtual void OnUpdate(CCSBot *me) {}
|
||||
virtual void OnExit(CCSBot *me) {}
|
||||
virtual const char *GetName() const { return "Follow"; }
|
||||
|
||||
void SetLeader(CBaseEntity *leader) { m_leader = leader; }
|
||||
|
||||
public:
|
||||
EHANDLE m_leader;
|
||||
Vector m_lastLeaderPos;
|
||||
bool m_isStopped;
|
||||
float m_stoppedTimestamp;
|
||||
|
||||
enum LeaderMotionStateType
|
||||
{
|
||||
INVALID,
|
||||
STOPPED,
|
||||
WALKING,
|
||||
RUNNING
|
||||
|
||||
} m_leaderMotionState;
|
||||
|
||||
IntervalTimer m_leaderMotionStateTime;
|
||||
|
||||
bool m_isSneaking;
|
||||
float m_lastSawLeaderTime;
|
||||
CountdownTimer m_repathInterval;
|
||||
|
||||
IntervalTimer m_walkTime;
|
||||
bool m_isAtWalkSpeed;
|
||||
|
||||
float m_waitTime;
|
||||
CountdownTimer m_idleTimer;
|
||||
};
|
||||
|
||||
class UseEntityState: public BotState {
|
||||
public:
|
||||
virtual void OnEnter(CCSBot *me) {}
|
||||
virtual void OnUpdate(CCSBot *me) {}
|
||||
virtual void OnExit(CCSBot *me) {}
|
||||
virtual const char *GetName() const { return "UseEntity"; }
|
||||
|
||||
void SetEntity(CBaseEntity *entity) { m_entity = entity; }
|
||||
|
||||
private:
|
||||
EHANDLE m_entity;
|
||||
};
|
||||
|
||||
// The Counter-strike Bot
|
||||
class CCSBot: public CBot {
|
||||
public:
|
||||
virtual BOOL TakeDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType) = 0; // invoked when injured by something (EXTEND) - returns the amount of damage inflicted
|
||||
virtual void Killed(entvars_t *pevAttacker, int iGib) = 0; // invoked when killed (EXTEND)
|
||||
virtual void RoundRespawn() = 0;
|
||||
virtual void Blind(float duration, float holdTime, float fadeTime, int alpha = 255) = 0; // player blinded by a flashbang
|
||||
virtual void OnTouchingWeapon(CWeaponBox *box) = 0; // invoked when in contact with a CWeaponBox
|
||||
|
||||
virtual bool Initialize(const BotProfile *profile) = 0; // (EXTEND) prepare bot for action
|
||||
virtual void SpawnBot() = 0; // (EXTEND) spawn the bot into the game
|
||||
|
||||
virtual void Upkeep() = 0; // lightweight maintenance, invoked frequently
|
||||
virtual void Update() = 0; // heavyweight algorithms, invoked less often
|
||||
|
||||
virtual void Walk() = 0;
|
||||
virtual bool Jump(bool mustJump = false) = 0; // returns true if jump was started
|
||||
|
||||
virtual void OnEvent(GameEventType event, CBaseEntity *entity = NULL, CBaseEntity *other = NULL) = 0; // invoked when event occurs in the game (some events have NULL entity)
|
||||
|
||||
#define CHECK_FOV true
|
||||
virtual bool IsVisible(const Vector *pos, bool testFOV = false) const = 0; // return true if we can see the point
|
||||
virtual bool IsVisible(CBasePlayer *player, bool testFOV = false, unsigned char *visParts = NULL) const = 0; // return true if we can see any part of the player
|
||||
|
||||
virtual bool IsEnemyPartVisible(VisiblePartType part) const = 0; // if enemy is visible, return the part we see for our current enemy
|
||||
|
||||
public:
|
||||
const Vector &GetEyePosition() const
|
||||
{
|
||||
m_eyePos = pev->origin + pev->view_ofs;
|
||||
return m_eyePos;
|
||||
}
|
||||
public:
|
||||
friend class CCSBotManager;
|
||||
|
||||
// TODO: Get rid of these
|
||||
friend class AttackState;
|
||||
friend class BuyState;
|
||||
|
||||
char m_name[64]; // copied from STRING(pev->netname) for debugging
|
||||
|
||||
// behavior properties
|
||||
float m_combatRange; // desired distance between us and them during gunplay
|
||||
mutable bool m_isRogue; // if true, the bot is a "rogue" and listens to no-one
|
||||
mutable CountdownTimer m_rogueTimer;
|
||||
|
||||
enum MoraleType
|
||||
{
|
||||
TERRIBLE = -3,
|
||||
BAD = -2,
|
||||
NEGATIVE = -1,
|
||||
NEUTRAL = 0,
|
||||
POSITIVE = 1,
|
||||
GOOD = 2,
|
||||
EXCELLENT = 3,
|
||||
};
|
||||
|
||||
MoraleType m_morale; // our current morale, based on our win/loss history
|
||||
bool m_diedLastRound; // true if we died last round
|
||||
float m_safeTime; // duration at the beginning of the round where we feel "safe"
|
||||
bool m_wasSafe; // true if we were in the safe time last update
|
||||
NavRelativeDirType m_blindMoveDir; // which way to move when we're blind
|
||||
bool m_blindFire; // if true, fire weapon while blinded
|
||||
|
||||
// TODO: implement through CountdownTimer
|
||||
float m_surpriseDelay; // when we were surprised
|
||||
float m_surpriseTimestamp;
|
||||
|
||||
bool m_isFollowing; // true if we are following someone
|
||||
EHANDLE m_leader; // the ID of who we are following
|
||||
float m_followTimestamp; // when we started following
|
||||
float m_allowAutoFollowTime; // time when we can auto follow
|
||||
|
||||
CountdownTimer m_hurryTimer; // if valid, bot is in a hurry
|
||||
|
||||
// instances of each possible behavior state, to avoid dynamic memory allocation during runtime
|
||||
IdleState m_idleState;
|
||||
HuntState m_huntState;
|
||||
AttackState m_attackState;
|
||||
InvestigateNoiseState m_investigateNoiseState;
|
||||
BuyState m_buyState;
|
||||
MoveToState m_moveToState;
|
||||
FetchBombState m_fetchBombState;
|
||||
PlantBombState m_plantBombState;
|
||||
DefuseBombState m_defuseBombState;
|
||||
HideState m_hideState;
|
||||
EscapeFromBombState m_escapeFromBombState;
|
||||
FollowState m_followState;
|
||||
UseEntityState m_useEntityState;
|
||||
|
||||
// TODO: Allow multiple simultaneous state machines (look around, etc)
|
||||
BotState *m_state; // current behavior state
|
||||
float m_stateTimestamp; // time state was entered
|
||||
bool m_isAttacking; // if true, special Attack state is overriding the state machine
|
||||
|
||||
// high-level tasks
|
||||
enum TaskType
|
||||
{
|
||||
SEEK_AND_DESTROY,
|
||||
PLANT_BOMB,
|
||||
FIND_TICKING_BOMB,
|
||||
DEFUSE_BOMB,
|
||||
GUARD_TICKING_BOMB,
|
||||
GUARD_BOMB_DEFUSER,
|
||||
GUARD_LOOSE_BOMB,
|
||||
GUARD_BOMB_ZONE,
|
||||
ESCAPE_FROM_BOMB,
|
||||
HOLD_POSITION,
|
||||
FOLLOW,
|
||||
VIP_ESCAPE,
|
||||
GUARD_VIP_ESCAPE_ZONE,
|
||||
COLLECT_HOSTAGES,
|
||||
RESCUE_HOSTAGES,
|
||||
GUARD_HOSTAGES,
|
||||
GUARD_HOSTAGE_RESCUE_ZONE,
|
||||
MOVE_TO_LAST_KNOWN_ENEMY_POSITION,
|
||||
MOVE_TO_SNIPER_SPOT,
|
||||
SNIPING,
|
||||
|
||||
NUM_TASKS
|
||||
};
|
||||
TaskType m_task; // our current task
|
||||
EHANDLE m_taskEntity; // an entity used for our task
|
||||
|
||||
// navigation
|
||||
Vector m_goalPosition;
|
||||
EHANDLE m_goalEntity;
|
||||
|
||||
CNavArea *m_currentArea; // the nav area we are standing on
|
||||
CNavArea *m_lastKnownArea; // the last area we were in
|
||||
EHANDLE m_avoid; // higher priority player we need to make way for
|
||||
float m_avoidTimestamp;
|
||||
bool m_isJumpCrouching;
|
||||
bool m_isJumpCrouched;
|
||||
float m_jumpCrouchTimestamp;
|
||||
|
||||
// path navigation data
|
||||
enum { _MAX_PATH_LENGTH = 256 };
|
||||
struct ConnectInfo
|
||||
{
|
||||
CNavArea *area; // the area along the path
|
||||
NavTraverseType how; // how to enter this area from the previous one
|
||||
Vector pos; // our movement goal position at this point in the path
|
||||
const CNavLadder *ladder; // if "how" refers to a ladder, this is it
|
||||
}
|
||||
m_path[_MAX_PATH_LENGTH];
|
||||
int m_pathLength;
|
||||
int m_pathIndex;
|
||||
float m_areaEnteredTimestamp;
|
||||
|
||||
CountdownTimer m_repathTimer; // must have elapsed before bot can pathfind again
|
||||
|
||||
mutable CountdownTimer m_avoidFriendTimer; // used to throttle how often we check for friends in our path
|
||||
mutable bool m_isFriendInTheWay; // true if a friend is blocking our path
|
||||
CountdownTimer m_politeTimer; // we'll wait for friend to move until this runs out
|
||||
bool m_isWaitingBehindFriend; // true if we are waiting for a friend to move
|
||||
|
||||
enum LadderNavState
|
||||
{
|
||||
APPROACH_ASCENDING_LADDER, // prepare to scale a ladder
|
||||
APPROACH_DESCENDING_LADDER, // prepare to go down ladder
|
||||
FACE_ASCENDING_LADDER,
|
||||
FACE_DESCENDING_LADDER,
|
||||
MOUNT_ASCENDING_LADDER, // move toward ladder until "on" it
|
||||
MOUNT_DESCENDING_LADDER, // move toward ladder until "on" it
|
||||
ASCEND_LADDER, // go up the ladder
|
||||
DESCEND_LADDER, // go down the ladder
|
||||
DISMOUNT_ASCENDING_LADDER, // get off of the ladder
|
||||
DISMOUNT_DESCENDING_LADDER, // get off of the ladder
|
||||
MOVE_TO_DESTINATION, // dismount ladder and move to destination area
|
||||
}
|
||||
m_pathLadderState;
|
||||
bool m_pathLadderFaceIn; // if true, face towards ladder, otherwise face away
|
||||
const CNavLadder *m_pathLadder; // the ladder we need to use to reach the next area
|
||||
NavRelativeDirType m_pathLadderDismountDir; // which way to dismount
|
||||
float m_pathLadderDismountTimestamp; // time when dismount started
|
||||
float m_pathLadderEnd; // if ascending, z of top, if descending z of bottom
|
||||
float m_pathLadderTimestamp; // time when we started using ladder - for timeout check
|
||||
|
||||
CountdownTimer m_mustRunTimer; // if nonzero, bot cannot walk
|
||||
|
||||
// game scenario mechanisms
|
||||
CSGameState m_gameState;
|
||||
|
||||
// hostages mechanism
|
||||
byte m_hostageEscortCount;
|
||||
float m_hostageEscortCountTimestamp;
|
||||
bool m_isWaitingForHostage;
|
||||
CountdownTimer m_inhibitWaitingForHostageTimer;
|
||||
CountdownTimer m_waitForHostageTimer;
|
||||
|
||||
// listening mechanism
|
||||
Vector m_noisePosition; // position we last heard non-friendly noise
|
||||
float m_noiseTimestamp; // when we heard it (can get zeroed)
|
||||
CNavArea *m_noiseArea; // the nav area containing the noise
|
||||
float m_noiseCheckTimestamp;
|
||||
PriorityType m_noisePriority; // priority of currently heard noise
|
||||
bool m_isNoiseTravelRangeChecked;
|
||||
|
||||
// "looking around" mechanism
|
||||
float m_lookAroundStateTimestamp; // time of next state change
|
||||
float m_lookAheadAngle; // our desired forward look angle
|
||||
float m_forwardAngle; // our current forward facing direction
|
||||
float m_inhibitLookAroundTimestamp; // time when we can look around again
|
||||
|
||||
enum LookAtSpotState
|
||||
{
|
||||
NOT_LOOKING_AT_SPOT, // not currently looking at a point in space
|
||||
LOOK_TOWARDS_SPOT, // in the process of aiming at m_lookAtSpot
|
||||
LOOK_AT_SPOT, // looking at m_lookAtSpot
|
||||
NUM_LOOK_AT_SPOT_STATES
|
||||
}
|
||||
m_lookAtSpotState;
|
||||
Vector m_lookAtSpot; // the spot we're currently looking at
|
||||
PriorityType m_lookAtSpotPriority;
|
||||
float m_lookAtSpotDuration; // how long we need to look at the spot
|
||||
float m_lookAtSpotTimestamp; // when we actually began looking at the spot
|
||||
float m_lookAtSpotAngleTolerance; // how exactly we must look at the spot
|
||||
bool m_lookAtSpotClearIfClose; // if true, the look at spot is cleared if it gets close to us
|
||||
const char *m_lookAtDesc; // for debugging
|
||||
float m_peripheralTimestamp;
|
||||
|
||||
enum { MAX_APPROACH_POINTS = 16 };
|
||||
Vector m_approachPoint[MAX_APPROACH_POINTS];
|
||||
unsigned char m_approachPointCount;
|
||||
Vector m_approachPointViewPosition; // the position used when computing current approachPoint set
|
||||
bool m_isWaitingToTossGrenade; // lining up throw
|
||||
CountdownTimer m_tossGrenadeTimer; // timeout timer for grenade tossing
|
||||
|
||||
SpotEncounter *m_spotEncounter; // the spots we will encounter as we move thru our current area
|
||||
float m_spotCheckTimestamp; // when to check next encounter spot
|
||||
|
||||
// TODO: Add timestamp for each possible client to hiding spots
|
||||
enum { MAX_CHECKED_SPOTS = 64 };
|
||||
struct HidingSpotCheckInfo
|
||||
{
|
||||
HidingSpot *spot;
|
||||
float timestamp;
|
||||
}
|
||||
m_checkedHidingSpot[MAX_CHECKED_SPOTS];
|
||||
int m_checkedHidingSpotCount;
|
||||
|
||||
// view angle mechanism
|
||||
float m_lookPitch; // our desired look pitch angle
|
||||
float m_lookPitchVel;
|
||||
float m_lookYaw; // our desired look yaw angle
|
||||
float m_lookYawVel;
|
||||
|
||||
// aim angle mechanism
|
||||
mutable Vector m_eyePos;
|
||||
Vector m_aimOffset; // current error added to victim's position to get actual aim spot
|
||||
Vector m_aimOffsetGoal; // desired aim offset
|
||||
float m_aimOffsetTimestamp; // time of next offset adjustment
|
||||
float m_aimSpreadTimestamp; // time used to determine max spread as it begins to tighten up
|
||||
Vector m_aimSpot; // the spot we are currently aiming to fire at
|
||||
|
||||
// attack state data
|
||||
// behavior modifiers
|
||||
enum DispositionType
|
||||
{
|
||||
ENGAGE_AND_INVESTIGATE, // engage enemies on sight and investigate enemy noises
|
||||
OPPORTUNITY_FIRE, // engage enemies on sight, but only look towards enemy noises, dont investigate
|
||||
SELF_DEFENSE, // only engage if fired on, or very close to enemy
|
||||
IGNORE_ENEMIES, // ignore all enemies - useful for ducking around corners, running away, etc
|
||||
|
||||
NUM_DISPOSITIONS
|
||||
};
|
||||
DispositionType m_disposition; // how we will react to enemies
|
||||
CountdownTimer m_ignoreEnemiesTimer; // how long will we ignore enemies
|
||||
mutable EHANDLE m_enemy; // our current enemy
|
||||
bool m_isEnemyVisible; // result of last visibility test on enemy
|
||||
unsigned char m_visibleEnemyParts; // which parts of the visible enemy do we see
|
||||
Vector m_lastEnemyPosition; // last place we saw the enemy
|
||||
float m_lastSawEnemyTimestamp;
|
||||
float m_firstSawEnemyTimestamp;
|
||||
float m_currentEnemyAcquireTimestamp;
|
||||
float m_enemyDeathTimestamp; // if m_enemy is dead, this is when he died
|
||||
bool m_isLastEnemyDead; // true if we killed or saw our last enemy die
|
||||
int m_nearbyEnemyCount; // max number of enemies we've seen recently
|
||||
unsigned int m_enemyPlace; // the location where we saw most of our enemies
|
||||
|
||||
struct WatchInfo
|
||||
{
|
||||
float timestamp;
|
||||
bool isEnemy;
|
||||
}
|
||||
m_watchInfo[MAX_CLIENTS];
|
||||
mutable EHANDLE m_bomber; // points to bomber if we can see him
|
||||
|
||||
int m_nearbyFriendCount; // number of nearby teammates
|
||||
mutable EHANDLE m_closestVisibleFriend; // the closest friend we can see
|
||||
mutable EHANDLE m_closestVisibleHumanFriend; // the closest human friend we can see
|
||||
|
||||
CBasePlayer *m_attacker; // last enemy that hurt us (may not be same as m_enemy)
|
||||
float m_attackedTimestamp; // when we were hurt by the m_attacker
|
||||
|
||||
int m_lastVictimID; // the entindex of the last victim we killed, or zero
|
||||
bool m_isAimingAtEnemy; // if true, we are trying to aim at our enemy
|
||||
bool m_isRapidFiring; // if true, RunUpkeep() will toggle our primary attack as fast as it can
|
||||
IntervalTimer m_equipTimer; // how long have we had our current weapon equipped
|
||||
float m_fireWeaponTimestamp;
|
||||
|
||||
// reaction time system
|
||||
enum { MAX_ENEMY_QUEUE = 20 };
|
||||
struct ReactionState
|
||||
{
|
||||
// NOTE: player position & orientation is not currently stored separately
|
||||
EHANDLE player;
|
||||
bool isReloading;
|
||||
bool isProtectedByShield;
|
||||
}
|
||||
m_enemyQueue[MAX_ENEMY_QUEUE]; // round-robin queue for simulating reaction times
|
||||
|
||||
byte m_enemyQueueIndex;
|
||||
byte m_enemyQueueCount;
|
||||
byte m_enemyQueueAttendIndex; // index of the timeframe we are "conscious" of
|
||||
|
||||
// stuck detection
|
||||
bool m_isStuck;
|
||||
float m_stuckTimestamp; // time when we got stuck
|
||||
Vector m_stuckSpot; // the location where we became stuck
|
||||
NavRelativeDirType m_wiggleDirection;
|
||||
float m_wiggleTimestamp;
|
||||
float m_stuckJumpTimestamp; // time for next jump when stuck
|
||||
|
||||
enum { MAX_VEL_SAMPLES = 5 };
|
||||
float m_avgVel[MAX_VEL_SAMPLES];
|
||||
int m_avgVelIndex;
|
||||
int m_avgVelCount;
|
||||
Vector m_lastOrigin;
|
||||
|
||||
// chatter mechanism
|
||||
GameEventType m_lastRadioCommand; // last radio command we recieved
|
||||
|
||||
float m_lastRadioRecievedTimestamp; // time we recieved a radio message
|
||||
float m_lastRadioSentTimestamp; // time when we send a radio message
|
||||
EHANDLE m_radioSubject; // who issued the radio message
|
||||
Vector m_radioPosition; // position referred to in radio message
|
||||
float m_voiceFeedbackStartTimestamp;
|
||||
float m_voiceFeedbackEndTimestamp; // new-style "voice" chatter gets voice feedback
|
||||
BotChatterInterface m_chatter;
|
||||
|
||||
// learn map mechanism
|
||||
const CNavNode *m_navNodeList;
|
||||
CNavNode *m_currentNode;
|
||||
NavDirType m_generationDir;
|
||||
NavAreaList::iterator m_analyzeIter;
|
||||
|
||||
enum ProcessType
|
||||
{
|
||||
PROCESS_NORMAL,
|
||||
PROCESS_LEARN,
|
||||
PROCESS_ANALYZE_ALPHA,
|
||||
PROCESS_ANALYZE_BETA,
|
||||
PROCESS_SAVE,
|
||||
}
|
||||
m_processMode;
|
||||
CountdownTimer m_mumbleTimer;
|
||||
CountdownTimer m_booTimer;
|
||||
CountdownTimer m_relocateTimer;
|
||||
};
|
339
metamod/extra/example/include/hlsdk/dlls/bot/cs_bot_chatter.h
Normal file
339
metamod/extra/example/include/hlsdk/dlls/bot/cs_bot_chatter.h
Normal file
@ -0,0 +1,339 @@
|
||||
/*
|
||||
*
|
||||
* 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 UNDEFINED_COUNT 0xFFFF
|
||||
#define MAX_PLACES_PER_MAP 64
|
||||
#define UNDEFINED_SUBJECT (-1)
|
||||
#define COUNT_MANY 4 // equal to or greater than this is "many"
|
||||
|
||||
class CCSBot;
|
||||
class BotChatterInterface;
|
||||
|
||||
typedef unsigned int PlaceCriteria;
|
||||
typedef unsigned int CountCriteria;
|
||||
|
||||
// A meme is a unit information that bots use to
|
||||
// transmit information to each other via the radio
|
||||
class BotMeme {
|
||||
public:
|
||||
virtual void Interpret(CCSBot *sender, CCSBot *receiver) const = 0; // cause the given bot to act on this meme
|
||||
};
|
||||
|
||||
class BotAllHostagesGoneMeme: public BotMeme {
|
||||
public:
|
||||
virtual void Interpret(CCSBot *sender, CCSBot *receiver) const; // cause the given bot to act on this meme
|
||||
};
|
||||
|
||||
class BotHostageBeingTakenMeme: public BotMeme {
|
||||
public:
|
||||
virtual void Interpret(CCSBot *sender, CCSBot *receiver) const; // cause the given bot to act on this meme
|
||||
};
|
||||
|
||||
class BotHelpMeme: public BotMeme {
|
||||
public:
|
||||
virtual void Interpret(CCSBot *sender, CCSBot *receiver) const; // cause the given bot to act on this meme
|
||||
|
||||
public:
|
||||
Place m_place;
|
||||
};
|
||||
|
||||
class BotBombsiteStatusMeme: public BotMeme {
|
||||
public:
|
||||
virtual void Interpret(CCSBot *sender, CCSBot *receiver) const; // cause the given bot to act on this meme
|
||||
|
||||
public:
|
||||
enum StatusType { CLEAR, PLANTED };
|
||||
int m_zoneIndex; // the bombsite
|
||||
StatusType m_status; // whether it is cleared or the bomb is there (planted)
|
||||
};
|
||||
|
||||
class BotBombStatusMeme: public BotMeme {
|
||||
public:
|
||||
virtual void Interpret(CCSBot *sender, CCSBot *receiver) const; // cause the given bot to act on this meme
|
||||
|
||||
public:
|
||||
CSGameState::BombState m_state;
|
||||
Vector m_pos;
|
||||
};
|
||||
|
||||
class BotFollowMeme: public BotMeme {
|
||||
public:
|
||||
virtual void Interpret(CCSBot *sender, CCSBot *receiver) const; // cause the given bot to act on this meme
|
||||
};
|
||||
|
||||
class BotDefendHereMeme: public BotMeme {
|
||||
public:
|
||||
virtual void Interpret(CCSBot *sender, CCSBot *receiver) const; // cause the given bot to act on this meme
|
||||
|
||||
public:
|
||||
Vector m_pos;
|
||||
};
|
||||
|
||||
class BotWhereBombMeme: public BotMeme {
|
||||
public:
|
||||
virtual void Interpret(CCSBot *sender, CCSBot *receiver) const; // cause the given bot to act on this meme
|
||||
};
|
||||
|
||||
class BotRequestReportMeme: public BotMeme {
|
||||
public:
|
||||
virtual void Interpret(CCSBot *sender, CCSBot *receiver) const; // cause the given bot to act on this meme
|
||||
};
|
||||
|
||||
enum BotStatementType
|
||||
{
|
||||
REPORT_VISIBLE_ENEMIES,
|
||||
REPORT_ENEMY_ACTION,
|
||||
REPORT_MY_CURRENT_TASK,
|
||||
REPORT_MY_INTENTION,
|
||||
REPORT_CRITICAL_EVENT,
|
||||
REPORT_REQUEST_HELP,
|
||||
REPORT_REQUEST_INFORMATION,
|
||||
REPORT_ROUND_END,
|
||||
REPORT_MY_PLAN,
|
||||
REPORT_INFORMATION,
|
||||
REPORT_EMOTE,
|
||||
REPORT_ACKNOWLEDGE, // affirmative or negative
|
||||
REPORT_ENEMIES_REMAINING,
|
||||
REPORT_FRIENDLY_FIRE,
|
||||
REPORT_KILLED_FRIEND,
|
||||
//REPORT_ENEMY_LOST
|
||||
|
||||
NUM_BOT_STATEMENT_TYPES,
|
||||
};
|
||||
|
||||
// BotSpeakables are the smallest unit of bot chatter.
|
||||
// They represent a specific wav file of a phrase, and the criteria for which it is useful
|
||||
class BotSpeakable {
|
||||
public:
|
||||
char *m_phrase;
|
||||
float m_duration;
|
||||
PlaceCriteria m_place;
|
||||
CountCriteria m_count;
|
||||
};
|
||||
|
||||
typedef std::vector<BotSpeakable *> BotSpeakableVector;
|
||||
typedef std::vector<BotSpeakableVector *> BotVoiceBankVector;
|
||||
|
||||
// The BotPhrase class is a collection of Speakables associated with a name, ID, and criteria
|
||||
class BotPhrase {
|
||||
public:
|
||||
const char *GetName() const { return m_name; }
|
||||
Place GetID() const { return m_id; }
|
||||
GameEventType GetRadioEquivalent() const { return m_radioEvent; }
|
||||
bool IsImportant() const { return m_isImportant; } // return true if this phrase is part of an important statement
|
||||
bool IsPlace() const { return m_isPlace; }
|
||||
|
||||
public:
|
||||
friend class BotPhraseManager;
|
||||
char *m_name;
|
||||
Place m_id;
|
||||
bool m_isPlace; // true if this is a Place phrase
|
||||
GameEventType m_radioEvent;
|
||||
bool m_isImportant; // mission-critical statement
|
||||
|
||||
mutable BotVoiceBankVector m_voiceBank; // array of voice banks (arrays of speakables)
|
||||
std::vector<int> m_count; // number of speakables
|
||||
mutable std::vector< int > m_index; // index of next speakable to return
|
||||
int m_numVoiceBanks; // number of voice banks that have been initialized
|
||||
|
||||
mutable PlaceCriteria m_placeCriteria;
|
||||
mutable CountCriteria m_countCriteria;
|
||||
};
|
||||
|
||||
typedef std::list<BotPhrase *> BotPhraseList;
|
||||
|
||||
// The BotPhraseManager is a singleton that provides an interface to all BotPhrase collections
|
||||
class BotPhraseManager {
|
||||
public:
|
||||
const BotPhraseList *GetPlaceList() const { return &m_placeList; }
|
||||
|
||||
// return time last statement of given type was emitted by a teammate for the given place
|
||||
float GetPlaceStatementInterval(Place place) const;
|
||||
|
||||
// set time of last statement of given type was emitted by a teammate for the given place
|
||||
void ResetPlaceStatementInterval(Place place) const;
|
||||
|
||||
public:
|
||||
int FindPlaceIndex(Place where) const;
|
||||
|
||||
// master list of all phrase collections
|
||||
BotPhraseList m_list;
|
||||
|
||||
// master list of all Place phrases
|
||||
BotPhraseList m_placeList;
|
||||
|
||||
struct PlaceTimeInfo
|
||||
{
|
||||
Place placeID;
|
||||
IntervalTimer timer;
|
||||
};
|
||||
|
||||
mutable PlaceTimeInfo m_placeStatementHistory[MAX_PLACES_PER_MAP];
|
||||
mutable int m_placeCount;
|
||||
};
|
||||
|
||||
inline int BotPhraseManager::FindPlaceIndex(Place where) const
|
||||
{
|
||||
for (int i = 0; i < m_placeCount; ++i)
|
||||
{
|
||||
if (m_placeStatementHistory[i].placeID == where)
|
||||
return i;
|
||||
}
|
||||
|
||||
if (m_placeCount < MAX_PLACES_PER_MAP)
|
||||
{
|
||||
m_placeStatementHistory[++m_placeCount].placeID = where;
|
||||
m_placeStatementHistory[++m_placeCount].timer.Invalidate();
|
||||
return m_placeCount - 1;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
inline float BotPhraseManager::GetPlaceStatementInterval(Place place) const
|
||||
{
|
||||
int index = FindPlaceIndex(place);
|
||||
|
||||
if (index < 0)
|
||||
return 999999.9f;
|
||||
|
||||
if (index >= m_placeCount)
|
||||
return 999999.9f;
|
||||
|
||||
return m_placeStatementHistory[index].timer.GetElapsedTime();
|
||||
}
|
||||
|
||||
inline void BotPhraseManager::ResetPlaceStatementInterval(Place place) const
|
||||
{
|
||||
int index = FindPlaceIndex(place);
|
||||
|
||||
if (index < 0)
|
||||
return;
|
||||
|
||||
if (index >= m_placeCount)
|
||||
return;
|
||||
|
||||
m_placeStatementHistory[index].timer.Reset();
|
||||
}
|
||||
|
||||
// Statements are meaningful collections of phrases
|
||||
class BotStatement {
|
||||
public:
|
||||
BotChatterInterface *GetChatter() const { return m_chatter; }
|
||||
BotStatementType GetType() const { return m_type; } // return the type of statement this is
|
||||
bool HasSubject() const { return (m_subject != UNDEFINED_SUBJECT); }
|
||||
void SetSubject(int playerID) { m_subject = playerID; } // who this statement is about
|
||||
int GetSubject() const { return m_subject; } // who this statement is about
|
||||
void SetPlace(Place where) { m_place = where; } // explicitly set place
|
||||
|
||||
void SetStartTime(float timestamp) { m_startTime = timestamp; } // define the earliest time this statement can be spoken
|
||||
float GetStartTime() const { return m_startTime; }
|
||||
bool IsSpeaking() const { return m_isSpeaking; } // return true if this statement is currently being spoken
|
||||
float GetTimestamp() const { return m_timestamp; } // get time statement was created (but not necessarily started talking)
|
||||
|
||||
public:
|
||||
friend class BotChatterInterface;
|
||||
|
||||
BotChatterInterface *m_chatter; // the chatter system this statement is part of
|
||||
BotStatement *m_next, *m_prev; // linked list hooks
|
||||
BotStatementType m_type; // what kind of statement this is
|
||||
int m_subject; // who this subject is about
|
||||
Place m_place; // explicit place - note some phrases have implicit places as well
|
||||
BotMeme *m_meme; // a statement can only have a single meme for now
|
||||
|
||||
float m_timestamp; // time when message was created
|
||||
float m_startTime; // the earliest time this statement can be spoken
|
||||
float m_expireTime; // time when this statement is no longer valid
|
||||
float m_speakTimestamp; // time when message began being spoken
|
||||
bool m_isSpeaking; // true if this statement is current being spoken
|
||||
|
||||
float m_nextTime; // time for next phrase to begin
|
||||
|
||||
enum { MAX_BOT_PHRASES = 4 };
|
||||
enum ContextType
|
||||
{
|
||||
CURRENT_ENEMY_COUNT,
|
||||
REMAINING_ENEMY_COUNT,
|
||||
SHORT_DELAY,
|
||||
LONG_DELAY,
|
||||
ACCUMULATE_ENEMIES_DELAY,
|
||||
};
|
||||
struct
|
||||
{
|
||||
bool isPhrase;
|
||||
union
|
||||
{
|
||||
const BotPhrase *phrase;
|
||||
ContextType context;
|
||||
};
|
||||
|
||||
}
|
||||
m_statement[MAX_BOT_PHRASES];
|
||||
|
||||
enum { MAX_BOT_CONDITIONS = 4 };
|
||||
enum ConditionType
|
||||
{
|
||||
IS_IN_COMBAT,
|
||||
RADIO_SILENCE,
|
||||
ENEMIES_REMAINING,
|
||||
NUM_CONDITIONS,
|
||||
};
|
||||
|
||||
ConditionType m_condition[MAX_BOT_CONDITIONS]; // conditions that must be true for the statement to be said
|
||||
int m_conditionCount;
|
||||
|
||||
int m_index; // m_index refers to the phrase currently being spoken, or -1 if we havent started yet
|
||||
int m_count;
|
||||
};
|
||||
|
||||
// This class defines the interface to the bot radio chatter system
|
||||
class BotChatterInterface {
|
||||
public:
|
||||
CCSBot *GetOwner() const { return m_me; }
|
||||
int GetPitch() const { return m_pitch; }
|
||||
bool SeesAtLeastOneEnemy() const { return m_seeAtLeastOneEnemy; }
|
||||
|
||||
public:
|
||||
BotStatement *m_statementList; // list of all active/pending messages for this bot
|
||||
CCSBot *m_me; // the bot this chatter is for
|
||||
bool m_seeAtLeastOneEnemy;
|
||||
float m_timeWhenSawFirstEnemy;
|
||||
bool m_reportedEnemies;
|
||||
bool m_requestedBombLocation; // true if we already asked where the bomb has been planted
|
||||
int m_pitch;
|
||||
IntervalTimer m_needBackupInterval;
|
||||
IntervalTimer m_spottedBomberInterval;
|
||||
IntervalTimer m_scaredInterval;
|
||||
IntervalTimer m_planInterval;
|
||||
CountdownTimer m_spottedLooseBombTimer;
|
||||
CountdownTimer m_heardNoiseTimer;
|
||||
CountdownTimer m_escortingHostageTimer;
|
||||
};
|
||||
|
||||
extern BotPhraseManager *TheBotPhrases;
|
145
metamod/extra/example/include/hlsdk/dlls/bot/cs_bot_manager.h
Normal file
145
metamod/extra/example/include/hlsdk/dlls/bot/cs_bot_manager.h
Normal file
@ -0,0 +1,145 @@
|
||||
/*
|
||||
*
|
||||
* 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
|
||||
|
||||
extern CBotManager *TheBots;
|
||||
|
||||
// The manager for Counter-Strike specific bots
|
||||
class CCSBotManager: public CBotManager {
|
||||
public:
|
||||
virtual void ClientDisconnect(CBasePlayer *pPlayer) = 0;
|
||||
virtual BOOL ClientCommand(CBasePlayer *pPlayer, const char *pcmd) = 0;
|
||||
|
||||
virtual void ServerActivate() = 0;
|
||||
virtual void ServerDeactivate() = 0;
|
||||
|
||||
virtual void ServerCommand(const char *pcmd) = 0;
|
||||
virtual void AddServerCommand(const char *cmd) = 0;
|
||||
virtual void AddServerCommands() = 0;
|
||||
|
||||
virtual void RestartRound() = 0; // (EXTEND) invoked when a new round begins
|
||||
virtual void StartFrame() = 0; // (EXTEND) called each frame
|
||||
|
||||
virtual void OnEvent(GameEventType event, CBaseEntity *entity = NULL, CBaseEntity *other = NULL) = 0;
|
||||
virtual unsigned int GetPlayerPriority(CBasePlayer *player) const = 0; // return priority of player (0 = max pri)
|
||||
virtual bool IsImportantPlayer(CBasePlayer *player) const = 0; // return true if player is important to scenario (VIP, bomb carrier, etc)
|
||||
|
||||
public:
|
||||
// the supported game scenarios
|
||||
enum GameScenarioType
|
||||
{
|
||||
SCENARIO_DEATHMATCH,
|
||||
SCENARIO_DEFUSE_BOMB,
|
||||
SCENARIO_RESCUE_HOSTAGES,
|
||||
SCENARIO_ESCORT_VIP
|
||||
};
|
||||
GameScenarioType GetScenario() const { return m_gameScenario; }
|
||||
|
||||
// "zones"
|
||||
// depending on the game mode, these are bomb zones, rescue zones, etc.
|
||||
enum { MAX_ZONES = 4 }; // max # of zones in a map
|
||||
enum { MAX_ZONE_NAV_AREAS = 16 }; // max # of nav areas in a zone
|
||||
struct Zone
|
||||
{
|
||||
CBaseEntity *m_entity; // the map entity
|
||||
CNavArea *m_area[MAX_ZONE_NAV_AREAS]; // nav areas that overlap this zone
|
||||
int m_areaCount;
|
||||
Vector m_center;
|
||||
bool m_isLegacy; // if true, use pev->origin and 256 unit radius as zone
|
||||
int m_index;
|
||||
Extent m_extent;
|
||||
};
|
||||
|
||||
const Zone *GetZone(int i) const { return &m_zone[i]; }
|
||||
int GetZoneCount() const { return m_zoneCount; }
|
||||
|
||||
// pick a zone at random and return it
|
||||
const Zone *GetRandomZone() const
|
||||
{
|
||||
if (!m_zoneCount)
|
||||
return NULL;
|
||||
|
||||
return &m_zone[RANDOM_LONG(0, m_zoneCount - 1)];
|
||||
}
|
||||
|
||||
bool IsBombPlanted() const { return m_isBombPlanted; } // returns true if bomb has been planted
|
||||
float GetBombPlantTimestamp() const { return m_bombPlantTimestamp; } // return time bomb was planted
|
||||
bool IsTimeToPlantBomb() const { return (gpGlobals->time >= m_earliestBombPlantTimestamp); } // return true if it's ok to try to plant bomb
|
||||
CBasePlayer *GetBombDefuser() const { return m_bombDefuser; } // return the player currently defusing the bomb, or NULL
|
||||
CBaseEntity *GetLooseBomb() { return m_looseBomb; } // return the bomb if it is loose on the ground
|
||||
CNavArea *GetLooseBombArea() const { return m_looseBombArea; } // return area that bomb is in/near
|
||||
|
||||
float GetLastSeenEnemyTimestamp() const { return m_lastSeenEnemyTimestamp; } // return the last time anyone has seen an enemy
|
||||
void SetLastSeenEnemyTimestamp() { m_lastSeenEnemyTimestamp = gpGlobals->time; }
|
||||
|
||||
float GetRoundStartTime() const { return m_roundStartTimestamp; }
|
||||
float GetElapsedRoundTime() const { return gpGlobals->time - m_roundStartTimestamp; } // return the elapsed time since the current round began
|
||||
|
||||
bool IsDefenseRushing() const { return m_isDefenseRushing; } // returns true if defense team has "decided" to rush this round
|
||||
bool IsRoundOver() const { return m_isRoundOver; } // return true if the round has ended
|
||||
|
||||
unsigned int GetNavPlace() const { return m_navPlace; }
|
||||
void SetNavPlace(unsigned int place) { m_navPlace = place; }
|
||||
|
||||
public:
|
||||
GameScenarioType m_gameScenario; // what kind of game are we playing
|
||||
|
||||
Zone m_zone[MAX_ZONES];
|
||||
int m_zoneCount;
|
||||
|
||||
bool m_isBombPlanted; // true if bomb has been planted
|
||||
float m_bombPlantTimestamp; // time bomb was planted
|
||||
float m_earliestBombPlantTimestamp; // don't allow planting until after this time has elapsed
|
||||
CBasePlayer *m_bombDefuser; // the player currently defusing a bomb
|
||||
EHANDLE m_looseBomb; // will be non-NULL if bomb is loose on the ground
|
||||
CNavArea *m_looseBombArea; // area that bomb is is/near
|
||||
|
||||
bool m_isRoundOver; // true if the round has ended
|
||||
float m_radioMsgTimestamp[24][2];
|
||||
|
||||
float m_lastSeenEnemyTimestamp;
|
||||
float m_roundStartTimestamp; // the time when the current round began
|
||||
|
||||
bool m_isDefenseRushing; // whether defensive team is rushing this round or not
|
||||
|
||||
unsigned int m_navPlace;
|
||||
CountdownTimer m_respawnTimer;
|
||||
bool m_isRespawnStarted;
|
||||
bool m_canRespawn;
|
||||
bool m_bServerActive;
|
||||
};
|
||||
|
||||
inline int OtherTeam(int team)
|
||||
{
|
||||
return (team == TERRORIST) ? CT : TERRORIST;
|
||||
}
|
||||
|
||||
inline CCSBotManager *TheCSBots()
|
||||
{
|
||||
return reinterpret_cast<CCSBotManager *>(TheBots);
|
||||
}
|
90
metamod/extra/example/include/hlsdk/dlls/bot/cs_gamestate.h
Normal file
90
metamod/extra/example/include/hlsdk/dlls/bot/cs_gamestate.h
Normal file
@ -0,0 +1,90 @@
|
||||
/*
|
||||
*
|
||||
* 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 CCSBot;
|
||||
|
||||
// This class represents the game state as known by a particular bot
|
||||
class CSGameState {
|
||||
public:
|
||||
// bomb defuse scenario
|
||||
enum BombState
|
||||
{
|
||||
MOVING, // being carried by a Terrorist
|
||||
LOOSE, // loose on the ground somewhere
|
||||
PLANTED, // planted and ticking
|
||||
DEFUSED, // the bomb has been defused
|
||||
EXPLODED, // the bomb has exploded
|
||||
};
|
||||
|
||||
bool IsBombMoving() const { return (m_bombState == MOVING); }
|
||||
bool IsBombLoose() const { return (m_bombState == LOOSE); }
|
||||
bool IsBombPlanted() const { return (m_bombState == PLANTED); }
|
||||
bool IsBombDefused() const { return (m_bombState == DEFUSED); }
|
||||
bool IsBombExploded() const { return (m_bombState == EXPLODED); }
|
||||
|
||||
public:
|
||||
CCSBot *m_owner; // who owns this gamestate
|
||||
bool m_isRoundOver; // true if round is over, but no yet reset
|
||||
|
||||
// bomb defuse scenario
|
||||
BombState GetBombState() { return m_bombState; }
|
||||
BombState m_bombState; // what we think the bomb is doing
|
||||
|
||||
IntervalTimer m_lastSawBomber;
|
||||
Vector m_bomberPos;
|
||||
|
||||
IntervalTimer m_lastSawLooseBomb;
|
||||
Vector m_looseBombPos;
|
||||
|
||||
bool m_isBombsiteClear[4]; // corresponds to zone indices in CCSBotManager
|
||||
int m_bombsiteSearchOrder[4]; // randomized order of bombsites to search
|
||||
int m_bombsiteCount;
|
||||
int m_bombsiteSearchIndex; // the next step in the search
|
||||
|
||||
int m_plantedBombsite; // zone index of the bombsite where the planted bomb is
|
||||
|
||||
bool m_isPlantedBombPosKnown; // if true, we know the exact location of the bomb
|
||||
Vector m_plantedBombPos;
|
||||
|
||||
// hostage rescue scenario
|
||||
struct HostageInfo
|
||||
{
|
||||
CHostage *hostage;
|
||||
Vector knownPos;
|
||||
bool isValid;
|
||||
bool isAlive;
|
||||
bool isFree; // not being escorted by a CT
|
||||
}
|
||||
m_hostage[MAX_HOSTAGES];
|
||||
int m_hostageCount; // number of hostages left in map
|
||||
CountdownTimer m_validateInterval;
|
||||
|
||||
bool m_allHostagesRescued; // if true, so every hostages been is rescued
|
||||
bool m_haveSomeHostagesBeenTaken; // true if a hostage has been moved by a CT (and we've seen it)
|
||||
};
|
109
metamod/extra/example/include/hlsdk/dlls/buttons.h
Normal file
109
metamod/extra/example/include/hlsdk/dlls/buttons.h
Normal file
@ -0,0 +1,109 @@
|
||||
/*
|
||||
*
|
||||
* 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 SF_BUTTON_DONTMOVE 1
|
||||
#define SF_ROTBUTTON_NOTSOLID 1
|
||||
#define SF_BUTTON_TOGGLE 32 // button stays pushed until reactivated
|
||||
#define SF_BUTTON_SPARK_IF_OFF 64 // button sparks in OFF state
|
||||
#define SF_BUTTON_TOUCH_ONLY 256 // button only fires as a result of USE key.
|
||||
|
||||
#define SF_GLOBAL_SET 1 // Set global state to initial state on spawn
|
||||
|
||||
#define SF_MULTI_INIT 1
|
||||
|
||||
// Make this button behave like a door (HACKHACK)
|
||||
// This will disable use and make the button solid
|
||||
// rotating buttons were made SOLID_NOT by default since their were some
|
||||
// collision problems with them...
|
||||
#define SF_MOMENTARY_DOOR 0x0001
|
||||
|
||||
#define SF_SPARK_TOOGLE 32
|
||||
#define SF_SPARK_IF_OFF 64
|
||||
|
||||
#define SF_BTARGET_USE 0x0001
|
||||
#define SF_BTARGET_ON 0x0002
|
||||
|
||||
class CEnvGlobal: public CPointEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
string_t m_globalstate;
|
||||
int m_triggermode;
|
||||
int m_initialstate;
|
||||
};
|
||||
|
||||
class CRotButton: public CBaseButton {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Restart() = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
public:
|
||||
Vector m_vecSpawn;
|
||||
};
|
||||
|
||||
class CMomentaryRotButton: public CBaseToggle {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
int m_lastUsed;
|
||||
int m_direction;
|
||||
float m_returnSpeed;
|
||||
Vector m_start;
|
||||
Vector m_end;
|
||||
int m_sounds;
|
||||
};
|
||||
|
||||
class CEnvSpark: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
public:
|
||||
float m_flDelay;
|
||||
};
|
||||
|
||||
class CButtonTarget: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual BOOL TakeDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType) = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
};
|
File diff suppressed because it is too large
Load Diff
@ -1,38 +1,91 @@
|
||||
/***
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
* 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 product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
* 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
|
||||
*
|
||||
****/
|
||||
//
|
||||
// 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 // ???
|
||||
* 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 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 MAX_ITEMS 4 // 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 DEFAULT_FOV 90 // the default field of view
|
||||
|
||||
#define HIDEHUD_WEAPONS (1<<0)
|
||||
#define HIDEHUD_FLASHLIGHT (1<<1)
|
||||
#define HIDEHUD_ALL (1<<2)
|
||||
#define HIDEHUD_HEALTH (1<<3)
|
||||
#define HIDEHUD_TIMER (1<<4)
|
||||
#define HIDEHUD_MONEY (1<<5)
|
||||
#define HIDEHUD_CROSSHAIR (1<<6)
|
||||
#define HIDEHUD_OBSERVER_CROSSHAIR (1<<7)
|
||||
|
||||
#define STATUSICON_HIDE 0
|
||||
#define STATUSICON_SHOW 1
|
||||
#define STATUSICON_FLASH 2
|
||||
|
||||
#define HUD_PRINTNOTIFY 1
|
||||
#define HUD_PRINTCONSOLE 2
|
||||
#define HUD_PRINTTALK 3
|
||||
#define HUD_PRINTCENTER 4
|
||||
#define HUD_PRINTRADIO 5
|
||||
|
||||
#define STATUS_NIGHTVISION_ON 1
|
||||
#define STATUS_NIGHTVISION_OFF 0
|
||||
|
||||
#define ITEM_STATUS_NIGHTVISION (1<<0)
|
||||
#define ITEM_STATUS_DEFUSER (1<<1)
|
||||
|
||||
#define SCORE_STATUS_DEAD (1<<0)
|
||||
#define SCORE_STATUS_BOMB (1<<1)
|
||||
#define SCORE_STATUS_VIP (1<<2)
|
||||
|
||||
#define SIGNAL_BUY (1<<0)
|
||||
#define SIGNAL_BOMB (1<<1)
|
||||
#define SIGNAL_RESCUE (1<<2)
|
||||
#define SIGNAL_ESCAPE (1<<3)
|
||||
#define SIGNAL_VIPSAFETY (1<<4)
|
||||
|
||||
// player data iuser3
|
||||
#define PLAYER_CAN_SHOOT (1<<0)
|
||||
#define PLAYER_FREEZE_TIME_OVER (1<<1)
|
||||
#define PLAYER_IN_BOMB_ZONE (1<<2)
|
||||
#define PLAYER_HOLDING_SHIELD (1<<3)
|
||||
|
||||
#define MENU_KEY_1 (1<<0)
|
||||
#define MENU_KEY_2 (1<<1)
|
||||
#define MENU_KEY_3 (1<<2)
|
||||
#define MENU_KEY_4 (1<<3)
|
||||
#define MENU_KEY_5 (1<<4)
|
||||
#define MENU_KEY_6 (1<<5)
|
||||
#define MENU_KEY_7 (1<<6)
|
||||
#define MENU_KEY_8 (1<<7)
|
||||
#define MENU_KEY_9 (1<<8)
|
||||
#define MENU_KEY_0 (1<<9)
|
||||
|
||||
#define MAX_AMMO_TYPES 32 // ???
|
||||
#define MAX_AMMO_SLOTS 32 // not really slots
|
||||
|
||||
#define HUD_PRINTNOTIFY 1
|
||||
@ -40,7 +93,35 @@
|
||||
#define HUD_PRINTTALK 3
|
||||
#define HUD_PRINTCENTER 4
|
||||
|
||||
|
||||
#define WEAPON_SUIT 31
|
||||
#define WEAPON_ALLWEAPONS (~(1 << WEAPON_SUIT))
|
||||
|
||||
#endif
|
||||
// custom enum
|
||||
enum VGUIMenu
|
||||
{
|
||||
VGUI_Menu_Team = 2,
|
||||
VGUI_Menu_MapBriefing = 4,
|
||||
|
||||
VGUI_Menu_Class_T = 26,
|
||||
VGUI_Menu_Class_CT,
|
||||
VGUI_Menu_Buy,
|
||||
VGUI_Menu_Buy_Pistol,
|
||||
VGUI_Menu_Buy_ShotGun,
|
||||
VGUI_Menu_Buy_Rifle,
|
||||
VGUI_Menu_Buy_SubMachineGun,
|
||||
VGUI_Menu_Buy_MachineGun,
|
||||
VGUI_Menu_Buy_Item,
|
||||
};
|
||||
|
||||
// custom enum
|
||||
enum VGUIMenuSlot
|
||||
{
|
||||
VGUI_MenuSlot_Buy_Pistol = 1,
|
||||
VGUI_MenuSlot_Buy_ShotGun,
|
||||
VGUI_MenuSlot_Buy_SubMachineGun,
|
||||
VGUI_MenuSlot_Buy_Rifle,
|
||||
VGUI_MenuSlot_Buy_MachineGun,
|
||||
VGUI_MenuSlot_Buy_PrimAmmo,
|
||||
VGUI_MenuSlot_Buy_SecAmmo,
|
||||
VGUI_MenuSlot_Buy_Item,
|
||||
};
|
||||
|
@ -1,65 +1,97 @@
|
||||
/***
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
* 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 product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
* 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
|
||||
*
|
||||
****/
|
||||
#ifndef CLIENT_H
|
||||
#define CLIENT_H
|
||||
* 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
|
||||
|
||||
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 );
|
||||
// custom enum
|
||||
enum ChooseTeamMenuSlot
|
||||
{
|
||||
MENU_SLOT_TEAM_UNDEFINED = -1,
|
||||
|
||||
extern void ClientPrecache( void );
|
||||
MENU_SLOT_TEAM_TERRORIST = 1,
|
||||
MENU_SLOT_TEAM_CT,
|
||||
MENU_SLOT_TEAM_VIP,
|
||||
|
||||
extern const char *GetGameDescription( void );
|
||||
extern void PlayerCustomization( edict_t *pEntity, customization_t *pCust );
|
||||
MENU_SLOT_TEAM_RANDOM = 5,
|
||||
MENU_SLOT_TEAM_SPECT
|
||||
};
|
||||
|
||||
extern void SpectatorConnect ( edict_t *pEntity );
|
||||
extern void SpectatorDisconnect ( edict_t *pEntity );
|
||||
extern void SpectatorThink ( edict_t *pEntity );
|
||||
// custom enum
|
||||
enum BuyItemMenuSlot
|
||||
{
|
||||
MENU_SLOT_ITEM_VEST = 1,
|
||||
MENU_SLOT_ITEM_VESTHELM,
|
||||
MENU_SLOT_ITEM_FLASHGREN,
|
||||
MENU_SLOT_ITEM_HEGREN,
|
||||
MENU_SLOT_ITEM_SMOKEGREN,
|
||||
MENU_SLOT_ITEM_NVG,
|
||||
MENU_SLOT_ITEM_DEFUSEKIT,
|
||||
MENU_SLOT_ITEM_SHIELD,
|
||||
};
|
||||
|
||||
extern void Sys_Error( const char *error_string );
|
||||
#define CS_NUM_SKIN 4
|
||||
#define CZ_NUM_SKIN 5
|
||||
|
||||
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 );
|
||||
#define FIELD_ORIGIN0 0
|
||||
#define FIELD_ORIGIN1 1
|
||||
#define FIELD_ORIGIN2 2
|
||||
|
||||
extern int GetWeaponData( struct edict_s *player, struct weapon_data_s *info );
|
||||
#define FIELD_ANGLES0 3
|
||||
#define FIELD_ANGLES1 4
|
||||
#define FIELD_ANGLES2 5
|
||||
|
||||
extern void CmdStart( const edict_t *player, const struct usercmd_s *cmd, unsigned int random_seed );
|
||||
extern void CmdEnd ( const edict_t *player );
|
||||
#define CUSTOMFIELD_ORIGIN0 0
|
||||
#define CUSTOMFIELD_ORIGIN1 1
|
||||
#define CUSTOMFIELD_ORIGIN2 2
|
||||
|
||||
extern int ConnectionlessPacket( const struct netadr_s *net_from, const char *args, char *response_buffer, int *response_buffer_size );
|
||||
#define CUSTOMFIELD_ANGLES0 3
|
||||
#define CUSTOMFIELD_ANGLES1 4
|
||||
#define CUSTOMFIELD_ANGLES2 5
|
||||
|
||||
extern int GetHullBounds( int hullnumber, float *mins, float *maxs );
|
||||
#define CUSTOMFIELD_SKIN 6
|
||||
#define CUSTOMFIELD_SEQUENCE 7
|
||||
#define CUSTOMFIELD_ANIMTIME 8
|
||||
|
||||
extern void CreateInstancedBaselines ( void );
|
||||
typedef struct
|
||||
{
|
||||
float m_fTimeEnteredPVS;
|
||||
|
||||
extern int InconsistentFile( const edict_t *player, const char *filename, char *disconnect_message );
|
||||
} ENTITYPVSSTATUS;
|
||||
|
||||
extern int AllowLagCompensation( void );
|
||||
struct PLAYERPVSSTATUS
|
||||
{
|
||||
ENTITYPVSSTATUS m_Status[1380];
|
||||
int headnode;
|
||||
int num_leafs;
|
||||
short int leafnums[ MAX_ENT_LEAFS ];
|
||||
};
|
||||
|
||||
#endif // CLIENT_H
|
||||
struct entity_field_alias_t
|
||||
{
|
||||
char name[32];
|
||||
int field;
|
||||
};
|
||||
|
50
metamod/extra/example/include/hlsdk/dlls/csbot_dll.h
Normal file
50
metamod/extra/example/include/hlsdk/dlls/csbot_dll.h
Normal file
@ -0,0 +1,50 @@
|
||||
/*
|
||||
*
|
||||
* 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 "../game_shared/GameEvent.h"
|
||||
#include "../game_shared/bot/bot_util.h"
|
||||
#include "../game_shared/bot/simple_state_machine.h"
|
||||
#include "../game_shared/steam_util.h"
|
||||
#include "../game_shared/counter.h"
|
||||
#include "../game_shared/bot/bot_manager.h"
|
||||
#include "../game_shared/bot/bot_constants.h"
|
||||
#include "../game_shared/bot/bot.h"
|
||||
#include "../game_shared/shared_util.h"
|
||||
#include "../game_shared/bot/bot_profile.h"
|
||||
|
||||
#include "../game_shared/bot/improv.h"
|
||||
#include "../game_shared/bot/nav.h"
|
||||
#include "../game_shared/bot/nav_node.h"
|
||||
#include "../game_shared/bot/nav_area.h"
|
||||
#include "../game_shared/bot/nav_path.h"
|
||||
|
||||
#include "../dlls/hostage/hostage.h"
|
||||
#include "../dlls/hostage/hostage_localnav.h"
|
||||
|
||||
#include "../dlls/bot/cs_bot.h"
|
@ -1,23 +1,32 @@
|
||||
/***
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
* 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 product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
* 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
|
||||
*
|
||||
****/
|
||||
#ifndef DECALS_H
|
||||
#define DECALS_H
|
||||
* 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
|
||||
|
||||
//
|
||||
// Dynamic Decals
|
||||
//
|
||||
enum decal_e
|
||||
{
|
||||
DECAL_GUNSHOT1 = 0,
|
||||
@ -64,21 +73,11 @@ enum decal_e
|
||||
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
|
||||
extern DLL_DECALLIST gDecals[42];
|
||||
|
@ -1,21 +1,36 @@
|
||||
/***
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
* 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 product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
* 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
|
||||
*
|
||||
****/
|
||||
#ifndef DOORS_H
|
||||
#define DOORS_H
|
||||
* 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 DOOR_SENTENCEWAIT 6
|
||||
#define DOOR_SOUNDWAIT 3
|
||||
#define BUTTON_SOUNDWAIT 0.5
|
||||
|
||||
// doors
|
||||
#define SF_DOOR_ROTATE_Y 0
|
||||
#define SF_DOOR_START_OPEN 1
|
||||
#define SF_DOOR_ROTATE_BACKWARDS 2
|
||||
@ -26,8 +41,53 @@
|
||||
#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_TOUCH_ONLY_CLIENTS 1024 // Only clients can touch
|
||||
#define SF_DOOR_SILENT 0x80000000
|
||||
|
||||
class CBaseDoor: public CBaseToggle {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void Restart() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual void SetToggleState(int state) = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
virtual void Blocked(CBaseEntity *pOther) = 0;
|
||||
public:
|
||||
byte m_bHealthValue; // some doors are medi-kit doors, they give players health
|
||||
|
||||
byte m_bMoveSnd; // sound a door makes while moving
|
||||
byte m_bStopSnd; // sound a door makes when it stops
|
||||
|
||||
#endif //DOORS_H
|
||||
locksound_t m_ls; // door lock sounds
|
||||
|
||||
byte m_bLockedSound; // ordinals from entity selection
|
||||
byte m_bLockedSentence;
|
||||
byte m_bUnlockedSound;
|
||||
byte m_bUnlockedSentence;
|
||||
|
||||
float m_lastBlockedTimestamp;
|
||||
};
|
||||
|
||||
class CRotDoor: public CBaseDoor {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Restart() = 0;
|
||||
virtual void SetToggleState(int state) = 0;
|
||||
};
|
||||
|
||||
class CMomentaryDoor: public CBaseToggle {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
byte m_bMoveSnd; // sound a door makes while moving
|
||||
};
|
||||
|
@ -1,19 +1,31 @@
|
||||
/***
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
* 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 product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
* 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
|
||||
*
|
||||
****/
|
||||
#ifndef EFFECTS_H
|
||||
#define EFFECTS_H
|
||||
* 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 SF_BEAM_STARTON 0x0001
|
||||
#define SF_BEAM_TOGGLE 0x0002
|
||||
@ -26,33 +38,45 @@
|
||||
#define SF_BEAM_SHADEOUT 0x0100
|
||||
#define SF_BEAM_TEMPORARY 0x8000
|
||||
|
||||
#define SF_GIBSHOOTER_REPEATABLE 1
|
||||
#define SF_FUNNEL_REVERSE 1
|
||||
|
||||
#define SF_BUBBLES_STARTOFF 0x0001
|
||||
|
||||
#define SF_BLOOD_RANDOM 0x0001
|
||||
#define SF_BLOOD_STREAM 0x0002
|
||||
#define SF_BLOOD_PLAYER 0x0004
|
||||
#define SF_BLOOD_DECAL 0x0008
|
||||
|
||||
#define SF_SHAKE_EVERYONE 0x0001
|
||||
#define SF_SHAKE_DISRUPT 0x0002
|
||||
#define SF_SHAKE_INAIR 0x0004
|
||||
|
||||
#define SF_FADE_IN 0x0001
|
||||
#define SF_FADE_MODULATE 0x0002
|
||||
#define SF_FADE_ONLYONE 0x0004
|
||||
|
||||
#define SF_SPRITE_STARTON 0x0001
|
||||
#define SF_SPRITE_ONCE 0x0002
|
||||
#define SF_SPRITE_TEMPORARY 0x8000
|
||||
|
||||
class CSprite : public CPointEntity
|
||||
{
|
||||
#define SF_MESSAGE_ONCE 0x0001 // Fade in, not out
|
||||
#define SF_MESSAGE_ALL 0x0002 // Send to all clients
|
||||
|
||||
class CSprite: public CPointEntity {
|
||||
public:
|
||||
void Spawn( void );
|
||||
void Precache( void );
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void Restart() = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
|
||||
int ObjectCaps( void )
|
||||
public:
|
||||
void SetAttachment(edict_t *pEntity, int attachment)
|
||||
{
|
||||
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 )
|
||||
if (pEntity != NULL)
|
||||
{
|
||||
pev->skin = ENTINDEX(pEntity);
|
||||
pev->body = attachment;
|
||||
@ -60,10 +84,9 @@ public:
|
||||
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 )
|
||||
|
||||
float Frames() const { return m_maxFrame; }
|
||||
void SetTransparency(int rendermode, int r, int g, int b, int a, int fx)
|
||||
{
|
||||
pev->rendermode = rendermode;
|
||||
pev->rendercolor.x = r;
|
||||
@ -72,104 +95,68 @@ public:
|
||||
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 )
|
||||
void SetTexture(int spriteIndex) { pev->modelindex = spriteIndex; }
|
||||
void SetScale(float scale) { pev->scale = scale; }
|
||||
void SetColor(int r, int g, int b) { pev->rendercolor.x = r; pev->rendercolor.y = g; pev->rendercolor.z = b; }
|
||||
void SetBrightness(int brightness) { pev->renderamt = brightness; }
|
||||
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
|
||||
{
|
||||
class CBeam: public CBaseEntity {
|
||||
public:
|
||||
void Spawn( void );
|
||||
void Precache( void );
|
||||
int ObjectCaps( void )
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual Vector Center() = 0;
|
||||
public:
|
||||
void SetType(int type) { pev->rendermode = (pev->rendermode & 0xF0) | (type & 0x0F); }
|
||||
void SetFlags(int flags) { pev->rendermode = (pev->rendermode & 0x0F) | (flags & 0xF0); }
|
||||
void SetStartPos(const Vector &pos) { pev->origin = pos; }
|
||||
void SetEndPos(const Vector &pos) { pev->angles = pos; }
|
||||
|
||||
void SetStartEntity(int entityIndex);
|
||||
void SetEndEntity(int entityIndex);
|
||||
|
||||
void SetStartAttachment(int attachment) { pev->sequence = (pev->sequence & 0x0FFF) | ((attachment & 0xF) << 12); }
|
||||
void SetEndAttachment(int attachment) { pev->skin = (pev->skin & 0x0FFF) | ((attachment & 0xF) << 12); }
|
||||
void SetTexture(int spriteIndex) { pev->modelindex = spriteIndex; }
|
||||
void SetWidth(int width) { pev->scale = width; }
|
||||
void SetNoise(int amplitude) { pev->body = amplitude; }
|
||||
void SetColor(int r, int g, int b) { pev->rendercolor.x = r; pev->rendercolor.y = g; pev->rendercolor.z = b; }
|
||||
void SetBrightness(int brightness) { pev->renderamt = brightness; }
|
||||
void SetFrame(float frame) { pev->frame = frame; }
|
||||
void SetScrollRate(int speed) { pev->animtime = speed; }
|
||||
int GetType() const { return pev->rendermode & 0x0F; }
|
||||
int GetFlags() const { return pev->rendermode & 0xF0; }
|
||||
int GetStartEntity() const { return pev->sequence & 0xFFF; }
|
||||
int GetEndEntity() const { return pev->skin & 0xFFF; }
|
||||
|
||||
const Vector &GetStartPos();
|
||||
const Vector &GetEndPos();
|
||||
|
||||
int GetTexture() const { return pev->modelindex; }
|
||||
int GetWidth() const { return pev->scale; }
|
||||
int GetNoise() const { return pev->body; }
|
||||
int GetBrightness() const { return pev->renderamt; }
|
||||
int GetFrame() const { return pev->frame; }
|
||||
int GetScrollRate() const { return pev->animtime; }
|
||||
|
||||
void LiveForTime(float time)
|
||||
{
|
||||
int flags = 0;
|
||||
if ( pev->spawnflags & SF_BEAM_TEMPORARY )
|
||||
flags = FCAP_DONT_SAVE;
|
||||
return (CBaseEntity :: ObjectCaps() & ~FCAP_ACROSS_TRANSITION) | flags;
|
||||
SetThink(&CBeam::SUB_Remove);
|
||||
pev->nextthink = gpGlobals->time + time;
|
||||
}
|
||||
|
||||
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 )
|
||||
void BeamDamageInstant(TraceResult *ptr, float damage)
|
||||
{
|
||||
pev->dmg = damage;
|
||||
pev->dmgtime = gpGlobals->time - 1;
|
||||
@ -177,33 +164,244 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
#define SF_MESSAGE_ONCE 0x0001 // Fade in, not out
|
||||
#define SF_MESSAGE_ALL 0x0002 // Send to all clients
|
||||
|
||||
|
||||
class CLaser : public CBeam
|
||||
{
|
||||
class CLaser: public CBeam {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
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
|
||||
class CBubbling: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
int m_density;
|
||||
int m_frequency;
|
||||
int m_bubbleModel;
|
||||
int m_state;
|
||||
};
|
||||
|
||||
class CLightning: public CBeam {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual void Activate() = 0;
|
||||
public:
|
||||
inline BOOL ServerSide() const
|
||||
{
|
||||
if (!m_life && !(pev->spawnflags & SF_BEAM_RING))
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
public:
|
||||
int m_active;
|
||||
int m_iszStartEntity;
|
||||
int m_iszEndEntity;
|
||||
float m_life;
|
||||
int m_boltWidth;
|
||||
int m_noiseAmplitude;
|
||||
int m_brightness;
|
||||
int m_speed;
|
||||
float m_restrike;
|
||||
int m_spriteTexture;
|
||||
int m_iszSpriteName;
|
||||
int m_frameStart;
|
||||
float m_radius;
|
||||
};
|
||||
|
||||
class CGlow: public CPointEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual void Think() = 0;
|
||||
public:
|
||||
float m_lastTime;
|
||||
float m_maxFrame;
|
||||
};
|
||||
|
||||
class CBombGlow: public CSprite {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Think() = 0;
|
||||
public:
|
||||
float m_lastTime;
|
||||
float m_tmBeepPeriod;
|
||||
bool m_bSetModel;
|
||||
};
|
||||
|
||||
class CGibShooter: public CBaseDelay {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
virtual CGib *CreateGib() = 0;
|
||||
public:
|
||||
int m_iGibs;
|
||||
int m_iGibCapacity;
|
||||
int m_iGibMaterial;
|
||||
int m_iGibModelIndex;
|
||||
|
||||
float m_flGibVelocity;
|
||||
float m_flVariance;
|
||||
float m_flGibLife;
|
||||
};
|
||||
|
||||
class CEnvShooter: public CGibShooter {
|
||||
public:
|
||||
virtual void Precache() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual CGib *CreateGib() = 0;
|
||||
};
|
||||
|
||||
#define MAX_BEAM 24
|
||||
|
||||
class CTestEffect: public CBaseDelay {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
int m_iLoop;
|
||||
int m_iBeam;
|
||||
|
||||
CBeam *m_pBeam[MAX_BEAM];
|
||||
|
||||
float m_flBeamTime[MAX_BEAM];
|
||||
float m_flStartTime;
|
||||
};
|
||||
|
||||
class CBlood: public CPointEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
|
||||
public:
|
||||
int Color() const { return pev->impulse; }
|
||||
float BloodAmount() const { return pev->dmg; }
|
||||
|
||||
void SetColor(int color) { pev->impulse = color; }
|
||||
void SetBloodAmount(float amount) { pev->dmg = amount; }
|
||||
};
|
||||
|
||||
class CShake: public CPointEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
float Amplitude() const { return pev->scale; }
|
||||
float Frequency() const { return pev->dmg_save; }
|
||||
float Duration() const { return pev->dmg_take; }
|
||||
float Radius() const { return pev->dmg; }
|
||||
|
||||
void SetAmplitude(float amplitude) { pev->scale = amplitude; }
|
||||
void SetFrequency(float frequency) { pev->dmg_save = frequency; }
|
||||
void SetDuration(float duration) { pev->dmg_take = duration; }
|
||||
void SetRadius(float radius) { pev->dmg = radius; }
|
||||
};
|
||||
|
||||
class CFade: public CPointEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
float Duration() const { return pev->dmg_take; }
|
||||
float HoldTime() const { return pev->dmg_save; }
|
||||
|
||||
void SetDuration(float duration) { pev->dmg_take = duration; }
|
||||
void SetHoldTime(float hold) { pev->dmg_save = hold; }
|
||||
};
|
||||
|
||||
class CMessage: public CPointEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
};
|
||||
|
||||
class CEnvFunnel: public CBaseDelay {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
int m_iSprite;
|
||||
};
|
||||
|
||||
class CEnvBeverage: public CBaseDelay {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
};
|
||||
|
||||
class CItemSoda: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
};
|
||||
|
||||
// Inlines
|
||||
inline void CBeam::SetStartEntity(int entityIndex)
|
||||
{
|
||||
pev->sequence = (entityIndex & 0x0FFF) | ((pev->sequence & 0xF000) << 12);
|
||||
pev->owner = INDEXENT(entityIndex);
|
||||
}
|
||||
|
||||
inline void CBeam::SetEndEntity(int entityIndex)
|
||||
{
|
||||
pev->skin = (entityIndex & 0x0FFF) | ((pev->skin & 0xF000) << 12);
|
||||
pev->aiment = INDEXENT(entityIndex);
|
||||
}
|
||||
|
||||
inline const Vector &CBeam::GetStartPos()
|
||||
{
|
||||
if (GetType() == BEAM_ENTS)
|
||||
{
|
||||
edict_t *pent = INDEXENT(GetStartEntity());
|
||||
return pent->v.origin;
|
||||
}
|
||||
|
||||
return pev->origin;
|
||||
}
|
||||
|
||||
inline const Vector &CBeam::GetEndPos()
|
||||
{
|
||||
int type = GetType();
|
||||
if (type == BEAM_POINTS || type == BEAM_HOSE)
|
||||
{
|
||||
return pev->angles;
|
||||
}
|
||||
|
||||
edict_t *pent = INDEXENT(GetEndEntity());
|
||||
if (pent != NULL)
|
||||
{
|
||||
return pent->v.origin;
|
||||
}
|
||||
|
||||
return pev->angles;
|
||||
}
|
||||
|
@ -1,22 +1,31 @@
|
||||
/***
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
* 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 product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
* 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
|
||||
*
|
||||
****/
|
||||
#ifndef ENGINECALLBACK_H
|
||||
#define ENGINECALLBACK_H
|
||||
#ifdef _WIN32
|
||||
* 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
|
||||
#endif
|
||||
|
||||
#include "event_flags.h"
|
||||
|
||||
@ -55,6 +64,7 @@ extern enginefuncs_t g_engfuncs;
|
||||
#define TRACE_TOSS (*g_engfuncs.pfnTraceToss)
|
||||
#define TRACE_MONSTER_HULL (*g_engfuncs.pfnTraceMonsterHull)
|
||||
#define TRACE_HULL (*g_engfuncs.pfnTraceHull)
|
||||
#define TRACE_MODEL (*g_engfuncs.pfnTraceModel)
|
||||
#define GET_AIM_VECTOR (*g_engfuncs.pfnGetAimVector)
|
||||
#define SERVER_COMMAND (*g_engfuncs.pfnServerCommand)
|
||||
#define SERVER_EXECUTE (*g_engfuncs.pfnServerExecute)
|
||||
@ -69,11 +79,26 @@ extern enginefuncs_t g_engfuncs;
|
||||
#define CRC32_FINAL (*g_engfuncs.pfnCRC32_Final)
|
||||
#define RANDOM_LONG (*g_engfuncs.pfnRandomLong)
|
||||
#define RANDOM_FLOAT (*g_engfuncs.pfnRandomFloat)
|
||||
#define ADD_SERVER_COMMAND (*g_engfuncs.pfnAddServerCommand)
|
||||
#define SET_CLIENT_LISTENING (*g_engfuncs.pfnVoice_SetClientListening)
|
||||
#define GETPLAYERAUTHID (*g_engfuncs.pfnGetPlayerAuthId)
|
||||
#define GET_FILE_SIZE (*g_engfuncs.pfnGetFileSize)
|
||||
#define GET_APPROX_WAVE_PLAY_LEN (*g_engfuncs.pfnGetApproxWavePlayLen)
|
||||
#define IS_CAREER_MATCH (*g_engfuncs.pfnIsCareerMatch)
|
||||
#define GET_LOCALIZED_STRING_LENGTH (*g_engfuncs.pfnGetLocalizedStringLength)
|
||||
#define REGISTER_TUTOR_MESSAGE_SHOWN (*g_engfuncs.pfnRegisterTutorMessageShown)
|
||||
#define GET_TIMES_TUTOR_MESSAGE_SHOWN (*g_engfuncs.pfnGetTimesTutorMessageShown)
|
||||
#define ENG_CHECK_PARM (*g_engfuncs.pfnEngCheckParm)
|
||||
|
||||
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);
|
||||
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); }
|
||||
|
||||
inline void *GET_PRIVATE(edict_t *pent)
|
||||
{
|
||||
if (pent)
|
||||
return pent->pvPrivateData;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#define MESSAGE_END (*g_engfuncs.pfnMessageEnd)
|
||||
#define WRITE_BYTE (*g_engfuncs.pfnWriteByte)
|
||||
#define WRITE_CHAR (*g_engfuncs.pfnWriteChar)
|
||||
@ -92,13 +117,6 @@ inline void MESSAGE_BEGIN( int msg_dest, int msg_type, const float *pOrigin = NU
|
||||
#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)
|
||||
@ -106,6 +124,7 @@ inline void *GET_PRIVATE( edict_t *pent )
|
||||
#define GETENTITYILLUM (*g_engfuncs.pfnGetEntityIllum)
|
||||
#define FIND_ENTITY_IN_SPHERE (*g_engfuncs.pfnFindEntityInSphere)
|
||||
#define FIND_CLIENT_IN_PVS (*g_engfuncs.pfnFindClientInPVS)
|
||||
#define FIND_ENTITY_IN_PVS (*g_engfuncs.pfnEntitiesInPVS)
|
||||
#define EMIT_AMBIENT_SOUND (*g_engfuncs.pfnEmitAmbientSound)
|
||||
#define GET_MODEL_PTR (*g_engfuncs.pfnGetModelPtr)
|
||||
#define REG_USER_MSG (*g_engfuncs.pfnRegUserMsg)
|
||||
@ -114,6 +133,7 @@ inline void *GET_PRIVATE( edict_t *pent )
|
||||
#define NAME_FOR_FUNCTION (*g_engfuncs.pfnNameForFunction)
|
||||
#define TRACE_TEXTURE (*g_engfuncs.pfnTraceTexture)
|
||||
#define CLIENT_PRINTF (*g_engfuncs.pfnClientPrintf)
|
||||
#define SERVER_PRINT (*g_engfuncs.pfnServerPrint)
|
||||
#define CMD_ARGS (*g_engfuncs.pfnCmd_Args)
|
||||
#define CMD_ARGC (*g_engfuncs.pfnCmd_Argc)
|
||||
#define CMD_ARGV (*g_engfuncs.pfnCmd_Argv)
|
||||
@ -122,39 +142,37 @@ inline void *GET_PRIVATE( edict_t *pent )
|
||||
#define SET_CROSSHAIRANGLE (*g_engfuncs.pfnCrosshairAngle)
|
||||
#define LOAD_FILE_FOR_ME (*g_engfuncs.pfnLoadFileForMe)
|
||||
#define FREE_FILE (*g_engfuncs.pfnFreeFile)
|
||||
#define END_SECTION (*g_engfuncs.pfnEndSection)
|
||||
#define COMPARE_FILE_TIME (*g_engfuncs.pfnCompareFileTime)
|
||||
#define GET_GAME_DIR (*g_engfuncs.pfnGetGameDir)
|
||||
#define IS_MAP_VALID (*g_engfuncs.pfnIsMapValid)
|
||||
#define SET_CLIENT_MAXSPEED (*g_engfuncs.pfnSetClientMaxspeed)
|
||||
#define CREATE_FAKE_CLIENT (*g_engfuncs.pfnCreateFakeClient)
|
||||
#define PLAYER_RUN_MOVE (*g_engfuncs.pfnRunPlayerMove)
|
||||
#define NUMBER_OF_ENTITIES (*g_engfuncs.pfnNumberOfEntities)
|
||||
#define GET_INFO_BUFFER (*g_engfuncs.pfnGetInfoKeyBuffer)
|
||||
#define GET_KEY_VALUE (*g_engfuncs.pfnInfoKeyValue)
|
||||
#define SET_KEY_VALUE (*g_engfuncs.pfnSetKeyValue)
|
||||
#define SET_CLIENT_KEY_VALUE (*g_engfuncs.pfnSetClientKeyValue)
|
||||
#define IS_MAP_VALID (*g_engfuncs.pfnIsMapValid)
|
||||
#define STATIC_DECAL (*g_engfuncs.pfnStaticDecal)
|
||||
#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
|
||||
#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 REMOVE_KEY_VALUE (*g_engfuncs.pfnInfo_RemoveKey)
|
||||
#define SET_PHYSICS_KEY_VALUE (*g_engfuncs.pfnSetPhysicsKeyValue)
|
||||
#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)
|
||||
|
@ -1,32 +1,55 @@
|
||||
/***
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
* 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 product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
* 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
|
||||
*
|
||||
****/
|
||||
#ifndef EXPLODE_H
|
||||
#define EXPLODE_H
|
||||
* 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 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
|
||||
|
||||
#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
|
||||
class CShower: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual void Think() = 0;
|
||||
virtual void Touch(CBaseEntity *pOther) = 0;
|
||||
};
|
||||
|
||||
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
|
||||
class CEnvExplosion: public CBaseMonster {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
int m_iMagnitude;
|
||||
int m_spriteScale;
|
||||
};
|
||||
|
113
metamod/extra/example/include/hlsdk/dlls/extdef.h
Normal file
113
metamod/extra/example/include/hlsdk/dlls/extdef.h
Normal file
@ -0,0 +1,113 @@
|
||||
/*
|
||||
*
|
||||
* 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 "regamedll_const.h"
|
||||
|
||||
#undef DLLEXPORT
|
||||
#ifdef _WIN32
|
||||
// Attributes to specify an "exported" function, visible from outside the
|
||||
// DLL.
|
||||
#define DLLEXPORT __declspec(dllexport)
|
||||
// WINAPI should be provided in the windows compiler headers.
|
||||
// It's usually defined to something like "__stdcall".
|
||||
|
||||
#define NOINLINE __declspec(noinline)
|
||||
#else
|
||||
#define DLLEXPORT __attribute__((visibility("default")))
|
||||
#define WINAPI /* */
|
||||
#define NOINLINE __attribute__((noinline))
|
||||
#endif // _WIN32
|
||||
|
||||
// Manual branch optimization for GCC 3.0.0 and newer
|
||||
#if !defined(__GNUC__) || __GNUC__ < 3
|
||||
#define likely(x) (x)
|
||||
#define unlikely(x) (x)
|
||||
#else
|
||||
#define likely(x) __builtin_expect(!!(x), 1)
|
||||
#define unlikely(x) __builtin_expect(!!(x), 0)
|
||||
#endif
|
||||
|
||||
// Simplified macro for declaring/defining exported DLL functions. They
|
||||
// need to be 'extern "C"' so that the C++ compiler enforces parameter
|
||||
// type-matching, rather than considering routines with mis-matched
|
||||
// arguments/types to be overloaded functions...
|
||||
//
|
||||
// AFAIK, this is os-independent, but it's included here in osdep.h where
|
||||
// DLLEXPORT is defined, for convenience.
|
||||
#define C_DLLEXPORT extern "C" DLLEXPORT
|
||||
|
||||
enum hash_types_e { CLASSNAME };
|
||||
|
||||
// Things that toggle (buttons/triggers/doors) need this
|
||||
enum TOGGLE_STATE { TS_AT_TOP, TS_AT_BOTTOM, TS_GOING_UP, TS_GOING_DOWN };
|
||||
|
||||
typedef struct hash_item_s
|
||||
{
|
||||
entvars_t *pev;
|
||||
struct hash_item_s *next;
|
||||
struct hash_item_s *lastHash;
|
||||
int pevIndex;
|
||||
|
||||
} hash_item_t;
|
||||
|
||||
typedef struct locksounds
|
||||
{
|
||||
string_t sLockedSound;
|
||||
string_t sLockedSentence;
|
||||
string_t sUnlockedSound;
|
||||
string_t sUnlockedSentence;
|
||||
int iLockedSentence;
|
||||
int iUnlockedSentence;
|
||||
float flwaitSound;
|
||||
float flwaitSentence;
|
||||
byte bEOFLocked;
|
||||
byte bEOFUnlocked;
|
||||
|
||||
} locksound_t;
|
||||
|
||||
typedef struct hudtextparms_s
|
||||
{
|
||||
float x;
|
||||
float y;
|
||||
int effect;
|
||||
byte r1,g1,b1,a1;
|
||||
byte r2,g2,b2,a2;
|
||||
float fadeinTime;
|
||||
float fadeoutTime;
|
||||
float holdTime;
|
||||
float fxTime;
|
||||
int channel;
|
||||
|
||||
} hudtextparms_t;
|
||||
|
||||
enum USE_TYPE { USE_OFF, USE_ON, USE_SET, USE_TOGGLE };
|
||||
enum TRAIN_CODE { TRAIN_SAFE, TRAIN_BLOCKING, TRAIN_FOLLOWING };
|
||||
enum IGNORE_MONSTERS { ignore_monsters = 1, dont_ignore_monsters = 0, missile = 2 };
|
||||
enum IGNORE_GLASS { ignore_glass = 1, dont_ignore_glass = 0 };
|
||||
enum { point_hull = 0, human_hull = 1, large_hull = 2, head_hull = 3 };
|
@ -1,71 +1,58 @@
|
||||
/***
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
* 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 product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
* 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
|
||||
*
|
||||
****/
|
||||
#ifndef EXTDLL_H
|
||||
#define EXTDLL_H
|
||||
* 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
|
||||
|
||||
//
|
||||
// Global header file for extension DLLs
|
||||
//
|
||||
#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
|
||||
|
||||
// Allow "DEBUG" in addition to default "_DEBUG"
|
||||
#ifdef _DEBUG
|
||||
#define DEBUG 1
|
||||
#endif
|
||||
#include "archtypes.h"
|
||||
#include "maintypes.h"
|
||||
#include "regamedll_common.h"
|
||||
|
||||
// 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
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#define NOWINRES
|
||||
#define NOSERVICE
|
||||
#define NOMCX
|
||||
#define NOIME
|
||||
#include "winsani_in.h"
|
||||
#include "windows.h"
|
||||
#include "winsani_out.h"
|
||||
#undef PlaySound
|
||||
#else
|
||||
#include <limits.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#endif // _WIN32
|
||||
|
||||
// Misc C-runtime library headers
|
||||
#include "stdio.h"
|
||||
@ -73,25 +60,23 @@ typedef int BOOL;
|
||||
#include "math.h"
|
||||
|
||||
// Header file containing definition of globalvars_t and entvars_t
|
||||
typedef unsigned int func_t; //
|
||||
typedef int EOFFSET; // More explicit than "int"
|
||||
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"
|
||||
|
||||
//#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
|
||||
#include "extdef.h"
|
||||
|
@ -1,74 +1,120 @@
|
||||
/***
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
* 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 product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
* 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
|
||||
*
|
||||
****/
|
||||
#ifndef FUNC_BREAK_H
|
||||
#define FUNC_BREAK_H
|
||||
* 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 enum { expRandom, expDirected} Explosions;
|
||||
typedef enum { matGlass = 0, matWood, matMetal, matFlesh, matCinderBlock, matCeilingTile, matComputer, matUnbreakableGlass, matRocks, matNone, matLastMaterial } Materials;
|
||||
// this many shards spawned when breakable objects break;
|
||||
#define NUM_SHARDS 6
|
||||
|
||||
#define NUM_SHARDS 6 // this many shards spawned when breakable objects break;
|
||||
// func breakable
|
||||
#define SF_BREAK_TRIGGER_ONLY 1 // may only be broken by trigger
|
||||
#define SF_BREAK_TOUCH 2 // can be 'crashed through' by running player (plate glass)
|
||||
#define SF_BREAK_PRESSURE 4 // can be broken by a player standing on it
|
||||
#define SF_BREAK_CROWBAR 256 // instant break if hit with crowbar
|
||||
|
||||
class CBreakable : public CBaseDelay
|
||||
// func_pushable (it's also func_breakable, so don't collide with those flags)
|
||||
#define SF_PUSH_BREAKABLE 128
|
||||
|
||||
typedef enum
|
||||
{
|
||||
expRandom = 0,
|
||||
expDirected,
|
||||
|
||||
} Explosions;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
matGlass = 0,
|
||||
matWood,
|
||||
matMetal,
|
||||
matFlesh,
|
||||
matCinderBlock,
|
||||
matCeilingTile,
|
||||
matComputer,
|
||||
matUnbreakableGlass,
|
||||
matRocks,
|
||||
matNone,
|
||||
matLastMaterial,
|
||||
|
||||
} Materials;
|
||||
|
||||
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 );
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void Restart() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
|
||||
// To spark when hit
|
||||
virtual void TraceAttack(entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType) = 0;
|
||||
|
||||
// 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 );
|
||||
virtual BOOL TakeDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType) = 0;
|
||||
|
||||
BOOL IsBreakable( void );
|
||||
BOOL SparkWhenHit( void );
|
||||
virtual int DamageDecal(int bitsDamageType) = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
|
||||
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[];
|
||||
public:
|
||||
BOOL Explodable() const { return ExplosionMagnitude() > 0; }
|
||||
int ExplosionMagnitude() const { return pev->impulse; }
|
||||
void ExplosionSetMagnitude(int magnitude) { pev->impulse = magnitude; }
|
||||
|
||||
public:
|
||||
Materials m_Material;
|
||||
Explosions m_Explosion;
|
||||
int m_idShard;
|
||||
float m_angle;
|
||||
int m_iszGibModel;
|
||||
int m_iszSpawnObject;
|
||||
float m_flHealth;
|
||||
};
|
||||
|
||||
#endif // FUNC_BREAK_H
|
||||
class CPushable: public CBreakable {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void Restart() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual BOOL TakeDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType) = 0;
|
||||
virtual void Touch(CBaseEntity *pOther) = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
|
||||
public:
|
||||
float MaxSpeed() const { return m_maxSpeed; }
|
||||
|
||||
public:
|
||||
int m_lastSound;
|
||||
float m_maxSpeed;
|
||||
float m_soundTime;
|
||||
};
|
159
metamod/extra/example/include/hlsdk/dlls/func_tank.h
Normal file
159
metamod/extra/example/include/hlsdk/dlls/func_tank.h
Normal file
@ -0,0 +1,159 @@
|
||||
/*
|
||||
*
|
||||
* 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 SF_TANK_ACTIVE 0x0001
|
||||
#define SF_TANK_PLAYER 0x0002
|
||||
#define SF_TANK_HUMANS 0x0004
|
||||
#define SF_TANK_ALIENS 0x0008
|
||||
#define SF_TANK_LINEOFSIGHT 0x0010
|
||||
#define SF_TANK_CANCONTROL 0x0020
|
||||
#define SF_TANK_SOUNDON 0x8000
|
||||
|
||||
enum TANKBULLET
|
||||
{
|
||||
TANK_BULLET_NONE = 0, // Custom damage
|
||||
TANK_BULLET_9MM, // env_laser (duration is 0.5 rate of fire)
|
||||
TANK_BULLET_MP5, // rockets
|
||||
TANK_BULLET_12MM, // explosion?
|
||||
};
|
||||
|
||||
class CFuncTank: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
|
||||
// Bmodels don't go across transitions
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual BOOL OnControls(entvars_t *pevTest) = 0;
|
||||
virtual void Think() = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
virtual void Fire(const Vector &barrelEnd, const Vector &forward, entvars_t *pevAttacker) = 0;
|
||||
virtual Vector UpdateTargetPosition(CBaseEntity *pTarget) = 0;
|
||||
public:
|
||||
BOOL IsActive() const { return (pev->spawnflags & SF_TANK_ACTIVE) == SF_TANK_ACTIVE; }
|
||||
void TankActivate()
|
||||
{
|
||||
pev->spawnflags |= SF_TANK_ACTIVE;
|
||||
pev->nextthink = pev->ltime + 0.1f;
|
||||
m_fireLast = 0.0f;
|
||||
}
|
||||
void TankDeactivate()
|
||||
{
|
||||
pev->spawnflags &= ~SF_TANK_ACTIVE;
|
||||
m_fireLast = 0.0f;
|
||||
StopRotSound();
|
||||
}
|
||||
|
||||
BOOL CanFire() const { return (gpGlobals->time - m_lastSightTime) < m_persist; }
|
||||
Vector BarrelPosition()
|
||||
{
|
||||
Vector forward, right, up;
|
||||
UTIL_MakeVectorsPrivate(pev->angles, forward, right, up);
|
||||
return pev->origin + (forward * m_barrelPos.x) + (right * m_barrelPos.y) + (up * m_barrelPos.z);
|
||||
}
|
||||
protected:
|
||||
CBasePlayer *m_pController;
|
||||
float m_flNextAttack;
|
||||
Vector m_vecControllerUsePos;
|
||||
|
||||
float m_yawCenter; // "Center" yaw
|
||||
float m_yawRate; // Max turn rate to track targets
|
||||
float m_yawRange; // Range of turning motion (one-sided: 30 is +/- 30 degress from center)
|
||||
// Zero is full rotation
|
||||
|
||||
float m_yawTolerance; // Tolerance angle
|
||||
|
||||
float m_pitchCenter; // "Center" pitch
|
||||
float m_pitchRate; // Max turn rate on pitch
|
||||
float m_pitchRange; // Range of pitch motion as above
|
||||
float m_pitchTolerance; // Tolerance angle
|
||||
|
||||
float m_fireLast; // Last time I fired
|
||||
float m_fireRate; // How many rounds/second
|
||||
float m_lastSightTime; // Last time I saw target
|
||||
float m_persist; // Persistence of firing (how long do I shoot when I can't see)
|
||||
float m_minRange; // Minimum range to aim/track
|
||||
float m_maxRange; // Max range to aim/track
|
||||
|
||||
Vector m_barrelPos; // Length of the freakin barrel
|
||||
float m_spriteScale; // Scale of any sprites we shoot
|
||||
int m_iszSpriteSmoke;
|
||||
int m_iszSpriteFlash;
|
||||
TANKBULLET m_bulletType; // Bullet type
|
||||
int m_iBulletDamage; // 0 means use Bullet type's default damage
|
||||
|
||||
Vector m_sightOrigin; // Last sight of target
|
||||
int m_spread; // firing spread
|
||||
int m_iszMaster; // Master entity (game_team_master or multisource)
|
||||
};
|
||||
|
||||
class CFuncTankGun: public CFuncTank {
|
||||
public:
|
||||
virtual void Fire(const Vector &barrelEnd, const Vector &forward, entvars_t *pevAttacker) = 0;
|
||||
};
|
||||
|
||||
class CFuncTankLaser: public CFuncTank {
|
||||
public:
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual void Activate() = 0;
|
||||
virtual void Think() = 0;
|
||||
virtual void Fire(const Vector &barrelEnd, const Vector &forward, entvars_t *pevAttacker) = 0;
|
||||
private:
|
||||
CLaser *m_pLaser;
|
||||
float m_laserTime;
|
||||
};
|
||||
|
||||
class CFuncTankRocket: public CFuncTank {
|
||||
public:
|
||||
virtual void Precache() = 0;
|
||||
virtual void Fire(const Vector &barrelEnd, const Vector &forward, entvars_t *pevAttacker) = 0;
|
||||
};
|
||||
|
||||
class CFuncTankMortar: public CFuncTank {
|
||||
public:
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual void Fire(const Vector &barrelEnd, const Vector &forward, entvars_t *pevAttacker) = 0;
|
||||
};
|
||||
|
||||
class CFuncTankControls: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual void Think() = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
CFuncTank *m_pTank;
|
||||
};
|
@ -1,27 +1,168 @@
|
||||
/***
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
* 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 product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
* 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
|
||||
*
|
||||
****/
|
||||
//=========================================================
|
||||
// GameRules
|
||||
//=========================================================
|
||||
* 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 "weapons.h"
|
||||
//#include "items.h"
|
||||
class CBasePlayerItem;
|
||||
class CBasePlayer;
|
||||
class CItem;
|
||||
class CBasePlayerAmmo;
|
||||
#include "voice_gamemgr.h"
|
||||
|
||||
#define MAX_RULE_BUFFER 1024
|
||||
#define MAX_VOTE_MAPS 100
|
||||
#define MAX_VIP_QUEUES 5
|
||||
|
||||
#define MAX_BOMB_RADIUS 2048
|
||||
|
||||
#define ITEM_RESPAWN_TIME 30
|
||||
#define WEAPON_RESPAWN_TIME 20
|
||||
#define AMMO_RESPAWN_TIME 20
|
||||
|
||||
// longest the intermission can last, in seconds
|
||||
#define MAX_INTERMISSION_TIME 120
|
||||
|
||||
// when we are within this close to running out of entities, items
|
||||
// marked with the ITEM_FLAG_LIMITINWORLD will delay their respawn
|
||||
#define ENTITY_INTOLERANCE 100
|
||||
|
||||
#define MAX_MOTD_CHUNK 60
|
||||
#define MAX_MOTD_LENGTH 1536 // (MAX_MOTD_CHUNK * 4)
|
||||
|
||||
// custom enum
|
||||
#define WINNER_NONE 0
|
||||
#define WINNER_DRAW 1
|
||||
|
||||
enum
|
||||
{
|
||||
WINSTATUS_CTS = 1,
|
||||
WINSTATUS_TERRORISTS,
|
||||
WINSTATUS_DRAW,
|
||||
};
|
||||
|
||||
// custom enum
|
||||
// used for EndRoundMessage() logged messages
|
||||
enum ScenarioEventEndRound
|
||||
{
|
||||
ROUND_NONE,
|
||||
ROUND_TARGET_BOMB,
|
||||
ROUND_VIP_ESCAPED,
|
||||
ROUND_VIP_ASSASSINATED,
|
||||
ROUND_TERRORISTS_ESCAPED,
|
||||
ROUND_CTS_PREVENT_ESCAPE,
|
||||
ROUND_ESCAPING_TERRORISTS_NEUTRALIZED,
|
||||
ROUND_BOMB_DEFUSED,
|
||||
ROUND_CTS_WIN,
|
||||
ROUND_TERRORISTS_WIN,
|
||||
ROUND_END_DRAW,
|
||||
ROUND_ALL_HOSTAGES_RESCUED,
|
||||
ROUND_TARGET_SAVED,
|
||||
ROUND_HOSTAGE_NOT_RESCUED,
|
||||
ROUND_TERRORISTS_NOT_ESCAPED,
|
||||
ROUND_VIP_NOT_ESCAPED,
|
||||
ROUND_GAME_COMMENCE,
|
||||
ROUND_GAME_RESTART,
|
||||
ROUND_GAME_OVER
|
||||
};
|
||||
|
||||
enum RewardRules
|
||||
{
|
||||
RR_CTS_WIN,
|
||||
RR_TERRORISTS_WIN,
|
||||
RR_TARGET_BOMB,
|
||||
RR_VIP_ESCAPED,
|
||||
RR_VIP_ASSASSINATED,
|
||||
RR_TERRORISTS_ESCAPED,
|
||||
RR_CTS_PREVENT_ESCAPE,
|
||||
RR_ESCAPING_TERRORISTS_NEUTRALIZED,
|
||||
RR_BOMB_DEFUSED,
|
||||
RR_BOMB_PLANTED,
|
||||
RR_BOMB_EXPLODED,
|
||||
RR_ALL_HOSTAGES_RESCUED,
|
||||
RR_TARGET_BOMB_SAVED,
|
||||
RR_HOSTAGE_NOT_RESCUED,
|
||||
RR_VIP_NOT_ESCAPED,
|
||||
RR_LOSER_BONUS_DEFAULT,
|
||||
RR_LOSER_BONUS_MIN,
|
||||
RR_LOSER_BONUS_MAX,
|
||||
RR_LOSER_BONUS_ADD,
|
||||
RR_RESCUED_HOSTAGE,
|
||||
RR_TOOK_HOSTAGE_ACC,
|
||||
RR_TOOK_HOSTAGE,
|
||||
RR_END
|
||||
};
|
||||
|
||||
// custom enum
|
||||
enum RewardAccount
|
||||
{
|
||||
REWARD_TARGET_BOMB = 3500,
|
||||
REWARD_VIP_ESCAPED = 3500,
|
||||
REWARD_VIP_ASSASSINATED = 3250,
|
||||
REWARD_TERRORISTS_ESCAPED = 3150,
|
||||
REWARD_CTS_PREVENT_ESCAPE = 3500,
|
||||
REWARD_ESCAPING_TERRORISTS_NEUTRALIZED = 3250,
|
||||
REWARD_BOMB_DEFUSED = 3250,
|
||||
REWARD_BOMB_PLANTED = 800,
|
||||
REWARD_BOMB_EXPLODED = 3250,
|
||||
REWARD_CTS_WIN = 3000,
|
||||
REWARD_TERRORISTS_WIN = 3000,
|
||||
REWARD_ALL_HOSTAGES_RESCUED = 2500,
|
||||
|
||||
// the end round was by the expiration time
|
||||
REWARD_TARGET_BOMB_SAVED = 3250,
|
||||
REWARD_HOSTAGE_NOT_RESCUED = 3250,
|
||||
REWARD_VIP_NOT_ESCAPED = 3250,
|
||||
|
||||
// loser bonus
|
||||
REWARD_LOSER_BONUS_DEFAULT = 1400,
|
||||
REWARD_LOSER_BONUS_MIN = 1500,
|
||||
REWARD_LOSER_BONUS_MAX = 3000,
|
||||
REWARD_LOSER_BONUS_ADD = 500,
|
||||
|
||||
REWARD_RESCUED_HOSTAGE = 750,
|
||||
REWARD_KILLED_ENEMY = 300,
|
||||
REWARD_KILLED_VIP = 2500,
|
||||
REWARD_VIP_HAVE_SELF_RESCUED = 2500,
|
||||
|
||||
REWARD_TAKEN_HOSTAGE = 1000,
|
||||
REWARD_TOOK_HOSTAGE_ACC = 100,
|
||||
REWARD_TOOK_HOSTAGE = 150,
|
||||
};
|
||||
|
||||
// custom enum
|
||||
enum PaybackForBadThing
|
||||
{
|
||||
PAYBACK_FOR_KILLED_TEAMMATES = -3300,
|
||||
};
|
||||
|
||||
// custom enum
|
||||
enum InfoMapBuyParam
|
||||
{
|
||||
BUYING_EVERYONE = 0,
|
||||
BUYING_ONLY_CTS,
|
||||
BUYING_ONLY_TERRORISTS,
|
||||
BUYING_NO_ONE,
|
||||
};
|
||||
|
||||
// weapon respawning return codes
|
||||
enum
|
||||
@ -46,6 +187,18 @@ enum
|
||||
GR_PLR_DROP_AMMO_NO,
|
||||
};
|
||||
|
||||
// custom enum
|
||||
enum
|
||||
{
|
||||
SCENARIO_BLOCK_TIME_EXPRIRED = (1 << 0), // flag "a"
|
||||
SCENARIO_BLOCK_NEED_PLAYERS = (1 << 1), // flag "b"
|
||||
SCENARIO_BLOCK_VIP_ESCAPE = (1 << 2), // flag "c"
|
||||
SCENARIO_BLOCK_PRISON_ESCAPE = (1 << 3), // flag "d"
|
||||
SCENARIO_BLOCK_BOMB = (1 << 4), // flag "e"
|
||||
SCENARIO_BLOCK_TEAM_EXTERMINATION = (1 << 5), // flag "f"
|
||||
SCENARIO_BLOCK_HOSTAGE_RESCUE = (1 << 6), // flag "g"
|
||||
};
|
||||
|
||||
// Player relationship return codes
|
||||
enum
|
||||
{
|
||||
@ -56,305 +209,480 @@ enum
|
||||
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(); }
|
||||
class CItem;
|
||||
|
||||
class CGameRules {
|
||||
protected:
|
||||
virtual void ChangeLevel( void );
|
||||
virtual void GoToIntermission( void );
|
||||
float m_flIntermissionEndTime;
|
||||
BOOL m_iEndIntermissionButtonHit;
|
||||
void SendMOTDToClient( edict_t *client );
|
||||
virtual ~CGameRules() {};
|
||||
public:
|
||||
virtual void RefreshSkillData() = 0; // fill skill data struct with proper values
|
||||
virtual void Think() = 0; // 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() = 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() = 0; // is this a multiplayer game? (either coop or deathmatch)
|
||||
virtual BOOL IsDeathmatch() = 0; // is this a deathmatch game?
|
||||
virtual BOOL IsTeamplay() = 0; // is this deathmatch game being played with team rules?
|
||||
virtual BOOL IsCoOp() = 0; // is this a coop game?
|
||||
virtual const char *GetGameDescription() = 0; // 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) = 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) = 0; // the client needs to be informed of the current game mode
|
||||
|
||||
// Client damage rules
|
||||
virtual float FlPlayerFallDamage(CBasePlayer *pPlayer) = 0;
|
||||
virtual BOOL FPlayerCanTakeDamage(CBasePlayer *pPlayer, CBaseEntity *pAttacker) = 0; // can this player take damage from this attacker?
|
||||
virtual BOOL ShouldAutoAim(CBasePlayer *pPlayer, edict_t *target) = 0;
|
||||
|
||||
// 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) = 0; // Place this player on their spawnspot and face them the proper direction.
|
||||
|
||||
virtual BOOL AllowAutoTargetCrosshair() = 0;
|
||||
virtual BOOL ClientCommand_DeadOrAlive(CBasePlayer *pPlayer, const char *pcmd) = 0;
|
||||
virtual BOOL ClientCommand(CBasePlayer *pPlayer, const char *pcmd) = 0; // handles the user commands; returns TRUE if command handled properly
|
||||
virtual void ClientUserInfoChanged(CBasePlayer *pPlayer, char *infobuffer) = 0; // 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 *pevInflictor) = 0; // Call this from within a GameRules class to report an obituary.
|
||||
|
||||
// Weapon retrieval
|
||||
virtual BOOL CanHavePlayerItem(CBasePlayer *pPlayer, CBasePlayerItem *pItem) = 0; // 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) = 0; // 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?
|
||||
|
||||
// Healthcharger respawn control
|
||||
virtual float FlHealthChargerRechargeTime() = 0; // how long until a depleted HealthCharger recharges itself?
|
||||
virtual float FlHEVChargerRechargeTime() = 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(CBasePlayer *pPlayer, CBaseEntity *pTarget) = 0; // What is the player's relationship with this entity?
|
||||
virtual int GetTeamIndex(const char *pTeamName) = 0;
|
||||
virtual const char *GetIndexedTeamName(int teamIndex) = 0;
|
||||
virtual BOOL IsValidTeam(const char *pTeamName) = 0;
|
||||
virtual void ChangePlayerTeam(CBasePlayer *pPlayer, const char *pTeamName, BOOL bKill, BOOL bGib) = 0;
|
||||
virtual const char *SetDefaultPlayerTeam(CBasePlayer *pPlayer) = 0;
|
||||
|
||||
// Sounds
|
||||
virtual BOOL PlayTextureSounds() = 0;
|
||||
|
||||
// Monsters
|
||||
virtual BOOL FAllowMonsters() = 0; // are monsters allowed
|
||||
|
||||
// Immediately end a multiplayer game
|
||||
virtual void EndMultiplayerGame() = 0;
|
||||
|
||||
// Stuff that is shared between client and server.
|
||||
virtual BOOL IsFreezePeriod() = 0;
|
||||
virtual void ServerDeactivate() = 0;
|
||||
virtual void CheckMapConditions() = 0;
|
||||
|
||||
// inline function's
|
||||
inline bool IsGameOver() const { return m_bGameOver; }
|
||||
inline void SetGameOver() { m_bGameOver = true; }
|
||||
|
||||
public:
|
||||
BOOL m_bFreezePeriod; // TRUE at beginning of round, set to FALSE when the period expires
|
||||
BOOL m_bBombDropped;
|
||||
|
||||
// custom
|
||||
char *m_GameDesc;
|
||||
bool m_bGameOver; // intermission or finale (deprecated name g_fGameOver)
|
||||
};
|
||||
|
||||
extern DLL_GLOBAL CGameRules* g_pGameRules;
|
||||
// CHalfLifeRules - rules for the single player Half-Life game.
|
||||
class CHalfLifeRules: public CGameRules {
|
||||
protected:
|
||||
virtual ~CHalfLifeRules() {};
|
||||
public:
|
||||
virtual void Think() = 0;
|
||||
virtual BOOL IsAllowedToSpawn(CBaseEntity *pEntity) = 0;
|
||||
virtual BOOL FAllowFlashlight() = 0;
|
||||
|
||||
virtual BOOL FShouldSwitchWeapon(CBasePlayer *pPlayer, CBasePlayerItem *pWeapon) = 0;
|
||||
virtual BOOL GetNextBestWeapon(CBasePlayer *pPlayer, CBasePlayerItem *pCurrentWeapon) = 0;
|
||||
|
||||
// Functions to verify the single/multiplayer status of a game
|
||||
virtual BOOL IsMultiplayer() = 0;
|
||||
virtual BOOL IsDeathmatch() = 0;
|
||||
virtual BOOL IsCoOp() = 0;
|
||||
|
||||
// Client connection/disconnection
|
||||
virtual BOOL ClientConnected(edict_t *pEntity, const char *pszName, const char *pszAddress, char szRejectReason[128]) = 0;
|
||||
virtual void InitHUD(CBasePlayer *pl) = 0; // the client dll is ready for updating
|
||||
virtual void ClientDisconnected(edict_t *pClient) = 0;
|
||||
|
||||
// Client damage rules
|
||||
virtual float FlPlayerFallDamage(CBasePlayer *pPlayer) = 0;
|
||||
|
||||
// Client spawn/respawn control
|
||||
virtual void PlayerSpawn(CBasePlayer *pPlayer) = 0;
|
||||
virtual void PlayerThink(CBasePlayer *pPlayer) = 0;
|
||||
virtual BOOL FPlayerCanRespawn(CBasePlayer *pPlayer) = 0;
|
||||
virtual float FlPlayerSpawnTime(CBasePlayer *pPlayer) = 0;
|
||||
virtual edict_t *GetPlayerSpawnSpot(CBasePlayer *pPlayer) = 0;
|
||||
|
||||
virtual BOOL AllowAutoTargetCrosshair() = 0;
|
||||
|
||||
// Client kills/scoring
|
||||
virtual int IPointsForKill(CBasePlayer *pAttacker, CBasePlayer *pKilled) = 0;
|
||||
virtual void PlayerKilled(CBasePlayer *pVictim, entvars_t *pKiller, entvars_t *pInflictor) = 0;
|
||||
virtual void DeathNotice(CBasePlayer *pVictim, entvars_t *pKiller, entvars_t *pInflictor) = 0;
|
||||
|
||||
// Weapon retrieval
|
||||
virtual void PlayerGotWeapon(CBasePlayer *pPlayer, CBasePlayerItem *pWeapon) = 0;
|
||||
|
||||
// Weapon spawn/respawn control
|
||||
virtual int WeaponShouldRespawn(CBasePlayerItem *pWeapon) = 0;
|
||||
virtual float FlWeaponRespawnTime(CBasePlayerItem *pWeapon) = 0;
|
||||
virtual float FlWeaponTryRespawn(CBasePlayerItem *pWeapon) = 0;
|
||||
virtual Vector VecWeaponRespawnSpot(CBasePlayerItem *pWeapon) = 0;
|
||||
|
||||
// Item retrieval
|
||||
virtual BOOL CanHaveItem(CBasePlayer *pPlayer, CItem *pItem) = 0;
|
||||
virtual void PlayerGotItem(CBasePlayer *pPlayer, CItem *pItem) = 0;
|
||||
|
||||
// Item spawn/respawn control
|
||||
virtual int ItemShouldRespawn(CItem *pItem) = 0;
|
||||
virtual float FlItemRespawnTime(CItem *pItem) = 0;
|
||||
virtual Vector VecItemRespawnSpot(CItem *pItem) = 0;
|
||||
|
||||
// Ammo retrieval
|
||||
virtual void PlayerGotAmmo(CBasePlayer *pPlayer, char *szName, int iCount) = 0;
|
||||
|
||||
// Ammo spawn/respawn control
|
||||
virtual int AmmoShouldRespawn(CBasePlayerAmmo *pAmmo) = 0;
|
||||
virtual float FlAmmoRespawnTime(CBasePlayerAmmo *pAmmo) = 0;
|
||||
virtual Vector VecAmmoRespawnSpot(CBasePlayerAmmo *pAmmo) = 0;
|
||||
|
||||
// Healthcharger respawn control
|
||||
virtual float FlHealthChargerRechargeTime() = 0;
|
||||
|
||||
// What happens to a dead player's weapons
|
||||
virtual int DeadPlayerWeapons(CBasePlayer *pPlayer) = 0;
|
||||
|
||||
// What happens to a dead player's ammo
|
||||
virtual int DeadPlayerAmmo(CBasePlayer *pPlayer) = 0;
|
||||
|
||||
// Teamplay stuff
|
||||
virtual const char *GetTeamID(CBaseEntity *pEntity) = 0;
|
||||
virtual int PlayerRelationship(CBasePlayer *pPlayer, CBaseEntity *pTarget) = 0;
|
||||
|
||||
// Monsters
|
||||
virtual BOOL FAllowMonsters() = 0;
|
||||
};
|
||||
|
||||
// CHalfLifeMultiplay - rules for the basic half life multiplayer competition
|
||||
class CHalfLifeMultiplay: public CGameRules {
|
||||
protected:
|
||||
virtual ~CHalfLifeMultiplay() {};
|
||||
public:
|
||||
virtual void RefreshSkillData() = 0;
|
||||
virtual void Think() = 0;
|
||||
virtual BOOL IsAllowedToSpawn(CBaseEntity *pEntity) = 0;
|
||||
virtual BOOL FAllowFlashlight() = 0;
|
||||
|
||||
virtual BOOL FShouldSwitchWeapon(CBasePlayer *pPlayer, CBasePlayerItem *pWeapon) = 0;
|
||||
virtual BOOL GetNextBestWeapon(CBasePlayer *pPlayer, CBasePlayerItem *pCurrentWeapon) = 0;
|
||||
|
||||
virtual BOOL IsMultiplayer() = 0;
|
||||
virtual BOOL IsDeathmatch() = 0;
|
||||
virtual BOOL IsCoOp() = 0;
|
||||
|
||||
// Client connection/disconnection
|
||||
// If ClientConnected returns FALSE, the connection is rejected and the user is provided the reason specified in szRejectReason
|
||||
// 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]) = 0;
|
||||
virtual void InitHUD(CBasePlayer *pl) = 0;
|
||||
virtual void ClientDisconnected(edict_t *pClient) = 0;
|
||||
virtual void UpdateGameMode(CBasePlayer *pPlayer) = 0;
|
||||
|
||||
// Client damage rules
|
||||
virtual float FlPlayerFallDamage(CBasePlayer *pPlayer) = 0;
|
||||
virtual BOOL FPlayerCanTakeDamage(CBasePlayer *pPlayer, CBaseEntity *pAttacker) = 0;
|
||||
|
||||
// Client spawn/respawn control
|
||||
virtual void PlayerSpawn(CBasePlayer *pPlayer) = 0;
|
||||
virtual void PlayerThink(CBasePlayer *pPlayer) = 0;
|
||||
virtual BOOL FPlayerCanRespawn(CBasePlayer *pPlayer) = 0;
|
||||
virtual float FlPlayerSpawnTime(CBasePlayer *pPlayer) = 0;
|
||||
virtual edict_t *GetPlayerSpawnSpot(CBasePlayer *pPlayer) = 0;
|
||||
|
||||
virtual BOOL AllowAutoTargetCrosshair() = 0;
|
||||
|
||||
virtual BOOL ClientCommand_DeadOrAlive(CBasePlayer *pPlayer, const char *pcmd) = 0;
|
||||
virtual BOOL ClientCommand(CBasePlayer *pPlayer, const char *pcmd) = 0;
|
||||
virtual void ClientUserInfoChanged(CBasePlayer *pPlayer, char *infobuffer) = 0;
|
||||
|
||||
// Client kills/scoring
|
||||
virtual int IPointsForKill(CBasePlayer *pAttacker, CBasePlayer *pKilled) = 0;
|
||||
virtual void PlayerKilled(CBasePlayer *pVictim, entvars_t *pKiller, entvars_t *pInflictor) = 0;
|
||||
virtual void DeathNotice(CBasePlayer *pVictim, entvars_t *pKiller, entvars_t *pInflictor) = 0;
|
||||
|
||||
// Weapon retrieval
|
||||
virtual BOOL CanHavePlayerItem(CBasePlayer *pPlayer, CBasePlayerItem *pWeapon) = 0;
|
||||
virtual void PlayerGotWeapon(CBasePlayer *pPlayer, CBasePlayerItem *pWeapon) = 0;
|
||||
|
||||
// Weapon spawn/respawn control
|
||||
virtual int WeaponShouldRespawn(CBasePlayerItem *pWeapon) = 0;
|
||||
virtual float FlWeaponRespawnTime(CBasePlayerItem *pWeapon) = 0;
|
||||
virtual float FlWeaponTryRespawn(CBasePlayerItem *pWeapon) = 0;
|
||||
virtual Vector VecWeaponRespawnSpot(CBasePlayerItem *pWeapon) = 0;
|
||||
|
||||
// Item retrieval
|
||||
virtual BOOL CanHaveItem(CBasePlayer *pPlayer, CItem *pItem) = 0;
|
||||
virtual void PlayerGotItem(CBasePlayer *pPlayer, CItem *pItem) = 0;
|
||||
|
||||
// Item spawn/respawn control
|
||||
virtual int ItemShouldRespawn(CItem *pItem) = 0;
|
||||
virtual float FlItemRespawnTime(CItem *pItem) = 0;
|
||||
virtual Vector VecItemRespawnSpot(CItem *pItem) = 0;
|
||||
|
||||
// Ammo retrieval
|
||||
virtual void PlayerGotAmmo(CBasePlayer *pPlayer, char *szName, int iCount) = 0;
|
||||
|
||||
// Ammo spawn/respawn control
|
||||
virtual int AmmoShouldRespawn(CBasePlayerAmmo *pAmmo) = 0;
|
||||
virtual float FlAmmoRespawnTime(CBasePlayerAmmo *pAmmo) = 0;
|
||||
virtual Vector VecAmmoRespawnSpot(CBasePlayerAmmo *pAmmo) = 0;
|
||||
|
||||
// Healthcharger respawn control
|
||||
virtual float FlHealthChargerRechargeTime() = 0;
|
||||
virtual float FlHEVChargerRechargeTime() = 0;
|
||||
|
||||
// What happens to a dead player's weapons
|
||||
virtual int DeadPlayerWeapons(CBasePlayer *pPlayer) = 0;
|
||||
|
||||
// What happens to a dead player's ammo
|
||||
virtual int DeadPlayerAmmo(CBasePlayer *pPlayer) = 0;
|
||||
|
||||
// Teamplay stuff
|
||||
virtual const char *GetTeamID(CBaseEntity *pEntity) = 0;
|
||||
virtual int PlayerRelationship(CBasePlayer *pPlayer, CBaseEntity *pTarget) = 0;
|
||||
|
||||
virtual BOOL PlayTextureSounds() = 0;
|
||||
|
||||
// Monsters
|
||||
virtual BOOL FAllowMonsters() = 0;
|
||||
|
||||
// Immediately end a multiplayer game
|
||||
virtual void EndMultiplayerGame() = 0;
|
||||
virtual void ServerDeactivate() = 0;
|
||||
virtual void CheckMapConditions() = 0;
|
||||
|
||||
// Recreate all the map entities from the map data (preserving their indices),
|
||||
// then remove everything else except the players.
|
||||
// Also get rid of all world decals.
|
||||
virtual void CleanUpMap() = 0;
|
||||
|
||||
virtual void RestartRound() = 0;
|
||||
|
||||
// check if the scenario has been won/lost
|
||||
virtual void CheckWinConditions() = 0;
|
||||
virtual void RemoveGuns() = 0;
|
||||
virtual void GiveC4() = 0;
|
||||
virtual void ChangeLevel() = 0;
|
||||
virtual void GoToIntermission() = 0;
|
||||
|
||||
// Setup counts for m_iNumTerrorist, m_iNumCT, m_iNumSpawnableTerrorist, m_iNumSpawnableCT, etc.
|
||||
virtual void InitializePlayerCounts(int &NumAliveTerrorist, int &NumAliveCT, int &NumDeadTerrorist, int &NumDeadCT) = 0;
|
||||
|
||||
virtual void BalanceTeams() = 0;
|
||||
virtual void SwapAllPlayers() = 0;
|
||||
virtual void UpdateTeamScores() = 0;
|
||||
virtual void EndRoundMessage(const char *sentence, int event) = 0;
|
||||
virtual void SetAccountRules(RewardRules rules, int amount) = 0;
|
||||
virtual RewardAccount GetAccountRules(RewardRules rules) const = 0;
|
||||
|
||||
// BOMB MAP FUNCTIONS
|
||||
virtual BOOL IsThereABomber() = 0;
|
||||
virtual BOOL IsThereABomb() = 0;
|
||||
virtual TeamName SelectDefaultTeam() = 0;
|
||||
|
||||
virtual bool HasRoundTimeExpired() = 0;
|
||||
virtual bool IsBombPlanted() = 0;
|
||||
|
||||
public:
|
||||
bool ShouldSkipShowMenu() const { return m_bSkipShowMenu; }
|
||||
void MarkShowMenuSkipped() { m_bSkipShowMenu = false; }
|
||||
|
||||
bool ShouldSkipSpawn() const { return m_bSkipSpawn; }
|
||||
void MarkSpawnSkipped() { m_bSkipSpawn = false; }
|
||||
|
||||
float GetRoundRemainingTime() const { return m_iRoundTimeSecs - gpGlobals->time + m_fRoundStartTime; }
|
||||
float GetRoundRemainingTimeReal() const { return m_iRoundTimeSecs - gpGlobals->time + m_fRoundStartTimeReal; }
|
||||
float GetTimeLeft() const { return m_flTimeLimit - gpGlobals->time; }
|
||||
bool IsMatchStarted() { return (m_flRestartRoundTime != 0.0f || m_fCareerRoundMenuTime != 0.0f || m_fCareerMatchMenuTime != 0.0f); }
|
||||
|
||||
void TerminateRound(float tmDelay, int iWinStatus);
|
||||
|
||||
public:
|
||||
CVoiceGameMgr m_VoiceGameMgr;
|
||||
float m_flRestartRoundTime; // The global time when the round is supposed to end, if this is not 0 (deprecated name m_fTeamCount)
|
||||
float m_flCheckWinConditions;
|
||||
float m_fRoundStartTime; // Time round has started (deprecated name m_fRoundCount)
|
||||
int m_iRoundTime; // (From mp_roundtime) - How many seconds long this round is.
|
||||
int m_iRoundTimeSecs;
|
||||
int m_iIntroRoundTime; // (From mp_freezetime) - How many seconds long the intro round (when players are frozen) is.
|
||||
float m_fRoundStartTimeReal; // The global time when the intro round ends and the real one starts
|
||||
// wrote the original "m_flRoundTime" comment for this variable).
|
||||
int m_iAccountTerrorist;
|
||||
int m_iAccountCT;
|
||||
int m_iNumTerrorist; // The number of terrorists on the team (this is generated at the end of a round)
|
||||
int m_iNumCT; // The number of CTs on the team (this is generated at the end of a round)
|
||||
int m_iNumSpawnableTerrorist;
|
||||
int m_iNumSpawnableCT;
|
||||
int m_iSpawnPointCount_Terrorist; // Number of Terrorist spawn points
|
||||
int m_iSpawnPointCount_CT; // Number of CT spawn points
|
||||
int m_iHostagesRescued;
|
||||
int m_iHostagesTouched;
|
||||
int m_iRoundWinStatus; // 1 == CT's won last round, 2 == Terrorists did, 3 == Draw, no winner
|
||||
|
||||
short m_iNumCTWins;
|
||||
short m_iNumTerroristWins;
|
||||
|
||||
bool m_bTargetBombed; // whether or not the bomb has been bombed
|
||||
bool m_bBombDefused; // whether or not the bomb has been defused
|
||||
|
||||
bool m_bMapHasBombTarget;
|
||||
bool m_bMapHasBombZone;
|
||||
bool m_bMapHasBuyZone;
|
||||
bool m_bMapHasRescueZone;
|
||||
bool m_bMapHasEscapeZone;
|
||||
|
||||
BOOL m_bMapHasVIPSafetyZone; // TRUE = has VIP safety zone, FALSE = does not have VIP safetyzone
|
||||
BOOL m_bMapHasCameras;
|
||||
int m_iC4Timer;
|
||||
int m_iC4Guy; // The current Terrorist who has the C4.
|
||||
int m_iLoserBonus; // the amount of money the losing team gets. This scales up as they lose more rounds in a row
|
||||
int m_iNumConsecutiveCTLoses; // the number of rounds the CTs have lost in a row.
|
||||
int m_iNumConsecutiveTerroristLoses; // the number of rounds the Terrorists have lost in a row.
|
||||
|
||||
float m_fMaxIdlePeriod; // For the idle kick functionality. This is tha max amount of time that the player has to be idle before being kicked
|
||||
|
||||
int m_iLimitTeams;
|
||||
bool m_bLevelInitialized;
|
||||
bool m_bRoundTerminating;
|
||||
bool m_bCompleteReset; // Set to TRUE to have the scores reset next time round restarts
|
||||
float m_flRequiredEscapeRatio;
|
||||
int m_iNumEscapers;
|
||||
int m_iHaveEscaped;
|
||||
bool m_bCTCantBuy;
|
||||
bool m_bTCantBuy; // Who can and can't buy.
|
||||
float m_flBombRadius;
|
||||
int m_iConsecutiveVIP;
|
||||
int m_iTotalGunCount;
|
||||
int m_iTotalGrenadeCount;
|
||||
int m_iTotalArmourCount;
|
||||
int m_iUnBalancedRounds; // keeps track of the # of consecutive rounds that have gone by where one team outnumbers the other team by more than 2
|
||||
int m_iNumEscapeRounds; // keeps track of the # of consecutive rounds of escape played.. Teams will be swapped after 8 rounds
|
||||
int m_iMapVotes[MAX_VOTE_MAPS];
|
||||
int m_iLastPick;
|
||||
int m_iMaxMapTime;
|
||||
int m_iMaxRounds;
|
||||
int m_iTotalRoundsPlayed;
|
||||
int m_iMaxRoundsWon;
|
||||
int m_iStoredSpectValue;
|
||||
float m_flForceCameraValue;
|
||||
float m_flForceChaseCamValue;
|
||||
float m_flFadeToBlackValue;
|
||||
CBasePlayer *m_pVIP;
|
||||
CBasePlayer *m_pVIPQueue[MAX_VIP_QUEUES];
|
||||
float m_flIntermissionEndTime;
|
||||
float m_flIntermissionStartTime;
|
||||
BOOL m_iEndIntermissionButtonHit;
|
||||
float m_tmNextPeriodicThink;
|
||||
bool m_bGameStarted; // TRUE = the game commencing when there is at least one CT and T, FALSE = scoring will not start until both teams have players (deprecated name m_bFirstConnected)
|
||||
bool m_bInCareerGame;
|
||||
float m_fCareerRoundMenuTime;
|
||||
int m_iCareerMatchWins;
|
||||
int m_iRoundWinDifference;
|
||||
float m_fCareerMatchMenuTime;
|
||||
bool m_bSkipSpawn;
|
||||
|
||||
// custom
|
||||
bool m_bSkipShowMenu;
|
||||
bool m_bNeededPlayers;
|
||||
float m_flEscapeRatio;
|
||||
float m_flTimeLimit;
|
||||
float m_flGameStartTime;
|
||||
};
|
||||
|
||||
typedef struct mapcycle_item_s
|
||||
{
|
||||
struct mapcycle_item_s *next;
|
||||
char mapname[32];
|
||||
int minplayers;
|
||||
int maxplayers;
|
||||
char rulebuffer[MAX_RULE_BUFFER];
|
||||
|
||||
} mapcycle_item_t;
|
||||
|
||||
typedef struct mapcycle_s
|
||||
{
|
||||
struct mapcycle_item_s *items;
|
||||
struct mapcycle_item_s *next_item;
|
||||
|
||||
} mapcycle_t;
|
||||
|
||||
class CCStrikeGameMgrHelper: public IVoiceGameMgrHelper {
|
||||
public:
|
||||
virtual bool CanPlayerHearPlayer(CBasePlayer *pListener, CBasePlayer *pSender) = 0;
|
||||
};
|
||||
|
||||
extern CGameRules *g_pGameRules;
|
||||
|
||||
// Gets us at the CS game rules
|
||||
inline CHalfLifeMultiplay *CSGameRules()
|
||||
{
|
||||
return static_cast<CHalfLifeMultiplay *>(g_pGameRules);
|
||||
}
|
||||
|
||||
inline void CHalfLifeMultiplay::TerminateRound(float tmDelay, int iWinStatus)
|
||||
{
|
||||
m_iRoundWinStatus = iWinStatus;
|
||||
m_flRestartRoundTime = gpGlobals->time + tmDelay;
|
||||
m_bRoundTerminating = true;
|
||||
}
|
||||
|
45
metamod/extra/example/include/hlsdk/dlls/h_battery.h
Normal file
45
metamod/extra/example/include/hlsdk/dlls/h_battery.h
Normal file
@ -0,0 +1,45 @@
|
||||
/*
|
||||
*
|
||||
* 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 CRecharge: public CBaseToggle {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
float m_flNextCharge;
|
||||
int m_iReactivate;
|
||||
int m_iJuice;
|
||||
int m_iOn;
|
||||
float m_flSoundTime;
|
||||
};
|
104
metamod/extra/example/include/hlsdk/dlls/h_cycler.h
Normal file
104
metamod/extra/example/include/hlsdk/dlls/h_cycler.h
Normal file
@ -0,0 +1,104 @@
|
||||
/*
|
||||
*
|
||||
* 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 CCycler: public CBaseMonster {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual BOOL TakeDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType) = 0;
|
||||
|
||||
// Don't treat as a live target
|
||||
virtual BOOL IsAlive() = 0;
|
||||
virtual void Think() = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
int m_animate;
|
||||
};
|
||||
|
||||
// we should get rid of all the other cyclers and replace them with this.
|
||||
class CGenericCycler: public CCycler {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
};
|
||||
|
||||
// Probe droid imported for tech demo compatibility
|
||||
class CCyclerProbe: public CCycler {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
};
|
||||
|
||||
class CCyclerSprite: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Restart() = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual BOOL TakeDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType) = 0;
|
||||
virtual void Think() = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
inline int ShouldAnimate() { return (m_animate && m_maxFrame > 1.0f); }
|
||||
public:
|
||||
int m_animate;
|
||||
float m_lastTime;
|
||||
float m_maxFrame;
|
||||
int m_renderfx;
|
||||
int m_rendermode;
|
||||
float m_renderamt;
|
||||
vec3_t m_rendercolor;
|
||||
};
|
||||
|
||||
class CWeaponCycler: public CBasePlayerWeapon {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual int GetItemInfo(ItemInfo *p) = 0;
|
||||
virtual BOOL Deploy() = 0;
|
||||
virtual void Holster(int skiplocal = 0) = 0;
|
||||
virtual int iItemSlot() = 0;
|
||||
virtual void PrimaryAttack() = 0;
|
||||
virtual void SecondaryAttack() = 0;
|
||||
public:
|
||||
int m_iszModel;
|
||||
int m_iModel;
|
||||
};
|
||||
|
||||
// Flaming Wreakage
|
||||
class CWreckage: public CBaseMonster {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual void Think() = 0;
|
||||
public:
|
||||
int m_flStartTime;
|
||||
};
|
52
metamod/extra/example/include/hlsdk/dlls/healthkit.h
Normal file
52
metamod/extra/example/include/hlsdk/dlls/healthkit.h
Normal file
@ -0,0 +1,52 @@
|
||||
/*
|
||||
*
|
||||
* 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 CHealthKit: public CItem {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual BOOL MyTouch(CBasePlayer *pPlayer) = 0;
|
||||
};
|
||||
|
||||
class CWallHealth: public CBaseToggle {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
float m_flNextCharge;
|
||||
int m_iReactivate;
|
||||
int m_iJuice;
|
||||
int m_iOn;
|
||||
float m_flSoundTime;
|
||||
};
|
81
metamod/extra/example/include/hlsdk/dlls/hintmessage.h
Normal file
81
metamod/extra/example/include/hlsdk/dlls/hintmessage.h
Normal file
@ -0,0 +1,81 @@
|
||||
/*
|
||||
*
|
||||
* 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 "utlvector.h"
|
||||
|
||||
#define DHF_ROUND_STARTED (1<<1)
|
||||
#define DHF_HOSTAGE_SEEN_FAR (1<<2)
|
||||
#define DHF_HOSTAGE_SEEN_NEAR (1<<3)
|
||||
#define DHF_HOSTAGE_USED (1<<4)
|
||||
#define DHF_HOSTAGE_INJURED (1<<5)
|
||||
#define DHF_HOSTAGE_KILLED (1<<6)
|
||||
#define DHF_FRIEND_SEEN (1<<7)
|
||||
#define DHF_ENEMY_SEEN (1<<8)
|
||||
#define DHF_FRIEND_INJURED (1<<9)
|
||||
#define DHF_FRIEND_KILLED (1<<10)
|
||||
#define DHF_ENEMY_KILLED (1<<11)
|
||||
#define DHF_BOMB_RETRIEVED (1<<12)
|
||||
#define DHF_AMMO_EXHAUSTED (1<<15)
|
||||
#define DHF_IN_TARGET_ZONE (1<<16)
|
||||
#define DHF_IN_RESCUE_ZONE (1<<17)
|
||||
#define DHF_IN_ESCAPE_ZONE (1<<18)
|
||||
#define DHF_IN_VIPSAFETY_ZONE (1<<19)
|
||||
#define DHF_NIGHTVISION (1<<20)
|
||||
#define DHF_HOSTAGE_CTMOVE (1<<21)
|
||||
#define DHF_SPEC_DUCK (1<<22)
|
||||
|
||||
#define DHM_ROUND_CLEAR (DHF_ROUND_STARTED | DHF_HOSTAGE_KILLED | DHF_FRIEND_KILLED | DHF_BOMB_RETRIEVED)
|
||||
#define DHM_CONNECT_CLEAR (DHF_HOSTAGE_SEEN_FAR | DHF_HOSTAGE_SEEN_NEAR | DHF_HOSTAGE_USED | DHF_HOSTAGE_INJURED | DHF_FRIEND_SEEN | DHF_ENEMY_SEEN | DHF_FRIEND_INJURED | DHF_ENEMY_KILLED | DHF_AMMO_EXHAUSTED | DHF_IN_TARGET_ZONE | DHF_IN_RESCUE_ZONE | DHF_IN_ESCAPE_ZONE | DHF_IN_VIPSAFETY_ZONE | DHF_HOSTAGE_CTMOVE | DHF_SPEC_DUCK)
|
||||
|
||||
class CHintMessage {
|
||||
public:
|
||||
CHintMessage(const char *hintString, bool isHint, CUtlVector<const char *> *args, float duration);
|
||||
~CHintMessage();
|
||||
public:
|
||||
float GetDuration() const { return m_duration; }
|
||||
void Send(CBaseEntity *client);
|
||||
|
||||
private:
|
||||
const char *m_hintString;
|
||||
bool m_isHint;
|
||||
CUtlVector<char *> m_args;
|
||||
float m_duration;
|
||||
};
|
||||
|
||||
class CHintMessageQueue {
|
||||
public:
|
||||
void Reset();
|
||||
void Update(CBaseEntity *client);
|
||||
bool AddMessage(const char *message, float duration, bool isHint, CUtlVector<const char *> *args);
|
||||
bool IsEmpty() const { return m_messages.Count() == 0; }
|
||||
|
||||
private:
|
||||
float m_tmMessageEnd;
|
||||
CUtlVector<CHintMessage *> m_messages;
|
||||
};
|
121
metamod/extra/example/include/hlsdk/dlls/hookchains.h
Normal file
121
metamod/extra/example/include/hlsdk/dlls/hookchains.h
Normal file
@ -0,0 +1,121 @@
|
||||
/*
|
||||
*
|
||||
* 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
|
||||
|
||||
template<typename t_ret, typename ...t_args>
|
||||
class IHookChain {
|
||||
protected:
|
||||
virtual ~IHookChain() {}
|
||||
|
||||
public:
|
||||
virtual t_ret callNext(t_args... args) = 0;
|
||||
virtual t_ret callOriginal(t_args... args) = 0;
|
||||
};
|
||||
|
||||
template<typename t_ret, typename t_class, typename ...t_args>
|
||||
class IHookChainClass {
|
||||
protected:
|
||||
virtual ~IHookChainClass() {}
|
||||
|
||||
public:
|
||||
virtual t_ret callNext(t_class *, t_args... args) = 0;
|
||||
virtual t_ret callOriginal(t_class *, t_args... args) = 0;
|
||||
};
|
||||
|
||||
template<typename ...t_args>
|
||||
class IVoidHookChain
|
||||
{
|
||||
protected:
|
||||
virtual ~IVoidHookChain() {}
|
||||
|
||||
public:
|
||||
virtual void callNext(t_args... args) = 0;
|
||||
virtual void callOriginal(t_args... args) = 0;
|
||||
};
|
||||
|
||||
template<typename t_class, typename ...t_args>
|
||||
class IVoidHookChainClass
|
||||
{
|
||||
protected:
|
||||
virtual ~IVoidHookChainClass() {}
|
||||
|
||||
public:
|
||||
virtual void callNext(t_class *, t_args... args) = 0;
|
||||
virtual void callOriginal(t_class *, t_args... args) = 0;
|
||||
};
|
||||
|
||||
// Specifies priorities for hooks call order in the chain.
|
||||
// For equal priorities first registered hook will be called first.
|
||||
enum HookChainPriority
|
||||
{
|
||||
HC_PRIORITY_UNINTERRUPTABLE = 255, // Hook will be called before other hooks.
|
||||
HC_PRIORITY_HIGH = 192, // Hook will be called before hooks with default priority.
|
||||
HC_PRIORITY_DEFAULT = 128, // Default hook call priority.
|
||||
HC_PRIORITY_MEDIUM = 64, // Hook will be called after hooks with default priority.
|
||||
HC_PRIORITY_LOW = 0, // Hook will be called after all other hooks.
|
||||
};
|
||||
|
||||
// Hook chain registry(for hooks [un]registration)
|
||||
template<typename t_ret, typename ...t_args>
|
||||
class IHookChainRegistry {
|
||||
public:
|
||||
typedef t_ret(*hookfunc_t)(IHookChain<t_ret, t_args...>*, t_args...);
|
||||
|
||||
virtual void registerHook(hookfunc_t hook, int priority = HC_PRIORITY_DEFAULT) = 0;
|
||||
virtual void unregisterHook(hookfunc_t hook) = 0;
|
||||
};
|
||||
|
||||
// Hook chain registry(for hooks [un]registration)
|
||||
template<typename t_ret, typename t_class, typename ...t_args>
|
||||
class IHookChainRegistryClass {
|
||||
public:
|
||||
typedef t_ret(*hookfunc_t)(IHookChainClass<t_ret, t_class, t_args...>*, t_class *, t_args...);
|
||||
|
||||
virtual void registerHook(hookfunc_t hook, int priority = HC_PRIORITY_DEFAULT) = 0;
|
||||
virtual void unregisterHook(hookfunc_t hook) = 0;
|
||||
};
|
||||
|
||||
// Hook chain registry(for hooks [un]registration)
|
||||
template<typename ...t_args>
|
||||
class IVoidHookChainRegistry {
|
||||
public:
|
||||
typedef void(*hookfunc_t)(IVoidHookChain<t_args...>*, t_args...);
|
||||
|
||||
virtual void registerHook(hookfunc_t hook, int priority = HC_PRIORITY_DEFAULT) = 0;
|
||||
virtual void unregisterHook(hookfunc_t hook) = 0;
|
||||
};
|
||||
|
||||
// Hook chain registry(for hooks [un]registration)
|
||||
template<typename t_class, typename ...t_args>
|
||||
class IVoidHookChainRegistryClass {
|
||||
public:
|
||||
typedef void(*hookfunc_t)(IVoidHookChainClass<t_class, t_args...>*, t_class *, t_args...);
|
||||
|
||||
virtual void registerHook(hookfunc_t hook, int priority = HC_PRIORITY_DEFAULT) = 0;
|
||||
virtual void unregisterHook(hookfunc_t hook) = 0;
|
||||
};
|
233
metamod/extra/example/include/hlsdk/dlls/hostage/hostage.h
Normal file
233
metamod/extra/example/include/hlsdk/dlls/hostage/hostage.h
Normal file
@ -0,0 +1,233 @@
|
||||
/*
|
||||
*
|
||||
* 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 MAX_NODES 100
|
||||
#define MAX_HOSTAGES 12
|
||||
#define MAX_HOSTAGES_NAV 20
|
||||
|
||||
#define HOSTAGE_STEPSIZE 26.0f
|
||||
#define HOSTAGE_STEPSIZE_DEFAULT 18.0f
|
||||
|
||||
#define VEC_HOSTAGE_VIEW Vector(0, 0, 12)
|
||||
#define VEC_HOSTAGE_HULL_MIN Vector(-10, -10, 0)
|
||||
#define VEC_HOSTAGE_HULL_MAX Vector(10, 10, 62)
|
||||
|
||||
#define VEC_HOSTAGE_CROUCH Vector(10, 10, 30)
|
||||
#define RESCUE_HOSTAGES_RADIUS 256.0f // rescue zones from legacy info_*
|
||||
|
||||
class CHostage;
|
||||
class CLocalNav;
|
||||
class CHostageImprov;
|
||||
class CHostageManager;
|
||||
|
||||
enum HostageChatterType
|
||||
{
|
||||
HOSTAGE_CHATTER_START_FOLLOW = 0,
|
||||
HOSTAGE_CHATTER_STOP_FOLLOW,
|
||||
HOSTAGE_CHATTER_INTIMIDATED,
|
||||
HOSTAGE_CHATTER_PAIN,
|
||||
HOSTAGE_CHATTER_SCARED_OF_GUNFIRE,
|
||||
HOSTAGE_CHATTER_SCARED_OF_MURDER,
|
||||
HOSTAGE_CHATTER_LOOK_OUT,
|
||||
HOSTAGE_CHATTER_PLEASE_RESCUE_ME,
|
||||
HOSTAGE_CHATTER_SEE_RESCUE_ZONE,
|
||||
HOSTAGE_CHATTER_IMPATIENT_FOR_RESCUE,
|
||||
HOSTAGE_CHATTER_CTS_WIN ,
|
||||
HOSTAGE_CHATTER_TERRORISTS_WIN,
|
||||
HOSTAGE_CHATTER_RESCUED,
|
||||
HOSTAGE_CHATTER_WARN_NEARBY,
|
||||
HOSTAGE_CHATTER_WARN_SPOTTED,
|
||||
HOSTAGE_CHATTER_CALL_TO_RESCUER,
|
||||
HOSTAGE_CHATTER_RETREAT,
|
||||
HOSTAGE_CHATTER_COUGH,
|
||||
HOSTAGE_CHATTER_BLINDED,
|
||||
HOSTAGE_CHATTER_SAW_HE_GRENADE,
|
||||
HOSTAGE_CHATTER_DEATH_CRY,
|
||||
NUM_HOSTAGE_CHATTER_TYPES,
|
||||
};
|
||||
|
||||
// Improved the hostages from CZero
|
||||
#include "hostage/hostage_improv.h"
|
||||
|
||||
extern CHostageManager *g_pHostages;
|
||||
extern int g_iHostageNumber;
|
||||
|
||||
// A Counter-Strike Hostage Simple
|
||||
class CHostage: public CBaseMonster {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual int ObjectCaps() = 0; // make hostage "useable"
|
||||
virtual int Classify() = 0;
|
||||
virtual void TraceAttack(entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType) = 0;
|
||||
virtual BOOL TakeDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType) = 0;
|
||||
virtual int BloodColor() = 0;
|
||||
virtual void Touch(CBaseEntity *pOther) = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
int GetActivity() { return m_Activity; }
|
||||
|
||||
// queries
|
||||
bool IsFollowingSomeone() { return IsFollowing(); }
|
||||
CBaseEntity *GetLeader() // return our leader, or NULL
|
||||
{
|
||||
if (m_improv != NULL)
|
||||
{
|
||||
return m_improv->GetFollowLeader();
|
||||
}
|
||||
|
||||
return m_hTargetEnt;
|
||||
}
|
||||
bool IsFollowing(const CBaseEntity *entity = NULL)
|
||||
{
|
||||
if (m_improv != NULL)
|
||||
{
|
||||
return m_improv->IsFollowing();
|
||||
}
|
||||
|
||||
if (entity == NULL && m_hTargetEnt == NULL || (entity != NULL && m_hTargetEnt != entity))
|
||||
return false;
|
||||
|
||||
if (m_State != FOLLOW)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
bool IsValid() const { return (pev->takedamage == DAMAGE_YES); }
|
||||
bool IsDead() const { return (pev->deadflag == DEAD_DEAD); }
|
||||
bool IsAtHome() const { return (pev->origin - m_vStart).IsLengthGreaterThan(20) != true; }
|
||||
const Vector *GetHomePosition() const { return &m_vStart; }
|
||||
public:
|
||||
int m_Activity;
|
||||
BOOL m_bTouched;
|
||||
BOOL m_bRescueMe;
|
||||
float m_flFlinchTime;
|
||||
float m_flNextChange;
|
||||
float m_flMarkPosition;
|
||||
int m_iModel;
|
||||
int m_iSkin;
|
||||
float m_flNextRadarTime;
|
||||
enum state { FOLLOW, STAND, DUCK, SCARED, IDLE, FOLLOWPATH }
|
||||
m_State;
|
||||
Vector m_vStart;
|
||||
Vector m_vStartAngles;
|
||||
Vector m_vPathToFollow[20];
|
||||
int m_iWaypoint;
|
||||
CBasePlayer *m_target;
|
||||
CLocalNav *m_LocalNav;
|
||||
int nTargetNode;
|
||||
Vector vecNodes[MAX_NODES];
|
||||
EHANDLE m_hStoppedTargetEnt;
|
||||
float m_flNextFullThink;
|
||||
float m_flPathCheckInterval;
|
||||
float m_flLastPathCheck;
|
||||
int m_nPathNodes;
|
||||
BOOL m_fHasPath;
|
||||
float m_flPathAcquired;
|
||||
Vector m_vOldPos;
|
||||
int m_iHostageIndex;
|
||||
BOOL m_bStuck;
|
||||
float m_flStuckTime;
|
||||
CHostageImprov *m_improv;
|
||||
|
||||
enum ModelType { REGULAR_GUY, OLD_GUY, BLACK_GUY, GOOFY_GUY }
|
||||
m_whichModel;
|
||||
};
|
||||
|
||||
class SimpleChatter {
|
||||
public:
|
||||
struct SoundFile
|
||||
{
|
||||
char *filename;
|
||||
float duration;
|
||||
};
|
||||
|
||||
struct ChatterSet
|
||||
{
|
||||
SoundFile file[32];
|
||||
int count;
|
||||
int index;
|
||||
bool needsShuffle;
|
||||
};
|
||||
private:
|
||||
ChatterSet m_chatter[21];
|
||||
};
|
||||
|
||||
class CHostageManager {
|
||||
public:
|
||||
SimpleChatter *GetChatter()
|
||||
{
|
||||
return &m_chatter;
|
||||
}
|
||||
// Iterate over all active hostages in the game, invoking functor on each.
|
||||
// If functor returns false, stop iteration and return false.
|
||||
template<typename Functor>
|
||||
inline bool ForEachHostage(Functor &func) const
|
||||
{
|
||||
for (int i = 0; i < m_hostageCount; i++)
|
||||
{
|
||||
CHostage *hostage = m_hostage[i];
|
||||
|
||||
if (hostage == NULL || hostage->pev->deadflag == DEAD_DEAD)
|
||||
continue;
|
||||
|
||||
if (func(hostage) == false)
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
inline CHostage *GetClosestHostage(const Vector &pos, float *resultRange = NULL)
|
||||
{
|
||||
float range;
|
||||
float closeRange = 1e8f;
|
||||
CHostage *close = NULL;
|
||||
|
||||
for (int i = 0; i < m_hostageCount; i++)
|
||||
{
|
||||
range = (m_hostage[i]->pev->origin - pos).Length();
|
||||
|
||||
if (range < closeRange)
|
||||
{
|
||||
closeRange = range;
|
||||
close = m_hostage[i];
|
||||
}
|
||||
}
|
||||
|
||||
if (resultRange)
|
||||
*resultRange = closeRange;
|
||||
|
||||
return close;
|
||||
}
|
||||
|
||||
private:
|
||||
CHostage *m_hostage[MAX_HOSTAGES];
|
||||
int m_hostageCount;
|
||||
SimpleChatter m_chatter;
|
||||
};
|
@ -0,0 +1,333 @@
|
||||
/*
|
||||
*
|
||||
* 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 "hostage/hostage.h"
|
||||
#include "hostage/hostage_states.h"
|
||||
|
||||
class CHostage;
|
||||
enum HostageChatterType;
|
||||
|
||||
// A Counter-Strike Hostage improved
|
||||
class CHostageImprov: public CImprov {
|
||||
public:
|
||||
virtual ~CHostageImprov() {};
|
||||
|
||||
// invoked when an improv reaches its MoveTo goal
|
||||
virtual void OnMoveToSuccess(const Vector &goal) = 0;
|
||||
|
||||
// invoked when an improv fails to reach a MoveTo goal
|
||||
virtual void OnMoveToFailure(const Vector &goal, MoveToFailureType reason) = 0;
|
||||
virtual void OnInjury(float amount) = 0;
|
||||
virtual bool IsAlive() const = 0;
|
||||
virtual void MoveTo(const Vector &goal) = 0;
|
||||
virtual void LookAt(const Vector &target) = 0;
|
||||
virtual void ClearLookAt() = 0;
|
||||
virtual void FaceTo(const Vector &goal) = 0;
|
||||
virtual void ClearFaceTo() = 0;
|
||||
virtual bool IsAtMoveGoal(float error = 20.0f) const = 0;
|
||||
virtual bool HasLookAt() const = 0;
|
||||
virtual bool HasFaceTo() const = 0;
|
||||
virtual bool IsAtFaceGoal() const = 0;
|
||||
virtual bool IsFriendInTheWay(const Vector &goalPos) const = 0;
|
||||
virtual bool IsFriendInTheWay(CBaseEntity *myFriend, const Vector &goalPos) const = 0;
|
||||
virtual void MoveForward() = 0;
|
||||
virtual void MoveBackward() = 0;
|
||||
virtual void StrafeLeft() = 0;
|
||||
virtual void StrafeRight() = 0;
|
||||
|
||||
#define HOSTAGE_MUST_JUMP true
|
||||
virtual bool Jump() = 0;
|
||||
|
||||
virtual void Crouch() = 0;
|
||||
virtual void StandUp() = 0;
|
||||
virtual void TrackPath(const Vector &pathGoal, float deltaT) = 0; // move along path by following "pathGoal"
|
||||
virtual void StartLadder(const CNavLadder *ladder, NavTraverseType how, const Vector *approachPos, const Vector *departPos) = 0;
|
||||
virtual bool TraverseLadder(const CNavLadder *ladder, NavTraverseType how, const Vector *approachPos, const Vector *departPos, float deltaT) = 0;
|
||||
virtual bool GetSimpleGroundHeightWithFloor(const Vector *pos, float *height, Vector *normal = NULL) = 0;
|
||||
virtual void Run() = 0;
|
||||
virtual void Walk() = 0;
|
||||
virtual void Stop() = 0;
|
||||
virtual float GetMoveAngle() const = 0;
|
||||
virtual float GetFaceAngle() const = 0;
|
||||
virtual const Vector &GetFeet() const = 0;
|
||||
virtual const Vector &GetCentroid() const = 0;
|
||||
virtual const Vector &GetEyes() const = 0;
|
||||
virtual bool IsRunning() const = 0;
|
||||
virtual bool IsWalking() const = 0;
|
||||
virtual bool IsStopped() const = 0;
|
||||
virtual bool IsCrouching() const = 0;
|
||||
virtual bool IsJumping() const = 0;
|
||||
virtual bool IsUsingLadder() const = 0;
|
||||
virtual bool IsOnGround() const = 0;
|
||||
virtual bool IsMoving() const = 0;
|
||||
virtual bool CanRun() const = 0;
|
||||
virtual bool CanCrouch() const = 0;
|
||||
virtual bool CanJump() const = 0;
|
||||
virtual bool IsVisible(const Vector &pos, bool testFOV = false) const = 0; // return true if hostage can see position
|
||||
virtual bool IsPlayerLookingAtMe(CBasePlayer *other, float cosTolerance = 0.95f) const = 0;
|
||||
virtual CBasePlayer *IsAnyPlayerLookingAtMe(int team = 0, float cosTolerance = 0.95f) const = 0;
|
||||
virtual CBasePlayer *GetClosestPlayerByTravelDistance(int team = 0, float *range = NULL) const = 0;
|
||||
virtual CNavArea *GetLastKnownArea() const = 0;
|
||||
virtual void OnUpdate(float deltaT) = 0;
|
||||
virtual void OnUpkeep(float deltaT) = 0;
|
||||
virtual void OnReset() = 0;
|
||||
virtual void OnGameEvent(GameEventType event, CBaseEntity *entity = NULL, CBaseEntity *other = NULL) = 0;
|
||||
virtual void OnTouch(CBaseEntity *other) = 0; // in contact with "other"
|
||||
public:
|
||||
enum MoveType { Stopped, Walking, Running };
|
||||
enum ScareType { NERVOUS, SCARED, TERRIFIED };
|
||||
|
||||
const Vector &GetKnownGoodPosition() const { return m_knownGoodPos; }
|
||||
void ApplyForce(Vector force) { m_vel.x += force.x; m_vel.y += force.y; } // apply a force to the hostage
|
||||
const Vector GetActualVelocity() const { return m_actualVel; }
|
||||
void SetMoveLimit(MoveType limit) { m_moveLimit = limit; }
|
||||
MoveType GetMoveLimit() const { return m_moveLimit; }
|
||||
CNavPath *GetPath() { return &m_path; }
|
||||
|
||||
// hostage states
|
||||
// stand idle
|
||||
void Idle() { m_behavior.SetState(&m_idleState); }
|
||||
bool IsIdle() const { return m_behavior.IsState(&m_idleState); }
|
||||
|
||||
// begin following "leader"
|
||||
void Follow(CBasePlayer *leader) { m_followState.SetLeader(leader); m_behavior.SetState(&m_followState); }
|
||||
bool IsFollowing(const CBaseEntity *leader = NULL) const { return m_behavior.IsState(&m_followState); }
|
||||
|
||||
// Escape
|
||||
void Escape() { m_behavior.SetState(&m_escapeState); }
|
||||
bool IsEscaping() const { return m_behavior.IsState(&m_escapeState); }
|
||||
|
||||
// Retreat
|
||||
void Retreat() { m_behavior.SetState(&m_retreatState); }
|
||||
bool IsRetreating() const { return m_behavior.IsState(&m_retreatState); }
|
||||
|
||||
CBaseEntity *GetFollowLeader() const { return m_followState.GetLeader(); }
|
||||
ScareType GetScareIntensity() const { return m_scareIntensity; }
|
||||
bool IsIgnoringTerrorists() const { return m_ignoreTerroristTimer.IsElapsed(); }
|
||||
float GetAggression() const { return m_aggression; }
|
||||
bool IsTalking() const { return m_talkingTimer.IsElapsed(); }
|
||||
CHostage *GetEntity() const { return m_hostage; }
|
||||
void SetMoveAngle(float angle) { m_moveAngle = angle; }
|
||||
public:
|
||||
CountdownTimer m_coughTimer;
|
||||
CountdownTimer m_grenadeTimer;
|
||||
private:
|
||||
CHostage *m_hostage;
|
||||
CNavArea *m_lastKnownArea; // last area we were in
|
||||
mutable Vector m_centroid;
|
||||
mutable Vector m_eye;
|
||||
HostageStateMachine m_behavior;
|
||||
HostageIdleState m_idleState;
|
||||
HostageEscapeState m_escapeState;
|
||||
HostageRetreatState m_retreatState;
|
||||
HostageFollowState m_followState;
|
||||
HostageAnimateState m_animateState;
|
||||
bool m_didFidget;
|
||||
float m_aggression;
|
||||
IntervalTimer m_lastSawCT;
|
||||
IntervalTimer m_lastSawT;
|
||||
CountdownTimer m_checkNearbyTerroristTimer;
|
||||
bool m_isTerroristNearby;
|
||||
CountdownTimer m_nearbyTerroristTimer;
|
||||
CountdownTimer m_scaredTimer;
|
||||
ScareType m_scareIntensity;
|
||||
CountdownTimer m_ignoreTerroristTimer;
|
||||
CountdownTimer m_blinkTimer;
|
||||
char m_blinkCounter;
|
||||
IntervalTimer m_lastInjuryTimer;
|
||||
IntervalTimer m_lastNoiseTimer;
|
||||
mutable CountdownTimer m_avoidFriendTimer;
|
||||
mutable bool m_isFriendInTheWay;
|
||||
CountdownTimer m_chatterTimer;
|
||||
bool m_isDelayedChatterPending;
|
||||
CountdownTimer m_delayedChatterTimer;
|
||||
HostageChatterType m_delayedChatterType;
|
||||
bool m_delayedChatterMustSpeak;
|
||||
CountdownTimer m_talkingTimer;
|
||||
unsigned int m_moveFlags;
|
||||
Vector2D m_vel;
|
||||
Vector m_actualVel;
|
||||
Vector m_moveGoal;
|
||||
Vector m_knownGoodPos;
|
||||
bool m_hasKnownGoodPos;
|
||||
Vector m_priorKnownGoodPos;
|
||||
bool m_hasPriorKnownGoodPos;
|
||||
CountdownTimer m_priorKnownGoodPosTimer;
|
||||
IntervalTimer m_collisionTimer;
|
||||
Vector m_viewGoal;
|
||||
bool m_isLookingAt;
|
||||
Vector m_faceGoal;
|
||||
bool m_isFacingTo;
|
||||
CNavPath m_path; // current path to follow
|
||||
CNavPathFollower m_follower;
|
||||
Vector m_lastPosition;
|
||||
MoveType m_moveType;
|
||||
MoveType m_moveLimit;
|
||||
bool m_isCrouching; // true if hostage is crouching
|
||||
CountdownTimer m_minCrouchTimer;
|
||||
float m_moveAngle;
|
||||
NavRelativeDirType m_wiggleDirection;
|
||||
|
||||
CountdownTimer m_wiggleTimer; // for wiggling
|
||||
CountdownTimer m_wiggleJumpTimer;
|
||||
CountdownTimer m_inhibitObstacleAvoidance;
|
||||
CountdownTimer m_jumpTimer; // if zero, we can jump
|
||||
|
||||
bool m_hasJumped;
|
||||
bool m_hasJumpedIntoAir;
|
||||
Vector m_jumpTarget;
|
||||
CountdownTimer m_clearPathTimer;
|
||||
bool m_traversingLadder;
|
||||
EHANDLE m_visiblePlayer[MAX_CLIENTS];
|
||||
int m_visiblePlayerCount;
|
||||
CountdownTimer m_visionTimer;
|
||||
};
|
||||
|
||||
class CheckWayFunctor {
|
||||
public:
|
||||
CheckWayFunctor(const CHostageImprov *me, const Vector &goalPos)
|
||||
{
|
||||
m_me = me;
|
||||
m_goalPos = goalPos;
|
||||
m_blocker = NULL;
|
||||
}
|
||||
bool operator()(CHostage *them)
|
||||
{
|
||||
if (((CBaseMonster *)them)->IsAlive() && m_me->IsFriendInTheWay((CBaseEntity *)them, m_goalPos))
|
||||
{
|
||||
m_blocker = them;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
const CHostageImprov *m_me;
|
||||
Vector m_goalPos;
|
||||
CHostage *m_blocker;
|
||||
};
|
||||
|
||||
// Functor used with NavAreaBuildPath() for building Hostage paths.
|
||||
// Once we hook up crouching and ladders, this can be removed and ShortestPathCost() can be used instead.
|
||||
class HostagePathCost {
|
||||
public:
|
||||
float operator()(CNavArea *area, CNavArea *fromArea, const CNavLadder *ladder)
|
||||
{
|
||||
if (fromArea == NULL)
|
||||
{
|
||||
// first area in path, no cost
|
||||
return 0.0f;
|
||||
}
|
||||
else
|
||||
{
|
||||
// compute distance travelled along path so far
|
||||
float dist;
|
||||
|
||||
if (ladder != NULL)
|
||||
{
|
||||
const float ladderCost = 10.0f;
|
||||
return ladder->m_length * ladderCost + fromArea->GetCostSoFar();
|
||||
}
|
||||
else
|
||||
{
|
||||
dist = (*area->GetCenter() - *fromArea->GetCenter()).Length();
|
||||
}
|
||||
|
||||
float cost = dist + fromArea->GetCostSoFar();
|
||||
|
||||
// if this is a "crouch" area, add penalty
|
||||
if (area->GetAttributes() & NAV_CROUCH)
|
||||
{
|
||||
const float crouchPenalty = 10.0f;
|
||||
cost += crouchPenalty * dist;
|
||||
}
|
||||
|
||||
// if this is a "jump" area, add penalty
|
||||
if (area->GetAttributes() & NAV_JUMP)
|
||||
{
|
||||
const float jumpPenalty = 10.0f;
|
||||
cost += jumpPenalty * dist;
|
||||
}
|
||||
|
||||
return cost;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class KeepPersonalSpace {
|
||||
public:
|
||||
KeepPersonalSpace(CHostageImprov *improv)
|
||||
{
|
||||
m_improv = improv;
|
||||
m_velDir = improv->GetActualVelocity();
|
||||
m_speed = m_velDir.NormalizeInPlace();
|
||||
}
|
||||
bool operator()(CBaseEntity *entity)
|
||||
{
|
||||
const float space = 1.0f;
|
||||
Vector to;
|
||||
float range;
|
||||
|
||||
if (entity == reinterpret_cast<CBaseEntity *>(m_improv->GetEntity()))
|
||||
return true;
|
||||
|
||||
if (entity->IsPlayer() && !entity->IsAlive())
|
||||
return true;
|
||||
|
||||
to = entity->pev->origin - m_improv->GetCentroid();
|
||||
range = to.NormalizeInPlace();
|
||||
|
||||
CBasePlayer *player = static_cast<CBasePlayer *>(entity);
|
||||
|
||||
const float spring = 50.0f;
|
||||
const float damper = 1.0f;
|
||||
|
||||
if (range >= spring)
|
||||
return true;
|
||||
|
||||
const float cosTolerance = 0.8f;
|
||||
if (entity->IsPlayer() && player->m_iTeam == CT && !m_improv->IsFollowing() && m_improv->IsPlayerLookingAtMe(player, cosTolerance))
|
||||
return true;
|
||||
|
||||
const float minSpace = (spring - range);
|
||||
float ds = -minSpace;
|
||||
|
||||
m_improv->ApplyForce(to * ds);
|
||||
|
||||
const float force = 0.1f;
|
||||
m_improv->ApplyForce(m_speed * -force * m_velDir);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private:
|
||||
CHostageImprov *m_improv;
|
||||
Vector m_velDir;
|
||||
float m_speed;
|
||||
};
|
@ -0,0 +1,58 @@
|
||||
/*
|
||||
*
|
||||
* 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 NODE_INVALID_EMPTY -1
|
||||
|
||||
#define PATH_TRAVERSABLE_EMPTY 0
|
||||
#define PATH_TRAVERSABLE_SLOPE 1
|
||||
#define PATH_TRAVERSABLE_STEP 2
|
||||
#define PATH_TRAVERSABLE_STEPJUMPABLE 3
|
||||
|
||||
typedef int node_index_t;
|
||||
|
||||
typedef struct localnode_s
|
||||
{
|
||||
Vector vecLoc;
|
||||
int offsetX;
|
||||
int offsetY;
|
||||
byte bDepth;
|
||||
BOOL fSearched;
|
||||
node_index_t nindexParent;
|
||||
|
||||
} localnode_t;
|
||||
|
||||
class CLocalNav {
|
||||
private:
|
||||
CHostage *m_pOwner;
|
||||
edict_t *m_pTargetEnt;
|
||||
BOOL m_fTargetEntHit;
|
||||
localnode_t *m_nodeArr;
|
||||
node_index_t m_nindexAvailableNode;
|
||||
Vector m_vecStartingLoc;
|
||||
};
|
@ -0,0 +1,203 @@
|
||||
/*
|
||||
*
|
||||
* 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 CHostageImprov;
|
||||
|
||||
class HostageState: public SimpleState<CHostageImprov *>, public IImprovEvent {
|
||||
public:
|
||||
virtual ~HostageState() {}
|
||||
virtual void UpdateStationaryAnimation(CHostageImprov *improv) {}
|
||||
};
|
||||
|
||||
class HostageStateMachine: public SimpleStateMachine<CHostageImprov *, HostageState>, public IImprovEvent {
|
||||
public:
|
||||
virtual void OnMoveToSuccess(const Vector &goal) {}
|
||||
virtual void OnMoveToFailure(const Vector &goal, MoveToFailureType reason) {}
|
||||
virtual void OnInjury(float amount) {}
|
||||
};
|
||||
|
||||
class HostageIdleState: public HostageState {
|
||||
public:
|
||||
virtual ~HostageIdleState() {}
|
||||
virtual void OnEnter(CHostageImprov *improv) {}
|
||||
virtual void OnUpdate(CHostageImprov *improv) {}
|
||||
virtual void OnExit(CHostageImprov *improv) {}
|
||||
virtual const char *GetName() const { return "Idle"; }
|
||||
virtual void UpdateStationaryAnimation(CHostageImprov *improv) {}
|
||||
virtual void OnMoveToSuccess(const Vector &goal) {}
|
||||
virtual void OnMoveToFailure(const Vector &goal, MoveToFailureType reason) {}
|
||||
virtual void OnInjury(float amount = -1.0f) {}
|
||||
private:
|
||||
CountdownTimer m_waveTimer;
|
||||
CountdownTimer m_fleeTimer;
|
||||
CountdownTimer m_disagreeTimer;
|
||||
CountdownTimer m_escapeTimer;
|
||||
CountdownTimer m_askTimer;
|
||||
IntervalTimer m_intimidatedTimer;
|
||||
CountdownTimer m_pleadTimer;
|
||||
|
||||
enum
|
||||
{
|
||||
NotMoving = 0,
|
||||
Moving,
|
||||
MoveDone,
|
||||
MoveFailed,
|
||||
} m_moveState;
|
||||
|
||||
bool m_mustFlee;
|
||||
};
|
||||
|
||||
class HostageEscapeToCoverState: public HostageState {
|
||||
public:
|
||||
virtual ~HostageEscapeToCoverState() {}
|
||||
virtual void OnEnter(CHostageImprov *improv) {}
|
||||
virtual void OnUpdate(CHostageImprov *improv) {}
|
||||
virtual void OnExit(CHostageImprov *improv) {}
|
||||
virtual const char *GetName() const { return "Escape:ToCover"; }
|
||||
virtual void OnMoveToFailure(const Vector &goal, MoveToFailureType reason) {}
|
||||
public:
|
||||
void SetRescueGoal(const Vector &rescueGoal) { m_rescueGoal = rescueGoal; }
|
||||
|
||||
private:
|
||||
Vector m_rescueGoal;
|
||||
Vector m_spot;
|
||||
bool m_canEscape;
|
||||
};
|
||||
|
||||
class HostageEscapeLookAroundState: public HostageState {
|
||||
public:
|
||||
virtual ~HostageEscapeLookAroundState() {}
|
||||
virtual void OnEnter(CHostageImprov *improv) {}
|
||||
virtual void OnUpdate(CHostageImprov *improv) {}
|
||||
virtual void OnExit(CHostageImprov *improv) {}
|
||||
virtual const char *GetName() const { return "Escape:LookAround"; }
|
||||
|
||||
private:
|
||||
CountdownTimer m_timer;
|
||||
};
|
||||
|
||||
class HostageEscapeState: public HostageState {
|
||||
public:
|
||||
virtual ~HostageEscapeState() {}
|
||||
virtual void OnEnter(CHostageImprov *improv) {}
|
||||
virtual void OnUpdate(CHostageImprov *improv) {}
|
||||
virtual void OnExit(CHostageImprov *improv) {}
|
||||
virtual const char *GetName() const { return "Escape"; }
|
||||
virtual void OnMoveToFailure(const Vector &goal, MoveToFailureType reason) {}
|
||||
public:
|
||||
void ToCover() { m_behavior.SetState(&m_toCoverState); }
|
||||
void LookAround() { m_behavior.SetState(&m_lookAroundState); }
|
||||
private:
|
||||
HostageEscapeToCoverState m_toCoverState;
|
||||
HostageEscapeLookAroundState m_lookAroundState;
|
||||
HostageStateMachine m_behavior;
|
||||
bool m_canEscape;
|
||||
CountdownTimer m_runTimer;
|
||||
};
|
||||
|
||||
class HostageRetreatState: public HostageState {
|
||||
public:
|
||||
virtual ~HostageRetreatState() {}
|
||||
virtual void OnEnter(CHostageImprov *improv) {}
|
||||
virtual void OnUpdate(CHostageImprov *improv) {}
|
||||
virtual void OnExit(CHostageImprov *improv) {}
|
||||
virtual const char *GetName() const { return "Retreat"; }
|
||||
};
|
||||
|
||||
class HostageFollowState: public HostageState {
|
||||
public:
|
||||
virtual ~HostageFollowState() {}
|
||||
virtual void OnEnter(CHostageImprov *improv) {}
|
||||
virtual void OnUpdate(CHostageImprov *improv) {}
|
||||
virtual void OnExit(CHostageImprov *improv) {}
|
||||
virtual const char *GetName() const { return "Follow"; }
|
||||
virtual void UpdateStationaryAnimation(CHostageImprov *improv) {}
|
||||
public:
|
||||
void SetLeader(CBaseEntity *leader) { m_leader = leader; }
|
||||
CBaseEntity *GetLeader() const { return m_leader; }
|
||||
private:
|
||||
mutable EHANDLE m_leader;
|
||||
Vector m_lastLeaderPos;
|
||||
bool m_isWaiting;
|
||||
float m_stopRange;
|
||||
CountdownTimer m_makeWayTimer;
|
||||
CountdownTimer m_impatientTimer;
|
||||
CountdownTimer m_repathTimer;
|
||||
bool m_isWaitingForFriend;
|
||||
CountdownTimer m_waitForFriendTimer;
|
||||
};
|
||||
|
||||
class HostageAnimateState: public HostageState {
|
||||
public:
|
||||
virtual ~HostageAnimateState() {}
|
||||
virtual void OnEnter(CHostageImprov *improv) {}
|
||||
virtual void OnUpdate(CHostageImprov *improv) {}
|
||||
virtual void OnExit(CHostageImprov *improv) {}
|
||||
virtual const char *GetName() const { return "Animate"; }
|
||||
public:
|
||||
struct SeqInfo
|
||||
{
|
||||
int seqID;
|
||||
float holdTime;
|
||||
float rate;
|
||||
};
|
||||
|
||||
enum PerformanceType
|
||||
{
|
||||
None = 0,
|
||||
Walk,
|
||||
Run,
|
||||
Jump,
|
||||
Fall,
|
||||
Crouch,
|
||||
CrouchWalk,
|
||||
Calm,
|
||||
Anxious,
|
||||
Afraid,
|
||||
Sitting,
|
||||
GettingUp,
|
||||
Waving,
|
||||
LookingAround,
|
||||
Disagreeing,
|
||||
Flinching,
|
||||
};
|
||||
|
||||
bool IsBusy() const { return (m_sequenceCount > 0); }
|
||||
int GetCurrentSequenceID() { return m_currentSequence; }
|
||||
PerformanceType GetPerformance() const { return m_performance; }
|
||||
void SetPerformance(PerformanceType performance) { m_performance = performance; }
|
||||
private:
|
||||
enum { MAX_SEQUENCES = 8 };
|
||||
struct SeqInfo m_sequence[MAX_SEQUENCES];
|
||||
int m_sequenceCount;
|
||||
int m_currentSequence;
|
||||
enum PerformanceType m_performance;
|
||||
bool m_isHolding;
|
||||
CountdownTimer m_holdTimer;
|
||||
};
|
@ -1,29 +1,155 @@
|
||||
/***
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
* 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 product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
* 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
|
||||
*
|
||||
****/
|
||||
#ifndef ITEMS_H
|
||||
#define ITEMS_H
|
||||
* 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 CItem : public CBaseEntity
|
||||
enum ItemRestType
|
||||
{
|
||||
public:
|
||||
void Spawn( void );
|
||||
CBaseEntity* Respawn( void );
|
||||
void EXPORT ItemTouch( CBaseEntity *pOther );
|
||||
void EXPORT Materialize( void );
|
||||
virtual BOOL MyTouch( CBasePlayer *pPlayer ) { return FALSE; };
|
||||
ITEM_TYPE_BUYING, // when a player buying items
|
||||
ITEM_TYPE_TOUCHED, // when the player touches with a weaponbox or armoury_entity
|
||||
ITEM_TYPE_EQUIPPED // when an entity game_player_equip gives item to player or default item's on player spawn
|
||||
};
|
||||
|
||||
#endif // ITEMS_H
|
||||
// constant items
|
||||
#define ITEM_ID_ANTIDOTE 2
|
||||
#define ITEM_ID_SECURITY 3
|
||||
|
||||
enum ItemID
|
||||
{
|
||||
ITEM_NONE = -1,
|
||||
ITEM_SHIELDGUN,
|
||||
ITEM_P228,
|
||||
ITEM_GLOCK,
|
||||
ITEM_SCOUT,
|
||||
ITEM_HEGRENADE,
|
||||
ITEM_XM1014,
|
||||
ITEM_C4,
|
||||
ITEM_MAC10,
|
||||
ITEM_AUG,
|
||||
ITEM_SMOKEGRENADE,
|
||||
ITEM_ELITE,
|
||||
ITEM_FIVESEVEN,
|
||||
ITEM_UMP45,
|
||||
ITEM_SG550,
|
||||
ITEM_GALIL,
|
||||
ITEM_FAMAS,
|
||||
ITEM_USP,
|
||||
ITEM_GLOCK18,
|
||||
ITEM_AWP,
|
||||
ITEM_MP5N,
|
||||
ITEM_M249,
|
||||
ITEM_M3,
|
||||
ITEM_M4A1,
|
||||
ITEM_TMP,
|
||||
ITEM_G3SG1,
|
||||
ITEM_FLASHBANG,
|
||||
ITEM_DEAGLE,
|
||||
ITEM_SG552,
|
||||
ITEM_AK47,
|
||||
ITEM_KNIFE,
|
||||
ITEM_P90,
|
||||
ITEM_NVG,
|
||||
ITEM_DEFUSEKIT,
|
||||
ITEM_KEVLAR,
|
||||
ITEM_ASSAULT,
|
||||
ITEM_LONGJUMP,
|
||||
ITEM_SODACAN,
|
||||
ITEM_HEALTHKIT,
|
||||
ITEM_ANTIDOTE,
|
||||
ITEM_BATTERY
|
||||
};
|
||||
|
||||
class CItem: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual CBaseEntity *Respawn() = 0;
|
||||
virtual BOOL MyTouch(CBasePlayer *pPlayer) = 0;
|
||||
};
|
||||
|
||||
class CWorldItem: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
public:
|
||||
int m_iType;
|
||||
};
|
||||
|
||||
class CItemSuit: public CItem {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual BOOL MyTouch(CBasePlayer *pPlayer) = 0;
|
||||
};
|
||||
|
||||
class CItemBattery: public CItem {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual BOOL MyTouch(CBasePlayer *pPlayer) = 0;
|
||||
};
|
||||
|
||||
class CItemAntidote: public CItem {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual BOOL MyTouch(CBasePlayer *pPlayer) = 0;
|
||||
};
|
||||
|
||||
class CItemSecurity: public CItem {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual BOOL MyTouch(CBasePlayer *pPlayer) = 0;
|
||||
};
|
||||
|
||||
class CItemLongJump: public CItem {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual BOOL MyTouch(CBasePlayer *pPlayer) = 0;
|
||||
};
|
||||
|
||||
class CItemKevlar: public CItem {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual BOOL MyTouch(CBasePlayer *pPlayer) = 0;
|
||||
};
|
||||
|
||||
class CItemAssaultSuit: public CItem {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual BOOL MyTouch(CBasePlayer *pPlayer) = 0;
|
||||
};
|
||||
|
||||
class CItemThighPack: public CItem {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual BOOL MyTouch(CBasePlayer *pPlayer) = 0;
|
||||
};
|
||||
|
50
metamod/extra/example/include/hlsdk/dlls/lights.h
Normal file
50
metamod/extra/example/include/hlsdk/dlls/lights.h
Normal file
@ -0,0 +1,50 @@
|
||||
/*
|
||||
*
|
||||
* 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 SF_LIGHT_START_OFF 1
|
||||
|
||||
class CLight: public CPointEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Restart() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
private:
|
||||
int m_iStyle;
|
||||
int m_iszPattern;
|
||||
BOOL m_iStartedOff;
|
||||
};
|
||||
|
||||
class CEnvLight: public CLight {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
};
|
41
metamod/extra/example/include/hlsdk/dlls/mapinfo.h
Normal file
41
metamod/extra/example/include/hlsdk/dlls/mapinfo.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
|
||||
|
||||
class CMapInfo: public CPointEntity
|
||||
{
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual void UpdateOnRemove() = 0;
|
||||
|
||||
public:
|
||||
InfoMapBuyParam m_iBuyingStatus;
|
||||
float m_flBombRadius;
|
||||
};
|
@ -1,22 +1,236 @@
|
||||
/***
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
* 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 product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
* 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
|
||||
|
||||
#ifndef MAPRULES_H
|
||||
#define MAPRULES_H
|
||||
#define MAX_EQUIP 32
|
||||
#define SF_SCORE_NEGATIVE 0x0001
|
||||
#define SF_SCORE_TEAM 0x0002
|
||||
|
||||
#define SF_ENVTEXT_ALLPLAYERS 0x0001
|
||||
|
||||
#define SF_TEAMMASTER_FIREONCE 0x0001
|
||||
#define SF_TEAMMASTER_ANYTEAM 0x0002
|
||||
|
||||
#endif // MAPRULES_H
|
||||
#define SF_TEAMSET_FIREONCE 0x0001
|
||||
#define SF_TEAMSET_CLEARTEAM 0x0002
|
||||
|
||||
#define SF_PKILL_FIREONCE 0x0001
|
||||
|
||||
#define SF_GAMECOUNT_FIREONCE 0x0001
|
||||
#define SF_GAMECOUNT_RESET 0x0002
|
||||
|
||||
#define SF_GAMECOUNTSET_FIREONCE 0x0001
|
||||
|
||||
#define SF_PLAYEREQUIP_USEONLY 0x0001
|
||||
|
||||
#define SF_PTEAM_FIREONCE 0x0001
|
||||
#define SF_PTEAM_KILL 0x0002
|
||||
#define SF_PTEAM_GIB 0x0004
|
||||
|
||||
class CRuleEntity: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
public:
|
||||
void SetMaster(int iszMaster) { m_iszMaster = iszMaster; }
|
||||
|
||||
private:
|
||||
string_t m_iszMaster;
|
||||
};
|
||||
|
||||
// CRulePointEntity -- base class for all rule "point" entities (not brushes)
|
||||
class CRulePointEntity: public CRuleEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
};
|
||||
|
||||
// CRuleBrushEntity -- base class for all rule "brush" entities (not brushes)
|
||||
// Default behavior is to set up like a trigger, invisible, but keep the model for volume testing
|
||||
class CRuleBrushEntity: public CRuleEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
};
|
||||
|
||||
// CGameScore / game_score -- award points to player / team
|
||||
// Points +/- total
|
||||
// Flag: Allow negative scores SF_SCORE_NEGATIVE
|
||||
// Flag: Award points to team in teamplay SF_SCORE_TEAM
|
||||
class CGameScore: public CRulePointEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
int Points() const { return int(pev->frags); }
|
||||
BOOL AllowNegativeScore() { return pev->spawnflags & SF_SCORE_NEGATIVE; }
|
||||
BOOL AwardToTeam() const { return pev->spawnflags & SF_SCORE_TEAM; }
|
||||
void SetPoints(int points) { pev->frags = points; }
|
||||
};
|
||||
|
||||
// CGameEnd / game_end -- Ends the game in MP
|
||||
class CGameEnd: public CRulePointEntity {
|
||||
public:
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
};
|
||||
|
||||
// CGameText / game_text -- NON-Localized HUD Message (use env_message to display a titles.txt message)
|
||||
// Flag: All players SF_ENVTEXT_ALLPLAYERS
|
||||
class CGameText: public CRulePointEntity {
|
||||
public:
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
|
||||
public:
|
||||
BOOL MessageToAll() const { return (pev->spawnflags & SF_ENVTEXT_ALLPLAYERS) == SF_ENVTEXT_ALLPLAYERS; }
|
||||
void MessageSet(const char *pMessage) { pev->message = ALLOC_STRING(pMessage); }
|
||||
const char *MessageGet() const { return STRING(pev->message); }
|
||||
|
||||
private:
|
||||
hudtextparms_t m_textParms;
|
||||
};
|
||||
|
||||
// CGameTeamMaster / game_team_master -- "Masters" like multisource, but based on the team of the activator
|
||||
// Only allows mastered entity to fire if the team matches my team
|
||||
//
|
||||
// team index (pulled from server team list "mp_teamlist"
|
||||
// Flag: Remove on Fire
|
||||
// Flag: Any team until set? -- Any team can use this until the team is set (otherwise no teams can use it)
|
||||
class CGameTeamMaster: public CRulePointEntity {
|
||||
public:
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual BOOL IsTriggered(CBaseEntity *pActivator) = 0;
|
||||
virtual const char *TeamID() = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
BOOL RemoveOnFire() const { return (pev->spawnflags & SF_TEAMMASTER_FIREONCE) == SF_TEAMMASTER_FIREONCE; }
|
||||
BOOL AnyTeam() const { return (pev->spawnflags & SF_TEAMMASTER_ANYTEAM) == SF_TEAMMASTER_ANYTEAM; }
|
||||
|
||||
public:
|
||||
int m_teamIndex;
|
||||
USE_TYPE triggerType;
|
||||
};
|
||||
|
||||
// CGameTeamSet / game_team_set -- Changes the team of the entity it targets to the activator's team
|
||||
// Flag: Fire once
|
||||
// Flag: Clear team -- Sets the team to "NONE" instead of activator
|
||||
class CGameTeamSet: public CRulePointEntity {
|
||||
public:
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
BOOL RemoveOnFire() const { return (pev->spawnflags & SF_TEAMSET_FIREONCE) == SF_TEAMSET_FIREONCE; }
|
||||
BOOL ShouldClearTeam() const { return (pev->spawnflags & SF_TEAMSET_CLEARTEAM) == SF_TEAMSET_CLEARTEAM; }
|
||||
};
|
||||
|
||||
// CGamePlayerZone / game_player_zone -- players in the zone fire my target when I'm fired
|
||||
// Needs master?
|
||||
class CGamePlayerZone: public CRuleBrushEntity {
|
||||
public:
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
private:
|
||||
string_t m_iszInTarget;
|
||||
string_t m_iszOutTarget;
|
||||
string_t m_iszInCount;
|
||||
string_t m_iszOutCount;
|
||||
};
|
||||
|
||||
// CGamePlayerHurt / game_player_hurt -- Damages the player who fires it
|
||||
// Flag: Fire once
|
||||
class CGamePlayerHurt: public CRulePointEntity {
|
||||
public:
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
BOOL RemoveOnFire() const { return (pev->spawnflags & SF_PKILL_FIREONCE) == SF_PKILL_FIREONCE; }
|
||||
};
|
||||
|
||||
// CGameCounter / game_counter -- Counts events and fires target
|
||||
// Flag: Fire once
|
||||
// Flag: Reset on Fire
|
||||
class CGameCounter: public CRulePointEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
BOOL RemoveOnFire() const { return (pev->spawnflags & SF_GAMECOUNT_FIREONCE) == SF_GAMECOUNT_FIREONCE; }
|
||||
BOOL ResetOnFire() const { return (pev->spawnflags & SF_GAMECOUNT_RESET) == SF_GAMECOUNT_RESET; }
|
||||
|
||||
void CountUp() { pev->frags++; }
|
||||
void CountDown() { pev->frags--; }
|
||||
void ResetCount() { pev->frags = pev->dmg; }
|
||||
|
||||
int CountValue() const { return int(pev->frags); }
|
||||
int LimitValue() const { return int(pev->health); }
|
||||
BOOL HitLimit() const { return CountValue() == LimitValue(); }
|
||||
|
||||
private:
|
||||
void SetCountValue(int value) { pev->frags = value; }
|
||||
void SetInitialValue(int value) { pev->dmg = value; }
|
||||
};
|
||||
|
||||
// CGameCounterSet / game_counter_set -- Sets the counter's value
|
||||
// Flag: Fire once
|
||||
class CGameCounterSet: public CRulePointEntity {
|
||||
public:
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
BOOL RemoveOnFire() const { return (pev->spawnflags & SF_GAMECOUNTSET_FIREONCE) == SF_GAMECOUNTSET_FIREONCE; }
|
||||
};
|
||||
|
||||
// CGamePlayerEquip / game_playerequip -- Sets the default player equipment
|
||||
// Flag: USE Only
|
||||
class CGamePlayerEquip: public CRulePointEntity {
|
||||
public:
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual void Touch(CBaseEntity *pOther) = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
BOOL UseOnly() const { return (pev->spawnflags & SF_PLAYEREQUIP_USEONLY) == SF_PLAYEREQUIP_USEONLY; }
|
||||
public:
|
||||
string_t m_weaponNames[ MAX_EQUIP ];
|
||||
int m_weaponCount[ MAX_EQUIP ];
|
||||
};
|
||||
|
||||
// CGamePlayerTeam / game_player_team -- Changes the team of the player who fired it
|
||||
// Flag: Fire once
|
||||
// Flag: Kill Player
|
||||
// Flag: Gib Player
|
||||
class CGamePlayerTeam: public CRulePointEntity {
|
||||
public:
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
private:
|
||||
BOOL RemoveOnFire() const { return (pev->spawnflags & SF_PTEAM_FIREONCE) == SF_PTEAM_FIREONCE; }
|
||||
BOOL ShouldKillPlayer() const { return (pev->spawnflags & SF_PTEAM_KILL) == SF_PTEAM_KILL; }
|
||||
BOOL ShouldGibPlayer() const { return (pev->spawnflags & SF_PTEAM_GIB) == SF_PTEAM_GIB; }
|
||||
};
|
||||
|
@ -1,24 +1,37 @@
|
||||
/***
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
* 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 product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
* 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
|
||||
*
|
||||
****/
|
||||
#ifndef MONSTEREVENT_H
|
||||
#define MONSTEREVENT_H
|
||||
* 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
|
||||
typedef struct MonsterEvent_s
|
||||
{
|
||||
int event;
|
||||
char *options;
|
||||
|
||||
} MonsterEvent_t;
|
||||
|
||||
#define EVENT_SPECIFIC 0
|
||||
@ -28,7 +41,4 @@ typedef struct
|
||||
|
||||
#define MONSTER_EVENT_BODYDROP_LIGHT 2001
|
||||
#define MONSTER_EVENT_BODYDROP_HEAVY 2002
|
||||
|
||||
#define MONSTER_EVENT_SWISHSOUND 2010
|
||||
|
||||
#endif // MONSTEREVENT_H
|
||||
|
@ -1,115 +1,77 @@
|
||||
/***
|
||||
*
|
||||
* Copyright (c) 1996-2001, 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.
|
||||
*
|
||||
* This source code contains proprietary and confidential information of
|
||||
* Valve LLC and its suppliers. Access to this code is restricted to
|
||||
* persons who have executed a written SDK license with Valve. Any access,
|
||||
* use or distribution of this code by or to any unlicensed person is illegal.
|
||||
*
|
||||
****/
|
||||
#ifndef MONSTERS_H
|
||||
#include "skill.h"
|
||||
#define MONSTERS_H
|
||||
|
||||
/*
|
||||
|
||||
===== monsters.h ========================================================
|
||||
|
||||
Header file for monster-related utility code
|
||||
|
||||
*
|
||||
* 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
|
||||
|
||||
// CHECKLOCALMOVE result types
|
||||
#define LOCALMOVE_INVALID 0 // move is not possible
|
||||
#define LOCALMOVE_INVALID_DONT_TRIANGULATE 1 // move is not possible, don't try to triangulate
|
||||
#define LOCALMOVE_VALID 2 // move is possible
|
||||
|
||||
// Hit Group standards
|
||||
#define HITGROUP_GENERIC 0
|
||||
#define HITGROUP_HEAD 1
|
||||
#define HITGROUP_CHEST 2
|
||||
#define HITGROUP_STOMACH 3
|
||||
#define HITGROUP_LEFTARM 4
|
||||
#define HITGROUP_RIGHTARM 5
|
||||
#define HITGROUP_LEFTLEG 6
|
||||
#define HITGROUP_RIGHTLEG 7
|
||||
|
||||
|
||||
// Monster Spawnflags
|
||||
#define SF_MONSTER_WAIT_TILL_SEEN 1// spawnflag that makes monsters wait until player can see them before attacking.
|
||||
#define SF_MONSTER_WAIT_TILL_SEEN 1 // spawnflag that makes monsters wait until player can see them before attacking.
|
||||
#define SF_MONSTER_GAG 2 // no idle noises from this monster
|
||||
#define SF_MONSTER_HITMONSTERCLIP 4
|
||||
// 8
|
||||
#define SF_MONSTER_PRISONER 16 // monster won't attack anyone, no one will attacke him.
|
||||
// 32
|
||||
// 64
|
||||
|
||||
#define SF_MONSTER_WAIT_FOR_SCRIPT 128 //spawnflag that makes monsters wait to check for attacking until the script is done or they've been attacked
|
||||
#define SF_MONSTER_PREDISASTER 256 //this is a predisaster scientist or barney. Influences how they speak.
|
||||
#define SF_MONSTER_FADECORPSE 512 // Fade out corpse after death
|
||||
#define SF_MONSTER_FALL_TO_GROUND 0x80000000
|
||||
|
||||
// specialty spawnflags
|
||||
#define SF_MONSTER_TURRET_AUTOACTIVATE 32
|
||||
#define SF_MONSTER_TURRET_STARTINACTIVE 64
|
||||
#define SF_MONSTER_WAIT_UNTIL_PROVOKED 64 // don't attack the player unless provoked
|
||||
|
||||
|
||||
|
||||
// MoveToOrigin stuff
|
||||
#define MOVE_START_TURN_DIST 64 // when this far away from moveGoal, start turning to face next goal
|
||||
#define MOVE_STUCK_DIST 32 // if a monster can't step this far, it is stuck.
|
||||
|
||||
#define MOVE_NORMAL 0 // normal move in the direction monster is facing
|
||||
#define MOVE_STRAFE 1 // moves in direction specified, no matter which way monster is facing
|
||||
|
||||
// MoveToOrigin stuff
|
||||
#define MOVE_NORMAL 0// normal move in the direction monster is facing
|
||||
#define MOVE_STRAFE 1// moves in direction specified, no matter which way monster is facing
|
||||
|
||||
// spawn flags 256 and above are already taken by the engine
|
||||
extern void UTIL_MoveToOrigin( edict_t* pent, const Vector &vecGoal, float flDist, int iMoveType );
|
||||
|
||||
Vector VecCheckToss ( entvars_t *pev, const Vector &vecSpot1, Vector vecSpot2, float flGravityAdj = 1.0 );
|
||||
Vector VecCheckThrow ( entvars_t *pev, const Vector &vecSpot1, Vector vecSpot2, float flSpeed, float flGravityAdj = 1.0 );
|
||||
extern DLL_GLOBAL Vector g_vecAttackDir;
|
||||
extern DLL_GLOBAL CONSTANT float g_flMeleeRange;
|
||||
extern DLL_GLOBAL CONSTANT float g_flMediumRange;
|
||||
extern DLL_GLOBAL CONSTANT float g_flLongRange;
|
||||
extern void EjectBrass (const Vector &vecOrigin, const Vector &vecVelocity, float rotation, int model, int soundtype );
|
||||
extern void ExplodeModel( const Vector &vecOrigin, float speed, int model, int count );
|
||||
|
||||
BOOL FBoxVisible ( entvars_t *pevLooker, entvars_t *pevTarget );
|
||||
BOOL FBoxVisible ( entvars_t *pevLooker, entvars_t *pevTarget, Vector &vecTargetOrigin, float flSize = 0.0 );
|
||||
|
||||
// monster to monster relationship types
|
||||
#define R_AL -2 // (ALLY) pals. Good alternative to R_NO when applicable.
|
||||
#define R_FR -1// (FEAR)will run
|
||||
#define R_NO 0// (NO RELATIONSHIP) disregard
|
||||
#define R_DL 1// (DISLIKE) will attack
|
||||
#define R_HT 2// (HATE)will attack this character instead of any visible DISLIKEd characters
|
||||
#define R_NM 3// (NEMESIS) A monster Will ALWAYS attack its nemsis, no matter what
|
||||
#define R_FR -1 // (FEAR)will run
|
||||
#define R_NO 0 // (NO RELATIONSHIP) disregard
|
||||
#define R_DL 1 // (DISLIKE) will attack
|
||||
#define R_HT 2 // (HATE)will attack this character instead of any visible DISLIKEd characters
|
||||
#define R_NM 3 // (NEMESIS) A monster Will ALWAYS attack its nemsis, no matter what
|
||||
|
||||
|
||||
// these bits represent the monster's memory
|
||||
#define MEMORY_CLEAR 0
|
||||
#define bits_MEMORY_PROVOKED ( 1 << 0 )// right now only used for houndeyes.
|
||||
#define bits_MEMORY_INCOVER ( 1 << 1 )// monster knows it is in a covered position.
|
||||
#define bits_MEMORY_SUSPICIOUS ( 1 << 2 )// Ally is suspicious of the player, and will move to provoked more easily
|
||||
#define bits_MEMORY_PATH_FINISHED ( 1 << 3 )// Finished monster path (just used by big momma for now)
|
||||
#define bits_MEMORY_ON_PATH ( 1 << 4 )// Moving on a path
|
||||
#define bits_MEMORY_MOVE_FAILED ( 1 << 5 )// Movement has already failed
|
||||
#define bits_MEMORY_FLINCHED ( 1 << 6 )// Has already flinched
|
||||
#define bits_MEMORY_KILLED ( 1 << 7 )// HACKHACK -- remember that I've already called my Killed()
|
||||
#define bits_MEMORY_CUSTOM4 ( 1 << 28 ) // Monster-specific memory
|
||||
#define bits_MEMORY_CUSTOM3 ( 1 << 29 ) // Monster-specific memory
|
||||
#define bits_MEMORY_CUSTOM2 ( 1 << 30 ) // Monster-specific memory
|
||||
#define bits_MEMORY_CUSTOM1 ( 1 << 31 ) // Monster-specific memory
|
||||
#define bits_MEMORY_PROVOKED (1 << 0) // right now only used for houndeyes.
|
||||
#define bits_MEMORY_INCOVER (1 << 1) // monster knows it is in a covered position.
|
||||
#define bits_MEMORY_SUSPICIOUS (1 << 2) // Ally is suspicious of the player, and will move to provoked more easily
|
||||
#define bits_MEMORY_PATH_FINISHED (1 << 3) // Finished monster path (just used by big momma for now)
|
||||
#define bits_MEMORY_ON_PATH (1 << 4) // Moving on a path
|
||||
#define bits_MEMORY_MOVE_FAILED (1 << 5) // Movement has already failed
|
||||
#define bits_MEMORY_FLINCHED (1 << 6) // Has already flinched
|
||||
#define bits_MEMORY_KILLED (1 << 7) // HACKHACK -- remember that I've already called my Killed()
|
||||
#define bits_MEMORY_CUSTOM4 (1 << 28) // Monster-specific memory
|
||||
#define bits_MEMORY_CUSTOM3 (1 << 29) // Monster-specific memory
|
||||
#define bits_MEMORY_CUSTOM2 (1 << 30) // Monster-specific memory
|
||||
#define bits_MEMORY_CUSTOM1 (1 << 31) // Monster-specific memory
|
||||
|
||||
// trigger conditions for scripted AI
|
||||
// these MUST match the CHOICES interface in halflife.fgd for the base monster
|
||||
enum
|
||||
{
|
||||
AITRIGGER_NONE = 0,
|
||||
@ -125,59 +87,27 @@ enum
|
||||
AITRIGGER_SEEPLAYER_UNCONDITIONAL,
|
||||
AITRIGGER_SEEPLAYER_NOT_IN_COMBAT,
|
||||
};
|
||||
/*
|
||||
0 : "No Trigger"
|
||||
1 : "See Player"
|
||||
2 : "Take Damage"
|
||||
3 : "50% Health Remaining"
|
||||
4 : "Death"
|
||||
5 : "Squad Member Dead"
|
||||
6 : "Squad Leader Dead"
|
||||
7 : "Hear World"
|
||||
8 : "Hear Player"
|
||||
9 : "Hear Combat"
|
||||
*/
|
||||
|
||||
//
|
||||
// A gib is a chunk of a body, or a piece of wood/metal/rocks/etc.
|
||||
//
|
||||
class CGib : public CBaseEntity
|
||||
enum HitBoxGroup
|
||||
{
|
||||
HITGROUP_GENERIC = 0,
|
||||
HITGROUP_HEAD,
|
||||
HITGROUP_CHEST,
|
||||
HITGROUP_STOMACH,
|
||||
HITGROUP_LEFTARM,
|
||||
HITGROUP_RIGHTARM,
|
||||
HITGROUP_LEFTLEG,
|
||||
HITGROUP_RIGHTLEG,
|
||||
HITGROUP_SHIELD,
|
||||
NUM_HITGROUPS,
|
||||
};
|
||||
|
||||
class CGib: public CBaseEntity {
|
||||
public:
|
||||
virtual int ObjectCaps() = 0;
|
||||
public:
|
||||
void Spawn( const char *szGibModel );
|
||||
void EXPORT BounceGibTouch ( CBaseEntity *pOther );
|
||||
void EXPORT StickyGibTouch ( CBaseEntity *pOther );
|
||||
void EXPORT WaitTillLand( void );
|
||||
void LimitVelocity( void );
|
||||
|
||||
virtual int ObjectCaps( void ) { return (CBaseEntity :: ObjectCaps() & ~FCAP_ACROSS_TRANSITION) | FCAP_DONT_SAVE; }
|
||||
static void SpawnHeadGib( entvars_t *pevVictim );
|
||||
static void SpawnRandomGibs( entvars_t *pevVictim, int cGibs, int human );
|
||||
static void SpawnStickyGibs( entvars_t *pevVictim, Vector vecOrigin, int cGibs );
|
||||
|
||||
int m_bloodColor;
|
||||
int m_cBloodDecals;
|
||||
int m_material;
|
||||
float m_lifeTime;
|
||||
};
|
||||
|
||||
|
||||
#define CUSTOM_SCHEDULES\
|
||||
virtual Schedule_t *ScheduleFromName( const char *pName );\
|
||||
static Schedule_t *m_scheduleList[];
|
||||
|
||||
#define DEFINE_CUSTOM_SCHEDULES(derivedClass)\
|
||||
Schedule_t *derivedClass::m_scheduleList[] =
|
||||
|
||||
#define IMPLEMENT_CUSTOM_SCHEDULES(derivedClass, baseClass)\
|
||||
Schedule_t *derivedClass::ScheduleFromName( const char *pName )\
|
||||
{\
|
||||
Schedule_t *pSchedule = ScheduleInList( pName, m_scheduleList, ARRAYSIZE(m_scheduleList) );\
|
||||
if ( !pSchedule )\
|
||||
return baseClass::ScheduleFromName(pName);\
|
||||
return pSchedule;\
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif //MONSTERS_H
|
||||
|
55
metamod/extra/example/include/hlsdk/dlls/mortar.h
Normal file
55
metamod/extra/example/include/hlsdk/dlls/mortar.h
Normal file
@ -0,0 +1,55 @@
|
||||
/*
|
||||
*
|
||||
* 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 CFuncMortarField: public CBaseToggle {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
|
||||
// Bmodels don't go across transitions
|
||||
virtual int ObjectCaps() = 0;
|
||||
public:
|
||||
int m_iszXController;
|
||||
int m_iszYController;
|
||||
float m_flSpread;
|
||||
float m_flDelay;
|
||||
int m_iCount;
|
||||
int m_fControl;
|
||||
};
|
||||
|
||||
class CMortar: public CGrenade {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
public:
|
||||
int m_spriteTexture;
|
||||
};
|
32
metamod/extra/example/include/hlsdk/dlls/observer.h
Normal file
32
metamod/extra/example/include/hlsdk/dlls/observer.h
Normal file
@ -0,0 +1,32 @@
|
||||
/*
|
||||
*
|
||||
* 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 CAMERA_MODE_SPEC_ANYONE 0
|
||||
#define CAMERA_MODE_SPEC_ONLY_TEAM 1
|
||||
#define CAMERA_MODE_SPEC_ONLY_FRIST_PERSON 2
|
39
metamod/extra/example/include/hlsdk/dlls/pathcorner.h
Normal file
39
metamod/extra/example/include/hlsdk/dlls/pathcorner.h
Normal file
@ -0,0 +1,39 @@
|
||||
/*
|
||||
*
|
||||
* 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 CPathCorner: public CPointEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual float GetDelay() = 0;
|
||||
private:
|
||||
float m_flWait;
|
||||
};
|
178
metamod/extra/example/include/hlsdk/dlls/plats.h
Normal file
178
metamod/extra/example/include/hlsdk/dlls/plats.h
Normal file
@ -0,0 +1,178 @@
|
||||
/*
|
||||
*
|
||||
* 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 SF_PLAT_TOGGLE 0x0001
|
||||
|
||||
#define TRAIN_STARTPITCH 60
|
||||
#define TRAIN_MAXPITCH 200
|
||||
#define TRAIN_MAXSPEED 1000
|
||||
|
||||
#define SF_TRACK_ACTIVATETRAIN 0x00000001
|
||||
#define SF_TRACK_RELINK 0x00000002
|
||||
#define SF_TRACK_ROTMOVE 0x00000004
|
||||
#define SF_TRACK_STARTBOTTOM 0x00000008
|
||||
#define SF_TRACK_DONT_MOVE 0x00000010
|
||||
|
||||
#define FGUNTARGET_START_ON 0x0001
|
||||
|
||||
class CBasePlatTrain: public CBaseToggle {
|
||||
public:
|
||||
virtual void Precache() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
|
||||
// This is done to fix spawn flag collisions between this class and a derived class
|
||||
virtual BOOL IsTogglePlat() = 0;
|
||||
public:
|
||||
byte m_bMoveSnd;
|
||||
byte m_bStopSnd;
|
||||
float m_volume;
|
||||
};
|
||||
|
||||
class CFuncPlat: public CBasePlatTrain {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void Blocked(CBaseEntity *pOther) = 0;
|
||||
virtual void GoUp() = 0;
|
||||
virtual void GoDown() = 0;
|
||||
virtual void HitTop() = 0;
|
||||
virtual void HitBottom() = 0;
|
||||
};
|
||||
|
||||
class CPlatTrigger: public CBaseEntity {
|
||||
public:
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual void Touch(CBaseEntity *pOther) = 0;
|
||||
public:
|
||||
CFuncPlat *m_pPlatform;
|
||||
};
|
||||
|
||||
class CFuncPlatRot: public CFuncPlat {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual void GoUp() = 0;
|
||||
virtual void GoDown() = 0;
|
||||
virtual void HitTop() = 0;
|
||||
virtual void HitBottom() = 0;
|
||||
public:
|
||||
Vector m_end;
|
||||
Vector m_start;
|
||||
};
|
||||
|
||||
class CFuncTrain: public CBasePlatTrain {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void Restart() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual void Activate() = 0;
|
||||
virtual void OverrideReset() = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
virtual void Blocked(CBaseEntity *pOther) = 0;
|
||||
public:
|
||||
Vector m_vStartPosition;
|
||||
entvars_t *m_pevFirstTarget;
|
||||
entvars_t *m_pevCurrentTarget;
|
||||
int m_sounds;
|
||||
BOOL m_activated;
|
||||
};
|
||||
|
||||
class CFuncTrainControls: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
};
|
||||
|
||||
class CFuncTrackChange: public CFuncPlatRot {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual void OverrideReset() = 0;
|
||||
virtual void Touch(CBaseEntity *pOther) = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
virtual BOOL IsTogglePlat() = 0;
|
||||
virtual void GoUp() = 0;
|
||||
virtual void GoDown() = 0;
|
||||
virtual void HitTop() = 0;
|
||||
virtual void HitBottom() = 0;
|
||||
virtual void UpdateAutoTargets(int toggleState) = 0;
|
||||
|
||||
public:
|
||||
void DisableUse() { m_use = 0; }
|
||||
void EnableUse() { m_use = 1; }
|
||||
|
||||
int UseEnabled() const { return m_use; }
|
||||
|
||||
public:
|
||||
static TYPEDESCRIPTION IMPL(m_SaveData)[9];
|
||||
|
||||
CPathTrack *m_trackTop;
|
||||
CPathTrack *m_trackBottom;
|
||||
CFuncTrackTrain *m_train;
|
||||
|
||||
int m_trackTopName;
|
||||
int m_trackBottomName;
|
||||
int m_trainName;
|
||||
|
||||
TRAIN_CODE m_code;
|
||||
int m_targetState;
|
||||
int m_use;
|
||||
};
|
||||
|
||||
class CFuncTrackAuto: public CFuncTrackChange {
|
||||
public:
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
virtual void UpdateAutoTargets(int toggleState) = 0;
|
||||
};
|
||||
|
||||
class CGunTarget: public CBaseMonster {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual void Activate() = 0;
|
||||
virtual int Classify() = 0;
|
||||
virtual BOOL TakeDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType) = 0;
|
||||
virtual int BloodColor() = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
virtual Vector BodyTarget(const Vector &posSrc) = 0;
|
||||
private:
|
||||
BOOL m_on;
|
||||
};
|
@ -1,48 +1,104 @@
|
||||
/***
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
* 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 product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
* 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
|
||||
*
|
||||
****/
|
||||
#ifndef PLAYER_H
|
||||
#define PLAYER_H
|
||||
|
||||
* 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 "pm_materials.h"
|
||||
#include "hintmessage.h"
|
||||
#include "unisignals.h"
|
||||
|
||||
#define MIN_BUY_TIME 15 // the minimum threshold values for cvar mp_buytime 15 sec's
|
||||
|
||||
#define PLAYER_FATAL_FALL_SPEED 1024// approx 60 feet
|
||||
#define PLAYER_MAX_SAFE_FALL_SPEED 580// approx 20 feet
|
||||
#define DAMAGE_FOR_FALL_SPEED (float) 100 / ( PLAYER_FATAL_FALL_SPEED - PLAYER_MAX_SAFE_FALL_SPEED )// damage per unit per second.
|
||||
#define PLAYER_MIN_BOUNCE_SPEED 200
|
||||
#define PLAYER_FALL_PUNCH_THRESHHOLD (float)350 // won't punch player's screen/make scrape noise unless player falling at least this fast.
|
||||
#define MAX_BUFFER_MENU 175
|
||||
#define MAX_BUFFER_MENU_BRIEFING 50
|
||||
|
||||
//
|
||||
// Player PHYSICS FLAGS bits
|
||||
//
|
||||
#define PFLAG_ONLADDER ( 1<<0 )
|
||||
#define PFLAG_ONSWING ( 1<<0 )
|
||||
#define PFLAG_ONTRAIN ( 1<<1 )
|
||||
#define PFLAG_ONBARNACLE ( 1<<2 )
|
||||
#define PFLAG_DUCKING ( 1<<3 ) // In the process of ducking, but totally squatted yet
|
||||
#define PFLAG_USING ( 1<<4 ) // Using a continuous entity
|
||||
#define PFLAG_OBSERVER ( 1<<5 ) // player is locked in stationary cam mode. Spectators can move, observers can't.
|
||||
#define MAX_PLAYER_NAME_LENGTH 32
|
||||
#define MAX_AUTOBUY_LENGTH 256
|
||||
#define MAX_REBUY_LENGTH 256
|
||||
|
||||
//
|
||||
// generic player
|
||||
//
|
||||
//-----------------------------------------------------
|
||||
//This is Half-Life player entity
|
||||
//-----------------------------------------------------
|
||||
#define CSUITPLAYLIST 4 // max of 4 suit sentences queued up at any time
|
||||
#define MAX_RECENT_PATH 20
|
||||
#define MAX_HOSTAGE_ICON 4 // the maximum number of icons of the hostages in the HUD
|
||||
|
||||
#define SUITUPDATETIME 3.5
|
||||
#define SUITFIRSTUPDATETIME 0.1
|
||||
|
||||
#define PLAYER_FATAL_FALL_SPEED 1100.0f
|
||||
#define PLAYER_MAX_SAFE_FALL_SPEED 500.0f
|
||||
#define PLAYER_USE_RADIUS 64.0f
|
||||
|
||||
#define ARMOR_RATIO 0.5 // Armor Takes 50% of the damage
|
||||
#define ARMOR_BONUS 0.5 // Each Point of Armor is work 1/x points of health
|
||||
|
||||
#define FLASH_DRAIN_TIME 1.2 // 100 units/3 minutes
|
||||
#define FLASH_CHARGE_TIME 0.2 // 100 units/20 seconds (seconds per unit)
|
||||
|
||||
// damage per unit per second.
|
||||
#define DAMAGE_FOR_FALL_SPEED 100.0f / (PLAYER_FATAL_FALL_SPEED - PLAYER_MAX_SAFE_FALL_SPEED)
|
||||
#define PLAYER_MIN_BOUNCE_SPEED 350.0f
|
||||
|
||||
// won't punch player's screen/make scrape noise unless player falling at least this fast.
|
||||
#define PLAYER_FALL_PUNCH_THRESHHOLD 250.0f
|
||||
|
||||
// Money blinks few of times on the freeze period
|
||||
// NOTE: It works for CZ
|
||||
#define MONEY_BLINK_AMOUNT 30
|
||||
|
||||
// Player physics flags bits
|
||||
// CBasePlayer::m_afPhysicsFlags
|
||||
#define PFLAG_ONLADDER (1<<0)
|
||||
#define PFLAG_ONSWING (1<<0)
|
||||
#define PFLAG_ONTRAIN (1<<1)
|
||||
#define PFLAG_ONBARNACLE (1<<2)
|
||||
#define PFLAG_DUCKING (1<<3) // In the process of ducking, but totally squatted yet
|
||||
#define PFLAG_USING (1<<4) // Using a continuous entity
|
||||
#define PFLAG_OBSERVER (1<<5) // player is locked in stationary cam mode. Spectators can move, observers can't.
|
||||
|
||||
#define TRAIN_OFF 0x00
|
||||
#define TRAIN_NEUTRAL 0x01
|
||||
#define TRAIN_SLOW 0x02
|
||||
#define TRAIN_MEDIUM 0x03
|
||||
#define TRAIN_FAST 0x04
|
||||
#define TRAIN_BACK 0x05
|
||||
|
||||
#define TRAIN_ACTIVE 0x80
|
||||
#define TRAIN_NEW 0xc0
|
||||
|
||||
#define SIGNAL_BUY (1<<0)
|
||||
#define SIGNAL_BOMB (1<<1)
|
||||
#define SIGNAL_RESCUE (1<<2)
|
||||
#define SIGNAL_ESCAPE (1<<3)
|
||||
#define SIGNAL_VIPSAFETY (1<<4)
|
||||
|
||||
#define IGNOREMSG_NONE 0
|
||||
#define IGNOREMSG_ENEMY 1
|
||||
#define IGNOREMSG_TEAM 2
|
||||
|
||||
// max of 4 suit sentences queued up at any time
|
||||
#define CSUITPLAYLIST 4
|
||||
|
||||
#define SUIT_GROUP TRUE
|
||||
#define SUIT_SENTENCE FALSE
|
||||
@ -55,14 +111,48 @@
|
||||
#define SUIT_NEXT_IN_30MIN 1800
|
||||
#define SUIT_NEXT_IN_1HOUR 3600
|
||||
|
||||
#define TEAM_NAME_LENGTH 16
|
||||
|
||||
#define MAX_ID_RANGE 2048.0f
|
||||
#define MAX_SPECTATOR_ID_RANGE 8192.0f
|
||||
#define SBAR_STRING_SIZE 128
|
||||
|
||||
#define SBAR_TARGETTYPE_TEAMMATE 1
|
||||
#define SBAR_TARGETTYPE_ENEMY 2
|
||||
#define SBAR_TARGETTYPE_HOSTAGE 3
|
||||
|
||||
#define CHAT_INTERVAL 1.0f
|
||||
#define CSUITNOREPEAT 32
|
||||
|
||||
#define AUTOAIM_2DEGREES 0.0348994967025
|
||||
#define AUTOAIM_5DEGREES 0.08715574274766
|
||||
#define AUTOAIM_8DEGREES 0.1391731009601
|
||||
#define AUTOAIM_10DEGREES 0.1736481776669
|
||||
|
||||
#define SOUND_FLASHLIGHT_ON "items/flashlight1.wav"
|
||||
#define SOUND_FLASHLIGHT_OFF "items/flashlight1.wav"
|
||||
|
||||
#define TEAM_NAME_LENGTH 16
|
||||
// custom enum
|
||||
enum RewardType
|
||||
{
|
||||
RT_NONE,
|
||||
RT_ROUND_BONUS,
|
||||
RT_PLAYER_RESET,
|
||||
RT_PLAYER_JOIN,
|
||||
RT_PLAYER_SPEC_JOIN,
|
||||
RT_PLAYER_BOUGHT_SOMETHING,
|
||||
RT_HOSTAGE_TOOK,
|
||||
RT_HOSTAGE_RESCUED,
|
||||
RT_HOSTAGE_DAMAGED,
|
||||
RT_HOSTAGE_KILLED,
|
||||
RT_TEAMMATES_KILLED,
|
||||
RT_ENEMY_KILLED,
|
||||
RT_INTO_GAME,
|
||||
RT_VIP_KILLED,
|
||||
RT_VIP_RESCUED_MYSELF
|
||||
};
|
||||
|
||||
typedef enum
|
||||
enum PLAYER_ANIM
|
||||
{
|
||||
PLAYER_IDLE,
|
||||
PLAYER_WALK,
|
||||
@ -70,267 +160,466 @@ typedef enum
|
||||
PLAYER_SUPERJUMP,
|
||||
PLAYER_DIE,
|
||||
PLAYER_ATTACK1,
|
||||
} PLAYER_ANIM;
|
||||
PLAYER_ATTACK2,
|
||||
PLAYER_FLINCH,
|
||||
PLAYER_LARGE_FLINCH,
|
||||
PLAYER_RELOAD,
|
||||
PLAYER_HOLDBOMB
|
||||
};
|
||||
|
||||
#define MAX_ID_RANGE 2048
|
||||
#define SBAR_STRING_SIZE 128
|
||||
enum _Menu
|
||||
{
|
||||
Menu_OFF,
|
||||
Menu_ChooseTeam,
|
||||
Menu_IGChooseTeam,
|
||||
Menu_ChooseAppearance,
|
||||
Menu_Buy,
|
||||
Menu_BuyPistol,
|
||||
Menu_BuyRifle,
|
||||
Menu_BuyMachineGun,
|
||||
Menu_BuyShotgun,
|
||||
Menu_BuySubMachineGun,
|
||||
Menu_BuyItem,
|
||||
Menu_Radio1,
|
||||
Menu_Radio2,
|
||||
Menu_Radio3,
|
||||
Menu_ClientBuy
|
||||
};
|
||||
|
||||
enum TeamName
|
||||
{
|
||||
UNASSIGNED,
|
||||
TERRORIST,
|
||||
CT,
|
||||
SPECTATOR,
|
||||
};
|
||||
|
||||
enum ModelName
|
||||
{
|
||||
MODEL_UNASSIGNED,
|
||||
MODEL_URBAN,
|
||||
MODEL_TERROR,
|
||||
MODEL_LEET,
|
||||
MODEL_ARCTIC,
|
||||
MODEL_GSG9,
|
||||
MODEL_GIGN,
|
||||
MODEL_SAS,
|
||||
MODEL_GUERILLA,
|
||||
MODEL_VIP,
|
||||
MODEL_MILITIA,
|
||||
MODEL_SPETSNAZ,
|
||||
MODEL_AUTO
|
||||
};
|
||||
|
||||
enum JoinState
|
||||
{
|
||||
JOINED,
|
||||
SHOWLTEXT,
|
||||
READINGLTEXT,
|
||||
SHOWTEAMSELECT,
|
||||
PICKINGTEAM,
|
||||
GETINTOGAME
|
||||
};
|
||||
|
||||
enum TrackCommands
|
||||
{
|
||||
CMD_SAY = 0,
|
||||
CMD_SAYTEAM,
|
||||
CMD_FULLUPDATE,
|
||||
CMD_VOTE,
|
||||
CMD_VOTEMAP,
|
||||
CMD_LISTMAPS,
|
||||
CMD_LISTPLAYERS,
|
||||
CMD_NIGHTVISION,
|
||||
COMMANDS_TO_TRACK,
|
||||
};
|
||||
|
||||
struct RebuyStruct
|
||||
{
|
||||
int m_primaryWeapon;
|
||||
int m_primaryAmmo;
|
||||
int m_secondaryWeapon;
|
||||
int m_secondaryAmmo;
|
||||
int m_heGrenade;
|
||||
int m_flashbang;
|
||||
int m_smokeGrenade;
|
||||
int m_defuser;
|
||||
int m_nightVision;
|
||||
ArmorType m_armor;
|
||||
};
|
||||
|
||||
enum ThrowDirection
|
||||
{
|
||||
THROW_NONE,
|
||||
THROW_FORWARD,
|
||||
THROW_BACKWARD,
|
||||
THROW_HITVEL,
|
||||
THROW_BOMB,
|
||||
THROW_GRENADE,
|
||||
THROW_HITVEL_MINUS_AIRVEL
|
||||
};
|
||||
|
||||
enum sbar_data
|
||||
{
|
||||
SBAR_ID_TARGETNAME = 1,
|
||||
SBAR_ID_TARGETTYPE = 1,
|
||||
SBAR_ID_TARGETNAME,
|
||||
SBAR_ID_TARGETHEALTH,
|
||||
SBAR_ID_TARGETARMOR,
|
||||
SBAR_END,
|
||||
SBAR_END
|
||||
};
|
||||
|
||||
#define CHAT_INTERVAL 1.0f
|
||||
enum MusicState { SILENT, CALM, INTENSE };
|
||||
|
||||
class CBasePlayer : public CBaseMonster
|
||||
{
|
||||
class CCSPlayer;
|
||||
|
||||
class CStripWeapons: public CPointEntity {
|
||||
public:
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
};
|
||||
|
||||
// Spectator camera
|
||||
void Observer_FindNextPlayer( bool bReverse );
|
||||
void Observer_HandleButtons();
|
||||
void Observer_SetMode( int iMode );
|
||||
void Observer_CheckTarget();
|
||||
void Observer_CheckProperties();
|
||||
// Multiplayer intermission spots.
|
||||
class CInfoIntermission: public CPointEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Think() = 0;
|
||||
};
|
||||
|
||||
// Dead HEV suit prop
|
||||
class CDeadHEV: public CBaseMonster {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Classify() = 0;
|
||||
public:
|
||||
int m_iPose; // which sequence to display -- temporary, don't need to save
|
||||
static char *m_szPoses[4];
|
||||
};
|
||||
|
||||
class CSprayCan: public CBaseEntity {
|
||||
public:
|
||||
virtual void Think() = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
};
|
||||
|
||||
class CBloodSplat: public CBaseEntity {
|
||||
public:
|
||||
};
|
||||
|
||||
class CBasePlayer: public CBaseMonster {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual int Classify() = 0;
|
||||
virtual void TraceAttack(entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType) = 0;
|
||||
virtual BOOL TakeDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType) = 0;
|
||||
virtual BOOL TakeHealth(float flHealth, int bitsDamageType) = 0;
|
||||
virtual void Killed(entvars_t *pevAttacker, int iGib) = 0;
|
||||
virtual void AddPoints(int score, BOOL bAllowNegativeScore) = 0;
|
||||
virtual void AddPointsToTeam(int score, BOOL bAllowNegativeScore) = 0;
|
||||
virtual BOOL AddPlayerItem(CBasePlayerItem *pItem) = 0;
|
||||
virtual BOOL RemovePlayerItem(CBasePlayerItem *pItem) = 0;
|
||||
virtual int GiveAmmo(int iAmount, const char *szName, int iMax = -1) = 0;
|
||||
virtual void StartSneaking() = 0;
|
||||
virtual void UpdateOnRemove() = 0;
|
||||
virtual BOOL IsSneaking() = 0;
|
||||
virtual BOOL IsAlive() = 0;
|
||||
virtual BOOL IsPlayer() = 0;
|
||||
virtual BOOL IsNetClient() = 0;
|
||||
virtual const char *TeamID() = 0;
|
||||
virtual BOOL FBecomeProne() = 0;
|
||||
virtual Vector BodyTarget(const Vector &posSrc) = 0;
|
||||
virtual int Illumination() = 0;
|
||||
virtual BOOL ShouldFadeOnDeath() = 0;
|
||||
virtual void ResetMaxSpeed() = 0;
|
||||
virtual void Jump() = 0;
|
||||
virtual void Duck() = 0;
|
||||
virtual void PreThink() = 0;
|
||||
virtual void PostThink() = 0;
|
||||
virtual Vector GetGunPosition() = 0;
|
||||
virtual BOOL IsBot() = 0;
|
||||
virtual void UpdateClientData() = 0;
|
||||
virtual void ImpulseCommands() = 0;
|
||||
virtual void RoundRespawn() = 0;
|
||||
virtual Vector GetAutoaimVector(float flDelta) = 0;
|
||||
virtual void Blind(float flUntilTime, float flHoldTime, float flFadeTime, int iAlpha) = 0;
|
||||
virtual void OnTouchingWeapon(CWeaponBox *pWeapon) = 0;
|
||||
public:
|
||||
static CBasePlayer *Instance(edict_t *pent) { return (CBasePlayer *)GET_PRIVATE(pent ? pent : ENT(0)); }
|
||||
static CBasePlayer *Instance(entvars_t *pev) { return Instance(ENT(pev)); }
|
||||
static CBasePlayer *Instance(int offset) { return Instance(ENT(offset)); }
|
||||
|
||||
int IsObserver() { return pev->iuser1; }
|
||||
void SetWeaponAnimType(const char *szExtention) { strcpy(m_szAnimExtention, szExtention); }
|
||||
bool IsProtectedByShield() { return m_bOwnsShield && m_bShieldDrawn; }
|
||||
bool IsReloading() const;
|
||||
bool IsBlind() const { return (m_blindUntilTime > gpGlobals->time); }
|
||||
bool IsAutoFollowAllowed() const { return (gpGlobals->time > m_allowAutoFollowTime); }
|
||||
void InhibitAutoFollow(float duration) { m_allowAutoFollowTime = gpGlobals->time + duration; }
|
||||
void AllowAutoFollow() { m_allowAutoFollowTime = 0; }
|
||||
void SetObserverAutoDirector(bool val) { m_bObserverAutoDirector = val; }
|
||||
bool CanSwitchObserverModes() const { return m_canSwitchObserverModes; }
|
||||
CCSPlayer *CSPlayer() const;
|
||||
|
||||
// templates
|
||||
template<typename Functor>
|
||||
CBasePlayerItem *ForEachItem(int slot, const Functor &func)
|
||||
{
|
||||
auto item = m_rgpPlayerItems[ slot ];
|
||||
while (item)
|
||||
{
|
||||
if (func(item))
|
||||
return item;
|
||||
|
||||
item = item->m_pNext;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
template<typename Functor>
|
||||
CBasePlayerItem *ForEachItem(const Functor &func)
|
||||
{
|
||||
for (auto item : m_rgpPlayerItems)
|
||||
{
|
||||
while (item)
|
||||
{
|
||||
if (func(item))
|
||||
return item;
|
||||
|
||||
item = item->m_pNext;
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
public:
|
||||
enum { MaxLocationLen = 32 };
|
||||
|
||||
int random_seed;
|
||||
unsigned short m_usPlayerBleed;
|
||||
EHANDLE m_hObserverTarget;
|
||||
float m_flNextObserverInput;
|
||||
int m_iObserverWeapon; // weapon of current tracked target
|
||||
int m_iObserverLastMode;// last used observer mode
|
||||
int IsObserver() { return pev->iuser1; };
|
||||
int random_seed; // See that is shared between client & server for shared weapons code
|
||||
|
||||
int m_iPlayerSound;// the index of the sound list slot reserved for this player
|
||||
int m_iTargetVolume;// ideal sound volume.
|
||||
int m_iWeaponVolume;// how loud the player's weapon is right now.
|
||||
int m_iExtraSoundTypes;// additional classification for this weapon's sound
|
||||
int m_iWeaponFlash;// brightness of the weapon flash
|
||||
int m_iObserverWeapon;
|
||||
int m_iObserverC4State;
|
||||
bool m_bObserverHasDefuser;
|
||||
int m_iObserverLastMode;
|
||||
float m_flFlinchTime;
|
||||
float m_flAnimTime;
|
||||
bool m_bHighDamage;
|
||||
float m_flVelocityModifier;
|
||||
int m_iLastZoom;
|
||||
bool m_bResumeZoom;
|
||||
float m_flEjectBrass;
|
||||
ArmorType m_iKevlar;
|
||||
bool m_bNotKilled;
|
||||
TeamName m_iTeam;
|
||||
int m_iAccount;
|
||||
bool m_bHasPrimary;
|
||||
float m_flDeathThrowTime;
|
||||
int m_iThrowDirection;
|
||||
float m_flLastTalk;
|
||||
bool m_bJustConnected;
|
||||
bool m_bContextHelp;
|
||||
JoinState m_iJoiningState;
|
||||
CBaseEntity *m_pIntroCamera;
|
||||
float m_fIntroCamTime;
|
||||
float m_fLastMovement;
|
||||
bool m_bMissionBriefing;
|
||||
bool m_bTeamChanged;
|
||||
ModelName m_iModelName;
|
||||
int m_iTeamKills;
|
||||
int m_iIgnoreGlobalChat;
|
||||
bool m_bHasNightVision;
|
||||
bool m_bNightVisionOn;
|
||||
Vector m_vRecentPath[MAX_RECENT_PATH];
|
||||
float m_flIdleCheckTime;
|
||||
float m_flRadioTime;
|
||||
int m_iRadioMessages;
|
||||
bool m_bIgnoreRadio;
|
||||
bool m_bHasC4;
|
||||
bool m_bHasDefuser;
|
||||
bool m_bKilledByBomb;
|
||||
Vector m_vBlastVector;
|
||||
bool m_bKilledByGrenade;
|
||||
CHintMessageQueue m_hintMessageQueue;
|
||||
int m_flDisplayHistory;
|
||||
_Menu m_iMenu;
|
||||
int m_iChaseTarget;
|
||||
CBaseEntity *m_pChaseTarget;
|
||||
float m_fCamSwitch;
|
||||
bool m_bEscaped;
|
||||
bool m_bIsVIP;
|
||||
float m_tmNextRadarUpdate;
|
||||
Vector m_vLastOrigin;
|
||||
int m_iCurrentKickVote;
|
||||
float m_flNextVoteTime;
|
||||
bool m_bJustKilledTeammate;
|
||||
int m_iHostagesKilled;
|
||||
int m_iMapVote;
|
||||
bool m_bCanShoot;
|
||||
float m_flLastFired;
|
||||
float m_flLastAttackedTeammate;
|
||||
bool m_bHeadshotKilled;
|
||||
bool m_bPunishedForTK;
|
||||
bool m_bReceivesNoMoneyNextRound;
|
||||
int m_iTimeCheckAllowed;
|
||||
bool m_bHasChangedName;
|
||||
char m_szNewName[MAX_PLAYER_NAME_LENGTH];
|
||||
bool m_bIsDefusing;
|
||||
float m_tmHandleSignals;
|
||||
CUnifiedSignals m_signals;
|
||||
edict_t *m_pentCurBombTarget;
|
||||
int m_iPlayerSound;
|
||||
int m_iTargetVolume;
|
||||
int m_iWeaponVolume;
|
||||
int m_iExtraSoundTypes;
|
||||
int m_iWeaponFlash;
|
||||
float m_flStopExtraSoundTime;
|
||||
|
||||
float m_flFlashLightTime; // Time until next battery draw/Recharge
|
||||
int m_iFlashBattery; // Flashlight Battery Draw
|
||||
|
||||
float m_flFlashLightTime;
|
||||
int m_iFlashBattery;
|
||||
int m_afButtonLast;
|
||||
int m_afButtonPressed;
|
||||
int m_afButtonReleased;
|
||||
|
||||
edict_t *m_pentSndLast; // last sound entity to modify player room type
|
||||
float m_flSndRoomtype; // last roomtype set by sound entity
|
||||
float m_flSndRange; // dist from player to sound entity
|
||||
|
||||
edict_t *m_pentSndLast;
|
||||
float m_flSndRoomtype;
|
||||
float m_flSndRange;
|
||||
float m_flFallVelocity;
|
||||
|
||||
int m_rgItems[MAX_ITEMS];
|
||||
int m_fKnownItem; // True when a new item needs to be added
|
||||
int m_fNewAmmo; // True when a new item has been added
|
||||
|
||||
unsigned int m_afPhysicsFlags; // physics flags - set when 'normal' physics should be revisited or overriden
|
||||
float m_fNextSuicideTime; // the time after which the player can next use the suicide command
|
||||
|
||||
|
||||
// these are time-sensitive things that we keep track of
|
||||
float m_flTimeStepSound; // when the last stepping sound was made
|
||||
float m_flTimeWeaponIdle; // when to play another weapon idle animation.
|
||||
float m_flSwimTime; // how long player has been underwater
|
||||
float m_flDuckTime; // how long we've been ducking
|
||||
float m_flWallJumpTime; // how long until next walljump
|
||||
|
||||
float m_flSuitUpdate; // when to play next suit update
|
||||
int m_rgSuitPlayList[CSUITPLAYLIST];// next sentencenum to play for suit update
|
||||
int m_iSuitPlayNext; // next sentence slot for queue storage;
|
||||
int m_rgiSuitNoRepeat[CSUITNOREPEAT]; // suit sentence no repeat list
|
||||
float m_rgflSuitNoRepeatTime[CSUITNOREPEAT]; // how long to wait before allowing repeat
|
||||
int m_lastDamageAmount; // Last damage taken
|
||||
float m_tbdPrev; // Time-based damage timer
|
||||
|
||||
float m_flgeigerRange; // range to nearest radiation source
|
||||
float m_flgeigerDelay; // delay per update of range msg to client
|
||||
int m_fNewAmmo;
|
||||
unsigned int m_afPhysicsFlags;
|
||||
float m_fNextSuicideTime;
|
||||
float m_flTimeStepSound;
|
||||
float m_flTimeWeaponIdle;
|
||||
float m_flSwimTime;
|
||||
float m_flDuckTime;
|
||||
float m_flWallJumpTime;
|
||||
float m_flSuitUpdate;
|
||||
int m_rgSuitPlayList[CSUITPLAYLIST];
|
||||
int m_iSuitPlayNext;
|
||||
int m_rgiSuitNoRepeat[CSUITNOREPEAT];
|
||||
float m_rgflSuitNoRepeatTime[CSUITNOREPEAT];
|
||||
int m_lastDamageAmount;
|
||||
float m_tbdPrev;
|
||||
float m_flgeigerRange;
|
||||
float m_flgeigerDelay;
|
||||
int m_igeigerRangePrev;
|
||||
int m_iStepLeft; // alternate left/right foot stepping sound
|
||||
char m_szTextureName[CBTEXTURENAMEMAX]; // current texture name we're standing on
|
||||
char m_chTextureType; // current texture type
|
||||
|
||||
int m_idrowndmg; // track drowning damage taken
|
||||
int m_idrownrestored; // track drowning damage restored
|
||||
|
||||
int m_bitsHUDDamage; // Damage bits for the current fame. These get sent to
|
||||
// the hude via the DAMAGE message
|
||||
BOOL m_fInitHUD; // True when deferred HUD restart msg needs to be sent
|
||||
int m_iStepLeft;
|
||||
char m_szTextureName[CBTEXTURENAMEMAX];
|
||||
char m_chTextureType;
|
||||
int m_idrowndmg;
|
||||
int m_idrownrestored;
|
||||
int m_bitsHUDDamage;
|
||||
BOOL m_fInitHUD;
|
||||
BOOL m_fGameHUDInitialized;
|
||||
int m_iTrain; // Train control position
|
||||
BOOL m_fWeapon; // Set this to FALSE to force a reset of the current weapon HUD info
|
||||
|
||||
EHANDLE m_pTank; // the tank which the player is currently controlling, NULL if no tank
|
||||
float m_fDeadTime; // the time at which the player died (used in PlayerDeathThink())
|
||||
|
||||
BOOL m_fNoPlayerSound; // a debugging feature. Player makes no sound if this is true.
|
||||
BOOL m_fLongJump; // does this player have the longjump module?
|
||||
|
||||
int m_iTrain;
|
||||
BOOL m_fWeapon;
|
||||
EHANDLE m_pTank;
|
||||
float m_fDeadTime;
|
||||
BOOL m_fNoPlayerSound;
|
||||
BOOL m_fLongJump;
|
||||
float m_tSneaking;
|
||||
int m_iUpdateTime; // stores the number of frame ticks before sending HUD update messages
|
||||
int m_iClientHealth; // the health currently known by the client. If this changes, send a new
|
||||
int m_iClientBattery; // the Battery currently known by the client. If this changes, send a new
|
||||
int m_iHideHUD; // the players hud weapon info is to be hidden
|
||||
int m_iUpdateTime;
|
||||
int m_iClientHealth;
|
||||
int m_iClientBattery;
|
||||
int m_iHideHUD;
|
||||
int m_iClientHideHUD;
|
||||
int m_iFOV; // field of view
|
||||
int m_iClientFOV; // client's known FOV
|
||||
// usable player items
|
||||
int m_iFOV;
|
||||
int m_iClientFOV;
|
||||
int m_iNumSpawns;
|
||||
CBaseEntity *m_pObserver;
|
||||
CBasePlayerItem *m_rgpPlayerItems[MAX_ITEM_TYPES];
|
||||
CBasePlayerItem *m_pActiveItem;
|
||||
CBasePlayerItem *m_pClientActiveItem; // client version of the active item
|
||||
CBasePlayerItem *m_pClientActiveItem;
|
||||
CBasePlayerItem *m_pLastItem;
|
||||
// shared ammo slots
|
||||
int m_rgAmmo[MAX_AMMO_SLOTS];
|
||||
int m_rgAmmoLast[MAX_AMMO_SLOTS];
|
||||
|
||||
Vector m_vecAutoAim;
|
||||
BOOL m_fOnTarget;
|
||||
int m_iDeaths;
|
||||
float m_iRespawnFrames; // used in PlayerDeathThink() to make sure players can always respawn
|
||||
|
||||
int m_lastx, m_lasty; // These are the previous update's crosshair angles, DON"T SAVE/RESTORE
|
||||
|
||||
int m_nCustomSprayFrames;// Custom clan logo frames for this player
|
||||
float m_flNextDecalTime;// next time this player can spray a decal
|
||||
|
||||
char m_szTeamName[TEAM_NAME_LENGTH];
|
||||
|
||||
virtual void Spawn( void );
|
||||
void Pain( void );
|
||||
|
||||
// virtual void Think( void );
|
||||
virtual void Jump( void );
|
||||
virtual void Duck( void );
|
||||
virtual void PreThink( void );
|
||||
virtual void PostThink( void );
|
||||
virtual Vector GetGunPosition( void );
|
||||
virtual int TakeHealth( float flHealth, int bitsDamageType );
|
||||
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 void Killed( entvars_t *pevAttacker, int iGib );
|
||||
virtual Vector BodyTarget( const Vector &posSrc ) { return Center( ) + pev->view_ofs * RANDOM_FLOAT( 0.5, 1.1 ); }; // position to shoot at
|
||||
virtual void StartSneaking( void ) { m_tSneaking = gpGlobals->time - 1; }
|
||||
virtual void StopSneaking( void ) { m_tSneaking = gpGlobals->time + 30; }
|
||||
virtual BOOL IsSneaking( void ) { return m_tSneaking <= gpGlobals->time; }
|
||||
virtual BOOL IsAlive( void ) { return (pev->deadflag == DEAD_NO) && pev->health > 0; }
|
||||
virtual BOOL ShouldFadeOnDeath( void ) { return FALSE; }
|
||||
virtual BOOL IsPlayer( void ) { return TRUE; } // Spectators should return FALSE for this, they aren't "players" as far as game logic is concerned
|
||||
|
||||
virtual BOOL IsNetClient( void ) { return TRUE; } // Bots should return FALSE for this, they can't receive NET messages
|
||||
// Spectators should return TRUE for this
|
||||
virtual const char *TeamID( void );
|
||||
|
||||
virtual int Save( CSave &save );
|
||||
virtual int Restore( CRestore &restore );
|
||||
void RenewItems(void);
|
||||
void PackDeadPlayerItems( void );
|
||||
void RemoveAllItems( BOOL removeSuit );
|
||||
BOOL SwitchWeapon( CBasePlayerItem *pWeapon );
|
||||
|
||||
// JOHN: sends custom messages if player HUD data has changed (eg health, ammo)
|
||||
virtual void UpdateClientData( void );
|
||||
|
||||
static TYPEDESCRIPTION m_playerSaveData[];
|
||||
|
||||
// Player is moved across the transition by other means
|
||||
virtual int ObjectCaps( void ) { return CBaseMonster :: ObjectCaps() & ~FCAP_ACROSS_TRANSITION; }
|
||||
virtual void Precache( void );
|
||||
BOOL IsOnLadder( void );
|
||||
BOOL FlashlightIsOn( void );
|
||||
void FlashlightTurnOn( void );
|
||||
void FlashlightTurnOff( void );
|
||||
|
||||
void UpdatePlayerSound ( void );
|
||||
void DeathSound ( void );
|
||||
|
||||
int Classify ( void );
|
||||
void SetAnimation( PLAYER_ANIM playerAnim );
|
||||
void SetWeaponAnimType( const char *szExtention );
|
||||
char m_szAnimExtention[32];
|
||||
|
||||
// custom player functions
|
||||
virtual void ImpulseCommands( void );
|
||||
void CheatImpulseCommands( int iImpulse );
|
||||
|
||||
void StartDeathCam( void );
|
||||
void StartObserver( Vector vecPosition, Vector vecViewAngle );
|
||||
|
||||
void AddPoints( int score, BOOL bAllowNegativeScore );
|
||||
void AddPointsToTeam( int score, BOOL bAllowNegativeScore );
|
||||
BOOL AddPlayerItem( CBasePlayerItem *pItem );
|
||||
BOOL RemovePlayerItem( CBasePlayerItem *pItem );
|
||||
void DropPlayerItem ( char *pszItemName );
|
||||
BOOL HasPlayerItem( CBasePlayerItem *pCheckItem );
|
||||
BOOL HasNamedPlayerItem( const char *pszItemName );
|
||||
BOOL HasWeapons( void );// do I have ANY weapons?
|
||||
void SelectPrevItem( int iItem );
|
||||
void SelectNextItem( int iItem );
|
||||
void SelectLastItem(void);
|
||||
void SelectItem(const char *pstr);
|
||||
void ItemPreFrame( void );
|
||||
void ItemPostFrame( void );
|
||||
void GiveNamedItem( const char *szName );
|
||||
void EnableControl(BOOL fControl);
|
||||
|
||||
int GiveAmmo( int iAmount, char *szName, int iMax );
|
||||
void SendAmmoUpdate(void);
|
||||
|
||||
void WaterMove( void );
|
||||
void EXPORT PlayerDeathThink( void );
|
||||
void PlayerUse( void );
|
||||
|
||||
void CheckSuitUpdate();
|
||||
void SetSuitUpdate(char *name, int fgroup, int iNoRepeat);
|
||||
void UpdateGeigerCounter( void );
|
||||
void CheckTimeBasedDamage( void );
|
||||
|
||||
BOOL FBecomeProne ( void );
|
||||
void BarnacleVictimBitten ( entvars_t *pevBarnacle );
|
||||
void BarnacleVictimReleased ( void );
|
||||
static int GetAmmoIndex(const char *psz);
|
||||
int AmmoInventory( int iAmmoIndex );
|
||||
int Illumination( void );
|
||||
|
||||
void ResetAutoaim( void );
|
||||
Vector GetAutoaimVector( float flDelta );
|
||||
Vector AutoaimDeflection( Vector &vecSrc, float flDist, float flDelta );
|
||||
|
||||
void ForceClientDllUpdate( void ); // Forces all client .dll specific data to be resent to client.
|
||||
|
||||
void DeathMessage( entvars_t *pevKiller );
|
||||
|
||||
void SetCustomDecalFrames( int nFrames );
|
||||
int GetCustomDecalFrames( void );
|
||||
|
||||
void CBasePlayer::TabulateAmmo( void );
|
||||
|
||||
float m_flStartCharge;
|
||||
float m_flAmmoStartCharge;
|
||||
float m_flPlayAftershock;
|
||||
float m_flNextAmmoBurn;// while charging, when to absorb another unit of player's ammo?
|
||||
|
||||
//Player ID
|
||||
void InitStatusBar( void );
|
||||
void UpdateStatusBar( void );
|
||||
int m_izSBarState[ SBAR_END ];
|
||||
int m_izSBarState[SBAR_END];
|
||||
float m_flNextSBarUpdateTime;
|
||||
float m_flStatusBarDisappearDelay;
|
||||
char m_SbarString0[ SBAR_STRING_SIZE ];
|
||||
char m_SbarString1[ SBAR_STRING_SIZE ];
|
||||
|
||||
float m_flNextChatTime;
|
||||
|
||||
char m_SbarString0[SBAR_STRING_SIZE];
|
||||
int m_lastx;
|
||||
int m_lasty;
|
||||
int m_nCustomSprayFrames;
|
||||
float m_flNextDecalTime;
|
||||
char m_szTeamName[TEAM_NAME_LENGTH];
|
||||
int m_modelIndexPlayer;
|
||||
char m_szAnimExtention[32];
|
||||
int m_iGaitsequence;
|
||||
float m_flGaitframe;
|
||||
float m_flGaityaw;
|
||||
Vector m_prevgaitorigin;
|
||||
float m_flPitch;
|
||||
float m_flYaw;
|
||||
float m_flGaitMovement;
|
||||
int m_iAutoWepSwitch;
|
||||
bool m_bVGUIMenus;
|
||||
bool m_bShowHints;
|
||||
bool m_bShieldDrawn;
|
||||
bool m_bOwnsShield;
|
||||
bool m_bWasFollowing;
|
||||
float m_flNextFollowTime;
|
||||
float m_flYawModifier;
|
||||
float m_blindUntilTime;
|
||||
float m_blindStartTime;
|
||||
float m_blindHoldTime;
|
||||
float m_blindFadeTime;
|
||||
int m_blindAlpha;
|
||||
float m_allowAutoFollowTime;
|
||||
char m_autoBuyString[MAX_AUTOBUY_LENGTH];
|
||||
char *m_rebuyString;
|
||||
RebuyStruct m_rebuyStruct;
|
||||
bool m_bIsInRebuy;
|
||||
float m_flLastUpdateTime;
|
||||
char m_lastLocation[MaxLocationLen];
|
||||
float m_progressStart;
|
||||
float m_progressEnd;
|
||||
bool m_bObserverAutoDirector;
|
||||
bool m_canSwitchObserverModes;
|
||||
float m_heartBeatTime;
|
||||
float m_intenseTimestamp;
|
||||
float m_silentTimestamp;
|
||||
MusicState m_musicState;
|
||||
float m_flLastCommandTime[COMMANDS_TO_TRACK];
|
||||
};
|
||||
|
||||
#define AUTOAIM_2DEGREES 0.0348994967025
|
||||
#define AUTOAIM_5DEGREES 0.08715574274766
|
||||
#define AUTOAIM_8DEGREES 0.1391731009601
|
||||
#define AUTOAIM_10DEGREES 0.1736481776669
|
||||
class CWShield: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Touch(CBaseEntity *pOther) = 0;
|
||||
public:
|
||||
void SetCantBePickedUpByUser(CBaseEntity *pEntity, float time) { m_hEntToIgnoreTouchesFrom = pEntity; m_flTimeToIgnoreTouches = gpGlobals->time + time; }
|
||||
public:
|
||||
EHANDLE m_hEntToIgnoreTouchesFrom;
|
||||
float m_flTimeToIgnoreTouches;
|
||||
};
|
||||
|
||||
inline bool CBasePlayer::IsReloading() const
|
||||
{
|
||||
CBasePlayerWeapon *weapon = static_cast<CBasePlayerWeapon *>(m_pActiveItem);
|
||||
if (weapon && weapon->m_fInReload)
|
||||
return true;
|
||||
|
||||
extern int gmsgHudText;
|
||||
extern BOOL gInitHUD;
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif // PLAYER_H
|
||||
inline CCSPlayer *CBasePlayer::CSPlayer() const {
|
||||
return reinterpret_cast<CCSPlayer *>(this->m_pEntity);
|
||||
}
|
||||
|
||||
// returns a CBaseEntity pointer to a player by index. Only returns if the player is spawned and connected otherwise returns NULL
|
||||
// Index is 1 based
|
||||
inline CBasePlayer *UTIL_PlayerByIndex(int playerIndex)
|
||||
{
|
||||
return (CBasePlayer *)GET_PRIVATE(INDEXENT(playerIndex));
|
||||
}
|
||||
|
||||
inline CBasePlayer *UTIL_PlayerByIndexSafe(int playerIndex)
|
||||
{
|
||||
CBasePlayer *player = nullptr;
|
||||
if (likely(playerIndex > 0 && playerIndex <= gpGlobals->maxClients))
|
||||
player = UTIL_PlayerByIndex(playerIndex);
|
||||
|
||||
return player;
|
||||
}
|
||||
|
490
metamod/extra/example/include/hlsdk/dlls/regamedll_api.h
Normal file
490
metamod/extra/example/include/hlsdk/dlls/regamedll_api.h
Normal file
@ -0,0 +1,490 @@
|
||||
/*
|
||||
*
|
||||
* 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 "archtypes.h"
|
||||
#include "regamedll_interfaces.h"
|
||||
#include "hookchains.h"
|
||||
#include "interface.h"
|
||||
#include "player.h"
|
||||
#include "gamerules.h"
|
||||
#include "client.h"
|
||||
#include "items.h"
|
||||
|
||||
#define REGAMEDLL_API_VERSION_MAJOR 5
|
||||
#define REGAMEDLL_API_VERSION_MINOR 3
|
||||
|
||||
// CBasePlayer::Spawn hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer> IReGameHook_CBasePlayer_Spawn;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer> IReGameHookRegistry_CBasePlayer_Spawn;
|
||||
|
||||
// CBasePlayer::Precache hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer> IReGameHook_CBasePlayer_Precache;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer> IReGameHookRegistry_CBasePlayer_Precache;
|
||||
|
||||
// CBasePlayer::ObjectCaps hook
|
||||
typedef IHookChainClass<int, class CBasePlayer> IReGameHook_CBasePlayer_ObjectCaps;
|
||||
typedef IHookChainRegistryClass<int, class CBasePlayer> IReGameHookRegistry_CBasePlayer_ObjectCaps;
|
||||
|
||||
// CBasePlayer::Classify hook
|
||||
typedef IHookChainClass<int, class CBasePlayer> IReGameHook_CBasePlayer_Classify;
|
||||
typedef IHookChainRegistryClass<int, class CBasePlayer> IReGameHookRegistry_CBasePlayer_Classify;
|
||||
|
||||
// CBasePlayer::TraceAttack hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer, struct entvars_s *, float, Vector &, struct TraceResult *, int> IReGameHook_CBasePlayer_TraceAttack;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer, struct entvars_s *, float, Vector &, struct TraceResult *, int> IReGameHookRegistry_CBasePlayer_TraceAttack;
|
||||
|
||||
// CBasePlayer::TakeDamage hook
|
||||
typedef IHookChainClass<BOOL, class CBasePlayer, struct entvars_s *, struct entvars_s *, float&, int> IReGameHook_CBasePlayer_TakeDamage;
|
||||
typedef IHookChainRegistryClass<BOOL, class CBasePlayer, struct entvars_s *, struct entvars_s *, float&, int> IReGameHookRegistry_CBasePlayer_TakeDamage;
|
||||
|
||||
// CBasePlayer::TakeHealth hook
|
||||
typedef IHookChainClass<BOOL, class CBasePlayer, float, int> IReGameHook_CBasePlayer_TakeHealth;
|
||||
typedef IHookChainRegistryClass<BOOL, class CBasePlayer, float, int> IReGameHookRegistry_CBasePlayer_TakeHealth;
|
||||
|
||||
// CBasePlayer::Killed hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer, struct entvars_s *, int> IReGameHook_CBasePlayer_Killed;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer, struct entvars_s *, int> IReGameHookRegistry_CBasePlayer_Killed;
|
||||
|
||||
// CBasePlayer::AddPoints hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer, int, BOOL> IReGameHook_CBasePlayer_AddPoints;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer, int, BOOL> IReGameHookRegistry_CBasePlayer_AddPoints;
|
||||
|
||||
// CBasePlayer::AddPointsToTeam hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer, int, BOOL> IReGameHook_CBasePlayer_AddPointsToTeam;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer, int, BOOL> IReGameHookRegistry_CBasePlayer_AddPointsToTeam;
|
||||
|
||||
// CBasePlayer::AddPlayerItem hook
|
||||
typedef IHookChainClass<BOOL, class CBasePlayer, class CBasePlayerItem *> IReGameHook_CBasePlayer_AddPlayerItem;
|
||||
typedef IHookChainRegistryClass<BOOL, class CBasePlayer, class CBasePlayerItem *> IReGameHookRegistry_CBasePlayer_AddPlayerItem;
|
||||
|
||||
// CBasePlayer::RemovePlayerItem hook
|
||||
typedef IHookChainClass<BOOL, class CBasePlayer, class CBasePlayerItem *> IReGameHook_CBasePlayer_RemovePlayerItem;
|
||||
typedef IHookChainRegistryClass<BOOL, class CBasePlayer, class CBasePlayerItem *> IReGameHookRegistry_CBasePlayer_RemovePlayerItem;
|
||||
|
||||
// CBasePlayer::GiveAmmo hook
|
||||
typedef IHookChainClass<int, class CBasePlayer, int , const char *, int> IReGameHook_CBasePlayer_GiveAmmo;
|
||||
typedef IHookChainRegistryClass<int, class CBasePlayer, int , const char *, int> IReGameHookRegistry_CBasePlayer_GiveAmmo;
|
||||
|
||||
// CBasePlayer::ResetMaxSpeed hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer> IReGameHook_CBasePlayer_ResetMaxSpeed;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer> IReGameHookRegistry_CBasePlayer_ResetMaxSpeed;
|
||||
|
||||
// CBasePlayer::Jump hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer> IReGameHook_CBasePlayer_Jump;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer> IReGameHookRegistry_CBasePlayer_Jump;
|
||||
|
||||
// CBasePlayer::Duck hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer> IReGameHook_CBasePlayer_Duck;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer> IReGameHookRegistry_CBasePlayer_Duck;
|
||||
|
||||
// CBasePlayer::PreThink hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer> IReGameHook_CBasePlayer_PreThink;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer> IReGameHookRegistry_CBasePlayer_PreThink;
|
||||
|
||||
// CBasePlayer::PostThink hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer> IReGameHook_CBasePlayer_PostThink;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer> IReGameHookRegistry_CBasePlayer_PostThink;
|
||||
|
||||
// CBasePlayer::UpdateClientData hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer> IReGameHook_CBasePlayer_UpdateClientData;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer> IReGameHookRegistry_CBasePlayer_UpdateClientData;
|
||||
|
||||
// CBasePlayer::ImpulseCommands hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer> IReGameHook_CBasePlayer_ImpulseCommands;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer> IReGameHookRegistry_CBasePlayer_ImpulseCommands;
|
||||
|
||||
// CBasePlayer::RoundRespawn hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer> IReGameHook_CBasePlayer_RoundRespawn;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer> IReGameHookRegistry_CBasePlayer_RoundRespawn;
|
||||
|
||||
// CBasePlayer::Blind hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer, float, float, float, int> IReGameHook_CBasePlayer_Blind;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer, float, float, float, int> IReGameHookRegistry_CBasePlayer_Blind;
|
||||
|
||||
// CBasePlayer::Observer_IsValidTarget hook
|
||||
typedef IHookChainClass<class CBasePlayer *, class CBasePlayer, int, bool> IReGameHook_CBasePlayer_Observer_IsValidTarget;
|
||||
typedef IHookChainRegistryClass<class CBasePlayer *, class CBasePlayer, int, bool> IReGameHookRegistry_CBasePlayer_Observer_IsValidTarget;
|
||||
|
||||
// CBasePlayer::SetAnimation hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer, PLAYER_ANIM> IReGameHook_CBasePlayer_SetAnimation;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer, PLAYER_ANIM> IReGameHookRegistry_CBasePlayer_SetAnimation;
|
||||
|
||||
// CBasePlayer::GiveDefaultItems hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer> IReGameHook_CBasePlayer_GiveDefaultItems;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer> IReGameHookRegistry_CBasePlayer_GiveDefaultItems;
|
||||
|
||||
// CBasePlayer::GiveNamedItem hook
|
||||
typedef IHookChainClass<class CBaseEntity *, class CBasePlayer, const char *> IReGameHook_CBasePlayer_GiveNamedItem;
|
||||
typedef IHookChainRegistryClass<class CBaseEntity *, class CBasePlayer, const char *> IReGameHookRegistry_CBasePlayer_GiveNamedItem;
|
||||
|
||||
// CBasePlayer::AddAccount hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer, int, RewardType, bool> IReGameHook_CBasePlayer_AddAccount;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer, int, RewardType, bool> IReGameHookRegistry_CBasePlayer_AddAccount;
|
||||
|
||||
// CBasePlayer::GiveShield hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer, bool> IReGameHook_CBasePlayer_GiveShield;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer, bool> IReGameHookRegistry_CBasePlayer_GiveShield;
|
||||
|
||||
// CBasePlayer:SetClientUserInfoModel hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer, char *, char *> IReGameHook_CBasePlayer_SetClientUserInfoModel;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer, char *, char *> IReGameHookRegistry_CBasePlayer_SetClientUserInfoModel;
|
||||
|
||||
// CBasePlayer:SetClientUserInfoName hook
|
||||
typedef IHookChainClass<bool, class CBasePlayer, char *, char *> IReGameHook_CBasePlayer_SetClientUserInfoName;
|
||||
typedef IHookChainRegistryClass<bool, class CBasePlayer, char *, char *> IReGameHookRegistry_CBasePlayer_SetClientUserInfoName;
|
||||
|
||||
// CBasePlayer::HasRestrictItem hook
|
||||
typedef IHookChainClass<bool, class CBasePlayer, ItemID, ItemRestType> IReGameHook_CBasePlayer_HasRestrictItem;
|
||||
typedef IHookChainRegistryClass<bool, class CBasePlayer, ItemID, ItemRestType> IReGameHookRegistry_CBasePlayer_HasRestrictItem;
|
||||
|
||||
// CBasePlayer::DropPlayerItem hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer, const char *> IReGameHook_CBasePlayer_DropPlayerItem;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer, const char *> IReGameHookRegistry_CBasePlayer_DropPlayerItem;
|
||||
|
||||
// CBasePlayer::DropShield hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer, bool> IReGameHook_CBasePlayer_DropShield;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer, bool> IReGameHookRegistry_CBasePlayer_DropShield;
|
||||
|
||||
// CBasePlayer::OnSpawnEquip hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer, bool, bool> IReGameHook_CBasePlayer_OnSpawnEquip;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer, bool, bool> IReGameHookRegistry_CBasePlayer_OnSpawnEquip;
|
||||
|
||||
// CBasePlayer::Radio hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer, const char *, const char *, short, bool> IReGameHook_CBasePlayer_Radio;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer, const char *, const char *, short, bool> IReGameHookRegistry_CBasePlayer_Radio;
|
||||
|
||||
// CBasePlayer::Disappear hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer> IReGameHook_CBasePlayer_Disappear;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer> IReGameHookRegistry_CBasePlayer_Disappear;
|
||||
|
||||
// CBasePlayer::MakeVIP hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer> IReGameHook_CBasePlayer_MakeVIP;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer> IReGameHookRegistry_CBasePlayer_MakeVIP;
|
||||
|
||||
// CBasePlayer::MakeBomber hook
|
||||
typedef IHookChainClass<bool, class CBasePlayer> IReGameHook_CBasePlayer_MakeBomber;
|
||||
typedef IHookChainRegistryClass<bool, class CBasePlayer> IReGameHookRegistry_CBasePlayer_MakeBomber;
|
||||
|
||||
// CBasePlayer::StartObserver hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer, Vector &, Vector &> IReGameHook_CBasePlayer_StartObserver;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer, Vector &, Vector &> IReGameHookRegistry_CBasePlayer_StartObserver;
|
||||
|
||||
// CBasePlayer::GetIntoGame hook
|
||||
typedef IHookChainClass<bool, class CBasePlayer> IReGameHook_CBasePlayer_GetIntoGame;
|
||||
typedef IHookChainRegistryClass<bool, class CBasePlayer> IReGameHookRegistry_CBasePlayer_GetIntoGame;
|
||||
|
||||
// CBaseAnimating::ResetSequenceInfo hook
|
||||
typedef IVoidHookChainClass<class CBaseAnimating> IReGameHook_CBaseAnimating_ResetSequenceInfo;
|
||||
typedef IVoidHookChainRegistryClass<class CBaseAnimating> IReGameHookRegistry_CBaseAnimating_ResetSequenceInfo;
|
||||
|
||||
// GetForceCamera hook
|
||||
typedef IHookChain<int, class CBasePlayer *> IReGameHook_GetForceCamera;
|
||||
typedef IHookChainRegistry<int, class CBasePlayer *> IReGameHookRegistry_GetForceCamera;
|
||||
|
||||
// PlayerBlind hook
|
||||
typedef IVoidHookChain<class CBasePlayer *, struct entvars_s *, struct entvars_s *, float, float, int, Vector &> IReGameHook_PlayerBlind;
|
||||
typedef IVoidHookChainRegistry<class CBasePlayer *, struct entvars_s *, struct entvars_s *, float, float, int, Vector &> IReGameHookRegistry_PlayerBlind;
|
||||
|
||||
// RadiusFlash_TraceLine hook
|
||||
typedef IVoidHookChain<class CBasePlayer *, struct entvars_s *, struct entvars_s *, Vector &, Vector &, struct TraceResult *> IReGameHook_RadiusFlash_TraceLine;
|
||||
typedef IVoidHookChainRegistry<class CBasePlayer *, struct entvars_s *, struct entvars_s *, Vector &, Vector &, struct TraceResult *> IReGameHookRegistry_RadiusFlash_TraceLine;
|
||||
|
||||
// RoundEnd hook
|
||||
typedef IHookChain<bool, int, ScenarioEventEndRound, float> IReGameHook_RoundEnd;
|
||||
typedef IHookChainRegistry<bool, int, ScenarioEventEndRound, float> IReGameHookRegistry_RoundEnd;
|
||||
|
||||
// InstallGameRules hook
|
||||
typedef IHookChain<class CGameRules *> IReGameHook_InstallGameRules;
|
||||
typedef IHookChainRegistry<class CGameRules *> IReGameHookRegistry_InstallGameRules;
|
||||
|
||||
// PM_Init hook
|
||||
typedef IVoidHookChain<struct playermove_s *> IReGameHook_PM_Init;
|
||||
typedef IVoidHookChainRegistry<struct playermove_s *> IReGameHookRegistry_PM_Init;
|
||||
|
||||
// PM_Move hook
|
||||
typedef IVoidHookChain<struct playermove_s *, int> IReGameHook_PM_Move;
|
||||
typedef IVoidHookChainRegistry<struct playermove_s *, int> IReGameHookRegistry_PM_Move;
|
||||
|
||||
// PM_AirMove hook
|
||||
typedef IVoidHookChain<int> IReGameHook_PM_AirMove;
|
||||
typedef IVoidHookChainRegistry<int> IReGameHookRegistry_PM_AirMove;
|
||||
|
||||
// HandleMenu_ChooseAppearance hook
|
||||
typedef IVoidHookChain<class CBasePlayer *, int> IReGameHook_HandleMenu_ChooseAppearance;
|
||||
typedef IVoidHookChainRegistry<class CBasePlayer *, int> IReGameHookRegistry_HandleMenu_ChooseAppearance;
|
||||
|
||||
// HandleMenu_ChooseTeam hook
|
||||
typedef IHookChain<BOOL, class CBasePlayer *, int> IReGameHook_HandleMenu_ChooseTeam;
|
||||
typedef IHookChainRegistry<BOOL, class CBasePlayer *, int> IReGameHookRegistry_HandleMenu_ChooseTeam;
|
||||
|
||||
// ShowMenu hook
|
||||
typedef IVoidHookChain<class CBasePlayer *, int, int, BOOL, char *> IReGameHook_ShowMenu;
|
||||
typedef IVoidHookChainRegistry<class CBasePlayer *, int, int, BOOL, char *> IReGameHookRegistry_ShowMenu;
|
||||
|
||||
// ShowVGUIMenu hook
|
||||
typedef IVoidHookChain<class CBasePlayer *, int, int, char *> IReGameHook_ShowVGUIMenu;
|
||||
typedef IVoidHookChainRegistry<class CBasePlayer *, int, int, char *> IReGameHookRegistry_ShowVGUIMenu;
|
||||
|
||||
// BuyGunAmmo hook
|
||||
typedef IHookChain<bool, class CBasePlayer *, class CBasePlayerItem *, bool> IReGameHook_BuyGunAmmo;
|
||||
typedef IHookChainRegistry<bool, class CBasePlayer *, class CBasePlayerItem *, bool> IReGameHookRegistry_BuyGunAmmo;
|
||||
|
||||
// BuyWeaponByWeaponID hook
|
||||
typedef IHookChain<class CBaseEntity *, class CBasePlayer *, WeaponIdType> IReGameHook_BuyWeaponByWeaponID;
|
||||
typedef IHookChainRegistry<class CBaseEntity *, class CBasePlayer *, WeaponIdType> IReGameHookRegistry_BuyWeaponByWeaponID;
|
||||
|
||||
// InternalCommand hook
|
||||
typedef IHookChain<bool, edict_t *, const char *> IReGameHook_InternalCommand;
|
||||
typedef IHookChainRegistry<bool, edict_t *, const char *> IReGameHookRegistry_InternalCommand;
|
||||
|
||||
// CHalfLifeMultiplay::FShouldSwitchWeapon hook
|
||||
typedef IHookChain<BOOL, class CBasePlayer *, class CBasePlayerItem *> IReGameHook_CSGameRules_FShouldSwitchWeapon;
|
||||
typedef IHookChainRegistry<BOOL, class CBasePlayer *, class CBasePlayerItem *> IReGameHookRegistry_CSGameRules_FShouldSwitchWeapon;
|
||||
|
||||
// CHalfLifeMultiplay::GetNextBestWeapon hook
|
||||
typedef IHookChain<BOOL, class CBasePlayer *, class CBasePlayerItem *> IReGameHook_CSGameRules_GetNextBestWeapon;
|
||||
typedef IHookChainRegistry<BOOL, class CBasePlayer *, class CBasePlayerItem *> IReGameHookRegistry_CSGameRules_GetNextBestWeapon;
|
||||
|
||||
// CHalfLifeMultiplay::FlPlayerFallDamage hook
|
||||
typedef IHookChain<float, class CBasePlayer *> IReGameHook_CSGameRules_FlPlayerFallDamage;
|
||||
typedef IHookChainRegistry<float, class CBasePlayer *> IReGameHookRegistry_CSGameRules_FlPlayerFallDamage;
|
||||
|
||||
// CHalfLifeMultiplay::FPlayerCanTakeDamage hook
|
||||
typedef IHookChain<BOOL, class CBasePlayer *, CBaseEntity *> IReGameHook_CSGameRules_FPlayerCanTakeDamage;
|
||||
typedef IHookChainRegistry<BOOL, class CBasePlayer *, CBaseEntity *> IReGameHookRegistry_CSGameRules_FPlayerCanTakeDamage;
|
||||
|
||||
// CHalfLifeMultiplay::PlayerSpawn hook
|
||||
typedef IVoidHookChain<class CBasePlayer *> IReGameHook_CSGameRules_PlayerSpawn;
|
||||
typedef IVoidHookChainRegistry<class CBasePlayer *> IReGameHookRegistry_CSGameRules_PlayerSpawn;
|
||||
|
||||
// CHalfLifeMultiplay::FPlayerCanRespawn hook
|
||||
typedef IHookChain<BOOL, class CBasePlayer *> IReGameHook_CSGameRules_FPlayerCanRespawn;
|
||||
typedef IHookChainRegistry<BOOL, class CBasePlayer *> IReGameHookRegistry_CSGameRules_FPlayerCanRespawn;
|
||||
|
||||
// CHalfLifeMultiplay::GetPlayerSpawnSpot hook
|
||||
typedef IHookChain<struct edict_s *, class CBasePlayer *> IReGameHook_CSGameRules_GetPlayerSpawnSpot;
|
||||
typedef IHookChainRegistry<struct edict_s *, class CBasePlayer *> IReGameHookRegistry_CSGameRules_GetPlayerSpawnSpot;
|
||||
|
||||
// CHalfLifeMultiplay::ClientUserInfoChanged hook
|
||||
typedef IVoidHookChain<class CBasePlayer *, char *> IReGameHook_CSGameRules_ClientUserInfoChanged;
|
||||
typedef IVoidHookChainRegistry<class CBasePlayer *, char *> IReGameHookRegistry_CSGameRules_ClientUserInfoChanged;
|
||||
|
||||
// CHalfLifeMultiplay::PlayerKilled hook
|
||||
typedef IVoidHookChain<class CBasePlayer *, struct entvars_s *, struct entvars_s *> IReGameHook_CSGameRules_PlayerKilled;
|
||||
typedef IVoidHookChainRegistry<class CBasePlayer *, struct entvars_s *, struct entvars_s *> IReGameHookRegistry_CSGameRules_PlayerKilled;
|
||||
|
||||
// CHalfLifeMultiplay::DeathNotice hook
|
||||
typedef IVoidHookChain<class CBasePlayer *, struct entvars_s *, struct entvars_s *> IReGameHook_CSGameRules_DeathNotice;
|
||||
typedef IVoidHookChainRegistry<class CBasePlayer *, struct entvars_s *, struct entvars_s *> IReGameHookRegistry_CSGameRules_DeathNotice;
|
||||
|
||||
// CHalfLifeMultiplay::CanHavePlayerItem hook
|
||||
typedef IHookChain<BOOL, class CBasePlayer *, class CBasePlayerItem *> IReGameHook_CSGameRules_CanHavePlayerItem;
|
||||
typedef IHookChainRegistry<BOOL, class CBasePlayer *, class CBasePlayerItem *> IReGameHookRegistry_CSGameRules_CanHavePlayerItem;
|
||||
|
||||
// CHalfLifeMultiplay::DeadPlayerWeapons hook
|
||||
typedef IHookChain<int, class CBasePlayer *> IReGameHook_CSGameRules_DeadPlayerWeapons;
|
||||
typedef IHookChainRegistry<int, class CBasePlayer *> IReGameHookRegistry_CSGameRules_DeadPlayerWeapons;
|
||||
|
||||
// CHalfLifeMultiplay::ServerDeactivate hook
|
||||
typedef IVoidHookChain<> IReGameHook_CSGameRules_ServerDeactivate;
|
||||
typedef IVoidHookChainRegistry<> IReGameHookRegistry_CSGameRules_ServerDeactivate;
|
||||
|
||||
// CHalfLifeMultiplay::CheckMapConditions hook
|
||||
typedef IVoidHookChain<> IReGameHook_CSGameRules_CheckMapConditions;
|
||||
typedef IVoidHookChainRegistry<> IReGameHookRegistry_CSGameRules_CheckMapConditions;
|
||||
|
||||
// CHalfLifeMultiplay::CleanUpMap hook
|
||||
typedef IVoidHookChain<> IReGameHook_CSGameRules_CleanUpMap;
|
||||
typedef IVoidHookChainRegistry<> IReGameHookRegistry_CSGameRules_CleanUpMap;
|
||||
|
||||
// CHalfLifeMultiplay::RestartRound hook
|
||||
typedef IVoidHookChain<> IReGameHook_CSGameRules_RestartRound;
|
||||
typedef IVoidHookChainRegistry<> IReGameHookRegistry_CSGameRules_RestartRound;
|
||||
|
||||
// CHalfLifeMultiplay::CheckWinConditions hook
|
||||
typedef IVoidHookChain<> IReGameHook_CSGameRules_CheckWinConditions;
|
||||
typedef IVoidHookChainRegistry<> IReGameHookRegistry_CSGameRules_CheckWinConditions;
|
||||
|
||||
// CHalfLifeMultiplay::RemoveGuns hook
|
||||
typedef IVoidHookChain<> IReGameHook_CSGameRules_RemoveGuns;
|
||||
typedef IVoidHookChainRegistry<> IReGameHookRegistry_CSGameRules_RemoveGuns;
|
||||
|
||||
// CHalfLifeMultiplay::GiveC4 hook
|
||||
typedef IVoidHookChain<> IReGameHook_CSGameRules_GiveC4;
|
||||
typedef IVoidHookChainRegistry<> IReGameHookRegistry_CSGameRules_GiveC4;
|
||||
|
||||
// CHalfLifeMultiplay::ChangeLevel hook
|
||||
typedef IVoidHookChain<> IReGameHook_CSGameRules_ChangeLevel;
|
||||
typedef IVoidHookChainRegistry<> IReGameHookRegistry_CSGameRules_ChangeLevel;
|
||||
|
||||
// CHalfLifeMultiplay::GoToIntermission hook
|
||||
typedef IVoidHookChain<> IReGameHook_CSGameRules_GoToIntermission;
|
||||
typedef IVoidHookChainRegistry<> IReGameHookRegistry_CSGameRules_GoToIntermission;
|
||||
|
||||
// CHalfLifeMultiplay::BalanceTeams hook
|
||||
typedef IVoidHookChain<> IReGameHook_CSGameRules_BalanceTeams;
|
||||
typedef IVoidHookChainRegistry<> IReGameHookRegistry_CSGameRules_BalanceTeams;
|
||||
|
||||
// CHalfLifeMultiplay::OnRoundFreezeEnd hook
|
||||
typedef IVoidHookChain<> IReGameHook_CSGameRules_OnRoundFreezeEnd;
|
||||
typedef IVoidHookChainRegistry<> IReGameHookRegistry_CSGameRules_OnRoundFreezeEnd;
|
||||
|
||||
// PM_UpdateStepSound hook
|
||||
typedef IVoidHookChain<> IReGameHook_PM_UpdateStepSound;
|
||||
typedef IVoidHookChainRegistry<> IReGameHookRegistry_PM_UpdateStepSound;
|
||||
|
||||
// CBasePlayer::StartDeathCam hook
|
||||
typedef IVoidHookChainClass<class CBasePlayer> IReGameHook_CBasePlayer_StartDeathCam;
|
||||
typedef IVoidHookChainRegistryClass<class CBasePlayer> IReGameHookRegistry_CBasePlayer_StartDeathCam;
|
||||
|
||||
class IReGameHookchains {
|
||||
public:
|
||||
virtual ~IReGameHookchains() {}
|
||||
|
||||
// CBasePlayer virtual
|
||||
virtual IReGameHookRegistry_CBasePlayer_Spawn* CBasePlayer_Spawn() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_Precache* CBasePlayer_Precache() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_ObjectCaps* CBasePlayer_ObjectCaps() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_Classify* CBasePlayer_Classify() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_TraceAttack* CBasePlayer_TraceAttack() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_TakeDamage* CBasePlayer_TakeDamage() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_TakeHealth* CBasePlayer_TakeHealth() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_Killed* CBasePlayer_Killed() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_AddPoints* CBasePlayer_AddPoints() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_AddPointsToTeam* CBasePlayer_AddPointsToTeam() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_AddPlayerItem* CBasePlayer_AddPlayerItem() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_RemovePlayerItem* CBasePlayer_RemovePlayerItem() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_GiveAmmo* CBasePlayer_GiveAmmo() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_ResetMaxSpeed* CBasePlayer_ResetMaxSpeed() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_Jump* CBasePlayer_Jump() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_Duck* CBasePlayer_Duck() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_PreThink* CBasePlayer_PreThink() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_PostThink* CBasePlayer_PostThink() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_UpdateClientData* CBasePlayer_UpdateClientData() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_ImpulseCommands* CBasePlayer_ImpulseCommands() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_RoundRespawn* CBasePlayer_RoundRespawn() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_Blind* CBasePlayer_Blind() = 0;
|
||||
|
||||
virtual IReGameHookRegistry_CBasePlayer_Observer_IsValidTarget* CBasePlayer_Observer_IsValidTarget() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_SetAnimation* CBasePlayer_SetAnimation() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_GiveDefaultItems* CBasePlayer_GiveDefaultItems() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_GiveNamedItem* CBasePlayer_GiveNamedItem() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_AddAccount* CBasePlayer_AddAccount() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_GiveShield* CBasePlayer_GiveShield() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_SetClientUserInfoModel* CBasePlayer_SetClientUserInfoModel() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_SetClientUserInfoName* CBasePlayer_SetClientUserInfoName() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_HasRestrictItem* CBasePlayer_HasRestrictItem() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_DropPlayerItem* CBasePlayer_DropPlayerItem() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_DropShield* CBasePlayer_DropShield() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_OnSpawnEquip* CBasePlayer_OnSpawnEquip() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_Radio* CBasePlayer_Radio() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_Disappear* CBasePlayer_Disappear() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_MakeVIP* CBasePlayer_MakeVIP() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_MakeBomber* CBasePlayer_MakeBomber() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_StartObserver* CBasePlayer_StartObserver() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_GetIntoGame* CBasePlayer_GetIntoGame() = 0;
|
||||
|
||||
virtual IReGameHookRegistry_CBaseAnimating_ResetSequenceInfo* CBaseAnimating_ResetSequenceInfo() = 0;
|
||||
|
||||
virtual IReGameHookRegistry_GetForceCamera* GetForceCamera() = 0;
|
||||
virtual IReGameHookRegistry_PlayerBlind* PlayerBlind() = 0;
|
||||
virtual IReGameHookRegistry_RadiusFlash_TraceLine* RadiusFlash_TraceLine() = 0;
|
||||
virtual IReGameHookRegistry_RoundEnd* RoundEnd() = 0;
|
||||
virtual IReGameHookRegistry_InstallGameRules* InstallGameRules() = 0;
|
||||
virtual IReGameHookRegistry_PM_Init* PM_Init() = 0;
|
||||
virtual IReGameHookRegistry_PM_Move* PM_Move() = 0;
|
||||
virtual IReGameHookRegistry_PM_AirMove* PM_AirMove() = 0;
|
||||
virtual IReGameHookRegistry_HandleMenu_ChooseAppearance* HandleMenu_ChooseAppearance() = 0;
|
||||
virtual IReGameHookRegistry_HandleMenu_ChooseTeam* HandleMenu_ChooseTeam() = 0;
|
||||
virtual IReGameHookRegistry_ShowMenu* ShowMenu() = 0;
|
||||
virtual IReGameHookRegistry_ShowVGUIMenu* ShowVGUIMenu() = 0;
|
||||
virtual IReGameHookRegistry_BuyGunAmmo* BuyGunAmmo() = 0;
|
||||
virtual IReGameHookRegistry_BuyWeaponByWeaponID* BuyWeaponByWeaponID() = 0;
|
||||
virtual IReGameHookRegistry_InternalCommand* InternalCommand() = 0;
|
||||
|
||||
virtual IReGameHookRegistry_CSGameRules_FShouldSwitchWeapon* CSGameRules_FShouldSwitchWeapon() = 0;
|
||||
virtual IReGameHookRegistry_CSGameRules_GetNextBestWeapon* CSGameRules_GetNextBestWeapon() = 0;
|
||||
virtual IReGameHookRegistry_CSGameRules_FlPlayerFallDamage* CSGameRules_FlPlayerFallDamage() = 0;
|
||||
virtual IReGameHookRegistry_CSGameRules_FPlayerCanTakeDamage* CSGameRules_FPlayerCanTakeDamage() = 0;
|
||||
virtual IReGameHookRegistry_CSGameRules_PlayerSpawn* CSGameRules_PlayerSpawn() = 0;
|
||||
virtual IReGameHookRegistry_CSGameRules_FPlayerCanRespawn* CSGameRules_FPlayerCanRespawn() = 0;
|
||||
virtual IReGameHookRegistry_CSGameRules_GetPlayerSpawnSpot* CSGameRules_GetPlayerSpawnSpot() = 0;
|
||||
virtual IReGameHookRegistry_CSGameRules_ClientUserInfoChanged* CSGameRules_ClientUserInfoChanged() = 0;
|
||||
virtual IReGameHookRegistry_CSGameRules_PlayerKilled* CSGameRules_PlayerKilled() = 0;
|
||||
virtual IReGameHookRegistry_CSGameRules_DeathNotice* CSGameRules_DeathNotice() = 0;
|
||||
virtual IReGameHookRegistry_CSGameRules_CanHavePlayerItem* CSGameRules_CanHavePlayerItem() = 0;
|
||||
virtual IReGameHookRegistry_CSGameRules_DeadPlayerWeapons* CSGameRules_DeadPlayerWeapons() = 0;
|
||||
virtual IReGameHookRegistry_CSGameRules_ServerDeactivate* CSGameRules_ServerDeactivate() = 0;
|
||||
virtual IReGameHookRegistry_CSGameRules_CheckMapConditions* CSGameRules_CheckMapConditions() = 0;
|
||||
virtual IReGameHookRegistry_CSGameRules_CleanUpMap* CSGameRules_CleanUpMap() = 0;
|
||||
virtual IReGameHookRegistry_CSGameRules_RestartRound* CSGameRules_RestartRound() = 0;
|
||||
virtual IReGameHookRegistry_CSGameRules_CheckWinConditions* CSGameRules_CheckWinConditions() = 0;
|
||||
virtual IReGameHookRegistry_CSGameRules_RemoveGuns* CSGameRules_RemoveGuns() = 0;
|
||||
virtual IReGameHookRegistry_CSGameRules_GiveC4* CSGameRules_GiveC4() = 0;
|
||||
virtual IReGameHookRegistry_CSGameRules_ChangeLevel* CSGameRules_ChangeLevel() = 0;
|
||||
virtual IReGameHookRegistry_CSGameRules_GoToIntermission* CSGameRules_GoToIntermission() = 0;
|
||||
virtual IReGameHookRegistry_CSGameRules_BalanceTeams* CSGameRules_BalanceTeams() = 0;
|
||||
virtual IReGameHookRegistry_CSGameRules_OnRoundFreezeEnd* CSGameRules_OnRoundFreezeEnd() = 0;
|
||||
virtual IReGameHookRegistry_PM_UpdateStepSound* PM_UpdateStepSound() = 0;
|
||||
virtual IReGameHookRegistry_CBasePlayer_StartDeathCam* CBasePlayer_StartDeathCam() = 0;
|
||||
};
|
||||
|
||||
struct ReGameFuncs_t {
|
||||
struct edict_s *(*CREATE_NAMED_ENTITY2)(string_t iClass);
|
||||
void (*ChangeString)(char *&dest, const char *source);
|
||||
void (*RadiusDamage)(Vector vecSrc, entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, float flRadius, int iClassIgnore, int bitsDamageType);
|
||||
void (*ClearMultiDamage)();
|
||||
void (*ApplyMultiDamage)(entvars_t *pevInflictor, entvars_t *pevAttacker);
|
||||
void (*AddMultiDamage)(entvars_t *pevInflictor, CBaseEntity *pEntity, float flDamage, int bitsDamageType);
|
||||
class CBaseEntity *(*UTIL_FindEntityByString)(class CBaseEntity *pStartEntity, const char *szKeyword, const char *szValue);
|
||||
void (*AddEntityHashValue)(entvars_t *pev, const char *value, hash_types_e fieldType);
|
||||
void (*RemoveEntityHashValue)(entvars_t *pev, const char *value, hash_types_e fieldType);
|
||||
int (*Cmd_Argc)();
|
||||
const char *(*Cmd_Argv)(int i);
|
||||
};
|
||||
|
||||
class IReGameApi {
|
||||
public:
|
||||
virtual ~IReGameApi() {}
|
||||
|
||||
virtual int GetMajorVersion() = 0;
|
||||
virtual int GetMinorVersion() = 0;
|
||||
virtual const ReGameFuncs_t* GetFuncs() = 0;
|
||||
virtual IReGameHookchains* GetHookchains() = 0;
|
||||
|
||||
virtual class CGameRules* GetGameRules() = 0;
|
||||
virtual struct WeaponInfoStruct* GetWeaponInfo(int weaponID) = 0;
|
||||
virtual struct WeaponInfoStruct* GetWeaponInfo(const char* weaponName) = 0;
|
||||
virtual struct playermove_s* GetPlayerMove() = 0;
|
||||
virtual struct WeaponSlotInfo* GetWeaponSlot(WeaponIdType weaponID) = 0;
|
||||
virtual struct WeaponSlotInfo* GetWeaponSlot(const char* weaponName) = 0;
|
||||
virtual struct ItemInfo* GetItemInfo(WeaponIdType weaponID) = 0;
|
||||
virtual struct AmmoInfo* GetAmmoInfo(AmmoType ammoID) = 0;
|
||||
};
|
||||
|
||||
#define VRE_GAMEDLL_API_VERSION "VRE_GAMEDLL_API_VERSION001"
|
96
metamod/extra/example/include/hlsdk/dlls/regamedll_common.h
Normal file
96
metamod/extra/example/include/hlsdk/dlls/regamedll_common.h
Normal file
@ -0,0 +1,96 @@
|
||||
/*
|
||||
*
|
||||
* 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
|
||||
|
||||
#ifndef _WIN32
|
||||
#define _strlwr(p) for (int i = 0; p[i] != 0; i++) p[i] = tolower(p[i]);
|
||||
#endif
|
||||
|
||||
#define Q_isspace isspace
|
||||
#define Q_isalnum isalnum
|
||||
#define Q_isalpha isalpha
|
||||
|
||||
#define Q_malloc malloc
|
||||
#define Q_calloc calloc
|
||||
#define Q_alloca alloca
|
||||
#define Q_free free
|
||||
|
||||
#define Q_min min
|
||||
#define Q_max max
|
||||
#define Q_clamp clamp
|
||||
#define Q_access _access
|
||||
#define Q_close _close
|
||||
#define Q_write _write
|
||||
#define Q_memset memset
|
||||
#define Q_memcpy memcpy
|
||||
#define Q_strlen strlen
|
||||
#define Q_memcmp memcmp
|
||||
#define Q_strcpy strcpy
|
||||
#define Q_strncpy strncpy
|
||||
#define Q_strrchr strrchr
|
||||
#define Q_strcat strcat
|
||||
#define Q_strncat strncat
|
||||
#define Q_strcmp strcmp
|
||||
#define Q_strncmp strncmp
|
||||
#define Q_sscanf sscanf
|
||||
#define Q_strdup _strdup
|
||||
#define Q_stricmp _stricmp
|
||||
#define Q_strnicmp _strnicmp
|
||||
#define Q_strstr strstr
|
||||
#define Q_strchr strchr
|
||||
#define Q_strrchr strrchr
|
||||
#define Q_strlwr _strlwr
|
||||
#define Q_sprintf sprintf
|
||||
#define Q_snprintf _snprintf
|
||||
#define Q_atoi atoi
|
||||
#define Q_atof atof
|
||||
#define Q_toupper toupper
|
||||
#define Q_memmove memmove
|
||||
#define Q_vsnprintf _vsnprintf
|
||||
#define Q_vsnwprintf _vsnwprintf
|
||||
#define Q_abs abs
|
||||
#define Q_fabs fabs
|
||||
#define Q_tan tan
|
||||
#define Q_atan atan
|
||||
#define Q_atan2 atan2
|
||||
#define Q_acos acos
|
||||
#define Q_cos cos
|
||||
#define Q_sin sin
|
||||
#define Q_pow pow
|
||||
#define Q_fmod fmod
|
||||
#define Q_fopen fopen
|
||||
#define Q_fwrite fwrite
|
||||
#define Q_fprintf fprintf
|
||||
#define Q_fclose fclose
|
||||
|
||||
#ifdef REGAMEDLL_FIXES
|
||||
#define Q_sqrt M_sqrt
|
||||
#else
|
||||
#define Q_sqrt sqrt
|
||||
#endif
|
104
metamod/extra/example/include/hlsdk/dlls/regamedll_const.h
Normal file
104
metamod/extra/example/include/hlsdk/dlls/regamedll_const.h
Normal file
@ -0,0 +1,104 @@
|
||||
/*
|
||||
*
|
||||
* 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
|
||||
|
||||
// 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
|
||||
|
||||
// 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_VEHICLE 14
|
||||
#define CLASS_BARNACLE 99 // special because no one pays attention to it, and it eats a wide cross-section of creatures.
|
||||
|
||||
#define SF_NORESPAWN (1 << 30) // set this bit on guns and stuff that should never respawn.
|
||||
|
||||
#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)
|
||||
#define DMG_EXPLOSION (1<<24)
|
||||
|
||||
// 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)
|
||||
|
||||
// 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 )
|
302
metamod/extra/example/include/hlsdk/dlls/regamedll_interfaces.h
Normal file
302
metamod/extra/example/include/hlsdk/dlls/regamedll_interfaces.h
Normal file
@ -0,0 +1,302 @@
|
||||
/*
|
||||
*
|
||||
* 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 CBaseEntity;
|
||||
class CBasePlayer;
|
||||
|
||||
// Implementation wrapper
|
||||
class CCSEntity {
|
||||
public:
|
||||
virtual ~CCSEntity() {}
|
||||
virtual void FireBullets(int iShots, Vector &vecSrc, Vector &vecDirShooting, Vector &vecSpread, float flDistance, int iBulletType, int iTracerFreq, int iDamage, entvars_t *pevAttacker);
|
||||
virtual Vector FireBullets3(Vector &vecSrc, Vector &vecDirShooting, float vecSpread, float flDistance, int iPenetration, int iBulletType, int iDamage, float flRangeModifier, entvars_t *pevAttacker, bool bPistol, int shared_rand);
|
||||
public:
|
||||
CBaseEntity *m_pContainingEntity;
|
||||
};
|
||||
|
||||
class CCSDelay: public CCSEntity {};
|
||||
class CCSAnimating: public CCSDelay {};
|
||||
class CCSPlayerItem: public CCSAnimating {};
|
||||
class CCSToggle: public CCSAnimating {};
|
||||
class CCSMonster: public CCSToggle {};
|
||||
class CCSWeaponBox: public CCSEntity {};
|
||||
class CCSArmoury: public CCSEntity {};
|
||||
|
||||
class CCSPlayer: public CCSMonster {
|
||||
public:
|
||||
CCSPlayer() : m_bForceShowMenu(false)
|
||||
{
|
||||
m_szModel[0] = '\0';
|
||||
}
|
||||
|
||||
virtual bool IsConnected() const;
|
||||
virtual void SetAnimation(PLAYER_ANIM playerAnim);
|
||||
virtual void AddAccount(int amount, RewardType type = RT_NONE, bool bTrackChange = true);
|
||||
virtual CBaseEntity *GiveNamedItem(const char *pszName);
|
||||
virtual CBaseEntity *GiveNamedItemEx(const char *pszName);
|
||||
virtual void GiveDefaultItems();
|
||||
virtual void GiveShield(bool bDeploy = true);
|
||||
virtual void DropShield(bool bDeploy = true);
|
||||
virtual void DropPlayerItem(const char *pszItemName);
|
||||
virtual void RemoveShield();
|
||||
virtual void RemoveAllItems(bool bRemoveSuit);
|
||||
virtual bool RemovePlayerItem(const char* pszItemName);
|
||||
virtual void SetPlayerModel(bool bHasC4);
|
||||
virtual void SetPlayerModelEx(const char *modelName);
|
||||
virtual void SetNewPlayerModel(const char *modelName);
|
||||
virtual void ClientCommand(const char *cmd, const char *arg1 = nullptr, const char *arg2 = nullptr, const char *arg3 = nullptr);
|
||||
virtual void SetProgressBarTime(int time);
|
||||
virtual void SetProgressBarTime2(int time, float timeElapsed);
|
||||
virtual struct edict_s *EntSelectSpawnPoint();
|
||||
virtual void SetBombIcon(bool bFlash = false);
|
||||
virtual void SetScoreAttrib(CBasePlayer *dest);
|
||||
virtual void SendItemStatus();
|
||||
virtual void ReloadWeapons(CBasePlayerItem *pWeapon = nullptr, bool bForceReload = false, bool bForceRefill = false);
|
||||
virtual void Observer_SetMode(int iMode);
|
||||
virtual bool SelectSpawnSpot(const char *pEntClassName, CBaseEntity* &pSpot);
|
||||
virtual bool SwitchWeapon(CBasePlayerItem *pWeapon);
|
||||
virtual void SwitchTeam();
|
||||
virtual bool JoinTeam(TeamName team);
|
||||
virtual void StartObserver(Vector& vecPosition, Vector& vecViewAngle);
|
||||
virtual void TeamChangeUpdate();
|
||||
virtual void DropSecondary();
|
||||
virtual void DropPrimary();
|
||||
virtual bool HasPlayerItem(CBasePlayerItem *pCheckItem);
|
||||
virtual bool HasNamedPlayerItem(const char *pszItemName);
|
||||
virtual CBasePlayerItem *GetItemById(WeaponIdType weaponID);
|
||||
virtual CBasePlayerItem *GetItemByName(const char *itemName);
|
||||
virtual void Disappear();
|
||||
virtual void MakeVIP();
|
||||
virtual bool MakeBomber();
|
||||
virtual void StartDeathCam();
|
||||
|
||||
CBasePlayer *BasePlayer() const;
|
||||
public:
|
||||
char m_szModel[32];
|
||||
bool m_bForceShowMenu;
|
||||
};
|
||||
|
||||
class CAPI_Bot: public CCSPlayer {};
|
||||
class CAPI_CSBot: public CAPI_Bot {};
|
||||
class CCSShield: public CCSEntity {};
|
||||
class CCSDeadHEV: public CCSMonster {};
|
||||
class CCSSprayCan: public CCSEntity {};
|
||||
class CCSBloodSplat: public CCSEntity {};
|
||||
class CCSPlayerWeapon: public CCSPlayerItem {};
|
||||
class CCSWorld: public CCSEntity {};
|
||||
class CCSDecal: public CCSEntity {};
|
||||
class CCSCorpse: public CCSEntity {};
|
||||
class CCSGrenade: public CCSMonster {};
|
||||
class CCSAirtank: public CCSGrenade {};
|
||||
class CCSPlayerAmmo: public CCSEntity {};
|
||||
class CCS9MMAmmo: public CCSPlayerAmmo {};
|
||||
class CCSBuckShotAmmo: public CCSPlayerAmmo {};
|
||||
class CCS556NatoAmmo: public CCSPlayerAmmo {};
|
||||
class CCS556NatoBoxAmmo: public CCSPlayerAmmo {};
|
||||
class CCS762NatoAmmo: public CCSPlayerAmmo {};
|
||||
class CCS45ACPAmmo: public CCSPlayerAmmo {};
|
||||
class CCS50AEAmmo: public CCSPlayerAmmo {};
|
||||
class CCS338MagnumAmmo: public CCSPlayerAmmo {};
|
||||
class CCS57MMAmmo: public CCSPlayerAmmo {};
|
||||
class CCS357SIGAmmo: public CCSPlayerAmmo {};
|
||||
class CCSFuncWall: public CCSEntity {};
|
||||
class CCSFuncWallToggle: public CCSFuncWall {};
|
||||
class CCSFuncConveyor: public CCSFuncWall {};
|
||||
class CCSFuncIllusionary: public CCSToggle {};
|
||||
class CCSFuncMonsterClip: public CCSFuncWall {};
|
||||
class CCSFuncRotating: public CCSEntity {};
|
||||
class CCSPendulum: public CCSEntity {};
|
||||
class CCSPointEntity: public CCSEntity {};
|
||||
class CCSStripWeapons: public CCSPointEntity {};
|
||||
class CCSInfoIntermission: public CCSPointEntity {};
|
||||
class CCSRevertSaved: public CCSPointEntity {};
|
||||
class CCSEnvGlobal: public CCSPointEntity {};
|
||||
class CCSMultiSource: public CCSPointEntity {};
|
||||
class CCSButton: public CCSToggle {};
|
||||
class CCSRotButton: public CCSButton {};
|
||||
class CCSMomentaryRotButton: public CCSToggle {};
|
||||
class CCSEnvSpark: public CCSEntity {};
|
||||
class CCSButtonTarget: public CCSEntity {};
|
||||
class CCSDoor: public CCSToggle {};
|
||||
class CCSRotDoor: public CCSDoor {};
|
||||
class CCSMomentaryDoor: public CCSToggle {};
|
||||
class CCSGib: public CCSEntity {};
|
||||
class CCSBubbling: public CCSEntity {};
|
||||
class CCSBeam: public CCSEntity {};
|
||||
class CCSLightning: public CCSBeam {};
|
||||
class CCSLaser: public CCSBeam {};
|
||||
class CCSGlow: public CCSPointEntity {};
|
||||
class CCSSprite: public CCSPointEntity {};
|
||||
class CCSBombGlow: public CCSSprite {};
|
||||
class CCSGibShooter: public CCSDelay {};
|
||||
class CCSEnvShooter: public CCSGibShooter {};
|
||||
class CCSTestEffect: public CCSDelay {};
|
||||
class CCSBlood: public CCSPointEntity {};
|
||||
class CCSShake: public CCSPointEntity {};
|
||||
class CCSFade: public CCSPointEntity {};
|
||||
class CCSMessage: public CCSPointEntity {};
|
||||
class CCSEnvFunnel: public CCSDelay {};
|
||||
class CCSEnvBeverage: public CCSDelay {};
|
||||
class CCSItemSoda: public CCSEntity {};
|
||||
class CCSShower: public CCSEntity {};
|
||||
class CCSEnvExplosion: public CCSMonster {};
|
||||
class CCSBreakable: public CCSDelay {};
|
||||
class CCSPushable: public CCSBreakable {};
|
||||
class CCSFuncTank: public CCSEntity {};
|
||||
class CCSFuncTankGun: public CCSFuncTank {};
|
||||
class CCSFuncTankLaser: public CCSFuncTank {};
|
||||
class CCSFuncTankRocket: public CCSFuncTank {};
|
||||
class CCSFuncTankMortar: public CCSFuncTank {};
|
||||
class CCSFuncTankControls: public CCSEntity {};
|
||||
class CCSRecharge: public CCSToggle {};
|
||||
class CCSCycler: public CCSMonster {};
|
||||
class CCSGenericCycler: public CCSCycler {};
|
||||
class CCSCyclerProbe: public CCSCycler {};
|
||||
class CCSCyclerSprite: public CCSEntity {};
|
||||
class CCSWeaponCycler: public CCSPlayerWeapon {};
|
||||
class CCSWreckage: public CCSMonster {};
|
||||
class CCSWorldItem: public CCSEntity {};
|
||||
class CCSItem: public CCSEntity {};
|
||||
class CCSHealthKit: public CCSItem {};
|
||||
class CCSWallHealth: public CCSToggle {};
|
||||
class CCSItemSuit: public CCSItem {};
|
||||
class CCSItemBattery: public CCSItem {};
|
||||
class CCSItemAntidote: public CCSItem {};
|
||||
class CCSItemSecurity: public CCSItem {};
|
||||
class CCSItemLongJump: public CCSItem {};
|
||||
class CCSItemKevlar: public CCSItem {};
|
||||
class CCSItemAssaultSuit: public CCSItem {};
|
||||
class CCSItemThighPack: public CCSItem {};
|
||||
class CCSGrenCatch: public CCSEntity {};
|
||||
class CCSFuncWeaponCheck: public CCSEntity {};
|
||||
class CCSHostage: public CCSMonster {};
|
||||
class CCSLight: public CCSPointEntity {};
|
||||
class CCSEnvLight: public CCSLight {};
|
||||
class CCSRuleEntity: public CCSEntity {};
|
||||
class CCSRulePointEntity: public CCSRuleEntity {};
|
||||
class CCSRuleBrushEntity: public CCSRuleEntity {};
|
||||
class CCSGameScore: public CCSRulePointEntity {};
|
||||
class CCSGameEnd: public CCSRulePointEntity {};
|
||||
class CCSGameText: public CCSRulePointEntity {};
|
||||
class CCSGameTeamMaster: public CCSRulePointEntity {};
|
||||
class CCSGameTeamSet: public CCSRulePointEntity {};
|
||||
class CCSGamePlayerZone: public CCSRuleBrushEntity {};
|
||||
class CCSGamePlayerHurt: public CCSRulePointEntity {};
|
||||
class CCSGameCounter: public CCSRulePointEntity {};
|
||||
class CCSGameCounterSet: public CCSRulePointEntity {};
|
||||
class CCSGamePlayerEquip: public CCSRulePointEntity {};
|
||||
class CCSGamePlayerTeam: public CCSRulePointEntity {};
|
||||
class CCSFuncMortarField: public CCSToggle {};
|
||||
class CCSMortar: public CCSGrenade {};
|
||||
class CCSMapInfo: public CCSPointEntity {};
|
||||
class CCSPathCorner: public CCSPointEntity {};
|
||||
class CCSPathTrack: public CCSPointEntity {};
|
||||
class CCSFuncTrackTrain: public CCSEntity {};
|
||||
class CCSFuncVehicleControls: public CCSEntity {};
|
||||
class CCSFuncVehicle: public CCSEntity {};
|
||||
class CCSPlatTrain: public CCSToggle {};
|
||||
class CCSFuncPlat: public CCSPlatTrain {};
|
||||
class CCSPlatTrigger: public CCSEntity {};
|
||||
class CCSFuncPlatRot: public CCSFuncPlat {};
|
||||
class CCSFuncTrain: public CCSPlatTrain {};
|
||||
class CCSFuncTrainControls: public CCSEntity {};
|
||||
class CCSFuncTrackChange: public CCSFuncPlatRot {};
|
||||
class CCSFuncTrackAuto: public CCSFuncTrackChange {};
|
||||
class CCSGunTarget: public CCSMonster {};
|
||||
class CCSAmbientGeneric: public CCSEntity {};
|
||||
class CCSEnvSound: public CCSPointEntity {};
|
||||
class CCSSpeaker: public CCSEntity {};
|
||||
class CCSSoundEnt: public CCSEntity {};
|
||||
class CCSUSP: public CCSPlayerWeapon {};
|
||||
class CCSMP5N: public CCSPlayerWeapon {};
|
||||
class CCSSG552: public CCSPlayerWeapon {};
|
||||
class CCSAK47: public CCSPlayerWeapon {};
|
||||
class CCSAUG: public CCSPlayerWeapon {};
|
||||
class CCSAWP: public CCSPlayerWeapon {};
|
||||
class CCSC4: public CCSPlayerWeapon {};
|
||||
class CCSDEAGLE: public CCSPlayerWeapon {};
|
||||
class CCSFlashbang: public CCSPlayerWeapon {};
|
||||
class CCSG3SG1: public CCSPlayerWeapon {};
|
||||
class CCSGLOCK18: public CCSPlayerWeapon {};
|
||||
class CCSHEGrenade: public CCSPlayerWeapon {};
|
||||
class CCSKnife: public CCSPlayerWeapon {};
|
||||
class CCSM249: public CCSPlayerWeapon {};
|
||||
class CCSM3: public CCSPlayerWeapon {};
|
||||
class CCSM4A1: public CCSPlayerWeapon {};
|
||||
class CCSMAC10: public CCSPlayerWeapon {};
|
||||
class CCSP228: public CCSPlayerWeapon {};
|
||||
class CCSP90: public CCSPlayerWeapon {};
|
||||
class CCSSCOUT: public CCSPlayerWeapon {};
|
||||
class CCSSmokeGrenade: public CCSPlayerWeapon {};
|
||||
class CCSTMP: public CCSPlayerWeapon {};
|
||||
class CCSXM1014: public CCSPlayerWeapon {};
|
||||
class CCSELITE: public CCSPlayerWeapon {};
|
||||
class CCSFiveSeven: public CCSPlayerWeapon {};
|
||||
class CCSUMP45: public CCSPlayerWeapon {};
|
||||
class CCSSG550: public CCSPlayerWeapon {};
|
||||
class CCSGalil: public CCSPlayerWeapon {};
|
||||
class CCSFamas: public CCSPlayerWeapon {};
|
||||
class CCSNullEntity: public CCSEntity {};
|
||||
class CCSDMStart: public CCSPointEntity {};
|
||||
class CCSFrictionModifier: public CCSEntity {};
|
||||
class CCSAutoTrigger: public CCSDelay {};
|
||||
class CCSTriggerRelay: public CCSDelay {};
|
||||
class CCSMultiManager: public CCSToggle {};
|
||||
class CCSRenderFxManager: public CCSEntity {};
|
||||
class CCSTrigger: public CCSToggle {};
|
||||
class CCSTriggerHurt: public CCSTrigger {};
|
||||
class CCSTriggerMonsterJump: public CCSTrigger {};
|
||||
class CCSTriggerCDAudio: public CCSTrigger {};
|
||||
class CCSTargetCDAudio: public CCSPointEntity {};
|
||||
class CCSTriggerMultiple: public CCSTrigger {};
|
||||
class CCSTriggerOnce: public CCSTriggerMultiple {};
|
||||
class CCSTriggerCounter: public CCSTrigger {};
|
||||
class CCSTriggerVolume: public CCSPointEntity {};
|
||||
class CCSFireAndDie: public CCSDelay {};
|
||||
class CCSChangeLevel: public CCSTrigger {};
|
||||
class CCSLadder: public CCSTrigger {};
|
||||
class CCSTriggerPush: public CCSTrigger {};
|
||||
class CCSTriggerTeleport: public CCSTrigger {};
|
||||
class CCSBuyZone: public CCSTrigger {};
|
||||
class CCSBombTarget: public CCSTrigger {};
|
||||
class CCSHostageRescue: public CCSTrigger {};
|
||||
class CCSEscapeZone: public CCSTrigger {};
|
||||
class CCSVIP_SafetyZone: public CCSTrigger {};
|
||||
class CCSTriggerSave: public CCSTrigger {};
|
||||
class CCSTriggerEndSection: public CCSTrigger {};
|
||||
class CCSTriggerGravity: public CCSTrigger {};
|
||||
class CCSTriggerChangeTarget: public CCSDelay {};
|
||||
class CCSTriggerCamera: public CCSDelay {};
|
||||
class CCSWeather: public CCSTrigger {};
|
||||
class CCSClientFog: public CCSEntity {};
|
||||
|
||||
inline CBasePlayer *CCSPlayer::BasePlayer() const {
|
||||
return reinterpret_cast<CBasePlayer *>(this->m_pContainingEntity);
|
||||
}
|
49
metamod/extra/example/include/hlsdk/dlls/revert_saved.h
Normal file
49
metamod/extra/example/include/hlsdk/dlls/revert_saved.h
Normal file
@ -0,0 +1,49 @@
|
||||
/*
|
||||
*
|
||||
* 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 CRevertSaved: public CPointEntity {
|
||||
public:
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
float Duration() const { return pev->dmg_take; }
|
||||
float HoldTime() const { return pev->dmg_save; }
|
||||
float MessageTime() const { return m_messageTime; }
|
||||
float LoadTime() const { return m_loadTime; }
|
||||
|
||||
void SetDuration(float duration) { pev->dmg_take = duration; }
|
||||
void SetHoldTime(float hold) { pev->dmg_save = hold; }
|
||||
void SetMessageTime(float time) { m_messageTime = time; }
|
||||
void SetLoadTime(float time) { m_loadTime = time; }
|
||||
public:
|
||||
float m_messageTime;
|
||||
float m_loadTime;
|
||||
};
|
@ -1,147 +1,53 @@
|
||||
/***
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
* 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 product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
* 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
|
||||
*
|
||||
****/
|
||||
//=========================================================
|
||||
// skill.h - skill level concerns
|
||||
//=========================================================
|
||||
* 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 SKILL_EASY 1
|
||||
#define SKILL_MEDIUM 2
|
||||
#define SKILL_HARD 3
|
||||
|
||||
struct skilldata_t
|
||||
{
|
||||
|
||||
int iSkillLevel; // game skill level
|
||||
|
||||
// Monster Health & Damage
|
||||
float agruntHealth;
|
||||
float agruntDmgPunch;
|
||||
|
||||
float apacheHealth;
|
||||
|
||||
float barneyHealth;
|
||||
|
||||
float bigmommaHealthFactor; // Multiply each node's health by this
|
||||
float bigmommaDmgSlash; // melee attack damage
|
||||
float bigmommaDmgBlast; // mortar attack damage
|
||||
float bigmommaRadiusBlast; // mortar attack radius
|
||||
|
||||
float bullsquidHealth;
|
||||
float bullsquidDmgBite;
|
||||
float bullsquidDmgWhip;
|
||||
float bullsquidDmgSpit;
|
||||
|
||||
float gargantuaHealth;
|
||||
float gargantuaDmgSlash;
|
||||
float gargantuaDmgFire;
|
||||
float gargantuaDmgStomp;
|
||||
|
||||
float hassassinHealth;
|
||||
|
||||
float headcrabHealth;
|
||||
float headcrabDmgBite;
|
||||
|
||||
float hgruntHealth;
|
||||
float hgruntDmgKick;
|
||||
float hgruntShotgunPellets;
|
||||
float hgruntGrenadeSpeed;
|
||||
|
||||
float houndeyeHealth;
|
||||
float houndeyeDmgBlast;
|
||||
|
||||
float slaveHealth;
|
||||
float slaveDmgClaw;
|
||||
float slaveDmgClawrake;
|
||||
float slaveDmgZap;
|
||||
|
||||
float ichthyosaurHealth;
|
||||
float ichthyosaurDmgShake;
|
||||
|
||||
float leechHealth;
|
||||
float leechDmgBite;
|
||||
|
||||
float controllerHealth;
|
||||
float controllerDmgZap;
|
||||
float controllerSpeedBall;
|
||||
float controllerDmgBall;
|
||||
|
||||
float nihilanthHealth;
|
||||
float nihilanthZap;
|
||||
|
||||
float scientistHealth;
|
||||
|
||||
float snarkHealth;
|
||||
float snarkDmgBite;
|
||||
float snarkDmgPop;
|
||||
|
||||
float zombieHealth;
|
||||
float zombieDmgOneSlash;
|
||||
float zombieDmgBothSlash;
|
||||
|
||||
float turretHealth;
|
||||
float miniturretHealth;
|
||||
float sentryHealth;
|
||||
|
||||
|
||||
// Player Weapons
|
||||
float plrDmgCrowbar;
|
||||
int iSkillLevel;
|
||||
float plrDmg9MM;
|
||||
float plrDmg357;
|
||||
float plrDmgMP5;
|
||||
float plrDmgM203Grenade;
|
||||
float plrDmgBuckshot;
|
||||
float plrDmgCrossbowClient;
|
||||
float plrDmgCrossbowMonster;
|
||||
float plrDmgRPG;
|
||||
float plrDmgGauss;
|
||||
float plrDmgEgonNarrow;
|
||||
float plrDmgEgonWide;
|
||||
float plrDmgHornet;
|
||||
float plrDmgHandGrenade;
|
||||
float plrDmgSatchel;
|
||||
float plrDmgTripmine;
|
||||
|
||||
// weapons shared by monsters
|
||||
float monDmg9MM;
|
||||
float monDmgMP5;
|
||||
float monDmg12MM;
|
||||
float monDmgHornet;
|
||||
|
||||
// health/suit charge
|
||||
float suitchargerCapacity;
|
||||
float batteryCapacity;
|
||||
float healthchargerCapacity;
|
||||
float healthkitCapacity;
|
||||
float scientistHeal;
|
||||
|
||||
// monster damage adj
|
||||
float monHead;
|
||||
float monChest;
|
||||
float monStomach;
|
||||
float monLeg;
|
||||
float monArm;
|
||||
|
||||
// player damage adj
|
||||
float plrHead;
|
||||
float plrChest;
|
||||
float plrStomach;
|
||||
float plrLeg;
|
||||
float plrArm;
|
||||
};
|
||||
|
||||
extern DLL_GLOBAL skilldata_t gSkillData;
|
||||
float GetSkillCvar( char *pName );
|
||||
|
||||
extern DLL_GLOBAL int g_iSkillLevel;
|
||||
|
||||
#define SKILL_EASY 1
|
||||
#define SKILL_MEDIUM 2
|
||||
#define SKILL_HARD 3
|
||||
extern skilldata_t gSkillData;
|
||||
|
141
metamod/extra/example/include/hlsdk/dlls/sound.h
Normal file
141
metamod/extra/example/include/hlsdk/dlls/sound.h
Normal file
@ -0,0 +1,141 @@
|
||||
/*
|
||||
*
|
||||
* 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 CSENTENCEG_MAX 200 // max number of sentence groups
|
||||
#define CSENTENCE_LRU_MAX 32 // max number of elements per sentence group
|
||||
#define CDPVPRESETMAX 27
|
||||
|
||||
// spawnflags
|
||||
#define AMBIENT_SOUND_STATIC 0 // medium radius attenuation
|
||||
#define AMBIENT_SOUND_EVERYWHERE 1
|
||||
#define AMBIENT_SOUND_SMALLRADIUS 2
|
||||
#define AMBIENT_SOUND_MEDIUMRADIUS 4
|
||||
#define AMBIENT_SOUND_LARGERADIUS 8
|
||||
#define AMBIENT_SOUND_START_SILENT 16
|
||||
#define AMBIENT_SOUND_NOT_LOOPING 32
|
||||
|
||||
#define ANNOUNCE_MINUTES_MIN 0.25
|
||||
#define ANNOUNCE_MINUTES_MAX 2.25
|
||||
|
||||
#define SPEAKER_START_SILENT 1 // wait for trigger 'on' to start announcements
|
||||
|
||||
#define LFO_SQUARE 1 // square
|
||||
#define LFO_TRIANGLE 2 // triangle
|
||||
#define LFO_RANDOM 3 // random
|
||||
|
||||
// group of related sentences
|
||||
struct sentenceg
|
||||
{
|
||||
char szgroupname[16];
|
||||
int count;
|
||||
unsigned char rgblru[ CSENTENCE_LRU_MAX ];
|
||||
};
|
||||
|
||||
// runtime pitch shift and volume fadein/out structure
|
||||
|
||||
// NOTE: IF YOU CHANGE THIS STRUCT YOU MUST CHANGE THE SAVE/RESTORE VERSION NUMBER
|
||||
// SEE BELOW (in the typedescription for the class)
|
||||
typedef struct dynpitchvol
|
||||
{
|
||||
// NOTE: do not change the order of these parameters
|
||||
// NOTE: unless you also change order of rgdpvpreset array elements!
|
||||
int preset;
|
||||
|
||||
int pitchrun; // pitch shift % when sound is running 0 - 255
|
||||
int pitchstart; // pitch shift % when sound stops or starts 0 - 255
|
||||
int spinup; // spinup time 0 - 100
|
||||
int spindown; // spindown time 0 - 100
|
||||
|
||||
int volrun; // volume change % when sound is running 0 - 10
|
||||
int volstart; // volume change % when sound stops or starts 0 - 10
|
||||
int fadein; // volume fade in time 0 - 100
|
||||
int fadeout; // volume fade out time 0 - 100
|
||||
|
||||
// Low Frequency Oscillator
|
||||
int lfotype; // 0) off 1) square 2) triangle 3) random
|
||||
int lforate; // 0 - 1000, how fast lfo osciallates
|
||||
|
||||
int lfomodpitch; // 0-100 mod of current pitch. 0 is off.
|
||||
int lfomodvol; // 0-100 mod of current volume. 0 is off.
|
||||
|
||||
int cspinup; // each trigger hit increments counter and spinup pitch
|
||||
|
||||
int cspincount;
|
||||
int pitch;
|
||||
int spinupsav;
|
||||
int spindownsav;
|
||||
int pitchfrac;
|
||||
int vol;
|
||||
int fadeinsav;
|
||||
int fadeoutsav;
|
||||
int volfrac;
|
||||
int lfofrac;
|
||||
int lfomult;
|
||||
|
||||
} dynpitchvol_t;
|
||||
|
||||
class CAmbientGeneric: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void Restart() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
public:
|
||||
float m_flAttenuation; // attenuation value
|
||||
dynpitchvol_t m_dpv;
|
||||
BOOL m_fActive; // only TRUE when the entity is playing a looping sound
|
||||
BOOL m_fLooping; // TRUE when the sound played will loop
|
||||
};
|
||||
|
||||
class CEnvSound: public CPointEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual void Think() = 0;
|
||||
public:
|
||||
float m_flRadius;
|
||||
float m_flRoomtype;
|
||||
};
|
||||
|
||||
class CSpeaker: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
public:
|
||||
int m_preset; // preset number
|
||||
};
|
@ -1,27 +1,33 @@
|
||||
/***
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
* 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 product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
* 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
|
||||
*
|
||||
****/
|
||||
// Spectator.h
|
||||
* 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 CBaseSpectator : public CBaseEntity
|
||||
{
|
||||
class CBaseSpectator: public CBaseEntity {
|
||||
public:
|
||||
void Spawn();
|
||||
void SpectatorConnect(void);
|
||||
void SpectatorDisconnect(void);
|
||||
void SpectatorThink(void);
|
||||
|
||||
private:
|
||||
void SpectatorImpulseCommand(void);
|
||||
virtual void Spawn();
|
||||
};
|
||||
|
40
metamod/extra/example/include/hlsdk/dlls/subs.h
Normal file
40
metamod/extra/example/include/hlsdk/dlls/subs.h
Normal file
@ -0,0 +1,40 @@
|
||||
/*
|
||||
*
|
||||
* 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 CNullEntity: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
};
|
||||
|
||||
class CBaseDMStart: public CPointEntity {
|
||||
public:
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual BOOL IsTriggered(CBaseEntity *pEntity) = 0;
|
||||
};
|
@ -0,0 +1,84 @@
|
||||
/*
|
||||
*
|
||||
* 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 CHalfLifeTraining: public CHalfLifeMultiplay {
|
||||
protected:
|
||||
virtual ~CHalfLifeTraining() {};
|
||||
public:
|
||||
virtual BOOL IsMultiplayer() = 0;
|
||||
virtual BOOL IsDeathmatch() = 0;
|
||||
virtual void InitHUD(CBasePlayer *pl) = 0;
|
||||
virtual void PlayerSpawn(CBasePlayer *pPlayer) = 0;
|
||||
virtual void PlayerThink(CBasePlayer *pPlayer) = 0;
|
||||
virtual BOOL FPlayerCanRespawn(CBasePlayer *pPlayer) = 0;
|
||||
virtual edict_t *GetPlayerSpawnSpot(CBasePlayer *pPlayer) = 0;
|
||||
virtual void PlayerKilled(CBasePlayer *pVictim, entvars_t *pKiller, entvars_t *pInflictor) = 0;
|
||||
virtual int ItemShouldRespawn(CItem *pItem) = 0;
|
||||
virtual void CheckMapConditions() = 0;
|
||||
virtual void CheckWinConditions() = 0;
|
||||
public:
|
||||
float FillAccountTime;
|
||||
float ServerRestartTime;
|
||||
BOOL fInBuyArea;
|
||||
BOOL fVisitedBuyArea;
|
||||
bool fVGUIMenus;
|
||||
};
|
||||
|
||||
class CBaseGrenCatch: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual void Think() = 0;
|
||||
virtual void Touch(CBaseEntity *pOther) = 0;
|
||||
public:
|
||||
int m_NeedGrenadeType;
|
||||
string_t sTriggerOnGrenade;
|
||||
string_t sDisableOnGrenade;
|
||||
bool m_fSmokeTouching;
|
||||
bool m_fFlashTouched;
|
||||
};
|
||||
|
||||
class CFuncWeaponCheck: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual void Touch(CBaseEntity *pOther) = 0;
|
||||
private:
|
||||
string_t sTriggerWithItems;
|
||||
string_t sTriggerNoItems;
|
||||
string_t sMaster;
|
||||
unsigned int sItemName[32];
|
||||
int iItemCount;
|
||||
int iAnyWeapon;
|
||||
};
|
@ -1,19 +1,31 @@
|
||||
/***
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
* 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 product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
* 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
|
||||
*
|
||||
****/
|
||||
#ifndef TRAINS_H
|
||||
#define TRAINS_H
|
||||
* 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
|
||||
|
||||
// Tracktrain spawn flags
|
||||
#define SF_TRACKTRAIN_NOPITCH 0x0001
|
||||
@ -33,37 +45,15 @@
|
||||
#define SF_CORNER_TELEPORT 0x002
|
||||
#define SF_CORNER_FIREONCE 0x004
|
||||
|
||||
//#define PATH_SPARKLE_DEBUG 1 // This makes a particle effect around path_track entities for debugging
|
||||
class CPathTrack : public CPointEntity
|
||||
{
|
||||
class CPathTrack: public CPointEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData* pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual void Activate() = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
void Spawn( void );
|
||||
void Activate( void );
|
||||
void KeyValue( KeyValueData* pkvd);
|
||||
|
||||
void SetPrevious( CPathTrack *pprevious );
|
||||
void Link( void );
|
||||
void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
|
||||
|
||||
CPathTrack *ValidPath( CPathTrack *ppath, int testFlag ); // Returns ppath if enabled, NULL otherwise
|
||||
void Project( CPathTrack *pstart, CPathTrack *pend, Vector *origin, float dist );
|
||||
|
||||
static CPathTrack *Instance( edict_t *pent );
|
||||
|
||||
CPathTrack *LookAhead( Vector *origin, float dist, int move );
|
||||
CPathTrack *Nearest( Vector origin );
|
||||
|
||||
CPathTrack *GetNext( void );
|
||||
CPathTrack *GetPrevious( void );
|
||||
|
||||
virtual int Save( CSave &save );
|
||||
virtual int Restore( CRestore &restore );
|
||||
|
||||
static TYPEDESCRIPTION m_SaveData[];
|
||||
#if PATH_SPARKLE_DEBUG
|
||||
void EXPORT Sparkle(void);
|
||||
#endif
|
||||
|
||||
float m_length;
|
||||
string_t m_altName;
|
||||
CPathTrack *m_pnext;
|
||||
@ -71,41 +61,20 @@ public:
|
||||
CPathTrack *m_paltpath;
|
||||
};
|
||||
|
||||
|
||||
class CFuncTrackTrain : public CBaseEntity
|
||||
{
|
||||
class CFuncTrackTrain: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void Restart() = 0;
|
||||
virtual void KeyValue(KeyValueData* pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual void OverrideReset() = 0;
|
||||
virtual BOOL OnControls(entvars_t *pev) = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
virtual void Blocked(CBaseEntity *pOther) = 0;
|
||||
public:
|
||||
void Spawn( void );
|
||||
void Precache( void );
|
||||
|
||||
void Blocked( CBaseEntity *pOther );
|
||||
void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
|
||||
void KeyValue( KeyValueData* pkvd );
|
||||
|
||||
void EXPORT Next( void );
|
||||
void EXPORT Find( void );
|
||||
void EXPORT NearestPath( void );
|
||||
void EXPORT DeadEnd( void );
|
||||
|
||||
void NextThink( float thinkTime, BOOL alwaysThink );
|
||||
|
||||
void SetTrack( CPathTrack *track ) { m_ppath = track->Nearest(pev->origin); }
|
||||
void SetControls( entvars_t *pevControls );
|
||||
BOOL OnControls( entvars_t *pev );
|
||||
|
||||
void StopSound ( void );
|
||||
void UpdateSound ( void );
|
||||
|
||||
static CFuncTrackTrain *Instance( edict_t *pent );
|
||||
|
||||
virtual int Save( CSave &save );
|
||||
virtual int Restore( CRestore &restore );
|
||||
|
||||
static TYPEDESCRIPTION m_SaveData[];
|
||||
virtual int ObjectCaps( void ) { return (CBaseEntity :: ObjectCaps() & ~FCAP_ACROSS_TRANSITION) | FCAP_DIRECTIONAL_USE; }
|
||||
|
||||
virtual void OverrideReset( void );
|
||||
|
||||
CPathTrack *m_ppath;
|
||||
float m_length;
|
||||
float m_height;
|
||||
@ -119,9 +88,62 @@ public:
|
||||
float m_flVolume;
|
||||
float m_flBank;
|
||||
float m_oldSpeed;
|
||||
float m_fTurnAngle;
|
||||
float m_flSteeringWheelDecay;
|
||||
float m_flAcceleratorDecay;
|
||||
|
||||
private:
|
||||
unsigned short m_usAdjustPitch;
|
||||
};
|
||||
|
||||
#endif
|
||||
class CFuncVehicle: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void Restart() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual int Classify() = 0;
|
||||
virtual void OverrideReset() = 0;
|
||||
virtual BOOL OnControls(entvars_t *pev) = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
virtual void Blocked(CBaseEntity *pOther) = 0;
|
||||
public:
|
||||
CPathTrack *m_ppath;
|
||||
float m_length;
|
||||
float m_width;
|
||||
float m_height;
|
||||
float m_speed;
|
||||
float m_dir;
|
||||
float m_startSpeed;
|
||||
Vector m_controlMins;
|
||||
Vector m_controlMaxs;
|
||||
int m_soundPlaying;
|
||||
int m_sounds;
|
||||
int m_acceleration;
|
||||
float m_flVolume;
|
||||
float m_flBank;
|
||||
float m_oldSpeed;
|
||||
int m_iTurnAngle;
|
||||
float m_flSteeringWheelDecay;
|
||||
float m_flAcceleratorDecay;
|
||||
float m_flTurnStartTime;
|
||||
float m_flLaunchTime;
|
||||
float m_flLastNormalZ;
|
||||
float m_flCanTurnNow;
|
||||
float m_flUpdateSound;
|
||||
Vector m_vFrontLeft;
|
||||
Vector m_vFront;
|
||||
Vector m_vFrontRight;
|
||||
Vector m_vBackLeft;
|
||||
Vector m_vBack;
|
||||
Vector m_vBackRight;
|
||||
Vector m_vSurfaceNormal;
|
||||
Vector m_vVehicleDirection;
|
||||
CBaseEntity *m_pDriver;
|
||||
|
||||
private:
|
||||
unsigned short m_usAdjustPitch;
|
||||
};
|
||||
|
385
metamod/extra/example/include/hlsdk/dlls/triggers.h
Normal file
385
metamod/extra/example/include/hlsdk/dlls/triggers.h
Normal file
@ -0,0 +1,385 @@
|
||||
/*
|
||||
*
|
||||
* 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 "utlmap.h"
|
||||
|
||||
#define GRENADETYPE_SMOKE 1
|
||||
#define GRENADETYPE_FLASH 2
|
||||
|
||||
#define SPAWNFLAG_NOMESSAGE 1
|
||||
#define SPAWNFLAG_NOTOUCH 1
|
||||
#define SPAWNFLAG_DROIDONLY 4
|
||||
|
||||
#define MAX_ITEM_COUNTS 32
|
||||
#define MAX_ENTITY 512 // We can only ever move 512 entities across a transition
|
||||
|
||||
// triggers
|
||||
#define SF_TRIGGER_ALLOWMONSTERS 1 // monsters allowed to fire this trigger
|
||||
#define SF_TRIGGER_NOCLIENTS 2 // players not allowed to fire this trigger
|
||||
#define SF_TRIGGER_PUSHABLES 4 // only pushables can fire this trigger
|
||||
#define SF_TRIGGER_NO_RESET 64 // it is not allowed to be restarted on a new round
|
||||
|
||||
#define SF_TRIGGER_PUSH_ONCE 1
|
||||
#define SF_TRIGGER_PUSH_START_OFF 2 // spawnflag that makes trigger_push spawn turned OFF
|
||||
|
||||
#define SF_TRIGGER_HURT_TARGETONCE 1 // Only fire hurt target once
|
||||
#define SF_TRIGGER_HURT_START_OFF 2 // spawnflag that makes trigger_push spawn turned OFF
|
||||
#define SF_TRIGGER_HURT_NO_CLIENTS 8 // spawnflag that makes trigger_push spawn turned OFF
|
||||
#define SF_TRIGGER_HURT_CLIENTONLYFIRE 16 // trigger hurt will only fire its target if it is hurting a client
|
||||
#define SF_TRIGGER_HURT_CLIENTONLYTOUCH 32 // only clients may touch this trigger.
|
||||
|
||||
#define SF_AUTO_FIREONCE 0x0001
|
||||
#define SF_AUTO_NO_RESET 0x0002
|
||||
|
||||
#define SF_RELAY_FIREONCE 0x0001
|
||||
#define SF_ENDSECTION_USEONLY 0x0001
|
||||
|
||||
#define SF_MULTIMAN_CLONE 0x80000000
|
||||
#define SF_MULTIMAN_THREAD 0x00000001
|
||||
|
||||
#define SF_CHANGELEVEL_USEONLY 0x0002
|
||||
#define SF_CAMERA_PLAYER_POSITION 1
|
||||
#define SF_CAMERA_PLAYER_TARGET 2
|
||||
#define SF_CAMERA_PLAYER_TAKECONTROL 4
|
||||
|
||||
// Flags to indicate masking off various render parameters that are normally copied to the targets
|
||||
#define SF_RENDER_MASKFX (1 << 0)
|
||||
#define SF_RENDER_MASKAMT (1 << 1)
|
||||
#define SF_RENDER_MASKMODE (1 << 2)
|
||||
#define SF_RENDER_MASKCOLOR (1 << 3)
|
||||
|
||||
class CFrictionModifier: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
public:
|
||||
float m_frictionFraction;
|
||||
};
|
||||
|
||||
// This trigger will fire when the level spawns (or respawns if not fire once)
|
||||
// It will check a global state before firing. It supports delay and killtargets
|
||||
class CAutoTrigger: public CBaseDelay {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void Restart() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual void Think() = 0;
|
||||
public:
|
||||
int m_globalstate;
|
||||
USE_TYPE triggerType;
|
||||
};
|
||||
|
||||
class CTriggerRelay: public CBaseDelay {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
USE_TYPE triggerType;
|
||||
};
|
||||
|
||||
// The Multimanager Entity - when fired, will fire up to 16 targets
|
||||
// at specified times.
|
||||
// FLAG: THREAD (create clones when triggered)
|
||||
// FLAG: CLONE (this is a clone for a threaded execution)
|
||||
class CMultiManager: public CBaseToggle {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Restart() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual BOOL HasTarget(string_t targetname) = 0;
|
||||
public:
|
||||
int m_cTargets;
|
||||
int m_index;
|
||||
float m_startTime;
|
||||
int m_iTargetName[MAX_MULTI_TARGETS];
|
||||
float m_flTargetDelay[MAX_MULTI_TARGETS];
|
||||
};
|
||||
|
||||
// Render parameters trigger
|
||||
//
|
||||
// This entity will copy its render parameters (renderfx, rendermode, rendercolor, renderamt)
|
||||
// to its targets when triggered.
|
||||
class CRenderFxManager: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Restart() = 0;
|
||||
virtual void UpdateOnRemove() = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
struct RenderGroup_t
|
||||
{
|
||||
int rendermode;
|
||||
float renderamt;
|
||||
Vector rendercolor;
|
||||
int renderfx;
|
||||
};
|
||||
CUtlMap<int, RenderGroup_t> m_RenderGroups;
|
||||
};
|
||||
|
||||
class CBaseTrigger: public CBaseToggle {
|
||||
public:
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
};
|
||||
|
||||
// trigger_hurt - hurts anything that touches it. if the trigger has a targetname, firing it will toggle state
|
||||
// int gfToggleState = 0; // used to determine when all radiation trigger hurts have called 'RadiationThink'
|
||||
class CTriggerHurt: public CBaseTrigger {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Restart() = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
};
|
||||
|
||||
class CTriggerMonsterJump: public CBaseTrigger {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Think() = 0;
|
||||
virtual void Touch(CBaseEntity *pOther) = 0;
|
||||
};
|
||||
|
||||
// trigger_cdaudio - starts/stops cd audio tracks
|
||||
class CTriggerCDAudio: public CBaseTrigger {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Touch(CBaseEntity *pOther) = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
};
|
||||
|
||||
// This plays a CD track when fired or when the player enters it's radius
|
||||
class CTargetCDAudio: public CPointEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual void Think() = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
};
|
||||
|
||||
// QUAKED trigger_multiple (.5 .5 .5) ? notouch
|
||||
// Variable sized repeatable trigger. Must be targeted at one or more entities.
|
||||
// If "health" is set, the trigger must be killed to activate each time.
|
||||
// If "delay" is set, the trigger waits some time after activating before firing.
|
||||
// "wait" : Seconds between triggerings. (.2 default)
|
||||
// If notouch is set, the trigger is only fired by other entities, not by touching.
|
||||
// NOTOUCH has been obsoleted by trigger_relay!
|
||||
// sounds
|
||||
// 1) secret
|
||||
// 2) beep beep
|
||||
// 3) large switch
|
||||
// 4)
|
||||
// NEW
|
||||
// if a trigger has a NETNAME, that NETNAME will become the TARGET of the triggered object.
|
||||
class CTriggerMultiple: public CBaseTrigger {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
};
|
||||
|
||||
// QUAKED trigger_once (.5 .5 .5) ? notouch
|
||||
// Variable sized trigger. Triggers once, then removes itself. You must set the key "target" to the name of another object in the level that has a matching
|
||||
// "targetname". If "health" is set, the trigger must be killed to activate.
|
||||
// If notouch is set, the trigger is only fired by other entities, not by touching.
|
||||
// if "killtarget" is set, any objects that have a matching "target" will be removed when the trigger is fired.
|
||||
// if "angle" is set, the trigger will only fire when someone is facing the direction of the angle. Use "360" for an angle of 0.
|
||||
// sounds
|
||||
// 1) secret
|
||||
// 2) beep beep
|
||||
// 3) large switch
|
||||
// 4)
|
||||
class CTriggerOnce: public CTriggerMultiple {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Restart() = 0;
|
||||
};
|
||||
|
||||
// QUAKED trigger_counter (.5 .5 .5) ? nomessage
|
||||
// Acts as an intermediary for an action that takes multiple inputs.
|
||||
// If nomessage is not set, it will print "1 more.. " etc when triggered and
|
||||
// "sequence complete" when finished. After the counter has been triggered "cTriggersLeft"
|
||||
// times (default 2), it will fire all of it's targets and remove itself.
|
||||
class CTriggerCounter: public CBaseTrigger {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
};
|
||||
|
||||
// Derive from point entity so this doesn't move across levels
|
||||
class CTriggerVolume: public CPointEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
};
|
||||
|
||||
// Fires a target after level transition and then dies
|
||||
class CFireAndDie: public CBaseDelay {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual int ObjectCaps() = 0; // Always go across transitions
|
||||
virtual void Think() = 0;
|
||||
};
|
||||
|
||||
// QUAKED trigger_changelevel (0.5 0.5 0.5) ? NO_INTERMISSION
|
||||
// When the player touches this, he gets sent to the map listed in the "map" variable. Unless the NO_INTERMISSION flag is set, the view will go to the info_intermission spot and display stats.
|
||||
class CChangeLevel: public CBaseTrigger {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
public:
|
||||
char m_szMapName[cchMapNameMost]; // trigger_changelevel only: next map
|
||||
char m_szLandmarkName[cchMapNameMost]; // trigger_changelevel only: landmark on next map
|
||||
int m_changeTarget;
|
||||
float m_changeTargetDelay;
|
||||
};
|
||||
|
||||
class CLadder: public CBaseTrigger {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Precache() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
};
|
||||
|
||||
class CTriggerPush: public CBaseTrigger {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void Restart() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual void Touch(CBaseEntity *pOther) = 0;
|
||||
};
|
||||
|
||||
class CTriggerTeleport: public CBaseTrigger {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
};
|
||||
|
||||
class CBuyZone: public CBaseTrigger {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
};
|
||||
|
||||
class CBombTarget: public CBaseTrigger {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
};
|
||||
|
||||
class CHostageRescue: public CBaseTrigger {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
};
|
||||
|
||||
class CEscapeZone: public CBaseTrigger {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
};
|
||||
|
||||
class CVIP_SafetyZone: public CBaseTrigger {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
};
|
||||
|
||||
class CTriggerSave: public CBaseTrigger {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
};
|
||||
|
||||
class CTriggerEndSection: public CBaseTrigger {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
};
|
||||
|
||||
class CTriggerGravity: public CBaseTrigger {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
};
|
||||
|
||||
// this is a really bad idea.
|
||||
class CTriggerChangeTarget: public CBaseDelay {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
private:
|
||||
int m_iszNewTarget;
|
||||
};
|
||||
|
||||
class CTriggerCamera: public CBaseDelay {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
public:
|
||||
EHANDLE m_hPlayer;
|
||||
EHANDLE m_hTarget;
|
||||
CBaseEntity *m_pentPath;
|
||||
int m_sPath;
|
||||
float m_flWait;
|
||||
float m_flReturnTime;
|
||||
float m_flStopTime;
|
||||
float m_moveDistance;
|
||||
float m_targetSpeed;
|
||||
float m_initialSpeed;
|
||||
float m_acceleration;
|
||||
float m_deceleration;
|
||||
int m_state;
|
||||
};
|
||||
|
||||
class CWeather: public CBaseTrigger {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
};
|
||||
|
||||
class CClientFog: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
||||
public:
|
||||
int m_iStartDist;
|
||||
int m_iEndDist;
|
||||
float m_fDensity;
|
||||
};
|
57
metamod/extra/example/include/hlsdk/dlls/unisignals.h
Normal file
57
metamod/extra/example/include/hlsdk/dlls/unisignals.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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef UNISIGNALS_H
|
||||
#define UNISIGNALS_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
class CUnifiedSignals
|
||||
{
|
||||
public:
|
||||
CUnifiedSignals()
|
||||
{
|
||||
m_flSignal = 0;
|
||||
m_flState = 0;
|
||||
}
|
||||
public:
|
||||
void Update()
|
||||
{
|
||||
m_flState = m_flSignal;
|
||||
m_flSignal = 0;
|
||||
}
|
||||
void Signal(int flags) { m_flSignal |= flags; }
|
||||
int GetSignal() const { return m_flSignal; }
|
||||
int GetState() const { return m_flState; }
|
||||
public:
|
||||
int m_flSignal;
|
||||
int m_flState;
|
||||
};
|
||||
|
||||
#endif // UNISIGNALS_H
|
@ -1,30 +1,44 @@
|
||||
/***
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
* 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 product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
* 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
|
||||
*
|
||||
****/
|
||||
#include "archtypes.h" // DAL
|
||||
* 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
|
||||
|
||||
//
|
||||
// Misc utility code
|
||||
//
|
||||
#ifndef ACTIVITY_H
|
||||
#include "activity.h"
|
||||
#endif
|
||||
|
||||
#ifndef ENGINECALLBACK_H
|
||||
#include "enginecallback.h"
|
||||
#endif
|
||||
inline void MESSAGE_BEGIN( int msg_dest, int msg_type, const float *pOrigin, entvars_t *ent ); // implementation later in this file
|
||||
|
||||
#define eoNullEntity 0 // Testing the three types of "entity" for nullity
|
||||
#define iStringNull 0 // Testing strings for nullity
|
||||
|
||||
#define cchMapNameMost 32
|
||||
|
||||
#define CBSENTENCENAME_MAX 16
|
||||
#define CVOXFILESENTENCEMAX 1536 // max number of sentences in game. NOTE: this must match CVOXFILESENTENCEMAX in engine\sound.h
|
||||
|
||||
#define GROUP_OP_AND 0
|
||||
#define GROUP_OP_NAND 1
|
||||
|
||||
extern globalvars_t *gpGlobals;
|
||||
|
||||
@ -32,397 +46,31 @@ extern globalvars_t *gpGlobals;
|
||||
#define STRING(offset) ((const char *)(gpGlobals->pStringBase + (unsigned int)(offset)))
|
||||
#define MAKE_STRING(str) ((uint64)(str) - (uint64)(STRING(0)))
|
||||
|
||||
inline edict_t *FIND_ENTITY_BY_CLASSNAME(edict_t *entStart, const char *pszName)
|
||||
{
|
||||
return FIND_ENTITY_BY_STRING(entStart, "classname", pszName);
|
||||
}
|
||||
|
||||
inline edict_t *FIND_ENTITY_BY_TARGETNAME(edict_t *entStart, const char *pszName)
|
||||
{
|
||||
return FIND_ENTITY_BY_STRING(entStart, "targetname", pszName);
|
||||
}
|
||||
|
||||
// for doing a reverse lookup. Say you have a door, and want to find its button.
|
||||
inline edict_t *FIND_ENTITY_BY_TARGET(edict_t *entStart, const char *pszName)
|
||||
{
|
||||
return FIND_ENTITY_BY_STRING(entStart, "target", pszName);
|
||||
}
|
||||
|
||||
// Keeps clutter down a bit, when writing key-value pairs
|
||||
#define WRITEKEY_INT(pf, szKeyName, iKeyValue) ENGINE_FPRINTF(pf, "\"%s\" \"%d\"\n", szKeyName, iKeyValue)
|
||||
#define WRITEKEY_FLOAT(pf, szKeyName, flKeyValue) \
|
||||
ENGINE_FPRINTF(pf, "\"%s\" \"%f\"\n", szKeyName, flKeyValue)
|
||||
#define WRITEKEY_STRING(pf, szKeyName, szKeyValue) \
|
||||
ENGINE_FPRINTF(pf, "\"%s\" \"%s\"\n", szKeyName, szKeyValue)
|
||||
#define WRITEKEY_VECTOR(pf, szKeyName, flX, flY, flZ) \
|
||||
ENGINE_FPRINTF(pf, "\"%s\" \"%f %f %f\"\n", szKeyName, flX, flY, flZ)
|
||||
|
||||
// Keeps clutter down a bit, when using a float as a bit-vector
|
||||
#define SetBits(flBitVector, bits) ((flBitVector) = (int)(flBitVector) | (bits))
|
||||
#define ClearBits(flBitVector, bits) ((flBitVector) = (int)(flBitVector) & ~(bits))
|
||||
#define FBitSet(flBitVector, bit) ((int)(flBitVector) & (bit))
|
||||
|
||||
// Makes these more explicit, and easier to find
|
||||
#define FILE_GLOBAL static
|
||||
#define DLL_GLOBAL
|
||||
|
||||
// Until we figure out why "const" gives the compiler problems, we'll just have to use
|
||||
// this bogus "empty" define to mark things as constant.
|
||||
#define CONSTANT
|
||||
|
||||
// More explicit than "int"
|
||||
typedef int EOFFSET;
|
||||
|
||||
// In case it's not alread defined
|
||||
typedef int BOOL;
|
||||
|
||||
// In case this ever changes
|
||||
#define M_PI 3.14159265358979323846
|
||||
|
||||
// Keeps clutter down a bit, when declaring external entity/global method prototypes
|
||||
#define DECLARE_GLOBAL_METHOD(MethodName) extern void UTIL_DLLEXPORT MethodName( void )
|
||||
#define GLOBAL_METHOD(funcname) void UTIL_DLLEXPORT funcname(void)
|
||||
|
||||
#ifndef UTIL_DLLEXPORT
|
||||
#ifdef _WIN32
|
||||
#define UTIL_DLLEXPORT _declspec( dllexport )
|
||||
#else
|
||||
#define UTIL_DLLEXPORT __attribute__ ((visibility("default")))
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// This is the glue that hooks .MAP entity class names to our CPP classes
|
||||
// The _declspec forces them to be exported by name so we can do a lookup with GetProcAddress()
|
||||
// The function is used to intialize / allocate the object for the entity
|
||||
#define LINK_ENTITY_TO_CLASS(mapClassName,DLLClassName) \
|
||||
extern "C" UTIL_DLLEXPORT void mapClassName( entvars_t *pev ); \
|
||||
void mapClassName( entvars_t *pev ) { GetClassPtr( (DLLClassName *)pev ); }
|
||||
|
||||
|
||||
//
|
||||
// Conversion among the three types of "entity", including identity-conversions.
|
||||
//
|
||||
#ifdef DEBUG
|
||||
extern edict_t *DBG_EntOfVars(const entvars_t *pev);
|
||||
inline edict_t *ENT(const entvars_t *pev) { return DBG_EntOfVars(pev); }
|
||||
#else
|
||||
inline edict_t *ENT(const entvars_t *pev) { return pev->pContainingEntity; }
|
||||
#endif
|
||||
inline edict_t *ENT(edict_t *pent) { return pent; }
|
||||
inline edict_t *ENT(EOFFSET eoffset) { return (*g_engfuncs.pfnPEntityOfEntOffset)(eoffset); }
|
||||
inline EOFFSET OFFSET(EOFFSET eoffset) { return eoffset; }
|
||||
inline EOFFSET OFFSET(const edict_t *pent)
|
||||
{
|
||||
#if _DEBUG
|
||||
if ( !pent )
|
||||
ALERT( at_error, "Bad ent in OFFSET()\n" );
|
||||
#endif
|
||||
return (*g_engfuncs.pfnEntOffsetOfPEntity)(pent);
|
||||
}
|
||||
inline EOFFSET OFFSET(entvars_t *pev)
|
||||
{
|
||||
#if _DEBUG
|
||||
if ( !pev )
|
||||
ALERT( at_error, "Bad pev in OFFSET()\n" );
|
||||
#endif
|
||||
return OFFSET(ENT(pev));
|
||||
}
|
||||
inline entvars_t *VARS(entvars_t *pev) { return pev; }
|
||||
|
||||
inline entvars_t *VARS(edict_t *pent)
|
||||
{
|
||||
if ( !pent )
|
||||
return NULL;
|
||||
|
||||
return &pent->v;
|
||||
}
|
||||
|
||||
inline entvars_t* VARS(EOFFSET eoffset) { return VARS(ENT(eoffset)); }
|
||||
inline int ENTINDEX(edict_t *pEdict) { return (*g_engfuncs.pfnIndexOfEdict)(pEdict); }
|
||||
inline edict_t* INDEXENT( int iEdictNum ) { return (*g_engfuncs.pfnPEntityOfEntIndex)(iEdictNum); }
|
||||
inline void MESSAGE_BEGIN( int msg_dest, int msg_type, const float *pOrigin, entvars_t *ent ) {
|
||||
(*g_engfuncs.pfnMessageBegin)(msg_dest, msg_type, pOrigin, ENT(ent));
|
||||
}
|
||||
|
||||
// Testing the three types of "entity" for nullity
|
||||
#define eoNullEntity 0
|
||||
inline BOOL FNullEnt(EOFFSET eoffset) { return eoffset == 0; }
|
||||
inline BOOL FNullEnt(const edict_t* pent) { return pent == NULL || FNullEnt(OFFSET(pent)); }
|
||||
inline BOOL FNullEnt(entvars_t* pev) { return pev == NULL || FNullEnt(OFFSET(pev)); }
|
||||
|
||||
// Testing strings for nullity
|
||||
#define iStringNull 0
|
||||
inline BOOL FStringNull(int iString) { return iString == iStringNull; }
|
||||
|
||||
#define cchMapNameMost 32
|
||||
|
||||
// Dot products for view cone checking
|
||||
#define VIEW_FIELD_FULL (float)-1.0 // +-180 degrees
|
||||
#define VIEW_FIELD_WIDE (float)-0.7 // +-135 degrees 0.1 // +-85 degrees, used for full FOV checks
|
||||
#define VIEW_FIELD_NARROW (float)0.7 // +-45 degrees, more narrow check used to set up ranged attacks
|
||||
#define VIEW_FIELD_ULTRA_NARROW (float)0.9 // +-25 degrees, more narrow check used to set up ranged attacks
|
||||
|
||||
// All monsters need this data
|
||||
#define DONT_BLEED -1
|
||||
#define BLOOD_COLOR_RED (BYTE)247
|
||||
#define BLOOD_COLOR_YELLOW (BYTE)195
|
||||
#define BLOOD_COLOR_GREEN BLOOD_COLOR_YELLOW
|
||||
|
||||
typedef enum
|
||||
{
|
||||
|
||||
MONSTERSTATE_NONE = 0,
|
||||
MONSTERSTATE_IDLE,
|
||||
MONSTERSTATE_COMBAT,
|
||||
MONSTERSTATE_ALERT,
|
||||
MONSTERSTATE_HUNT,
|
||||
MONSTERSTATE_PRONE,
|
||||
MONSTERSTATE_SCRIPT,
|
||||
MONSTERSTATE_PLAYDEAD,
|
||||
MONSTERSTATE_DEAD
|
||||
|
||||
} MONSTERSTATE;
|
||||
|
||||
|
||||
|
||||
// Things that toggle (buttons/triggers/doors) need this
|
||||
typedef enum
|
||||
{
|
||||
TS_AT_TOP,
|
||||
TS_AT_BOTTOM,
|
||||
TS_GOING_UP,
|
||||
TS_GOING_DOWN
|
||||
} TOGGLE_STATE;
|
||||
|
||||
// Misc useful
|
||||
inline BOOL FStrEq(const char*sz1, const char*sz2)
|
||||
{ return (strcmp(sz1, sz2) == 0); }
|
||||
inline BOOL FClassnameIs(edict_t* pent, const char* szClassname)
|
||||
{ return FStrEq(STRING(VARS(pent)->classname), szClassname); }
|
||||
inline BOOL FClassnameIs(entvars_t* pev, const char* szClassname)
|
||||
{ return FStrEq(STRING(pev->classname), szClassname); }
|
||||
|
||||
class CBaseEntity;
|
||||
|
||||
// Misc. Prototypes
|
||||
extern void UTIL_SetSize (entvars_t* pev, const Vector &vecMin, const Vector &vecMax);
|
||||
extern float UTIL_VecToYaw (const Vector &vec);
|
||||
extern Vector UTIL_VecToAngles (const Vector &vec);
|
||||
extern float UTIL_AngleMod (float a);
|
||||
extern float UTIL_AngleDiff ( float destAngle, float srcAngle );
|
||||
|
||||
extern CBaseEntity *UTIL_FindEntityInSphere(CBaseEntity *pStartEntity, const Vector &vecCenter, float flRadius);
|
||||
extern CBaseEntity *UTIL_FindEntityByString(CBaseEntity *pStartEntity, const char *szKeyword, const char *szValue );
|
||||
extern CBaseEntity *UTIL_FindEntityByClassname(CBaseEntity *pStartEntity, const char *szName );
|
||||
extern CBaseEntity *UTIL_FindEntityByTargetname(CBaseEntity *pStartEntity, const char *szName );
|
||||
extern CBaseEntity *UTIL_FindEntityGeneric(const char *szName, Vector &vecSrc, float flRadius );
|
||||
|
||||
// returns a CBaseEntity pointer to a player by index. Only returns if the player is spawned and connected
|
||||
// otherwise returns NULL
|
||||
// Index is 1 based
|
||||
extern CBaseEntity *UTIL_PlayerByIndex( int playerIndex );
|
||||
|
||||
#define UTIL_EntitiesInPVS(pent) (*g_engfuncs.pfnEntitiesInPVS)(pent)
|
||||
extern void UTIL_MakeVectors (const Vector &vecAngles);
|
||||
|
||||
// Pass in an array of pointers and an array size, it fills the array and returns the number inserted
|
||||
extern int UTIL_MonstersInSphere( CBaseEntity **pList, int listMax, const Vector ¢er, float radius );
|
||||
extern int UTIL_EntitiesInBox( CBaseEntity **pList, int listMax, const Vector &mins, const Vector &maxs, int flagMask );
|
||||
|
||||
inline void UTIL_MakeVectorsPrivate( const Vector &vecAngles, float *p_vForward, float *p_vRight, float *p_vUp )
|
||||
{
|
||||
g_engfuncs.pfnAngleVectors( vecAngles, p_vForward, p_vRight, p_vUp );
|
||||
}
|
||||
|
||||
extern void UTIL_MakeAimVectors ( const Vector &vecAngles ); // like MakeVectors, but assumes pitch isn't inverted
|
||||
extern void UTIL_MakeInvVectors ( const Vector &vec, globalvars_t *pgv );
|
||||
|
||||
extern void UTIL_SetOrigin ( entvars_t* pev, const Vector &vecOrigin );
|
||||
extern void UTIL_EmitAmbientSound ( edict_t *entity, const Vector &vecOrigin, const char *samp, float vol, float attenuation, int fFlags, int pitch );
|
||||
extern void UTIL_ParticleEffect ( const Vector &vecOrigin, const Vector &vecDirection, ULONG ulColor, ULONG ulCount );
|
||||
extern void UTIL_ScreenShake ( const Vector ¢er, float amplitude, float frequency, float duration, float radius );
|
||||
extern void UTIL_ScreenShakeAll ( const Vector ¢er, float amplitude, float frequency, float duration );
|
||||
extern void UTIL_ShowMessage ( const char *pString, CBaseEntity *pPlayer );
|
||||
extern void UTIL_ShowMessageAll ( const char *pString );
|
||||
extern void UTIL_ScreenFadeAll ( const Vector &color, float fadeTime, float holdTime, int alpha, int flags );
|
||||
extern void UTIL_ScreenFade ( CBaseEntity *pEntity, const Vector &color, float fadeTime, float fadeHold, int alpha, int flags );
|
||||
|
||||
typedef enum { ignore_monsters=1, dont_ignore_monsters=0, missile=2 } IGNORE_MONSTERS;
|
||||
typedef enum { ignore_glass=1, dont_ignore_glass=0 } IGNORE_GLASS;
|
||||
extern void UTIL_TraceLine (const Vector &vecStart, const Vector &vecEnd, IGNORE_MONSTERS igmon, edict_t *pentIgnore, TraceResult *ptr);
|
||||
extern void UTIL_TraceLine (const Vector &vecStart, const Vector &vecEnd, IGNORE_MONSTERS igmon, IGNORE_GLASS ignoreGlass, edict_t *pentIgnore, TraceResult *ptr);
|
||||
typedef enum { point_hull=0, human_hull=1, large_hull=2, head_hull=3 } __HLSDK_HULL_TYPE;
|
||||
extern void UTIL_TraceHull (const Vector &vecStart, const Vector &vecEnd, IGNORE_MONSTERS igmon, int hullNumber, edict_t *pentIgnore, TraceResult *ptr);
|
||||
extern TraceResult UTIL_GetGlobalTrace (void);
|
||||
extern void UTIL_TraceModel (const Vector &vecStart, const Vector &vecEnd, int hullNumber, edict_t *pentModel, TraceResult *ptr);
|
||||
extern Vector UTIL_GetAimVector (edict_t* pent, float flSpeed);
|
||||
extern int UTIL_PointContents (const Vector &vec);
|
||||
|
||||
extern int UTIL_IsMasterTriggered (string_t sMaster, CBaseEntity *pActivator);
|
||||
extern void UTIL_BloodStream( const Vector &origin, const Vector &direction, int color, int amount );
|
||||
extern void UTIL_BloodDrips( const Vector &origin, const Vector &direction, int color, int amount );
|
||||
extern Vector UTIL_RandomBloodVector( void );
|
||||
extern BOOL UTIL_ShouldShowBlood( int bloodColor );
|
||||
extern void UTIL_BloodDecalTrace( TraceResult *pTrace, int bloodColor );
|
||||
extern void UTIL_DecalTrace( TraceResult *pTrace, int decalNumber );
|
||||
extern void UTIL_PlayerDecalTrace( TraceResult *pTrace, int playernum, int decalNumber, BOOL bIsCustom );
|
||||
extern void UTIL_GunshotDecalTrace( TraceResult *pTrace, int decalNumber );
|
||||
extern void UTIL_Sparks( const Vector &position );
|
||||
extern void UTIL_Ricochet( const Vector &position, float scale );
|
||||
extern void UTIL_StringToVector( float *pVector, const char *pString );
|
||||
extern void UTIL_StringToIntArray( int *pVector, int count, const char *pString );
|
||||
extern Vector UTIL_ClampVectorToBox( const Vector &input, const Vector &clampSize );
|
||||
extern float UTIL_Approach( float target, float value, float speed );
|
||||
extern float UTIL_ApproachAngle( float target, float value, float speed );
|
||||
extern float UTIL_AngleDistance( float next, float cur );
|
||||
|
||||
extern char *UTIL_VarArgs( char *format, ... );
|
||||
extern void UTIL_Remove( CBaseEntity *pEntity );
|
||||
extern BOOL UTIL_IsValidEntity( edict_t *pent );
|
||||
extern BOOL UTIL_TeamsMatch( const char *pTeamName1, const char *pTeamName2 );
|
||||
|
||||
// Use for ease-in, ease-out style interpolation (accel/decel)
|
||||
extern float UTIL_SplineFraction( float value, float scale );
|
||||
|
||||
// Search for water transition along a vertical line
|
||||
extern float UTIL_WaterLevel( const Vector &position, float minz, float maxz );
|
||||
extern void UTIL_Bubbles( Vector mins, Vector maxs, int count );
|
||||
extern void UTIL_BubbleTrail( Vector from, Vector to, int count );
|
||||
|
||||
// allows precacheing of other entities
|
||||
extern void UTIL_PrecacheOther( const char *szClassname );
|
||||
|
||||
// prints a message to each client
|
||||
extern void UTIL_ClientPrintAll( int msg_dest, const char *msg_name, const char *param1 = NULL, const char *param2 = NULL, const char *param3 = NULL, const char *param4 = NULL );
|
||||
inline void UTIL_CenterPrintAll( const char *msg_name, const char *param1 = NULL, const char *param2 = NULL, const char *param3 = NULL, const char *param4 = NULL )
|
||||
{
|
||||
UTIL_ClientPrintAll( HUD_PRINTCENTER, msg_name, param1, param2, param3, param4 );
|
||||
}
|
||||
|
||||
class CBasePlayerItem;
|
||||
class CBasePlayer;
|
||||
extern BOOL UTIL_GetNextBestWeapon( CBasePlayer *pPlayer, CBasePlayerItem *pCurrentWeapon );
|
||||
|
||||
// prints messages through the HUD
|
||||
extern void ClientPrint( entvars_t *client, int msg_dest, const char *msg_name, const char *param1 = NULL, const char *param2 = NULL, const char *param3 = NULL, const char *param4 = NULL );
|
||||
|
||||
// prints a message to the HUD say (chat)
|
||||
extern void UTIL_SayText( const char *pText, CBaseEntity *pEntity );
|
||||
extern void UTIL_SayTextAll( const char *pText, CBaseEntity *pEntity );
|
||||
|
||||
|
||||
typedef struct hudtextparms_s
|
||||
{
|
||||
float x;
|
||||
float y;
|
||||
int effect;
|
||||
byte r1, g1, b1, a1;
|
||||
byte r2, g2, b2, a2;
|
||||
float fadeinTime;
|
||||
float fadeoutTime;
|
||||
float holdTime;
|
||||
float fxTime;
|
||||
int channel;
|
||||
} hudtextparms_t;
|
||||
|
||||
// prints as transparent 'title' to the HUD
|
||||
extern void UTIL_HudMessageAll( const hudtextparms_t &textparms, const char *pMessage );
|
||||
extern void UTIL_HudMessage( CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage );
|
||||
|
||||
// for handy use with ClientPrint params
|
||||
extern char *UTIL_dtos1( int d );
|
||||
extern char *UTIL_dtos2( int d );
|
||||
extern char *UTIL_dtos3( int d );
|
||||
extern char *UTIL_dtos4( int d );
|
||||
|
||||
// Writes message to console with timestamp and FragLog header.
|
||||
extern void UTIL_LogPrintf( char *fmt, ... );
|
||||
extern void UTIL_ServerPrintf( const char *fmt, ... );
|
||||
|
||||
// Sorta like FInViewCone, but for nonmonsters.
|
||||
extern float UTIL_DotPoints ( const Vector &vecSrc, const Vector &vecCheck, const Vector &vecDir );
|
||||
|
||||
extern void UTIL_StripToken( const char *pKey, char *pDest );// for redundant keynames
|
||||
|
||||
// Misc functions
|
||||
extern void SetMovedir(entvars_t* pev);
|
||||
extern Vector VecBModelOrigin( entvars_t* pevBModel );
|
||||
extern int BuildChangeList( LEVELLIST *pLevelList, int maxList );
|
||||
|
||||
//
|
||||
// How did I ever live without ASSERT?
|
||||
//
|
||||
#ifdef DEBUG
|
||||
void DBG_AssertFunction(BOOL fExpr, const char* szExpr, const char* szFile, int szLine, const char* szMessage);
|
||||
#define ASSERT(f) DBG_AssertFunction(f, #f, __FILE__, __LINE__, NULL)
|
||||
#define ASSERTSZ(f, sz) DBG_AssertFunction(f, #f, __FILE__, __LINE__, sz)
|
||||
#else // !DEBUG
|
||||
#define ASSERT(f)
|
||||
#define ASSERTSZ(f, sz)
|
||||
#endif // !DEBUG
|
||||
|
||||
|
||||
extern DLL_GLOBAL const Vector g_vecZero;
|
||||
|
||||
//
|
||||
// Constants that were used only by QC (maybe not used at all now)
|
||||
//
|
||||
// Un-comment only as needed
|
||||
//
|
||||
#define LANGUAGE_ENGLISH 0
|
||||
#define LANGUAGE_GERMAN 1
|
||||
#define LANGUAGE_FRENCH 2
|
||||
#define LANGUAGE_BRITISH 3
|
||||
|
||||
extern DLL_GLOBAL int g_Language;
|
||||
|
||||
#define AMBIENT_SOUND_STATIC 0 // medium radius attenuation
|
||||
#define AMBIENT_SOUND_EVERYWHERE 1
|
||||
#define AMBIENT_SOUND_SMALLRADIUS 2
|
||||
#define AMBIENT_SOUND_MEDIUMRADIUS 4
|
||||
#define AMBIENT_SOUND_LARGERADIUS 8
|
||||
#define AMBIENT_SOUND_START_SILENT 16
|
||||
#define AMBIENT_SOUND_NOT_LOOPING 32
|
||||
|
||||
#define SPEAKER_START_SILENT 1 // wait for trigger 'on' to start announcements
|
||||
#define VIEW_FIELD_FULL -1.0 // +-180 degrees
|
||||
#define VIEW_FIELD_WIDE -0.7 // +-135 degrees 0.1 // +-85 degrees, used for full FOV checks
|
||||
#define VIEW_FIELD_NARROW 0.7 // +-45 degrees, more narrow check used to set up ranged attacks
|
||||
#define VIEW_FIELD_ULTRA_NARROW 0.9 // +-25 degrees, more narrow check used to set up ranged attacks
|
||||
|
||||
#define SND_SPAWNING (1<<8) // duplicated in protocol.h we're spawing, used in some cases for ambients
|
||||
#define SND_STOP (1<<5) // duplicated in protocol.h stop sound
|
||||
#define SND_CHANGE_VOL (1<<6) // duplicated in protocol.h change sound vol
|
||||
#define SND_CHANGE_PITCH (1<<7) // duplicated in protocol.h change sound pitch
|
||||
|
||||
#define LFO_SQUARE 1
|
||||
#define LFO_TRIANGLE 2
|
||||
#define LFO_RANDOM 3
|
||||
// All monsters need this data
|
||||
#define DONT_BLEED -1
|
||||
#define BLOOD_COLOR_RED (byte)247
|
||||
#define BLOOD_COLOR_YELLOW (byte)195
|
||||
#define BLOOD_COLOR_GREEN BLOOD_COLOR_YELLOW
|
||||
|
||||
// func_rotating
|
||||
#define SF_BRUSH_ROTATE_Y_AXIS 0
|
||||
#define SF_BRUSH_ROTATE_INSTANT 1
|
||||
#define SF_BRUSH_ROTATE_BACKWARDS 2
|
||||
#define SF_BRUSH_ROTATE_Z_AXIS 4
|
||||
#define SF_BRUSH_ROTATE_X_AXIS 8
|
||||
#define SF_PENDULUM_AUTO_RETURN 16
|
||||
#define SF_PENDULUM_PASSABLE 32
|
||||
#define GERMAN_GIB_COUNT 4
|
||||
#define HUMAN_GIB_COUNT 6
|
||||
#define ALIEN_GIB_COUNT 4
|
||||
|
||||
|
||||
#define SF_BRUSH_ROTATE_SMALLRADIUS 128
|
||||
#define SF_BRUSH_ROTATE_MEDIUMRADIUS 256
|
||||
#define SF_BRUSH_ROTATE_LARGERADIUS 512
|
||||
|
||||
#define PUSH_BLOCK_ONLY_X 1
|
||||
#define PUSH_BLOCK_ONLY_Y 2
|
||||
|
||||
#define VEC_HULL_MIN Vector(-16, -16, -36)
|
||||
#define VEC_HULL_MAX Vector( 16, 16, 36)
|
||||
#define VEC_HUMAN_HULL_MIN Vector( -16, -16, 0 )
|
||||
#define VEC_HUMAN_HULL_MAX Vector( 16, 16, 72 )
|
||||
#define VEC_HUMAN_HULL_DUCK Vector( 16, 16, 36 )
|
||||
|
||||
#define VEC_VIEW Vector( 0, 0, 28 )
|
||||
|
||||
#define VEC_DUCK_HULL_MIN Vector(-16, -16, -18 )
|
||||
#define VEC_DUCK_HULL_MAX Vector( 16, 16, 18)
|
||||
#define VEC_DUCK_VIEW Vector( 0, 0, 12 )
|
||||
#define LANGUAGE_ENGLISH 0
|
||||
#define LANGUAGE_GERMAN 1
|
||||
#define LANGUAGE_FRENCH 2
|
||||
#define LANGUAGE_BRITISH 3
|
||||
|
||||
#define SVC_TEMPENTITY 23
|
||||
#define SVC_INTERMISSION 30
|
||||
@ -431,117 +79,95 @@ extern DLL_GLOBAL int g_Language;
|
||||
#define SVC_ROOMTYPE 37
|
||||
#define SVC_DIRECTOR 51
|
||||
|
||||
#define VEC_HULL_MIN_Z Vector(0, 0, -36)
|
||||
#define VEC_DUCK_HULL_MIN_Z Vector(0, 0, -18)
|
||||
|
||||
#define VEC_HULL_MIN Vector(-16, -16, -36)
|
||||
#define VEC_HULL_MAX Vector(16, 16, 36)
|
||||
|
||||
// triggers
|
||||
#define SF_TRIGGER_ALLOWMONSTERS 1// monsters allowed to fire this trigger
|
||||
#define SF_TRIGGER_NOCLIENTS 2// players not allowed to fire this trigger
|
||||
#define SF_TRIGGER_PUSHABLES 4// only pushables can fire this trigger
|
||||
#define VEC_VIEW Vector(0, 0, 17)
|
||||
|
||||
// func breakable
|
||||
#define SF_BREAK_TRIGGER_ONLY 1// may only be broken by trigger
|
||||
#define SF_BREAK_TOUCH 2// can be 'crashed through' by running player (plate glass)
|
||||
#define SF_BREAK_PRESSURE 4// can be broken by a player standing on it
|
||||
#define SF_BREAK_CROWBAR 256// instant break if hit with crowbar
|
||||
#define VEC_DUCK_HULL_MIN Vector(-16, -16, -18)
|
||||
#define VEC_DUCK_HULL_MAX Vector(16, 16, 32)
|
||||
#define VEC_DUCK_VIEW Vector(0, 0, 12)
|
||||
|
||||
// func_pushable (it's also func_breakable, so don't collide with those flags)
|
||||
#define SF_PUSH_BREAKABLE 128
|
||||
#define PRECACHE_SOUND_ARRAY(a) \
|
||||
{ for (int i = 0; i < ARRAYSIZE(a); ++i) PRECACHE_SOUND((char *)a[i]); }
|
||||
|
||||
#define SF_LIGHT_START_OFF 1
|
||||
// Inlines
|
||||
inline edict_t *FIND_ENTITY_BY_CLASSNAME(edict_t *entStart, const char *pszName) { return FIND_ENTITY_BY_STRING(entStart, "classname", pszName); }
|
||||
inline edict_t *FIND_ENTITY_BY_TARGETNAME(edict_t *entStart, const char *pszName) { return FIND_ENTITY_BY_STRING(entStart, "targetname", pszName); }
|
||||
|
||||
#define SPAWNFLAG_NOMESSAGE 1
|
||||
#define SPAWNFLAG_NOTOUCH 1
|
||||
#define SPAWNFLAG_DROIDONLY 4
|
||||
inline edict_t *ENT(const entvars_t *pev) { return pev->pContainingEntity; }
|
||||
inline edict_t *ENT(EOFFSET eoffset) { return (*g_engfuncs.pfnPEntityOfEntOffset)(eoffset); }
|
||||
inline EOFFSET OFFSET(const edict_t *pent) { return (*g_engfuncs.pfnEntOffsetOfPEntity)(pent); }
|
||||
inline EOFFSET OFFSET(const entvars_t *pev) { return OFFSET(ENT(pev)); }
|
||||
|
||||
#define SPAWNFLAG_USEONLY 1 // can't be touched, must be used (buttons)
|
||||
inline entvars_t *VARS(edict_t *pent)
|
||||
{
|
||||
if (!pent)
|
||||
return NULL;
|
||||
|
||||
#define TELE_PLAYER_ONLY 1
|
||||
#define TELE_SILENT 2
|
||||
return &pent->v;
|
||||
}
|
||||
|
||||
#define SF_TRIG_PUSH_ONCE 1
|
||||
inline entvars_t *VARS(EOFFSET eoffset)
|
||||
{
|
||||
return VARS(ENT(eoffset));
|
||||
}
|
||||
|
||||
#ifndef ENTINDEX
|
||||
inline int ENTINDEX(const edict_t *pEdict) { return (*g_engfuncs.pfnIndexOfEdict)(pEdict); }
|
||||
inline int ENTINDEX(const entvars_t *pev) { return (*g_engfuncs.pfnIndexOfEdict)(ENT(pev)); }
|
||||
#endif // ENTINDEX
|
||||
|
||||
// Sound Utilities
|
||||
#ifndef INDEXENT
|
||||
inline edict_t *INDEXENT(int iEdictNum) { return (*g_engfuncs.pfnPEntityOfEntIndex)(iEdictNum); }
|
||||
#endif // INDEXENT
|
||||
|
||||
// sentence groups
|
||||
#define CBSENTENCENAME_MAX 16
|
||||
#define CVOXFILESENTENCEMAX 1536 // max number of sentences in game. NOTE: this must match
|
||||
// CVOXFILESENTENCEMAX in engine\sound.h!!!
|
||||
inline void MESSAGE_BEGIN(int msg_dest, int msg_type, const float *pOrigin, entvars_t *ent) { MESSAGE_BEGIN(msg_dest, msg_type, pOrigin, ENT(ent)); }
|
||||
inline BOOL FNullEnt(EOFFSET eoffset) { return (eoffset == 0); }
|
||||
inline BOOL FNullEnt(entvars_t *pev) { return (pev == NULL || FNullEnt(OFFSET(pev))); }
|
||||
inline BOOL FNullEnt(const edict_t *pent) { return (pent == NULL || FNullEnt(OFFSET(pent))); }
|
||||
inline BOOL FStringNull(int iString) { return (iString == iStringNull); }
|
||||
inline BOOL FStrEq(const char *sz1, const char *sz2) { return (strcmp(sz1, sz2) == 0); }
|
||||
inline BOOL FClassnameIs(entvars_t *pev, const char *szClassname) { return FStrEq(STRING(pev->classname), szClassname); }
|
||||
inline BOOL FClassnameIs(edict_t *pent, const char *szClassname) { return FStrEq(STRING(VARS(pent)->classname), szClassname); }
|
||||
|
||||
extern char gszallsentencenames[CVOXFILESENTENCEMAX][CBSENTENCENAME_MAX];
|
||||
extern int gcallsentences;
|
||||
|
||||
int USENTENCEG_Pick(int isentenceg, char *szfound);
|
||||
int USENTENCEG_PickSequential(int isentenceg, char *szfound, int ipick, int freset);
|
||||
void USENTENCEG_InitLRU(unsigned char *plru, int count);
|
||||
|
||||
void SENTENCEG_Init();
|
||||
void SENTENCEG_Stop(edict_t *entity, int isentenceg, int ipick);
|
||||
int SENTENCEG_PlayRndI(edict_t *entity, int isentenceg, float volume, float attenuation, int flags, int pitch);
|
||||
int SENTENCEG_PlayRndSz(edict_t *entity, const char *szrootname, float volume, float attenuation, int flags, int pitch);
|
||||
int SENTENCEG_PlaySequentialSz(edict_t *entity, const char *szrootname, float volume, float attenuation, int flags, int pitch, int ipick, int freset);
|
||||
int SENTENCEG_GetIndex(const char *szrootname);
|
||||
int SENTENCEG_Lookup(const char *sample, char *sentencenum);
|
||||
|
||||
void TEXTURETYPE_Init();
|
||||
char TEXTURETYPE_Find(char *name);
|
||||
float TEXTURETYPE_PlaySound(TraceResult *ptr, Vector vecSrc, Vector vecEnd, int iBulletType);
|
||||
inline void UTIL_MakeVectorsPrivate(Vector vecAngles, float *p_vForward, float *p_vRight, float *p_vUp) { g_engfuncs.pfnAngleVectors(vecAngles, p_vForward, p_vRight, p_vUp); }
|
||||
|
||||
// NOTE: use EMIT_SOUND_DYN to set the pitch of a sound. Pitch of 100
|
||||
// is no pitch shift. Pitch > 100 up to 255 is a higher pitch, pitch < 100
|
||||
// down to 1 is a lower pitch. 150 to 70 is the realistic range.
|
||||
// EMIT_SOUND_DYN with pitch != 100 should be used sparingly, as it's not quite as
|
||||
// fast as EMIT_SOUND (the pitchshift mixer is not native coded).
|
||||
|
||||
void EMIT_SOUND_DYN(edict_t *entity, int channel, const char *sample, float volume, float attenuation,
|
||||
int flags, int pitch);
|
||||
|
||||
|
||||
inline void EMIT_SOUND(edict_t *entity, int channel, const char *sample, float volume, float attenuation)
|
||||
{
|
||||
EMIT_SOUND_DYN(entity, channel, sample, volume, attenuation, 0, PITCH_NORM);
|
||||
EMIT_SOUND_DYN2(entity, channel, sample, volume, attenuation, 0, PITCH_NORM);
|
||||
}
|
||||
|
||||
inline void STOP_SOUND(edict_t *entity, int channel, const char *sample)
|
||||
{
|
||||
EMIT_SOUND_DYN(entity, channel, sample, 0, 0, SND_STOP, PITCH_NORM);
|
||||
EMIT_SOUND_DYN2(entity, channel, sample, 0, 0, SND_STOP, PITCH_NORM);
|
||||
}
|
||||
|
||||
void EMIT_SOUND_SUIT(edict_t *entity, const char *sample);
|
||||
void EMIT_GROUPID_SUIT(edict_t *entity, int isentenceg);
|
||||
void EMIT_GROUPNAME_SUIT(edict_t *entity, const char *groupname);
|
||||
|
||||
#define PRECACHE_SOUND_ARRAY( a ) \
|
||||
{ for (int i = 0; i < ARRAYSIZE( a ); i++ ) PRECACHE_SOUND((char *) a [i]); }
|
||||
|
||||
#define EMIT_SOUND_ARRAY_DYN( chan, array ) \
|
||||
EMIT_SOUND_DYN ( ENT(pev), chan , array [ RANDOM_LONG(0,ARRAYSIZE( array )-1) ], 1.0, ATTN_NORM, 0, RANDOM_LONG(95,105) );
|
||||
|
||||
#define RANDOM_SOUND_ARRAY( array ) (array) [ RANDOM_LONG(0,ARRAYSIZE( (array) )-1) ]
|
||||
|
||||
#define PLAYBACK_EVENT( flags, who, index ) PLAYBACK_EVENT_FULL( flags, who, index, 0, (float *)&g_vecZero, (float *)&g_vecZero, 0.0, 0.0, 0, 0, 0, 0 );
|
||||
#define PLAYBACK_EVENT_DELAY( flags, who, index, delay ) PLAYBACK_EVENT_FULL( flags, who, index, delay, (float *)&g_vecZero, (float *)&g_vecZero, 0.0, 0.0, 0, 0, 0, 0 );
|
||||
|
||||
#define GROUP_OP_AND 0
|
||||
#define GROUP_OP_NAND 1
|
||||
|
||||
extern int g_groupmask;
|
||||
extern int g_groupop;
|
||||
|
||||
class UTIL_GroupTrace
|
||||
inline void UTIL_SetSize(entvars_t *pev, const Vector &vecMin, const Vector &vecMax)
|
||||
{
|
||||
public:
|
||||
UTIL_GroupTrace( int groupmask, int op );
|
||||
~UTIL_GroupTrace( void );
|
||||
SET_SIZE(ENT(pev), vecMin, vecMax);
|
||||
}
|
||||
|
||||
private:
|
||||
int m_oldgroupmask, m_oldgroupop;
|
||||
};
|
||||
inline void UTIL_SetOrigin(entvars_t *pev, const Vector &vecOrigin)
|
||||
{
|
||||
edict_t *ent = ENT(pev);
|
||||
|
||||
void UTIL_SetGroupTrace( int groupmask, int op );
|
||||
void UTIL_UnsetGroupTrace( void );
|
||||
if (ent != NULL)
|
||||
SET_ORIGIN(ent, vecOrigin);
|
||||
}
|
||||
|
||||
int UTIL_SharedRandomLong( unsigned int seed, int low, int high );
|
||||
float UTIL_SharedRandomFloat( unsigned int seed, float low, float high );
|
||||
inline void UTIL_TraceLine(const Vector &vecStart, const Vector &vecEnd, IGNORE_MONSTERS igmon, edict_t *pentIgnore, TraceResult *ptr)
|
||||
{
|
||||
TRACE_LINE(vecStart, vecEnd, (igmon == ignore_monsters), pentIgnore, ptr);
|
||||
}
|
||||
|
||||
float UTIL_WeaponTimeBase( void );
|
||||
extern char *UTIL_VarArgs(char *format, ...);
|
||||
extern void UTIL_LogPrintf(const char *fmt, ...);
|
||||
|
@ -1,113 +1,176 @@
|
||||
/***
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
* 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 product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
* 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
|
||||
|
||||
#ifndef VECTOR_H
|
||||
#define VECTOR_H
|
||||
|
||||
|
||||
//=========================================================
|
||||
// 2DVector - used for many pathfinding and many other
|
||||
// operations that are treated as planar rather than 3d.
|
||||
//=========================================================
|
||||
class Vector2D
|
||||
{
|
||||
class Vector2D {
|
||||
public:
|
||||
inline Vector2D(void): x(0.0), y(0.0) { }
|
||||
inline Vector2D(float X, float Y): x(0.0), y(0.0) { x = X; y = Y; }
|
||||
inline Vector2D operator+(const Vector2D& v) const { return Vector2D(x+v.x, y+v.y); }
|
||||
inline Vector2D operator-(const Vector2D& v) const { return Vector2D(x-v.x, y-v.y); }
|
||||
inline Vector2D operator*(float fl) const { return Vector2D(x*fl, y*fl); }
|
||||
inline Vector2D operator/(float fl) const { return Vector2D(x/fl, y/fl); }
|
||||
inline Vector2D() : x(), y() {}
|
||||
inline Vector2D(float X, float Y) : x(X), y(Y) {}
|
||||
inline Vector2D(const Vector2D &v) { *(int*)&x = *(int*)&v.x; *(int*)&y = *(int*)&v.y; }
|
||||
inline Vector2D operator+(const Vector2D &v) const { return Vector2D(x + v.x, y + v.y); }
|
||||
inline Vector2D operator-(const Vector2D &v) const { return Vector2D(x - v.x, y - v.y); }
|
||||
inline Vector2D operator*(float fl) const { return Vector2D(x * fl, y * fl); }
|
||||
inline Vector2D operator/(float fl) const { return Vector2D(x / fl, y / fl); }
|
||||
inline Vector2D operator/=(float fl) const { return Vector2D(x / fl, y / fl); }
|
||||
|
||||
inline float Length(void) const { return sqrt(x*x + y*y ); }
|
||||
inline float Length() const { return sqrt(x * x + y * y); }
|
||||
inline float LengthSquared() const { return (x * x + y * y); }
|
||||
|
||||
inline Vector2D Normalize ( void ) const
|
||||
operator float*() { return &x; }
|
||||
operator const float*() const { return &x; }
|
||||
|
||||
inline Vector2D Normalize() const
|
||||
{
|
||||
// Vector2D vec2;
|
||||
|
||||
float flLen = Length();
|
||||
if ( flLen == 0 )
|
||||
if (flLen == 0)
|
||||
return Vector2D(0, 0);
|
||||
|
||||
flLen = 1 / flLen;
|
||||
return Vector2D(x * flLen, y * flLen);
|
||||
}
|
||||
|
||||
inline bool IsLengthLessThan(float length) const { return (LengthSquared() < length * length); }
|
||||
inline bool IsLengthGreaterThan(float length) const { return (LengthSquared() > length * length); }
|
||||
inline float NormalizeInPlace()
|
||||
{
|
||||
return Vector2D( 0, 0 );
|
||||
float flLen = Length();
|
||||
if (flLen == 0)
|
||||
{
|
||||
x = 1; y = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
flLen = 1 / flLen;
|
||||
return Vector2D( x * flLen, y * flLen );
|
||||
}
|
||||
x *= flLen; y *= flLen;
|
||||
}
|
||||
|
||||
return flLen;
|
||||
}
|
||||
inline bool IsZero(float tolerance = 0.01f) const
|
||||
{
|
||||
return (x > -tolerance && x < tolerance &&
|
||||
y > -tolerance && y < tolerance);
|
||||
}
|
||||
|
||||
// Members
|
||||
vec_t x, y;
|
||||
};
|
||||
|
||||
inline float DotProduct(const Vector2D& a, const Vector2D& b) { return( a.x*b.x + a.y*b.y ); }
|
||||
inline Vector2D operator*(float fl, const Vector2D& v) { return v * fl; }
|
||||
inline float DotProduct(const Vector2D &a, const Vector2D &b) { return (a.x * b.x + a.y * b.y); }
|
||||
inline Vector2D operator*(float fl, const Vector2D &v) { return v * fl; }
|
||||
|
||||
//=========================================================
|
||||
// 3D Vector
|
||||
//=========================================================
|
||||
class Vector // same data-layout as engine's vec3_t,
|
||||
{ // which is a vec_t[3]
|
||||
// same data-layout as engine's vec3_t, which is a vec_t[3]
|
||||
class Vector {
|
||||
public:
|
||||
// Construction/destruction
|
||||
inline Vector(void): x(0.0), y(0.0), z(0.0) { }
|
||||
inline Vector(float X, float Y, float Z): x(0.0), y(0.0), z(0.0) { x = X; y = Y; z = Z; }
|
||||
//inline Vector(double X, double Y, double Z) { x = (float)X; y = (float)Y; z = (float)Z; }
|
||||
//inline Vector(int X, int Y, int Z) { x = (float)X; y = (float)Y; z = (float)Z; }
|
||||
inline Vector(const Vector& v): x(0.0), y(0.0), z(0.0) { x = v.x; y = v.y; z = v.z; }
|
||||
inline Vector(float rgfl[3]): x(0.0), y(0.0), z(0.0) { x = rgfl[0]; y = rgfl[1]; z = rgfl[2]; }
|
||||
inline Vector() : x(), y(), z() {}
|
||||
inline Vector(float X, float Y, float Z) : x(X), y(Y), z(Z) {}
|
||||
inline Vector(const Vector &v) { *(int*)&x = *(int*)&v.x; *(int*)&y = *(int*)&v.y; *(int*)&z = *(int*)&v.z; }
|
||||
inline Vector(const float rgfl[3]) { *(int*)&x = *(int*)&rgfl[0]; *(int*)&y = *(int*)&rgfl[1]; *(int*)&z = *(int*)&rgfl[2]; }
|
||||
|
||||
// Operators
|
||||
inline Vector operator-(void) const { return Vector(-x,-y,-z); }
|
||||
inline int operator==(const Vector& v) const { return x==v.x && y==v.y && z==v.z; }
|
||||
inline int operator!=(const Vector& v) const { return !(*this==v); }
|
||||
inline Vector operator+(const Vector& v) const { return Vector(x+v.x, y+v.y, z+v.z); }
|
||||
inline Vector operator-(const Vector& v) const { return Vector(x-v.x, y-v.y, z-v.z); }
|
||||
inline Vector operator*(float fl) const { return Vector(x*fl, y*fl, z*fl); }
|
||||
inline Vector operator/(float fl) const { return Vector(x/fl, y/fl, z/fl); }
|
||||
inline Vector operator-() const { return Vector(-x, -y, -z); }
|
||||
inline int operator==(const Vector &v) const { return x == v.x && y == v.y && z == v.z; }
|
||||
inline int operator!=(const Vector &v) const { return !(*this == v); }
|
||||
inline Vector operator+(const Vector &v) const { return Vector(x + v.x, y + v.y, z + v.z); }
|
||||
inline Vector operator-(const Vector &v) const { return Vector(x - v.x, y - v.y, z - v.z); }
|
||||
inline Vector operator*(float fl) const { return Vector(x * fl, y * fl, z * fl); }
|
||||
inline Vector operator/(float fl) const { return Vector(x / fl, y / fl, z / fl); }
|
||||
inline Vector operator/=(float fl) const{ return Vector(x / fl, y / fl, z / fl); }
|
||||
|
||||
// Methods
|
||||
inline void CopyToArray(float* rgfl) const { rgfl[0] = x, rgfl[1] = y, rgfl[2] = z; }
|
||||
inline float Length(void) const { return sqrt(x*x + y*y + z*z); }
|
||||
operator float *() { return &x; } // Vectors will now automatically convert to float * when needed
|
||||
operator const float *() const { return &x; } // Vectors will now automatically convert to float * when needed
|
||||
inline Vector Normalize(void) const
|
||||
inline void CopyToArray(float *rgfl) const { *(int*)&rgfl[0] = *(int*)&x; *(int*)&rgfl[1] = *(int*)&y; *(int*)&rgfl[2] = *(int*)&z; }
|
||||
inline float Length() const { return sqrt(x * x + y * y + z * z); }
|
||||
inline float LengthSquared() const { return (x * x + y * y + z * z); }
|
||||
|
||||
operator float*() { return &x; } // Vectors will now automatically convert to float * when needed
|
||||
operator const float*() const { return &x; } // Vectors will now automatically convert to float * when needed
|
||||
|
||||
inline Vector Normalize()
|
||||
{
|
||||
float flLen = Length();
|
||||
if (flLen == 0) return Vector(0,0,1); // ????
|
||||
if (flLen == 0)
|
||||
return Vector(0, 0, 1);
|
||||
|
||||
flLen = 1 / flLen;
|
||||
return Vector(x * flLen, y * flLen, z * flLen);
|
||||
}
|
||||
|
||||
inline Vector2D Make2D ( void ) const
|
||||
inline Vector2D Make2D() const
|
||||
{
|
||||
Vector2D Vec2;
|
||||
|
||||
Vec2.x = x;
|
||||
Vec2.y = y;
|
||||
|
||||
*(int*)&Vec2.x = *(int*)&x;
|
||||
*(int*)&Vec2.y = *(int*)&y;
|
||||
return Vec2;
|
||||
}
|
||||
inline float Length2D(void) const { return sqrt(x*x + y*y); }
|
||||
|
||||
inline float Length2D() const { return sqrt(x * x + y * y); }
|
||||
|
||||
inline bool IsLengthLessThan(float length) const { return (LengthSquared() < length * length); }
|
||||
inline bool IsLengthGreaterThan(float length) const { return (LengthSquared() > length * length); }
|
||||
|
||||
inline float NormalizeInPlace()
|
||||
{
|
||||
float flLen = Length();
|
||||
if (flLen == 0)
|
||||
{
|
||||
x = 0; y = 0; z = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
flLen = 1 / flLen;
|
||||
x *= flLen; y *= flLen; z *= flLen;
|
||||
}
|
||||
|
||||
return flLen;
|
||||
}
|
||||
inline bool IsZero(float tolerance = 0.01f) const
|
||||
{
|
||||
return (x > -tolerance && x < tolerance &&
|
||||
y > -tolerance && y < tolerance &&
|
||||
z > -tolerance && z < tolerance);
|
||||
}
|
||||
|
||||
// Members
|
||||
vec_t x, y, z;
|
||||
};
|
||||
|
||||
inline Vector operator*(float fl, const Vector& v) { return v * fl; }
|
||||
inline float DotProduct(const Vector& a, const Vector& b) { return(a.x*b.x+a.y*b.y+a.z*b.z); }
|
||||
inline Vector CrossProduct(const Vector& a, const Vector& b) { return Vector( a.y*b.z - a.z*b.y, a.z*b.x - a.x*b.z, a.x*b.y - a.y*b.x ); }
|
||||
inline Vector operator*(float fl, const Vector &v) { return v * fl; }
|
||||
inline float DotProduct(const Vector &a, const Vector &b) { return (a.x * b.x + a.y * b.y + a.z * b.z); }
|
||||
inline float DotProduct2D(const Vector &a, const Vector &b) { return (a.x * b.x + a.y * b.y); }
|
||||
inline Vector CrossProduct(const Vector &a, const Vector &b) { return Vector(a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x); }
|
||||
|
||||
#endif
|
||||
template<class T>
|
||||
inline void SWAP(T &first, T &second)
|
||||
{
|
||||
T temp = first;
|
||||
first = second;
|
||||
second = temp;
|
||||
}
|
||||
|
53
metamod/extra/example/include/hlsdk/dlls/vehicle.h
Normal file
53
metamod/extra/example/include/hlsdk/dlls/vehicle.h
Normal file
@ -0,0 +1,53 @@
|
||||
/*
|
||||
*
|
||||
* 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 VEHICLE_SPEED0_ACCELERATION 0.005000000000000000
|
||||
#define VEHICLE_SPEED1_ACCELERATION 0.002142857142857143
|
||||
#define VEHICLE_SPEED2_ACCELERATION 0.003333333333333334
|
||||
#define VEHICLE_SPEED3_ACCELERATION 0.004166666666666667
|
||||
#define VEHICLE_SPEED4_ACCELERATION 0.004000000000000000
|
||||
#define VEHICLE_SPEED5_ACCELERATION 0.003800000000000000
|
||||
#define VEHICLE_SPEED6_ACCELERATION 0.004500000000000000
|
||||
#define VEHICLE_SPEED7_ACCELERATION 0.004250000000000000
|
||||
#define VEHICLE_SPEED8_ACCELERATION 0.002666666666666667
|
||||
#define VEHICLE_SPEED9_ACCELERATION 0.002285714285714286
|
||||
#define VEHICLE_SPEED10_ACCELERATION 0.001875000000000000
|
||||
#define VEHICLE_SPEED11_ACCELERATION 0.001444444444444444
|
||||
#define VEHICLE_SPEED12_ACCELERATION 0.001200000000000000
|
||||
#define VEHICLE_SPEED13_ACCELERATION 0.000916666666666666
|
||||
|
||||
#define VEHICLE_STARTPITCH 60
|
||||
#define VEHICLE_MAXPITCH 200
|
||||
#define VEHICLE_MAXSPEED 1500
|
||||
|
||||
class CFuncVehicleControls: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
};
|
File diff suppressed because it is too large
Load Diff
417
metamod/extra/example/include/hlsdk/dlls/weapontype.h
Normal file
417
metamod/extra/example/include/hlsdk/dlls/weapontype.h
Normal file
@ -0,0 +1,417 @@
|
||||
/*
|
||||
*
|
||||
* 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
|
||||
|
||||
enum WeaponIdType
|
||||
{
|
||||
WEAPON_NONE,
|
||||
WEAPON_P228,
|
||||
WEAPON_GLOCK,
|
||||
WEAPON_SCOUT,
|
||||
WEAPON_HEGRENADE,
|
||||
WEAPON_XM1014,
|
||||
WEAPON_C4,
|
||||
WEAPON_MAC10,
|
||||
WEAPON_AUG,
|
||||
WEAPON_SMOKEGRENADE,
|
||||
WEAPON_ELITE,
|
||||
WEAPON_FIVESEVEN,
|
||||
WEAPON_UMP45,
|
||||
WEAPON_SG550,
|
||||
WEAPON_GALIL,
|
||||
WEAPON_FAMAS,
|
||||
WEAPON_USP,
|
||||
WEAPON_GLOCK18,
|
||||
WEAPON_AWP,
|
||||
WEAPON_MP5N,
|
||||
WEAPON_M249,
|
||||
WEAPON_M3,
|
||||
WEAPON_M4A1,
|
||||
WEAPON_TMP,
|
||||
WEAPON_G3SG1,
|
||||
WEAPON_FLASHBANG,
|
||||
WEAPON_DEAGLE,
|
||||
WEAPON_SG552,
|
||||
WEAPON_AK47,
|
||||
WEAPON_KNIFE,
|
||||
WEAPON_P90,
|
||||
WEAPON_SHIELDGUN = 99
|
||||
};
|
||||
|
||||
enum AutoBuyClassType
|
||||
{
|
||||
AUTOBUYCLASS_NONE = 0,
|
||||
AUTOBUYCLASS_PRIMARY = (1 << 0),
|
||||
AUTOBUYCLASS_SECONDARY = (1 << 1),
|
||||
AUTOBUYCLASS_AMMO = (1 << 2),
|
||||
AUTOBUYCLASS_ARMOR = (1 << 3),
|
||||
AUTOBUYCLASS_DEFUSER = (1 << 4),
|
||||
AUTOBUYCLASS_PISTOL = (1 << 5),
|
||||
AUTOBUYCLASS_SMG = (1 << 6),
|
||||
AUTOBUYCLASS_RIFLE = (1 << 7),
|
||||
AUTOBUYCLASS_SNIPERRIFLE = (1 << 8),
|
||||
AUTOBUYCLASS_SHOTGUN = (1 << 9),
|
||||
AUTOBUYCLASS_MACHINEGUN = (1 << 10),
|
||||
AUTOBUYCLASS_GRENADE = (1 << 11),
|
||||
AUTOBUYCLASS_NIGHTVISION = (1 << 12),
|
||||
AUTOBUYCLASS_SHIELD = (1 << 13),
|
||||
};
|
||||
|
||||
enum AmmoCostType
|
||||
{
|
||||
AMMO_338MAG_PRICE = 125,
|
||||
AMMO_357SIG_PRICE = 50,
|
||||
AMMO_45ACP_PRICE = 25,
|
||||
AMMO_50AE_PRICE = 40,
|
||||
AMMO_556MM_PRICE = 60,
|
||||
AMMO_57MM_PRICE = 50,
|
||||
AMMO_762MM_PRICE = 80,
|
||||
AMMO_9MM_PRICE = 20,
|
||||
AMMO_BUCKSHOT_PRICE = 65,
|
||||
};
|
||||
|
||||
enum WeaponCostType
|
||||
{
|
||||
AK47_PRICE = 2500,
|
||||
AWP_PRICE = 4750,
|
||||
DEAGLE_PRICE = 650,
|
||||
G3SG1_PRICE = 5000,
|
||||
SG550_PRICE = 4200,
|
||||
GLOCK18_PRICE = 400,
|
||||
M249_PRICE = 5750,
|
||||
M3_PRICE = 1700,
|
||||
M4A1_PRICE = 3100,
|
||||
AUG_PRICE = 3500,
|
||||
MP5NAVY_PRICE = 1500,
|
||||
P228_PRICE = 600,
|
||||
P90_PRICE = 2350,
|
||||
UMP45_PRICE = 1700,
|
||||
MAC10_PRICE = 1400,
|
||||
SCOUT_PRICE = 2750,
|
||||
SG552_PRICE = 3500,
|
||||
TMP_PRICE = 1250,
|
||||
USP_PRICE = 500,
|
||||
ELITE_PRICE = 800,
|
||||
FIVESEVEN_PRICE = 750,
|
||||
XM1014_PRICE = 3000,
|
||||
GALIL_PRICE = 2000,
|
||||
FAMAS_PRICE = 2250,
|
||||
SHIELDGUN_PRICE = 2200,
|
||||
};
|
||||
|
||||
enum WeaponState
|
||||
{
|
||||
WPNSTATE_USP_SILENCED = (1 << 0),
|
||||
WPNSTATE_GLOCK18_BURST_MODE = (1 << 1),
|
||||
WPNSTATE_M4A1_SILENCED = (1 << 2),
|
||||
WPNSTATE_ELITE_LEFT = (1 << 3),
|
||||
WPNSTATE_FAMAS_BURST_MODE = (1 << 4),
|
||||
WPNSTATE_SHIELD_DRAWN = (1 << 5),
|
||||
};
|
||||
|
||||
// custom enum
|
||||
// the default amount of ammo that comes with each gun when it spawns
|
||||
enum ClipGiveDefault
|
||||
{
|
||||
P228_DEFAULT_GIVE = 13,
|
||||
GLOCK18_DEFAULT_GIVE = 20,
|
||||
SCOUT_DEFAULT_GIVE = 10,
|
||||
HEGRENADE_DEFAULT_GIVE = 1,
|
||||
XM1014_DEFAULT_GIVE = 7,
|
||||
C4_DEFAULT_GIVE = 1,
|
||||
MAC10_DEFAULT_GIVE = 30,
|
||||
AUG_DEFAULT_GIVE = 30,
|
||||
SMOKEGRENADE_DEFAULT_GIVE = 1,
|
||||
ELITE_DEFAULT_GIVE = 30,
|
||||
FIVESEVEN_DEFAULT_GIVE = 20,
|
||||
UMP45_DEFAULT_GIVE = 25,
|
||||
SG550_DEFAULT_GIVE = 30,
|
||||
GALIL_DEFAULT_GIVE = 35,
|
||||
FAMAS_DEFAULT_GIVE = 25,
|
||||
USP_DEFAULT_GIVE = 12,
|
||||
AWP_DEFAULT_GIVE = 10,
|
||||
MP5NAVY_DEFAULT_GIVE = 30,
|
||||
M249_DEFAULT_GIVE = 100,
|
||||
M3_DEFAULT_GIVE = 8,
|
||||
M4A1_DEFAULT_GIVE = 30,
|
||||
TMP_DEFAULT_GIVE = 30,
|
||||
G3SG1_DEFAULT_GIVE = 20,
|
||||
FLASHBANG_DEFAULT_GIVE = 1,
|
||||
DEAGLE_DEFAULT_GIVE = 7,
|
||||
SG552_DEFAULT_GIVE = 30,
|
||||
AK47_DEFAULT_GIVE = 30,
|
||||
/*KNIFE_DEFAULT_GIVE = 1,*/
|
||||
P90_DEFAULT_GIVE = 50,
|
||||
};
|
||||
|
||||
enum ClipSizeType
|
||||
{
|
||||
P228_MAX_CLIP = 13,
|
||||
GLOCK18_MAX_CLIP = 20,
|
||||
SCOUT_MAX_CLIP = 10,
|
||||
XM1014_MAX_CLIP = 7,
|
||||
MAC10_MAX_CLIP = 30,
|
||||
AUG_MAX_CLIP = 30,
|
||||
ELITE_MAX_CLIP = 30,
|
||||
FIVESEVEN_MAX_CLIP = 20,
|
||||
UMP45_MAX_CLIP = 25,
|
||||
SG550_MAX_CLIP = 30,
|
||||
GALIL_MAX_CLIP = 35,
|
||||
FAMAS_MAX_CLIP = 25,
|
||||
USP_MAX_CLIP = 12,
|
||||
AWP_MAX_CLIP = 10,
|
||||
MP5N_MAX_CLIP = 30,
|
||||
M249_MAX_CLIP = 100,
|
||||
M3_MAX_CLIP = 8,
|
||||
M4A1_MAX_CLIP = 30,
|
||||
TMP_MAX_CLIP = 30,
|
||||
G3SG1_MAX_CLIP = 20,
|
||||
DEAGLE_MAX_CLIP = 7,
|
||||
SG552_MAX_CLIP = 30,
|
||||
AK47_MAX_CLIP = 30,
|
||||
P90_MAX_CLIP = 50,
|
||||
};
|
||||
|
||||
enum WeightWeapon
|
||||
{
|
||||
P228_WEIGHT = 5,
|
||||
GLOCK18_WEIGHT = 5,
|
||||
SCOUT_WEIGHT = 30,
|
||||
HEGRENADE_WEIGHT = 2,
|
||||
XM1014_WEIGHT = 20,
|
||||
C4_WEIGHT = 3,
|
||||
MAC10_WEIGHT = 25,
|
||||
AUG_WEIGHT = 25,
|
||||
SMOKEGRENADE_WEIGHT = 1,
|
||||
ELITE_WEIGHT = 5,
|
||||
FIVESEVEN_WEIGHT = 5,
|
||||
UMP45_WEIGHT = 25,
|
||||
SG550_WEIGHT = 20,
|
||||
GALIL_WEIGHT = 25,
|
||||
FAMAS_WEIGHT = 75,
|
||||
USP_WEIGHT = 5,
|
||||
AWP_WEIGHT = 30,
|
||||
MP5NAVY_WEIGHT = 25,
|
||||
M249_WEIGHT = 25,
|
||||
M3_WEIGHT = 20,
|
||||
M4A1_WEIGHT = 25,
|
||||
TMP_WEIGHT = 25,
|
||||
G3SG1_WEIGHT = 20,
|
||||
FLASHBANG_WEIGHT = 1,
|
||||
DEAGLE_WEIGHT = 7,
|
||||
SG552_WEIGHT = 25,
|
||||
AK47_WEIGHT = 25,
|
||||
P90_WEIGHT = 26,
|
||||
KNIFE_WEIGHT = 0,
|
||||
};
|
||||
|
||||
enum MaxAmmoType
|
||||
{
|
||||
MAX_AMMO_BUCKSHOT = 32,
|
||||
MAX_AMMO_9MM = 120,
|
||||
MAX_AMMO_556NATO = 90,
|
||||
MAX_AMMO_556NATOBOX = 200,
|
||||
MAX_AMMO_762NATO = 90,
|
||||
MAX_AMMO_45ACP = 100,
|
||||
MAX_AMMO_50AE = 35,
|
||||
MAX_AMMO_338MAGNUM = 30,
|
||||
MAX_AMMO_57MM = 100,
|
||||
MAX_AMMO_357SIG = 52,
|
||||
|
||||
// custom
|
||||
MAX_AMMO_SMOKEGRENADE = 1,
|
||||
MAX_AMMO_HEGRENADE = 1,
|
||||
MAX_AMMO_FLASHBANG = 2,
|
||||
};
|
||||
|
||||
enum AmmoType
|
||||
{
|
||||
AMMO_NONE,
|
||||
AMMO_338MAGNUM,
|
||||
AMMO_762NATO,
|
||||
AMMO_556NATOBOX,
|
||||
AMMO_556NATO,
|
||||
AMMO_BUCKSHOT,
|
||||
AMMO_45ACP,
|
||||
AMMO_57MM,
|
||||
AMMO_50AE,
|
||||
AMMO_357SIG,
|
||||
AMMO_9MM,
|
||||
AMMO_FLASHBANG,
|
||||
AMMO_HEGRENADE,
|
||||
AMMO_SMOKEGRENADE,
|
||||
AMMO_C4,
|
||||
|
||||
AMMO_MAX_TYPES
|
||||
};
|
||||
|
||||
enum WeaponClassType
|
||||
{
|
||||
WEAPONCLASS_NONE,
|
||||
WEAPONCLASS_KNIFE,
|
||||
WEAPONCLASS_PISTOL,
|
||||
WEAPONCLASS_GRENADE,
|
||||
WEAPONCLASS_SUBMACHINEGUN,
|
||||
WEAPONCLASS_SHOTGUN,
|
||||
WEAPONCLASS_MACHINEGUN,
|
||||
WEAPONCLASS_RIFLE,
|
||||
WEAPONCLASS_SNIPERRIFLE,
|
||||
WEAPONCLASS_MAX,
|
||||
};
|
||||
|
||||
enum AmmoBuyAmount
|
||||
{
|
||||
AMMO_338MAG_BUY = 10,
|
||||
AMMO_357SIG_BUY = 13,
|
||||
AMMO_45ACP_BUY = 12,
|
||||
AMMO_50AE_BUY = 7,
|
||||
AMMO_556NATO_BUY = 30,
|
||||
AMMO_556NATOBOX_BUY = 30,
|
||||
AMMO_57MM_BUY = 50,
|
||||
AMMO_762NATO_BUY = 30,
|
||||
AMMO_9MM_BUY = 30,
|
||||
AMMO_BUCKSHOT_BUY = 8,
|
||||
};
|
||||
|
||||
enum ItemCostType
|
||||
{
|
||||
ASSAULTSUIT_PRICE = 1000,
|
||||
FLASHBANG_PRICE = 200,
|
||||
HEGRENADE_PRICE = 300,
|
||||
SMOKEGRENADE_PRICE = 300,
|
||||
KEVLAR_PRICE = 650,
|
||||
HELMET_PRICE = 350,
|
||||
NVG_PRICE = 1250,
|
||||
DEFUSEKIT_PRICE = 200,
|
||||
};
|
||||
|
||||
enum shieldgun_e
|
||||
{
|
||||
SHIELDGUN_IDLE,
|
||||
SHIELDGUN_SHOOT1,
|
||||
SHIELDGUN_SHOOT2,
|
||||
SHIELDGUN_SHOOT_EMPTY,
|
||||
SHIELDGUN_RELOAD,
|
||||
SHIELDGUN_DRAW,
|
||||
SHIELDGUN_DRAWN_IDLE,
|
||||
SHIELDGUN_UP,
|
||||
SHIELDGUN_DOWN,
|
||||
};
|
||||
|
||||
// custom
|
||||
enum shieldgren_e
|
||||
{
|
||||
SHIELDREN_IDLE = 4,
|
||||
SHIELDREN_UP,
|
||||
SHIELDREN_DOWN
|
||||
};
|
||||
|
||||
enum InventorySlotType
|
||||
{
|
||||
NONE_SLOT,
|
||||
PRIMARY_WEAPON_SLOT,
|
||||
PISTOL_SLOT,
|
||||
KNIFE_SLOT,
|
||||
GRENADE_SLOT,
|
||||
C4_SLOT,
|
||||
};
|
||||
|
||||
enum Bullet
|
||||
{
|
||||
BULLET_NONE,
|
||||
BULLET_PLAYER_9MM,
|
||||
BULLET_PLAYER_MP5,
|
||||
BULLET_PLAYER_357,
|
||||
BULLET_PLAYER_BUCKSHOT,
|
||||
BULLET_PLAYER_CROWBAR,
|
||||
BULLET_MONSTER_9MM,
|
||||
BULLET_MONSTER_MP5,
|
||||
BULLET_MONSTER_12MM,
|
||||
BULLET_PLAYER_45ACP,
|
||||
BULLET_PLAYER_338MAG,
|
||||
BULLET_PLAYER_762MM,
|
||||
BULLET_PLAYER_556MM,
|
||||
BULLET_PLAYER_50AE,
|
||||
BULLET_PLAYER_57MM,
|
||||
BULLET_PLAYER_357SIG,
|
||||
};
|
||||
|
||||
struct WeaponStruct
|
||||
{
|
||||
int m_type;
|
||||
int m_price;
|
||||
int m_side;
|
||||
int m_slot;
|
||||
int m_ammoPrice;
|
||||
};
|
||||
|
||||
struct AutoBuyInfoStruct
|
||||
{
|
||||
AutoBuyClassType m_class;
|
||||
char *m_command;
|
||||
char *m_classname;
|
||||
};
|
||||
|
||||
struct WeaponAliasInfo
|
||||
{
|
||||
char *alias;
|
||||
WeaponIdType id;
|
||||
};
|
||||
|
||||
struct WeaponBuyAliasInfo
|
||||
{
|
||||
char *alias;
|
||||
WeaponIdType id;
|
||||
char *failName;
|
||||
};
|
||||
|
||||
struct WeaponClassAliasInfo
|
||||
{
|
||||
char *alias;
|
||||
WeaponClassType id;
|
||||
};
|
||||
|
||||
struct WeaponInfoStruct
|
||||
{
|
||||
int id;
|
||||
int cost;
|
||||
int clipCost;
|
||||
int buyClipSize;
|
||||
int gunClipSize;
|
||||
int maxRounds;
|
||||
int ammoType;
|
||||
char *entityName;
|
||||
const char *ammoName;
|
||||
};
|
||||
|
||||
struct WeaponSlotInfo
|
||||
{
|
||||
WeaponIdType id;
|
||||
InventorySlotType slot;
|
||||
const char *weaponName;
|
||||
};
|
598
metamod/extra/example/include/hlsdk/dlls/wpn_shared.h
Normal file
598
metamod/extra/example/include/hlsdk/dlls/wpn_shared.h
Normal file
@ -0,0 +1,598 @@
|
||||
#pragma once
|
||||
|
||||
//AK47
|
||||
#define AK47_MAX_SPEED 221
|
||||
#define AK47_DAMAGE 36
|
||||
#define AK47_RANGE_MODIFER 0.98
|
||||
#define AK47_RELOAD_TIME 2.45
|
||||
|
||||
enum ak47_e
|
||||
{
|
||||
AK47_IDLE1,
|
||||
AK47_RELOAD,
|
||||
AK47_DRAW,
|
||||
AK47_SHOOT1,
|
||||
AK47_SHOOT2,
|
||||
AK47_SHOOT3
|
||||
};
|
||||
|
||||
|
||||
|
||||
//AUG
|
||||
#define AUG_MAX_SPEED 240
|
||||
#define AUG_DAMAGE 32
|
||||
#define AUG_RANGE_MODIFER 0.96
|
||||
#define AUG_RELOAD_TIME 3.3
|
||||
|
||||
enum aug_e
|
||||
{
|
||||
AUG_IDLE1,
|
||||
AUG_RELOAD,
|
||||
AUG_DRAW,
|
||||
AUG_SHOOT1,
|
||||
AUG_SHOOT2,
|
||||
AUG_SHOOT3
|
||||
};
|
||||
|
||||
|
||||
|
||||
//AWP
|
||||
#define AWP_MAX_SPEED 210
|
||||
#define AWP_MAX_SPEED_ZOOM 150
|
||||
#define AWP_DAMAGE 115
|
||||
#define AWP_RANGE_MODIFER 0.99
|
||||
#define AWP_RELOAD_TIME 2.5
|
||||
|
||||
enum awp_e
|
||||
{
|
||||
AWP_IDLE,
|
||||
AWP_SHOOT,
|
||||
AWP_SHOOT2,
|
||||
AWP_SHOOT3,
|
||||
AWP_RELOAD,
|
||||
AWP_DRAW,
|
||||
};
|
||||
|
||||
|
||||
|
||||
//C4
|
||||
#define C4_MAX_AMMO 1
|
||||
#define C4_MAX_SPEED 250.0
|
||||
#define C4_ARMING_ON_TIME 3.0
|
||||
|
||||
enum c4_e
|
||||
{
|
||||
C4_IDLE1,
|
||||
C4_DRAW,
|
||||
C4_DROP,
|
||||
C4_ARM
|
||||
};
|
||||
|
||||
|
||||
|
||||
//Deagle
|
||||
#define DEAGLE_MAX_SPEED 250
|
||||
#define DEAGLE_DAMAGE 54
|
||||
#define DEAGLE_RANGE_MODIFER 0.81
|
||||
#define DEAGLE_RELOAD_TIME 2.2
|
||||
|
||||
enum deagle_e
|
||||
{
|
||||
DEAGLE_IDLE1,
|
||||
DEAGLE_SHOOT1,
|
||||
DEAGLE_SHOOT2,
|
||||
DEAGLE_SHOOT_EMPTY,
|
||||
DEAGLE_RELOAD,
|
||||
DEAGLE_DRAW
|
||||
};
|
||||
|
||||
|
||||
|
||||
//Elites
|
||||
#define ELITE_MAX_SPEED 250
|
||||
#define ELITE_RELOAD_TIME 4.5
|
||||
#define ELITE_DAMAGE 36
|
||||
#define ELITE_RANGE_MODIFER 0.75
|
||||
|
||||
enum elite_e
|
||||
{
|
||||
ELITE_IDLE,
|
||||
ELITE_IDLE_LEFTEMPTY,
|
||||
ELITE_SHOOTLEFT1,
|
||||
ELITE_SHOOTLEFT2,
|
||||
ELITE_SHOOTLEFT3,
|
||||
ELITE_SHOOTLEFT4,
|
||||
ELITE_SHOOTLEFT5,
|
||||
ELITE_SHOOTLEFTLAST,
|
||||
ELITE_SHOOTRIGHT1,
|
||||
ELITE_SHOOTRIGHT2,
|
||||
ELITE_SHOOTRIGHT3,
|
||||
ELITE_SHOOTRIGHT4,
|
||||
ELITE_SHOOTRIGHT5,
|
||||
ELITE_SHOOTRIGHTLAST,
|
||||
ELITE_RELOAD,
|
||||
ELITE_DRAW
|
||||
};
|
||||
|
||||
|
||||
|
||||
//Famas
|
||||
#define FAMAS_MAX_SPEED 240
|
||||
#define FAMAS_RELOAD_TIME 3.3
|
||||
#define FAMAS_DAMAGE 30
|
||||
#define FAMAS_DAMAGE_BURST 34
|
||||
#define FAMAS_RANGE_MODIFER 0.96
|
||||
|
||||
enum famas_e
|
||||
{
|
||||
FAMAS_IDLE1,
|
||||
FAMAS_RELOAD,
|
||||
FAMAS_DRAW,
|
||||
FAMAS_SHOOT1,
|
||||
FAMAS_SHOOT2,
|
||||
FAMAS_SHOOT3
|
||||
};
|
||||
|
||||
|
||||
|
||||
//Fiveseven
|
||||
#define FIVESEVEN_MAX_SPEED 250
|
||||
#define FIVESEVEN_DAMAGE 20
|
||||
#define FIVESEVEN_RANGE_MODIFER 0.885
|
||||
#define FIVESEVEN_RELOAD_TIME 2.7
|
||||
|
||||
enum fiveseven_e
|
||||
{
|
||||
FIVESEVEN_IDLE,
|
||||
FIVESEVEN_SHOOT1,
|
||||
FIVESEVEN_SHOOT2,
|
||||
FIVESEVEN_SHOOT_EMPTY,
|
||||
FIVESEVEN_RELOAD,
|
||||
FIVESEVEN_DRAW
|
||||
};
|
||||
|
||||
|
||||
|
||||
//Flashbang
|
||||
#define FLASHBANG_MAX_SPEED 250
|
||||
#define FLASHBANG_MAX_SPEED_SHIELD 180
|
||||
|
||||
enum flashbang_e
|
||||
{
|
||||
FLASHBANG_IDLE,
|
||||
FLASHBANG_PULLPIN,
|
||||
FLASHBANG_THROW,
|
||||
FLASHBANG_DRAW
|
||||
};
|
||||
|
||||
|
||||
|
||||
//g3sg1
|
||||
#define G3SG1_MAX_SPEED 210
|
||||
#define G3SG1_MAX_SPEED_ZOOM 150
|
||||
#define G3SG1_DAMAGE 80
|
||||
#define G3SG1_RANGE_MODIFER 0.98
|
||||
#define G3SG1_RELOAD_TIME 3.5
|
||||
|
||||
enum g3sg1_e
|
||||
{
|
||||
G3SG1_IDLE,
|
||||
G3SG1_SHOOT,
|
||||
G3SG1_SHOOT2,
|
||||
G3SG1_RELOAD,
|
||||
G3SG1_DRAW
|
||||
};
|
||||
|
||||
|
||||
|
||||
//galil
|
||||
#define GALIL_MAX_SPEED 240
|
||||
#define GALIL_DAMAGE 30
|
||||
#define GALIL_RANGE_MODIFER 0.98
|
||||
#define GALIL_RELOAD_TIME 2.45
|
||||
|
||||
enum galil_e
|
||||
{
|
||||
GALIL_IDLE1,
|
||||
GALIL_RELOAD,
|
||||
GALIL_DRAW,
|
||||
GALIL_SHOOT1,
|
||||
GALIL_SHOOT2,
|
||||
GALIL_SHOOT3
|
||||
};
|
||||
|
||||
|
||||
|
||||
//glock18
|
||||
#define GLOCK18_MAX_SPEED 250
|
||||
#define GLOCK18_DAMAGE 25
|
||||
#define GLOCK18_RANGE_MODIFER 0.75
|
||||
#define GLOCK18_RELOAD_TIME 2.2
|
||||
|
||||
enum glock18_e
|
||||
{
|
||||
GLOCK18_IDLE1,
|
||||
GLOCK18_IDLE2,
|
||||
GLOCK18_IDLE3,
|
||||
GLOCK18_SHOOT,
|
||||
GLOCK18_SHOOT2,
|
||||
GLOCK18_SHOOT3,
|
||||
GLOCK18_SHOOT_EMPTY,
|
||||
GLOCK18_RELOAD,
|
||||
GLOCK18_DRAW,
|
||||
GLOCK18_HOLSTER,
|
||||
GLOCK18_ADD_SILENCER,
|
||||
GLOCK18_DRAW2,
|
||||
GLOCK18_RELOAD2
|
||||
};
|
||||
|
||||
enum glock18_shield_e
|
||||
{
|
||||
GLOCK18_SHIELD_IDLE1,
|
||||
GLOCK18_SHIELD_SHOOT,
|
||||
GLOCK18_SHIELD_SHOOT2,
|
||||
GLOCK18_SHIELD_SHOOT_EMPTY,
|
||||
GLOCK18_SHIELD_RELOAD,
|
||||
GLOCK18_SHIELD_DRAW,
|
||||
GLOCK18_SHIELD_IDLE,
|
||||
GLOCK18_SHIELD_UP,
|
||||
GLOCK18_SHIELD_DOWN
|
||||
};
|
||||
|
||||
|
||||
|
||||
//hegrenade
|
||||
#define HEGRENADE_MAX_SPEED 250
|
||||
#define HEGRENADE_MAX_SPEED_SHIELD 180
|
||||
|
||||
enum hegrenade_e
|
||||
{
|
||||
HEGRENADE_IDLE,
|
||||
HEGRENADE_PULLPIN,
|
||||
HEGRENADE_THROW,
|
||||
HEGRENADE_DRAW
|
||||
};
|
||||
|
||||
|
||||
|
||||
//knife
|
||||
#define KNIFE_BODYHIT_VOLUME 128
|
||||
#define KNIFE_WALLHIT_VOLUME 512
|
||||
#define KNIFE_MAX_SPEED 250
|
||||
#define KNIFE_MAX_SPEED_SHIELD 180
|
||||
|
||||
enum knife_e
|
||||
{
|
||||
KNIFE_IDLE,
|
||||
KNIFE_ATTACK1HIT,
|
||||
KNIFE_ATTACK2HIT,
|
||||
KNIFE_DRAW,
|
||||
KNIFE_STABHIT,
|
||||
KNIFE_STABMISS,
|
||||
KNIFE_MIDATTACK1HIT,
|
||||
KNIFE_MIDATTACK2HIT
|
||||
};
|
||||
|
||||
enum knife_shield_e
|
||||
{
|
||||
KNIFE_SHIELD_IDLE,
|
||||
KNIFE_SHIELD_SLASH,
|
||||
KNIFE_SHIELD_ATTACKHIT,
|
||||
KNIFE_SHIELD_DRAW,
|
||||
KNIFE_SHIELD_UPIDLE,
|
||||
KNIFE_SHIELD_UP,
|
||||
KNIFE_SHIELD_DOWN
|
||||
};
|
||||
|
||||
|
||||
|
||||
//m3
|
||||
#define M3_MAX_SPEED 230
|
||||
#define M3_CONE_VECTOR Vector(0.0675, 0.0675, 0.0) // special shotgun spreads
|
||||
|
||||
enum m3_e
|
||||
{
|
||||
M3_IDLE,
|
||||
M3_FIRE1,
|
||||
M3_FIRE2,
|
||||
M3_RELOAD,
|
||||
M3_PUMP,
|
||||
M3_START_RELOAD,
|
||||
M3_DRAW,
|
||||
M3_HOLSTER
|
||||
};
|
||||
|
||||
|
||||
|
||||
//m4a1
|
||||
#define M4A1_MAX_SPEED 230
|
||||
#define M4A1_DAMAGE 32
|
||||
#define M4A1_DAMAGE_SIL 33
|
||||
#define M4A1_RANGE_MODIFER 0.97
|
||||
#define M4A1_RANGE_MODIFER_SIL 0.95
|
||||
#define M4A1_RELOAD_TIME 3.05
|
||||
|
||||
enum m4a1_e
|
||||
{
|
||||
M4A1_IDLE,
|
||||
M4A1_SHOOT1,
|
||||
M4A1_SHOOT2,
|
||||
M4A1_SHOOT3,
|
||||
M4A1_RELOAD,
|
||||
M4A1_DRAW,
|
||||
M4A1_ATTACH_SILENCER,
|
||||
M4A1_UNSIL_IDLE,
|
||||
M4A1_UNSIL_SHOOT1,
|
||||
M4A1_UNSIL_SHOOT2,
|
||||
M4A1_UNSIL_SHOOT3,
|
||||
M4A1_UNSIL_RELOAD,
|
||||
M4A1_UNSIL_DRAW,
|
||||
M4A1_DETACH_SILENCER
|
||||
};
|
||||
|
||||
|
||||
|
||||
//m249
|
||||
#define M249_MAX_SPEED 220
|
||||
#define M249_DAMAGE 32
|
||||
#define M249_RANGE_MODIFER 0.97
|
||||
#define M249_RELOAD_TIME 4.7
|
||||
|
||||
enum m249_e
|
||||
{
|
||||
M249_IDLE1,
|
||||
M249_SHOOT1,
|
||||
M249_SHOOT2,
|
||||
M249_RELOAD,
|
||||
M249_DRAW
|
||||
};
|
||||
|
||||
|
||||
|
||||
//mac10
|
||||
#define MAC10_MAX_SPEED 250
|
||||
#define MAC10_DAMAGE 29
|
||||
#define MAC10_RANGE_MODIFER 0.82
|
||||
#define MAC10_RELOAD_TIME 3.15
|
||||
|
||||
enum mac10_e
|
||||
{
|
||||
MAC10_IDLE1,
|
||||
MAC10_RELOAD,
|
||||
MAC10_DRAW,
|
||||
MAC10_SHOOT1,
|
||||
MAC10_SHOOT2,
|
||||
MAC10_SHOOT3
|
||||
};
|
||||
|
||||
|
||||
|
||||
//mp5navy
|
||||
#define MP5N_MAX_SPEED 250
|
||||
#define MP5N_DAMAGE 26
|
||||
#define MP5N_RANGE_MODIFER 0.84
|
||||
#define MP5N_RELOAD_TIME 2.63
|
||||
|
||||
enum mp5n_e
|
||||
{
|
||||
MP5N_IDLE1,
|
||||
MP5N_RELOAD,
|
||||
MP5N_DRAW,
|
||||
MP5N_SHOOT1,
|
||||
MP5N_SHOOT2,
|
||||
MP5N_SHOOT3
|
||||
};
|
||||
|
||||
|
||||
|
||||
//p90
|
||||
#define P90_MAX_SPEED 245
|
||||
#define P90_DAMAGE 21
|
||||
#define P90_RANGE_MODIFER 0.885
|
||||
#define P90_RELOAD_TIME 3.4
|
||||
|
||||
enum p90_e
|
||||
{
|
||||
P90_IDLE1,
|
||||
P90_RELOAD,
|
||||
P90_DRAW,
|
||||
P90_SHOOT1,
|
||||
P90_SHOOT2,
|
||||
P90_SHOOT3
|
||||
};
|
||||
|
||||
|
||||
|
||||
//p228
|
||||
#define P228_MAX_SPEED 250
|
||||
#define P228_DAMAGE 32
|
||||
#define P228_RANGE_MODIFER 0.8
|
||||
#define P228_RELOAD_TIME 2.7
|
||||
|
||||
enum p228_e
|
||||
{
|
||||
P228_IDLE,
|
||||
P228_SHOOT1,
|
||||
P228_SHOOT2,
|
||||
P228_SHOOT3,
|
||||
P228_SHOOT_EMPTY,
|
||||
P228_RELOAD,
|
||||
P228_DRAW
|
||||
};
|
||||
|
||||
enum p228_shield_e
|
||||
{
|
||||
P228_SHIELD_IDLE,
|
||||
P228_SHIELD_SHOOT1,
|
||||
P228_SHIELD_SHOOT2,
|
||||
P228_SHIELD_SHOOT_EMPTY,
|
||||
P228_SHIELD_RELOAD,
|
||||
P228_SHIELD_DRAW,
|
||||
P228_SHIELD_IDLE_UP,
|
||||
P228_SHIELD_UP,
|
||||
P228_SHIELD_DOWN
|
||||
};
|
||||
|
||||
|
||||
|
||||
//scout
|
||||
#define SCOUT_MAX_SPEED 260
|
||||
#define SCOUT_MAX_SPEED_ZOOM 220
|
||||
#define SCOUT_DAMAGE 75
|
||||
#define SCOUT_RANGE_MODIFER 0.98
|
||||
#define SCOUT_RELOAD_TIME 2
|
||||
|
||||
enum scout_e
|
||||
{
|
||||
SCOUT_IDLE,
|
||||
SCOUT_SHOOT,
|
||||
SCOUT_SHOOT2,
|
||||
SCOUT_RELOAD,
|
||||
SCOUT_DRAW
|
||||
};
|
||||
|
||||
|
||||
|
||||
//sg550
|
||||
#define SG550_MAX_SPEED 210
|
||||
#define SG550_MAX_SPEED_ZOOM 150
|
||||
#define SG550_DAMAGE 70
|
||||
#define SG550_RANGE_MODIFER 0.98
|
||||
#define SG550_RELOAD_TIME 3.35
|
||||
|
||||
enum sg550_e
|
||||
{
|
||||
SG550_IDLE,
|
||||
SG550_SHOOT,
|
||||
SG550_SHOOT2,
|
||||
SG550_RELOAD,
|
||||
SG550_DRAW
|
||||
};
|
||||
|
||||
|
||||
|
||||
//sg552
|
||||
#define SG552_MAX_SPEED 235
|
||||
#define SG552_MAX_SPEED_ZOOM 200
|
||||
#define SG552_DAMAGE 33
|
||||
#define SG552_RANGE_MODIFER 0.955
|
||||
#define SG552_RELOAD_TIME 3
|
||||
|
||||
enum sg552_e
|
||||
{
|
||||
SG552_IDLE1,
|
||||
SG552_RELOAD,
|
||||
SG552_DRAW,
|
||||
SG552_SHOOT1,
|
||||
SG552_SHOOT2,
|
||||
SG552_SHOOT3
|
||||
};
|
||||
|
||||
|
||||
|
||||
//smokegrenade
|
||||
#define SMOKEGRENADE_MAX_SPEED 250
|
||||
#define SMOKEGRENADE_MAX_SPEED_SHIELD 180
|
||||
|
||||
enum smokegrenade_e
|
||||
{
|
||||
SMOKEGRENADE_IDLE,
|
||||
SMOKEGRENADE_PINPULL,
|
||||
SMOKEGRENADE_THROW,
|
||||
SMOKEGRENADE_DRAW
|
||||
};
|
||||
|
||||
|
||||
|
||||
//tmp
|
||||
#define TMP_MAX_SPEED 250
|
||||
#define TMP_DAMAGE 20
|
||||
#define TMP_RANGE_MODIFER 0.85
|
||||
#define TMP_RELOAD_TIME 2.12
|
||||
|
||||
enum tmp_e
|
||||
{
|
||||
TMP_IDLE1,
|
||||
TMP_RELOAD,
|
||||
TMP_DRAW,
|
||||
TMP_SHOOT1,
|
||||
TMP_SHOOT2,
|
||||
TMP_SHOOT3
|
||||
};
|
||||
|
||||
|
||||
|
||||
//ump45
|
||||
#define UMP45_MAX_SPEED 250
|
||||
#define UMP45_DAMAGE 30
|
||||
#define UMP45_RANGE_MODIFER 0.82
|
||||
#define UMP45_RELOAD_TIME 3.5
|
||||
|
||||
enum ump45_e
|
||||
{
|
||||
UMP45_IDLE1,
|
||||
UMP45_RELOAD,
|
||||
UMP45_DRAW,
|
||||
UMP45_SHOOT1,
|
||||
UMP45_SHOOT2,
|
||||
UMP45_SHOOT3
|
||||
};
|
||||
|
||||
|
||||
|
||||
//tmp
|
||||
#define USP_MAX_SPEED 250
|
||||
#define USP_DAMAGE 34
|
||||
#define USP_DAMAGE_SIL 30
|
||||
#define USP_RANGE_MODIFER 0.79
|
||||
#define USP_RELOAD_TIME 2.7
|
||||
|
||||
enum usp_e
|
||||
{
|
||||
USP_IDLE,
|
||||
USP_SHOOT1,
|
||||
USP_SHOOT2,
|
||||
USP_SHOOT3,
|
||||
USP_SHOOT_EMPTY,
|
||||
USP_RELOAD,
|
||||
USP_DRAW,
|
||||
USP_ATTACH_SILENCER,
|
||||
USP_UNSIL_IDLE,
|
||||
USP_UNSIL_SHOOT1,
|
||||
USP_UNSIL_SHOOT2,
|
||||
USP_UNSIL_SHOOT3,
|
||||
USP_UNSIL_SHOOT_EMPTY,
|
||||
USP_UNSIL_RELOAD,
|
||||
USP_UNSIL_DRAW,
|
||||
USP_DETACH_SILENCER
|
||||
};
|
||||
|
||||
enum usp_shield_e
|
||||
{
|
||||
USP_SHIELD_IDLE,
|
||||
USP_SHIELD_SHOOT1,
|
||||
USP_SHIELD_SHOOT2,
|
||||
USP_SHIELD_SHOOT_EMPTY,
|
||||
USP_SHIELD_RELOAD,
|
||||
USP_SHIELD_DRAW,
|
||||
USP_SHIELD_UP_IDLE,
|
||||
USP_SHIELD_UP,
|
||||
USP_SHIELD_DOWN
|
||||
};
|
||||
|
||||
|
||||
|
||||
//xm1014
|
||||
#define XM1014_MAX_SPEED 240
|
||||
#define XM1014_CONE_VECTOR Vector(0.0725, 0.0725, 0.0) // special shotgun spreads
|
||||
|
||||
enum xm1014_e
|
||||
{
|
||||
XM1014_IDLE,
|
||||
XM1014_FIRE1,
|
||||
XM1014_FIRE2,
|
||||
XM1014_RELOAD,
|
||||
XM1014_PUMP,
|
||||
XM1014_START_RELOAD,
|
||||
XM1014_DRAW
|
||||
};
|
@ -24,7 +24,8 @@
|
||||
* you do not wish to do so, delete this exception statement from your
|
||||
* version.
|
||||
*
|
||||
*/#ifndef ARCHTYPES_H
|
||||
*/
|
||||
#ifndef ARCHTYPES_H
|
||||
#define ARCHTYPES_H
|
||||
|
||||
#ifdef __x86_64__
|
||||
|
@ -115,10 +115,12 @@ uint32 crc32c_t_nosse(uint32 iCRC, const uint8 *buf, int len) {
|
||||
return crc;
|
||||
}
|
||||
|
||||
FUNC_TARGET("sse4.2")
|
||||
uint32 crc32c_t8_sse(uint32 iCRC, uint8 u8) {
|
||||
return _mm_crc32_u8(iCRC, u8);
|
||||
}
|
||||
|
||||
FUNC_TARGET("sse4.2")
|
||||
uint32 crc32c_t_sse(uint32 iCRC, const uint8 *buf, unsigned int len) {
|
||||
uint32 crc32cval = iCRC;
|
||||
unsigned int i = 0;
|
||||
|
@ -103,12 +103,15 @@
|
||||
#ifndef CDECL
|
||||
#define CDECL __cdecl
|
||||
#endif
|
||||
#define FASTCALL __fastcall
|
||||
#define STDCALL __stdcall
|
||||
#define HIDDEN
|
||||
#define FORCEINLINE __forceinline
|
||||
#define NOINLINE __declspec(noinline)
|
||||
#define ALIGN16 __declspec(align(16))
|
||||
#define NORETURN __declspec(noreturn)
|
||||
#define FORCE_STACK_ALIGN
|
||||
#define FUNC_TARGET(x)
|
||||
|
||||
#define __builtin_bswap16 _byteswap_ushort
|
||||
#define __builtin_bswap32 _byteswap_ulong
|
||||
@ -147,18 +150,24 @@
|
||||
typedef unsigned short WORD;
|
||||
typedef unsigned int UNINT32;
|
||||
|
||||
#define FASTCALL
|
||||
#define CDECL __attribute__ ((cdecl))
|
||||
#define STDCALL __attribute__ ((stdcall))
|
||||
#define HIDDEN __attribute__((visibility("hidden")))
|
||||
#define FORCEINLINE inline
|
||||
#define NOINLINE __attribute__((noinline))
|
||||
#define ALIGN16 __attribute__((aligned(16)))
|
||||
#define NORETURN __attribute__((noreturn))
|
||||
#define FORCE_STACK_ALIGN __attribute__((force_align_arg_pointer))
|
||||
|
||||
#if defined __INTEL_COMPILER
|
||||
#define FUNC_TARGET(x)
|
||||
|
||||
#define __builtin_bswap16 _bswap16
|
||||
#define __builtin_bswap32 _bswap
|
||||
#define __builtin_bswap64 _bswap64
|
||||
#else
|
||||
#define FUNC_TARGET(x) __attribute__((target(x)))
|
||||
#endif // __INTEL_COMPILER
|
||||
|
||||
//inline bool SOCKET_FIONBIO(SOCKET s, int m) { return (ioctl(s, FIONBIO, (int*)&m) == 0); }
|
||||
|
51
metamod/extra/example/include/hlsdk/engine/pr_dlls.h
Normal file
51
metamod/extra/example/include/hlsdk/engine/pr_dlls.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
|
||||
|
||||
#include "maintypes.h"
|
||||
#include "eiface.h"
|
||||
|
||||
const int MAX_EXTENSION_DLL = 50;
|
||||
|
||||
typedef struct functiontable_s
|
||||
{
|
||||
uint32 pFunction;
|
||||
char *pFunctionName;
|
||||
} functiontable_t;
|
||||
|
||||
typedef struct extensiondll_s
|
||||
{
|
||||
void *lDLLHandle;
|
||||
functiontable_t *functionTable;
|
||||
int functionCount;
|
||||
} extensiondll_t;
|
||||
|
||||
typedef void(*ENTITYINIT)(struct entvars_s *);
|
||||
typedef void(*DISPATCHFUNCTION)(struct entvars_s *, void *);
|
||||
typedef void(*FIELDIOFUNCTION)(SAVERESTOREDATA *, const char *, void *, TYPEDESCRIPTION *, int);
|
@ -34,9 +34,10 @@
|
||||
#include "interface.h"
|
||||
#include "model.h"
|
||||
#include "ObjectList.h"
|
||||
#include "pr_dlls.h"
|
||||
|
||||
#define REHLDS_API_VERSION_MAJOR 3
|
||||
#define REHLDS_API_VERSION_MINOR 2
|
||||
#define REHLDS_API_VERSION_MINOR 3
|
||||
|
||||
//Steam_NotifyClientConnect hook
|
||||
typedef IHookChain<qboolean, IGameClient*, const void*, unsigned int> IRehldsHook_Steam_NotifyClientConnect;
|
||||
@ -190,6 +191,10 @@ typedef IHookChainRegistry<int, enum sv_delta_s, IGameClient *, struct packet_en
|
||||
typedef IHookChain<bool, edict_t *, IGameClient *, int, const char*, float, float, int, int, int, const float*> IRehldsHook_SV_EmitSound2;
|
||||
typedef IHookChainRegistry<bool, edict_t *, IGameClient *, int, const char*, float, float, int, int, int, const float*> IRehldsHookRegistry_SV_EmitSound2;
|
||||
|
||||
//CreateFakeClient hook
|
||||
typedef IHookChain<edict_t *, const char *> IRehldsHook_CreateFakeClient;
|
||||
typedef IHookChainRegistry<edict_t *, const char *> IRehldsHookRegistry_CreateFakeClient;
|
||||
|
||||
class IRehldsHookchains {
|
||||
public:
|
||||
virtual ~IRehldsHookchains() { }
|
||||
@ -232,6 +237,7 @@ public:
|
||||
virtual IRehldsHookRegistry_SV_Spawn_f* SV_Spawn_f() = 0;
|
||||
virtual IRehldsHookRegistry_SV_CreatePacketEntities* SV_CreatePacketEntities() = 0;
|
||||
virtual IRehldsHookRegistry_SV_EmitSound2* SV_EmitSound2() = 0;
|
||||
virtual IRehldsHookRegistry_CreateFakeClient* CreateFakeClient() = 0;
|
||||
};
|
||||
|
||||
struct RehldsFuncs_t {
|
||||
@ -285,6 +291,11 @@ struct RehldsFuncs_t {
|
||||
bool(*StripUnprintableAndSpace)(char *pch);
|
||||
void(*Cmd_RemoveCmd)(const char *cmd_name);
|
||||
void(*GetCommandMatches)(const char *string, ObjectList *pMatchList);
|
||||
bool(*AddExtDll)(void *hModule);
|
||||
void(*AddCvarListener)(const char *var_name, cvar_callback_t func);
|
||||
void(*RemoveExtDll)(void *hModule);
|
||||
void(*RemoveCvarListener)(const char *var_name, cvar_callback_t func);
|
||||
ENTITYINIT(*GetEntityInit)(char *pszClassName);
|
||||
};
|
||||
|
||||
class IRehldsApi {
|
||||
|
138
metamod/extra/example/include/hlsdk/game_shared/GameEvent.h
Normal file
138
metamod/extra/example/include/hlsdk/game_shared/GameEvent.h
Normal file
@ -0,0 +1,138 @@
|
||||
/*
|
||||
*
|
||||
* 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
|
||||
|
||||
enum GameEventType
|
||||
{
|
||||
EVENT_INVALID = 0,
|
||||
EVENT_WEAPON_FIRED, // tell bots the player is attack (argumens: 1 = attacker, 2 = NULL)
|
||||
EVENT_WEAPON_FIRED_ON_EMPTY, // tell bots the player is attack without clip ammo (argumens: 1 = attacker, 2 = NULL)
|
||||
EVENT_WEAPON_RELOADED, // tell bots the player is reloading his weapon (argumens: 1 = reloader, 2 = NULL)
|
||||
|
||||
EVENT_HE_GRENADE_EXPLODED, // tell bots the HE grenade is exploded (argumens: 1 = grenade thrower, 2 = NULL)
|
||||
EVENT_FLASHBANG_GRENADE_EXPLODED, // tell bots the flashbang grenade is exploded (argumens: 1 = grenade thrower, 2 = explosion origin)
|
||||
EVENT_SMOKE_GRENADE_EXPLODED, // tell bots the smoke grenade is exploded (argumens: 1 = grenade thrower, 2 = NULL)
|
||||
EVENT_GRENADE_BOUNCED,
|
||||
|
||||
EVENT_BEING_SHOT_AT,
|
||||
EVENT_PLAYER_BLINDED_BY_FLASHBANG, // tell bots the player is flashed (argumens: 1 = flashed player, 2 = NULL)
|
||||
EVENT_PLAYER_FOOTSTEP, // tell bots the player is running (argumens: 1 = runner, 2 = NULL)
|
||||
EVENT_PLAYER_JUMPED, // tell bots the player is jumped (argumens: 1 = jumper, 2 = NULL)
|
||||
EVENT_PLAYER_DIED, // tell bots the player is killed (argumens: 1 = victim, 2 = killer)
|
||||
EVENT_PLAYER_LANDED_FROM_HEIGHT, // tell bots the player is fell with some damage (argumens: 1 = felled player, 2 = NULL)
|
||||
EVENT_PLAYER_TOOK_DAMAGE, // tell bots the player is take damage (argumens: 1 = victim, 2 = attacker)
|
||||
EVENT_HOSTAGE_DAMAGED, // tell bots the player has injured a hostage (argumens: 1 = hostage, 2 = injurer)
|
||||
EVENT_HOSTAGE_KILLED, // tell bots the player has killed a hostage (argumens: 1 = hostage, 2 = killer)
|
||||
|
||||
EVENT_DOOR, // tell bots the door is moving (argumens: 1 = door, 2 = NULL)
|
||||
EVENT_BREAK_GLASS, // tell bots the glass has break (argumens: 1 = glass, 2 = NULL)
|
||||
EVENT_BREAK_WOOD, // tell bots the wood has break (argumens: 1 = wood, 2 = NULL)
|
||||
EVENT_BREAK_METAL, // tell bots the metal/computer has break (argumens: 1 = metal/computer, 2 = NULL)
|
||||
EVENT_BREAK_FLESH, // tell bots the flesh has break (argumens: 1 = flesh, 2 = NULL)
|
||||
EVENT_BREAK_CONCRETE, // tell bots the concrete has break (argumens: 1 = concrete, 2 = NULL)
|
||||
|
||||
EVENT_BOMB_PLANTED, // tell bots the bomb has been planted (argumens: 1 = planter, 2 = NULL)
|
||||
EVENT_BOMB_DROPPED, // tell bots the bomb has been dropped (argumens: 1 = NULL, 2 = NULL)
|
||||
EVENT_BOMB_PICKED_UP, // let the bots hear the bomb pickup (argumens: 1 = player that pickup c4, 2 = NULL)
|
||||
EVENT_BOMB_BEEP, // let the bots hear the bomb beeping (argumens: 1 = c4, 2 = NULL)
|
||||
EVENT_BOMB_DEFUSING, // tell the bots someone has started defusing (argumens: 1 = defuser, 2 = NULL)
|
||||
EVENT_BOMB_DEFUSE_ABORTED, // tell the bots someone has aborted defusing (argumens: 1 = NULL, 2 = NULL)
|
||||
EVENT_BOMB_DEFUSED, // tell the bots the bomb is defused (argumens: 1 = defuser, 2 = NULL)
|
||||
EVENT_BOMB_EXPLODED, // let the bots hear the bomb exploding (argumens: 1 = NULL, 2 = NULL)
|
||||
|
||||
EVENT_HOSTAGE_USED, // tell bots the hostage is used (argumens: 1 = user, 2 = NULL)
|
||||
EVENT_HOSTAGE_RESCUED, // tell bots the hostage is rescued (argumens: 1 = rescuer (CBasePlayer *), 2 = hostage (CHostage *))
|
||||
EVENT_ALL_HOSTAGES_RESCUED, // tell bots the all hostages are rescued (argumens: 1 = NULL, 2 = NULL)
|
||||
|
||||
EVENT_VIP_ESCAPED, // tell bots the VIP is escaped (argumens: 1 = NULL, 2 = NULL)
|
||||
EVENT_VIP_ASSASSINATED, // tell bots the VIP is assassinated (argumens: 1 = NULL, 2 = NULL)
|
||||
EVENT_TERRORISTS_WIN, // tell bots the terrorists won the round (argumens: 1 = NULL, 2 = NULL)
|
||||
EVENT_CTS_WIN, // tell bots the CTs won the round (argumens: 1 = NULL, 2 = NULL)
|
||||
EVENT_ROUND_DRAW, // tell bots the round was a draw (argumens: 1 = NULL, 2 = NULL)
|
||||
EVENT_ROUND_WIN, // tell carreer the round was a win (argumens: 1 = NULL, 2 = NULL)
|
||||
EVENT_ROUND_LOSS, // tell carreer the round was a loss (argumens: 1 = NULL, 2 = NULL)
|
||||
EVENT_ROUND_START, // tell bots the round was started (when freeze period is expired) (argumens: 1 = NULL, 2 = NULL)
|
||||
EVENT_PLAYER_SPAWNED, // tell bots the player is spawned (argumens: 1 = spawned player, 2 = NULL)
|
||||
EVENT_CLIENT_CORPSE_SPAWNED,
|
||||
EVENT_BUY_TIME_START,
|
||||
EVENT_PLAYER_LEFT_BUY_ZONE,
|
||||
EVENT_DEATH_CAMERA_START,
|
||||
EVENT_KILL_ALL,
|
||||
EVENT_ROUND_TIME,
|
||||
EVENT_DIE,
|
||||
EVENT_KILL,
|
||||
EVENT_HEADSHOT,
|
||||
EVENT_KILL_FLASHBANGED,
|
||||
EVENT_TUTOR_BUY_MENU_OPENNED,
|
||||
EVENT_TUTOR_AUTOBUY,
|
||||
EVENT_PLAYER_BOUGHT_SOMETHING,
|
||||
EVENT_TUTOR_NOT_BUYING_ANYTHING,
|
||||
EVENT_TUTOR_NEED_TO_BUY_PRIMARY_WEAPON,
|
||||
EVENT_TUTOR_NEED_TO_BUY_PRIMARY_AMMO,
|
||||
EVENT_TUTOR_NEED_TO_BUY_SECONDARY_AMMO,
|
||||
EVENT_TUTOR_NEED_TO_BUY_ARMOR,
|
||||
EVENT_TUTOR_NEED_TO_BUY_DEFUSE_KIT,
|
||||
EVENT_TUTOR_NEED_TO_BUY_GRENADE,
|
||||
EVENT_CAREER_TASK_DONE,
|
||||
|
||||
EVENT_START_RADIO_1,
|
||||
EVENT_RADIO_COVER_ME,
|
||||
EVENT_RADIO_YOU_TAKE_THE_POINT,
|
||||
EVENT_RADIO_HOLD_THIS_POSITION,
|
||||
EVENT_RADIO_REGROUP_TEAM,
|
||||
EVENT_RADIO_FOLLOW_ME,
|
||||
EVENT_RADIO_TAKING_FIRE,
|
||||
EVENT_START_RADIO_2,
|
||||
EVENT_RADIO_GO_GO_GO,
|
||||
EVENT_RADIO_TEAM_FALL_BACK,
|
||||
EVENT_RADIO_STICK_TOGETHER_TEAM,
|
||||
EVENT_RADIO_GET_IN_POSITION_AND_WAIT,
|
||||
EVENT_RADIO_STORM_THE_FRONT,
|
||||
EVENT_RADIO_REPORT_IN_TEAM,
|
||||
EVENT_START_RADIO_3,
|
||||
EVENT_RADIO_AFFIRMATIVE,
|
||||
EVENT_RADIO_ENEMY_SPOTTED,
|
||||
EVENT_RADIO_NEED_BACKUP,
|
||||
EVENT_RADIO_SECTOR_CLEAR,
|
||||
EVENT_RADIO_IN_POSITION,
|
||||
EVENT_RADIO_REPORTING_IN,
|
||||
EVENT_RADIO_GET_OUT_OF_THERE,
|
||||
EVENT_RADIO_NEGATIVE,
|
||||
EVENT_RADIO_ENEMY_DOWN,
|
||||
EVENT_END_RADIO,
|
||||
|
||||
EVENT_NEW_MATCH, // tell bots the game is new (argumens: 1 = NULL, 2 = NULL)
|
||||
EVENT_PLAYER_CHANGED_TEAM, // tell bots the player is switch his team (also called from ClientPutInServer()) (argumens: 1 = switcher, 2 = NULL)
|
||||
EVENT_BULLET_IMPACT, // tell bots the player is shoot at wall (argumens: 1 = shooter, 2 = shoot trace end position)
|
||||
EVENT_GAME_COMMENCE, // tell bots the game is commencing (argumens: 1 = NULL, 2 = NULL)
|
||||
EVENT_WEAPON_ZOOMED, // tell bots the player is switch weapon zoom (argumens: 1 = zoom switcher, 2 = NULL)
|
||||
EVENT_HOSTAGE_CALLED_FOR_HELP, // tell bots the hostage is talking (argumens: 1 = listener, 2 = NULL)
|
||||
NUM_GAME_EVENTS,
|
||||
};
|
||||
|
||||
extern const char *GameEventName[ NUM_GAME_EVENTS + 1 ];
|
157
metamod/extra/example/include/hlsdk/game_shared/bitvec.h
Normal file
157
metamod/extra/example/include/hlsdk/game_shared/bitvec.h
Normal file
@ -0,0 +1,157 @@
|
||||
/*
|
||||
*
|
||||
* 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 CBitVecAccessor {
|
||||
public:
|
||||
CBitVecAccessor(uint32 *pDWords, int iBit);
|
||||
|
||||
void operator=(int val);
|
||||
operator uint32();
|
||||
|
||||
private:
|
||||
uint32 *m_pDWords;
|
||||
int m_iBit;
|
||||
};
|
||||
|
||||
// CBitVec allows you to store a list of bits and do operations on them like they were
|
||||
// an atomic type
|
||||
template<int NUM_BITS>
|
||||
class CBitVec {
|
||||
public:
|
||||
CBitVec();
|
||||
|
||||
// Set all values to the specified value (0 or 1..)
|
||||
void Init(int val = 0);
|
||||
|
||||
// Access the bits like an array.
|
||||
CBitVecAccessor operator[](int i);
|
||||
|
||||
// Operations on other bit vectors.
|
||||
CBitVec &operator=(CBitVec<NUM_BITS> const &other);
|
||||
bool operator==(CBitVec<NUM_BITS> const &other);
|
||||
bool operator!=(CBitVec<NUM_BITS> const &other);
|
||||
|
||||
// Get underlying dword representations of the bits.
|
||||
int GetNumDWords() { return NUM_DWORDS; }
|
||||
uint32 GetDWord(int i);
|
||||
void SetDWord(int i, uint32 val);
|
||||
int GetNumBits();
|
||||
|
||||
private:
|
||||
enum { NUM_DWORDS = NUM_BITS / 32 + !!(NUM_BITS & 31) };
|
||||
|
||||
unsigned int m_DWords[ NUM_DWORDS ];
|
||||
};
|
||||
|
||||
inline CBitVecAccessor::CBitVecAccessor(uint32 *pDWords, int iBit)
|
||||
{
|
||||
m_pDWords = pDWords;
|
||||
m_iBit = iBit;
|
||||
}
|
||||
|
||||
inline void CBitVecAccessor::operator=(int val)
|
||||
{
|
||||
if (val)
|
||||
m_pDWords[m_iBit >> 5] |= (1 << (m_iBit & 31));
|
||||
else
|
||||
m_pDWords[m_iBit >> 5] &= ~(uint32)(1 << (m_iBit & 31));
|
||||
}
|
||||
|
||||
inline CBitVecAccessor::operator uint32()
|
||||
{
|
||||
return m_pDWords[m_iBit >> 5] & (1 << (m_iBit & 31));
|
||||
}
|
||||
|
||||
template<int NUM_BITS>
|
||||
inline int CBitVec<NUM_BITS>::GetNumBits()
|
||||
{
|
||||
return NUM_BITS;
|
||||
}
|
||||
|
||||
template<int NUM_BITS>
|
||||
inline CBitVec<NUM_BITS>::CBitVec()
|
||||
{
|
||||
for (int i = 0; i < NUM_DWORDS; ++i)
|
||||
m_DWords[i] = 0;
|
||||
}
|
||||
|
||||
template<int NUM_BITS>
|
||||
inline void CBitVec<NUM_BITS>::Init(int val)
|
||||
{
|
||||
for (int i = 0; i < GetNumBits(); ++i)
|
||||
{
|
||||
(*this)[i] = val;
|
||||
}
|
||||
}
|
||||
|
||||
template<int NUM_BITS>
|
||||
inline CBitVec<NUM_BITS> &CBitVec<NUM_BITS>::operator=(CBitVec<NUM_BITS> const &other)
|
||||
{
|
||||
Q_memcpy(m_DWords, other.m_DWords, sizeof(m_DWords));
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<int NUM_BITS>
|
||||
inline CBitVecAccessor CBitVec<NUM_BITS>::operator[](int i)
|
||||
{
|
||||
assert(i >= 0 && i < GetNumBits());
|
||||
return CBitVecAccessor(m_DWords, i);
|
||||
}
|
||||
|
||||
template<int NUM_BITS>
|
||||
inline bool CBitVec<NUM_BITS>::operator==(CBitVec<NUM_BITS> const &other)
|
||||
{
|
||||
for (int i = 0; i < NUM_DWORDS; ++i)
|
||||
{
|
||||
if (m_DWords[i] != other.m_DWords[i])
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
template<int NUM_BITS>
|
||||
inline bool CBitVec<NUM_BITS>::operator!=(CBitVec<NUM_BITS> const &other)
|
||||
{
|
||||
return !(*this == other);
|
||||
}
|
||||
|
||||
template<int NUM_BITS>
|
||||
inline uint32 CBitVec<NUM_BITS>::GetDWord(int i)
|
||||
{
|
||||
assert(i >= 0 && i < NUM_DWORDS);
|
||||
return m_DWords[i];
|
||||
}
|
||||
|
||||
template<int NUM_BITS>
|
||||
inline void CBitVec<NUM_BITS>::SetDWord(int i, uint32 val)
|
||||
{
|
||||
assert(i >= 0 && i < NUM_DWORDS);
|
||||
m_DWords[i] = val;
|
||||
}
|
164
metamod/extra/example/include/hlsdk/game_shared/bot/bot.h
Normal file
164
metamod/extra/example/include/hlsdk/game_shared/bot/bot.h
Normal file
@ -0,0 +1,164 @@
|
||||
/*
|
||||
*
|
||||
* 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 BotProfile;
|
||||
|
||||
// The base bot class from which bots for specific games are derived
|
||||
class CBot: public CBasePlayer {
|
||||
public:
|
||||
virtual void Spawn() = 0;
|
||||
|
||||
// invoked when injured by something
|
||||
virtual BOOL TakeDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType) = 0;
|
||||
|
||||
// invoked when killed
|
||||
virtual void Killed(entvars_t *pevAttacker, int iGib) = 0;
|
||||
virtual BOOL IsNetClient() = 0;
|
||||
virtual void Think() = 0;
|
||||
virtual BOOL IsBot() = 0;
|
||||
virtual Vector GetAutoaimVector(float flDelta) = 0;
|
||||
|
||||
// invoked when in contact with a CWeaponBox
|
||||
virtual void OnTouchingWeapon(CWeaponBox *box) = 0;
|
||||
virtual bool Initialize(const BotProfile *profile) = 0;
|
||||
virtual void SpawnBot() = 0;
|
||||
|
||||
// lightweight maintenance, invoked frequently
|
||||
virtual void Upkeep() = 0;
|
||||
|
||||
// heavyweight algorithms, invoked less often
|
||||
virtual void Update() = 0;
|
||||
|
||||
virtual void Run() = 0;
|
||||
virtual void Walk() = 0;
|
||||
virtual void Crouch() = 0;
|
||||
virtual void StandUp() = 0;
|
||||
virtual void MoveForward() = 0;
|
||||
virtual void MoveBackward() = 0;
|
||||
virtual void StrafeLeft() = 0;
|
||||
virtual void StrafeRight() = 0;
|
||||
|
||||
// returns true if jump was started
|
||||
#define MUST_JUMP true
|
||||
virtual bool Jump(bool mustJump = false) = 0;
|
||||
|
||||
// zero any MoveForward(), Jump(), etc
|
||||
virtual void ClearMovement() = 0;
|
||||
|
||||
// Weapon interface
|
||||
virtual void UseEnvironment() = 0;
|
||||
virtual void PrimaryAttack() = 0;
|
||||
virtual void ClearPrimaryAttack() = 0;
|
||||
virtual void TogglePrimaryAttack() = 0;
|
||||
virtual void SecondaryAttack() = 0;
|
||||
virtual void Reload() = 0;
|
||||
|
||||
// invoked when event occurs in the game (some events have NULL entities)
|
||||
virtual void OnEvent(GameEventType event, CBaseEntity *entity = NULL, CBaseEntity *other = NULL) = 0;
|
||||
|
||||
// return true if we can see the point
|
||||
virtual bool IsVisible(const Vector *pos, bool testFOV = false) const = 0;
|
||||
|
||||
// return true if we can see any part of the player
|
||||
virtual bool IsVisible(CBasePlayer *player, bool testFOV = false, unsigned char *visParts = NULL) const = 0;
|
||||
|
||||
enum VisiblePartType:uint8
|
||||
{
|
||||
NONE = 0x00,
|
||||
CHEST = 0x01,
|
||||
HEAD = 0x02,
|
||||
LEFT_SIDE = 0x04, // the left side of the object from our point of view (not their left side)
|
||||
RIGHT_SIDE = 0x08, // the right side of the object from our point of view (not their right side)
|
||||
FEET = 0x10
|
||||
};
|
||||
|
||||
// if enemy is visible, return the part we see
|
||||
virtual bool IsEnemyPartVisible(VisiblePartType part) const = 0;
|
||||
|
||||
// return true if player is facing towards us
|
||||
virtual bool IsPlayerFacingMe(CBasePlayer *other) const = 0;
|
||||
|
||||
// returns true if other player is pointing right at us
|
||||
virtual bool IsPlayerLookingAtMe(CBasePlayer *other) const = 0;
|
||||
virtual void ExecuteCommand() = 0;
|
||||
virtual void SetModel(const char *modelName) = 0;
|
||||
|
||||
public:
|
||||
unsigned int GetID() const { return m_id; }
|
||||
bool IsRunning() const { return m_isRunning; }
|
||||
bool IsCrouching() const { return m_isCrouching; }
|
||||
|
||||
// return time last jump began
|
||||
float GetJumpTimestamp() const { return m_jumpTimestamp; }
|
||||
|
||||
// return our personality profile
|
||||
const BotProfile *GetProfile() const { return m_profile; }
|
||||
|
||||
public:
|
||||
// the "personality" profile of this bot
|
||||
const BotProfile *m_profile;
|
||||
|
||||
// unique bot ID
|
||||
unsigned int m_id;
|
||||
|
||||
// Think mechanism variables
|
||||
float m_flNextBotThink;
|
||||
float m_flNextFullBotThink;
|
||||
|
||||
// Command interface variables
|
||||
float m_flPreviousCommandTime;
|
||||
|
||||
// run/walk mode
|
||||
bool m_isRunning;
|
||||
|
||||
// true if crouching (ducking)
|
||||
bool m_isCrouching;
|
||||
float m_forwardSpeed;
|
||||
float m_strafeSpeed;
|
||||
float m_verticalSpeed;
|
||||
|
||||
// bitfield of movement buttons
|
||||
unsigned short m_buttonFlags;
|
||||
|
||||
// time when we last began a jump
|
||||
float m_jumpTimestamp;
|
||||
|
||||
// the PostureContext represents the current settings of walking and crouching
|
||||
struct PostureContext
|
||||
{
|
||||
bool isRunning;
|
||||
bool isCrouching;
|
||||
};
|
||||
|
||||
enum { MAX_POSTURE_STACK = 8 };
|
||||
PostureContext m_postureStack[MAX_POSTURE_STACK];
|
||||
|
||||
// index of top of stack
|
||||
int m_postureStackIndex;
|
||||
};
|
@ -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
|
||||
|
||||
// We'll define our own version of this, because everyone else does.
|
||||
// This needs to stay in sync with MAX_CLIENTS, but there's no header with the #define.
|
||||
#define BOT_MAX_CLIENTS 32
|
||||
|
||||
// version number is MAJOR.MINOR
|
||||
#define BOT_VERSION_MAJOR 1
|
||||
#define BOT_VERSION_MINOR 50
|
||||
|
||||
// Difficulty levels
|
||||
enum BotDifficultyType
|
||||
{
|
||||
BOT_EASY = 0,
|
||||
BOT_NORMAL,
|
||||
BOT_HARD,
|
||||
BOT_EXPERT,
|
||||
|
||||
NUM_DIFFICULTY_LEVELS
|
||||
};
|
@ -0,0 +1,72 @@
|
||||
/*
|
||||
*
|
||||
* 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
|
||||
|
||||
// STL uses exceptions, but we are not compiling with them - ignore warning
|
||||
#pragma warning(disable : 4530)
|
||||
|
||||
#include <list>
|
||||
|
||||
class CNavArea;
|
||||
class CGrenade;
|
||||
|
||||
class ActiveGrenade {
|
||||
public:
|
||||
int m_id;
|
||||
CGrenade *m_entity;
|
||||
Vector m_detonationPosition;
|
||||
float m_dieTimestamp;
|
||||
};
|
||||
|
||||
typedef std::list<ActiveGrenade *> ActiveGrenadeList;
|
||||
|
||||
class CBotManager {
|
||||
public:
|
||||
virtual ~CBotManager() {}
|
||||
|
||||
virtual void ClientDisconnect(CBasePlayer *pPlayer) = 0;
|
||||
virtual BOOL ClientCommand(CBasePlayer *pPlayer, const char *pcmd) = 0;
|
||||
|
||||
virtual void ServerActivate() = 0;
|
||||
virtual void ServerDeactivate() = 0;
|
||||
|
||||
virtual void ServerCommand(const char *pcmd) = 0;
|
||||
virtual void AddServerCommand(const char *cmd) = 0;
|
||||
virtual void AddServerCommands() = 0;
|
||||
|
||||
virtual void RestartRound() = 0;
|
||||
virtual void StartFrame() = 0;
|
||||
|
||||
// Events are propogated to all bots.
|
||||
virtual void OnEvent(GameEventType event, CBaseEntity *entity = NULL, CBaseEntity *other = NULL) = 0; // Invoked when event occurs in the game (some events have NULL entity).
|
||||
virtual unsigned int GetPlayerPriority(CBasePlayer *player) const = 0; // return priority of player (0 = max pri)
|
||||
|
||||
public:
|
||||
// the list of active grenades the bots are aware of
|
||||
ActiveGrenadeList m_activeGrenadeList;
|
||||
};
|
@ -0,0 +1,116 @@
|
||||
/*
|
||||
*
|
||||
* 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
|
||||
|
||||
// long STL names get truncated in browse info.
|
||||
#pragma warning(disable : 4786)
|
||||
|
||||
#ifndef _WIN32
|
||||
#include <strings.h>
|
||||
#include <stdio.h>
|
||||
#endif // _WIN32
|
||||
|
||||
#undef min
|
||||
#undef max
|
||||
|
||||
#include <list>
|
||||
#include <vector>
|
||||
|
||||
#include "bot_constants.h"
|
||||
|
||||
enum
|
||||
{
|
||||
FirstCustomSkin = 100,
|
||||
NumCustomSkins = 100,
|
||||
LastCustomSkin = FirstCustomSkin + NumCustomSkins - 1,
|
||||
};
|
||||
|
||||
enum BotProfileTeamType
|
||||
{
|
||||
BOT_TEAM_T,
|
||||
BOT_TEAM_CT,
|
||||
BOT_TEAM_ANY
|
||||
};
|
||||
|
||||
class BotProfile {
|
||||
public:
|
||||
const char *GetName() const { return m_name; }
|
||||
float GetAggression() const { return m_aggression; }
|
||||
float GetSkill() const { return m_skill; }
|
||||
float GetTeamwork() const { return m_teamwork; }
|
||||
int GetWeaponPreference(int i) const { return m_weaponPreference[i]; }
|
||||
int GetWeaponPreferenceCount() const { return m_weaponPreferenceCount; }
|
||||
int GetCost() const { return m_cost; }
|
||||
int GetSkin() const { return m_skin; }
|
||||
int GetVoicePitch() const { return m_voicePitch; }
|
||||
float GetReactionTime() const { return m_reactionTime; }
|
||||
float GetAttackDelay() const { return m_attackDelay; }
|
||||
int GetVoiceBank() const { return m_voiceBank; }
|
||||
bool PrefersSilencer() const { return m_prefersSilencer; }
|
||||
public:
|
||||
friend class BotProfileManager;
|
||||
|
||||
char *m_name;
|
||||
float m_aggression;
|
||||
float m_skill;
|
||||
float m_teamwork;
|
||||
|
||||
enum { MAX_WEAPON_PREFS = 16 };
|
||||
|
||||
int m_weaponPreference[MAX_WEAPON_PREFS];
|
||||
int m_weaponPreferenceCount;
|
||||
|
||||
int m_cost;
|
||||
int m_skin;
|
||||
|
||||
unsigned char m_difficultyFlags;
|
||||
int m_voicePitch;
|
||||
float m_reactionTime;
|
||||
float m_attackDelay;
|
||||
enum BotProfileTeamType m_teams;
|
||||
bool m_prefersSilencer;
|
||||
int m_voiceBank;
|
||||
};
|
||||
|
||||
typedef std::list<BotProfile *> BotProfileList;
|
||||
|
||||
class BotProfileManager {
|
||||
public:
|
||||
typedef std::vector<char *> VoiceBankList;
|
||||
const BotProfileList *GetProfileList() const { return &m_profileList; }
|
||||
const VoiceBankList *GetVoiceBanks() const { return &m_voiceBanks; }
|
||||
|
||||
public:
|
||||
BotProfileList m_profileList;
|
||||
VoiceBankList m_voiceBanks;
|
||||
|
||||
char *m_skins[NumCustomSkins];
|
||||
char *m_skinModelnames[NumCustomSkins];
|
||||
char *m_skinFilenames[NumCustomSkins];
|
||||
int m_nextSkin;
|
||||
};
|
141
metamod/extra/example/include/hlsdk/game_shared/bot/bot_util.h
Normal file
141
metamod/extra/example/include/hlsdk/game_shared/bot/bot_util.h
Normal file
@ -0,0 +1,141 @@
|
||||
/*
|
||||
*
|
||||
* 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 COS_TABLE_SIZE 256
|
||||
|
||||
#define RAD_TO_DEG(deg) ((deg) * 180.0 / M_PI)
|
||||
#define DEG_TO_RAD(rad) ((rad) * M_PI / 180.0)
|
||||
|
||||
#define SIGN(num) (((num) < 0) ? -1 : 1)
|
||||
#define ABS(num) (SIGN(num) * (num))
|
||||
|
||||
class CBasePlayer;
|
||||
class BotProfile;
|
||||
|
||||
enum PriorityType
|
||||
{
|
||||
PRIORITY_LOW, PRIORITY_MEDIUM, PRIORITY_HIGH, PRIORITY_UNINTERRUPTABLE
|
||||
};
|
||||
|
||||
// Simple class for tracking intervals of game time
|
||||
class IntervalTimer {
|
||||
public:
|
||||
IntervalTimer() { m_timestamp = -1.0f; }
|
||||
void Reset() { m_timestamp = gpGlobals->time; }
|
||||
void Start() { m_timestamp = gpGlobals->time; }
|
||||
void Invalidate() { m_timestamp = -1.0f; }
|
||||
|
||||
bool HasStarted() const { return (m_timestamp > 0.0f); }
|
||||
|
||||
// if not started, elapsed time is very large
|
||||
float GetElapsedTime() const { return (HasStarted()) ? (gpGlobals->time - m_timestamp) : 99999.9f; }
|
||||
bool IsLessThen(float duration) const { return (gpGlobals->time - m_timestamp < duration) ? true : false; }
|
||||
bool IsGreaterThen(float duration) const { return (gpGlobals->time - m_timestamp > duration) ? true : false; }
|
||||
|
||||
private:
|
||||
float m_timestamp;
|
||||
};
|
||||
|
||||
// Simple class for counting down a short interval of time
|
||||
class CountdownTimer {
|
||||
public:
|
||||
CountdownTimer() { m_timestamp = -1.0f; m_duration = 0.0f; }
|
||||
void Reset() { m_timestamp = gpGlobals->time + m_duration; }
|
||||
|
||||
void Start(float duration) { m_timestamp = gpGlobals->time + duration; m_duration = duration; }
|
||||
bool HasStarted() const { return (m_timestamp > 0.0f); }
|
||||
|
||||
void Invalidate() { m_timestamp = -1.0f; }
|
||||
bool IsElapsed() const { return (gpGlobals->time > m_timestamp); }
|
||||
|
||||
private:
|
||||
float m_duration;
|
||||
float m_timestamp;
|
||||
};
|
||||
|
||||
// Return true if the given entity is valid
|
||||
inline bool IsEntityValid(CBaseEntity *entity)
|
||||
{
|
||||
if (entity == NULL)
|
||||
return false;
|
||||
|
||||
if (FNullEnt(entity->pev))
|
||||
return false;
|
||||
|
||||
if (FStrEq(STRING(entity->pev->netname), ""))
|
||||
return false;
|
||||
|
||||
if (entity->pev->flags & FL_DORMANT)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Given two line segments: startA to endA, and startB to endB, return true if they intesect
|
||||
// and put the intersection point in "result".
|
||||
// Note that this computes the intersection of the 2D (x,y) projection of the line segments.
|
||||
inline bool IsIntersecting2D(const Vector &startA, const Vector &endA, const Vector &startB, const Vector &endB, Vector *result = NULL)
|
||||
{
|
||||
float denom = (endA.x - startA.x) * (endB.y - startB.y) - (endA.y - startA.y) * (endB.x - startB.x);
|
||||
if (denom == 0.0f)
|
||||
{
|
||||
// parallel
|
||||
return false;
|
||||
}
|
||||
|
||||
float numS = (startA.y - startB.y) * (endB.x - startB.x) - (startA.x - startB.x) * (endB.y - startB.y);
|
||||
if (numS == 0.0f)
|
||||
{
|
||||
// coincident
|
||||
return true;
|
||||
}
|
||||
|
||||
float numT = (startA.y - startB.y) * (endA.x - startA.x) - (startA.x - startB.x) * (endA.y - startA.y);
|
||||
float s = numS / denom;
|
||||
if (s < 0.0f || s > 1.0f)
|
||||
{
|
||||
// intersection is not within line segment of startA to endA
|
||||
return false;
|
||||
}
|
||||
|
||||
float t = numT / denom;
|
||||
if (t < 0.0f || t > 1.0f)
|
||||
{
|
||||
// intersection is not within line segment of startB to endB
|
||||
return false;
|
||||
}
|
||||
|
||||
// compute intesection point
|
||||
if (result != NULL)
|
||||
{
|
||||
*result = startA + s * (endA - startA);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
120
metamod/extra/example/include/hlsdk/game_shared/bot/improv.h
Normal file
120
metamod/extra/example/include/hlsdk/game_shared/bot/improv.h
Normal file
@ -0,0 +1,120 @@
|
||||
/*
|
||||
*
|
||||
* 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 CBaseEntity;
|
||||
class CNavLadder;
|
||||
|
||||
// Improv-specific events
|
||||
class IImprovEvent {
|
||||
public:
|
||||
virtual void OnMoveToSuccess(const Vector &goal) {}; // invoked when an improv reaches its MoveTo goal
|
||||
|
||||
enum MoveToFailureType
|
||||
{
|
||||
FAIL_INVALID_PATH = 0,
|
||||
FAIL_STUCK,
|
||||
FAIL_FELL_OFF,
|
||||
};
|
||||
|
||||
virtual void OnMoveToFailure(const Vector &goal, MoveToFailureType reason) {} // invoked when an improv fails to reach a MoveTo goal
|
||||
virtual void OnInjury(float amount) {} // invoked when the improv is injured
|
||||
};
|
||||
|
||||
// The Improv interface definition
|
||||
// An "Improv" is an improvisational actor that simulates the
|
||||
// behavor of a human in an unscripted, "make it up as you go" manner.
|
||||
class CImprov: public IImprovEvent {
|
||||
public:
|
||||
virtual ~CImprov() {}
|
||||
virtual bool IsAlive() const = 0; // return true if this improv is alive
|
||||
|
||||
virtual void MoveTo(const Vector &goal) = 0; // move improv towards far-away goal (pathfind)
|
||||
virtual void LookAt(const Vector &target) = 0; // define desired view target
|
||||
virtual void ClearLookAt() = 0; // remove view goal
|
||||
virtual void FaceTo(const Vector &goal) = 0; // orient body towards goal
|
||||
virtual void ClearFaceTo() = 0; // remove body orientation goal
|
||||
|
||||
virtual bool IsAtMoveGoal(float error = 20.0f) const = 0; // return true if improv is standing on its movement goal
|
||||
virtual bool HasLookAt() const = 0; // return true if improv has a look at goal
|
||||
virtual bool HasFaceTo() const = 0; // return true if improv has a face to goal
|
||||
virtual bool IsAtFaceGoal() const = 0; // return true if improv is facing towards its face goal
|
||||
virtual bool IsFriendInTheWay(const Vector &goalPos) const = 0; // return true if a friend is blocking our line to the given goal position
|
||||
virtual bool IsFriendInTheWay(CBaseEntity *myFriend, const Vector &goalPos) const = 0; // return true if the given friend is blocking our line to the given goal position
|
||||
|
||||
virtual void MoveForward() = 0;
|
||||
virtual void MoveBackward() = 0;
|
||||
virtual void StrafeLeft() = 0;
|
||||
virtual void StrafeRight() = 0;
|
||||
virtual bool Jump() = 0;
|
||||
virtual void Crouch() = 0;
|
||||
virtual void StandUp() = 0; // "un-crouch"
|
||||
|
||||
virtual void TrackPath(const Vector &pathGoal, float deltaT) = 0; // move along path by following "pathGoal"
|
||||
virtual void StartLadder(const CNavLadder *ladder, enum NavTraverseType how, const Vector *approachPos, const Vector *departPos) = 0; // invoked when a ladder is encountered while following a path
|
||||
|
||||
virtual bool TraverseLadder(const CNavLadder *ladder, enum NavTraverseType how, const Vector *approachPos, const Vector *departPos, float deltaT) = 0; // traverse given ladder
|
||||
virtual bool GetSimpleGroundHeightWithFloor(const Vector *pos, float *height, Vector *normal = NULL) = 0; // find "simple" ground height, treating current nav area as part of the floor
|
||||
|
||||
virtual void Run() = 0;
|
||||
virtual void Walk() = 0;
|
||||
virtual void Stop() = 0;
|
||||
|
||||
virtual float GetMoveAngle() const = 0; // return direction of movement
|
||||
virtual float GetFaceAngle() const = 0; // return direction of view
|
||||
|
||||
virtual const Vector &GetFeet() const = 0; // return position of "feet" - point below centroid of improv at feet level
|
||||
virtual const Vector &GetCentroid() const = 0;
|
||||
virtual const Vector &GetEyes() const = 0;
|
||||
|
||||
virtual bool IsRunning() const = 0;
|
||||
virtual bool IsWalking() const = 0;
|
||||
virtual bool IsStopped() const = 0;
|
||||
|
||||
virtual bool IsCrouching() const = 0;
|
||||
virtual bool IsJumping() const = 0;
|
||||
virtual bool IsUsingLadder() const = 0;
|
||||
virtual bool IsOnGround() const = 0;
|
||||
virtual bool IsMoving() const = 0; // if true, improv is walking, crawling, running somewhere
|
||||
|
||||
virtual bool CanRun() const = 0;
|
||||
virtual bool CanCrouch() const = 0;
|
||||
virtual bool CanJump() const = 0;
|
||||
virtual bool IsVisible(const Vector &pos, bool testFOV = false) const = 0; // return true if improv can see position
|
||||
virtual bool IsPlayerLookingAtMe(CBasePlayer *other, float cosTolerance = 0.95f) const = 0; // return true if 'other' is looking right at me
|
||||
virtual CBasePlayer *IsAnyPlayerLookingAtMe(int team = 0, float cosTolerance = 0.95f) const = 0; // return player on given team that is looking right at me (team == 0 means any team), NULL otherwise
|
||||
|
||||
virtual CBasePlayer *GetClosestPlayerByTravelDistance(int team = 0, float *range = NULL) const = 0; // return actual travel distance to closest player on given team (team == 0 means any team)
|
||||
virtual CNavArea *GetLastKnownArea() const = 0;
|
||||
|
||||
virtual void OnUpdate(float deltaT) = 0; // a less frequent, full update 'tick'
|
||||
virtual void OnUpkeep(float deltaT) = 0; // a frequent, lightweight update 'tick'
|
||||
virtual void OnReset() = 0; // reset improv to initial state
|
||||
virtual void OnGameEvent(GameEventType event, CBaseEntity *entity, CBaseEntity *other) = 0; // invoked when an event occurs in the game
|
||||
virtual void OnTouch(CBaseEntity *other) = 0; // "other" has touched us
|
||||
};
|
409
metamod/extra/example/include/hlsdk/game_shared/bot/nav.h
Normal file
409
metamod/extra/example/include/hlsdk/game_shared/bot/nav.h
Normal file
@ -0,0 +1,409 @@
|
||||
/*
|
||||
*
|
||||
* 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
|
||||
|
||||
// STL uses exceptions, but we are not compiling with them - ignore warning
|
||||
#pragma warning(disable : 4530)
|
||||
|
||||
// to help identify nav files
|
||||
#define NAV_MAGIC_NUMBER 0xFEEDFACE
|
||||
|
||||
// version
|
||||
// 1 = hiding spots as plain vector array
|
||||
// 2 = hiding spots as HidingSpot objects
|
||||
// 3 = Encounter spots use HidingSpot ID's instead of storing vector again
|
||||
// 4 = Includes size of source bsp file to verify nav data correlation
|
||||
// ---- Beta Release at V4 -----
|
||||
// 5 = Added Place info
|
||||
#define NAV_VERSION 5
|
||||
|
||||
// A place is a named group of navigation areas
|
||||
typedef unsigned int Place;
|
||||
|
||||
// ie: "no place"
|
||||
#define UNDEFINED_PLACE 0
|
||||
#define ANY_PLACE 0xFFFF
|
||||
|
||||
#define WALK_THRU_DOORS 0x01
|
||||
#define WALK_THRU_BREAKABLES 0x02
|
||||
#define WALK_THRU_EVERYTHING (WALK_THRU_DOORS | WALK_THRU_BREAKABLES)
|
||||
|
||||
enum NavErrorType
|
||||
{
|
||||
NAV_OK,
|
||||
NAV_CANT_ACCESS_FILE,
|
||||
NAV_INVALID_FILE,
|
||||
NAV_BAD_FILE_VERSION,
|
||||
NAV_CORRUPT_DATA,
|
||||
};
|
||||
|
||||
enum NavAttributeType
|
||||
{
|
||||
NAV_CROUCH = 0x01, // must crouch to use this node/area
|
||||
NAV_JUMP = 0x02, // must jump to traverse this area
|
||||
NAV_PRECISE = 0x04, // do not adjust for obstacles, just move along area
|
||||
NAV_NO_JUMP = 0x08, // inhibit discontinuity jumping
|
||||
};
|
||||
|
||||
enum NavDirType
|
||||
{
|
||||
NORTH = 0,
|
||||
EAST,
|
||||
SOUTH,
|
||||
WEST,
|
||||
|
||||
NUM_DIRECTIONS
|
||||
};
|
||||
|
||||
// Defines possible ways to move from one area to another
|
||||
enum NavTraverseType
|
||||
{
|
||||
// NOTE: First 4 directions MUST match NavDirType
|
||||
GO_NORTH = 0,
|
||||
GO_EAST,
|
||||
GO_SOUTH,
|
||||
GO_WEST,
|
||||
GO_LADDER_UP,
|
||||
GO_LADDER_DOWN,
|
||||
GO_JUMP,
|
||||
|
||||
NUM_TRAVERSE_TYPES
|
||||
};
|
||||
|
||||
enum NavCornerType
|
||||
{
|
||||
NORTH_WEST = 0,
|
||||
NORTH_EAST,
|
||||
SOUTH_EAST,
|
||||
SOUTH_WEST,
|
||||
|
||||
NUM_CORNERS
|
||||
};
|
||||
|
||||
enum NavRelativeDirType
|
||||
{
|
||||
FORWARD = 0,
|
||||
RIGHT,
|
||||
BACKWARD,
|
||||
LEFT,
|
||||
UP,
|
||||
DOWN,
|
||||
|
||||
NUM_RELATIVE_DIRECTIONS
|
||||
};
|
||||
|
||||
const float GenerationStepSize = 25.0f; // (30) was 20, but bots can't fit always fit
|
||||
const float StepHeight = 18.0f; // if delta Z is greater than this, we have to jump to get up
|
||||
const float JumpHeight = 41.8f; // if delta Z is less than this, we can jump up on it
|
||||
const float JumpCrouchHeight = 58.0f; // (48) if delta Z is less than or equal to this, we can jumpcrouch up on it
|
||||
|
||||
// Strictly speaking, you CAN get up a slope of 1.643 (about 59 degrees), but you move very, very slowly
|
||||
// This slope will represent the slope you can navigate without much slowdown
|
||||
// rise/run - if greater than this, we can't move up it (de_survivor canyon ramps)
|
||||
const float MaxSlope = 1.4f;
|
||||
|
||||
// instead of MaxSlope, we are using the following max Z component of a unit normal
|
||||
const float MaxUnitZSlope = 0.7f;
|
||||
|
||||
const float BotRadius = 10.0f; // circular extent that contains bot
|
||||
const float DeathDrop = 200.0f; // (300) distance at which we will die if we fall - should be about 600, and pay attention to fall damage during pathfind
|
||||
|
||||
const float HalfHumanWidth = 16.0f;
|
||||
const float HalfHumanHeight = 36.0f;
|
||||
const float HumanHeight = 72.0f;
|
||||
|
||||
struct Extent
|
||||
{
|
||||
Vector lo;
|
||||
Vector hi;
|
||||
|
||||
float SizeX() const { return hi.x - lo.x; }
|
||||
float SizeY() const { return hi.y - lo.y; }
|
||||
float SizeZ() const { return hi.z - lo.z; }
|
||||
float Area() const { return SizeX() * SizeY(); }
|
||||
|
||||
// return true if 'pos' is inside of this extent
|
||||
bool Contains(const Vector *pos) const
|
||||
{
|
||||
return (pos->x >= lo.x && pos->x <= hi.x &&
|
||||
pos->y >= lo.y && pos->y <= hi.y &&
|
||||
pos->z >= lo.z && pos->z <= hi.z);
|
||||
}
|
||||
};
|
||||
|
||||
struct Ray
|
||||
{
|
||||
Vector from;
|
||||
Vector to;
|
||||
};
|
||||
|
||||
inline NavDirType OppositeDirection(NavDirType dir)
|
||||
{
|
||||
switch (dir)
|
||||
{
|
||||
case NORTH:
|
||||
return SOUTH;
|
||||
case EAST:
|
||||
return WEST;
|
||||
case SOUTH:
|
||||
return NORTH;
|
||||
case WEST:
|
||||
return EAST;
|
||||
}
|
||||
|
||||
return NORTH;
|
||||
}
|
||||
|
||||
inline NavDirType DirectionLeft(NavDirType dir)
|
||||
{
|
||||
switch (dir)
|
||||
{
|
||||
case NORTH:
|
||||
return WEST;
|
||||
case SOUTH:
|
||||
return EAST;
|
||||
case EAST:
|
||||
return NORTH;
|
||||
case WEST:
|
||||
return SOUTH;
|
||||
}
|
||||
|
||||
return NORTH;
|
||||
}
|
||||
|
||||
inline NavDirType DirectionRight(NavDirType dir)
|
||||
{
|
||||
switch (dir)
|
||||
{
|
||||
case NORTH:
|
||||
return EAST;
|
||||
case SOUTH:
|
||||
return WEST;
|
||||
case EAST:
|
||||
return SOUTH;
|
||||
case WEST:
|
||||
return NORTH;
|
||||
}
|
||||
|
||||
return NORTH;
|
||||
}
|
||||
|
||||
inline void AddDirectionVector(Vector *v, NavDirType dir, float amount)
|
||||
{
|
||||
switch (dir)
|
||||
{
|
||||
case NORTH:
|
||||
v->y -= amount;
|
||||
return;
|
||||
case SOUTH:
|
||||
v->y += amount;
|
||||
return;
|
||||
case EAST:
|
||||
v->x += amount;
|
||||
return;
|
||||
case WEST:
|
||||
v->x -= amount;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
inline float DirectionToAngle(NavDirType dir)
|
||||
{
|
||||
switch (dir)
|
||||
{
|
||||
case NORTH:
|
||||
return 270.0f;
|
||||
case EAST:
|
||||
return 0.0f;
|
||||
case SOUTH:
|
||||
return 90.0f;
|
||||
case WEST:
|
||||
return 180.0f;
|
||||
}
|
||||
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
inline NavDirType AngleToDirection(float angle)
|
||||
{
|
||||
while (angle < 0.0f)
|
||||
angle += 360.0f;
|
||||
|
||||
while (angle > 360.0f)
|
||||
angle -= 360.0f;
|
||||
|
||||
if (angle < 45 || angle > 315)
|
||||
return EAST;
|
||||
|
||||
if (angle >= 45 && angle < 135)
|
||||
return SOUTH;
|
||||
|
||||
if (angle >= 135 && angle < 225)
|
||||
return WEST;
|
||||
|
||||
return NORTH;
|
||||
}
|
||||
|
||||
inline void DirectionToVector2D(NavDirType dir, Vector2D *v)
|
||||
{
|
||||
switch (dir)
|
||||
{
|
||||
case NORTH:
|
||||
v->x = 0.0f;
|
||||
v->y = -1.0f;
|
||||
break;
|
||||
case SOUTH:
|
||||
v->x = 0.0f;
|
||||
v->y = 1.0f;
|
||||
break;
|
||||
case EAST:
|
||||
v->x = 1.0f;
|
||||
v->y = 0.0f;
|
||||
break;
|
||||
case WEST:
|
||||
v->x = -1.0f;
|
||||
v->y = 0.0f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
inline void SnapToGrid(Vector *pos)
|
||||
{
|
||||
int cx = pos->x / GenerationStepSize;
|
||||
int cy = pos->y / GenerationStepSize;
|
||||
pos->x = cx * GenerationStepSize;
|
||||
pos->y = cy * GenerationStepSize;
|
||||
}
|
||||
|
||||
inline void SnapToGrid(float *value)
|
||||
{
|
||||
int c = *value / GenerationStepSize;
|
||||
*value = c * GenerationStepSize;
|
||||
}
|
||||
|
||||
// custom
|
||||
inline float SnapToGrid(float value)
|
||||
{
|
||||
int c = value / GenerationStepSize;
|
||||
return c * GenerationStepSize;
|
||||
}
|
||||
|
||||
inline float NormalizeAngle(float angle)
|
||||
{
|
||||
while (angle < -180.0f)
|
||||
angle += 360.0f;
|
||||
|
||||
while (angle > 180.0f)
|
||||
angle -= 360.0f;
|
||||
|
||||
return angle;
|
||||
}
|
||||
|
||||
inline float NormalizeAnglePositive(float angle)
|
||||
{
|
||||
while (angle < 0.0f)
|
||||
angle += 360.0f;
|
||||
|
||||
while (angle >= 360.0f)
|
||||
angle -= 360.0f;
|
||||
|
||||
return angle;
|
||||
}
|
||||
|
||||
inline float AngleDifference(float a, float b)
|
||||
{
|
||||
float angleDiff = a - b;
|
||||
|
||||
while (angleDiff > 180.0f)
|
||||
angleDiff -= 360.0f;
|
||||
|
||||
while (angleDiff < -180.0f)
|
||||
angleDiff += 360.0f;
|
||||
|
||||
return angleDiff;
|
||||
}
|
||||
|
||||
inline bool AnglesAreEqual(float a, float b, float tolerance = 5.0f)
|
||||
{
|
||||
if (abs(int64(AngleDifference(a, b))) < tolerance)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
inline bool VectorsAreEqual(const Vector *a, const Vector *b, float tolerance = 0.1f)
|
||||
{
|
||||
if (abs(a->x - b->x) < tolerance
|
||||
&& abs(a->y - b->y) < tolerance
|
||||
&& abs(a->z - b->z) < tolerance)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
inline bool IsEntityWalkable(entvars_t *entity, unsigned int flags)
|
||||
{
|
||||
// if we hit a door, assume its walkable because it will open when we touch it
|
||||
if (FClassnameIs(entity, "func_door") || FClassnameIs(entity, "func_door_rotating"))
|
||||
return (flags & WALK_THRU_DOORS) ? true : false;
|
||||
|
||||
// if we hit a breakable object, assume its walkable because we will shoot it when we touch it
|
||||
if (FClassnameIs(entity, "func_breakable") && entity->takedamage == DAMAGE_YES)
|
||||
return (flags & WALK_THRU_BREAKABLES) ? true : false;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check LOS, ignoring any entities that we can walk through
|
||||
inline bool IsWalkableTraceLineClear(Vector &from, Vector &to, unsigned int flags = 0)
|
||||
{
|
||||
TraceResult result;
|
||||
edict_t *ignore = NULL;
|
||||
Vector useFrom = from;
|
||||
|
||||
while (true)
|
||||
{
|
||||
UTIL_TraceLine(useFrom, to, ignore_monsters, ignore, &result);
|
||||
|
||||
if (result.flFraction != 1.0f && IsEntityWalkable(VARS(result.pHit), flags))
|
||||
{
|
||||
ignore = result.pHit;
|
||||
|
||||
Vector dir = to - from;
|
||||
dir.NormalizeInPlace();
|
||||
useFrom = result.vecEndPos + 5.0f * dir;
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
if (result.flFraction == 1.0f)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
320
metamod/extra/example/include/hlsdk/game_shared/bot/nav_area.h
Normal file
320
metamod/extra/example/include/hlsdk/game_shared/bot/nav_area.h
Normal file
@ -0,0 +1,320 @@
|
||||
/*
|
||||
*
|
||||
* 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 <list>
|
||||
|
||||
class CNavArea;
|
||||
enum NavEditCmdType
|
||||
{
|
||||
EDIT_NONE,
|
||||
EDIT_DELETE, // delete current area
|
||||
EDIT_SPLIT, // split current area
|
||||
EDIT_MERGE, // merge adjacent areas
|
||||
EDIT_JOIN, // define connection between areas
|
||||
EDIT_BREAK, // break connection between areas
|
||||
EDIT_MARK, // mark an area for further operations
|
||||
EDIT_ATTRIB_CROUCH, // toggle crouch attribute on current area
|
||||
EDIT_ATTRIB_JUMP, // toggle jump attribute on current area
|
||||
EDIT_ATTRIB_PRECISE, // toggle precise attribute on current area
|
||||
EDIT_ATTRIB_NO_JUMP, // toggle inhibiting discontinuity jumping in current area
|
||||
EDIT_BEGIN_AREA, // begin creating a new nav area
|
||||
EDIT_END_AREA, // end creation of the new nav area
|
||||
EDIT_CONNECT, // connect marked area to selected area
|
||||
EDIT_DISCONNECT, // disconnect marked area from selected area
|
||||
EDIT_SPLICE, // create new area in between marked and selected areas
|
||||
EDIT_TOGGLE_PLACE_MODE, // switch between normal and place editing
|
||||
EDIT_TOGGLE_PLACE_PAINTING, // switch between "painting" places onto areas
|
||||
EDIT_PLACE_FLOODFILL, // floodfill areas out from current area
|
||||
EDIT_PLACE_PICK, // "pick up" the place at the current area
|
||||
EDIT_MARK_UNNAMED, // mark an unnamed area for further operations
|
||||
EDIT_WARP_TO_MARK, // warp a spectating local player to the selected mark
|
||||
EDIT_SELECT_CORNER, // select a corner on the current area
|
||||
EDIT_RAISE_CORNER, // raise a corner on the current area
|
||||
EDIT_LOWER_CORNER, // lower a corner on the current area
|
||||
};
|
||||
|
||||
enum RouteType
|
||||
{
|
||||
FASTEST_ROUTE,
|
||||
SAFEST_ROUTE,
|
||||
};
|
||||
|
||||
union NavConnect
|
||||
{
|
||||
unsigned int id;
|
||||
CNavArea *area;
|
||||
|
||||
bool operator==(const NavConnect &other) const { return (area == other.area) ? true : false; }
|
||||
};
|
||||
|
||||
typedef std::list<NavConnect> NavConnectList;
|
||||
|
||||
enum LadderDirectionType
|
||||
{
|
||||
LADDER_UP = 0,
|
||||
LADDER_DOWN,
|
||||
NUM_LADDER_DIRECTIONS
|
||||
};
|
||||
|
||||
class CNavLadder {
|
||||
public:
|
||||
Vector m_top;
|
||||
Vector m_bottom;
|
||||
float m_length;
|
||||
NavDirType m_dir;
|
||||
Vector2D m_dirVector;
|
||||
CBaseEntity *m_entity;
|
||||
|
||||
CNavArea *m_topForwardArea;
|
||||
CNavArea *m_topLeftArea;
|
||||
CNavArea *m_topRightArea;
|
||||
CNavArea *m_topBehindArea;
|
||||
CNavArea *m_bottomArea;
|
||||
|
||||
bool m_isDangling;
|
||||
|
||||
void OnDestroyNotify(CNavArea *dead)
|
||||
{
|
||||
if (dead == m_topForwardArea)
|
||||
m_topForwardArea = NULL;
|
||||
|
||||
if (dead == m_topLeftArea)
|
||||
m_topLeftArea = NULL;
|
||||
|
||||
if (dead == m_topRightArea)
|
||||
m_topRightArea = NULL;
|
||||
|
||||
if (dead == m_topBehindArea)
|
||||
m_topBehindArea = NULL;
|
||||
|
||||
if (dead == m_bottomArea)
|
||||
m_bottomArea = NULL;
|
||||
}
|
||||
};
|
||||
|
||||
typedef std::list<CNavLadder *> NavLadderList;
|
||||
|
||||
class HidingSpot {
|
||||
public:
|
||||
enum
|
||||
{
|
||||
IN_COVER = 0x01,
|
||||
GOOD_SNIPER_SPOT = 0x02,
|
||||
IDEAL_SNIPER_SPOT = 0x04
|
||||
};
|
||||
|
||||
bool HasGoodCover() const { return (m_flags & IN_COVER) ? true : false; }
|
||||
bool IsGoodSniperSpot() const { return (m_flags & GOOD_SNIPER_SPOT) ? true : false; }
|
||||
bool IsIdealSniperSpot() const { return (m_flags & IDEAL_SNIPER_SPOT) ? true : false; }
|
||||
|
||||
void SetFlags(unsigned char flags) { m_flags |= flags; }
|
||||
unsigned char GetFlags() const { return m_flags; }
|
||||
|
||||
const Vector *GetPosition() const { return &m_pos; }
|
||||
unsigned int GetID() const { return m_id; }
|
||||
|
||||
private:
|
||||
Vector m_pos;
|
||||
unsigned int m_id;
|
||||
unsigned int m_marker;
|
||||
unsigned char m_flags;
|
||||
};
|
||||
|
||||
typedef std::list<HidingSpot *> HidingSpotList;
|
||||
|
||||
struct SpotOrder
|
||||
{
|
||||
float t;
|
||||
union
|
||||
{
|
||||
HidingSpot *spot;
|
||||
unsigned int id;
|
||||
};
|
||||
};
|
||||
|
||||
typedef std::list<SpotOrder> SpotOrderList;
|
||||
|
||||
struct SpotEncounter
|
||||
{
|
||||
NavConnect from;
|
||||
NavDirType fromDir;
|
||||
NavConnect to;
|
||||
NavDirType toDir;
|
||||
Ray path; // the path segment
|
||||
SpotOrderList spotList; // list of spots to look at, in order of occurrence
|
||||
};
|
||||
|
||||
typedef std::list<SpotEncounter> SpotEncounterList;
|
||||
typedef std::list<CNavArea *> NavAreaList;
|
||||
|
||||
// A CNavArea is a rectangular region defining a walkable area in the map
|
||||
class CNavArea {
|
||||
public:
|
||||
unsigned int GetID() const { return m_id; }
|
||||
void SetAttributes(unsigned char bits) { m_attributeFlags = bits; }
|
||||
unsigned char GetAttributes() const { return m_attributeFlags; }
|
||||
void SetPlace(Place place) { m_place = place; } // set place descriptor
|
||||
Place GetPlace() const { return m_place; } // get place descriptor
|
||||
|
||||
int GetAdjacentCount(NavDirType dir) const { return m_connect[dir].size(); } // return number of connected areas in given direction
|
||||
const NavConnectList *GetAdjacentList(NavDirType dir) const { return &m_connect[dir]; }
|
||||
|
||||
const NavLadderList *GetLadderList(LadderDirectionType dir) const { return &m_ladder[dir]; }
|
||||
|
||||
// for hunting algorithm
|
||||
void SetClearedTimestamp(int teamID) { m_clearedTimestamp[teamID] = gpGlobals->time; } // set this area's "clear" timestamp to now
|
||||
float GetClearedTimestamp(int teamID) { return m_clearedTimestamp[teamID]; } // get time this area was marked "clear"
|
||||
|
||||
// hiding spots
|
||||
const HidingSpotList *GetHidingSpotList() const { return &m_hidingSpotList; }
|
||||
|
||||
float GetSizeX() const { return m_extent.hi.x - m_extent.lo.x; }
|
||||
float GetSizeY() const { return m_extent.hi.y - m_extent.lo.y; }
|
||||
|
||||
const Extent *GetExtent() const { return &m_extent; }
|
||||
const Vector *GetCenter() const { return &m_center; }
|
||||
|
||||
// approach areas
|
||||
struct ApproachInfo
|
||||
{
|
||||
NavConnect here; // the approach area
|
||||
NavConnect prev; // the area just before the approach area on the path
|
||||
NavTraverseType prevToHereHow;
|
||||
NavConnect next; // the area just after the approach area on the path
|
||||
NavTraverseType hereToNextHow;
|
||||
};
|
||||
|
||||
const ApproachInfo *GetApproachInfo(int i) const { return &m_approach[i]; }
|
||||
int GetApproachInfoCount() const { return m_approachCount; }
|
||||
|
||||
void SetParent(CNavArea *parent, NavTraverseType how = NUM_TRAVERSE_TYPES) { m_parent = parent; m_parentHow = how; }
|
||||
CNavArea *GetParent() const { return m_parent; }
|
||||
NavTraverseType GetParentHow() const { return m_parentHow; }
|
||||
|
||||
void SetTotalCost(float value) { m_totalCost = value; }
|
||||
float GetTotalCost() const { return m_totalCost; }
|
||||
|
||||
void SetCostSoFar(float value) { m_costSoFar = value; }
|
||||
float GetCostSoFar() const { return m_costSoFar; }
|
||||
|
||||
public:
|
||||
friend class CNavAreaGrid;
|
||||
friend class CCSBotManager;
|
||||
|
||||
unsigned int m_id; // unique area ID
|
||||
Extent m_extent; // extents of area in world coords (NOTE: lo.z is not necessarily the minimum Z, but corresponds to Z at point (lo.x, lo.y), etc
|
||||
Vector m_center; // centroid of area
|
||||
unsigned char m_attributeFlags; // set of attribute bit flags (see NavAttributeType)
|
||||
Place m_place; // place descriptor
|
||||
|
||||
// height of the implicit corners
|
||||
float m_neZ;
|
||||
float m_swZ;
|
||||
|
||||
enum { MAX_AREA_TEAMS = 2 };
|
||||
|
||||
// for hunting
|
||||
float m_clearedTimestamp[MAX_AREA_TEAMS]; // time this area was last "cleared" of enemies
|
||||
|
||||
// danger
|
||||
float m_danger[MAX_AREA_TEAMS]; // danger of this area, allowing bots to avoid areas where they died in the past - zero is no danger
|
||||
float m_dangerTimestamp[MAX_AREA_TEAMS]; // time when danger value was set - used for decaying
|
||||
|
||||
// hiding spots
|
||||
HidingSpotList m_hidingSpotList;
|
||||
|
||||
// encounter spots
|
||||
SpotEncounterList m_spotEncounterList; // list of possible ways to move thru this area, and the spots to look at as we do
|
||||
|
||||
// approach areas
|
||||
enum { MAX_APPROACH_AREAS = 16 };
|
||||
ApproachInfo m_approach[MAX_APPROACH_AREAS];
|
||||
unsigned char m_approachCount;
|
||||
|
||||
// A* pathfinding algorithm
|
||||
unsigned int m_marker; // used to flag the area as visited
|
||||
CNavArea *m_parent; // the area just prior to this on in the search path
|
||||
NavTraverseType m_parentHow; // how we get from parent to us
|
||||
float m_totalCost; // the distance so far plus an estimate of the distance left
|
||||
float m_costSoFar; // distance travelled so far
|
||||
|
||||
CNavArea *m_nextOpen, *m_prevOpen; // only valid if m_openMarker == m_masterMarker
|
||||
unsigned int m_openMarker; // if this equals the current marker value, we are on the open list
|
||||
|
||||
// connections to adjacent areas
|
||||
NavConnectList m_connect[ NUM_DIRECTIONS ]; // a list of adjacent areas for each direction
|
||||
NavLadderList m_ladder[ NUM_LADDER_DIRECTIONS ]; // list of ladders leading up and down from this area
|
||||
|
||||
CNavNode *m_node[ NUM_CORNERS ]; // nav nodes at each corner of the area
|
||||
NavAreaList m_overlapList; // list of areas that overlap this area
|
||||
|
||||
CNavArea *m_prevHash, *m_nextHash; // for hash table in CNavAreaGrid
|
||||
};
|
||||
|
||||
// The CNavAreaGrid is used to efficiently access navigation areas by world position
|
||||
// Each cell of the grid contains a list of areas that overlap it
|
||||
// Given a world position, the corresponding grid cell is ( x/cellsize, y/cellsize )
|
||||
class CNavAreaGrid {
|
||||
public:
|
||||
const float m_cellSize;
|
||||
NavAreaList *m_grid;
|
||||
int m_gridSizeX;
|
||||
int m_gridSizeY;
|
||||
float m_minX;
|
||||
float m_minY;
|
||||
unsigned int m_areaCount; // total number of nav areas
|
||||
|
||||
enum { HASH_TABLE_SIZE = 256 };
|
||||
CNavArea *m_hashTable[HASH_TABLE_SIZE]; // hash table to optimize lookup by ID
|
||||
inline int ComputeHashKey(unsigned int id) const // returns a hash key for the given nav area ID
|
||||
{
|
||||
return id & 0xFF;
|
||||
}
|
||||
inline int WorldToGridX(float wx) const
|
||||
{
|
||||
int x = (wx - m_minX) / m_cellSize;
|
||||
if (x < 0)
|
||||
x = 0;
|
||||
|
||||
else if (x >= m_gridSizeX)
|
||||
x = m_gridSizeX - 1;
|
||||
|
||||
return x;
|
||||
}
|
||||
inline int WorldToGridY(float wy) const
|
||||
{
|
||||
int y = (wy - m_minY) / m_cellSize;
|
||||
if (y < 0)
|
||||
y = 0;
|
||||
else if (y >= m_gridSizeY)
|
||||
y = m_gridSizeY - 1;
|
||||
|
||||
return y;
|
||||
}
|
||||
};
|
110
metamod/extra/example/include/hlsdk/game_shared/bot/nav_node.h
Normal file
110
metamod/extra/example/include/hlsdk/game_shared/bot/nav_node.h
Normal file
@ -0,0 +1,110 @@
|
||||
/*
|
||||
*
|
||||
* 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 CNavNode {
|
||||
public:
|
||||
// get navigation node connected in given direction, or NULL if cant go that way
|
||||
CNavNode *GetConnectedNode(NavDirType dir) const;
|
||||
const Vector *GetPosition() const;
|
||||
const Vector *GetNormal() const { return &m_normal; }
|
||||
unsigned int GetID() const { return m_id; }
|
||||
|
||||
CNavNode *GetNext() { return m_next; }
|
||||
|
||||
// create a connection FROM this node TO the given node, in the given direction
|
||||
CNavNode *GetParent() const;
|
||||
|
||||
void MarkAsVisited(NavDirType dir); // mark the given direction as having been visited
|
||||
BOOL HasVisited(NavDirType dir); // return TRUE if the given direction has already been searched
|
||||
|
||||
void Cover() { m_isCovered = true; } // TODO: Should pass in area that is covering
|
||||
BOOL IsCovered() const { return m_isCovered; } // return true if this node has been covered by an area
|
||||
|
||||
void AssignArea(CNavArea *area); // assign the given area to this node
|
||||
CNavArea *GetArea() const; // return associated area
|
||||
|
||||
void SetAttributes(unsigned char bits) { m_attributeFlags = bits; }
|
||||
unsigned char GetAttributes() const { return m_attributeFlags; }
|
||||
|
||||
public:
|
||||
friend void DestroyNavigationMap();
|
||||
|
||||
Vector m_pos; // position of this node in the world
|
||||
Vector m_normal; // surface normal at this location
|
||||
CNavNode *m_to[ NUM_DIRECTIONS ]; // links to north, south, east, and west. NULL if no link
|
||||
unsigned int m_id; // unique ID of this node
|
||||
unsigned char m_attributeFlags; // set of attribute bit flags (see NavAttributeType)
|
||||
|
||||
CNavNode *m_next; // next link in master list
|
||||
|
||||
// below are only needed when generating
|
||||
// flags for automatic node generation. If direction bit is clear, that direction hasn't been explored yet.
|
||||
unsigned char m_visited;
|
||||
CNavNode *m_parent; // the node prior to this in the search, which we pop back to when this node's search is done (a stack)
|
||||
BOOL m_isCovered; // true when this node is "covered" by a CNavArea
|
||||
CNavArea *m_area; // the area this node is contained within
|
||||
};
|
||||
|
||||
inline CNavNode *CNavNode::GetConnectedNode(NavDirType dir) const
|
||||
{
|
||||
return m_to[ dir ];
|
||||
}
|
||||
|
||||
inline const Vector *CNavNode::GetPosition() const
|
||||
{
|
||||
return &m_pos;
|
||||
}
|
||||
|
||||
inline CNavNode *CNavNode::GetParent() const
|
||||
{
|
||||
return m_parent;
|
||||
}
|
||||
|
||||
inline void CNavNode::MarkAsVisited(NavDirType dir)
|
||||
{
|
||||
m_visited |= (1 << dir);
|
||||
}
|
||||
|
||||
inline BOOL CNavNode::HasVisited(NavDirType dir)
|
||||
{
|
||||
if (m_visited & (1 << dir))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
inline void CNavNode::AssignArea(CNavArea *area)
|
||||
{
|
||||
m_area = area;
|
||||
}
|
||||
|
||||
inline CNavArea *CNavNode::GetArea() const
|
||||
{
|
||||
return m_area;
|
||||
}
|
@ -0,0 +1,99 @@
|
||||
/*
|
||||
*
|
||||
* 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
|
||||
|
||||
// STL uses exceptions, but we are not compiling with them - ignore warning
|
||||
#pragma warning(disable : 4530)
|
||||
|
||||
class CNavPath {
|
||||
public:
|
||||
CNavPath() { m_segmentCount = 0; }
|
||||
|
||||
struct PathSegment
|
||||
{
|
||||
CNavArea *area; // the area along the path
|
||||
NavTraverseType how; // how to enter this area from the previous one
|
||||
Vector pos; // our movement goal position at this point in the path
|
||||
const CNavLadder *ladder; // if "how" refers to a ladder, this is it
|
||||
};
|
||||
|
||||
const PathSegment *operator[](int i) { return (i >= 0 && i < m_segmentCount) ? &m_path[i] : NULL; }
|
||||
int GetSegmentCount() const { return m_segmentCount; }
|
||||
const Vector &GetEndpoint() const { return m_path[ m_segmentCount - 1 ].pos; }
|
||||
|
||||
bool IsValid() const { return (m_segmentCount > 0); }
|
||||
void Invalidate() { m_segmentCount = 0; }
|
||||
public:
|
||||
enum { MAX_PATH_SEGMENTS = 256 };
|
||||
PathSegment m_path[ MAX_PATH_SEGMENTS ];
|
||||
int m_segmentCount;
|
||||
|
||||
bool ComputePathPositions(); // determine actual path positions
|
||||
bool BuildTrivialPath(const Vector *start, const Vector *goal); // utility function for when start and goal are in the same area
|
||||
int FindNextOccludedNode(int anchor_); // used by Optimize()
|
||||
};
|
||||
|
||||
// Monitor improv movement and determine if it becomes stuck
|
||||
class CStuckMonitor {
|
||||
public:
|
||||
bool IsStuck() const { return m_isStuck; }
|
||||
float GetDuration() const { return m_isStuck ? m_stuckTimer.GetElapsedTime() : 0.0f; }
|
||||
public:
|
||||
bool m_isStuck; // if true, we are stuck
|
||||
Vector m_stuckSpot; // the location where we became stuck
|
||||
IntervalTimer m_stuckTimer; // how long we have been stuck
|
||||
|
||||
enum { MAX_VEL_SAMPLES = 5 };
|
||||
|
||||
float m_avgVel[ MAX_VEL_SAMPLES ];
|
||||
int m_avgVelIndex;
|
||||
int m_avgVelCount;
|
||||
Vector m_lastCentroid;
|
||||
float m_lastTime;
|
||||
};
|
||||
|
||||
// The CNavPathFollower class implements path following behavior
|
||||
class CNavPathFollower {
|
||||
public:
|
||||
void SetImprov(CImprov *improv) { m_improv = improv; }
|
||||
void SetPath(CNavPath *path) { m_path = path; }
|
||||
|
||||
void Debug(bool status) { m_isDebug = status; } // turn debugging on/off
|
||||
public:
|
||||
int FindOurPositionOnPath(Vector *close, bool local) const; // return the closest point to our current position on current path
|
||||
int FindPathPoint(float aheadRange, Vector *point, int *prevIndex); // compute a point a fixed distance ahead along our path.
|
||||
|
||||
CImprov *m_improv; // who is doing the path following
|
||||
CNavPath *m_path; // the path being followed
|
||||
int m_segmentIndex; // the point on the path the improv is moving towards
|
||||
int m_behindIndex; // index of the node on the path just behind us
|
||||
Vector m_goal; // last computed follow goal
|
||||
bool m_isLadderStarted;
|
||||
bool m_isDebug;
|
||||
CStuckMonitor m_stuckMonitor;
|
||||
};
|
@ -0,0 +1,101 @@
|
||||
/*
|
||||
*
|
||||
* 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
|
||||
|
||||
// Encapsulation of a finite-state-machine state
|
||||
template<typename T>
|
||||
class SimpleState {
|
||||
public:
|
||||
SimpleState() { m_parent = NULL; }
|
||||
|
||||
virtual ~SimpleState() {};
|
||||
virtual void OnEnter(T userData) {}; // when state is entered
|
||||
virtual void OnUpdate(T userData) {}; // state behavior
|
||||
virtual void OnExit(T userData) {}; // when state exited
|
||||
virtual const char *GetName() const = 0; // return state name
|
||||
|
||||
void SetParent(SimpleState<T> *parent)
|
||||
{
|
||||
m_parent = parent;
|
||||
}
|
||||
SimpleState<T> *GetParent() const
|
||||
{
|
||||
return m_parent;
|
||||
}
|
||||
|
||||
private:
|
||||
// the parent state that contains this state
|
||||
SimpleState<T> *m_parent;
|
||||
};
|
||||
|
||||
// Encapsulation of a finite state machine
|
||||
template<typename T, typename S>
|
||||
class SimpleStateMachine {
|
||||
public:
|
||||
SimpleStateMachine()
|
||||
{
|
||||
m_state = NULL;
|
||||
}
|
||||
void Reset(T userData)
|
||||
{
|
||||
m_userData = userData;
|
||||
m_state = NULL;
|
||||
}
|
||||
// change behavior state - WARNING: not re-entrant. Do not SetState() from within OnEnter() or OnExit()
|
||||
void SetState(S *newState)
|
||||
{
|
||||
if (m_state)
|
||||
m_state->OnExit(m_userData);
|
||||
|
||||
newState->OnEnter(m_userData);
|
||||
|
||||
m_state = newState;
|
||||
m_stateTimer.Start();
|
||||
}
|
||||
// how long have we been in the current state
|
||||
float GetStateDuration() const
|
||||
{
|
||||
return m_stateTimer.GetElapsedTime();
|
||||
}
|
||||
// return true if given state is current state of machine
|
||||
bool IsState(const S *state) const
|
||||
{
|
||||
return (state == m_state);
|
||||
}
|
||||
// execute current state of machine
|
||||
void Update()
|
||||
{
|
||||
if (m_state)
|
||||
m_state->OnUpdate(m_userData);
|
||||
}
|
||||
|
||||
protected:
|
||||
S *m_state; // current behavior state
|
||||
IntervalTimer m_stateTimer; // how long have we been in the current state
|
||||
T m_userData;
|
||||
};
|
@ -25,9 +25,11 @@
|
||||
* version.
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef _WIN32
|
||||
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||
#include <windows.h>
|
||||
#include <io.h>
|
||||
#include <direct.h>
|
||||
@ -50,12 +52,12 @@
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
|
||||
class CPerformanceCounter
|
||||
class CCounter
|
||||
{
|
||||
public:
|
||||
CPerformanceCounter();
|
||||
CCounter();
|
||||
|
||||
void InitializePerformanceCounter();
|
||||
bool Init();
|
||||
double GetCurTime();
|
||||
|
||||
private:
|
||||
@ -65,21 +67,22 @@ private:
|
||||
double m_flLastCurrentTime;
|
||||
};
|
||||
|
||||
inline CPerformanceCounter::CPerformanceCounter() :
|
||||
inline CCounter::CCounter() :
|
||||
m_iLowShift(0),
|
||||
m_flPerfCounterFreq(0),
|
||||
m_flCurrentTime(0),
|
||||
m_flLastCurrentTime(0)
|
||||
{
|
||||
InitializePerformanceCounter();
|
||||
Init();
|
||||
}
|
||||
|
||||
inline void CPerformanceCounter::InitializePerformanceCounter()
|
||||
inline bool CCounter::Init()
|
||||
{
|
||||
#ifdef _WIN32
|
||||
|
||||
LARGE_INTEGER performanceFreq;
|
||||
QueryPerformanceFrequency(&performanceFreq);
|
||||
if (!QueryPerformanceFrequency(&performanceFreq))
|
||||
return false;
|
||||
|
||||
// get 32 out of the 64 time bits such that we have around
|
||||
// 1 microsecond resolution
|
||||
@ -99,9 +102,11 @@ inline void CPerformanceCounter::InitializePerformanceCounter()
|
||||
m_flPerfCounterFreq = 1.0 / (double)lowpart;
|
||||
|
||||
#endif // _WIN32
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
inline double CPerformanceCounter::GetCurTime()
|
||||
inline double CCounter::GetCurTime()
|
||||
{
|
||||
#ifdef _WIN32
|
||||
|
@ -0,0 +1,63 @@
|
||||
/*
|
||||
*
|
||||
* 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
|
||||
|
||||
#ifndef _WIN32
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
#endif
|
||||
|
||||
// Simple utility function to allocate memory and duplicate a string
|
||||
inline char *CloneString(const char *str)
|
||||
{
|
||||
if (!str)
|
||||
{
|
||||
char *cloneStr = new char[1];
|
||||
cloneStr[0] = '\0';
|
||||
return cloneStr;
|
||||
}
|
||||
|
||||
char *cloneStr = new char [strlen(str) + 1];
|
||||
strcpy(cloneStr, str);
|
||||
return cloneStr;
|
||||
}
|
||||
|
||||
// Simple utility function to allocate memory and duplicate a wide string
|
||||
inline wchar_t *CloneWString(const wchar_t *str)
|
||||
{
|
||||
if (!str)
|
||||
{
|
||||
wchar_t *cloneStr = new wchar_t[1];
|
||||
cloneStr[0] = L'\0';
|
||||
return cloneStr;
|
||||
}
|
||||
|
||||
wchar_t *cloneStr = new wchar_t [wcslen(str) + 1];
|
||||
wcscpy(cloneStr, str);
|
||||
return cloneStr;
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
/*
|
||||
*
|
||||
* 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 SIMPLE_CHECKSUM_H
|
||||
#define SIMPLE_CHECKSUM_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
// Compute a simple checksum for the given data.
|
||||
// Each byte in the data is multiplied by its position to track re-ordering changes
|
||||
inline unsigned int ComputeSimpleChecksum(const unsigned char *dataPointer, int dataLength)
|
||||
{
|
||||
unsigned int checksum = 0;
|
||||
for (int i = 1; i <= dataLength; i++)
|
||||
{
|
||||
checksum += (*dataPointer) * i;
|
||||
++dataPointer;
|
||||
}
|
||||
|
||||
return checksum;
|
||||
}
|
||||
|
||||
#endif // SIMPLE_CHECKSUM_H
|
76
metamod/extra/example/include/hlsdk/game_shared/steam_util.h
Normal file
76
metamod/extra/example/include/hlsdk/game_shared/steam_util.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
|
||||
|
||||
class SteamFile
|
||||
{
|
||||
public:
|
||||
SteamFile(const char *filename);
|
||||
~SteamFile();
|
||||
|
||||
bool IsValid() const { return (m_fileData) ? true : false; }
|
||||
bool Read(void *data, int length);
|
||||
|
||||
private:
|
||||
byte *m_fileData;
|
||||
int m_fileDataLength;
|
||||
|
||||
byte *m_cursor;
|
||||
int m_bytesLeft;
|
||||
};
|
||||
|
||||
inline SteamFile::SteamFile(const char *filename)
|
||||
{
|
||||
m_fileData = (byte *)LOAD_FILE_FOR_ME(const_cast<char *>(filename), &m_fileDataLength);
|
||||
m_cursor = m_fileData;
|
||||
m_bytesLeft = m_fileDataLength;
|
||||
}
|
||||
|
||||
inline SteamFile::~SteamFile()
|
||||
{
|
||||
if (m_fileData)
|
||||
{
|
||||
FREE_FILE(m_fileData);
|
||||
m_fileData = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
inline bool SteamFile::Read(void *data, int length)
|
||||
{
|
||||
if (length > m_bytesLeft || m_cursor == NULL || m_bytesLeft <= 0)
|
||||
return false;
|
||||
|
||||
byte *readCursor = static_cast<byte *>(data);
|
||||
for (int i = 0; i < length; ++i)
|
||||
{
|
||||
*readCursor++ = *m_cursor++;
|
||||
--m_bytesLeft;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
/*
|
||||
*
|
||||
* 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 "bitvec.h"
|
||||
|
||||
// TODO: this should just be set to MAX_CLIENTS
|
||||
#define VOICE_MAX_PLAYERS 32
|
||||
#define VOICE_MAX_PLAYERS_DW ((VOICE_MAX_PLAYERS / 32) + !!(VOICE_MAX_PLAYERS & 31))
|
||||
|
||||
typedef CBitVec< VOICE_MAX_PLAYERS > CPlayerBitVec;
|
@ -0,0 +1,56 @@
|
||||
/*
|
||||
*
|
||||
* 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 UPDATE_INTERVAL 0.3
|
||||
|
||||
#include "voice_common.h"
|
||||
|
||||
class CGameRules;
|
||||
class CBasePlayer;
|
||||
|
||||
class IVoiceGameMgrHelper {
|
||||
public:
|
||||
virtual ~IVoiceGameMgrHelper() = 0;
|
||||
|
||||
// Called each frame to determine which players are allowed to hear each other. This overrides
|
||||
// whatever squelch settings players have.
|
||||
virtual bool CanPlayerHearPlayer(CBasePlayer *pListener, CBasePlayer *pTalker) = 0;
|
||||
};
|
||||
|
||||
// CVoiceGameMgr manages which clients can hear which other clients.
|
||||
class CVoiceGameMgr {
|
||||
public:
|
||||
virtual ~CVoiceGameMgr() {};
|
||||
public:
|
||||
int m_msgPlayerVoiceMask;
|
||||
int m_msgRequestState;
|
||||
IVoiceGameMgrHelper *m_pHelper;
|
||||
int m_nMaxPlayers;
|
||||
double m_UpdateInterval; // How long since the last update.
|
||||
};
|
@ -1,25 +1,41 @@
|
||||
/***
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
* 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 product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
* 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
|
||||
*
|
||||
****/
|
||||
// pm_defs.h
|
||||
#if !defined( PM_DEFSH )
|
||||
#define PM_DEFSH
|
||||
#ifdef _WIN32
|
||||
* 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 "pm_info.h"
|
||||
#include "pmtrace.h"
|
||||
|
||||
#ifndef USERCMD_H
|
||||
#include "usercmd.h"
|
||||
#endif
|
||||
|
||||
#include "archtypes.h" // DAL
|
||||
#include "const.h"
|
||||
|
||||
#define MAX_PHYSENTS 600 // Must have room for all entities in the world.
|
||||
#define MAX_MOVEENTS 64
|
||||
#define MAX_CLIP_PLANES 5
|
||||
@ -30,24 +46,9 @@
|
||||
#define PM_GLASS_IGNORE 0x00000004 // Ignore entities with non-normal rendermode
|
||||
#define PM_WORLD_ONLY 0x00000008 // Only trace against the world
|
||||
|
||||
// Values for flags parameter of PM_TraceLine
|
||||
#define PM_TRACELINE_PHYSENTSONLY 0
|
||||
#define PM_TRACELINE_ANYVISIBLE 1
|
||||
|
||||
|
||||
#include "pm_info.h"
|
||||
|
||||
// PM_PlayerTrace results.
|
||||
#include "pmtrace.h"
|
||||
|
||||
#if !defined ( USERCMD_H )
|
||||
#include "usercmd.h"
|
||||
#endif
|
||||
|
||||
#include "const.h"
|
||||
|
||||
|
||||
// physent_t
|
||||
typedef struct physent_s
|
||||
{
|
||||
char name[32]; // Name of model, or "player" or "world".
|
||||
@ -63,7 +64,6 @@ typedef struct physent_s
|
||||
int skin; // BSP Contents for such things like fun_door water brushes.
|
||||
int rendermode; // So we can ignore glass
|
||||
|
||||
// Complex collision detection.
|
||||
float frame;
|
||||
int sequence;
|
||||
byte controller[4];
|
||||
@ -75,7 +75,6 @@ typedef struct physent_s
|
||||
int team;
|
||||
int classnumber;
|
||||
|
||||
// For mods
|
||||
int iuser1;
|
||||
int iuser2;
|
||||
int iuser3;
|
||||
@ -88,45 +87,35 @@ typedef struct physent_s
|
||||
vec3_t vuser2;
|
||||
vec3_t vuser3;
|
||||
vec3_t vuser4;
|
||||
} physent_t;
|
||||
|
||||
} physent_t;
|
||||
|
||||
typedef struct playermove_s
|
||||
{
|
||||
int player_index; // So we don't try to run the PM_CheckStuck nudging too quickly.
|
||||
qboolean server; // For debugging, are we running physics code on server side?
|
||||
|
||||
qboolean multiplayer; // 1 == multiplayer server
|
||||
float time; // realtime on host, for reckoning duck timing
|
||||
float frametime; // Duration of this frame
|
||||
|
||||
vec3_t forward, right, up; // Vectors for angles
|
||||
// player state
|
||||
vec3_t origin; // Movement origin.
|
||||
vec3_t angles; // Movement view angles.
|
||||
vec3_t oldangles; // Angles before movement view angles were looked at.
|
||||
vec3_t velocity; // Current movement direction.
|
||||
vec3_t movedir; // For waterjumping, a forced forward velocity so we can fly over lip of ledge.
|
||||
vec3_t basevelocity; // Velocity of the conveyor we are standing, e.g.
|
||||
|
||||
// For ducking/dead
|
||||
vec3_t view_ofs; // Our eye position.
|
||||
vec3_t view_ofs; // For ducking/dead
|
||||
// Our eye position.
|
||||
float flDuckTime; // Time we started duck
|
||||
qboolean bInDuck; // In process of ducking or ducked already?
|
||||
|
||||
// For walking/falling
|
||||
int flTimeStepSound; // Next time we can play a step sound
|
||||
int flTimeStepSound; // For walking/falling
|
||||
// Next time we can play a step sound
|
||||
int iStepLeft;
|
||||
|
||||
float flFallVelocity;
|
||||
vec3_t punchangle;
|
||||
|
||||
float flSwimTime;
|
||||
|
||||
float flNextPrimaryAttack;
|
||||
|
||||
int effects; // MUZZLE FLASH, e.g.
|
||||
|
||||
int flags; // FL_ONGROUND, FL_DUCKING, etc.
|
||||
int usehull; // 0 = regular player hull, 1 = ducked player hull, 2 = point hull
|
||||
float gravity; // Our current gravity and friction.
|
||||
@ -137,19 +126,14 @@ typedef struct playermove_s
|
||||
int deadflag;
|
||||
int spectator; // Should we use spectator physics model?
|
||||
int movetype; // Our movement type, NOCLIP, WALK, FLY
|
||||
|
||||
int onground;
|
||||
int onground; // -1 = in air, else pmove entity number
|
||||
int waterlevel;
|
||||
int watertype;
|
||||
int oldwaterlevel;
|
||||
|
||||
char sztexturename[256];
|
||||
char chtexturetype;
|
||||
|
||||
float maxspeed;
|
||||
float clientmaxspeed; // Player specific maxspeed
|
||||
|
||||
// For mods
|
||||
float clientmaxspeed;
|
||||
int iuser1;
|
||||
int iuser2;
|
||||
int iuser3;
|
||||
@ -162,67 +146,47 @@ typedef struct playermove_s
|
||||
vec3_t vuser2;
|
||||
vec3_t vuser3;
|
||||
vec3_t vuser4;
|
||||
// world state
|
||||
int numphysent; // world state
|
||||
// Number of entities to clip against.
|
||||
int numphysent;
|
||||
physent_t physents[MAX_PHYSENTS];
|
||||
// Number of momvement entities (ladders)
|
||||
int nummoveent;
|
||||
// just a list of ladders
|
||||
physent_t moveents[MAX_MOVEENTS];
|
||||
|
||||
// All things being rendered, for tracing against things you don't actually collide with
|
||||
int numvisent;
|
||||
physent_t visents[ MAX_PHYSENTS ];
|
||||
|
||||
// input to run through physics.
|
||||
usercmd_t cmd;
|
||||
|
||||
// Trace results for objects we collided with.
|
||||
int numtouch;
|
||||
int nummoveent; // Number of momvement entities (ladders)
|
||||
physent_t moveents[MAX_MOVEENTS]; // just a list of ladders
|
||||
int numvisent; // All things being rendered, for tracing against things you don't actually collide with
|
||||
physent_t visents[MAX_PHYSENTS];
|
||||
usercmd_t cmd; // input to run through physics.
|
||||
int numtouch; // Trace results for objects we collided with.
|
||||
pmtrace_t touchindex[MAX_PHYSENTS];
|
||||
char physinfo[MAX_PHYSINFO_STRING]; // Physics info string
|
||||
struct movevars_s *movevars;
|
||||
vec_t _player_mins[4][3];
|
||||
vec_t _player_maxs[4][3];
|
||||
|
||||
char physinfo[ MAX_PHYSINFO_STRING ]; // Physics info string
|
||||
|
||||
struct movevars_s *_movevars;
|
||||
vec3_t _player_mins[ 4 ];
|
||||
vec3_t _player_maxs[ 4 ];
|
||||
|
||||
// Common functions
|
||||
const char *(*PM_Info_ValueForKey) ( const char *s, const char *key );
|
||||
void (*PM_Particle)( float *origin, int color, float life, int zpos, int zvel);
|
||||
int (*PM_TestPlayerPosition) (float *pos, pmtrace_t *ptrace );
|
||||
void (*Con_NPrintf)( int idx, char *fmt, ... );
|
||||
void (*Con_DPrintf)( char *fmt, ... );
|
||||
void (*Con_Printf)( char *fmt, ... );
|
||||
double (*Sys_FloatTime)( void );
|
||||
void (*PM_StuckTouch)( int hitent, pmtrace_t *ptraceresult );
|
||||
int (*PM_PointContents) (float *p, int *truecontents /*filled in if this is non-null*/ );
|
||||
int (*PM_TruePointContents) (float *p);
|
||||
int (*PM_HullPointContents) ( struct hull_s *hull, int num, float *p);
|
||||
pmtrace_t (*PM_PlayerTrace) (float *start, float *end, int traceFlags, int ignore_pe );
|
||||
struct pmtrace_s *(*PM_TraceLine)( float *start, float *end, int flags, int usehulll, int ignore_pe );
|
||||
int32 (*RandomLong)( int32 lLow, int32 lHigh );
|
||||
float (*RandomFloat)( float flLow, float flHigh );
|
||||
int (*PM_GetModelType)( struct model_s *mod );
|
||||
void (*PM_GetModelBounds)( struct model_s *mod, float *mins, float *maxs );
|
||||
void *(*PM_HullForBsp)( physent_t *pe, float *offset );
|
||||
float (*PM_TraceModel)( physent_t *pEnt, float *start, float *end, trace_t *trace );
|
||||
int (*COM_FileSize)(const char *filename);
|
||||
byte *(*COM_LoadFile) (const char *path, int usehunk, int *pLength);
|
||||
void (*COM_FreeFile) ( void *buffer );
|
||||
char *(*memfgets)( byte *pMemFile, int fileSize, int *pFilePos, char *pBuffer, int bufferSize );
|
||||
|
||||
// Functions
|
||||
// Run functions for this frame?
|
||||
const char *(*PM_Info_ValueForKey)(const char *s, const char *key);
|
||||
void (*PM_Particle)(float *origin, int color, float life, int zpos, int zvel);
|
||||
int (*PM_TestPlayerPosition)(float *pos, pmtrace_t *ptrace);
|
||||
void (*Con_NPrintf)(int idx, char *fmt, ...);
|
||||
void (*Con_DPrintf)(char *fmt, ...);
|
||||
void (*Con_Printf)(char *fmt, ...);
|
||||
double (*Sys_FloatTime)();
|
||||
void (*PM_StuckTouch)(int hitent, pmtrace_t *ptraceresult);
|
||||
int (*PM_PointContents)(float *p, int *truecontents);
|
||||
int (*PM_TruePointContents)(float *p);
|
||||
int (*PM_HullPointContents)(struct hull_s *hull, int num, float *p);
|
||||
pmtrace_t (*PM_PlayerTrace)(float *start, float *end, int traceFlags, int ignore_pe);
|
||||
struct pmtrace_s *(*PM_TraceLine)(float *start, float *end, int flags, int usehulll, int ignore_pe);
|
||||
int32 (*RandomLong)(int32 lLow, int32 lHigh);
|
||||
float (*RandomFloat)(float flLow, float flHigh);
|
||||
int (*PM_GetModelType)(struct model_s *mod);
|
||||
void (*PM_GetModelBounds)(struct model_s *mod, float *mins, float *maxs);
|
||||
void *(*PM_HullForBsp)(physent_t *pe, float *offset);
|
||||
float (*PM_TraceModel)(physent_t *pEnt, float *start, float *end, trace_t *trace);
|
||||
int (*COM_FileSize)(char *filename);
|
||||
byte *(*COM_LoadFile)(char *path, int usehunk, int *pLength);
|
||||
void (*COM_FreeFile)(void *buffer);
|
||||
char *(*memfgets)(byte *pMemFile, int fileSize, int *pFilePos, char *pBuffer, int bufferSize);
|
||||
qboolean runfuncs;
|
||||
void (*PM_PlaySound) ( int channel, const char *sample, float volume, float attenuation, int fFlags, int pitch );
|
||||
const char *(*PM_TraceTexture) ( int ground, float *vstart, float *vend );
|
||||
void (*PM_PlaybackEventFull) ( int flags, int clientindex, unsigned short eventindex, float delay, float *origin, float *angles, float fparam1, float fparam2, int iparam1, int iparam2, int bparam1, int bparam2 );
|
||||
void (*PM_PlaySound)(int channel, const char *sample, float volume, float attenuation, int fFlags, int pitch);
|
||||
const char *(*PM_TraceTexture)(int ground, float *vstart, float *vend);
|
||||
void (*PM_PlaybackEventFull)(int flags, int clientindex, unsigned short eventindex, float delay, float *origin, float *angles, float fparam1, float fparam2, int iparam1, int iparam2, int bparam1, int bparam2);
|
||||
|
||||
pmtrace_t (*PM_PlayerTraceEx) (float *start, float *end, int traceFlags, int (*pfnIgnore)( physent_t *pe ) );
|
||||
int (*PM_TestPlayerPositionEx) (float *pos, pmtrace_t *ptrace, int (*pfnIgnore)( physent_t *pe ) );
|
||||
struct pmtrace_s *(*PM_TraceLineEx)( float *start, float *end, int flags, int usehulll, int (*pfnIgnore)( physent_t *pe ) );
|
||||
} playermove_t;
|
||||
|
||||
#endif
|
||||
|
@ -1,25 +1,30 @@
|
||||
/***
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
* 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 product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
* 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
|
||||
*
|
||||
****/
|
||||
// Physics info string definition
|
||||
|
||||
#ifndef PM_INFO_H
|
||||
#define PM_INFO_H
|
||||
#ifdef _WIN32
|
||||
* 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
|
||||
#endif
|
||||
|
||||
#define MAX_PHYSINFO_STRING 256
|
||||
|
||||
#endif // PM_INFO_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