void CModelViewRender::PlayAnimation( bool bLoop, int nAnimationId ) { if (0 <= nAnimationId) { m_bLoop = bLoop; ANIMATIONSEQUENCE sequence; sequence.push_back(nAnimationId); PlaySequence(sequence); } }
void DefineEEMacros (void) { unsigned int sequence = 0; unsigned int prevStart; PWM_Set (0, 0, 0, 0); Seq_Find(sequence); prevStart = ReadWord(STARTSEQADD); if (prevStart == PLAYMACROS) prevStart = 0; do { PlaySequence(sequence); if (PushButtons_Pressed(BUTTON1)) { // advance to next sequence PWM_Set (0, 0, 0, 0); PushButtons_Clear(BUTTON1); sequence++; if (sequence >= Seq_Count()) sequence = 0; Seq_Find(sequence); } if (PushButtons_Pressed(BUTTON2)) { // add sequence to EEPROM PWM_Set (0, 0, 0, 0); PushButtons_Clear(BUTTON2); if (Macros_Add(sequence)) { ConfirmCommand(); } else Error(); } } while (!PushButtons_Held(BUTTON2)); PushButtons_Clear(BUTTON2); if (Macros_Count() != 0) { WriteWord(STARTSEQADD, PLAYMACROS); // enable macro playback } else { // restore previous playback mode WriteWord(STARTSEQADD, prevStart); // enable normal playback } ConfirmCommand(); ConfirmCommand(); InitMode(); }
void CModelViewRender::PlaySequence( bool bLoop, ANIMATIONSEQUENCE &animationSequence ) { m_bLoop = bLoop; m_AnimationSequence = animationSequence; PlaySequence(m_AnimationSequence); }
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; }