fteqw/engine/server/progs.h
2021-12-20 10:07:55 +00:00

167 lines
5.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.
*/
struct client_s;
struct edict_s;
#define MAX_PROGS 64
#define MAXADDONS 16
void SVQ1_CvarChanged(cvar_t *var);
#define NewGetEdictFieldValue GetEdictFieldValue
void Q_SetProgsParms(qboolean forcompiler);
void PR_Deinit(void); //server shutting down
void PR_LoadGlabalStruct(qboolean muted);
enum initprogs_e
{
INITPROGS_NORMAL = 0,
INITPROGS_EDITOR = 1<<0,
INITPROGS_REQUIRE = 1<<1,
};
void Q_InitProgs(enum initprogs_e flags);
void PR_SpawnInitialEntities(const char *file);
void PR_RegisterFields(void);
void PR_Init(void);
void QDECL ED_Spawned (struct edict_s *ent, int loading);
void SSQC_MapEntityEdited(int modelidx, int idx, const char *newdata);
void SV_SetEntityButtons(struct edict_s *ent, unsigned int buttonbits);
qboolean SV_RunFullQCMovement(struct client_s *client, usercmd_t *ucmd);
qboolean PR_KrimzonParseCommand(const char *s);
qboolean PR_ParseClusterEvent(const char *dest, const char *source, const char *cmd, const char *info);
qboolean PR_UserCmd(const char *cmd);
qboolean PR_ConsoleCmd(const char *cmd);
void PRSV_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_TENEBRAE, PROG_UNKNOWN} progstype_t; //unknown obtains NQ behaviour
extern progstype_t progstype;
#include "../qclib/progslib.h"
typedef struct edict_s
{
//these 5 shared with qclib
enum ereftype_e ereftype;
float freetime; // sv.time when the object was freed
int entnum;
unsigned int fieldsize;
pbool 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*/
#ifdef USEAREAGRID
areagridlink_t gridareas[AREAGRIDPERENT]; //on overflow, use the inefficient overflow list.
size_t gridareasequence; //used to avoid iterrating the same ent twice.
#else
link_t area;
#endif
pvscache_t pvsinfo;
int lastruntime;
int solidsize;
#ifdef USERBE
entityrbe_t rbe;
#endif
/*csqc doesn't reference the rest*/
#ifdef NQPROT
float muzzletime; //nq clients need special handling to retain EF_MUZZLEFLASH while not breaking qw clients running nq mods.
#endif
entity_state_t baseline;
// other fields from progs come immediately after
} edict_t;
#undef pr_global_struct
#define pr_global_struct *pr_global_ptrs
extern globalptrs_t *pr_global_ptrs;
extern pubprogfuncs_t *svprogfuncs; //instance
extern progparms_t svprogparms;
extern progsnum_t svmainprogs;
extern progsnum_t clmainprogs;
#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;
extern qboolean ssqc_deprecated_warned;
extern cvar_t pr_maxedicts; //used in too many places...
extern cvar_t noexit, temp1, saved1, saved2, saved3, saved4, savedgamecfg, scratch1, scratch2, scratch3, scratch4, gamecfg, nomonsters; //read by savegame.c
extern cvar_t pr_ssqc_memsize, pr_imitatemvdsv, sv_aim, sv_maxaim, pr_ssqc_coreonerror, dpcompat_nopreparse;
extern int pr_teamfield;
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(pubprogfuncs_t *inst);
#ifdef VM_LUA
qboolean PR_LoadLua(void);
#endif
#ifdef VM_Q1
#define VMFSID_Q1QVM 57235 //the q1qvm zone tag that is freed when the module is purged.
struct client_s;
void Q1QVM_Shutdown(qboolean notifygame);
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, qboolean after);
void Q1QVM_PlayerPreThink(void);
void Q1QVM_RunPlayerThink(void);
void Q1QVM_PostThink(void);
void Q1QVM_StartFrame(qboolean botsarespecialsnowflakes);
void Q1QVM_Blocked(void);
void Q1QVM_SendEntity(quint64_t sendflags);
void Q1QVM_SetNewParms(void);
void Q1QVM_SetChangeParms(void);
qboolean Q1QVM_ClientCommand(void);
void Q1QVM_GameCodePausedTic(float pausedduration);
void Q1QVM_DropClient(struct client_s *cl);
void Q1QVM_ChainMoved(void);
void Q1QVM_EndFrame(void);
#endif