//The WCP series file. Since originally it was not written in WCP Pascal, it took me a bit of // work to make it readable after decompiling it... as far as I know, however, this version is // 100% identical in functionality to WCP's compiled version. series prophecy; #SetOutputPath("$wcp$\mission\"); #include wcp; const //Series B MISSION_B1 = 0, MISSION_B2 = 1, MISSION_B3A = 2, MISSION_B3B = 3, MISSION_B4A = 4, MISSION_B4B = 5, //Series C MISSION_C1 = 6, MISSION_C2A = 7, MISSION_C2B = 8, MISSION_C2C = 9, MISSION_C3A = 10, MISSION_C3B = 11, //Series D MISSION_D1 = 12, MISSION_D3 = 13, MISSION_DL1 = 14, MISSION_DL2 = 15, //Series E MISSION_E1 = 16, MISSION_E2 = 17, MISSION_E3A = 18, MISSION_E3B = 19, MISSION_E4A = 20, MISSION_E4B = 21, //Series F MISSION_F1 = 22, MISSION_F2 = 23, MISSION_F3 = 24, MISSION_F4A = 25, MISSION_F4B = 26, MISSION_F5 = 27, MISSION_F6A = 28, MISSION_F6B = 29, //Series G MISSION_G1 = 30, MISSION_G2 = 31, MISSION_G3 = 32, //Series H MISSION_H1Y = 33, MISSION_H1Z = 34, MISSION_H2Y = 35, MISSION_H2Z = 36, MISSION_H3 = 37, MISSION_H4 = 38, MISSION_H5 = 39, MISSION_H6 = 40, //Series I MISSION_I1 = 41, MISSION_I2 = 42, MISSION_I3A = 43, MISSION_I3B = 44, MISSION_I4 = 45, MISSION_I5 = 46, MISSION_I6 = 47, //Series L MISSION_L1 = 48, MISSION_L2 = 49, MISSION_L3 = 50, //Extras MISSION_BLANK = 51, MISSION_H1_choos = 52, MISSION_H2_choos = 53, ShipId_C_vampire = 19, ShipId_C_devastator = 14, SFX_gf_door_close = 15, SFX_gf_door_open = 16, SFX_GameflowHover = 136, SFX_SimDoorOpen = 108, SFX_SimDoorClose = 109, SFX_RandomPavo_ENG_01 = 193, SFX_RandomPavo_ENG_02 = 195, SFX_RandomPavo_ENG_03 = 197, SFX_RandomPavo_ENG_04 = 199, SFX_RandomPavo_ENG_05 = 201, SFX_RandomPavo_ENG_06 = 203, SFX_RandomPavo_ENG_07 = 205, SFX_RandomPavo_ENG_08 = 207, SFX_RandomPavo_ENG_09 = 209, SFX_RandomPavo_ENG_10 = 211; var g_B1_WON = 0, g_B2_WON = 0, g_B3a_WON = 0, g_B3b_WON = 0, g_B4a_WON = 0, g_B4b_WON = 0, g_C1_WON = 0, g_C3_WON = 0, g_D1_WON = 0, g_D2_WON = 0, g_D3_WON = 0, g_DL1_WON = 0, g_DL2_WON = 0, g_E1_WON = 0, g_E2_WON = 0, g_E3a_WON = 0, g_E3b_WON = 0, g_E4a_WON = 0, g_E4b_WON = 0, g_E5_WON = 0, g_F1_WON = 0, g_F2_WON = 0, g_F3_WON = 0, g_F4_WON = 0, g_F4b_WON = 0, g_F5_WON = 0, g_F6_WON = 0, g_F6b_WON = 0, g_G1_WON = 0, g_G2_WON = 0, g_G3_WON = 0, g_H1y_WON = 0, g_H1z_WON = 0, g_H2y_WON = 0, g_H2z_WON = 0, g_H3_WON = 0, g_H4_WON = 0, g_H5_WON = 0, g_H6_WON = 0, g_I1_WON = 0, g_I2_WON = 0, g_I3_WON = 0, g_I3b_WON = 0, g_I4_WON = 0, g_I5_WON = 0, g_I6_WON = 0, g_L1_WON = 0, g_L2_WON = 0, g_L3_WON = 0, g_C1_WONCOMPLETE = 0, g_C1_BRIDGE_DAMAGED, g_C1_ENGINES_DAMAGED, g_C2_WON = 0, g_F1_Attkd_Kats, g_PlayThisLoseMovie, g_C1_ClickedOnDallas, g_DL1_SawMoroseDallasLanders, g_Hover_Over_Ready_Room_Door, g_hover_sim, g_hover_rec_door, g_hover_ready_door, g_Hover_Over_Object_Viewer, g_PLAYER_DID_L_SERIES, g_hover_briefing_door, g_Mission_Difficulty, g_Ship_Damage, g_F6b_Save_Kats, g_FlowInterruptNumber, g_H_Choose, g_C1_RedeemerDead, g_H2z_HiddenCarrierDead, g_G1_RadarArrayDestroyed, g_G1_CommStationDestroyed, g_Hover_Over_Killboard, g_hover_save, g_ready_door_open, g_ready_door_closed, g_rec_door_closed, g_sim_closed, g_briefing_door_closed, g_Hover_Over_MainTerminal, g_Hover_Over_Quickload, g_Hover_Over_QuickSave, g_E2_AceKilled, g_SawFuneral, g_Attaboy = 0; function MCP; begin // Intro SYS_PlayMovie(10); // Callsign MCP_GetCallsign; //***************************** // Series B //***************************** MCP_RunMission(MISSION_B1); MCP_RunMission(MISSION_B2); //run b3a if b2 = won //run b3b otherwise if (g_B2_WON) then MCP_RunMission(MISSION_B3A) else MCP_RunMission(MISSION_B3B); //run b4a if won b3a //run b4b otherwise if (g_B3a_WON) then MCP_RunMission(MISSION_B4A) else MCP_RunMission(MISSION_B4B); //if either B4A or B4B won, go to series C //end of game otherwise if ((g_B4a_WON <> 1) and (g_B4b_WON <> 1)) then //Play Losing Endgame #1 (2250) //should be handled in the mission //G_LosingEndgames (2250); MCP_Exit; //***************************** //SERIES C //***************************** MCP_RunMission(MISSION_C1); //run c2a if completely successful //run c2b if bridge damaged //run c2c if engines damaged //end of game if engines and bridge damaged //this will be handled by mission C1 if ((g_C1_BRIDGE_DAMAGED <> 1) and (g_C1_ENGINES_DAMAGED <> 1)) then MCP_RunMission(MISSION_C2A); if (g_C1_BRIDGE_DAMAGED) then MCP_RunMission(MISSION_C2B); if (g_C1_ENGINES_DAMAGED) then MCP_RunMission(MISSION_C2C); //run c3a if won c2ab or c //run c3b if lost c3ab or c if (g_C2_WON) then MCP_RunMission(MISSION_C3A) else MCP_RunMission(MISSION_C3B); //***************************** //SERIES DL (losing path for D series) //***************************** // if you didn't win C3, do DL if (g_C3_WON <> 1) then begin MCP_RunMission(MISSION_DL1); //run dl2 regardless //dl2 should get tougher for the player if he lost dl1 //but will not launch a different mission MCP_RunMission(MISSION_DL2); end; //***************************** //SERIES D //***************************** //run d1 regardless MCP_RunMission(MISSION_D1); MCP_RunMission(MISSION_D3); //The player MAY now get sidetracked into Series L (losing) //He will return here after its completion // the flags being checked are whether the // player 'lost' the C series or the D series. // // otherwise the player begins the E series If ((g_D3_won <> 1) or (g_C3_won <> 1)) then begin //***************************** //SERIES L //***************************** //if the player's been here before //then skip this block and return to //where he came from. if (g_PLAYER_DID_L_SERIES <> 1) then begin MCP_RunMission(MISSION_L1); MCP_RunMission(MISSION_L2); MCP_RunMission(MISSION_L3); g_PLAYER_DID_L_SERIES := 1; end; end; //***************************** //SERIES E //***************************** MCP_RunMission(MISSION_E1); MCP_RunMission(MISSION_E2); //if the player wins E2, goto E3a //if the player loses E2, goto E3b //the winning missions come first //the second IF statement deals with the losing missions if (g_E2_WON) then begin MCP_RunMission(MISSION_E3A); //if the player wins E3a, goto E4a //otherwise, play E4b if (G_E3A_WON) then begin MCP_RunMission(MISSION_E4A); //if the player wins E4A, he starts F. Otherwise, die. if (g_E4A_WON <> 1) then MCP_Exit; end else begin MCP_RunMission(MISSION_E4B); //if the player wins E4B, he starts F. Otherwise, die. if (g_E4B_WON <> 1) then MCP_Exit; end end; if (g_E2_WON <> 1) then begin MCP_RunMission(MISSION_E3B); //if the player wins E3b, goto E4b //otherwise he'll be dead if (g_E3B_WON) then begin MCP_RunMission(MISSION_E4B); //if the player wins E4A, he starts F. Otherwise, die. if (g_E4B_WON <> 1) then MCP_Exit; end else MCP_Exit; end; //***************************** //SERIES F //***************************** MCP_RunMission(MISSION_F1); MCP_RunMission(MISSION_F2); //if the player wins F2, run F3 //otherwise they'll drop through to F4b if (g_F2_WON) then begin MCP_RunMission(MISSION_F3); //if the player wins F3, goto F4(a) //otherwise goto F4b if (g_F3_WON) then MCP_RunMission(MISSION_F4A) else MCP_RunMission(MISSION_F4B); end else MCP_RunMission(MISSION_F4B); //if the player wins F4(a), goto F5 //if the player wins F4b, goto F5 //if he loses both, he dies if ((g_F4_WON) or (g_F4b_WON)) then MCP_RunMission(MISSION_F5) else MCP_Exit; //if the player wins F5, goto F6(a) //if he fails, he dies if (g_F5_WON) then MCP_RunMission(MISSION_F6A) else MCP_Exit; //if the player wins F6, then goto Series G, else he dies. //but first... if (g_F6_WON) then //if the player attacked the Kats, he gets an extra mission if (g_F1_Attkd_Kats) then begin MCP_RunMission(MISSION_F6B); //if didn't save the Kats (in F6B), you lose if (g_F6b_WON <> 1) then MCP_Exit; end else MCP_Exit; //***************************** //SERIES G //And thank goodness, it's a short one //***************************** MCP_RunMission(MISSION_G1); MCP_RunMission(MISSION_G2); MCP_RunMission(MISSION_G3); //if you fail G3, you die if (g_G3_WON <> 1) then MCP_Exit; //***************************** //SERIES H //***************************** //this is just gameflow MCP_RunMission(MISSION_H1_choos); //allow the player to choose between H1y and H1z MCP_ShipSelector (ShipId_C_vampire, ShipId_C_devastator); if (MCP_GetSelectedShip = ShipId_C_vampire) then //chose Vampire MCP_RunMission(MISSION_H1Y) else //chose Devastator MCP_RunMission(MISSION_H1Z); //this is just gameflow MCP_RunMission(MISSION_H2_choos); //this is set in H1_choos.mis //means you won H1y or H1z if (g_H_Choose = 2) then begin //allow the player to choose between H2y and H2z MCP_ShipSelector (ShipId_C_vampire, ShipId_C_devastator); if (MCP_GetSelectedShip = ShipId_C_vampire) then //chose Vampire MCP_RunMission(MISSION_H2Y) else //chose Devastator MCP_RunMission(MISSION_H2Z); end else begin //Played H1y, lost - goto H2z //if ( (g_H_Choose == 1) && ( g_H1y_WON == 0) ) if (g_H_Choose = 3) then //force fly Devastator MCP_RunMission(MISSION_H2Z) else //force fly Vampire MCP_RunMission(MISSION_H2Y); end; //play H3-H5 regardless MCP_RunMission(MISSION_H3); MCP_RunMission(MISSION_H4); MCP_RunMission(MISSION_H5); //if H5 lost, you die if (g_H5_WON <> 1) then MCP_Exit; //else, we go on to H6 MCP_RunMission(MISSION_H6); //***************************** //SERIES I //The last one! //***************************** MCP_RunMission(MISSION_I1); MCP_RunMission(MISSION_I2); //if you lose I2, the Midway is // Destroyed and the game is over if (g_I2_WON <> 1) then MCP_Exit; //Otherwise, the cosmic ballet continues... MCP_RunMission(MISSION_I3A); //if player wins I3, then play I4 //otherwise play I3b if (g_I3_WON <> 1) then begin MCP_RunMission(MISSION_I3B); //Screw up and die, if (g_I3b_WON <> 1) then MCP_Exit; end; MCP_RunMission(MISSION_I4); MCP_RunMission(MISSION_I5); MCP_RunMission(MISSION_I6); MCP_WinningEndgame; // THE END!! ;) //**************************** %%% //*** MISSIONS DESIGNED BY *** %_ _% //****** Ben Potter ****** (* *) //***** John Guentzel ***** | //***** Cinco Barnes ***** \_/ //**************************** //MCP_Exit; end; function Series_L; begin //Don't ask me what the hell this is... it was in the original, //though, so might as well stick it in. //It seems to be just a copy of Series I, //minus MCP_WinningEndGame, and plus an additional death option //if you lose I4 //***************************** //SERIES I //***************************** MCP_RunMission(MISSION_I3A); //if player wins I3, then play I4 //otherwise play I3b if (g_I3_WON <> 1) then begin MCP_RunMission(MISSION_I3B); //Screw up and die, if (g_I3b_WON <> 1) then MCP_Exit; end; MCP_RunMission(MISSION_I4); // you know the drill... if (g_I4_WON <> 1) then MCP_Exit; MCP_RunMission(MISSION_I5); MCP_RunMission(MISSION_I6); // THE END!! ;) end; function G_ViewKillboard; begin GF_RunKillboard; end; function G_RunObjectViewer; begin GF_RunObjectViewer; end; // Whoa... what Stellar Map? function G_RunStellarMap; begin GF_RunStellarMap; end; function G_RunTrainingSimulator; begin GF_RunTrainingSimulator; end; function G_RunMainTerminal; begin GF_SetRoomVar(4, 0); GF_RunMainTerminal; end; function G_ToReadyRoom; begin // if (g_FlowInterruptNumber = 2) then // begin // //In Mission D1, play this movie // //and drop the player in the Ready // //Room afterwards. // SYS_PlayMovie(690); // g_FlowInterruptNumber := 0; // end; if (g_FlowInterruptNumber = 4) then begin //In Mission F3, play this movie //F3_2500 spider packs Hawk's stuff //and drop the player in the Ready //Room afterwards. SYS_PlayMovie(1176); g_FlowInterruptNumber := 0; end; if (g_FlowInterruptNumber = 5) then begin //In Mission F4, play this movie //F4_1200 Maniac makes poor attempt //and drop the player in the Ready //Room afterwards. SYS_PlayMovie(1200); g_FlowInterruptNumber := 0; end; if (g_FlowInterruptNumber = 7) then begin //In Mission G2, play this movie //G2_1490 Casey Consoles Maniac //and drop the player in the Ready //Room afterwards. SYS_PlayMovie(1490); g_FlowInterruptNumber := 0; end; if (g_FlowInterruptNumber = 8) then begin //In Mission I1, play this movie //I1_1880 Blair and CAG argue about //flying //and drop the player in the Ready //Room afterwards. SYS_PlayMovie(1880); g_FlowInterruptNumber := 0; end; GF_LoadRoom(1); end; function G_ToRecRoom; begin GF_LoadRoom(0); end; function G_QuickSave; begin GF_SetRoomVar(7, 0); GF_QuickSave; end; function G_QuickLoad; begin GF_SetRoomVar(6, 0); GF_QuickLoad; end; //Umm... what bloody locker? function G_ViewLocker; begin GF_RunKillboard; end; function G_EscapeHatch; begin GF_ExitGame; end; function G_LosingEndGames(movie_number); begin SYS_PlayMovie(movie_number); end; function G_Hover_Ready; begin if (GF_GetRoomVar(2) <> 1) then begin SYS_PlaySFX (SFX_gf_door_open); GF_SetRoomVar (2,1); end; end; function G_Fidget_Ready; begin GF_SetRoomVar(2, 0); end; function G_Simulator_Fidget; begin GF_SetRoomVar(12, 0); if (GF_HotspotCurrentFrame = 0) then GF_SetRoomVar(12, 1); if (GF_GetRoomVar(13)) then begin SYS_PlaySFX (SFX_SimDoorClose); GF_SetRoomVar (13, 0); end; end; function G_Simulator_Hover; begin if (GF_GetRoomVar(12)) then begin SYS_PlaySFX (SFX_SimDoorOpen); GF_SetRoomVar(12,0); end; GF_SetRoomVar(13,0); if (GF_HotspotCurrentFrame > 8) then GF_SetRoomVar (13, 1); end; function G_Object_Viewer_Hover; begin if (GF_GetRoomVar(5) <> 1) then begin GF_SetRoomVar (5, 1); SYS_PlaySFX (SFX_GameflowHover); end; end; function G_Object_Viewer_Fidget; begin GF_SetRoomVar(5,0); end; function G_ReadyDoor_Hover; begin if (GF_GetRoomVar(8)) then begin SYS_PlaySFX(SFX_gf_door_open); GF_SetRoomVar (8,0); end; GF_SetRoomVar(9,0); if (GF_HotspotCurrentFrame > 1) then GF_SetRoomVar (9,1); end; function G_ReadyDoor_Fidget; begin GF_SetRoomVar (8, 0); if (GF_HotspotCurrentFrame = 0) then GF_SetRoomVar (8,1); if (GF_GetRoomVar(9)) then begin SYS_PlaySFX(SFX_gf_door_close); GF_SetRoomVar (9,0); end; end; function G_RecDoor_Hover; begin if (GF_GetRoomVar (10)) then begin SYS_PlaySFX (SFX_gf_door_open); GF_SetRoomVar (10, 0); end; GF_SetRoomVar (11, 0); if (GF_HotspotCurrentFrame > 8) then GF_SetRoomVar (11, 1); end; function G_RecDoor_Fidget; begin GF_SetRoomVar (10,0); if (GF_HotspotCurrentFrame < 5) then GF_SetRoomVar (10,1); if (GF_GetRoomVar (11)) then begin SYS_PlaySFX(SFX_gf_door_close); GF_SetRoomVar (11, 0); end; end; function G_RunBriefing; begin if ((g_FlowInterruptNumber <> 1) and (g_FlowInterruptNumber <> 3)) then GF_Exit; if (g_FlowInterruptNumber = 1) then begin //In Mission B1, play this movie //and drop the player in the Ready //Room afterwards. SYS_PlayMovie(0070); g_FlowInterruptNumber := 0; //return; // (What the?) end; if (g_FlowInterruptNumber = 3) then begin //In Mission F2, play this movie //and drop the player in the Ready //Room afterwards. SYS_PlayMovie(1130); g_FlowInterruptNumber := 0; //return; (What the?) end; end; function G_BriefingDoorFidget; begin GF_SetRoomVar(0,0); if (GF_HotspotCurrentFrame = 0) then GF_SetRoomVar(0,1); if (GF_GetRoomVar (1)) then begin SYS_PlaySFX(SFX_gf_door_close); GF_SetRoomVar(1,0); end; end; function G_BriefingDoorHover; begin if (GF_GetRoomVar (0)) then begin SYS_PlaySFX(SFX_gf_door_open); GF_SetRoomVar (0,0); end; GF_SetRoomVar (1,0); if (GF_HotspotCurrentFrame > 8) then GF_SetRoomVar (1,1); end; // This function chooses and plays a debriefing movie depending on how the player did // in the mission. The function is called from inside the mission file's MAIN function. function G_GenericAttaboyLander(ShipHitPoints, MissionDifficulty, mission_success); begin //This function is designed to play Generic Attaboy landers //ShipHitPoints is a % up to 100 that will help determine //which movie you will see. // // If the player EJECTS, he always gets 2490 // // Here's the graph for a LOSING MISSION: // // ALL% 2480 // // // Here's the graph for a WINNING MISSION: // // 76-100% 2490 // 51-75% 2470 // 26-50% 2440 // 0-25% 2450 // //IF PLAYER EJECTED!!! if (ShipHitPoints < 1) then //treat my ships better SYS_PlayMovie(2490); //IF PLAYER FAILED!!! if (mission_success <> 1) then //you'll be lucky to stay //on the flight roster SYS_PlayMovie(2480); else begin if (ShipHitPoints < 26) then //treat my ships better SYS_PlayMovie(2490); if ((ShipHitPoints > 25) and (ShipHitPoints < 51)) then //hands full SYS_PlayMovie(2470); if ((ShipHitPoints > 50) and (ShipHitPoints < 76)) then //nice moves SYS_PlayMovie(2440); if (ShipHitPoints > 75) then //great job SYS_PlayMovie(2450); end; end; function G_GenericAttaboyEgress(ShipHitPoints, MissionDifficulty, mission_success); begin //This function is designed to play Generic Attaboy egresses. //Depending on whether he lost or won, the player gets: // LOST/EJECT 2445 // WON 2435 //IF PLAYER EJECTED or LOSES!!! if (mission_success <> 1) then SYS_PlayMovie(2445) else //IF PLAYER WON SYS_PlayMovie(2435); end; function G_Killboard_Fidget; begin GF_SetRoomVar (3, 0); end; function G_Killboard_Hover; begin if (GF_GetRoomVar(3) <> 1) then begin GF_SetRoomVar (3, 1); SYS_PlaySFX(SFX_GameflowHover); end; end; // This function is used to select and play a random public announcement voice over // (PAVO). The function is activated from inside a mission's gameflow function. function G_GenericPAVOs; var pavo; begin pavo := (SYS_Random(9) + 1); if (pavo = 1) then SYS_PlaySFX(SFX_RandomPavo_ENG_01); if (pavo = 2) then SYS_PlaySFX(SFX_RandomPavo_ENG_02); if (pavo = 3) then SYS_PlaySFX(SFX_RandomPavo_ENG_03); if (pavo = 4) then SYS_PlaySFX(SFX_RandomPavo_ENG_04); if (pavo = 5) then SYS_PlaySFX(SFX_RandomPavo_ENG_05); if (pavo = 6) then SYS_PlaySFX(SFX_RandomPavo_ENG_06); if (pavo = 7) then SYS_PlaySFX(SFX_RandomPavo_ENG_07); if (pavo = 8) then SYS_PlaySFX(SFX_RandomPavo_ENG_08); if (pavo = 9) then SYS_PlaySFX(SFX_RandomPavo_ENG_09); if (pavo = 10) then SYS_PlaySFX(SFX_RandomPavo_ENG_10); end; function G_QuickLoad_Hover; begin if (GF_GetRoomVar(6) <> 1) then begin GF_SetRoomVar (6, 1); SYS_PlaySFX (SFX_GameflowHover); end; end; function G_QuickSave_Hover; begin if (GF_GetRoomVar (7) <> 1) then begin GF_SetRoomVar (7, 1); SYS_PlaySFX (SFX_GameflowHover); end; end; function G_QuickSave_Fidget; begin GF_SetRoomVar (7, 0); end; function G_QuickLoad_Fidget; begin GF_SetRoomVar (6, 0); end; function G_MainTerminal_Fidget; begin GF_SetRoomVar (4, 0); end; function G_MainTerminal_Hover; begin if (GF_GetRoomVar (4) <> 1) then begin GF_SetRoomVar (4, 1); SYS_PlaySFX (SFX_GameflowHover); end; end;