Landers grab pods, which warns the player, kill them, and go crazy.
authorlimb <limb@bc5cbbab-a4ec-0310-bb52-ff3d296db539>
Thu, 7 Dec 2006 19:39:22 +0000 (19:39 +0000)
committerlimb <limb@bc5cbbab-a4ec-0310-bb52-ff3d296db539>
Thu, 7 Dec 2006 19:39:22 +0000 (19:39 +0000)
git-svn-id: svn+ssh://svn/var/repos/curfender@578 bc5cbbab-a4ec-0310-bb52-ff3d296db539

CHANGELOG
layout.txt
main.cpp

index 9976cd2..9b9d051 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,4 @@
+Landers grab pods, kill them, go crazy.
 Crazies chase player.
 Landers -> crazies if all pods are dead and none are in.
 Made logo
index eace67e..ff9da0f 100644 (file)
@@ -19,7 +19,7 @@
 9                   /|\            x + x +     
 0-------------------------------------------------------------------------------
 1Lv:<=><=><=><=>|                        /         \                           |
-2               |                                                              |
-3               |                                                              |
+2 Out: X In: X  |                                                              |
+3 Level :   XX  |                                                              |
 4 Score:XXXXXX  |                        \         /                           |   
 5
index 15fbaa5..899433c 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -26,6 +26,8 @@ struct game_object {
   int vtime;
   int xtrail[10]; //x history
   int ytrail[10]; //y history
+  int chase; //the pod a lander is targeting
+  int phase; //chase phase
   char line0[6]; //object: left
   char line1[6]; //object: right
   char line2[6]; //object: alt1
@@ -114,6 +116,8 @@ game_object object_out(game_object object){
   object.y = -1;
   object.speed = 0;
   object.direction = 0;
+  object.chase = 0;
+  object.phase = 0;
   return object;
 }
 
@@ -453,6 +457,42 @@ game_object player_init(game_object player){
   return player;
 }
 
+game_object pod_chase(game_object lander, game_object pod){
+  
+  //match y, then direction and speed
+  if(lander.chase>0&&lander.phase==1){
+    if(abs(lander.y-pod.y)<4){
+      lander.speed = 2;
+    };
+    if(lander.y==pod.y){
+      lander.direction = pod.direction;
+      lander.speed = pod.speed;
+      lander.phase = 2;
+    };
+  };
+  
+  if(lander.chase>0&&lander.phase==2){
+    //decend to pod's x-1
+    if(lander.x<=pod.x-1){
+      lander.x++;
+    };
+    if(lander.x>pod.x-1){
+      lander.phase = 3;
+    };
+  };
+  
+  if(lander.chase>0&&lander.phase==3){
+    //ascend at speed 1 keep pod at x+1
+    lander.x--;
+    if(lander.x<=1){
+      //at x=1, destroy pod, deallocate lander, allocate crazy at same location.
+      lander.phase = 4;  //set pod to 'kill'
+    };
+  };
+  
+  return lander;
+}
+
 int main(){
   
   //Check screen size 80x25 and exit if not big enough
@@ -644,6 +684,8 @@ int main(){
   int podsin = 0;
   int landercount = 0;
   int crazycount = 0;
+  int alertleft = 0;
+  int alertright = 0;
 
   cbreak();
   halfdelay(1);
@@ -673,10 +715,26 @@ int main(){
 
     for(int landerloop = 0; landerloop<landermax; landerloop++){ 
       if(landers[landerloop].active==1){ 
-       landers[landerloop] = process_motion(landers[landerloop], player);
+       if(landers[landerloop].chase>0&&landers[landerloop].phase==1){
+         landers[landerloop] = pod_chase(landers[landerloop], pods[landers[landerloop].chase]); 
+       };
+       if(landers[landerloop].chase>0&&landers[landerloop].phase==2){
+         landers[landerloop] = pod_chase(landers[landerloop], pods[landers[landerloop].chase]); 
+       };
+       if(landers[landerloop].chase>0&&landers[landerloop].phase==3){
+         pods[landers[landerloop].chase].x--;
+         landers[landerloop] = pod_chase(landers[landerloop], pods[landers[landerloop].chase]); 
+       };
+       if(landers[landerloop].chase>0&&landers[landerloop].phase==4){ //decode which pod to kill
+         pods[landers[landerloop].chase] = object_out(pods[landers[landerloop].chase]);
+         crazies[landerloop] = encrazify(landers[landerloop], crazies[landerloop]);
+         landers[landerloop] = object_out(landers[landerloop]);
+       };
       };
+      landers[landerloop] = process_motion(landers[landerloop], player);
     };
-
+    
+    
     for(int crazyloop = 0; crazyloop<landermax; crazyloop++){ 
       if(crazies[crazyloop].active==1){ 
        crazies[crazyloop] = crazy_motion(crazies[crazyloop], player);
@@ -741,6 +799,20 @@ int main(){
     for(int crazyloop = 0; crazyloop<landermax; crazyloop++){ radar_plot(crazies[crazyloop], drawlocation); };
     radar_plot(player, drawlocation);
 
+    //alerts
+    if(alertright>0){
+      if(alertright%2==0){
+       mvprintw(19,50," >> ");
+      };
+      alertright--;
+    };
+    if(alertleft>0){
+      if(alertleft%2==0){
+       mvprintw(19,40," << ");
+      };
+      alertleft--;
+    };
+    
     //pod state
     mvprintw(21,1,"Out: %d In: %d", podcount, podsin);
 
@@ -749,7 +821,9 @@ int main(){
 
     input = getch();
     
+    //quit
     if(input=='q'){loopvar=1;};
+
     //check for / process direction change
     if(input==66||input==68||input==67||input==65||input==69){
       player = process_direction(player, input);
@@ -869,7 +943,7 @@ int main(){
          drawlocation = player.y-20;
          //kill any carried pods
          if(pod_in>0){
-           for(int podloop = 0; podloop<8; podloop=podloop+2){ 
+           for(int podloop = 0; podloop<8; podloop++){ 
              if(pods[podloop].number==pod_in){
                pods[podloop] = object_out(pods[podloop]);
                pod_in = 0;
@@ -896,7 +970,7 @@ int main(){
          drawlocation = player.y-20;
          //kill any carried pods
          if(pod_in>0){
-           for(int podloop = 0; podloop<8; podloop=podloop+2){ 
+           for(int podloop = 0; podloop<8; podloop++){ 
              if(pods[podloop].number==pod_in){
                pods[podloop] = object_out(pods[podloop]);
                pod_in = 0;
@@ -988,7 +1062,7 @@ int main(){
          drawlocation = player.y-20;
          //kill any carried pods
          if(pod_in>0){
-           for(int podloop = 0; podloop<8; podloop=podloop+2){ 
+           for(int podloop = 0; podloop<8; podloop++){ 
              if(pods[podloop].number==pod_in){
                pods[podloop] = object_out(pods[podloop]);
                pod_in = 0;
@@ -1002,14 +1076,28 @@ int main(){
     };
     
     //lander pod grab logic
-    //steps
+    //steps:
     //decide to grab a pod
-    //choose the closest pod
-    //alert player
-    //travel to it at speed 2, match y , then direction and speed
-    //decend to pod's x-1
-    //ascend at speed 1 keep pod at x+1
-    //at x=1, destroy pod, deallocate lander, allocate crazy at same location.  still need to define crazy and it's behavior
+    for(int landerloop = 0; landerloop<landermax; landerloop++){
+      if(landers[landerloop].active==1&&landers[landerloop].chase==0){
+       //if(rand()%10000<=10){
+       if(rand()%1000<=10){
+         //choose the closest pod
+         for(int podloop = 0; podloop<8; podloop++){
+           if(landers[landerloop].chase==0&&pods[podloop].chase==0){
+             landers[landerloop].chase = pods[podloop].number;
+             pods[podloop].chase = landers[landerloop].number;
+           };
+         };
+         //alert player  print >>>> or <<<< at mid height, flash.  set a value, have a function do it in the draw area.
+         //travel to it at speed 4
+         landers[landerloop].speed = 4;
+         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;
+       };
+      };
+    };
 
     //check for 0 active pods, saved pods, level victory
     podcount = 0;