Actually, I just finished and I encountered a problem.

But once that problem is fixed, I think it will be complete.

I took the script, reworked it as lite-c. It is still David Lancaster's script in look and function, I simply translated.

Now from what works, it seems to be fine except for one thing:

the player keeps falling. When he hits the ground he "teleports" to the top of the screen and continues falling.

I think the other scripts work, because he moves and he's animated and he swings his sword, but he keeps falling.

Big script inc:

main.c

Code:
///////////////////////////////
#define PRAGMA_PATH "%EXE_DIR%\templates\images";
#define PRAGMA_PATH "%EXE_DIR%\templates\models";
#define PRAGMA_PATH "%EXE_DIR%\templates\sounds";

#include <acknex.h>
//#include "default.c"
#include "player.c"
#include "enemy.c"
#include "animation.c"

function main()
{
	camera.clip_near = 0;
	video_switch(7,0,1);
	level_load("khmove.wmb");
}



player.c

Code:
function rotate_entity(rotate_angle,rotate_speed);
function handle_animation(animation_speed);

#define nullframe -2
#define blend -1
#define stand 0
#define run 1
#define walk 2
#define jump 3
#define fall 4
#define attack_a 5
#define attack_b 6
#define attack_c 7
#define attack_d 8
#define attack_e 9
#define attack_f 10

#define move_x skill22
#define move_y skill23
#define move_z skill24
#define force_x skill25
#define force_y skill26
#define force_z skill27
#define velocity_x skill28
#define velocity_y skill29
#define velocity_z skill30
#define animate skill31
#define animate2 skill32
#define animblend skill33
#define currentframe skill34
#define blendframe skill35
#define z_offset skill50
#define jumping_mode skill51
#define grav skill52
#define movement_mode skill53
#define moving skill54
#define hit_by_player skill55
#define entity_type skill56

ENTITY* player_weapon;
ENTITY* target_enemy;


var camera_move_to[3];
var camera_distance = 200;
var camera_pan;
var camera_tilt;

var space_press = 0;
var mouse_left_press = 0;
var mouse_right_press = 0;
var combo_continue = 0;
var player_lock_on = 0;
var airborne_attack = 0;

action attach_weapon()
{
	VECTOR temp;
	VECTOR temp2;
	ANGLE tempAng;
	player_weapon = my;
	set(my,PASSABLE,SHADOW);
	proc_mode = PROC_LATE;
	while(!player) wait(1);
	while (player) {
		vec_for_vertex(temp.x,player,1175); //hand palm base
		vec_for_vertex(temp2.x,player,1240); //hand palm tip
		vec_set(my.x,temp.x);
		vec_diff(temp.x,temp2.x,temp.x);
		vec_to_angle(tempAng.pan,temp.x);
		vec_set(my.pan,tempAng.pan);
		wait(1);
	}
}

