DarkPlaces
Game engine based on the Quake 1 engine by id Software, developed by LadyHavoc
 
csprogs.c File Reference
#include "quakedef.h"
#include "progsvm.h"
#include "clprogdefs.h"
#include "csprogs.h"
#include "cl_collision.h"
#include "snd_main.h"
#include "clvm_cmds.h"
#include "prvm_cmds.h"
#include "prvm_offsets.h"
+ Include dependency graph for csprogs.c:

Go to the source code of this file.

Macros

#define CL_REQFIELDS   (sizeof(cl_reqfields) / sizeof(prvm_required_field_t))
 
#define CL_REQGLOBALS   (sizeof(cl_reqglobals) / sizeof(prvm_required_field_t))
 
#define CSQC_RETURNVAL   prog->globals.fp[OFS_RETURN]
 
#define PRVM_DECLARE_clientfieldedict(x)
 
#define PRVM_DECLARE_clientfieldedict(x)
 
#define PRVM_DECLARE_clientfieldfloat(x)
 
#define PRVM_DECLARE_clientfieldfloat(x)
 
#define PRVM_DECLARE_clientfieldfunction(x)
 
#define PRVM_DECLARE_clientfieldfunction(x)
 
#define PRVM_DECLARE_clientfieldstring(x)
 
#define PRVM_DECLARE_clientfieldstring(x)
 
#define PRVM_DECLARE_clientfieldvector(x)
 
#define PRVM_DECLARE_clientfieldvector(x)
 
#define PRVM_DECLARE_clientfunction(x)
 
#define PRVM_DECLARE_clientfunction(x)
 
#define PRVM_DECLARE_clientglobaledict(x)
 
#define PRVM_DECLARE_clientglobaledict(x)
 
#define PRVM_DECLARE_clientglobalfloat(x)
 
#define PRVM_DECLARE_clientglobalfloat(x)
 
#define PRVM_DECLARE_clientglobalfunction(x)
 
#define PRVM_DECLARE_clientglobalfunction(x)
 
#define PRVM_DECLARE_clientglobalstring(x)
 
#define PRVM_DECLARE_clientglobalstring(x)
 
#define PRVM_DECLARE_clientglobalvector(x)
 
#define PRVM_DECLARE_clientglobalvector(x)
 
#define PRVM_DECLARE_field(x)
 
#define PRVM_DECLARE_field(x)
 
#define PRVM_DECLARE_function(x)
 
#define PRVM_DECLARE_function(x)
 
#define PRVM_DECLARE_global(x)
 
#define PRVM_DECLARE_global(x)
 
#define PRVM_DECLARE_menufieldedict(x)
 
#define PRVM_DECLARE_menufieldedict(x)
 
#define PRVM_DECLARE_menufieldfloat(x)
 
#define PRVM_DECLARE_menufieldfloat(x)
 
#define PRVM_DECLARE_menufieldfunction(x)
 
#define PRVM_DECLARE_menufieldfunction(x)
 
#define PRVM_DECLARE_menufieldstring(x)
 
#define PRVM_DECLARE_menufieldstring(x)
 
#define PRVM_DECLARE_menufieldvector(x)
 
#define PRVM_DECLARE_menufieldvector(x)
 
#define PRVM_DECLARE_menufunction(x)
 
#define PRVM_DECLARE_menufunction(x)
 
#define PRVM_DECLARE_menuglobaledict(x)
 
#define PRVM_DECLARE_menuglobaledict(x)
 
#define PRVM_DECLARE_menuglobalfloat(x)
 
#define PRVM_DECLARE_menuglobalfloat(x)
 
#define PRVM_DECLARE_menuglobalfunction(x)
 
#define PRVM_DECLARE_menuglobalfunction(x)
 
#define PRVM_DECLARE_menuglobalstring(x)
 
#define PRVM_DECLARE_menuglobalstring(x)
 
#define PRVM_DECLARE_menuglobalvector(x)
 
#define PRVM_DECLARE_menuglobalvector(x)
 
#define PRVM_DECLARE_serverfieldedict(x)
 
#define PRVM_DECLARE_serverfieldedict(x)
 
#define PRVM_DECLARE_serverfieldfloat(x)
 
#define PRVM_DECLARE_serverfieldfloat(x)
 
#define PRVM_DECLARE_serverfieldfunction(x)
 
#define PRVM_DECLARE_serverfieldfunction(x)
 
#define PRVM_DECLARE_serverfieldstring(x)
 
#define PRVM_DECLARE_serverfieldstring(x)
 
#define PRVM_DECLARE_serverfieldvector(x)
 
#define PRVM_DECLARE_serverfieldvector(x)
 
#define PRVM_DECLARE_serverfunction(x)
 
#define PRVM_DECLARE_serverfunction(x)
 
#define PRVM_DECLARE_serverglobaledict(x)
 
#define PRVM_DECLARE_serverglobaledict(x)
 
#define PRVM_DECLARE_serverglobalfloat(x)
 
#define PRVM_DECLARE_serverglobalfloat(x)
 
#define PRVM_DECLARE_serverglobalfunction(x)
 
#define PRVM_DECLARE_serverglobalfunction(x)
 
#define PRVM_DECLARE_serverglobalstring(x)
 
#define PRVM_DECLARE_serverglobalstring(x)
 
#define PRVM_DECLARE_serverglobalvector(x)
 
#define PRVM_DECLARE_serverglobalvector(x)
 

Functions

static void CL_CheckRequiredFuncs (prvm_prog_t *prog, const char *filename)
 Previous DP versions declined to load csprogs if it lacked any of: CSQC_Init, CSQC_InputEvent, CSQC_UpdateView, CSQC_ConsoleCommand whereas in FTE and QSS-based engines the minimum is either CSQC_UpdateView or CSQC_DrawHud (only called in CSQC_SIMPLE aka hud-only mode) and the other funcs are optional, so we now behave the same here.
 
qbool CL_VM_ConsoleCommand (const char *text, size_t textlen)
 
void CL_VM_DrawHud (double frametime)
 
qbool CL_VM_Event_Sound (int sound_num, float fvolume, int channel, float attenuation, int ent, vec3_t pos, int flags, float speed)
 
qbool CL_VM_GetEntitySoundOrigin (int entnum, vec3_t out)
 
int CL_VM_GetViewEntity (void)
 
void CL_VM_Init (void)
 
qbool CL_VM_InputEvent (int eventtype, float x, float y)
 
void CL_VM_Parse_CenterPrint (const char *msg, size_t msg_len)
 
static void CL_VM_Parse_Print (const char *msg, size_t msg_len)
 
void CL_VM_Parse_StuffCmd (const char *msg, size_t msg_len)
 
qbool CL_VM_Parse_TempEntity (void)
 
void CL_VM_PreventInformationLeaks (void)
 
void CL_VM_ShutDown (void)
 
qbool CL_VM_TransformView (int entnum, matrix4x4_t *viewmatrix, mplane_t *clipplane, vec3_t visorigin)
 
static void CL_VM_UpdateCoopDeathmatchGlobals (int gametype)
 
void CL_VM_UpdateDmgGlobals (int dmg_take, int dmg_save, vec3_t dmg_origin)
 
void CL_VM_UpdateIntermissionState (int intermission)
 
void CL_VM_UpdateShowingScoresState (int showingscores)
 
qbool CL_VM_UpdateView (double frametime)
 
static void CLVM_begin_increase_edicts (prvm_prog_t *prog)
 
static void CLVM_count_edicts (prvm_prog_t *prog)
 
static void CLVM_end_increase_edicts (prvm_prog_t *prog)
 
static void CLVM_free_edict (prvm_prog_t *prog, prvm_edict_t *ed)
 
static void CLVM_init_edict (prvm_prog_t *prog, prvm_edict_t *e)
 
static qbool CLVM_load_edict (prvm_prog_t *prog, prvm_edict_t *ent)
 
void CSQC_AddPrintText (const char *msg, size_t msg_len)
 
qbool CSQC_AddRenderEdict (prvm_edict_t *ed, int edictnum)
 
void CSQC_Predraw (prvm_edict_t *ed)
 
void CSQC_ReadEntities (void)
 
static void CSQC_SetGlobals (double frametime)
 
void CSQC_Think (prvm_edict_t *ed)
 
void CSQC_UpdateNetworkTimes (double newtime, double oldtime)
 
qbool MakeDownloadPacket (const char *filename, unsigned char *data, size_t len, int crc, int cnt, sizebuf_t *buf, int protocol)
 

Variables

cvar_t cl_noplayershadow
 
prvm_required_field_t cl_reqfields []
 
prvm_required_field_t cl_reqglobals []
 
r_refdef_view_t csqc_main_r_refdef_view
 
r_refdef_view_t csqc_original_r_refdef_view
 
cvar_t csqc_usedemoprogs
 

Macro Definition Documentation

◆ CL_REQFIELDS

#define CL_REQFIELDS   (sizeof(cl_reqfields) / sizeof(prvm_required_field_t))

Definition at line 64 of file csprogs.c.

Referenced by CL_VM_Init().

◆ CL_REQGLOBALS

#define CL_REQGLOBALS   (sizeof(cl_reqglobals) / sizeof(prvm_required_field_t))

Definition at line 143 of file csprogs.c.

Referenced by CL_VM_Init().

◆ CSQC_RETURNVAL

#define CSQC_RETURNVAL   prog->globals.fp[OFS_RETURN]

Definition at line 34 of file csprogs.c.

Referenced by CL_VM_Event_Sound(), CL_VM_InputEvent(), and CL_VM_Parse_TempEntity().

◆ PRVM_DECLARE_clientfieldedict [1/2]

