home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / source / conqsrc.lha / Conquest / src / research.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-09-03  |  3.2 KB  |  166 lines

  1. /* Research.c: Procedures pertaining to research */
  2.  
  3. #include <stdio.h>
  4. #include "defs.h"
  5. #include "structs.h"
  6. #include "vars.h"
  7. #include "protos.h"
  8.  
  9. void ressum()
  10. {
  11.   char key;
  12.   int value;
  13.   char iline[81];
  14.  
  15.   printf("esearch field(s):");
  16.   get_line(iline);
  17.   key = get_token(iline,&value);
  18.   clear_left();
  19.   if (key==' ')
  20.   {
  21.     print_res('R');
  22.     print_res('V');
  23.     print_res('W');
  24.   } 
  25.   else 
  26.   {
  27.     do
  28.     {
  29.       print_res(key);
  30.       key = get_token(iline,&value);
  31.     } 
  32.     while (key != ' ');
  33.   }
  34. }
  35.  
  36. void print_res(char field)
  37. {
  38.   switch (field)
  39.   {
  40.    case 'V':
  41.     point(53,18);
  42.     printf("V:%2d",vel[PLAYER]);
  43.     if (vel[player] < MAX_VELOCITY)
  44.       printf(" res: %3d need:%4d",vel_working[PLAYER], vel_req[vel[PLAYER]+1]);
  45.     else printf("                   ");
  46.     break;
  47.    case 'R':
  48.     point( 53,19);
  49.     printf("R:%2d",range[PLAYER]);
  50.     if (range[player] < MAX_RANGE)
  51.       printf(" res: %3d need:%4d",ran_working[PLAYER], ran_req[range[PLAYER]+1]);
  52.     else printf("                   ");
  53.     break;
  54.    case 'W':
  55.     point(53,20);
  56.     printf("W:%2d",weapons[PLAYER]);
  57.     if (weapons[player] < MAX_WEAPONS)
  58.       printf(" res: %3d need:%4d",weap_working[PLAYER], weap_req[weapons[PLAYER]+1]);
  59.     else printf("                   ");
  60.     break;
  61.   } 
  62. }
  63.  
  64. /* Research up to next breakthrough. Return amount used */
  65. int research_limited(int team, char field, int max_amt)
  66. {
  67.   int used = 0;
  68.  
  69.   switch (field)
  70.   {
  71.    case 'W':
  72.     if (weapons[team]<MAX_WEAPONS)
  73.     {
  74.       used = min(max_amt, weap_req[weapons[team]+1]-weap_working[team]);
  75.       weap_working[team] += used;
  76.       if (weap_working[team] >= weap_req[weapons[team]+1])
  77.       {
  78.     weapons[team]++;
  79.     if (team==ENEMY)
  80.     {
  81.       new_research();
  82.       field = en_research;
  83.     }
  84.     weap_working[team]=0;
  85.       }
  86.     }
  87.     break;
  88.    case 'R':
  89.     if (range[team] < MAX_RANGE)
  90.     {
  91.       used = min(max_amt, ran_req[range[team]+1]-ran_working[team]);
  92.       ran_working[team] += used;
  93.       if (ran_working[team] >= ran_req[range[team]+1])
  94.       {
  95.     range[team]++;
  96.     if (team==ENEMY) 
  97.     {
  98.       new_research();
  99.       field = en_research;
  100.     }
  101.     ran_working[team]=0;
  102.       }
  103.     }
  104.     break;
  105.    case 'V':
  106.     if (vel[team] < max_vel)
  107.     {
  108.       used = min(max_amt, vel_req[vel[team]+1]-vel_working[team]);
  109.       vel_working[team] += used;
  110.       if (vel_working[team] >= vel_req[vel[team]+1])
  111.       {
  112.     vel[team]++;
  113.     vel_working[team]=0;
  114.       }
  115.     }
  116.     break;
  117.    default: 
  118.     printf("error!!! in research field %c\n", field);
  119.   } 
  120.   return(used);
  121. }
  122.  
  123. /* Maybe automagically redraw research here? */
  124. void research(int team, char field, int amt)
  125. {
  126.   int old_amt;
  127.  
  128.   do
  129.   {
  130.     old_amt = amt;
  131.     amt -= research_limited(team, field, amt);
  132.     if (team==ENEMY)
  133.     {
  134.       new_research();
  135.       field = en_research;
  136.     }
  137.     if (old_amt == amt)
  138.       /* How stupid - invested beyond the limit */
  139.       amt = 0;
  140.   }
  141.   while (amt > 0);
  142. }
  143.  
  144. void new_research()
  145. {
  146.   if (weapons[ENEMY] < MAX_WEAPONS)
  147.   {
  148.     if (weapons[PLAYER] - weapons[ENEMY] + 5 > rnd(10))
  149.     {
  150.       en_research = 'W';
  151.       return;
  152.     }
  153.   }
  154.   
  155.   if (vel[ENEMY] < MAX_VELOCITY)
  156.   {
  157.     if (range[ENEMY] / vel[ENEMY] > rnd(3))
  158.     {
  159.       en_research = 'V';
  160.       return;
  161.     }
  162.   }
  163.   
  164.   en_research = 'R';
  165. }
  166.