//Для всех частей тела
  for i := 0 to numBodyParts -1 do begin
    //Начать поиск ключевых кадров
    KeyFrameIndex:=-1;
    for j := 0 to BodyParts[i, 
             CurrentActions[i]].KeyFrameCount-1 do
      if Timers[i]=BodyParts[i, 
             CurrentActions[i]].KeyFrames[j].KFTimer then
        KeyFrameIndex:=j;
    if keyFrameIndex=-1 then begin
      //Допустим, что кадр не найден
      MaxLower:=0;
      MinUpper:=BodyParts[i, CurrentActions[i]].Duration+1;
      for j := 0 to BodyParts[i, 
               CurrentActions[i]].KeyFrameCount-1 do begin
        if BodyParts[i, CurrentActions[i]].KeyFrames[j].KFTimer>Timers[i] then begin
          if Bodyparts[i, CurrentActions[i]].KeyFrames[j].KFTimer<MinUpper then
            MinUpper:=Bodyparts[i, CurrentActions[i]].KeyFrames[j].KFTimer;
        end else
          if BodyParts[i, CurrentActions[i]].KeyFrames[j].KFTimer>MaxLower then
            MaxLower:=BodyParts[i, CurrentActions[i]].KeyFrames[j].KFTimer;
      end;
      //Взять значения углов поворота из этих кадров
      for j := 0 to BodyParts[i, CurrentActions[i]].KeyFrames[0].BoneCount-1 do begin
        for k:= 0 to Bodyparts[i, CurrentActions[i]].KeyframeCount-1 do begin
          if MaxLower=BodyParts[i, CurrentActions[i]].KeyFrames[k].KFTimer then begin
            Anglex1:=Bodyparts[i, CurrentActions[i]].keyFrames[k].BoneState[j].AngleYOZ;
            Angley1:=Bodyparts[i, CurrentActions[i]].keyFrames[k].BoneState[j].AngleXOZ;
            Anglez1:=Bodyparts[i, CurrentActions[i]].keyFrames[k].BoneState[j].AngleXOY;
          end;
          if MinUpper=BodyParts[i, CurrentActions[i]].KeyFrames[k].KFTimer then begin
            Anglex2:=Bodyparts[i, CurrentActions[i]].keyFrames[k].BoneState[j].AngleYOZ;
            Angley2:=Bodyparts[i, CurrentActions[i]].keyFrames[k].BoneState[j].AngleXOZ;
            Anglez2:=Bodyparts[i, CurrentActions[i]].keyFrames[k].BoneState[j].AngleXOY;
          end;
        end;
        //Вычислить значения углов поворота в данный момент времени
        anglex:=(Anglex2-anglex1)/(minUpper-maxLower)*Timers[i]+anglex1-
		(Anglex2-anglex1)/(minUpper-maxLower)*maxlower;
        angley:=(Angley2-angley1)/(minUpper-maxLower)*Timers[i]+angley1-
		(Angley2-angley1)/(minUpper-maxLower)*maxlower;
        anglez:=(Anglez2-anglez1)/(minUpper-maxLower)*Timers[i]+anglez1-
		(Anglez2-anglez1)/(minUpper-maxLower)*maxlower;
        //Записать эти значения в массив подобъекта Body
        Body.DeformationBoneState[Bodyparts[i, 
		    CurrentActions[i]].KeyFrames[0].BoneIndexes[j]].AngleYOZ:=anglex;
        Body.DeformationBoneState[Bodyparts[i, 
		    CurrentActions[i]].KeyFrames[0].BoneIndexes[j]].AngleXOZ:=angley;
        Body.DeformationBoneState[Bodyparts[i, 
		    CurrentActions[i]].KeyFrames[0].BoneIndexes[j]].AngleXOY:=anglez;
      end;
    end else begin
	 //Если же ключевой кадр найден, просто переписать из него значения
      for j := 0 to BodyParts[i, CurrentActions[i]].KeyFrames[KeyFrameIndex].BoneCount-1 do begin
        Body.DeformationBoneState[Bodyparts[i, 
		CurrentActions[i]].KeyFrames[KeyFrameIndex].BoneIndexes[j]].AngleYOZ:=
		Bodyparts[i, CurrentActions[i]].KeyFrames[KeyFrameIndex].BoneState[j].AngleYOZ;
        Body.DeformationBoneState[Bodyparts[i, 
		CurrentActions[i]].KeyFrames[KeyFrameIndex].BoneIndexes[j]].AngleXOZ:=
		Bodyparts[i, CurrentActions[i]].KeyFrames[KeyFrameIndex].BoneState[j].AngleXOZ;
        Body.DeformationBoneState[Bodyparts[i, 
		CurrentActions[i]].KeyFrames[KeyFrameIndex].BoneIndexes[j]].AngleXOY:=
		Bodyparts[i, CurrentActions[i]].KeyFrames[KeyFrameIndex].BoneState[j].AngleXOY;
      end;
    end;
  end;
end;