home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Exec 1 / CD_Magazyn_EXEC_nr_1.iso / Gry / battalion.lha / Battalion / source / objects.c < prev    next >
C/C++ Source or Header  |  1999-12-23  |  59KB  |  2,162 lines

  1. /****************************************************************/
  2. /* code copyright 1995-1996 Andrew Johnson - ALL RIGHTS RESERVED*/
  3. /*                          ajohnson@eecs.uic.edu               */
  4. /*                                                              */
  5. /*                      Electronic Visualization Lab (M/C 154)  */
  6. /*                      University of Illinois at Chicago       */
  7. /*                      851 South Morgan St. Room 1120 SEO      */
  8. /*                      Chicago, IL 60607-7053                  */
  9. /*                                                              */
  10. /*                      (312) 996-3002     (312) 413-7585 FAX   */
  11. /***********************************************************************/
  12. /* objects.c v 1.3                                                     */
  13. /* routines to build the objects for battalion                         */
  14. /***********************************************************************/
  15.  
  16. #include "battalion.h"
  17.  
  18.     /*************/
  19.     /* colours   */
  20.     /*************/
  21.  
  22. extern float colorolive[4];
  23. extern float  planeGreen[4];
  24. extern float  planeGreen2[4];
  25. extern float  planeGreen3[4];
  26. extern float  colorgreen[4];
  27.  
  28. extern float  colorblack[4];
  29.  
  30. extern float  colorred[4];
  31. extern float  colorred_50[4];
  32. extern float  colorred2[4];
  33. extern float  colorred3[4];
  34.  
  35. extern float  colormaserblue[4];
  36. extern float  colormaserblue2[4];
  37.  
  38. extern float  colorwhite[4];
  39. extern float  colorwhite2[4];
  40.  
  41. extern float  colorsnow[4];
  42. extern float  colorsnow2[4];
  43.  
  44. extern float  colorgrey1[4];
  45. extern float  colorgrey1_50[4];
  46. extern float  colorgrey2[4];
  47. extern float  colorgrey3[4];
  48. extern float  colorgrey3_50[4];
  49. extern float  colorgrey4[4];
  50.  
  51. extern float  colorbrown[4];
  52. extern float  colorbeige[4];
  53.  
  54. extern float  colorblue[4];
  55. extern float  colorwater[4];
  56.  
  57. extern float  colorsnowvapour[4];
  58.  
  59. extern float  coloryellow[4];
  60. extern float  colormaseryellow[4];
  61. extern float  colororange[4];
  62.  
  63. extern float  healthGreen[4];
  64.  
  65. extern float  treeColor[4];
  66. extern float  treeColor2[4];
  67.  
  68.  
  69. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  70.  
  71. GLuint makeMonsterLookat()
  72.     {
  73.     GLuint O;
  74.     
  75.     O = glGenLists(1);
  76.     glNewList(O, GL_COMPILE);
  77.    
  78.     gluLookAt(0, PLANEY + 2.4, 0.1, 0, PLANEY, 1, 0, 1, 0);
  79.    
  80.     glEndList();
  81.     return(O);
  82.     }
  83.  
  84. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  85.  
  86. GLuint makeOverviewLookat()
  87.     {
  88.     GLuint O;
  89.     
  90.     O = glGenLists(1);
  91.     glNewList(O, GL_COMPILE);
  92.    
  93.     gluLookAt( 0,     0, 9 ,  0,     0, 0, 0,1,0);
  94.    
  95.     glEndList();
  96.     return(O);
  97.     }
  98.  
  99. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  100. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  101. /* create object for tech's shell                                */
  102. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  103.  
  104. GLuint makeshell2()
  105.     {
  106.     GLuint O;
  107.     
  108.     O = glGenLists(1);
  109.     glNewList(O, GL_COMPILE);
  110.     
  111.     makerbluecube(0, 0, 0, 0.04, 0.04, 0.04, colorred2);
  112.     
  113.     glEndList();
  114.     return(O);
  115.     }
  116.  
  117. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  118.  
  119. GLuint makeWaterShell()
  120.     {
  121.     GLuint O;
  122.     
  123.     O = glGenLists(1);
  124.     glNewList(O, GL_COMPILE);
  125.  
  126.     makerbluecube(0, 0, 0, 0.02, 0.02, 0.02, colormaserblue2);
  127.  
  128.     glEndList();
  129.     return(O);
  130.     }
  131.  
  132.  
  133. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  134.  
  135. GLuint makeHeroShell()
  136.     {
  137.     GLuint O;
  138.     
  139.     O = glGenLists(1);
  140.     glNewList(O, GL_COMPILE);
  141.  
  142.     makerbluecube(0, 0, 0, 0.03, 0.03, 0.03, colormaserblue2);
  143.  
  144.     glEndList();
  145.     return(O);
  146.     }
  147.  
  148.  
  149.  
  150.  
  151. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  152.  
  153. GLuint makeTankShadow()
  154.     {
  155.     GLuint O;
  156.     
  157.     O = glGenLists(1);
  158.     glNewList(O, GL_COMPILE);
  159.  
  160.     glColor4fv(colorblack);
  161.     
  162.     drawShadow (0, 0 ,  0.16,  0.16);
  163.  
  164.     glEndList();
  165.     return(O);
  166.     }
  167.  
  168. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  169.  
  170. GLuint makePlaneShadow()
  171.     {
  172.     GLuint O;
  173.  
  174.     float p1[3] = {0.12,  SHADOWS, 0.4};
  175.     float p2[3] = {-0.12, SHADOWS, 0.4};
  176.     float p3[3] = {0,     SHADOWS, 0.8};
  177.  
  178.     float p4[3] = {0.4,   SHADOWS, 0.1};
  179.     float p5[3] = {-0.4,  SHADOWS, 0.1};
  180.     float p6[3] = {0,     SHADOWS, 0.2};
  181.     
  182.     O = glGenLists(1);
  183.     glNewList(O, GL_COMPILE);
  184.  
  185.     glColor4fv(colorblack);
  186.     
  187.     drawShadow (0, -0.1 ,  0.12,  0.5);
  188.     drawShadow (0, 0 ,  0.4,  0.1);
  189.     drawShadow (0, -.5 ,  0.2,  0.05);
  190.  
  191.     glBegin(GL_TRIANGLES);
  192.         glVertex3fv(p1);
  193.         glVertex3fv(p2);
  194.         glVertex3fv(p3);
  195.  
  196.         glVertex3fv(p4);
  197.         glVertex3fv(p5);
  198.         glVertex3fv(p6);
  199.     glEnd();
  200.  
  201.     glEndList();
  202.     return(O);
  203.     }
  204.  
  205. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  206.  
  207. GLuint makeFighterShadow()
  208.     {
  209.     GLuint O;
  210.  
  211.     float p7[3] = {0.2,   SHADOWS, 0.13};
  212.     float p8[3] = {-0.2,  SHADOWS, 0.13};
  213.     float p9[3] = {0,     SHADOWS, 0.33};
  214.  
  215.     float p10[3] = {0,    SHADOWS, -0.33};
  216.     float p11[3] = {-0.33, SHADOWS, 0};
  217.     float p12[3] = {0.33,  SHADOWS, 0};
  218.  
  219.     float p13[3] = {0.08,  SHADOWS, 0.26};
  220.     float p14[3] = {-0.08, SHADOWS, 0.26};
  221.     float p15[3] = {0,     SHADOWS, 0.54};
  222.     
  223.     O = glGenLists(1);
  224.     glNewList(O, GL_COMPILE);
  225.  
  226.     glColor4fv(colorblack);
  227.  
  228.     drawShadow (0, -0.066 ,  0.08,  0.33);
  229.     drawShadow (0, -.33 ,  0.13,  0.033); 
  230.  
  231.     glBegin(GL_TRIANGLES);
  232.         glVertex3fv(p13);
  233.         glVertex3fv(p14);
  234.         glVertex3fv(p15);
  235.  
  236.         glVertex3fv(p7);
  237.         glVertex3fv(p8);
  238.         glVertex3fv(p9);
  239.  
  240.         glVertex3fv(p10);
  241.         glVertex3fv(p11);
  242.         glVertex3fv(p12);
  243.     glEnd();
  244.     
  245.     glEndList();
  246.     return(O);
  247.     }
  248.  
  249. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  250. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  251. /* create object for an operational plain tank                   */
  252. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  253.  
  254. GLuint makeTank()
  255.     {
  256.     GLuint O;
  257.  
  258.     /***************/
  259.     /* tank barrel */
  260.     /****************/
  261.  
  262.     float gun[8][3] = {
  263.         -0.03, 0.280, 0.23,
  264.         -0.03, 0.220, 0.24,
  265.          0.03, 0.220, 0.24, 
  266.          0.03, 0.280, 0.23,
  267.          0.03, 0.225, 0.09,
  268.          0.03, 0.165, 0.09,
  269.         -0.03, 0.165, 0.09,
  270.         -0.03, 0.225, 0.09 };
  271.  
  272.     
  273.     O = glGenLists(1);
  274.     glNewList(O, GL_COMPILE);
  275.  
  276.     makeitPyr(11, colorgrey2, -0.12, 0.075, 0.0, 0.075, 0.075, 0.18);
  277.     makeitPyr(11, colorgrey2,  0.12, 0.075, 0.0, 0.075, 0.075, 0.18);
  278.  
  279.     makercubenobtm(0.0, 0.15,  0.0,  0.15, 0.03,  0.225, colorolive);
  280.     makercubenobtm(0.0, 0.195, 0.0,  0.09, 0.045, 0.09,  colorgrey1);
  281.  
  282.     maker(gun, 0,  0,  0, 1, 1, 1, colorwhite, 1, 0.8, 0.66, 0.5);
  283.  
  284.     glEndList();
  285.     return(O);
  286.     }
  287.  
  288. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  289. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  290. /* create object for melting plain tank                          */
  291. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  292.  
  293. GLuint makeSlagTank()
  294.     {
  295.     GLuint O;
  296.  
  297.     /***************/
  298.     /* tank barrel */
  299.     /****************/
  300.  
  301.     float gun[8][3] = {
  302.         -0.03, 0.280, 0.23,
  303.         -0.03, 0.220, 0.24,
  304.          0.03, 0.220, 0.24, 
  305.          0.03, 0.280, 0.23,
  306.          0.03, 0.225, 0.09,
  307.          0.03, 0.165, 0.09,
  308.         -0.03, 0.165, 0.09,
  309.         -0.03, 0.225, 0.09 };
  310.  
  311.     
  312.     O = glGenLists(1);
  313.     glNewList(O, GL_COMPILE);
  314.     
  315.     makeitPyr(11, colorwhite, -0.12, 0.075, 0.0, 0.075, 0.075, 0.18);
  316.     makeitPyr(11, colorwhite,  0.12, 0.075, 0.0, 0.075, 0.075, 0.18);
  317.  
  318.     makercubenobtm(0.0, 0.15,  0.0,  0.15, 0.03,  0.225, colorwhite);
  319.     makercubenobtm(0.0, 0.195, 0.0,  0.09, 0.045, 0.09,  colorwhite);
  320.  
  321.     maker(gun, 0,  0,  0, 1, 1, 1, colorwhite, 1, 0.8, 0.66, 0.5);
  322.  
  323.     glEndList();
  324.     return(O);
  325.     }
  326.  
  327.  
  328. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  329.  
  330. GLuint makeLauncherTank()
  331.     {
  332.     GLuint O;
  333.     
  334.     O = glGenLists(1);
  335.     glNewList(O, GL_COMPILE);
  336.  
  337.     makeitPyr(11, colorgrey2, -0.12, 0.075, 0.0, 0.075, 0.075, 0.18);
  338.     makeitPyr(11, colorgrey2,  0.12, 0.075, 0.0, 0.075, 0.075, 0.18);
  339.  
  340.     makercubenobtm(0.0, 0.15,  0.0,  0.15, 0.03,  0.225, colorwhite);
  341.  
  342.     makercube(0.0, 0.26, 0.075,  0.12, 0.01, 0.075,  colorgrey2);
  343.  
  344.     makercubenobtm(-0.05, 0.2, 0.075,  0.01, 0.07, 0.01,  colorgrey2);
  345.     makercubenobtm(0.05, 0.2, 0.075,  0.01, 0.07, 0.01,  colorgrey2);
  346.  
  347.     makercube(0.0, 0.28, 0.075,  0.02, 0.02, 0.1,  colorgrey1);
  348.     makercube(-0.05, 0.28, 0.075,  0.02, 0.02, 0.1,  colorgrey1);
  349.     makercube(0.05, 0.28, 0.075,  0.02, 0.02, 0.1,  colorgrey1);
  350.     makercube(-0.1, 0.28, 0.075,  0.02, 0.02, 0.1,  colorgrey1);
  351.     makercube(0.1, 0.28, 0.075,  0.02, 0.02, 0.1,  colorgrey1);
  352.  
  353.     makercube(0.0, 0.28, 0.05,  0.021, 0.021, 0.02,  colorred);
  354.     makercube(-0.05, 0.28, 0.05,  0.021, 0.021, 0.02,  colorred);
  355.     makercube(0.05, 0.28, 0.05,  0.021, 0.021, 0.02,  colorred);
  356.     makercube(-0.1, 0.28, 0.05,  0.021, 0.021, 0.02,  colorred);
  357.     makercube(0.1, 0.28, 0.05,  0.021, 0.021, 0.02,  colorred);
  358.  
  359.     glEndList();
  360.     return(O);
  361.     }
  362.  
  363.  
  364. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  365.  
  366. GLuint makeSlagLauncherTank()
  367.     {
  368.     GLuint O;
  369.     
  370.     O = glGenLists(1);
  371.     glNewList(O, GL_COMPILE);
  372.     
  373.     makeitPyr(11, colorwhite, -0.12, 0.075, 0.0, 0.075, 0.075, 0.18);
  374.     makeitPyr(11, colorwhite,  0.12, 0.075, 0.0, 0.075, 0.075, 0.18);
  375.  
  376.     makercubenobtm(0.0, 0.15,  0.0,  0.15, 0.03,  0.225, colorwhite);
  377.  
  378.     makercube(0.0, 0.26, 0.075,  0.12, 0.01, 0.075,  colorgrey2);
  379.  
  380.     makercubenobtm(-0.05, 0.2, 0.075,  0.01, 0.07, 0.01,  colorwhite);
  381.     makercubenobtm(0.05, 0.2, 0.075,  0.01, 0.07, 0.01,  colorwhite);
  382.  
  383.     makercube(0.0, 0.28, 0.075,  0.02, 0.02, 0.1,  colorwhite);
  384.     makercube(-0.05, 0.28, 0.075,  0.02, 0.02, 0.1,  colorwhite);
  385.     makercube(0.05, 0.28, 0.075,  0.02, 0.02, 0.1,  colorwhite);
  386.     makercube(-0.1, 0.28, 0.075,  0.02, 0.02, 0.1,  colorwhite);
  387.     makercube(0.1, 0.28, 0.075,  0.02, 0.02, 0.1,  colorwhite);
  388.  
  389.     makercube(0.0, 0.28, 0.05,  0.021, 0.021, 0.02,  colorwhite);
  390.     makercube(-0.05, 0.28, 0.05,  0.021, 0.021, 0.02,  colorwhite);
  391.     makercube(0.05, 0.28, 0.05,  0.021, 0.021, 0.02,  colorwhite);
  392.     makercube(-0.1, 0.28, 0.05,  0.021, 0.021, 0.02,  colorwhite);
  393.     makercube(0.1, 0.28, 0.05,  0.021, 0.021, 0.02,  colorwhite);
  394.  
  395.     glEndList();
  396.     return(O);
  397.     }
  398.  
  399. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  400. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  401. /* create object for an operational maser tank                   */
  402. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  403.  
  404. GLuint makeMaserTank()
  405.     {
  406.     GLuint O;
  407.     
  408.     /**********************/
  409.     /* maser tank support */
  410.     /**********************/
  411.  
  412.     float support1[8][3] = {
  413.         -0.1,  1.8,  -1.3,
  414.         -0.1,  1.2,   0.0,
  415.          0.1,  1.2,   0.0, 
  416.          0.1,  1.8,  -1.3,
  417.          0.1,  1.8,  -1.7,
  418.          0.1,  1.2,  -0.4,
  419.         -0.1,  1.2,  -0.4,
  420.         -0.1,  1.8,  -1.7 };
  421.  
  422.     float support2[8][3] = {
  423.         -0.1,  2.5,  -0.6,
  424.         -0.1,  1.8,  -1.3,
  425.          0.1,  1.8,  -1.3, 
  426.          0.1,  2.5,  -0.6,
  427.          0.1,  2.5,  -1.0,
  428.          0.1,  1.8,  -1.7,
  429.         -0.1,  1.8,  -1.7,
  430.         -0.1,  2.5,  -1.0 };
  431.  
  432.  
  433.     O = glGenLists(1);
  434.     glNewList(O, GL_COMPILE);
  435.    
  436.     makercubenobtm(-0.8, 0.5,  0.0, 0.5, 0.5, 1.2, colorblue);
  437.     makercubenobtm( 0.8, 0.5,  0.0, 0.5, 0.5, 1.2, colorblue);
  438.  
  439.     makercubenobtm( 0.0, 1.0,  0.0, 1.1, 0.2, 1.75, colorgrey2);
  440.     makercubenobtm( 0.0, 1.0, -0.5, 0.5, 0.3, 0.5, colorwhite);
  441.     makercube(0.0, 1.5, 1.25,  1.1, 0.3, 0.5, colorgrey3);
  442.  
  443.     makercube(0.0, 1.5, 1.752, 0.6, 0.1, 0.01, colorblack);
  444.  
  445.     makercube(0.0, 2.5,  0.0,  0.4, 0.4, 0.1, colorwhite);
  446.     makercube(0.0, 2.5, -0.8,  0.2, 0.2, 0.91, colorblue);
  447.  
  448.     glColor3fv(colorgrey1);
  449.  
  450.     glBegin(GL_QUAD_STRIP);
  451.         glVertex3fv(support1[0]);glVertex3fv(support1[1]);glVertex3fv(support1[3]);glVertex3fv(support1[2]);
  452.         glVertex3fv(support1[4]);glVertex3fv(support1[5]); 
  453.         glVertex3fv(support1[7]);glVertex3fv(support1[6]);
  454.         glVertex3fv(support1[0]);glVertex3fv(support1[1]);
  455.     glEnd();
  456.  
  457.     glBegin(GL_QUAD_STRIP);
  458.         glVertex3fv(support2[0]);glVertex3fv(support2[1]);glVertex3fv(support2[3]);glVertex3fv(support2[2]);
  459.         glVertex3fv(support2[4]);glVertex3fv(support2[5]); 
  460.         glVertex3fv(support2[7]);glVertex3fv(support2[6]);
  461.         glVertex3fv(support2[0]);glVertex3fv(support2[1]);
  462.     glEnd();
  463.  
  464.     glEndList();
  465.     return(O);
  466.     }
  467.  
  468. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  469. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  470. /* create object for melting maser tank                          */
  471. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  472.  
  473. GLuint makeSlagMaserTank()
  474.     {
  475.     GLuint O;
  476.  
  477.     /**********************/
  478.     /* maser tank support */
  479.     /**********************/
  480.  
  481.     float support1[8][3] = {
  482.         -0.1,  1.8,  -1.3,
  483.         -0.1,  1.2,   0.0,
  484.          0.1,  1.2,   0.0, 
  485.          0.1,  1.8,  -1.3,
  486.          0.1,  1.8,  -1.7,
  487.          0.1,  1.2,  -0.4,
  488.         -0.1,  1.2,  -0.4,
  489.         -0.1,  1.8,  -1.7 };
  490.  
  491.     float support2[8][3] = {
  492.         -0.1,  2.5,  -0.6,
  493.         -0.1,  1.8,  -1.3,
  494.          0.1,  1.8,  -1.3, 
  495.          0.1,  2.5,  -0.6,
  496.          0.1,  2.5,  -1.0,
  497.          0.1,  1.8,  -1.7,
  498.         -0.1,  1.8,  -1.7,
  499.         -0.1,  2.5,  -1.0 };
  500.  
  501.     
  502.     O = glGenLists(1);
  503.     glNewList(O, GL_COMPILE);
  504.  
  505.     makercubenobtm( -0.8, 0.5, 0,  0.5,0.5,1.2, colorwhite);
  506.     makercubenobtm(0.8, 0.5 ,0,  0.5,0.5,1.2, colorwhite);
  507.  
  508.     makercubenobtm(  0, 1, 0,  1.1, 0.2, 1.75, colorwhite);
  509.     makercubenobtm(  0, 1, -.5,  .5, 0.3, .5, colorwhite);
  510.     makercube(0.0, 1.5, 1.25,  1.1, 0.3, 0.5, colorwhite);
  511.  
  512.     makercube(0.0, 1.5, 1.751, 0.6, 0.1, 0.01, colorwhite);
  513.  
  514.     makercube(0.0, 2.5,  0.0,  0.4, 0.4, 0.1, colorwhite);
  515.     makercube(0.0, 2.5, -0.8,  0.2, 0.2, 0.91, colorwhite);
  516.     
  517.     glColor3fv(colorwhite);
  518.  
  519.     glBegin(GL_QUAD_STRIP);
  520.         glVertex3fv(support1[0]);glVertex3fv(support1[1]);glVertex3fv(support1[3]);glVertex3fv(support1[2]);
  521.         glVertex3fv(support1[4]);glVertex3fv(support1[5]); 
  522.         glVertex3fv(support1[7]);glVertex3fv(support1[6]);
  523.         glVertex3fv(support1[0]);glVertex3fv(support1[1]);
  524.     glEnd();
  525.  
  526.     glBegin(GL_QUAD_STRIP);
  527.         glVertex3fv(support2[0]);glVertex3fv(support2[1]);glVertex3fv(support2[3]);glVertex3fv(support2[2]);
  528.         glVertex3fv(support2[4]);glVertex3fv(support2[5]); 
  529.         glVertex3fv(support2[7]);glVertex3fv(support2[6]);
  530.         glVertex3fv(support2[0]);glVertex3fv(support2[1]);
  531.     glEnd();
  532.  
  533.     glEndList();
  534.     return(O);
  535.     }
  536.  
  537. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  538. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  539. /* create object for an operational helicopter                   */
  540. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  541.  
  542. GLuint makeHelo()
  543.     {
  544.     GLuint O;
  545.     
  546.     O = glGenLists(1);
  547.     glNewList(O, GL_COMPILE);
  548.  
  549.     makercube(0.0,  0.0,     0.0,    0.1, 0.1,    0.2, colorgrey2);
  550.     makercube(0.0, -0.0375, -0.225,  0.1, 0.0625, 0.025, colorgrey2);
  551.  
  552.     makercubenobtm( -0.05, +0.0625, -0.2,  0.025, 0.025, 0.025, colorblack);
  553.     makercubenobtm(  0.05, +0.0625, -0.2,  0.025, 0.025, 0.025, colorblack);
  554.  
  555.     makercube(0.0, 0.0,   0.3, 0.0375, 0.0375, 0.1, colorgrey1);
  556.     makercubenobtmnotop( 0.0, 0.125, 0.0, 0.025,  0.05,   0.025, colorgrey1);
  557.  
  558.     /**************/
  559.     /* draw skids */
  560.     /**************/
  561.  
  562.     makercube( 0.075, -0.2, 0.0,  0.025, 0.0125, 0.175, colorwhite);
  563.     makercube(-0.075, -0.2, 0.0,  0.025, 0.0125, 0.175, colorwhite);
  564.  
  565.     makercubenobtm(  0.075, -0.15, 0.025,  0.0125, 0.05, 0.05, colorgrey1);
  566.     makercubenobtm( -0.075, -0.15, 0.025,  0.0125, 0.05, 0.05, colorgrey1);
  567.  
  568.     glEndList();
  569.     return(O);
  570.     }
  571.  
  572. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  573. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  574. /* create object for melting helicopter                          */
  575. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  576.  
  577. GLuint makeSlagHelo()
  578.     {
  579.     GLuint O;
  580.     
  581.     O = glGenLists(1);
  582.     glNewList(O, GL_COMPILE);
  583.         
  584.     makercube(0.0,  0.0,     0.0,    0.1, 0.1,    0.2, colorwhite);
  585.     makercube(0.0, -0.0375, -0.225,  0.1, 0.0625, 0.025, colorwhite);
  586.  
  587.     makercubenobtm( -0.05, +0.0625, -0.2, 0.025, 0.025, 0.025,colorwhite);
  588.     makercubenobtm(  0.05, +0.0625, -0.2, 0.025, 0.025, 0.025, colorwhite);
  589.  
  590.     makercube(0.0, 0.0,   0.3, 0.0375, 0.0375, 0.1, colorwhite);
  591.     makercubenobtmnotop( 0.0, 0.125, 0.0, 0.025,  0.05,   0.025, colorwhite);
  592.  
  593.     /**************/
  594.     /* draw skids */
  595.     /**************/
  596.  
  597.     makercube( 0.075, -0.2, 0.0,  0.025, 0.0125, 0.175, colorwhite);
  598.     makercube(-0.075, -0.2, 0.0,  0.025, 0.0125, 0.175, colorwhite);
  599.  
  600.     makercubenobtm( 0.075, -0.15, 0.025, 0.0125, 0.05, 0.05, colorwhite);
  601.     makercubenobtm(-0.075, -0.15, 0.025, 0.0125, 0.05, 0.05, colorwhite);
  602.  
  603.     glEndList();
  604.     return(O);
  605.     }
  606.  
  607. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  608. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  609. /* create object for main rotor of the helicopters               */
  610. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  611.   
  612. GLuint makeBigRotor()
  613.     {
  614.     GLuint O;
  615.     
  616.     O = glGenLists(1);
  617.     glNewList(O, GL_COMPILE);
  618.  
  619.     makercube(0.0, 0.175, 0.0, 0.025, 0.01, 0.3, colorwhite);
  620.     makercube(0.0, 0.175, 0.0, 0.3,   0.01, 0.025, colorwhite);
  621.     
  622.     glEndList();
  623.     return(O);
  624.     }
  625.  
  626.  
  627. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  628. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  629. /* create object for small rotor of the helicopters              */
  630. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  631.   
  632. GLuint makeSmallRotor()
  633.     {
  634.     GLuint O;
  635.     
  636.     O = glGenLists(1);
  637.     glNewList(O, GL_COMPILE);
  638.  
  639.     makercube(0.0, 0.0, 0.0, 0.0025, 0.15, 0.02, colorwhite);
  640.     
  641.     glEndList();
  642.     return(O);
  643.     }
  644.  
  645. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  646. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  647. /* create object for propeller for bomber                        */
  648. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  649.   
  650. GLuint makePropeller()
  651.     {
  652.     GLuint O;
  653.     
  654.     O = glGenLists(1);
  655.     glNewList(O, GL_COMPILE);
  656.  
  657.     makercube(0.0, 0.0, 0.0, 0.005, 0.05, 0.001, colorwhite);
  658.     
  659.     glEndList();
  660.     return(O);
  661.     }
  662.  
  663. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  664. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  665. /* make bomber body                                              */
  666. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  667.  
  668. GLuint makeAirplaneBody()
  669.     {
  670.     GLuint O;
  671.     
  672.     O = glGenLists(1);
  673.     glNewList(O, GL_COMPILE);
  674.  
  675.         /*************/
  676.         /* draw body */
  677.         /*************/
  678.  
  679.         makercube(0.0, 0.0, 0.0, 0.03, 0.03, 0.14, colorwhite);
  680.  
  681.         glPushMatrix();
  682.                 glTranslatef(0,  0,  -0.14);
  683.                 glRotatef(-90, 1, 0, 0);
  684.                 makeitPyr(1, colorwhite, 0.0, 0.08, 0.0, 0.03, 0.08, 0.03);
  685.         glPopMatrix();
  686.  
  687.         /*************/
  688.         /* draw tail */
  689.         /*************/
  690.  
  691.         makercube(0.0, 0.07, 0.11, 0.002, 0.04 ,0.02, colorwhite);
  692.  
  693.         makeitPyr(1, colorwhite, 0.0, 0.03, 0.09, 0.002, 0.08, 0.02);
  694.  
  695.         /**************/
  696.         /* draw wings */
  697.         /**************/
  698.  
  699.         makercube(0.0, 0.0, -0.01, 0.16, 0.004, 0.02, colorgrey3);
  700.  
  701.         glPushMatrix();
  702.                 glTranslatef(0,  0,  -0.03);
  703.                 glRotatef(-90,1, 0, 0);
  704.                 makeitPyr(1, colorgrey2, 0.0, 0.03, 0, 0.16, 0.03, 0.004);
  705.         glPopMatrix();
  706.  
  707.         makercube(0.0, 0.0, 0.11, 0.08, 0.004, 0.015, colorgrey3);
  708.  
  709.         glPushMatrix();
  710.                 glTranslatef(0,  0,  0.095);
  711.                 glRotatef(-90, 1, 0, 0);
  712.                 makeitPyr(1, colorgrey2, 0.0, 0.02, 0.0, 0.08, 0.02, 0.004);
  713.         glPopMatrix();
  714.     
  715.     makercube(-0.09, -0.004-0.01, -0.07+0.02, 0.01, 0.01, 0.02, colorgrey1);
  716.  
  717.     makercube( 0.09, -0.004-0.01, -0.07+0.02, 0.01, 0.01, 0.02, colorgrey1);
  718.  
  719.     glEndList();
  720.     return(O);
  721.     }
  722.  
  723. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  724. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  725. /* make fighter body                                              */
  726. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  727.  
  728. GLuint makeFighterBody()
  729.     {
  730.     GLuint O;
  731.     
  732.     O = glGenLists(1);
  733.     glNewList(O, GL_COMPILE);
  734.  
  735.         /*************/
  736.         /* draw body */
  737.         /*************/
  738.  
  739.         makercube(0.0, 0.0, 0.0, 0.03, 0.03, 0.14, colorwhite);
  740.  
  741.         glPushMatrix();
  742.                 glTranslatef(0,  0,  -0.14);
  743.                 glRotatef(-90, 1, 0, 0);
  744.                 makeitPyr(1, colorwhite, 0.0, 0.08, 0.0, 0.03, 0.08, 0.03);
  745.         glPopMatrix();
  746.  
  747.         /*************/
  748.         /* draw tail */
  749.         /*************/
  750.  
  751.         glPushMatrix();
  752.                 glTranslatef(-0.05, 0.05, 0.11);
  753.                 glRotatef(45, 0, 0, 1);
  754.             makercube(0.0, 0, 0, 0.002, 0.04 ,0.02, colorgrey3);
  755.         glPopMatrix();
  756.  
  757.         glPushMatrix();
  758.                 glTranslatef(0.05, 0.05, 0.11);
  759.                 glRotatef(-45, 0, 0, 1);
  760.             makercube(0.0, 0, 0, 0.002, 0.04 ,0.02, colorgrey3);
  761.         glPopMatrix();
  762.  
  763.  
  764.         /**************/
  765.         /* draw wings */
  766.         /**************/
  767.  
  768.         glPushMatrix();
  769.                 glTranslatef(0,  0,  0.03);
  770.                 glRotatef(90, 1, 0, 0);
  771.                 makeitPyr(1, colorgrey3, 0.0, 0.01, 0, 0.16, 0.085, 0.004);
  772.         glPopMatrix();
  773.  
  774.         glPushMatrix();
  775.                 glTranslatef(0,  0,  0.03);
  776.                 glRotatef(-90, 1, 0, 0);
  777.                 makeitPyr(1, colorgrey3, 0.0, 0.2, 0, 0.1, 0.04, 0.004);
  778.         glPopMatrix();
  779.  
  780.     
  781.     makercube(-0.09, -0.004-0.01, 0.02, 0.01, 0.01, 0.04, colorred);
  782.  
  783.     makercube( 0.09, -0.004-0.01, 0.02, 0.01, 0.01, 0.04, colorred);
  784.  
  785.     glEndList();
  786.     return(O);
  787.     }
  788.  
  789.  
  790. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  791. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  792. /* create object for Googelon's leg                              */
  793. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  794.  
  795. GLuint makeLeg()
  796.     {
  797.     GLuint O;
  798.     
  799.     O = glGenLists(1);
  800.     glNewList(O, GL_COMPILE);
  801.  
  802.     makercube( 0.0,   PLANEY+0.2,  0.0,   0.1,  0.2,  0.1,  colorred);
  803.     makercube( 0.0,   PLANEY+0.06, 0.17,  0.1,  0.06, 0.08, colorred);
  804.     makercube( 0.05,  PLANEY+0.05, 0.25,  0.03, 0.04, 0.05, colorwhite);
  805.     makercube(-0.05,  PLANEY+0.05, 0.25,  0.03, 0.04, 0.05, colorwhite);
  806.  
  807.     glEndList();
  808.     return(O);
  809.     }
  810.  
  811. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  812. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  813. /* create object for Googelon's head                             */
  814. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  815.  
  816. GLuint makeHead()
  817.     {
  818.     GLuint O;
  819.     
  820.     O = glGenLists(1);
  821.     glNewList(O, GL_COMPILE);
  822.     
  823.     makercube(0.0, PLANEY+1.15,  0.0,  0.22, 0.15, 0.1, colorred);
  824.     makercube(0.0, PLANEY+1.15, -0.1,  0.1,  0.1,  0.1, colorred);
  825.  
  826.     /**********/
  827.     /* pupils */
  828.     /**********/
  829.  
  830.     makercube( 0.15, PLANEY+1.21, 0.1, 0.03, 0.03, 0.06, colorblack);
  831.     makercube(-0.15, PLANEY+1.21, 0.1, 0.03, 0.03, 0.06, colorblack);
  832.  
  833.     /********/
  834.     /* eyes */
  835.     /********/
  836.  
  837.     makercube( 0.15, PLANEY+1.20, 0.1, 0.06, 0.06, 0.05, colorwhite);
  838.     makercube(-0.15, PLANEY+1.20, 0.1, 0.06, 0.06, 0.05, colorwhite);
  839.  
  840.  
  841.     glEndList();
  842.     return(O);
  843.     }
  844.  
  845.  
  846. GLuint makeSimpleHead()
  847.     {
  848.     GLuint O;
  849.     
  850.     O = glGenLists(1);
  851.     glNewList(O, GL_COMPILE);
  852.     
  853.     makercubenobtm(0.0, PLANEY+1.15,  0.0,  0.22, 0.15, 0.1, colorred);
  854.     makercubeTopBack(0.0, PLANEY+1.15, -0.1,  0.1,  0.1,  0.1, colorred);
  855.     
  856.     /********/
  857.     /* eyes */
  858.     /********/
  859.     
  860.     makercubenobtm( 0.15, PLANEY+1.20, 0.1, 0.06, 0.06, 0.05, colorwhite);
  861.     makercubenobtm(-0.15, PLANEY+1.20, 0.1, 0.06, 0.06, 0.05, colorwhite);
  862.     
  863.     /**********/
  864.     /* pupils */
  865.     /**********/
  866.     
  867.     makercubenobtm( 0.15, PLANEY+1.21, 0.1, 0.03, 0.03, 0.06, colorblack);
  868.     makercubenobtm(-0.15, PLANEY+1.21, 0.1, 0.03, 0.03, 0.06, colorblack);
  869.  
  870.     glEndList();
  871.     return(O);
  872.     }
  873.  
  874. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  875. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  876. /* create object for Googelon's tail                             */
  877. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  878.  
  879. GLuint makeTail()
  880.     {   
  881.     GLuint O;
  882.     
  883.     O = glGenLists(1);
  884.     glNewList(O, GL_COMPILE);
  885.    
  886.     makercube(0.0, PLANEY+0.23, -0.2,   0.1, 0.15, 0.2, colorred);
  887.     makercube(0.0, PLANEY+0.13, -0.35,  0.1, 0.1,  0.15, colorred);
  888.     makeitPyr(2, colorred, 0, PLANEY+0.13, -0.6,  0.1, 0.1, 0.1);
  889.  
  890.     /****************/
  891.     /* dorsal spine */
  892.     /****************/
  893.  
  894.     makercubenobtm(0.0, PLANEY+0.4, -0.20, 0.02, 0.06, 0.08, colorwhite);
  895.     makercube(     0.0, PLANEY+0.7, -0.19, 0.02, 0.06, 0.07, colorwhite);
  896.     
  897.     glEndList();
  898.     return(O);
  899.     }
  900.  
  901. GLuint makeSimpleTail()
  902.     {   
  903.     GLuint O;
  904.     
  905.     O = glGenLists(1);
  906.     glNewList(O, GL_COMPILE);
  907.  
  908.     makercubenobtm(0.0, PLANEY+0.23, -0.2,   0.1, 0.15, 0.2, colorred);
  909.  
  910.     /****************/
  911.     /* dorsal spine */
  912.     /****************/
  913.  
  914.     makercubenobtm(0.0, PLANEY+0.4, -0.20, 0.02, 0.06, 0.08, colorwhite);
  915.     makercube(     0.0, PLANEY+0.7, -0.19, 0.02, 0.06, 0.07, colorwhite);
  916.      
  917.     glEndList();
  918.     return(O);
  919.     }
  920.  
  921. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  922. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  923. /* create object for an Googelon's body                          */
  924. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  925.  
  926. GLuint makeBody()
  927.     {    
  928.     GLuint O;
  929.     
  930.     O = glGenLists(1);
  931.     glNewList(O, GL_COMPILE);
  932.     
  933.     makercube(     0.0, PLANEY+0.5, 0.0,  0.2,  0.3, 0.2,  colorred);
  934.     makercubenobtm(0.0, PLANEY+0.9, 0.0,  0.15, 0.2, 0.15, colorred);
  935.    
  936.     glEndList();
  937.     return(O);
  938.     }
  939.  
  940.  
  941. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  942. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  943. /* create object for flutter's head                              */
  944. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  945.  
  946. GLuint makeFlutterHead()
  947.     {
  948.     GLuint O;
  949.     
  950.     O = glGenLists(1);
  951.     glNewList(O, GL_COMPILE);
  952.  
  953.         makercube( 0.0,  PLANEY+1.15, 0.05, 0.1,  0.1,  0.05, colorbrown);
  954.         makercube( 0.07, PLANEY+1.23, 0.11, 0.02, 0.02, 0.02, colorblack);
  955.         makercube(-0.07, PLANEY+1.23, 0.11, 0.02, 0.02, 0.02, colorblack);
  956.         makercube( 0.07, PLANEY+1.23, 0.08, 0.04, 0.04, 0.04, colorwhite);
  957.         makercube(-0.07, PLANEY+1.23, 0.08, 0.04, 0.04, 0.04, colorwhite);
  958.  
  959.     glEndList();
  960.     return(O);
  961.     }
  962.  
  963. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  964.  
  965. GLuint makeFlutterShadow()
  966.     {
  967.     GLuint O;
  968.  
  969.     /********************/
  970.     /* flutter's shadow */
  971.     /********************/
  972.  
  973.     float flutshad1[3]  = { 0.1,  SHADOWS, -0.1};   
  974.     float flutshad2[3]  = {-0.1,  SHADOWS, -0.1};   
  975.     float flutshad3[3]  = { 0.1,  SHADOWS,  0.1};   
  976.     float flutshad4[3]  = {-0.1,  SHADOWS,  0.1};   
  977.     float flutshad5[3]  = {   0,  SHADOWS, -0.3};   
  978.     float flutshad6[3]  = {0.25,  SHADOWS,  0.5};   
  979.     float flutshad7[3]  = {0.25,  SHADOWS, -0.5};   
  980.     float flutshad8[3]  = {-0.25, SHADOWS, -0.5};   
  981.     float flutshad9[3]  = {-0.25, SHADOWS,  0.5};   
  982.     float flutshad10[3] = { 0.5,  SHADOWS,  0.0};   
  983.     float flutshad11[3] = {-0.5,  SHADOWS,  0.0};   
  984.     
  985.     O = glGenLists(1);
  986.     glNewList(O, GL_COMPILE);
  987.  
  988.     glColor4fv(colorblack);
  989.     
  990.     drawShadow (0,  0,  0.1,  0.1);
  991.  
  992.     glBegin(GL_TRIANGLES);
  993.         glVertex3fv(flutshad1);
  994.         glVertex3fv(flutshad5);
  995.         glVertex3fv(flutshad2);
  996.  
  997.         glVertex3fv(flutshad6);
  998.         glVertex3fv(flutshad10);
  999.         glVertex3fv(flutshad7);
  1000.  
  1001.         glVertex3fv(flutshad8);
  1002.         glVertex3fv(flutshad11);
  1003.         glVertex3fv(flutshad9);
  1004.     glEnd();
  1005.  
  1006.     glBegin(GL_QUADS);
  1007.         glVertex3fv(flutshad3);
  1008.         glVertex3fv(flutshad6);
  1009.         glVertex3fv(flutshad7);
  1010.         glVertex3fv(flutshad1);
  1011.  
  1012.         glVertex3fv(flutshad2);
  1013.         glVertex3fv(flutshad8);
  1014.         glVertex3fv(flutshad9);
  1015.         glVertex3fv(flutshad4);
  1016.     glEnd();
  1017.  
  1018.  
  1019.     glEndList();
  1020.     return(O);
  1021.     }
  1022.  
  1023. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1024.  
  1025. GLuint makeFlutterXMas()
  1026.     {
  1027.     float v[4];
  1028.  
  1029.     GLuint O;
  1030.     
  1031.     O = glGenLists(1);
  1032.     glNewList(O, GL_COMPILE);
  1033.  
  1034.                 glPushMatrix();
  1035.                     glTranslatef(0, PLANEY+1.25, -0.1);
  1036.                     glScalef(1.2,  0.45,  1.2);
  1037.                         glColor3fv(colorwhite);
  1038.                         v[0] = v[1] = v[2] = 0;
  1039.                         v[3] = 0.14;
  1040.                         andysphdraw(v, 4);
  1041.                 glPopMatrix();
  1042.  
  1043.                 glPushMatrix();
  1044.                     glTranslatef(-0.15,  PLANEY+1.45,  -0.25);
  1045.                     glScalef(0.15,  0.2,  0.15);
  1046.                     drawClosedCone(healthGreen, healthGreen, 1);
  1047.                 glPopMatrix();
  1048.  
  1049.                 glPushMatrix();
  1050.                     glTranslatef(-0.09,  PLANEY+1.65,  -0.06);
  1051.                     glRotatef(.1*(1100), 1, 0, 0);
  1052.                     glRotatef(.1*(450), 0, 0, 1);
  1053.                     glScalef(0.04,  0.11,  0.1);
  1054.                     drawClosedCone(healthGreen, healthGreen, 1);
  1055.                 glPopMatrix();
  1056.  
  1057.                 glColor3fv(colorwhite);
  1058.                 v[0] = -0.15;
  1059.                 v[1] = PLANEY+1.50;
  1060.                 v[2] = -0.0;
  1061.                 v[3] = 0.05;
  1062.                 andysphdraw(v, 4);                  
  1063.  
  1064.     glEndList();
  1065.     return(O);
  1066.     }
  1067.  
  1068. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1069.  
  1070. GLuint makeFlutterWing1()
  1071.     {
  1072.     GLuint O;
  1073.     
  1074.     O = glGenLists(1);
  1075.     glNewList(O, GL_COMPILE);
  1076.  
  1077.     makeitPyr(10, colorbrown, 0.25, 0, 0, 0.15, 0.03, 0.5);
  1078.     makeitPyr(7, colorbrown, 0.25, 0, 0, 0.25, 0.03, 0.5);
  1079.  
  1080.     glEndList();
  1081.     return(O);
  1082.     }
  1083.  
  1084. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1085.  
  1086. GLuint makeFlutterWing2()
  1087.     {
  1088.     GLuint O;
  1089.     
  1090.     O = glGenLists(1);
  1091.     glNewList(O, GL_COMPILE);
  1092.  
  1093.     makeitPyr(9, colorbrown, -0.25, 0, 0, 0.15, 0.03, 0.5);
  1094.     makeitPyr(8, colorbrown, -0.25, 0, 0, 0.25, 0.03, 0.5);
  1095.  
  1096.     glEndList();
  1097.     return(O);
  1098.     }
  1099.   
  1100. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1101.  
  1102. GLuint makeFlutterBody()
  1103.     {
  1104.     GLuint O;
  1105.     
  1106.     O = glGenLists(1);
  1107.     glNewList(O, GL_COMPILE);
  1108.  
  1109.             makercube(0.0, PLANEY+1.15, 0.0, 0.1, 0.08, 0.1, colorbrown);
  1110.             
  1111.             makeitPyr(2, coloryellow, 0.0, PLANEY+1.15, -0.2, 0.1, 0.1, 0.1);
  1112.  
  1113.     glEndList();
  1114.     return(O);
  1115.     }
  1116.  
  1117.  
  1118. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1119. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1120. /* create object for tech's body                                 */
  1121. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1122.  
  1123. GLuint makeTechsBody()
  1124.     {
  1125.     int sph;
  1126.     GLuint O;
  1127.     float sp[4];
  1128.     
  1129.     sph =3;
  1130.     
  1131.     O = glGenLists(1);
  1132.     glNewList(O, GL_COMPILE);
  1133.  
  1134.     glColor3fv(colorgrey1);
  1135.  
  1136.     sp[0] = sp[2] = 0;
  1137.     sp[1] = PLANEY+ 0.2;
  1138.     sp[3] = 0.15;
  1139.     andysphdraw(sp, sph);
  1140.  
  1141.     makercubenobtm(0, PLANEY+0.6, 0, 0.07, 0.5, 0.07, colorgrey1);
  1142.  
  1143.     makercube( 0, PLANEY+0.5, 0, 0.2, 0.05, 0.05, colorgrey3);
  1144.  
  1145.     makercube( 0.22,  PLANEY+0.5, 0, 0.025, 0.2, 0.15, colorblack);
  1146.     makercube( 0.2,    PLANEY+0.5, 0, 0.03, 0.25, 0.2, colorgrey2);
  1147.  
  1148.     makercube(-0.22, PLANEY+0.5, 0, 0.025, 0.2, 0.15, colorblack);
  1149.     makercube(-0.2,   PLANEY+0.5, 0, 0.03, 0.25, 0.2, colorgrey2);
  1150.  
  1151.     glEndList();
  1152.     return(O);
  1153.     }
  1154.  
  1155. GLuint makeTechsSimpleBody()
  1156.     {
  1157.     int sph;
  1158.     GLuint O;
  1159.     float sp[4];
  1160.     
  1161.     sph =3;
  1162.     
  1163.     O = glGenLists(1);
  1164.     glNewList(O, GL_COMPILE);
  1165.  
  1166.     glColor3fv(colorgrey1);
  1167.  
  1168.     sp[0] = sp[2] = 0;
  1169.     sp[1] = PLANEY+ 0.2;
  1170.     sp[3] = 0.15;
  1171.     andysphdraw(sp, sph);
  1172.  
  1173.     makercubeTopBack(0, PLANEY+0.6, 0, 0.07, 0.5, 0.07, colorgrey1);
  1174.     makercubeTopBack( 0, PLANEY+0.5, 0, 0.2, 0.05, 0.05, colorgrey3);
  1175.  
  1176.     makercubenobtm( 0.2,    PLANEY+0.5, 0, 0.03, 0.25, 0.2, colorgrey2);
  1177.     makercubenobtm(-0.2,   PLANEY+0.5, 0, 0.03, 0.25, 0.2, colorgrey2);
  1178.  
  1179.     glEndList();
  1180.     return(O);
  1181.     }
  1182.     
  1183. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1184.  
  1185. GLuint makeTechsHead()
  1186.     {
  1187.     GLuint O;
  1188.     
  1189.     O = glGenLists(1);
  1190.     glNewList(O, GL_COMPILE);
  1191.  
  1192.         makercube(0, PLANEY+1.2, 0, 0.15, 0.15, 0.1, colorgrey3);
  1193.         makercube(0, PLANEY+1.2, 0.13, 0.06, 0.06, 0.04, colorblack);
  1194.         makercube(0, PLANEY+1.2, -0.15, 0.075, 0.11, 0.1, colorgrey2);
  1195.  
  1196.     glEndList();
  1197.     return(O);
  1198.     }
  1199.  
  1200. GLuint makeTechsSimpleHead()
  1201.     {
  1202.     GLuint O;
  1203.     
  1204.     O = glGenLists(1);
  1205.     glNewList(O, GL_COMPILE);
  1206.  
  1207.         makercube(0, PLANEY+1.2, 0, 0.15, 0.15, 0.1, colorgrey3);
  1208.         makercubenobtm(0, PLANEY+1.2, 0.13, 0.06, 0.06, 0.04, colorblack);
  1209.         makercubeTopBack(0, PLANEY+1.2, -0.15, 0.075, 0.11, 0.1, colorgrey2);
  1210.  
  1211.     glEndList();
  1212.     return(O);
  1213.     }
  1214.  
  1215. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1216.  
  1217. GLuint makeTechsShadow()
  1218.     {
  1219.     GLuint O;
  1220.     GLUquadricObj *qobj;
  1221.     
  1222.     O = glGenLists(1);
  1223.     glNewList(O, GL_COMPILE);
  1224.  
  1225.     glPushMatrix();
  1226.         glColor3fv(colorblack);
  1227.         glTranslatef(0,  SHADOWS,   0);
  1228.         glRotatef(-90, 1, 0, 0);
  1229.  
  1230.         qobj = gluNewQuadric();
  1231.         gluDisk( qobj, 0.,   0.13, 32, 1);
  1232.         gluDeleteQuadric(qobj);
  1233.  
  1234.     glPopMatrix();
  1235.  
  1236.     glColor4fv(colorblack);
  1237.     
  1238.     drawShadow (0,  0,  0.2,  0.05);
  1239.  
  1240.     drawShadow (0.2,   0,  0.03,  0.2);
  1241.     drawShadow (-0.2,  0,  0.03,  0.2);
  1242.  
  1243.     glEndList();
  1244.     return(O);
  1245.     }
  1246.  
  1247.  
  1248.  
  1249. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1250. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1251. /* draw intact power line tower                                  */
  1252. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1253.  
  1254. GLuint makePowerTower()
  1255.     {
  1256.     GLuint O;
  1257.     GLfloat lineWidthNow;
  1258.     glGetFloatv(GL_LINE_WIDTH, &lineWidthNow);
  1259.     
  1260.     O = glGenLists(1);
  1261.     glNewList(O, GL_COMPILE);
  1262.  
  1263.     drawTower(0, 0);
  1264.         
  1265.     glEndList();
  1266.  
  1267.     glLineWidth(lineWidthNow);
  1268.  
  1269.     return(O);
  1270.     }
  1271.  
  1272. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1273.  
  1274. GLuint makeGenericWindows()
  1275.     {
  1276.     GLuint O;
  1277.     
  1278.     O = glGenLists(1);
  1279.     glNewList(O, GL_COMPILE);
  1280.  
  1281.     glColor3fv(colorblack);
  1282.     
  1283.     wzminus(-0.15, 0.6,  -0.303,  0.05,  0.1);
  1284.     wzminus( 0.0,  0.6,  -0.303,  0.05,  0.1);
  1285.     wzminus( 0.15, 0.6,  -0.303,  0.05,  0.1);
  1286.     wzminus(-0.15, 0.3,  -0.303,  0.05,  0.1);
  1287.     wzminus( 0.0,  0.3,  -0.303,  0.05,  0.1);
  1288.     wzminus( 0.15, 0.3,  -0.303,  0.05,  0.1);
  1289.  
  1290.     wzplus(-0.15, 0.6,  0.303,  0.05,  0.1);
  1291.     wzplus( 0.0,  0.6,  0.303,  0.05,  0.1);
  1292.     wzplus(-0.15, 0.3,  0.303,  0.05,  0.1);
  1293.     wzplus( 0.0,  0.3,  0.303,  0.05,  0.1);
  1294.  
  1295.     wxplus( 0.303,  0.6,  -0.15, 0.1, 0.05);
  1296.     wxplus( 0.303,  0.6,   0.0,  0.1, 0.05);
  1297.     wxplus( 0.303,  0.6,   0.15, 0.1, 0.05);
  1298.  
  1299.     wxminus(-0.303, 0.6,  -0.15, 0.1, 0.05);
  1300.     wxminus(-0.303, 0.6,   0.0,  0.1, 0.05);
  1301.     wxminus(-0.303, 0.6,   0.15, 0.1, 0.05);
  1302.     
  1303.     glEndList();
  1304.     return(O);
  1305.     }
  1306.  
  1307. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1308. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1309. /* draw high-rise building                                       */
  1310. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1311.  
  1312. GLuint makebuilding1(int detail)
  1313.     {
  1314.     GLuint O;
  1315.     
  1316.     O = glGenLists(1);
  1317.     glNewList(O, GL_COMPILE);
  1318.     
  1319.     makercubenobtmnotop(  0,  .7, 0,  .3, .7, .3, colorwhite);
  1320.     makercubenobtm(  0,  1.5, 0,  .3, .1, .3, colorgrey1);
  1321.  
  1322.     if (detail > 0)    
  1323.         {
  1324.         glColor3fv(colorblack);
  1325.         wzminus(-0.15, 1.2,  -0.303,  0.05,  0.1);
  1326.         wzminus( 0.0,  1.2,  -0.303,  0.05,  0.1);
  1327.         wzminus( 0.15, 1.2,  -0.303,  0.05,  0.1);
  1328.         wzminus(-0.15, 0.9,  -0.303,  0.05,  0.1);
  1329.         wzminus( 0.0,  0.9,  -0.303,  0.05,  0.1);
  1330.         wzminus( 0.15, 0.9,  -0.303,  0.05,  0.1);
  1331.         wzminus(-0.15, 0.6,  -0.303,  0.05,  0.1);
  1332.         wzminus( 0.0,  0.6,  -0.303,  0.05,  0.1);
  1333.         wzminus( 0.15, 0.6,  -0.303,  0.05,  0.1);
  1334.         wzminus(-0.15, 0.3,  -0.303,  0.05,  0.1);
  1335.         wzminus( 0.0,  0.3,  -0.303,  0.05,  0.1);
  1336.         wzminus( 0.15, 0.3,  -0.303,  0.05,  0.1);
  1337.  
  1338.         wzplus(-0.15, 1.2,  0.303,  0.05,  0.1);
  1339.         wzplus( 0.0,  1.2,  0.303,  0.05,  0.1);
  1340.         wzplus( 0.15, 1.2,  0.303,  0.05,  0.1);
  1341.         wzplus(-.15,  0.9,  0.303,  0.05,  0.1);
  1342.         wzplus( 0.0,  0.9,  0.303,  0.05,  0.1);
  1343.         wzplus( 0.15, 0.9,  0.303,  0.05,  0.1);
  1344.         wzplus(-0.15, 0.6,  0.303,  0.05,  0.1);
  1345.         wzplus( 0.0,  0.6,  0.303,  0.05,  0.1);
  1346.         wzplus( 0.15, 0.6,  0.303,  0.05,  0.1);
  1347.         wzplus(-0.15, 0.3,  0.303,  0.05,  0.1);
  1348.         wzplus( 0.0,  0.3,  0.303,  0.05,  0.1);
  1349.         wzplus( 0.15, 0.3,  0.303,  0.05,  0.1);
  1350.  
  1351.         wxplus(0.303,  0.6,  -0.15,  0.1,  0.05);
  1352.         wxplus(0.303,  0.3,  -0.15,  0.1,  0.05);
  1353.  
  1354.         wxminus(-0.303,  0.6,  -0.15, 0.1,  0.05);
  1355.         wxminus(-0.303,  0.6,   0.0,  0.1,  0.05);
  1356.         wxminus(-0.303,  0.3,  -0.15, 0.1,  0.05);
  1357.         wxminus(-0.303,  0.3,   0.0,  0.1,  0.05);
  1358.         }    
  1359.     glEndList();
  1360.     return(O);
  1361.     }
  1362.  
  1363. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1364. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1365. /* draw generic beige building                                   */
  1366. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1367.    
  1368. GLuint makebuilding2(int detail)
  1369.     {
  1370.     GLuint O;
  1371.     
  1372.     O = glGenLists(1);
  1373.     glNewList(O, GL_COMPILE);
  1374.     
  1375.     makercubenobtm(  0.0,  0.4, 0.0,  0.3, 0.4, 0.3, colorbeige);
  1376.  
  1377.     if (detail > 0)
  1378.         {
  1379.         glColor3fv(colorblack);
  1380.  
  1381.         wzminus(-0.15, 0.6, -0.303,  0.05,  0.15);
  1382.         wzminus( 0.0,  0.6, -0.303,  0.05,  0.15);
  1383.         wzminus( 0.15, 0.6, -0.303,  0.05,  0.15);
  1384.  
  1385.         wzplus(-0.15,  0.6,  0.303,  0.05,  0.15);
  1386.         wzplus( 0.0,   0.6,  0.303,  0.05,  0.15);
  1387.         wzplus( 0.15,  0.6,  0.303,  0.05,  0.15);
  1388.  
  1389.         wxplus( 0.303, 0.6,  -0.15,  0.15,  0.05);
  1390.         wxplus( 0.303, 0.6,   0.0,   0.15,  0.05);
  1391.         wxplus( 0.303, 0.6,   0.15,  0.15,  0.05);
  1392.  
  1393.         wxminus(-0.303, 0.6,  -0.15, 0.15,  0.05);
  1394.         wxminus(-0.303, 0.6,   0.0,  0.15,  0.05);
  1395.         wxminus(-0.303, 0.6,   0.15, 0.15,  0.05);
  1396.         }    
  1397.     
  1398.     glEndList();
  1399.     return(O);
  1400.     }
  1401.  
  1402. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1403. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1404. /* draw generic suburban home                                    */
  1405. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1406.  
  1407. GLuint makebuilding5(int detail)
  1408.     {
  1409.     GLuint O;
  1410.     
  1411.     O = glGenLists(1);
  1412.     glNewList(O, GL_COMPILE);
  1413.     
  1414.     makercubenobtmnotop(  0,  .2, 0,  .3, .2, .35, colorwhite);
  1415.     makeitPyr(1, colorgrey2,  0,  .5, 0,  .35, .1, .45);
  1416.     makercubenobtm(  .2,  .4, 0,  .03, .2, .05, colorwhite);
  1417.  
  1418.     if (detail > 0)
  1419.         {    
  1420.         glColor3fv(colorblack);
  1421.  
  1422.         wxminus(-0.303,  0.15, -0.15,  0.15,  0.05);
  1423.         wxplus(  0.303,  0.25,  0.15,  0.05,  0.05);
  1424.         wzminus(-0.15,   0.25, -0.352, 0.05,  0.05);
  1425.         wzminus( 0.0,    0.25, -0.352, 0.05,  0.05);
  1426.         wzplus(  0.15,   0.25,  0.352, 0.05,  0.05);
  1427.         }
  1428.     
  1429.     glEndList();
  1430.     return(O);
  1431.     }
  1432.  
  1433.  
  1434. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1435. /* draw granite monument                                         */
  1436. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1437.  
  1438. GLuint makebuilding7()
  1439.     {
  1440.     GLuint O;
  1441.     
  1442.     O = glGenLists(1);
  1443.     glNewList(O, GL_COMPILE);
  1444.     
  1445.     makeitPyr(3, colorgrey2, 0.0, 0.4, 0.0, 0.3, 0.4, 0.3);
  1446.     
  1447.     glEndList();
  1448.     return(O);
  1449.     }
  1450.  
  1451.  
  1452. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1453. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1454. /* draw water tower                                              */
  1455. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1456.  
  1457. GLuint makebuilding9(int lowDetail)
  1458.     {
  1459.     GLuint O;
  1460.     GLUquadricObj *qobj;
  1461.     
  1462.     O = glGenLists(1);
  1463.     glNewList(O, GL_COMPILE);
  1464.  
  1465.      
  1466.     glPushMatrix();
  1467.         glTranslatef(-0.3,  1,  -0.3);
  1468.         glScalef(.3,  .2,  .3);
  1469.         
  1470.         if (lowDetail)
  1471.             drawClosedCylinder(colorgrey1,  colorwhite,  1, -1);
  1472.         else
  1473.             drawClosedCylinder(colorgrey1,  colorwhite,  1, 1);
  1474.  
  1475.     glPopMatrix();
  1476.   
  1477.     glPushMatrix();
  1478.         glTranslatef(-0.1,  0.5,  -0.1);
  1479.         glScalef(0.1,  0.5,  0.1);
  1480.  
  1481.         if (lowDetail)
  1482.             drawClosedCylinder(colorgrey3,  colorwhite,  1, -1);
  1483.         else
  1484.             drawClosedCylinder(colorgrey3,  colorwhite,  1, 1);
  1485.    glPopMatrix();
  1486.   
  1487.     makercubenobtm(-0.22,  0.5, -0.22,  0.025, 0.5, 0.025, colorgrey2);
  1488.     makercubenobtm( 0.22,  0.5, -0.22,  0.025, 0.5, 0.025, colorgrey2);
  1489.     makercubenobtm(-0.22,  0.5,  0.22,  0.025, 0.5, 0.025, colorgrey2);
  1490.     makercubenobtm( 0.22,  0.5,  0.22,  0.025, 0.5, 0.025, colorgrey2);
  1491.      
  1492.     makercube(-0.2,  0.4,  0.0,  0.015, 0.015, 0.2, colorgrey3);
  1493.     makercube( 0.2,  0.4,  0.0,  0.015, 0.015, 0.2, colorgrey3);
  1494.     makercube( 0.0,  0.4,  0.2,  0.2,   0.015, 0.015, colorgrey3);
  1495.     makercube( 0.0,  0.4, -0.2,  0.2,   0.015, 0.015, colorgrey3);
  1496.    
  1497.     glPushMatrix();
  1498.         glColor3fv(colorblack);
  1499.         glRotatef(-90, 1, 0, 0);
  1500.  
  1501.         qobj = gluNewQuadric();
  1502.         gluDisk( qobj, 0.,   0.3, 32, 1);
  1503.         gluDeleteQuadric(qobj);
  1504.  
  1505.     glPopMatrix();
  1506.      
  1507.     glEndList();
  1508.     return(O);
  1509.     }
  1510.  
  1511.  
  1512. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1513. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1514. /* draw construction                                             */
  1515. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1516.  
  1517. GLuint makebuilding10()
  1518.     {
  1519.     GLuint O;
  1520.  
  1521.     /****************/
  1522.     /* construction */
  1523.     /****************/
  1524.  
  1525.     float cons1[3] = {-0.29, 0.1, -0.29};
  1526.     float cons2[3] = {-0.29, 0.8, -0.29};
  1527.     float cons3[3] = { 0.29, 0.1, -0.29};
  1528.     float cons4[3] = { 0.29, 0.8, -0.29};
  1529.     float cons5[3] = { 0.29, 0.1,  0.29};
  1530.     float cons6[3] = { 0.29, 0.8,  0.29};
  1531.     float cons7[3] = {-0.29, 0.1,  0.29};
  1532.     float cons8[3] = {-0.29, 0.8,  0.29};
  1533.  
  1534.     float cons9[3] = {-0.29, 0.45, -0.29};
  1535.     float cons10[3] ={-0.29, 0.45,  0.29};
  1536.     float cons11[3] ={ 0.29, 0.45,  0.29};
  1537.     float cons12[3] ={ 0.29, 0.45, -0.29};
  1538.  
  1539.     float cons13[3] ={ 0.0, 0.45, -0.29};
  1540.     float cons14[3] ={ 0.0, 0.45,  0.29};
  1541.     float cons15[3] ={ 0.0, 0.8,   0.29};
  1542.     float cons16[3] ={ 0.0, 0.8,  -0.29};
  1543.  
  1544.     float cons17[3] ={-0.29, 0.45, 0.0};
  1545.     float cons18[3] ={ 0.29, 0.45, 0.0};
  1546.     float cons19[3] ={ 0.29, 0.8,  0.0};
  1547.     float cons20[3] ={-0.29, 0.8,  0.0};
  1548.     
  1549.     O = glGenLists(1);
  1550.     glNewList(O, GL_COMPILE);
  1551.     
  1552.     makercubenobtm(  0,  .05, 0,  .3, .05, .3, colorwhite);
  1553.  
  1554.     glColor3fv(colorgrey1);
  1555.     glLineWidth(2.01);
  1556.     
  1557.     glBegin(GL_LINES);
  1558.         glVertex3fv(cons1);
  1559.         glVertex3fv(cons2);
  1560.  
  1561.         glVertex3fv(cons3);
  1562.         glVertex3fv(cons4);
  1563.  
  1564.         glVertex3fv(cons5);
  1565.         glVertex3fv(cons6);
  1566.  
  1567.         glVertex3fv(cons7);
  1568.         glVertex3fv(cons8);
  1569.     glEnd();
  1570.  
  1571.  
  1572.     glBegin(GL_LINE_LOOP);
  1573.         glVertex3fv(cons2);
  1574.         glVertex3fv(cons8);
  1575.         glVertex3fv(cons6);
  1576.         glVertex3fv(cons4);
  1577.     glEnd();
  1578.  
  1579.     glBegin(GL_LINE_LOOP);
  1580.         glVertex3fv(cons9);
  1581.         glVertex3fv(cons10);
  1582.         glVertex3fv(cons11);
  1583.         glVertex3fv(cons12);
  1584.     glEnd();
  1585.  
  1586.     glBegin(GL_LINE_LOOP);
  1587.         glVertex3fv(cons13);
  1588.         glVertex3fv(cons14);
  1589.         glVertex3fv(cons15);
  1590.         glVertex3fv(cons16);
  1591.     glEnd();
  1592.  
  1593.     glBegin(GL_LINE_LOOP);
  1594.         glVertex3fv(cons17);
  1595.         glVertex3fv(cons18);
  1596.         glVertex3fv(cons19);
  1597.         glVertex3fv(cons20);
  1598.     glEnd();
  1599.  
  1600.     glEndList();    
  1601.  
  1602.     return(O);
  1603.     }
  1604.  
  1605.  
  1606. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1607. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1608. /* draw factory                                                  */
  1609. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1610.    
  1611. GLuint makebuilding12(int detail)
  1612.     {
  1613.     GLuint O;
  1614.     
  1615.     O = glGenLists(1);
  1616.     glNewList(O, GL_COMPILE);
  1617.  
  1618.     makercubenobtm(  0,  .4, 0,  .3, .4, .3, colorbrown);
  1619.     makercubenobtmnotop(  0,  .5, 0.02,  .302, .1, .3, colorblack);
  1620.  
  1621.     if (detail > 0)
  1622.         {
  1623.         glColor3fv(colorblack);
  1624.  
  1625.         wxplus(0.303,  .15,  -.15,  .15,  .05);
  1626.         wxminus(-0.303,  .15,  -.15,  .15,  .05);
  1627.         }
  1628.  
  1629.     glEndList();
  1630.     return(O);
  1631.     }
  1632.  
  1633. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1634. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1635. /* draw control tower                                            */
  1636. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1637.  
  1638. GLuint makebuilding14()
  1639.     {
  1640.     GLuint O;
  1641.     
  1642.     O = glGenLists(1);
  1643.     glNewList(O, GL_COMPILE);
  1644.     makercubenobtmnotop(  0,  .55, 0,  .15, .55, .15, colorbeige);
  1645.     makercubenobtm(  0,  1.55, 0,  .3, .05, .3, colorbeige);
  1646.     
  1647.     makeitPyr(5, colorbrown,  0,  1.1, 0,  .3, .4, .3);
  1648.     glEndList();
  1649.     return(O);
  1650.     }
  1651.  
  1652.  
  1653. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1654. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1655. /* draw end of city hall                                         */
  1656. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1657.  
  1658. GLuint makebuilding19(int detail)
  1659.     {
  1660.     GLuint O;
  1661.     
  1662.     O = glGenLists(1);
  1663.     glNewList(O, GL_COMPILE);
  1664.     
  1665.     makercubenobtmnotop(  0,  .3, 0,  .3, .3, .3, colorbrown);
  1666.     makeitPyr(4, colorbeige,  0,  .7, 0,  .3, .1, .3);
  1667.  
  1668.     if (detail > 0)
  1669.         {    
  1670.         glColor3fv(colorblack);
  1671.  
  1672.         wxplus(.303,  .4,  -.15,  .08,  .05);
  1673.         wxplus(.303,  .2,  -.15,  .08,  .05);
  1674.         wxplus(.303,  .4,  +.15,  .08,  .05);
  1675.         wxplus(.303,  .2,  +.15,  .08,  .05);
  1676.  
  1677.         wxminus(-.303,  .4,  -.15,  .08,  .05);
  1678.         wxminus(-.303,  .2,  -.15,  .08,  .05);
  1679.         wxminus(-.303,  .4,  +.15,  .08,  .05);
  1680.         wxminus(-.303,  .2,  +.15,  .08,  .05);
  1681.         }
  1682.  
  1683.     glEndList();
  1684.     return(O);
  1685.     }
  1686.  
  1687.  
  1688. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1689. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1690. /* draw middle of city hall                                      */
  1691. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1692.    
  1693. GLuint makebuilding20(int detail)
  1694.     {
  1695.     GLuint O;
  1696.     
  1697.     O = glGenLists(1);
  1698.     glNewList(O, GL_COMPILE);
  1699.  
  1700.     makercubenobtmnotop(  0,  .3, 0,  .3, .3, .3, colorbrown);
  1701.     makeitPyr(4, colorbeige,  0,  .7, 0,  .3, .1, .3);
  1702.     makeitPyr(6, colorbeige,  0,  .7, 0,  .3, .1, .3);
  1703.  
  1704.     if (detail > 0)
  1705.         {    
  1706.         glColor3fv(colorblack);
  1707.  
  1708.         wxplus(.303,  .4,  -.15,  .08,  .05);
  1709.         wxplus(.303,  .2,  -.15,  .08,  .05);
  1710.         wxplus(.303,  .4,  +.15,  .08,  .05);
  1711.         wxplus(.303,  .2,  +.15,  .08,  .05);
  1712.  
  1713.         wxminus(-.303,  .4,  -.15,  .08,  .05);
  1714.         wxminus(-.303,  .2,  -.15,  .08,  .05);
  1715.         wxminus(-.303,  .4,  +.15,  .08,  .05);
  1716.         wxminus(-.303,  .2,  +.15,  .08,  .05);
  1717.         }
  1718.  
  1719.     glEndList();
  1720.     return(O);
  1721.     }
  1722.  
  1723. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1724. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1725. /* draw front of city hall                                       */
  1726. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1727.  
  1728. GLuint makebuilding21(int detail)
  1729.     {
  1730.     GLuint O;
  1731.     
  1732.     O = glGenLists(1);
  1733.     glNewList(O, GL_COMPILE);
  1734.     
  1735.     makercubenobtmnotop(  -.2,  .3, 0,  .1, .3, .3, colorbrown);
  1736.     makeitPyr(6, colorbeige,  0,  .7, 0,  .3, .1, .3);
  1737.     makercubenobtm(  0,  .05, 0,  .29, .05, .29, colorgrey1);
  1738.  
  1739.     if (detail > 0)
  1740.         {    
  1741.         glColor3fv(colorblack);
  1742.  
  1743.         wxplus(-.098,  .22,  -.10,  .12,  .05);
  1744.         wxplus(-.098,  .22,  +.10,  .12,  .05);
  1745.  
  1746.         wxminus(-.303,  .4,  -.15,  .08,  .05);
  1747.         wxminus(-.303,  .2,  -.15,  .08,  .05);
  1748.         wxminus(-.303,  .4,  +.15,  .08,  .05);
  1749.         wxminus(-.303,  .2,  +.15,  .08,  .05);
  1750.         }
  1751.  
  1752.     makercubenobtmnotop(  0.25,  .3, 0.25,  .03, .3, .03, colorwhite);
  1753.     makercubenobtmnotop(  0.25,  .3, -0.25,  .03, .3, .03, colorwhite);
  1754.  
  1755.     makercubenobtmnotop(  0.0,  .3, 0.25,  .03, .3, .03, colorwhite);
  1756.     makercubenobtmnotop(  0.0,  .3, -0.25,  .03, .3, .03, colorwhite);
  1757.  
  1758.     glEndList();
  1759.     return(O);
  1760.     }
  1761.  
  1762.  
  1763. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1764. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1765. /* draw maser emplacement                                        */
  1766. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1767.  
  1768. GLuint makebuilding31()
  1769.     {
  1770.     GLUquadricObj *qobj;
  1771.     GLuint O;
  1772.     
  1773.     O = glGenLists(1);
  1774.     glNewList(O, GL_COMPILE);
  1775.     
  1776.     makercubenobtm(  0,  .095, 0,  .36, .095, .36, colorgrey1);
  1777.  
  1778.     makercubenobtm(  .35,  .1, .35,  .03, .1, .03, colorblue);
  1779.     makercubenobtm(  -.35,  .1, .35,  .03, .1, .03, colorblue);
  1780.     makercubenobtm(  .35,  .1, -.35,  .03, .1, .03, colorblue);
  1781.     makercubenobtm(  -.35,  .1, -.35,  .03, .1, .03, colorblue);
  1782.  
  1783.     glColor3fv(colorwhite);
  1784.     
  1785.     glPushMatrix();
  1786.         glTranslatef(0,  .2,   0);
  1787.         glRotatef(-90, 1, 0, 0);
  1788.  
  1789.         qobj = gluNewQuadric();
  1790.         gluDisk( qobj, 0.,   0.3, 32, 1);
  1791.         gluDeleteQuadric(qobj);
  1792.     glPopMatrix();
  1793.  
  1794.     glEndList();
  1795.     return(O);
  1796.     }
  1797.  
  1798. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1799. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1800. /* draw helicopter pad                                           */
  1801. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1802.  
  1803. GLuint makebuilding32()
  1804.     {
  1805.     GLUquadricObj *qobj;
  1806.     GLuint O;
  1807.     
  1808.     O = glGenLists(1);
  1809.     glNewList(O, GL_COMPILE);
  1810.     
  1811.     
  1812.     makercubenobtm(  0,  .095, 0,  .36, .095, .36, colorgrey1);
  1813.  
  1814.     glColor3fv(coloryellow);
  1815.     
  1816.     glPushMatrix();
  1817.         glTranslatef(0,  .2,   0);
  1818.         glRotatef(-90, 1, 0, 0);
  1819.  
  1820.         qobj = gluNewQuadric();
  1821.         gluDisk( qobj, 0.,   0.3, 32, 1);
  1822.         gluDeleteQuadric(qobj);
  1823.     glPopMatrix();
  1824.  
  1825.     glColor3fv(colorgrey1);
  1826.     
  1827.     glPushMatrix();
  1828.         glTranslatef(0,  .21,   0);
  1829.         glRotatef(-90, 1, 0, 0);
  1830.  
  1831.         qobj = gluNewQuadric();
  1832.         gluDisk( qobj, 0.,   0.2, 32, 1);
  1833.         gluDeleteQuadric(qobj);
  1834.     glPopMatrix();
  1835.  
  1836.     glEndList();
  1837.     return(O);
  1838.     }
  1839.  
  1840.  
  1841.  
  1842. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1843. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1844. /* create object for strip mall store                            */
  1845. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1846.  
  1847. GLuint makeStrip1(int detail)
  1848.     {
  1849.     GLuint O;
  1850.     
  1851.     O = glGenLists(1);
  1852.     glNewList(O, GL_COMPILE);
  1853.  
  1854.     drawBuilding15(colorwhite,  colorred, detail);
  1855.  
  1856.     glEndList();
  1857.     return(O);
  1858.     }
  1859.  
  1860. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1861. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1862. /* create object for strip mall store                            */
  1863. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1864.  
  1865. GLuint makeStrip2(int detail)
  1866.     {
  1867.     GLuint O;
  1868.     
  1869.     O = glGenLists(1);
  1870.     glNewList(O, GL_COMPILE);
  1871.  
  1872.     drawBuilding15(colorgrey2, coloryellow, detail);
  1873.  
  1874.     glEndList();
  1875.     return(O);
  1876.     }
  1877.  
  1878. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1879. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1880. /* create object for strip mall store                            */
  1881. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1882.  
  1883. GLuint makeStrip3(int detail)
  1884.     {
  1885.     GLuint O;
  1886.     
  1887.     O = glGenLists(1);
  1888.     glNewList(O, GL_COMPILE);
  1889.  
  1890.     drawBuilding15(colorbeige, colorblue, detail);
  1891.  
  1892.     glEndList();
  1893.     return(O);
  1894.     }
  1895.  
  1896. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1897. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1898. /* make object for battalion title                               */
  1899. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1900.  
  1901. GLuint makeTitles(int detail)
  1902.     {
  1903.     GLuint O;
  1904.     
  1905.     O = glGenLists(1);
  1906.     glNewList(O, GL_COMPILE);
  1907.  
  1908.     /*****/
  1909.     /* b */
  1910.     /*****/
  1911.  
  1912.     makerlogo(-3.5,  3.5,  0,  .35, .1,  .2, detail, 0, 1);
  1913.     makerlogo(-3.75, 3.75, 0,  .1,  .25, .2, detail, 0, 1);
  1914.     makerlogo(-3.25, 3.25, 0,  .1,  .25, .2, detail, 0, 1);
  1915.     makerlogo(-3.5,  3.,   0,  .35, .1,  .2, detail, 0, 1);
  1916.  
  1917.     /*****/
  1918.     /* a */
  1919.     /*****/
  1920.  
  1921.     makerlogo(-2.5,  3.5,  0,  .35,  .1,  .2, detail, 0, 1);
  1922.     makerlogo(-2.75, 3.25, 0,  .1,   .3,  .2, detail, 0, 1);
  1923.     makerlogo(-2.25, 3.25, 0,  .1,   .3,  .2, detail, 0, 1);
  1924.     makerlogo(-2.65, 3.,   0,  .20,  .1,  .2, detail, 0, 1);
  1925.  
  1926.     /*****/
  1927.     /* t */
  1928.     /*****/
  1929.  
  1930.     makerlogo(-1.5,  3.5, 0,  .3,  .1,  .2, detail, 0, 1);
  1931.     makerlogo(-1.75, 3.5, 0,  .1,  .6,  .2, detail, 0, 1);
  1932.         
  1933.     /*****/
  1934.     /* t */
  1935.     /*****/
  1936.         
  1937.     makerlogo(-0.5,  3.5, 0,  .3,  .1,  .2, detail, 0, 1);
  1938.     makerlogo(-0.75, 3.5, 0,  .1,  .6,  .2, detail, 0, 1);
  1939.  
  1940.     /*****/
  1941.     /* a */
  1942.     /*****/
  1943.         
  1944.     makerlogo(0.5,  3.5,  0,  .35,  .1,  .2, detail, 1, 0);
  1945.     makerlogo(0.25, 3.25, 0,  .1,   .3,  .2, detail, 1, 0);
  1946.     makerlogo(0.75, 3.25, 0,  .1,   .3,  .2, detail, 1, 0);
  1947.     makerlogo(0.35, 3.,   0,  .20,  .1,  .2, detail, 1, 0);
  1948.  
  1949.     /*****/
  1950.     /* l */
  1951.     /*****/
  1952.  
  1953.     makerlogo(1.25, 3.5, 0,  .1,  .6,  .2, detail, 1, 0);
  1954.         
  1955.     /*****/
  1956.     /* i */
  1957.     /*****/
  1958.  
  1959.     makerlogo(1.75, 3.25, 0,  .1,  .35,  .2, detail, 1, 0);
  1960.         
  1961.     /*****/
  1962.     /* o */
  1963.     /*****/
  1964.  
  1965.     makerlogo(2.5,  3.5,  0,  .35,  .1,  .2, detail, 1, 0);
  1966.     makerlogo(2.25, 3.25, 0,  .1,   .3,  .2, detail, 1, 0);
  1967.     makerlogo(2.75, 3.25, 0,  .1,   .3,  .2, detail, 1, 0);
  1968.     makerlogo(2.5,  3,    0,  .35,  .1,  .2, detail, 1, 0);
  1969.         
  1970.     /*****/
  1971.     /* n */
  1972.     /*****/
  1973.  
  1974.     makerlogo(3.5,  3.5,  0,  .35,  .1,   .2, detail, 1, 0);
  1975.     makerlogo(3.25, 3.25, 0,  .1,   .35,  .2, detail, 1, 0);
  1976.     makerlogo(3.75, 3.25, 0,  .1,   .35,  .2, detail, 1, 0);
  1977.  
  1978.     glEndList();
  1979.     return(O);
  1980.     }
  1981.  
  1982.  
  1983. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  1984.  
  1985. GLuint makeBigPlane()
  1986.     {
  1987.     GLuint O;
  1988.  
  1989.     /*******************************/
  1990.     /* the battlefield in map view */
  1991.     /*******************************/
  1992.  
  1993.     float Bplane[4][3] = {
  1994.         - 200,  PLANEY,  - 200, 
  1995.         - 200,  PLANEY,  + 200, 
  1996.         + 200,  PLANEY,  + 200, 
  1997.         + 200,  PLANEY,  - 200};
  1998.  
  1999.     
  2000.     O = glGenLists(1);
  2001.     glNewList(O, GL_COMPILE);
  2002.  
  2003.     glBegin(GL_QUADS);
  2004.         glVertex3fv(Bplane[0]);
  2005.         glVertex3fv(Bplane[1]);
  2006.         glVertex3fv(Bplane[2]);
  2007.         glVertex3fv(Bplane[3]);
  2008.     glEnd();
  2009.  
  2010.     glEndList();
  2011.     return(O);
  2012.     }
  2013.  
  2014. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  2015.  
  2016. GLuint makeLowDPlane()
  2017.     {
  2018.     GLuint O;
  2019.  
  2020.     /********************/
  2021.     /* the battlefield  */
  2022.     /********************/
  2023.  
  2024.     float Gplane[4][3] = {
  2025.         - PLANESIZE,  PLANEY,  - PLANESIZE, 
  2026.         - PLANESIZE,  PLANEY,  + PLANESIZE, 
  2027.         + PLANESIZE,  PLANEY,  + PLANESIZE, 
  2028.         + PLANESIZE,  PLANEY,  - PLANESIZE};
  2029.  
  2030.     
  2031.     O = glGenLists(1);
  2032.     glNewList(O, GL_COMPILE);
  2033.  
  2034.  
  2035. /* trying to replace this with 2 triangular polygons for
  2036. mac mesa generates some very wacky results */
  2037.  
  2038.         glBegin(GL_QUADS);
  2039.             glVertex3fv(Gplane[0]);
  2040.             glVertex3fv(Gplane[1]);
  2041.             glVertex3fv(Gplane[2]);
  2042.             glVertex3fv(Gplane[3]);
  2043.         glEnd();                
  2044.  
  2045.     glEndList();
  2046.     return(O);
  2047.     }
  2048.  
  2049. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  2050.  
  2051. GLuint makeHighDPlane()
  2052.     {
  2053.     GLuint O;
  2054.     float ratio;
  2055.     register int i, j;
  2056.     float plane[4][3];
  2057.  
  2058.     O = glGenLists(1);
  2059.     glNewList(O, GL_COMPILE);
  2060.  
  2061.         ratio = PLANESIZE * 0.1;
  2062.         plane[0][1] = plane[1][1] = plane[2][1] = plane[3][1] = PLANEY;
  2063.  
  2064.         for (i=0;i<=19;i++)
  2065.             for(j=0;j<=19;j++)
  2066.                 {
  2067.                 plane[0][0] = plane[1][0] = (i*ratio) - PLANESIZE;
  2068.                 plane[2][0] = plane[3][0] = ((i+1)*ratio) - PLANESIZE;
  2069.  
  2070.                 plane[0][2] = plane[3][2] = (j*ratio) - PLANESIZE;
  2071.                 plane[1][2] = plane[2][2] = ((j+1)*ratio) - PLANESIZE;
  2072.                 
  2073.                 glBegin(GL_QUADS);
  2074.                     glVertex3fv(plane[0]);
  2075.                     glVertex3fv(plane[1]);
  2076.                     glVertex3fv(plane[2]);
  2077.                     glVertex3fv(plane[3]);
  2078.                 glEnd();
  2079.                 }
  2080.  
  2081.     glEndList();
  2082.     return(O);
  2083.     }
  2084.  
  2085. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  2086.  
  2087. GLuint makePlaneDots(int detail)
  2088.     {
  2089.     GLuint O;
  2090.     float grass1[3], grass2[3], grass3[3], grass4[3];
  2091.     register int j, i;
  2092.  
  2093.     grass1[1] = grass2[1] = grass3[1] = grass4[1] = PLANEY;
  2094.     
  2095.     O = glGenLists(1);
  2096.     glNewList(O, GL_COMPILE);
  2097.  
  2098.     if (detail == 0)
  2099.         {
  2100.         glBegin(GL_POINTS);
  2101.         for(i=-PLANESIZE+1; i<=PLANESIZE; i+=1)
  2102.             {
  2103.             grass1[0] = i;
  2104.  
  2105.             for(j=-PLANESIZE + 1; j <= PLANESIZE; j += 1)
  2106.                 {
  2107.                 grass1[2] = j;
  2108.  
  2109.                 glVertex3fv(grass1);    /* a single point */
  2110.                 }
  2111.             }
  2112.         }
  2113.     else
  2114.         {
  2115.         glBegin(GL_LINES);
  2116.         for(i=-PLANESIZE+1; i<=PLANESIZE; i+=1)
  2117.             {
  2118.             grass1[0] = grass3[0] = i - 0.015;
  2119.             grass2[0] = grass4[0] = i + 0.015;
  2120.  
  2121.             for(j=-PLANESIZE + 1; j <= PLANESIZE; j += 1)
  2122.                 {
  2123.                 grass1[2] = grass4[2] = j - 0.015;
  2124.                 grass2[2] = grass3[2] = j + 0.015;
  2125.  
  2126.                 glVertex3fv(grass1);
  2127.                 glVertex3fv(grass2);
  2128.  
  2129.                 glVertex3fv(grass3);
  2130.                 glVertex3fv(grass4);
  2131.                 }
  2132.             }
  2133.         }    
  2134.     glEnd();
  2135.  
  2136.     glEndList();
  2137.     return(O);
  2138.     }
  2139.  
  2140.  
  2141.  
  2142. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
  2143.  
  2144. GLuint makeRoundTreeShadow()
  2145.     {
  2146.     GLuint O;
  2147.     GLUquadricObj *qobj;
  2148.     
  2149.     O = glGenLists(1);
  2150.     glNewList(O, GL_COMPILE);
  2151.  
  2152.     glRotatef(-90, 1, 0, 0);
  2153.  
  2154.     qobj = gluNewQuadric();
  2155.     gluDisk( qobj, 0.,  0.3, 32, 1);
  2156.     gluDeleteQuadric(qobj);
  2157.  
  2158.     glEndList();
  2159.     return(O);
  2160.     }
  2161.  
  2162.