}
extern cvar_t cl_noplayershadow;
+extern cvar_t r_equalize_entities_fullbright;
qboolean CSQC_AddRenderEdict(prvm_edict_t *ed)
{
int renderflags;
if((val = PRVM_EDICTFIELDVALUE(ed, prog->fieldoffsets.alpha)) && val->_float) entrender->alpha = val->_float;
if((val = PRVM_EDICTFIELDVALUE(ed, prog->fieldoffsets.scale)) && val->_float) entrender->scale = scale = val->_float;
if((val = PRVM_EDICTFIELDVALUE(ed, prog->fieldoffsets.colormod)) && VectorLength2(val->vector)) VectorCopy(val->vector, entrender->colormod);
+ if((val = PRVM_EDICTFIELDVALUE(ed, prog->fieldoffsets.glowmod)) && VectorLength2(val->vector)) VectorCopy(val->vector, entrender->glowmod);
if((val = PRVM_EDICTFIELDVALUE(ed, prog->fieldoffsets.effects)) && val->_float) entrender->effects |= (int)val->_float;
if((val = PRVM_EDICTFIELDVALUE(ed, prog->fieldoffsets.tag_entity)) && val->edict)
{
}
else
Matrix4x4_CreateIdentity(&tagmatrix);
+ if (!VectorLength2(entrender->colormod))
+ VectorSet(entrender->colormod, 1, 1, 1);
+ if (!VectorLength2(entrender->glowmod))
+ VectorSet(entrender->glowmod, 1, 1, 1);
if (renderflags & RF_USEAXIS)
{
// concat the matrices to make the entity relative to its tag
Matrix4x4_Concat(&entrender->matrix, &tagmatrix, &matrix2);
+ // transparent offset
+ if ((renderflags & RF_USETRANSPARENTOFFSET) && (val = PRVM_GLOBALFIELDVALUE(prog->globaloffsets.transparent_offset)))
+ entrender->transparent_offset = val->_float;
+
if(renderflags)
{
- if(renderflags & RF_VIEWMODEL) entrender->flags |= RENDER_VIEWMODEL;
+ if(renderflags & RF_VIEWMODEL) entrender->flags |= RENDER_VIEWMODEL | RENDER_NODEPTHTEST;
if(renderflags & RF_EXTERNALMODEL)entrender->flags |= RENDER_EXTERIORMODEL;
- if(renderflags & RF_DEPTHHACK) entrender->effects |= EF_NODEPTHTEST;
- if(renderflags & RF_ADDITIVE) entrender->effects |= EF_ADDITIVE;
+ if(renderflags & RF_NOCULL) entrender->flags |= RENDER_NOCULL;
+ if(renderflags & RF_DEPTHHACK) entrender->flags |= RENDER_NODEPTHTEST;
+ if(renderflags & RF_ADDITIVE) entrender->flags |= RENDER_ADDITIVE;
+
}
c = (int)ed->fields.client->colormap;
entrender->flags &= ~(RENDER_SHADOW | RENDER_LIGHT | RENDER_NOSELFSHADOW);
// either fullbright or lit
- if (!(entrender->effects & EF_FULLBRIGHT) && !r_fullbright.integer)
- entrender->flags |= RENDER_LIGHT;
+ if(!r_fullbright.integer)
+ {
+ if (!(entrender->effects & EF_FULLBRIGHT))
+ entrender->flags |= RENDER_LIGHT;
+ else if(r_equalize_entities_fullbright.integer)
+ entrender->flags |= RENDER_LIGHT | RENDER_EQUALIZE;
+ }
// hide player shadow during intermission or nehahra movie
if (!(entrender->effects & (EF_NOSHADOW | EF_ADDITIVE | EF_NODEPTHTEST))
&& (entrender->alpha >= 1)
entrender->flags |= RENDER_NOSELFSHADOW;
if (entrender->effects & EF_NOSELFSHADOW)
entrender->flags |= RENDER_NOSELFSHADOW;
+ if (entrender->effects & EF_NODEPTHTEST)
+ entrender->flags |= RENDER_NODEPTHTEST;
+ if (entrender->effects & EF_ADDITIVE)
+ entrender->flags |= RENDER_ADDITIVE;
+ if (entrender->effects & EF_DOUBLESIDED)
+ entrender->flags |= RENDER_DOUBLESIDED;
// make the other useful stuff
CL_UpdateRenderEntity(entrender);
{
World_UnlinkEdict(ed);
memset(ed->fields.client, 0, sizeof(*ed->fields.client));
+ World_Physics_RemoveFromEntity(&cl.world, ed);
+ World_Physics_RemoveJointFromEntity(&cl.world, ed);
}
void CL_VM_CB_CountEdicts(void)