Added lander-seeking missle powerup.
authorlimb <limb@bc5cbbab-a4ec-0310-bb52-ff3d296db539>
Fri, 5 Jun 2009 17:33:26 +0000 (17:33 +0000)
committerlimb <limb@bc5cbbab-a4ec-0310-bb52-ff3d296db539>
Fri, 5 Jun 2009 17:33:26 +0000 (17:33 +0000)
git-svn-id: svn+ssh://svn/var/repos/curfender@825 bc5cbbab-a4ec-0310-bb52-ff3d296db539

CHANGELOG
draw.cpp
init.cpp
init.h
layout.txt
main.cpp
motion.cpp
motion.h
powerup.cpp

index 2e835de..9ba70be 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,4 @@
+Added missle powerup, searcheds out landers attacking pods.
 Limited number of lives and smartbombs.
 Boss difficulty scales upward.
 Merged saucer boss into unified boss system.
index c51f6c9..e8a4080 100644 (file)
--- a/draw.cpp
+++ b/draw.cpp
@@ -56,7 +56,7 @@ int draw_object(game_object object, int drawlocation){
 
 void draw_board(){
 
-  extern int score, lives, level, shieldsleft;
+  extern int score, lives, level, shieldsleft, missile;
 
   // mvprintw(row,col,string,vars)
   //top
@@ -83,10 +83,17 @@ void draw_board(){
   //Lives
   mvprintw(20,1,"Lv:");
   int count = lives;
-  for(int x=4;count>0;x=x+3){
-    mvprintw(20,x,"<=>");
+  for(int x=4;count>0;x=x+2){
+    mvprintw(20,x,"<>");
     count--;
   };
+  //Missles
+  count = missile;
+  for(int x=13;count>0;x=x+1){
+    mvprintw(20,x,"M");
+    count--;
+  };
+
   //Level
   mvprintw(22,1,"Lvl:%3d", level);
   mvprintw(22,9,"S:%3d",  shieldsleft);
index dd2e781..927bfac 100644 (file)
--- a/init.cpp
+++ b/init.cpp
@@ -74,3 +74,17 @@ game_object player_init(game_object player){
 
   return player;
 }
+
+game_object missile_init(game_object missile, game_object player, game_object lander){
+  missile.active=1;
+  missile.x = player.x;
+  missile.y = player.y;
+  if((620-missile.y+lander.y)<(missile.y-lander.y)){
+    missile.direction = 4;
+  } else {
+    missile.direction = 6;
+  };
+  missile.speed = 4;
+
+  return missile;
+}
diff --git a/init.h b/init.h
index 4873021..c11ef63 100644 (file)
--- a/init.h
+++ b/init.h
@@ -3,3 +3,4 @@ game_object lander_init(game_object);
 game_object crawler_init(game_object);
 game_object boss_init(game_object, int);
 game_object player_init(game_object);
+game_object missile_init(game_object, game_object, game_object);
index 8ee2f87..fafdb54 100644 (file)
@@ -18,7 +18,7 @@
 8                    ^                        <_==>    <x==>  -  -  -  
 9                   /|\            x + x +                             /=\
 0-------|-------------------|--------------------|--------------------|---------
-1Lv:<=><=><=><=>|                         /        \                           |
+1Lv:<><><><> MMM|                         /        \                           |
 2 O:X I:X BBBB  |                                                              |
 3 Lvl:XXX S:XXX |                                                              |
 4 Score:XXXXXX  |                         \        /                           |   
index 83cd598..b6d8c86 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -48,6 +48,7 @@ const int bulletmax = 10;
 const int landershotmax = 10;
 const int landermax = 4;
 const int crawlermax = 6;
+const int missilemax = 3;
 const float version = 1.0;
 
 int score;
@@ -60,6 +61,7 @@ int pause_game = 0;
 int shieldsleft = 400;
 int tripshot = 0;
 int laser = 0;
+int missile = 0;
 int sound = 1;
 
 int main(int argc, char *argv[]){
@@ -417,6 +419,21 @@ int main(int argc, char *argv[]){
   strcpy (boomstuff.line0, "\\");
   strcpy (boomstuff.line1, "/");
 
+  //missiles
+  struct game_object missiles[missilemax] = {
+    { 50, 0, 0, 0, 5, 0, 0, 0, 0 },
+    { 51, 0, 0, 0, 5, 0, 0, 0, 0 },
+    { 52, 0, 0, 0, 5, 0, 0, 0, 0 }
+  };
+
+  for(int missileloop = 0; missileloop<missilemax; missileloop++){ 
+    strcpy (missiles[missileloop].line0, "---");
+    strcpy (missiles[missileloop].line1, "---");
+    strcpy (missiles[missileloop].radar, "-");
+    
+    missiles[missileloop].chase = -1;
+  };
+
   initscr();
 
   //Check screen size 80x24 and exit if not big enough
@@ -660,6 +677,19 @@ int main(int argc, char *argv[]){
        bullets[bulletloop] = age_bullet(bullets[bulletloop]);
       };
     };
+    
+    for(int missileloop = 0; missileloop<missilemax; missileloop++){ 
+      if(missiles[missileloop].active==1){ 
+        if(landers[missiles[missileloop].chase].active==1){
+          missiles[missileloop] = missile_motion(missiles[missileloop], landers[missiles[missileloop].chase]);
+         missiles[missileloop] = process_motion(missiles[missileloop], player);
+         //missiles[missileloop] = age_bullet(missiles[missileloop]);  //Something to think about
+        } else {
+         boom_object(boomstuff, missiles[missileloop], boomsound, boomchannel);
+         missiles[missileloop] = object_out(missiles[missileloop]);
+        };
+      };
+    };
 
     for(int landerloop = 0; landerloop<landermax; landerloop++){ 
       if(landers[landerloop].active==1){ 
@@ -765,6 +795,13 @@ int main(int argc, char *argv[]){
       };
     };
     
+    // Draw missiles objects 50-53
+    for(int missileloop = 0; missileloop<missilemax; missileloop++){ 
+      if(missiles[missileloop].active==1){ 
+       drawlocation = draw_object(missiles[missileloop], drawlocation);
+      };
+    };
+    
     //draw laser beam
     if(drawlaser==1){
       
@@ -823,6 +860,7 @@ int main(int argc, char *argv[]){
     for(int crazyloop = 0; crazyloop<landermax; crazyloop++){ radar_plot(crazies[crazyloop], drawlocation); };
     for(int crawlerloop = 0; crawlerloop<crawlermax; crawlerloop++){ radar_plot(crawlers[crawlerloop], drawlocation); };
     for(int bossloop = 0; bossloop<6; bossloop++){ radar_plot(bosses[bossloop], drawlocation); };
+    for(int missileloop = 0; missileloop<missilemax; missileloop++){ radar_plot(missiles[missileloop], drawlocation); };
     radar_plot(player, drawlocation);
 
     //alerts
@@ -932,6 +970,11 @@ int main(int argc, char *argv[]){
        if(strncmp(powerups[puploop].line0, "Z", 1)==0){
          laser = laser + 100;
        };
+       if(strncmp(powerups[puploop].line0, "M", 1)==0){
+         if(missile<3){
+           missile++;
+          };
+       };
       };
     };
     
@@ -1329,6 +1372,18 @@ int main(int argc, char *argv[]){
         //Shields don't hurt bosses!  Tee hee. . .
       };
     };
+    //watch for missile/lander collisions
+    for(int missileloop = 0; missileloop<missilemax; missileloop++){
+      if(missiles[missileloop].active == 1){
+        if(check_collision(landers[missiles[missileloop].chase], missiles[missileloop])==1){
+         //kill missile and lander
+         boom_object(boomstuff, landers[missiles[missileloop].chase], boomsound, boomchannel);
+         boom_object(boomstuff, missiles[missileloop], boomsound, boomchannel);
+         landers[missiles[missileloop].chase] = object_out(landers[missiles[missileloop].chase]);
+         missiles[missileloop] = object_out(missiles[missileloop]);
+        };
+      };
+    };
     
     // Lander shots
     for(int landerloop = 0; landerloop<landermax; landerloop++){
@@ -1508,7 +1563,7 @@ int main(int argc, char *argv[]){
       if(landers[landerloop].active==1&&landers[landerloop].chase==-1){
        //if(rand()%10000<=10){
        if(rand()%1000<=10){
-         //choose the closest pod
+         //choose a pod
          for(int podloop = 0; podloop<podmax; podloop++){
            if(landers[landerloop].chase==-1&&pods[podloop].chase==-1&&pods[podloop].active==1){
              landers[landerloop].chase = podloop;
@@ -1521,6 +1576,18 @@ int main(int argc, char *argv[]){
          if(player.y<landers[landerloop].y){ landers[landerloop].direction = 6; alertright = 20;};
          if(player.y>=landers[landerloop].y){ landers[landerloop].direction = 4; alertleft = 20;};
          landers[landerloop].phase = 1;
+         //launch missile if we have one
+         if(missile>=1){
+            for(int missileloop = 0; missileloop<missilemax; missileloop++){
+              if(missiles[missileloop].chase==-1){
+                missiles[missileloop].chase = landerloop;
+                //play missle launch sound
+                //init missle
+                missiles[missileloop] = missile_init(missiles[missileloop], player, landers[landerloop]);
+                missile--;
+              };   
+            };                                                                        
+          };
          //strcpy(landers[landerloop].radar, "$"); //debug
          //strcpy(pods[landers[landerloop].chase].radar, "&"); //debug
        };
index 5a3bb74..96940c7 100644 (file)
@@ -34,6 +34,21 @@ game_object crazy_motion(game_object object, game_object player){
   return object;
 }
 
+game_object missile_motion(game_object object, game_object lander){
+  if(lander.y<object.y){ 
+    if(lander.x<object.x){ object.x-- ; };
+    if(lander.x==object.x){ object.direction = 4; };
+    if(lander.x>object.x){ object.x++; };
+  };
+  if(lander.y>=object.y){
+    if(lander.x<object.x){ object.x--; };
+    if(lander.x==object.x){ object.direction = 6; };
+    if(lander.x>object.x){ object.x++; };
+  };
+
+  return object;
+}
+
 game_object process_motion(game_object object, game_object player){
 
   extern int pod_in, drawlocation;  
index e58935a..3e573dc 100644 (file)
--- a/motion.h
+++ b/motion.h
@@ -1,5 +1,6 @@
 game_object boss_motion(game_object, game_object);
 game_object crazy_motion(game_object, game_object);
+game_object missile_motion(game_object, game_object);
 game_object process_motion(game_object, game_object);
 game_object process_direction(game_object, int);
 game_object pod_chase(game_object, game_object);
index d65e9ce..1ee6f92 100644 (file)
@@ -18,9 +18,12 @@ game_object powerup_init(game_object powerup, game_object object){
     };
   powerup.speed = 1;
   
-  int fodder = rand()%1000;
+  int fodder = rand()%1200;
 
-  if(fodder>=800){
+  if(fodder>=1000){
+    strcpy (powerup.line0, "M");
+  };
+  if(fodder>=800&&fodder<1000){
     strcpy (powerup.line0, "T");
   };
   if(fodder>=600&&fodder<800){