ich arbeite an einen Player der springen und kämpfen kann nur das mit den springen geht nicht, hiers ist meine Arbeit (Ich habe A6.40) :
------------------------------------------------------------
////////////////////////////////////////////////////////
var video_mode = 7; // 800x600
var video_depth = 16; // 16 bit mode
var player_distance; // moves the player
var enemy_distance; // moves the enemy
var jump_z; //temporary variable, is copied into player_diff.z before the move instruction
var jump_force = 10; //change this variable to affect how high the player jumps
var jumping_mode = 0; //0 for not jumping, 1 if jumping
var z_force = 0;
var center[3];
var result = 0;
define sword_base = skill12; // using skill12, 13, 14 to store the sword_base coords
define sword_tip = skill15; // using skill15, 16, 17 to store the sword_tip coords
define healthpoints = skill18; // just another name for skill18
//////////////////////////////////////////////////////////////
font swc_font = <font.pcx>, , 24, 23; // sword combat font
//////////////////////////////////////////////////////////////
bmap spark_map = <spark.pcx>; // for spark particles
bmap blood_map = <blood.pcx>; // for blood particles
//////////////////////////////////////////////////////////////
sound beep_sound = <beep.wav>;
sound sword_snd = <sword.wav>;
//////////////////////////////////////////////////////////////
function particle_sparks();
function particle_blood();
function fade_particle();
//////////////////////////////////////////////////////////////
string level1_wmb = <level1.wmb>;
string health_str = "Player Health";
///////////////////////////////////////////////////////////////
entity* enemy; // useful only if you want to display its health
///////////////////////////////////////////////////////////////
panel health_panel // displays the numbers
{
pos_x = 0;
pos_y = 0;
digits = 120, 575, 4, swc_font, 1, player.healthpoints;
flags = refresh, visible;
}
text health_text // displays the text
{
pos_x = 0;
pos_y = 550;
font = swc_font;
string = health_str;
flags = visible;
}
////////////////////////////////////////////////////////////////
function main()
{
level_load (level1_wmb);
wait (2); // wait for the level to be loaded
clip_size = 0; // show all the triangles for all the models
on_d = null; // disable the debug panel (key "D") because it is used for movement
fps_max = 40; // lock the frame rate to 40 fps
}
action player_fight // attached to the player
{
player = me; // I'm the player
player.healthpoints = 100; // and I have 100 health points
while (player.healthpoints > 0) // as long as I'm alive
{
camera.x = player.x - 150 * cos(player.pan); // 200 = distance between the player and the camera
camera.y = player.y - 150 * sin(player.pan); // same value here
camera.z = player.z + 20; // above the player
camera.pan = player.pan; // looks in the same direction with the player
camera.tilt = -12; // look down at the player
my.pan += 5 * (key_a - key_d) * time - 60 * mouse_force.x * time; // rotates with the keys A and D or with the mouse
player_distance.x = 20 * (key_w - key_s) * time; // moves forward / backward with W / S
player_distance.y = 0;
player_distance.z = 0;
if ((key_w == 1) || (key_s == 1)) // the player is walking
{
ent_cycle("run", my.skill20); // play walk frames animation
my.skill20 += 5 * time; // "walk" animation speed
if (my.skill20 > 100) {my.skill20 = 0;} // loop animation
}
else // the player is standing
{
ent_cycle("stand", my.skill21); // play stand frames animation
my.skill21 += 2 * time; // "stand" animation speed
if (my.skill21 > 100) {my.skill21 = 0;} // loop animation
}
ent_move(player_distance, nullvector);
if (key_j == 1) // if we press the left mouse button
{
my.skill22 = 0; // reset "attack" frames
while (my.skill22 < 100)
{
ent_vertex(my.sword_tip, 2698); // sword tip vertex coords - get the value in Med
ent_vertex(my.sword_base, 2698); // sword base vertex coords - get the value in Med
trace_mode = ignore_me + ignore_passable; // ignore me (the player) and all the entities that are passable
trace (my.sword_base, my.sword_tip); // trace between these sword positions
if (result != 0) // the player has hit something
{
effect (particle_sparks, 10, target, normal);
if (you != null) {you.healthpoints -= 5 * time;} // if it hasn't hit a wall, decrease health
ent_playsound (my, sword_snd, 50); // sword sound
}
ent_cycle("attack_a", my.skill22); // play attack frames animation
my.skill22 += 8 * time; // "attack" animation speed
wait (1);
}
while (key_j == 1) {wait (1);} // can't use autofire on a sword
}
wait (1);
}
while (my.skill23 < 90) // the player is dead
{
ent_cycle("knockdown", my.skill23); // play death frames animation
my.skill23 += 3 * time; // "death" animation speed
wait (1);
}
my.passable = on; // the corpse can't be hit by the enemy sword from now on
}
if (key_space == 1) // if we press the space button
{
ent_cycle("jump", my.skill22);
my.skill22 += 5 * time;
wait (1);
(jumping_mode == 1) {
}
(z_force > -20) { z_force -= 3 * time; } ELSE { z_force = -20; }
(jumping_mode == 0) {
(z_force > -20) { z_force -= 3 * time; } ELSE { z_force = -20; }
}
(z_force > -20) { z_force -= 3 * time; } ELSE { z_force = -20; }
}
}
action enemy_fight // attached to the enemy
{
enemy = me; // I'm the enemy
enemy.healthpoints = 10; // and I have 100 healthpoints
while (my.healthpoints > 0) // as long as I'm alive
{
if (vec_dist (my.x, player.x) < 500 && player.healthpoints > 0) // the player approaches the enemy
{
vec_set(temp, player.x);
vec_sub(temp, my.x);
vec_to_angle(my.pan, temp);
my.tilt = 0; // I'm a maniac
enemy_distance.x = 7 * time;
enemy_distance.y = 0;
enemy_distance.z = 0;
ent_move(enemy_distance, nullvector);
ent_cycle("run", my.skill19); // play walk frames animation
my.skill19 += 5 * time; // "walk" animation speed
if (my.skill19 > 100) {my.skill19 = 0;} // loop animation
if (vec_dist (my.x, player.x) < 60) // if the player comes closer than 50 quants attack him
{
my.skill20 = 0; // reset "attack" frames
while (my.skill20 < 100)
{
ent_vertex(my.sword_tip, 2698); // sword tip vertex coords - get the value in Med
ent_vertex(my.sword_base, 2698); // sword base vertex coords - get the value in Med
trace_mode = ignore_me + ignore_passable;
trace (my.sword_base, my.sword_tip); // trace between these sword positions
if (result != 0) // hit something, could be the player or another enemy
{
effect (particle_blood, 2, target, normal);
if (you != null) {you.healthpoints -= 4 * time;}
ent_playsound (my, sword_snd, 50); // sword sound
}
ent_cycle("attack_c", my.skill20); // play attack frames animation
my.skill20 += 5 * time; // "attack" animation speed
wait (1);
}
waitt (6); // slows down the enemy and reduces the number of traces per second
}
}
else // the player is farther than 200 quants away
{
ent_cycle("stand", my.skill21); // play stand frames animation
my.skill21 += 2 * time; // "stand" animation speed
if (my.skill21 > 100) {my.skill21 = 0;} // loop animation
}
wait (1);
}
while (my.skill22 < 80) // the enemy is dead
{
my.event = null;
my.enable_shoot = on;
my.enable_scan = on;
my.transparent = on;
my.bright = on;
my.alpha = 100;
ent_cycle("knockdown", my.skill22);
my.skill22 += 4 * time;
wait(1);}
my.passable = on;
wait(20);
while(my.alpha > 0)
{
my.alpha -= time * 5;
my.z -= time * 0.5;
wait(1);
}
ent_remove(my);
}
function particle_sparks()
{
temp.x = random(2) - 1;
temp.y = random(2) - 1;
temp.z = random(1) - 1.5;
vec_add (my.vel_x, temp);
my.alpha = 30 + random(50);
my.bmap = spark_map;
my.size = 10;
my.flare = on;
my.bright = on;
my.move = on;
my.lifespan = 20;
my.function = fade_particle;
}
function particle_blood()
{
temp.x = random(2) - 1;
temp.y = random(2) - 1;
temp.z = random(1) - 1.5;
vec_add (my.vel_x, temp);
my.alpha = 70 + random(30);
my.bmap = blood_map;
my.size = 6;
my.flare = on;
my.bright = on;
my.move = on;
my.lifespan = 20;
my.function = fade_particle;
}
function fade_particle()
{
my.alpha -= 5 * time;
if (my.alpha < 0) {my.lifespan = 0;}
}