Posted By: romin2011
3rd person shooter with bone animations - 05/03/11 17:19
Hello every one,
It is first time i am making a 3rd person shooter game and first time working with bone animations. It is actually all about learning rather then completing a game. I had no where to start from as there is no tutorials for making 3rd person shooter or game with bone animations.
All i have at hand is a very small workshop on bone animation. I have alot of problem with 3rd person camera.
Here is what i have done so far, I have some problems with this code.
1. I can't bring the player to the side of the view.
2. when i turn the mouse right the player turn to left and vice versa.
3. Other improvements specially in camera if you suggest please.
Thanks Alot
It is first time i am making a 3rd person shooter game and first time working with bone animations. It is actually all about learning rather then completing a game. I had no where to start from as there is no tutorials for making 3rd person shooter or game with bone animations.
All i have at hand is a very small workshop on bone animation. I have alot of problem with 3rd person camera.
Here is what i have done so far, I have some problems with this code.
1. I can't bring the player to the side of the view.
2. when i turn the mouse right the player turn to left and vice versa.
3. Other improvements specially in camera if you suggest please.
Thanks Alot
Code:
action my_action() { VECTOR player_distance; var pose_speed = 0; var walk_speed = 0; // stores robot's walking animation var turn_speed = 0; var reload_speed = 0; ANGLE bone_angle; // a vector that holds the pan, tilt and roll angles player=me; var cycle=0; var key_pressed=0; var a =200; var b =200; while(1) { camera.arc = 70; camera.clip_near = 0; camera.pan = player.pan; camera.tilt=bone_angle.tilt; camera.roll=0; camera.x=player.x -55 * cos(player.pan); camera.y=player.y -55 * sin(player.pan); camera.z=player.z+40; ent_animate(my, NULL, 0, 0); // reset all the animations pose_speed += 2 * time_step; // increase walk_speed, "2" sets the animation speed ent_animate(my, "wpose", pose_speed, ANM_CYCLE); // animate the model (use "walk") bone_angle.pan = (mouse_pos.x - screen_size.x / 2) / 10; // changes pan from -40 to +40 degrees bone_angle.tilt = (screen_size.y / 2 - mouse_pos.y) / 10; // changes tilt from -30 to +30 degrees bone_angle.roll = 0; // no need to change the roll angle for this bone ent_bonereset(my,"Spine"); ent_bonerotate(my,"Spine", bone_angle); // rotate the bone named "CA4" if (key_r && key_pressed==0) // reload { key_pressed=1; } if(key_pressed) { ent_animate(my, NULL, 0, 0); // reset all the animations reload_speed += 5 * time_step; // then increase turn_speed ent_animate(my, "reload", reload_speed, ANM_ADD); // animate the model (use "turn") if(reload_speed>=100) { key_pressed=0; reload_speed=0; } } if(key_a||key_d) //Turn { my.pan+=5*(key_a-key_d)*time_step; // ent_animate(my, NULL, 0, 0); // reset all the animations turn_speed += 5 * time_step; // then increase turn_speed ent_animate(my, "walk", turn_speed, ANM_ADD); // animate the model (use "turn") if(turn_speed>=100){turn_speed=0;} } if(key_w||key_s) //Move { player_distance.x = (key_w - key_s) * 5 * time_step; player_distance.y = 0; player_distance.z = 0; c_move (my, player_distance, nullvector, GLIDE | IGNORE_PASSABLE); // ent_animate(my, NULL, 0, 0); // reset all the animations walk_speed += 10 * time_step; // then increase turn_speed ent_animate(my, "walk", walk_speed, ANM_ADD); // animate the model (use "turn") if(walk_speed>=100){walk_speed=0;} } wait(1); } }