function handle_movement() 
{
	VECTOR temp;
	VECTOR temp2;
	ANGLE plAng;
	temp.x = -1000;
	temp.y = 0;
	my.moving = 0;
	if (key_w == 1 && key_s == 0 && key_a == 0 && key_d == 0) { temp.x = camera.pan; }
	if (key_s == 1 && key_w == 0 && key_a == 0 && key_d == 0) { temp.x = camera.pan + 180; }
	if (key_a == 1 && key_s == 0 && key_w == 0 && key_d == 0) { temp.x = camera.pan + 90; }
	if (key_d == 1 && key_s == 0 && key_a == 0 && key_w == 0) { temp.x = camera.pan - 90; }
	if (key_w == 1 && key_a == 1 && key_d == 0 && key_s == 0) { temp.x = camera.pan + 45; }
	if (key_w == 1 && key_d == 1 && key_a == 0 && key_s == 0) { temp.x = camera.pan - 45; }
	if (key_s == 1 && key_a == 1 && key_d == 0 && key_w == 0) { temp.x = camera.pan + 135; }
	if (key_s == 1 && key_d == 1 && key_a == 0 && key_w == 0) { temp.x = camera.pan - 135; }
	if (temp.x != -1000) {
		my.moving = 1;
		if (key_shift == 1) { temp.y = 10 * time_step; } else { temp.y = 15 * time_step; }
	}

	if (my.movement_mode == 0) {
		my.move_x = fcos(temp.x,temp.y);
		my.move_y = fsin(temp.x,temp.y);
	}
	if (my.movement_mode == 1 || my.movement_mode == 2) {
		temp.y = fsin((my.animate * 1.2) + 45,15 * time_step);
		my.move_x = fcos(my.pan,temp.y);
		my.move_y = fsin(my.pan,temp.y);
		temp.y = 0;
		if (temp.x != -1000) { //if we need to rotate whilst attacking (the player is pressing keys to rotate)
			temp.y = 1;
		}
	}

//	move_mode = IGNORE_PASSABLE | GLIDE; //replace c_move with these 2 lines in versions of gamestudio below 6.4
//	ent_move(nullvector,my.move_x);
	c_move(my,nullvector,my.move_x,USE_AABB | IGNORE_PASSABLE | GLIDE);

	result = c_trace(vector(my.x,my.y,my.z - my.z_offset),vector(my.x,my.y,my.z - 4000),IGNORE_ME | IGNORE_PASSABLE | USE_BOX);
	if (result < 0) { my.z -= result; my.velocity_z = 0; }

	if (target_enemy == NULL) {
		if (temp.y > 0) { rotate_entity(temp.x,30); }
	} else {
		vec_diff(temp2.x,target_enemy.x,my.x);
		vec_to_angle(plAng.pan,temp2.x);
		rotate_entity(plAng.pan,30);
	}

	if (my.movement_mode == 0) {
		my.grav = 6;
		if (my.move_x != 0 || my.move_y != 0) { //if we are moving
			if (my.animblend == stand) { //if our current animation is stand
				if (key_shift == 1) { my.blendframe = walk; } else { my.blendframe = run; }
			}
			if (my.animblend == run && key_shift == 1) { my.blendframe = walk; }
			if (my.animblend == walk && key_shift == 0) { my.blendframe = run; }
		} else {
			if (my.animblend > stand && my.animblend != jump && my.animblend != fall) { //if we arn't moving and our current animation is walk or run, blend and cycle the stand animation
				my.blendframe = stand;
			}
		}
		if (mouse_left == 0 && mouse_left_press == 1) { mouse_left_press = 0; }
		if (mouse_left == 1 && mouse_left_press == 0 && my.animblend >= stand) {
			mouse_left_press = 1;
			my.blendframe = attack_a;
			if (my.jumping_mode == 1) {
				airborne_attack = 1;
			} else {
				airborne_attack = 0;
			}
			my.movement_mode = 1;
			combo_continue = 0;
		}
		if (mouse_right == 0 && mouse_right_press == 1) { mouse_right_press = 0; } ///////////////
		if (mouse_right == 1 && mouse_right_press == 0) {
			if (player_lock_on == 0) {
//				vec_set(temp.x,vector(360,180,250)); //replace c_scan with these 2 lines in versions of gamestudio below 6.4
//			 	result = scan_entity(player.x,temp);
				c_scan(player.x,player.pan,vector(360,180,250),SCAN_ENTS | SCAN_LIMIT | IGNORE_ME);
				if (you != NULL) {
					if (you.entity_type == 2) { //make sure you've scanned an enemy
						player_lock_on = 1;
						target_enemy = you;
					}
				}
			} else {
				player_lock_on = 0;
				target_enemy = NULL;
			}
			mouse_right_press = 1;
		}
	}
	if (my.movement_mode == 1) {
		if (my.jumping_mode != 10) {
			my.jumping_mode = 0;
		} else {
			if (my.animate >= 60 && my.animblend >= stand) { my.jumping_mode = 0; }
		}
		if (mouse_left == 0 && mouse_left_press == 1) { mouse_left_press = 0; }
		if (mouse_left == 1 && mouse_left_press == 0 && my.animate >= 30 && combo_continue == 0) { mouse_left_press = 1; combo_continue = 1; }
	}
	if (my.movement_mode == 2) {
		my.jumping_mode = 0;
		if (mouse_left == 0 && mouse_left_press == 1) { mouse_left_press = 0; }
		if (mouse_left == 1 && mouse_left_press == 0 && my.animate >= 30 && combo_continue == 0) { mouse_left_press = 1; combo_continue = 1; }
	}
}

