mirror of
https://github.com/blendogames/thirtyflightsofloving.git
synced 2024-11-15 00:41:21 +00:00
8401c475f6
Added powerarmortype field to default Lazaus DLL. This changes the savegame version. Added support for blood_type value of 4 to default Lazaurus, missionpack, and Zaero DLLs. Added support for Lazarus initially dead monsters (health < 0) to missionpack DLL. Added support for Lazarus monsterjump cvar (berserk, gunner, infantry, mutant, parasite) to missionpack DLL. Cleaned up surface rendering code from mpolyvertex_t refactoring.
1653 lines
50 KiB
C
1653 lines
50 KiB
C
/*
|
|
===========================================================================
|
|
Copyright (C) 1997-2001 Id Software, Inc.
|
|
Copyright (C) 2000-2002 Mr. Hyde and Mad Dog
|
|
|
|
This file is part of Lazarus Quake 2 Mod source code.
|
|
|
|
Lazarus Quake 2 Mod source code 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.
|
|
|
|
Lazarus Quake 2 Mod source code 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 Lazarus Quake 2 Mod source code; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
===========================================================================
|
|
*/
|
|
|
|
// q_shared.h -- included first by ALL program modules
|
|
|
|
#ifdef _MSC_VER // _WIN32
|
|
// unknown pragmas are SUPPOSED to be ignored, but....
|
|
#pragma warning(disable : 4244) // MIPS
|
|
#pragma warning(disable : 4136) // X86
|
|
#pragma warning(disable : 4051) // ALPHA
|
|
|
|
#pragma warning(disable : 4018) // signed/unsigned mismatch
|
|
#pragma warning(disable : 4305) // truncation from const double to float
|
|
|
|
#endif
|
|
|
|
#include <assert.h>
|
|
#include <math.h>
|
|
#include <stdio.h>
|
|
#include <stdarg.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
#include <time.h>
|
|
|
|
#if (defined _M_IX86 || defined __i386__) && !defined C_ONLY && !defined __sun__
|
|
#define id386 1
|
|
#else
|
|
#define id386 0
|
|
#endif
|
|
|
|
#if defined _M_ALPHA && !defined C_ONLY
|
|
#define idaxp 1
|
|
#else
|
|
#define idaxp 0
|
|
#endif
|
|
|
|
#if defined(__APPLE__) || defined(MACOSX)
|
|
#undef true
|
|
#undef false
|
|
#define _mkdir(a) mkdir(a, 0777)
|
|
//#define DISABLE_FOG
|
|
#endif // __APPLE__ || MACOSX
|
|
|
|
typedef unsigned char byte;
|
|
typedef enum {false, true} qboolean;
|
|
|
|
// 64-bit integer definitions
|
|
#ifdef _WIN32
|
|
# ifndef __GNUC__ // MSVC/Borland
|
|
typedef __int64 qint64;
|
|
typedef unsigned __int64 uint64;
|
|
# else // Cygwin
|
|
# include <_G_config.h>
|
|
typedef _G_int64_t qint64;
|
|
typedef unsigned _G_int64_t uint64;
|
|
# endif
|
|
#elif defined(__MACOS__)
|
|
# include <sys/types.h>
|
|
typedef SInt64 qint64;
|
|
typedef UInt64 uint64;
|
|
#elif defined(__APPLE__) || defined(MACOSX) // MacOS X Framework build
|
|
# include <sys/types.h>
|
|
typedef int64_t qint64;
|
|
typedef unsigned int64_t uint64;
|
|
#elif defined(__linux__) // Linux
|
|
# include <_G_config.h>
|
|
typedef _G_int64_t qint64;
|
|
typedef unsigned _G_int64_t uint64;
|
|
#elif defined(__BEOS__) // Be
|
|
# include <inttypes.h>
|
|
typedef int64_t qint64;
|
|
typedef unsigned int64_t uint64;
|
|
#elif defined (__EMX__) // OS/2 GCC
|
|
typedef long long qint64;
|
|
typedef unsigned long long uint64;
|
|
#elif defined (DJGPP) // DJGPP
|
|
typedef long long qint64;
|
|
typedef unsigned long long uint64;
|
|
#elif defined(R5900) // PS2 EE
|
|
typedef long qint64;
|
|
typedef unsigned long uint64;
|
|
#elif defined(linux)
|
|
typedef int64_t qint64;
|
|
typedef unsigned int64_t uint64;
|
|
#endif
|
|
|
|
#ifndef NULL
|
|
#define NULL ((void *)0)
|
|
#endif
|
|
|
|
#ifndef min
|
|
#define min(a,b) (((a) < (b)) ? (a) : (b))
|
|
#endif
|
|
#ifndef max
|
|
#define max(a,b) (((a) > (b)) ? (a) : (b))
|
|
#endif
|
|
|
|
// from Quake3 source
|
|
#ifdef _MSC_VER // _WIN32
|
|
//#define Q_vsnprintf _vsnprintf
|
|
__inline int Q_vsnprintf (char *Dest, size_t Count, const char *Format, va_list Args) {
|
|
int ret = _vsnprintf(Dest, Count, Format, Args);
|
|
Dest[Count-1] = 0; // null terminate
|
|
return ret;
|
|
}
|
|
#else
|
|
// TODO: do we need Mac define?
|
|
#define Q_vsnprintf vsnprintf
|
|
#endif
|
|
|
|
// Knightmare- whether to include new engine enhancements
|
|
#define KMQUAKE2_ENGINE_MOD
|
|
|
|
// enable to build exe that is compatible with Eraser bot
|
|
// Eraser Bot's precompiled p_trail.c not compatible with modified entity state structure
|
|
//#define ERASER_COMPAT_BUILD
|
|
|
|
#ifdef KMQUAKE2_ENGINE_MOD
|
|
#ifndef ERASER_COMPAT_BUILD
|
|
#define NEW_ENTITY_STATE_MEMBERS
|
|
#endif
|
|
#define NEW_PLAYER_STATE_MEMBERS
|
|
// enable to build exe with 24-bit coordinate transmission
|
|
// changes pmove origin size in game DLLs
|
|
#define LARGE_MAP_SIZE
|
|
// enable to include looping of attenuated sounds
|
|
// changes entity_state_t struct
|
|
#define LOOP_SOUND_ATTENUATION
|
|
// enable to save compressed savegame files
|
|
#define COMPRESSED_SAVEGAMES
|
|
#endif
|
|
|
|
#define ROQ_SUPPORT // whether to use new cinematic system
|
|
#define OGG_SUPPORT // whether to use Ogg Vorbis soundtrack
|
|
#define PNG_SUPPORT // whether to include PNG image support
|
|
#define LOC_SUPPORT // whether to include loc file support
|
|
|
|
#define USE_CURL // whether to include HTTP downloading
|
|
|
|
#define MD2_AS_MD3 // whether to load md2s into md3 memory representation
|
|
|
|
#ifndef MD2_AS_MD3
|
|
#define PROJECTION_SHADOWS // whether to use projection shadows from BeefQuake
|
|
#endif
|
|
|
|
#define CLIENT_SPLIT_NETFRAME // whether to use split net and render frames in the client
|
|
|
|
//#define WARP_LIGHTMAPS // whether to support lightmaps on warp surfaces
|
|
|
|
#define CLIENT_THIRDPERSON_CVAR "cg_thirdperson"
|
|
//#define CLIENT_THIRDPERSON_CVAR "cl_3dcam"
|
|
|
|
#define SAVEGAME_USE_FUNCTION_TABLE
|
|
#define SAVEGAME_DLLNAME "Lazarus Quake II mod with CTF"
|
|
#define SAVEGAME_VERSION 4
|
|
|
|
// angle indexes
|
|
#define PITCH 0 // up / down
|
|
#define YAW 1 // left / right
|
|
#define ROLL 2 // fall over
|
|
|
|
#define MAX_STRING_CHARS 1024 // max length of a string passed to Cmd_TokenizeString
|
|
#define MAX_STRING_TOKENS 80 // max tokens resulting from Cmd_TokenizeString
|
|
#define MAX_TOKEN_CHARS 128 // max length of an individual token
|
|
|
|
#define MAX_QPATH 64 // max length of a quake game pathname
|
|
#define MAX_OSPATH 256 // max length of a filesystem pathname
|
|
|
|
//
|
|
// per-level limits
|
|
//
|
|
#define MAX_CLIENTS 256 // absolute limit
|
|
#ifdef KMQUAKE2_ENGINE_MOD //Knightmare- increase MAX_EDICTS
|
|
#define MAX_EDICTS 8192 // must change protocol to increase more
|
|
#else
|
|
#define MAX_EDICTS 1024 // must change protocol to increase more
|
|
#endif
|
|
#define MAX_LIGHTSTYLES 256
|
|
|
|
#ifdef KMQUAKE2_ENGINE_MOD //Knightmare- Ding-Dong, Index: Overflow is dead!
|
|
#define MAX_MODELS 8192 // these are sent over the net as shorts
|
|
#define MAX_SOUNDS 8192 // so they cannot exceed 64K
|
|
#define MAX_IMAGES 2048
|
|
#else
|
|
#define MAX_MODELS 256 // these are sent over the net as bytes
|
|
#define MAX_SOUNDS 256 // so they cannot be blindly increased
|
|
#define MAX_IMAGES 256
|
|
#endif
|
|
|
|
//Knightmare- hacked offsets for old demos
|
|
#define OLD_MAX_MODELS 256
|
|
#define OLD_MAX_SOUNDS 256
|
|
#define OLD_MAX_IMAGES 256
|
|
#define OLD_MAX_ITEMS 256
|
|
#define OLD_MAX_LIGHTSTYLES 256
|
|
//end Knightmare
|
|
|
|
#define MAX_ITEMS 256
|
|
#define MAX_GENERAL (MAX_CLIENTS*2) // general config strings
|
|
|
|
// Knightmare- world size
|
|
#ifdef KMQUAKE2_ENGINE_MOD
|
|
#define MAX_WORLD_COORD (16384)
|
|
#define MIN_WORLD_COORD (-16384)
|
|
#else
|
|
#define MAX_WORLD_COORD (4096)
|
|
#define MIN_WORLD_COORD (-4096)
|
|
#endif
|
|
#define WORLD_SIZE (MAX_WORLD_COORD - MIN_WORLD_COORD)
|
|
// end Knightmare
|
|
|
|
// game print flags
|
|
#define PRINT_LOW 0 // pickup messages
|
|
#define PRINT_MEDIUM 1 // death messages
|
|
#define PRINT_HIGH 2 // critical messages
|
|
#define PRINT_CHAT 3 // chat messages
|
|
|
|
|
|
|
|
#define ERR_FATAL 0 // exit the entire game with a popup window
|
|
#define ERR_DROP 1 // print to console and disconnect from game
|
|
#define ERR_DISCONNECT 2 // don't kill server
|
|
|
|
#define PRINT_ALL 0
|
|
#define PRINT_DEVELOPER 1 // only print when "developer 1"
|
|
#define PRINT_ALERT 2
|
|
|
|
|
|
// destination class for gi.multicast()
|
|
typedef enum
|
|
{
|
|
MULTICAST_ALL,
|
|
MULTICAST_PHS,
|
|
MULTICAST_PVS,
|
|
MULTICAST_ALL_R,
|
|
MULTICAST_PHS_R,
|
|
MULTICAST_PVS_R
|
|
} multicast_t;
|
|
|
|
short ShortSwap (short l);
|
|
int LongSwap (int l);
|
|
float FloatSwap (float f);
|
|
|
|
/*
|
|
==============================================================
|
|
|
|
MATHLIB
|
|
|
|
==============================================================
|
|
*/
|
|
|
|
typedef float vec_t;
|
|
typedef vec_t vec2_t[2];
|
|
typedef vec_t vec3_t[3];
|
|
typedef vec_t vec4_t[4];
|
|
typedef vec_t vec5_t[5];
|
|
|
|
typedef byte color_t[4];
|
|
|
|
typedef int fixed4_t;
|
|
typedef int fixed8_t;
|
|
typedef int fixed16_t;
|
|
|
|
#ifndef M_PI
|
|
#define M_PI 3.14159265358979323846 // matches value in gcc v2 math.h
|
|
#endif
|
|
|
|
#ifndef M_PI2
|
|
#define M_PI2 6.28318530717958647692 // Matches value in GCC v2 math.h
|
|
#endif
|
|
|
|
#define SqrtFast(x) ((x) * Q_rsqrt(x))
|
|
|
|
#define DEG2RAD(a) (((a) * M_PI) / 180.0F)
|
|
#define RAD2DEG(a) (((a) * 180.0F) / M_PI)
|
|
|
|
//#define frand() ((rand() & 0x7FFF) * (1.0/0x7FFF)) // 0 to 1
|
|
//#define crand() ((rand() & 0x7FFF) * (2.0/0x7FFF) - 1) // -1 to 1
|
|
|
|
struct cplane_s;
|
|
|
|
extern vec2_t vec2_origin;
|
|
extern vec3_t vec3_origin;
|
|
extern vec4_t vec4_origin;
|
|
|
|
#define nanmask (255<<23)
|
|
|
|
#define IS_NAN(x) (((*(int *)&x)&nanmask)==nanmask)
|
|
|
|
// microsoft's fabs seems to be ungodly slow...
|
|
//float Q_fabs (float f);
|
|
//#define fabs(f) Q_fabs(f)
|
|
#if !defined C_ONLY && !defined __linux__ && !defined __sgi
|
|
extern int Q_ftol( float f );
|
|
#else
|
|
#define Q_ftol( f ) ( long ) (f)
|
|
#endif
|
|
|
|
#define DotProduct(x,y) (x[0]*y[0]+x[1]*y[1]+x[2]*y[2])
|
|
#define VectorSubtract(a,b,c) (c[0]=a[0]-b[0],c[1]=a[1]-b[1],c[2]=a[2]-b[2])
|
|
#define VectorAdd(a,b,c) (c[0]=a[0]+b[0],c[1]=a[1]+b[1],c[2]=a[2]+b[2])
|
|
#define VectorCopy(a,b) (b[0]=a[0],b[1]=a[1],b[2]=a[2])
|
|
#define VectorClear(a) (a[0]=a[1]=a[2]=0)
|
|
#define VectorNegate(a,b) (b[0]=-a[0],b[1]=-a[1],b[2]=-a[2])
|
|
#define VectorSet(v, x, y, z) (v[0]=(x), v[1]=(y), v[2]=(z))
|
|
|
|
#define Vector2Subtract(a,b,c) (c[0]=a[0]-b[0],c[1]=a[1]-b[1])
|
|
#define Vector2Add(a,b,c) (c[0]=a[0]+b[0],c[1]=a[1]+b[1])
|
|
#define Vector2Copy(a, b) (b[0]=a[0], b[1]=a[1])
|
|
#define Vector2Clear(a) (a[0]=a[1]=0)
|
|
#define Vector2Negate(a,b) (b[0]=-a[0],b[1]=-a[1])
|
|
#define Vector2Set(v, x, y) (v[0]=(x), v[1]=(y))
|
|
|
|
#define Vector4Subtract(a,b,c) (c[0]=a[0]-b[0],c[1]=a[1]-b[1],c[2]=a[2]-b[2],c[3]=a[3]-b[3])
|
|
#define Vector4Add(a,b,c) (c[0]=a[0]+b[0],c[1]=a[1]+b[1],c[2]=a[2]+b[2],c[3]=a[3]+b[3])
|
|
#define Vector4Copy(a, b) (b[0]=a[0], b[1]=a[1], b[2]=a[2], b[3]=a[3])
|
|
#define Vector4Clear(a) (a[0]=a[1]=a[2]=a[3]=0)
|
|
#define Vector4Negate(a,b) (b[0]=-a[0],b[1]=-a[1],b[2]=-a[2],b[3]=-a[3])
|
|
#define Vector4Set(v, w, x, y, z) (v[0]=(w), v[1]=(x), v[2]=(y), v[3]=(z))
|
|
|
|
void VectorMA (vec3_t veca, float scale, vec3_t vecb, vec3_t vecc);
|
|
|
|
// just in case you do't want to use the macros
|
|
vec_t _DotProduct (vec3_t v1, vec3_t v2);
|
|
void _VectorSubtract (vec3_t veca, vec3_t vecb, vec3_t out);
|
|
void _VectorAdd (vec3_t veca, vec3_t vecb, vec3_t out);
|
|
void _VectorCopy (vec3_t in, vec3_t out);
|
|
|
|
void ClearBounds (vec3_t mins, vec3_t maxs);
|
|
void AddPointToBounds (vec3_t v, vec3_t mins, vec3_t maxs);
|
|
int VectorCompare (vec3_t v1, vec3_t v2);
|
|
vec_t VectorLength (vec3_t v);
|
|
void CrossProduct (vec3_t v1, vec3_t v2, vec3_t cross);
|
|
vec_t VectorNormalize (vec3_t v); // returns vector length
|
|
vec_t VectorNormalize2 (vec3_t v, vec3_t out);
|
|
void VectorNormalizeFast (vec3_t v); // From Q2E
|
|
void VectorInverse (vec3_t v);
|
|
void VectorScale (vec3_t in, vec_t scale, vec3_t out);
|
|
int Q_log2(int val);
|
|
float Q_rsqrt (float in); // From Q2E
|
|
|
|
// From Q2E
|
|
void VectorRotate (const vec3_t v, const vec3_t matrix[3], vec3_t out);
|
|
void AnglesToAxis (const vec3_t angles, vec3_t axis[3]);
|
|
void AxisClear (vec3_t axis[3]);
|
|
void AxisCopy (const vec3_t in[3], vec3_t out[3]);
|
|
qboolean AxisCompare (const vec3_t axis1[3], const vec3_t axis2[3]);
|
|
void MatrixMultiply (float in1[3][3], float in2[3][3], float out[3][3]);
|
|
|
|
|
|
void R_ConcatRotations (float in1[3][3], float in2[3][3], float out[3][3]);
|
|
void R_ConcatTransforms (float in1[3][4], float in2[3][4], float out[3][4]);
|
|
|
|
void AngleVectors (vec3_t angles, vec3_t forward, vec3_t right, vec3_t up);
|
|
void MakeNormalVectors (vec3_t forward, vec3_t right, vec3_t up);
|
|
void VecToAngleRolled (vec3_t value1, float angleyaw, vec3_t angles);
|
|
int BoxOnPlaneSide (vec3_t emins, vec3_t emaxs, struct cplane_s *plane);
|
|
float anglemod(float a);
|
|
float LerpAngle (float a1, float a2, float frac);
|
|
|
|
#define BOX_ON_PLANE_SIDE(emins, emaxs, p) \
|
|
(((p)->type < 3)? \
|
|
( \
|
|
((p)->dist <= (emins)[(p)->type])? \
|
|
1 \
|
|
: \
|
|
( \
|
|
((p)->dist >= (emaxs)[(p)->type])?\
|
|
2 \
|
|
: \
|
|
3 \
|
|
) \
|
|
) \
|
|
: \
|
|
BoxOnPlaneSide( (emins), (emaxs), (p)))
|
|
|
|
void ProjectPointOnPlane( vec3_t dst, const vec3_t p, const vec3_t normal );
|
|
void PerpendicularVector( vec3_t dst, const vec3_t src );
|
|
void RotatePointAroundVector( vec3_t dst, const vec3_t dir, const vec3_t point, float degrees );
|
|
|
|
|
|
//=============================================
|
|
|
|
char *COM_SkipPath (char *pathname);
|
|
void COM_StripExtension (char *in, char *out, size_t outSize);
|
|
void COM_FileBase (char *in, char *out, size_t outSize);
|
|
void COM_FilePath (char *in, char *out, size_t outSize);
|
|
char *COM_FileExtension (char *in);
|
|
void COM_DefaultExtension (char *path, size_t pathSize, char *extension);
|
|
|
|
char *COM_Parse (char **data_p);
|
|
// data is an in/out parm, returns a parsed out token
|
|
char *COM_ParseExt (char **data_p, qboolean allowNewLines);
|
|
|
|
void Com_sprintf (char *dest, size_t size, char *fmt, ...);
|
|
unsigned int Com_HashFileName (const char *fname, int hashSize, qboolean sized);
|
|
|
|
void Com_PageInMemory (byte *buffer, int size);
|
|
|
|
//=============================================
|
|
|
|
#define COLOR_GRAY '0'
|
|
#define COLOR_RED '1'
|
|
#define COLOR_GREEN '2'
|
|
#define COLOR_YELLOW '3'
|
|
#define COLOR_BLUE '4'
|
|
#define COLOR_CYAN '5'
|
|
#define COLOR_MAGENTA '6'
|
|
#define COLOR_WHITE '7'
|
|
#define COLOR_BLACK '8'
|
|
#define COLOR_ORANGE '9'
|
|
|
|
#define S_COLOR_GRAY "^0"
|
|
#define S_COLOR_RED "^1"
|
|
#define S_COLOR_GREEN "^2"
|
|
#define S_COLOR_YELLOW "^3"
|
|
#define S_COLOR_BLUE "^4"
|
|
#define S_COLOR_CYAN "^5"
|
|
#define S_COLOR_MAGENTA "^6"
|
|
#define S_COLOR_WHITE "^7"
|
|
#define S_COLOR_BLACK "^8"
|
|
#define S_COLOR_ORANGE "^9"
|
|
#define S_COLOR_ALT "^a"
|
|
#define S_COLOR_BOLD "^b"
|
|
#define S_COLOR_SHADOW "^s"
|
|
#define S_COLOR_ITALIC "^i"
|
|
|
|
#define Q_COLOR_ESCAPE '^'
|
|
|
|
#define Q_IsColorString(p) (p && *(p) == Q_COLOR_ESCAPE && *((p)+1) && *((p)+1) != Q_COLOR_ESCAPE)
|
|
|
|
//=============================================
|
|
|
|
// Matches the pattern against text
|
|
qboolean Q_GlobMatch (const char *pattern, const char *text, qboolean caseSensitive);
|
|
|
|
// portable string compare
|
|
int Q_strncmp (const char *string1, const char *string2, int n);
|
|
int Q_strcmp (const char *string1, const char *string2);
|
|
|
|
// string compare for qsort calls
|
|
int Q_SortStrcmp (const char **arg1, const char **arg2);
|
|
|
|
// non-ambiguous string token search
|
|
qboolean Q_StrScanToken (const char *string, const char *findToken, qboolean isCommand);
|
|
|
|
// portable case insensitive string compare
|
|
int Q_stricmp (char *s1, char *s2);
|
|
int Q_strcasecmp (char *s1, char *s2);
|
|
int Q_strncasecmp (char *s1, char *s2, size_t n);
|
|
|
|
size_t Q_strncpyz (char *dst, size_t dstSize, const char *src);
|
|
size_t Q_strncatz (char *dst, size_t dstSize, const char *src);
|
|
void Q_snprintfz (char *dst, size_t dstSize, const char *fmt, ...);
|
|
char *Q_strlwr (char *string);
|
|
char *Q_strupr (char *string);
|
|
|
|
//=============================================
|
|
|
|
short BigShort(short l);
|
|
short LittleShort(short l);
|
|
int BigLong (int l);
|
|
int LittleLong (int l);
|
|
qint64 BigLong64 (qint64 l);
|
|
qint64 LittleLong64 (qint64 l);
|
|
float BigFloat (float l);
|
|
float LittleFloat (float l);
|
|
|
|
void Swap_Init (void);
|
|
char *va(char *format, ...);
|
|
|
|
//=============================================
|
|
|
|
//
|
|
// key / value info strings
|
|
//
|
|
#define MAX_INFO_KEY 64
|
|
#define MAX_INFO_VALUE 64
|
|
#define MAX_INFO_STRING 512
|
|
|
|
char *Info_ValueForKey (char *s, char *key);
|
|
void Info_RemoveKey (char *s, char *key);
|
|
void Info_SetValueForKey (char *s, char *key, char *value);
|
|
qboolean Info_Validate (char *s);
|
|
|
|
/*
|
|
==============================================================
|
|
|
|
SYSTEM SPECIFIC
|
|
|
|
==============================================================
|
|
*/
|
|
|
|
extern int curtime; // time returned by last Sys_Milliseconds
|
|
|
|
int Sys_Milliseconds (void);
|
|
void Sys_Mkdir (const char *path);
|
|
void Sys_Rmdir (const char *path);
|
|
|
|
// large block stack allocation routines
|
|
void *Hunk_Begin (size_t maxsize);
|
|
void *Hunk_Alloc (size_t size);
|
|
void Hunk_Free (void *buf);
|
|
size_t Hunk_End (void);
|
|
|
|
// directory searching
|
|
#define SFF_ARCH 0x01
|
|
#define SFF_HIDDEN 0x02
|
|
#define SFF_RDONLY 0x04
|
|
#define SFF_SUBDIR 0x08
|
|
#define SFF_SYSTEM 0x10
|
|
|
|
/*
|
|
** pass in an attribute mask of things you wish to REJECT
|
|
*/
|
|
char *Sys_FindFirst (char *path, unsigned musthave, unsigned canthave );
|
|
char *Sys_FindNext ( unsigned musthave, unsigned canthave );
|
|
void Sys_FindClose (void);
|
|
|
|
void Sys_Sleep (int msec);
|
|
unsigned Sys_TickCount (void);
|
|
|
|
// this is only here so the functions in q_shared.c and q_shwin.c can link
|
|
void Sys_Error (const char *error, ...);
|
|
void Com_Printf (char *msg, ...);
|
|
|
|
|
|
/*
|
|
==========================================================
|
|
|
|
CVARS (console variables)
|
|
|
|
==========================================================
|
|
*/
|
|
|
|
#ifndef CVAR
|
|
#define CVAR
|
|
|
|
#define CVAR_ARCHIVE 1 // set to cause it to be saved to vars.rc
|
|
#define CVAR_USERINFO 2 // added to userinfo when changed
|
|
#define CVAR_SERVERINFO 4 // added to serverinfo when changed
|
|
#define CVAR_NOSET 8 // don't allow change from console at all,
|
|
// but can be set from the command line
|
|
#define CVAR_LATCH 16 // save changes until server restart
|
|
#define CVAR_CHEAT 32 // cannot be changed from default in
|
|
// multiplayer games
|
|
#define CVAR_SAVE_IGNORE 64 // a latched cvar that is not saved in server.ssv
|
|
|
|
// nothing outside the Cvar_*() functions should modify these fields!
|
|
typedef struct cvar_s
|
|
{
|
|
char *name;
|
|
char *string;
|
|
char *latched_string; // for CVAR_LATCH vars
|
|
int flags;
|
|
qboolean modified; // set each time the cvar is changed
|
|
float value;
|
|
struct cvar_s *next;
|
|
// Knightmare- added cvar defaults
|
|
#ifdef KMQUAKE2_ENGINE_MOD
|
|
char *default_string;
|
|
int integer;
|
|
char *description;
|
|
#endif
|
|
} cvar_t;
|
|
|
|
#endif // CVAR
|
|
|
|
/*
|
|
==============================================================
|
|
|
|
COLLISION DETECTION
|
|
|
|
==============================================================
|
|
*/
|
|
|
|
// lower bits are stronger, and will eat weaker brushes completely
|
|
#define CONTENTS_SOLID 1 // an eye is never valid in a solid
|
|
#define CONTENTS_WINDOW 2 // translucent, but not watery
|
|
#define CONTENTS_AUX 4
|
|
#define CONTENTS_LAVA 8
|
|
#define CONTENTS_SLIME 16
|
|
#define CONTENTS_WATER 32
|
|
#define CONTENTS_MIST 64
|
|
#define CONTENTS_MUD 128 // not a "real" content property - used only for watertype
|
|
#define CONTENTS_FOG 1024 // fog
|
|
#define LAST_VISIBLE_CONTENTS 1024 // was 64
|
|
|
|
// remaining contents are non-visible, and don't eat brushes
|
|
|
|
#define CONTENTS_AREAPORTAL 0x8000
|
|
|
|
#define CONTENTS_PLAYERCLIP 0x10000
|
|
#define CONTENTS_MONSTERCLIP 0x20000
|
|
|
|
// currents can be added to any other contents, and may be mixed
|
|
#define CONTENTS_CURRENT_0 0x40000
|
|
#define CONTENTS_CURRENT_90 0x80000
|
|
#define CONTENTS_CURRENT_180 0x100000
|
|
#define CONTENTS_CURRENT_270 0x200000
|
|
#define CONTENTS_CURRENT_UP 0x400000
|
|
#define CONTENTS_CURRENT_DOWN 0x800000
|
|
|
|
#define CONTENTS_ORIGIN 0x1000000 // removed before bsping an entity
|
|
|
|
#define CONTENTS_MONSTER 0x2000000 // should never be on a brush, only in game
|
|
#define CONTENTS_DEADMONSTER 0x4000000
|
|
#define CONTENTS_DETAIL 0x8000000 // brushes to be added after vis leafs
|
|
#define CONTENTS_TRANSLUCENT 0x10000000 // auto set if any surface has trans
|
|
#define CONTENTS_LADDER 0x20000000
|
|
|
|
|
|
|
|
#define SURF_LIGHT 0x1 // value will hold the light strength
|
|
|
|
#define SURF_SLICK 0x2 // effects game physics
|
|
|
|
#define SURF_SKY 0x4 // don't draw, but add to skybox
|
|
#define SURF_WARP 0x8 // turbulent water warp
|
|
#define SURF_TRANS33 0x10
|
|
#define SURF_TRANS66 0x20
|
|
#define SURF_FLOWING 0x40 // scroll towards angle
|
|
#define SURF_NODRAW 0x80 // don't bother referencing the texture
|
|
|
|
//Knightmare 12/22/2001
|
|
// Never used in the game, just here for completeness:
|
|
#define SURF_HINT 0x100 // make a primary bsp splitter
|
|
#define SURF_SKIP 0x200 // completely ignore, allowing non-closed brushes
|
|
|
|
// Lazarus surface flags for footstep sounds:
|
|
#define SURF_METAL 0x00000400 // metal floor
|
|
#define SURF_DIRT 0x00000800 // dirt, sand, rock
|
|
#define SURF_VENT 0x00001000 // ventilation duct
|
|
#define SURF_GRATE 0x00002000 // metal grating
|
|
#define SURF_TILE 0x00004000 // floor tiles
|
|
#define SURF_GRASS 0x00008000 // grass
|
|
#define SURF_SNOW 0x00010000 // snow
|
|
#define SURF_CARPET 0x00020000 // carpet
|
|
#define SURF_FORCE 0x00040000 // forcefield
|
|
#define SURF_GRAVEL 0x00080000 // gravel
|
|
#define SURF_ICE 0x00100000 // ice
|
|
#define SURF_SAND 0x00200000 // sand
|
|
#define SURF_WOOD 0x00400000 // wood
|
|
#define SURF_STANDARD 0x00800000 // standard
|
|
|
|
#define SURF_STEPMASK 0x00FFFC00
|
|
|
|
#define SURF_NOLIGHTENV 0x01000000 // no lightmap or envmap trans/warp surface
|
|
#define SURF_ALPHATEST 0x02000000 // alpha test flag
|
|
#define SURF_FOGPLANE 0x04000000 // fog surface
|
|
|
|
#define SURF_MIRROR 0x10000000
|
|
#define SURF_CHOPPY 0x20000000
|
|
#define SURF_CHOPPY2 0x40000000
|
|
#define SURF_CHOPPY3 0x80000000
|
|
//end Knightmare
|
|
|
|
// content masks
|
|
#define MASK_ALL (-1)
|
|
#define MASK_SOLID (CONTENTS_SOLID|CONTENTS_WINDOW)
|
|
#define MASK_PLAYERSOLID (CONTENTS_SOLID|CONTENTS_PLAYERCLIP|CONTENTS_WINDOW|CONTENTS_MONSTER)
|
|
#define MASK_DEADSOLID (CONTENTS_SOLID|CONTENTS_PLAYERCLIP|CONTENTS_WINDOW)
|
|
#define MASK_MONSTERSOLID (CONTENTS_SOLID|CONTENTS_MONSTERCLIP|CONTENTS_WINDOW|CONTENTS_MONSTER)
|
|
#define MASK_WATER (CONTENTS_WATER|CONTENTS_LAVA|CONTENTS_SLIME)
|
|
#define MASK_OPAQUE (CONTENTS_SOLID|CONTENTS_SLIME|CONTENTS_LAVA)
|
|
#define MASK_SHOT (CONTENTS_SOLID|CONTENTS_MONSTER|CONTENTS_WINDOW|CONTENTS_DEADMONSTER)
|
|
#define MASK_CURRENT (CONTENTS_CURRENT_0|CONTENTS_CURRENT_90|CONTENTS_CURRENT_180|CONTENTS_CURRENT_270|CONTENTS_CURRENT_UP|CONTENTS_CURRENT_DOWN)
|
|
|
|
|
|
// gi.BoxEdicts() can return a list of either solid or trigger entities
|
|
// FIXME: eliminate AREA_ distinction?
|
|
#define AREA_SOLID 1
|
|
#define AREA_TRIGGERS 2
|
|
|
|
|
|
// plane_t structure
|
|
// !!! if this is changed, it must be changed in asm code too !!!
|
|
typedef struct cplane_s
|
|
{
|
|
vec3_t normal;
|
|
float dist;
|
|
byte type; // for fast side tests
|
|
byte signbits; // signx + (signy<<1) + (signz<<1)
|
|
byte pad[2];
|
|
} cplane_t;
|
|
|
|
// structure offset for asm code
|
|
#define CPLANE_NORMAL_X 0
|
|
#define CPLANE_NORMAL_Y 4
|
|
#define CPLANE_NORMAL_Z 8
|
|
#define CPLANE_DIST 12
|
|
#define CPLANE_TYPE 16
|
|
#define CPLANE_SIGNBITS 17
|
|
#define CPLANE_PAD0 18
|
|
#define CPLANE_PAD1 19
|
|
|
|
typedef struct cmodel_s
|
|
{
|
|
vec3_t mins, maxs;
|
|
vec3_t origin; // for sounds or lights
|
|
int headnode;
|
|
} cmodel_t;
|
|
|
|
typedef struct csurface_s
|
|
{
|
|
char name[16];
|
|
int flags;
|
|
int value;
|
|
} csurface_t;
|
|
|
|
typedef struct mapsurface_s // used internally due to name len probs //ZOID
|
|
{
|
|
csurface_t c;
|
|
char rname[32];
|
|
} mapsurface_t;
|
|
|
|
// a trace is returned when a box is swept through the world
|
|
typedef struct
|
|
{
|
|
qboolean allsolid; // if true, plane is not valid
|
|
qboolean startsolid; // if true, the initial point was in a solid area
|
|
float fraction; // time completed, 1.0 = didn't hit anything
|
|
vec3_t endpos; // final position
|
|
cplane_t plane; // surface normal at impact
|
|
csurface_t *surface; // surface hit
|
|
int contents; // contents on other side of surface hit
|
|
struct edict_s *ent; // not set by CM_*() functions
|
|
} trace_t;
|
|
|
|
|
|
|
|
// pmove_state_t is the information necessary for client side movement
|
|
// prediction
|
|
typedef enum
|
|
{
|
|
// can accelerate and turn
|
|
PM_NORMAL,
|
|
PM_SPECTATOR,
|
|
// no acceleration or turning
|
|
PM_DEAD,
|
|
PM_GIB, // different bounding box
|
|
PM_FREEZE
|
|
} pmtype_t;
|
|
|
|
// pmove->pm_flags
|
|
#define PMF_DUCKED 1
|
|
#define PMF_JUMP_HELD 2
|
|
#define PMF_ON_GROUND 4
|
|
#define PMF_TIME_WATERJUMP 8 // pm_time is waterjump
|
|
#define PMF_TIME_LAND 16 // pm_time is time before rejump
|
|
#define PMF_TIME_TELEPORT 32 // pm_time is non-moving time
|
|
#define PMF_NO_PREDICTION 64 // temporarily disables prediction (used for grappling hook)
|
|
|
|
// this structure needs to be communicated bit-accurate
|
|
// from the server to the client to guarantee that
|
|
// prediction stays in sync, so no floats are used.
|
|
// if any part of the game code modifies this struct, it
|
|
// will result in a prediction error of some degree.
|
|
typedef struct
|
|
{
|
|
pmtype_t pm_type;
|
|
|
|
#ifdef KMQUAKE2_ENGINE_MOD // Knightmare- larger coordinate range
|
|
int origin[3]; // 20.3
|
|
#else
|
|
short origin[3]; // 12.3
|
|
#endif // end Knightmare
|
|
short velocity[3]; // 12.3
|
|
byte pm_flags; // ducked, jump_held, etc
|
|
byte pm_time; // each unit = 8 ms
|
|
short gravity;
|
|
short delta_angles[3]; // add to command angles to get view direction
|
|
// changed by spawns, rotating objects, and teleporters
|
|
} pmove_state_t;
|
|
|
|
|
|
//
|
|
// button bits
|
|
//
|
|
#define BUTTON_ATTACK 1
|
|
#define BUTTON_USE 2
|
|
#define BUTTON_ATTACK2 4
|
|
#define BUTTONS_ATTACK (BUTTON_ATTACK | BUTTON_ATTACK2)
|
|
#define BUTTON_ANY 128 // any key whatsoever
|
|
|
|
|
|
// usercmd_t is sent to the server each client frame
|
|
typedef struct usercmd_s
|
|
{
|
|
byte msec;
|
|
byte buttons;
|
|
short angles[3];
|
|
short forwardmove, sidemove, upmove;
|
|
byte impulse; // remove?
|
|
byte lightlevel; // light level the player is standing on
|
|
} usercmd_t;
|
|
|
|
|
|
#define MAXTOUCH 32
|
|
typedef struct
|
|
{
|
|
// state (in / out)
|
|
pmove_state_t s;
|
|
|
|
// command (in)
|
|
usercmd_t cmd;
|
|
qboolean snapinitial; // if s has been changed outside pmove
|
|
|
|
// results (out)
|
|
int numtouch;
|
|
struct edict_s *touchents[MAXTOUCH];
|
|
|
|
vec3_t viewangles; // clamped
|
|
float viewheight;
|
|
|
|
vec3_t mins, maxs; // bounding box size
|
|
|
|
struct edict_s *groundentity;
|
|
int watertype;
|
|
int waterlevel;
|
|
|
|
// callbacks to test the world
|
|
trace_t (*trace) (vec3_t start, vec3_t mins, vec3_t maxs, vec3_t end);
|
|
int (*pointcontents) (vec3_t point);
|
|
} pmove_t;
|
|
|
|
|
|
// entity_state_t->effects
|
|
// Effects are things handled on the client side (lights, particles, frame animations)
|
|
// that happen constantly on the given entity.
|
|
// An entity that has effects will be sent to the client
|
|
// even if it has a zero index model.
|
|
#define EF_ROTATE 0x00000001 // rotate (bonus items)
|
|
#define EF_GIB 0x00000002 // leave a trail
|
|
#define EF_BLASTER 0x00000008 // redlight + trail
|
|
#define EF_ROCKET 0x00000010 // redlight + trail
|
|
#define EF_GRENADE 0x00000020
|
|
#define EF_HYPERBLASTER 0x00000040
|
|
#define EF_BFG 0x00000080
|
|
#define EF_COLOR_SHELL 0x00000100
|
|
#define EF_POWERSCREEN 0x00000200
|
|
#define EF_ANIM01 0x00000400 // automatically cycle between frames 0 and 1 at 2 hz
|
|
#define EF_ANIM23 0x00000800 // automatically cycle between frames 2 and 3 at 2 hz
|
|
#define EF_ANIM_ALL 0x00001000 // automatically cycle through all frames at 2hz
|
|
#define EF_ANIM_ALLFAST 0x00002000 // automatically cycle through all frames at 10hz
|
|
#define EF_FLIES 0x00004000
|
|
#define EF_QUAD 0x00008000
|
|
#define EF_PENT 0x00010000
|
|
#define EF_TELEPORTER 0x00020000 // particle fountain
|
|
#define EF_FLAG1 0x00040000
|
|
#define EF_FLAG2 0x00080000
|
|
// RAFAEL
|
|
#define EF_IONRIPPER 0x00100000
|
|
#define EF_GREENGIB 0x00200000
|
|
#define EF_BLUEHYPERBLASTER 0x00400000
|
|
#define EF_SPINNINGLIGHTS 0x00800000
|
|
#define EF_PLASMA 0x01000000
|
|
#define EF_TRAP 0x02000000
|
|
|
|
// ROGUE
|
|
#define EF_TRACKER 0x04000000
|
|
#define EF_DOUBLE 0x08000000
|
|
#define EF_SPHERETRANS 0x10000000
|
|
#define EF_TAGTRAIL 0x20000000
|
|
#define EF_HALF_DAMAGE 0x40000000
|
|
#define EF_TRACKERTRAIL 0x80000000
|
|
// ROGUE
|
|
|
|
// mappack.h
|
|
#define EF_EDARK 0x84000000 // pulsing dynamic black light
|
|
#define EF_BLUEC 0x08208000 // violet or pale blue shell
|
|
#define EF_REDC 0x30050001 // ef_rotate, red shell, transparent and a redlight
|
|
#define EF_REDG 0x22010107 // ef_rotate, gib trail and a red shell
|
|
#define EF_YELLOW_CRUST 0x10300070 // transparent with a yellow light
|
|
|
|
// entity_state_t->renderfx flags
|
|
#define RF_MINLIGHT 1 // allways have some light (viewmodel)
|
|
#define RF_VIEWERMODEL 2 // don't draw through eyes, only mirrors
|
|
#define RF_WEAPONMODEL 4 // only draw through eyes
|
|
#define RF_FULLBRIGHT 8 // allways draw full intensity
|
|
#define RF_DEPTHHACK 16 // for view weapon Z crunching
|
|
#define RF_TRANSLUCENT 32
|
|
#define RF_FRAMELERP 64
|
|
#define RF_BEAM 128
|
|
#define RF_CUSTOMSKIN 256 // skin is an index in image_precache
|
|
#define RF_GLOW 512 // pulse lighting for bonus items
|
|
#define RF_SHELL_RED 1024
|
|
#define RF_SHELL_GREEN 2048
|
|
#define RF_SHELL_BLUE 4096
|
|
#define RF_TRANS_ADDITIVE 8192
|
|
#define RF_MIRRORMODEL 16384
|
|
|
|
// ROGUE
|
|
#define RF_IR_VISIBLE 0x00008000 // 32768
|
|
#define RF_SHELL_DOUBLE 0x00010000 // 65536
|
|
#define RF_SHELL_HALF_DAM 0x00020000
|
|
#define RF_USE_DISGUISE 0x00040000
|
|
// ROGUE
|
|
|
|
#define RF_NOSHADOW 0x00080000 // Knightmare- no shadow flag
|
|
|
|
#define RF_MASK_SHELL (RF_SHELL_RED|RF_SHELL_GREEN|RF_SHELL_BLUE|RF_SHELL_DOUBLE|RF_SHELL_HALF_DAM)
|
|
|
|
#define RF2_NOSHADOW 0x00000001 //no shadow..
|
|
#define RF2_FORCE_SHADOW 0x00000002 //forced shadow...
|
|
#define RF2_CAMERAMODEL 0x00000004 //client camera model
|
|
|
|
// player_state_t->refdef flags
|
|
#define RDF_UNDERWATER 1 // warp the screen as apropriate
|
|
#define RDF_NOWORLDMODEL 2 // used for player configuration screen
|
|
#define RDF_IRGOGGLES 4 // ROGUE
|
|
#define RDF_UVGOGGLES 8 // ROGUE
|
|
#define RDF_CAMERAEFFECT 16 // Camera effect
|
|
#define RDF_LETTERBOX 32 // Letterboxed view
|
|
|
|
// Mappack - laser colors
|
|
|
|
#define LASER_RED 0xf2f2f0f0
|
|
#define LASER_GREEN 0xd0d1d2d3
|
|
#define LASER_BLUE 0xf3f3f1f1
|
|
#define LASER_YELLOW 0xdcdddedf
|
|
#define LASER_ORANGE 0xe0e1e2e3
|
|
|
|
|
|
//
|
|
// muzzle flashes / player effects
|
|
//
|
|
#define MZ_BLASTER 0
|
|
#define MZ_MACHINEGUN 1
|
|
#define MZ_SHOTGUN 2
|
|
#define MZ_CHAINGUN1 3
|
|
#define MZ_CHAINGUN2 4
|
|
#define MZ_CHAINGUN3 5
|
|
#define MZ_RAILGUN 6
|
|
#define MZ_ROCKET 7
|
|
#define MZ_GRENADE 8
|
|
#define MZ_LOGIN 9
|
|
#define MZ_LOGOUT 10
|
|
#define MZ_RESPAWN 11
|
|
#define MZ_BFG 12
|
|
#define MZ_SSHOTGUN 13
|
|
#define MZ_HYPERBLASTER 14
|
|
#define MZ_ITEMRESPAWN 15
|
|
// RAFAEL
|
|
#define MZ_IONRIPPER 16
|
|
#define MZ_BLUEHYPERBLASTER 17
|
|
#define MZ_PHALANX 18
|
|
#define MZ_SILENCED 128 // bit flag ORed with one of the above numbers
|
|
|
|
// ROGUE
|
|
#define MZ_ETF_RIFLE 30
|
|
#define MZ_UNUSED 31
|
|
#define MZ_SHOTGUN2 32
|
|
#define MZ_HEATBEAM 33
|
|
#define MZ_BLASTER2 34
|
|
#define MZ_TRACKER 35
|
|
#define MZ_NUKE1 36
|
|
#define MZ_NUKE2 37
|
|
#define MZ_NUKE4 38
|
|
#define MZ_NUKE8 39
|
|
// ROGUE
|
|
// Knightmare 1/3/2002- blue blaster and green hyperblaster
|
|
#define MZ_BLUEBLASTER 40
|
|
#define MZ_GREENHYPERBLASTER 41
|
|
#define MZ_REDBLASTER 42
|
|
#define MZ_REDHYPERBLASTER 43
|
|
#define MZ_PLASMA_RIFLE_BOUNCE 44
|
|
#define MZ_PLASMA_RIFLE_SPREAD 45
|
|
|
|
#define MZ_SEND_SHORT 127 // send this value as a flag to read real index as a short
|
|
|
|
#define MZ_SILENCED_HI 0x8000 // bit flag ORed with one of the above numbers for short index
|
|
// end Knightmare
|
|
|
|
|
|
//
|
|
// monster muzzle flashes
|
|
//
|
|
#define MZ2_TANK_BLASTER_1 1
|
|
#define MZ2_TANK_BLASTER_2 2
|
|
#define MZ2_TANK_BLASTER_3 3
|
|
#define MZ2_TANK_MACHINEGUN_1 4
|
|
#define MZ2_TANK_MACHINEGUN_2 5
|
|
#define MZ2_TANK_MACHINEGUN_3 6
|
|
#define MZ2_TANK_MACHINEGUN_4 7
|
|
#define MZ2_TANK_MACHINEGUN_5 8
|
|
#define MZ2_TANK_MACHINEGUN_6 9
|
|
#define MZ2_TANK_MACHINEGUN_7 10
|
|
#define MZ2_TANK_MACHINEGUN_8 11
|
|
#define MZ2_TANK_MACHINEGUN_9 12
|
|
#define MZ2_TANK_MACHINEGUN_10 13
|
|
#define MZ2_TANK_MACHINEGUN_11 14
|
|
#define MZ2_TANK_MACHINEGUN_12 15
|
|
#define MZ2_TANK_MACHINEGUN_13 16
|
|
#define MZ2_TANK_MACHINEGUN_14 17
|
|
#define MZ2_TANK_MACHINEGUN_15 18
|
|
#define MZ2_TANK_MACHINEGUN_16 19
|
|
#define MZ2_TANK_MACHINEGUN_17 20
|
|
#define MZ2_TANK_MACHINEGUN_18 21
|
|
#define MZ2_TANK_MACHINEGUN_19 22
|
|
#define MZ2_TANK_ROCKET_1 23
|
|
#define MZ2_TANK_ROCKET_2 24
|
|
#define MZ2_TANK_ROCKET_3 25
|
|
|
|
#define MZ2_INFANTRY_MACHINEGUN_1 26
|
|
#define MZ2_INFANTRY_MACHINEGUN_2 27
|
|
#define MZ2_INFANTRY_MACHINEGUN_3 28
|
|
#define MZ2_INFANTRY_MACHINEGUN_4 29
|
|
#define MZ2_INFANTRY_MACHINEGUN_5 30
|
|
#define MZ2_INFANTRY_MACHINEGUN_6 31
|
|
#define MZ2_INFANTRY_MACHINEGUN_7 32
|
|
#define MZ2_INFANTRY_MACHINEGUN_8 33
|
|
#define MZ2_INFANTRY_MACHINEGUN_9 34
|
|
#define MZ2_INFANTRY_MACHINEGUN_10 35
|
|
#define MZ2_INFANTRY_MACHINEGUN_11 36
|
|
#define MZ2_INFANTRY_MACHINEGUN_12 37
|
|
#define MZ2_INFANTRY_MACHINEGUN_13 38
|
|
|
|
#define MZ2_SOLDIER_BLASTER_1 39
|
|
#define MZ2_SOLDIER_BLASTER_2 40
|
|
#define MZ2_SOLDIER_SHOTGUN_1 41
|
|
#define MZ2_SOLDIER_SHOTGUN_2 42
|
|
#define MZ2_SOLDIER_MACHINEGUN_1 43
|
|
#define MZ2_SOLDIER_MACHINEGUN_2 44
|
|
|
|
#define MZ2_GUNNER_MACHINEGUN_1 45
|
|
#define MZ2_GUNNER_MACHINEGUN_2 46
|
|
#define MZ2_GUNNER_MACHINEGUN_3 47
|
|
#define MZ2_GUNNER_MACHINEGUN_4 48
|
|
#define MZ2_GUNNER_MACHINEGUN_5 49
|
|
#define MZ2_GUNNER_MACHINEGUN_6 50
|
|
#define MZ2_GUNNER_MACHINEGUN_7 51
|
|
#define MZ2_GUNNER_MACHINEGUN_8 52
|
|
#define MZ2_GUNNER_GRENADE_1 53
|
|
#define MZ2_GUNNER_GRENADE_2 54
|
|
#define MZ2_GUNNER_GRENADE_3 55
|
|
#define MZ2_GUNNER_GRENADE_4 56
|
|
|
|
#define MZ2_CHICK_ROCKET_1 57
|
|
|
|
#define MZ2_FLYER_BLASTER_1 58
|
|
#define MZ2_FLYER_BLASTER_2 59
|
|
|
|
#define MZ2_MEDIC_BLASTER_1 60
|
|
|
|
#define MZ2_GLADIATOR_RAILGUN_1 61
|
|
|
|
#define MZ2_HOVER_BLASTER_1 62
|
|
|
|
#define MZ2_ACTOR_MACHINEGUN_1 63
|
|
|
|
#define MZ2_SUPERTANK_MACHINEGUN_1 64
|
|
#define MZ2_SUPERTANK_MACHINEGUN_2 65
|
|
#define MZ2_SUPERTANK_MACHINEGUN_3 66
|
|
#define MZ2_SUPERTANK_MACHINEGUN_4 67
|
|
#define MZ2_SUPERTANK_MACHINEGUN_5 68
|
|
#define MZ2_SUPERTANK_MACHINEGUN_6 69
|
|
#define MZ2_SUPERTANK_ROCKET_1 70
|
|
#define MZ2_SUPERTANK_ROCKET_2 71
|
|
#define MZ2_SUPERTANK_ROCKET_3 72
|
|
|
|
#define MZ2_BOSS2_MACHINEGUN_L1 73
|
|
#define MZ2_BOSS2_MACHINEGUN_L2 74
|
|
#define MZ2_BOSS2_MACHINEGUN_L3 75
|
|
#define MZ2_BOSS2_MACHINEGUN_L4 76
|
|
#define MZ2_BOSS2_MACHINEGUN_L5 77
|
|
#define MZ2_BOSS2_ROCKET_1 78
|
|
#define MZ2_BOSS2_ROCKET_2 79
|
|
#define MZ2_BOSS2_ROCKET_3 80
|
|
#define MZ2_BOSS2_ROCKET_4 81
|
|
|
|
#define MZ2_FLOAT_BLASTER_1 82
|
|
|
|
#define MZ2_SOLDIER_BLASTER_3 83
|
|
#define MZ2_SOLDIER_SHOTGUN_3 84
|
|
#define MZ2_SOLDIER_MACHINEGUN_3 85
|
|
#define MZ2_SOLDIER_BLASTER_4 86
|
|
#define MZ2_SOLDIER_SHOTGUN_4 87
|
|
#define MZ2_SOLDIER_MACHINEGUN_4 88
|
|
#define MZ2_SOLDIER_BLASTER_5 89
|
|
#define MZ2_SOLDIER_SHOTGUN_5 90
|
|
#define MZ2_SOLDIER_MACHINEGUN_5 91
|
|
#define MZ2_SOLDIER_BLASTER_6 92
|
|
#define MZ2_SOLDIER_SHOTGUN_6 93
|
|
#define MZ2_SOLDIER_MACHINEGUN_6 94
|
|
#define MZ2_SOLDIER_BLASTER_7 95
|
|
#define MZ2_SOLDIER_SHOTGUN_7 96
|
|
#define MZ2_SOLDIER_MACHINEGUN_7 97
|
|
#define MZ2_SOLDIER_BLASTER_8 98
|
|
#define MZ2_SOLDIER_SHOTGUN_8 99
|
|
#define MZ2_SOLDIER_MACHINEGUN_8 100
|
|
|
|
// --- Xian shit below ---
|
|
#define MZ2_MAKRON_BFG 101
|
|
#define MZ2_MAKRON_BLASTER_1 102
|
|
#define MZ2_MAKRON_BLASTER_2 103
|
|
#define MZ2_MAKRON_BLASTER_3 104
|
|
#define MZ2_MAKRON_BLASTER_4 105
|
|
#define MZ2_MAKRON_BLASTER_5 106
|
|
#define MZ2_MAKRON_BLASTER_6 107
|
|
#define MZ2_MAKRON_BLASTER_7 108
|
|
#define MZ2_MAKRON_BLASTER_8 109
|
|
#define MZ2_MAKRON_BLASTER_9 110
|
|
#define MZ2_MAKRON_BLASTER_10 111
|
|
#define MZ2_MAKRON_BLASTER_11 112
|
|
#define MZ2_MAKRON_BLASTER_12 113
|
|
#define MZ2_MAKRON_BLASTER_13 114
|
|
#define MZ2_MAKRON_BLASTER_14 115
|
|
#define MZ2_MAKRON_BLASTER_15 116
|
|
#define MZ2_MAKRON_BLASTER_16 117
|
|
#define MZ2_MAKRON_BLASTER_17 118
|
|
#define MZ2_MAKRON_RAILGUN_1 119
|
|
#define MZ2_JORG_MACHINEGUN_L1 120
|
|
#define MZ2_JORG_MACHINEGUN_L2 121
|
|
#define MZ2_JORG_MACHINEGUN_L3 122
|
|
#define MZ2_JORG_MACHINEGUN_L4 123
|
|
#define MZ2_JORG_MACHINEGUN_L5 124
|
|
#define MZ2_JORG_MACHINEGUN_L6 125
|
|
#define MZ2_JORG_MACHINEGUN_R1 126
|
|
#define MZ2_JORG_MACHINEGUN_R2 127
|
|
#define MZ2_JORG_MACHINEGUN_R3 128
|
|
#define MZ2_JORG_MACHINEGUN_R4 129
|
|
#define MZ2_JORG_MACHINEGUN_R5 130
|
|
#define MZ2_JORG_MACHINEGUN_R6 131
|
|
#define MZ2_JORG_BFG_1 132
|
|
#define MZ2_BOSS2_MACHINEGUN_R1 133
|
|
#define MZ2_BOSS2_MACHINEGUN_R2 134
|
|
#define MZ2_BOSS2_MACHINEGUN_R3 135
|
|
#define MZ2_BOSS2_MACHINEGUN_R4 136
|
|
#define MZ2_BOSS2_MACHINEGUN_R5 137
|
|
|
|
// ROGUE
|
|
#define MZ2_CARRIER_MACHINEGUN_L1 138
|
|
#define MZ2_CARRIER_MACHINEGUN_R1 139
|
|
#define MZ2_CARRIER_GRENADE 140
|
|
#define MZ2_TURRET_MACHINEGUN 141
|
|
#define MZ2_TURRET_ROCKET 142
|
|
#define MZ2_TURRET_BLASTER 143
|
|
#define MZ2_STALKER_BLASTER 144
|
|
#define MZ2_DAEDALUS_BLASTER 145
|
|
#define MZ2_MEDIC_BLASTER_2 146
|
|
#define MZ2_CARRIER_RAILGUN 147
|
|
#define MZ2_WIDOW_DISRUPTOR 148
|
|
#define MZ2_WIDOW_BLASTER 149
|
|
#define MZ2_WIDOW_RAIL 150
|
|
#define MZ2_WIDOW_PLASMABEAM 151 // PMM - not used
|
|
#define MZ2_CARRIER_MACHINEGUN_L2 152
|
|
#define MZ2_CARRIER_MACHINEGUN_R2 153
|
|
#define MZ2_WIDOW_RAIL_LEFT 154
|
|
#define MZ2_WIDOW_RAIL_RIGHT 155
|
|
#define MZ2_WIDOW_BLASTER_SWEEP1 156
|
|
#define MZ2_WIDOW_BLASTER_SWEEP2 157
|
|
#define MZ2_WIDOW_BLASTER_SWEEP3 158
|
|
#define MZ2_WIDOW_BLASTER_SWEEP4 159
|
|
#define MZ2_WIDOW_BLASTER_SWEEP5 160
|
|
#define MZ2_WIDOW_BLASTER_SWEEP6 161
|
|
#define MZ2_WIDOW_BLASTER_SWEEP7 162
|
|
#define MZ2_WIDOW_BLASTER_SWEEP8 163
|
|
#define MZ2_WIDOW_BLASTER_SWEEP9 164
|
|
#define MZ2_WIDOW_BLASTER_100 165
|
|
#define MZ2_WIDOW_BLASTER_90 166
|
|
#define MZ2_WIDOW_BLASTER_80 167
|
|
#define MZ2_WIDOW_BLASTER_70 168
|
|
#define MZ2_WIDOW_BLASTER_60 169
|
|
#define MZ2_WIDOW_BLASTER_50 170
|
|
#define MZ2_WIDOW_BLASTER_40 171
|
|
#define MZ2_WIDOW_BLASTER_30 172
|
|
#define MZ2_WIDOW_BLASTER_20 173
|
|
#define MZ2_WIDOW_BLASTER_10 174
|
|
#define MZ2_WIDOW_BLASTER_0 175
|
|
#define MZ2_WIDOW_BLASTER_10L 176
|
|
#define MZ2_WIDOW_BLASTER_20L 177
|
|
#define MZ2_WIDOW_BLASTER_30L 178
|
|
#define MZ2_WIDOW_BLASTER_40L 179
|
|
#define MZ2_WIDOW_BLASTER_50L 180
|
|
#define MZ2_WIDOW_BLASTER_60L 181
|
|
#define MZ2_WIDOW_BLASTER_70L 182
|
|
#define MZ2_WIDOW_RUN_1 183
|
|
#define MZ2_WIDOW_RUN_2 184
|
|
#define MZ2_WIDOW_RUN_3 185
|
|
#define MZ2_WIDOW_RUN_4 186
|
|
#define MZ2_WIDOW_RUN_5 187
|
|
#define MZ2_WIDOW_RUN_6 188
|
|
#define MZ2_WIDOW_RUN_7 189
|
|
#define MZ2_WIDOW_RUN_8 190
|
|
#define MZ2_CARRIER_ROCKET_1 191
|
|
#define MZ2_CARRIER_ROCKET_2 192
|
|
#define MZ2_CARRIER_ROCKET_3 193
|
|
#define MZ2_CARRIER_ROCKET_4 194
|
|
#define MZ2_WIDOW2_BEAMER_1 195
|
|
#define MZ2_WIDOW2_BEAMER_2 196
|
|
#define MZ2_WIDOW2_BEAMER_3 197
|
|
#define MZ2_WIDOW2_BEAMER_4 198
|
|
#define MZ2_WIDOW2_BEAMER_5 199
|
|
#define MZ2_WIDOW2_BEAM_SWEEP_1 200
|
|
#define MZ2_WIDOW2_BEAM_SWEEP_2 201
|
|
#define MZ2_WIDOW2_BEAM_SWEEP_3 202
|
|
#define MZ2_WIDOW2_BEAM_SWEEP_4 203
|
|
#define MZ2_WIDOW2_BEAM_SWEEP_5 204
|
|
#define MZ2_WIDOW2_BEAM_SWEEP_6 205
|
|
#define MZ2_WIDOW2_BEAM_SWEEP_7 206
|
|
#define MZ2_WIDOW2_BEAM_SWEEP_8 207
|
|
#define MZ2_WIDOW2_BEAM_SWEEP_9 208
|
|
#define MZ2_WIDOW2_BEAM_SWEEP_10 209
|
|
#define MZ2_WIDOW2_BEAM_SWEEP_11 210
|
|
// ROGUE
|
|
|
|
// Knightmare added
|
|
#define MZ2_SOLDIER_IONRIPPER_1 211
|
|
#define MZ2_SOLDIER_IONRIPPER_2 212
|
|
#define MZ2_SOLDIER_IONRIPPER_3 213
|
|
#define MZ2_SOLDIER_IONRIPPER_4 214
|
|
#define MZ2_SOLDIER_IONRIPPER_5 215
|
|
#define MZ2_SOLDIER_IONRIPPER_6 216
|
|
#define MZ2_SOLDIER_IONRIPPER_7 217
|
|
#define MZ2_SOLDIER_IONRIPPER_8 218
|
|
#define MZ2_SOLDIER_HYPERBLASTER_1 219
|
|
#define MZ2_SOLDIER_HYPERBLASTER_2 220
|
|
#define MZ2_SOLDIER_HYPERBLASTER_3 221
|
|
#define MZ2_SOLDIER_HYPERBLASTER_4 222
|
|
#define MZ2_SOLDIER_HYPERBLASTER_5 223
|
|
#define MZ2_SOLDIER_HYPERBLASTER_6 224
|
|
#define MZ2_SOLDIER_HYPERBLASTER_7 225
|
|
#define MZ2_SOLDIER_HYPERBLASTER_8 226
|
|
#define MZ2_GLADBETA_PHALANX_1 227
|
|
#define MZ2_TURRET_RAILGUN_1 228
|
|
#define MZ2_GUNNER_ETF_RIFLE_1 229
|
|
#define MZ2_GUNNER_ETF_RIFLE_2 230
|
|
#define MZ2_GUNNER_ETF_RIFLE_3 231
|
|
#define MZ2_GUNNER_ETF_RIFLE_4 232
|
|
#define MZ2_GUNNER_ETF_RIFLE_5 233
|
|
#define MZ2_GUNNER_ETF_RIFLE_6 234
|
|
#define MZ2_GUNNER_ETF_RIFLE_7 235
|
|
#define MZ2_GUNNER_ETF_RIFLE_8 236
|
|
|
|
#define MZ2_SEND_SHORT 255 // send this value as a flag to read real index as a short
|
|
|
|
#define MZ2_SOLDIER_PLASMA_RIFLE_1 256
|
|
#define MZ2_SOLDIER_PLASMA_RIFLE_2 257
|
|
#define MZ2_SOLDIER_PLASMA_RIFLE_3 258
|
|
#define MZ2_SOLDIER_PLASMA_RIFLE_4 259
|
|
#define MZ2_SOLDIER_PLASMA_RIFLE_5 260
|
|
#define MZ2_SOLDIER_PLASMA_RIFLE_6 261
|
|
#define MZ2_SOLDIER_PLASMA_RIFLE_7 262
|
|
#define MZ2_SOLDIER_PLASMA_RIFLE_8 263
|
|
// end Knightmare
|
|
|
|
extern vec3_t monster_flash_offset [];
|
|
|
|
|
|
// temp entity events
|
|
//
|
|
// Temp entity events are for things that happen
|
|
// at a location seperate from any existing entity.
|
|
// Temporary entity messages are explicitly constructed
|
|
// and broadcast.
|
|
typedef enum
|
|
{
|
|
TE_GUNSHOT, //0
|
|
TE_BLOOD, //1
|
|
TE_BLASTER, //2
|
|
TE_RAILTRAIL, //3
|
|
TE_SHOTGUN, //4
|
|
TE_EXPLOSION1, //5
|
|
TE_EXPLOSION2, //6
|
|
TE_ROCKET_EXPLOSION, //7
|
|
TE_GRENADE_EXPLOSION, //8
|
|
TE_SPARKS, //9
|
|
TE_SPLASH, //10
|
|
TE_BUBBLETRAIL, //11
|
|
TE_SCREEN_SPARKS, //12
|
|
TE_SHIELD_SPARKS, //13
|
|
TE_BULLET_SPARKS, //14
|
|
TE_LASER_SPARKS, //15
|
|
TE_PARASITE_ATTACK, //16
|
|
TE_ROCKET_EXPLOSION_WATER, //17
|
|
TE_GRENADE_EXPLOSION_WATER, //18
|
|
TE_MEDIC_CABLE_ATTACK, //19
|
|
TE_BFG_EXPLOSION, //20
|
|
TE_BFG_BIGEXPLOSION, //21
|
|
TE_BOSSTPORT, // used as '22' in a map, so DON'T RENUMBER!!!
|
|
TE_BFG_LASER, //23
|
|
TE_GRAPPLE_CABLE, //24
|
|
// Xatrix
|
|
TE_WELDING_SPARKS, //25
|
|
TE_GREENBLOOD, //26
|
|
TE_BLUEHYPERBLASTER, //27
|
|
TE_PLASMA_EXPLOSION, //28
|
|
TE_TUNNEL_SPARKS, //29
|
|
// ROGUE
|
|
TE_BLASTER2, //30
|
|
TE_RAILTRAIL2, //31
|
|
TE_FLAME, //32
|
|
TE_LIGHTNING, //33
|
|
TE_DEBUGTRAIL, //34
|
|
TE_PLAIN_EXPLOSION, //35
|
|
TE_FLASHLIGHT, //36
|
|
TE_FORCEWALL, //37
|
|
TE_HEATBEAM, //38
|
|
TE_MONSTER_HEATBEAM, //39
|
|
TE_STEAM, //40
|
|
TE_BUBBLETRAIL2, //41
|
|
TE_MOREBLOOD, //42
|
|
TE_HEATBEAM_SPARKS, //43
|
|
TE_HEATBEAM_STEAM, //44
|
|
TE_CHAINFIST_SMOKE, //45
|
|
TE_ELECTRIC_SPARKS, //46
|
|
TE_TRACKER_EXPLOSION, //47
|
|
TE_TELEPORT_EFFECT, //48
|
|
TE_DBALL_GOAL, //49
|
|
TE_WIDOWBEAMOUT, //50
|
|
TE_NUKEBLAST, //51
|
|
TE_WIDOWSPLASH, //52
|
|
TE_EXPLOSION1_BIG, //53
|
|
TE_EXPLOSION1_NP, //54
|
|
TE_FLECHETTE, //55
|
|
// Knightmare added
|
|
TE_REDBLASTER, //56
|
|
TE_SHOCKSPLASH, //57
|
|
TE_BLASTER_COLORED, //58
|
|
TE_RAILTRAIL_COLORED, //59
|
|
} temp_event_t;
|
|
|
|
#define SPLASH_UNKNOWN 0
|
|
#define SPLASH_SPARKS 1
|
|
#define SPLASH_BLUE_WATER 2
|
|
#define SPLASH_BROWN_WATER 3
|
|
#define SPLASH_SLIME 4
|
|
#define SPLASH_LAVA 5
|
|
#define SPLASH_BLOOD 6
|
|
|
|
|
|
// sound channels
|
|
// channel 0 never willingly overrides
|
|
// other channels (1-7) allways override a playing sound on that channel
|
|
#define CHAN_AUTO 0
|
|
#define CHAN_WEAPON 1
|
|
#define CHAN_VOICE 2
|
|
#define CHAN_ITEM 3
|
|
#define CHAN_BODY 4
|
|
#define CHAN_GIZMO 5
|
|
// modifier flags
|
|
#define CHAN_NO_PHS_ADD 8 // send to all clients, not just ones in PHS (ATTN 0 will also do this)
|
|
#define CHAN_RELIABLE 16 // send by reliable message, not datagram
|
|
|
|
|
|
// sound attenuation values
|
|
#define ATTN_NONE 0 // full volume the entire level
|
|
#define ATTN_NORM 1
|
|
#define ATTN_IDLE 2
|
|
#define ATTN_STATIC 3 // diminish very rapidly with distance
|
|
|
|
|
|
// player_state->stats[] indexes
|
|
#define STAT_HEALTH_ICON 0
|
|
#define STAT_HEALTH 1
|
|
#define STAT_AMMO_ICON 2
|
|
#define STAT_AMMO 3
|
|
#define STAT_ARMOR_ICON 4
|
|
#define STAT_ARMOR 5
|
|
#define STAT_SELECTED_ICON 6
|
|
#define STAT_PICKUP_ICON 7
|
|
#define STAT_PICKUP_STRING 8
|
|
#define STAT_TIMER_ICON 9
|
|
#define STAT_TIMER 10
|
|
#define STAT_HELPICON 11
|
|
#define STAT_SELECTED_ITEM 12
|
|
#define STAT_LAYOUTS 13
|
|
#define STAT_FRAGS 14
|
|
#define STAT_FLASHES 15 // cleared each frame, 1 = health, 2 = armor
|
|
#define STAT_CHASE 16
|
|
#define STAT_SPECTATOR 17
|
|
#define STAT_SPEED 22
|
|
#define STAT_ZOOM 23
|
|
// Knightmare- some extra stats for scripted HUDs
|
|
#define STAT_TIMER_RANGE 251
|
|
#define STAT_MAXAMMO 252
|
|
#define STAT_MAXARMOR 253
|
|
#define STAT_MAXHEALTH 254
|
|
#define STAT_WEAPON 255
|
|
|
|
#ifdef KMQUAKE2_ENGINE_MOD // Knightmare increased
|
|
#define MAX_STATS 256
|
|
#else
|
|
#define MAX_STATS 32
|
|
#endif
|
|
#define OLD_MAX_STATS 32 // needed for playing old demos
|
|
|
|
// dmflags->value flags
|
|
#define DF_NO_HEALTH 0x00000001 // 1
|
|
#define DF_NO_ITEMS 0x00000002 // 2
|
|
#define DF_WEAPONS_STAY 0x00000004 // 4
|
|
#define DF_NO_FALLING 0x00000008 // 8
|
|
#define DF_INSTANT_ITEMS 0x00000010 // 16
|
|
#define DF_SAME_LEVEL 0x00000020 // 32
|
|
#define DF_SKINTEAMS 0x00000040 // 64
|
|
#define DF_MODELTEAMS 0x00000080 // 128
|
|
#define DF_NO_FRIENDLY_FIRE 0x00000100 // 256
|
|
#define DF_SPAWN_FARTHEST 0x00000200 // 512
|
|
#define DF_FORCE_RESPAWN 0x00000400 // 1024
|
|
#define DF_NO_ARMOR 0x00000800 // 2048
|
|
#define DF_ALLOW_EXIT 0x00001000 // 4096
|
|
#define DF_INFINITE_AMMO 0x00002000 // 8192
|
|
#define DF_QUAD_DROP 0x00004000 // 16384
|
|
#define DF_FIXED_FOV 0x00008000 // 32768
|
|
|
|
// RAFAEL
|
|
#define DF_QUADFIRE_DROP 0x00010000 // 65536
|
|
|
|
//ROGUE
|
|
#define DF_NO_MINES 0x00020000
|
|
#define DF_NO_STACK_DOUBLE 0x00040000
|
|
#define DF_NO_NUKES 0x00080000
|
|
#define DF_NO_SPHERES 0x00100000
|
|
//ROGUE
|
|
|
|
/*
|
|
ROGUE - VERSIONS
|
|
1234 08/13/1998 Activision
|
|
1235 08/14/1998 Id Software
|
|
1236 08/15/1998 Steve Tietze
|
|
1237 08/15/1998 Phil Dobranski
|
|
1238 08/15/1998 John Sheley
|
|
1239 08/17/1998 Barrett Alexander
|
|
1230 08/17/1998 Brandon Fish
|
|
1245 08/17/1998 Don MacAskill
|
|
1246 08/17/1998 David "Zoid" Kirsch
|
|
1247 08/17/1998 Manu Smith
|
|
1248 08/17/1998 Geoff Scully
|
|
1249 08/17/1998 Andy Van Fossen
|
|
1240 08/20/1998 Activision Build 2
|
|
1256 08/20/1998 Ranger Clan
|
|
1257 08/20/1998 Ensemble Studios
|
|
1258 08/21/1998 Robert Duffy
|
|
1259 08/21/1998 Stephen Seachord
|
|
1250 08/21/1998 Stephen Heaslip
|
|
1267 08/21/1998 Samir Sandesara
|
|
1268 08/21/1998 Oliver Wyman
|
|
1269 08/21/1998 Steven Marchegiano
|
|
1260 08/21/1998 Build #2 for Nihilistic
|
|
1278 08/21/1998 Build #2 for Ensemble
|
|
1279 08/26/1998 Build for Ron Solo - DEFUNCT
|
|
1270 08/26/1998 Build #3 for Activision
|
|
1289 08/26/1998 Build for Don MacAskill
|
|
1280 08/26/1998 Build for Robert Duffy
|
|
1290 08/26/1998 Build #2 for Rangers
|
|
1345 08/28/1998 Build #4 for Activision
|
|
2345 08/26/1998 Build for Zoid
|
|
|
|
9999 08/20/1998 Internal Use
|
|
*/
|
|
//#define ROGUE_VERSION_ID 1345
|
|
|
|
//#define ROGUE_VERSION_STRING "08/29/1998 Beta 4 for Activision"
|
|
|
|
// ROGUE
|
|
/*
|
|
==========================================================
|
|
|
|
ELEMENTS COMMUNICATED ACROSS THE NET
|
|
|
|
==========================================================
|
|
*/
|
|
|
|
#define ANGLE2SHORT(x) ((int)((x)*65536/360) & 65535)
|
|
#define SHORT2ANGLE(x) ((x)*(360.0/65536))
|
|
|
|
|
|
//
|
|
// config strings are a general means of communication from
|
|
// the server to all connected clients.
|
|
// Each config string can be at most MAX_QPATH characters.
|
|
//
|
|
#define CS_NAME 0
|
|
#define CS_CDTRACK 1
|
|
#define CS_SKY 2
|
|
#define CS_SKYAXIS 3 // %f %f %f format
|
|
#define CS_SKYROTATE 4
|
|
#define CS_STATUSBAR 5 // display program string
|
|
|
|
#define CS_AIRACCEL 29 // air acceleration control
|
|
#define CS_MAXCLIENTS 30
|
|
#define CS_MAPCHECKSUM 31 // for catching cheater maps
|
|
|
|
#define CS_MODELS 32
|
|
#define CS_SOUNDS (CS_MODELS+MAX_MODELS)
|
|
#define CS_IMAGES (CS_SOUNDS+MAX_SOUNDS)
|
|
#define CS_LIGHTS (CS_IMAGES+MAX_IMAGES)
|
|
#define CS_ITEMS (CS_LIGHTS+MAX_LIGHTSTYLES)
|
|
#define CS_PLAYERSKINS (CS_ITEMS+MAX_ITEMS)
|
|
#define CS_GENERAL (CS_PLAYERSKINS+MAX_CLIENTS)
|
|
#define CS_PAKFILE (CS_GENERAL+MAX_GENERAL)
|
|
#define MAX_CONFIGSTRINGS (CS_PAKFILE+1)
|
|
//#define MAX_CONFIGSTRINGS (CS_GENERAL+MAX_GENERAL)
|
|
|
|
|
|
//Knightmare- hacked configstring offsets for old demos
|
|
#define OLD_CS_SOUNDS (CS_MODELS+OLD_MAX_MODELS)
|
|
#define OLD_CS_IMAGES (OLD_CS_SOUNDS+OLD_MAX_SOUNDS)
|
|
#define OLD_CS_LIGHTS (OLD_CS_IMAGES+OLD_MAX_IMAGES)
|
|
#define OLD_CS_ITEMS (OLD_CS_LIGHTS+OLD_MAX_LIGHTSTYLES)
|
|
#define OLD_CS_PLAYERSKINS (OLD_CS_ITEMS+OLD_MAX_ITEMS)
|
|
#define OLD_CS_GENERAL (OLD_CS_PLAYERSKINS+MAX_CLIENTS)
|
|
#define OLD_MAX_CONFIGSTRINGS (OLD_CS_GENERAL+MAX_GENERAL)
|
|
//end Knightmare
|
|
|
|
// From Q2Pro
|
|
// Some mods actually exploit CS_STATUSBAR to take space up to CS_AIRACCEL
|
|
#define CS_SIZE(cs) \
|
|
((cs) >= CS_STATUSBAR && (cs) < CS_AIRACCEL ? \
|
|
MAX_QPATH * (CS_AIRACCEL - (cs)) : MAX_QPATH)
|
|
|
|
//==============================================
|
|
|
|
|
|
// entity_state_t->event values
|
|
// ertity events are for effects that take place reletive
|
|
// to an existing entities origin. Very network efficient.
|
|
// All muzzle flashes really should be converted to events...
|
|
typedef enum
|
|
{
|
|
EV_NONE,
|
|
EV_ITEM_RESPAWN,
|
|
EV_FOOTSTEP,
|
|
EV_FALLSHORT,
|
|
EV_FALL,
|
|
EV_FALLFAR,
|
|
EV_PLAYER_TELEPORT,
|
|
EV_OTHER_TELEPORT,
|
|
// Knightmare added
|
|
EV_LOUDSTEP, // loud footstep from landing
|
|
EV_SLOSH, // Sloshing in ankle-deep water
|
|
EV_WADE, // wading or treading water
|
|
EV_WADE_MUD, // wading in mud
|
|
EV_CLIMB_LADDER, //climbing ladder
|
|
EV_PLAYER_TELEPORT2 // Q1-style teleport, sounds in rogue pak0.pak
|
|
// end Knightmare
|
|
} entity_event_t;
|
|
|
|
|
|
// entity_state_t is the information conveyed from the server
|
|
// in an update message about entities that the client will
|
|
// need to render in some way
|
|
typedef struct entity_state_s
|
|
{
|
|
int number; // edict index
|
|
|
|
vec3_t origin;
|
|
vec3_t angles;
|
|
vec3_t old_origin; // for lerping
|
|
int modelindex;
|
|
int modelindex2, modelindex3, modelindex4; // weapons, CTF flags, etc
|
|
#ifdef NEW_ENTITY_STATE_MEMBERS // Knightmare- Privater wanted this
|
|
int modelindex5, modelindex6; // more attached models
|
|
#endif
|
|
int frame;
|
|
int skinnum;
|
|
#ifdef NEW_ENTITY_STATE_MEMBERS // Knightmare- allow the server to set this
|
|
float alpha; //entity transparency
|
|
#endif
|
|
unsigned int effects; // PGM - we're filling it, so it needs to be unsigned
|
|
int renderfx;
|
|
int solid; // for client side prediction, 8*(bits 0-4) is x/y radius
|
|
// 8*(bits 5-9) is z down distance, 8(bits10-15) is z up
|
|
// gi.linkentity sets this properly
|
|
int sound; // for looping sounds, to guarantee shutoff
|
|
#ifdef NEW_ENTITY_STATE_MEMBERS // Knightmare- allow the server to set this
|
|
#ifdef LOOP_SOUND_ATTENUATION // Knightmare- added sound attenuation
|
|
float attenuation;
|
|
#endif
|
|
#endif
|
|
int event; // impulse events -- muzzle flashes, footsteps, etc
|
|
// events only go out for a single frame, they
|
|
// are automatically cleared each frame
|
|
} entity_state_t;
|
|
|
|
//==============================================
|
|
|
|
|
|
// player_state_t is the information needed in addition to pmove_state_t
|
|
// to rendered a view. There will only be 10 player_state_t sent each second,
|
|
// but the number of pmove_state_t changes will be reletive to client
|
|
// frame rates
|
|
typedef struct
|
|
{
|
|
pmove_state_t pmove; // for prediction
|
|
|
|
// these fields do not need to be communicated bit-precise
|
|
|
|
vec3_t viewangles; // for fixed views
|
|
vec3_t viewoffset; // add to pmovestate->origin
|
|
vec3_t kick_angles; // add to view direction to get render angles
|
|
// set by weapon kicks, pain effects, etc
|
|
|
|
vec3_t gunangles;
|
|
vec3_t gunoffset;
|
|
int gunindex;
|
|
int gunframe;
|
|
|
|
#ifdef NEW_PLAYER_STATE_MEMBERS // Knightmare added
|
|
int gunskin; // for animated weapon skins
|
|
int gunindex2; // for a second weapon model (boot)
|
|
int gunframe2;
|
|
int gunskin2;
|
|
|
|
// server-side speed control!
|
|
int maxspeed;
|
|
int duckspeed;
|
|
int waterspeed;
|
|
int accel;
|
|
int stopspeed;
|
|
#endif //end Knightmare
|
|
|
|
float blend[4]; // rgba full screen effect
|
|
|
|
float fov; // horizontal field of view
|
|
|
|
int rdflags; // refdef flags
|
|
|
|
short stats[MAX_STATS]; // fast status bar updates
|
|
} player_state_t;
|
|
|
|
|
|
// ==================
|
|
// PGM
|
|
#define VIDREF_GL 1
|
|
#define VIDREF_SOFT 2
|
|
#define VIDREF_OTHER 3
|
|
|
|
extern int vidref_val;
|
|
// PGM
|
|
// ==================
|
|
|