Ready to test boss generalization.
authorlimb <limb@bc5cbbab-a4ec-0310-bb52-ff3d296db539>
Fri, 29 May 2009 13:47:48 +0000 (13:47 +0000)
committerlimb <limb@bc5cbbab-a4ec-0310-bb52-ff3d296db539>
Fri, 29 May 2009 13:47:48 +0000 (13:47 +0000)
git-svn-id: svn+ssh://svn/var/repos/curfender@808 bc5cbbab-a4ec-0310-bb52-ff3d296db539

layout.txt
main.cpp

index b5a38ea..8ee2f87 100644 (file)
@@ -60,18 +60,11 @@ Bosses:
 12: Gunboat         /O\
               <==/==[=]==\==>
 
-16: Skull      (---)
-              (-o-o-)
-               |   |
+16: Skull      /o-o\
                \|_|/
 
 20: Squid         (----)
-                (------)
-                (------)
-                 (----)
-                  |||\
-                 / | \\
-                 | //|
+                  /||\
 
 24: Singularity Drone   .
 
index bcb7b87..d9a4593 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -172,7 +172,7 @@ game_object object_out(game_object object){
   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; };
@@ -415,20 +415,20 @@ game_object crawler_init(game_object crawler){
   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){
@@ -1068,21 +1068,38 @@ int main(){
     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;
@@ -1121,6 +1138,7 @@ int main(){
   int landercount = 0;
   int crazycount = 0;
   int crawlercount = 0;
+  int bosscount = 0;
   int alertleft = 0;
   int alertright = 0;
   int smartbombs = 4;
@@ -1365,9 +1383,11 @@ int main(){
       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
@@ -1463,7 +1483,10 @@ int main(){
       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);
@@ -1474,7 +1497,7 @@ int main(){
     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
@@ -1659,18 +1682,20 @@ int main(){
            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
@@ -1751,15 +1776,17 @@ int main(){
          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;
+           };
          };
-       };
+        };
       };
     };
  
@@ -1822,22 +1849,24 @@ int main(){
            };
          };
        };
-       //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;
+             };
            };
          };
-       };
+        };
       };
     };
     
@@ -1952,29 +1981,30 @@ int main(){
       };
     };
 
-    //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
@@ -2076,34 +2106,36 @@ int main(){
       };
     };
 
-    // 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;
          };
-       };
+        };
       };
     };
     
@@ -2181,7 +2213,9 @@ int main(){
       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++;};
@@ -2224,9 +2258,24 @@ int main(){
              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){