#define PRVM_DECLARE_clientfieldedict ( x)
Value:
{ev_entity, #x },
GLint GLenum GLint x
Definition glquake.h:651
@ ev_entity
Definition pr_comp.h:29

◆ PRVM_DECLARE_clientfieldedict [2/2]

#define PRVM_DECLARE_clientfieldedict ( x)

◆ PRVM_DECLARE_clientfieldfloat [1/2]

#define PRVM_DECLARE_clientfieldfloat ( x)
Value:
{ev_float, #x },
@ ev_float
Definition pr_comp.h:29

◆ PRVM_DECLARE_clientfieldfloat [2/2]

#define PRVM_DECLARE_clientfieldfloat ( x)

◆ PRVM_DECLARE_clientfieldfunction [1/2]

#define PRVM_DECLARE_clientfieldfunction ( x)
Value:
@ ev_function
Definition pr_comp.h:29

◆ PRVM_DECLARE_clientfieldfunction [2/2]

#define PRVM_DECLARE_clientfieldfunction ( x)

◆ PRVM_DECLARE_clientfieldstring [1/2]

#define PRVM_DECLARE_clientfieldstring ( x)
Value:
{ev_string, #x },
@ ev_string
Definition pr_comp.h:29

◆ PRVM_DECLARE_clientfieldstring [2/2]

#define PRVM_DECLARE_clientfieldstring ( x)

◆ PRVM_DECLARE_clientfieldvector [1/2]

#define PRVM_DECLARE_clientfieldvector ( x)
Value:
{ev_vector, #x },
@ ev_vector
Definition pr_comp.h:29

◆ PRVM_DECLARE_clientfieldvector [2/2]

#define PRVM_DECLARE_clientfieldvector ( x)

◆ PRVM_DECLARE_clientfunction [1/2]

#define PRVM_DECLARE_clientfunction ( x)

◆ PRVM_DECLARE_clientfunction [2/2]

#define PRVM_DECLARE_clientfunction ( x)

◆ PRVM_DECLARE_clientglobaledict [1/2]

#define PRVM_DECLARE_clientglobaledict ( x)

◆ PRVM_DECLARE_clientglobaledict [2/2]

#define PRVM_DECLARE_clientglobaledict ( x)
Value:

◆ PRVM_DECLARE_clientglobalfloat [1/2]

#define PRVM_DECLARE_clientglobalfloat ( x)

◆ PRVM_DECLARE_clientglobalfloat [2/2]

#define PRVM_DECLARE_clientglobalfloat ( x)
Value:
{ev_float, #x},

◆ PRVM_DECLARE_clientglobalfunction [1/2]

#define PRVM_DECLARE_clientglobalfunction ( x)

◆ PRVM_DECLARE_clientglobalfunction [2/2]

#define PRVM_DECLARE_clientglobalfunction ( x)
Value:

◆ PRVM_DECLARE_clientglobalstring [1/2]

#define PRVM_DECLARE_clientglobalstring ( x)

◆ PRVM_DECLARE_clientglobalstring [2/2]

#define PRVM_DECLARE_clientglobalstring ( x)
Value:

◆ PRVM_DECLARE_clientglobalvector [1/2]

#define PRVM_DECLARE_clientglobalvector ( x)

◆ PRVM_DECLARE_clientglobalvector [2/2]

#define PRVM_DECLARE_clientglobalvector ( x)
Value:

◆ PRVM_DECLARE_field [1/2]

#define PRVM_DECLARE_field ( x)

◆ PRVM_DECLARE_field [2/2]

#define PRVM_DECLARE_field ( x)

◆ PRVM_DECLARE_function [1/2]

#define PRVM_DECLARE_function ( x)

◆ PRVM_DECLARE_function [2/2]

#define PRVM_DECLARE_function ( x)

◆ PRVM_DECLARE_global [1/2]

#define PRVM_DECLARE_global ( x)

◆ PRVM_DECLARE_global [2/2]

#define PRVM_DECLARE_global ( x)

◆ PRVM_DECLARE_menufieldedict [1/2]

#define PRVM_DECLARE_menufieldedict ( x)

◆ PRVM_DECLARE_menufieldedict [2/2]

#define PRVM_DECLARE_menufieldedict ( x)

◆ PRVM_DECLARE_menufieldfloat [1/2]

#define PRVM_DECLARE_menufieldfloat ( x)

◆ PRVM_DECLARE_menufieldfloat [2/2]

#define PRVM_DECLARE_menufieldfloat ( x)

◆ PRVM_DECLARE_menufieldfunction [1/2]

#define PRVM_DECLARE_menufieldfunction ( x)

◆ PRVM_DECLARE_menufieldfunction [2/2]

#define PRVM_DECLARE_menufieldfunction ( x)

◆ PRVM_DECLARE_menufieldstring [1/2]

#define PRVM_DECLARE_menufieldstring ( x)

◆ PRVM_DECLARE_menufieldstring [2/2]

#define PRVM_DECLARE_menufieldstring ( x)

◆ PRVM_DECLARE_menufieldvector [1/2]

#define PRVM_DECLARE_menufieldvector ( x)

◆ PRVM_DECLARE_menufieldvector [2/2]

#define PRVM_DECLARE_menufieldvector ( x)

◆ PRVM_DECLARE_menufunction [1/2]

#define PRVM_DECLARE_menufunction ( x)

◆ PRVM_DECLARE_menufunction [2/2]

#define PRVM_DECLARE_menufunction ( x)

◆ PRVM_DECLARE_menuglobaledict [1/2]

#define PRVM_DECLARE_menuglobaledict ( x)

◆ PRVM_DECLARE_menuglobaledict [2/2]

#define PRVM_DECLARE_menuglobaledict ( x)

◆ PRVM_DECLARE_menuglobalfloat [1/2]

#define PRVM_DECLARE_menuglobalfloat ( x)

◆ PRVM_DECLARE_menuglobalfloat [2/2]

#define PRVM_DECLARE_menuglobalfloat ( x)

◆ PRVM_DECLARE_menuglobalfunction [1/2]

#define PRVM_DECLARE_menuglobalfunction ( x)

◆ PRVM_DECLARE_menuglobalfunction [2/2]

#define PRVM_DECLARE_menuglobalfunction ( x)

◆ PRVM_DECLARE_menuglobalstring [1/2]

#define PRVM_DECLARE_menuglobalstring ( x)

◆ PRVM_DECLARE_menuglobalstring [2/2]

#define PRVM_DECLARE_menuglobalstring ( x)

◆ PRVM_DECLARE_menuglobalvector [1/2]

#define PRVM_DECLARE_menuglobalvector ( x)

◆ PRVM_DECLARE_menuglobalvector [2/2]

#define PRVM_DECLARE_menuglobalvector ( x)

◆ PRVM_DECLARE_serverfieldedict [1/2]

#define PRVM_DECLARE_serverfieldedict ( x)

◆ PRVM_DECLARE_serverfieldedict [2/2]

#define PRVM_DECLARE_serverfieldedict ( x)

◆ PRVM_DECLARE_serverfieldfloat [1/2]

#define PRVM_DECLARE_serverfieldfloat ( x)

◆ PRVM_DECLARE_serverfieldfloat [2/2]

#define PRVM_DECLARE_serverfieldfloat ( x)

◆ PRVM_DECLARE_serverfieldfunction [1/2]

#define PRVM_DECLARE_serverfieldfunction ( x)

◆ PRVM_DECLARE_serverfieldfunction [2/2]

#define PRVM_DECLARE_serverfieldfunction ( x)

◆ PRVM_DECLARE_serverfieldstring [1/2]

#define PRVM_DECLARE_serverfieldstring ( x)

◆ PRVM_DECLARE_serverfieldstring [2/2]

#define PRVM_DECLARE_serverfieldstring ( x)

◆ PRVM_DECLARE_serverfieldvector [1/2]

#define PRVM_DECLARE_serverfieldvector ( x)

◆ PRVM_DECLARE_serverfieldvector [2/2]

#define PRVM_DECLARE_serverfieldvector ( x)

◆ PRVM_DECLARE_serverfunction [1/2]

#define PRVM_DECLARE_serverfunction ( x)

◆ PRVM_DECLARE_serverfunction [2/2]

#define PRVM_DECLARE_serverfunction ( x)

◆ PRVM_DECLARE_serverglobaledict [1/2]

#define PRVM_DECLARE_serverglobaledict ( x)

◆ PRVM_DECLARE_serverglobaledict [2/2]

#define PRVM_DECLARE_serverglobaledict ( x)

◆ PRVM_DECLARE_serverglobalfloat [1/2]

#define PRVM_DECLARE_serverglobalfloat ( x)

◆ PRVM_DECLARE_serverglobalfloat [2/2]

#define PRVM_DECLARE_serverglobalfloat ( x)

◆ PRVM_DECLARE_serverglobalfunction [1/2]

#define PRVM_DECLARE_serverglobalfunction ( x)

◆ PRVM_DECLARE_serverglobalfunction [2/2]

#define PRVM_DECLARE_serverglobalfunction ( x)

◆ PRVM_DECLARE_serverglobalstring [1/2]

#define PRVM_DECLARE_serverglobalstring ( x)

◆ PRVM_DECLARE_serverglobalstring [2/2]

#define PRVM_DECLARE_serverglobalstring ( x)

◆ PRVM_DECLARE_serverglobalvector [1/2]

#define PRVM_DECLARE_serverglobalvector ( x)

◆ PRVM_DECLARE_serverglobalvector [2/2]

#define PRVM_DECLARE_serverglobalvector ( x)

Function Documentation

◆ CL_CheckRequiredFuncs()

static void CL_CheckRequiredFuncs ( prvm_prog_t * prog,
const char * filename )
static

Previous DP versions declined to load csprogs if it lacked any of: CSQC_Init, CSQC_InputEvent, CSQC_UpdateView, CSQC_ConsoleCommand whereas in FTE and QSS-based engines the minimum is either CSQC_UpdateView or CSQC_DrawHud (only called in CSQC_SIMPLE aka hud-only mode) and the other funcs are optional, so we now behave the same here.

Definition at line 54 of file csprogs.c.

55{
56 if (PRVM_ED_FindFunction(prog, "CSQC_UpdateView"))
57 return;
58 else if (PRVM_ED_FindFunction(prog, "CSQC_DrawHud"))
59 prog->flag |= PRVM_CSQC_SIMPLE;
60 else
61 prog->error_cmd("%s: no CSQC_UpdateView (EXT_CSQC) or CSQC_DrawHud (CSQC_SIMPLE) function found in %s", prog->name, filename);
62}
mfunction_t * PRVM_ED_FindFunction(prvm_prog_t *prog, const char *name)
Definition prvm_edict.c:425
#define PRVM_CSQC_SIMPLE
Definition progsvm.h:239
const char * name
name of the prog, e.g. "Server", "Client" or "Menu" (used for text output)
Definition progsvm.h:700
void(* error_cmd)(const char *format,...) DP_FUNC_PRINTF(1) DP_FUNC_NORETURN
[INIT]
Definition progsvm.h:747
unsigned flag
flag - used to store general flags like PRVM_GE_SELF, etc.
Definition progsvm.h:703

References prvm_prog_t::error_cmd, prvm_prog_t::flag, prvm_prog_t::name, PRVM_CSQC_SIMPLE, and PRVM_ED_FindFunction().

Referenced by CL_VM_Init().

◆ CL_VM_ConsoleCommand()

qbool CL_VM_ConsoleCommand ( const char * text,
size_t textlen )

Definition at line 573 of file csprogs.c.

574{
575 prvm_prog_t *prog = CLVM_prog;
576 return PRVM_ConsoleCommand(prog, text, textlen, &prog->funcoffsets.CSQC_ConsoleCommand, false, cl.csqc_server2csqcentitynumber[cl.playerentity], cl.time, "QC function CSQC_ConsoleCommand is missing");
577}
client_state_t cl
Definition cl_main.c:117
#define CLVM_prog
Definition progsvm.h:767
qbool PRVM_ConsoleCommand(prvm_prog_t *prog, const char *text, size_t textlen, int *func, qbool preserve_self, int curself, double ptime, const char *error_message)
Definition prvm_cmds.c:68
unsigned short csqc_server2csqcentitynumber[MAX_EDICTS]
Definition client.h:1110
double time
Definition client.h:868
int playerentity
Definition client.h:910
prvm_prog_funcoffsets_t funcoffsets
Definition progsvm.h:693

References cl, CLVM_prog, client_state_t::csqc_server2csqcentitynumber, prvm_prog_t::funcoffsets, client_state_t::playerentity, PRVM_ConsoleCommand(), and client_state_t::time.

Referenced by Cmd_CL_Callback().

◆ CL_VM_DrawHud()

void CL_VM_DrawHud ( double frametime)

Definition at line 541 of file csprogs.c.

542{
543 prvm_prog_t *prog = CLVM_prog;
544
545 R_TimeReport("pre-DrawHud");
546
550
552
553 // width and height parameters are virtual in CSQC_SIMPLE engines
556 prog->ExecuteProgram(prog, PRVM_clientfunction(CSQC_DrawHud), "QC function CSQC_DrawHud is missing");
557
558 if (PRVM_clientfunction(CSQC_DrawScores))
559 {
562 if (key_dest != key_menu)
563 prog->ExecuteProgram(prog, PRVM_clientfunction(CSQC_DrawScores), "QC function CSQC_DrawScores is missing");
564 }
566 if (!cl.islocalgame) // LadyHavoc: changed to draw the deathmatch overlays in any multiplayer mode
568
569 R_TimeReport("DrawHud");
570}
cvar_t vid_conheight
Definition cl_screen.c:57
cvar_t vid_conwidth
Definition cl_screen.c:56
qbool sb_showscores
Definition sbar.c:56
static void CSQC_SetGlobals(double frametime)
Definition csprogs.c:247
entity self
float frametime
float time
keydest_t key_dest
Definition keys.c:37
@ key_menu
Definition keys.h:372
#define VectorSet(vec, x, y, z)
Definition mathlib.h:96
#define OFS_PARM0
Definition pr_comp.h:34
#define OFS_PARM1
Definition pr_comp.h:35
#define PRVM_clientfunction(funcname)
Definition progsvm.h:194
#define PRVM_clientglobaledict(fieldname)
Definition progsvm.h:192
#define PRVM_clientglobalfloat(fieldname)
Definition progsvm.h:189
void PRVM_GarbageCollection(prvm_prog_t *prog)
#define PRVM_G_FLOAT(o)
Definition progsvm.h:882
#define PRVM_G_VECTOR(o)
Definition progsvm.h:886
#define STAT_HEALTH
Definition qstats.h:8
void R_TimeReport(const char *desc)
Definition r_stats.c:193
cvar_t cl_deathscoreboard
Definition sbar.c:110
void Sbar_DeathmatchOverlay(void)
Definition sbar.c:1866
int islocalgame
Definition client.h:746
int stats[MAX_CL_STATS]
Definition client.h:758
int integer
Definition cvar.h:73
void(* ExecuteProgram)(struct prvm_prog_s *prog, func_t fnum, const char *errormessage)
pointer to one of the *VM_ExecuteProgram functions
Definition progsvm.h:749

References cl, cl_deathscoreboard, CLVM_prog, client_state_t::csqc_server2csqcentitynumber, CSQC_SetGlobals(), prvm_prog_t::ExecuteProgram, frametime, cvar_t::integer, client_state_t::islocalgame, key_dest, key_menu, OFS_PARM0, OFS_PARM1, client_state_t::playerentity, PRVM_clientfunction, PRVM_clientglobaledict, PRVM_clientglobalfloat, PRVM_G_FLOAT, PRVM_G_VECTOR, PRVM_GarbageCollection(), R_TimeReport(), sb_showscores, Sbar_DeathmatchOverlay(), self, STAT_HEALTH, client_state_t::stats, client_state_t::time, time, VectorSet, vid_conheight, and vid_conwidth.

Referenced by SCR_DrawScreen().

◆ CL_VM_Event_Sound()

qbool CL_VM_Event_Sound ( int sound_num,
float fvolume,
int channel,
float attenuation,
int ent,
vec3_t pos,
int flags,
float speed )

Definition at line 721 of file csprogs.c.

722{
723 prvm_prog_t *prog = CLVM_prog;
724 qbool r = false;
725
726 if(prog->loaded)
727 {
728 if(PRVM_clientfunction(CSQC_Event_Sound))
729 {
732 PRVM_G_FLOAT(OFS_PARM0) = ent;
734 PRVM_G_INT(OFS_PARM2) = PRVM_SetTempString(prog, cl.sound_name[sound_num], strlen(cl.sound_name[sound_num]));
735 PRVM_G_FLOAT(OFS_PARM3) = fvolume;
736 PRVM_G_FLOAT(OFS_PARM4) = attenuation;
738 PRVM_G_FLOAT(OFS_PARM6) = speed * 100.0f;
739 PRVM_G_FLOAT(OFS_PARM7) = flags; // flags
740 prog->ExecuteProgram(prog, PRVM_clientfunction(CSQC_Event_Sound), "QC function CSQC_Event_Sound is missing");
741 r = CSQC_RETURNVAL != 0;
742 }
743 }
744
745 return r;
746}
#define CSQC_RETURNVAL
Definition csprogs.c:34
float flags
#define VectorCopy(in, out)
Definition mathlib.h:101
float strlen(string s)
#define OFS_PARM4
Definition pr_comp.h:38
#define OFS_PARM2
Definition pr_comp.h:36
#define OFS_PARM3
Definition pr_comp.h:37
#define OFS_PARM5
Definition pr_comp.h:39
#define OFS_PARM6
Definition pr_comp.h:40
#define OFS_PARM7
Definition pr_comp.h:41
int PRVM_SetTempString(prvm_prog_t *prog, const char *s, size_t slen)
Takes an strlen (not a buffer size).
#define PRVM_G_INT(o)
Definition progsvm.h:883
bool qbool
Definition qtypes.h:9
dp_FragColor r
#define CHAN_ENGINE2USER(c)
Definition sound.h:91
char sound_name[MAX_SOUNDS][MAX_QPATH]
Definition client.h:893
qbool loaded
used to indicate whether a prog is loaded
Definition progsvm.h:710

References CHAN_ENGINE2USER, cl, CLVM_prog, CSQC_RETURNVAL, client_state_t::csqc_server2csqcentitynumber, prvm_prog_t::ExecuteProgram, flags, prvm_prog_t::loaded, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, OFS_PARM4, OFS_PARM5, OFS_PARM6, OFS_PARM7, client_state_t::playerentity, PRVM_clientfunction, PRVM_clientglobaledict, PRVM_clientglobalfloat, PRVM_G_FLOAT, PRVM_G_INT, PRVM_G_VECTOR, PRVM_SetTempString(), r, self, client_state_t::sound_name, strlen(), client_state_t::time, time, and VectorCopy.

Referenced by CL_ParseStartSoundPacket().

◆ CL_VM_GetEntitySoundOrigin()

qbool CL_VM_GetEntitySoundOrigin ( int entnum,
vec3_t out )

Definition at line 1172 of file csprogs.c.

1173{
1174 prvm_prog_t *prog = CLVM_prog;
1175 prvm_edict_t *ed;
1176 model_t *mod;
1177 matrix4x4_t matrix;
1178 qbool r = 0;
1179
1181
1182 if(!ed->free)
1183 {
1186 if(CL_GetTagMatrix(prog, &matrix, ed, 0, NULL) == 0)
1187 Matrix4x4_OriginFromMatrix(&matrix, out);
1188 if (mod && mod->soundfromcenter)
1189 VectorMAMAM(1.0f, out, 0.5f, mod->normalmins, 0.5f, mod->normalmaxs, out);
1190 r = 1;
1191 }
1192
1193 return r;
1194}
model_t * CL_GetModelFromEdict(prvm_edict_t *ed)
int CL_GetTagMatrix(prvm_prog_t *prog, matrix4x4_t *out, prvm_edict_t *ent, int tagindex, prvm_vec_t *returnshadingorigin)
Definition clvm_cmds.c:3286
float mod(float dividend, float divisor)
float entnum
vector origin
#define VectorMAMAM(scale1, b1, scale2, b2, scale3, b3, out)
Definition mathlib.h:117
void Matrix4x4_OriginFromMatrix(const matrix4x4_t *in, float *out)
Definition matrixlib.c:1792
#define PRVM_EDICT_NUM(n)
Definition progsvm.h:867
#define PRVM_clientedictvector(ed, fieldname)
Definition progsvm.h:185
#define MAX_EDICTS
max number of objects in game world at once (32768 protocol limit)
Definition qdefs.h:105
#define NULL
Definition qtypes.h:12
qbool free
true if this edict is unused
Definition progsvm.h:93

References CL_GetModelFromEdict(), CL_GetTagMatrix(), CLVM_prog, entnum, prvm_edict_t::free, Matrix4x4_OriginFromMatrix(), MAX_EDICTS, mod(), NULL, origin, PRVM_clientedictvector, PRVM_EDICT_NUM, r, VectorCopy, and VectorMAMAM.

Referenced by SND_Spatialize_WithSfx(), and VM_CL_sound().

◆ CL_VM_GetViewEntity()

◆ CL_VM_Init()

void CL_VM_Init ( void )

Definition at line 980 of file csprogs.c.

981{
982 prvm_prog_t *prog = CLVM_prog;
983 const char* csprogsfn = NULL;
984 unsigned char *csprogsdata = NULL;
985 fs_offset_t csprogsdatasize = 0;
986 int csprogsdatacrc, requiredcrc;
987 int requiredsize;
988 char vabuf[1024];
989
990 // reset csqc_progcrc after reading it, so that changing servers doesn't
991 // expect csqc on the next server
992 requiredcrc = csqc_progcrc.integer;
993 requiredsize = csqc_progsize.integer;
996
997 // if the server is not requesting a csprogs, then we're done here
998 if (requiredcrc < 0)
999 return;
1000
1001 // see if the requested csprogs.dat file matches the requested crc
1003 {
1004 csprogsfn = va(vabuf, sizeof(vabuf), "dlcache/%s.%i.%i", csqc_progname.string, requiredsize, requiredcrc);
1005 if(cls.caughtcsprogsdata && cls.caughtcsprogsdatasize == requiredsize && CRC_Block(cls.caughtcsprogsdata, (size_t)cls.caughtcsprogsdatasize) == requiredcrc)
1006 {
1007 Con_DPrintf("Using buffered \"%s\"\n", csprogsfn);
1008 csprogsdata = cls.caughtcsprogsdata;
1009 csprogsdatasize = cls.caughtcsprogsdatasize;
1012 }
1013 else
1014 {
1015 Con_DPrintf("Not using buffered \"%s\" (buffered: %p, %d)\n", csprogsfn, (void *)cls.caughtcsprogsdata, (int) cls.caughtcsprogsdatasize);
1016 csprogsdata = FS_LoadFile(csprogsfn, tempmempool, true, &csprogsdatasize);
1017 }
1018 }
1019 if (!csprogsdata)
1020 {
1021 csprogsfn = csqc_progname.string;
1022 csprogsdata = FS_LoadFile(csprogsfn, tempmempool, true, &csprogsdatasize);
1023 }
1024 if (csprogsdata)
1025 {
1026 csprogsdatacrc = CRC_Block(csprogsdata, (size_t)csprogsdatasize);
1027 if (csprogsdatacrc != requiredcrc || csprogsdatasize != requiredsize)
1028 {
1029 if (cls.demoplayback)
1030 {
1031 Con_Printf(CON_WARN "Warning: Your %s is not the same version as the demo was recorded with (CRC/size are %i/%i but should be %i/%i)\n", csqc_progname.string, csprogsdatacrc, (int)csprogsdatasize, requiredcrc, requiredsize);
1032 // Mem_Free(csprogsdata);
1033 // return;
1034 // We WANT to continue here, and play the demo with different csprogs!
1035 // After all, this is just a warning. Sure things may go wrong from here.
1036 }
1037 else
1038 {
1039 Mem_Free(csprogsdata);
1040 CL_DisconnectEx(false, "Your %s is not the same version as the server (CRC is %i/%i but should be %i/%i)\n", csqc_progname.string, csprogsdatacrc, (int)csprogsdatasize, requiredcrc, requiredsize);
1041 return;
1042 }
1043 }
1044 }
1045 else
1046 {
1047 if (requiredcrc >= 0)
1048 CL_DisconnectEx(false, CON_ERROR "CL_VM_Init: %s requires CSQC, but \"%s\" wasn't found\n", cls.demoplayback ? "demo" : "server", csqc_progname.string);
1049 return;
1050 }
1051
1053
1054 // allocate the mempools
1056 prog->edictprivate_size = 0; // no private struct used
1057 prog->name = "client";
1058 prog->num_edicts = 1;
1059 prog->max_edicts = 512;
1061 prog->reserved_edicts = 0;
1063 // TODO: add a shared extension string #define and add real support for csqc extension strings [12/5/2007 Black]
1065 prog->builtins = vm_cl_builtins;
1067
1068 // all callbacks must be defined (pointers are not checked before calling)
1075 prog->init_cmd = CLVM_init_cmd;
1076 prog->reset_cmd = CLVM_reset_cmd;
1077 prog->error_cmd = Host_Error;
1079
1080 PRVM_Prog_Load(prog, csprogsfn, csprogsdata, csprogsdatasize, CL_CheckRequiredFuncs, CL_REQFIELDS, cl_reqfields, CL_REQGLOBALS, cl_reqglobals);
1081
1082 if (!prog->loaded)
1083 {
1084 Mem_Free(csprogsdata);
1085 Host_Error("CSQC %s failed to load\n", csprogsfn);
1086 }
1087
1088 if(cls.demorecording)
1089 {
1090 if(cls.demo_lastcsprogssize != csprogsdatasize || cls.demo_lastcsprogscrc != csprogsdatacrc)
1091 {
1092 int i;
1093 static char buf[NET_MAXMESSAGE];
1094 sizebuf_t sb;
1095 unsigned char *demobuf; fs_offset_t demofilesize;
1096
1097 sb.data = (unsigned char *) buf;
1098 sb.maxsize = sizeof(buf);
1099 i = 0;
1100
1101 CL_CutDemo(&demobuf, &demofilesize);
1102 while(MakeDownloadPacket(csqc_progname.string, csprogsdata, (size_t)csprogsdatasize, csprogsdatacrc, i++, &sb, cls.protocol))
1104 CL_PasteDemo(&demobuf, &demofilesize);
1105
1106 cls.demo_lastcsprogssize = csprogsdatasize;
1107 cls.demo_lastcsprogscrc = csprogsdatacrc;
1108 }
1109 }
1110 Mem_Free(csprogsdata);
1111
1112 // check if OP_STATE animation is possible in this dat file
1113 if (prog->fieldoffsets.nextthink >= 0 && prog->fieldoffsets.frame >= 0 && prog->fieldoffsets.think >= 0 && prog->globaloffsets.self >= 0)
1114 prog->flag |= PRVM_OP_STATE;
1115
1116 // set time
1119
1123
1124 // set map description (use world entity 0)
1133
1134 // call the prog init if it exists
1136 {
1137 PRVM_G_FLOAT(OFS_PARM0) = 1.0f; // CSQC_SIMPLE engines always pass 0, FTE always passes 1
1138 // always include "DarkPlaces" so it can be recognised when gamename doesn't include it
1139 PRVM_G_INT(OFS_PARM1) = PRVM_SetEngineString(prog, va(vabuf, sizeof(vabuf), "DarkPlaces %s", gamename));
1140 PRVM_G_FLOAT(OFS_PARM2) = 1.0f; // TODO DP versions...
1141 prog->ExecuteProgram(prog, PRVM_clientfunction(CSQC_Init), "QC function CSQC_Init is missing");
1142 }
1143
1144 // Once CSQC_Init was called, we consider csqc code fully initialized.
1145 prog->inittime = host.realtime;
1146
1149
1150 // Update Coop and Deathmatch Globals (at this point the client knows them from ServerInfo)
1152}
void CL_PasteDemo(unsigned char **buf, fs_offset_t *filesize)
Definition cl_demo.c:160
void CL_CutDemo(unsigned char **buf, fs_offset_t *filesize)
Definition cl_demo.c:137
void CL_WriteDemoMessage(sizebuf_t *message)
Definition cl_demo.c:110
void CL_DisconnectEx(qbool kicked, const char *fmt,...)
Definition cl_main.c:370
cvar_t csqc_progcrc
Definition cl_main.c:36
cvar_t csqc_progsize
Definition cl_main.c:37
cvar_t csqc_progname
Definition cl_main.c:35
client_static_t cls
Definition cl_main.c:116
void CLVM_init_cmd(prvm_prog_t *prog)
Definition clvm_cmds.c:5656
prvm_builtin_t vm_cl_builtins[]
Definition clvm_cmds.c:5003
void CLVM_reset_cmd(prvm_prog_t *prog)
Definition clvm_cmds.c:5663
const int vm_cl_numbuiltins
Definition clvm_cmds.c:5654
cmd_state_t * cmd_local
command interpreter for local commands injected by SVQC, CSQC, MQC, server or client engine code uses...
Definition cmd.c:25
unsigned short CRC_Block(const unsigned char *data, size_t size)
Definition com_crc16.c:75
const char * gamename
Definition com_game.c:27
char * va(char *buf, size_t buflen, const char *format,...)
Definition common.c:972
void Con_DPrintf(const char *fmt,...)
A Con_Printf that only shows up if the "developer" cvar is set.
Definition console.c:1544
void Con_Printf(const char *fmt,...)
Prints to all appropriate console targets.
Definition console.c:1514
#define CON_WARN
Definition console.h:101
#define CON_ERROR
Definition console.h:102
prvm_required_field_t cl_reqglobals[]
Definition csprogs.c:145
qbool MakeDownloadPacket(const char *filename, unsigned char *data, size_t len, int crc, int cnt, sizebuf_t *buf, int protocol)
Definition csprogs.c:940
cvar_t csqc_usedemoprogs
Definition cl_main.c:38
static qbool CLVM_load_edict(prvm_prog_t *prog, prvm_edict_t *ent)
Definition csprogs.c:933
static void CLVM_init_edict(prvm_prog_t *prog, prvm_edict_t *e)
Definition csprogs.c:884
static void CL_VM_UpdateCoopDeathmatchGlobals(int gametype)
Definition csprogs.c:747
static void CLVM_begin_increase_edicts(prvm_prog_t *prog)
Definition csprogs.c:867
static void CL_CheckRequiredFuncs(prvm_prog_t *prog, const char *filename)
Previous DP versions declined to load csprogs if it lacked any of: CSQC_Init, CSQC_InputEvent,...
Definition csprogs.c:54
static void CLVM_end_increase_edicts(prvm_prog_t *prog)
Definition csprogs.c:873
static void CLVM_free_edict(prvm_prog_t *prog, prvm_edict_t *ed)
Definition csprogs.c:895
static void CLVM_count_edicts(prvm_prog_t *prog)
Definition csprogs.c:909
#define CL_REQGLOBALS
Definition csprogs.c:143
prvm_required_field_t cl_reqfields[]
Definition csprogs.c:66
#define CL_REQFIELDS
Definition csprogs.c:64
#define CL_MAX_EDICTS
Definition csprogs.h:25
float modelindex
string mapname
float player_localnum
vector mins
vector maxs
float player_localentnum
vector absmax
void CSQC_Init(float apilevel, string enginename, float engineversion)
string model
float solid
vector absmin
void Cvar_SetValueQuick(cvar_t *var, float value)
Definition cvar.c:473
unsigned char * FS_LoadFile(const char *path, mempool_t *pool, qbool quiet, fs_offset_t *filesizepointer)
Definition fs.c:3540
int64_t fs_offset_t
Definition fs.h:37
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition glquake.h:657
host_static_t host
Definition host.c:41
void Host_Error(const char *error,...)
Definition host.c:85
string message
Definition progsdefs.qc:205
#define PRVM_OP_STATE
Definition progsvm.h:238
void PRVM_Prog_Load(prvm_prog_t *prog, const char *filename, unsigned char *data, fs_offset_t size, void CheckRequiredFuncs(prvm_prog_t *prog, const char *filename), int numrequiredfields, prvm_required_field_t *required_field, int numrequiredglobals, prvm_required_field_t *required_global)
void PRVM_Prog_Init(prvm_prog_t *prog, struct cmd_state_s *cmd)
Initializing a vm: Call InitProg with the num Set up the fields marked with [INIT] in the prog struct...
int PRVM_SetEngineString(prvm_prog_t *prog, const char *s)
const char * vm_sv_extensions[]
client also uses this
Definition svvm_cmds.c:11
#define PRVM_clientedictstring(ed, fieldname)
Definition progsvm.h:186
void CLVM_ExecuteProgram(prvm_prog_t *prog, func_t fnum, const char *errormessage)
Definition prvm_exec.c:1086
#define PRVM_clientedictfloat(ed, fieldname)
Definition progsvm.h:184
#define PRVM_clientglobalstring(fieldname)
Definition progsvm.h:191
int i
#define NET_MAXMESSAGE
max reliable packet size (sent as multiple fragments of MAX_PACKETFRAGMENT)
Definition qdefs.h:103
#define SOLID_BSP
bsp clip, touch on edge, block
Definition server.h:336
int realplayerentity
Definition client.h:905
char worldbasename[MAX_QPATH]
Definition client.h:898
struct model_s * worldmodel
Definition client.h:934
world_t world
Definition client.h:1122
char worldmessage[MAX_QPATH]
Definition client.h:896
csqc_vidvars_t csqc_vidvars
Definition client.h:834
unsigned char * caughtcsprogsdata
Definition client.h:688
qbool demoplayback
Definition client.h:587
int demo_lastcsprogscrc
Definition client.h:586
fs_offset_t demo_lastcsprogssize
Definition client.h:585
qbool demorecording
Definition client.h:584
fs_offset_t caughtcsprogsdatasize
Definition client.h:689
protocolversion_t protocol
Definition client.h:617
qbool drawenginesbar
Definition client.h:707
qbool drawcrosshair
Definition client.h:708
const char * string
Definition cvar.h:71
double realtime
the accumulated mainloop time since application started (with filtering), without any slowmo or clamp...
Definition host.h:46
void(* reset_cmd)(struct prvm_prog_s *prog)
[INIT] used by PRVM_ResetProg
Definition progsvm.h:745
int numbuiltins
Definition progsvm.h:605
prvm_builtin_t * builtins
Definition progsvm.h:604
int edictprivate_size
size of the engine private struct
Definition progsvm.h:689
void(* begin_increase_edicts)(struct prvm_prog_s *prog)
[INIT] used by PRVM_MEM_Increase_Edicts
Definition progsvm.h:734
void(* free_edict)(struct prvm_prog_s *prog, prvm_edict_t *ed)
[INIT] used by PRVM_ED_Free
Definition progsvm.h:738
int num_edicts
copies of some vars that were former read from sv
Definition progsvm.h:671
prvm_prog_fieldoffsets_t fieldoffsets
Definition progsvm.h:691
void(* count_edicts)(struct prvm_prog_s *prog)
[INIT] used by PRVM_ED_Count_f
Definition progsvm.h:740
double inittime
system time when QC initialization code finished (any entity created before is not a leak)
Definition progsvm.h:539
int limit_edicts
used instead of the constant MAX_EDICTS
Definition progsvm.h:675
prvm_prog_globaloffsets_t globaloffsets
Definition progsvm.h:692
prvm_edict_t * edicts
Definition progsvm.h:680
void(* init_edict)(struct prvm_prog_s *prog, prvm_edict_t *edict)
[INIT] used by PRVM_ED_ClearEdict
Definition progsvm.h:737
mempool_t * progs_mempool
all memory allocations related to this vm_prog (code, edicts, strings)
Definition progsvm.h:602
int max_edicts
number of edicts for which space has been (should be) allocated
Definition progsvm.h:673
qbool(* load_edict)(struct prvm_prog_s *prog, prvm_edict_t *ent)
[INIT] used by PRVM_ED_LoadFromFile
Definition progsvm.h:742
void(* init_cmd)(struct prvm_prog_s *prog)
[INIT] used by PRVM_InitProg
Definition progsvm.h:744
const char ** extensionstring
Definition progsvm.h:705
void(* end_increase_edicts)(struct prvm_prog_s *prog)
[INIT]
Definition progsvm.h:735
int reserved_edicts
number of reserved edicts (allocated from 1)
Definition progsvm.h:678
unsigned char * data
Definition common.h:52
int maxsize
Definition common.h:53
vec3_t maxs
Definition world.h:72
vec3_t mins
Definition world.h:71
mempool_t * tempmempool
Definition zone.c:794
#define Mem_Free(mem)
Definition zone.h:96
#define Mem_AllocPool(name, flags, parent)
Definition zone.h:104

References absmax, absmin, prvm_prog_t::begin_increase_edicts, buf, prvm_prog_t::builtins, client_static_t::caughtcsprogsdata, client_static_t::caughtcsprogsdatasize, cl, CL_CheckRequiredFuncs(), CL_CutDemo(), CL_DisconnectEx(), CL_MAX_EDICTS, CL_PasteDemo(), CL_REQFIELDS, cl_reqfields, CL_REQGLOBALS, cl_reqglobals, CL_VM_UpdateCoopDeathmatchGlobals(), CL_WriteDemoMessage(), cls, CLVM_begin_increase_edicts(), CLVM_count_edicts(), CLVM_end_increase_edicts(), CLVM_ExecuteProgram(), CLVM_free_edict(), CLVM_init_cmd(), CLVM_init_edict(), CLVM_load_edict(), CLVM_prog, CLVM_reset_cmd(), cmd_local, Con_DPrintf(), CON_ERROR, Con_Printf(), CON_WARN, prvm_prog_t::count_edicts, CRC_Block(), CSQC_Init(), csqc_progcrc, csqc_progname, csqc_progsize, csqc_usedemoprogs, client_state_t::csqc_vidvars, Cvar_SetValueQuick(), sizebuf_t::data, client_static_t::demo_lastcsprogscrc, client_static_t::demo_lastcsprogssize, client_static_t::demoplayback, client_static_t::demorecording, csqc_vidvars_t::drawcrosshair, csqc_vidvars_t::drawenginesbar, prvm_prog_t::edictprivate_size, prvm_prog_t::edicts, prvm_prog_t::end_increase_edicts, prvm_prog_t::error_cmd, prvm_prog_t::ExecuteProgram, prvm_prog_t::extensionstring, prvm_prog_t::fieldoffsets, prvm_prog_t::flag, prvm_prog_t::free_edict, FS_LoadFile(), gamename, client_state_t::gametype, prvm_prog_t::globaloffsets, host, Host_Error(), i, prvm_prog_t::init_cmd, prvm_prog_t::init_edict, prvm_prog_t::inittime, cvar_t::integer, prvm_prog_t::limit_edicts, prvm_prog_t::load_edict, prvm_prog_t::loaded, MakeDownloadPacket(), mapname, prvm_prog_t::max_edicts, maxs, world_t::maxs, sizebuf_t::maxsize, Mem_AllocPool, Mem_Free, message, mins, world_t::mins, model, modelindex, prvm_prog_t::name, NET_MAXMESSAGE, NULL, prvm_prog_t::num_edicts, prvm_prog_t::numbuiltins, OFS_PARM0, OFS_PARM1, OFS_PARM2, player_localentnum, player_localnum, prvm_prog_t::progs_mempool, client_static_t::protocol, PRVM_clientedictfloat, PRVM_clientedictstring, PRVM_clientedictvector, PRVM_clientfunction, PRVM_clientglobaledict, PRVM_clientglobalfloat, PRVM_clientglobalstring, PRVM_G_FLOAT, PRVM_G_INT, PRVM_OP_STATE, PRVM_Prog_Init(), PRVM_Prog_Load(), PRVM_SetEngineString(), client_state_t::realplayerentity, host_static_t::realtime, prvm_prog_t::reserved_edicts, prvm_prog_t::reset_cmd, self, solid, SOLID_BSP, cvar_t::string, tempmempool, client_state_t::time, time, va(), VectorCopy, client_state_t::viewentity, vm_cl_builtins, vm_cl_numbuiltins, vm_sv_extensions, client_state_t::world, client_state_t::worldbasename, client_state_t::worldmessage, and client_state_t::worldmodel.

Referenced by CL_SetupWorldModel().

◆ CL_VM_InputEvent()

qbool CL_VM_InputEvent ( int eventtype,
float x,
float y )

Definition at line 459 of file csprogs.c.

460{
461 prvm_prog_t *prog = CLVM_prog;
462 qbool r;
463
464 if(!prog->loaded)
465 return false;
466
468 r = false;
469 else
470 {
473 PRVM_G_FLOAT(OFS_PARM0) = eventtype;
474 PRVM_G_FLOAT(OFS_PARM1) = x; // key or x
475 PRVM_G_FLOAT(OFS_PARM2) = y; // ascii or y
476 prog->ExecuteProgram(prog, PRVM_clientfunction(CSQC_InputEvent), "QC function CSQC_InputEvent is missing");
477 r = CSQC_RETURNVAL != 0;
478 }
479 return r;
480}
float CSQC_InputEvent(float evtype, float scanx, float chary)
GLint GLenum GLint GLint y
Definition glquake.h:651

References cl, CLVM_prog, CSQC_InputEvent(), CSQC_RETURNVAL, client_state_t::csqc_server2csqcentitynumber, prvm_prog_t::ExecuteProgram, prvm_prog_t::loaded, OFS_PARM0, OFS_PARM1, OFS_PARM2, client_state_t::playerentity, PRVM_clientfunction, PRVM_clientglobaledict, PRVM_clientglobalfloat, PRVM_G_FLOAT, r, self, client_state_t::time, time, x, and y.

Referenced by CL_Input(), and Key_Event().

◆ CL_VM_Parse_CenterPrint()

void CL_VM_Parse_CenterPrint ( const char * msg,
size_t msg_len )

Definition at line 689 of file csprogs.c.

690{
691 prvm_prog_t *prog = CLVM_prog;
692 int restorevm_tempstringsbuf_cursize;
693
694 if(prog->loaded && PRVM_clientfunction(CSQC_Parse_CenterPrint))
695 {
698 restorevm_tempstringsbuf_cursize = prog->tempstringsbuf.cursize;
699 PRVM_G_INT(OFS_PARM0) = PRVM_SetTempString(prog, msg, msg_len);
700 prog->ExecuteProgram(prog, PRVM_clientfunction(CSQC_Parse_CenterPrint), "QC function CSQC_Parse_CenterPrint is missing");
701 prog->tempstringsbuf.cursize = restorevm_tempstringsbuf_cursize;
702 }
703 else
704 SCR_CenterPrint(msg);
705}
void SCR_CenterPrint(const char *str)
Definition cl_screen.c:144
sizebuf_t tempstringsbuf
buffer for storing all tempstrings created during one invocation of ExecuteProgram
Definition progsvm.h:644
int cursize
Definition common.h:54

References cl, CLVM_prog, client_state_t::csqc_server2csqcentitynumber, sizebuf_t::cursize, prvm_prog_t::ExecuteProgram, prvm_prog_t::loaded, OFS_PARM0, client_state_t::playerentity, PRVM_clientfunction, PRVM_clientglobaledict, PRVM_clientglobalfloat, PRVM_G_INT, PRVM_SetTempString(), SCR_CenterPrint(), self, prvm_prog_t::tempstringsbuf, client_state_t::time, and time.

Referenced by CL_ParseServerMessage().

◆ CL_VM_Parse_Print()

static void CL_VM_Parse_Print ( const char * msg,
size_t msg_len )
static

Definition at line 644 of file csprogs.c.

645{
646 prvm_prog_t *prog = CLVM_prog;
647 int restorevm_tempstringsbuf_cursize;
650 restorevm_tempstringsbuf_cursize = prog->tempstringsbuf.cursize;
651 PRVM_G_INT(OFS_PARM0) = PRVM_SetTempString(prog, msg, msg_len);
652 prog->ExecuteProgram(prog, PRVM_clientfunction(CSQC_Parse_Print), "QC function CSQC_Parse_Print is missing");
653 prog->tempstringsbuf.cursize = restorevm_tempstringsbuf_cursize;
654}

References cl, CLVM_prog, client_state_t::csqc_server2csqcentitynumber, sizebuf_t::cursize, prvm_prog_t::ExecuteProgram, OFS_PARM0, client_state_t::playerentity, PRVM_clientfunction, PRVM_clientglobaledict, PRVM_clientglobalfloat, PRVM_G_INT, PRVM_SetTempString(), self, prvm_prog_t::tempstringsbuf, client_state_t::time, and time.

Referenced by CSQC_AddPrintText().

◆ CL_VM_Parse_StuffCmd()

void CL_VM_Parse_StuffCmd ( const char * msg,
size_t msg_len )

Definition at line 604 of file csprogs.c.

605{
606 prvm_prog_t *prog = CLVM_prog;
607 int restorevm_tempstringsbuf_cursize;
608
609 if(msg[0] == 'c')
610 if(msg[1] == 's')
611 if(msg[2] == 'q')
612 if(msg[3] == 'c')
613 {
614 // if this is setting a csqc variable, deprotect csqc_progcrc
615 // temporarily so that it can be set by the cvar command,
616 // and then reprotect it afterwards
617 int crcflags = csqc_progcrc.flags;
618 csqc_progcrc.flags &= ~CF_READONLY;
619 csqc_progsize.flags &= ~CF_READONLY;
620 Cmd_ExecuteString(cmd_local, msg, msg_len, src_local, true);
622 return;
623 }
624
625 if(!prog->loaded)
626 {
628 return;
629 }
630
631 if(PRVM_clientfunction(CSQC_Parse_StuffCmd))
632 {
635 restorevm_tempstringsbuf_cursize = prog->tempstringsbuf.cursize;
636 PRVM_G_INT(OFS_PARM0) = PRVM_SetTempString(prog, msg, msg_len);
637 prog->ExecuteProgram(prog, PRVM_clientfunction(CSQC_Parse_StuffCmd), "QC function CSQC_Parse_StuffCmd is missing");
638 prog->tempstringsbuf.cursize = restorevm_tempstringsbuf_cursize;
639 }
640 else
642}
void Cbuf_AddText(cmd_state_t *cmd, const char *text)
Definition cmd.c:264
void Cmd_ExecuteString(cmd_state_t *cmd, const char *text, size_t textlen, cmd_source_t src, qbool lockmutex)
Parses a single line of text into arguments and tries to execute it.
Definition cmd.c:2068
@ src_local
from the command buffer
Definition cmd.h:75
unsigned flags
Definition cvar.h:67

References Cbuf_AddText(), cl, CLVM_prog, Cmd_ExecuteString(), cmd_local, csqc_progcrc, csqc_progsize, client_state_t::csqc_server2csqcentitynumber, sizebuf_t::cursize, prvm_prog_t::ExecuteProgram, cvar_t::flags, prvm_prog_t::loaded, OFS_PARM0, client_state_t::playerentity, PRVM_clientfunction, PRVM_clientglobaledict, PRVM_clientglobalfloat, PRVM_G_INT, PRVM_SetTempString(), self, src_local, prvm_prog_t::tempstringsbuf, client_state_t::time, and time.

Referenced by CL_ParseServerMessage().

◆ CL_VM_Parse_TempEntity()

qbool CL_VM_Parse_TempEntity ( void )

Definition at line 579 of file csprogs.c.

580{
581 prvm_prog_t *prog = CLVM_prog;
582 int t;
583 qbool r = false;
584
585 if(!prog->loaded)
586 return false;
587
588 if(PRVM_clientfunction(CSQC_Parse_TempEntity))
589 {
593 prog->ExecuteProgram(prog, PRVM_clientfunction(CSQC_Parse_TempEntity), "QC function CSQC_Parse_TempEntity is missing");
594 r = CSQC_RETURNVAL != 0;
595 if(!r)
596 {
598 cl_message.badread = false;
599 }
600 }
601 return r;
602}
sizebuf_t cl_message
Definition netconn.c:71
qbool badread
Definition common.h:56
int readcount
Definition common.h:55

References sizebuf_t::badread, cl, cl_message, CLVM_prog, CSQC_RETURNVAL, client_state_t::csqc_server2csqcentitynumber, prvm_prog_t::ExecuteProgram, prvm_prog_t::loaded, client_state_t::playerentity, PRVM_clientfunction, PRVM_clientglobaledict, PRVM_clientglobalfloat, r, sizebuf_t::readcount, self, client_state_t::time, and time.

Referenced by CL_ParseServerMessage().

◆ CL_VM_PreventInformationLeaks()

void CL_VM_PreventInformationLeaks ( void )

Definition at line 36 of file csprogs.c.

37{
38 prvm_prog_t *prog = CLVM_prog;
39
40 if(!prog->loaded)
41 return;
42
45}
float trace_networkentity
void VM_ClearTraceGlobals(prvm_prog_t *prog)
Definition prvm_cmds.c:5245

References CLVM_prog, prvm_prog_t::loaded, PRVM_clientglobalfloat, trace_networkentity, and VM_ClearTraceGlobals().

Referenced by CL_Frame().

◆ CL_VM_ShutDown()

void CL_VM_ShutDown ( void )

Definition at line 1154 of file csprogs.c.

1155{
1156 prvm_prog_t *prog = CLVM_prog;
1158
1159 //Cvar_SetValueQuick(&csqc_progcrc, -1);
1160 //Cvar_SetValueQuick(&csqc_progsize, -1);
1161 if (prog->loaded)
1162 {
1166 prog->ExecuteProgram(prog, PRVM_clientfunction(CSQC_Shutdown), "QC function CSQC_Shutdown is missing");
1167 }
1168 PRVM_Prog_Reset(prog);
1169 Con_DPrint("CSQC ^1unloaded\n");
1170}
void Cmd_ClearCSQCCommands(cmd_state_t *cmd)
Definition cmd.c:1981
void Con_DPrint(const char *msg)
A Con_Print that only shows up if the "developer" cvar is set.
Definition console.c:1531
void CSQC_Shutdown()
void PRVM_Prog_Reset(prvm_prog_t *prog)

References cl, CLVM_prog, Cmd_ClearCSQCCommands(), cmd_local, Con_DPrint(), CSQC_Shutdown(), prvm_prog_t::ExecuteProgram, prvm_prog_t::loaded, PRVM_clientfunction, PRVM_clientglobaledict, PRVM_clientglobalfloat, PRVM_Prog_Reset(), self, client_state_t::time, and time.

Referenced by CL_ClearState(), and CL_DisconnectEx().

◆ CL_VM_TransformView()

qbool CL_VM_TransformView ( int entnum,
matrix4x4_t * viewmatrix,
mplane_t * clipplane,
vec3_t visorigin )

Definition at line 1196 of file csprogs.c.

1197{
1198 prvm_prog_t *prog = CLVM_prog;
1199 qbool ret = false;
1200 prvm_edict_t *ed;
1201 vec3_t forward, left, up, origin, ang;
1202 matrix4x4_t mat, matq;
1203
1204 ed = PRVM_EDICT_NUM(entnum);
1205 // camera:
1206 // camera_transform
1207 if(PRVM_clientedictfunction(ed, camera_transform))
1208 {
1209 ret = true;
1210 if(viewmatrix && clipplane && visorigin)
1211 {
1212 Matrix4x4_ToVectors(viewmatrix, forward, left, up, origin);
1213 AnglesFromVectors(ang, forward, up, false);
1222 prog->ExecuteProgram(prog, PRVM_clientedictfunction(ed, camera_transform), "QC function e.camera_transform is missing");
1228 Matrix4x4_Invert_Full(&mat, viewmatrix);
1229 Matrix4x4_FromVectors(viewmatrix, forward, left, up, origin);
1230 Matrix4x4_Concat(&matq, viewmatrix, &mat);
1231 Matrix4x4_TransformPositivePlane(&matq, clipplane->normal[0], clipplane->normal[1], clipplane->normal[2], clipplane->dist, clipplane->normal_and_dist);
1232 }
1233 }
1234
1235 return ret;
1236}
vector v_up
vector v_right
vector trace_endpos
vector v_forward
void AnglesFromVectors(vec3_t angles, const vec3_t forward, const vec3_t up, qbool flippitch)
LadyHavoc: calculates pitch/yaw/roll angles from forward and up vectors.
Definition mathlib.c:650
#define VectorScale(in, scale, out)
Definition mathlib.h:111
void Matrix4x4_Concat(matrix4x4_t *out, const matrix4x4_t *in1, const matrix4x4_t *in2)
Definition matrixlib.c:83
void Matrix4x4_TransformPositivePlane(const matrix4x4_t *in, float x, float y, float z, float d, float *o)
Definition matrixlib.c:1699
int Matrix4x4_Invert_Full(matrix4x4_t *out, const matrix4x4_t *in1)
Definition matrixlib.c:145
void Matrix4x4_FromVectors(matrix4x4_t *out, const float vx[3], const float vy[3], const float vz[3], const float t[3])
Definition matrixlib.c:970
void Matrix4x4_ToVectors(const matrix4x4_t *in, float vx[3], float vy[3], float vz[3], float t[3])
Definition matrixlib.c:939
#define OFS_RETURN
Definition pr_comp.h:33
#define PRVM_clientedictfunction(ed, fieldname)
Definition progsvm.h:188
#define PRVM_clientglobalvector(fieldname)
Definition progsvm.h:190
vec_t vec3_t[3]
Definition qtypes.h:71
return ret
vec3_t normal
Definition model_brush.h:59
vec_t dist
Definition model_brush.h:60
vec4_t normal_and_dist
Definition model_brush.h:62
static vec3_t forward
Definition sv_user.c:305
static vec3_t up
Definition sv_user.c:305

References AnglesFromVectors(), cl, CLVM_prog, mplane_t::dist, entnum, prvm_prog_t::ExecuteProgram, forward, Matrix4x4_Concat(), Matrix4x4_FromVectors(), Matrix4x4_Invert_Full(), Matrix4x4_ToVectors(), Matrix4x4_TransformPositivePlane(), mplane_t::normal, mplane_t::normal_and_dist, OFS_PARM0, OFS_PARM1, OFS_RETURN, origin, PRVM_clientedictfunction, PRVM_clientglobaledict, PRVM_clientglobalfloat, PRVM_clientglobalvector, PRVM_EDICT_NUM, PRVM_G_VECTOR, ret, self, client_state_t::time, time, trace_endpos, up, v_forward, v_right, v_up, VectorCopy, and VectorScale.

Referenced by R_Water_ProcessPlanes().

◆ CL_VM_UpdateCoopDeathmatchGlobals()

static void CL_VM_UpdateCoopDeathmatchGlobals ( int gametype)
static

Definition at line 747 of file csprogs.c.

748{
749 prvm_prog_t *prog = CLVM_prog;
750 // Avoid global names for clean(er) coding
751 int localcoop;
752 int localdeathmatch;
753
754 if(prog->loaded)
755 {
756 if(gametype == GAME_COOP)
757 {
758 localcoop = 1;
759 localdeathmatch = 0;
760 }
761 else if(gametype == GAME_DEATHMATCH)
762 {
763 localcoop = 0;
764 localdeathmatch = 1;
765 }
766 else
767 {
768 // How did the ServerInfo send an unknown gametype?
769 // Better just assign the globals as 0...
770 localcoop = 0;
771 localdeathmatch = 0;
772 }
773 PRVM_clientglobalfloat(coop) = localcoop;
774 PRVM_clientglobalfloat(deathmatch) = localdeathmatch;
775 }
776}
float deathmatch
Definition progsdefs.qc:29
float coop
Definition progsdefs.qc:30
#define GAME_COOP
Definition protocol.h:203
#define GAME_DEATHMATCH
Definition protocol.h:204

References CLVM_prog, coop, deathmatch, GAME_COOP, GAME_DEATHMATCH, prvm_prog_t::loaded, and PRVM_clientglobalfloat.

Referenced by CL_VM_Init().

◆ CL_VM_UpdateDmgGlobals()

void CL_VM_UpdateDmgGlobals ( int dmg_take,
int dmg_save,
vec3_t dmg_origin )

Definition at line 222 of file csprogs.c.

223{
224 prvm_prog_t *prog = CLVM_prog;
225
226 if(prog->loaded)
227 {
230 VectorCopy(dmg_origin, PRVM_clientglobalvector(dmg_origin));
231 }
232}
float dmg_take
Definition progsdefs.qc:198
float dmg_save
Definition progsdefs.qc:199

References CLVM_prog, dmg_save, dmg_take, prvm_prog_t::loaded, PRVM_clientglobalfloat, PRVM_clientglobalvector, and VectorCopy.

Referenced by CL_VM_UpdateView(), and V_ParseDamage().

◆ CL_VM_UpdateIntermissionState()

void CL_VM_UpdateIntermissionState ( int intermission)

Definition at line 707 of file csprogs.c.

708{
709 prvm_prog_t *prog = CLVM_prog;
710
711 if(prog->loaded)
713}
float intermission

References CLVM_prog, intermission, prvm_prog_t::loaded, and PRVM_clientglobalfloat.

Referenced by CL_ParseServerMessage().

◆ CL_VM_UpdateShowingScoresState()

void CL_VM_UpdateShowingScoresState ( int showingscores)

Definition at line 714 of file csprogs.c.

715{
716 prvm_prog_t *prog = CLVM_prog;
717
718 if(prog->loaded)
719 PRVM_clientglobalfloat(sb_showscores) = showingscores;
720}

References CLVM_prog, prvm_prog_t::loaded, PRVM_clientglobalfloat, and sb_showscores.

Referenced by Sbar_DontShowScores_f(), and Sbar_ShowScores_f().

◆ CL_VM_UpdateView()

qbool CL_VM_UpdateView ( double frametime)

Definition at line 484 of file csprogs.c.

485{
486 prvm_prog_t *prog = CLVM_prog;
487 vec3_t emptyvector;
488 emptyvector[0] = 0;
489 emptyvector[1] = 0;
490 emptyvector[2] = 0;
491// vec3_t oldangles;
492
493 if(!prog->loaded)
494 return false;
495
496 R_TimeReport("pre-UpdateView");
497
500 //VectorCopy(cl.viewangles, oldangles);
504 // clear renderable entity and light lists to prevent crashes if the
505 // CSQC_UpdateView function does not call R_ClearScene as it should
508 // polygonbegin without draw2d arg has to guess
509 prog->polygonbegin_guess2d = false;
510 // free memory for resources that are no longer referenced
512 // pass in width and height and menu/focus state as parameters (EXT_CSQC_1)
514 {
517 }
518 else
519 {
522 }
523 /*
524 * This should be fine for now but FTEQW uses flags for keydest
525 * and checks that an array called "eyeoffset" is 0
526 *
527 * Just a note in case there's compatibility problems later
528 */
530 prog->ExecuteProgram(prog, PRVM_clientfunction(CSQC_UpdateView), "QC function CSQC_UpdateView is missing");
531 //VectorCopy(oldangles, cl.viewangles);
532 // Dresk : Reset Dmg Globals Here
533 CL_VM_UpdateDmgGlobals(0, 0, emptyvector);
535 R_RenderView_UpdateViewVectors(); // we have to do this, as we undid the scene render doing this for us
536
537 R_TimeReport("UpdateView");
538 return true;
539}
cvar_t csqc_lowres
Definition cl_main.c:40
r_refdef_view_t csqc_main_r_refdef_view
Definition clvm_cmds.c:26
r_refdef_view_t csqc_original_r_refdef_view
Definition clvm_cmds.c:25
void CL_VM_UpdateDmgGlobals(int dmg_take, int dmg_save, vec3_t dmg_origin)
Definition csprogs.c:222
void CSQC_UpdateView(float vid_width, float vid_height, float notmenu)
void R_RenderView_UpdateViewVectors(void)
Definition gl_rmain.c:4512
r_refdef_t r_refdef
Definition gl_rmain.c:57
@ key_game
Definition keys.h:372
float value
Definition cvar.h:74
qbool polygonbegin_guess2d
indicates if polygonbegin should be interpreted as 2d (clearscene sets this to false,...
Definition progsvm.h:661
r_refdef_view_t view
Definition render.h:406
r_refdef_scene_t scene
Definition render.h:418
int width
Definition vid.h:60
int height
Definition vid.h:61
viddef_mode_t mode
currently active video mode
Definition vid.h:73
viddef_t vid
global video state
Definition vid_shared.c:64

References cl, CL_VM_UpdateDmgGlobals(), CLVM_prog, csqc_lowres, csqc_main_r_refdef_view, csqc_original_r_refdef_view, client_state_t::csqc_server2csqcentitynumber, CSQC_SetGlobals(), CSQC_UpdateView(), prvm_prog_t::ExecuteProgram, frametime, viddef_mode_t::height, cvar_t::integer, key_dest, key_game, prvm_prog_t::loaded, viddef_t::mode, r_refdef_scene_t::numentities, r_refdef_scene_t::numlights, OFS_PARM0, OFS_PARM1, OFS_PARM2, client_state_t::playerentity, prvm_prog_t::polygonbegin_guess2d, PRVM_clientfunction, PRVM_clientglobaledict, PRVM_clientglobalfloat, PRVM_G_FLOAT, PRVM_GarbageCollection(), r_refdef, R_RenderView_UpdateViewVectors(), R_TimeReport(), r_refdef_t::scene, self, client_state_t::time, time, cvar_t::value, vid, vid_conheight, vid_conwidth, r_refdef_t::view, and viddef_mode_t::width.

Referenced by SCR_DrawScreen().

◆ CLVM_begin_increase_edicts()

static void CLVM_begin_increase_edicts ( prvm_prog_t * prog)
static

Definition at line 867 of file csprogs.c.

868{
869 // links don't survive the transition, so unlink everything
871}
void World_UnlinkAll(world_t *world)
unlinks all entities (used before reallocation of edicts)
Definition world.c:159

References cl, client_state_t::world, and World_UnlinkAll().

Referenced by CL_VM_Init().

◆ CLVM_count_edicts()

static void CLVM_count_edicts ( prvm_prog_t * prog)
static

Definition at line 909 of file csprogs.c.

910{
911 int i;
912 prvm_edict_t *ent;
913 int active = 0, models = 0, solid = 0;
914
915 for (i=0 ; i<prog->num_edicts ; i++)
916 {
917 ent = PRVM_EDICT_NUM(i);
918 if (ent->free)
919 continue;
920 active++;
922 solid++;
924 models++;
925 }
926
927 Con_Printf("num_edicts:%3i\n", prog->num_edicts);
928 Con_Printf("active :%3i\n", active);
929 Con_Printf("view :%3i\n", models);
930 Con_Printf("touch :%3i\n", solid);
931}
static memexpandablearray_t models

References Con_Printf(), prvm_edict_t::free, i, model, models, prvm_prog_t::num_edicts, PRVM_clientedictfloat, PRVM_clientedictstring, PRVM_EDICT_NUM, and solid.

Referenced by CL_VM_Init().

◆ CLVM_end_increase_edicts()

static void CLVM_end_increase_edicts ( prvm_prog_t * prog)
static

Definition at line 873 of file csprogs.c.

874{
875 int i;
876 prvm_edict_t *ent;
877
878 // link every entity except world
879 for (i = 1, ent = prog->edicts;i < prog->num_edicts;i++, ent++)
880 if (!ent->free)
881 CL_LinkEdict(ent);
882}
void CL_LinkEdict(prvm_edict_t *ent)

References CL_LinkEdict(), prvm_prog_t::edicts, prvm_edict_t::free, and i.

Referenced by CL_VM_Init().

◆ CLVM_free_edict()

static void CLVM_free_edict ( prvm_prog_t * prog,
prvm_edict_t * ed )
static

Definition at line 895 of file csprogs.c.

896{
898 R_DecalSystem_Reset(&entrender->decalsystem);
899 memset(entrender, 0, sizeof(*entrender));
901 memset(ed->fields.fp, 0, prog->entityfields * sizeof(prvm_vec_t));
902 VM_RemoveEdictSkeleton(prog, ed);
903#ifdef USEODE
906#endif
907}
void R_DecalSystem_Reset(decalsystem_t *decalsystem)
Definition gl_rmain.c:9134
#define PRVM_NUM_FOR_EDICT(e)
Definition progsvm.h:870
void VM_RemoveEdictSkeleton(prvm_prog_t *prog, prvm_edict_t *ed)
Definition prvm_cmds.c:261
float prvm_vec_t
Definition qtypes.h:55
entity_render_t * csqcrenderentities
Definition client.h:992
decalsystem_t decalsystem
Definition client.h:438
prvm_vec_t * fp
Definition progsvm.h:102
union prvm_edict_t::@30 fields
int entityfields
number of vec_t fields in progs (some variables are 3)
Definition progsvm.h:548
void World_UnlinkEdict(prvm_edict_t *ent)
Definition world.c:178
void World_Physics_RemoveJointFromEntity(world_t *world, struct prvm_edict_s *ed)
void World_Physics_RemoveFromEntity(world_t *world, struct prvm_edict_s *ed)

References cl, client_state_t::csqcrenderentities, entity_render_t::decalsystem, prvm_prog_t::entityfields, prvm_edict_t::fields, prvm_edict_t::fp, PRVM_NUM_FOR_EDICT, R_DecalSystem_Reset(), VM_RemoveEdictSkeleton(), client_state_t::world, World_Physics_RemoveFromEntity(), World_Physics_RemoveJointFromEntity(), and World_UnlinkEdict().

Referenced by CL_VM_Init().

◆ CLVM_init_edict()

static void CLVM_init_edict ( prvm_prog_t * prog,
prvm_edict_t * e )
static

Definition at line 884 of file csprogs.c.

885{
886 int edictnum = PRVM_NUM_FOR_EDICT(e);
887 entity_render_t *entrender;
889 entrender = cl.csqcrenderentities + edictnum;
890 e->priv.server->move = false; // don't move on first frame
891 memset(entrender, 0, sizeof(*entrender));
892 entrender->shadertime = cl.time;
893}
void CL_ExpandCSQCRenderEntities(int num)
Definition cl_main.c:325
double shadertime
Definition client.h:366
union prvm_edict_t::@29 priv
struct edict_engineprivate_s * server
FIXME: this server pointer really means world, not server (it is used by both server qc and client qc...
Definition progsvm.h:106

References cl, CL_ExpandCSQCRenderEntities(), client_state_t::csqcrenderentities, prvm_edict_t::priv, PRVM_NUM_FOR_EDICT, prvm_edict_t::server, entity_render_t::shadertime, and client_state_t::time.

Referenced by CL_VM_Init().

◆ CLVM_load_edict()

static qbool CLVM_load_edict ( prvm_prog_t * prog,
prvm_edict_t * ent )
static

Definition at line 933 of file csprogs.c.

934{
935 return true;
936}

Referenced by CL_VM_Init().

◆ CSQC_AddPrintText()

void CSQC_AddPrintText ( const char * msg,
size_t msg_len )

Definition at line 656 of file csprogs.c.

657{
658 prvm_prog_t *prog = CLVM_prog;
660 size_t writebytes = min(msg_len + 1, MAX_INPUTLINE - cl.csqc_printtextbuf_len);
661
662 if(prog->loaded && PRVM_clientfunction(CSQC_Parse_Print))
663 {
664 if(msg[msg_len - 1] != '\n' && msg[msg_len - 1] != '\r')
665 {
666 if(cl.csqc_printtextbuf_len + msg_len + 1 >= MAX_INPUTLINE)
667 {
669 cl.csqc_printtextbuf[0] = '\0';
671 }
672 else
673 {
674 memcpy(start, msg, writebytes);
675 cl.csqc_printtextbuf_len += msg_len;
676 }
677 return;
678 }
679 memcpy(start, msg, writebytes);
680 cl.csqc_printtextbuf_len += msg_len;
682 cl.csqc_printtextbuf[0] = '\0';
684 }
685 else
686 Con_Print(msg);
687}
void Con_Print(const char *msg)
Prints to all appropriate console targets, and adds timestamps.
Definition console.c:1504
static void CL_VM_Parse_Print(const char *msg, size_t msg_len)
Definition csprogs.c:644
#define min(A, B)
Definition mathlib.h:37
#define MAX_INPUTLINE
maximum size of console commandline, QuakeC strings, and many other text processing buffers
Definition qdefs.h:94
size_t csqc_printtextbuf_len
strlen
Definition client.h:1119
char csqc_printtextbuf[MAX_INPUTLINE]
Definition client.h:1118

References cl, CL_VM_Parse_Print(), CLVM_prog, Con_Print(), client_state_t::csqc_printtextbuf, client_state_t::csqc_printtextbuf_len, prvm_prog_t::loaded, MAX_INPUTLINE, min, and PRVM_clientfunction.

Referenced by CL_ParseServerMessage().

◆ CSQC_AddRenderEdict()

qbool CSQC_AddRenderEdict ( prvm_edict_t * ed,
int edictnum )

Definition at line 311 of file csprogs.c.

312{
313 prvm_prog_t *prog = CLVM_prog;
314 int renderflags;
315 int c;
316 float scale;
317 entity_render_t *entrender;
318 model_t *model;
319 prvm_vec3_t modellight_origin;
320
322 if (!model)
323 return false;
324
325 if (edictnum)
326 {
328 return false;
329 entrender = cl.csqcrenderentities + edictnum;
331 entrender->entitynumber = edictnum + MAX_EDICTS;
332 //entrender->shadertime = 0; // shadertime was set by spawn()
333 entrender->flags = 0;
334 entrender->effects = 0;
335 entrender->alpha = 1;
336 entrender->scale = 1;
337 VectorSet(entrender->colormod, 1, 1, 1);
338 VectorSet(entrender->glowmod, 1, 1, 1);
339 entrender->allowdecals = true;
340 }
341 else
342 {
343 entrender = CL_NewTempEntity(0);
344 if (!entrender)
345 return false;
346 }
347
348 entrender->userwavefunc_param[0] = PRVM_clientedictfloat(ed, userwavefunc_param0);
349 entrender->userwavefunc_param[1] = PRVM_clientedictfloat(ed, userwavefunc_param1);
350 entrender->userwavefunc_param[2] = PRVM_clientedictfloat(ed, userwavefunc_param2);
351 entrender->userwavefunc_param[3] = PRVM_clientedictfloat(ed, userwavefunc_param3);
352
353 entrender->model = model;
354 entrender->skinnum = (int)PRVM_clientedictfloat(ed, skin);
355 entrender->effects |= entrender->model->effects;
356 renderflags = (int)PRVM_clientedictfloat(ed, renderflags);
357 entrender->alpha = PRVM_clientedictfloat(ed, alpha);
358 entrender->scale = scale = PRVM_clientedictfloat(ed, scale);
362 if (!entrender->alpha)
363 entrender->alpha = 1.0f;
364 if (!entrender->scale)
365 entrender->scale = scale = 1.0f;
366 if (!VectorLength2(entrender->colormod))
367 VectorSet(entrender->colormod, 1, 1, 1);
368 if (!VectorLength2(entrender->glowmod))
369 VectorSet(entrender->glowmod, 1, 1, 1);
370
371 // LadyHavoc: use the CL_GetTagMatrix function on self to ensure consistent behavior (duplicate code would be bad)
372 // this also sets the custommodellight_origin for us
373 CL_GetTagMatrix(prog, &entrender->matrix, ed, 0, modellight_origin);
374 VectorCopy(modellight_origin, entrender->custommodellight_origin);
375
376 // set up the animation data
377 VM_GenerateFrameGroupBlend(prog, ed->priv.server->framegroupblend, ed);
378 VM_FrameBlendFromFrameGroupBlend(ed->priv.server->frameblend, ed->priv.server->framegroupblend, model, cl.time);
379 VM_UpdateEdictSkeleton(prog, ed, model, ed->priv.server->frameblend);
380 if (PRVM_clientedictfloat(ed, shadertime)) // hack for csprogs.dat files that do not set shadertime, leaves the value at entity spawn time
381 entrender->shadertime = PRVM_clientedictfloat(ed, shadertime);
382
383 // transparent offset
384 if (renderflags & RF_USETRANSPARENTOFFSET)
386
387 // model light
388 if (renderflags & RF_MODELLIGHT)
389 {
394 }
395
396 if(renderflags)
397 {
398 if(renderflags & RF_VIEWMODEL) entrender->flags |= RENDER_VIEWMODEL | RENDER_NODEPTHTEST;
399 if(renderflags & RF_EXTERNALMODEL) entrender->flags |= RENDER_EXTERIORMODEL;
400 if(renderflags & RF_WORLDOBJECT) entrender->flags |= RENDER_WORLDOBJECT;
401 if(renderflags & RF_DEPTHHACK) entrender->flags |= RENDER_NODEPTHTEST;
402 if(renderflags & RF_ADDITIVE) entrender->flags |= RENDER_ADDITIVE;
403 if(renderflags & RF_DYNAMICMODELLIGHT) entrender->flags |= RENDER_DYNAMICMODELLIGHT;
404 }
405
407 if (c <= 0)
408 CL_SetEntityColormapColors(entrender, -1);
409 else if (c <= cl.maxclients && cl.scores != NULL)
411 else
412 CL_SetEntityColormapColors(entrender, c);
413
415 // either fullbright or lit
417 {
418 if (!(entrender->effects & EF_FULLBRIGHT) && !(renderflags & RF_FULLBRIGHT))
419 entrender->flags |= RENDER_LIGHT;
420 }
421 // hide player shadow during intermission or nehahra movie
422 if (!(entrender->effects & (EF_NOSHADOW | EF_ADDITIVE | EF_NODEPTHTEST))
423 && (entrender->alpha >= 1)
424 && !(renderflags & RF_NOSHADOW)
425 && !(entrender->flags & RENDER_VIEWMODEL)
427 entrender->flags |= RENDER_SHADOW;
428 if (entrender->flags & RENDER_VIEWMODEL)
429 entrender->flags |= RENDER_NOSELFSHADOW;
430 if (entrender->effects & EF_NOSELFSHADOW)
431 entrender->flags |= RENDER_NOSELFSHADOW;
432 if (entrender->effects & EF_NODEPTHTEST)
433 entrender->flags |= RENDER_NODEPTHTEST;
434 if (entrender->effects & EF_ADDITIVE)
435 entrender->flags |= RENDER_ADDITIVE;
436 if (entrender->effects & EF_DOUBLESIDED)
437 entrender->flags |= RENDER_DOUBLESIDED;
438 if (entrender->effects & EF_DYNAMICMODELLIGHT)
439 entrender->flags |= RENDER_DYNAMICMODELLIGHT;
440
441 // make the other useful stuff
442 memcpy(entrender->framegroupblend, ed->priv.server->framegroupblend, sizeof(ed->priv.server->framegroupblend));
443 CL_UpdateRenderEntity(entrender);
444
445 // override animation data with full control
446 memcpy(entrender->frameblend, ed->priv.server->frameblend, sizeof(ed->priv.server->frameblend));
447 if (ed->priv.server->skeleton.relativetransforms)
448 entrender->skeleton = &ed->priv.server->skeleton;
449 else
450 entrender->skeleton = NULL;
451
452 return true;
453}
void CL_UpdateRenderEntity(entity_render_t *ent)
Definition cl_main.c:702
entity_render_t * CL_NewTempEntity(double shadertime)
Definition cl_main.c:794
void CL_SetEntityColormapColors(entity_render_t *ent, int colormap)
Definition cl_main.c:1061
@ PROTOCOL_NEHAHRAMOVIE
Nehahra movie protocol, a big nasty hack dating back to early days of the Quake Standards Group (but ...
Definition common.h:143
cvar_t cl_noplayershadow
Definition cl_main.c:85
#define RF_FULLBRIGHT
Definition csprogs.h:93
#define RF_WORLDOBJECT
Definition csprogs.h:89
#define RF_DEPTHHACK
Definition csprogs.h:83
#define RF_USETRANSPARENTOFFSET
Definition csprogs.h:88
#define RF_DYNAMICMODELLIGHT
Definition csprogs.h:91
#define RF_VIEWMODEL
Definition csprogs.h:81
#define RF_NOSHADOW
Definition csprogs.h:94
#define RF_ADDITIVE
Definition csprogs.h:84
#define RF_EXTERNALMODEL
Definition csprogs.h:82
#define RF_MODELLIGHT
Definition csprogs.h:90
vector modellight_dir
float transparent_offset
float effects
vector modellight_ambient
vector modellight_diffuse
float skin
float colormap
float scale
vector glowmod
float alpha
vector colormod
static int(ZEXPORT *qz_inflate)(z_stream *strm
cvar_t r_fullbright
Definition gl_rmain.c:112
#define VectorClear(a)
Definition mathlib.h:97
#define VectorLength2(a)
Definition mathlib.h:110
void VM_UpdateEdictSkeleton(prvm_prog_t *prog, prvm_edict_t *ed, const struct model_s *edmodel, const struct frameblend_s *frameblend)
void VM_GenerateFrameGroupBlend(prvm_prog_t *prog, struct framegroupblend_s *framegroupblend, const prvm_edict_t *ed)
void VM_FrameBlendFromFrameGroupBlend(struct frameblend_s *frameblend, const struct framegroupblend_s *framegroupblend, const struct model_s *model, double curtime)
#define RENDER_EXTERIORMODEL
Definition protocol.h:359
#define EF_FULLBRIGHT
Definition protocol.h:77
#define EF_NOSHADOW
Definition protocol.h:80
#define EF_NODEPTHTEST
Definition protocol.h:81
#define EF_ADDITIVE
Definition protocol.h:73
#define EF_DYNAMICMODELLIGHT
Definition protocol.h:85
#define RENDER_SHADOW
Definition protocol.h:365
#define RENDER_VIEWMODEL
Definition protocol.h:358
#define EF_NOSELFSHADOW
Definition protocol.h:84
#define RENDER_DYNAMICMODELLIGHT
Definition protocol.h:373
#define EF_DOUBLESIDED
Definition protocol.h:83
#define RENDER_WORLDOBJECT
Definition protocol.h:362
#define RENDER_DOUBLESIDED
Definition protocol.h:371
#define RENDER_ADDITIVE
Definition protocol.h:370
#define RENDER_NOSELFSHADOW
Definition protocol.h:367
#define RENDER_LIGHT
Definition protocol.h:366
#define RENDER_CUSTOMIZEDMODELLIGHT
Definition protocol.h:372
#define RENDER_NODEPTHTEST
Definition protocol.h:369
prvm_vec_t prvm_vec3_t[3]
Definition qtypes.h:63
scoreboard_t * scores
Definition client.h:945
int intermission
Definition client.h:856
frameblend_t frameblend[MAX_FRAMEBLENDS]
Definition client.h:373
vec3_t custommodellight_lightdir
Definition client.h:404
vec_t userwavefunc_param[Q3WAVEFUNC_USER_COUNT]
Definition client.h:445
float custommodellight_origin[3]
Definition client.h:406
matrix4x4_t matrix
Definition client.h:332
float colormod[3]
Definition client.h:359
model_t * model
Definition client.h:343
vec3_t custommodellight_diffuse
Definition client.h:403
float transparent_offset
Definition client.h:340
framegroupblend_t framegroupblend[MAX_FRAMEGROUPBLENDS]
Definition client.h:363
vec3_t custommodellight_ambient
Definition client.h:402
float glowmod[3]
Definition client.h:360
skeleton_t * skeleton
Definition client.h:375
unsigned effects
entity_render_t ** entities
renderable entities (excluding world)
Definition render.h:361

References entity_render_t::allowdecals, alpha, entity_render_t::alpha, cl, CL_GetModelFromEdict(), CL_GetTagMatrix(), CL_NewTempEntity(), cl_noplayershadow, CL_SetEntityColormapColors(), CL_UpdateRenderEntity(), cls, CLVM_prog, colormap, colormod, entity_render_t::colormod, scoreboard_t::colors, client_state_t::csqcrenderentities, entity_render_t::custommodellight_ambient, entity_render_t::custommodellight_diffuse, entity_render_t::custommodellight_lightdir, entity_render_t::custommodellight_origin, EF_ADDITIVE, EF_DOUBLESIDED, EF_DYNAMICMODELLIGHT, EF_FULLBRIGHT, EF_NODEPTHTEST, EF_NOSELFSHADOW, EF_NOSHADOW, effects, entity_render_t::effects, model_t::effects, r_refdef_scene_t::entities, entity_render_t::entitynumber, entity_render_t::flags, entity_render_t::frameblend, entity_render_t::framegroupblend, entity_render_t::glowmod, glowmod, int(), cvar_t::integer, client_state_t::intermission, entity_render_t::matrix, MAX_EDICTS, client_state_t::maxclients, r_refdef_scene_t::maxentities, entity_render_t::model, model, modellight_ambient, modellight_diffuse, modellight_dir, NULL, r_refdef_scene_t::numentities, prvm_edict_t::priv, client_static_t::protocol, PROTOCOL_NEHAHRAMOVIE, PRVM_clientedictfloat, PRVM_clientedictvector, PRVM_clientglobalfloat, r_fullbright, r_refdef, RENDER_ADDITIVE, RENDER_CUSTOMIZEDMODELLIGHT, RENDER_DOUBLESIDED, RENDER_DYNAMICMODELLIGHT, RENDER_EXTERIORMODEL, RENDER_LIGHT, RENDER_NODEPTHTEST, RENDER_NOSELFSHADOW, RENDER_SHADOW, RENDER_VIEWMODEL, RENDER_WORLDOBJECT, RF_ADDITIVE, RF_DEPTHHACK, RF_DYNAMICMODELLIGHT, RF_EXTERNALMODEL, RF_FULLBRIGHT, RF_MODELLIGHT, RF_NOSHADOW, RF_USETRANSPARENTOFFSET, RF_VIEWMODEL, RF_WORLDOBJECT, entity_render_t::scale, scale, r_refdef_t::scene, client_state_t::scores, prvm_edict_t::server, entity_render_t::shadertime, entity_render_t::skeleton, skin, entity_render_t::skinnum, client_state_t::time, entity_render_t::transparent_offset, transparent_offset, entity_render_t::userwavefunc_param, VectorClear, VectorCopy, VectorLength2, VectorSet, VM_FrameBlendFromFrameGroupBlend(), VM_GenerateFrameGroupBlend(), and VM_UpdateEdictSkeleton().

Referenced by VM_CL_R_AddEntities(), and VM_CL_R_AddEntity().

◆ CSQC_Predraw()

void CSQC_Predraw ( prvm_edict_t * ed)

Definition at line 283 of file csprogs.c.

284{
285 prvm_prog_t *prog = CLVM_prog;
286 int b;
287 if(!PRVM_clientedictfunction(ed, predraw))
288 return;
291 prog->ExecuteProgram(prog, PRVM_clientedictfunction(ed, predraw), "CSQC_Predraw: NULL function\n");
293}
#define PRVM_EDICT_TO_PROG(e)
Definition progsvm.h:875
dp_FragColor b

References b, CLVM_prog, prvm_prog_t::ExecuteProgram, PRVM_clientedictfunction, PRVM_clientglobaledict, PRVM_EDICT_TO_PROG, and self.

Referenced by VM_CL_R_AddEntities().

◆ CSQC_ReadEntities()

void CSQC_ReadEntities ( void )

Definition at line 798 of file csprogs.c.

799{
800 prvm_prog_t *prog = CLVM_prog;
801 unsigned short entnum, oldself, realentnum;
802
803 if(!prog->loaded)
804 {
805 Host_Error ("CSQC_ReadEntities: CSQC is not loaded");
806 return;
807 }
808
810 oldself = PRVM_clientglobaledict(self);
811 while(1)
812 {
815 break;
816 realentnum = entnum & 0x7FFF;
818 if(entnum & 0x8000)
819 {
821 {
822 prog->ExecuteProgram(prog, PRVM_clientfunction(CSQC_Ent_Remove), "QC function CSQC_Ent_Remove is missing");
823 cl.csqc_server2csqcentitynumber[realentnum] = 0;
824 }
825 else
826 {
827 // LadyHavoc: removing an entity that is already gone on
828 // the csqc side is possible for legitimate reasons (such
829 // as a repeat of the remove message), so no warning is
830 // needed
831 //Con_Printf("Bad csqc_server2csqcentitynumber map\n"); //[515]: never happens ?
832 }
833 }
834 else
835 {
837 {
838 if(!PRVM_clientfunction(CSQC_Ent_Spawn))
839 {
840 prvm_edict_t *ed;
841 ed = PRVM_ED_Alloc(prog);
842 PRVM_clientedictfloat(ed, entnum) = realentnum;
844 }
845 else
846 {
847 // entity( float entnum ) CSQC_Ent_Spawn;
848 // the qc function should set entnum, too (this way it also can return world [2/1/2008 Andreas]
849 PRVM_G_FLOAT(OFS_PARM0) = (float) realentnum;
850 // make sure no one gets wrong ideas
852 prog->ExecuteProgram(prog, PRVM_clientfunction(CSQC_Ent_Spawn), "QC function CSQC_Ent_Spawn is missing");
854 }
856 prog->ExecuteProgram(prog, PRVM_clientfunction(CSQC_Ent_Update), "QC function CSQC_Ent_Update is missing");
857 }
858 else {
860 prog->ExecuteProgram(prog, PRVM_clientfunction(CSQC_Ent_Update), "QC function CSQC_Ent_Update is missing");
861 }
862 }
863 }
864 PRVM_clientglobaledict(self) = oldself;
865}
#define MSG_ReadShort
Definition common.h:191
#define PRVM_EDICT(n)
Definition progsvm.h:866
prvm_edict_t * PRVM_ED_Alloc(prvm_prog_t *prog)
Definition prvm_edict.c:269
precision highp float
Definition shader_glsl.h:53

References sizebuf_t::badread, cl, cl_message, CLVM_prog, client_state_t::csqc_server2csqcentitynumber, entnum, prvm_prog_t::ExecuteProgram, float, Host_Error(), prvm_prog_t::loaded, MSG_ReadShort, OFS_PARM0, OFS_RETURN, PRVM_clientedictfloat, PRVM_clientfunction, PRVM_clientglobaledict, PRVM_clientglobalfloat, PRVM_ED_Alloc(), PRVM_EDICT, PRVM_EDICT_TO_PROG, PRVM_G_FLOAT, PRVM_G_INT, self, client_state_t::time, and time.

Referenced by CL_ParseServerMessage().

◆ CSQC_SetGlobals()

static void CSQC_SetGlobals ( double frametime)
static

Definition at line 247 of file csprogs.c.

248{
250 prvm_prog_t *prog = CLVM_prog;
251
253 PRVM_clientglobalfloat(cltime) = host.realtime; // Spike named it that way.
258 // // FIXME: this actually belongs into getinputstate().. [12/17/2007 Black]
263
264 // LadyHavoc: Spike says not to do this, but without pmove_org the
265 // CSQC is useless as it can't alter the view origin without
266 // completely replacing it
270 PRVM_clientglobalfloat(pmove_onground) = cl.onground;
271 PRVM_clientglobalfloat(pmove_inwater) = cl.inwater;
272
277
279
281}
void CSQC_R_RecalcView(void)
Definition clvm_cmds.c:756
float clientcommandframe
float maxclients
vector pmove_vel
vector input_angles
vector view_punchangle
vector pmove_org
vector view_angles
vector input_movevalues
float input_buttons
float servercommandframe
vector view_punchvector
vec3_t csqc_viewanglesfromengine
Definition client.h:1114
vec3_t movement_velocity
Definition client.h:810
qbool onground
Definition client.h:843
vec3_t csqc_vieworiginfromengine
Definition client.h:1113
vec3_t viewangles
Definition client.h:786
entity_t * entities
Definition client.h:991
qbool inwater
Definition client.h:844
vec3_t punchvector
Definition client.h:790
vec3_t punchangle
Definition client.h:788
usercmd_t movecmd[CL_MAX_USERCMDS]
Definition client.h:754
vec3_t csqc_viewangles
Definition client.h:1112
vec3_t csqc_vieworigin
Definition client.h:1111
unsigned int servermovesequence
Definition client.h:637
entity_render_t render
Definition client.h:477
float forwardmove
Definition protocol.h:380
int buttons
Definition protocol.h:395
float upmove
Definition protocol.h:382
unsigned int sequence
Definition protocol.h:397
float sidemove
Definition protocol.h:381

References usercmd_t::buttons, cl, clientcommandframe, cls, CLVM_prog, CSQC_R_RecalcView(), client_state_t::csqc_viewangles, client_state_t::csqc_viewanglesfromengine, client_state_t::csqc_vieworigin, client_state_t::csqc_vieworiginfromengine, client_state_t::entities, usercmd_t::forwardmove, frametime, host, input_angles, input_buttons, input_movevalues, client_state_t::inwater, entity_render_t::matrix, Matrix4x4_OriginFromMatrix(), client_state_t::maxclients, maxclients, client_state_t::movecmd, client_state_t::movement_velocity, client_state_t::onground, player_localentnum, pmove_org, pmove_vel, PRVM_clientglobalfloat, PRVM_clientglobalvector, client_state_t::punchangle, client_state_t::punchvector, host_static_t::realtime, entity_t::render, usercmd_t::sequence, servercommandframe, client_static_t::servermovesequence, usercmd_t::sidemove, client_state_t::time, time, usercmd_t::upmove, VectorCopy, VectorSet, view_angles, view_punchangle, view_punchvector, client_state_t::viewangles, and client_state_t::viewentity.

Referenced by CL_VM_DrawHud(), and CL_VM_UpdateView().

◆ CSQC_Think()

◆ CSQC_UpdateNetworkTimes()

void CSQC_UpdateNetworkTimes ( double newtime,
double oldtime )

Definition at line 234 of file csprogs.c.

235{
236 prvm_prog_t *prog = CLVM_prog;
237
238 if(!prog->loaded)
239 return;
240
241 PRVM_clientglobalfloat(servertime) = newtime;
242 PRVM_clientglobalfloat(serverprevtime) = oldtime;
243 PRVM_clientglobalfloat(serverdeltatime) = newtime - oldtime;
244}

References CLVM_prog, prvm_prog_t::loaded, and PRVM_clientglobalfloat.

Referenced by CL_NetworkTimeReceived().

◆ MakeDownloadPacket()

qbool MakeDownloadPacket ( const char * filename,
unsigned char * data,
size_t len,
int crc,
int cnt,
sizebuf_t * buf,
int protocol )

Definition at line 940 of file csprogs.c.

941{
942 int packetsize = buf->maxsize - 7; // byte short long
943 int npackets = ((int)len + packetsize - 1) / (packetsize);
944 char vabuf[1024];
945
946 if(protocol == PROTOCOL_QUAKEWORLD)
947 return false; // CSQC can't run in QW anyway
948
949 SZ_Clear(buf);
950 if(cnt == 0)
951 {
953 MSG_WriteString(buf, va(vabuf, sizeof(vabuf), "\ncl_downloadbegin %lu %s\n", (unsigned long)len, filename));
954 return true;
955 }
956 else if(cnt >= 1 && cnt <= npackets)
957 {
958 unsigned long thispacketoffset = (cnt - 1) * packetsize;
959 int thispacketsize = (int)len - thispacketoffset;
960 if(thispacketsize > packetsize)
961 thispacketsize = packetsize;
962
964 MSG_WriteLong(buf, thispacketoffset);
965 MSG_WriteShort(buf, thispacketsize);
966 SZ_Write(buf, data + thispacketoffset, thispacketsize);
967
968 return true;
969 }
970 else if(cnt == npackets + 1)
971 {
973 MSG_WriteString(buf, va(vabuf, sizeof(vabuf), "\ncl_downloadfinished %lu %d\n", (unsigned long)len, crc));
974 return true;
975 }
976 return false;
977}
void MSG_WriteShort(sizebuf_t *sb, int c)
Definition com_msg.c:138
void MSG_WriteString(sizebuf_t *sb, const char *s)
Definition com_msg.c:173
void MSG_WriteLong(sizebuf_t *sb, int c)
Definition com_msg.c:147
void MSG_WriteByte(sizebuf_t *sb, int c)
Definition com_msg.c:130
void SZ_Clear(sizebuf_t *buf)
Definition common.c:44
void SZ_Write(sizebuf_t *buf, const unsigned char *data, int length)
Definition common.c:72
@ PROTOCOL_QUAKEWORLD
quakeworld protocol
Definition common.h:145
GLsizeiptr const GLvoid * data
Definition glquake.h:639
#define svc_downloaddata
Definition protocol.h:269
#define svc_stufftext
Definition protocol.h:223

References buf, data, int(), MSG_WriteByte(), MSG_WriteLong(), MSG_WriteShort(), MSG_WriteString(), PROTOCOL_QUAKEWORLD, svc_downloaddata, svc_stufftext, SZ_Clear(), SZ_Write(), and va().

Referenced by CL_VM_Init(), and SV_SendServerinfo().

Variable Documentation

◆ cl_noplayershadow

cvar_t cl_noplayershadow
extern

Definition at line 85 of file cl_main.c.

85{CF_CLIENT | CF_ARCHIVE, "cl_noplayershadow", "0","hide player shadow"};
#define CF_CLIENT
cvar/command that only the client can change/execute
Definition cmd.h:48
#define CF_ARCHIVE
cvar should have its set value saved to config.cfg and persist across sessions
Definition cmd.h:53

Referenced by CL_Init(), CL_UpdateNetworkEntity(), and CSQC_AddRenderEdict().

◆ cl_reqfields

prvm_required_field_t cl_reqfields[]

Definition at line 66 of file csprogs.c.

67{
68#define PRVM_DECLARE_serverglobalfloat(x)
69#define PRVM_DECLARE_serverglobalvector(x)
70#define PRVM_DECLARE_serverglobalstring(x)
71#define PRVM_DECLARE_serverglobaledict(x)
72#define PRVM_DECLARE_serverglobalfunction(x)
73#define PRVM_DECLARE_clientglobalfloat(x)
74#define PRVM_DECLARE_clientglobalvector(x)
75#define PRVM_DECLARE_clientglobalstring(x)
76#define PRVM_DECLARE_clientglobaledict(x)
77#define PRVM_DECLARE_clientglobalfunction(x)
78#define PRVM_DECLARE_menuglobalfloat(x)
79#define PRVM_DECLARE_menuglobalvector(x)
80#define PRVM_DECLARE_menuglobalstring(x)
81#define PRVM_DECLARE_menuglobaledict(x)
82#define PRVM_DECLARE_menuglobalfunction(x)
83#define PRVM_DECLARE_serverfieldfloat(x)
84#define PRVM_DECLARE_serverfieldvector(x)
85#define PRVM_DECLARE_serverfieldstring(x)
86#define PRVM_DECLARE_serverfieldedict(x)
87#define PRVM_DECLARE_serverfieldfunction(x)
88#define PRVM_DECLARE_clientfieldfloat(x) {ev_float, #x },
89#define PRVM_DECLARE_clientfieldvector(x) {ev_vector, #x },
90#define PRVM_DECLARE_clientfieldstring(x) {ev_string, #x },
91#define PRVM_DECLARE_clientfieldedict(x) {ev_entity, #x },
92#define PRVM_DECLARE_clientfieldfunction(x) {ev_function, #x },
93#define PRVM_DECLARE_menufieldfloat(x)
94#define PRVM_DECLARE_menufieldvector(x)
95#define PRVM_DECLARE_menufieldstring(x)
96#define PRVM_DECLARE_menufieldedict(x)
97#define PRVM_DECLARE_menufieldfunction(x)
98#define PRVM_DECLARE_serverfunction(x)
99#define PRVM_DECLARE_clientfunction(x)
100#define PRVM_DECLARE_menufunction(x)
101#define PRVM_DECLARE_field(x)
102#define PRVM_DECLARE_global(x)
103#define PRVM_DECLARE_function(x)
104#include "prvm_offsets.h"
105#undef PRVM_DECLARE_serverglobalfloat
106#undef PRVM_DECLARE_serverglobalvector
107#undef PRVM_DECLARE_serverglobalstring
108#undef PRVM_DECLARE_serverglobaledict
109#undef PRVM_DECLARE_serverglobalfunction
110#undef PRVM_DECLARE_clientglobalfloat
111#undef PRVM_DECLARE_clientglobalvector
112#undef PRVM_DECLARE_clientglobalstring
113#undef PRVM_DECLARE_clientglobaledict
114#undef PRVM_DECLARE_clientglobalfunction
115#undef PRVM_DECLARE_menuglobalfloat
116#undef PRVM_DECLARE_menuglobalvector
117#undef PRVM_DECLARE_menuglobalstring
118#undef PRVM_DECLARE_menuglobaledict
119#undef PRVM_DECLARE_menuglobalfunction
120#undef PRVM_DECLARE_serverfieldfloat
121#undef PRVM_DECLARE_serverfieldvector
122#undef PRVM_DECLARE_serverfieldstring
123#undef PRVM_DECLARE_serverfieldedict
124#undef PRVM_DECLARE_serverfieldfunction
125#undef PRVM_DECLARE_clientfieldfloat
126#undef PRVM_DECLARE_clientfieldvector
127#undef PRVM_DECLARE_clientfieldstring
128#undef PRVM_DECLARE_clientfieldedict
129#undef PRVM_DECLARE_clientfieldfunction
130#undef PRVM_DECLARE_menufieldfloat
131#undef PRVM_DECLARE_menufieldvector
132#undef PRVM_DECLARE_menufieldstring
133#undef PRVM_DECLARE_menufieldedict
134#undef PRVM_DECLARE_menufieldfunction
135#undef PRVM_DECLARE_serverfunction
136#undef PRVM_DECLARE_clientfunction
137#undef PRVM_DECLARE_menufunction
138#undef PRVM_DECLARE_field
139#undef PRVM_DECLARE_global
140#undef PRVM_DECLARE_function
141};

Referenced by CL_VM_Init().

◆ cl_reqglobals

prvm_required_field_t cl_reqglobals[]

Definition at line 145 of file csprogs.c.

146{
147#define PRVM_DECLARE_serverglobalfloat(x)
148#define PRVM_DECLARE_serverglobalvector(x)
149#define PRVM_DECLARE_serverglobalstring(x)
150#define PRVM_DECLARE_serverglobaledict(x)
151#define PRVM_DECLARE_serverglobalfunction(x)
152#define PRVM_DECLARE_clientglobalfloat(x) {ev_float, #x},
153#define PRVM_DECLARE_clientglobalvector(x) {ev_vector, #x},
154#define PRVM_DECLARE_clientglobalstring(x) {ev_string, #x},
155#define PRVM_DECLARE_clientglobaledict(x) {ev_entity, #x},
156#define PRVM_DECLARE_clientglobalfunction(x) {ev_function, #x},
157#define PRVM_DECLARE_menuglobalfloat(x)
158#define PRVM_DECLARE_menuglobalvector(x)
159#define PRVM_DECLARE_menuglobalstring(x)
160#define PRVM_DECLARE_menuglobaledict(x)
161#define PRVM_DECLARE_menuglobalfunction(x)
162#define PRVM_DECLARE_serverfieldfloat(x)
163#define PRVM_DECLARE_serverfieldvector(x)
164#define PRVM_DECLARE_serverfieldstring(x)
165#define PRVM_DECLARE_serverfieldedict(x)
166#define PRVM_DECLARE_serverfieldfunction(x)
167#define PRVM_DECLARE_clientfieldfloat(x)
168#define PRVM_DECLARE_clientfieldvector(x)
169#define PRVM_DECLARE_clientfieldstring(x)
170#define PRVM_DECLARE_clientfieldedict(x)
171#define PRVM_DECLARE_clientfieldfunction(x)
172#define PRVM_DECLARE_menufieldfloat(x)
173#define PRVM_DECLARE_menufieldvector(x)
174#define PRVM_DECLARE_menufieldstring(x)
175#define PRVM_DECLARE_menufieldedict(x)
176#define PRVM_DECLARE_menufieldfunction(x)
177#define PRVM_DECLARE_serverfunction(x)
178#define PRVM_DECLARE_clientfunction(x)
179#define PRVM_DECLARE_menufunction(x)
180#define PRVM_DECLARE_field(x)
181#define PRVM_DECLARE_global(x)
182#define PRVM_DECLARE_function(x)
183#include "prvm_offsets.h"
184#undef PRVM_DECLARE_serverglobalfloat
185#undef PRVM_DECLARE_serverglobalvector
186#undef PRVM_DECLARE_serverglobalstring
187#undef PRVM_DECLARE_serverglobaledict
188#undef PRVM_DECLARE_serverglobalfunction
189#undef PRVM_DECLARE_clientglobalfloat
190#undef PRVM_DECLARE_clientglobalvector
191#undef PRVM_DECLARE_clientglobalstring
192#undef PRVM_DECLARE_clientglobaledict
193#undef PRVM_DECLARE_clientglobalfunction
194#undef PRVM_DECLARE_menuglobalfloat
195#undef PRVM_DECLARE_menuglobalvector
196#undef PRVM_DECLARE_menuglobalstring
197#undef PRVM_DECLARE_menuglobaledict
198#undef PRVM_DECLARE_menuglobalfunction
199#undef PRVM_DECLARE_serverfieldfloat
200#undef PRVM_DECLARE_serverfieldvector
201#undef PRVM_DECLARE_serverfieldstring
202#undef PRVM_DECLARE_serverfieldedict
203#undef PRVM_DECLARE_serverfieldfunction
204#undef PRVM_DECLARE_clientfieldfloat
205#undef PRVM_DECLARE_clientfieldvector
206#undef PRVM_DECLARE_clientfieldstring
207#undef PRVM_DECLARE_clientfieldedict
208#undef PRVM_DECLARE_clientfieldfunction
209#undef PRVM_DECLARE_menufieldfloat
210#undef PRVM_DECLARE_menufieldvector
211#undef PRVM_DECLARE_menufieldstring
212#undef PRVM_DECLARE_menufieldedict
213#undef PRVM_DECLARE_menufieldfunction
214#undef PRVM_DECLARE_serverfunction
215#undef PRVM_DECLARE_clientfunction
216#undef PRVM_DECLARE_menufunction
217#undef PRVM_DECLARE_field
218#undef PRVM_DECLARE_global
219#undef PRVM_DECLARE_function
220};

Referenced by CL_VM_Init().

◆ csqc_main_r_refdef_view

r_refdef_view_t csqc_main_r_refdef_view
extern

Definition at line 26 of file clvm_cmds.c.

Referenced by CL_VM_UpdateView(), and VM_CL_R_RenderScene().

◆ csqc_original_r_refdef_view

r_refdef_view_t csqc_original_r_refdef_view
extern

Definition at line 25 of file clvm_cmds.c.

Referenced by CL_VM_UpdateView(), VM_CL_R_ClearScene(), and VM_CL_R_RenderScene().

◆ csqc_usedemoprogs

cvar_t csqc_usedemoprogs
extern

Definition at line 38 of file cl_main.c.

38{CF_CLIENT, "csqc_usedemoprogs","1","use csprogs stored in demos"};

Referenced by CL_VM_Init(), and SV_Init().