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
00027
00028 #include "Buzz_inc.h"
00029 #include "externs.h"
00030
00031 extern GXHEADER but;
00032 extern char Option, MAIL;
00033
00034 void
00035 DrawHardef(char plr)
00036 {
00037 int i;
00038
00039 FadeOut(2, pal, 10, 0, 0);
00040
00041 Load_CIA_BUT();
00042 gxClearDisplay(0, 0);
00043 Load_RD_BUT(plr);
00044
00045 ShBox(0, 0, 319, 199);
00046 IOBox(242, 3, 315, 19);
00047 InBox(3, 22, 316, 167);
00048 InBox(3, 3, 30, 19);
00049
00050 ShBox(0, 160, 319, 199);
00051 IOBox(5, 162, 77, 197);
00052 IOBox(81, 162, 158, 197);
00053 IOBox(162, 162, 239, 197);
00054 IOBox(243, 162, 315, 197);
00055 GradRect(4, 23, 315, 159, 0);
00056 for (i = 4; i < 316; i += 2)
00057 {
00058 grPutPixel(i, 57, 11);
00059 grPutPixel(i, 91, 11);
00060 grPutPixel(i, 125, 11);
00061 }
00062 grSetColor(9);
00063 DispNum(5, 55, 15);
00064 DispNum(5, 89, 10);
00065 DispNum(5, 123, 5);
00066 gxVirtualDisplay(&but, 0, 0, 8, 165, 74, 194, 0);
00067 gxVirtualDisplay(&but, 68, 0, 84, 165, 155, 194, 0);
00068 gxVirtualDisplay(&but, 141, 0, 165, 165, 236, 194, 0);
00069 gxVirtualDisplay(&but, 214, 0, 246, 165, 312, 194, 0);
00070 grSetColor(1);
00071 DispBig(40, 5, "EFFICIENCY", 1, -1);
00072 FlagSm(plr, 4, 4);
00073 grSetColor(1);
00074 PrintAt(258, 13, "CONTINUE");
00075 RectFill(149, 2, 157, 10, 9);
00076 RectFill(149, 2, 156, 9, 8);
00077 grSetColor(9);
00078 PrintAt(163, 8, "ATTEMPTS");
00079 RectFill(149, 12, 157, 20, 6);
00080 RectFill(149, 12, 156, 19, 5);
00081 grSetColor(6);
00082 PrintAt(163, 18, "SUCCESS");
00083 FadeIn(2, pal, 10, 0, 0);
00084
00085 return;
00086 }
00087
00088 void
00089 ShowHard(char plr)
00090 {
00091 int i, place = -1;
00092 char Cnt = 0;
00093
00094 DrawHardef(plr);
00095 strcpy(IDT, "i034");
00096 strcpy(IKEY, "k034");
00097 WaitForMouseUp();
00098 while (1)
00099 {
00100 key = 0;
00101 GetMouse();
00102 if (mousebuttons > 0 || key > 0)
00103 {
00104 if (((x >= 7 && y >= 164 && x <= 75 && y <= 195
00105 && mousebuttons > 0) || key == 'U') && place != 0)
00106 {
00107 InBox(7, 164, 75, 195);
00108 WaitForMouseUp();
00109 OutBox(7, 164, 75, 195);
00110 ReButs(place, 0);
00111 place = 0;
00112 if (Cnt == 0)
00113 HInfo(plr, place, 0);
00114 else
00115 PInfo(plr, place);
00116
00117 }
00118 else if ((x >= 3 && y >= 3 && x <= 30 && y <= 19
00119 && mousebuttons > 0) || key == 'T')
00120 {
00121
00122 FadeOut(2, pal, 10, 0, 0);
00123 RectFill(33, 1, 239, 21, 3);
00124 RectFill(4, 23, 315, 159, 0);
00125 GradRect(4, 23, 315, 159, 0);
00126 for (i = 4; i < 316; i += 2)
00127 {
00128 grPutPixel(i, 57, 11);
00129 grPutPixel(i, 91, 11);
00130 grPutPixel(i, 125, 11);
00131 }
00132 if (Cnt == 0)
00133 {
00134 grSetColor(1);
00135 DispBig(40, 5, "PRESTIGE POINTS", 1, -1);
00136 Cnt = 1;
00137 PInfo(plr, place);
00138 }
00139 else
00140 {
00141 grSetColor(1);
00142 DispBig(40, 5, "EFFICIENCY", 1, -1);
00143 RectFill(149, 2, 157, 10, 9);
00144 RectFill(149, 2, 156, 9, 8);
00145 grSetColor(9);
00146 PrintAt(163, 8, "ATTEMPTS:");
00147 RectFill(149, 12, 157, 20, 6);
00148 RectFill(149, 12, 156, 19, 5);
00149 grSetColor(6);
00150 PrintAt(163, 18, "SUCCESS");
00151 Cnt = 0;
00152 HInfo(plr, place, 0);
00153 }
00154 FadeIn(2, pal, 10, 0, 0);
00155
00156 }
00157 else if (((x >= 83 && y >= 164 && x <= 156 && y <= 195
00158 && mousebuttons > 0) || key == 'R') && place != 1)
00159 {
00160 InBox(83, 164, 156, 195);
00161 WaitForMouseUp();
00162 OutBox(83, 164, 156, 195);
00163 ReButs(place, 1);
00164 place = 1;
00165 if (Cnt == 0)
00166 HInfo(plr, place, 0);
00167 else
00168 PInfo(plr, place);
00169
00170 }
00171 else if (((x >= 164 && y >= 164 && x <= 237 && y <= 195
00172 && mousebuttons > 0) || key == 'C') && place != 2)
00173 {
00174 InBox(164, 164, 237, 195);
00175 WaitForMouseUp();
00176 OutBox(164, 164, 237, 195);
00177
00178 ReButs(place, 2);
00179 place = 2;
00180 if (Cnt == 0)
00181 HInfo(plr, place, 0);
00182 else
00183 PInfo(plr, place);
00184 }
00185 else if (((x >= 245 && y >= 164 && x <= 313 && y <= 195
00186 && mousebuttons > 0) || key == 'M') && place != 3)
00187 {
00188 InBox(245, 164, 313, 195);
00189 WaitForMouseUp();
00190 OutBox(245, 164, 313, 195);
00191 ReButs(place, 3);
00192 place = 3;
00193 if (Cnt == 0)
00194 HInfo(plr, place, 0);
00195 else
00196 PInfo(plr, place);
00197
00198 }
00199 else if ((x >= 244 && y >= 5 && x <= 314 && y <= 17)
00200 || key == K_ENTER)
00201 {
00202 InBox(244, 5, 314, 17);
00203 WaitForMouseUp();
00204 OutBox(244, 5, 314, 17);
00205 Del_RD_BUT();
00206 return;
00207 };
00208 }
00209 };
00210 }
00211
00212 void
00213 HDispIt(int x1, int y1, int x2, int y2, int s, int t)
00214 {
00215 GXHEADER local, local2;
00216 int i, w, h;
00217 unsigned char *src, *dest;
00218
00219 w = x2 - x1 + 1;
00220 h = y2 - y1 + 1;
00221 GV(&local, w, h);
00222 GV(&local2, w, h);
00223 gxClearVirtual(&local, 0);
00224 gxClearVirtual(&local2, 0);
00225 gxGetImage(&local2, s, t, s + w - 1, t + h - 1, 0);
00226 gxVirtualVirtual(&vhptr, x1, y1, x2, y2, &local, 0, 0, gxSET);
00227 src = local.vptr;
00228 dest = local2.vptr;
00229 for (i = 0; i < w * h; i++)
00230 {
00231 if (*src != 0x00)
00232 *dest = *src;
00233 dest++;
00234 src++;
00235 }
00236
00237 gxPutImage(&local2, gxSET, s, t, 0);
00238
00239 DV(&local);
00240 DV(&local2);
00241 return;
00242 }
00243
00244 void
00245 PInfo(char plr, char loc)
00246 {
00247 char j, Pt[4][7], stge;
00248 int i, tot, sfu;
00249 float ScaleAmt = 0.0;
00250
00251 GradRect(4, 23, 315, 159, 0);
00252 for (i = 4; i < 316; i += 2)
00253 {
00254 grPutPixel(i, 57, 11);
00255 grPutPixel(i, 91, 11);
00256 grPutPixel(i, 125, 11);
00257 }
00258 for (i = 0; i < 4; i++)
00259 for (j = 0; j < 7; j++)
00260 Pt[i][j] = 0;
00261 for (i = 0; i < Data->P[plr].PastMis; i++)
00262 {
00263 if (Data->P[plr].History[i].Prestige > 0)
00264 {
00265 stge = 0;
00266 stge = Data->P[plr].History[i].Prestige;
00267 j = 0;
00268 if (Data->P[plr].History[i].Hard[j][0] > -1)
00269 Pt[2][Data->P[plr].History[i].Hard[j][0]] += stge;
00270 if (Data->P[plr].History[i].Hard[j][1] > -1)
00271 Pt[3][Data->P[plr].History[i].Hard[j][1]] += stge;
00272 if (Data->P[plr].History[i].Hard[j][2] > -1)
00273 Pt[2][Data->P[plr].History[i].Hard[j][2]] += stge;
00274 if (Data->P[plr].History[i].Hard[j][3] > -1)
00275 {
00276 if (Data->P[plr].History[i].Hard[j][3] < 4)
00277 Pt[0][Data->P[plr].History[i].Hard[j][3]] += stge;
00278 else
00279 Pt[3][4] += stge;
00280 }
00281 if (Data->P[plr].History[i].Hard[j][4] > 0)
00282 {
00283 if (Data->P[plr].History[i].Hard[j][4] < 5)
00284 Pt[1][Data->P[plr].History[i].Hard[j][4] - 1] += stge;
00285 else
00286 {
00287 Pt[1][Data->P[plr].History[i].Hard[j][4] - 5] += stge;
00288 Pt[1][4] += stge;
00289 }
00290 }
00291 }
00292 };
00293
00294
00295 Pt[3][3] += Data->Prestige[26].Points[plr];
00296
00297
00298 for (i = 0; i < 4; i++)
00299 for (j = 0; j < 7; j++)
00300 Pt[i][j] = maxx(Pt[i][j], 0);
00301 tot = 0;
00302
00303 switch (loc)
00304 {
00305 case 0:
00306 if (Pt[2][5] >= Pt[2][6])
00307 tot = Pt[2][5];
00308 else
00309 tot = Pt[2][6];
00310 for (i = 0; i < 3; i++)
00311 if (tot <= Pt[0][i])
00312 tot = Pt[0][i];
00313 break;
00314 case 1:
00315 for (i = 0; i < 4; i++)
00316 if (tot <= Pt[1][i])
00317 tot = Pt[1][i];
00318 break;
00319 case 2:
00320 for (i = 0; i < 5; i++)
00321 if (tot <= Pt[2][i])
00322 tot = Pt[2][i];
00323 break;
00324 case 3:
00325 if (Pt[3][3] >= Pt[3][4])
00326 tot = Pt[3][3];
00327 else
00328 tot = Pt[3][4];
00329 if (tot <= Pt[1][4])
00330 tot = Pt[1][4];
00331 if (tot <= Pt[3][0])
00332 tot = Pt[3][0];
00333 if (tot <= Pt[3][1])
00334 tot = Pt[3][1];
00335 if (tot <= Pt[3][2] && plr == 1)
00336 tot = Pt[3][2];
00337 break;
00338 default:
00339 break;
00340 }
00341 if (tot < 20)
00342 ScaleAmt = 5.0;
00343 else if (tot < 40)
00344 ScaleAmt = 10.0;
00345 else if (tot < 60)
00346 ScaleAmt = 15.0;
00347 else if (tot < 80)
00348 ScaleAmt = 20.0;
00349 else if (tot < 100)
00350 ScaleAmt = 25.0;
00351 else if (tot < 120)
00352 ScaleAmt = 30.0;
00353 else if (tot < 140)
00354 ScaleAmt = 35.0;
00355 else if (tot < 160)
00356 ScaleAmt = 40.0;
00357 else if (tot < 200)
00358 ScaleAmt = 50.0;
00359
00360 grSetColor(9);
00361 DispNum(5, 55, ScaleAmt * 3.0);
00362 DispNum(5, 89, ScaleAmt * 2.0);
00363 DispNum(5, 123, ScaleAmt);
00364 ScaleAmt = 25.0 / ScaleAmt;
00365 switch (loc)
00366 {
00367 case 1:
00368 for (i = 0; i < 4; i++)
00369 {
00370 sfu = -1;
00371 if (Data->P[plr].Rocket[i].Num >= 0)
00372 sfu = ScaleAmt * Pt[1][i];
00373 switch (i)
00374 {
00375 case 0:
00376 if (sfu > 0)
00377 {
00378 RectFill(22, 159 - sfu * 136 / 100, 60, 159, 6);
00379 RectFill(22, 159 - sfu * 136 / 100, 59, 158, 5);
00380 };
00381 if (plr == 0 && sfu > 0)
00382 HDispIt(101, 1, 115, 57, 15, 104);
00383 else if (sfu > 0)
00384 HDispIt(129, 1, 149, 85, 15, 75);
00385 break;
00386 case 1:
00387 if (sfu > 0)
00388 {
00389 RectFill(86, 159 - sfu * 136 / 100, 124, 159, 6);
00390 RectFill(86, 159 - sfu * 136 / 100, 123, 158, 5);
00391 }
00392 if (plr == 0 && sfu > 0)
00393 HDispIt(115, 0, 124, 68, 82, 92);
00394 else if (sfu > 0)
00395 HDispIt(151, 1, 170, 95, 82, 65);
00396 break;
00397 case 2:
00398 if (sfu > 0)
00399 {
00400 RectFill(175, 159 - sfu * 136 / 100, 213, 159,
00401 6);
00402 RectFill(175, 159 - sfu * 136 / 100, 212, 158,
00403 5);
00404 };
00405 if (plr == 0 && sfu > 0)
00406 HDispIt(172, 1, 209, 133, 146, 27);
00407 else if (sfu > 0)
00408 HDispIt(211, 1, 243, 133, 148, 27);
00409 break;
00410 case 3:
00411 if (sfu > 0)
00412 {
00413 RectFill(260, 159 - sfu * 136 / 100, 298, 159,
00414 6);
00415 RectFill(260, 159 - sfu * 136 / 100, 297, 158,
00416 5);
00417 };
00418 if (plr == 0 && sfu > 0)
00419 HDispIt(245, 1, 285, 137, 231, 23);
00420 else if (sfu > 0)
00421 HDispIt(287, 1, 318, 132, 231, 28);
00422 break;
00423 default:
00424 break;
00425 }
00426 };
00427 break;
00428 case 0:
00429 sfu = -1;
00430 if (Data->P[plr].Manned[6].Num >= 0)
00431 sfu = ScaleAmt * Pt[2][6];
00432 if (sfu > 0)
00433 {
00434 RectFill(25, 159 - sfu * 136 / 100, 63, 159, 6);
00435 RectFill(25, 159 - sfu * 136 / 100, 62, 158, 5);
00436 };
00437 if (plr == 0 && sfu > 0)
00438 HDispIt(60, 153, 88, 176, 7, 133);
00439 else if (sfu > 0)
00440 HDispIt(90, 151, 119, 176, 7, 131);
00441 sfu = -1;
00442 if (Data->P[plr].Manned[5].Num >= 0)
00443 sfu = ScaleAmt * Pt[2][5];
00444 if (sfu > 0)
00445 {
00446 RectFill(101, 159 - sfu * 136 / 100, 139, 159, 6);
00447 RectFill(101, 159 - sfu * 136 / 100, 138, 158, 5);
00448 }
00449 if (plr == 0 && sfu > 0)
00450 HDispIt(1, 153, 29, 182, 83, 126);
00451 else if (sfu > 0)
00452 HDispIt(31, 153, 56, 182, 83, 126);
00453 for (i = 0; i < 3; i++)
00454 {
00455 sfu = -1;
00456 if (Data->P[plr].Probe[i].Num >= 0)
00457 sfu = ScaleAmt * Pt[0][i];
00458 switch (i)
00459 {
00460 case 0:
00461 if (sfu > 0)
00462 {
00463 RectFill(152, 159 - sfu * 136 / 100, 190, 159,
00464 6);
00465 RectFill(152, 159 - sfu * 136 / 100, 189, 158,
00466 5);
00467 };
00468 if (plr == 0 && sfu > 0)
00469 HDispIt(58, 180, 71, 196, 147, 138);
00470 else if (sfu > 0)
00471 HDispIt(73, 180, 89, 195, 147, 139);
00472 break;
00473 case 1:
00474 if (sfu > 0)
00475 {
00476 RectFill(212, 159 - sfu * 136 / 100, 250, 159,
00477 6);
00478 RectFill(212, 159 - sfu * 136 / 100, 249, 158,
00479 5);
00480 }
00481 if (plr == 0 && sfu > 0)
00482 HDispIt(91, 178, 115, 195, 198, 139);
00483 else if (sfu > 0)
00484 HDispIt(153, 142, 176, 166, 198, 132);
00485 break;
00486 case 2:
00487 if (sfu > 0)
00488 {
00489 RectFill(272, 159 - sfu * 136 / 100, 310, 159,
00490 6);
00491 RectFill(272, 159 - sfu * 136 / 100, 309, 158,
00492 5);
00493 }
00494 if (plr == 0 && sfu > 0)
00495 HDispIt(121, 142, 151, 166, 253, 132);
00496 else if (sfu > 0)
00497 HDispIt(178, 142, 201, 160, 253, 138);
00498 break;
00499 default:
00500 break;
00501 }
00502 }
00503 break;
00504 case 2:
00505 for (i = 0; i < 5; i++)
00506 {
00507 sfu = -1;
00508 if (Data->P[plr].Manned[i].Num >= 0)
00509 sfu = ScaleAmt * Pt[2][i];
00510 switch (i)
00511 {
00512 case 0:
00513 if (sfu > 0)
00514 {
00515 RectFill(16, 159 - sfu * 136 / 100, 54, 159, 6);
00516 RectFill(16, 159 - sfu * 136 / 100, 53, 158, 5);
00517 };
00518 if (plr == 0 && sfu > 0)
00519 HDispIt(12, 91, 25, 116, 12, 137);
00520 else if (sfu > 0)
00521 HDispIt(0, 56, 26, 89, 14, 123);
00522 break;
00523 case 1:
00524 if (sfu > 0)
00525 {
00526 RectFill(77, 159 - sfu * 136 / 100, 115, 159, 6);
00527 RectFill(77, 159 - sfu * 136 / 100, 114, 158, 5);
00528 };
00529 if (plr == 0 && sfu > 0)
00530 HDispIt(27, 98, 49, 127, 66, 127);
00531 else if (sfu > 0)
00532 HDispIt(28, 62, 49, 96, 66, 122);
00533 break;
00534 case 2:
00535 if (sfu > 0)
00536 {
00537 RectFill(142, 159 - sfu * 136 / 100, 180, 159,
00538 6);
00539 RectFill(142, 159 - sfu * 136 / 100, 179, 158,
00540 5);
00541 };
00542 if (plr == 0 && sfu > 0)
00543 DispIt(95, 77, 117, 127, 130, 106);
00544 else if (sfu > 0)
00545 HDispIt(119, 97, 170, 140, 122, 113);
00546 break;
00547 case 3:
00548 if (sfu > 0)
00549 {
00550 RectFill(198, 159 - sfu * 136 / 100, 236, 159,
00551 6);
00552 RectFill(198, 159 - sfu * 136 / 100, 235, 158,
00553 5);
00554 };
00555 if (plr == 0 && sfu > 0)
00556 HDispIt(3, 1, 16, 54, 191, 103);
00557 else if (sfu > 0)
00558 HDispIt(18, 1, 32, 48, 191, 109);
00559 break;
00560 case 4:
00561 if (sfu > 0)
00562 {
00563 RectFill(266, 159 - sfu * 136 / 100, 304, 159,
00564 6);
00565 RectFill(266, 159 - sfu * 136 / 100, 303, 158,
00566 5);
00567 };
00568 if (plr == 0 && sfu > 0)
00569 HDispIt(34, 1, 65, 60, 248, 97);
00570 else if (sfu > 0)
00571 HDispIt(67, 1, 100, 60, 248, 97);
00572 break;
00573 default:
00574 break;
00575 }
00576 }
00577 break;
00578 case 3:
00579 sfu = -1;
00580 if (Data->P[plr].Misc[3].Num >= 0)
00581 sfu = ScaleAmt * Pt[3][3];
00582 if (sfu > 0)
00583 {
00584 RectFill(19, 159 - sfu * 136 / 100, 57, 159, 6);
00585 RectFill(19, 159 - sfu * 136 / 100, 56, 158, 5);
00586 }
00587 if (plr == 0 && sfu > 0)
00588 HDispIt(68, 65, 76, 75, 17, 145);
00589 else if (sfu > 0)
00590 HDispIt(78, 65, 86, 75, 17, 145);
00591 sfu = -1;
00592 if (Data->P[plr].Misc[4].Num >= 0)
00593 sfu = ScaleAmt * Pt[3][4];
00594 if (sfu > 0)
00595 {
00596 RectFill(72, 159 - sfu * 136 / 100, 110, 159, 6);
00597 RectFill(72, 159 - sfu * 136 / 100, 109, 158, 5);
00598 }
00599 if (plr == 0 && sfu > 0)
00600 HDispIt(88, 62, 100, 75, 64, 143);
00601 else if (sfu > 0)
00602 HDispIt(102, 66, 114, 75, 64, 147);
00603 sfu = -1;
00604 if (Data->P[plr].Rocket[4].Num >= 0)
00605 sfu = ScaleAmt * Pt[1][4];
00606 if (sfu > 0)
00607 {
00608 RectFill(118, 159 - sfu * 136 / 100, 156, 159, 6);
00609 RectFill(118, 159 - sfu * 136 / 100, 155, 158, 5);
00610 }
00611 if (plr == 0 && sfu > 0)
00612 HDispIt(1, 120, 14, 151, 113, 125);
00613 else if (sfu > 0)
00614 HDispIt(16, 130, 31, 151, 113, 135);
00615 sfu = -1;
00616 if (Data->P[plr].Misc[0].Num >= 0)
00617 sfu = ScaleAmt * Pt[3][0];
00618 if (sfu > 0)
00619 {
00620 RectFill(173, 159 - sfu * 136 / 100, 211, 159, 6);
00621 RectFill(173, 159 - sfu * 136 / 100, 210, 158, 5);
00622 }
00623 if (plr == 0 && sfu > 0)
00624 HDispIt(33, 140, 47, 151, 165, 145);
00625 else if (sfu > 0)
00626 HDispIt(49, 138, 61, 151, 165, 143);
00627 sfu = -1;
00628 if (Data->P[plr].Misc[1].Num >= 0)
00629 sfu = ScaleAmt * Pt[3][1];
00630 if (sfu > 0)
00631 {
00632 RectFill(226, 159 - sfu * 136 / 100, 254, 159, 6);
00633 RectFill(226, 159 - sfu * 136 / 100, 253, 158, 5);
00634 }
00635 if (plr == 0 && sfu > 0)
00636 HDispIt(63, 131, 75, 151, 219, 136);
00637 else if (sfu > 0)
00638 HDispIt(77, 129, 88, 151, 219, 134);
00639 sfu = -1;
00640
00641 if (Data->P[1].Misc[2].Num >= 0)
00642 sfu = ScaleAmt * Pt[3][2];
00643 if (sfu > 0 && plr == 1)
00644 {
00645 RectFill(275, 159 - sfu * 136 / 100, 313, 159, 6);
00646 RectFill(275, 159 - sfu * 136 / 100, 312, 158, 5);
00647 }
00648 if (sfu > 0 && plr == 1)
00649 HDispIt(51, 77, 93, 127, 270, 106);
00650 break;
00651 default:
00652 break;
00653 }
00654
00655 return;
00656 }
00657
00658 void
00659 HInfo(char plr, char loc, char w)
00660 {
00661 int i, sfu, sfs, tot;
00662 float ov, un, ScaleAmt = 0.0;
00663
00664 if (w == 0)
00665 {
00666 GradRect(4, 23, 315, 159, 0);
00667 for (i = 4; i < 316; i += 2)
00668 {
00669 grPutPixel(i, 57, 11);
00670 grPutPixel(i, 91, 11);
00671 grPutPixel(i, 125, 11);
00672 }
00673
00674 tot = 0;
00675 switch (loc)
00676 {
00677 case 0:
00678 if (Data->P[plr].Manned[5].Steps >=
00679 Data->P[plr].Manned[6].Steps)
00680 tot = Data->P[plr].Manned[5].Steps;
00681 else
00682 tot = Data->P[plr].Manned[6].Steps;
00683 for (i = 0; i < 3; i++)
00684 if (tot <= Data->P[plr].Probe[i].Steps)
00685 tot = Data->P[plr].Probe[i].Steps;
00686 break;
00687 case 1:
00688 for (i = 0; i < 4; i++)
00689 if (tot <= Data->P[plr].Rocket[i].Steps)
00690 tot = Data->P[plr].Rocket[i].Steps;
00691 break;
00692 case 2:
00693 for (i = 0; i < 5; i++)
00694 if (tot <= Data->P[plr].Manned[i].Steps)
00695 tot = Data->P[plr].Manned[i].Steps;
00696 break;
00697 case 3:
00698 if (Data->P[plr].Misc[3].Steps >= Data->P[plr].Misc[4].Steps)
00699 tot = Data->P[plr].Misc[3].Steps;
00700 else
00701 tot = Data->P[plr].Misc[4].Steps;
00702 if (tot <= Data->P[plr].Rocket[4].Steps)
00703 tot = Data->P[plr].Rocket[4].Steps;
00704 if (tot <= Data->P[plr].Misc[0].Steps)
00705 tot = Data->P[plr].Misc[0].Steps;
00706 if (tot <= Data->P[plr].Misc[1].Steps)
00707 tot = Data->P[plr].Misc[1].Steps;
00708 if (tot <= Data->P[plr].Misc[2].Steps && plr == 1)
00709 tot = Data->P[plr].Misc[2].Steps;
00710 break;
00711 default:
00712 break;
00713 }
00714
00715 if (tot < 20)
00716 ScaleAmt = 5.0;
00717 else if (tot < 40)
00718 ScaleAmt = 10.0;
00719 else if (tot < 60)
00720 ScaleAmt = 15.0;
00721 else if (tot < 80)
00722 ScaleAmt = 20.0;
00723 else if (tot < 100)
00724 ScaleAmt = 25.0;
00725 else if (tot < 120)
00726 ScaleAmt = 30.0;
00727
00728 grSetColor(9);
00729 DispNum(5, 55, ScaleAmt * 3.0);
00730 DispNum(5, 89, ScaleAmt * 2.0);
00731 DispNum(5, 123, ScaleAmt);
00732 }
00733 ScaleAmt = 25.0 / ScaleAmt;
00734 grSetColor(1);
00735 switch (loc)
00736 {
00737 case 1:
00738 for (i = 0; i < 4; i++)
00739 {
00740 sfu = -1;
00741 sfs = -1;
00742 if (Data->P[plr].Rocket[i].Num >= 0)
00743 {
00744 sfu = ScaleAmt * Data->P[plr].Rocket[i].Steps;
00745 if (sfu > 0)
00746 {
00747 ov = Data->P[plr].Rocket[i].Steps -
00748 Data->P[plr].Rocket[i].Failures;
00749 un = Data->P[plr].Rocket[i].Steps;
00750 sfs = sfu * (ov / un);
00751 }
00752 }
00753 switch (i)
00754 {
00755 case 0:
00756 if (sfu > 0)
00757 {
00758 RectFill(22, 159 - sfu * 136 / 100, 60, 159, 9);
00759 RectFill(22, 159 - sfu * 136 / 100, 59, 158, 8);
00760 };
00761 if (sfs > 0)
00762 {
00763 RectFill(22, 159 - sfs * 136 / 100, 55, 159, 6);
00764 RectFill(22, 159 - sfs * 136 / 100, 54, 158, 5);
00765 };
00766 if (plr == 0 && sfu > 0)
00767 HDispIt(101, 1, 115, 57, 15, 104);
00768 else if (sfu > 0)
00769 HDispIt(129, 1, 149, 85, 15, 75);
00770 break;
00771 case 1:
00772 if (sfu > 0)
00773 {
00774 RectFill(86, 159 - sfu * 136 / 100, 124, 159, 9);
00775 RectFill(86, 159 - sfu * 136 / 100, 123, 158, 8);
00776 }
00777 if (sfs > 0)
00778 {
00779 RectFill(86, 159 - sfs * 136 / 100, 119, 159, 6);
00780 RectFill(86, 159 - sfs * 136 / 100, 118, 158, 5);
00781 }
00782 if (plr == 0 && sfu > 0)
00783 HDispIt(115, 0, 124, 68, 82, 92);
00784 else if (sfu > 0)
00785 HDispIt(151, 1, 170, 95, 82, 65);
00786 break;
00787 case 2:
00788 if (sfu > 0)
00789 {
00790 RectFill(175, 159 - sfu * 136 / 100, 213, 159,
00791 9);
00792 RectFill(175, 159 - sfu * 136 / 100, 212, 158,
00793 8);
00794 };
00795 if (sfs > 0)
00796 {
00797 RectFill(175, 159 - sfs * 136 / 100, 208, 159,
00798 6);
00799 RectFill(175, 159 - sfs * 136 / 100, 207, 158,
00800 5);
00801 };
00802 if (plr == 0 && sfu > 0)
00803 HDispIt(172, 1, 209, 133, 146, 27);
00804 else if (sfu > 0)
00805 HDispIt(211, 1, 243, 133, 148, 27);
00806 break;
00807 case 3:
00808 if (sfu > 0)
00809 {
00810 RectFill(260, 159 - sfu * 136 / 100, 298, 159,
00811 9);
00812 RectFill(260, 159 - sfu * 136 / 100, 297, 158,
00813 8);
00814 };
00815 if (sfs > 0)
00816 {
00817 RectFill(260, 159 - sfs * 136 / 100, 293, 159,
00818 6);
00819 RectFill(260, 159 - sfs * 136 / 100, 292, 158,
00820 5);
00821 };
00822 if (plr == 0 && sfu > 0)
00823 HDispIt(245, 1, 285, 137, 231, 23);
00824 else if (sfu > 0)
00825 HDispIt(287, 1, 318, 132, 231, 28);
00826 break;
00827 default:
00828 break;
00829 }
00830 };
00831 break;
00832 case 2:
00833 for (i = 0; i < 5; i++)
00834 {
00835 sfu = -1;
00836 sfs = -1;
00837 if (Data->P[plr].Manned[i].Num >= 0)
00838 {
00839 sfu = ScaleAmt * Data->P[plr].Manned[i].Steps;
00840 if (sfu > 0)
00841 {
00842 ov = Data->P[plr].Manned[i].Steps -
00843 Data->P[plr].Manned[i].Failures;
00844 un = Data->P[plr].Manned[i].Steps;
00845 sfs = sfu * (ov / un);
00846 }
00847 }
00848 switch (i)
00849 {
00850 case 0:
00851 if (sfu > 0)
00852 {
00853 RectFill(16, 159 - sfu * 136 / 100, 54, 159, 9);
00854 RectFill(16, 159 - sfu * 136 / 100, 53, 158, 8);
00855 };
00856 if (sfs > 0)
00857 {
00858 RectFill(16, 159 - sfs * 136 / 100, 49, 159, 6);
00859 RectFill(16, 159 - sfs * 136 / 100, 48, 158, 5);
00860 };
00861 if (plr == 0 && sfu > 0)
00862 HDispIt(12, 91, 25, 116, 12, 137);
00863 else if (sfu > 0)
00864 HDispIt(0, 56, 26, 89, 14, 123);
00865 break;
00866 case 1:
00867 if (sfu > 0)
00868 {
00869 RectFill(77, 159 - sfu * 136 / 100, 115, 159, 9);
00870 RectFill(77, 159 - sfu * 136 / 100, 114, 158, 8);
00871 };
00872 if (sfs > 0)
00873 {
00874 RectFill(77, 159 - sfs * 136 / 100, 110, 159, 6);
00875 RectFill(77, 159 - sfs * 136 / 100, 109, 158, 5);
00876 };
00877 if (plr == 0 && sfu > 0)
00878 HDispIt(27, 98, 49, 127, 66, 127);
00879 else if (sfu > 0)
00880 HDispIt(28, 62, 49, 96, 66, 122);
00881 break;
00882 case 2:
00883 if (sfu > 0)
00884 {
00885 RectFill(142, 159 - sfu * 136 / 100, 180, 159,
00886 9);
00887 RectFill(142, 159 - sfu * 136 / 100, 179, 158,
00888 8);
00889 };
00890 if (sfs > 0)
00891 {
00892 RectFill(142, 159 - sfs * 136 / 100, 175, 159,
00893 6);
00894 RectFill(142, 159 - sfs * 136 / 100, 174, 158,
00895 5);
00896 };
00897 if (plr == 0 && sfu > 0)
00898 DispIt(95, 77, 117, 127, 130, 106);
00899 else if (sfu > 0)
00900 HDispIt(119, 97, 170, 140, 122, 113);
00901 break;
00902 case 3:
00903 if (sfu > 0)
00904 {
00905 RectFill(198, 159 - sfu * 136 / 100, 236, 159,
00906 9);
00907 RectFill(198, 159 - sfu * 136 / 100, 235, 158,
00908 8);
00909 };
00910 if (sfs > 0)
00911 {
00912 RectFill(198, 159 - sfs * 136 / 100, 231, 159,
00913 6);
00914 RectFill(198, 159 - sfs * 136 / 100, 230, 158,
00915 5);
00916 };
00917 if (plr == 0 && sfu > 0)
00918 HDispIt(3, 1, 16, 54, 191, 103);
00919 else if (sfu > 0)
00920 HDispIt(18, 1, 32, 48, 191, 109);
00921 break;
00922 case 4:
00923 if (sfu > 0)
00924 {
00925 RectFill(266, 159 - sfu * 136 / 100, 304, 159,
00926 9);
00927 RectFill(266, 159 - sfu * 136 / 100, 303, 158,
00928 8);
00929 };
00930 if (sfs > 0)
00931 {
00932 RectFill(266, 159 - sfs * 136 / 100, 299, 159,
00933 6);
00934 RectFill(266, 159 - sfs * 136 / 100, 298, 158,
00935 5);
00936 };
00937 if (plr == 0 && sfu > 0)
00938 HDispIt(34, 1, 65, 60, 248, 97);
00939 else if (sfu > 0)
00940 HDispIt(67, 1, 100, 60, 248, 97);
00941 break;
00942 default:
00943 break;
00944 }
00945 }
00946 break;
00947 case 0:
00948 sfu = -1;
00949 sfs = -1;
00950 if (Data->P[plr].Manned[6].Num >= 0)
00951 {
00952 sfu = ScaleAmt * Data->P[plr].Manned[6].Steps;
00953 if (sfu > 0)
00954 {
00955 ov = Data->P[plr].Manned[6].Steps -
00956 Data->P[plr].Manned[6].Failures;
00957 un = Data->P[plr].Manned[6].Steps;
00958 sfs = sfu * (ov / un);
00959 }
00960 }
00961 if (sfu > 0)
00962 {
00963 RectFill(25, 159 - sfu * 136 / 100, 63, 159, 9);
00964 RectFill(25, 159 - sfu * 136 / 100, 62, 158, 8);
00965 };
00966 if (sfs > 0)
00967 {
00968 RectFill(25, 159 - sfs * 136 / 100, 58, 159, 6);
00969 RectFill(25, 159 - sfs * 136 / 100, 57, 158, 5);
00970 };
00971 if (plr == 0 && sfu > 0)
00972 HDispIt(60, 153, 88, 176, 9, 132);
00973 else if (sfu > 0)
00974 HDispIt(90, 151, 119, 176, 9, 132);
00975
00976 sfu = -1;
00977 sfs = -1;
00978 if (Data->P[plr].Manned[5].Num >= 0)
00979 {
00980 sfu = ScaleAmt * Data->P[plr].Manned[5].Steps;
00981 if (sfu > 0)
00982 {
00983 ov = Data->P[plr].Manned[5].Steps -
00984 Data->P[plr].Manned[5].Failures;
00985 un = Data->P[plr].Manned[5].Steps;
00986 sfs = sfu * (ov / un);
00987 }
00988 }
00989 if (sfu > 0)
00990 {
00991 RectFill(101, 159 - sfu * 136 / 100, 139, 159, 9);
00992 RectFill(101, 159 - sfu * 136 / 100, 138, 158, 8);
00993 }
00994 if (sfs > 0)
00995 {
00996 RectFill(101, 159 - sfs * 136 / 100, 134, 159, 6);
00997 RectFill(101, 159 - sfs * 136 / 100, 133, 158, 5);
00998 }
00999 if (plr == 0 && sfu > 0)
01000 HDispIt(1, 153, 29, 182, 83, 128);
01001 else if (sfu > 0)
01002 HDispIt(31, 153, 56, 182, 83, 128);
01003
01004 for (i = 0; i < 3; i++)
01005 {
01006 sfu = -1;
01007 sfs = -1;
01008 if (Data->P[plr].Probe[i].Num >= 0)
01009 {
01010 sfu = ScaleAmt * Data->P[plr].Probe[i].Steps;
01011 if (sfu > 0)
01012 {
01013 ov = Data->P[plr].Probe[i].Steps -
01014 Data->P[plr].Probe[i].Failures;
01015 un = Data->P[plr].Probe[i].Steps;
01016 sfs = sfu * (ov / un);
01017 }
01018 }
01019 switch (i)
01020 {
01021 case 0:
01022 if (sfu > 0)
01023 {
01024 RectFill(152, 159 - sfu * 136 / 100, 190, 159,
01025 9);
01026 RectFill(152, 159 - sfu * 136 / 100, 189, 158,
01027 8);
01028 };
01029 if (sfs > 0)
01030 {
01031 RectFill(152, 159 - sfs * 136 / 100, 185, 159,
01032 6);
01033 RectFill(152, 159 - sfs * 136 / 100, 184, 158,
01034 5);
01035 };
01036 if (plr == 0 && sfu > 0)
01037 HDispIt(58, 180, 71, 196, 147, 138);
01038 else if (sfu > 0)
01039 HDispIt(73, 180, 89, 195, 147, 139);
01040 break;
01041 case 1:
01042 if (sfu > 0)
01043 {
01044 RectFill(212, 159 - sfu * 136 / 100, 250, 159,
01045 9);
01046 RectFill(212, 159 - sfu * 136 / 100, 249, 158,
01047 8);
01048 }
01049 if (sfs > 0)
01050 {
01051 RectFill(212, 159 - sfs * 136 / 100, 245, 159,
01052 6);
01053 RectFill(212, 159 - sfs * 136 / 100, 244, 158,
01054 5);
01055 }
01056 if (plr == 0 && sfu > 0)
01057 HDispIt(91, 178, 115, 195, 198, 139);
01058 else if (sfu > 0)
01059 HDispIt(153, 142, 176, 166, 198, 132);
01060 break;
01061 case 2:
01062 if (sfu > 0)
01063 {
01064 RectFill(272, 159 - sfu * 136 / 100, 310, 159,
01065 9);
01066 RectFill(272, 159 - sfu * 136 / 100, 309, 158,
01067 8);
01068 }
01069 if (sfs > 0)
01070 {
01071 RectFill(272, 159 - sfs * 136 / 100, 305, 159,
01072 6);
01073 RectFill(272, 159 - sfs * 136 / 100, 304, 158,
01074 5);
01075 }
01076 if (plr == 0 && sfu > 0)
01077 HDispIt(121, 142, 151, 166, 253, 132);
01078 else if (sfu > 0)
01079 HDispIt(178, 142, 201, 160, 253, 138);
01080 break;
01081 default:
01082 break;
01083 }
01084 }
01085 break;
01086 case 3:
01087 sfu = -1;
01088 sfs = -1;
01089 if (Data->P[plr].Misc[3].Num >= 0)
01090 {
01091 sfu = ScaleAmt * Data->P[plr].Misc[3].Steps;
01092 if (sfu > 0)
01093 {
01094 ov = Data->P[plr].Misc[3].Steps -
01095 Data->P[plr].Misc[3].Failures;
01096 un = Data->P[plr].Misc[3].Steps;
01097 sfs = sfu * (ov / un);
01098 }
01099 }
01100 if (sfu > 0)
01101 {
01102 RectFill(19, 159 - sfu * 136 / 100, 57, 159, 9);
01103 RectFill(19, 159 - sfu * 136 / 100, 56, 158, 8);
01104 }
01105 if (sfs > 0)
01106 {
01107 RectFill(19, 159 - sfs * 136 / 100, 52, 159, 6);
01108 RectFill(19, 159 - sfs * 136 / 100, 51, 158, 5);
01109 }
01110 if (plr == 0 && sfu > 0)
01111 HDispIt(68, 65, 76, 75, 17, 145);
01112 else if (sfu > 0)
01113 HDispIt(78, 65, 86, 75, 17, 145);
01114
01115 sfu = -1;
01116 sfs = -1;
01117 if (Data->P[plr].Misc[4].Num >= 0)
01118 {
01119 sfu = ScaleAmt * Data->P[plr].Misc[4].Steps;
01120 if (sfu > 0)
01121 {
01122 ov = Data->P[plr].Misc[4].Steps -
01123 Data->P[plr].Misc[4].Failures;
01124 un = Data->P[plr].Misc[4].Steps;
01125 sfs = sfu * (ov / un);
01126 }
01127 }
01128 if (sfu > 0)
01129 {
01130 RectFill(72, 159 - sfu * 136 / 100, 110, 159, 9);
01131 RectFill(72, 159 - sfu * 136 / 100, 109, 158, 8);
01132 }
01133 if (sfs > 0)
01134 {
01135 RectFill(72, 159 - sfs * 136 / 100, 105, 159, 6);
01136 RectFill(72, 159 - sfs * 136 / 100, 104, 158, 5);
01137 }
01138 if (plr == 0 && sfu > 0)
01139 HDispIt(88, 62, 100, 75, 64, 143);
01140 else if (sfu > 0)
01141 HDispIt(102, 66, 114, 75, 64, 147);
01142 sfu = -1;
01143 sfs = -1;
01144 if (Data->P[plr].Rocket[4].Num >= 0)
01145 {
01146 sfu = ScaleAmt * Data->P[plr].Rocket[4].Steps;
01147 if (sfu > 0)
01148 {
01149 ov = Data->P[plr].Rocket[4].Steps -
01150 Data->P[plr].Rocket[4].Failures;
01151 un = Data->P[plr].Rocket[4].Steps;
01152 sfs = sfu * (ov / un);
01153 }
01154 }
01155 if (sfu > 0)
01156 {
01157 RectFill(118, 159 - sfu * 136 / 100, 156, 159, 9);
01158 RectFill(118, 159 - sfu * 136 / 100, 155, 158, 8);
01159 }
01160 if (sfs > 0)
01161 {
01162 RectFill(118, 159 - sfs * 136 / 100, 151, 159, 6);
01163 RectFill(118, 159 - sfs * 136 / 100, 150, 158, 5);
01164 }
01165 if (plr == 0 && sfu > 0)
01166 HDispIt(1, 120, 14, 151, 113, 125);
01167 else if (sfu > 0)
01168 HDispIt(16, 130, 31, 151, 113, 135);
01169 sfu = -1;
01170 sfs = -1;
01171 if (Data->P[plr].Misc[0].Num >= 0)
01172 {
01173 sfu = ScaleAmt * Data->P[plr].Misc[0].Steps;
01174 if (sfu > 0)
01175 {
01176 ov = Data->P[plr].Misc[0].Steps -
01177 Data->P[plr].Misc[0].Failures;
01178 un = Data->P[plr].Misc[0].Steps;
01179 sfs = sfu * (ov / un);
01180 }
01181 }
01182 if (sfu > 0)
01183 {
01184 RectFill(173, 159 - sfu * 136 / 100, 211, 159, 9);
01185 RectFill(173, 159 - sfu * 136 / 100, 210, 158, 8);
01186 }
01187 if (sfs > 0)
01188 {
01189 RectFill(173, 159 - sfs * 136 / 100, 206, 159, 6);
01190 RectFill(173, 159 - sfs * 136 / 100, 205, 158, 5);
01191 }
01192 if (plr == 0 && sfu > 0)
01193 HDispIt(33, 140, 47, 151, 165, 145);
01194 else if (sfu > 0)
01195 HDispIt(49, 138, 61, 151, 165, 143);
01196 sfu = -1;
01197 sfs = -1;
01198 if (Data->P[plr].Misc[1].Num >= 0)
01199 {
01200 sfu = ScaleAmt * Data->P[plr].Misc[1].Steps;
01201 if (sfu > 0)
01202 {
01203 ov = Data->P[plr].Misc[1].Steps -
01204 Data->P[plr].Misc[1].Failures;
01205 un = Data->P[plr].Misc[1].Steps;
01206 sfs = sfu * (ov / un);
01207 }
01208 }
01209 if (sfu > 0)
01210 {
01211 RectFill(226, 159 - sfu * 136 / 100, 254, 159, 9);
01212 RectFill(226, 159 - sfu * 136 / 100, 253, 158, 8);
01213 }
01214 if (sfs > 0)
01215 {
01216 RectFill(226, 159 - sfs * 136 / 100, 249, 159, 6);
01217 RectFill(226, 159 - sfs * 136 / 100, 248, 158, 5);
01218 }
01219 if (plr == 0 && sfu > 0)
01220 HDispIt(63, 131, 75, 151, 219, 136);
01221 else if (sfu > 0)
01222 HDispIt(77, 129, 88, 151, 219, 134);
01223 sfu = -1;
01224 sfs = -1;
01225 if (Data->P[1].Misc[2].Num >= 0)
01226 {
01227 sfu = ScaleAmt * Data->P[1].Misc[2].Steps;
01228 if (sfu > 0)
01229 {
01230 ov = Data->P[1].Misc[2].Steps -
01231 Data->P[1].Misc[2].Failures;
01232 un = Data->P[1].Misc[2].Steps;
01233 sfs = sfu * (ov / un);
01234 }
01235 }
01236 if (sfu > 0 && plr == 1)
01237 {
01238 RectFill(275, 159 - sfu * 136 / 100, 313, 159, 9);
01239 RectFill(275, 159 - sfu * 136 / 100, 312, 158, 8);
01240 }
01241 if (sfs > 0 && plr == 1)
01242 {
01243 RectFill(275, 159 - sfs * 136 / 100, 308, 159, 6);
01244 RectFill(275, 159 - sfs * 136 / 100, 307, 158, 5);
01245 }
01246 if (sfu > 0 && plr == 1)
01247 HDispIt(51, 77, 93, 127, 270, 106);
01248 break;
01249 default:
01250 break;
01251 };
01252
01253 return;
01254 }
01255
01256 void
01257 RankMe(char plr)
01258 {
01259 int i;
01260
01261 FadeOut(2, pal, 5, 0, 0);
01262 PortPal(plr);
01263 gxClearDisplay(0, 0);
01264 ShBox(52, 0, 267, 32);
01265 ShBox(0, 0, 50, 32);
01266 ShBox(269, 0, 319, 32);
01267 DispBig(74, 4, "DIRECTOR RANKING", 0, -1);
01268 ShBox(0, 34, 319, 198);
01269 RectFill(25, 48, 293, 184, 4);
01270 RectFill(27, 50, 291, 182, 7);
01271 RectFill(28, 51, 290, 181, 0);
01272 RectFill(33, 56, 285, 176, 7);
01273 RectFill(34, 57, 284, 175, 0);
01274 grSetColor(7);
01275 grMoveTo(27, 50);
01276 grLineTo(33, 56);
01277 grMoveTo(27, 182);
01278 grLineTo(33, 176);
01279 grMoveTo(285, 56);
01280 grLineTo(291, 50);
01281 grMoveTo(285, 176);
01282 grLineTo(291, 182);
01283 grSetColor(7);
01284 for (i = 0; i < 22; i++)
01285 {
01286 if (i < 11)
01287 {
01288 grMoveTo(33, 56 + (i * 12));
01289 grLineTo(285, 56 + (i * 12));
01290 }
01291 grMoveTo(33 + (i * 12), 56);
01292 grLineTo(33 + (i * 12), 176);
01293 }
01294 grSetColor(16);
01295 grMoveTo(34, 152);
01296 grLineTo(284, 152);
01297 DrawRank(plr);
01298 if (Option == -1 || Option == 0)
01299 {
01300 RectFill(43, 66, 49, 70, 6);
01301 RectFill(43, 66, 48, 69, 5);
01302 grSetColor(1);
01303 PrintAt(56, 70, "U.S.A.");
01304 }
01305 if (Option == -1 || Option == 1)
01306 {
01307 RectFill(43, 78, 49, 82, 9);
01308 RectFill(43, 78, 48, 81, 8);
01309 PrintAt(56, 82, "U.S.S.R.");
01310 }
01311 FadeIn(2, pal, 5, 0, 0);
01312
01313 WaitForMouseUp();
01314 while (1)
01315 {
01316 GetMouse();
01317 if ((x >= 0 && y >= 0 && x <= 319 && y <= 199 && mousebuttons > 0)
01318 || key == K_ENTER)
01319 {
01320 if (key > 0)
01321 {
01322 delay(300);
01323 key = 0;
01324 };
01325 WaitForMouseUp();
01326 key = 0;
01327 return;
01328 }
01329 };
01330 }
01331
01332 void
01333 DrawRank(char plr)
01334 {
01335 int i, MaxPz = 0, MaxNg = 0, Px, Py, t1, t2, Cur = 0, OffSet, Year_Inc =
01336 12, score;
01337 char Digit[4];
01338
01339 strcpy(IDT, "i030");
01340 strcpy(IKEY, "k030");
01341
01342
01343 InBox(12, 4, 39, 20);
01344 InBox(281, 4, 308, 20);
01345 FlagSm(0, 13, 5);
01346 FlagSm(1, 282, 5);
01347 Px = 0;
01348 Py = 1;
01349 while (Px != -1 || Py != -1)
01350 {
01351 if (Px != -1)
01352 Cur = Px;
01353 else if (Py != -1)
01354 Cur = Py;
01355 t1 = 0;
01356 for (i = 0; i < Data->P[Cur].PastMis; i++)
01357 {
01358 if (Data->P[Cur].History[i].Prestige < -15)
01359 Data->P[Cur].History[i].Prestige = 0;
01360 t1 += Data->P[Cur].History[i].Prestige;
01361 if (t1 >= 0)
01362 {
01363 if (t1 >= MaxPz)
01364 MaxPz = t1;
01365 }
01366 else if (t1 < 0)
01367 {
01368 if (t1 <= MaxNg)
01369 MaxNg = t1;
01370 }
01371 }
01372 if (Cur == Px)
01373 Px = -1;
01374 else if (Cur == Py)
01375 Py = -1;
01376 }
01377 OffSet = 0;
01378 for (i = 0; i < 50; i += 2)
01379 {
01380 if (MaxNg != 0)
01381 {
01382 if ((MaxNg >= -(i * 10)) && (MaxPz < i * 40))
01383 if (OffSet == 0)
01384 OffSet = i * 10;
01385 }
01386 else
01387 {
01388 if (MaxPz < i * 40)
01389 if (OffSet == 0)
01390 OffSet = i * 10;
01391 }
01392 }
01393 grSetColor(6);
01394 for (i = 0; i < 11; i++)
01395 {
01396 DispNum(29 + (24 * i), 43, (i * 2) + 57);
01397 DispNum(41 + (24 * i), 192, (i * 2) + 58);
01398 }
01399 grSetColor(6);
01400 for (i = 0; i < 6; i++)
01401 {
01402 switch (i)
01403 {
01404 case 0:
01405 if (OffSet < 10)
01406 {
01407 DispNum(15, 178, -OffSet);
01408 DispNum(311, 178, -OffSet);
01409 }
01410 else if (OffSet < 100)
01411 {
01412 DispNum(4, 178, -OffSet);
01413 DispNum(300, 178, -OffSet);
01414 }
01415 else
01416 {
01417 DispNum(3, 178, -OffSet);
01418 DispNum(299, 178, -OffSet);
01419 }
01420 break;
01421 case 1:
01422 DispNum(10, 154, 0);
01423 DispNum(306, 154, 0);
01424 break;
01425 case 2:
01426 case 3:
01427 case 4:
01428 case 5:
01429 if (OffSet * (i - 1) < 10)
01430 {
01431 DispNum(15, 178 - (i * 24), OffSet * (i - 1));
01432 DispNum(311, 178 - (i * 24), OffSet * (i - 1));
01433 }
01434 else if (OffSet * (i - 1) < 100)
01435 {
01436 DispNum(6, 178 - (i * 24), OffSet * (i - 1));
01437 DispNum(302, 178 - (i * 24), OffSet * (i - 1));
01438 }
01439 else
01440 {
01441 DispNum(3, 178 - (i * 24), OffSet * (i - 1));
01442 DispNum(299, 178 - (i * 24), OffSet * (i - 1));
01443 }
01444 break;
01445 default:
01446 break;
01447 }
01448 }
01449
01450 i = 0;
01451 t1 = 152;
01452 t2 = 0;
01453 grSetColor(5);
01454 grMoveTo(34, 152);
01455
01456
01457 if (Option == -1 || Option == 0)
01458 while (i < Data->P[0].PastMis)
01459 {
01460 t2 = 0;
01461 t2 = Data->P[0].History[i].Prestige;
01462 t1 = t1 - (t2 * ((float) 24 / OffSet));
01463 grLineTo(34 + Year_Inc * (Data->P[0].History[i].MissionYear -
01464 57) + Data->P[0].History[i].Month, t1);
01465 i++;
01466 }
01467 i = 0;
01468 t1 = 152;
01469 t2 = 0;
01470 grSetColor(9);
01471 grMoveTo(34, 152);
01472
01473
01474 if (Option == -1 || Option == 1)
01475 while (i < Data->P[1].PastMis)
01476 {
01477 t2 = 0;
01478 t2 = Data->P[1].History[i].Prestige;
01479 t1 = t1 - (t2 * ((float) 24 / OffSet));
01480 grLineTo(34 + Year_Inc * (Data->P[1].History[i].MissionYear -
01481 57) + Data->P[1].History[i].Month, t1);
01482 i++;
01483 }
01484 grSetColor(1);
01485 PrintAt(6, 27, "LEVEL:");
01486 PrintAt(275, 27, "LEVEL:");
01487 grSetColor(0);
01488 DispNum(41, 27, Data->Def.Lev1 + 1);
01489 grSetColor(0);
01490 DispNum(310, 27, Data->Def.Lev2 + 1);
01491 if (Option == -1 || Option == 0)
01492 {
01493 InBox(55, 21, 116, 29);
01494 grSetColor(1);
01495 PrintAt(57, 27, "SCORE:");
01496 score = 0;
01497 score = CalcScore(0, Data->Def.Lev1, Data->Def.Lev2);
01498 sprintf(&Digit[0], "%d", score);
01499 PrintAt(92, 27, &Digit[0]);
01500 }
01501 if (Option == -1 || Option == 1)
01502 {
01503 InBox(203, 21, 264, 29);
01504 grSetColor(1);
01505 PrintAt(205, 27, "SCORE:");
01506 score = CalcScore(1, Data->Def.Lev2, Data->Def.Lev1);
01507 sprintf(&Digit[0], "%d", score);
01508 PrintAt(240, 27, &Digit[0]);
01509 }
01510
01511 }
01512
01513 int
01514 CalcScore(char plr, char lvA, char lvB)
01515 {
01516 char i;
01517 int total = 0;
01518
01519 ++lvA;
01520 ++lvB;
01521 for (i = 0; i < Data->P[plr].PastMis; i++)
01522 {
01523 if (Data->P[plr].History[i].Prestige > 0)
01524 {
01525 switch (lvA)
01526 {
01527 case 1:
01528 total += Data->P[plr].History[i].Prestige;
01529 break;
01530 case 2:
01531 if (lvB == 1)
01532 total +=
01533 2 * Data->P[plr].History[i].Prestige +
01534 Data->P[plr].History[i].Prestige / 3;
01535 else if (lvB == 3)
01536 total +=
01537 2 * Data->P[plr].History[i].Prestige +
01538 Data->P[plr].History[i].Prestige / 3;
01539 else
01540 total += 2 * Data->P[plr].History[i].Prestige;
01541 break;
01542 case 3:
01543 if (lvB == 1)
01544 total +=
01545 2 * Data->P[plr].History[i].Prestige +
01546 (2 * Data->P[plr].History[i].Prestige) / 3;
01547 else if (lvB == 2)
01548 total +=
01549 3 * Data->P[plr].History[i].Prestige +
01550 Data->P[plr].History[i].Prestige / 3;
01551 else
01552 total += 3 * Data->P[plr].History[i].Prestige;
01553 break;
01554 default:
01555 break;
01556 }
01557 }
01558 }
01559 if (plr == Data->Prestige[22].Place)
01560 {
01561 if (lvA == 1)
01562 {
01563 if (Data->Year <= 67)
01564 total += 50;
01565 else if (Data->Year <= 69)
01566 total += 25;
01567 }
01568 else if (lvA == 2)
01569 {
01570 if (Data->Year <= 67)
01571 total += 75;
01572 else if (Data->Year <= 69)
01573 total += 50;
01574 else if (Data->Year <= 73)
01575 total += 25;
01576 }
01577 else if (lvA == 3)
01578 {
01579 if (Data->Year <= 67)
01580 total += 150;
01581 else if (Data->Year <= 69)
01582 total += 75;
01583 else if (Data->Year <= 73)
01584 total += 50;
01585 }
01586 }
01587 return (total);
01588 }
01589
01590