#include <acknex.h>
#include <default.c>
#define PRAGMA_POINTER
void bullet_shell_event(){
if(event_type == EVENT_FRAME){
if(my->skill10 < 5){
my->skill3 -= time_step;
my->skill4 = c_move(my, nullvector, &my->skill1, IGNORE_PASSABLE | IGNORE_FLAG2);
if(HIT_TARGET){
if(normal.z == 0){ // hit a wall?
my->skill10 -= 1; // one more hit to die
// move us away from the wall
my->skill1 = -my->skill1;
my->skill2 = -my->skill2;
}
my->pan = random(360);
my->tilt = 0;
my->roll = 0;
my->skill1 = my->skill1 * 0.9;
my->skill2 = my->skill2 * 0.9;
my->skill10 += 1;
if(my->skill10 < 3){
my->skill3 *= -(0.5 + random(0.25));
if(abs(my->skill3) < 1){ vec_set(&my->skill1, nullvector); }
}
else{
my->skill1 = 0;
my->skill2 = 0;
my->skill3 *= -(0.5 + random(0.25));
}
}
}
}
}
void shell(){
vec_fill(&my->scale_x, 0.5);
vec_set(&my->pan, &camera->pan);
c_setminmax(my);
set(my, POLYGON | TRANSLUCENT | FLAG2);
my->alpha = 100;
vec_set(&my->skill1, vector(15 * time_step, (5 - random(10)) * time_step, 5 * time_step));
vec_rotate(&my->skill1, &camera->pan);
my->emask |= ENABLE_FRAME;
my->event = bullet_shell_event;
}
void main(){
warn_level = 6;
fps_max = 60;
fps_min = 30;
time_smooth = 0.9;
freeze_mode = 1;
level_load("");
wait(3);
freeze_mode = 0;
you = ent_create(CUBE_MDL, vector(0, 0, -32), NULL);
vec_set(&you->scale_x, vector(64, 64, 0.1));
set(you, POLYGON);
c_setminmax(you);
you = ent_create(CUBE_MDL, vector(96, 0, 0), NULL);
vec_set(&you->scale_x, vector(4, 4, 4));
set(you, POLYGON);
c_setminmax(you);
def_move();
while(!key_esc){
if((total_frames % 15) == 1){ ent_create(CUBE_MDL, &camera->x, shell); }
wait(1);
}
}