From 6e4796b236d8ef0d4c4127689fbaaf25815cbe0c Mon Sep 17 00:00:00 2001 From: havoc Date: Sun, 17 Jun 2007 07:32:52 +0000 Subject: [PATCH] added view_angles field in csqc, no longer sets pmove_org or pmove_vel git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@7441 d7cf8633-e32d-0410-b094-e92efae38249 --- csprogs.c | 33 ++++++++++++++++++++++----------- progsvm.h | 1 + prvm_edict.c | 1 + 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/csprogs.c b/csprogs.c index fea2b60d..873bb0fd 100644 --- a/csprogs.c +++ b/csprogs.c @@ -20,7 +20,6 @@ static char *cl_required_func[] = "CSQC_InputEvent", "CSQC_UpdateView", "CSQC_ConsoleCommand", - "CSQC_Shutdown" }; static int cl_numrequiredfunc = sizeof(cl_required_func) / sizeof(char*); @@ -49,6 +48,7 @@ void CL_VM_Error (const char *format, ...) //[515]: hope it will be never execut //[515]: set globals before calling R_UpdateView, WEIRD CRAP static void CSQC_SetGlobals (void) { + prvm_eval_t *val; CSQC_BEGIN prog->globals.client->time = cl.time; prog->globals.client->frametime = max(0, cl.time - cl.oldtime); @@ -60,10 +60,9 @@ static void CSQC_SetGlobals (void) VectorSet(prog->globals.client->input_movevalues, cl.movecmd[0].forwardmove, cl.movecmd[0].sidemove, cl.movecmd[0].upmove); //VectorCopy(cl.movement_origin, cl.csqc_origin); Matrix4x4_OriginFromMatrix(&cl.entities[cl.viewentity].render.matrix, cl.csqc_origin); - VectorCopy(cl.csqc_origin, prog->globals.client->pmove_org); + if ((val = PRVM_GLOBALFIELDVALUE(prog->globaloffsets.view_angles))) + VectorCopy(cl.viewangles, val->vector); prog->globals.client->maxclients = cl.maxclients; - //VectorCopy(cl.movement_velocity, prog->globals.client->pmove_vel); - VectorCopy(cl.velocity, prog->globals.client->pmove_vel); CSQC_END } @@ -220,11 +219,16 @@ qboolean CL_VM_InputEvent (qboolean pressed, int key) if(!cl.csqc_loaded) return false; CSQC_BEGIN - prog->globals.client->time = cl.time; - PRVM_G_FLOAT(OFS_PARM0) = pressed; - PRVM_G_FLOAT(OFS_PARM1) = key; - PRVM_ExecuteProgram(prog->funcoffsets.CSQC_InputEvent, "QC function CSQC_InputEvent is missing"); - r = CSQC_RETURNVAL; + if (!prog->funcoffsets.CSQC_InputEvent) + r = false; + else + { + prog->globals.client->time = cl.time; + PRVM_G_FLOAT(OFS_PARM0) = pressed; + PRVM_G_FLOAT(OFS_PARM1) = key; + PRVM_ExecuteProgram(prog->funcoffsets.CSQC_InputEvent, "QC function CSQC_InputEvent is missing"); + r = CSQC_RETURNVAL; + } CSQC_END return r; } @@ -253,7 +257,7 @@ qboolean CL_VM_ConsoleCommand (const char *cmd) { int restorevm_tempstringsbuf_cursize; qboolean r; - if(!cl.csqc_loaded) + if(!cl.csqc_loaded || !prog->funcoffsets.CSQC_ConsoleCommand) return false; CSQC_BEGIN prog->globals.client->time = cl.time; @@ -413,6 +417,12 @@ float CL_VM_Event (float event) //[515]: needed ? I'd say "YES", but don't know void CSQC_ReadEntities (void) { unsigned short entnum, oldself, realentnum; + if(!cl.csqc_loaded) + { + Host_Error ("CSQC_ReadEntities: CSQC is not loaded"); + return; + } + CSQC_BEGIN prog->globals.client->time = cl.time; oldself = prog->globals.client->self; @@ -642,7 +652,8 @@ void CL_VM_ShutDown (void) return; CSQC_BEGIN prog->globals.client->time = cl.time; - PRVM_ExecuteProgram(prog->funcoffsets.CSQC_Shutdown, "QC function CSQC_Shutdown is missing"); + if (prog->funcoffsets.CSQC_Shutdown) + PRVM_ExecuteProgram(prog->funcoffsets.CSQC_Shutdown, "QC function CSQC_Shutdown is missing"); PRVM_ResetProg(); CSQC_END Con_Print("CSQC ^1unloaded\n"); diff --git a/progsvm.h b/progsvm.h index eb36fd7e..15c3e5a1 100644 --- a/progsvm.h +++ b/progsvm.h @@ -221,6 +221,7 @@ typedef struct prvm_prog_globaloffsets_s int v_forward; // ssqc / csqc int v_right; // ssqc / csqc int v_up; // ssqc / csqc + int view_angles; // csqc int trace_allsolid; // ssqc / csqc int trace_startsolid; // ssqc / csqc int trace_fraction; // ssqc / csqc diff --git a/prvm_edict.c b/prvm_edict.c index 4b592356..ed069ea7 100644 --- a/prvm_edict.c +++ b/prvm_edict.c @@ -1406,6 +1406,7 @@ void PRVM_FindOffsets(void) prog->globaloffsets.v_forward = PRVM_ED_FindGlobalOffset("v_forward"); prog->globaloffsets.v_right = PRVM_ED_FindGlobalOffset("v_right"); prog->globaloffsets.v_up = PRVM_ED_FindGlobalOffset("v_up"); + prog->globaloffsets.view_angles = PRVM_ED_FindGlobalOffset("view_angles"); prog->globaloffsets.trace_allsolid = PRVM_ED_FindGlobalOffset("trace_allsolid"); prog->globaloffsets.trace_startsolid = PRVM_ED_FindGlobalOffset("trace_startsolid"); prog->globaloffsets.trace_fraction = PRVM_ED_FindGlobalOffset("trace_fraction"); -- 2.39.2