function handle_grav() 
{
	//trace_mode = IGNORE_ME+IGNORE_PASSABLE+USE_BOX;
	result = c_trace(vector(my.x,my.y,my.z - my.z_offset),vector(my.x,my.y,my.z - 4000),IGNORE_ME | IGNORE_PASSABLE | USE_BOX);
	if (result < 3) {
		if (my.jumping_mode == 0) {
			my.force_z = -1 * result;
			if (key_space == 0 && space_press == 1) { space_press = 0; }
			if (key_space == 1 && space_press == 0 && my.movement_mode == 0 && my.animblend >= stand && my.animblend != jump && my.animblend != fall) {
				space_press = 1;
				my.jumping_mode = 1;
				my.force_z = 25;
				my.blendframe = jump;
				my.animate2 = 0;
				my.animblend = blend;
			}
		}
		if (my.jumping_mode == 2 || my.jumping_mode == 3) { my.jumping_mode = 0; }
	} else {
		if (my.jumping_mode == 2) {
			if (result > 120) {
				my.animate = 60;
				my.jumping_mode = 3;
			} else {
				my.jumping_mode = 0;
			}
		}
		if (my.jumping_mode == 3 && result <= 120) { my.jumping_mode = 0;	}
		if (my.jumping_mode == 0 && my.movement_mode == 0) {
			if (result > 120 && my.animblend >= stand && my.animblend != jump && my.animblend != fall) {
				my.jumping_mode = 3;
				my.blendframe = fall;
				my.animate2 = 0;
				my.animblend = blend;
			}
		}
		my.force_z -= my.grav * time_step;
		my.force_z = maxv(-30,my.force_z);
		if (my.movement_mode == 2) { my.force_z = 0; }
	}
 	my.velocity_z += (time_step * my.force_z) - (minv(time_step*0.7,1) * my.velocity_z);
	my.move_z = my.velocity_z * time_step;
}

//////////////////////////////
//Stable/rigid camera collision
//////////////////////////////
function handle_camera()
{
	var temp;
	VECTOR tempVec;
	camera.pan -= mouse_force.x * 12 * time_step;
	camera.tilt += mouse_force.y * 8 * time_step;
	camera.tilt = clamp(camera.tilt,-30,10);
	temp = fcos(camera.tilt,-camera_distance);
	vec_set(camera.x,vector(my.x + fcos(camera.pan,temp),my.y + fsin(camera.pan,temp),my.z + 20 + fsin(camera.tilt,-camera_distance)));

	vec_diff(tempVec.x,camera.x,my.x); //find the vector from the player to the camera
	vec_normalize(tempVec.x,16); //get the magnitude of it's vector to 16 quants and store it in temp
	vec_add(tempVec.x,camera.x); //add the vector (from player to camera) of a magnitude of 16 quants and add it to the camera's position.

	//trace_mode = IGNORE_ME+IGNORE_PASSABLE+ignore_models;
	result = c_trace(my.x,tempVec.x,IGNORE_ME | IGNORE_PASSABLE | IGNORE_MODELS); //trace from the player to 16 quants behind the camera.
	if (result > 0) {
		vec_diff(tempVec.x,my.x,target.x); //find the vector from the point the trace hit to the player
		vec_normalize(tempVec.x,16); //get the magnitude of this vector to 16 quants and store in temp
		vec_set(camera.x,target.x); //place the camera at the trace hit point
		vec_add(camera.x,tempVec.x); //move the camera away from the wall by the vector temp, 16 quants towards the player
	}
}


