//4 feature darkplaces csqc: add builtins to clientside qc for gl calls
extern cvar_t v_flipped;
+extern cvar_t r_equalize_entities_fullbright;
sfx_t *S_FindName(const char *name);
int Sbar_GetSortedPlayerIndex (int index);
return;
}
- S_StartSound(32768 + PRVM_NUM_FOR_EDICT(entity), channel, S_FindName(sample), entity->fields.client->origin, volume, attenuation);
+ S_StartSound(MAX_EDICTS + PRVM_NUM_FOR_EDICT(entity), channel, S_FindName(sample), entity->fields.client->origin, volume, attenuation);
}
// #483 void(vector origin, string sample, float volume, float attenuation) pointsound
return;
}
- // Send World Entity as Entity to Play Sound (for CSQC, that is 32768)
- S_StartSound(32768, 0, S_FindName(sample), org, volume, attenuation);
+ // Send World Entity as Entity to Play Sound (for CSQC, that is MAX_EDICTS)
+ S_StartSound(MAX_EDICTS, 0, S_FindName(sample), org, volume, attenuation);
}
// #14 entity() spawn
//============================================================================
//[515]: SCENE MANAGER builtins
-extern qboolean CSQC_AddRenderEdict (prvm_edict_t *ed);//csprogs.c
+extern qboolean CSQC_AddRenderEdict (prvm_edict_t *ed, int edictnum);//csprogs.c
static void CSQC_R_RecalcView (void)
{
continue;
if(!((int)ed->fields.client->drawmask & drawmask))
continue;
- CSQC_AddRenderEdict(ed);
+ CSQC_AddRenderEdict(ed, i);
}
// callprofile fixing hack: do not include this time in what is counted for CSQC_UpdateView
{
double t = Sys_DoubleTime();
VM_SAFEPARMCOUNT(1, VM_CL_R_AddEntity);
- CSQC_AddRenderEdict(PRVM_G_EDICT(OFS_PARM0));
+ CSQC_AddRenderEdict(PRVM_G_EDICT(OFS_PARM0), 0);
prog->functions[prog->funcoffsets.CSQC_UpdateView].totaltime -= Sys_DoubleTime() - t;
}
Matrix4x4_CreateFromQuakeEntity(&staticent->render.matrix, ent->fields.client->origin[0], ent->fields.client->origin[1], ent->fields.client->origin[2], ent->fields.client->angles[0], ent->fields.client->angles[1], ent->fields.client->angles[2], staticent->render.scale);
// either fullbright or lit
- if (!(staticent->render.effects & EF_FULLBRIGHT) && !r_fullbright.integer)
- staticent->render.flags |= RENDER_LIGHT;
+ if(!r_fullbright.integer)
+ {
+ if (!(staticent->render.effects & EF_FULLBRIGHT))
+ staticent->render.flags |= RENDER_LIGHT;
+ else if(r_equalize_entities_fullbright.integer)
+ staticent->render.flags |= RENDER_LIGHT | RENDER_EQUALIZE;
+ }
// turn off shadows from transparent objects
if (!(staticent->render.effects & (EF_NOSHADOW | EF_ADDITIVE | EF_NODEPTHTEST)) && (staticent->render.alpha >= 1))
staticent->render.flags |= RENDER_SHADOW;
-
+ if (staticent->render.effects & EF_NODEPTHTEST)
+ staticent->render.flags |= RENDER_NODEPTHTEST;
+ if (staticent->render.effects & EF_ADDITIVE)
+ staticent->render.flags |= RENDER_ADDITIVE;
+ if (staticent->render.effects & EF_DOUBLESIDED)
+ staticent->render.flags |= RENDER_DOUBLESIDED;
+
+ staticent->render.allowdecals = true;
CL_UpdateRenderEntity(&staticent->render);
}
else
return 1;
}
+int CL_GetPitchSign(prvm_edict_t *ent)
+{
+ dp_model_t *model;
+ if ((model = CL_GetModelFromEdict(ent)) && model->type == mod_alias)
+ return -1;
+ return 1;
+}
+
void CL_GetEntityMatrix (prvm_edict_t *ent, matrix4x4_t *out, qboolean viewmatrix)
{
prvm_eval_t *val;
float scale;
float pitchsign = 1;
- dp_model_t *model;
scale = 1;
val = PRVM_EDICTFIELDVALUE(ent, prog->fieldoffsets.scale);
Matrix4x4_CreateFromQuakeEntity(out, cl.csqc_origin[0], cl.csqc_origin[1], cl.csqc_origin[2], cl.csqc_angles[0], cl.csqc_angles[1], cl.csqc_angles[2], scale * cl_viewmodel_scale.value);
else
{
- if ((model = CL_GetModelFromEdict(ent)) && model->type == mod_alias)
- pitchsign = -1;
+ pitchsign = CL_GetPitchSign(ent);
Matrix4x4_CreateFromQuakeEntity(out, ent->fields.client->origin[0], ent->fields.client->origin[1], ent->fields.client->origin[2], pitchsign * ent->fields.client->angles[0], ent->fields.client->angles[1], ent->fields.client->angles[2], scale);
}
}
-
int CL_GetEntityLocalTagMatrix(prvm_edict_t *ent, int tagindex, matrix4x4_t *out)
{
int frame;
+ int ret;
dp_model_t *model;
+ entity_render_t cheatentity;
if (tagindex >= 0
&& (model = CL_GetModelFromEdict(ent))
&& model->animscenes)
frame = (int)ent->fields.client->frame;
if (frame < 0 || frame >= model->numframes)
frame = 0;
- return Mod_Alias_GetTagMatrix(model, model->animscenes[frame].firstframe, tagindex, out);
+ // now we'll do some CHEATING
+ memset(&cheatentity, 0, sizeof(cheatentity));
+ cheatentity.model = model;
+ CL_LoadFrameGroupBlend(ent, &cheatentity);
+ R_LerpAnimation(&cheatentity);
+ ret = CL_BlendTagMatrix(&cheatentity, tagindex, out);
+ if(ret)
+ *out = identitymatrix;
+ return ret;
}
*out = identitymatrix;
return 0;
mesh.texture = polys->begin_texture;
mesh.num_vertices = polys->begin_vertices;
mesh.num_triangles = polys->begin_vertices-2;
- mesh.data_element3s = polygonelements;
+ mesh.data_element3i = polygonelement3i;
+ mesh.data_element3s = polygonelement3s;
mesh.data_vertex3f = polys->begin_vertex[0];
mesh.data_color4f = polys->begin_color[0];
mesh.data_texcoord2f = polys->begin_texcoord[0];
#if 1
unsigned char *pvs;
#else
- static int fatpvsbytes;
- static unsigned char fatpvs[MAX_MAP_LEAFS/8];
+ int fatpvsbytes;
+ unsigned char fatpvs[MAX_MAP_LEAFS/8];
#endif
VM_SAFEPARMCOUNT(2, VM_SV_checkpvs);
VM_CL_ParticleThemeFree, // #526 void() particlethemefree (DP_CSQC_SPAWNPARTICLE)
VM_CL_SpawnParticle, // #527 float(vector org, vector vel, [float theme]) particle (DP_CSQC_SPAWNPARTICLE)
VM_CL_SpawnParticleDelayed, // #528 float(vector org, vector vel, float delay, float collisiondelay, [float theme]) delayedparticle (DP_CSQC_SPAWNPARTICLE)
-NULL, // #529
-NULL, // #530
+VM_loadfromdata, // #529
+VM_loadfromfile, // #530
NULL, // #531
-NULL, // #532
+VM_log, // #532
NULL, // #533
NULL, // #534
NULL, // #535
NULL, // #602
NULL, // #603
NULL, // #604
-NULL, // #605
-NULL, // #606
-NULL, // #607
+VM_callfunction, // #605
+VM_writetofile, // #606
+VM_isfunction, // #607
NULL, // #608
NULL, // #609
NULL, // #610
NULL, // #611
NULL, // #612
-NULL, // #613
+VM_parseentitydata, // #613
NULL, // #614
NULL, // #615
NULL, // #616
NULL, // #621
NULL, // #622
NULL, // #623
-VM_getextresponse, // #624 string getextresponse(void)
+VM_CL_getextresponse, // #624 string getextresponse(void)
NULL, // #625
};