#define MC_CAMERA_ORIGIN_OFFSET vector(5,-25,40)
...
void _handle_cam_3rdperson()
{
var i;
VECTOR vec_temp;
c_rotate ( me, vector(-mickey.x * 0.3, 0, 0), IGNORE_ME |
IGNORE_PASSABLE | IGNORE_SPRITES | USE_POLYGON | GLIDE );
my.skNextPan = my.pan;
my.skNextTilt = clamp ( my.skNextTilt - mickey.y * 0.3, -90, 90 );
my.skNextRoll = 0;
VECTOR vecOrigin;
vec_set ( vecOrigin, MC_CAMERA_ORIGIN_OFFSET );
vec_rotate ( vecOrigin, vector(my.pan,0,0) );
vec_add ( vecOrigin, my.x );
VECTOR vecTarget;
vec_for_angle ( vecTarget, my.skNextPan );
vec_scale ( vecTarget, MC_CAMERA_OFFSET_DIST );
vec_add ( vecTarget, vecOrigin );
var distance = c_trace ( player.x, vecTarget, IGNORE_ME |
IGNORE_PASSABLE | IGNORE_SPRITES | USE_POLYGON );
if ( HIT_TARGET )
{
beep(); // THIS BEEPS WHILE THE CAMERA VIEW SPINS WILDLY,
// BUT DOES NOT BEEP BEFORE.
vec_set ( vecTarget, hit.x );
vec_set ( vec_temp, hit.nx);
vec_normalize ( vec_temp, 11);
vec_add ( vecTarget, vec_temp);
if ( distance > MC_CAMERA_TRANS_TOLERANCE )
reset ( me, TRANSLUCENT );
else
set ( me, TRANSLUCENT );
}
else
{
reset ( me, TRANSLUCENT );
}
vec_set(camera.x, vecTarget);
vec_sub ( vecOrigin, camera.x );
vec_to_angle ( camera.pan, vecOrigin ); // IF I COMMENT THIS
// LINE OF CODE OUT, THE SPINNING STOPS, BUT I CANNOT
// TURN ANYWHERE WHILE SWIMMING UNDERWATER.
}