mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2025-03-06 17:41:01 +00:00
Update to: * https://github.com/yquake2/xatrix/releases/tag/XATRIX_2_10 * https://github.com/yquake2/rogue/releases/tag/ROGUE_2_09 * https://github.com/yquake2/ctf/releases/tag/CTF_1_09 Full sync required: * https://github.com/yquake2/rogue/issues/122 * https://github.com/yquake2/xatrix/issues/96
1086 lines
33 KiB
C
1086 lines
33 KiB
C
/*
|
|
* Copyright (c) ZeniMax Media Inc.
|
|
* Licensed under the GNU General Public License 2.0.
|
|
*/
|
|
/*
|
|
* =======================================================================
|
|
*
|
|
* This is the main header file shared between client, renderer, server
|
|
* and the game.
|
|
*
|
|
* =======================================================================
|
|
*/
|
|
|
|
#ifndef XATRIX_SHARED_H
|
|
#define XATRIX_SHARED_H
|
|
|
|
#include <assert.h>
|
|
#include <math.h>
|
|
#include <stdio.h>
|
|
#include <stdarg.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
#include <time.h>
|
|
|
|
typedef unsigned char byte;
|
|
typedef enum {false, true} qboolean;
|
|
|
|
#ifndef NULL
|
|
#define NULL ((void *)0)
|
|
#endif
|
|
|
|
/* 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 */
|
|
|
|
#ifdef _WIN32
|
|
#define MAX_OSPATH 256 /* max length of a filesystem pathname (same as MAX_PATH) */
|
|
#else
|
|
#define MAX_OSPATH 128 /* max length of a filesystem pathname */
|
|
#endif
|
|
|
|
/* */
|
|
/* per-level limits */
|
|
/* */
|
|
#define MAX_CLIENTS 256 /* absolute limit */
|
|
#define MAX_EDICTS 1024 /* must change protocol to increase more */
|
|
#define MAX_LIGHTSTYLES 256
|
|
#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
|
|
#define MAX_ITEMS 256
|
|
#define MAX_GENERAL (MAX_CLIENTS * 2) /* general config strings */
|
|
|
|
/* 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;
|
|
|
|
/*
|
|
* ==============================================================
|
|
*
|
|
* MATHLIB
|
|
*
|
|
* ==============================================================
|
|
*/
|
|
|
|
typedef float vec_t;
|
|
typedef vec_t vec3_t[3];
|
|
typedef vec_t vec5_t[5];
|
|
|
|
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
|
|
|
|
struct cplane_s;
|
|
|
|
extern vec3_t vec3_origin;
|
|
|
|
#define nanmask (255 << 23)
|
|
|
|
#define IS_NAN(x) (((*(int *)&x) & nanmask) == nanmask)
|
|
|
|
#define Q_ftol(f) (long)(f)
|
|
|
|
#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))
|
|
|
|
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 VectorInverse(vec3_t v);
|
|
void VectorScale(vec3_t in, vec_t scale, vec3_t out);
|
|
int Q_log2(int val);
|
|
|
|
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 AngleVectors2(vec3_t value1, 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);
|
|
void COM_FileBase(char *in, char *out);
|
|
void COM_FilePath(const char *in, char *out);
|
|
void COM_DefaultExtension(char *path, const char *extension);
|
|
|
|
char *COM_Parse(char **data_p);
|
|
|
|
/* data is an in/out parm, returns a parsed out token */
|
|
void Com_sprintf(char *dest, int size, char *fmt, ...);
|
|
|
|
void Com_PageInMemory(byte *buffer, int size);
|
|
|
|
char *strlwr ( char *s );
|
|
|
|
/* ============================================= */
|
|
|
|
/* portable case insensitive compare */
|
|
int Q_stricmp(const char *s1, const char *s2);
|
|
int Q_strcasecmp(char *s1, char *s2);
|
|
int Q_strncasecmp(char *s1, char *s2, int n);
|
|
|
|
/* ============================================= */
|
|
|
|
short BigShort(short l);
|
|
short LittleShort(short l);
|
|
int BigLong(int l);
|
|
int LittleLong(int 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);
|
|
|
|
/* ============================================= */
|
|
|
|
/* Random number generator */
|
|
int randk(void);
|
|
float frandk(void);
|
|
float crandk(void);
|
|
void randk_seed(void);
|
|
|
|
/*
|
|
* ==============================================================
|
|
*
|
|
* SYSTEM SPECIFIC
|
|
*
|
|
* ==============================================================
|
|
*/
|
|
|
|
extern int curtime; /* time returned by last Sys_Milliseconds */
|
|
|
|
int Sys_Milliseconds(void);
|
|
void Sys_Mkdir(char *path);
|
|
char *strlwr(char *s);
|
|
/* portable safe string copy/concatenate */
|
|
int Q_strlcpy(char *dst, const char *src, int size);
|
|
int Q_strlcat(char *dst, const char *src, int size);
|
|
|
|
/* large block stack allocation routines */
|
|
void *Hunk_Begin(int maxsize);
|
|
void *Hunk_Alloc(int size);
|
|
void Hunk_Free(void *buf);
|
|
int 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);
|
|
|
|
/* this is only here so the functions in q_shared.c and q_shwin.c can link */
|
|
void Sys_Error(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 */
|
|
|
|
/* 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;
|
|
} 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 LAST_VISIBLE_CONTENTS 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 */
|
|
|
|
/* 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 */
|
|
#define AREA_SOLID 1
|
|
#define AREA_TRIGGERS 2
|
|
|
|
/* plane_t structure */
|
|
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 */
|
|
{
|
|
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;
|
|
|
|
short origin[3]; /* 12.3 */
|
|
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_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
|
|
#define EF_IONRIPPER 0x00100000
|
|
#define EF_GREENGIB 0x00200000
|
|
#define EF_BLUEHYPERBLASTER 0x00400000
|
|
#define EF_SPINNINGLIGHTS 0x00800000
|
|
#define EF_PLASMA 0x01000000
|
|
#define EF_TRAP 0x02000000
|
|
#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
|
|
|
|
/* 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_NOSHADOW 8192 /* don't draw a shadow */
|
|
#define RF_IR_VISIBLE 0x00008000 /* 32768 */
|
|
#define RF_SHELL_DOUBLE 0x00010000 /* 65536 */
|
|
#define RF_SHELL_HALF_DAM 0x00020000
|
|
#define RF_USE_DISGUISE 0x00040000
|
|
|
|
/* 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
|
|
#define RDF_UVGOGGLES 8
|
|
|
|
/* 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
|
|
#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 */
|
|
#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
|
|
|
|
/* 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
|
|
|
|
#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
|
|
|
|
#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
|
|
#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
|
|
|
|
extern vec3_t monster_flash_offset[];
|
|
|
|
/* 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,
|
|
TE_BLOOD,
|
|
TE_BLASTER,
|
|
TE_RAILTRAIL,
|
|
TE_SHOTGUN,
|
|
TE_EXPLOSION1,
|
|
TE_EXPLOSION2,
|
|
TE_ROCKET_EXPLOSION,
|
|
TE_GRENADE_EXPLOSION,
|
|
TE_SPARKS,
|
|
TE_SPLASH,
|
|
TE_BUBBLETRAIL,
|
|
TE_SCREEN_SPARKS,
|
|
TE_SHIELD_SPARKS,
|
|
TE_BULLET_SPARKS,
|
|
TE_LASER_SPARKS,
|
|
TE_PARASITE_ATTACK,
|
|
TE_ROCKET_EXPLOSION_WATER,
|
|
TE_GRENADE_EXPLOSION_WATER,
|
|
TE_MEDIC_CABLE_ATTACK,
|
|
TE_BFG_EXPLOSION,
|
|
TE_BFG_BIGEXPLOSION,
|
|
TE_BOSSTPORT, /* used as '22' in a map, so DON'T RENUMBER!!! */
|
|
TE_BFG_LASER,
|
|
TE_GRAPPLE_CABLE,
|
|
TE_WELDING_SPARKS,
|
|
TE_GREENBLOOD,
|
|
TE_BLUEHYPERBLASTER,
|
|
TE_PLASMA_EXPLOSION,
|
|
TE_TUNNEL_SPARKS,
|
|
TE_BLASTER2,
|
|
TE_RAILTRAIL2,
|
|
TE_FLAME,
|
|
TE_LIGHTNING,
|
|
TE_DEBUGTRAIL,
|
|
TE_PLAIN_EXPLOSION,
|
|
TE_FLASHLIGHT,
|
|
TE_FORCEWALL,
|
|
TE_HEATBEAM,
|
|
TE_MONSTER_HEATBEAM,
|
|
TE_STEAM,
|
|
TE_BUBBLETRAIL2,
|
|
TE_MOREBLOOD,
|
|
TE_HEATBEAM_SPARKS,
|
|
TE_HEATBEAM_STEAM,
|
|
TE_CHAINFIST_SMOKE,
|
|
TE_ELECTRIC_SPARKS,
|
|
TE_TRACKER_EXPLOSION,
|
|
TE_TELEPORT_EFFECT,
|
|
TE_DBALL_GOAL,
|
|
TE_WIDOWBEAMOUT,
|
|
TE_NUKEBLAST,
|
|
TE_WIDOWSPLASH,
|
|
TE_EXPLOSION1_BIG,
|
|
TE_EXPLOSION1_NP,
|
|
TE_FLECHETTE
|
|
} 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
|
|
/* 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 MAX_STATS 32
|
|
|
|
/* 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 */
|
|
#define DF_QUADFIRE_DROP 0x00010000 /* 65536 */
|
|
#define DF_NO_MINES 0x00020000
|
|
#define DF_NO_STACK_DOUBLE 0x00040000
|
|
#define DF_NO_NUKES 0x00080000
|
|
#define DF_NO_SPHERES 0x00100000
|
|
|
|
#define ROGUE_VERSION_STRING "08/21/1998 Beta 2 for Ensemble"
|
|
|
|
/*
|
|
* ==========================================================
|
|
*
|
|
* 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 MAX_CONFIGSTRINGS (CS_GENERAL + MAX_GENERAL)
|
|
|
|
/* ============================================== */
|
|
|
|
/* entity_state_t->event values
|
|
entity 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
|
|
} 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 */
|
|
int frame;
|
|
int skinnum;
|
|
unsigned int effects;
|
|
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 */
|
|
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 */
|
|
|
|
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;
|
|
|
|
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;
|
|
|
|
#define VIDREF_GL 1
|
|
#define VIDREF_SOFT 2
|
|
#define VIDREF_OTHER 3
|
|
|
|
extern int vidref_val;
|
|
|
|
size_t verify_fread(void *, size_t, size_t, FILE *);
|
|
size_t verify_fwrite(void *, size_t, size_t, FILE *);
|
|
|
|
#endif /* XATRIX_SHARED_H */
|