futbub.c

Go to the documentation of this file.
00001 /*
00002     Copyright (C) 2005 Michael K. McCarty & Fritz Bronner
00003 
00004     This program is free software; you can redistribute it and/or modify
00005     it under the terms of the GNU General Public License as published by
00006     the Free Software Foundation; either version 2 of the License, or
00007     (at your option) any later version.
00008 
00009     This program is distributed in the hope that it will be useful,
00010     but WITHOUT ANY WARRANTY; without even the implied warranty of
00011     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012     GNU General Public License for more details.
00013 
00014     You should have received a copy of the GNU General Public License
00015     along with this program; if not, write to the Free Software
00016     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00017 */
00018 /** \file futbub.c Draw future bubbles
00019  * 
00020  * The code in this file will create 
00021  * the various bubbles in the "future missions" screen.
00022  * 
00023  * It also draws the splines.
00024  */
00025 
00026 #include  "Buzz_inc.h"
00027 #include "externs.h"
00028 
00029 extern int SEG;
00030 int Bub_Num,Bub_Count;
00031 
00032 void drawBspline(int segments,char color,...)
00033 {
00034   va_list coord;
00035   int xpoint[20],ypoint[20],i=1,j,x,y,oldx,oldy,last,yx,yy,yyy=0;
00036   float u,nc1,nc2,nc3,nc4;
00037     int SamCol;
00038 
00039   yy = yx = 0; /* XXX check uninitialized */
00040 
00041   grSetColor(color);
00042   /* initialize the array  */
00043     memset(xpoint,0,sizeof(xpoint));
00044     memset(ypoint,0,sizeof(ypoint));
00045     
00046   va_start(coord,color);
00047   for (i=1; i<=Bub_Num; i++)
00048     {
00049      xpoint[i] = va_arg(coord,int);
00050      ypoint[i] = va_arg(coord,int);
00051     }
00052   va_end(coord);
00053   xpoint[0]=xpoint[1];
00054   ypoint[0]=ypoint[1];
00055   oldx=xpoint[0]; oldy=ypoint[0];
00056   for (j=i;j<=i+1;j++) {
00057     xpoint[j]=xpoint[j-1];
00058     ypoint[j]=ypoint[j-1];
00059   };
00060   last=j;
00061   for (i=1;i<=last-3;i++) {
00062     for (u=0;u<=1;u+=1.0/segments) {
00063       nc1=-(u*u*u/6)+u*u/2-u/2+1.0/6;
00064       nc2=u*u*u/2-u*u+2.0/3;
00065       nc3=(-u*u*u+u*u+u)/2+1.0/6;
00066       nc4=u*u*u/6;
00067       x=(nc1*xpoint[i-1]+nc2*xpoint[i]+nc3*xpoint[i+1]+nc4*xpoint[i+2]);
00068       y=(nc1*ypoint[i-1]+nc2*ypoint[i]+nc3*ypoint[i+1]+nc4*ypoint[i+2]);
00069       SamCol = grGetPixel(x,y);
00070       if (yyy==1) {grPutPixel(yx,yy,5);yyy=0;};
00071       if ((SamCol != 1) && (SamCol != 21))
00072     {
00073       grMoveTo(oldx,oldy);
00074       grLineTo(x,y);
00075       if (i < (last-3)) {grPutPixel(x,y,40);yx=x;yy=y;yyy=1;};
00076     }
00077 
00078       oldx=x; oldy=y;
00079     }
00080   }
00081   return;
00082 }
00083 
00084 
00085 void Draw_IJ(char w)
00086 {
00087  Bd(73,134);  // bubble 'I'
00088  Bub_Num = 3;
00089  drawBspline(SEG,5,73,140,81,145,89,145);
00090  if (w==1) Bd(77,142);  // bubble 'J'
00091  return;
00092 }
00093 
00094 void Draw_GH(char a,char b)
00095 {
00096  Bd(60,130);   // bubble 'G'
00097  Bub_Num = 4;
00098  drawBspline(SEG,5,61,136,61,143,63,147,68,148);
00099  if (a==1) Bd(60,143); // bubble 'H'
00100  Bub_Num = 4;
00101  drawBspline(SEG,5,68,148,71,151,81,153,84,151);
00102  if (b==1) Bd(77,150); // bubble 'K'
00103  return;
00104 }
00105 
00106 void Draw_IJV(char w)
00107 {
00108  Bub_Num = 3;
00109  drawBspline(SEG,5,89,145,100,143,110,143);
00110  if (w==1) Bd(102,141);  // bubble 'V'
00111  return;
00112 }
00113 
00114 void OrbIn(char a,char b,char c)
00115 {
00116  Bub_Num = 4;
00117  drawBspline(SEG,5,110,143,116,141,125,134,118,126);
00118  if (a==1) Bd(122,128); // bubble 'Z'
00119  Bub_Num = 3;
00120  drawBspline(SEG,5,118,126,110,123,103,123);
00121  if (b==1) Bd(108,122); // bubble 'Y'
00122  Bub_Num = 2;
00123  drawBspline(SEG,5,103,123,98,123);
00124  if (c==1) Bd(95,118); // bubble 'W'
00125  return;
00126 }
00127 
00128 void OrbMid(char a,char b,char c,char d)
00129 {
00130  Bub_Num = 3;
00131  drawBspline(SEG,5,110,143,116,141,125,134);
00132  if (a==1) Bd(116,137);  // bubble 'a'
00133 // grPutPixel(113,141,5);
00134  Bub_Num = 2;
00135  drawBspline(SEG,5,125,134,128,125);
00136  if (b==1) Bd(122,128); // bubble 'Z'
00137 // grPutPixel(122,134,5);
00138  Bub_Num = 2;
00139  drawBspline(SEG,5,128,125,123,115);
00140  if (c==1) Bd(122,118);   // bubble 'd'
00141  Bub_Num = 2;
00142  drawBspline(SEG,5,123,115,110,112);
00143  if (d==1) Bd(109,112); // bubble 'X'
00144  return;
00145 }
00146 
00147 void Q_Patch(void)
00148 {
00149  Bub_Num = 2;
00150  drawBspline(SEG,5,85,151,107,144);
00151  return;
00152 }
00153 
00154 void OrbOut(char a,char b,char c)
00155 {
00156  Bub_Num = 3;
00157  drawBspline(SEG,5,110,143,120,140,125,137);
00158  if (a==1) Bd(116,137); // bubble 'a'
00159  Bub_Num = 5;
00160  drawBspline(SEG,5,125,137,132,134,141,125,141,117,134,115);
00161  if (b==1) Bd(139,115); // bubble 'e'
00162  Bub_Num = 3;
00163  drawBspline(SEG,5,134,115,123,113,110,112);
00164  if (c==1) Bd(109,112); // bubble 'X'
00165  return;
00166 }
00167 
00168 void LefEarth(char a,char b)
00169 {
00170  Bub_Num = 5;
00171  drawBspline(SEG,5,35,137,20,149,36,157,54,157,61,155);
00172  if (a==1) Bd(51,152); // bubble 'E'
00173  Bub_Num = 3;
00174  drawBspline(SEG,5,61,155,80,153,85,151);
00175  if (b==1) Bd(77,150); // bubble 'K'
00176  Bub_Num = 2;
00177  drawBspline(SEG,5,85,151,107,144);
00178  return;
00179 }
00180 
00181 
00182 void LefOrb(char a,char b,char c,char d)
00183 {
00184  /* bubbles A_B_C_D */
00185  Bub_Num = 2;
00186  drawBspline(SEG,5,35,137,25,146);
00187  if (a==1) Bd(27,137);  // bubble 'b'
00188  Bub_Num = 3;
00189  drawBspline(SEG,5,25,146,26,150,32,153);
00190  if (b==1) Bd(24,147);  // bubble 'a'
00191  Bub_Num = 4;
00192  drawBspline(SEG,5,32,153,42,150,47,143,48,141);
00193  if (c==1) Bd(40,145);  // bubble 'c'
00194  if (d==1) Bd(47,135); // bubble 'd'
00195  return;
00196 }
00197 
00198 void Fly_By(void)
00199 {
00200  /* bubbles I_J_F */
00201  Bub_Num = 8;
00202  drawBspline(SEG,5,89,145,97,147,108,145,122,139,130,130,130,120,121,116,107,115);
00203  Bub_Num = 6;
00204  drawBspline(SEG,5,36,137,20,149,36,157,41,159,46,162,69,164);
00205  Bd(59,160); // bubble 'F'
00206  return;
00207 }
00208 
00209 void VenMarMerc(char x)
00210 {
00211   Bub_Num = 3;
00212   drawBspline(SEG,5,69,164,88,169,125,170);
00213   Bd(115,166); // bubble 'L'
00214   if (x==1)
00215     {
00216      Bub_Num = 4;
00217      drawBspline(SEG,5,125,170,146,174,172,174,195,163);
00218      Bd(189,159); // bubble 'N'
00219     };
00220   if (x==2)
00221     {
00222      Bub_Num = 2;
00223      drawBspline(SEG,5,125,170,162,174);
00224      Bd(150,171); // new bubble
00225      Bub_Num = 3;
00226      drawBspline(SEG,5,162,174,190,176,207,162);
00227      Bd(204,160); // bubble 'O'
00228     };
00229   if (x==3)
00230     {
00231      Bub_Num = 4;
00232      drawBspline(SEG,5,125,170,138,171,153,170,166,165);
00233      Bd(160,161); // bubble 'M'
00234     };
00235    return;
00236 }
00237 
00238 void Draw_PQR(void)
00239 {
00240  Bub_Num = 5;
00241  drawBspline(SEG,5,65,164,91,168,162,186,198,190,203,190);
00242  Bd(194,185); // bubble 'P'
00243  Bub_Num = 3;
00244  drawBspline(SEG,5,203,190,235,187,249,179);
00245  Bd(242,181); // bubble 'Q'
00246  Bub_Num = 2;
00247  drawBspline(SEG,5,249,179,263,172);
00248  Bd(261,170); // bubble 'R'
00249  return;
00250 }
00251 
00252 void Draw_PST(void)
00253 {
00254  Bub_Num = 5;
00255  drawBspline(SEG,5,65,164,91,168,162,186,198,190,203,190);
00256  Bd(194,185); // bubble 'P'
00257  Bub_Num = 4;
00258  drawBspline(SEG,5,203,190,240,193,269,192,279,191);
00259  Bd(270,186); // bubble 'S'
00260  Bub_Num = 2;
00261  drawBspline(SEG,5,279,191,303,190);
00262  Bd(300,188); // bubble 'T'
00263  return;
00264 }
00265 
00266 void Draw_LowS(char a,char b,char c,char x,char y,char z)
00267 {
00268  Bub_Num = 2;
00269  drawBspline(SEG,5,110,143,125,137);
00270  if (a==1) Bd(116,137); // bubble 'a'
00271  Bub_Num =  3;
00272  drawBspline(SEG,5,125,137,146,131,152,127);
00273  if (b==1) Bd(144,129); // bubble 'c'
00274  Bub_Num = 2;
00275  drawBspline(SEG,5,152,127,171,114);
00276  if (c==1) Bd(165,114); // bubble 'g'
00277  Bub_Num = 3;
00278  drawBspline(SEG,5,171,114,181,108,185,103);
00279  if (x==1) Bd(178,105); // bubble 'h'
00280  Bub_Num = 6;
00281  drawBspline(SEG,5,185,103,194,95,208,82,219,74,226,68,234,65);
00282  if (y==1) Bd(224,65);  // bubbles 'l'
00283  Bub_Num = 3;
00284  drawBspline(SEG,5,234,65,240,63,251,58);
00285  if (z==1) Bd(243,60); // bubble 'm'
00286  return;
00287 }
00288 
00289 void Draw_HighS(char x,char y,char z)
00290 {
00291  Bub_Num = 4;
00292  drawBspline(SEG,5,84,151,102,153,134,147,140,143);
00293  if (x==1) Bd(131,144); // bubble 'b'
00294  Bub_Num = 4;
00295  drawBspline(SEG,5,140,143,184,126,200,106,207,93);
00296  Bub_Num = 3;
00297  drawBspline(SEG,5,207,93,215,81,219,76);
00298  if (y==1) Bd(216,78);   // bubble 'j'
00299  Bub_Num = 5;
00300  drawBspline(SEG,5,219,76,226,68,234,65,240,63,251,58);
00301  if (z==1) Bd(243,60); // bubble 'm'
00302  return;
00303 }
00304 
00305 void RghtMoon(char x,char y)
00306 {
00307  Bub_Num = 5;
00308  drawBspline(SEG,5,291,44,300,43,307,46,311,52,306,58);
00309  if (x==1) Bd(306,50); // bubble 'y'
00310  Bub_Num = 4;
00311  drawBspline(SEG,5,306,58,302,61,285,68,272,73);
00312  if (y==1) Bd(276,68); // bubble 's'
00313  Bub_Num = 2;
00314  drawBspline(SEG,5,272,73,268,75);
00315  return;
00316 }
00317 
00318 void DrawLunPas(char x,char y,char z,char w)
00319 {
00320  Bub_Num = 2;
00321  drawBspline(SEG,5,268,75,253,80);
00322  if (x==1) Bd(256,79); // bubble 'o'
00323  Bub_Num = 5;
00324  drawBspline(SEG,5,253,80,227,91,194,96,176,100,149,104);
00325  if (y==1) Bd(155,100); // bubble 'i'
00326  Bub_Num = 3;
00327  drawBspline(SEG,5,149,104,152,104,125,110);
00328  if(z==1) Bd(130,106);  // bubble 'f'
00329  Bub_Num = 2;
00330  drawBspline(SEG,5,125,110,110,112);
00331  if (w==1) Bd(109,112); // bubble 'X'
00332  return;
00333 }
00334 
00335 void DrawLefMoon(char x,char y)
00336 {
00337  Bub_Num = 4;
00338  drawBspline(SEG,5,268,75,254,79,238,78,240,69);
00339  if (x==1) Bd(235,72); // bubble 'k'
00340  Bub_Num = 2;
00341  drawBspline(SEG,5,240,69,251,58);
00342  if (y==1) Bd(243,60);  // bubble 'm'
00343  return;
00344 }
00345 
00346 
00347 void DrawMoon(char x,char y,char z,char w,char j,char k,char l)
00348 {
00349  Bub_Num = 5;
00350  drawBspline(SEG,5,291,44,300,43,307,46,311,52,306,58);
00351  if (x==1) Bd(306,50);     // 'y'
00352  Bub_Num = 3;
00353  drawBspline(SEG,5,306,58,293,57,288,55);
00354  if (y==1) Bd(291,54);    // 'w'
00355  Bub_Num = 3;
00356  drawBspline(SEG,5,288,55,280,53,278,47);
00357  if (z==1) Bd(279,51);   // 'x '
00358  Bub_Num = 4;
00359  drawBspline(SEG,5,278,47,282,54,276,43,274,44);
00360  if (w==1) Bd(280,42);  // '? '
00361  Bub_Num = 3;
00362  drawBspline(SEG,5,274,44,268,49,268,53);
00363  if (j==1) Bd(268,46);   // 'q'
00364  Bub_Num = 2;
00365  drawBspline(SEG,5,268,53,267,61);
00366  if (k==1) Bd(267,55);  // 'r'
00367  Bub_Num = 3;
00368  drawBspline(SEG,5,267,61,256,68,246,73);
00369  if (l==1) Bd(257,60);  // 'p'
00370  Bub_Num = 3;
00371  drawBspline(SEG,5,246,73,240,69,251,58);
00372  return;
00373 }
00374 
00375 
00376 
00377 
00378 void DrawZ(void)
00379 {
00380  Bub_Num = 4;
00381  drawBspline(SEG,5,307,46,301,40,294,38,301,40);
00382  Bd(290,37); // little bubble 'z'
00383  Bub_Num = 7;
00384  drawBspline(SEG,5,301,40,307,46,308,55,302,61,282,71,272,73,268,75);
00385  return;
00386 }
00387 
00388 void DrawSTUV(char x,char y,char z,char w)
00389 {
00390  Bub_Num = 4;
00391  drawBspline(SEG,5,291,44,300,43,307,46,311,52);
00392  Bub_Num = 4;
00393  drawBspline(SEG,5,311,52,313,58,312,63,306,70);
00394  if (x==1) Bd(303,64); // bubble 'v'
00395  Bub_Num = 2;
00396  drawBspline(SEG,5,306,70,297,76);
00397  if (y==1) Bd(300,72); // bubble 'u'
00398  Bub_Num = 3;
00399  drawBspline(SEG,5,297,76,293,78,282,74);
00400  if (z==1) Bd(285,75); // bubble 't'
00401  Bub_Num = 3;
00402  drawBspline(SEG,5,282,74,281,72,268,75);
00403  if (w==1) Bd(276,68);  // bubble 's'
00404  return;
00405 }
00406 
00407 void LefGap(char x)
00408 {
00409  Bub_Num = 5;
00410  drawBspline(SEG,5,291,44,306,44,312,47,313,56,310,66);
00411  if (x==1) Bd(303,64);
00412  return;
00413 }
00414 
00415 void S_Patch(char x)
00416 {
00417  Bub_Num = 7;
00418  drawBspline(SEG,5,291,44,306,44,312,47,313,52,301,55,293,59,280,54);
00419  if (x==1) {   Bd(306,50); Bd(291,54); Bd(279,51);  };
00420  return;
00421 }
00422 
00423 

Generated on Fri Sep 28 00:35:45 2007 for raceintospace by  doxygen 1.5.3