mirror of
https://github.com/DrBeef/QuakeQuest.git
synced 2024-12-22 18:41:32 +00:00
151 lines
4.4 KiB
C
151 lines
4.4 KiB
C
/*
|
|
Copyright (C) 1996-1997 Id Software, Inc.
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; either version 2
|
|
of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
See the GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
*/
|
|
|
|
#ifndef PROGS_H
|
|
#define PROGS_H
|
|
#include "pr_comp.h" // defs shared with qcc
|
|
|
|
#define ENTITYGRIDAREAS 16
|
|
#define MAX_ENTITYCLUSTERS 16
|
|
|
|
#define GEOMTYPE_NONE -1
|
|
#define GEOMTYPE_SOLID 0
|
|
#define GEOMTYPE_BOX 1
|
|
#define GEOMTYPE_SPHERE 2
|
|
#define GEOMTYPE_CAPSULE 3
|
|
#define GEOMTYPE_TRIMESH 4
|
|
#define GEOMTYPE_CYLINDER 5
|
|
#define GEOMTYPE_CAPSULE_X 6
|
|
#define GEOMTYPE_CAPSULE_Y 7
|
|
#define GEOMTYPE_CAPSULE_Z 8
|
|
#define GEOMTYPE_CYLINDER_X 9
|
|
#define GEOMTYPE_CYLINDER_Y 10
|
|
#define GEOMTYPE_CYLINDER_Z 11
|
|
|
|
#define JOINTTYPE_NONE 0
|
|
#define JOINTTYPE_POINT 1
|
|
#define JOINTTYPE_HINGE 2
|
|
#define JOINTTYPE_SLIDER 3
|
|
#define JOINTTYPE_UNIVERSAL 4
|
|
#define JOINTTYPE_HINGE2 5
|
|
#define JOINTTYPE_FIXED -1
|
|
|
|
#define FORCETYPE_NONE 0
|
|
#define FORCETYPE_FORCE 1
|
|
#define FORCETYPE_FORCEATPOS 2
|
|
#define FORCETYPE_TORQUE 3
|
|
|
|
#define ODEFUNC_ENABLE 1
|
|
#define ODEFUNC_DISABLE 2
|
|
#define ODEFUNC_FORCE 3
|
|
#define ODEFUNC_TORQUE 4
|
|
|
|
typedef struct edict_odefunc_s
|
|
{
|
|
int type;
|
|
vec3_t v1;
|
|
vec3_t v2;
|
|
struct edict_odefunc_s *next;
|
|
}edict_odefunc_t;
|
|
|
|
typedef struct edict_engineprivate_s
|
|
{
|
|
// true if this edict is unused
|
|
qboolean free;
|
|
// sv.time when the object was freed (to prevent early reuse which could
|
|
// mess up client interpolation or obscure severe QuakeC bugs)
|
|
float freetime;
|
|
// mark for the leak detector
|
|
int mark;
|
|
// place in the code where it was allocated (for the leak detector)
|
|
const char *allocation_origin;
|
|
// initially false to prevent projectiles from moving on their first frame
|
|
// (even if they were spawned by an synchronous client think)
|
|
qboolean move;
|
|
|
|
// cached cluster links for quick stationary object visibility checking
|
|
vec3_t cullmins, cullmaxs;
|
|
int pvs_numclusters;
|
|
int pvs_clusterlist[MAX_ENTITYCLUSTERS];
|
|
|
|
// physics grid areas this edict is linked into
|
|
link_t areagrid[ENTITYGRIDAREAS];
|
|
// since the areagrid can have multiple references to one entity,
|
|
// we should avoid extensive checking on entities already encountered
|
|
int areagridmarknumber;
|
|
// mins/maxs passed to World_LinkEdict
|
|
vec3_t areamins, areamaxs;
|
|
|
|
// PROTOCOL_QUAKE, PROTOCOL_QUAKEDP, PROTOCOL_NEHAHRAMOVIE, PROTOCOL_QUAKEWORLD
|
|
// baseline values
|
|
entity_state_t baseline;
|
|
|
|
// LordHavoc: gross hack to make floating items still work
|
|
int suspendedinairflag;
|
|
|
|
// cached position to avoid redundant SV_CheckWaterTransition calls on monsters
|
|
qboolean waterposition_forceupdate; // force an update on this entity (set by SV_PushMove code for moving water entities)
|
|
vec3_t waterposition_origin; // updates whenever this changes
|
|
|
|
// used by PushMove to keep track of where objects were before they were
|
|
// moved, in case they need to be moved back
|
|
vec3_t moved_from;
|
|
vec3_t moved_fromangles;
|
|
|
|
framegroupblend_t framegroupblend[MAX_FRAMEGROUPBLENDS];
|
|
frameblend_t frameblend[MAX_FRAMEBLENDS];
|
|
skeleton_t skeleton;
|
|
|
|
// physics parameters
|
|
qboolean ode_physics;
|
|
void *ode_body;
|
|
void *ode_geom;
|
|
void *ode_joint;
|
|
float *ode_vertex3f;
|
|
int *ode_element3i;
|
|
int ode_numvertices;
|
|
int ode_numtriangles;
|
|
edict_odefunc_t *ode_func;
|
|
vec3_t ode_mins;
|
|
vec3_t ode_maxs;
|
|
vec3_t ode_scale;
|
|
vec_t ode_mass;
|
|
float ode_friction;
|
|
vec3_t ode_origin;
|
|
vec3_t ode_velocity;
|
|
vec3_t ode_angles;
|
|
vec3_t ode_avelocity;
|
|
qboolean ode_gravity;
|
|
int ode_modelindex;
|
|
vec_t ode_movelimit; // smallest component of (maxs[]-mins[])
|
|
matrix4x4_t ode_offsetmatrix;
|
|
matrix4x4_t ode_offsetimatrix;
|
|
int ode_joint_type;
|
|
int ode_joint_enemy;
|
|
int ode_joint_aiment;
|
|
vec3_t ode_joint_origin; // joint anchor
|
|
vec3_t ode_joint_angles; // joint axis
|
|
vec3_t ode_joint_velocity; // second joint axis
|
|
vec3_t ode_joint_movedir; // parameters
|
|
void *ode_massbuf;
|
|
}
|
|
edict_engineprivate_t;
|
|
|
|
#endif
|