+void skeleton_loadinfo(entity e)
+{
+ float i;
+ if(e.skeleton_info_modelindex == e.modelindex && e.skeleton_info_skin == e.skin)
+ return;
+ e.bone_upperbody = 0;
+ e.bone_weapon = gettagindex(e, "weapon");
+ if(!e.bone_weapon)
+ e.bone_weapon = gettagindex(e, "tag_weapon");
+ if(!e.bone_weapon)
+ e.bone_weapon = gettagindex(e, "bip01 r hand");
+ for(i = 0; i < MAX_AIM_BONES; ++i)
+ {
+ e.(bone_aim[i]) = 0;
+ e.(bone_aimweight[i]) = 0;
+ }
+ e.fixbone = 0;
+ if(get_model_parameters(e.model, e.skin))
+ {
+ if(get_model_parameters_bone_upperbody)
+ e.bone_upperbody = gettagindex(e, get_model_parameters_bone_upperbody);
+ if(e.bone_upperbody)
+ e.fixbone = get_model_parameters_fixbone;
+ if(get_model_parameters_bone_weapon)
+ e.bone_weapon = gettagindex(e, get_model_parameters_bone_weapon);
+ for(i = 0; i < MAX_AIM_BONES; ++i)
+ {
+ if(get_model_parameters_bone_aim[i])
+ e.(bone_aim[i]) = gettagindex(e, get_model_parameters_bone_aim[i]);
+ if(e.bone_aim[i])
+ e.(bone_aimweight[i]) = get_model_parameters_bone_aimweight[i];
+ }
+ }
+ else
+ dprint("No model parameters for ", e.model, "\n");
+ dprint(e.model, " uses ", ftos(e.bone_upperbody), " ", ftos(e.fixbone), "\n");
+ get_model_parameters(string_null, 0);
+ e.skeleton_info_modelindex = e.modelindex;
+ e.skeleton_info_skin = e.skin;
+ if(e.skeletonindex)
+ {
+ skel_delete(e.skeletonindex);
+ e.skeletonindex = 0;
+ }
+}
+
+void skeleton_markbones(entity e)