if instance_exists(follow)
{
    x_to = follow.x;
    y_to = follow.y;
}
else
{
	x_to = RES_W / 2;
	y_to = RES_H / 2;
}

shake_magnitude = lerp(shake_magnitude, 0, 0.05);
if shake_magnitude < 1
	shake_magnitude = 0;
	
var _x_delta = random_range(-shake_magnitude, shake_magnitude);
var _y_delta = random_range(-shake_magnitude, shake_magnitude);

var _target_x = clamp(x_to, bound_left + cam_width / 2, bound_right - cam_width / 2);
x += (_target_x - x) * smooth * global.time_scale + _x_delta;
var _target_y = clamp(y_to, bound_top + cam_height / 2, bound_bottom - cam_height / 2);
y += (_target_y - y) * smooth * global.time_scale + _y_delta;

var _cam_x = x - cam_width / 2;
var _cam_y = y - cam_height / 2;
camera_set_view_pos(view_camera[0], _cam_x, _cam_y);