]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - clvm_cmds.c
VM_FrameBlendFromFrameGroupBlend was using cl.time even on server
[xonotic/darkplaces.git] / clvm_cmds.c
index 7975bf1e9e8c451295c6c81511123b71bb617789..1bc83027b8f55c8388a92e3b3038471f453878e5 100644 (file)
@@ -1455,12 +1455,15 @@ static void VM_CL_runplayerphysics (prvm_prog_t *prog)
        cl_clientmovement_state_t s;
        prvm_edict_t *ent;
 
+       memset(&s, 0, sizeof(s));
+
        VM_SAFEPARMCOUNTRANGE(0, 1, VM_CL_runplayerphysics);
 
        ent = (prog->argc == 1 ? PRVM_G_EDICT(OFS_PARM0) : prog->edicts);
        if(ent == prog->edicts)
        {
                // deprecated use
+               s.self = NULL;
                VectorCopy(PRVM_clientglobalvector(pmove_org), s.origin);
                VectorCopy(PRVM_clientglobalvector(pmove_vel), s.velocity);
                VectorCopy(PRVM_clientglobalvector(pmove_mins), s.mins);
@@ -1472,6 +1475,7 @@ static void VM_CL_runplayerphysics (prvm_prog_t *prog)
        else
        {
                // new use
+               s.self = ent;
                VectorCopy(PRVM_clientedictvector(ent, origin), s.origin);
                VectorCopy(PRVM_clientedictvector(ent, velocity), s.velocity);
                VectorCopy(PRVM_clientedictvector(ent, mins), s.mins);
@@ -1490,7 +1494,7 @@ static void VM_CL_runplayerphysics (prvm_prog_t *prog)
        s.cmd.jump = (s.cmd.buttons & 2) != 0;
        s.cmd.crouch = (s.cmd.buttons & 16) != 0;
 
-       CL_ClientMovement_PlayerMove(&s);
+       CL_ClientMovement_PlayerMove_Frame(&s);
 
        if(ent == prog->edicts)
        {
@@ -2376,7 +2380,7 @@ static int CL_GetEntityLocalTagMatrix(prvm_prog_t *prog, prvm_edict_t *ent, int
         && model->animscenes)
        {
                VM_GenerateFrameGroupBlend(prog, ent->priv.server->framegroupblend, ent);
-               VM_FrameBlendFromFrameGroupBlend(ent->priv.server->frameblend, ent->priv.server->framegroupblend, model);
+               VM_FrameBlendFromFrameGroupBlend(ent->priv.server->frameblend, ent->priv.server->framegroupblend, model, cl.time);
                VM_UpdateEdictSkeleton(prog, ent, model, ent->priv.server->frameblend);
                return Mod_Alias_GetTagMatrix(model, ent->priv.server->frameblend, &ent->priv.server->skeleton, tagindex, out);
        }
@@ -2528,7 +2532,7 @@ static void VM_CL_gettaginfo (prvm_prog_t *prog)
        VectorScale(le, -1, PRVM_clientglobalvector(v_right));
        model = CL_GetModelFromEdict(e);
        VM_GenerateFrameGroupBlend(prog, e->priv.server->framegroupblend, e);
-       VM_FrameBlendFromFrameGroupBlend(e->priv.server->frameblend, e->priv.server->framegroupblend, model);
+       VM_FrameBlendFromFrameGroupBlend(e->priv.server->frameblend, e->priv.server->framegroupblend, model, cl.time);
        VM_UpdateEdictSkeleton(prog, e, model, e->priv.server->frameblend);
        CL_GetExtendedTagInfo(prog, e, tagindex, &parentindex, &tagname, &tag_localmatrix);
        Matrix4x4_ToVectors(&tag_localmatrix, fo, le, up, trans);
@@ -3842,7 +3846,7 @@ static void VM_CL_skel_build(prvm_prog_t *prog)
        lastbone = min(lastbone, model->num_bones - 1);
        lastbone = min(lastbone, skeleton->model->num_bones - 1);
        VM_GenerateFrameGroupBlend(prog, framegroupblend, ed);
-       VM_FrameBlendFromFrameGroupBlend(frameblend, framegroupblend, model);
+       VM_FrameBlendFromFrameGroupBlend(frameblend, framegroupblend, model, cl.time);
        blendfrac = 1.0f - retainfrac;
        for (numblends = 0;numblends < MAX_FRAMEBLENDS && frameblend[numblends].lerp;numblends++)
                frameblend[numblends].lerp *= blendfrac;
@@ -3852,7 +3856,7 @@ static void VM_CL_skel_build(prvm_prog_t *prog)
                Matrix4x4_Accumulate(&blendedmatrix, &skeleton->relativetransforms[bonenum], retainfrac);
                for (blendindex = 0;blendindex < numblends;blendindex++)
                {
-                       Matrix4x4_FromBonePose6s(&matrix, model->num_posescale, model->data_poses6s + 6 * (frameblend[blendindex].subframe * model->num_bones + bonenum));
+                       Matrix4x4_FromBonePose7s(&matrix, model->num_posescale, model->data_poses7s + 7 * (frameblend[blendindex].subframe * model->num_bones + bonenum));
                        Matrix4x4_Accumulate(&blendedmatrix, &matrix, frameblend[blendindex].lerp);
                }
                skeleton->relativetransforms[bonenum] = blendedmatrix;
@@ -4150,13 +4154,18 @@ static void VM_CL_loadcubemap(prvm_prog_t *prog)
 
 #define REFDEFFLAG_TELEPORTED 1
 #define REFDEFFLAG_JUMPING 2
+#define REFDEFFLAG_DEAD 4
+#define REFDEFFLAG_INTERMISSION 8
 static void VM_CL_V_CalcRefdef(prvm_prog_t *prog)
 {
        matrix4x4_t entrendermatrix;
        vec3_t clviewangles;
+       vec3_t clvelocity;
        qboolean teleported;
        qboolean clonground;
        qboolean clcmdjump;
+       qboolean cldead;
+       qboolean clintermission;
        float clstatsviewheight;
        prvm_edict_t *ent;
        int flags;
@@ -4173,8 +4182,11 @@ static void VM_CL_V_CalcRefdef(prvm_prog_t *prog)
        clonground = ((int)PRVM_clientedictfloat(ent, pmove_flags) & PMF_ONGROUND) != 0;
        clcmdjump = (flags & REFDEFFLAG_JUMPING) != 0;
        clstatsviewheight = PRVM_clientedictvector(ent, view_ofs)[2];
+       cldead = (flags & REFDEFFLAG_DEAD) != 0;
+       clintermission = (flags & REFDEFFLAG_INTERMISSION) != 0;
+       VectorCopy(PRVM_clientedictvector(ent, velocity), clvelocity);
 
-       V_CalcRefdefUsing(&entrendermatrix, clviewangles, teleported, clonground, clcmdjump, clstatsviewheight);
+       V_CalcRefdefUsing(&entrendermatrix, clviewangles, teleported, clonground, clcmdjump, clstatsviewheight, cldead, clintermission, clvelocity);
 
        VectorCopy(cl.csqc_vieworiginfromengine, cl.csqc_vieworigin);
        VectorCopy(cl.csqc_viewanglesfromengine, cl.csqc_viewangles);