return render;
}
-void CL_Effect(vec3_t org, int modelindex, int startframe, int framecount, float framerate)
+void CL_Effect(vec3_t org, dp_model_t *model, int startframe, int framecount, float framerate)
{
int i;
cl_effect_t *e;
- if (!modelindex) // sanity check
+ if (!model) // sanity check
return;
if (framerate < 1)
{
continue;
e->active = true;
VectorCopy(org, e->origin);
- e->modelindex = modelindex;
+ e->model = model;
e->starttime = cl.time;
e->startframe = startframe;
e->endframe = startframe + framecount;
}
// normal stuff
- entrender->model = CL_GetModelByIndex(e->modelindex);
+ entrender->model = e->model;
entrender->alpha = 1;
VectorSet(entrender->colormod, 1, 1, 1);
VectorSet(entrender->glowmod, 1, 1, 1);
framecount = MSG_ReadByte(&cl_message);
framerate = MSG_ReadByte(&cl_message);
- CL_Effect(org, modelindex, startframe, framecount, framerate);
+ CL_Effect(org, CL_GetModelByIndex(modelindex), startframe, framecount, framerate);
}
static void CL_ParseEffect2 (void)
framecount = MSG_ReadByte(&cl_message);
framerate = MSG_ReadByte(&cl_message);
- CL_Effect(org, modelindex, startframe, framecount, framerate);
+ CL_Effect(org, CL_GetModelByIndex(modelindex), startframe, framecount, framerate);
}
void CL_NewBeam (int ent, vec3_t start, vec3_t end, dp_model_t *m, int lightning)
CL_FindNonSolidLocation(pos, pos, 10);
CL_ParticleEffect(EFFECT_TE_EXPLOSION, 1, pos, pos, vec3_origin, vec3_origin, NULL, 0);
S_StartSound(-1, 0, cl.sfx_r_exp3, pos, 1, 1);
- CL_Effect(pos, cl.qw_modelindex_s_explod, 0, 6, 10);
+ CL_Effect(pos, CL_GetModelByIndex(cl.qw_modelindex_s_explod), 0, 6, 10);
break;
case QW_TE_TAREXPLOSION:
vec3_t origin;
double starttime;
float framerate;
- int modelindex;
+ dp_model_t *model;
int startframe;
int endframe;
// these are for interpolation
void CL_ClearTempEntities (void);
entity_render_t *CL_NewTempEntity (double shadertime);
-void CL_Effect(vec3_t org, int modelindex, int startframe, int framecount, float framerate);
+void CL_Effect(vec3_t org, dp_model_t *model, int startframe, int framecount, float framerate);
void CL_ClearState (void);
void CL_ExpandEntities(int num);
// #404 void(vector org, string modelname, float startframe, float endframe, float framerate) effect (DP_SV_EFFECT)
static void VM_CL_effect (prvm_prog_t *prog)
{
-#if 1
- Con_Printf(CON_WARN "WARNING: VM_CL_effect not implemented\n"); // FIXME: this needs to take modelname not modelindex, the csqc defs has it as string and so it shall be
-#else
+ dp_model_t *model;
vec3_t org;
VM_SAFEPARMCOUNT(5, VM_CL_effect);
VectorCopy(PRVM_G_VECTOR(OFS_PARM0), org);
- CL_Effect(org, (int)PRVM_G_FLOAT(OFS_PARM1), (int)PRVM_G_FLOAT(OFS_PARM2), (int)PRVM_G_FLOAT(OFS_PARM3), PRVM_G_FLOAT(OFS_PARM4));
-#endif
+
+ model = Mod_FindName(PRVM_G_STRING(OFS_PARM1), NULL);
+ if(model->loaded)
+ CL_Effect(org, model, (int)PRVM_G_FLOAT(OFS_PARM2), (int)PRVM_G_FLOAT(OFS_PARM3), PRVM_G_FLOAT(OFS_PARM4));
+ else
+ Con_Printf(CON_ERROR "VM_CL_effect: Could not load model '%s'\n", PRVM_G_STRING(OFS_PARM1));
}
// #405 void(vector org, vector velocity, float howmany) te_blood (DP_TE_BLOOD)