///////////////////////////////
#include <acknex.h>
#include <default.c>
BMAP* ship_bmp = "ship.bmp";
BMAP* enemy_bmp = "enemy2.bmp";
BMAP* explo1_tga = "explo1.tga";
BMAP* explo2_tga = "explo2.tga";
BMAP* explo3_tga = "explo3.tga";
BMAP* explo4_tga = "explo4.tga";
SOUND* explo = "explo.wav";
SOUND* laser = "laser.wav";
#define enemy_width 40
#define enemy_height 20
#define bullet_width 5
#define bullet_height 11
///////////////////////////////
var i = 1;
var i_2 = 1;
var s;
var lives = 3;
var score = 0;
var shoot_var = 1;
var players_health = 100;
var game_over_var = 0;
function move_background();
function space_ship();
function shoot_1_event();
function shoot_1(i);
function create_enemy(i_2);
function enemy_event(i_2);
function enemy_collisions(i_2);
function level1();
FONT* arial_font = "Arial#20b";
///////////////////
PANEL* score_pan =
{
layer = 20;
digits (10, 20, "Score: %.f", arial_font, 1, score);
digits (10, 35, "Leben: %.f", arial_font, 1, lives);
digits (10, 55, "Schuss: %.f", arial_font, 1, i);
flags = visible;
}
PANEL* game_over_pan =
{
layer = 20;
pos_x = 300;
pos_y = 200;
digits (10, 10, "GAME OVER !", arial_font, 1, 0);
}
PANEL* reset_pan =
{
layer = 20;
pos_x = 300;
pos_y = 200;
digits (10, 30, "Drücke Enter ...", arial_font, 1, 0);
}
PANEL* background1 =
{
bmap = "back_1.bmp";
pos_x = 0;
pos_y = 0;
flags = SHOW;
}
PANEL* background2 =
{
bmap = "back_1.bmp";
pos_x = 0;
pos_y = -768;
flags = SHOW;
}
PANEL* _ship =
{
bmap = "ship.bmp";
pos_x = 100;
pos_y = 100;
flags = SHOW | OVERLAY;
}
PANEL* health_pan =
{
bmap = "health.bmp";
pos_x = -12;
pos_y = 0;
layer = 25;
flags = SHOW;
}
PANEL* _shoot[500];
PANEL* enemies[50];
function main()
{
//fps_max = 240; // limit the frame rate to 60 fps
vec_set(screen_size,vector(800,600,0));
vec_set(screen_color,vector(50,1,1)); // dark blue
vec_set(sky_color,vector(50,1,1)); // dark blue
video_window(NULL,NULL,0,"Space Shooter - written by Patrick Ratz");
d3d_antialias = 1;
shadow_stencil = 3;
level_load(NULL);
move_background();
level1();
while (1)
{
wait (1);
health_pan.scale_x = maxv(0.01, players_health / 100);
}
}
function level1()
{
create_enemy(i_2);
space_ship();
}
function game_over()
{
_shoot[i] = NULL;
enemies[i_2] = NULL;
reset(enemies[i_2],SHOW);
set(game_over_pan,SHOW);
wait(-2);
game_over_var = 1;
set(reset_pan,SHOW);
while(1)
{
if(key_enter)
{
reset(reset_pan,SHOW);
reset(game_over_pan,SHOW);
players_health = 100;
score = 0;
set(_ship,SHOW);
level1();
break;
}
wait(1);
}
}
function move_background()
{
while (1)
{
background1.pos_y += 3 * time_step;
background2.pos_y = background1.pos_y - 767;
if (background1.pos_y > 767)
{
background1.pos_y -= 767;
}
wait (1);
}
}
function space_ship()
{
while(lives > 0)
{
if(players_health < 1)
{
players_health = 100;
lives -= 1;
_ship.pos_x = 100;
_ship.pos_y = 100;
}
//UP
if (key_cuu == 1)
{
_ship.pos_y --;
}
//DOWN
if (key_cud == 1)
{
_ship.pos_y ++;
}
//LEFT
if (key_cul == 1)
{
_ship.pos_x --;
}
//RIGHT
if (key_cur == 1)
{
_ship.pos_x ++;
}
//SPACE && SHOOT == 0
if ((key_space) && (!_shoot[i]))
{
shoot_1_event();
}
//COLLISION WITH ENEMY
if ((((_ship.pos_x + 67 >= enemies[i_2].pos_x) && (_ship.pos_x + 67 <= enemies[i_2].pos_x + 37)) ||
((enemies[i_2].pos_x + 37 >= _ship.pos_x) && (enemies[i_2].pos_x + 37 <= _ship.pos_x + 67)))&&
(((_ship.pos_y + 67 >= enemies[i_2].pos_y) && (_ship.pos_y + 67 <= enemies[i_2].pos_y + 37)) ||
((enemies[i_2].pos_y + 37 >= _ship.pos_y) && (enemies[i_2].pos_y + 37 <= _ship.pos_y + 67))))
{
if(score > 1)
{
score -= 10;
}
players_health -= 10;
snd_play(explo, 90, 0);
enemies[i_2].bmap = explo1_tga;
wait (6);
enemies[i_2].bmap = explo2_tga;
wait (6);
enemies[i_2].bmap = explo3_tga;
wait (6);
enemies[i_2].bmap = explo4_tga;
wait (6);
enemies[i_2].bmap = enemy_bmp;
reset(enemies[i_2],SHOW);
enemies[i_2].pos_x = random(400);
enemies[i_2].pos_y = random(400);
wait (3);
set(enemies[i_2],SHOW);
}
wait(1);
}
snd_play(explo, 100, 0);
_ship.bmap = explo1_tga;
wait (6);
_ship.bmap = explo2_tga;
wait (6);
_ship.bmap = explo3_tga;
wait (6);
_ship.bmap = explo4_tga;
wait (6);
_ship.bmap = ship_bmp;
reset(_ship, VISIBLE);
game_over();
}
function shoot_1_event()
{
shoot_1(i);
wait(35);
i++;
}
function shoot_1(i)
{
snd_play(laser, 90, 0);
_shoot[i] = pan_create("bmap = shot.bmp;",5);
_shoot[i].pos_x = _ship.pos_x+30 - bullet_width / 2;
_shoot[i].pos_y = _ship.pos_y-20;
_shoot[i].flags |= VISIBLE;
// shoot_var = 1;
while(_shoot[i] != NULL)
{
if(_shoot[i].pos_y > 5)
{
_shoot[i].pos_y -= 1;
}
else
{
reset(_shoot[i],VISIBLE);
i = 0;
break;
}
if ((((_shoot[i].pos_x + bullet_width >= enemies[i_2].pos_x) && (_shoot[i].pos_x + bullet_width <= enemies[i_2].pos_x + enemy_width)) ||
((enemies[i_2].pos_x + enemy_width >= _shoot[i].pos_x) && (enemies[i_2].pos_x + enemy_width <= _shoot[i].pos_x + bullet_width)))
&& (((_shoot[i].pos_y + bullet_height >= enemies[i_2].pos_y) && (_shoot[i].pos_y + bullet_height <= enemies[i_2].pos_y + enemy_height)) ||
((enemies[i_2].pos_y + enemy_height >= _shoot[i].pos_y) && (enemies[i_2].pos_y + enemy_height <= _shoot[i].pos_y + bullet_height))))
{
score += 20;
snd_play(explo, 90, 0);
reset(_shoot[i], VISIBLE);
_shoot[i] = NULL;
enemies[i_2].bmap = explo1_tga;
wait (6);
enemies[i_2].bmap = explo2_tga;
wait (6);
enemies[i_2].bmap = explo3_tga;
wait (6);
enemies[i_2].bmap = explo4_tga;
wait (6);
reset(enemies[i_2], VISIBLE);
}
wait(1);
}
_shoot[i] = NULL;
//}
}
//
function create_enemy(i_2)
{
enemies[i_2] = pan_create("bmap = enemy2.bmp; flags = VISIBLE;", 20);
enemies[i_2].pos_x = random(650);
enemies[i_2].pos_y = random(150);
enemy_event(i_2);
enemy_collisions(i_2);
i_2++;
}
function enemy_event(i_2)
{
var enemy_y;
while(is (enemies[i_2], VISIBLE))
{
enemy_y = enemies[i_2].pos_y;
while((enemies[i_2].pos_y < enemy_y + 80) && (is (enemies[i_2], VISIBLE)))
{
if(enemies[i_2].pos_y < 780)
{
enemies[i_2].pos_y += 0.5;
}
else
{
reset(enemies[i_2], VISIBLE);
break;
}
wait(1);
}
wait(1);
}
create_enemy(i_2);
}
function enemy_collisions(i_2)
{
while (is (enemies[i_2], VISIBLE))
{
if (_shoot[i])
{
if (is (enemies[i_2], INVISIBLE)) {break;}
if ((((_shoot[i].pos_x + bullet_width >= enemies[i_2].pos_x) && (_shoot[i].pos_x + bullet_width <= enemies[i_2].pos_x + enemy_width)) ||
((enemies[i_2].pos_x + enemy_width >= _shoot[i].pos_x) && (enemies[i_2].pos_x + enemy_width <= _shoot[i].pos_x + bullet_width)))
&& (((_shoot[i].pos_y + bullet_height >= enemies[i_2].pos_y) && (_shoot[i].pos_y + bullet_height <= enemies[i_2].pos_y + enemy_height)) ||
((enemies[i_2].pos_y + enemy_height >= _shoot[i].pos_y) && (enemies[i_2].pos_y + enemy_height <= _shoot[i].pos_y + bullet_height))))
{
score += 20;
snd_play(explo, 90, 0);
reset(_shoot[i], VISIBLE);
_shoot[i] = NULL;
enemies[i_2].bmap = explo1_tga;
wait (6);
enemies[i_2].bmap = explo2_tga;
wait (6);
enemies[i_2].bmap = explo3_tga;
wait (6);
enemies[i_2].bmap = explo4_tga;
wait (6);
reset(enemies[i_2], VISIBLE);
}
}
wait (1);
}
}