// The SO campaign file. Note that this file is derived // from Episode 7, and thus contains the entire mission // tree for all seven episodes. Attempting to use this // file without having all seven episodes installed will // result in a crash when the game reaches the first // mission from a missing episode. // // Note: I have included the constants for episode splash // screens, but I have not implemented them because I do // not remember what the victory conditions for each series // are. series covert; #SetOutputPath("$wcso$\mission\"); #include wcp; const // Sound constants; if you get tired of the Easter Egg // sound in the Locker function, try using some of these // other weird WCP sounds ;) SFX_Weird = 10, SFX_Stiletto = 11, SFX_Groovy = 13, SFX_Prophecy = 14, // Easter Egg sound SFX_Ring = 21, MISSION_Intro = 0, MISSION_Episode1 = 1, MISSION_A1 = 2, MISSION_A1A = 3, MISSION_A2a = 4, MISSION_A2b = 5, MISSION_A3 = 6, MISSION_Episode2 = 7, MISSION_B1 = 8, MISSION_B1A = 9, MISSION_B2 = 10, MISSION_B2A = 11, MISSION_B3a = 12, MISSION_B3b = 13, MISSION_B4 = 14, MISSION_Episode3 = 15, MISSION_C1 = 16, MISSION_C2a = 17, MISSION_C2b = 18, MISSION_C2aA = 19, MISSION_C2aB = 20, MISSION_C2aC = 21, MISSION_C3a = 22, MISSION_C3b = 23, MISSION_Episode4 = 24, MISSION_D1 = 25, MISSION_D2 = 26, MISSION_D3 = 27, MISSION_D4a = 28, MISSION_D4b = 29, MISSION_D5 = 30, MISSION_Episode5 = 31, MISSION_E1 = 32, MISSION_E1A = 33, MISSION_E2 = 34, MISSION_E2A = 35, MISSION_E3a = 36, MISSION_E3b = 37, MISSION_E4a = 38, MISSION_E4b = 39, MISSION_Episode6 = 40, MISSION_F1 = 41, MISSION_F2 = 42, MISSION_F3 = 43, MISSION_F4 = 44, MISSION_F5a = 45, MISSION_F5b = 46, MISSION_F6a = 47, MISSION_F6b = 48, MISSION_Episode6b = 49, MISSION_G1 = 50, MISSION_G2 = 51, MISSION_G3 = 52, MISSION_G4 = 53, MISSION_G5 = 54, MISSION_G6 = 55, MISSION_G7 = 56, MISSION_G8 = 57, MISSION_Episode7 = 58, MISSION_H1a = 59, MISSION_H1b = 60, MISSION_H2a = 61, MISSION_H2b = 62, MISSION_H3 = 63, MISSION_H4 = 64, MISSION_ExtroWW = 65, // Win Win MISSION_ExtroWL = 66, // Win Lose MISSION_ExtroLL = 67, // Lose Lose // Splash screens ESS_PictureOne = 0, ESS_PictureTwo = 1, // This file does not exist ESS_PictureThree = 2, // This file does not exist ESS_PictureFour = 3, // This file does not exist ESS_PictureFive = 4, // This file does not exist ESS_EP_OneW = 5, ESS_EP_OneL = 6, ESS_EP_TwoW = 7, ESS_EP_TwoL = 8, ESS_EP_ThreeW = 9, ESS_EP_ThreeL = 10, ESS_EP_FourW = 11, ESS_EP_FourL = 12, ESS_EP_FiveW = 13, ESS_EP_FiveL = 14, ESS_EP_SixW = 15, ESS_EP_SixL = 16, ESS_WCP_Gold = 17, // More SFX constants SFX_gf_door_close = 15, SFX_gf_door_open = 16, SFX_GameflowHover = 136, SFX_SimDoorOpen = 108, SFX_SimDoorClose = 109; var // Some of these variables are from WCP, but I couldn't // be bothered removing them. g_A1_WON = 0, g_A2a_WON = 0, g_A2b_WON = 0, g_A3_WON = 0, g_B1_WON = 0, g_B2_WON = 0, g_B3a_WON = 0, g_B3b_WON = 0, g_B4_WON = 0, g_C1_WON = 0, g_C2a_WON = 0, g_C2b_WON = 0, g_C3a_WON = 0, g_C3b_WON = 0, g_D1_WON = 0, g_D2_WON = 0, g_D3_WON = 0, g_D4a_WON = 0, g_D4b_WON = 0, g_D5_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_F1_WON = 0, g_F2_WON = 0, g_F3_WON = 0, g_F4_WON = 0, g_F5a_WON = 0, g_F5b_WON = 0, g_F6a_WON = 0, g_F6b_WON = 0, g_G1_WON = 0, g_G2_WON = 0, g_G3_WON = 0, g_G4_WON = 0, g_G5_WON = 0, g_G6_WON = 0, g_G7_WON = 0, g_G8_WON = 0, g_H2z_WON = 0, g_H3_WON = 0, g_H4_WON = 0, g_H5_WON = 0, g_H6_WON = 0, g_Cheryls_Song_Dead = 0, g_Shy_Meadows_Dead = 0, g_Kyoto_Rose_Dead = 0, g_PlayThisLoseMovie, g_Hover_Over_Ready_Room_Door, g_hover_sim, g_hover_rec_door, g_hover_ready_door, g_Hover_Over_Object_Viewer, g_hover_briefing_door, g_Mission_Difficulty, g_Ship_Damage, g_FlowInterruptNumber, 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; function MCP; begin // These title references are interesting... they tell us // a little bit about the history of SO, from add-on to // standalone. // //****************************** //*DEEP BLACK : Covert Missions* //****************************** // // Later Changed to: // //****************************** //*Wing Commander Prophecy * //* Secret Ops. * //****************************** // // // Later Changed to: // //****************************** //* Wing Commander: * //* Secret Ops * //****************************** // The "Intro" Mission MCP_RunMission(MISSION_Intro); // // Player CALLSIGN Entry // AND // REGISTRATION screen MCP_GetCallsign; // The "A" series: // The "Episode 1 Intro" Mission MCP_RunMission(MISSION_Episode1); // Mission A1 MCP_RunMission(MISSION_A1); // Mission A1A MCP_RunMission(MISSION_A1A); if (g_A1_WON) then // Mission A2A MCP_RunMission(MISSION_A2a) else // Mission A2B MCP_RunMission(MISSION_A2b); // Mission A3 MCP_RunMission(MISSION_A3); // The "B" series: // The "Episode 2 Intro" Mission MCP_RunMission(MISSION_Episode2); // Mission B1 MCP_RunMission(MISSION_B1); // Mission B1A MCP_RunMission(MISSION_B1A); // Mission B2 MCP_RunMission(MISSION_B2); // Mission B2A MCP_RunMission(MISSION_B2A); if (g_B2_WON) then // Mission B3A MCP_RunMission(MISSION_B3a) else // Mission B3B MCP_RunMission(MISSION_B3b); // Mission B4 MCP_RunMission(14); // The "C" series: // The "Episode 3 Intro" Mission MCP_RunMission(MISSION_Episode3); // Mission C1 MCP_RunMission(MISSION_C1); if (g_C1_WON) then begin // Mission C2A MCP_RunMission(MISSION_C2a); // Mission C2AA MCP_RunMission(MISSION_C2aA); // Mission C2AB MCP_RunMission(MISSION_C2aB); // Mission C3A MCP_RunMission(MISSION_C3a); end else begin // Mission C2B MCP_RunMission(MISSION_C2b); // Mission C2AA MCP_RunMission(MISSION_C2aA); // Mission C2AC MCP_RunMission(MISSION_C2aC); // Mission C3B MCP_RunMission(MISSION_C3b); end; // The "D" series: // The "Episode 4 Intro" Mission MCP_RunMission(MISSION_Episode4); // Mission D1 MCP_RunMission(MISSION_D1); // Mission D2 MCP_RunMission(MISSION_D2); // Mission D3 MCP_RunMission(MISSION_D3); if (g_D3_WON) then // Mission D4A MCP_RunMission(MISSION_D4a) else // Mission D4B MCP_RunMission(MISSION_D4b); // Mission D5 MCP_RunMission(30); // The "E" series: // The "Episode 5 Intro" Mission MCP_RunMission(MISSION_Episode5); // Mission E1 MCP_RunMission(MISSION_E1); // Mission E1A MCP_RunMission(MISSION_E1A); // Mission E2 MCP_RunMission(MISSION_E2); // Mission E2A MCP_RunMission(MISSION_E2A); if (g_E2_WON) then begin // Mission E3A MCP_RunMission(MISSION_E3a); if (g_E3a_WON) then // Mission E4A MCP_RunMission(MISSION_E4a) else // Mission E4B g_E2_WON:=0; MCP_RunMission(MISSION_E4b); end else begin // Mission E3B MCP_RunMission(MISSION_E3b); // Mission E4B MCP_RunMission(MISSION_E4b); end; // The "F" series: // If the player LOSES mission E2, he will be sent down // the "F" series path. Winning in E2 means a stronger // foothold in Luyten and the choice of going through // Kreiger system before Proxima. if (g_E2_WON <> 1) then begin // The "Episode 6 Intro" Mission MCP_RunMission(MISSION_Episode6); // Mission F1 MCP_RunMission(MISSION_F1); // Mission F2 MCP_RunMission(MISSION_F2); // Mission F3 MCP_RunMission(MISSION_F3); // Mission F4 MCP_RunMission(MISSION_F4); if ((g_F4_WON <> 1) or (g_F2_WON <> 1)) then begin // Mission F5B MCP_RunMission(MISSION_F5b); // Mission F6B MCP_RunMission(MISSION_F6b); end else begin // Mission F5A MCP_RunMission(MISSION_F5a); // Mission F6A MCP_RunMission(MISSION_F5a); end; end; // The "G" series: // If the player WON mission E2, he will run the G series. // Otherwise, it is assumed that the player came down the // F-series path and will be moving "that" way into the // Proxima Sector. if (g_E2_WON) then begin // The "Episode 6b Intro" Mission MCP_RunMission(MISSION_Episode6b); // Mission G1 MCP_RunMission(MISSION_G1); // Mission G2 MCP_RunMission(MISSION_G2); // Mission G3 MCP_RunMission(MISSION_G3); // Mission G4 MCP_RunMission(MISSION_G4); // Mission G5 MCP_RunMission(MISSION_G5); // Mission G6 MCP_RunMission(MISSION_G6); // Mission G7 MCP_RunMission(MISSION_G7); // Mission G8 MCP_RunMission(MISSION_G8); end; // The "H" series // The "Episode 7 Intro" Mission MCP_RunMission(MISSION_Episode7); if(g_E2_WON <> 1) then begin // The player has now entered H-series. // These are the unique missions for H-series with // respect to coming from Sirius (F-series) sector... // Mission H1A MCP_RunMission(MISSION_H1a); // Mission H2A MCP_RunMission(MISSION_H2a); end else begin // The player has now entered H-series. // These are the unique missions for H-series with // respect to coming from Krieger (G-series) sector... // Mission H1B MCP_RunMission(MISSION_H1b); // Mission H2B MCP_RunMission(MISSION_H2b); end; // Mission H3 MCP_RunMission(MISSION_H3); // Mission H4 MCP_RunMission(MISSION_H4); // The "Outro" if (g_H4_WON = 0) then // Mission LOSE-LOSE Outro MCP_RunMission(MISSION_ExtroLL); if (g_H4_WON = 2) then // Mission WIN-LOSE Outro MCP_RunMission(MISSION_ExtroWL); if (g_H4_WON = 1) then // Mission WIN-WIN Outro MCP_RunMission(MISSION_ExtroWW); // B-dee.. B-dee.. B-dee.. Thats all Folx.. MCP_WinningEndgame; MCP_EscapeMenu; //MCP_ShowSplashScreen(ESS_PictureOne,0); MCP_Exit; // //**************************** %%% //*** MISSIONS DESIGNED BY *** %_ _% //*** Cinco Barnes *** 'X X' //*** John Guentzel *** | //*** Hal Milton *** \_/ //*** Reece Thornton *** //**************************** //**************************** //*** ADDITIONAL DESIGN BY *** //*** Ben Potter *** //*** Chuck Lupher *** //**************************** //**************************** // end; // The room functions. Note that most of these are not // used in SO. You may use Locke's patches to change // room file references to functions, and thus to enable // some of the unused functions below. // (or you can modify the room file yourself) // // Final note: the SO series appeared to be basically a // heavily modified version of the WCP series, resulting // in a lot of useless functions. I have left some of those // (since they are potentially useful), but have removed the // ones most obviously associated with WCP. If you are curious // about what I have removed, just take a look at the WCP // series file. function G_ViewKillboard; begin GF_RunKillboard; end; function G_RunObjectViewer; begin GF_RunObjectViewer; end; 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 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; function G_ViewLocker; begin SYS_PlaySFX(SFX_Prophecy); end; function G_EscapeHatch; begin GF_ExitGame; 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 GF_Exit; 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; 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; 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;