void AILaunch(char plr) { int i, j, k = 0, l = 0, JR = 0, wgt, bwgt[7]; char boos[7], bdex[7]; for (i = 0; i < 7; i++) { bdex[i] = i; boos[i] = (i > 3) ? RocketBoosterSafety(Data->P[plr].Rocket[i - 4].Safety, Data->P[plr].Rocket[4].Safety) : Data->P[plr].Rocket[i].Safety; bwgt[i] = (i > 3) ? (Data->P[plr].Rocket[i - 4].MaxPay + Data->P[plr].Rocket[4].MaxPay) : Data->P[plr].Rocket[i].MaxPay; if (boos[i] < 60) { boos[i] = -1; // Get Rid of any Unsafe rkt systems } if (Data->P[plr].Rocket[4].Num < 1) for (j = 4; j < 7; j++) { boos[j] = -1; } for (j = 0; j < 4; j++) if (Data->P[plr].Rocket[j].Num < 1) { boos[j] = -1; } } for (i = 0; i < 3; i++) { if (Data->P[plr].Mission[i].MissionCode == 28 && Data->P[plr].DMod == 0) { Data->P[plr].Mission[i].MissionCode = 0; return; } if (Data->P[plr].Mission[i].MissionCode > 0 && Data->P[plr].Mission[i].part == 0) { whe[0] = whe[1] = -1; if (Data->P[plr].Mission[i].Joint == 1) { AIVabCheck(plr, Data->P[plr].Mission[i].MissionCode, Data->P[plr].Mission[i + 1].Prog); } else { AIVabCheck(plr, Data->P[plr].Mission[i].MissionCode, Data->P[plr].Mission[i].Prog); } if (whe[0] > 0) { if (Data->P[plr].Mission[i].Prog == 0) { BuildVAB(plr, Data->P[plr].Mission[i].MissionCode, 1, 0, Data->P[plr].Mission[i].Prog); } else { BuildVAB(plr, Data->P[plr].Mission[i].MissionCode, 1, 0, Data->P[plr].Mission[i].Prog - 1); } for (j = Mission_Capsule; j <= Mission_Probe_DM; j++) { Data->P[plr].Mission[i].Hard[j] = VAS[whe[0]][j].dex; } wgt = 0; for (j = 0; j < 4; j++) { wgt += VAS[whe[0]][j].wt; } rck[0] = -1; for (k = 0; k < 7; k++) if (boos[k] != -1 && bwgt[k] >= wgt) { if (rck[0] == -1) { rck[0] = bdex[k]; } else if (boos[k] >= boos[rck[0]]) { rck[0] = bdex[k]; } } if (rck[0] == -1) { ClrMiss(plr, i - Data->P[plr].Mission[i].part); } else { if (Data->P[plr].Mission[i].MissionCode == 1) { rck[0] = 0; } if (Data->P[plr].Mission[i].MissionCode >= 7 && Data->P[plr].Mission[i].MissionCode <= 13) { rck[0] = 1; } if (Data->P[plr].Mission[i].MissionCode == 3) { rck[0] = 1; } if (Data->P[plr].Mission[i].MissionCode == 15) { rck[0] = 1; } Data->P[plr].Mission[i].Hard[Mission_PrimaryBooster] = rck[0] + 1; } } else { // Clear Mission Data->P[plr].Mission[i].MissionCode = 0; } // joint mission part if (whe[1] > 0 && Data->P[plr].Mission[i + 1].part == 1) { if (Data->P[plr].Mission[i].Prog == 0) { BuildVAB(plr, Data->P[plr].Mission[i].MissionCode, 1, 1, Data->P[plr].Mission[i].Prog); } else { BuildVAB(plr, Data->P[plr].Mission[i].MissionCode, 1, 1, Data->P[plr].Mission[i].Prog - 1); } for (j = Mission_Capsule ; j <= Mission_Probe_DM; j++) { Data->P[plr].Mission[i + 1].Hard[j] = VAS[whe[1]][j].dex; } wgt = 0; for (j = 0; j < 4; j++) { wgt += VAS[whe[1]][j].wt; } rck[1] = -1; for (k = 0; k < 7; k++) if (boos[k] != -1 && bwgt[k] >= wgt) { if (rck[1] == -1) { rck[1] = bdex[k]; } else if (boos[k] >= boos[rck[1]]) { rck[1] = bdex[k]; } } if (rck[1] == -1) { rck[1] = Data->P[plr].Mission[i].Hard[Mission_PrimaryBooster] - 1; } Data->P[plr].Mission[i + 1].Hard[Mission_PrimaryBooster] = rck[1] + 1; } } } // JOINT MISSION KLUGGE MISSION 55 & 56 if (Data->P[plr].Mission[0].MissionCode == 55) { Data->P[plr].Mission[1].Hard[Mission_Capsule] = Data->P[plr].Mission[1].Prog - 1; Data->P[plr].Mission[0].Hard[Mission_LM] = 6; // LM Data->P[plr].Mission[0].Hard[Mission_Probe_DM] = 4; // DM Data->P[plr].Misc[1].Safety = maxx(Data->P[plr].Misc[1].Safety, Data->P[plr].Misc[1].MaxRD); Data->P[plr].Mission[1].Hard[Mission_Kicker] = 1; // kicker second part }; if (Data->P[plr].Mission[0].MissionCode == 56) { Data->P[plr].Mission[1].Hard[Mission_Capsule] = Data->P[plr].Mission[1].Prog - 1; Data->P[plr].Mission[0].Hard[Mission_LM] = 6; // LM Data->P[plr].Mission[0].Hard[Mission_Probe_DM] = 4; // DM Data->P[plr].Misc[1].Safety = maxx(Data->P[plr].Misc[1].Safety, Data->P[plr].Misc[1].MaxRD); Data->P[plr].Mission[0].Hard[Mission_Kicker] = 1; Data->P[plr].Mission[1].Hard[Mission_Kicker] = 1; }; // lunar module klugge for (i = 0; i < 3; i++) if (Data->P[plr].Mission[i].Hard[Mission_LM] >= 5) { Data->P[plr].Mission[i].Hard[Mission_LM] = Data->P[plr].Manned[5].Safety >= Data->P[plr].Manned[6].Safety ? 5 : 6; } JR = 0; k = 0; for (l = 0; l < 3; l++) { if (Data->P[plr].Mission[l].Joint == 1) { JR = 1; } if (Data->P[plr].Mission[l].MissionCode > 0 && Data->P[plr].Mission[l].part == 0) { k++; } Data->P[plr].Mission[l].Rushing = 0; // Clear Data } if (k == 3) { // Three non joint missions Data->P[plr].Mission[0].Month = 2 + Data->Season * 6; Data->P[plr].Mission[1].Month = 3 + Data->Season * 6; Data->P[plr].Mission[2].Month = 4 + Data->Season * 6; }; if (k == 2 && JR == 0) { // Two non joint missions l = 3; if (Data->P[plr].Mission[0].MissionCode > 0) { Data->P[plr].Mission[0].Month = l + Data->Season * 6; l += 2; }; if (Data->P[plr].Mission[1].MissionCode > 0) { Data->P[plr].Mission[1].Month = l + Data->Season * 6; l += 2; }; if (Data->P[plr].Mission[2].MissionCode > 0) { Data->P[plr].Mission[2].Month = l + Data->Season * 6; } }; if (k == 1 && JR == 0) { // Single Mission Non joint if (Data->P[plr].Mission[0].MissionCode > 0) { Data->P[plr].Mission[0].Month = 4 + Data->Season * 6; } if (Data->P[plr].Mission[1].MissionCode > 0) { Data->P[plr].Mission[1].Month = 4 + Data->Season * 6; } if (Data->P[plr].Mission[2].MissionCode > 0) { Data->P[plr].Mission[2].Month = 4 + Data->Season * 6; } }; if (k == 2 && JR == 1) { // Two launches, one Joint; if (Data->P[plr].Mission[1].part == 1) { // Joint first Data->P[plr].Mission[0].Month = 3 + Data->Season * 6; Data->P[plr].Mission[1].Month = 3 + Data->Season * 6; Data->P[plr].Mission[2].Month = 5 + Data->Season * 6; }; if (Data->P[plr].Mission[2].part == 1) { // Joint second Data->P[plr].Mission[0].Month = 3 + Data->Season * 6; Data->P[plr].Mission[1].Month = 5 + Data->Season * 6; Data->P[plr].Mission[2].Month = 5 + Data->Season * 6; }; }; if (k == 1 && JR == 1) { // Single Joint Launch if (Data->P[plr].Mission[1].part == 1) { // found on pad 1+2 Data->P[plr].Mission[0].Month = 4 + Data->Season * 6; Data->P[plr].Mission[1].Month = 4 + Data->Season * 6; } else { // found on pad 2+3 Data->P[plr].Mission[1].Month = 4 + Data->Season * 6; Data->P[plr].Mission[2].Month = 4 + Data->Season * 6; }; } return; }
void MisCheck(char plr, char mpad) { int tomflag = 0; // toms checking flag int val, safety, save, PROBLEM, i, lc, durxx; struct XFails Now; unsigned char gork = 0; lc = 0; /* XXX check uninitialized */ STEPnum = STEP; FINAL = STEP = MFlag = 0; // Clear Everything Unm = MANNED[0] + MANNED[1]; Dock_Skip = 0; // used for mission branching MPad = mpad; SCRUBS = noDock = InSpace = 0; if (!AI[plr] && !fullscreenMissionPlayback) { //FadeOut(1,pal,100,128,1); if (plr == 1) { fill_rectangle(189, 173, 249, 196, 55); for (i = 190; i < 250; i += 2) { display::graphics.legacyScreen()->setPixel(i, 178, 61); display::graphics.legacyScreen()->setPixel(i, 184, 61); display::graphics.legacyScreen()->setPixel(i, 190, 61); } lc = 191; } else if (plr == 0) { fill_rectangle(73, 173, 133, 196, 55); for (i = 73; i < 133; i += 2) { display::graphics.legacyScreen()->setPixel(i, 178, 61); display::graphics.legacyScreen()->setPixel(i, 184, 61); display::graphics.legacyScreen()->setPixel(i, 190, 61); } lc = 76; } } // END if (!AI[plr]) if (!AI[plr] && !fullscreenMissionPlayback) { Tick(2); } Mev[0].trace = 0; death = 0; durxx = durx = -1; if (Data->P[plr].Mission[mpad].Duration > 0) { durxx = Data->P[plr].Mission[mpad].Duration - 1; Data->P[plr].Mission[mpad].Duration = 0; } if (JOINT == 1) { durxx = MAX(durxx, Data->P[plr].Mission[mpad + 1].Duration - 1); Data->P[plr].Mission[mpad + 1].Duration = 0; } do { if (STEP > 30 || STEP < 0) { delay(20); } if (Dock_Skip == 1) { if (Mev[Mev[STEP].trace].loc == 8) { Mev[STEP].trace++; // skip over docking. } } if (Mev[STEP].loc == 16 && Mis.PCat[4] == 22) { FirstManOnMoon(plr, 0, Mis.Index); } // Duration Hack Part 1 of 3 (during the Duration stuff) if ((Mev[STEP].loc == 27 || Mev[STEP].loc == 28) && durx > 0) { if (Mev[STEP].StepInfo != 1) { Data->P[plr].Mission[MPad + Mev[STEP].pad].Duration = 1; //Original code would also return 1 durx = -1; // end durations } else { Data->P[plr].Mission[MPad + Mev[STEP].pad].Duration++; durx--; if ((Data->Def.Lev1 == 0 && plr == 0) || (Data->Def.Lev2 == 0 && plr == 1)) { Mev[STEP].dice = MisRandom(); } else { Mev[STEP].dice = brandom(100) + 1; } Mev[STEP].rnum = brandom(10000); // reroll failure type Mev[STEP].trace = STEP; } } if (Mev[STEP].Name[0] == 'A' || Mev[STEP].StepInfo == 9 || Mev[STEP].StepInfo == 19) { STEP = Mev[STEP].trace; } else { if (Mev[STEP].trace != 0) { STEP = Mev[STEP].trace; } else { Mev[STEP].trace = STEP + 1; STEP++; } } // Duration Hack Part 2 of 3 (set up durx for duration use) if ((Mev[STEP].loc == 27 || Mev[STEP].loc == 28) && durx == -1) { durx = durxx - 1; Data->P[plr].Mission[MPad + Mev[STEP].pad].Duration = 2; } if (Mev[STEP].Name[0] == 'A') { display::graphics.setForegroundColor(11); if (!AI[plr] && !fullscreenMissionPlayback) { if (plr == 0) { x = 5; y = 112; fill_rectangle(2, 107, 140, 115, 3); } else { x = 82, y = 8; fill_rectangle(78, 2, 241, 10, 3); } draw_string(x, y, "COUNTDOWN"); if (plr == 0) { fill_rectangle(188, 107, 294, 113, 3); display::graphics.setForegroundColor(1); draw_string(190, 112, (Mev[STEP].pad == 0) ? "PRIMARY LAUNCH" : "SECOND LAUNCH"); } else { fill_rectangle(244, 56, 314, 62, 3); display::graphics.setForegroundColor(1); draw_string(246, 61, (Mev[STEP].pad == 0) ? "PRIMARY PAD" : "SECOND PAD"); } } memset(Name, 0x00, sizeof Name); strcpy(Name, Mev[STEP].Name); Name[0] = '#'; // Launch Code PlaySequence(plr, STEP, Name, 0); // Special Case #47236 }; // Necessary to keep code from crashing on bogus mission step while (Mev[STEP].E == NULL) { STEP++; } // Draw Mission Step Name if (!AI[plr] && !fullscreenMissionPlayback) { if (!(fEarly && STEP != 0)) { if (plr == 0) { x = 5; y = 112; fill_rectangle(2, 107, 140, 115, 3); } else { x = 82, y = 8; fill_rectangle(78, 2, 241, 10, 3); } display::graphics.setForegroundColor(11); MisStep(x, y, Mev[STEP].loc); if (plr == 0) { fill_rectangle(188, 107, 294, 113, 3); display::graphics.setForegroundColor(1); draw_string(190, 112, (Mev[STEP].pad == 0) ? "PRIMARY LAUNCH" : "SECOND LAUNCH"); } else { fill_rectangle(244, 56, 314, 62, 3); display::graphics.setForegroundColor(1); draw_string(246, 61, (Mev[STEP].pad == 0) ? "PRIMARY PAD" : "SECOND PAD"); } } } // SAFETY FACTOR STUFF safety = Mev[STEP].E->MisSaf; if ((Mev[STEP].Name[0] == 'A') && MH[Mev[STEP].pad][7] != NULL) { // boosters involved safety = RocketBoosterSafety(safety, MH[Mev[STEP].pad][7]->Safety); } // Duration Hack Part 3 of 3 if (Mev[STEP].loc == 28 || Mev[STEP].loc == 27) { safety = Mev[STEP].E->MisSaf; // needs to be for both if (InSpace == 2) { safety = (MH[0][0]->MisSaf + MH[1][0]->MisSaf) / 2; //joints } } if (strncmp(Mev[STEP].E->Name, "DO", 2) == 0) { if (Mev[STEP].loc == 1 || Mev[STEP].loc == 2) { safety = Mev[STEP].E->MSF; } } val = Mev[STEP].dice; safety += Mev[STEP].asf; if (safety >= 100) { safety = 99; } save = (Mev[STEP].E->SaveCard == 1) ? 1 : 0; PROBLEM = val > safety; if (!AI[plr] && options.want_cheats) { PROBLEM = 0; } DEBUG6("step %c:%s safety %d rolled %d%s", Mev[STEP].Name[0], S_Name[Mev[STEP].loc], safety, val, PROBLEM ? " problem" : (options.want_cheats ? " cheating" : "")); if (!AI[plr] && !fullscreenMissionPlayback) if (!(fEarly && STEP != 0)) { lc = MCGraph(plr, lc, MAX(0, safety), MAX(0, val), PROBLEM); // Graph Chart } if (PROBLEM && save == 1) { // Failure Saved Mev[STEP].E->SaveCard--; // Deduct SCard PROBLEM = 0; // Fix problem } // Fix wrong anim thing for the Jt Durations if (Mev[STEP].loc == 28 || Mev[STEP].loc == 27) { strcpy(Mev[STEP].Name, (plr == 0) ? "_BUSC0\0" : "_BSVC0"); Mev[STEP].Name[5] = Mev[STEP].E->ID[1]; } if (PROBLEM == 1) { //Step Problem // for the unmanned mission if (MANNED[Mev[STEP].pad] == 0 && MANNED[other(Mev[STEP].pad)] == 0) { Mev[STEP].rnum = (-1) * (brandom(5) + 1); } // Unmanned also if (MANNED[Mev[STEP].pad] == 0 && noDock == 0) { Mev[STEP].rnum = (-1) * (brandom(5) + 1); } memset(&Now, 0x00, sizeof Now); //***************TC Special little HMOON EVA FAILURE FIX tomflag = 0; if (Mev[STEP].Name[0] == 'H' && Mev[STEP].Name[1] == 'M') { gork = Data->P[plr].Mission[mpad].Prog; if (gork == 2) { strcpy(Mev[STEP].Name, (plr == 0) ? "HUM3C1" : "HSM3C1"); } else if (gork == 3) { strcpy(Mev[STEP].Name, (plr == 0) ? "HUM3C2" : "HSM3C2"); } else { strcpy(Mev[STEP].Name, (plr == 0) ? "HUM3C3" : "HSM3C3"); } tomflag = 1; }; //:::::: Failure docking klugge if (Mev[STEP].Name[0] == 'I') { gork = Data->P[plr].Mission[mpad].Prog; if (gork == 2) { strcpy(Mev[STEP].Name, (plr == 0) ? "IUM4C1" : "ISM4C1"); } else if (gork == 3) { strcpy(Mev[STEP].Name, (plr == 0) ? "IUM4C2" : "ISM4C2"); } else { strcpy(Mev[STEP].Name, (plr == 0) ? "IUM4C3" : "ISM4C3"); } }; // *********** TOM's FAIL HMOON KLUDGE // if HMOON FAILURE if (tomflag) { GetFailStat(&Now, Mev[STEP].FName, 7595); } else { DEBUG3("Failing !tomflag - calling GetFailStat(&Now, Mev[STEP].FName %s, MEV[STEP].rnum %d))", Mev[STEP].FName, Mev[STEP].rnum); GetFailStat(&Now, Mev[STEP].FName, Mev[STEP].rnum); // all others } memset(Name, 0x00, sizeof Name); memcpy(Name, Mev[STEP].Name, strlen(Mev[STEP].Name)); // copy orig failure Name[strlen(Name)] = 0x30 + (Now.fail / 10); Name[strlen(Name)] = 0x30 + Now.fail % 10; Name[strlen(Name)] = 0x00; //:::::: STEP FAILURE ::::::::: //::::::::::::::::::::::::::::: PlaySequence(plr, STEP, Name, 1); if (!AI[plr]) { Tick(2); //reset dials } FailEval(plr, Now.code, Now.text, Now.val, Now.xtra); } else { // Step Success if (Mev[STEP].loc == 28 || Mev[STEP].loc == 27) { strcpy(Mev[STEP].Name, (plr == 0) ? "bUC0" : "bSC0"); Mev[STEP].Name[5] = Mev[STEP].E->ID[1]; } if (strncmp(Mev[STEP].E->Name, "DO", 2) == 0) { if (Mev[STEP].loc == 2) { Data->P[plr].DockingModuleInOrbit = 2; } } //:::::::::::::::::::::::::::::::::: //::: SUCCESS: Docking klugge :::::: //:::::::::::::::::::::::::::::::::: if (Mev[STEP].Name[0] == 'I') { gork = Data->P[plr].Mission[mpad].Prog; if (gork == 2) { strcpy(Mev[STEP].Name, (plr == 0) ? "IUM4C1" : "ISM4C1"); } else if (gork == 3) { strcpy(Mev[STEP].Name, (plr == 0) ? "IUM4C2" : "ISM4C2"); } else { strcpy(Mev[STEP].Name, (plr == 0) ? "IUM4C3" : "ISM4C3"); } }; if (Mev[STEP].Name[0] == 'e' && Data->P[plr].Mission[mpad].MissionCode == Mission_LunarFlyby) { strcpy(Mev[STEP].Name, (plr == 0) ? "VUP1" : "VSP1"); } //:::::: STEP SUCCESS ::::::::: //::::::::::::::::::::::::::::: // FemaleAstronautsAllowed step klugge // third parameter (0 -> MALE) (2 -> FEMALE) //::::::::::::::::::::::::::::: gork = ((MA[0][0].A != NULL && MA[0][0].A->Sex && EVA[0] == 0) || (MA[0][1].A != NULL && MA[0][1].A->Sex && EVA[0] == 1) || (MA[0][2].A != NULL && MA[0][2].A->Sex && EVA[0] == 2) || (MA[0][3].A != NULL && MA[0][3].A->Sex && EVA[0] == 3) || (MA[1][0].A != NULL && MA[1][0].A->Sex && EVA[1] == 0) || (MA[1][1].A != NULL && MA[1][1].A->Sex && EVA[1] == 1) || (MA[1][2].A != NULL && MA[1][2].A->Sex && EVA[1] == 2) || (MA[1][3].A != NULL && MA[1][3].A->Sex && EVA[1] == 3)); //if (!((mcc==9 || mcc==11) && (Mev[STEP].Name[0]=='W'))) PlaySequence(plr, STEP, Mev[STEP].Name, (gork == 1) ? 2 : 0); // Play Animations if (Mev[STEP].sgoto == 100) { Mev[STEP].trace = 0x7F; } else if (Mev[STEP].sgoto != 0) { Mev[STEP].trace = Mev[STEP].sgoto; } else { Mev[STEP].trace = STEP + 1; } if (!(strncmp(Mev[STEP].E->Name, "DO", 2) == 0 && Mev[STEP].loc == 0x02)) { Mev[STEP].E->MisSucc++; // set for all but docking power on } Mev[STEP].StepInfo = 1; // Bottom of success statement } if (Mev[STEP].loc == 0x7f || Mev[STEP].sgoto == 100) { // force mission end Mev[STEP].trace = 0x7f; } if ((mcc == 10 || mcc == 12 || mcc == 13) && STEP == 2) { Mev[STEP].trace = 0x7f; } if (STEP > 30 || STEP < 0) { delay(20); } if (Mev[STEP].Prest != 0) { pAry[pCnt++] = STEP; } if (Mev[STEP].sgoto == Mev[STEP].fgoto && Mev[STEP].trace != 0x7f) { Mev[STEP].trace = Mev[STEP].sgoto; } if (Mev[STEP].loc == 8 && Mev[STEP].StepInfo == 1) { noDock = 1; } if (Mev[STEP].loc == 0 && MANNED[Mev[STEP].pad] > 0) { InSpace++; } if (Mev[STEP].loc == 4 && MANNED[Mev[STEP].pad] > 0) { InSpace--; } // these two lines fix a problem with Lab Missions failing on launch and // ending the mission. // Yet another in the ongoing series of special cases. // if (Mev[STEP].trace == 0x7f && STEP == 3) { switch (Mis.Index) { case 19: case 22: case 23: case 30: case 32: case 35: case 36: case 37: InSpace = 1; Mev[STEP].trace = Mev[STEP].dgoto; default: break; } } // if (Mev[STEP].trace==0x7f && InSpace>0) Mev[STEP].trace=STEP+1; } while (Mev[STEP].trace != 0x7f); // End mission //end do if (!AI[plr] && death == 0) { delay(1000); } if ((MA[0][0].A != NULL && MA[0][0].A->Status == AST_ST_DEAD) || (MA[0][1].A != NULL && MA[0][1].A->Status == AST_ST_DEAD) || (MA[0][2].A != NULL && MA[0][2].A->Status == AST_ST_DEAD) || (MA[0][3].A != NULL && MA[0][3].A->Status == AST_ST_DEAD) || (MA[1][0].A != NULL && MA[1][0].A->Status == AST_ST_DEAD) || (MA[1][1].A != NULL && MA[1][1].A->Status == AST_ST_DEAD) || (MA[1][2].A != NULL && MA[1][2].A->Status == AST_ST_DEAD) || (MA[1][3].A != NULL && MA[1][3].A->Status == AST_ST_DEAD)) { // Mission Death if (!AI[plr]) { if (!fullscreenMissionPlayback) { display::AutoPal p(display::graphics.legacyScreen()); memset(&p.pal[64 * 3], 0x00, 64 * 3); //Specs: 0x08 if (plr == 0) { fill_rectangle(2, 107, 140, 115, 3); } else { fill_rectangle(78, 2, 241, 10, 3); } if (plr == 0) { fill_rectangle(188, 107, 294, 113, 3); } else { fill_rectangle(244, 56, 314, 62, 3); } } PlaySequence(plr, STEP, (plr == 0) ? "UFUN" : "SFUN", 0); } if (!AI[plr]) { delay(1000); } death = 1; } else { death = 0; }; return; }
void MisAnn(char plr, char pad) { int i, j, bud; struct mStr Mis2; char k, hold, Digit[4], HelpFlag = 0; char pad_str[2] = {'A' + pad, '\0'}; for (i = 0; i < 768; i++) { pal[i] = 0; } gxClearDisplay(0, 0); PortPal(plr); ShBox(41, 20, 281, 184); InBox(46, 25, 276, 179); InBox(46, 25, 117, 65); Flag(47, 26, plr); InBox(122, 25, 276, 65); grSetColor(9); PrintAt(127, 33, "SCHEDULED LAUNCH"); //was 154,33 grSetColor(34); PrintAt(127, 40, "LAUNCH FACILITY: "); grSetColor(1); PrintAt(0, 0, "PAD "); PrintAt(0, 0, pad_str); grSetColor(34); PrintAt(127, 47, "DATE: "); grSetColor(1); PrintAt(0, 0, Month[Data->P[plr].Mission[pad].Month]); PrintAt(0, 0, "19"); DispNum(0, 0, Data->Year); grSetColor(1); GetMisType(Data->P[plr].Mission[pad].MissionCode); memcpy(&Mis2, &Mis, sizeof Mis); if ((Mis.mVab[0] & 0x10) == 0x10 && Data->P[plr].DMod <= 0) { i = 0; while (dg[Mis2.Index][i] != 0 && Mis.Doc == 1) { GetMisType(dg[Mis2.Index][i]); i++; } if (dg[Mis2.Index][i] == 0) { Data->P[plr].Mission[pad].MissionCode = 4; // new mission } else { Data->P[plr].Mission[pad].MissionCode = Mis.Index; // new mission } GetMisType(Data->P[plr].Mission[pad].MissionCode); HelpFlag = 1; } PrintAt(127, 54, Mis.Abbr); int MisCod; MisCod = Data->P[plr].Mission[pad].MissionCode; if ((MisCod > 24 && MisCod < 32) || MisCod == 33 || MisCod == 34 || MisCod == 35 || MisCod == 37 || MisCod == 40 || MisCod == 41) // Show duration level only on missions with a Duration step - Leon { switch (Data->P[plr].Mission[pad].Duration) { case 1: PrintAt(0, 0, ""); break; case 2: PrintAt(0, 0, " (B)"); break; case 3: PrintAt(0, 0, " (C)"); break; case 4: PrintAt(0, 0, " (D)"); break; case 5: PrintAt(0, 0, " (E)"); break; case 6: PrintAt(0, 0, " (F)"); break; default: PrintAt(0, 0, ""); break; } } IOBox(57, 68, 118, 84); IOBox(131, 68, 197, 84); IOBox(205, 68, 266, 84); grSetColor(1); PrintAt(65, 78, "CONTINUE"); PrintAt(139, 78, "PLAY FULL"); PrintAt(221, 78, "SCRUB"); grSetColor(9); MisCod = Data->P[plr].Mission[i].MissionCode; PrintAt(65, 78, "C"); PrintAt(139, 78, "P"); PrintAt(221, 78, "S"); //IOBox(85,68,158,84);IOBox(172,68,245,84); //grSetColor(1);PrintAt(102,78,"CONTINUE");PrintAt(189,78,"SCRUB"); //grSetColor(9); //PrintAt(102,78,"C");PrintAt(189,78,"S"); if (Data->P[plr].Mission[pad].Joint == 0) { PrintAt(128, 91, "SINGLE LAUNCH"); } else { PrintAt(131, 91, "JOINT LAUNCH"); PrintAt(49, 101, "PART ONE"); PrintAt(102, 101, "PAD "); //DispNum(0,0,pad); switch (pad) { case 0: PrintAt(0, 0, "A"); break; case 1: PrintAt(0, 0, "B"); break; case 2: PrintAt(0, 0, "C"); break; }; PrintAt(160, 101, "PART TWO"); PrintAt(213, 101, "PAD "); //DispNum(0,0,pad+1); switch (pad + 1) { case 0: PrintAt(0, 0, "A"); break; case 1: PrintAt(0, 0, "B"); break; case 2: PrintAt(0, 0, "C"); break; }; } for (i = 0; i < Data->P[plr].Mission[pad].Joint + 1; i++) { k = 0; if (i == 0) { bud = 49; } else { bud = 160; } for (j = Mission_Capsule; j <= Mission_PrimaryBooster; j++) { hold = Data->P[plr].Mission[pad + i].Hard[j]; switch (j) { case 0: if (hold > -1) { grSetColor(7); PrintAt(bud, 109 + 14 * k, "CAPSULE: "); grSetColor(1); PrintAt(0, 0, &Data->P[plr].Manned[hold].Name[0]); grSetColor(11); PrintAt(bud, 116 + 14 * k, "SAFETY FACTOR: "); Data->P[plr].Manned[hold].Damage != 0 ? grSetColor(9) : grSetColor(1); //Damaged Equipment, Nikakd, 10/8/10 sprintf(&Digit[0], "%d", Data->P[plr].Manned[hold].Safety + Data->P[plr].Manned[hold].Damage); PrintAt(0, 0, &Digit[0]); PrintAt(0, 0, "%"); // PrintAt(144+i*111,116+14*k,"%"); ++k; }; break; case 1: if (hold > -1) { grSetColor(7); PrintAt(bud, 109 + 14 * k, "KICKER: "); grSetColor(1); PrintAt(0, 0, &Data->P[plr].Misc[hold].Name[0]); grSetColor(11); PrintAt(bud, 116 + 14 * k, "SAFETY FACTOR: "); Data->P[plr].Misc[hold].Damage != 0 ? grSetColor(9) : grSetColor(1); //Damaged Equipment, Nikakd, 10/8/10 sprintf(&Digit[0], "%d", Data->P[plr].Misc[hold].Safety + Data->P[plr].Misc[hold].Damage); PrintAt(0, 0, &Digit[0]); PrintAt(0, 0, "%"); // DispNum(0,0,Data->P[plr].Misc[hold].Safety); // PrintAt(144+i*111,116+14*k,"%"); ++k; }; break; case 2: if (hold > -1) { grSetColor(7); PrintAt(bud, 109 + 14 * k, "LM: "); grSetColor(1); PrintAt(0, 0, &Data->P[plr].Manned[hold].Name[0]); grSetColor(11); PrintAt(bud, 116 + 14 * k, "SAFETY FACTOR: "); Data->P[plr].Manned[hold].Damage != 0 ? grSetColor(9) : grSetColor(1); //Damaged Equipment, Nikakd, 10/8/10 sprintf(&Digit[0], "%d", Data->P[plr].Manned[hold].Safety + Data->P[plr].Manned[hold].Damage); PrintAt(0, 0, &Digit[0]); PrintAt(0, 0, "%"); //DispNum(0,0,Data->P[plr].Manned[hold].Safety); //PrintAt(144+i*111,116+14*k,"%"); ++k; }; break; case 3: if (hold > -1) { if (hold < 3) { grSetColor(7); PrintAt(bud, 109 + 14 * k, "PROBE: "); grSetColor(1); PrintAt(0, 0, &Data->P[plr].Probe[hold].Name[0]); grSetColor(11); PrintAt(bud, 116 + 14 * k, "SAFETY FACTOR: "); Data->P[plr].Probe[hold].Damage != 0 ? grSetColor(9) : grSetColor(1); //Damaged Equipment, Nikakd, 10/8/10 sprintf(&Digit[0], "%d", Data->P[plr].Probe[hold].Safety + Data->P[plr].Probe[hold].Damage); PrintAt(0, 0, &Digit[0]); PrintAt(0, 0, "%"); //DispNum(0,0,Data->P[plr].Probe[hold].Safety); //PrintAt(144+i*111,116+14*k,"%"); ++k; } else if (hold == 4) { grSetColor(7); PrintAt(bud, 109 + 14 * k, "DOCKING: "); grSetColor(1); PrintAt(0, 0, &Data->P[plr].Misc[hold].Name[0]); grSetColor(11); PrintAt(bud, 116 + 14 * k, "SAFETY FACTOR: "); Data->P[plr].Misc[hold].Damage != 0 ? grSetColor(9) : grSetColor(1); //Damaged Equipment, Nikakd, 10/8/10 sprintf(&Digit[0], "%d", Data->P[plr].Misc[hold].Safety + Data->P[plr].Misc[hold].Damage); PrintAt(0, 0, &Digit[0]); PrintAt(0, 0, "%"); //DispNum(0,0,Data->P[plr].Misc[hold].Safety); //PrintAt(144+i*111,116+14*k,"%"); ++k; } }; break; case 4: if (hold > -1) { if (hold < 5) { grSetColor(7); PrintAt(bud, 109 + 14 * k, "ROCKET: "); grSetColor(1); PrintAt(0, 0, &Data->P[plr].Rocket[hold - 1].Name[0]); grSetColor(11); PrintAt(bud, 116 + 14 * k, "SAFETY FACTOR: "); Data->P[plr].Rocket[hold - 1].Damage != 0 ? grSetColor(9) : grSetColor(1); //Damaged Equipment, Nikakd, 10/8/10 sprintf(&Digit[0], "%d", Data->P[plr].Rocket[hold - 1].Safety + Data->P[plr].Rocket[hold - 1].Damage); PrintAt(0, 0, &Digit[0]); PrintAt(0, 0, "%"); //DispNum(0,0,Data->P[plr].Rocket[hold-1].Safety); //PrintAt(144+i*111,116+14*k,"%"); ++k; } else { grSetColor(7); PrintAt(bud, 109 + 14 * k, "ROCKET: "); grSetColor(1); PrintAt(0, 0, &Data->P[plr].Rocket[hold - 5].Name[0]); PrintAt(0, 0, " W/B"); grSetColor(11); PrintAt(bud, 116 + 14 * k, "SAFETY FACTOR: "); (Data->P[plr].Rocket[hold - 5].Damage != 0 || Data->P[plr].Rocket[4].Damage != 0) ? grSetColor(9) : grSetColor(1); //Damaged Equipment && Booster's Safety Mod, Nikakd, 10/8/10 sprintf(&Digit[0], "%d", RocketBoosterSafety(Data->P[plr].Rocket[hold - 5].Safety + Data->P[plr].Rocket[hold - 5].Damage, Data->P[plr].Rocket[4].Safety + Data->P[plr].Rocket[4].Damage)); PrintAt(0, 0, &Digit[0]); PrintAt(0, 0, "%"); // DispNum(0,0,(Data->P[plr].Rocket[hold-5].Safety+Data->P[plr].Rocket[4].Safety)/2); // PrintAt(144+i*111,116+14*k,"%"); ++k; } } break; default: break; } } } FadeIn(2, pal, 10, 0, 0); WaitForMouseUp(); if (HelpFlag) { Help("i156"); // Notification of being an Help } while (1) { key = 0; GetMouse(); if ((x >= 59 && y >= 70 && x <= 116 && y <= 82 && mousebuttons > 0) || key == K_ENTER || key == 'C') { InBox(59, 70, 116, 82); WaitForMouseUp(); OutBox(59, 70, 116, 82); FadeOut(2, pal, 10, 0, 0); BIG = 0; return; } else if ((x >= 133 && y >= 70 && x <= 195 && y <= 82 && mousebuttons > 0) || key == K_ENTER || key == 'P') { InBox(133, 70, 195, 82); WaitForMouseUp(); OutBox(133, 70, 195, 82); FadeOut(2, pal, 10, 0, 0); BIG = 1; return; } else if ((x >= 207 && y >= 70 && x <= 264 && y <= 82 && mousebuttons > 0) || key == 'S') { InBox(207, 70, 264, 82); WaitForMouseUp(); OutBox(207, 70, 264, 82); { ClrMiss(plr, pad); } if (Data->P[plr].Mission[pad].MissionCode == 0) { FadeOut(2, pal, 10, 0, 0); return; } } }; }