//////////////////////////////
//Smooth camera collision
//////////////////////////////
/*function handle_camera() {
	camera_pan -= mouse_force.x * 12 * time_step_step_step;
	camera_tilt += mouse_force.y * 8 * time_step_step_step;
	camera_tilt = clamp(camera_tilt,-30,10);

	camera.pan = camera_pan;
	temp = fcos(camera_tilt,-camera_distance);
	vec_set(camera_move_to.x,vector(my.x + fcos(camera.pan,temp),my.y + fsin(camera.pan,temp),my.z + 20 + fsin(camera_tilt,-camera_distance)));

	temp = minv(1,0.5 * time_step_step); //changing 0.5 will change how fast the camera moves, at 1 places us at target, this value is what allows the smooth movement
	camera.x += temp*(camera_move_to.x - camera.x);
	camera.y += temp*(camera_move_to.y - camera.y);
	camera.z += temp*(camera_move_to.z - camera.z);

	vec_diff(temp.x,camera.x,my.x);
	vec_normalize(temp.x,16);
	vec_add(temp.x,camera.x);

	trace_mode = IGNORE_ME + IGNORE_PASSABLE + ignore_models;
	if (trace(my.x,temp.x) > 0) {
		vec_diff(temp.x,my.x,target.x);
		vec_normalize(temp.x,16);
		vec_set(camera.x,target.x);
		vec_add(camera.x,temp.x);
	}

	vec_diff(temp.x,my.x,camera.x);
	vec_to_angle(camera.pan,temp.x);
}*/

function rotate_entity(rotate_angle,rotate_speed)
{
	if (my.pan == rotate_angle) return;
	result = ang(rotate_angle - my.pan);
	if (result > 0) { my.pan += rotate_speed * time_step; }
	if (result < 0) { my.pan -= rotate_speed * time_step; }
	if (ang(rotate_angle - my.pan) < 0 && result > 0) { my.pan = rotate_angle; }
	if (ang(rotate_angle - my.pan) > 0 && result < 0) { my.pan = rotate_angle; }
}

function handle_sword_collision()
{
	VECTOR temp;
	VECTOR temp2;
	you = NULL;
	vec_for_vertex(temp.x,player_weapon,274); //sword base
	vec_for_vertex(temp2.x,player_weapon,54); //sword tip
	//trace_mode = IGNORE_ME+IGNORE_PASSABLE+USE_BOX;
	result = c_trace(temp.x,temp2.x, IGNORE_ME | IGNORE_PASSABLE | USE_BOX);
	if (you != NULL) {
		if (you.entity_type == 2 && you.hit_by_player == 0) {
			if (airborne_attack == 1 && my.animblend == attack_a) {
				my.movement_mode = 2;
			}
			you.hit_by_player = 1;
			if (target_enemy == NULL) { target_enemy = you; player_lock_on = 1; }
		}
	}
}


action player_action()
{
	player = my;
	my.grav = 6;
	my.z_offset = 6;
	set(my,SHADOW);
	ent_create("sword.mdl",my.x,attach_weapon);
	wait(1);
	while (1) { //the main loop
		handle_grav();
		handle_movement();
		handle_camera();
		handle_animation(1);
		wait(1);
	}
}


enemy.c

Code:
action enemy_dummy()
{
	set(my,SHADOW);
	my.entity_type = 2;
	//my.enable_scan = on;
	my.emask |= ENABLE_SCAN;
	while (1) {
		if (my.hit_by_player == 1) {
			my.move_x = player.move_x;
			my.move_y = player.move_y;
			my.move_z = player.move_z;
			//	move_mode = ignore_passable | glide; //replace c_move with these 2 lines in versions of gamestudio below 6.4
			//	ent_move(nullvector,my.move_x);
			c_move(my,nullvector,my.move_x,USE_AABB | IGNORE_PASSABLE | GLIDE);
			if (player.animblend == blend || player.animblend < attack_a || my.animblend > attack_f) { my.hit_by_player = 0; }
		}
		if ((player.animblend >= stand && target_enemy == my && player_lock_on == 0) && (player.animblend < attack_a || player.animblend > attack_f)) target_enemy = NULL;
		if (target_enemy == my && vec_dist(my.x,player.x) > 200) target_enemy = NULL;
		wait(1);
	}
}


animation.c

