00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
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;
00040
00041 grSetColor(color);
00042
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);
00088 Bub_Num = 3;
00089 drawBspline(SEG,5,73,140,81,145,89,145);
00090 if (w==1) Bd(77,142);
00091 return;
00092 }
00093
00094 void Draw_GH(char a,char b)
00095 {
00096 Bd(60,130);
00097 Bub_Num = 4;
00098 drawBspline(SEG,5,61,136,61,143,63,147,68,148);
00099 if (a==1) Bd(60,143);
00100 Bub_Num = 4;
00101 drawBspline(SEG,5,68,148,71,151,81,153,84,151);
00102 if (b==1) Bd(77,150);
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);
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);
00119 Bub_Num = 3;
00120 drawBspline(SEG,5,118,126,110,123,103,123);
00121 if (b==1) Bd(108,122);
00122 Bub_Num = 2;
00123 drawBspline(SEG,5,103,123,98,123);
00124 if (c==1) Bd(95,118);
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);
00133
00134 Bub_Num = 2;
00135 drawBspline(SEG,5,125,134,128,125);
00136 if (b==1) Bd(122,128);
00137
00138 Bub_Num = 2;
00139 drawBspline(SEG,5,128,125,123,115);
00140 if (c==1) Bd(122,118);
00141 Bub_Num = 2;
00142 drawBspline(SEG,5,123,115,110,112);
00143 if (d==1) Bd(109,112);
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);
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);
00162 Bub_Num = 3;
00163 drawBspline(SEG,5,134,115,123,113,110,112);
00164 if (c==1) Bd(109,112);
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);
00173 Bub_Num = 3;
00174 drawBspline(SEG,5,61,155,80,153,85,151);
00175 if (b==1) Bd(77,150);
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
00185 Bub_Num = 2;
00186 drawBspline(SEG,5,35,137,25,146);
00187 if (a==1) Bd(27,137);
00188 Bub_Num = 3;
00189 drawBspline(SEG,5,25,146,26,150,32,153);
00190 if (b==1) Bd(24,147);
00191 Bub_Num = 4;
00192 drawBspline(SEG,5,32,153,42,150,47,143,48,141);
00193 if (c==1) Bd(40,145);
00194 if (d==1) Bd(47,135);
00195 return;
00196 }
00197
00198 void Fly_By(void)
00199 {
00200
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);
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);
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);
00219 };
00220 if (x==2)
00221 {
00222 Bub_Num = 2;
00223 drawBspline(SEG,5,125,170,162,174);
00224 Bd(150,171);
00225 Bub_Num = 3;
00226 drawBspline(SEG,5,162,174,190,176,207,162);
00227 Bd(204,160);
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);
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);
00243 Bub_Num = 3;
00244 drawBspline(SEG,5,203,190,235,187,249,179);
00245 Bd(242,181);
00246 Bub_Num = 2;
00247 drawBspline(SEG,5,249,179,263,172);
00248 Bd(261,170);
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);
00257 Bub_Num = 4;
00258 drawBspline(SEG,5,203,190,240,193,269,192,279,191);
00259 Bd(270,186);
00260 Bub_Num = 2;
00261 drawBspline(SEG,5,279,191,303,190);
00262 Bd(300,188);
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);
00271 Bub_Num = 3;
00272 drawBspline(SEG,5,125,137,146,131,152,127);
00273 if (b==1) Bd(144,129);
00274 Bub_Num = 2;
00275 drawBspline(SEG,5,152,127,171,114);
00276 if (c==1) Bd(165,114);
00277 Bub_Num = 3;
00278 drawBspline(SEG,5,171,114,181,108,185,103);
00279 if (x==1) Bd(178,105);
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);
00283 Bub_Num = 3;
00284 drawBspline(SEG,5,234,65,240,63,251,58);
00285 if (z==1) Bd(243,60);
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);
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);
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);
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);
00310 Bub_Num = 4;
00311 drawBspline(SEG,5,306,58,302,61,285,68,272,73);
00312 if (y==1) Bd(276,68);
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);
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);
00326 Bub_Num = 3;
00327 drawBspline(SEG,5,149,104,152,104,125,110);
00328 if(z==1) Bd(130,106);
00329 Bub_Num = 2;
00330 drawBspline(SEG,5,125,110,110,112);
00331 if (w==1) Bd(109,112);
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);
00340 Bub_Num = 2;
00341 drawBspline(SEG,5,240,69,251,58);
00342 if (y==1) Bd(243,60);
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);
00352 Bub_Num = 3;
00353 drawBspline(SEG,5,306,58,293,57,288,55);
00354 if (y==1) Bd(291,54);
00355 Bub_Num = 3;
00356 drawBspline(SEG,5,288,55,280,53,278,47);
00357 if (z==1) Bd(279,51);
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);
00364 Bub_Num = 2;
00365 drawBspline(SEG,5,268,53,267,61);
00366 if (k==1) Bd(267,55);
00367 Bub_Num = 3;
00368 drawBspline(SEG,5,267,61,256,68,246,73);
00369 if (l==1) Bd(257,60);
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);
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);
00395 Bub_Num = 2;
00396 drawBspline(SEG,5,306,70,297,76);
00397 if (y==1) Bd(300,72);
00398 Bub_Num = 3;
00399 drawBspline(SEG,5,297,76,293,78,282,74);
00400 if (z==1) Bd(285,75);
00401 Bub_Num = 3;
00402 drawBspline(SEG,5,282,74,281,72,268,75);
00403 if (w==1) Bd(276,68);
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