mirror of
https://github.com/s1lentq/roundendblock.git
synced 2024-12-27 12:05:28 +03:00
Adding files to a project
This commit is contained in:
parent
ecb72c9783
commit
e29905b8a5
38
.gitignore
vendored
38
.gitignore
vendored
@ -1,28 +1,10 @@
|
||||
# Compiled Object files
|
||||
*.slo
|
||||
*.lo
|
||||
*.o
|
||||
*.obj
|
||||
|
||||
# Precompiled Headers
|
||||
*.gch
|
||||
*.pch
|
||||
|
||||
# Compiled Dynamic libraries
|
||||
*.so
|
||||
*.dylib
|
||||
*.dll
|
||||
|
||||
# Fortran module files
|
||||
*.mod
|
||||
|
||||
# Compiled Static libraries
|
||||
*.lai
|
||||
*.la
|
||||
*.a
|
||||
*.lib
|
||||
|
||||
# Executables
|
||||
*.exe
|
||||
*.out
|
||||
*.app
|
||||
**/bin
|
||||
**/msvc/Debug
|
||||
**/msvc/Release
|
||||
**/msvc/*.sdf
|
||||
**/msvc/*.opensdf
|
||||
**/msvc/*.user
|
||||
**/msvc/*.suo
|
||||
**/msvc/*.aps
|
||||
**/msvc/ipch
|
||||
**/PublishPath.txt
|
||||
|
41
Makefile
Normal file
41
Makefile
Normal file
@ -0,0 +1,41 @@
|
||||
SOURCE_DIR = src/
|
||||
CPP = /opt/intel/bin/icpc
|
||||
|
||||
BINARY = roundendblock_mm_i386.so
|
||||
BUILD_OBJ_DIR=Release/obj
|
||||
|
||||
OBJECTS = $(SOURCE_DIR)main.cpp $(SOURCE_DIR)memory.cpp $(SOURCE_DIR)meta_api.cpp $(SOURCE_DIR)h_export.cpp
|
||||
|
||||
CFLAGS = -mia32 -O3 -static-intel -fasm-blocks -no-intel-extensions\
|
||||
-falign-functions=2 -funroll-loops -fno-rtti -fno-exceptions\
|
||||
-fno-stack-protector -fno-builtin -shared -static-libgcc\
|
||||
-Wno-unknown-pragmas -s -g0 -fvisibility=hidden -fvisibility-inlines-hidden\
|
||||
-DNDEBUG
|
||||
|
||||
LDFLAGS = -lm -ldl -lstdc++ -std=c++0x
|
||||
INCLUDE = -I$(SOURCE_DIR) -I. -I$(SOURCE_DIR)/sdk
|
||||
|
||||
OBJ_LINUX := $(OBJECTS:$(SOURCE_DIR)/%.cpp=$(BUILD_OBJ_DIR)/%.o)
|
||||
|
||||
$(BUILD_OBJ_DIR)/%.o : $(SOURCE_DIR)/%.cpp
|
||||
$(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
|
||||
|
||||
default: all
|
||||
|
||||
dirs:
|
||||
mkdir -p Release
|
||||
mkdir -p $(BUILD_OBJ_DIR)/src
|
||||
|
||||
binary: $(OBJ_LINUX)
|
||||
rm -f Release/*.*
|
||||
$(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LDFLAGS) -o Release/$(BINARY)
|
||||
|
||||
all: dirs binary
|
||||
|
||||
.PHONY: debug clean
|
||||
|
||||
debug:
|
||||
$(MAKE) all DEBUG=true
|
||||
|
||||
clean:
|
||||
rm -rf ./Release
|
39
msvc/PostBuild.bat
Normal file
39
msvc/PostBuild.bat
Normal file
@ -0,0 +1,39 @@
|
||||
@echo OFF
|
||||
::
|
||||
:: Post-build auto-deploy script
|
||||
:: Create and fill PublishPath.txt file with path to deployment folder
|
||||
:: I.e. PublishPath.txt should contain one line with a folder path
|
||||
:: Call it so:
|
||||
:: IF EXIST "$(ProjectDir)PostBuild.bat" (CALL "$(ProjectDir)PostBuild.bat" "$(TargetDir)" "$(TargetName)" "$(TargetExt)" "$(ProjectDir)")
|
||||
::
|
||||
|
||||
SET targetDir=%~1
|
||||
SET targetName=%~2
|
||||
SET targetExt=%~3
|
||||
SET projectDir=%~4
|
||||
SET destination=
|
||||
|
||||
IF NOT EXIST "%projectDir%\PublishPath.txt" (
|
||||
ECHO No deployment path specified. Create PublishPath.txt near PostBuild.bat with paths on separate lines for auto deployment.
|
||||
exit /B 0
|
||||
)
|
||||
|
||||
FOR /f "tokens=* delims= usebackq" %%a IN ("%projectDir%\PublishPath.txt") DO (
|
||||
ECHO Deploying to: %%a
|
||||
IF NOT "%%a" == "" (
|
||||
copy /Y "%targetDir%%targetName%%targetExt%" "%%a"
|
||||
IF NOT ERRORLEVEL 1 (
|
||||
IF EXIST "%targetDir%%targetName%.pdb" (
|
||||
copy /Y "%targetDir%%targetName%.pdb" "%%a"
|
||||
)
|
||||
) ELSE (
|
||||
ECHO PostBuild.bat ^(27^) : warning : Can't copy '%targetName%%targetExt%' to deploy path '%%a'
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
IF "%%a" == "" (
|
||||
ECHO No deployment path specified.
|
||||
)
|
||||
|
||||
exit /B 0
|
5
msvc/roundendblock.def
Normal file
5
msvc/roundendblock.def
Normal file
@ -0,0 +1,5 @@
|
||||
LIBRARY roundendblock_mm
|
||||
EXPORTS
|
||||
GiveFnptrsToDll @1
|
||||
SECTIONS
|
||||
.data READ WRITE
|
22
msvc/roundendblock.sln
Normal file
22
msvc/roundendblock.sln
Normal file
@ -0,0 +1,22 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 2013
|
||||
VisualStudioVersion = 12.0.21005.1
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "roundendblock", "roundendblock.vcxproj", "{9A72E8DC-7667-46C1-899D-1E8B939564D2}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{9A72E8DC-7667-46C1-899D-1E8B939564D2}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{9A72E8DC-7667-46C1-899D-1E8B939564D2}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{9A72E8DC-7667-46C1-899D-1E8B939564D2}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{9A72E8DC-7667-46C1-899D-1E8B939564D2}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
169
msvc/roundendblock.vcxproj
Normal file
169
msvc/roundendblock.vcxproj
Normal file
@ -0,0 +1,169 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{9A72E8DC-7667-46C1-899D-1E8B939564D2}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>roundendblock</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v120_xp</PlatformToolset>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v120_xp</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<TargetName>roundendblock_mm</TargetName>
|
||||
<PostBuildEventUseInBuild>true</PostBuildEventUseInBuild>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<TargetName>roundendblock_mm</TargetName>
|
||||
<PostBuildEventUseInBuild>true</PostBuildEventUseInBuild>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)../src/;$(SolutionDir)../src/sdk;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PrecompiledHeaderFile>precompiled.h</PrecompiledHeaderFile>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<ModuleDefinitionFile>roundendblock.def</ModuleDefinitionFile>
|
||||
</Link>
|
||||
<PostBuildEvent>
|
||||
<Command>IF EXIST "$(ProjectDir)PostBuild.bat" (CALL "$(ProjectDir)PostBuild.bat" "$(TargetDir)" "$(TargetName)" "$(TargetExt)" "$(ProjectDir)")
|
||||
REM IF EXIST "$(SolutionDir)obfuscate\$(Configuration)\obfuscate.exe" (CALL "$(SolutionDir)obfuscate\$(Configuration)\obfuscate.exe" "$(SolutionPath)" "cleanup")</Command>
|
||||
</PostBuildEvent>
|
||||
<PostBuildEvent>
|
||||
<Message>Automatic deployment script</Message>
|
||||
</PostBuildEvent>
|
||||
<PreBuildEvent>
|
||||
<Command>IF EXIST "$(ProjectDir)PreBuild.bat" (CALL "$(ProjectDir)PreBuild.bat" "$(ProjectDir)..\version\" "$(ProjectDir)..\")
|
||||
REM IF EXIST "$(SolutionDir)obfuscate\$(Configuration)\obfuscate.exe" (CALL "$(SolutionDir)obfuscate\$(Configuration)\obfuscate.exe" "$(SolutionPath)")</Command>
|
||||
<Message>Setup version from Git revision</Message>
|
||||
</PreBuildEvent>
|
||||
<CustomBuildStep>
|
||||
<Command>echo Empty Action</Command>
|
||||
<Message>Force build to run Pre-Build event</Message>
|
||||
<Outputs>subversion.always.run</Outputs>
|
||||
<Inputs>subversion.always.run</Inputs>
|
||||
</CustomBuildStep>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<Optimization>Full</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)../src/;$(SolutionDir)../src/sdk;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PrecompiledHeaderFile>precompiled.h</PrecompiledHeaderFile>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<StringPooling>true</StringPooling>
|
||||
<ExceptionHandling>false</ExceptionHandling>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
|
||||
<DisableSpecificWarnings>
|
||||
</DisableSpecificWarnings>
|
||||
<DebugInformationFormat>None</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<AdditionalDependencies>psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<ModuleDefinitionFile>roundendblock.def</ModuleDefinitionFile>
|
||||
<ProgramDatabaseFile>$(OutDir)$(TargetName).pdb</ProgramDatabaseFile>
|
||||
<ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>
|
||||
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
|
||||
<ManifestFile>$(IntDir)$(TargetName)$(TargetExt).intermediate.manifest</ManifestFile>
|
||||
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
|
||||
</Link>
|
||||
<PostBuildEvent>
|
||||
<Command>IF EXIST "$(ProjectDir)PostBuild.bat" (CALL "$(ProjectDir)PostBuild.bat" "$(TargetDir)" "$(TargetName)" "$(TargetExt)" "$(ProjectDir)")</Command>
|
||||
<Message>Automatic deployment script</Message>
|
||||
</PostBuildEvent>
|
||||
<CustomBuildStep>
|
||||
<Command>echo Empty Action</Command>
|
||||
</CustomBuildStep>
|
||||
<CustomBuildStep>
|
||||
<Message>Force build to run Pre-Build event</Message>
|
||||
</CustomBuildStep>
|
||||
<CustomBuildStep>
|
||||
<Outputs>subversion.always.run</Outputs>
|
||||
</CustomBuildStep>
|
||||
<CustomBuildStep>
|
||||
<Inputs>subversion.always.run</Inputs>
|
||||
</CustomBuildStep>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<None Include="roundendblock.def" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\src\h_export.cpp" />
|
||||
<ClCompile Include="..\src\main.cpp" />
|
||||
<ClCompile Include="..\src\memory.cpp" />
|
||||
<ClCompile Include="..\src\meta_api.cpp" />
|
||||
<ClCompile Include="..\src\precompiled.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\src\memory.h" />
|
||||
<ClInclude Include="..\src\precompiled.h" />
|
||||
<ClInclude Include="..\src\sdk\const.h" />
|
||||
<ClInclude Include="..\src\sdk\custom.h" />
|
||||
<ClInclude Include="..\src\sdk\cvardef.h" />
|
||||
<ClInclude Include="..\src\sdk\edict.h" />
|
||||
<ClInclude Include="..\src\sdk\eiface.h" />
|
||||
<ClInclude Include="..\src\sdk\meta_api.h" />
|
||||
<ClInclude Include="..\src\sdk\mutil.h" />
|
||||
<ClInclude Include="..\src\sdk\plinfo.h" />
|
||||
<ClInclude Include="..\src\sdk\progdefs.h" />
|
||||
<ClInclude Include="..\src\sdk\Sequence.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
52
msvc/roundendblock.vcxproj.filters
Normal file
52
msvc/roundendblock.vcxproj.filters
Normal file
@ -0,0 +1,52 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<None Include="roundendblock.def" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Filter Include="sdk">
|
||||
<UniqueIdentifier>{5c871c67-4e9c-4a4b-a300-78c5a1c7df95}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\src\sdk\const.h">
|
||||
<Filter>sdk</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\sdk\custom.h">
|
||||
<Filter>sdk</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\sdk\cvardef.h">
|
||||
<Filter>sdk</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\sdk\edict.h">
|
||||
<Filter>sdk</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\sdk\eiface.h">
|
||||
<Filter>sdk</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\sdk\meta_api.h">
|
||||
<Filter>sdk</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\sdk\mutil.h">
|
||||
<Filter>sdk</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\sdk\plinfo.h">
|
||||
<Filter>sdk</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\sdk\progdefs.h">
|
||||
<Filter>sdk</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\sdk\Sequence.h">
|
||||
<Filter>sdk</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\memory.h" />
|
||||
<ClInclude Include="..\src\precompiled.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\src\h_export.cpp" />
|
||||
<ClCompile Include="..\src\main.cpp" />
|
||||
<ClCompile Include="..\src\memory.cpp" />
|
||||
<ClCompile Include="..\src\meta_api.cpp" />
|
||||
<ClCompile Include="..\src\precompiled.cpp" />
|
||||
</ItemGroup>
|
||||
</Project>
|
40
src/h_export.cpp
Normal file
40
src/h_export.cpp
Normal file
@ -0,0 +1,40 @@
|
||||
// From SDK dlls/h_export.cpp:
|
||||
|
||||
/***
|
||||
*
|
||||
* Copyright (c) 1999, 2000 Valve LLC. All rights reserved.
|
||||
*
|
||||
* This product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Use, distribution, and modification of this source code and/or resulting
|
||||
* object code is restricted to non-commercial enhancements to products from
|
||||
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||
* without written permission from Valve LLC.
|
||||
*
|
||||
****/
|
||||
/*
|
||||
|
||||
===== h_export.cpp ========================================================
|
||||
|
||||
Entity classes exported by Halflife.
|
||||
|
||||
*/
|
||||
|
||||
#include "precompiled.h"
|
||||
|
||||
// From SDK dlls/h_export.cpp:
|
||||
|
||||
//! Holds engine functionality callbacks
|
||||
enginefuncs_t g_engfuncs;
|
||||
globalvars_t *gpGlobals;
|
||||
|
||||
// Receive engine function table from engine.
|
||||
// This appears to be the _first_ DLL routine called by the engine, so we
|
||||
// do some setup operations here.
|
||||
C_DLLEXPORT void WINAPI GiveFnptrsToDll(enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals)
|
||||
{
|
||||
memcpy(&g_engfuncs, pengfuncsFromEngine, sizeof(enginefuncs_t));
|
||||
gpGlobals = pGlobals;
|
||||
}
|
81
src/main.cpp
Normal file
81
src/main.cpp
Normal file
@ -0,0 +1,81 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
extern mutil_funcs_t *gpMetaUtilFuncs;
|
||||
|
||||
int OnMetaAttach(void)
|
||||
{
|
||||
lib_t g_dllGameMod;
|
||||
|
||||
char *addr;
|
||||
char patch[] = { '\x8B', '\x01', '\xC3' };
|
||||
|
||||
lib_load_info((void *)gpGamedllFuncs->dllapi_table->pfnSpawn, &g_dllGameMod);
|
||||
|
||||
#ifdef _WIN32
|
||||
const char pattern1[] = "\x83\x2A\x2A\x53\x55\x8B\x2A\x56\x33\x2A\x57\x8A";
|
||||
const char pattern2[] = "\xE8\x2A\x2A\x2A\x2A\x8A\x2A\x2A\x83\x2A\x2A\x3C";
|
||||
|
||||
addr = lib_find_pattern(&g_dllGameMod, pattern1, sizeof(pattern1) - 1);
|
||||
#else
|
||||
addr = lib_find_symbol(&g_dllGameMod, "CheckWinConditions__18CHalfLifeMultiplay");
|
||||
|
||||
if (!addr)
|
||||
{
|
||||
addr = lib_find_symbol(&g_dllGameMod, "_ZN18CHalfLifeMultiplay18CheckWinConditionsEv");
|
||||
}
|
||||
#endif // _WIN32
|
||||
|
||||
if (!addr)
|
||||
{
|
||||
gpMetaUtilFuncs->pfnLogError(PLID, "can't find \"CheckWinConditions\"");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!mem_patch(addr, '\xC3', 0))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
addr = lib_find_pattern(&g_dllGameMod, pattern2, sizeof(pattern2) - 1);
|
||||
#else
|
||||
addr = lib_find_symbol(&g_dllGameMod, "HasRoundTimeExpired__18CHalfLifeMultiplay");
|
||||
|
||||
if(!addr)
|
||||
{
|
||||
addr = lib_find_symbol(&g_dllGameMod, "_ZN18CHalfLifeMultiplay19HasRoundTimeExpiredEv");
|
||||
}
|
||||
#endif // _WIN32
|
||||
|
||||
if(!addr)
|
||||
{
|
||||
gpMetaUtilFuncs->pfnLogError(PLID, "can't find \"HasRoundTimeExpired\"");
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
addr += 11;
|
||||
|
||||
if (!mem_patch(addr, '\x02', 1))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
if (*addr == '\x53')
|
||||
{
|
||||
if (!mem_patch(addr, '\xC3', 0))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!mem_memcpy(addr, patch, sizeof(patch)))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
#endif // _WIN32
|
||||
|
||||
return 1;
|
||||
}
|
151
src/memory.cpp
Normal file
151
src/memory.cpp
Normal file
@ -0,0 +1,151 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma comment(lib, "psapi.lib")
|
||||
#endif // _MSC_VER
|
||||
|
||||
#ifdef _WIN32
|
||||
bool lib_load_info(void *addr, lib_t *lib)
|
||||
{
|
||||
MEMORY_BASIC_INFORMATION mem;
|
||||
VirtualQuery(addr, &mem, sizeof(mem));
|
||||
|
||||
IMAGE_DOS_HEADER *dos = (IMAGE_DOS_HEADER*)mem.AllocationBase;
|
||||
IMAGE_NT_HEADERS *pe = (IMAGE_NT_HEADERS*)((dword)dos + (dword)dos->e_lfanew);
|
||||
|
||||
if(pe->Signature != IMAGE_NT_SIGNATURE)
|
||||
return false;
|
||||
|
||||
lib->base = (char *)mem.AllocationBase;
|
||||
lib->size = (size_t)pe->OptionalHeader.SizeOfImage;
|
||||
lib->handle = lib->base;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline bool mem_compare_c(const char *addr,const char *pattern,const char *pattern_end)
|
||||
{
|
||||
const char *c;
|
||||
for(c = pattern; c < pattern_end; ++c, ++addr)
|
||||
{
|
||||
if(*c == *addr || *c == '\x2A')
|
||||
continue;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static char *mem_find_pattern(char *pos,int range,const char *pattern,int len)
|
||||
{
|
||||
char *end;
|
||||
const char *pattern_end;
|
||||
|
||||
pattern_end = pattern + len;
|
||||
|
||||
for(end = pos + range - len; pos < end; ++pos)
|
||||
{
|
||||
if(mem_compare_c(pos,pattern,pattern_end))
|
||||
return pos;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char *lib_find_pattern(lib_t *lib, const char *pattern, int len)
|
||||
{
|
||||
return mem_find_pattern(lib->base, lib->size, pattern, len);
|
||||
}
|
||||
|
||||
#else // _WIN32
|
||||
|
||||
char *lib_find_symbol(lib_t *lib, const char *symbol)
|
||||
{
|
||||
return (char *)dlsym(lib->handle, symbol);
|
||||
}
|
||||
|
||||
static ElfW(Addr) dlsize(void *base)
|
||||
{
|
||||
int i;
|
||||
ElfW(Ehdr) *ehdr;
|
||||
ElfW(Phdr) *phdr;
|
||||
ElfW(Addr) end;
|
||||
|
||||
ehdr = (ElfW(Ehdr)*)base;
|
||||
phdr = (ElfW(Phdr)*)((ElfW(Addr))ehdr + ehdr->e_phoff);
|
||||
|
||||
for(i = 0; i < ehdr->e_phnum; ++i)
|
||||
{
|
||||
if(phdr[i].p_type == PT_LOAD)
|
||||
end = phdr[i].p_vaddr + phdr[i].p_memsz;
|
||||
}
|
||||
|
||||
return end;
|
||||
}
|
||||
|
||||
bool lib_load_info(void *addr, lib_t *lib)
|
||||
{
|
||||
Dl_info info;
|
||||
if((!dladdr(addr, &info) && !info.dli_fbase) || !info.dli_fname)
|
||||
return false;
|
||||
|
||||
lib->base = (char *)info.dli_fbase;
|
||||
lib->size = (size_t)dlsize(info.dli_fbase);
|
||||
lib->handle = (char *)dlopen(info.dli_fname, RTLD_NOW);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool mem_memcpy(char *addr, const char *patch, int len)
|
||||
{
|
||||
size_t size = sysconf(_SC_PAGESIZE);
|
||||
void *alignedAddress = Align(addr);
|
||||
|
||||
if(Align(addr + len - 1) != alignedAddress)
|
||||
size *= 2;
|
||||
|
||||
if(!mprotect(alignedAddress, size, (PROT_READ | PROT_WRITE | PROT_EXEC)))
|
||||
{
|
||||
memcpy(addr, patch, len);
|
||||
return !mprotect(alignedAddress, size, (PROT_READ | PROT_EXEC));
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif // _WIN32
|
||||
|
||||
bool mem_patch(char *addr, unsigned char patch, int pos_byte, int len)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
static HANDLE process = 0;
|
||||
|
||||
DWORD OldProtection = 0;
|
||||
DWORD NewProtection = PAGE_EXECUTE_READWRITE;
|
||||
|
||||
if(!process)
|
||||
process = GetCurrentProcess();
|
||||
|
||||
FlushInstructionCache(process, addr, len);
|
||||
if(VirtualProtect(addr, len, NewProtection, &OldProtection))
|
||||
{
|
||||
*(addr + pos_byte) = patch;
|
||||
return VirtualProtect(addr, len, OldProtection, &NewProtection) != FALSE;
|
||||
}
|
||||
#else
|
||||
size_t size = sysconf(_SC_PAGESIZE);
|
||||
void *alignedAddress = Align(addr);
|
||||
|
||||
if(Align(addr) != alignedAddress)
|
||||
size *= 2;
|
||||
|
||||
if(!mprotect(alignedAddress, size, (PROT_READ | PROT_WRITE | PROT_EXEC)))
|
||||
{
|
||||
*(addr + pos_byte) = patch;
|
||||
return !mprotect(alignedAddress, size, (PROT_READ | PROT_EXEC));
|
||||
}
|
||||
#endif // _WIN32
|
||||
|
||||
return false;
|
||||
}
|
36
src/memory.h
Normal file
36
src/memory.h
Normal file
@ -0,0 +1,36 @@
|
||||
#pragma once
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
#include <psapi.h>
|
||||
|
||||
#define PSAPI_VERSION 1
|
||||
#else
|
||||
#include <elf.h>
|
||||
#include <dlfcn.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/mman.h>
|
||||
#include <link.h>
|
||||
|
||||
#define Align(addr) ((void *)(((long)addr) & ~(sysconf(_SC_PAGESIZE) - 1)))
|
||||
#endif // _WIN32
|
||||
|
||||
struct lib_t
|
||||
{
|
||||
char *base;
|
||||
char *handle;
|
||||
size_t size;
|
||||
};
|
||||
|
||||
#ifdef _WIN32
|
||||
char *lib_find_pattern(lib_t *lib, const char *pattern, int len);
|
||||
#else
|
||||
char *lib_find_symbol(lib_t *lib, const char *symbol);
|
||||
bool mem_memcpy(char *addr, const char *patch, int len);
|
||||
#endif // _WIN32
|
||||
|
||||
bool lib_load_info(void *addr, lib_t *lib);
|
||||
|
||||
bool mem_patch(char *addr, unsigned char patch, int pos_byte, int len = 1);
|
120
src/meta_api.cpp
Normal file
120
src/meta_api.cpp
Normal file
@ -0,0 +1,120 @@
|
||||
// meta_api.cpp - minimal implementation of metamod's plugin interface
|
||||
|
||||
// This is intended to illustrate the (more or less) bare minimum code
|
||||
// required for a valid metamod plugin, and is targeted at those who want
|
||||
// to port existing HL/SDK DLL code to run as a metamod plugin.
|
||||
|
||||
/*
|
||||
* Copyright (c) 2001-2003 Will Day <willday@hpgx.net>
|
||||
*
|
||||
* This file is part of Metamod.
|
||||
*
|
||||
* Metamod 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.
|
||||
*
|
||||
* Metamod 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 Metamod; if not, write to the Free Software Foundation,
|
||||
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* In addition, as a special exception, the author gives permission to
|
||||
* link the code of this program with the Half-Life Game Engine ("HL
|
||||
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||
* respects for all of the code used other than the HL Engine and MODs
|
||||
* from Valve. If you modify this file, you may extend this exception
|
||||
* to your version of the file, but you are not obligated to do so. If
|
||||
* you do not wish to do so, delete this exception statement from your
|
||||
* version.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "precompiled.h"
|
||||
|
||||
// Must provide at least one of these..
|
||||
static META_FUNCTIONS gMetaFunctionTable =
|
||||
{
|
||||
NULL, // pfnGetEntityAPI HL SDK; called before game DLL
|
||||
NULL, // pfnGetEntityAPI_Post META; called after game DLL
|
||||
NULL, // pfnGetEntityAPI2 HL SDK2; called before game DLL
|
||||
NULL, // pfnGetEntityAPI2_Post META; called after game DLL
|
||||
NULL, // pfnGetNewDLLFunctions HL SDK2; called before game DLL
|
||||
NULL, // pfnGetNewDLLFunctions_Post META; called after game DLL
|
||||
NULL, // pfnGetEngineFunctions META; called before HL engine
|
||||
NULL, // pfnGetEngineFunctions_Post META; called after HL engine
|
||||
};
|
||||
|
||||
// Description of plugin
|
||||
plugin_info_t Plugin_info =
|
||||
{
|
||||
META_INTERFACE_VERSION, // ifvers
|
||||
"RoundEndBlock", // name
|
||||
"1.2", // version
|
||||
__DATE__, // date
|
||||
"s1lent", // author
|
||||
"http://www.aghl.ru/", // url
|
||||
"RoundEndBlock", // logtag, all caps please
|
||||
PT_STARTUP, // (when) loadable
|
||||
PT_NEVER, // (when) unloadable
|
||||
};
|
||||
|
||||
// Global vars from metamod:
|
||||
meta_globals_t *gpMetaGlobals; // metamod globals
|
||||
gamedll_funcs_t *gpGamedllFuncs; // gameDLL function tables
|
||||
mutil_funcs_t *gpMetaUtilFuncs; // metamod utility functions
|
||||
|
||||
// Metamod requesting info about this plugin:
|
||||
// ifvers (given) interface_version metamod is using
|
||||
// pPlugInfo (requested) struct with info about plugin
|
||||
// pMetaUtilFuncs (given) table of utility functions provided by metamod
|
||||
C_DLLEXPORT int Meta_Query(char * /*ifvers */, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
|
||||
{
|
||||
// Give metamod our plugin_info struct
|
||||
*pPlugInfo = &Plugin_info;
|
||||
// Get metamod utility function table.
|
||||
gpMetaUtilFuncs = pMetaUtilFuncs;
|
||||
return(TRUE);
|
||||
}
|
||||
|
||||
extern int OnMetaAttach(void);
|
||||
|
||||
// Metamod attaching plugin to the server.
|
||||
// now (given) current phase, ie during map, during changelevel, or at startup
|
||||
// pFunctionTable (requested) table of function tables this plugin catches
|
||||
// pMGlobals (given) global vars from metamod
|
||||
// pGamedllFuncs (given) copy of function tables from game dll
|
||||
C_DLLEXPORT int Meta_Attach(PLUG_LOADTIME /* now */, META_FUNCTIONS *pFunctionTable, meta_globals_t *pMGlobals, gamedll_funcs_t *pGamedllFuncs)
|
||||
{
|
||||
if (!pMGlobals)
|
||||
{
|
||||
LOG_ERROR(PLID, "Meta_Attach called with null pMGlobals");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gpMetaGlobals = pMGlobals;
|
||||
|
||||
if (!pFunctionTable)
|
||||
{
|
||||
LOG_ERROR(PLID, "Meta_Attach called with null pFunctionTable");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
memcpy(pFunctionTable, &gMetaFunctionTable, sizeof(META_FUNCTIONS));
|
||||
gpGamedllFuncs = pGamedllFuncs;
|
||||
|
||||
return OnMetaAttach();
|
||||
}
|
||||
|
||||
// Metamod detaching plugin from the server.
|
||||
// now (given) current phase, ie during map, etc
|
||||
// reason (given) why detaching (refresh, console unload, forced unload, etc)
|
||||
C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME /* now */, PL_UNLOAD_REASON /* reason */)
|
||||
{
|
||||
return(TRUE);
|
||||
}
|
1
src/precompiled.cpp
Normal file
1
src/precompiled.cpp
Normal file
@ -0,0 +1 @@
|
||||
#include "precompiled.h"
|
26
src/precompiled.h
Normal file
26
src/precompiled.h
Normal file
@ -0,0 +1,26 @@
|
||||
#pragma once
|
||||
|
||||
#include <cstring>
|
||||
|
||||
#include <eiface.h>
|
||||
#include <meta_api.h>
|
||||
|
||||
#include "memory.h"
|
||||
|
||||
#ifndef _WIN32
|
||||
|
||||
#define TRUE 1
|
||||
#define FALSE 0
|
||||
|
||||
#endif // _WIN32
|
||||
|
||||
#undef DLLEXPORT
|
||||
|
||||
#ifdef _WIN32
|
||||
#define DLLEXPORT __declspec(dllexport)
|
||||
#else
|
||||
#define DLLEXPORT __attribute__((visibility("default")))
|
||||
#define WINAPI /* */
|
||||
#endif // _WIN32
|
||||
|
||||
#define C_DLLEXPORT extern "C" DLLEXPORT
|
201
src/sdk/Sequence.h
Normal file
201
src/sdk/Sequence.h
Normal file
@ -0,0 +1,201 @@
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
// S c r i p t e d S e q u e n c e s
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
#ifndef _INCLUDE_SEQUENCE_H_
|
||||
#define _INCLUDE_SEQUENCE_H_
|
||||
|
||||
|
||||
#ifndef _DEF_BYTE_
|
||||
typedef unsigned char byte;
|
||||
#endif
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// client_textmessage_t
|
||||
//---------------------------------------------------------------------------
|
||||
typedef struct client_textmessage_s
|
||||
{
|
||||
int effect;
|
||||
byte r1, g1, b1, a1; // 2 colors for effects
|
||||
byte r2, g2, b2, a2;
|
||||
float x;
|
||||
float y;
|
||||
float fadein;
|
||||
float fadeout;
|
||||
float holdtime;
|
||||
float fxtime;
|
||||
const char *pName;
|
||||
const char *pMessage;
|
||||
} client_textmessage_t;
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// sequenceDefaultBits_e
|
||||
//
|
||||
// Enumerated list of possible modifiers for a command. This enumeration
|
||||
// is used in a bitarray controlling what modifiers are specified for a command.
|
||||
//---------------------------------------------------------------------------
|
||||
enum sequenceModifierBits
|
||||
{
|
||||
SEQUENCE_MODIFIER_EFFECT_BIT = (1 << 1),
|
||||
SEQUENCE_MODIFIER_POSITION_BIT = (1 << 2),
|
||||
SEQUENCE_MODIFIER_COLOR_BIT = (1 << 3),
|
||||
SEQUENCE_MODIFIER_COLOR2_BIT = (1 << 4),
|
||||
SEQUENCE_MODIFIER_FADEIN_BIT = (1 << 5),
|
||||
SEQUENCE_MODIFIER_FADEOUT_BIT = (1 << 6),
|
||||
SEQUENCE_MODIFIER_HOLDTIME_BIT = (1 << 7),
|
||||
SEQUENCE_MODIFIER_FXTIME_BIT = (1 << 8),
|
||||
SEQUENCE_MODIFIER_SPEAKER_BIT = (1 << 9),
|
||||
SEQUENCE_MODIFIER_LISTENER_BIT = (1 << 10),
|
||||
SEQUENCE_MODIFIER_TEXTCHANNEL_BIT = (1 << 11),
|
||||
};
|
||||
typedef enum sequenceModifierBits sequenceModifierBits_e ;
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// sequenceCommandEnum_e
|
||||
//
|
||||
// Enumerated sequence command types.
|
||||
//---------------------------------------------------------------------------
|
||||
enum sequenceCommandEnum_
|
||||
{
|
||||
SEQUENCE_COMMAND_ERROR = -1,
|
||||
SEQUENCE_COMMAND_PAUSE = 0,
|
||||
SEQUENCE_COMMAND_FIRETARGETS,
|
||||
SEQUENCE_COMMAND_KILLTARGETS,
|
||||
SEQUENCE_COMMAND_TEXT,
|
||||
SEQUENCE_COMMAND_SOUND,
|
||||
SEQUENCE_COMMAND_GOSUB,
|
||||
SEQUENCE_COMMAND_SENTENCE,
|
||||
SEQUENCE_COMMAND_REPEAT,
|
||||
SEQUENCE_COMMAND_SETDEFAULTS,
|
||||
SEQUENCE_COMMAND_MODIFIER,
|
||||
SEQUENCE_COMMAND_POSTMODIFIER,
|
||||
SEQUENCE_COMMAND_NOOP,
|
||||
|
||||
SEQUENCE_MODIFIER_EFFECT,
|
||||
SEQUENCE_MODIFIER_POSITION,
|
||||
SEQUENCE_MODIFIER_COLOR,
|
||||
SEQUENCE_MODIFIER_COLOR2,
|
||||
SEQUENCE_MODIFIER_FADEIN,
|
||||
SEQUENCE_MODIFIER_FADEOUT,
|
||||
SEQUENCE_MODIFIER_HOLDTIME,
|
||||
SEQUENCE_MODIFIER_FXTIME,
|
||||
SEQUENCE_MODIFIER_SPEAKER,
|
||||
SEQUENCE_MODIFIER_LISTENER,
|
||||
SEQUENCE_MODIFIER_TEXTCHANNEL,
|
||||
};
|
||||
typedef enum sequenceCommandEnum_ sequenceCommandEnum_e;
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// sequenceCommandType_e
|
||||
//
|
||||
// Typeerated sequence command types.
|
||||
//---------------------------------------------------------------------------
|
||||
enum sequenceCommandType_
|
||||
{
|
||||
SEQUENCE_TYPE_COMMAND,
|
||||
SEQUENCE_TYPE_MODIFIER,
|
||||
};
|
||||
typedef enum sequenceCommandType_ sequenceCommandType_e;
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// sequenceCommandMapping_s
|
||||
//
|
||||
// A mapping of a command enumerated-value to its name.
|
||||
//---------------------------------------------------------------------------
|
||||
typedef struct sequenceCommandMapping_ sequenceCommandMapping_s;
|
||||
struct sequenceCommandMapping_
|
||||
{
|
||||
sequenceCommandEnum_e commandEnum;
|
||||
const char* commandName;
|
||||
sequenceCommandType_e commandType;
|
||||
};
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// sequenceCommandLine_s
|
||||
//
|
||||
// Structure representing a single command (usually 1 line) from a
|
||||
// .SEQ file entry.
|
||||
//---------------------------------------------------------------------------
|
||||
typedef struct sequenceCommandLine_ sequenceCommandLine_s;
|
||||
struct sequenceCommandLine_
|
||||
{
|
||||
int commandType; // Specifies the type of command
|
||||
client_textmessage_t clientMessage; // Text HUD message struct
|
||||
char* speakerName; // Targetname of speaking entity
|
||||
char* listenerName; // Targetname of entity being spoken to
|
||||
char* soundFileName; // Name of sound file to play
|
||||
char* sentenceName; // Name of sentences.txt to play
|
||||
char* fireTargetNames; // List of targetnames to fire
|
||||
char* killTargetNames; // List of targetnames to remove
|
||||
float delay; // Seconds 'till next command
|
||||
int repeatCount; // If nonzero, reset execution pointer to top of block (N times, -1 = infinite)
|
||||
int textChannel; // Display channel on which text message is sent
|
||||
int modifierBitField; // Bit field to specify what clientmessage fields are valid
|
||||
sequenceCommandLine_s* nextCommandLine; // Next command (linked list)
|
||||
};
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// sequenceEntry_s
|
||||
//
|
||||
// Structure representing a single command (usually 1 line) from a
|
||||
// .SEQ file entry.
|
||||
//---------------------------------------------------------------------------
|
||||
typedef struct sequenceEntry_ sequenceEntry_s;
|
||||
struct sequenceEntry_
|
||||
{
|
||||
char* fileName; // Name of sequence file without .SEQ extension
|
||||
char* entryName; // Name of entry label in file
|
||||
sequenceCommandLine_s* firstCommand; // Linked list of commands in entry
|
||||
sequenceEntry_s* nextEntry; // Next loaded entry
|
||||
qboolean isGlobal; // Is entry retained over level transitions?
|
||||
};
|
||||
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// sentenceEntry_s
|
||||
// Structure representing a single sentence of a group from a .SEQ
|
||||
// file entry. Sentences are identical to entries in sentences.txt, but
|
||||
// can be unique per level and are loaded/unloaded with the level.
|
||||
//---------------------------------------------------------------------------
|
||||
typedef struct sentenceEntry_ sentenceEntry_s;
|
||||
struct sentenceEntry_
|
||||
{
|
||||
char* data; // sentence data (ie "We have hostiles" )
|
||||
sentenceEntry_s* nextEntry; // Next loaded entry
|
||||
qboolean isGlobal; // Is entry retained over level transitions?
|
||||
unsigned int index; // this entry's position in the file.
|
||||
};
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// sentenceGroupEntry_s
|
||||
// Structure representing a group of sentences found in a .SEQ file.
|
||||
// A sentence group is defined by all sentences with the same name, ignoring
|
||||
// the number at the end of the sentence name. Groups enable a sentence
|
||||
// to be picked at random across a group.
|
||||
//--------------------------------------------------------------------------
|
||||
typedef struct sentenceGroupEntry_ sentenceGroupEntry_s;
|
||||
struct sentenceGroupEntry_
|
||||
{
|
||||
char* groupName; // name of the group (ie CT_ALERT )
|
||||
unsigned int numSentences; // number of sentences in group
|
||||
sentenceEntry_s* firstSentence; // head of linked list of sentences in group
|
||||
sentenceGroupEntry_s* nextEntry; // next loaded group
|
||||
};
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Function declarations
|
||||
//---------------------------------------------------------------------------
|
||||
sequenceEntry_s* SequenceGet( const char* fileName, const char* entryName );
|
||||
void Sequence_ParseFile( const char* fileName, qboolean isGlobal );
|
||||
void Sequence_OnLevelLoad( const char* mapName );
|
||||
sentenceEntry_s* SequencePickSentence( const char *groupName, int pickMethod, int *picked );
|
||||
|
||||
#endif // _INCLUDE_SEQUENCE_H_
|
796
src/sdk/const.h
Normal file
796
src/sdk/const.h
Normal file
@ -0,0 +1,796 @@
|
||||
/***
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
*
|
||||
* This product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Use, distribution, and modification of this source code and/or resulting
|
||||
* object code is restricted to non-commercial enhancements to products from
|
||||
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||
* without written permission from Valve LLC.
|
||||
*
|
||||
****/
|
||||
#ifndef CONST_H
|
||||
#define CONST_H
|
||||
//
|
||||
// Constants shared by the engine and dlls
|
||||
// This header file included by engine files and DLL files.
|
||||
// Most came from server.h
|
||||
|
||||
// edict->flags
|
||||
#define FL_FLY (1<<0) // Changes the SV_Movestep() behavior to not need to be on ground
|
||||
#define FL_SWIM (1<<1) // Changes the SV_Movestep() behavior to not need to be on ground (but stay in water)
|
||||
#define FL_CONVEYOR (1<<2)
|
||||
#define FL_CLIENT (1<<3)
|
||||
#define FL_INWATER (1<<4)
|
||||
#define FL_MONSTER (1<<5)
|
||||
#define FL_GODMODE (1<<6)
|
||||
#define FL_NOTARGET (1<<7)
|
||||
#define FL_SKIPLOCALHOST (1<<8) // Don't send entity to local host, it's predicting this entity itself
|
||||
#define FL_ONGROUND (1<<9) // At rest / on the ground
|
||||
#define FL_PARTIALGROUND (1<<10) // not all corners are valid
|
||||
#define FL_WATERJUMP (1<<11) // player jumping out of water
|
||||
#define FL_FROZEN (1<<12) // Player is frozen for 3rd person camera
|
||||
#define FL_FAKECLIENT (1<<13) // JAC: fake client, simulated server side; don't send network messages to them
|
||||
#define FL_DUCKING (1<<14) // Player flag -- Player is fully crouched
|
||||
#define FL_FLOAT (1<<15) // Apply floating force to this entity when in water
|
||||
#define FL_GRAPHED (1<<16) // worldgraph has this ent listed as something that blocks a connection
|
||||
|
||||
// UNDONE: Do we need these?
|
||||
#define FL_IMMUNE_WATER (1<<17)
|
||||
#define FL_IMMUNE_SLIME (1<<18)
|
||||
#define FL_IMMUNE_LAVA (1<<19)
|
||||
|
||||
#define FL_PROXY (1<<20) // This is a spectator proxy
|
||||
#define FL_ALWAYSTHINK (1<<21) // Brush model flag -- call think every frame regardless of nextthink - ltime (for constantly changing velocity/path)
|
||||
#define FL_BASEVELOCITY (1<<22) // Base velocity has been applied this frame (used to convert base velocity into momentum)
|
||||
#define FL_MONSTERCLIP (1<<23) // Only collide in with monsters who have FL_MONSTERCLIP set
|
||||
#define FL_ONTRAIN (1<<24) // Player is _controlling_ a train, so movement commands should be ignored on client during prediction.
|
||||
#define FL_WORLDBRUSH (1<<25) // Not moveable/removeable brush entity (really part of the world, but represented as an entity for transparency or something)
|
||||
#define FL_SPECTATOR (1<<26) // This client is a spectator, don't run touch functions, etc.
|
||||
#define FL_CUSTOMENTITY (1<<29) // This is a custom entity
|
||||
#define FL_KILLME (1<<30) // This entity is marked for death -- This allows the engine to kill ents at the appropriate time
|
||||
#define FL_DORMANT (1<<31) // Entity is dormant, no updates to client
|
||||
|
||||
|
||||
// Goes into globalvars_t.trace_flags
|
||||
#define FTRACE_SIMPLEBOX (1<<0) // Traceline with a simple box
|
||||
|
||||
|
||||
// walkmove modes
|
||||
#define WALKMOVE_NORMAL 0 // normal walkmove
|
||||
#define WALKMOVE_WORLDONLY 1 // doesn't hit ANY entities, no matter what the solid type
|
||||
#define WALKMOVE_CHECKONLY 2 // move, but don't touch triggers
|
||||
|
||||
// edict->movetype values
|
||||
#define MOVETYPE_NONE 0 // never moves
|
||||
//#define MOVETYPE_ANGLENOCLIP 1
|
||||
//#define MOVETYPE_ANGLECLIP 2
|
||||
#define MOVETYPE_WALK 3 // Player only - moving on the ground
|
||||
#define MOVETYPE_STEP 4 // gravity, special edge handling -- monsters use this
|
||||
#define MOVETYPE_FLY 5 // No gravity, but still collides with stuff
|
||||
#define MOVETYPE_TOSS 6 // gravity/collisions
|
||||
#define MOVETYPE_PUSH 7 // no clip to world, push and crush
|
||||
#define MOVETYPE_NOCLIP 8 // No gravity, no collisions, still do velocity/avelocity
|
||||
#define MOVETYPE_FLYMISSILE 9 // extra size to monsters
|
||||
#define MOVETYPE_BOUNCE 10 // Just like Toss, but reflect velocity when contacting surfaces
|
||||
#define MOVETYPE_BOUNCEMISSILE 11 // bounce w/o gravity
|
||||
#define MOVETYPE_FOLLOW 12 // track movement of aiment
|
||||
#define MOVETYPE_PUSHSTEP 13 // BSP model that needs physics/world collisions (uses nearest hull for world collision)
|
||||
|
||||
// edict->solid values
|
||||
// NOTE: Some movetypes will cause collisions independent of SOLID_NOT/SOLID_TRIGGER when the entity moves
|
||||
// SOLID only effects OTHER entities colliding with this one when they move - UGH!
|
||||
#define SOLID_NOT 0 // no interaction with other objects
|
||||
#define SOLID_TRIGGER 1 // touch on edge, but not blocking
|
||||
#define SOLID_BBOX 2 // touch on edge, block
|
||||
#define SOLID_SLIDEBOX 3 // touch on edge, but not an onground
|
||||
#define SOLID_BSP 4 // bsp clip, touch on edge, block
|
||||
|
||||
// edict->deadflag values
|
||||
#define DEAD_NO 0 // alive
|
||||
#define DEAD_DYING 1 // playing death animation or still falling off of a ledge waiting to hit ground
|
||||
#define DEAD_DEAD 2 // dead. lying still.
|
||||
#define DEAD_RESPAWNABLE 3
|
||||
#define DEAD_DISCARDBODY 4
|
||||
|
||||
#define DAMAGE_NO 0
|
||||
#define DAMAGE_YES 1
|
||||
#define DAMAGE_AIM 2
|
||||
|
||||
// entity effects
|
||||
#define EF_BRIGHTFIELD 1 // swirling cloud of particles
|
||||
#define EF_MUZZLEFLASH 2 // single frame ELIGHT on entity attachment 0
|
||||
#define EF_BRIGHTLIGHT 4 // DLIGHT centered at entity origin
|
||||
#define EF_DIMLIGHT 8 // player flashlight
|
||||
#define EF_INVLIGHT 16 // get lighting from ceiling
|
||||
#define EF_NOINTERP 32 // don't interpolate the next frame
|
||||
#define EF_LIGHT 64 // rocket flare glow sprite
|
||||
#define EF_NODRAW 128 // don't draw entity
|
||||
#define EF_NIGHTVISION 256 // player nightvision
|
||||
#define EF_SNIPERLASER 512 // sniper laser effect
|
||||
#define EF_FIBERCAMERA 1024// fiber camera
|
||||
|
||||
|
||||
// entity flags
|
||||
#define EFLAG_SLERP 1 // do studio interpolation of this entity
|
||||
|
||||
//
|
||||
// temp entity events
|
||||
//
|
||||
#define TE_BEAMPOINTS 0 // beam effect between two points
|
||||
// coord coord coord (start position)
|
||||
// coord coord coord (end position)
|
||||
// short (sprite index)
|
||||
// byte (starting frame)
|
||||
// byte (frame rate in 0.1's)
|
||||
// byte (life in 0.1's)
|
||||
// byte (line width in 0.1's)
|
||||
// byte (noise amplitude in 0.01's)
|
||||
// byte,byte,byte (color)
|
||||
// byte (brightness)
|
||||
// byte (scroll speed in 0.1's)
|
||||
|
||||
#define TE_BEAMENTPOINT 1 // beam effect between point and entity
|
||||
// short (start entity)
|
||||
// coord coord coord (end position)
|
||||
// short (sprite index)
|
||||
// byte (starting frame)
|
||||
// byte (frame rate in 0.1's)
|
||||
// byte (life in 0.1's)
|
||||
// byte (line width in 0.1's)
|
||||
// byte (noise amplitude in 0.01's)
|
||||
// byte,byte,byte (color)
|
||||
// byte (brightness)
|
||||
// byte (scroll speed in 0.1's)
|
||||
|
||||
#define TE_GUNSHOT 2 // particle effect plus ricochet sound
|
||||
// coord coord coord (position)
|
||||
|
||||
#define TE_EXPLOSION 3 // additive sprite, 2 dynamic lights, flickering particles, explosion sound, move vertically 8 pps
|
||||
// coord coord coord (position)
|
||||
// short (sprite index)
|
||||
// byte (scale in 0.1's)
|
||||
// byte (framerate)
|
||||
// byte (flags)
|
||||
//
|
||||
// The Explosion effect has some flags to control performance/aesthetic features:
|
||||
#define TE_EXPLFLAG_NONE 0 // all flags clear makes default Half-Life explosion
|
||||
#define TE_EXPLFLAG_NOADDITIVE 1 // sprite will be drawn opaque (ensure that the sprite you send is a non-additive sprite)
|
||||
#define TE_EXPLFLAG_NODLIGHTS 2 // do not render dynamic lights
|
||||
#define TE_EXPLFLAG_NOSOUND 4 // do not play client explosion sound
|
||||
#define TE_EXPLFLAG_NOPARTICLES 8 // do not draw particles
|
||||
|
||||
|
||||
#define TE_TAREXPLOSION 4 // Quake1 "tarbaby" explosion with sound
|
||||
// coord coord coord (position)
|
||||
|
||||
#define TE_SMOKE 5 // alphablend sprite, move vertically 30 pps
|
||||
// coord coord coord (position)
|
||||
// short (sprite index)
|
||||
// byte (scale in 0.1's)
|
||||
// byte (framerate)
|
||||
|
||||
#define TE_TRACER 6 // tracer effect from point to point
|
||||
// coord, coord, coord (start)
|
||||
// coord, coord, coord (end)
|
||||
|
||||
#define TE_LIGHTNING 7 // TE_BEAMPOINTS with simplified parameters
|
||||
// coord, coord, coord (start)
|
||||
// coord, coord, coord (end)
|
||||
// byte (life in 0.1's)
|
||||
// byte (width in 0.1's)
|
||||
// byte (amplitude in 0.01's)
|
||||
// short (sprite model index)
|
||||
|
||||
#define TE_BEAMENTS 8
|
||||
// short (start entity)
|
||||
// short (end entity)
|
||||
// short (sprite index)
|
||||
// byte (starting frame)
|
||||
// byte (frame rate in 0.1's)
|
||||
// byte (life in 0.1's)
|
||||
// byte (line width in 0.1's)
|
||||
// byte (noise amplitude in 0.01's)
|
||||
// byte,byte,byte (color)
|
||||
// byte (brightness)
|
||||
// byte (scroll speed in 0.1's)
|
||||
|
||||
#define TE_SPARKS 9 // 8 random tracers with gravity, ricochet sprite
|
||||
// coord coord coord (position)
|
||||
|
||||
#define TE_LAVASPLASH 10 // Quake1 lava splash
|
||||
// coord coord coord (position)
|
||||
|
||||
#define TE_TELEPORT 11 // Quake1 teleport splash
|
||||
// coord coord coord (position)
|
||||
|
||||
#define TE_EXPLOSION2 12 // Quake1 colormaped (base palette) particle explosion with sound
|
||||
// coord coord coord (position)
|
||||
// byte (starting color)
|
||||
// byte (num colors)
|
||||
|
||||
#define TE_BSPDECAL 13 // Decal from the .BSP file
|
||||
// coord, coord, coord (x,y,z), decal position (center of texture in world)
|
||||
// short (texture index of precached decal texture name)
|
||||
// short (entity index)
|
||||
// [optional - only included if previous short is non-zero (not the world)] short (index of model of above entity)
|
||||
|
||||
#define TE_IMPLOSION 14 // tracers moving toward a point
|
||||
// coord, coord, coord (position)
|
||||
// byte (radius)
|
||||
// byte (count)
|
||||
// byte (life in 0.1's)
|
||||
|
||||
#define TE_SPRITETRAIL 15 // line of moving glow sprites with gravity, fadeout, and collisions
|
||||
// coord, coord, coord (start)
|
||||
// coord, coord, coord (end)
|
||||
// short (sprite index)
|
||||
// byte (count)
|
||||
// byte (life in 0.1's)
|
||||
// byte (scale in 0.1's)
|
||||
// byte (velocity along vector in 10's)
|
||||
// byte (randomness of velocity in 10's)
|
||||
|
||||
#define TE_BEAM 16 // obsolete
|
||||
|
||||
#define TE_SPRITE 17 // additive sprite, plays 1 cycle
|
||||
// coord, coord, coord (position)
|
||||
// short (sprite index)
|
||||
// byte (scale in 0.1's)
|
||||
// byte (brightness)
|
||||
|
||||
#define TE_BEAMSPRITE 18 // A beam with a sprite at the end
|
||||
// coord, coord, coord (start position)
|
||||
// coord, coord, coord (end position)
|
||||
// short (beam sprite index)
|
||||
// short (end sprite index)
|
||||
|
||||
#define TE_BEAMTORUS 19 // screen aligned beam ring, expands to max radius over lifetime
|
||||
// coord coord coord (center position)
|
||||
// coord coord coord (axis and radius)
|
||||
// short (sprite index)
|
||||
// byte (starting frame)
|
||||
// byte (frame rate in 0.1's)
|
||||
// byte (life in 0.1's)
|
||||
// byte (line width in 0.1's)
|
||||
// byte (noise amplitude in 0.01's)
|
||||
// byte,byte,byte (color)
|
||||
// byte (brightness)
|
||||
// byte (scroll speed in 0.1's)
|
||||
|
||||
#define TE_BEAMDISK 20 // disk that expands to max radius over lifetime
|
||||
// coord coord coord (center position)
|
||||
// coord coord coord (axis and radius)
|
||||
// short (sprite index)
|
||||
// byte (starting frame)
|
||||
// byte (frame rate in 0.1's)
|
||||
// byte (life in 0.1's)
|
||||
// byte (line width in 0.1's)
|
||||
// byte (noise amplitude in 0.01's)
|
||||
// byte,byte,byte (color)
|
||||
// byte (brightness)
|
||||
// byte (scroll speed in 0.1's)
|
||||
|
||||
#define TE_BEAMCYLINDER 21 // cylinder that expands to max radius over lifetime
|
||||
// coord coord coord (center position)
|
||||
// coord coord coord (axis and radius)
|
||||
// short (sprite index)
|
||||
// byte (starting frame)
|
||||
// byte (frame rate in 0.1's)
|
||||
// byte (life in 0.1's)
|
||||
// byte (line width in 0.1's)
|
||||
// byte (noise amplitude in 0.01's)
|
||||
// byte,byte,byte (color)
|
||||
// byte (brightness)
|
||||
// byte (scroll speed in 0.1's)
|
||||
|
||||
#define TE_BEAMFOLLOW 22 // create a line of decaying beam segments until entity stops moving
|
||||
// short (entity:attachment to follow)
|
||||
// short (sprite index)
|
||||
// byte (life in 0.1's)
|
||||
// byte (line width in 0.1's)
|
||||
// byte,byte,byte (color)
|
||||
// byte (brightness)
|
||||
|
||||
#define TE_GLOWSPRITE 23
|
||||
// coord, coord, coord (pos) short (model index) byte (scale / 10)
|
||||
|
||||
#define TE_BEAMRING 24 // connect a beam ring to two entities
|
||||
// short (start entity)
|
||||
// short (end entity)
|
||||
// short (sprite index)
|
||||
// byte (starting frame)
|
||||
// byte (frame rate in 0.1's)
|
||||
// byte (life in 0.1's)
|
||||
// byte (line width in 0.1's)
|
||||
// byte (noise amplitude in 0.01's)
|
||||
// byte,byte,byte (color)
|
||||
// byte (brightness)
|
||||
// byte (scroll speed in 0.1's)
|
||||
|
||||
#define TE_STREAK_SPLASH 25 // oriented shower of tracers
|
||||
// coord coord coord (start position)
|
||||
// coord coord coord (direction vector)
|
||||
// byte (color)
|
||||
// short (count)
|
||||
// short (base speed)
|
||||
// short (ramdon velocity)
|
||||
|
||||
#define TE_BEAMHOSE 26 // obsolete
|
||||
|
||||
#define TE_DLIGHT 27 // dynamic light, effect world, minor entity effect
|
||||
// coord, coord, coord (pos)
|
||||
// byte (radius in 10's)
|
||||
// byte byte byte (color)
|
||||
// byte (brightness)
|
||||
// byte (life in 10's)
|
||||
// byte (decay rate in 10's)
|
||||
|
||||
#define TE_ELIGHT 28 // point entity light, no world effect
|
||||
// short (entity:attachment to follow)
|
||||
// coord coord coord (initial position)
|
||||
// coord (radius)
|
||||
// byte byte byte (color)
|
||||
// byte (life in 0.1's)
|
||||
// coord (decay rate)
|
||||
|
||||
#define TE_TEXTMESSAGE 29
|
||||
// short 1.2.13 x (-1 = center)
|
||||
// short 1.2.13 y (-1 = center)
|
||||
// byte Effect 0 = fade in/fade out
|
||||
// 1 is flickery credits
|
||||
// 2 is write out (training room)
|
||||
|
||||
// 4 bytes r,g,b,a color1 (text color)
|
||||
// 4 bytes r,g,b,a color2 (effect color)
|
||||
// ushort 8.8 fadein time
|
||||
// ushort 8.8 fadeout time
|
||||
// ushort 8.8 hold time
|
||||
// optional ushort 8.8 fxtime (time the highlight lags behing the leading text in effect 2)
|
||||
// string text message (512 chars max sz string)
|
||||
#define TE_LINE 30
|
||||
// coord, coord, coord startpos
|
||||
// coord, coord, coord endpos
|
||||
// short life in 0.1 s
|
||||
// 3 bytes r, g, b
|
||||
|
||||
#define TE_BOX 31
|
||||
// coord, coord, coord boxmins
|
||||
// coord, coord, coord boxmaxs
|
||||
// short life in 0.1 s
|
||||
// 3 bytes r, g, b
|
||||
|
||||
#define TE_KILLBEAM 99 // kill all beams attached to entity
|
||||
// short (entity)
|
||||
|
||||
#define TE_LARGEFUNNEL 100
|
||||
// coord coord coord (funnel position)
|
||||
// short (sprite index)
|
||||
// short (flags)
|
||||
|
||||
#define TE_BLOODSTREAM 101 // particle spray
|
||||
// coord coord coord (start position)
|
||||
// coord coord coord (spray vector)
|
||||
// byte (color)
|
||||
// byte (speed)
|
||||
|
||||
#define TE_SHOWLINE 102 // line of particles every 5 units, dies in 30 seconds
|
||||
// coord coord coord (start position)
|
||||
// coord coord coord (end position)
|
||||
|
||||
#define TE_BLOOD 103 // particle spray
|
||||
// coord coord coord (start position)
|
||||
// coord coord coord (spray vector)
|
||||
// byte (color)
|
||||
// byte (speed)
|
||||
|
||||
#define TE_DECAL 104 // Decal applied to a brush entity (not the world)
|
||||
// coord, coord, coord (x,y,z), decal position (center of texture in world)
|
||||
// byte (texture index of precached decal texture name)
|
||||
// short (entity index)
|
||||
|
||||
#define TE_FIZZ 105 // create alpha sprites inside of entity, float upwards
|
||||
// short (entity)
|
||||
// short (sprite index)
|
||||
// byte (density)
|
||||
|
||||
#define TE_MODEL 106 // create a moving model that bounces and makes a sound when it hits
|
||||
// coord, coord, coord (position)
|
||||
// coord, coord, coord (velocity)
|
||||
// angle (initial yaw)
|
||||
// short (model index)
|
||||
// byte (bounce sound type)
|
||||
// byte (life in 0.1's)
|
||||
|
||||
#define TE_EXPLODEMODEL 107 // spherical shower of models, picks from set
|
||||
// coord, coord, coord (origin)
|
||||
// coord (velocity)
|
||||
// short (model index)
|
||||
// short (count)
|
||||
// byte (life in 0.1's)
|
||||
|
||||
#define TE_BREAKMODEL 108 // box of models or sprites
|
||||
// coord, coord, coord (position)
|
||||
// coord, coord, coord (size)
|
||||
// coord, coord, coord (velocity)
|
||||
// byte (random velocity in 10's)
|
||||
// short (sprite or model index)
|
||||
// byte (count)
|
||||
// byte (life in 0.1 secs)
|
||||
// byte (flags)
|
||||
|
||||
#define TE_GUNSHOTDECAL 109 // decal and ricochet sound
|
||||
// coord, coord, coord (position)
|
||||
// short (entity index???)
|
||||
// byte (decal???)
|
||||
|
||||
#define TE_SPRITE_SPRAY 110 // spay of alpha sprites
|
||||
// coord, coord, coord (position)
|
||||
// coord, coord, coord (velocity)
|
||||
// short (sprite index)
|
||||
// byte (count)
|
||||
// byte (speed)
|
||||
// byte (noise)
|
||||
|
||||
#define TE_ARMOR_RICOCHET 111 // quick spark sprite, client ricochet sound.
|
||||
// coord, coord, coord (position)
|
||||
// byte (scale in 0.1's)
|
||||
|
||||
#define TE_PLAYERDECAL 112 // ???
|
||||
// byte (playerindex)
|
||||
// coord, coord, coord (position)
|
||||
// short (entity???)
|
||||
// byte (decal number???)
|
||||
// [optional] short (model index???)
|
||||
|
||||
#define TE_BUBBLES 113 // create alpha sprites inside of box, float upwards
|
||||
// coord, coord, coord (min start position)
|
||||
// coord, coord, coord (max start position)
|
||||
// coord (float height)
|
||||
// short (model index)
|
||||
// byte (count)
|
||||
// coord (speed)
|
||||
|
||||
#define TE_BUBBLETRAIL 114 // create alpha sprites along a line, float upwards
|
||||
// coord, coord, coord (min start position)
|
||||
// coord, coord, coord (max start position)
|
||||
// coord (float height)
|
||||
// short (model index)
|
||||
// byte (count)
|
||||
// coord (speed)
|
||||
|
||||
#define TE_BLOODSPRITE 115 // spray of opaque sprite1's that fall, single sprite2 for 1..2 secs (this is a high-priority tent)
|
||||
// coord, coord, coord (position)
|
||||
// short (sprite1 index)
|
||||
// short (sprite2 index)
|
||||
// byte (color)
|
||||
// byte (scale)
|
||||
|
||||
#define TE_WORLDDECAL 116 // Decal applied to the world brush
|
||||
// coord, coord, coord (x,y,z), decal position (center of texture in world)
|
||||
// byte (texture index of precached decal texture name)
|
||||
|
||||
#define TE_WORLDDECALHIGH 117 // Decal (with texture index > 256) applied to world brush
|
||||
// coord, coord, coord (x,y,z), decal position (center of texture in world)
|
||||
// byte (texture index of precached decal texture name - 256)
|
||||
|
||||
#define TE_DECALHIGH 118 // Same as TE_DECAL, but the texture index was greater than 256
|
||||
// coord, coord, coord (x,y,z), decal position (center of texture in world)
|
||||
// byte (texture index of precached decal texture name - 256)
|
||||
// short (entity index)
|
||||
|
||||
#define TE_PROJECTILE 119 // Makes a projectile (like a nail) (this is a high-priority tent)
|
||||
// coord, coord, coord (position)
|
||||
// coord, coord, coord (velocity)
|
||||
// short (modelindex)
|
||||
// byte (life)
|
||||
// byte (owner) projectile won't collide with owner (if owner == 0, projectile will hit any client).
|
||||
|
||||
#define TE_SPRAY 120 // Throws a shower of sprites or models
|
||||
// coord, coord, coord (position)
|
||||
// coord, coord, coord (direction)
|
||||
// short (modelindex)
|
||||
// byte (count)
|
||||
// byte (speed)
|
||||
// byte (noise)
|
||||
// byte (rendermode)
|
||||
|
||||
#define TE_PLAYERSPRITES 121 // sprites emit from a player's bounding box (ONLY use for players!)
|
||||
// byte (playernum)
|
||||
// short (sprite modelindex)
|
||||
// byte (count)
|
||||
// byte (variance) (0 = no variance in size) (10 = 10% variance in size)
|
||||
|
||||
#define TE_PARTICLEBURST 122 // very similar to lavasplash.
|
||||
// coord (origin)
|
||||
// short (radius)
|
||||
// byte (particle color)
|
||||
// byte (duration * 10) (will be randomized a bit)
|
||||
|
||||
#define TE_FIREFIELD 123 // makes a field of fire.
|
||||
// coord (origin)
|
||||
// short (radius) (fire is made in a square around origin. -radius, -radius to radius, radius)
|
||||
// short (modelindex)
|
||||
// byte (count)
|
||||
// byte (flags)
|
||||
// byte (duration (in seconds) * 10) (will be randomized a bit)
|
||||
//
|
||||
// to keep network traffic low, this message has associated flags that fit into a byte:
|
||||
#define TEFIRE_FLAG_ALLFLOAT 1 // all sprites will drift upwards as they animate
|
||||
#define TEFIRE_FLAG_SOMEFLOAT 2 // some of the sprites will drift upwards. (50% chance)
|
||||
#define TEFIRE_FLAG_LOOP 4 // if set, sprite plays at 15 fps, otherwise plays at whatever rate stretches the animation over the sprite's duration.
|
||||
#define TEFIRE_FLAG_ALPHA 8 // if set, sprite is rendered alpha blended at 50% else, opaque
|
||||
#define TEFIRE_FLAG_PLANAR 16 // if set, all fire sprites have same initial Z instead of randomly filling a cube.
|
||||
#define TEFIRE_FLAG_ADDITIVE 32 // if set, sprite is rendered non-opaque with additive
|
||||
|
||||
#define TE_PLAYERATTACHMENT 124 // attaches a TENT to a player (this is a high-priority tent)
|
||||
// byte (entity index of player)
|
||||
// coord (vertical offset) ( attachment origin.z = player origin.z + vertical offset )
|
||||
// short (model index)
|
||||
// short (life * 10 );
|
||||
|
||||
#define TE_KILLPLAYERATTACHMENTS 125 // will expire all TENTS attached to a player.
|
||||
// byte (entity index of player)
|
||||
|
||||
#define TE_MULTIGUNSHOT 126 // much more compact shotgun message
|
||||
// This message is used to make a client approximate a 'spray' of gunfire.
|
||||
// Any weapon that fires more than one bullet per frame and fires in a bit of a spread is
|
||||
// a good candidate for MULTIGUNSHOT use. (shotguns)
|
||||
//
|
||||
// NOTE: This effect makes the client do traces for each bullet, these client traces ignore
|
||||
// entities that have studio models.Traces are 4096 long.
|
||||
//
|
||||
// coord (origin)
|
||||
// coord (origin)
|
||||
// coord (origin)
|
||||
// coord (direction)
|
||||
// coord (direction)
|
||||
// coord (direction)
|
||||
// coord (x noise * 100)
|
||||
// coord (y noise * 100)
|
||||
// byte (count)
|
||||
// byte (bullethole decal texture index)
|
||||
|
||||
#define TE_USERTRACER 127 // larger message than the standard tracer, but allows some customization.
|
||||
// coord (origin)
|
||||
// coord (origin)
|
||||
// coord (origin)
|
||||
// coord (velocity)
|
||||
// coord (velocity)
|
||||
// coord (velocity)
|
||||
// byte ( life * 10 )
|
||||
// byte ( color ) this is an index into an array of color vectors in the engine. (0 - )
|
||||
// byte ( length * 10 )
|
||||
|
||||
|
||||
|
||||
#define MSG_BROADCAST 0 // unreliable to all
|
||||
#define MSG_ONE 1 // reliable to one (msg_entity)
|
||||
#define MSG_ALL 2 // reliable to all
|
||||
#define MSG_INIT 3 // write to the init string
|
||||
#define MSG_PVS 4 // Ents in PVS of org
|
||||
#define MSG_PAS 5 // Ents in PAS of org
|
||||
#define MSG_PVS_R 6 // Reliable to PVS
|
||||
#define MSG_PAS_R 7 // Reliable to PAS
|
||||
#define MSG_ONE_UNRELIABLE 8 // Send to one client, but don't put in reliable stream, put in unreliable datagram ( could be dropped )
|
||||
#define MSG_SPEC 9 // Sends to all spectator proxies
|
||||
|
||||
// contents of a spot in the world
|
||||
#define CONTENTS_EMPTY -1
|
||||
#define CONTENTS_SOLID -2
|
||||
#define CONTENTS_WATER -3
|
||||
#define CONTENTS_SLIME -4
|
||||
#define CONTENTS_LAVA -5
|
||||
#define CONTENTS_SKY -6
|
||||
// These additional contents constants are defined in bspfile.h
|
||||
#define CONTENTS_ORIGIN -7 // removed at csg time
|
||||
#define CONTENTS_CLIP -8 // changed to contents_solid
|
||||
#define CONTENTS_CURRENT_0 -9
|
||||
#define CONTENTS_CURRENT_90 -10
|
||||
#define CONTENTS_CURRENT_180 -11
|
||||
#define CONTENTS_CURRENT_270 -12
|
||||
#define CONTENTS_CURRENT_UP -13
|
||||
#define CONTENTS_CURRENT_DOWN -14
|
||||
|
||||
#define CONTENTS_TRANSLUCENT -15
|
||||
|
||||
#define CONTENTS_LADDER -16
|
||||
|
||||
#define CONTENT_FLYFIELD -17
|
||||
#define CONTENT_GRAVITY_FLYFIELD -18
|
||||
#define CONTENT_FOG -19
|
||||
|
||||
#define CONTENT_EMPTY -1
|
||||
#define CONTENT_SOLID -2
|
||||
#define CONTENT_WATER -3
|
||||
#define CONTENT_SLIME -4
|
||||
#define CONTENT_LAVA -5
|
||||
#define CONTENT_SKY -6
|
||||
|
||||
// channels
|
||||
#define CHAN_AUTO 0
|
||||
#define CHAN_WEAPON 1
|
||||
#define CHAN_VOICE 2
|
||||
#define CHAN_ITEM 3
|
||||
#define CHAN_BODY 4
|
||||
#define CHAN_STREAM 5 // allocate stream channel from the static or dynamic area
|
||||
#define CHAN_STATIC 6 // allocate channel from the static area
|
||||
#define CHAN_NETWORKVOICE_BASE 7 // voice data coming across the network
|
||||
#define CHAN_NETWORKVOICE_END 500 // network voice data reserves slots (CHAN_NETWORKVOICE_BASE through CHAN_NETWORKVOICE_END).
|
||||
#define CHAN_BOT 501 // channel used for bot chatter.
|
||||
|
||||
// attenuation values
|
||||
#define ATTN_NONE 0
|
||||
#define ATTN_NORM (float)0.8
|
||||
#define ATTN_IDLE (float)2
|
||||
#define ATTN_STATIC (float)1.25
|
||||
|
||||
// pitch values
|
||||
#define PITCH_NORM 100 // non-pitch shifted
|
||||
#define PITCH_LOW 95 // other values are possible - 0-255, where 255 is very high
|
||||
#define PITCH_HIGH 120
|
||||
|
||||
// volume values
|
||||
#define VOL_NORM 1.0
|
||||
|
||||
// plats
|
||||
#define PLAT_LOW_TRIGGER 1
|
||||
|
||||
// Trains
|
||||
#define SF_TRAIN_WAIT_RETRIGGER 1
|
||||
#define SF_TRAIN_START_ON 4 // Train is initially moving
|
||||
#define SF_TRAIN_PASSABLE 8 // Train is not solid -- used to make water trains
|
||||
|
||||
// buttons
|
||||
#ifndef IN_BUTTONS_H
|
||||
//#include "in_buttons.h"
|
||||
#endif
|
||||
|
||||
// Break Model Defines
|
||||
|
||||
#define BREAK_TYPEMASK 0x4F
|
||||
#define BREAK_GLASS 0x01
|
||||
#define BREAK_METAL 0x02
|
||||
#define BREAK_FLESH 0x04
|
||||
#define BREAK_WOOD 0x08
|
||||
|
||||
#define BREAK_SMOKE 0x10
|
||||
#define BREAK_TRANS 0x20
|
||||
#define BREAK_CONCRETE 0x40
|
||||
#define BREAK_2 0x80
|
||||
|
||||
// Colliding temp entity sounds
|
||||
|
||||
#define BOUNCE_GLASS BREAK_GLASS
|
||||
#define BOUNCE_METAL BREAK_METAL
|
||||
#define BOUNCE_FLESH BREAK_FLESH
|
||||
#define BOUNCE_WOOD BREAK_WOOD
|
||||
#define BOUNCE_SHRAP 0x10
|
||||
#define BOUNCE_SHELL 0x20
|
||||
#define BOUNCE_CONCRETE BREAK_CONCRETE
|
||||
#define BOUNCE_SHOTSHELL 0x80
|
||||
|
||||
// Temp entity bounce sound types
|
||||
#define TE_BOUNCE_NULL 0
|
||||
#define TE_BOUNCE_SHELL 1
|
||||
#define TE_BOUNCE_SHOTSHELL 2
|
||||
|
||||
// Rendering constants
|
||||
enum
|
||||
{
|
||||
kRenderNormal, // src
|
||||
kRenderTransColor, // c*a+dest*(1-a)
|
||||
kRenderTransTexture, // src*a+dest*(1-a)
|
||||
kRenderGlow, // src*a+dest -- No Z buffer checks
|
||||
kRenderTransAlpha, // src*srca+dest*(1-srca)
|
||||
kRenderTransAdd, // src*a+dest
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
kRenderFxNone = 0,
|
||||
kRenderFxPulseSlow,
|
||||
kRenderFxPulseFast,
|
||||
kRenderFxPulseSlowWide,
|
||||
kRenderFxPulseFastWide,
|
||||
kRenderFxFadeSlow,
|
||||
kRenderFxFadeFast,
|
||||
kRenderFxSolidSlow,
|
||||
kRenderFxSolidFast,
|
||||
kRenderFxStrobeSlow,
|
||||
kRenderFxStrobeFast,
|
||||
kRenderFxStrobeFaster,
|
||||
kRenderFxFlickerSlow,
|
||||
kRenderFxFlickerFast,
|
||||
kRenderFxNoDissipation,
|
||||
kRenderFxDistort, // Distort/scale/translate flicker
|
||||
kRenderFxHologram, // kRenderFxDistort + distance fade
|
||||
kRenderFxDeadPlayer, // kRenderAmt is the player index
|
||||
kRenderFxExplode, // Scale up really big!
|
||||
kRenderFxGlowShell, // Glowing Shell
|
||||
kRenderFxClampMinScale, // Keep this sprite from getting very small (SPRITES only!)
|
||||
kRenderFxLightMultiplier, //CTM !!!CZERO added to tell the studiorender that the value in iuser2 is a lightmultiplier
|
||||
};
|
||||
|
||||
typedef unsigned int uint32;
|
||||
typedef int int32;
|
||||
|
||||
typedef unsigned int func_t;
|
||||
typedef unsigned int string_t;
|
||||
typedef unsigned int CRC32_t;
|
||||
|
||||
#ifndef BYTE_DEFINED
|
||||
#define BYTE_DEFINED
|
||||
#ifndef small
|
||||
typedef unsigned char byte;
|
||||
#endif
|
||||
typedef unsigned short word;
|
||||
typedef unsigned long dword;
|
||||
#endif
|
||||
|
||||
typedef void ( *xcommand_t )();
|
||||
|
||||
#define _DEF_BYTE_
|
||||
|
||||
#undef true
|
||||
#undef false
|
||||
|
||||
#ifndef __cplusplus
|
||||
typedef int qboolean; // typedef enum { false, true } qboolean;
|
||||
#else
|
||||
typedef int qboolean;
|
||||
#endif
|
||||
|
||||
typedef float vec_t;
|
||||
typedef vec_t vec3_t[3];
|
||||
|
||||
typedef struct
|
||||
{
|
||||
byte r, g, b;
|
||||
} color24;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned r, g, b, a;
|
||||
} colorVec;
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma pack(push,2)
|
||||
#endif
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned short r, g, b, a;
|
||||
} PackedColorVec;
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma pack(pop)
|
||||
#endif
|
||||
typedef struct link_s
|
||||
{
|
||||
struct link_s *prev, *next;
|
||||
} link_t;
|
||||
|
||||
typedef struct plane_s
|
||||
{
|
||||
vec3_t normal;
|
||||
float dist;
|
||||
} plane_t;
|
||||
|
||||
typedef struct trace_s
|
||||
{
|
||||
qboolean allsolid; // if true, plane is not valid
|
||||
qboolean startsolid; // if true, the initial point was in a solid area
|
||||
qboolean inopen, inwater;
|
||||
float fraction; // time completed, 1.0 = didn't hit anything
|
||||
vec3_t endpos; // final position
|
||||
plane_t plane; // surface normal at impact
|
||||
struct edict_s* pHit; // entity the surface is on
|
||||
int hitgroup; // 0 == generic, non zero is specific body part
|
||||
} trace_t;
|
||||
|
||||
#endif
|
||||
|
101
src/sdk/custom.h
Normal file
101
src/sdk/custom.h
Normal file
@ -0,0 +1,101 @@
|
||||
/***
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
*
|
||||
* This product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Use, distribution, and modification of this source code and/or resulting
|
||||
* object code is restricted to non-commercial enhancements to products from
|
||||
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||
* without written permission from Valve LLC.
|
||||
*
|
||||
****/
|
||||
// Customization.h
|
||||
|
||||
#ifndef CUSTOM_H
|
||||
#define CUSTOM_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "const.h"
|
||||
|
||||
#define MAX_QPATH 64 // Must match value in quakedefs.h
|
||||
|
||||
/////////////////
|
||||
// Customization
|
||||
// passed to pfnPlayerCustomization
|
||||
// For automatic downloading.
|
||||
typedef enum
|
||||
{
|
||||
t_sound = 0,
|
||||
t_skin,
|
||||
t_model,
|
||||
t_decal,
|
||||
t_generic,
|
||||
t_eventscript,
|
||||
t_world, // Fake type for world, is really t_model
|
||||
} resourcetype_t;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int size;
|
||||
} _resourceinfo_t;
|
||||
|
||||
typedef struct resourceinfo_s
|
||||
{
|
||||
_resourceinfo_t info[ 8 ];
|
||||
} resourceinfo_t;
|
||||
|
||||
#define RES_FATALIFMISSING (1<<0) // Disconnect if we can't get this file.
|
||||
#define RES_WASMISSING (1<<1) // Do we have the file locally, did we get it ok?
|
||||
#define RES_CUSTOM (1<<2) // Is this resource one that corresponds to another player's customization
|
||||
// or is it a server startup resource.
|
||||
#define RES_REQUESTED (1<<3) // Already requested a download of this one
|
||||
#define RES_PRECACHED (1<<4) // Already precached
|
||||
#define RES_ALWAYS (1<<5) // download always even if available on client
|
||||
#define RES_CHECKFILE (1<<7) // check file on client
|
||||
|
||||
typedef struct resource_s
|
||||
{
|
||||
char szFileName[MAX_QPATH]; // File name to download/precache.
|
||||
resourcetype_t type; // t_sound, t_skin, t_model, t_decal.
|
||||
int nIndex; // For t_decals
|
||||
int nDownloadSize; // Size in Bytes if this must be downloaded.
|
||||
unsigned char ucFlags;
|
||||
|
||||
// For handling client to client resource propagation
|
||||
unsigned char rgucMD5_hash[16]; // To determine if we already have it.
|
||||
unsigned char playernum; // Which player index this resource is associated with, if it's a custom resource.
|
||||
|
||||
unsigned char rguc_reserved[ 32 ]; // For future expansion
|
||||
struct resource_s *pNext; // Next in chain.
|
||||
struct resource_s *pPrev;
|
||||
} resource_t;
|
||||
|
||||
typedef struct customization_s
|
||||
{
|
||||
qboolean bInUse; // Is this customization in use;
|
||||
resource_t resource; // The resource_t for this customization
|
||||
qboolean bTranslated; // Has the raw data been translated into a useable format?
|
||||
// (e.g., raw decal .wad make into texture_t *)
|
||||
int nUserData1; // Customization specific data
|
||||
int nUserData2; // Customization specific data
|
||||
void *pInfo; // Buffer that holds the data structure that references the data (e.g., the cachewad_t)
|
||||
void *pBuffer; // Buffer that holds the data for the customization (the raw .wad data)
|
||||
struct customization_s *pNext; // Next in chain
|
||||
} customization_t;
|
||||
|
||||
#define FCUST_FROMHPAK ( 1<<0 )
|
||||
#define FCUST_WIPEDATA ( 1<<1 )
|
||||
#define FCUST_IGNOREINIT ( 1<<2 )
|
||||
|
||||
void COM_ClearCustomizationList( struct customization_s *pHead, qboolean bCleanDecals);
|
||||
qboolean COM_CreateCustomization( struct customization_s *pListHead, struct resource_s *pResource, int playernumber, int flags,
|
||||
struct customization_s **pCustomization, int *nLumps );
|
||||
int COM_SizeofResourceList ( struct resource_s *pList, struct resourceinfo_s *ri );
|
||||
|
||||
#endif // CUSTOM_H
|
37
src/sdk/cvardef.h
Normal file
37
src/sdk/cvardef.h
Normal file
@ -0,0 +1,37 @@
|
||||
/***
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
*
|
||||
* This product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Use, distribution, and modification of this source code and/or resulting
|
||||
* object code is restricted to non-commercial enhancements to products from
|
||||
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||
* without written permission from Valve LLC.
|
||||
*
|
||||
****/
|
||||
#ifndef CVARDEF_H
|
||||
#define CVARDEF_H
|
||||
|
||||
#define FCVAR_ARCHIVE (1<<0) // set to cause it to be saved to vars.rc
|
||||
#define FCVAR_USERINFO (1<<1) // changes the client's info string
|
||||
#define FCVAR_SERVER (1<<2) // notifies players when changed
|
||||
#define FCVAR_EXTDLL (1<<3) // defined by external DLL
|
||||
#define FCVAR_CLIENTDLL (1<<4) // defined by the client dll
|
||||
#define FCVAR_PROTECTED (1<<5) // It's a server cvar, but we don't send the data since it's a password, etc. Sends 1 if it's not bland/zero, 0 otherwise as value
|
||||
#define FCVAR_SPONLY (1<<6) // This cvar cannot be changed by clients connected to a multiplayer server.
|
||||
#define FCVAR_PRINTABLEONLY (1<<7) // This cvar's string cannot contain unprintable characters ( e.g., used for player name etc ).
|
||||
#define FCVAR_UNLOGGED (1<<8) // If this is a FCVAR_SERVER, don't log changes to the log file / console if we are creating a log
|
||||
#define FCVAR_NOEXTRAWHITEPACE (1<<9) // strip trailing/leading white space from this cvar
|
||||
|
||||
typedef struct cvar_s
|
||||
{
|
||||
char *name;
|
||||
char *string;
|
||||
int flags;
|
||||
float value;
|
||||
struct cvar_s *next;
|
||||
} cvar_t;
|
||||
#endif
|
37
src/sdk/edict.h
Normal file
37
src/sdk/edict.h
Normal file
@ -0,0 +1,37 @@
|
||||
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================
|
||||
|
||||
#if !defined EDICT_H
|
||||
#define EDICT_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
#define MAX_ENT_LEAFS 48
|
||||
|
||||
#include "const.h"
|
||||
#include "progdefs.h"
|
||||
|
||||
typedef struct edict_s
|
||||
{
|
||||
qboolean free;
|
||||
int serialnumber;
|
||||
link_t area; // linked to a division node or leaf
|
||||
|
||||
int headnode; // -1 to use normal leaf check
|
||||
int num_leafs;
|
||||
short leafnums[MAX_ENT_LEAFS];
|
||||
|
||||
float freetime; // sv.time when the object was freed
|
||||
|
||||
void* pvPrivateData; // Alloced and freed by engine, used by DLLs
|
||||
|
||||
entvars_t v; // C exported fields from progs
|
||||
|
||||
// other fields from progs come immediately after
|
||||
} edict_t;
|
||||
|
||||
#endif
|
500
src/sdk/eiface.h
Normal file
500
src/sdk/eiface.h
Normal file
@ -0,0 +1,500 @@
|
||||
/***
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
*
|
||||
* This product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Use, distribution, and modification of this source code and/or resulting
|
||||
* object code is restricted to non-commercial enhancements to products from
|
||||
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||
* without written permission from Valve LLC.
|
||||
*
|
||||
****/
|
||||
#ifndef EIFACE_H
|
||||
#define EIFACE_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include "const.h"
|
||||
#include "edict.h"
|
||||
#include "custom.h"
|
||||
#include "cvardef.h"
|
||||
#include "Sequence.h"
|
||||
#include "progdefs.h"
|
||||
|
||||
//
|
||||
// Defines entity interface between engine and DLLs.
|
||||
// This header file included by engine files and DLL files.
|
||||
//
|
||||
// Before including this header, DLLs must:
|
||||
// include progdefs.h
|
||||
// This is conveniently done for them in extdll.h
|
||||
//
|
||||
|
||||
/*
|
||||
#ifdef _WIN32
|
||||
#define DLLEXPORT __stdcall
|
||||
#else
|
||||
#define DLLEXPORT __attribute__ ((visibility("default")))
|
||||
#endif
|
||||
*/
|
||||
|
||||
extern globalvars_t* gpGlobals;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
at_notice,
|
||||
at_console, // same as at_notice, but forces a ConPrintf, not a message box
|
||||
at_aiconsole, // same as at_console, but only shown if developer level is 2!
|
||||
at_warning,
|
||||
at_error,
|
||||
at_logged // Server print to console ( only in multiplayer games ).
|
||||
} ALERT_TYPE;
|
||||
|
||||
// 4-22-98 JOHN: added for use in pfnClientPrintf
|
||||
typedef enum
|
||||
{
|
||||
print_console,
|
||||
print_center,
|
||||
print_chat,
|
||||
} PRINT_TYPE;
|
||||
|
||||
// For integrity checking of content on clients
|
||||
typedef enum
|
||||
{
|
||||
force_exactfile, // File on client must exactly match server's file
|
||||
force_model_samebounds, // For model files only, the geometry must fit in the same bbox
|
||||
force_model_specifybounds, // For model files only, the geometry must fit in the specified bbox
|
||||
force_model_specifybounds_if_avail, // For Steam model files only, the geometry must fit in the specified bbox (if the file is available)
|
||||
} FORCE_TYPE;
|
||||
|
||||
// Returned by TraceLine
|
||||
typedef struct TraceResult
|
||||
{
|
||||
int fAllSolid; // if true, plane is not valid
|
||||
int fStartSolid; // if true, the initial point was in a solid area
|
||||
int fInOpen;
|
||||
int fInWater;
|
||||
float flFraction; // time completed, 1.0 = didn't hit anything
|
||||
vec3_t vecEndPos; // final position
|
||||
float flPlaneDist;
|
||||
vec3_t vecPlaneNormal; // surface normal at impact
|
||||
edict_t* pHit; // entity the surface is on
|
||||
int iHitgroup; // 0 == generic, non zero is specific body part
|
||||
} TraceResult;
|
||||
|
||||
// CD audio status
|
||||
typedef struct
|
||||
{
|
||||
int fPlaying;// is sound playing right now?
|
||||
int fWasPlaying;// if not, CD is paused if WasPlaying is true.
|
||||
int fInitialized;
|
||||
int fEnabled;
|
||||
int fPlayLooping;
|
||||
float cdvolume;
|
||||
//BYTE remap[100];
|
||||
int fCDRom;
|
||||
int fPlayTrack;
|
||||
} CDStatus;
|
||||
|
||||
// Engine hands this to DLLs for functionality callbacks
|
||||
typedef struct enginefuncs_s
|
||||
{
|
||||
int (*pfnPrecacheModel) (char* s);
|
||||
int (*pfnPrecacheSound) (char* s);
|
||||
void (*pfnSetModel) (edict_t *e, const char *m);
|
||||
int (*pfnModelIndex) (const char *m);
|
||||
int (*pfnModelFrames) (int modelIndex);
|
||||
void (*pfnSetSize) (edict_t *e, const float *rgflMin, const float *rgflMax);
|
||||
void (*pfnChangeLevel) (char* s1, char* s2);
|
||||
void (*pfnGetSpawnParms) (edict_t *ent);
|
||||
void (*pfnSaveSpawnParms) (edict_t *ent);
|
||||
float (*pfnVecToYaw) (const float *rgflVector);
|
||||
void (*pfnVecToAngles) (const float *rgflVectorIn, float *rgflVectorOut);
|
||||
void (*pfnMoveToOrigin) (edict_t *ent, const float *pflGoal, float dist, int iMoveType);
|
||||
void (*pfnChangeYaw) (edict_t* ent);
|
||||
void (*pfnChangePitch) (edict_t* ent);
|
||||
edict_t* (*pfnFindEntityByString) (edict_t *pEdictStartSearchAfter, const char *pszField, const char *pszValue);
|
||||
int (*pfnGetEntityIllum) (edict_t* pEnt);
|
||||
edict_t* (*pfnFindEntityInSphere) (edict_t *pEdictStartSearchAfter, const float *org, float rad);
|
||||
edict_t* (*pfnFindClientInPVS) (edict_t *pEdict);
|
||||
edict_t* (*pfnEntitiesInPVS) (edict_t *pplayer);
|
||||
void (*pfnMakeVectors) (const float *rgflVector);
|
||||
void (*pfnAngleVectors) (const float *rgflVector, float *forward, float *right, float *up);
|
||||
edict_t* (*pfnCreateEntity) (void);
|
||||
void (*pfnRemoveEntity) (edict_t* e);
|
||||
edict_t* (*pfnCreateNamedEntity) (int className);
|
||||
void (*pfnMakeStatic) (edict_t *ent);
|
||||
int (*pfnEntIsOnFloor) (edict_t *e);
|
||||
int (*pfnDropToFloor) (edict_t* e);
|
||||
int (*pfnWalkMove) (edict_t *ent, float yaw, float dist, int iMode);
|
||||
void (*pfnSetOrigin) (edict_t *e, const float *rgflOrigin);
|
||||
void (*pfnEmitSound) (edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch);
|
||||
void (*pfnEmitAmbientSound) (edict_t *entity, float *pos, const char *samp, float vol, float attenuation, int fFlags, int pitch);
|
||||
void (*pfnTraceLine) (const float *v1, const float *v2, int fNoMonsters, edict_t *pentToSkip, TraceResult *ptr);
|
||||
void (*pfnTraceToss) (edict_t* pent, edict_t* pentToIgnore, TraceResult *ptr);
|
||||
int (*pfnTraceMonsterHull) (edict_t *pEdict, const float *v1, const float *v2, int fNoMonsters, edict_t *pentToSkip, TraceResult *ptr);
|
||||
void (*pfnTraceHull) (const float *v1, const float *v2, int fNoMonsters, int hullNumber, edict_t *pentToSkip, TraceResult *ptr);
|
||||
void (*pfnTraceModel) (const float *v1, const float *v2, int hullNumber, edict_t *pent, TraceResult *ptr);
|
||||
const char *(*pfnTraceTexture) (edict_t *pTextureEntity, const float *v1, const float *v2 );
|
||||
void (*pfnTraceSphere) (const float *v1, const float *v2, int fNoMonsters, float radius, edict_t *pentToSkip, TraceResult *ptr);
|
||||
void (*pfnGetAimVector) (edict_t* ent, float speed, float *rgflReturn);
|
||||
void (*pfnServerCommand) (char* str);
|
||||
void (*pfnServerExecute) (void);
|
||||
void (*pfnClientCommand) (edict_t* pEdict, char* szFmt, ...);
|
||||
void (*pfnParticleEffect) (const float *org, const float *dir, float color, float count);
|
||||
void (*pfnLightStyle) (int style, char* val);
|
||||
int (*pfnDecalIndex) (const char *name);
|
||||
int (*pfnPointContents) (const float *rgflVector);
|
||||
void (*pfnMessageBegin) (int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
|
||||
void (*pfnMessageEnd) (void);
|
||||
void (*pfnWriteByte) (int iValue);
|
||||
void (*pfnWriteChar) (int iValue);
|
||||
void (*pfnWriteShort) (int iValue);
|
||||
void (*pfnWriteLong) (int iValue);
|
||||
void (*pfnWriteAngle) (float flValue);
|
||||
void (*pfnWriteCoord) (float flValue);
|
||||
void (*pfnWriteString) (const char *sz);
|
||||
void (*pfnWriteEntity) (int iValue);
|
||||
void (*pfnCVarRegister) (cvar_t *pCvar);
|
||||
float (*pfnCVarGetFloat) (const char *szVarName);
|
||||
const char* (*pfnCVarGetString) (const char *szVarName);
|
||||
void (*pfnCVarSetFloat) (const char *szVarName, float flValue);
|
||||
void (*pfnCVarSetString) (const char *szVarName, const char *szValue);
|
||||
void (*pfnAlertMessage) (ALERT_TYPE atype, char *szFmt, ...);
|
||||
void (*pfnEngineFprintf) (void *pfile, char *szFmt, ...);
|
||||
void* (*pfnPvAllocEntPrivateData) (edict_t *pEdict, int32 cb);
|
||||
void* (*pfnPvEntPrivateData) (edict_t *pEdict);
|
||||
void (*pfnFreeEntPrivateData) (edict_t *pEdict);
|
||||
const char* (*pfnSzFromIndex) (int iString);
|
||||
int (*pfnAllocString) (const char *szValue);
|
||||
struct entvars_s* (*pfnGetVarsOfEnt) (edict_t *pEdict);
|
||||
edict_t* (*pfnPEntityOfEntOffset) (int iEntOffset);
|
||||
int (*pfnEntOffsetOfPEntity) (const edict_t *pEdict);
|
||||
int (*pfnIndexOfEdict) (const edict_t *pEdict);
|
||||
edict_t* (*pfnPEntityOfEntIndex) (int iEntIndex);
|
||||
edict_t* (*pfnFindEntityByVars) (struct entvars_s* pvars);
|
||||
void* (*pfnGetModelPtr) (edict_t* pEdict);
|
||||
int (*pfnRegUserMsg) (const char *pszName, int iSize);
|
||||
void (*pfnAnimationAutomove) (const edict_t* pEdict, float flTime);
|
||||
void (*pfnGetBonePosition) (const edict_t* pEdict, int iBone, float *rgflOrigin, float *rgflAngles );
|
||||
uint32 (*pfnFunctionFromName) ( const char *pName );
|
||||
const char *(*pfnNameForFunction) ( uint32 function );
|
||||
void (*pfnClientPrintf) ( edict_t* pEdict, PRINT_TYPE ptype, const char *szMsg ); // JOHN: engine callbacks so game DLL can print messages to individual clients
|
||||
void (*pfnServerPrint) ( const char *szMsg );
|
||||
const char *(*pfnCmd_Args) ( void ); // these 3 added
|
||||
const char *(*pfnCmd_Argv) ( int argc ); // so game DLL can easily
|
||||
int (*pfnCmd_Argc) ( void ); // access client 'cmd' strings
|
||||
void (*pfnGetAttachment) (const edict_t *pEdict, int iAttachment, float *rgflOrigin, float *rgflAngles );
|
||||
void (*pfnCRC32_Init) (CRC32_t *pulCRC);
|
||||
void (*pfnCRC32_ProcessBuffer) (CRC32_t *pulCRC, void *p, int len);
|
||||
void (*pfnCRC32_ProcessByte) (CRC32_t *pulCRC, unsigned char ch);
|
||||
CRC32_t (*pfnCRC32_Final) (CRC32_t pulCRC);
|
||||
int32 (*pfnRandomLong) (int32 lLow, int32 lHigh);
|
||||
float (*pfnRandomFloat) (float flLow, float flHigh);
|
||||
void (*pfnSetView) (const edict_t *pClient, const edict_t *pViewent );
|
||||
float (*pfnTime) ( void );
|
||||
void (*pfnCrosshairAngle) (const edict_t *pClient, float pitch, float yaw);
|
||||
byte * (*pfnLoadFileForMe) (char *filename, int *pLength);
|
||||
void (*pfnFreeFile) (void *buffer);
|
||||
void (*pfnEndSection) (const char *pszSectionName); // trigger_endsection
|
||||
int (*pfnCompareFileTime) (char *filename1, char *filename2, int *iCompare);
|
||||
void (*pfnGetGameDir) (char *szGetGameDir);
|
||||
void (*pfnCvar_RegisterVariable) (cvar_t *variable);
|
||||
void (*pfnFadeClientVolume) (const edict_t *pEdict, int fadePercent, int fadeOutSeconds, int holdTime, int fadeInSeconds);
|
||||
void (*pfnSetClientMaxspeed) (const edict_t *pEdict, float fNewMaxspeed);
|
||||
edict_t * (*pfnCreateFakeClient) (const char *netname); // returns NULL if fake client can't be created
|
||||
void (*pfnRunPlayerMove) (edict_t *fakeclient, const float *viewangles, float forwardmove, float sidemove, float upmove, unsigned short buttons, byte impulse, byte msec );
|
||||
int (*pfnNumberOfEntities) (void);
|
||||
char* (*pfnGetInfoKeyBuffer) (edict_t *e); // passing in NULL gets the serverinfo
|
||||
char* (*pfnInfoKeyValue) (char *infobuffer, char *key);
|
||||
void (*pfnSetKeyValue) (char *infobuffer, char *key, char *value);
|
||||
void (*pfnSetClientKeyValue) (int clientIndex, char *infobuffer, char *key, char *value);
|
||||
int (*pfnIsMapValid) (char *filename);
|
||||
void (*pfnStaticDecal) ( const float *origin, int decalIndex, int entityIndex, int modelIndex );
|
||||
int (*pfnPrecacheGeneric) (char* s);
|
||||
int (*pfnGetPlayerUserId) (edict_t *e ); // returns the server assigned userid for this player. useful for logging frags, etc. returns -1 if the edict couldn't be found in the list of clients
|
||||
void (*pfnBuildSoundMsg) (edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
|
||||
int (*pfnIsDedicatedServer) (void);// is this a dedicated server?
|
||||
cvar_t *(*pfnCVarGetPointer) (const char *szVarName);
|
||||
unsigned int (*pfnGetPlayerWONId) (edict_t *e); // returns the server assigned WONid for this player. useful for logging frags, etc. returns -1 if the edict couldn't be found in the list of clients
|
||||
|
||||
// YWB 8/1/99 TFF Physics additions
|
||||
void (*pfnInfo_RemoveKey) ( char *s, const char *key );
|
||||
const char *(*pfnGetPhysicsKeyValue) ( const edict_t *pClient, const char *key );
|
||||
void (*pfnSetPhysicsKeyValue) ( const edict_t *pClient, const char *key, const char *value );
|
||||
const char *(*pfnGetPhysicsInfoString) ( const edict_t *pClient );
|
||||
unsigned short (*pfnPrecacheEvent) ( int type, const char*psz );
|
||||
void (*pfnPlaybackEvent) ( int flags, const edict_t *pInvoker, unsigned short eventindex, float delay, float *origin, float *angles, float fparam1, float fparam2, int iparam1, int iparam2, int bparam1, int bparam2 );
|
||||
|
||||
unsigned char *(*pfnSetFatPVS) ( float *org );
|
||||
unsigned char *(*pfnSetFatPAS) ( float *org );
|
||||
|
||||
int (*pfnCheckVisibility ) ( const edict_t *entity, unsigned char *pset );
|
||||
|
||||
void (*pfnDeltaSetField) ( struct delta_s *pFields, const char *fieldname );
|
||||
void (*pfnDeltaUnsetField) ( struct delta_s *pFields, const char *fieldname );
|
||||
void (*pfnDeltaAddEncoder) ( char *name, void (*conditionalencode)( struct delta_s *pFields, const unsigned char *from, const unsigned char *to ) );
|
||||
int (*pfnGetCurrentPlayer) ( void );
|
||||
int (*pfnCanSkipPlayer) ( const edict_t *player );
|
||||
int (*pfnDeltaFindField) ( struct delta_s *pFields, const char *fieldname );
|
||||
void (*pfnDeltaSetFieldByIndex) ( struct delta_s *pFields, int fieldNumber );
|
||||
void (*pfnDeltaUnsetFieldByIndex)( struct delta_s *pFields, int fieldNumber );
|
||||
|
||||
void (*pfnSetGroupMask) ( int mask, int op );
|
||||
|
||||
int (*pfnCreateInstancedBaseline) ( int classname, struct entity_state_s *baseline );
|
||||
void (*pfnCvar_DirectSet) ( struct cvar_s *var, char *value );
|
||||
|
||||
// Forces the client and server to be running with the same version of the specified file
|
||||
// ( e.g., a player model ).
|
||||
// Calling this has no effect in single player
|
||||
void (*pfnForceUnmodified) ( FORCE_TYPE type, float *mins, float *maxs, const char *filename );
|
||||
|
||||
void (*pfnGetPlayerStats) ( const edict_t *pClient, int *ping, int *packet_loss );
|
||||
|
||||
void (*pfnAddServerCommand) ( char *cmd_name, void (*function) (void) );
|
||||
|
||||
// For voice communications, set which clients hear eachother.
|
||||
// NOTE: these functions take player entity indices (starting at 1).
|
||||
qboolean (*pfnVoice_GetClientListening)(int iReceiver, int iSender);
|
||||
qboolean (*pfnVoice_SetClientListening)(int iReceiver, int iSender, qboolean bListen);
|
||||
|
||||
const char *(*pfnGetPlayerAuthId) ( edict_t *e );
|
||||
|
||||
// PSV: Added for CZ training map
|
||||
// const char *(*pfnKeyNameForBinding) ( const char* pBinding );
|
||||
|
||||
sequenceEntry_s* (*pfnSequenceGet) ( const char* fileName, const char* entryName );
|
||||
sentenceEntry_s* (*pfnSequencePickSentence) ( const char* groupName, int pickMethod, int *picked );
|
||||
|
||||
// LH: Give access to filesize via filesystem
|
||||
int (*pfnGetFileSize) ( char *filename );
|
||||
|
||||
unsigned int (*pfnGetApproxWavePlayLen) (const char *filepath);
|
||||
// MDC: Added for CZ career-mode
|
||||
int (*pfnIsCareerMatch) ( void );
|
||||
|
||||
// BGC: return the number of characters of the localized string referenced by using "label"
|
||||
int (*pfnGetLocalizedStringLength)(const char *label);
|
||||
|
||||
// BGC: added to facilitate persistent storage of tutor message decay values for
|
||||
// different career game profiles. Also needs to persist regardless of mp.dll being
|
||||
// destroyed and recreated.
|
||||
void (*pfnRegisterTutorMessageShown)(int mid);
|
||||
int (*pfnGetTimesTutorMessageShown)(int mid);
|
||||
void (*ProcessTutorMessageDecayBuffer)(int *buffer, int bufferLength);
|
||||
void (*ConstructTutorMessageDecayBuffer)(int *buffer, int bufferLength);
|
||||
void (*ResetTutorMessageDecayData)( void );
|
||||
|
||||
void (*pfnQueryClientCvarValue)( const edict_t *player, const char *cvarName );
|
||||
void (*pfnQueryClientCvarValue2)( const edict_t *player, const char *cvarName, int requestID );
|
||||
int (*pfnCheckParm)( const char *pchCmdLineToken, char **ppnext );
|
||||
} enginefuncs_t;
|
||||
|
||||
extern enginefuncs_t g_engfuncs;
|
||||
|
||||
// ONLY ADD NEW FUNCTIONS TO THE END OF THIS STRUCT. INTERFACE VERSION IS FROZEN AT 138
|
||||
|
||||
// Passed to pfnKeyValue
|
||||
typedef struct KeyValueData_s
|
||||
{
|
||||
char *szClassName; // in: entity classname
|
||||
char *szKeyName; // in: name of key
|
||||
char *szValue; // in: value of key
|
||||
int32 fHandled; // out: DLL sets to true if key-value pair was understood
|
||||
} KeyValueData;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char mapName[ 32 ];
|
||||
char landmarkName[ 32 ];
|
||||
edict_t *pentLandmark;
|
||||
vec3_t vecLandmarkOrigin;
|
||||
} LEVELLIST;
|
||||
#define MAX_LEVEL_CONNECTIONS 16 // These are encoded in the lower 16bits of ENTITYTABLE->flags
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int id; // Ordinal ID of this entity (used for entity <--> pointer conversions)
|
||||
edict_t *pent; // Pointer to the in-game entity
|
||||
|
||||
int location; // Offset from the base data of this entity
|
||||
int size; // Byte size of this entity's data
|
||||
int flags; // This could be a short -- bit mask of transitions that this entity is in the PVS of
|
||||
string_t classname; // entity class name
|
||||
|
||||
} ENTITYTABLE;
|
||||
|
||||
#define FENTTABLE_PLAYER 0x80000000
|
||||
#define FENTTABLE_REMOVED 0x40000000
|
||||
#define FENTTABLE_MOVEABLE 0x20000000
|
||||
#define FENTTABLE_GLOBAL 0x10000000
|
||||
|
||||
typedef enum _fieldtypes
|
||||
{
|
||||
FIELD_FLOAT = 0, // Any floating point value
|
||||
FIELD_STRING, // A string ID (return from ALLOC_STRING)
|
||||
FIELD_ENTITY, // An entity offset (EOFFSET)
|
||||
FIELD_CLASSPTR, // CBaseEntity *
|
||||
FIELD_EHANDLE, // Entity handle
|
||||
FIELD_EVARS, // EVARS *
|
||||
FIELD_EDICT, // edict_t *, or edict_t * (same thing)
|
||||
FIELD_VECTOR, // Any vector
|
||||
FIELD_POSITION_VECTOR, // A world coordinate (these are fixed up across level transitions automagically)
|
||||
FIELD_POINTER, // Arbitrary data pointer... to be removed, use an array of FIELD_CHARACTER
|
||||
FIELD_INTEGER, // Any integer or enum
|
||||
FIELD_FUNCTION, // A class function pointer (Think, Use, etc)
|
||||
FIELD_BOOLEAN, // boolean, implemented as an int, I may use this as a hint for compression
|
||||
FIELD_SHORT, // 2 byte integer
|
||||
FIELD_CHARACTER, // a byte
|
||||
FIELD_TIME, // a floating point time (these are fixed up automatically too!)
|
||||
FIELD_MODELNAME, // Engine string that is a model name (needs precache)
|
||||
FIELD_SOUNDNAME, // Engine string that is a sound name (needs precache)
|
||||
|
||||
FIELD_TYPECOUNT, // MUST BE LAST
|
||||
} FIELDTYPE;
|
||||
|
||||
#if !defined(offsetof) && !defined(GNUC)
|
||||
#define offsetof(s,m) (size_t)&(((s *)0)->m)
|
||||
#endif
|
||||
|
||||
#define _FIELD(type,name,fieldtype,count,flags) { fieldtype, #name, offsetof(type, name), count, flags }
|
||||
#define DEFINE_FIELD(type,name,fieldtype) _FIELD(type, name, fieldtype, 1, 0)
|
||||
#define DEFINE_ARRAY(type,name,fieldtype,count) _FIELD(type, name, fieldtype, count, 0)
|
||||
#define DEFINE_ENTITY_FIELD(name,fieldtype) _FIELD(entvars_t, name, fieldtype, 1, 0 )
|
||||
#define DEFINE_ENTITY_GLOBAL_FIELD(name,fieldtype) _FIELD(entvars_t, name, fieldtype, 1, FTYPEDESC_GLOBAL )
|
||||
#define DEFINE_GLOBAL_FIELD(type,name,fieldtype) _FIELD(type, name, fieldtype, 1, FTYPEDESC_GLOBAL )
|
||||
|
||||
|
||||
#define FTYPEDESC_GLOBAL 0x0001 // This field is masked for global entity save/restore
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FIELDTYPE fieldType;
|
||||
char *fieldName;
|
||||
int fieldOffset;
|
||||
short fieldSize;
|
||||
short flags;
|
||||
} TYPEDESCRIPTION;
|
||||
|
||||
typedef struct SAVERESTOREDATA SAVERESTOREDATA;
|
||||
|
||||
//#ifndef ARRAYSIZE
|
||||
//#define ARRAYSIZE(p) (sizeof(p)/sizeof(p[0]))
|
||||
//#endif
|
||||
|
||||
typedef struct DLL_FUNCTIONS
|
||||
{
|
||||
// Initialize/shutdown the game (one-time call after loading of game .dll )
|
||||
void (*pfnGameInit) ( void );
|
||||
int (*pfnSpawn) ( edict_t *pent );
|
||||
void (*pfnThink) ( edict_t *pent );
|
||||
void (*pfnUse) ( edict_t *pentUsed, edict_t *pentOther );
|
||||
void (*pfnTouch) ( edict_t *pentTouched, edict_t *pentOther );
|
||||
void (*pfnBlocked) ( edict_t *pentBlocked, edict_t *pentOther );
|
||||
void (*pfnKeyValue) ( edict_t *pentKeyvalue, KeyValueData *pkvd );
|
||||
void (*pfnSave) ( edict_t *pent, SAVERESTOREDATA *pSaveData );
|
||||
int (*pfnRestore) ( edict_t *pent, SAVERESTOREDATA *pSaveData, int globalEntity );
|
||||
void (*pfnSetAbsBox) ( edict_t *pent );
|
||||
|
||||
void (*pfnSaveWriteFields) ( SAVERESTOREDATA *, const char *, void *, TYPEDESCRIPTION *, int );
|
||||
void (*pfnSaveReadFields) ( SAVERESTOREDATA *, const char *, void *, TYPEDESCRIPTION *, int );
|
||||
|
||||
void (*pfnSaveGlobalState) ( SAVERESTOREDATA * );
|
||||
void (*pfnRestoreGlobalState) ( SAVERESTOREDATA * );
|
||||
void (*pfnResetGlobalState) ( void );
|
||||
|
||||
qboolean (*pfnClientConnect) ( edict_t *pEntity, const char *pszName, const char *pszAddress, char szRejectReason[ 128 ] );
|
||||
|
||||
void (*pfnClientDisconnect) ( edict_t *pEntity );
|
||||
void (*pfnClientKill) ( edict_t *pEntity );
|
||||
void (*pfnClientPutInServer) ( edict_t *pEntity );
|
||||
void (*pfnClientCommand) ( edict_t *pEntity );
|
||||
void (*pfnClientUserInfoChanged)( edict_t *pEntity, char *infobuffer );
|
||||
|
||||
void (*pfnServerActivate) ( edict_t *pEdictList, int edictCount, int clientMax );
|
||||
void (*pfnServerDeactivate) ( void );
|
||||
|
||||
void (*pfnPlayerPreThink) ( edict_t *pEntity );
|
||||
void (*pfnPlayerPostThink) ( edict_t *pEntity );
|
||||
|
||||
void (*pfnStartFrame) ( void );
|
||||
void (*pfnParmsNewLevel) ( void );
|
||||
void (*pfnParmsChangeLevel) ( void );
|
||||
|
||||
// Returns string describing current .dll. E.g., TeamFotrress 2, Half-Life
|
||||
const char *(*pfnGetGameDescription)( void );
|
||||
|
||||
// Notify dll about a player customization.
|
||||
void (*pfnPlayerCustomization) ( edict_t *pEntity, customization_t *pCustom );
|
||||
|
||||
// Spectator funcs
|
||||
void (*pfnSpectatorConnect) ( edict_t *pEntity );
|
||||
void (*pfnSpectatorDisconnect) ( edict_t *pEntity );
|
||||
void (*pfnSpectatorThink) ( edict_t *pEntity );
|
||||
|
||||
// Notify game .dll that engine is going to shut down. Allows mod authors to set a breakpoint.
|
||||
void (*pfnSys_Error) ( const char *error_string );
|
||||
|
||||
void (*pfnPM_Move) ( struct playermove_s *ppmove, qboolean server );
|
||||
void (*pfnPM_Init) ( struct playermove_s *ppmove );
|
||||
char (*pfnPM_FindTextureType)( char *name );
|
||||
void (*pfnSetupVisibility)( struct edict_s *pViewEntity, struct edict_s *pClient, unsigned char **pvs, unsigned char **pas );
|
||||
void (*pfnUpdateClientData) ( const struct edict_s *ent, int sendweapons, struct clientdata_s *cd );
|
||||
int (*pfnAddToFullPack)( struct entity_state_s *state, int e, edict_t *ent, edict_t *host, int hostflags, int player, unsigned char *pSet );
|
||||
void (*pfnCreateBaseline) ( int player, int eindex, struct entity_state_s *baseline, struct edict_s *entity, int playermodelindex, vec3_t player_mins, vec3_t player_maxs );
|
||||
void (*pfnRegisterEncoders) ( void );
|
||||
int (*pfnGetWeaponData) ( struct edict_s *player, struct weapon_data_s *info );
|
||||
|
||||
void (*pfnCmdStart) ( const edict_t *player, const struct usercmd_s *cmd, unsigned int random_seed );
|
||||
void (*pfnCmdEnd) ( const edict_t *player );
|
||||
|
||||
// Return 1 if the packet is valid. Set response_buffer_size if you want to send a response packet. Incoming, it holds the max
|
||||
// size of the response_buffer, so you must zero it out if you choose not to respond.
|
||||
int (*pfnConnectionlessPacket ) ( const struct netadr_s *net_from, const char *args, char *response_buffer, int *response_buffer_size );
|
||||
|
||||
// Enumerates player hulls. Returns 0 if the hull number doesn't exist, 1 otherwise
|
||||
int (*pfnGetHullBounds) ( int hullnumber, float *mins, float *maxs );
|
||||
|
||||
// Create baselines for certain "unplaced" items.
|
||||
void (*pfnCreateInstancedBaselines) ( void );
|
||||
|
||||
// One of the pfnForceUnmodified files failed the consistency check for the specified player
|
||||
// Return 0 to allow the client to continue, 1 to force immediate disconnection ( with an optional disconnect message of up to 256 characters )
|
||||
int (*pfnInconsistentFile)( const struct edict_s *player, const char *filename, char *disconnect_message );
|
||||
|
||||
// The game .dll should return 1 if lag compensation should be allowed ( could also just set
|
||||
// the sv_unlag cvar.
|
||||
// Most games right now should return 0, until client-side weapon prediction code is written
|
||||
// and tested for them.
|
||||
int (*pfnAllowLagCompensation)( void );
|
||||
} DLL_FUNCTIONS;
|
||||
|
||||
extern DLL_FUNCTIONS gEntityInterface;
|
||||
|
||||
// Current version.
|
||||
#define NEW_DLL_FUNCTIONS_VERSION 1
|
||||
|
||||
typedef struct NEW_DLL_FUNCTIONS
|
||||
{
|
||||
// Called right before the object's memory is freed.
|
||||
// Calls its destructor.
|
||||
void (*pfnOnFreeEntPrivateData)(edict_t *pEnt);
|
||||
void (*pfnGameShutdown)(void);
|
||||
int (*pfnShouldCollide)( edict_t *pentTouched, edict_t *pentOther );
|
||||
void (*pfnCvarValue)( const edict_t *pEnt, const char *value );
|
||||
void (*pfnCvarValue2)( const edict_t *pEnt, int requestID, const char *cvarName, const char *value );
|
||||
} NEW_DLL_FUNCTIONS;
|
||||
|
||||
typedef int (*NEW_DLL_FUNCTIONS_FN)( NEW_DLL_FUNCTIONS *pFunctionTable, int *interfaceVersion );
|
||||
|
||||
// Pointers will be null if the game DLL doesn't support this API.
|
||||
extern NEW_DLL_FUNCTIONS gNewDLLFunctions;
|
||||
|
||||
typedef int (*APIFUNCTION)( DLL_FUNCTIONS *pFunctionTable, int interfaceVersion );
|
||||
typedef int (*APIFUNCTION2)( DLL_FUNCTIONS *pFunctionTable, int *interfaceVersion );
|
||||
|
||||
#endif // EIFACE_H
|
130
src/sdk/meta_api.h
Normal file
130
src/sdk/meta_api.h
Normal file
@ -0,0 +1,130 @@
|
||||
// vi: set ts=4 sw=4 :
|
||||
// vim: set tw=75 :
|
||||
|
||||
// meta_api.h - description of metamod's DLL interface
|
||||
|
||||
/*
|
||||
* Copyright (c) 2001-2003 Will Day <willday@hpgx.net>
|
||||
*
|
||||
* This file is part of Metamod.
|
||||
*
|
||||
* Metamod 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.
|
||||
*
|
||||
* Metamod 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 Metamod; 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 META_API_H
|
||||
#define META_API_H
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning ( disable : 869 )
|
||||
#endif
|
||||
|
||||
//#include "dllapi.h" // GETENTITYAPI_FN, etc
|
||||
//#include "engine_api.h" // GET_ENGINE_FUNCTIONS_FN, etc
|
||||
#include "plinfo.h" // plugin_info_t, etc
|
||||
#include "mutil.h" // mutil_funcs_t, etc
|
||||
//#include "osdep.h" // DLLEXPORT, etc
|
||||
|
||||
// Version consists of "major:minor", two separate integer numbers.
|
||||
// Version 1 original
|
||||
// Version 2 added plugin_info_t **pinfo
|
||||
// Version 3 init split into query and attach, added detach
|
||||
// Version 4 added (PLUG_LOADTIME now) to attach
|
||||
// Version 5 changed mm ifvers int* to string, moved pl ifvers to info
|
||||
// Version 5:1 added link support for entity "adminmod_timer" (adminmod)
|
||||
// Version 5:2 added gamedll_funcs to meta_attach() [v1.0-rc2]
|
||||
// Version 5:3 added mutil_funcs to meta_query() [v1.05]
|
||||
// Version 5:4 added centersay utility functions [v1.06]
|
||||
// Version 5:5 added Meta_Init to plugin API [v1.08]
|
||||
// Version 5:6 added CallGameEntity utility function [v1.09]
|
||||
// Version 5:7 added GetUserMsgID, GetUserMsgName util funcs [v1.11]
|
||||
// Version 5:8 added GetPluginPath [v1.11]
|
||||
// Version 5:9 added GetGameInfo [v1.14]
|
||||
// Version 5:10 added GINFO_REALDLL_FULLPATH for GetGameInfo [v1.17]
|
||||
// Version 5:11 added plugin loading and unloading API [v1.18]
|
||||
// Version 5:12 added util code for checking player query status [v1.18]
|
||||
// Version 5:13 added cvarquery2 support and api for calling hook tables [v1.19]
|
||||
#define META_INTERFACE_VERSION "5:13"
|
||||
|
||||
#ifdef UNFINISHED
|
||||
// Version 5:99 added event hook utility functions [v.???]
|
||||
#define META_INTERFACE_VERSION "5:99"
|
||||
#endif /* UNFINISHED */
|
||||
|
||||
// Flags returned by a plugin's api function.
|
||||
// NOTE: order is crucial, as greater/less comparisons are made.
|
||||
typedef enum {
|
||||
MRES_UNSET = 0,
|
||||
MRES_IGNORED, // plugin didn't take any action
|
||||
MRES_HANDLED, // plugin did something, but real function should still be called
|
||||
MRES_OVERRIDE, // call real function, but use my return value
|
||||
MRES_SUPERCEDE, // skip real function; use my return value
|
||||
} META_RES;
|
||||
|
||||
// Variables provided to plugins.
|
||||
typedef struct meta_globals_s {
|
||||
META_RES mres; // writable; plugin's return flag
|
||||
META_RES prev_mres; // readable; return flag of the previous plugin called
|
||||
META_RES status; // readable; "highest" return flag so far
|
||||
void *orig_ret; // readable; return value from "real" function
|
||||
void *override_ret; // readable; return value from overriding/superceding plugin
|
||||
} meta_globals_t;
|
||||
|
||||
extern meta_globals_t *gpMetaGlobals;
|
||||
#define SET_META_RESULT(result) gpMetaGlobals->mres=result
|
||||
#define RETURN_META(result) gpMetaGlobals->mres=result; return
|
||||
#define RETURN_META_VALUE(result, value) gpMetaGlobals->mres=result; return(value)
|
||||
#define META_RESULT_STATUS gpMetaGlobals->status
|
||||
#define META_RESULT_PREVIOUS gpMetaGlobals->prev_mres
|
||||
#define META_RESULT_ORIG_RET(type) *(type *)gpMetaGlobals->orig_ret
|
||||
#define META_RESULT_OVERRIDE_RET(type) *(type *)gpMetaGlobals->override_ret
|
||||
|
||||
// Table of getapi functions, retrieved from each plugin.
|
||||
typedef struct {
|
||||
void* pfnGetEntityAPI;
|
||||
void* pfnGetEntityAPI_Post;
|
||||
void* pfnGetEntityAPI2;
|
||||
void* pfnGetEntityAPI2_Post;
|
||||
void* pfnGetNewDLLFunctions;
|
||||
void* pfnGetNewDLLFunctions_Post;
|
||||
void* pfnGetEngineFunctions;
|
||||
void* pfnGetEngineFunctions_Post;
|
||||
} META_FUNCTIONS;
|
||||
|
||||
// Declared in plugin; referenced in macros.
|
||||
extern mutil_funcs_t* mUtil;
|
||||
|
||||
struct DLL_FUNCTIONS;
|
||||
struct NEW_DLL_FUNCTIONS;
|
||||
|
||||
typedef struct gamedll_funcs_s
|
||||
{
|
||||
DLL_FUNCTIONS* dllapi_table;
|
||||
NEW_DLL_FUNCTIONS* newapi_table;
|
||||
} gamedll_funcs_t;
|
||||
|
||||
extern gamedll_funcs_t* gpGamedllFuncs;
|
||||
|
||||
#endif /* META_API_H */
|
61
src/sdk/mutil.h
Normal file
61
src/sdk/mutil.h
Normal file
@ -0,0 +1,61 @@
|
||||
// vi: set ts=4 sw=4 :
|
||||
// vim: set tw=75 :
|
||||
|
||||
// mutil.h - prototypes for utility functions to provide to plugins
|
||||
|
||||
/*
|
||||
* Copyright (c) 2001-2003 Will Day <willday@hpgx.net>
|
||||
*
|
||||
* This file is part of Metamod.
|
||||
*
|
||||
* Metamod 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.
|
||||
*
|
||||
* Metamod 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 Metamod; 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 MUTIL_H
|
||||
#define MUTIL_H
|
||||
|
||||
// Meta Utility Function table type.
|
||||
typedef struct meta_util_funcs_s {
|
||||
void (*pfnLogConsole) (plid_t plid, const char *fmt, ...);
|
||||
void (*pfnLogMessage) (plid_t plid, const char *fmt, ...);
|
||||
void (*pfnLogError) (plid_t plid, const char *fmt, ...);
|
||||
void (*pfnLogDeveloper) (plid_t plid, const char *fmt, ...);
|
||||
void (*pfnCenterSay) (plid_t plid, const char *fmt, ...);
|
||||
void* pfnCenterSayParms;
|
||||
void* pfnCenterSayVarargs;
|
||||
int (*pfnCallGameEntity) (plid_t plid, const char *entStr, struct entvars_s *pev);
|
||||
int (*pfnGetUserMsgID) (plid_t plid, const char* msgname, int* size);
|
||||
const char* (*pfnGetUserMsgName) (plid_t plid, int msgid, int* size);
|
||||
const char* (*pfnGetPluginPath) (plid_t plid);
|
||||
} mutil_funcs_t;
|
||||
|
||||
// Convenience macros for MetaUtil functions
|
||||
#define LOG_CONSOLE (*gpMetaUtilFuncs->pfnLogConsole)
|
||||
#define LOG_MESSAGE (*gpMetaUtilFuncs->pfnLogMessage)
|
||||
#define LOG_ERROR (*gpMetaUtilFuncs->pfnLogError)
|
||||
#define LOG_DEVELOPER (*gpMetaUtilFuncs->pfnLogDeveloper)
|
||||
|
||||
#endif /* MUTIL_H */
|
82
src/sdk/plinfo.h
Normal file
82
src/sdk/plinfo.h
Normal file
@ -0,0 +1,82 @@
|
||||
// vi: set ts=4 sw=4 :
|
||||
// vim: set tw=75 :
|
||||
|
||||
// plinfo.h - typedefs for plugin info structure
|
||||
|
||||
/*
|
||||
* Copyright (c) 2001-2003 Will Day <willday@hpgx.net>
|
||||
*
|
||||
* This file is part of Metamod.
|
||||
*
|
||||
* Metamod 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.
|
||||
*
|
||||
* Metamod 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 Metamod; 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 PLINFO_H
|
||||
#define PLINFO_H
|
||||
|
||||
// Flags for plugin to indicate when it can be be loaded/unloaded.
|
||||
// NOTE: order is crucial, as greater/less comparisons are made.
|
||||
typedef enum {
|
||||
PT_NEVER = 0,
|
||||
PT_STARTUP, // should only be loaded/unloaded at initial hlds execution
|
||||
PT_CHANGELEVEL, // can be loaded/unloaded between maps
|
||||
PT_ANYTIME, // can be loaded/unloaded at any time
|
||||
PT_ANYPAUSE, // can be loaded/unloaded at any time, and can be "paused" during a map
|
||||
} PLUG_LOADTIME;
|
||||
|
||||
// Flags to indicate why the plugin is being unloaded.
|
||||
typedef enum {
|
||||
PNL_NULL = 0,
|
||||
PNL_INI_DELETED, // was deleted from plugins.ini
|
||||
PNL_FILE_NEWER, // file on disk is newer than last load
|
||||
PNL_COMMAND, // requested by server/console command
|
||||
PNL_CMD_FORCED, // forced by server/console command
|
||||
PNL_DELAYED, // delayed from previous request; can't tell origin
|
||||
//only used for 'real_reason' on MPlugin::unload()
|
||||
PNL_PLUGIN, // requested by plugin function call
|
||||
PNL_PLG_FORCED, // forced by plugin function call
|
||||
PNL_RELOAD, // forced unload by reload()
|
||||
} PL_UNLOAD_REASON;
|
||||
|
||||
// Information plugin provides about itself.
|
||||
typedef struct {
|
||||
char *ifvers; // meta_interface version
|
||||
char *name; // full name of plugin
|
||||
char *version; // version
|
||||
char *date; // date
|
||||
char *author; // author name/email
|
||||
char *url; // URL
|
||||
char *logtag; // log message prefix (unused right now)
|
||||
PLUG_LOADTIME loadable; // when loadable
|
||||
PLUG_LOADTIME unloadable; // when unloadable
|
||||
} plugin_info_t;
|
||||
extern plugin_info_t Plugin_info;
|
||||
|
||||
// Plugin identifier, passed to all Meta Utility Functions.
|
||||
typedef plugin_info_t* plid_t;
|
||||
#define PLID &Plugin_info
|
||||
|
||||
#endif /* PLINFO_H */
|
224
src/sdk/progdefs.h
Normal file
224
src/sdk/progdefs.h
Normal file
@ -0,0 +1,224 @@
|
||||
/***
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
*
|
||||
* This product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Use, distribution, and modification of this source code and/or resulting
|
||||
* object code is restricted to non-commercial enhancements to products from
|
||||
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||
* without written permission from Valve LLC.
|
||||
*
|
||||
****/
|
||||
#ifndef PROGDEFS_H
|
||||
#define PROGDEFS_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
typedef struct globalvars_s
|
||||
{
|
||||
float time;
|
||||
float frametime;
|
||||
float force_retouch;
|
||||
string_t mapname;
|
||||
string_t startspot;
|
||||
float deathmatch;
|
||||
float coop;
|
||||
float teamplay;
|
||||
float serverflags;
|
||||
float found_secrets;
|
||||
vec3_t v_forward;
|
||||
vec3_t v_up;
|
||||
vec3_t v_right;
|
||||
float trace_allsolid;
|
||||
float trace_startsolid;
|
||||
float trace_fraction;
|
||||
vec3_t trace_endpos;
|
||||
vec3_t trace_plane_normal;
|
||||
float trace_plane_dist;
|
||||
struct edict_s *trace_ent;
|
||||
float trace_inopen;
|
||||
float trace_inwater;
|
||||
int trace_hitgroup;
|
||||
int trace_flags;
|
||||
int msg_entity;
|
||||
int cdAudioTrack;
|
||||
int maxClients;
|
||||
int maxEntities;
|
||||
const char *pStringBase;
|
||||
|
||||
void *pSaveData;
|
||||
vec3_t vecLandmarkOffset;
|
||||
} globalvars_t;
|
||||
|
||||
|
||||
typedef struct entvars_s
|
||||
{
|
||||
string_t classname;
|
||||
string_t globalname;
|
||||
|
||||
vec3_t origin;
|
||||
vec3_t oldorigin;
|
||||
vec3_t velocity;
|
||||
vec3_t basevelocity;
|
||||
vec3_t clbasevelocity; // Base velocity that was passed in to server physics so
|
||||
// client can predict conveyors correctly. Server zeroes it, so we need to store here, too.
|
||||
vec3_t movedir;
|
||||
|
||||
vec3_t angles; // Model angles
|
||||
vec3_t avelocity; // angle velocity (degrees per second)
|
||||
vec3_t punchangle; // auto-decaying view angle adjustment
|
||||
vec3_t v_angle; // Viewing angle (player only)
|
||||
|
||||
// For parametric entities
|
||||
vec3_t endpos;
|
||||
vec3_t startpos;
|
||||
float impacttime;
|
||||
float starttime;
|
||||
|
||||
int fixangle; // 0:nothing, 1:force view angles, 2:add avelocity
|
||||
float idealpitch;
|
||||
float pitch_speed;
|
||||
float ideal_yaw;
|
||||
float yaw_speed;
|
||||
|
||||
int modelindex;
|
||||
string_t model;
|
||||
|
||||
int viewmodel; // player's viewmodel
|
||||
int weaponmodel; // what other players see
|
||||
|
||||
vec3_t absmin; // BB max translated to world coord
|
||||
vec3_t absmax; // BB max translated to world coord
|
||||
vec3_t mins; // local BB min
|
||||
vec3_t maxs; // local BB max
|
||||
vec3_t size; // maxs - mins
|
||||
|
||||
float ltime;
|
||||
float nextthink;
|
||||
|
||||
int movetype;
|
||||
int solid;
|
||||
|
||||
int skin;
|
||||
int body; // sub-model selection for studiomodels
|
||||
int effects;
|
||||
|
||||
float gravity; // % of "normal" gravity
|
||||
float friction; // inverse elasticity of MOVETYPE_BOUNCE
|
||||
|
||||
int light_level;
|
||||
|
||||
int sequence; // animation sequence
|
||||
int gaitsequence; // movement animation sequence for player (0 for none)
|
||||
float frame; // % playback position in animation sequences (0..255)
|
||||
float animtime; // world time when frame was set
|
||||
float framerate; // animation playback rate (-8x to 8x)
|
||||
byte controller[4]; // bone controller setting (0..255)
|
||||
byte blending[2]; // blending amount between sub-sequences (0..255)
|
||||
|
||||
float scale; // sprite rendering scale (0..255)
|
||||
|
||||
int rendermode;
|
||||
float renderamt;
|
||||
vec3_t rendercolor;
|
||||
int renderfx;
|
||||
|
||||
float health;
|
||||
float frags;
|
||||
int weapons; // bit mask for available weapons
|
||||
float takedamage;
|
||||
|
||||
int deadflag;
|
||||
vec3_t view_ofs; // eye position
|
||||
|
||||
int button;
|
||||
int impulse;
|
||||
|
||||
struct edict_s *chain; // Entity pointer when linked into a linked list
|
||||
struct edict_s *dmg_inflictor;
|
||||
struct edict_s *enemy;
|
||||
struct edict_s *aiment; // entity pointer when MOVETYPE_FOLLOW
|
||||
struct edict_s *owner;
|
||||
struct edict_s *groundentity;
|
||||
|
||||
int spawnflags;
|
||||
int flags;
|
||||
|
||||
int colormap; // lowbyte topcolor, highbyte bottomcolor
|
||||
int team;
|
||||
|
||||
float max_health;
|
||||
float teleport_time;
|
||||
float armortype;
|
||||
float armorvalue;
|
||||
int waterlevel;
|
||||
int watertype;
|
||||
|
||||
string_t target;
|
||||
string_t targetname;
|
||||
string_t netname;
|
||||
string_t message;
|
||||
|
||||
float dmg_take;
|
||||
float dmg_save;
|
||||
float dmg;
|
||||
float dmgtime;
|
||||
|
||||
string_t noise;
|
||||
string_t noise1;
|
||||
string_t noise2;
|
||||
string_t noise3;
|
||||
|
||||
float speed;
|
||||
float air_finished;
|
||||
float pain_finished;
|
||||
float radsuit_finished;
|
||||
|
||||
struct edict_s *pContainingEntity;
|
||||
|
||||
int playerclass;
|
||||
float maxspeed;
|
||||
|
||||
float fov;
|
||||
int weaponanim;
|
||||
|
||||
int pushmsec;
|
||||
|
||||
int bInDuck;
|
||||
int flTimeStepSound;
|
||||
int flSwimTime;
|
||||
int flDuckTime;
|
||||
int iStepLeft;
|
||||
float flFallVelocity;
|
||||
|
||||
int gamestate;
|
||||
|
||||
int oldbuttons;
|
||||
|
||||
int groupinfo;
|
||||
|
||||
// For mods
|
||||
int iuser1;
|
||||
int iuser2;
|
||||
int iuser3;
|
||||
int iuser4;
|
||||
float fuser1;
|
||||
float fuser2;
|
||||
float fuser3;
|
||||
float fuser4;
|
||||
vec3_t vuser1;
|
||||
vec3_t vuser2;
|
||||
vec3_t vuser3;
|
||||
vec3_t vuser4;
|
||||
struct edict_s *euser1;
|
||||
struct edict_s *euser2;
|
||||
struct edict_s *euser3;
|
||||
struct edict_s *euser4;
|
||||
} entvars_t;
|
||||
|
||||
|
||||
#endif // PROGDEFS_H
|
Loading…
Reference in New Issue
Block a user