Code:
function handle_animation(animation_speed) {
	if (animation_speed <= 0) { animation_speed = 1; }
	if (my.animblend != blend && my.blendframe != nullframe) { my.animate2 = 0; my.animblend = blend; }
	if (my.animblend == blend) {
		if (my.currentframe == stand) { ent_animate(my,"stand",my.animate,ANM_CYCLE); }
		if (my.currentframe == run) { ent_animate(my,"run",my.animate,ANM_CYCLE); }
		if (my.currentframe == walk) { ent_animate(my,"walk",my.animate,ANM_CYCLE); }
		if (my.currentframe == jump) { ent_animate(my,"jump",my.animate,0); }
		if (my.currentframe == attack_a) { ent_animate(my,"attack_a",my.animate,0); }
		if (my.currentframe == attack_b) { ent_animate(my,"attack_b",my.animate,0); }
		if (my.currentframe == attack_c) { ent_animate(my,"attack_c",my.animate,0); }
		if (my.currentframe == attack_d) { ent_animate(my,"attack_d",my.animate,0); }
		if (my.currentframe == attack_e) { ent_animate(my,"attack_e",my.animate,0); }
		if (my.currentframe == attack_f) { ent_animate(my,"attack_f",my.animate,0); }
		if (my.blendframe == stand) { ent_blend("stand",0,my.animate2); }
		if (my.blendframe == run) { ent_blend("run",0,my.animate2); }
		if (my.blendframe == walk) { ent_blend("walk",0,my.animate2); }
		if (my.blendframe == jump) { ent_blend("jump",0,my.animate2); }
		if (my.blendframe == fall) { ent_blend("jump",60,my.animate2); }
		if (my.blendframe == attack_a) { ent_blend("attack_a",0,my.animate2); }
		if (my.blendframe == attack_b) { ent_blend("attack_b",0,my.animate2); }
		if (my.blendframe == attack_c) { ent_blend("attack_c",0,my.animate2); }
		if (my.blendframe == attack_d) { ent_blend("attack_d",0,my.animate2); }
		if (my.blendframe == attack_e) { ent_blend("attack_e",0,my.animate2); }
		if (my.blendframe == attack_f) { ent_blend("attack_f",0,my.animate2); }
		my.animate2 += 45 * time_step;
		if (my.animate2 >= 100) {
			my.animate = 0;
			my.animblend = my.blendframe;
			my.blendframe = nullframe;
		}
	}
	if (my.animblend == stand) {
		ent_animate(my,"stand",my.animate,ANM_CYCLE);
		my.animate += 5 * animation_speed * time_step;
		my.animate %= 100;
		my.currentframe = stand;
	}
	if (my.animblend == run) {
		ent_animate(my,"run",my.animate,ANM_CYCLE);
		my.animate += 8 * animation_speed * time_step;
		my.animate %= 100;
		my.currentframe = run;
	}
	if (my.animblend == walk) {
		ent_animate(my,"walk",my.animate,ANM_CYCLE);
		my.animate += 8 * animation_speed * time_step;
		my.animate %= 100;
		my.currentframe = walk;
	}
	if (my.animblend == jump || my.animblend == fall) {
		if (my.jumping_mode == 3) { my.animate = 60; }
		ent_animate(my,"jump",my.animate,0);
		my.animate += 10 * animation_speed * time_step;
		my.currentframe = jump;
		if (my.animate >= 60 && my.jumping_mode == 1) { my.jumping_mode = 2; }
		if (my.animate >= 100) {
			ent_animate(my,"jump",100,0);
			my.animate = 100;
			my.blendframe = stand;
			if (my.moving == 1) {
				if (key_shift == 1) { my.blendframe = walk; } else { my.blendframe = run; }
			}
		}
	}
	if (my.animblend == attack_a) {
		ent_animate(my,"attack_a",my.animate,0);
		my.animate += 20 * animation_speed * time_step;
		my.currentframe = attack_a;
		if (my.animate >= 100) {
			ent_animate(my,"attack_a",100,0);
			my.animate = 100;
			my.blendframe = stand;
			if (my.moving == 1) {
				if (key_shift == 1) { my.blendframe = walk; } else { my.blendframe = run; }
			}
			if (combo_continue == 1) {
				combo_continue = 0;
				my.blendframe = attack_b;
			} else {
				my.movement_mode = 0;
			}
		}
	}
	if (my.animblend == attack_b) {
		ent_animate(my,"attack_b",my.animate,0);
		my.animate += 15 * animation_speed * time_step;
		my.currentframe = attack_b;
		if (my.animate >= 100) {
			ent_animate(my,"attack_b",100,0);
			my.animate = 100;
			my.blendframe = stand;
			if (my.moving == 1) {
				if (key_shift == 1) { my.blendframe = walk; } else { my.blendframe = run; }
			}
			if (combo_continue == 1) {
				combo_continue = 0;
				my.blendframe = attack_c;
			} else {
				my.movement_mode = 0;
			}
		}
	}
	if (my.animblend == attack_c) {
		ent_animate(my,"attack_c",my.animate,0);
		my.animate += 10 * animation_speed * time_step;
		my.currentframe = attack_c;
		if (my.animate >= 100) {
			ent_animate(my,"attack_c",100,0);
			my.animate = 100;
			my.blendframe = stand;
			if (my.moving == 1) {
				if (key_shift == 1) { my.blendframe = walk; } else { my.blendframe = run; }
			}
			if (combo_continue == 1) {
				my.jumping_mode = 10;
				my.force_z = 12;
				my.grav = 4;
				combo_continue = 0;
				my.blendframe = attack_d;
			} else {
				my.movement_mode = 0;
			}
		}
	}
	if (my.animblend == attack_d) {
		handle_sword_collision();
		ent_animate(my,"attack_d",my.animate,0);
		my.animate += 15 * animation_speed * time_step;
		my.currentframe = attack_d;
		if (my.animate >= 100) {
			ent_animate(my,"attack_d",100,0);
			my.animate = 100;
			my.blendframe = stand;
			if (my.moving == 1) {
				if (key_shift == 1) { my.blendframe = walk; } else { my.blendframe = run; }
			}
			if (combo_continue == 1) {
				combo_continue = 0;
				my.blendframe = attack_e;
			} else {
				my.movement_mode = 0;
			}
		}
	}
	if (my.animblend == attack_e) {
		ent_animate(my,"attack_e",my.animate,0);
		my.animate += 15 * animation_speed * time_step;
		my.currentframe = attack_e;
		if (my.jumping_mode == 0 && my.animate >= 20 && my.animate < 60) {
			my.grav = 3;
			my.jumping_mode = 10;
			my.force_z = 15;
		}
		if (my.animate >= 100) {
			ent_animate(my,"attack_e",100,0);
			my.animate = 100;
			my.blendframe = stand;
			if (my.moving == 1) {
				if (key_shift == 1) { my.blendframe = walk; } else { my.blendframe = run; }
			}
			if (combo_continue == 1) {
				combo_continue = 0;
				my.blendframe = attack_f;
			} else {
				my.movement_mode = 0;
			}
		}
	}
	if (my.animblend == attack_f) {
		ent_animate(my,"attack_f",my.animate,0);
		my.animate += 6 * animation_speed * time_step;
		my.currentframe = attack_f;
		if (my.jumping_mode == 0 && my.animate >= 40 && my.animate < 60) {
			my.grav = 6;
			my.jumping_mode = 10;
			my.force_z = 12;
		}
		if (my.animate >= 100) {
			my.movement_mode = 0;
			ent_animate(my,"attack_f",100,0);
			my.animate = 100;
			my.blendframe = stand;
			if (my.moving == 1) {
				if (key_shift == 1) { my.blendframe = walk; } else { my.blendframe = run; }
			}
		}
	}
	if (my.animblend >= attack_a && my.animblend <= attack_f) { handle_sword_collision(); }
	if (my.animblend != blend && my.blendframe != nullframe) { my.animate2 = 0; my.animblend = blend; }
}




I was once Anonymous_Alcoholic.

Code Breakpoint;