action player1() // attach this action to the ship model
{
#define schaden skill51
#define health skill52
my.health = 100;
my.schaden = 10;
while (1)
{
my.emask |= (ENABLE_IMPACT | ENABLE_SCAN); // the player is sensitive to collisions with level blocks and entities
my.event = player_collisions; // and runs this event function if it collides with something
if(my.health <= 0)
{
asteroid_destroy();
}
wait (1);
}
}
action gegner()
{
#define schaden skill51
#define health skill52
my.health = 100;
my.schaden = 10;
while(1)
{
my.emask |= (ENABLE_BLOCK | ENABLE_IMPACT);
my.event = gegner_event;
c_scan(my.x,my.pan,vector(360,20,750),IGNORE_ME | SCAN_LIMIT);
if(you)
{
vec_set(temp,your.x);
vec_sub(temp,my.x);
vec_to_angle(my.pan,temp);
}
if(result > 450)
{
c_move(me,gegnergeschwindigkeit,NULLVECTOR,IGNORE_PASSABLE);
}
if(my.health <= 0)
{
enemy_destroy();
}
wait(1);
}
}
function gegner_event()
{
switch (event_type)
{
case EVENT_BLOCK:
{
my.health -= 10;
blink();
vec_to_angle(my.pan, normal);
return;
}
case EVENT_IMPACT:
{
my.health -= you.schaden;
you.health -= my.schaden;
blink();
return;
}
}
}
function player_collisions() // this is player's event function
{
switch (event_type)
{
case EVENT_BLOCK:
{
my.health -= 10;
blink();
vec_to_angle(my.pan, normal);
return;
}
case EVENT_IMPACT:
{
my.health -= you.schaden;
you.health -= my.schaden;
blink();
return;
}
}
}
///////////////////////////////
function main()
{
while(1)
{
on_mouse_left = players_laser;
on_mouse_right = players_rocket;
wait(1);
}
}
// Schießen (Laser)
function players_laser()
{
VECTOR plaser_offset;
vec_set(plaser_offset.x, vector(20, 0, 0));
vec_rotate(plaser_offset.x, player.pan);
vec_add(plaser_offset.x, player.x);
ent_create("laser1.mdl", plaser_offset.x, move_plaser);
wait (1);
}
function players_rocket()
{
Raketenzaehler += 0.5;
VECTOR plaser_offset;
if(fraction(Raketenzaehler))
vec_set(plaser_offset.x, vector(0, 20, 0));
else
vec_set(plaser_offset.x, vector(0, -20, 0));
vec_rotate(plaser_offset.x, player.pan);
vec_add(plaser_offset.x, player.x);
ent_create("rakete.mdl", plaser_offset.x, move_procket);
wait (1);
}
function move_plaser()
{
c_setminmax(me);
set(my, PASSABLE);
set(my, POLYGON);
my.pan = player.pan;
my.emask |= (ENABLE_BLOCK | ENABLE_ENTITY);
my.event = remove_plaser;
#define schaden skill51
#define health skill52
my.schaden = 10;
my.health = 10;
while (my)
{
if (vec_dist(my.x, player.x) > 70)
reset(my, PASSABLE);
if (vec_dist(my.x, player.x) > 900)
remove_plaser();
c_move(my, vector(75 * time_step, 0, 0), nullvector, IGNORE_PASSABLE);
wait (1);
}
}
function move_procket()
{
c_setminmax(me);
set(my, PASSABLE);
set(my, POLYGON);
my.pan = player.pan;
my.emask |= (ENABLE_BLOCK | ENABLE_ENTITY);
my.event = remove_procket;
#define schaden skill51
#define health skill52
my.schaden = 50;
my.health = 10;
while (my)
{
if (vec_dist(my.x, player.x) > 70)
reset(my, PASSABLE);
if (vec_dist(my.x, player.x) > 900)
remove_procket();
c_move(my, vector(50 * time_step, 0, 0), nullvector, IGNORE_PASSABLE);
wait (1);
}
}
function remove_plaser()
{
wait (1);
ent_remove(my);
}
function remove_procket()
{
wait (1);
ent_create (explosion_pcx, my.x, asteroid_explodes); // create the explosion sprite
ent_remove(my);
}
action asteroid()
{
c_setminmax(me);
set(my, POLYGON);
#define health skill51
#define schaden skill52
my.health = 30;
my.schaden = 10;
my.emask |= (ENABLE_IMPACT | ENABLE_BLOCK);
my.event = schusstreffer_event;
VECTOR asteroidengeschwindigkeit;
var i = random(5);
vec_set(asteroidengeschwindigkeit,vector(i, 0, 0));
while (my)
{
my.z = player.z;
c_move(my,asteroidengeschwindigkeit,NULLVECTOR,IGNORE_PASSABLE);
if(my.health <= 0)
{
asteroid_destroy();
}
wait (1);
}
}
function schusstreffer_event()
{
switch (event_type)
{
case EVENT_BLOCK:
{
vec_to_angle(my.pan, bounce);
return;
}
case EVENT_IMPACT:
{
my.health -= you.schaden;
you.health -= my.schaden;
blink();
return;
}
}
}
function asteroid_destroy()
{
vec_add(my.x, vector(0,0,5));
ent_create (explosion_pcx, my.x, asteroid_explodes); // create the explosion sprite
wait (-0.2);
ent_remove(my);
}