Posted By: Delirium
Whats the problem with this code? Yet another... - 11/03/11 21:45
Alright I know you're sick of hearing about problems writing
lite-C player walk routines. I just bought A8 commercial and long wistfully for the days of ease writing WDL for A6,A5. I tried suggestions and have sought to use player routines from tutorials, from the built in help, from the wiki. Has anyone ever actually written a working player walk routine in lite C where the character doesn't fall through the floor, float up helplessly or pass through walls? Is there a tutorial series in the AUM magazine that takes you through building a simple game with a walking character? I'll look. In the meantime, here is the code that's currently giving me trouble. The level won't run, stops with an error on while(1) although I think my brackets are all there.....
lite-C player walk routines. I just bought A8 commercial and long wistfully for the days of ease writing WDL for A6,A5. I tried suggestions and have sought to use player routines from tutorials, from the built in help, from the wiki. Has anyone ever actually written a working player walk routine in lite C where the character doesn't fall through the floor, float up helplessly or pass through walls? Is there a tutorial series in the AUM magazine that takes you through building a simple game with a walking character? I'll look. In the meantime, here is the code that's currently giving me trouble. The level won't run, stops with an error on while(1) although I think my brackets are all there.....
Code:
action player_walk() while (1) { // rotate the player using the [A] and [D] keys my.pan += 5*(key_a-key_d)*time_step; // determine the ground distance by a downwards trace var dist_down; if (c_trace(my.x,vector(my.x,my.y,my.z-5000),IGNORE_ME | IGNORE_PASSABLE | USE_BOX) > 0) dist_down = my.z + vFeet.z - target.z; // get distance between player's feet and the ground else dist_down = 0; // apply gravity when the player is in the air if (dist_down > 0) // above floor, fall down with increasing speed dist_down = clamp(dist_down,0,accelerate(speed_down,5,0.1)); else // on or below floor, set downward speed to zero speed_down = 0; // move the player using the [W] and [S] keys var dist_ahead = 5*(key_w-key_s)*time_step; dist_ahead = sign(dist_ahead)*(abs(dist_ahead) + 0.5*dist_down); // adapt the speed on slopes c_move(me,vector(dist_ahead,0,0),vector(0,0,-dist_down),IGNORE_PASSABLE | GLIDE); // move the player // animate the player according to its moved distance if (dist_ahead != 0) // player is moving ahead { anim_percent += 1.3*dist_ahead; // 1.3 = walk cycle percentage per quant ent_animate(me,"walk",anim_percent,ANM_CYCLE); // play the "walk" animation } else // player stands still { anim_percent += 5*time_step; ent_animate(me,"stand",anim_percent,ANM_CYCLE); // play the "stand" animation } wait(1); }