Code:
//CAMERA CODE
//2005 by LionTs.
//Place big (72pt) text over your gamescreen:"THANKS TO LionTs" in pure red, if this one was used in your project, text must be visible 1 hour :)
//Ok, it's my stupid joke above...
//FREE for all 3DGS community, can be used or modified freely in any project without written permissions from author.
// - for cell based or board games
// - 3rd view, follow the player
// - player moves in four directions only
// - code can be rewritten for diagonal move (add another if(player.pan==...))
function follow_cam()
{
proc_kill(4); //kill camera code if exist
proc_late();
vec_set(camera.pan,nullvector); //reset camera's angles
camera.tilt = -15; // look down at the player
while (1){ //do it forever
while (player==null) {wait(1);}
vec_set(camera.x,player.x);
camera.x -= 320; //distance between the player and the camera
camera.z += 190; // above the player
//case forward
if (player.pan == 0) {
if (camera.tilt != -15) {
if (camera.tilt < -15) {
camera.tilt += time;
camera.tilt=min(camera.tilt,-15);
}
}
if (camera.pan != 0) {
if (camera.pan > 0) {
camera.pan -= time;
camera.pan=max(camera.pan,0);
}
if (camera.pan < 0) {
camera.pan += time;
camera.pan=min(camera.pan,0);
}
}
} else {
//case backward
if (player.pan == 180) {
if (camera.tilt != -30) {
if (camera.tilt > -30) {
camera.tilt -= time;
camera.tilt=max(camera.tilt,-30);
}
}
if (camera.pan != 0) {
if (camera.pan > 0) {
camera.pan -= time;
camera.pan=max(camera.pan,0);
}
if (camera.pan < 0) {
camera.pan += time;
camera.pan=min(camera.pan,0);
}
}
} else {
//case left
if (player.pan == 270) {
if (camera.tilt != -15) {
if (camera.tilt < -15) {
camera.tilt += time;
camera.tilt=min(camera.tilt,-15);
}
}
if (camera.pan != -15) {
if (camera.pan > -15) {
camera.pan -= time;
camera.pan=max(camera.pan,-15);
}
if (camera.pan < -15) {
camera.pan += time;
camera.pan=min(camera.pan,-15);
}
}
} else {
//case right
if (player.pan == 90) {
if (camera.tilt != -15) {
if (camera.tilt < -15) {
camera.tilt += time;
camera.tilt=min(camera.tilt,-15);
}
}
if (camera.pan != 15) {
if (camera.pan > 15) {
camera.pan -= time;
camera.pan=max(camera.pan,15);
}
if (camera.pan < 15) {
camera.pan += time;
camera.pan=min(camera.pan,15);
}
}
}}}}//switch
wait(1);
}
} // end of FOLLOW_CAM()