-qboolean CL_BlendTagMatrix(entity_render_t *entrender, int tagindex, matrix4x4_t *blendmatrix)
-{
- int j, l, k;
- float d;
- dp_model_t *model = entrender->model;
- if(!model)
- return false;
- // blend the matrices
- memset(&blendmatrix, 0, sizeof(blendmatrix));
- for (j = 0;j < MAX_FRAMEBLENDS && entrender->frameblend[j].lerp > 0;j++)
- {
- matrix4x4_t tagmatrix;
- if(!Mod_Alias_GetTagMatrix(model, entrender->frameblend[j].subframe, tagindex, &tagmatrix))
- return false;
- d = entrender->frameblend[j].lerp;
- for (l = 0;l < 4;l++)
- for (k = 0;k < 4;k++)
- blendmatrix->m[l][k] += d * tagmatrix.m[l][k];
- }
- return true;
+ CSQC_BEGIN
+ ed = PRVM_EDICT_NUM(entnum);
+ // camera:
+ // camera_transform
+ if((val = PRVM_EDICTFIELDVALUE(ed, prog->fieldoffsets.camera_transform)) && val->function)
+ {
+ ret = true;
+ if(viewmatrix || clipplane || visorigin)
+ {
+ valforward = PRVM_GLOBALFIELDVALUE(prog->globaloffsets.v_forward);
+ valright = PRVM_GLOBALFIELDVALUE(prog->globaloffsets.v_right);
+ valup = PRVM_GLOBALFIELDVALUE(prog->globaloffsets.v_up);
+ valendpos = PRVM_GLOBALFIELDVALUE(prog->globaloffsets.trace_endpos);
+ if(valforward && valright && valup && valendpos)
+ {
+ Matrix4x4_ToVectors(viewmatrix, forward, left, up, origin);
+ AnglesFromVectors(ang, forward, up, false);
+ prog->globals.client->time = cl.time;
+ prog->globals.client->self = entnum;
+ VectorCopy(origin, PRVM_G_VECTOR(OFS_PARM0));
+ VectorCopy(ang, PRVM_G_VECTOR(OFS_PARM1));
+ VectorCopy(forward, valforward->vector);
+ VectorScale(left, -1, valright->vector);
+ VectorCopy(up, valup->vector);
+ VectorCopy(origin, valendpos->vector);
+ PRVM_ExecuteProgram(val->function, "QC function e.camera_transform is missing");
+ VectorCopy(PRVM_G_VECTOR(OFS_RETURN), origin);
+ VectorCopy(valforward->vector, forward);
+ VectorScale(valright->vector, -1, left);
+ VectorCopy(valup->vector, up);
+ VectorCopy(valendpos->vector, visorigin);
+ Matrix4x4_Invert_Full(&mat, viewmatrix);
+ Matrix4x4_FromVectors(viewmatrix, forward, left, up, origin);
+ Matrix4x4_Concat(&matq, viewmatrix, &mat);
+ Matrix4x4_TransformPositivePlane(&matq, clipplane->normal[0], clipplane->normal[1], clipplane->normal[2], clipplane->dist, &clipplane->normal[0]);
+ }
+ }
+ }
+ CSQC_END
+
+ return ret;