]> git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
fix some bugs with skeletonindex handling
authorhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Sun, 31 Jan 2010 23:12:33 +0000 (23:12 +0000)
committerRudolf Polzer <divVerent@alientrap.org>
Mon, 1 Feb 2010 07:30:36 +0000 (08:30 +0100)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@9904 d7cf8633-e32d-0410-b094-e92efae38249
::stable-branch::merge=7302f77677d2795bd53eeb06392a410783a6aa79

prvm_cmds.c

index a0ede0b64230b848e5316f15712e0b10137b6cc2..48184e519169af58496829b94490ea17e18193e2 100644 (file)
@@ -191,11 +191,11 @@ void VM_UpdateEdictSkeleton(prvm_edict_t *ed, const dp_model_t *edmodel, const f
                ed->priv.server->skeleton.relativetransforms = Mem_Alloc(prog->progs_mempool, ed->priv.server->skeleton.model->num_bones * sizeof(matrix4x4_t));
        if (ed->priv.server->skeleton.relativetransforms)
        {
-               int skeletonindex = 0;
+               int skeletonindex = -1;
                skeleton_t *skeleton;
                prvm_eval_t *val;
-               if ((val = PRVM_EDICTFIELDVALUE(ed, prog->fieldoffsets.skeletonindex))) skeletonindex = (int)val->_float;
-               if (skeletonindex > 0 && skeletonindex < MAX_EDICTS && (skeleton = prog->skeletons[skeletonindex]) && skeleton->model->num_bones == ed->priv.server->skeleton.model->num_bones)
+               if ((val = PRVM_EDICTFIELDVALUE(ed, prog->fieldoffsets.skeletonindex))) skeletonindex = (int)val->_float - 1;
+               if (skeletonindex >= 0 && skeletonindex < MAX_EDICTS && (skeleton = prog->skeletons[skeletonindex]) && skeleton->model->num_bones == ed->priv.server->skeleton.model->num_bones)
                {
                        // custom skeleton controlled by the game (FTE_CSQC_SKELETONOBJECTS)
                        memcpy(ed->priv.server->skeleton.relativetransforms, skeleton->relativetransforms, ed->priv.server->skeleton.model->num_bones * sizeof(matrix4x4_t));
@@ -6001,7 +6001,7 @@ void animatemodel(dp_model_t *model, prvm_edict_t *ed)
 {
        prvm_eval_t *val;
        skeleton_t *skeleton;
-       int skeletonindex = 0;
+       int skeletonindex = -1;
        qboolean need = false;
        if(!model->AnimateVertices)
        {
@@ -6017,8 +6017,8 @@ void animatemodel(dp_model_t *model, prvm_edict_t *ed)
        VM_GenerateFrameGroupBlend(ed->priv.server->framegroupblend, ed);
        VM_FrameBlendFromFrameGroupBlend(ed->priv.server->frameblend, ed->priv.server->framegroupblend, model);
        need |= (memcmp(&animatemodel_cache.frameblend, &ed->priv.server->frameblend, sizeof(ed->priv.server->frameblend)));
-       if ((val = PRVM_EDICTFIELDVALUE(ed, prog->fieldoffsets.skeletonindex))) skeletonindex = (int)val->_float;
-       if (!(skeletonindex > 0 && skeletonindex < MAX_EDICTS && (skeleton = prog->skeletons[skeletonindex]) && skeleton->model->num_bones == ed->priv.server->skeleton.model->num_bones))
+       if ((val = PRVM_EDICTFIELDVALUE(ed, prog->fieldoffsets.skeletonindex))) skeletonindex = (int)val->_float - 1;
+       if (!(skeletonindex >= 0 && skeletonindex < MAX_EDICTS && (skeleton = prog->skeletons[skeletonindex]) && skeleton->model->num_bones == ed->priv.server->skeleton.model->num_bones))
                skeleton = NULL;
        need |= (animatemodel_cache.skeleton_p != skeleton);
        if(skeleton)