VectorCopy(cl.punchvector, PRVM_clientglobalvector(view_punchvector));
PRVM_clientglobalfloat(maxclients) = cl.maxclients;
+ PRVM_clientglobalfloat(player_localentnum) = cl.viewentity;
+
CSQC_R_RecalcView();
CSQC_END
}
entrender->entitynumber = edictnum + MAX_EDICTS;
//entrender->shadertime = 0; // shadertime was set by spawn()
entrender->flags = 0;
+ entrender->effects = 0;
entrender->alpha = 1;
entrender->scale = 1;
VectorSet(entrender->colormod, 1, 1, 1);
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;
// make the other useful stuff
memcpy(entrender->framegroupblend, ed->priv.server->framegroupblend, sizeof(ed->priv.server->framegroupblend));
CL_UpdateRenderEntity(entrender);
+
+ // 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)) Matrix4x4_Transform3x3(&entrender->matrix, PRVM_clientedictvector(ed, modellight_dir), entrender->modellight_lightdir);
+ if (VectorLength2(entrender->modellight_lightdir) == 0)
+ VectorSet(entrender->modellight_lightdir, 0, 0, 1); // have to set SOME valid vector here
+ VectorNormalize(entrender->modellight_lightdir);
+ entrender->flags |= RENDER_CUSTOMIZEDMODELLIGHT;
+ }
+
// override animation data with full control
memcpy(entrender->frameblend, ed->priv.server->frameblend, sizeof(ed->priv.server->frameblend));
if (ed->priv.server->skeleton.relativetransforms)
}
extern r_refdef_view_t csqc_original_r_refdef_view;
+extern r_refdef_view_t csqc_main_r_refdef_view;
qboolean CL_VM_UpdateView (void)
{
prvm_prog_t *prog = CLVM_prog;
return false;
R_TimeReport("pre-UpdateView");
CSQC_BEGIN
+ r_refdef.view.ismain = true;
csqc_original_r_refdef_view = r_refdef.view;
+ csqc_main_r_refdef_view = r_refdef.view;
//VectorCopy(cl.viewangles, oldangles);
PRVM_clientglobalfloat(time) = cl.time;
PRVM_clientglobaledict(self) = cl.csqc_server2csqcentitynumber[cl.playerentity];
//VectorCopy(oldangles, cl.viewangles);
// Dresk : Reset Dmg Globals Here
CL_VM_UpdateDmgGlobals(0, 0, emptyvector);
- r_refdef.view = csqc_original_r_refdef_view;
+ r_refdef.view = csqc_main_r_refdef_view;
+ R_RenderView_UpdateViewVectors(); // we have to do this, as we undid the scene render doing this for us
CSQC_END
+
R_TimeReport("UpdateView");
return true;
}
void CL_VM_Init (void)
{
prvm_prog_t *prog = CLVM_prog;
- const char* csprogsfn;
+ const char* csprogsfn = NULL;
unsigned char *csprogsdata = NULL;
- fs_offset_t csprogsdatasize;
+ fs_offset_t csprogsdatasize = 0;
int csprogsdatacrc, requiredcrc;
int requiredsize;
char vabuf[1024];
PRVM_clientglobaledict(self) = 0;
PRVM_clientglobalstring(mapname) = PRVM_SetEngineString(prog, cl.worldname);
- PRVM_clientglobalfloat(player_localentnum) = cl.playerentity;
+ PRVM_clientglobalfloat(player_localnum) = cl.realplayerentity - 1;
+ PRVM_clientglobalfloat(player_localentnum) = cl.viewentity;
// set map description (use world entity 0)
PRVM_clientedictstring(prog->edicts, message) = PRVM_SetEngineString(prog, cl.worldmessage);
return ret;
}
+
+int CL_VM_GetViewEntity(void)
+{
+ if(cl.csqc_server2csqcentitynumber[cl.viewentity])
+ return cl.csqc_server2csqcentitynumber[cl.viewentity] + MAX_EDICTS;
+ return cl.viewentity;
+}