ulf: I split up a biped model into different pieces like chest, arms, legs, etc. and then animate them together to make the player model. I use the different pieces to make different armor and clothing, this way I can just swap out the pieces.
loopix: Here is the code.
Code:
var cam_ang[3];
var cam_dist = 10;
var mouse_stopped;
function 3rd_person_cam()
{
if(!player || mouse_mode == 1){return;}
me = player;
var temp2[3];
camera.x = player.x + (-400 * cos(ang(player.pan)));
camera.y = player.y + (-400 * sin(ang(player.pan)));
camera.z += (-mouse_force.y * 50) * time;
if(camera.z >= player.z + 500){camera.z = player.z + 500;}
if(camera.z <= player.z - 80){camera.z = player.z - 80;}
vec_diff(temp.x,player.x,camera.x);
vec_to_angle(temp,temp);
camera.pan = temp.pan;
camera.tilt = temp.tilt;
trace_mode = ignore_passable + ignore_passents + ignore_me;
c_trace(player.x,camera.x,trace_mode);
if(trace_hit == 1)
{
vec_set(camera.x,target.x);
vec_normalize(normal.x,(camera.clip_near/2));
vec_add(camera.x,normal.x);
}
else
{
vec_diff(temp,camera.x,camera.x);
vec_normalize(temp,camera.clip_near);
vec_rotate(temp,vector(90,0,0));
vec_set(temp2,camera.pos);
vec_add(temp2,temp);
trace_mode = ignore_passable + ignore_passents + ignore_me;
c_trace(camera.x,temp2.x,trace_mode);
if(trace_hit == 1)
{
vec_set(camera.x,target.x);
vec_normalize(normal.x,(camera.clip_near/2));
vec_add(camera.x,normal.x);
}
else
{
vec_rotate(temp,vector(-180,0,0));
vec_set(temp2,camera.pos);
vec_add(temp2,temp);
trace_mode = ignore_passable + ignore_passents + ignore_me;
c_trace(camera.x,temp2.x,trace_mode);
if(trace_hit == 1)
{
vec_set(camera.x,target.x);
vec_normalize(normal.x,(camera.clip_near/2));
vec_add(camera.x,normal.x);
}
}
}
wait(1);
}
function vanity_cam()
{
cam_ang.pan += 1 * time;
cam_dist = 200;
camera.x = player.x + cos(cam_ang.pan) * (cam_dist * cos(cam_ang.tilt));
camera.y = player.y + sin(cam_ang.pan) * (cam_dist * cos(cam_ang.tilt));
camera.z = player.z + sin(cam_ang.tilt) * cam_dist;
vec_set(temp,player.x);
vec_sub(temp,camera.x);
vec_to_angle(camera.pan,temp);
}
function iso_cam()
{
if(!player || mouse_mode == 1){return;}
me = player;
var temp2[3];
camera.x = player.x + (-400 * cos(ang(player.pan)));
camera.y = player.y + (-400 * sin(ang(player.pan)));
camera.z = player.z + 500;
vec_diff(temp.x,player.x,camera.x);
vec_to_angle(temp,temp);
camera.pan = temp.pan;
camera.tilt = temp.tilt;
}
starter update_camera
{
while(!player){wait(1);}
while(1)
{
if(player.move_x == 0 && player.move_y == 0 && mouse_moving == 0)
{
mouse_stopped += 1 * time;
}
else
{
mouse_stopped = 0;
}
if(mouse_stopped >= 5000)
{
camera.arc = 72;
cam_ang.tilt = 20;
cam_ang.roll = 0;
vanity_cam();
}
else{iso_cam();}
wait(1);
}
}
function force_vanity()
{
mouse_stopped = 5000;
}
on_f7 force_vanity();