From 80b9f6f1bc12e6111923f0bcdf5ff87336ef1bbb Mon Sep 17 00:00:00 2001 From: s1lent Date: Fri, 30 Aug 2019 02:20:31 +0700 Subject: [PATCH] Update regamedll API sdk Update cssdk & minor refactoring Added safe checks CGameRules/CCSEntity version interface (for future safe migrate) --- .../amxmodx/scripting/include/cssdk_const.inc | 19 +- reapi/include/cssdk/common/const.h | 826 +++++++++--------- reapi/include/cssdk/dlls/API/CSEntity.h | 7 + reapi/include/cssdk/dlls/extdll.h | 10 +- reapi/include/cssdk/dlls/gamerules.h | 2 + reapi/include/cssdk/dlls/qstring.h | 121 +++ reapi/include/cssdk/dlls/regamedll_api.h | 4 +- reapi/include/cssdk/engine/maintypes.h | 20 + reapi/src/api_config.cpp | 5 + reapi/src/api_config.h | 1 + reapi/src/main.cpp | 15 +- reapi/src/mods/mod_regamedll_api.cpp | 9 +- 12 files changed, 597 insertions(+), 442 deletions(-) create mode 100644 reapi/include/cssdk/dlls/qstring.h diff --git a/reapi/extra/amxmodx/scripting/include/cssdk_const.inc b/reapi/extra/amxmodx/scripting/include/cssdk_const.inc index a6a41a3..b795f55 100644 --- a/reapi/extra/amxmodx/scripting/include/cssdk_const.inc +++ b/reapi/extra/amxmodx/scripting/include/cssdk_const.inc @@ -122,14 +122,17 @@ /** * get_entvar(entity, var_effects) values */ -#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_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_FORCEVISIBILITY 2048 // force visibility +#define EF_OWNER_VISIBILITY 4096 // visibility for owner +#define EF_OWNER_NO_VISIBILITY 8192 // no visibility for owner /** * Break Model Defines diff --git a/reapi/include/cssdk/common/const.h b/reapi/include/cssdk/common/const.h index 3ad5c53..8350e8a 100644 --- a/reapi/include/cssdk/common/const.h +++ b/reapi/include/cssdk/common/const.h @@ -1,17 +1,30 @@ -/*** +/* * -* 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. +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. * -* 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. +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. * -****/ +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +* +*/ #ifndef CONST_H #define CONST_H @@ -20,423 +33,424 @@ #endif // Max # of clients allowed in a server. -#define MAX_CLIENTS 32 +#define MAX_CLIENTS 32 // How many bits to use to encode an edict. -#define MAX_EDICT_BITS 11 // # of bits needed to represent max edicts +#define MAX_EDICT_BITS 11 // # of bits needed to represent max edicts + // Max # of edicts in a level (2048) -#define MAX_EDICTS (1<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 +#define FL_FLY BIT(0) // Changes the SV_Movestep() behavior to not need to be on ground +#define FL_SWIM BIT(1) // Changes the SV_Movestep() behavior to not need to be on ground (but stay in water) +#define FL_CONVEYOR BIT(2) +#define FL_CLIENT BIT(3) +#define FL_INWATER BIT(4) +#define FL_MONSTER BIT(5) +#define FL_GODMODE BIT(6) +#define FL_NOTARGET BIT(7) +#define FL_SKIPLOCALHOST BIT(8) // Don't send entity to local host, it's predicting this entity itself +#define FL_ONGROUND BIT(9) // At rest / on the ground +#define FL_PARTIALGROUND BIT(10) // not all corners are valid +#define FL_WATERJUMP BIT(11) // player jumping out of water +#define FL_FROZEN BIT(12) // Player is frozen for 3rd person camera +#define FL_FAKECLIENT BIT(13) // JAC: fake client, simulated server side; don't send network messages to them +#define FL_DUCKING BIT(14) // Player flag -- Player is fully crouched +#define FL_FLOAT BIT(15) // Apply floating force to this entity when in water +#define FL_GRAPHED BIT(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_IMMUNE_WATER BIT(17) +#define FL_IMMUNE_SLIME BIT(18) +#define FL_IMMUNE_LAVA BIT(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 +#define FL_PROXY BIT(20) // This is a spectator proxy +#define FL_ALWAYSTHINK BIT(21) // Brush model flag -- call think every frame regardless of nextthink - ltime (for constantly changing velocity/path) +#define FL_BASEVELOCITY BIT(22) // Base velocity has been applied this frame (used to convert base velocity into momentum) +#define FL_MONSTERCLIP BIT(23) // Only collide in with monsters who have FL_MONSTERCLIP set +#define FL_ONTRAIN BIT(24) // Player is _controlling_ a train, so movement commands should be ignored on client during prediction. +#define FL_WORLDBRUSH BIT(25) // Not moveable/removeable brush entity (really part of the world, but represented as an entity for transparency or something) +#define FL_SPECTATOR BIT(26) // This client is a spectator, don't run touch functions, etc. +#define FL_CUSTOMENTITY BIT(29) // This is a custom entity +#define FL_KILLME BIT(30) // This entity is marked for death -- This allows the engine to kill ents at the appropriate time +#define FL_DORMANT BIT(31) // Entity is dormant, no updates to client // SV_EmitSound2 flags -#define SND_EMIT2_NOPAS (1<<0) // never to do check PAS -#define SND_EMIT2_INVOKER (1<<1) // do not send to the client invoker +#define SND_EMIT2_NOPAS BIT(0) // never to do check PAS +#define SND_EMIT2_INVOKER BIT(1) // do not send to the client invoker // Engine edict->spawnflags -#define SF_NOTINDEATHMATCH 0x0800 // Do not spawn when deathmatch and loading entities from a file - +#define SF_NOTINDEATHMATCH BIT(11) // Do not spawn when deathmatch and loading entities from a file // Goes into globalvars_t.trace_flags -#define FTRACE_SIMPLEBOX (1<<0) // Traceline with a simple box - +#define FTRACE_SIMPLEBOX BIT(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 +#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) +#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 +#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 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 // do respawn the entity +#define DEAD_DISCARDBODY 4 -#define DAMAGE_NO 0 -#define DAMAGE_YES 1 -#define DAMAGE_AIM 2 +#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 +// edict->effects values +#define EF_BRIGHTFIELD BIT(0) // swirling cloud of particles +#define EF_MUZZLEFLASH BIT(1) // single frame ELIGHT on entity attachment 0 +#define EF_BRIGHTLIGHT BIT(2) // DLIGHT centered at entity origin +#define EF_DIMLIGHT BIT(3) // player flashlight +#define EF_INVLIGHT BIT(4) // get lighting from ceiling +#define EF_NOINTERP BIT(5) // don't interpolate the next frame +#define EF_LIGHT BIT(6) // rocket flare glow sprite +#define EF_NODRAW BIT(7) // don't draw entity +#define EF_NIGHTVISION BIT(8) // player nightvision +#define EF_SNIPERLASER BIT(9) // sniper laser effect +#define EF_FIBERCAMERA BIT(10) // fiber camera +#define EF_FORCEVISIBILITY BIT(11) // force visibility +#define EF_OWNER_VISIBILITY BIT(12) // visibility for owner +#define EF_OWNER_NO_VISIBILITY BIT(13) // no visibility for owner +// state->eflags values +#define EFLAG_SLERP 1 // do studio interpolation of this entity -// 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) +#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) +#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_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) +#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_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_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) +#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) +#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) +#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) +#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_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_LAVASPLASH 10 // Quake1 lava splash +// coord coord coord (position) -#define TE_TELEPORT 11 // Quake1 teleport 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) +#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 +#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 +#define TE_IMPLOSION 14 // tracers moving toward a point // coord, coord, coord (position) // byte (radius) // byte (count) -// byte (life in 0.1's) +// 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) +#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 (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_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) +#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_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) +#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) +#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) +#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 +#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 (life in 0.1's) +// byte (line width in 0.1's) // byte,byte,byte (color) // byte (brightness) -#define TE_GLOWSPRITE 23 +#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) +#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) +#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_BEAMHOSE 26 // obsolete -#define TE_DLIGHT 27 // dynamic light, effect world, minor entity effect -// coord, coord, coord (pos) -// byte (radius in 10's) +#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 +#define TE_ELIGHT 28 // point entity light, no world effect // short (entity:attachment to follow) -// coord coord coord (initial position) +// coord coord coord (initial position) // coord (radius) // byte byte byte (color) // byte (life in 0.1's) // coord (decay rate) -#define TE_TEXTMESSAGE 29 +#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) +// 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) +// 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 +// 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 +#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 +#define TE_KILLBEAM 99 // kill all beams attached to entity // short (entity) -#define TE_LARGEFUNNEL 100 +#define TE_LARGEFUNNEL 100 // coord coord coord (funnel position) -// short (sprite index) -// short (flags) +// short (sprite index) +// short (flags) -#define TE_BLOODSTREAM 101 // particle spray +#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 +#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 +#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) +#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 +#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) +#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 +#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 +#define TE_BREAKMODEL 108 // box of models or sprites // coord, coord, coord (position) // coord, coord, coord (size) // coord, coord, coord (velocity) @@ -446,12 +460,12 @@ // byte (life in 0.1 secs) // byte (flags) -#define TE_GUNSHOTDECAL 109 // decal and ricochet sound +#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 +#define TE_SPRITE_SPRAY 110 // spay of alpha sprites // coord, coord, coord (position) // coord, coord, coord (velocity) // short (sprite index) @@ -459,18 +473,18 @@ // byte (speed) // byte (noise) -#define TE_ARMOR_RICOCHET 111 // quick spark sprite, client ricochet sound. +#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 // ??? +#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 +#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) @@ -478,7 +492,7 @@ // byte (count) // coord (speed) -#define TE_BUBBLETRAIL 114 // create alpha sprites along a line, float upwards +#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) @@ -486,34 +500,34 @@ // 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) +#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 +#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 +#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 +#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) +#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 +#define TE_SPRAY 120 // Throws a shower of sprites or models // coord, coord, coord (position) // coord, coord, coord (direction) // short (modelindex) @@ -522,19 +536,19 @@ // byte (noise) // byte (rendermode) -#define TE_PLAYERSPRITES 121 // sprites emit from a player's bounding box (ONLY use for players!) +#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. +#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. +#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) @@ -543,29 +557,29 @@ // 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 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) +#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 ) +// coord (vertical offset) (attachment origin.z = player origin.z + vertical offset) // short (model index) -// short (life * 10 ); +// short (life * 10) -#define TE_KILLPLAYERATTACHMENTS 125 // will expire all TENTS attached to a player. +#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 +#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. +// entities that have studio models.Traces are 4096 long. // // coord (origin) // coord (origin) @@ -578,95 +592,74 @@ // byte (count) // byte (bullethole decal texture index) -#define TE_USERTRACER 127 // larger message than the standard tracer, but allows some customization. +#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 ) +// 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 +#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_EMPTY -1 +#define CONTENTS_SOLID -2 +#define CONTENTS_WATER 3 +#define CONTENTS_SLIME -4 +#define CONTENTS_LAVA -5 +#define CONTENTS_SKY -6 -#define CONTENTS_TRANSLUCENT -15 -*/ -#define CONTENTS_LADDER -16 +#define CONTENTS_LADDER -16 -#define CONTENT_FLYFIELD -17 -#define CONTENT_GRAVITY_FLYFIELD -18 -#define CONTENT_FOG -19 +#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 +#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. +#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 +#define ATTN_NONE 0 +#define ATTN_NORM 0.8f +#define ATTN_IDLE 2.0f +#define ATTN_STATIC 1.25f // 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 +#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 +#define VOL_NORM 1.0f // buttons #ifndef IN_BUTTONS_H @@ -674,93 +667,69 @@ #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_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 +#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 +#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 +#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 +{ + 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, +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 + kRenderFxDistort, // Distort/scale/translate flicker + kRenderFxHologram, // kRenderFxDistort + distance fade + kRenderFxDeadPlayer, // kRenderAmt is the player index + kRenderFxExplode, // Scale up really big! + kRenderFxGlowShell, // Glowing Shell + kRenderFxClampMinScale, // Keep this sprite from getting very small (SPRITES only!) + kRenderFxLightMultiplier, // CTM !!!CZERO added to tell the studiorender that the value in iuser2 is a lightmultiplier }; - -typedef unsigned int func_t; - -#ifdef HAVE_STRONG_TYPEDEF -enum class string_t: unsigned int {}; -#else -typedef unsigned int string_t; -#endif - -typedef unsigned char byte; -typedef unsigned short word; -#define _DEF_BYTE_ - -#undef true -#undef false - -#ifndef __cplusplus -typedef enum {false, true} qboolean; -#else -typedef int qboolean; -#endif - typedef struct { byte r, g, b; @@ -772,7 +741,7 @@ typedef struct } colorVec; #ifdef _WIN32 -#pragma pack(push,2) +#pragma pack(push, 2) #endif typedef struct @@ -783,29 +752,30 @@ typedef struct #ifdef _WIN32 #pragma pack(pop) #endif + typedef struct link_s { - struct link_s *prev, *next; + struct link_s *prev, *next; } link_t; typedef struct edict_s edict_t; typedef struct { - vec3_t normal; - float dist; + vec3_t normal; + float dist; } plane_t; typedef struct { - qboolean allsolid; // if true, plane is not valid - qboolean startsolid; // if true, the initial point was in a solid area - qboolean inopen, inwater; - float fraction; // time completed, 1.0 = didn't hit anything - vec3_t endpos; // final position - plane_t plane; // surface normal at impact - edict_t * ent; // entity the surface is on - int hitgroup; // 0 == generic, non zero is specific body part + qboolean allsolid; // if true, plane is not valid + qboolean startsolid; // if true, the initial point was in a solid area + qboolean inopen, inwater; + float fraction; // time completed, 1.0 = didn't hit anything + vec3_t endpos; // final position + plane_t plane; // surface normal at impact + edict_t *ent; // entity the surface is on + int hitgroup; // 0 == generic, non zero is specific body part } trace_t; #endif // CONST_H diff --git a/reapi/include/cssdk/dlls/API/CSEntity.h b/reapi/include/cssdk/dlls/API/CSEntity.h index ef47f30..2c69f23 100644 --- a/reapi/include/cssdk/dlls/API/CSEntity.h +++ b/reapi/include/cssdk/dlls/API/CSEntity.h @@ -32,6 +32,11 @@ class CBaseEntity; class CCSEntity { public: + CCSEntity() : + m_pContainingEntity(nullptr) + { + } + virtual ~CCSEntity() {} virtual void FireBullets(int iShots, Vector &vecSrc, Vector &vecDirShooting, Vector &vecSpread, float flDistance, int iBulletType, int iTracerFreq, int iDamage, entvars_t *pevAttacker); virtual Vector FireBullets3(Vector &vecSrc, Vector &vecDirShooting, float vecSpread, float flDistance, int iPenetration, int iBulletType, int iDamage, float flRangeModifier, entvars_t *pevAttacker, bool bPistol, int shared_rand); @@ -63,3 +68,5 @@ class CCSMonster: public CCSToggle public: }; + +#define CSENTITY_API_INTERFACE_VERSION "CSENTITY_API_INTERFACE_VERSION001" diff --git a/reapi/include/cssdk/dlls/extdll.h b/reapi/include/cssdk/dlls/extdll.h index 25fa72e..1db8e3d 100644 --- a/reapi/include/cssdk/dlls/extdll.h +++ b/reapi/include/cssdk/dlls/extdll.h @@ -39,7 +39,7 @@ #include "strtools.h" #ifdef _WIN32 - #define WIN32_LEAN_AND_MEAN + #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #define NOWINRES #define NOSERVICE #define NOMCX @@ -66,16 +66,20 @@ typedef float vec_t; // needed before including progdefs.h // Vector class #include "vector.h" -//#include "vector.h" + // Defining it as a (bogus) struct helps enforce type-checking #define vec3_t Vector -// Shared engine/DLL constants +// QString class +#include "qstring.h" + +// Shared engine/DLL constants #include "const.h" #include "edict.h" // Shared header describing protocol between engine and DLLs #include "eiface.h" + // Shared header between the client DLL and the game DLLs #include "cdll_dll.h" #include "extdef.h" diff --git a/reapi/include/cssdk/dlls/gamerules.h b/reapi/include/cssdk/dlls/gamerules.h index e4c184d..a4c3134 100644 --- a/reapi/include/cssdk/dlls/gamerules.h +++ b/reapi/include/cssdk/dlls/gamerules.h @@ -332,6 +332,8 @@ public: bool m_bGameOver; // intermission or finale (deprecated name g_fGameOver) }; +#define GAMERULES_API_INTERFACE_VERSION "GAMERULES_API_INTERFACE_VERSION001" + // CHalfLifeRules - rules for the single player Half-Life game. class CHalfLifeRules: public CGameRules { protected: diff --git a/reapi/include/cssdk/dlls/qstring.h b/reapi/include/cssdk/dlls/qstring.h new file mode 100644 index 0000000..0b15829 --- /dev/null +++ b/reapi/include/cssdk/dlls/qstring.h @@ -0,0 +1,121 @@ +/* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +* +*/ + +#pragma once + +#define QSTRING_DEFINE + +constexpr unsigned int iStringNull = {0}; + +// Quake string (helper class) +class QString final +{ +public: + using qstring_t = unsigned int; + + QString(): m_string(iStringNull) {}; + QString(qstring_t string): m_string(string) {}; + + bool IsNull() const; + bool IsNullOrEmpty() const; + + // Copy the array + QString &operator=(const QString &other); + + bool operator==(qstring_t string) const; + bool operator==(const QString &s) const; + bool operator==(const char *pszString) const; + + operator const char *() const; + operator unsigned int() const; + const char *str() const; + +private: + qstring_t m_string; +}; + +#ifdef USE_QSTRING +#define string_t QString +#endif + +#include "const.h" +#include "edict.h" +#include "eiface.h" +#include "enginecallback.h" + +extern globalvars_t *gpGlobals; + +#define STRING(offset) ((const char *)(gpGlobals->pStringBase + (unsigned int)(offset))) +#define MAKE_STRING(str) ((unsigned int)(str) - (unsigned int)(STRING(0))) + +// Inlines +inline bool QString::IsNull() const +{ + return m_string == iStringNull; +} + +inline bool QString::IsNullOrEmpty() const +{ + return IsNull() || (&gpGlobals->pStringBase[m_string])[0] == '\0'; +} + +inline QString &QString::operator=(const QString &other) +{ + m_string = other.m_string; + return (*this); +} + +inline bool QString::operator==(qstring_t string) const +{ + return m_string == string; +} + +inline bool QString::operator==(const QString &s) const +{ + return m_string == s.m_string; +} + +inline bool QString::operator==(const char *pszString) const +{ + return Q_strcmp(&gpGlobals->pStringBase[m_string], pszString) == 0; +} + +inline const char *QString::str() const +{ + return &gpGlobals->pStringBase[m_string]; +} + +inline QString::operator const char *() const +{ + return str(); +} + +inline QString::operator unsigned int() const +{ + return m_string; +} diff --git a/reapi/include/cssdk/dlls/regamedll_api.h b/reapi/include/cssdk/dlls/regamedll_api.h index 2616ef8..2004146 100644 --- a/reapi/include/cssdk/dlls/regamedll_api.h +++ b/reapi/include/cssdk/dlls/regamedll_api.h @@ -38,7 +38,7 @@ #include #define REGAMEDLL_API_VERSION_MAJOR 5 -#define REGAMEDLL_API_VERSION_MINOR 10 +#define REGAMEDLL_API_VERSION_MINOR 11 // CBasePlayer::Spawn hook typedef IHookChainClass IReGameHook_CBasePlayer_Spawn; @@ -589,6 +589,8 @@ public: virtual struct AmmoInfo *GetAmmoInfo(AmmoType ammoID) = 0; virtual struct AmmoInfoStruct *GetAmmoInfoEx(AmmoType ammoID) = 0; virtual struct AmmoInfoStruct *GetAmmoInfoEx(const char *ammoName) = 0; + virtual bool BGetICSEntity(const char *pchVersion) const = 0; + virtual bool BGetIGameRules(const char *pchVersion) const = 0; }; #define VRE_GAMEDLL_API_VERSION "VRE_GAMEDLL_API_VERSION001" diff --git a/reapi/include/cssdk/engine/maintypes.h b/reapi/include/cssdk/engine/maintypes.h index b63fe99..d4e4ac8 100644 --- a/reapi/include/cssdk/engine/maintypes.h +++ b/reapi/include/cssdk/engine/maintypes.h @@ -57,6 +57,26 @@ #define BIT(n) (1<<(n)) +#ifdef HAVE_STRONG_TYPEDEF +enum class string_t: unsigned int {}; +#else +typedef unsigned int string_t; +#endif + +typedef int EOFFSET; +typedef int BOOL; +typedef unsigned char byte; +typedef unsigned short word; +#define _DEF_BYTE_ + +#ifndef __cplusplus + #undef true + #undef false + typedef enum {false, true} qboolean; +#else + typedef int qboolean; +#endif // #ifndef __cplusplus + // From engine/server.h typedef enum sv_delta_s { diff --git a/reapi/src/api_config.cpp b/reapi/src/api_config.cpp index 5d08991..4ce7dd7 100644 --- a/reapi/src/api_config.cpp +++ b/reapi/src/api_config.cpp @@ -7,6 +7,11 @@ CAPI_Config::CAPI_Config() : m_api_rehlds(false), m_api_regame(false), m_api_vtc } +void CAPI_Config::FailedReGameDllAPI() +{ + m_api_regame = false; +} + void CAPI_Config::Init() { m_api_rehlds = RehldsApi_Init(); diff --git a/reapi/src/api_config.h b/reapi/src/api_config.h index c650360..89ad546 100644 --- a/reapi/src/api_config.h +++ b/reapi/src/api_config.h @@ -7,6 +7,7 @@ class CAPI_Config { public: CAPI_Config(); void Init(); + void FailedReGameDllAPI(); bool hasReHLDS() const { return m_api_rehlds; } bool hasReGameDLL() const { return m_api_regame; } diff --git a/reapi/src/main.cpp b/reapi/src/main.cpp index fe85443..263786b 100644 --- a/reapi/src/main.cpp +++ b/reapi/src/main.cpp @@ -95,7 +95,20 @@ void KeyValue(edict_t *pentKeyvalue, KeyValueData *pkvd) CGameRules *InstallGameRules(IReGameHook_InstallGameRules *chain) { - return g_pGameRules = chain->callNext(); + auto gamerules = chain->callNext(); + + // Safe check CGameRules API interface version + if (!g_ReGameApi->BGetIGameRules(GAMERULES_API_INTERFACE_VERSION)) + { + api_cfg.FailedReGameDllAPI(); + UTIL_ServerPrint("[%s]: Interface CGameRules API version '%s' not found.\n", Plugin_info.logtag, GAMERULES_API_INTERFACE_VERSION); + } + else + { + g_pGameRules = gamerules; + } + + return gamerules; } int DispatchSpawn(edict_t *pEntity) diff --git a/reapi/src/mods/mod_regamedll_api.cpp b/reapi/src/mods/mod_regamedll_api.cpp index bcab076..c7810f7 100644 --- a/reapi/src/mods/mod_regamedll_api.cpp +++ b/reapi/src/mods/mod_regamedll_api.cpp @@ -58,5 +58,12 @@ bool RegamedllApi_Init() g_ReGameFuncs = g_ReGameApi->GetFuncs(); g_ReGameHookchains = g_ReGameApi->GetHookchains(); + // Safe check CCSEntity API interface version + if (!g_ReGameApi->BGetICSEntity(CSENTITY_API_INTERFACE_VERSION)) + { + UTIL_ServerPrint("[%s]: Interface CCSEntity API version '%s' not found.\n", Plugin_info.logtag, CSENTITY_API_INTERFACE_VERSION); + return false; + } + return true; -} \ No newline at end of file +}