FUNCTION rotate_entity(rotate_angle,rotate_speed);
DEFINE move_x,skill22; //movement skills
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; //animation skills
DEFINE animate2,SKILL32;
DEFINE animblend,SKILL33;
DEFINE currentframe,SKILL34;
DEFINE blendframe,SKILL35;
DEFINE z_offset,SKILL50; //gravity and jumping skills
DEFINE jumping_mode,SKILL51;
DEFINE gravity,SKILL52;
DEFINE movement_mode,SKILL53; //for various movement mainly combat
DEFINE moving,SKILL54;
DEFINE hit_by_player,SKILL55; //enemy skills
DEFINE entity_type,SKILL56;
DEFINE nullframe,-2;
DEFINE blend,-1;
DEFINE stand,0;
DEFINE run,1;
DEFINE walk,2;
DEFINE jump,3;
DEFINE fall,4;
var camera_distance = 250;
Action player_maedel
{
player = my;
my.fat= off;
my.narrow = on;
c_setminmax(my);
my.shadow = on;
while (player != null)
{
kamera();
bewegungen();
gravitation();
kamerazentrierung();
player_animationen(1);
wait(1);
}
}
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; }
if (result < 0) { my.pan -= rotate_speed * time; }
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 kamera()
{
camera.pan -= mouse_force.x * 12 * time;
camera.tilt += mouse_force.y * 8 * time;
camera.tilt = clamp(camera.tilt,-70,- 5);
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 + 70 + fsin(camera.tilt,-camera_distance)));
camera.arc -= 0.25 * mickey.z * time_step;
camera.arc = clamp(camera.arc,20,100);
}
function kamerazentrierung()
{
if (mouse_middle == 1)
{
if (camera.pan <= player.pan)
{camera.pan += 20 * time;}
if (camera.pan >= player.pan)
{camera.pan -= 20 * time;}
if (camera.tilt <= -5)
{camera.tilt += 20 * time;}
if (camera.arc >= 50)
{camera.arc -= 13 * time;}
if (camera.arc <= 50)
{camera.arc += 13 * time;}
}
}
function bewegungen()
{
temp.x = -1000;
temp.y = 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)
{
if (key_shift == 1)
{temp.y = 10 * time;}
else
{temp.y = 20 * time;}
}
my.move_x = fcos(temp.x,temp.y);
my.move_y = fsin(temp.x,temp.y);
c_move(my,nullvector,my.move_x, ignore_passable | glide);
result = c_trace(my.x,vector(my.x,my.y,my.z - 4000),use_box|ignore_me|scan_texture);
if (result < 0) { my.z -= result; my.velocity_z = 0; }
if (temp.y > 0) {rotate_entity(temp.x,20);}
if (my.move_x == 0 && my.move_y == 0)
{
if (my.animblend > stand && my.animblend != jump && my.animblend != fall)
{my.blendframe = stand;}
}
else
{
if (my.animblend == 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;}
}
}
function gravitation()
{
result = c_trace(my.x,vector(my.x,my.y,my.z - 4000),use_box|ignore_me|scan_texture);
if (result < 3)
{
if (my.jumping_mode == 0)
{
my.force_z = -1 * result;
if (key_space == 1 && my.animblend >= stand && my.animblend != jump && my.animblend != fall)
{
my.jumping_mode = 1;
my.force_z = 32;
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)
{
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 -= 6 * time;
my.force_z = max(-30,my.force_z);
}
my.velocity_z += (time * my.force_z) - (min(time * 0.7,1) * (my.velocity_z));
my.move_z = my.velocity_z * time;
}
function player_animationen(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,"jumpnew",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("jumpnew",0,my.animate2);}
if (my.blendframe == fall) {ent_blend("jumpnew",60,my.animate2);}
my.animate2 += 45 * time;
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 += 2 * animation_speed * time;
my.animate %= 100;
my.currentframe = stand;
}
if (my.animblend == run)
{
ent_animate(my,"run",my.animate,anm_cycle);
my.animate += 6.8 * animation_speed * time;
my.animate %= 100;
my.currentframe = run;
}
if (my.animblend == walk)
{
ent_animate(my,"walk",my.animate,anm_cycle);
my.animate += 6 * animation_speed * time;
my.animate %= 100;
my.currentframe = walk;
}
if (my.animblend == jump || my.animblend == fall)
{
if (my.jumping_mode == 3) {my.animate = 80;}
ent_animate(my,"jumpnew",my.animate,0);
my.animate += 7 * animation_speed * time;
my.currentframe = jump;
if (my.animate >= 60 && my.jumping_mode == 1) {my.jumping_mode = 2;}
if (my.animate >= 100)
{
ent_animate(my,"jumpnew",100,0);
my.animate = 100;
my.blendframe = stand;
if (my.move_x != 0 || my.move_y != 0)
{
if (key_shift == 1) {my.blendframe = walk;}
else {my.blendframe = run;}
}
}
}
}