+void CL_VM_UpdateIntermissionState (int intermission)
+{
+ prvm_eval_t *val;
+ if(cl.csqc_loaded)
+ {
+ CSQC_BEGIN
+ val = PRVM_GLOBALFIELDVALUE(prog->globaloffsets.intermission);
+ if(val)
+ val->_float = intermission;
+ CSQC_END
+ }
+}
+void CL_VM_UpdateShowingScoresState (int showingscores)
+{
+ prvm_eval_t *val;
+ if(cl.csqc_loaded)
+ {
+ CSQC_BEGIN
+ val = PRVM_GLOBALFIELDVALUE(prog->globaloffsets.sb_showscores);
+ if(val)
+ val->_float = showingscores;
+ CSQC_END
+ }
+}
+qboolean CL_VM_Event_Sound(int sound_num, float volume, int channel, float attenuation, int ent, vec3_t pos)
+{
+ qboolean r = false;
+ if(cl.csqc_loaded)
+ {
+ CSQC_BEGIN
+ if(prog->funcoffsets.CSQC_Event_Sound)
+ {
+ prog->globals.client->time = cl.time;
+ prog->globals.client->self = cl.csqc_server2csqcentitynumber[cl.playerentity];
+ PRVM_G_FLOAT(OFS_PARM0) = ent;
+ PRVM_G_FLOAT(OFS_PARM1) = channel;
+ PRVM_G_INT(OFS_PARM2) = PRVM_SetTempString(cl.sound_name[sound_num] );
+ PRVM_G_FLOAT(OFS_PARM3) = volume;
+ PRVM_G_FLOAT(OFS_PARM4) = attenuation;
+ VectorCopy(pos, PRVM_G_VECTOR(OFS_PARM5) );
+ PRVM_ExecuteProgram(prog->funcoffsets.CSQC_Event_Sound, "QC function CSQC_Event_Sound is missing");
+ r = CSQC_RETURNVAL;
+ }
+ CSQC_END
+ }
+
+ return r;
+}
+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
+ }
+}