mirror of
https://github.com/nzp-team/fteqw.git
synced 2024-11-23 20:32:43 +00:00
4c37c34c13
git-svn-id: https://svn.code.sf.net/p/fteqw/code/branches/wip@3408 fc73d0e0-1445-4013-8a0c-d673dee63da5
212 lines
5.8 KiB
C
212 lines
5.8 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.
|
|
|
|
*/
|
|
|
|
#define QCLIB //as opposed to standard qc stuff. One or other. All references+changes were by DMW unless specified otherwise. Starting 1/10/02
|
|
|
|
struct client_s;
|
|
struct edict_s;
|
|
|
|
#define MAX_PROGS 64
|
|
#define MAXADDONS 16
|
|
|
|
#define NUM_SPAWN_PARMS 64 //moved from server.h because of include ordering :(.
|
|
|
|
#define NewGetEdictFieldValue GetEdictFieldValue
|
|
void Q_SetProgsParms(qboolean forcompiler);
|
|
void PR_Deinit(void);
|
|
void PR_LoadGlabalStruct(void);
|
|
void Q_InitProgs(void);
|
|
void PR_RegisterFields(void);
|
|
void PR_Init(void);
|
|
void ED_Spawned (struct edict_s *ent, int loading);
|
|
qboolean SV_RunFullQCMovement(struct client_s *client, usercmd_t *ucmd);
|
|
qboolean PR_KrimzonParseCommand(char *s);
|
|
qboolean PR_UserCmd(char *cmd);
|
|
qboolean PR_ConsoleCmd(void);
|
|
|
|
void PR_RunThreads(void);
|
|
|
|
|
|
#define PR_MAINPROGS 0 //this is a constant that should really be phased out. But seeing as QCLIB requires some sort of master progs due to extern funcs...
|
|
//maybe go through looking for extern funcs, and remember which were not allocated. It would then be a first come gets priority. Not too bad I supppose.
|
|
|
|
extern int compileactive;
|
|
|
|
typedef enum {PROG_NONE, PROG_QW, PROG_NQ, PROG_H2, PROG_PREREL, PROG_UNKNOWN} progstype_t; //unknown obtains NQ behaviour
|
|
extern progstype_t progstype;
|
|
|
|
|
|
//extern globalvars_t *glob0;
|
|
|
|
|
|
//extern progparms_t progparms;
|
|
|
|
//extern progsnum_t mainprogs;
|
|
|
|
#if defined(ODE_STATIC) || defined(ODE_DYNAMIC)
|
|
#define USEODE 1
|
|
#endif
|
|
|
|
#ifdef USEODE
|
|
typedef struct {
|
|
// 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;
|
|
vec3_t ode_mins;
|
|
vec3_t ode_maxs;
|
|
vec_t ode_mass;
|
|
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[])
|
|
float ode_offsetmatrix[16];
|
|
float ode_offsetimatrix[16];
|
|
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;
|
|
} entityode_t;
|
|
|
|
typedef struct
|
|
{
|
|
// for ODE physics engine
|
|
qboolean ode; // if true then ode is activated
|
|
void *ode_world;
|
|
void *ode_space;
|
|
void *ode_contactgroup;
|
|
// number of constraint solver iterations to use (for dWorldStepFast)
|
|
int ode_iterations;
|
|
// actual step (server frametime / ode_iterations)
|
|
vec_t ode_step;
|
|
// max velocity for a 1-unit radius object at current step to prevent
|
|
// missed collisions
|
|
vec_t ode_movelimit;
|
|
} worldode_t;
|
|
#endif
|
|
|
|
typedef struct edict_s
|
|
{
|
|
//these 5 shared with qclib
|
|
qboolean isfree;
|
|
float freetime; // sv.time when the object was freed
|
|
int entnum;
|
|
qboolean readonly; //world
|
|
#ifdef VM_Q1
|
|
stdentvars_t *v;
|
|
extentvars_t *xv;
|
|
#else
|
|
union {
|
|
stdentvars_t *v;
|
|
stdentvars_t *xv;
|
|
};
|
|
#endif
|
|
/*qc lib doesn't care about the rest*/
|
|
|
|
/*these are shared with csqc*/
|
|
link_t area;
|
|
int num_leafs;
|
|
short leafnums[MAX_ENT_LEAFS];
|
|
#ifdef Q2BSPS
|
|
int areanum;
|
|
int areanum2;
|
|
int headnode;
|
|
#endif
|
|
#ifdef USEODE
|
|
entityode_t ode;
|
|
#endif
|
|
qbyte solidtype;
|
|
/*csqc doesn't reference the rest*/
|
|
|
|
entity_state_t baseline;
|
|
// other fields from progs come immediately after
|
|
} edict_t;
|
|
|
|
|
|
|
|
#include "progslib.h"
|
|
|
|
#undef pr_global_struct
|
|
//#define pr_nqglobal_struct *((nqglobalvars_t*)pr_globals)
|
|
#define pr_global_struct *pr_nqglobal_struct
|
|
|
|
float *spawnparamglobals[NUM_SPAWN_PARMS];
|
|
|
|
extern nqglobalvars_t *pr_nqglobal_struct;
|
|
|
|
extern progfuncs_t *svprogfuncs; //instance
|
|
extern progparms_t svprogparms;
|
|
extern progsnum_t svmainprogs;
|
|
extern progsnum_t clmainprogs;
|
|
#define EDICT_FROM_AREA(l) STRUCT_FROM_LINK(l,wedict_t,area)
|
|
#define HLEDICT_FROM_AREA(l) STRUCT_FROM_LINK(l,hledict_t,area)
|
|
#define Q2EDICT_FROM_AREA(l) STRUCT_FROM_LINK(l,q2edict_t,area)
|
|
#define Q3EDICT_FROM_AREA(l) STRUCT_FROM_LINK(l,q3serverEntity_t,area)
|
|
|
|
extern func_t SpectatorConnect;
|
|
extern func_t SpectatorThink;
|
|
extern func_t SpectatorDisconnect;
|
|
|
|
extern func_t SV_PlayerPhysicsQC;
|
|
extern func_t EndFrameQC;
|
|
|
|
qboolean PR_QCChat(char *text, int say_type);
|
|
|
|
void PR_ClientUserInfoChanged(char *name, char *oldivalue, char *newvalue);
|
|
void PR_LocalInfoChanged(char *name, char *oldivalue, char *newvalue);
|
|
void PF_InitTempStrings(progfuncs_t *prinst);
|
|
|
|
#ifdef VM_Q1
|
|
struct client_s;
|
|
void Q1QVM_Shutdown(void);
|
|
qboolean PR_LoadQ1QVM(void);
|
|
void Q1QVM_ClientConnect(struct client_s *cl);
|
|
qboolean Q1QVM_GameConsoleCommand(void);
|
|
qboolean Q1QVM_ClientSay(edict_t *player, qboolean team);
|
|
qboolean Q1QVM_UserInfoChanged(edict_t *player);
|
|
void Q1QVM_PlayerPreThink(void);
|
|
void Q1QVM_RunPlayerThink(void);
|
|
void Q1QVM_PostThink(void);
|
|
void Q1QVM_StartFrame(void);
|
|
void Q1QVM_Touch(void);
|
|
void Q1QVM_Think(void);
|
|
void Q1QVM_Blocked(void);
|
|
void Q1QVM_SetNewParms(void);
|
|
void Q1QVM_SetChangeParms(void);
|
|
void Q1QVM_ClientCommand(void);
|
|
void Q1QVM_GameCodePausedTic(float pausedduration);
|
|
void Q1QVM_DropClient(struct client_s *cl);
|
|
void Q1QVM_ChainMoved(void);
|
|
void Q1QVM_EndFrame(void);
|
|
void Q1QVMED_ClearEdict (edict_t *e, qboolean wipe);
|
|
#endif
|
|
|