home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / games / table / amoeba / amoeba.c next >
C/C++ Source or Header  |  1985-11-19  |  19KB  |  931 lines

  1. /******************************
  2.  * Amoeba Wars V.2            *
  3.  * (c) Copyright Larry Roux   *
  4.  * Too Hip! Software          *
  5.  ******************************/
  6. #include <osbind.h>
  7.  
  8. #define TRUE 1
  9. #define FALSE 0
  10. #define M_ON 257
  11. #define M_OFF 256
  12. #define MU_MESAG 0x0010
  13. #define MU_BUTTON 0x0002
  14. #define MU_KEYBD 0x0001
  15. #define MU_TIMER 0x0020
  16. #define WM_REDRAW 20
  17.  
  18. int handle;
  19.  
  20. int    xdesk,ydesk,hdesk,wdesk;
  21. int    xwork,ywork,hwork,wwork;
  22.  
  23. int gl_wchar,gl_hchar,gl_wbox,gl_hbox;
  24.  
  25. int    hidden;
  26.  
  27. int    contrl[12];
  28. int    intin[128];
  29. int    ptsin[128];
  30. int    intout[128];
  31. int    ptsout[128];
  32.  
  33. int work_in[11];
  34. int work_out[57];
  35.  
  36.  long addr;
  37.  int picpalette[16],pic_rez;
  38.  int savepal[16];
  39.  long *place;
  40.  int chart[18][28];
  41.  int mx,my;
  42.  int colx,rowy;
  43.  int colx2,rowy2;
  44.  int pl_num,cur_turn;
  45.  int loopcolor=2;
  46.  char *redscore="0 0";
  47.  char *greenscore="0 0";
  48.  int score[4];
  49.  int quit;
  50.  int life_count;
  51.  int level;
  52.  char fs_path[32]="A:\*.SAV";
  53.  char fs_select[16]="AMOEBA.SAV";
  54.  char fs_copy[64];
  55.  int life_limit;
  56.  
  57. open_vwork()
  58. {
  59. int i;
  60.     for(i=0;i<10;work_in[i++]=1);
  61.     work_in[10]=2;
  62.     v_opnvwk(work_in,&handle,work_out);
  63. }
  64.  
  65. hide_mouse()
  66. {
  67.     if(! hidden){
  68.         graf_mouse(M_OFF,0x0L);
  69.         hidden=TRUE;
  70.     }
  71. }
  72.  
  73. show_mouse()
  74. {
  75.     if(hidden){
  76.         graf_mouse(0,0x0L);
  77.         graf_mouse(M_ON,0x0L);
  78.         hidden=FALSE;
  79.     }
  80. }
  81.  
  82. set_clip(clhandle,x,y,w,h)
  83. int clhandle,x,y,w,h;
  84. {
  85. int clip[4];
  86.     clip[0]=x;
  87.     clip[1]=y;
  88.     clip[2]=x+w;
  89.     clip[3]=y+h;
  90.     vs_clip(clhandle,1,clip);
  91. }
  92.  
  93. /******************************************************
  94.  * draw the screen                                    *
  95.  ******************************************************/
  96.  
  97. draw_title(baddr)
  98. long *baddr;
  99. {
  100. int x;
  101.   hide_mouse();
  102.   Setpalette(picpalette);  /* set colors to new palette      */
  103.  
  104.    for(x=0;x<8000;x++){    /* move from pic in mem to screen */
  105.     *(baddr++) = *(place++);
  106.    }
  107.    
  108.     place-=8000;           /* reset the screen pointer       */
  109.   do_score();
  110.   show_mouse();  
  111. }
  112.  
  113. /**********************************************************
  114.  *  Load the screen into memory                           *
  115.  **********************************************************/
  116.  
  117. morestuff()
  118. {
  119.   int fd=0;
  120.   int i;
  121.     /* save the old palette:                    */
  122.     for(i=0;i<16;i++) savepal[i] = Setcolor(i,-1);
  123.     addr=Physbase();
  124.  
  125.     fd=Fopen("AMOEBA.PI2",0);
  126.     if (fd < 0)
  127.      {
  128.       form_alert(0,"[3][Cannot find AMOEBA.PI2!][oh no!]");
  129.       exit(0);
  130.      }
  131.     Fread(fd,2L,pic_rez);
  132.     Fread(fd,32L,picpalette);
  133.     Fread(fd,32000L,place);
  134.     Fclose(fd);
  135.  
  136.     draw_title(addr);
  137.   
  138. }
  139.  
  140.  
  141.  
  142. chk_res()
  143. {
  144.     int fm_button;
  145.     
  146.     if (work_out[13] !=4)
  147.     {
  148.     fm_button = form_alert(0,"[3][Switch to MED|Resolution|and Restart][OK]");
  149.     return(0);
  150.     }
  151.    return(1);
  152. }
  153.  
  154. do_dots()
  155. {
  156.  int count,count2;
  157.  int modrow,truecol,truerow;
  158.   
  159.   hide_mouse();
  160.   for(count=1;count<18;count++)
  161.    {
  162.     for(count2=1;count2<28;count2++)
  163.      {
  164.       if(chart[count][count2])
  165.        {
  166.         modrow= count2%2;
  167.         if(modrow)
  168.          {
  169.           truecol=14+((count-1)*26);
  170.          }
  171.          else
  172.           {
  173.            truecol=27+((count-1)*26);
  174.           }
  175.           truerow=4+((count2-1)*6);
  176.           vsf_interior(handle,1);
  177.           vsf_color(handle,chart[count][count2]);
  178.           if(chart[count][count2]==1)
  179.            {
  180.             vsf_color(handle,0);
  181.            }
  182.           v_contourfill(handle,truecol,truerow,-1);
  183.          }
  184.         }
  185.        }
  186.      show_mouse();
  187. }
  188.  
  189. get_hex()
  190. {
  191.  int event,keycode;
  192.  int butdown=0;
  193.  int ret;
  194.  char msgbuff[16];
  195.  int chosex,chosey;
  196.  int truecol,truerow,modrow;
  197.  
  198.    do {
  199.     event = evnt_multi(MU_MESAG | MU_BUTTON | MU_KEYBD | MU_TIMER,
  200.             1,1,butdown,
  201.             0,0,0,0,0,
  202.             0,0,0,0,0,
  203.             msgbuff,200,0,&mx,&my,&ret,&ret,&keycode,&ret);
  204.  
  205.     wind_update(TRUE);
  206.     
  207.     if (event & MU_MESAG)
  208.       switch (msgbuff[0]) 
  209.        {
  210.         case WM_REDRAW:
  211.         hide_mouse();
  212.         draw_title(addr);
  213.         show_mouse();
  214.         break;
  215.        } /* switch (msgbuff[0]) */
  216.  
  217.      if (event & MU_BUTTON) 
  218.       {
  219.        if(butdown) butdown=FALSE;
  220.        else butdown=TRUE;
  221.      
  222.        if((!butdown) && (mx<453) && (my<170))
  223.         {
  224.          mx-=3;
  225.          chosex=(mx/13)+1;
  226.          colx=chosex/2;
  227.          if(chosex%2)
  228.           {
  229.            colx+=1;
  230.            rowy=(my/12)+1;
  231.            rowy+=rowy-1;
  232.           }
  233.          else
  234.           {
  235.            chosey=my-6;
  236.            rowy=((chosey/12)+1)*2;
  237.           }
  238.           fill_it();              
  239.         }
  240.        }
  241.      if(cur_turn==2)
  242.       {        
  243.         modrow=rowy2%2;
  244.         if(modrow)
  245.          {
  246.           truecol=14+((colx2-1)*26);
  247.          }
  248.          else
  249.           {
  250.            truecol=27+((colx2-1)*26);
  251.           }
  252.           truerow=4+((rowy2-1)*6);
  253.         vsf_color(handle,loopcolor);
  254.         v_contourfill(handle,truecol,truerow,-1);
  255.         loopcolor++;
  256.         if(loopcolor==4) loopcolor=2;
  257.       }
  258.       if((event & MU_BUTTON) && (mx>464) && (my>156) && (mx< 535)
  259.              && (my<172) && (!butdown))
  260.         {
  261.          save_it();
  262.         }
  263.      if((event & MU_BUTTON) && (mx>551) && (my>178) && (mx< 622)
  264.              && (my<194) && (!butdown))
  265.         {
  266.          load_it();
  267.         }
  268.      if((event & MU_BUTTON) && (mx>551) && (my>156) && (mx<622)
  269.              && (my<172) && (!butdown))
  270.        {
  271.         quit=2;
  272.        } 
  273.      if((score[2]<1) || (score[3]<1))
  274.       {
  275.        quit=1;
  276.       }
  277.      wind_update(FALSE);
  278.     }while(!quit);
  279.                 
  280. }
  281.  
  282. fill_it()
  283. {
  284.    if(cur_turn==1)
  285.     {
  286.      if(chart[colx][rowy]==pl_num)
  287.       {
  288.        colx2=colx;
  289.        rowy2=rowy;
  290.        cur_turn=2;
  291.       }
  292.       return;
  293.      }
  294.     if((colx2==colx) && (rowy2==rowy) && (cur_turn==2)) 
  295.      {
  296.       cur_turn=1;
  297.      }
  298.     if((cur_turn==2) && (chart[colx][rowy]==0) &&
  299.        (((rowy==rowy2-2) && (colx==colx2)) ||
  300.         ((rowy==rowy2+2) && (colx==colx2)) || 
  301.         ((rowy==rowy2-1) && (colx==colx2-1) && (rowy2%2)) ||
  302.         ((rowy==rowy2+1) && (colx==colx2-1) && (rowy2%2)) ||
  303.         ((rowy==rowy2-1) && (colx==colx2+1) && (!(rowy2%2))) ||
  304.         ((rowy==rowy2+1) && (colx==colx2+1) && (!(rowy2%2))) ||
  305.         ((rowy==rowy2-1) && (colx==colx2)) ||
  306.         ((rowy==rowy2+1) && (colx==colx2))))
  307.      {
  308.       cur_turn=1;
  309.       chart[colx2][rowy2]=0;
  310.       chart[colx][rowy]=pl_num;
  311.         pl_num++;
  312.         if(pl_num==4) 
  313.          {
  314.           pl_num=2;
  315.          }
  316.         else
  317.          {
  318.           life_count++;
  319.           
  320.           if(life_count==life_limit) 
  321.            {
  322.             do_life();
  323.             life_count=2;
  324.            }
  325.          }
  326.       }
  327.     draw_title(addr);
  328.     do_dots();
  329. }     
  330.  
  331. do_life()
  332. {
  333.  int chart2[18][28];
  334.  int xx,yy,zz;
  335.  int adj_count[4];
  336.  int friends,enemys;
  337.  int me, you;
  338.  int flaga;
  339.  int mult[7];
  340.  
  341.  
  342.  for(xx=1;xx<18;xx++)
  343.   {
  344.    for(yy=1;yy<28;yy++)
  345.     {
  346.      chart2[xx][yy]=chart[xx][yy];
  347.     }
  348.   }
  349.  
  350.  for(xx=1;xx<18;xx++)
  351.   {
  352.    for(yy=1;yy<28;yy++)
  353.     {
  354.      if(chart[xx][yy] > 1)
  355.       {
  356.        for(zz=1;zz<7;zz++)
  357.         {
  358.          mult[zz]=0;
  359.         }
  360.        adj_count[2]=0;
  361.        adj_count[3]=0;
  362.        me=chart[xx][yy];
  363.        if(me==2) { you=3; }
  364.        else { you=2; }
  365.  
  366.        if((yy>2) && (chart[xx][yy-2]))  /* up */
  367.         {
  368.          adj_count[chart[xx][yy-2]]++;
  369.          mult[1]=1;
  370.         }
  371.        if((yy<16) && (chart[xx][yy+2])) /* down */
  372.         {
  373.          adj_count[chart[xx][yy+2]]++;
  374.          mult[2]=1;
  375.         }
  376.        if((yy>1) && (chart[xx][yy-1])) /* angle */
  377.         {
  378.          adj_count[chart[xx][yy-1]]++;
  379.          mult[3]=1;
  380.         }
  381.        if((yy<17) && (chart[xx][yy+1])) /* angle */
  382.         {
  383.          adj_count[chart[xx][yy+1]]++;
  384.          mult[4]=1;
  385.         }
  386.        if((yy%2) && (xx>1) && (yy>1) && (chart[xx-1][yy-1]))
  387.         {
  388.          adj_count[chart[xx-1][yy-1]]++;
  389.          mult[5]=1;
  390.         }
  391.        if((yy%2) && (yy<17) && (xx>1) && (chart[xx-1][yy+1]))
  392.         {
  393.          adj_count[chart[xx-1][yy+1]]++;
  394.          mult[6]=1;
  395.         }
  396.        if((!(yy%2)) && (yy>1) && (xx<27) && (chart[xx+1][yy-1]))
  397.         {
  398.          adj_count[chart[xx+1][yy-1]]++;
  399.          mult[5]=2;
  400.         }
  401.        if((!(yy%2)) && (xx<17) && (yy<27) && (chart[xx+1][yy+1]))
  402.         {
  403.          adj_count[chart[xx+1][yy+1]]++;
  404.          mult[6]=2;
  405.         }
  406.        /* die */
  407.        if(chart[xx][yy]==2)
  408.         {
  409.          friends=adj_count[2];
  410.          enemys=adj_count[3];
  411.         }
  412.        else
  413.         {
  414.          friends=adj_count[3];
  415.          enemys=adj_count[2];
  416.         }
  417.        flaga=0;
  418.        if((friends+enemys==6) && (rnd(100)<75))
  419.         { 
  420.          flaga=1;
  421.         }
  422.           
  423.        if((friends+enemys==5) && (rnd(100)<50))
  424.         { 
  425.          flaga=1;
  426.         }
  427.        if((friends+enemys==4) && (rnd(100)<25))
  428.         { 
  429.          flaga=1; 
  430.         }
  431.        if((friends+enemys==3) && (rnd(100)<10))
  432.         { 
  433.          flaga=1; 
  434.         }
  435.        if((friends+enemys==1) && (rnd(100)<5))
  436.         { 
  437.          flaga=1; 
  438.         }
  439.        if((friends+enemys==0) && (rnd(100)<10))
  440.         { 
  441.          flaga=1; 
  442.         }
  443.        if(flaga)
  444.         {
  445.          score[me]--;
  446.          chart2[xx][yy]=0;
  447.         }
  448.        /* absorb */
  449.       flaga=0;
  450.       if((friends==0) && (enemys==2) && (rnd(100)<5))
  451.         {
  452.          flaga=1;
  453.         }
  454.       if((friends==0) && (enemys==3) && (rnd(100)<20))
  455.         {
  456.          flaga=1;
  457.         }
  458.       if((friends==0) && (enemys==4) && (rnd(100)<50))
  459.         {
  460.          flaga=1;
  461.         }
  462.       if((friends==0) && (enemys==5) && (rnd(100)<70))
  463.         {
  464.          flaga=1;
  465.         }
  466.        if((friends==1) && (enemys==2) && (rnd(100)<10))
  467.         {
  468.          flaga=1;
  469.         }
  470.        if((friends==1) && (enemys==3) && (rnd(100)<30))
  471.         {
  472.          flaga=1;
  473.         }
  474.        if((friends==1) && (enemys==4) && (rnd(100)<75))
  475.         {
  476.          flaga=1;
  477.         }  
  478.        if((friends==2) && (enemys==3) && (rnd(100)<10))
  479.         {
  480.          flaga=1;
  481.         } 
  482.        if((friends==3) && (enemys==2) && (rnd(100)<5))
  483.         {
  484.          flaga=1;
  485.         }
  486.        if(flaga)
  487.         {
  488.          score[me]--;
  489.          score[you]++;
  490.          chart2[xx][yy]=you;
  491.         }
  492.        /* multiply */  
  493.        flaga=0;
  494.        if((friends==1) && (enemys<4) && (rnd(100)<10))
  495.         {
  496.          flaga=1;
  497.         }
  498.        if((friends==2) && (enemys<4) && (rnd(100)<30))
  499.         {
  500.          flaga=1;
  501.         } 
  502.        if((friends==3) && (enemys<3) && (rnd(100)<60))
  503.         {
  504.          flaga=1;
  505.         }
  506.        if((friends==4) && (enemys<2) && (rnd(100)<20))
  507.         {
  508.          flaga=1;
  509.         }
  510.        if((friends==5) && (enemys==0) && (rnd(100)<10))
  511.         {
  512.          flaga=1;
  513.         }          
  514.        if(flaga)
  515.         {
  516.          zz=0;
  517.        if(yy<3) mult[1]=1;
  518.        if(yy>25) mult[2]=1;
  519.        if(yy<2) mult[3]=1;
  520.        if(yy>26) mult[4]=1;
  521.        if((mult[5]==1) && ((xx<2) || (yy<2))) mult[5]=1;
  522.        if((mult[6]==1) && ((xx<2) || (yy>26))) mult[6]=1;
  523.        if((mult[5]==2) && ((xx>16) || (yy<2))) mult[5]=1;
  524.        if((mult[6]==2) && ((xx>16) || (yy>26))) mult[6]=1;
  525.          do
  526.           {
  527.            zz++;
  528.           }while(mult[zz]);
  529.          if((zz==1) && (chart2[xx][yy-2]==0))
  530.           {
  531.            score[me]++;
  532.            chart2[xx][yy-2]=me;
  533.           }
  534.          if((zz==2) && (chart2[xx][yy+2]==0))
  535.           {
  536.            score[me]++;
  537.            chart2[xx][yy+2]=me;
  538.           }
  539.          if((zz==3) && (chart2[xx][yy-1]==0))
  540.           {
  541.            score[me]++;
  542.            chart2[xx][yy-1]=me;
  543.           }
  544.          if((zz==4) && (chart2[xx][yy+1]==0))
  545.           {
  546.            score[me]++;
  547.            chart2[xx][yy+1]=me;
  548.           } 
  549.          if((zz==5) && (mult[5]==1) && (chart2[xx-1][yy-1]==0))
  550.           {
  551.            score[me]++;
  552.            chart2[xx-1][yy-1]=me;
  553.           }
  554.          if((zz==6) && (mult[6]==1) && (chart2[xx-1][yy+1]==0))
  555.           {
  556.            score[me]++;
  557.            chart2[xx-1][yy+1]=me;
  558.           }
  559.          if((zz==5) && (mult[5]==2) && (chart2[xx+1][yy-1]==0))
  560.           {
  561.            score[me]++;
  562.            chart2[xx+1][yy-1]=me;
  563.           }
  564.          if((zz==6) && (mult[6]==2) && (chart2[xx+1][yy+1]==0))
  565.           {
  566.            score[me]++;
  567.            chart2[xx+1][yy+1]=me;
  568.           } 
  569.         }                                          
  570.       }
  571.     }
  572.   }
  573.  
  574.  for(xx=1;xx<18;xx++)
  575.   {
  576.    for(yy=1;yy<28;yy++)
  577.     {
  578.      chart[xx][yy]=chart2[xx][yy];
  579.     }
  580.   }
  581. }
  582.  
  583. do_fsel()
  584. {
  585. int fs_button,
  586.     nut;
  587. long i;
  588. char filename[64];
  589. char *temp;
  590.  
  591.     fsel_input(fs_path,fs_select,&fs_button);
  592.     if (fs_button)
  593.      {
  594.       i=strlen(fs_path);
  595.       temp=fs_path+(i-1);
  596.       while((*temp != '*') && (*temp != '\\') && (temp >= fs_path))
  597.        temp--;
  598.        temp++;
  599.        *temp=0;
  600.       return(1);
  601.      }
  602.     return(0);
  603.  
  604. get_fname()
  605. {
  606.   char *temp;
  607.   int success;
  608.   long i;
  609.   
  610.      success=do_fsel();
  611.      if(success)
  612.       {
  613.        strcpy(fs_copy,fs_path);
  614.        i=strlen(fs_copy);
  615.        temp=fs_copy+(i-1);
  616.        while((*temp != '\\') && (temp >= fs_copy))
  617.        temp--;
  618.        temp++;
  619.        *temp=0;
  620.        strcat(fs_copy,fs_select);
  621.        return(1);
  622.       }
  623.  return(0);
  624. }
  625.  
  626.  
  627. load_it()
  628. {
  629.  int fd;
  630.  int x,y;
  631.  char temp;
  632.  int inone,intwo;
  633.  int fsuc;
  634.  
  635.    fsuc=get_fname();
  636.    if(!fsuc) 
  637.     {
  638.      draw_title(addr);
  639.      do_dots();
  640.      return;
  641.     }
  642.    fd=Fopen(fs_copy,2);
  643.    if (fd < 0)  /* Can't open List of files */
  644.     { 
  645.      form_alert(1,"[0][CANT OPEN SAVE FILE][uh oh]");
  646.      draw_title();
  647.      do_dots();
  648.      return;
  649.     }
  650.     Fread(fd,1L,&temp);
  651.     inone=temp;
  652.     Fread(fd,1L,&temp);
  653.     intwo=temp;
  654.     if((inone != 76) || (intwo != 82))
  655.      {
  656.       Fclose(fd);
  657.       form_alert(1,"[1][That file is not an|AMOEBA save file][oops!]");
  658.       draw_title(addr);
  659.       do_dots();
  660.       return;
  661.      }
  662.     Fread(fd,1L,&temp);
  663.     pl_num=temp;
  664.     score[2]=0;
  665.     score[3]=0;
  666.     for(x=1;x<18;x++)
  667.      {
  668.       for(y=1;y<28;y++)
  669.        {
  670.         Fread(fd,1L,&temp);
  671.         chart[x][y]=temp;
  672.         if(temp) score[temp]++;
  673.        }
  674.      }
  675.     Fclose(fd);
  676.     draw_title(addr);
  677.     do_dots();
  678.  
  679. save_it()
  680. {
  681.  int fd;
  682.  int x,y;
  683.  char temp;
  684.  int fsuc;
  685.  
  686.    fsuc=get_fname();
  687.    if(!fsuc)     
  688.     {
  689.      draw_title(addr);
  690.      do_dots();
  691.      return;
  692.     }
  693.    fd=Fcreate(fs_copy,0);
  694.    if (fd < 0)  /* Can't open List of files */
  695.     { 
  696.      form_alert(1,"[0][CANT CREATE SAVE FILE][uh oh]");
  697.      draw_title();
  698.      do_dots();
  699.      return;
  700.     }
  701.     temp=76;
  702.     Fwrite(fd,1L,&temp);
  703.     temp=82;
  704.     Fwrite(fd,1L,&temp);
  705.  
  706.     temp=pl_num;
  707.     Fwrite(fd,1L,&temp);
  708.     /* save score here */
  709.     for(x=1;x<18;x++)
  710.      {
  711.       for(y=1;y<28;y++)
  712.        {
  713.         temp=chart[x][y];
  714.         Fwrite(fd,1L,&temp);
  715.        }
  716.      }
  717.     Fclose(fd);
  718.     draw_title(addr);
  719.     do_dots();
  720. }   
  721.  
  722. do_score()
  723. {
  724.  int charw,charh,cellw,cellh;
  725.  int rvar,numb;
  726.  
  727.  rvar=score[2]/10;
  728.  redscore[0]=rvar+16;
  729.  redscore[2]=(score[2]-(rvar*10))+16;
  730.  rvar=score[3]/10;
  731.  greenscore[0]=rvar+16;
  732.  greenscore[2]=(score[3]-(rvar*10))+16;
  733.  vst_point(handle,10,&charw,&charh,&cellw,&cellh);
  734.  vswr_mode(handle,2);  
  735.  vst_effects(handle,1);
  736.  vst_color(handle,2);
  737.  v_gtext(handle,539,51,greenscore);
  738.  vst_color(handle,3);
  739.  v_gtext(handle,540,50,greenscore);
  740.  vst_color(handle,3);
  741.  v_gtext(handle,539,91,redscore);
  742.  vst_color(handle,2);
  743.  v_gtext(handle,540,90,redscore);
  744.  
  745.  vst_color(handle,0);
  746.  for(numb=1;numb<life_count;numb++)
  747.   {
  748.    v_gtext(handle,510+(numb*10),104,"-");
  749.   }
  750.  vst_color(handle,0);
  751.  v_gtext(handle,520,165-(pl_num*12),"---->");
  752. }
  753.  
  754. rnd(n) /* Random number from... */
  755.   int n; /* 1 to n*/
  756.   {
  757.         int rmnd = 0, mask = 0x000002;
  758.         --n;
  759.         do
  760.           {
  761.                 while (mask <= n) mask <<= 1;
  762.                 mask -= 1;
  763.                 rmnd = Random() & mask; /* Mask off upper bits */
  764.           } /* If still too large... */
  765.         while (rmnd > n); /* try again */
  766.         return(rmnd+1); /* Return results */
  767. }
  768.  
  769. do_win()
  770. {
  771.  if(score[3]<1)
  772.   {
  773.    form_alert(1,"[1][RED Player Wins!|Congratulations!][Amoeba]");
  774.   }
  775.  if(score[2]<1)
  776.   {
  777.    form_alert(1,"[1][GREEN Player Wins!|Congratulations!][Amoeba]");
  778.   }
  779. }
  780.  
  781. get_level()
  782. {
  783.  level=form_alert(1,"[0][Choose Level of Play][Low|Med|High]");
  784. }
  785.  
  786. do_walls()
  787. {
  788.  int loop;
  789.  
  790.  if(level==1)
  791.   {
  792.      score[2]=4;
  793.      score[3]=4;
  794.  
  795.      chart[5][13]=3;
  796.      chart[5][14]=3;
  797.      chart[6][13]=3;
  798.      chart[5][12]=3;
  799.      chart[12][13]=2;
  800.      chart[12][14]=2;
  801.      chart[12][12]=2;
  802.      chart[13][13]=2;
  803.      for(loop=5;loop<25;loop+=2)
  804.       {
  805.        chart[4][loop]=1;
  806.        chart[14][loop]=1;
  807.       }
  808.      for(loop=4;loop<15;loop++)
  809.       {
  810.        chart[loop][5]=1;
  811.        if(loop < 14) chart[loop][4]=1;
  812.        chart[loop][23]=1;
  813.        if(loop < 14) chart[loop][24]=1;
  814.       }
  815.      /* the chart is 17 by 27 */
  816.    }
  817.  if(level==2)
  818.   {
  819.      score[2]=7;
  820.      score[3]=7;
  821.  
  822.      chart[5][13]=3;
  823.      chart[5][14]=3;
  824.      chart[6][13]=3;
  825.      chart[5][12]=3;
  826.      chart[5][15]=3;
  827.      chart[5][16]=3;
  828.      chart[6][15]=3;
  829.      chart[12][13]=2;
  830.      chart[12][14]=2;
  831.      chart[12][12]=2;
  832.      chart[13][13]=2;
  833.      chart[12][15]=2;
  834.      chart[12][16]=2;
  835.      chart[13][15]=2;
  836.      for(loop=1;loop<29;loop+=2)
  837.       {
  838.        chart[4][loop]=1;
  839.        chart[14][loop]=1;
  840.       }
  841.  
  842.    }
  843.   if(level==3)
  844.    {    
  845.      score[2]=14;
  846.      score[3]=14;
  847.   
  848.      chart[1][4]=3;
  849.      chart[2][3]=3;
  850.      chart[2][4]=3;
  851.      chart[1][6]=3;
  852.      chart[2][7]=3;
  853.      chart[2][5]=3;
  854.      chart[2][6]=3;
  855.      chart[16][21]=3;
  856.      chart[16][23]=3;
  857.      chart[16][20]=3;
  858.      chart[17][21]=3;
  859.      chart[16][22]=3;
  860.      chart[17][23]=3;
  861.      chart[16][24]=3;
  862.      chart[2][21]=2;
  863.      chart[2][22]=2;
  864.      chart[2][23]=2;
  865.      chart[1][22]=2;
  866.      chart[1][24]=2;
  867.      chart[2][25]=2;
  868.      chart[2][24]=2;
  869.      chart[16][4]=2;
  870.      chart[16][5]=2;
  871.      chart[16][6]=2;
  872.      chart[16][7]=2;
  873.      chart[16][8]=2;
  874.      chart[17][5]=2;
  875.      chart[17][7]=2;
  876.     }
  877. }
  878.  
  879. main()
  880. {    
  881.  int reschk;
  882.  int count,count2;
  883.  int xx,yy;
  884.  
  885.     appl_init();
  886.     handle=graf_handle(&gl_wchar,&gl_hchar,&gl_wbox,&gl_hbox);
  887.     /* set up space to hold screen info     */
  888.     place=(long *) Malloc(32000L);
  889.     open_vwork();
  890.     reschk=chk_res();
  891.     quit=0;
  892.  
  893.     do
  894.     {
  895.      for(xx=1;xx<18;xx++)
  896.       {
  897.        for(yy=1;yy<28;yy++)
  898.         {
  899.          chart[xx][yy]=0;
  900.         }
  901.       }
  902.      life_count=2;
  903.  
  904.       if(reschk)
  905.        {
  906.         pl_num=3;
  907.         cur_turn=1;
  908.         if (!quit) morestuff(); 
  909.         if (quit) draw_title(addr);
  910.         quit=0;
  911.         get_level();
  912.         if(level==1) life_limit=3;
  913.         if(level==2) life_limit=5;
  914.         if(level==3) life_limit=7;
  915.         do_walls();
  916.         draw_title(addr);
  917.         do_dots();
  918.         get_hex();
  919.        }
  920.        if(quit==1)
  921.         {
  922.          do_win();
  923.          quit=0;
  924.         }
  925.       quit=form_alert(2,"[1][Do you really want to Quit?][Restart|Quit]");
  926.       }while(quit<2);
  927.      Mfree(place);
  928. }
  929.