X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=csprogs.c;h=77e3a16bdca3d599a65422d2a3f08a717c81c561;hb=27b75893ba46058b5ca680f3c2aaae7233fe4270;hp=8ebaa7f22b1e3fbe6aff4c9cdb22b63f70c99fab;hpb=2a10cbe9394e5ead9b8307591917d139774ceb43;p=xonotic%2Fdarkplaces.git diff --git a/csprogs.c b/csprogs.c index 8ebaa7f2..77e3a16b 100644 --- a/csprogs.c +++ b/csprogs.c @@ -370,13 +370,22 @@ qboolean CSQC_AddRenderEdict(prvm_edict_t *ed, int edictnum) if (renderflags & RF_USETRANSPARENTOFFSET) entrender->transparent_offset = PRVM_clientglobalfloat(transparent_offset); + // model light + if (renderflags & RF_MODELLIGHT) + { + if(PRVM_clientedictvector(ed, modellight_ambient)) VectorCopy(PRVM_clientedictvector(ed, modellight_ambient), entrender->modellight_ambient); + if(PRVM_clientedictvector(ed, modellight_diffuse)) VectorCopy(PRVM_clientedictvector(ed, modellight_diffuse), entrender->modellight_diffuse); + if(PRVM_clientedictvector(ed, modellight_dir)) VectorCopy(PRVM_clientedictvector(ed, modellight_dir), entrender->modellight_lightdir); + entrender->flags |= RENDER_CUSTOMIZEDMODELLIGHT; + } + if(renderflags) { - if(renderflags & RF_VIEWMODEL) entrender->flags |= RENDER_VIEWMODEL | RENDER_NODEPTHTEST; - if(renderflags & RF_EXTERNALMODEL)entrender->flags |= RENDER_EXTERIORMODEL; - if(renderflags & RF_NOCULL) entrender->flags |= RENDER_NOCULL; - if(renderflags & RF_DEPTHHACK) entrender->flags |= RENDER_NODEPTHTEST; - if(renderflags & RF_ADDITIVE) entrender->flags |= RENDER_ADDITIVE; + if(renderflags & RF_VIEWMODEL) entrender->flags |= RENDER_VIEWMODEL | RENDER_NODEPTHTEST; + if(renderflags & RF_EXTERNALMODEL) entrender->flags |= RENDER_EXTERIORMODEL; + if(renderflags & RF_WORLDOBJECT) entrender->flags |= RENDER_WORLDOBJECT; + if(renderflags & RF_DEPTHHACK) entrender->flags |= RENDER_NODEPTHTEST; + if(renderflags & RF_ADDITIVE) entrender->flags |= RENDER_ADDITIVE; } c = (int)PRVM_clientedictfloat(ed, colormap); @@ -455,6 +464,7 @@ qboolean CL_VM_InputEvent (int eventtype, int x, int y) return r; } +extern r_refdef_view_t csqc_original_r_refdef_view; qboolean CL_VM_UpdateView (void) { vec3_t emptyvector; @@ -466,6 +476,7 @@ qboolean CL_VM_UpdateView (void) return false; R_TimeReport("pre-UpdateView"); CSQC_BEGIN + csqc_original_r_refdef_view = r_refdef.view; //VectorCopy(cl.viewangles, oldangles); PRVM_clientglobalfloat(time) = cl.time; PRVM_clientglobaledict(self) = cl.csqc_server2csqcentitynumber[cl.playerentity]; @@ -481,6 +492,7 @@ qboolean CL_VM_UpdateView (void) //VectorCopy(oldangles, cl.viewangles); // Dresk : Reset Dmg Globals Here CL_VM_UpdateDmgGlobals(0, 0, emptyvector); + r_refdef.view = csqc_original_r_refdef_view; CSQC_END R_TimeReport("UpdateView"); return true; @@ -547,7 +559,7 @@ void CL_VM_Parse_StuffCmd (const char *msg) int sizeflags = csqc_progcrc.flags; csqc_progcrc.flags &= ~CVAR_READONLY; csqc_progsize.flags &= ~CVAR_READONLY; - Cmd_ExecuteString (msg, src_command); + Cmd_ExecuteString (msg, src_command, true); csqc_progcrc.flags = crcflags; csqc_progsize.flags = sizeflags; return; @@ -580,7 +592,7 @@ void CL_VM_Parse_StuffCmd (const char *msg) l = sizeof(buf) - 1; strlcpy(buf, p, l + 1); // strlcpy needs a + 1 as it includes the newline! - Cmd_ExecuteString(buf, src_command); + Cmd_ExecuteString(buf, src_command, true); p += l; if(*p == '\n') @@ -588,7 +600,7 @@ void CL_VM_Parse_StuffCmd (const char *msg) else break; // end of string or overflow } - Cmd_ExecuteString("curl --clear_autodownload", src_command); // don't inhibit CSQC loading + Cmd_ExecuteString("curl --clear_autodownload", src_command, true); // don't inhibit CSQC loading return; } @@ -697,7 +709,7 @@ void CL_VM_UpdateShowingScoresState (int showingscores) CSQC_END } } -qboolean CL_VM_Event_Sound(int sound_num, float volume, int channel, float attenuation, int ent, vec3_t pos) +qboolean CL_VM_Event_Sound(int sound_num, float volume, int channel, float attenuation, int ent, vec3_t pos, int flags, float speed) { qboolean r = false; if(cl.csqc_loaded) @@ -713,8 +725,8 @@ qboolean CL_VM_Event_Sound(int sound_num, float volume, int channel, float atten PRVM_G_FLOAT(OFS_PARM3) = volume; PRVM_G_FLOAT(OFS_PARM4) = attenuation; VectorCopy(pos, PRVM_G_VECTOR(OFS_PARM5) ); - PRVM_G_FLOAT(OFS_PARM6) = 0; // pitch shift not supported yet - PRVM_G_FLOAT(OFS_PARM7) = 0; // flags - none can come in at this point yet + PRVM_G_FLOAT(OFS_PARM6) = speed * 100.0f; + PRVM_G_FLOAT(OFS_PARM7) = flags; // flags PRVM_ExecuteProgram(PRVM_clientfunction(CSQC_Event_Sound), "QC function CSQC_Event_Sound is missing"); r = CSQC_RETURNVAL != 0; } @@ -955,10 +967,11 @@ qboolean MakeDownloadPacket(const char *filename, unsigned char *data, size_t le return false; } +extern cvar_t csqc_usedemoprogs; void CL_VM_Init (void) { const char* csprogsfn; - unsigned char *csprogsdata; + unsigned char *csprogsdata = NULL; fs_offset_t csprogsdatasize; int csprogsdatacrc, requiredcrc; int requiredsize; @@ -976,8 +989,11 @@ void CL_VM_Init (void) // see if the requested csprogs.dat file matches the requested crc csprogsdatacrc = -1; - csprogsfn = va("dlcache/%s.%i.%i", csqc_progname.string, requiredsize, requiredcrc); - csprogsdata = FS_LoadFile(csprogsfn, tempmempool, true, &csprogsdatasize); + if (!cls.demoplayback || csqc_usedemoprogs.integer) + { + csprogsfn = va("dlcache/%s.%i.%i", csqc_progname.string, requiredsize, requiredcrc); + csprogsdata = FS_LoadFile(csprogsfn, tempmempool, true, &csprogsdatasize); + } if (!csprogsdata) { csprogsfn = csqc_progname.string;