From 1ca9043187a8f6406182e1056fb7edab4895c82e Mon Sep 17 00:00:00 2001 From: dresk Date: Fri, 10 Aug 2007 18:09:01 +0000 Subject: [PATCH] Added support for assigning coop and deathmatch global float values to optional CSQC float globals (just like SSQC works with the two floats). git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@7516 d7cf8633-e32d-0410-b094-e92efae38249 --- csprogs.c | 40 ++++++++++++++++++++++++++++++++++++++++ progsvm.h | 2 ++ prvm_edict.c | 2 ++ 3 files changed, 44 insertions(+) diff --git a/csprogs.c b/csprogs.c index 06e1a333..bb51c500 100644 --- a/csprogs.c +++ b/csprogs.c @@ -409,6 +409,43 @@ void CL_VM_UpdateIntermissionState (int intermission) CSQC_END } } +void CL_VM_UpdateCoopDeathmatchGlobals (int gametype) +{ + // Avoid global names for clean(er) coding + int localcoop; + int localdeathmatch; + + prvm_eval_t *val; + if(cl.csqc_loaded) + { + if(gametype == GAME_COOP) + { + localcoop = 1; + localdeathmatch = 0; + } + else + if(gametype == GAME_DEATHMATCH) + { + localcoop = 0; + localdeathmatch = 1; + } + else + { + // How did the ServerInfo send an unknown gametype? + // Better just assign the globals as 0... + localcoop = 0; + localdeathmatch = 0; + } + CSQC_BEGIN + val = PRVM_GLOBALFIELDVALUE(prog->globaloffsets.coop); + if(val) + val->_float = localcoop; + val = PRVM_GLOBALFIELDVALUE(prog->globaloffsets.deathmatch); + if(val) + val->_float = localdeathmatch; + CSQC_END + } +} float CL_VM_Event (float event) //[515]: needed ? I'd say "YES", but don't know for what :D { @@ -660,6 +697,9 @@ void CL_VM_Init (void) cl.csqc_vidvars.drawcrosshair = false; cl.csqc_vidvars.drawenginesbar = false; + + // Update Coop and Deathmatch Globals (at this point the client knows them from ServerInfo) + CL_VM_UpdateCoopDeathmatchGlobals(cl.gametype); } void CL_VM_ShutDown (void) diff --git a/progsvm.h b/progsvm.h index c3346e3a..727fa402 100644 --- a/progsvm.h +++ b/progsvm.h @@ -237,6 +237,8 @@ typedef struct prvm_prog_globaloffsets_s int trace_dphittexturename; // ssqc / csqc int trace_dpstartcontents; // ssqc / csqc int intermission; // csqc + int coop; // csqc + int deathmatch; // csqc } prvm_prog_globaloffsets_t; diff --git a/prvm_edict.c b/prvm_edict.c index 555eaa29..50bd175a 100644 --- a/prvm_edict.c +++ b/prvm_edict.c @@ -1441,6 +1441,8 @@ void PRVM_FindOffsets(void) prog->globaloffsets.trace_dphittexturename = PRVM_ED_FindGlobalOffset("trace_dphittexturename"); prog->globaloffsets.trace_dpstartcontents = PRVM_ED_FindGlobalOffset("trace_dpstartcontents"); prog->globaloffsets.intermission = PRVM_ED_FindGlobalOffset("intermission"); + prog->globaloffsets.coop = PRVM_ED_FindGlobalOffset("coop"); + prog->globaloffsets.deathmatch = PRVM_ED_FindGlobalOffset("deathmatch"); // menu qc only uses some functions, nothing else prog->funcoffsets.m_display = PRVM_ED_FindFunctionOffset("m_display"); -- 2.39.2