VectorCopy(cl.punchvector, PRVM_clientglobalvector(view_punchvector));
PRVM_clientglobalfloat(maxclients) = cl.maxclients;
+ PRVM_clientglobalfloat(player_localentnum) = cl.viewentity;
+
CSQC_R_RecalcView();
CSQC_END
}
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_ADDITIVE) entrender->flags |= RENDER_ADDITIVE;
}
- // walk attachments to find RENDER_EXTERIORMODEL status
- {
- prvm_edict_t *ent = ed;
- prvm_edict_t *v = PRVM_EDICT_NUM(CL_VM_GetViewEntity());
- int attachloop = 0;
- for(;;)
- {
- if(attachloop >= 256)
- break;
- if(ent == v)
- {
- entrender->flags |= RENDER_EXTERIORMODEL;
- break;
- }
- if (PRVM_clientedictedict(ent, tag_entity))
- ent = PRVM_EDICT_NUM(PRVM_clientedictedict(ent, tag_entity));
- else
- break;
- attachloop++;
- }
- }
-
c = (int)PRVM_clientedictfloat(ed, colormap);
if (c <= 0)
CL_SetEntityColormapColors(entrender, -1);
// 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)
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);
int CL_VM_GetViewEntity(void)
{
if(cl.csqc_server2csqcentitynumber[cl.viewentity])
- return cl.csqc_server2csqcentitynumber[cl.viewentity];
+ return cl.csqc_server2csqcentitynumber[cl.viewentity] + MAX_EDICTS;
return cl.viewentity;
}