return object;
}
-game_object saucer_motion(game_object object, game_object player){
+game_object boss_motion(game_object object, game_object player){
if(player.ytrail[7]<object.y){
if(player.xtrail[7]<object.x){ object.direction = 7; };
if(player.xtrail[7]==object.x){ object.direction = 4; };
return crawler;
}
-game_object saucer_init(game_object saucer){
- saucer.active=1;
- saucer.x = rand()%17;
- saucer.y = rand()%600+20;
- saucer.direction = rand()%1000;
- if(saucer.direction<500){
- saucer.direction = 4;
+game_object boss_init(game_object boss){
+ boss.active=1;
+ boss.x = rand()%17;
+ boss.y = rand()%600+20;
+ boss.direction = rand()%1000;
+ if(boss.direction<500){
+ boss.direction = 4;
} else {
- saucer.direction = 6;
+ boss.direction = 6;
};
- saucer.speed = 1;
- saucer.phase = 20;
+ boss.speed = 1;
+ boss.phase = 20;
- return saucer;
+ return boss;
}
game_object encrazify(game_object lander, game_object crazy){
strcpy (crawlers[crawlerloop].radar, "^");
};
- //saucer
- game_object saucer;
- saucer.number = 300;
- saucer.active = 0; //debug 0
- saucer.x = 0;
- saucer.y = 0;
- saucer.direction = 5; //debug 5
- saucer.face = 1;
- saucer.speed = 0; //debug 0
- saucer.vspeed = 0;
- saucer.vtime = 0;
- saucer.phase = 0; //debug 0
- strcpy (saucer.line0, "/==O==\\");
- strcpy (saucer.line1, "/==O==\\");
- strcpy (saucer.radar, "O");
+ struct game_object bosses[6] = {
+ { 300, 0, 0, 0, 5, 1, 0, 0, 0, 0 },
+ { 301, 0, 0, 0, 5, 1, 0, 0, 0, 0 },
+ { 302, 0, 0, 0, 5, 1, 0, 0, 0, 0 },
+ { 303, 0, 0, 0, 5, 1, 0, 0, 0, 0 },
+ { 304, 0, 0, 0, 5, 1, 0, 0, 0, 0 },
+ { 305, 0, 0, 0, 5, 1, 0, 0, 0, 0 }
+ };
+
+ strcpy (bosses[0].line0, "/==O==\\");
+ strcpy (bosses[0].line1, "/==O==\\");
+ strcpy (bosses[0].radar, "O");
+
+ strcpy (bosses[1].line0, "/=O=\\");
+ strcpy (bosses[1].line1, "/===+=+===\\");
+ strcpy (bosses[1].radar, "O");
+
+ strcpy (bosses[2].line0, "/O\\");
+ strcpy (bosses[2].line1, "<==/==[=]==\\==>");
+ strcpy (bosses[2].radar, "O");
+
+ strcpy (bosses[3].line0, "/o-o\\");
+ strcpy (bosses[3].line1, "\\|_|/");
+ strcpy (bosses[3].radar, "O");
+
+ strcpy (bosses[4].line0, "(----)");
+ strcpy (bosses[4].line1, "/||\\");
+ strcpy (bosses[4].radar, "O");
+
+ strcpy (bosses[5].line0, ".");
+ strcpy (bosses[5].line1, ".");
+ strcpy (bosses[5].radar, "O");
//boomstuff
game_object boomstuff;
int landercount = 0;
int crazycount = 0;
int crawlercount = 0;
+ int bosscount = 0;
int alertleft = 0;
int alertright = 0;
int smartbombs = 4;
crawlers[crawlerloop] = process_motion(crawlers[crawlerloop], player);
};
- if(saucer.active==1){
- saucer = saucer_motion(saucer, player);
- saucer = process_motion(saucer, player);
+ for(int bossloop = 0; bossloop<6; bossloop++){
+ if(bosses[bossloop].active==1){
+ bosses[bossloop] = boss_motion(bosses[bossloop], player);
+ bosses[bossloop] = process_motion(bosses[bossloop], player);
+ };
};
// Draw player object 1
drawlocation = draw_object(crawlers[crawlerloop], drawlocation);
};
- drawlocation = draw_object(saucer, drawlocation);
+ // Draw bosses 300-305
+ for(int bossloop = 0; bossloop<6; bossloop++){
+ drawlocation = draw_object(bosses[bossloop], drawlocation);
+ };
//Radar plot 18x620 represented in 4x62
radar_plot(gate, drawlocation);
for(int landerloop = 0; landerloop<landermax; landerloop++){ radar_plot(landers[landerloop], drawlocation); };
for(int crazyloop = 0; crazyloop<landermax; crazyloop++){ radar_plot(crazies[crazyloop], drawlocation); };
for(int crawlerloop = 0; crawlerloop<crawlermax; crawlerloop++){ radar_plot(crawlers[crawlerloop], drawlocation); };
- radar_plot(saucer, drawlocation);
+ for(int bossloop = 0; bossloop<6; bossloop++){ radar_plot(bosses[bossloop], drawlocation); };
radar_plot(player, drawlocation);
//alerts
score = score + 10;
};
};
- //hurt/kill saucer
- if(saucer.active==1){
- if((abs(player.y-saucer.y)<=40)&&(player.x==saucer.x)&&((player.face==0&&(saucer.y<player.y))||(player.face==1&&(saucer.y>player.y)))){
- saucer.phase = saucer.phase - 5;
- if(saucer.phase<=0){
- determine_powerup(powerups, saucer, 600);
- boom_object(boomstuff, saucer, boomsound, boomchannel);
- saucer = object_out(saucer);
- score = score + 100;
- };
- };
- };
+ //hurt/kill boss
+ for(int bossloop = 0; bossloop<6; bossloop++){
+ if(bosses[bossloop].active==1){
+ if((abs(player.y-bosses[bossloop].y)<=40)&&(player.x==bosses[bossloop].x)&&((player.face==0&&(bosses[bossloop].y<player.y))||(player.face==1&&(bosses[bossloop].y>player.y)))){
+ bosses[bossloop].phase = bosses[bossloop].phase - 5;
+ if(bosses[bossloop].phase<=0){
+ determine_powerup(powerups, bosses[bossloop], 600);
+ boom_object(boomstuff, bosses[bossloop], boomsound, boomchannel);
+ bosses[bossloop] = object_out(bosses[bossloop]);
+ score = score + 100;
+ };
+ };
+ };
+ };
laser--;
} else {
//shot sound
score = score + 20;
};
};
- if(saucer.active==1){
- if(abs(player.y-saucer.y)<=40){
- saucer.phase = saucer.phase - 5;
- if(saucer.phase<=0){
- boom_object(boomstuff, saucer, boomsound, boomchannel);
- saucer = object_out(saucer);
- score = score + 100;
+ for(int bossloop = 0; bossloop<6; bossloop++){
+ if(bosses[bossloop].active==1){
+ if(abs(player.y-bosses[bossloop].y)<=40){
+ bosses[bossloop].phase = bosses[bossloop].phase - 5;
+ if(bosses[bossloop].phase<=0){
+ boom_object(boomstuff, bosses[bossloop], boomsound, boomchannel);
+ bosses[bossloop] = object_out(bosses[bossloop]);
+ score = score + 100;
+ };
};
- };
+ };
};
};
};
};
};
- //check saucer
- if(saucer.active==1){
- if(check_collision(bullets[bulletloop], saucer)==1){
- //kill hurt or kill saucer, kill bullet
- saucer.phase = saucer.phase - 1;
- if(saucer.phase<=0){
- determine_powerup(powerups, saucer, 600);
- boom_object(boomstuff, saucer, boomsound, boomchannel);
- saucer = object_out(saucer);
- bullets[bulletloop].vtime = 100;
- bullets[bulletloop] = age_bullet(bullets[bulletloop]);
- //add to score
- score = score + 100;
+ //check bosses
+ for(int bossloop = 0; bossloop<6; bossloop++){
+ if(bosses[bossloop].active==1){
+ if(check_collision(bullets[bulletloop], bosses[bossloop])==1){
+ //hurt or kill boss, kill bullet
+ bosses[bossloop].phase = bosses[bossloop].phase - 1;
+ if(bosses[bossloop].phase<=0){
+ determine_powerup(powerups, bosses[bossloop], 600);
+ boom_object(boomstuff, bosses[bossloop], boomsound, boomchannel);
+ bosses[bossloop] = object_out(bosses[bossloop]);
+ bullets[bulletloop].vtime = 100;
+ bullets[bulletloop] = age_bullet(bullets[bulletloop]);
+ //add to score
+ score = score + 100;
+ };
};
};
- };
+ };
};
};
};
};
- //watch for saucer/player collisions
- if(saucer.active == 1){
-
- if(check_collision(player, saucer)==1){
- //kill player only
- lives--;
- boom_object(boomstuff, player, boomsound, boomchannel);
- life_loss(lives, score);
- player = player_init(player);
- drawlocation = player.y-20;
- //kill any carried pods
- if(pod_in>0){
- for(int podloop = 0; podloop<podmax; podloop++){
- if(pods[podloop].number==pod_in){
- pods[podloop] = object_out(pods[podloop]);
- pod_in = 0;
- strcpy (player.line0, "<==_>");
- strcpy (player.line1, "<_==>");
- };
+ //watch for boss/player collisions
+ for(int bossloop = 0; bossloop<6; bossloop++){
+ if(bosses[bossloop].active == 1){
+ if(check_collision(player, bosses[bossloop])==1){
+ //kill player only
+ lives--;
+ boom_object(boomstuff, player, boomsound, boomchannel);
+ life_loss(lives, score);
+ player = player_init(player);
+ drawlocation = player.y-20;
+ //kill any carried pods
+ if(pod_in>0){
+ for(int podloop = 0; podloop<podmax; podloop++){
+ if(pods[podloop].number==pod_in){
+ pods[podloop] = object_out(pods[podloop]);
+ pod_in = 0;
+ strcpy (player.line0, "<==_>");
+ strcpy (player.line1, "<_==>");
+ };
};
- };
+ };
+ };
+ //Shields don't hurt bosses! Tee hee. . .
};
- //Shields don't hurt the saucer! Tee hee. . .
};
// Lander shots
};
};
- // saucer shots
- if(saucer.active==1){
- if(rand()%1000>600){
- // saucer shoot
- for(int saucershotloop = 0; saucershotloop<landershotmax; saucershotloop++){
- if(landershot[saucershotloop].active==0){
- int multiplier = 1;
- landershot[saucershotloop].active=1;
- //set direction
- if(player.y<saucer.y){
- if(player.x<saucer.x){ landershot[saucershotloop].direction = 7; };
- if(player.x==saucer.x){ landershot[saucershotloop].direction = 4; };
- if(player.x>saucer.x){ landershot[saucershotloop].direction = 1; };
- //set multipler based on direction
- multiplier = -1;
- };
- if(player.y>=saucer.y){
- if(player.x<saucer.x){ landershot[saucershotloop].direction = 9; };
- if(player.x==saucer.x){ landershot[saucershotloop].direction = 6; };
- if(player.x>saucer.x){ landershot[saucershotloop].direction = 3; };
+ // boss shots
+ for(int bossloop = 0; bossloop<6; bossloop++){
+ if(bosses[bossloop].active==1){
+ if(rand()%1000>600){
+ // boss shoot
+ for(int bossshotloop = 0; bossshotloop<landershotmax; bossshotloop++){
+ if(landershot[bossshotloop].active==0){
+ int multiplier = 1;
+ landershot[bossshotloop].active=1;
+ //set direction
+ if(player.y<bosses[bossloop].y){
+ if(player.x<bosses[bossloop].x){ landershot[bossshotloop].direction = 7; };
+ if(player.x==bosses[bossloop].x){ landershot[bossshotloop].direction = 4; };
+ if(player.x>bosses[bossloop].x){ landershot[bossshotloop].direction = 1; };
+ //set multipler based on direction
+ multiplier = -1;
+ };
+ if(player.y>=bosses[bossloop].y){
+ if(player.x<bosses[bossloop].x){ landershot[bossshotloop].direction = 9; };
+ if(player.x==bosses[bossloop].x){ landershot[bossshotloop].direction = 6; };
+ if(player.x>bosses[bossloop].x){ landershot[bossshotloop].direction = 3; };
+ };
+ landershot[bossshotloop].speed = bosses[bossloop].speed;
+ landershot[bossshotloop].x = bosses[bossloop].x;
+ landershot[bossshotloop].y = bosses[bossloop].y + (bosses[bossloop].speed * multiplier);
+ landershot[bossshotloop].vtime = 1;
+ break;
};
- landershot[saucershotloop].speed = saucer.speed;
- landershot[saucershotloop].x = saucer.x;
- landershot[saucershotloop].y = saucer.y + (saucer.speed * multiplier);
- landershot[saucershotloop].vtime = 1;
- break;
};
- };
+ };
};
};
crawlercount = 0;
for(int crawlerloop = 0; crawlerloop<crawlermax; crawlerloop++){ crawlercount = crawlercount + crawlers[crawlerloop].active; };
if(crazycount<=0&&crawlercount<=0){
- if(landercount<=0&&saucer.active==0){
+ bosscount = 0;
+ for(int bossloop = 0; bossloop<6; bossloop++){ bosscount = bosscount + bosses[bossloop].active; };
+ if(landercount<=0&&bosscount<=0){
//Tally bonuses
//Award lives, if any
if(lives<4){lives++;};
crawlers[crawlerloop] = crawler_init(crawlers[crawlerloop]);
};
};
- //Gen saucer
- if(level==4){
- saucer = saucer_init(saucer);
+ //Gen bosses
+ if(level==2){
+ bosses[0] = boss_init(bosses[0]);
+ };
+ if(level==8){
+ bosses[1] = boss_init(bosses[1]);
+ };
+ if(level==12){
+ bosses[2] = boss_init(bosses[2]);
+ };
+ if(level==16){
+ bosses[3] = boss_init(bosses[3]);
+ };
+ if(level==20){
+ bosses[4] = boss_init(bosses[4]);
+ };
+ if(level==24){
+ bosses[5] = boss_init(bosses[5]);
};
};
if(podsin<=0&&landercount>0){