// // MISSION02 - Battle w/ Turanic Raiders // #include "..\\Game\\speechevent.h" #include "..\\Game\\soundmusic.h" LOCALIZATION //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ LSTRING_Savegame "02 - Outskirts of Kharak System" "02 - Périphérie du Système Kharak " "02 - Außenbereich des Kharak-Systems" "02 - Inmediaciones del sistema de Kharak" "02 - Margine esterno del sistema di Kharak" LSTRING_LocationCard "OUTSKIRTS OF KHARAK SYSTEM" "PERIPHERIE DU SYSTEME KHARAK" "AUSSENBEREICH DES KHARAK-SYSTEMS" "INMEDIACIONES DEL SISTEMA DE KHARAK" "MARGINE ESTERNO DEL SISTEMA DI KHARAK" LSTRING_FISendProbeTASKBAR "Send probe to the Khar-Selim" "Lancement sonde vers Khar-Selim" "Sonde zur Khar-Selim schicken." "Enviar sonda a Khar-Selim" "Invia una sonda al Khar-Selim" LSTRING_FISalvageVesselTASKBAR "Salvage the Khar-Selim" "Sauvetage du Khar-Selim" "Die Khar-Selim bergen." "Salvar el Khar-Selim" "Salva il Khar-Selim" LSTRING_FCProtectMothershipTASKBAR "Protect the Mothership" "Protection Vaisseau Mère" "Das Mutterschiff schützen." "Proteger la Nave nodriza" "Proteggi l'Astronave Madre" LSTRING_DefendSalvageTeamTASKBAR "Defend Salvage Team" "Défense Equipe de sauvetage" "Bergungsteam verteidigen." "Defender equipo de salvamento" "Difendi la squadra di recupero" LSTRING_FIDefendMothershipTASKBAR "Defend the Mothership" "Défense Vaisseau Mère" "Das Mutterschiff schützen." "Defender la Nave nodriza" "Difendi l'Astronave Madre" LSTRING_FIInvestigateP1MothershipTASKBAR "Investigate power source" "Expertise alimentation électrique" "Energiequelle untersuchen." "Investigar fuente de energía" "Indaga sulla fonte d'energia" LSTRING_FIDestroyAllP1TASKBAR "Destroy the attacking force" "Destruction forces d'agression" "Angreifer vernichten." "Destruir fuerza atacante" "Distruggi la forza d'attacco" LSTRING_Hyperspace " HYPERSPACE" " HYPERESPACE" " HYPERRAUMSPRUNG" " HIPERESPACIO" " IPERSPAZIO" ENDL //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ //ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ FleetIntel ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ FSM FleetIntel States FCIntro, FIIntro, FCSignalling, FCSignalling2, FISendProbeWaitToLBXIn, FISendProbeLBXIn, FISendProbeLBXIn2, FISendProbeOpenSensors, FISendProbe, FISendProbe2, FISendProbePING, FISendProbeLBXOut, FISendProbeEND, FISendProbeWAITEND, FIReactionToN02, FCUnderAttack, FISalvageVessel, FIReactionToN02Replay, FISalvageKSLBXIn, FISalvageKSLBXIn2, FISalvageKSOpenSensors, FISalvageKS, FISalvageKS2, FISalvageKSWAITEND, FISalvageKSEND, FISCDiedStillNeedData, FIKilledNISTeam, FCMothershipIsOK, FIDefendSalvageTeam, FIDefendSalvageTeam2, FISCDockedSafely, FocusOnKharSelim, WaitOnKharSelim, AllShipsRecording, FIAllShipsRecordingLBXOut, FIDefendMothershipLBXIn, FIDefendMothershipLBXIn2, FIDefendMothershipOpenSensors, FIDefendMothership, FIDefendMothershipPING, FIDefendMothershipLBXOut, FIDefendMothershipWAITEND, FIDefendMothershipEND, FIInvestigateP1Mothership, FISeenP1Mothership, FIDestroyAllP1, FIDestroyAllP12, FIObjectivesComplete, FIObjectivesComplete2, FIDone, FIIdle; INIT Jump FIIdle; // Go immediately to FIIdle ENDINIT WATCH ENDWATCH STATE FCIntro //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT SpeechEvent (M02_Fleet_MadeIt, 0); // We made it. Hyperspace jump complete... //TimerCreateSetStart ("FCIntroENDTimer", 9); ENDINIT WATCH //IF (TimerExpiredDestroy ("FCIntroENDTimer")) IF (IntelEventEnded ()) Jump FIIntro; ENDIF ENDWATCH ENDSTATE FCIntro //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FIIntro //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT IF (VarGet ("G_NISISPlaying") = TRUE) IF (VarGet ("NeverCreateSendProbePingAgain") = FALSE) PingAddPoint (POINT_ServiceVesselPING, "ServiceVesselPING"); // Create the PING for the Service Vessel VarCreateSet ("NeverCreateSendProbePingAgain", TRUE); ENDIF Jump FIIdle; ENDIF SpeechEvent (M02_Intel_MissingScienceVessel, 0); // Yes, the hyperspace module functioned according to specs but where is the Science Vessel? //TimerCreateSetStart ("FCIntroENDTimer", 16); ENDINIT WATCH //IF (TimerExpiredDestroy ("FCIntroENDTimer")) IF (IntelEventEnded ()) Jump FCSignalling; ENDIF IF (VarGet ("G_NISISPlaying") = TRUE) IF (VarGet ("NeverCreateSendProbePingAgain") = FALSE) PingAddPoint (POINT_ServiceVesselPING, "ServiceVesselPING"); // Create the PING for the Service Vessel VarCreateSet ("NeverCreateSendProbePingAgain", TRUE); ENDIF Jump FIIdle; ENDIF ENDWATCH ENDSTATE FIIntro //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FCSignalling //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT IF (VarGet ("G_NISISPlaying") = TRUE) IF (VarGet ("NeverCreateSendProbePingAgain") = FALSE) PingAddPoint (POINT_ServiceVesselPING, "ServiceVesselPING"); // Create the PING for the Service Vessel VarCreateSet ("NeverCreateSendProbePingAgain", TRUE); ENDIF Jump FIIdle; ENDIF SpeechEvent (M02_Fleet_CallingScienceVessel,0); // This is the Mothership calling Service Vessel Khar-Selim. Come in please... //TimerCreateSetStart ("FCSignallingENDTimer" ,16); ENDINIT WATCH //IF (TimerExpiredDestroy ("FCSignallingENDTimer")) IF (IntelEventEnded ()) TimerCreateSetStart ("BeginFISendProbe",1); Jump FIIdle; //Jump FCSignalling2; // TEMPORARY - to get around a bug where this speech event ends twice ENDIF IF (VarGet ("G_NISISPlaying") = TRUE) IF (VarGet ("NeverCreateSendProbePingAgain") = FALSE) PingAddPoint (POINT_ServiceVesselPING, "ServiceVesselPING"); // Create the PING for the Service Vessel VarCreateSet ("NeverCreateSendProbePingAgain", TRUE); ENDIF Jump FIIdle; ENDIF ENDWATCH ENDSTATE FCSignalling //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FCSignalling2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ENDINIT WATCH IF (IntelEventEnded ()) TimerCreateSetStart ("BeginFISendProbe",1); Jump FIIdle; ENDIF ENDWATCH ENDSTATE FCSignalling2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FISendProbeLBXIn //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT // if the NIS starts playing at any time, get outta this FI event IF (VarGet ("G_NISISPlaying") = TRUE) IF (VarGet ("NeverCreateSendProbePingAgain") = FALSE) PingAddPoint (POINT_ServiceVesselPING, "ServiceVesselPING"); // Create the PING for the Service Vessel VarCreateSet ("NeverCreateSendProbePingAgain", TRUE); ENDIF Jump FISendProbeEND; ENDIF PauseOtherKAS(); wideScreenIn(90); // letterbox bars fade in over 3 seconds Jump FISendProbeOpenSensors; ENDINIT WATCH // if the NIS starts playing at any time, get outta this FI event IF (VarGet ("G_NISISPlaying") = TRUE) IF (VarGet ("NeverCreateSendProbePingAgain") = FALSE) PingAddPoint (POINT_ServiceVesselPING, "ServiceVesselPING"); // Create the PING for the Service Vessel VarCreateSet ("NeverCreateSendProbePingAgain", TRUE); ENDIF wideScreenOut (30); // player pressed SPACE or ESC and wants out immediately so remove the LBX in 1 second Jump FISendProbeEND; ENDIF ENDWATCH ENDSTATE FISendProbeLBXIn //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FISendProbeLBXIn2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT PauseOtherKAS (); wideScreenIn(30); // letterbox bars fade in over 1 second TimerCreateSetStart ("WideScreenTimer", 2); ENDINIT WATCH IF (TimerExpiredDestroy ("WideScreenTimer")) OpenSensors (TRUE); PauseUniverse(); Jump FISendProbe; ENDIF ENDWATCH ENDSTATE FISendProbeLBXIn2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FISendProbeOpenSensors //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT TimerCreateSetStart ("FIOpenSensorsTimer", 4); ENDINIT WATCH IF (TimerExpiredDestroy ("FIOpenSensorsTimer")) OpenSensors (TRUE); PauseUniverse(); Jump FISendProbe; ENDIF // if the NIS starts playing at any time, get outta this FI event IF (VarGet ("G_NISISPlaying") = TRUE) IF (VarGet ("NeverCreateSendProbePingAgain") = FALSE) PingAddPoint (POINT_ServiceVesselPING, "ServiceVesselPING"); // Create the PING for the Service Vessel VarCreateSet ("NeverCreateSendProbePingAgain", TRUE); ENDIF wideScreenOut (30); // player pressed SPACE or ESC and wants out immediately so remove the LBX in 1 second Jump FISendProbeEND; ENDIF ENDWATCH ENDSTATE FISendProbeOpenSensors //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FISendProbe //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT TimerCreateSetStart ("FISendProbeTimer", 1); ENDINIT WATCH // FLEET INTEL event for sending the probe IF (TimerExpiredDestroy ("FISendProbeTimer")) Jump FISendProbe2; ENDIF // if the NIS starts playing at any time, get outta this FI event IF (VarGet ("G_NISISPlaying") = TRUE) IF (VarGet ("NeverCreateSendProbePingAgain") = FALSE) PingAddPoint (POINT_ServiceVesselPING, "ServiceVesselPING"); // Create the PING for the Service Vessel VarCreateSet ("NeverCreateSendProbePingAgain", TRUE); ENDIF wideScreenOut (30); // player pressed SPACE or ESC and wants out immediately so remove the LBX in 1 second Jump FISendProbeEND; ENDIF ENDWATCH ENDSTATE FISendProbe //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FISendProbe2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT SpeechEvent (M02_Intel_PickedUpBeacon,0); // Priority Alert. We have picked up an automated beacon from the Khar-Selim... TimerCreateSetStart ("FISendProbePINGTimer", 3); IFONCE (TRUE) VarCreateSet ("G_FleetIntelIntroHasPlayed", TRUE); // Tells other parts of the script to do stuff (create the objectives) ENDIFONCE ENDINIT WATCH VarDestroy ("IntelEvent"); VarCreateSet("IntelEvent", IntelEventEnded()); IF (VarGet("IntelEvent") = 2) IF (VarGet ("NeverCreateSendProbePingAgain") = FALSE) PingAddPoint (POINT_ServiceVesselPING, "ServiceVesselPING"); // Create the PING for the Service Vessel VarCreateSet ("NeverCreateSendProbePingAgain", TRUE); ENDIF wideScreenOut (30); // player pressed SPACE or ESC and wants out immediately so remove the LBX in 1 second Jump FISendProbeEND; ELSEIF (VarGet("IntelEvent")) Jump FISendProbePING; ENDIF IF (TimerExpiredDestroy ("FISendProbePINGTimer")) SoundEvent (267); // Play the movement chime when the pointer is drawn IF (VarGet ("NeverCreateSendProbePingAgain") = FALSE) PingAddPoint (POINT_ServiceVesselPING, "ServiceVesselPING"); // Create the PING for the Service Vessel VarCreateSet ("NeverCreateSendProbePingAgain", TRUE); ENDIF TutSetTextDisplayBoxToSubtitleRegion(); TutSetPointerTargetAIVolume("ServiceVesselPOINTER", VOLUME_SCVolume); //Jump FISendProbeLBXOut; ENDIF // if the NIS starts playing at any time, get outta this FI event IF (VarGet ("G_NISISPlaying") = TRUE) IF (VarGet ("NeverCreateSendProbePingAgain") = FALSE) PingAddPoint (POINT_ServiceVesselPING, "ServiceVesselPING"); // Create the PING for the Service Vessel VarCreateSet ("NeverCreateSendProbePingAgain", TRUE); ENDIF wideScreenOut (30); // player pressed SPACE or ESC and wants out immediately so remove the LBX in 1 second Jump FISendProbeEND; ENDIF ENDWATCH ENDSTATE FISendProbe2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FISendProbePING //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT SpeechEvent (M02_Intel_SendProbe,0); // Send a probe to make contact and re-establish communications. ENDINIT WATCH VarDestroy ("IntelEvent"); VarCreateSet("IntelEvent", IntelEventEnded()); IF (VarGet("IntelEvent") = 2) wideScreenOut (30); // player pressed SPACE or ESC and wants out immediately so remove the LBX in 1 second Jump FISendProbeEND; ELSEIF (VarGet("IntelEvent")) Jump FISendProbeWAITEND; ENDIF // if the NIS starts playing at any time, get outta this FI event IF (VarGet ("G_NISISPlaying") = TRUE) IF (VarGet ("NeverCreateSendProbePingAgain") = FALSE) PingAddPoint (POINT_ServiceVesselPING, "ServiceVesselPING"); // Create the PING for the Service Vessel VarCreateSet ("NeverCreateSendProbePingAgain", TRUE); ENDIF wideScreenOut (30); // player pressed SPACE or ESC and wants out immediately so remove the LBX in 1 second Jump FISendProbeEND; ENDIF ENDWATCH ENDSTATE FISendProbePING //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FISendProbeLBXOut //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT //TimerCreateSetStart ("FISendProbeLBXOutTimer", 10); ENDINIT WATCH //IF (TimerExpiredDestroy ("FISendProbeLBXOutTimer")) IF (IntelEventEnded()) wideScreenOut(90); // letterbox bars fade out over 5 seconds Jump FISendProbeWAITEND; ENDIF IF (IntelEventEnded() = 2) wideScreenOut (30); // player pressed SPACE or ESC and wants out immediately so remove the LBX in 1 second Jump FISendProbeEND; ENDIF ENDWATCH ENDSTATE FISendProbeLBXOut //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FISendProbeWAITEND //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT TimerCreateSetStart ("FISendProbeENDTimer", 3); ENDINIT WATCH VarDestroy ("IntelEvent"); VarCreateSet("IntelEvent", IntelEventEnded()); IF (VarGet("IntelEvent") = 2) wideScreenOut (30); // player pressed SPACE or ESC and wants out immediately so remove the LBX in 1 second Jump FISendProbeEND; ENDIF IF (TimerExpiredDestroy ("FISendProbeENDTimer")) wideScreenOut (30); Jump FISendProbeEND; ENDIF // if the NIS starts playing at any time, get outta this FI event IF (VarGet ("G_NISISPlaying") = TRUE) IF (VarGet ("NeverCreateSendProbePingAgain") = FALSE) PingAddPoint (POINT_ServiceVesselPING, "ServiceVesselPING"); // Create the PING for the Service Vessel VarCreateSet ("NeverCreateSendProbePingAgain", TRUE); ENDIF wideScreenOut (30); // player pressed SPACE or ESC and wants out immediately so remove the LBX in 1 second Jump FISendProbeEND; ENDIF ENDWATCH ENDSTATE FISendProbeWAITEND //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FISendProbeEND //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT TutRemoveAllPointers (); UnpauseUniverse(); UnpauseOtherKAS(); CloseSensors (TRUE); VarDestroy("G_CLICK_SendProbe"); Jump FIIdle; ENDINIT WATCH ENDWATCH ENDSTATE FISendProbeEND //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ //STATE FIReactionToN02 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ // INIT // SpeechEvent (M02_Intel_ScienceVesselDestroyed,0); // The Khar-Selim has been destroyed. Heavy weapon damage is visible on the remaining fragment. A Salvage Corvette must be sent to retrieve the mission data recorder. // IF (VarGet ("NeverCreateSendProbePingAgain") = FALSE) // PingAddPoint (POINT_ServiceVesselPING, "ServiceVesselPING"); // Create the PING for the Service Vessel IF the original ping never got set // VarCreateSet ("NeverCreateSendProbePingAgain", TRUE); // ENDIF // //TimerCreateSetStart ("FIReactionToN02ENDTimer", 11); // ENDINIT // WATCH // //IF (TimerExpiredDestroy ("FIReactionToN02ENDTimer")) // IF (IntelEventEnded ()) // IFONCE (TRUE) // VarCreateSet ("G_FIReactionToN02HasPlayed", TRUE); // ENDIFONCE // Jump FCUnderAttack; // ENDIF // ENDWATCH //ENDSTATE FIReactionToN02 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FCUnderAttack //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT IFONCE (TRUE) PingRemove ("ServiceVesselPING"); // Remove the PING that was put there when you had to send the probe ENDIFONCE SpeechEvent (M02_Fleet_MothershipUnderAttack,0); // They're attacking?!. . . I'm under attack! The Mothership is under attack!! //TimerCreateSetStart ("FCUnderAttackENDTimer", 11); ENDINIT WATCH //IF (TimerExpiredDestroy ("FCUnderAttackENDTimer")) IF (IntelEventEnded ()) Jump FISalvageVessel; ENDIF ENDWATCH ENDSTATE FCUnderAttack //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FISalvageVessel //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT SpeechEvent (M02_Intel_DefendMothership,0); // Engage incoming units. The Mothership must be defended. //TimerCreateSetStart ("FISalvageVesselENDTimer", 13); ENDINIT WATCH //IF (TimerExpiredDestroy ("FISalvageVesselENDTimer")) IF (IntelEventEnded ()) IFONCE (TRUE) VarCreateSet ("G_FIProtectMothershipHasPlayed", TRUE); ENDIFONCE VarDestroy("G_CLICK_ProtectMothership"); Jump FIIdle; ENDIF ENDWATCH ENDSTATE FISalvageVessel //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ //STATE FIReactionToN02Replay //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ // INIT // SpeechEvent (M02_Intel_ScienceVesselDestroyed,0); // The Khar-Selim has been destroyed. Analysis indicates burns and hull ruptures consistent... // //TimerCreateSetStart ("FIReactionToN02ENDTimer", 11); // ENDINIT // WATCH // //IF (TimerExpiredDestroy ("FIReactionToN02ENDTimer")) // IF (IntelEventEnded ()) // VarDestroy("G_CLICK_SalvageVessel"); // Jump FIIdle; // ENDIF // ENDWATCH //ENDSTATE FIReactionToN02Replay //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FISalvageKSLBXIn //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT PauseOtherKAS(); wideScreenIn(90); // letterbox bars fade in over 3 seconds Jump FISalvageKSOpenSensors; ENDINIT WATCH ENDWATCH ENDSTATE FISalvageKSLBXIn //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FISalvageKSLBXIn2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT PauseOtherKAS (); wideScreenIn(30); // letterbox bars fade in over 1 second TimerCreateSetStart ("WideScreenTimer", 2); ENDINIT WATCH IF (TimerExpiredDestroy ("WideScreenTimer")) OpenSensors (TRUE); PauseUniverse(); Jump FISalvageKS; ENDIF ENDWATCH ENDSTATE FISalvageKSLBXIn2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FISalvageKSOpenSensors //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT TimerCreateSetStart ("FIOpenSensorsTimer", 4); // 3 seconds for the LBX bars to come in, then wait 1 more second ENDINIT WATCH IF (TimerExpiredDestroy ("FIOpenSensorsTimer")) OpenSensors (TRUE); PauseUniverse(); Jump FISalvageKS; ENDIF ENDWATCH ENDSTATE FISalvageKSOpenSensors //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FISalvageKS //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT TimerCreateSetStart ("FISalvageKSTimer", 1); // wait 1 seconds in the SM before starting to talk ENDINIT WATCH // FLEET INTEL event for sending the probe IF (TimerExpiredDestroy ("FISalvageKSTimer")) Jump FISalvageKS2; ENDIF ENDWATCH ENDSTATE FISalvageKS //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FISalvageKS2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT SpeechEvent (M02_Intel_ScienceVesselDestroyed,0); // The Khar-Selim has been destroyed. Analysis indicates burns and hull ruptures consistent... TimerCreateSetStart ("FISalvageKSPINGTimer", 3); IFONCE (TRUE) VarCreateSet ("G_FIReactionToN02HasPlayed", TRUE); ENDIFONCE ENDINIT WATCH VarDestroy ("IntelEvent"); VarCreateSet("IntelEvent", IntelEventEnded()); IF (VarGet("IntelEvent") = 2) IF (VarGet ("NeverCreateSalvageKSPingAgain") = FALSE) PingAddPoint (POINT_ServiceVesselPING, "ServiceVesselPING"); // Create the PING for the Service Vessel VarCreateSet ("NeverCreateSalvageKSPingAgain", TRUE); ENDIF wideScreenOut (30); // player pressed SPACE or ESC and wants out immediately so remove the LBX in 1 second Jump FISalvageKSEND; ELSEIF (VarGet("IntelEvent")) Jump FISalvageKSWAITEND; ENDIF IF (TimerExpiredDestroy ("FISalvageKSPINGTimer")) SoundEvent (267); // Play the movement chime when the pointer is drawn IF (VarGet ("NeverCreateSalvageKSPingAgain") = FALSE) PingAddPoint (POINT_ServiceVesselPING, "ServiceVesselPING"); // Create the PING for the Service Vessel VarCreateSet ("NeverCreateSalvageKSPingAgain", TRUE); ENDIF TutSetTextDisplayBoxToSubtitleRegion(); TutSetPointerTargetAIVolume("ServiceVesselPOINTER", VOLUME_SCVolume); //Jump FISalvageKSLBXOut; ENDIF ENDWATCH ENDSTATE FISalvageKS2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FISalvageKSWAITEND //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT TimerCreateSetStart ("FISalvageKSENDTimer", 2); ENDINIT WATCH VarDestroy ("IntelEvent"); VarCreateSet("IntelEvent", IntelEventEnded()); IF (VarGet("IntelEvent") = 2) wideScreenOut (30); // player pressed SPACE or ESC and wants out immediately so remove the LBX in 1 second Jump FISalvageKSEND; ENDIF IF (TimerExpiredDestroy ("FISalvageKSENDTimer")) wideScreenOut (30); Jump FISalvageKSEND; ENDIF ENDWATCH ENDSTATE FISalvageKSWAITEND //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FISalvageKSEND //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT TutRemoveAllPointers (); UnpauseUniverse(); UnpauseOtherKAS(); CloseSensors (TRUE); VarDestroy("G_CLICK_SalvageVessel"); Jump FIIdle; ENDINIT WATCH ENDWATCH ENDSTATE FISalvageKSEND //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FISCDiedStillNeedData //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT SpeechEvent (M02_Intel_SalCorDestroyed,0); // Salvage Corvette has been destroyed. Recommend use of an escort force for the next SalCor. We need those records. //TimerCreateSetStart ("FISCDiedStillNeedDataENDTimer", 12); ENDINIT WATCH //IF (TimerExpiredDestroy ("FISCDiedStillNeedDataENDTimer")) IF (IntelEventEnded ()) Jump FIIdle; ENDIF ENDWATCH ENDSTATE FISCDiedStillNeedData //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FIKilledNISTeam //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT SpeechEvent (M02_Intel_EnemyDestroyed,0); // Hostile units destroyed. Threat eliminated. //TimerCreateSetStart ("FIKilledNISTeamENDTimer", 4); ENDINIT WATCH //IF (TimerExpiredDestroy ("FIKilledNISTeamENDTimer")) IF (IntelEventEnded ()) Jump FCMothershipIsOK; ENDIF ENDWATCH ENDSTATE FIKilledNISTeam //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FCMothershipIsOK //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT SpeechEvent (M02_Fleet_MinorDamage,0); // Mothership sustained minor hull damage. Repairs are underway. //TimerCreateSetStart ("FCMothershipIsOKENDTimer", 4); ENDINIT WATCH //IF (TimerExpiredDestroy ("FCMothershipIsOKENDTimer")) IFONCE (TRUE) VarCreateSet ("G_PlayerHasFinishedACT1", TRUE); ENDIFONCE IF (IntelEventEnded ()) Jump FIIdle; ENDIF ENDWATCH ENDSTATE FCMothershipIsOK //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FIDefendSalvageTeam //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT SpeechEvent (M02_Intel_MoreEnemies,0); // Priority Alert! Additional hostile units detected on an intercept course... //TimerCreateSetStart ("FIDefendSalvageTeamENDTimer", 14); ENDINIT WATCH //IF (TimerExpiredDestroy ("FIDefendSalvageTeamENDTimer")) IF (IntelEventEnded ()) IFONCE (TRUE) MusicPlay (B02_TuranicRaidersShort); ENDIFONCE Jump FIDefendSalvageTeam2; ENDIF ENDWATCH ENDSTATE FIDefendSalvageTeam //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FIDefendSalvageTeam2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT SpeechEvent (M02_Intel_ProtectSalvageTeam,0); // Protection of the Salvage team is a primary Objective. It must return to Mothership with the mission recorder. We need that data. ENDINIT WATCH IF (IntelEventEnded ()) VarDestroy("G_CLICK_DefendSalvageTeam"); Jump FIIdle; ENDIF ENDWATCH ENDSTATE FIDefendSalvageTeam2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FISCDockedSafely //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT IFONCE (TRUE) //MusicStop (4); ENDIFONCE SpeechEvent (M02_Intel_SalvageDocked,0); // Salvage Team docked safely. Downloading Mission Data Recording. Replaying last entry: ENDINIT WATCH IF (IntelEventEnded ()) Jump FocusOnKharSelim; ENDIF ENDWATCH ENDSTATE FISCDockedSafely //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FocusOnKharSelim //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT wideScreenIn (90); // Wide screen in over 3 seconds TimerCreateSetStart ("FocusOnKharSelimTimer", 4); // Then hold it for 1 more ENDINIT WATCH IF (TimerExpiredDestroy ("FocusOnKharSelimTimer")) SoundEvent(262); TutCameraFocusDerelictType ("Shipwreck"); TutCameraFocusDerelictType ("Shipwreck"); Jump WaitOnKharSelim; ENDIF ENDWATCH ENDSTATE FocusOnKharSelim //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE WaitOnKharSelim //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT TimerCreateSetStart ("WaitOnKharSelimTimer", 1); // Hold on the Khar-selim for a second before starting the dialogue ENDINIT WATCH IF (TimerExpiredDestroy ("WaitOnKharSelimTimer")) Jump AllShipsRecording; ENDIF // if the player goes into any fullscreen GUI, remove the letterbox bars instantly // if the player changes focus, remove the letterbox bars in 60 frames (2 seconds) ENDWATCH ENDSTATE WaitOnKharSelim //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE AllShipsRecording //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT FindEnemiesInside (VOLUME_MothershipSphere, SHIPS_AllShipsRecordingSHIPS, 100); ShipsSelectClass (SHIPS_Mothership99SHIPS, SHIPS_AllShipsRecordingSHIPS, "CLASS_Mothership"); VarCreateSet ("G_MOTHERSHIP99SHIPS", ShipsCount (SHIPS_Mothership99SHIPS)); // for debuggin' SpeechEvent (M02_All_ScienceVesselAttacked, 0); // -t do you mean you detect a Hyperspace entry?! The mothership isn't due for-... TimerCreateSetStart ("G_ACT3Timer", 35); TutResetGameMessageQueue(); ENDINIT WATCH IF (IntelEventEnded ()) //wideScreenOut (30); IF (VarGet ("G_P1MothershipHasRetreated") = FALSE) TimerCreateSetStart ("PlayEnemyUnitsAdvancing", 15); ENDIF IF (VarGet ("PlayerChangedFocus") = FALSE) Jump FIAllShipsRecordingLBXOut; ELSE Jump FIIdle; ENDIF ENDIF // if the player cancels focus before the speech is finished, remove the letterbox in 60 frames (2 seconds) IF (TutGameSentMessage ("Game_BandBoxFocus,Game_ClickFocus,KB_FocusMothership,KB_CancelFocus,KB_Focus,KB_Sensors,TB_SensorsManager")) //Print ("TESTING 1 2 3 TESTING"); IF (VarGet ("PlayerChangedFocus") = FALSE) WideScreenOut (60); VarCreateSet ("PlayerChangedFocus", TRUE); ENDIF ENDIF ENDWATCH ENDSTATE AllShipsRecording //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FIAllShipsRecordingLBXOut //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT TimerCreateSetStart ("G_GoBackToPreviousFocus", 1); TimerCreateSetStart ("G_StartUnLetterbox", 2); TimerCreateSetStart ("G_WaitForLBXOutToFinish", 4); ENDINIT WATCH IF (TimerExpiredDestroy ("G_GoBackToPreviousFocus")) IF (VarGet ("PlayerChangedFocus") = FALSE) SoundEvent(262); TutCameraFocusCancel(); ENDIF ENDIF IF (TimerExpiredDestroy ("G_StartUnLetterbox")) IF (VarGet ("PlayerChangedFocus") = FALSE) WideScreenOut (60); VarCreateSet ("PlayerChangedFocus", TRUE); ENDIF ENDIF IF (TimerExpiredDestroy ("G_WaitForLBXOutToFinish")) Jump FIIdle; ENDIF ENDWATCH ENDSTATE FIAllShipsRecordingLBXOut //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FIDefendMothershipLBXIn //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT PauseOtherKAS(); wideScreenIn(90); // letterbox bars fade in over 3 seconds Jump FIDefendMothershipOpenSensors; ENDINIT WATCH ENDWATCH ENDSTATE FIDefendMothershipLBXIn //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FIDefendMothershipLBXIn2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT PauseOtherKAS (); wideScreenIn(30); // letterbox bars fade in over 1 second TimerCreateSetStart ("WideScreenTimer", 2); ENDINIT WATCH IF (TimerExpiredDestroy ("WideScreenTimer")) OpenSensors (TRUE); PauseUniverse(); Jump FIDefendMothership; ENDIF ENDWATCH ENDSTATE FIDefendMothershipLBXIn2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FIDefendMothershipOpenSensors //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT TimerCreateSetStart ("FIOpenSensorsTimer", 4); ENDINIT WATCH IF (TimerExpiredDestroy ("FIOpenSensorsTimer")) OpenSensors (TRUE); PauseUniverse(); Jump FIDefendMothership; ENDIF ENDWATCH ENDSTATE FIDefendMothershipOpenSensors //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FIDefendMothership //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT TimerCreateSetStart ("FIDefendMothershipTimer", 1); ENDINIT WATCH // FLEET INTEL event for defending the mothership agains the advancing enemy units IF (TimerExpiredDestroy ("FIDefendMothershipTimer")) IFONCE (TRUE) MusicPlay (B01_TuranicRaidersLong); ENDIFONCE Jump FIDefendMothershipPING; ENDIF ENDWATCH ENDSTATE FIDefendMothership //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FIDefendMothershipPING //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT SpeechEvent (M02_10_Intel_DefendMoShipAgain,0); // We are detecting enemy units advancing on our position. Organize a defense force to protect the Mothership. //SoundEvent (271); // Play a sound event to notify the player that a subtitle is up //SubtitleSimulate(4, 10000, LSTRING_FIDefendMothership); TimerCreateSetStart ("FIDefendMothershipPINGTimer", 1); ENDINIT WATCH VarDestroy ("IntelEvent"); VarCreateSet("IntelEvent", IntelEventEnded()); IF (VarGet("IntelEvent") = 2) IF (VarGet ("NeverCreateDefendPingAgain") = FALSE) PingAddShips (TEAMSHIPS_ACT3Fighters, "ACT3FightersPING"); PingAddShips (TEAMSHIPS_ACT3Corvettes1, "ACT3Corvettes1PING"); VarCreateSet ("NeverCreateDefendPingAgain", TRUE); ENDIF wideScreenOut (30); // player pressed SPACE or ESC and wants out immediately so remove the LBX in 1 second Jump FIDefendMothershipEND; ELSEIF (VarGet("IntelEvent")) Jump FIDefendMothershipWAITEND; ENDIF IF (TimerExpiredDestroy ("FIDefendMothershipPINGTimer")) SoundEvent (267); // Play the movement chime when the pointer is drawn IF (VarGet ("NeverCreateDefendPingAgain") = FALSE) PingAddShips (TEAMSHIPS_ACT3Fighters, "ACT3FightersPING"); PingAddShips (TEAMSHIPS_ACT3Corvettes1, "ACT3Corvettes1PING"); VarCreateSet ("NeverCreateDefendPingAgain", TRUE); ENDIF TutRemoveAllPointers (); TutRemoveAllPointers (); TutRemoveAllPointers (); TutSetTextDisplayBoxToSubtitleRegion(); //TutSetPointerTargetAIVolume("EnemyAdvancingPOINTER", VOLUME_EnemyAdvancingPOINTER); TutSetPointerTargetShipSelection ("ACT3FightersPOINTER", TEAMSHIPS_ACT3Fighters); // Uncomment these when Luke draws them in the SM TutSetPointerTargetShipSelection ("ACT3Corvettes1POINTER", TEAMSHIPS_ACT3Corvettes1); // Uncomment these when Luke draws them in the SM //Jump FIDefendMothershipLBXOut; ENDIF ENDWATCH ENDSTATE FIDefendMothershipPING //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FIDefendMothershipLBXOut //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT TimerCreateSetStart ("FIDefendMothershipLBXOutTimer", 10); ENDINIT WATCH IF (TimerExpiredDestroy ("FIDefendMothershipLBXOutTimer")) wideScreenOut(150); // letterbox bars fade out over 5 seconds Jump FIDefendMothershipEND; ENDIF IF (IntelEventEnded()) wideScreenOut (30); // player pressed SPACE or ESC and wants out immediately so remove the LBX in 1 second Jump FIDefendMothershipEND; ENDIF ENDWATCH ENDSTATE FIDefendMothershipLBXOut //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FIDefendMothershipWAITEND //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT TimerCreateSetStart ("FIDefendMothershipENDTimer", 3); ENDINIT WATCH VarDestroy ("IntelEvent"); VarCreateSet("IntelEvent", IntelEventEnded()); IF (VarGet("IntelEvent") = 2) wideScreenOut (30); // player pressed SPACE or ESC and wants out immediately so remove the LBX in 1 second Jump FIDefendMothershipEND; ENDIF IF (TimerExpiredDestroy ("FIDefendMothershipENDTimer")) wideScreenOut (30); // player pressed SPACE or ESC and wants out immediately so remove the LBX in 1 second Jump FIDefendMothershipEND; ENDIF ENDWATCH ENDSTATE FIDefendMothershipWAITEND //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FIDefendMothershipEND //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT TutRemoveAllPointers (); TutRemoveAllPointers (); TutRemoveAllPointers (); UnpauseUniverse(); UnpauseOtherKAS (); CloseSensors (TRUE); VarDestroy("G_CLICK_DefendMothership"); IFONCE (TRUE) VarCreateSet ("G_EnemyUnitsAdvancing", TRUE); TimerCreateSetStart ("G_PlayDetectedPowerSignature", 110); ENDIFONCE Jump FIIdle; ENDINIT WATCH ENDWATCH ENDSTATE FIDefendMothershipEND //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FIInvestigateP1Mothership //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT SpeechEvent (M02_11_Intel_InvestigatePowerSource,0); //SoundEvent (271); // Play a sound event to notify the player that a subtitle is up //SubtitleSimulate(4, 10000, LSTRING_FIInvestigateP1Mothership); IFONCE (TRUE) PingRemove ("ACT3FightersPING"); PingRemove ("ACT3Corvettes1PING"); PingAddShips (TEAMSHIPS_P1Mothership, "P1MothershipPING"); VarCreateSet ("G_InvestigateP1Mothership", TRUE); ENDIFONCE //TimerCreateSetStart ("FIInvestigateP1ENDTimer", 6); ENDINIT WATCH //IF (TimerExpiredDestroy ("FIInvestigateP1ENDTimer")) IF (IntelEventEnded ()) VarDestroy("G_CLICK_InvestigateP1Mothership"); Jump FIIdle; ENDIF ENDWATCH ENDSTATE FIInvestigateP1Mothership //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FISeenP1Mothership //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT SpeechEvent (M02_12_Intel_EnemyCarrier,0); //SoundEvent (271); // Play a sound event to notify the player that a subtitle is up //SubtitleSimulate(4, 10000, LSTRING_FISeenP1Mothership); IFONCE (TRUE) PingRemove ("P1MothershipPING"); ENDIFONCE //TimerCreateSetStart ("FISeenP1MothershipENDTimer", 6); ENDINIT WATCH //IF (TimerExpiredDestroy ("FISeenP1MothershipENDTimer")) IF (IntelEventEnded ()) Jump FIIdle; ENDIF ENDWATCH ENDSTATE FISeenP1Mothership //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FIDestroyAllP1 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT SpeechEvent (M02_Intel_EnemyInferior2,0); // We have determined that these enemy units are inferior to ours. //SoundEvent (271); // Play a sound event to notify the player that a subtitle is up //SubtitleSimulate(4, 10000, LSTRING_FIDestroyAllP1); ENDINIT WATCH IF (IntelEventEnded ()) Jump FIDestroyAllP12; ENDIF ENDWATCH ENDSTATE FIDestroyAllP1 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FIDestroyAllP12 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT //SpeechEvent (M02_13_Intel_DestroyAllP1,0); // Commander, this race is clearly hostile. We can't allow them to secure a position in our system. I recommend that we destroy the force completely. SpeechEvent (M02_Intel_DestroyCompletely,0); // To protect against penetration of the Kharak system, destroy the attacking force completely. //SoundEvent (271); // Play a sound event to notify the player that a subtitle is up //SubtitleSimulate(4, 10000, LSTRING_FIDestroyAllP1); ENDINIT WATCH IF (IntelEventEnded ()) VarDestroy("G_CLICK_DestroyAllP1"); Jump FIIdle; ENDIF ENDWATCH ENDSTATE FIDestroyAllP12 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FIObjectivesComplete //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT SpeechEvent (M02_Intel_ObjectivesComplete,0); // Enemy units are retreating. Objectives complete. Standby for immediate return to Kharak. IFONCE (TRUE) //MusicStop (4); ENDIFONCE ENDINIT WATCH IF (IntelEventEnded ()) IFONCE (TRUE) ObjectiveCreate ("Hyperspace", LSTRING_Hyperspace, LSTRING_Hyperspace); ENDIFONCE Jump FIDone; ENDIF ENDWATCH ENDSTATE FIObjectivesComplete //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FIObjectivesComplete2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT SpeechEvent (M02_Intel_ObjectivesCompleteSHORT,0); // // Objectives complete. Standby for immediate return to Kharak. //IFONCE (TRUE) // MusicStop (4); //ENDIFONCE ENDINIT WATCH IF (IntelEventEnded ()) IFONCE (TRUE) ObjectiveCreate ("Hyperspace", LSTRING_Hyperspace, LSTRING_Hyperspace); ENDIFONCE Jump FIDone; ENDIF ENDWATCH ENDSTATE FIObjectivesComplete2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FIDone //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ENDINIT WATCH ENDWATCH ENDSTATE FIDone //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE FIIdle //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ENDINIT WATCH // FIRST TIME watches // when timer is up, Fleet Command talks about the jump IF (TimerExpiredDestroy ("G_FCHyperspaceSuccessful")) Jump FCIntro; ENDIF // when Fleet Command is done signalling the vessel, play the FLEET INTEL event to send the probe IF ( (VarGet ("G_NISISPlaying") = FALSE) AND (TimerExpiredDestroy ("BeginFISendProbe")) ) Jump FISendProbeLBXIn; ENDIF // When timer is up, play the Fleet Intel (reaction to NO2) IF ( (VarGet ("G_Nis2Complete")) AND (TimerExpiredDestroy ("G_PostNISEventTimer")) ) MusicPlay (B02_TuranicRaidersShort); //Jump FIReactionToN02; Jump FCUnderAttack; ENDIF // When timer is up, play the Fleet Intel (reaction to NO2) IFONCE (VarGet ("G_PlayKharSelimDestroyed") = TRUE) Jump FISalvageKSLBXIn; ENDIFONCE // if the Salvage Corvette which stripped the Khar-Selim is KILLED, set a timer to let the player know they still need to get the data IF ( (VarGet ("G_TechRemoved") = 100) AND (ShipsCount (SHIPS_SCsReturning) = 0) AND (TimerExpiredDestroy ("G_PlaySCDiedStillNeedDataEvent")) ) VarSet ("G_TechRemoved", 0); VarDestroy ("PlaySCDeadEventOnce"); Jump FISCDiedStillNeedData; ENDIF // when the player has killed off the NISTeam, Fleet Intel says something about the success IFONCE (VarGet ("G_NISTeamKilled") = TRUE) Jump FIKilledNISTeam; ENDIFONCE // After the Dogged Fighter is well on its way, the "Defend Salvage Team" objective is created. Here's the FI event for it: IFONCE ( (VarGet ("G_DefendSalvageTeamCreated") = TRUE) AND (VarGet ("G_P1MothershipHasRetreated") = FALSE) ) Jump FIDefendSalvageTeam; ENDIFONCE // if the SC with the info docks successfully with the Mothership, start an in-game event: IFONCE (VarGet ("G_SCDockedWithInfo") = TRUE) Jump FISCDockedSafely; ENDIFONCE // After the recording has played, and when a timer is up, play a message telling you that enemy units are advancing IFONCE (TimerExpiredDestroy ("PlayEnemyUnitsAdvancing")) Jump FIDefendMothershipLBXIn; ENDIFONCE // a while after the enemy units advance, AND if the player hasn't discovered the P1Mothership, play message about detecting its power signature IFONCE ( (VarGet ("G_PlayerHasSeenP1Mothership") = FALSE) AND (TimerExpiredDestroy ("G_PlayDetectedPowerSignature")) ) Jump FIInvestigateP1Mothership; ENDIFONCE // if the player finds the P1Mothership before Fleet Intel detects the power signature, play the discovered event right away IFONCE (VarGet ("G_PlayerHasSeenP1Mothership") = TRUE) Jump FISeenP1Mothership; ENDIFONCE // when the player kills enough P1 ships, get the message that they should kill them all IFONCE (VarGet ("G_PlayerHasKilledEnoughP1") = TRUE) Jump FIDestroyAllP1; ENDIFONCE // when the timer is up, tell the player that the enemies have retreated, the objectives are complete, and they may hyperspace IFONCE (TimerExpiredDestroy ("G_WaitToPlayFinalEvent")) Jump FIObjectivesComplete; ENDIFONCE // if the player makes the Mothership retreat but has completed all the other objectives, play the objectives complete event IFONCE (TimerExpiredDestroy ("G_PlayNormalObjectivesComplete")) Jump FIObjectivesComplete2; ENDIFONCE // REPLAYING event watches // FLEET INTEL event - send probe to Khar-Selim IF (VarGet ("G_CLICK_SendProbe")) Jump FISendProbeLBXIn2; ENDIF // FLEET INTEL event - salvage the Khar-Selim IF (VarGet ("G_CLICK_SalvageVessel")) Jump FISalvageKSLBXIn2; ENDIF // FLEET INTEL event - protect the Mothership IF (VarGet ("G_CLICK_ProtectMothership")) Jump FISalvageVessel; ENDIF // FLEET INTEL event - protect the mothership and salvage the Khar-Selim IF (VarGet ("G_CLICK_DefendSalvageTeam")) Jump FIDefendSalvageTeam2; ENDIF // FLEET INTEL event - defend the mothership against advancing enemy units IF (VarGet ("G_CLICK_DefendMothership")) Jump FIDefendMothershipLBXIn2; ENDIF // FLEET INTEL event - investigate P1 mothership IF (VarGet ("G_CLICK_InvestigateP1Mothership")) Jump FIInvestigateP1Mothership; ENDIF // FLEET INTEL event - destroy all attackers IF (VarGet ("G_CLICK_DestroyAllP1")) Jump FIDestroyAllP12; ENDIF ENDWATCH ENDSTATE FIIdle //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ENDFSM FleetIntel //ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ FleetIntel ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ //ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ NISTeamFighter ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ FSM NISTeamFighter States AttackMothership, Attack, WatchAttack, DockForGood, BugginOut, NullState; INIT JUMP AttackMothership; ENDINIT WATCH IF (FindEnemiesInside (VOLUME_MothershipSphere, SHIPS_EntireFleet, 100)) ShipsSelectClass (SHIPS_Fighter, SHIPS_EntireFleet, "CLASS_Fighter"); ShipsSelectClass (SHIPS_Corvette, SHIPS_EntireFleet, "CLASS_Corvette"); ShipsSelectType (SHIPS_PlayerSalCaps, SHIPS_EntireFleet, "SalCapCorvette"); ShipsRemove (SHIPS_Corvette, SHIPS_PlayerSalCaps); ShipsSelectClass (SHIPS_Resource, SHIPS_EntireFleet, "CLASS_Resource"); ShipsSelectType (SHIPS_Research, SHIPS_EntireFleet, "ResearchShip"); ShipsSelectClass (SHIPS_Mothership, SHIPS_EntireFleet, "CLASS_Mothership"); //VarCreateSet ("G_NISTeamMothershipSHIPS", ShipsCount (SHIPS_Mothership)); // All these for debuggin' //VarCreateSet ("G_NISTeamEntireFleetSHIPS", ShipsCount (SHIPS_EntireFleet)); //VarCreateSet ("G_NISTeamFighterSHIPS", ShipsCount (SHIPS_Fighter)); //VarCreateSet ("G_NISTeamCorvetteSHIPS", ShipsCount (SHIPS_Corvette)); //VarCreateSet ("G_NISTeamResourceSHIPS", ShipsCount (SHIPS_Resource)); //VarCreateSet ("G_NISTeamResearchSHIPS", ShipsCount (SHIPS_Research)); ENDIF IF (UnderAttack (SHIPS_NISTeamFighterUnderAttack)) // Just do this to create the list ENDIF IF ( (VarGet ("NowInNullState") = FALSE) AND (ShipsCount (TEAMSHIPS_NISTeamFighter) = 0) ) Jump NullState; ENDIF ENDWATCH STATE AttackMothership //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT AttackMothership (); IF (VarGet ("G_Nis2Complete")) TimerCreateSetStart ("DamagedMothershipTimer", 20); TimerCreateSetStart ("AttackingMothershipTimer", 25); ENDIF ENDINIT WATCH IF (TimerExpiredDestroy ("DamagedMothershipTimer")) VarCreateSet ("G_NISTeamHasDamagedMothership", TRUE); ENDIF IF (TimerExpiredDestroy ("AttackingMothershipTimer")) // After you've attacked the Mothership a bit, go attack the rest of the ships Jump Attack; ENDIF ENDWATCH ENDSTATE AttackMothership //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE Attack //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT //FormationDelta (); TacticsAggressive (); IF (ShipsCount (SHIPS_Fighter) > 2) Attack (SHIPS_Fighter); // Attack Fighters first VarCreateSet ("AttackingFighter", TRUE); Jump WatchAttack; ELSEIF (ShipsCount (SHIPS_Corvette) > 1) Attack (SHIPS_Corvette); // Attack the Corvettes second VarCreateSet ("AttackingCorvette", TRUE); Jump WatchAttack; ELSEIF ( (ShipsCount (SHIPS_Resource) > 0) AND (VarGet ("NeverAttackResourceAgain") = FALSE) ) Attack (SHIPS_Resource); // Attack Resource Collectors third VarCreateSet ("AttackingResource", TRUE); Jump WatchAttack; ELSEIF ( (ShipsCount (SHIPS_Research) > 0) AND (VarGet ("NeverAttackResearchAgain") = FALSE) ) Attack (SHIPS_Research); // Attack Research Ships fourth VarCreateSet ("AttackingResearch", TRUE); Jump WatchAttack; ELSEIF (ShipsCount (SHIPS_Mothership) > 0) Attack (SHIPS_Mothership); // Attack the Mothership last VarCreateSet ("AttackingMothership", TRUE); Jump WatchAttack; ENDIF ENDINIT WATCH ENDWATCH ENDSTATE Attack //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE WatchAttack //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ENDINIT WATCH IF (VarGet ("AttackingCorvette") = TRUE) // If all Corvettes are dead, go back to attack loop IF ( (ShipsCount (SHIPS_Corvette) < 2) OR (NOT UnderAttack (SHIPS_Null746)) ) VarDestroy ("AttackingCorvette"); Jump Attack; ENDIF IF (ShipsCount (SHIPS_Fighter) > 2) // If new Fighters are detected, go back to attack VarDestroy ("AttackingCorvette"); Jump Attack; ENDIF ELSEIF (VarGet ("AttackingResource") = TRUE) // If Collector is at 70% health or below, go back to attack loop ShipsSelectDamaged (SHIPS_ResourceDamaged, SHIPS_Resource, 70); IF ( (ShipsCount (SHIPS_Resource) = 0) OR (ShipsCount (SHIPS_ResourceDamaged) > 0) ) VarDestroy ("AttackingResource"); VarCreateSet ("NeverAttackResourceAgain", TRUE); Jump Attack; ENDIF IF (ShipsCount (SHIPS_Fighter) > 2) // If new Fighters are detected, go back to attack VarDestroy ("AttackingResource"); Jump Attack; ENDIF IF (ShipsCount (SHIPS_Corvette) > 1) // If new Corvettes are detected, go back to attack VarDestroy ("AttackingResource"); Jump Attack; ENDIF ELSEIF (VarGet ("AttackingResearch") = TRUE) // If Research Ship is at 70% health or below, go back to attack loop ShipsSelectDamaged (SHIPS_ResearchDamaged, SHIPS_Research, 70); IF ( (ShipsCount (SHIPS_Research) = 0) OR (ShipsCount (SHIPS_ResearchDamaged) > 0) ) VarDestroy ("AttackingResearch"); VarCreateSet ("NeverAttackResearchAgain", TRUE); Jump Attack; ENDIF IF (ShipsCount (SHIPS_Fighter) > 2) // If new Fighters are detected, go back to attack VarDestroy ("AttackingResearch"); Jump Attack; ENDIF IF (ShipsCount (SHIPS_Corvette) > 1) // If new Corvettes are detected, go back to attack VarDestroy ("AttackingResearch"); Jump Attack; ENDIF ELSEIF (VarGet ("AttackingFighter") = TRUE) // If all Fighters are dead, go back to attack loop IF ( (ShipsCount (SHIPS_Fighter) < 4) OR (NOT UnderAttack (SHIPS_Null749)) ) VarDestroy ("AttackingFighter"); Jump Attack; ENDIF ELSEIF (VarGet ("AttackingMothership") = TRUE) IF ( (ShipsCount (SHIPS_Mothership) = 0) OR (NOT UnderAttack (SHIPS_Null750)) ) VarDestroy ("AttackingMothership"); Jump Attack; ENDIF IF (ShipsCount (SHIPS_Fighter) > 2) // If new Fighters are detected, go back to attack VarDestroy ("AttackingMothership"); Jump Attack; ENDIF IF (ShipsCount (SHIPS_Corvette) > 1) // If new Corvettes are detected, go back to attack VarDestroy ("AttackingMothership"); Jump Attack; ENDIF ENDIF // if at any time the attack order gets cleared for some reason, jump back to this state IF (ShipsOrder (TEAMSHIPS_NISTeamFighter) != 2) Jump Attack; ENDIF ENDWATCH ENDSTATE WatchAttack //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE DockForGood //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT DockStay (TEAM_P1Mothership); ENDINIT WATCH IF (VarGet ("G_P1MothershipHasRetreated") = TRUE) Jump BugginOut; ENDIF IF (ShipsCount (THISTEAMSHIPS) = 0) // If the team dies, jump to a nullstate Jump NullState; ENDIF ENDWATCH ENDSTATE DockForGood //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE BugginOut //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT Stop (); MoveTo (POINT_OutsideOfWorld); ENDINIT WATCH //IF (Nearby (POINT_OutsideOfWorld, 1000)) // TeamHyperspaceOut (); // Jump NullState; //ENDIF IF (PointInside (VOLUME_BugginOutVolume, THISTEAMSPOINT)) HideShips (THISTEAMSHIPS); Jump NullState; ENDIF ENDWATCH ENDSTATE BugginOut //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE NullState //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT VarCreateSet ("NowInNullState", TRUE); ENDINIT WATCH ENDWATCH ENDSTATE NullState //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ENDFSM NISTeamFighter //ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ NISTeamFighter ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ //ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ NISTeamCorvette ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ FSM NISTeamCorvette States Attack, WatchAttack, DockForGood, BugginOut, NullState; INIT IF (FindEnemiesInside (VOLUME_MothershipSphere, SHIPS_EntireFleet2, 100)) ShipsSelectType (SHIPS_Research2, SHIPS_EntireFleet2, "ResearchShip"); ShipsSelectClass (SHIPS_Resource2, SHIPS_EntireFleet2, "CLASS_Resource"); ShipsSelectClass (SHIPS_Fighter2, SHIPS_EntireFleet2, "CLASS_Fighter"); ShipsSelectClass (SHIPS_Corvette2, SHIPS_EntireFleet2, "CLASS_Corvette"); ShipsSelectClass (SHIPS_Mothership2, SHIPS_EntireFleet2, "CLASS_Mothership"); //VarCreateSet ("G_NISTeamMothershipSHIPS2", ShipsCount (SHIPS_Mothership2)); // All these for debuggin' //VarCreateSet ("G_NISTeamEntireFleetSHIPS2", ShipsCount (SHIPS_EntireFleet2)); //VarCreateSet ("G_NISTeamFighterSHIPS2", ShipsCount (SHIPS_Fighter2)); //VarCreateSet ("G_NISTeamCorvetteSHIPS2", ShipsCount (SHIPS_Corvette2)); //VarCreateSet ("G_NISTeamResourceSHIPS2", ShipsCount (SHIPS_Resource2)); //VarCreateSet ("G_NISTeamResearchSHIPS2", ShipsCount (SHIPS_Research2)); ENDIF IF (UnderAttack (SHIPS_NISTeamCorvetteUnderAttack)) // Just do this to create the list ENDIF IF ( (VarGet ("NowInNullState") = FALSE) AND (ShipsCount (TEAMSHIPS_NISTeamCorvette) = 0) ) Jump NullState; ENDIF JUMP Attack; ENDINIT WATCH IF (FindEnemiesInside (VOLUME_MothershipSphere, SHIPS_EntireFleet2, 100)) ShipsSelectType (SHIPS_Research2, SHIPS_EntireFleet2, "ResearchShip"); ShipsSelectClass (SHIPS_Resource2, SHIPS_EntireFleet2, "CLASS_Resource"); ShipsSelectClass (SHIPS_Fighter2, SHIPS_EntireFleet2, "CLASS_Fighter"); ShipsSelectClass (SHIPS_Corvette2, SHIPS_EntireFleet2, "CLASS_Corvette"); ShipsSelectType (SHIPS_PlayerSalCaps2, SHIPS_EntireFleet2, "SalCapCorvette"); ShipsRemove (SHIPS_Corvette2, SHIPS_PlayerSalCaps2); ShipsSelectClass (SHIPS_Mothership2, SHIPS_EntireFleet2, "CLASS_Mothership"); //VarCreateSet ("G_NISTeamMothershipSHIPS2", ShipsCount (SHIPS_Mothership2)); // All these for debuggin' //VarCreateSet ("G_NISTeamEntireFleetSHIPS2", ShipsCount (SHIPS_EntireFleet2)); //VarCreateSet ("G_NISTeamFighterSHIPS2", ShipsCount (SHIPS_Fighter2)); //VarCreateSet ("G_NISTeamCorvetteSHIPS2", ShipsCount (SHIPS_Corvette2)); //VarCreateSet ("G_NISTeamResourceSHIPS2", ShipsCount (SHIPS_Resource2)); //VarCreateSet ("G_NISTeamResearchSHIPS2", ShipsCount (SHIPS_Research2)); ENDIF IF (UnderAttack (SHIPS_NISTeamCorvetteUnderAttack)) // Just do this to create the list ENDIF IF ( (VarGet ("NowInNullState") = FALSE) AND (ShipsCount (TEAMSHIPS_NISTeamCorvette) = 0) ) Jump NullState; ENDIF ENDWATCH STATE Attack //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT IF ( (ShipsCount (SHIPS_Research2) > 0) AND (VarGet ("NeverAttackResearchAgain") = FALSE) ) Attack (SHIPS_Research2); // Attack Research Ships first VarCreateSet ("AttackingResearch", TRUE); Jump WatchAttack; ELSEIF ( (ShipsCount (SHIPS_Resource2) > 0) AND (VarGet ("NeverAttackResourceAgain") = FALSE) ) Attack (SHIPS_Resource2); // Attack Resource Collectors second VarCreateSet ("AttackingResource", TRUE); Jump WatchAttack; ELSEIF (ShipsCount (SHIPS_Fighter2) > 3) Attack (SHIPS_Fighter2); // Attack Fighters third VarCreateSet ("AttackingFighter", TRUE); Jump WatchAttack; ELSEIF (ShipsCount (SHIPS_Corvette2) > 1) Attack (SHIPS_Corvette2); // Attack the Corvettes fourth VarCreateSet ("AttackingCorvette", TRUE); Jump WatchAttack; ELSEIF (ShipsCount (SHIPS_Mothership2) > 0) Attack (SHIPS_Mothership2); // Attack the Mothership last VarCreateSet ("AttackingMothership", TRUE); Jump WatchAttack; ENDIF ENDINIT WATCH ENDWATCH ENDSTATE Attack //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE WatchAttack //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ENDINIT WATCH IF (VarGet ("AttackingCorvette") = TRUE) // If all Corvettes are dead, go back to attack loop IF ( (ShipsCount (SHIPS_Corvette2) < 2) OR (NOT UnderAttack (SHIPS_Null7462)) ) VarDestroy ("AttackingCorvette"); Jump Attack; ENDIF IF (ShipsCount (SHIPS_Fighter) > 3) // If new Fighters are detected, go back to attack VarDestroy ("AttackingCorvette"); Jump Attack; ENDIF ELSEIF (VarGet ("AttackingResource") = TRUE) // If Collector is at 70% health or below, go back to attack loop ShipsSelectDamaged (SHIPS_ResourceDamaged2, SHIPS_Resource2, 70); IF ( (ShipsCount (SHIPS_Resource2) = 0) OR (ShipsCount (SHIPS_ResourceDamaged2) > 0) ) VarDestroy ("AttackingResource"); VarCreateSet ("NeverAttackResourceAgain", TRUE); Jump Attack; ENDIF IF (ShipsCount (SHIPS_Fighter) > 3) // If new Fighters are detected, go back to attack VarDestroy ("AttackingResource"); Jump Attack; ENDIF IF (ShipsCount (SHIPS_Corvette) > 1) // If new Corvettes are detected, go back to attack VarDestroy ("AttackingResource"); Jump Attack; ENDIF ELSEIF (VarGet ("AttackingResearch") = TRUE) // If Research Ship is at 70% health or below, go back to attack loop ShipsSelectDamaged (SHIPS_ResearchDamaged2, SHIPS_Research2, 55); IF ( (ShipsCount (SHIPS_Research2) = 0) OR (ShipsCount (SHIPS_ResearchDamaged2) > 0) ) VarDestroy ("AttackingResearch"); VarCreateSet ("NeverAttackResearchAgain", TRUE); Jump Attack; ENDIF IF (ShipsCount (SHIPS_Fighter) > 3) // If new Fighters are detected, go back to attack VarDestroy ("AttackingResearch"); Jump Attack; ENDIF IF (ShipsCount (SHIPS_Corvette) > 1) // If new Corvettes are detected, go back to attack VarDestroy ("AttackingResearch"); Jump Attack; ENDIF ELSEIF (VarGet ("AttackingFighter") = TRUE) // If all Fighters are dead, go back to attack loop IF ( (ShipsCount (SHIPS_Fighter2) < 4) OR (NOT UnderAttack (SHIPS_Null7492)) ) VarDestroy ("AttackingFighter"); Jump Attack; ENDIF ELSEIF (VarGet ("AttackingMothership") = TRUE) IF ( (ShipsCount (SHIPS_Mothership2) = 0) OR (NOT UnderAttack (SHIPS_Null7502)) ) VarDestroy ("AttackingMothership"); Jump Attack; ENDIF IF (ShipsCount (SHIPS_Fighter) > 3) // If new Fighters are detected, go back to attack VarDestroy ("AttackingMothership"); Jump Attack; ENDIF IF (ShipsCount (SHIPS_Corvette) > 1) // If new Corvettes are detected, go back to attack VarDestroy ("AttackingMothership"); Jump Attack; ENDIF ENDIF // if at any time the attack order gets cleared for some reason, jump back to this state IF (ShipsOrder (TEAMSHIPS_NISTeamFighter) != 2) Jump Attack; ENDIF ENDWATCH ENDSTATE WatchAttack //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE DockForGood //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT DockStay (TEAM_P1Mothership); ENDINIT WATCH IF (VarGet ("G_P1MothershipHasRetreated") = TRUE) Jump BugginOut; ENDIF IF (ShipsCount (THISTEAMSHIPS) = 0) // If the team dies, jump to a nullstate Jump NullState; ENDIF ENDWATCH ENDSTATE DockForGood //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE BugginOut //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT Stop (); MoveTo (POINT_OutsideOfWorld); ENDINIT WATCH //IF (Nearby (POINT_OutsideOfWorld, 1000)) // TeamHyperspaceOut (); // Jump NullState; //ENDIF IF (PointInside (VOLUME_BugginOutVolume, THISTEAMSPOINT)) HideShips (THISTEAMSHIPS); Jump NullState; ENDIF ENDWATCH ENDSTATE BugginOut //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE NullState //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT VarCreateSet ("NowInNullState", TRUE); ENDINIT WATCH ENDWATCH ENDSTATE NullState //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ENDFSM NISTeamCorvette //ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ NISTeamCorvette ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ //ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ DoggedFighter ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ FSM DoggedFighter States AllDeadWaitForShips, DockInstant, WatchingForSC, Launch, AttackSC, AttackSCsReturning, IHaveNoTarget, Defend, AttacknisVolume, DockWithMothership, Docked, Launch2, WatchingForSC2, DockForGood, BugginOutForGood, BugginOut, NullState; INIT VarCreateSet ("SHIPSOriginal", (ShipsCount (THISTEAMSHIPS))); VarCreateSet ("SHIPSRequested", 0); VarCreateSet ("SHIPSNeeded", 0); VarCreateSet ("SHIPSNewships", 0); VarCreateSet ("SHIPSKilled", 0); // Create a variable = to the number of ships killed VarSet ("G_TOTALOriginalDoggedFighters", VarGet ("G_TOTALOriginalDoggedFighters") + ShipsCount (THISTEAMSHIPS)); Jump DockInstant; ENDINIT WATCH // if there are 0 ships in the team, jump to a wait state to wait for more ships (otherwise the order will get lost) IF ( (ShipsCount (THISTEAMSHIPS) = 0) AND (VarGet ("WaitingForShips") = FALSE) ) Jump AllDeadWaitForShips; ENDIF // repopulation stuff from Falko IF ( (ShipsCount (THISTEAMSHIPS) + VarGet ("SHIPSRequested")) < VarGet ("SHIPSOriginal") ) VarSet ("SHIPSNeeded", (VarGet ("SHIPSOriginal") - (ShipsCount (THISTEAMSHIPS) + VarGet("SHIPSRequested")))); RequestShips ("P1Fighter", VarGet ("SHIPSNeeded")); VarSet ("SHIPSKilled", VarGet ("SHIPSKilled") + VarGet ("SHIPSNeeded")); VarSet ("G_TOTALDoggedFightersKilled", VarGet ("SHIPSKilled")); VarSet("SHIPSRequested", VarGet("SHIPSRequested") + VarGet("SHIPSNeeded")); ENDIF VarSet ("SHIPSNewships", NewShipsAdded()); IF (VarGet("SHIPSNewships")) //FormationBroad (); VarSet("SHIPSRequested", VarGet("SHIPSRequested") - VarGet("SHIPSNewships")); ENDIF IF (FindShipsInside (VOLUME_EntireWorldVolume, SHIPS_EntireWorld)) // Look in the whole world for the returning Salvage Corvettes //VarCreateSet ("G_EntireWorldSHIPS", ShipsCount (SHIPS_EntireWorld)); ShipsSelectSpecial (SHIPS_SCsReturning, SHIPS_EntireWorld, 1); VarCreateSet ("G_SCsReturningSHIPS", ShipsCount (SHIPS_SCsReturning)); ENDIF IFONCE (ObjectiveGet ("SalvageVessel") = TRUE) // If the player completes the objective, bug out Jump BugginOut; ENDIFONCE IFONCE (MsgReceived ("DontHassleSCAnymore")) Jump BugginOut; ENDIFONCE // if the P1 Mothership is getting out of there (and you're still alive, by some fluke), then go dock with it for good IFONCE (VarGet ("G_P1MothershipGettinOut") = TRUE) // If the P1 Mothership is leaving, go dock with it Jump DockForGood; ENDIFONCE ENDWATCH STATE AllDeadWaitForShips //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT VarCreateSet ("WaitingForShips", TRUE); ENDINIT WATCH IF (ShipsCount (THISTEAMSHIPS) > 0) VarDestroy ("WaitingForShips"); Jump AttackSC; ENDIF ENDWATCH ENDSTATE AllDeadWaitForShips //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE DockInstant //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT DockInstant (TEAM_P1Mothership); // Dock right away with the P1 Mothership Jump WatchingForSC; ENDINIT WATCH ENDWATCH ENDSTATE DockInstant //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE WatchingForSC //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ENDINIT WATCH IF (FindEnemiesInside (VOLUME_SCVolume, SHIPS_NearDerelict, 700)) // Find all the ships around the derelict //VarCreateSet ("G_NearDerelictSHIPS", (ShipsCount (SHIPS_NearDerelict))); ShipsSelectType (SHIPS_SalvageCorvettes, SHIPS_NearDerelict, "SalCapCorvette"); // Filter out the Salvage Corvettes //VarCreateSet ("G_SalvageCorvettesSHIPS", (ShipsCount (SHIPS_SalvageCorvettes))); ENDIF IF (VarGet ("G_TechRemoved") > 15) // When the player is 1/4 way through stripping, launch Jump Launch; ENDIF ENDWATCH ENDSTATE WatchingForSC //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE Launch //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT IF ( (TeamDockedReadyForLaunch ()) AND (TimerExpiredDestroy ("G_P1MothershipHasHyperspacedIn")) ) Launch (); VarCreateSet ("G_DoggedFighterHasLaunched", TRUE); TimerCreateSetStart ("LaunchDoggedFighter", 5); // Give it some time to launch before attacking ENDIF ENDINIT WATCH IF (TimerExpiredDestroy ("LaunchDoggedFighter")) TimerCreateSetStart ("G_DoggedFighterOnItsWay", 8); Jump AttackSC; ENDIF ENDWATCH ENDSTATE Launch //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE AttackSC //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT TacticsAggressive(); Attack (SHIPS_SalvageCorvettes); ENDINIT WATCH IF (ShipsCount (SHIPS_SCsReturning) > 0 ) Jump AttackSCsReturning; ENDIF IF (ShipsCount (SHIPS_SalvageCorvettes) = 0) Jump IHaveNoTarget; ENDIF // if at any time the attack order gets cleared for some reason, jump back to this state IF (ShipsOrder (TEAMSHIPS_DoggedFighter) != 2) Jump AttackSC; ENDIF ENDWATCH ENDSTATE AttackSC //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE AttackSCsReturning //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT Attack (SHIPS_SCsReturning); ENDINIT WATCH IF (ShipsCount (SHIPS_SCsReturning) = 0) // If you kill off the the SCsReturning, go looking for a target Jump IHaveNoTarget; ENDIF // if at any time the attack order gets cleared for some reason, jump back to this state IF (ShipsOrder (TEAMSHIPS_DoggedFighter) != 2) Jump AttackSC; ENDIF ENDWATCH ENDSTATE AttackSCsReturning //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE IHaveNoTarget //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ENDINIT WATCH //PRINT ("Dogged Fighter has no Target!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); IF (UnderAttack (SHIPS_DoggedFighterUnderAttack)) // If you're under attack, get "distracted" and defend yourself ShipsSelectClass (SHIPS_Mothership, SHIPS_DoggedFighterUnderAttack, "CLASS_Mothership"); // Select the Mothership ShipsRemove (SHIPS_DoggedFighterUnderAttack, SHIPS_Mothership); // And filter it out IF (ShipsCount (SHIPS_DoggedFighterUnderAttack) > 0) Jump Defend; ENDIF ELSEIF (FindEnemiesInside (VOLUME_nisVolume, SHIPS_DoggedFighterLooking, 2000)) // If you find any enemies in the nisVolume, attack them Jump AttacknisVolume; ELSEIF (ShipsCount (TEAMSHIPS_DoggedFighter) = 0) // If you're killed, go back to watching for SCs Jump WatchingForSC2; ELSE Jump DockWithMothership; // If you can't find any enemies, and you're not under attack, dock ENDIF ENDWATCH ENDSTATE IHaveNoTarget //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE Defend //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ShipsSelectClass (SHIPS_DoggedFighterFighters, SHIPS_DoggedFighterUnderAttack, "CLASS_Fighter"); // Filter out Fighters IF (ShipsCount (SHIPS_DoggedFighterFighters) > 0) // If there are any Fighters, attack them first Attack (SHIPS_DoggedFighterFighters); ELSE Attack (SHIPS_DoggedFighterUnderAttack); // Otherwise, just attack everyone ENDIF ENDINIT WATCH IF (ShipsCount (TEAMSHIPS_DoggedFighter) = 0) // If you're killed, go back to watching for SCs Jump WatchingForSC2; ENDIF IF (NOT (UnderAttack (SHIPS_Null960006544))) // If you're not under attack anymore, go back to pummeling the Salvage Corvette Jump AttackSC; ENDIF IF (ShipsCount (SHIPS_DoggedFighterUnderAttack) = 0) // If you've killed off all the attackers, go back to pummeling the SC Jump AttackSC; ENDIF IF (FindEnemiesInside (VOLUME_SCVolume, SHIPS_NearDerelict, 700)) // While defending yourself, look inside the SCVolume VarSet ("G_NearDerelictSHIPS", (ShipsCount (SHIPS_NearDerelict))); ShipsSelectType (SHIPS_SalvageCorvettes, SHIPS_NearDerelict, "SalCapCorvette"); // Filter out the Salvage Corvettes VarSet ("G_SalvageCorvettesSHIPS", (ShipsCount (SHIPS_SalvageCorvettes))); IF (ShipsCount (SHIPS_SalvageCorvettes) > 0) // If you find any SCs, go attack them Jump AttackSC; ENDIF ENDIF // if the attack order gets cleared for some reason, jump back to this state IF (ShipsOrder (TEAMSHIPS_DoggedFighter) != 2) Jump Defend; ENDIF ENDWATCH ENDSTATE Defend //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE AttacknisVolume //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ShipsSelectClass (SHIPS_nisVolumeFighters, SHIPS_DoggedFighterLooking, "CLASS_Fighter"); // Filter out Fighters IF (ShipsCount (SHIPS_nisVolumeFighters) > 0) // If there are any Fighters, attack them first Attack (SHIPS_nisVolumeFighters); ELSE Attack (SHIPS_DoggedFighterLooking); // Otherwise, just attack everyone ENDIF ENDINIT WATCH IF (ShipsCount (TEAMSHIPS_DoggedFighter) = 0) // If you're killed, go back to watching for SCs Jump WatchingForSC2; ENDIF IF (ShipsCount (SHIPS_DoggedFighterLooking) = 0) // If you've there's no one left in the nisVolume, go back to looking for a target Jump IHaveNoTarget; ENDIF IF (FindEnemiesInside (VOLUME_SCVolume, SHIPS_NearDerelict, 700)) // While kicking ass, look inside the SCVolume VarSet ("G_NearDerelictSHIPS", (ShipsCount (SHIPS_NearDerelict))); ShipsSelectType (SHIPS_SalvageCorvettes, SHIPS_NearDerelict, "SalCapCorvette"); // Filter out the Salvage Corvettes VarSet ("G_SalvageCorvettesSHIPS", (ShipsCount (SHIPS_SalvageCorvettes))); IF (ShipsCount (SHIPS_SalvageCorvettes) > 0) // If you find any SCs, go attack them Jump AttackSC; ENDIF ENDIF // if the attack order gets cleared for some reason, jump back to this state IF (ShipsOrder (TEAMSHIPS_DoggedFighter) != 2) Jump AttacknisVolume; ENDIF ENDWATCH ENDSTATE AttacknisVolume //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE DockWithMothership //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT DockStay (TEAM_P1Mothership); ENDINIT WATCH IF (ShipsCount (TEAMSHIPS_DoggedFighter) = 0) // If you're killed, go back to watching for SCs Jump WatchingForSC2; ENDIF IF (TeamDockedReadyForLaunch ()) // If you're docked, jump to the Docked state Jump Docked; ELSEIF (FindEnemiesInside (VOLUME_SCVolume, SHIPS_NearDerelict, 700)) // While on your way to dock, look inside the SCVolume VarSet ("G_NearDerelictSHIPS", (ShipsCount (SHIPS_NearDerelict))); ShipsSelectType (SHIPS_SalvageCorvettes, SHIPS_NearDerelict, "SalCapCorvette"); // Filter out the Salvage Corvettes VarSet ("G_SalvageCorvettesSHIPS", (ShipsCount (SHIPS_SalvageCorvettes))); IF (ShipsCount (SHIPS_SalvageCorvettes) > 0) // If you find any SCs, go attack them Jump AttackSC; ENDIF ENDIF ENDWATCH ENDSTATE DockWithMothership //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE Docked //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ENDINIT WATCH IF (FindEnemiesInside (VOLUME_SCVolume, SHIPS_NearDerelict, 700)) // While docked, watch the SCVolume for ships VarSet ("G_NearDerelictSHIPS", (ShipsCount (SHIPS_NearDerelict))); ShipsSelectType (SHIPS_SalvageCorvettes, SHIPS_NearDerelict, "SalCapCorvette"); // Filter out the Salvage Corvettes VarSet ("G_SalvageCorvettesSHIPS", (ShipsCount (SHIPS_SalvageCorvettes))); IF (ShipsCount (SHIPS_SalvageCorvettes) > 0) // If you find any SCs, launch Jump Launch2; ENDIF ENDIF ENDWATCH ENDSTATE Docked //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE Launch2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT IF (TeamDockedReadyForLaunch ()) Launch (); TimerCreateSetStart ("LaunchDoggedFighter2", 5); // Give it some time to launch before attacking ENDIF ENDINIT WATCH IF (ShipsCount (TEAMSHIPS_DoggedFighter) = 0) // If you're killed, go back to watching for SCs Jump WatchingForSC2; ENDIF IF (TimerExpiredDestroy ("LaunchDoggedFighter2")) Jump AttackSC; ENDIF ENDWATCH ENDSTATE Launch2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE WatchingForSC2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ENDINIT WATCH IF (FindEnemiesInside (VOLUME_SCVolume, SHIPS_NearDerelict, 700)) // After being killed, watch the SCVolume for ships VarSet ("G_NearDerelictSHIPS", (ShipsCount (SHIPS_NearDerelict))); ShipsSelectType (SHIPS_SalvageCorvettes, SHIPS_NearDerelict, "SalCapCorvette"); // Filter out the Salvage Corvettes VarSet ("G_SalvageCorvettesSHIPS", (ShipsCount (SHIPS_SalvageCorvettes))); IF (ShipsCount (SHIPS_SalvageCorvettes) > 0) // If you find any SCs, launch Jump AttackSC; ENDIF ENDIF ENDWATCH ENDSTATE WatchingForSC2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE DockForGood //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT DockStay (TEAM_P1Mothership); ENDINIT WATCH IF (VarGet ("G_P1MothershipHasRetreated") = TRUE) Jump BugginOutForGood; ENDIF IF (ShipsCount (THISTEAMSHIPS) = 0) // If the team dies, jump to a nullstate Jump NullState; ENDIF ENDWATCH ENDSTATE DockForGood //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE BugginOutForGood //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT Stop (); MoveTo (POINT_OutsideOfWorld); ENDINIT WATCH //IF (Nearby (POINT_OutsideOfWorld, 1000)) // TeamHyperspaceOut (); // Jump NullState; //ENDIF IF (PointInside (VOLUME_BugginOutVolume, THISTEAMSPOINT)) HideShips (THISTEAMSHIPS); Jump NullState; ENDIF ENDWATCH ENDSTATE BugginOutForGood //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE BugginOut //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT Stop (); DockStay (TEAM_P1Mothership); ENDINIT WATCH IF (TeamDockedReadyForLaunch ()) Jump NullState; ENDIF IF (ShipsCount (TEAMSHIPS_DoggedFighter) = 0) Jump NullState; ENDIF IF (VarGet ("G_P1MothershipHasRetreated") = TRUE) Jump BugginOutForGood; ENDIF ENDWATCH ENDSTATE BugginOut //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE NullState //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ENDINIT WATCH ENDWATCH ENDSTATE NullState //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ENDFSM DoggedFighter //ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ DoggedFighter ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ //ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ SCFighters ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ FSM SCFighters States DockInstant, WatchingForSC, Launch, AttackSC, AttackSCsReturning, Defend, AllDeadWaitForShips, IHaveNoTarget, Defend2, AttacknisVolume, DockWithMothership, Docked, Launch2, WatchingForSC2, DockForGood, BugginOutForGood, BugginOut, NullState; INIT VarCreateSet ("SHIPSOriginal", (ShipsCount (THISTEAMSHIPS))); VarCreateSet ("SHIPSRequested", 0); VarCreateSet ("SHIPSNeeded", 0); VarCreateSet ("SHIPSNewships", 0); VarCreateSet ("SHIPSKilled", 0); // Create a variable = to the number of ships killed VarSet ("G_TOTALOriginalSCFighters", VarGet ("G_TOTALOriginalSCFighters") + ShipsCount (THISTEAMSHIPS)); Jump DockInstant; ENDINIT WATCH // if there are 0 ships in the team, jump to a wait state to wait for more ships (otherwise the order will get lost) IF ( (ShipsCount (THISTEAMSHIPS) = 0) AND (VarGet ("WaitingForShips") = FALSE) ) Jump AllDeadWaitForShips; ENDIF // repopulation stuff from Falko IF ( (ShipsCount (THISTEAMSHIPS) + VarGet ("SHIPSRequested")) < VarGet ("SHIPSOriginal") ) VarSet ("SHIPSNeeded", (VarGet ("SHIPSOriginal") - (ShipsCount (THISTEAMSHIPS) + VarGet("SHIPSRequested")))); RequestShips ("P1Fighter", VarGet ("SHIPSNeeded")); VarSet ("SHIPSKilled", VarGet ("SHIPSKilled") + VarGet ("SHIPSNeeded")); VarSet ("G_TOTALSCFightersKilled", VarGet ("SHIPSKilled")); VarSet("SHIPSRequested", VarGet("SHIPSRequested") + VarGet("SHIPSNeeded")); ENDIF VarSet ("SHIPSNewships", NewShipsAdded()); IF (VarGet("SHIPSNewships")) //FormationBroad (); VarSet("SHIPSRequested", VarGet("SHIPSRequested") - VarGet("SHIPSNewships")); ENDIF IF (FindShipsInside (VOLUME_EntireWorldVolume, SHIPS_EntireWorld)) // Look in the whole world for the returning Salvage Corvettes //VarCreateSet ("G_EntireWorldSHIPS", ShipsCount (SHIPS_EntireWorld)); ShipsSelectSpecial (SHIPS_SCsReturning, SHIPS_EntireWorld, 1); // Filter the Salvage Corvettes returning with technology //VarCreateSet ("G_SCsReturningSHIPS", ShipsCount (SHIPS_SCsReturning)); ENDIF IFONCE (ObjectiveGet ("SalvageVessel") = TRUE) // If the player completes the objective, bug out Jump BugginOut; ENDIFONCE IFONCE (MsgReceived ("DontHassleSCAnymore")) Jump BugginOut; ENDIFONCE // if the P1 Mothership is getting out of there (and you're still alive, by some fluke), then go dock with it for good IFONCE (VarGet ("G_P1MothershipGettinOut") = TRUE) // If the P1 Mothership is leaving, go dock with it Jump DockForGood; ENDIFONCE ENDWATCH STATE AllDeadWaitForShips //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT VarCreateSet ("WaitingForShips", TRUE); ENDINIT WATCH IF (ShipsCount (THISTEAMSHIPS) > 0) VarDestroy ("WaitingForShips"); Jump AttackSC; ENDIF ENDWATCH ENDSTATE AllDeadWaitForShips //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE DockInstant //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT DockInstant (TEAM_P1Mothership); // Dock right away with the P1 Mothership ENDINIT WATCH IF (VarGet ("G_DoggedFighterHasLaunched") = TRUE) VarDestroy ("G_DoggedFighterHasLaunched"); TimerCreateSetStart ("LaunchSCFighters", 12); Jump WatchingForSC; ENDIF ENDWATCH ENDSTATE DockInstant //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE WatchingForSC //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ENDINIT WATCH IF (TimerExpiredDestroy ("LaunchSCFighters")) Jump Launch; ENDIF ENDWATCH ENDSTATE WatchingForSC //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE Launch //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT IF (TeamDockedReadyForLaunch ()) Launch (); VarCreateSet ("G_SCFightersHaveLaunched", TRUE); TimerCreateSetStart ("SCFightersHaveLaunched", 5); // Give it some time to launch before attacking ENDIF ENDINIT WATCH IF (TimerExpiredDestroy ("SCFightersHaveLaunched")) Jump AttackSC; ENDIF ENDWATCH ENDSTATE Launch //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE AttackSC //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT TacticsAggressive (); Attack (SHIPS_SalvageCorvettes); ENDINIT WATCH IF (UnderAttack (SHIPS_SCFightersUnderAttack)) // If you're under attack, get "distracted" and defend yourself ShipsSelectClass (SHIPS_Mothership, SHIPS_SCFightersUnderAttack, "CLASS_Mothership"); // Select the Mothership ShipsRemove (SHIPS_SCFightersUnderAttack, SHIPS_Mothership); // And filter it out IF (ShipsCount (SHIPS_SCFightersUnderAttack) > 0) Jump Defend; ENDIF ENDIF IF (ShipsCount (SHIPS_SCsReturning) > 0 ) Jump AttackSCsReturning; ENDIF IF (ShipsCount (SHIPS_SalvageCorvettes) = 0) Jump IHaveNoTarget; ENDIF // if the attack order gets cleared for some reason, jump back to this state IF (ShipsOrder (TEAMSHIPS_SCFighters) != 2) Jump AttackSC; ENDIF ENDWATCH ENDSTATE AttackSC //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE AttackSCsReturning //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT TacticsAggressive(); Attack (SHIPS_SCsReturning); ENDINIT WATCH IF (UnderAttack (SHIPS_SCFightersUnderAttack)) // If you're under attack, get "distracted" and defend yourself ShipsSelectClass (SHIPS_Mothership, SHIPS_SCFightersUnderAttack, "CLASS_Mothership"); // Select the Mothership ShipsRemove (SHIPS_SCFightersUnderAttack, SHIPS_Mothership); // And filter it out IF (ShipsCount (SHIPS_SCFightersUnderAttack) > 0) Jump Defend; ENDIF ENDIF IF (ShipsCount (SHIPS_SCsReturning) = 0) // If you kill off the the SCsReturning, go looking for a target Jump IHaveNoTarget; ENDIF // if the attack order gets cleared for some reason, jump back to this state IF (ShipsOrder (TEAMSHIPS_SCFighters) != 2) Jump AttackSCsReturning; ENDIF ENDWATCH ENDSTATE AttackSCsReturning //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE Defend //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT VarCreateSet ("SCFightersAreDefending", TRUE); TacticsAggressive (); ShipsSelectClass (SHIPS_SCFightersFighters, SHIPS_SCFightersUnderAttack, "CLASS_Fighter"); // Filter out Fighters IF (ShipsCount (SHIPS_SCFightersFighters) > 0) // If there are any Fighters, attack them first Attack (SHIPS_SCFightersFighters); ELSE Attack (SHIPS_SCFightersUnderAttack); // Otherwise, just attack everyone ENDIF ENDINIT WATCH IF (NOT (UnderAttack (SHIPS_Null92399766544))) // If you're not under attack anymore, go back to pummeling the Salvage Corvette VarDestroy ("SCFightersAreDefending"); Jump AttackSC; ENDIF IF (ShipsCount (SHIPS_SCFightersUnderAttack) = 0) // If you've killed off all the attackers, go back to pummeling the SC VarDestroy ("SCFightersAreDefending"); Jump AttackSC; ENDIF // if the attack order gets cleared for some reason, jump back to this state IF (ShipsOrder (TEAMSHIPS_SCFighters) != 2) Jump AttackSCsReturning; ENDIF ENDWATCH ENDSTATE Defend //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE IHaveNoTarget //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ENDINIT WATCH //PRINT ("SCFighters have no Target!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); IF (UnderAttack (SHIPS_SCFightersUnderAttack)) // If you're under attack, get "distracted" and defend yourself ShipsSelectClass (SHIPS_Mothership, SHIPS_SCFightersUnderAttack, "CLASS_Mothership"); // Select the Mothership ShipsRemove (SHIPS_SCFightersUnderAttack, SHIPS_Mothership); // And filter it out IF (ShipsCount (SHIPS_SCFightersUnderAttack) > 0) Jump Defend2; ENDIF ELSEIF (FindEnemiesInside (VOLUME_nisVolume, SHIPS_SCFightersLooking, 2000)) // If you find any enemies in the nisVolume, attack them Jump AttacknisVolume; ELSEIF (ShipsCount (TEAMSHIPS_SCFighters) = 0) // If you're killed, go back to watching for SCs Jump WatchingForSC2; ELSE Jump DockWithMothership; // If you can't find any enemies, and you're not under attack, dock ENDIF ENDWATCH ENDSTATE IHaveNoTarget //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE Defend2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ShipsSelectClass (SHIPS_SCFightersFighters, SHIPS_SCFightersUnderAttack, "CLASS_Fighter"); // Filter out Fighters IF (ShipsCount (SHIPS_SCFightersFighters) > 0) // If there are any Fighters, attack them first Attack (SHIPS_SCFightersFighters); ELSE Attack (SHIPS_SCFightersUnderAttack); // Otherwise, just attack everyone ENDIF ENDINIT WATCH IF (ShipsCount (TEAMSHIPS_SCFighters) = 0) // If you're killed, go back to watching for SCs Jump WatchingForSC2; ENDIF IF (NOT (UnderAttack (SHIPS_Null906544))) // If you're not under attack anymore, go back to pummeling the Salvage Corvette Jump AttackSC; ENDIF IF (ShipsCount (SHIPS_SCFightersUnderAttack) = 0) // If you've killed off all the attackers, go back to pummeling the SC Jump AttackSC; ENDIF IF (FindEnemiesInside (VOLUME_SCVolume, SHIPS_NearDerelict, 700)) // While defending yourself, look inside the SCVolume VarSet ("G_NearDerelictSHIPS", (ShipsCount (SHIPS_NearDerelict))); ShipsSelectType (SHIPS_SalvageCorvettes, SHIPS_NearDerelict, "SalCapCorvette"); // Filter out the Salvage Corvettes VarSet ("G_SalvageCorvettesSHIPS", (ShipsCount (SHIPS_SalvageCorvettes))); IF (ShipsCount (SHIPS_SalvageCorvettes) > 0) // If you find any SCs, go attack them Jump AttackSC; ENDIF ENDIF // if the attack order gets cleared for some reason, jump back to this state IF (ShipsOrder (TEAMSHIPS_SCFighters) != 2) Jump IHaveNoTarget; ENDIF ENDWATCH ENDSTATE Defend2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE AttacknisVolume //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ShipsSelectClass (SHIPS_nisVolumeFighters, SHIPS_SCFightersLooking, "CLASS_Fighter"); // Filter out Fighters IF (ShipsCount (SHIPS_nisVolumeFighters) > 0) // If there are any Fighters, attack them first Attack (SHIPS_nisVolumeFighters); ELSE Attack (SHIPS_SCFightersLooking); // Otherwise, just attack everyone ENDIF ENDINIT WATCH IF (ShipsCount (TEAMSHIPS_SCFighters) = 0) // If you're killed, go back to watching for SCs Jump WatchingForSC2; ENDIF IF (ShipsCount (SHIPS_SCFightersLooking) = 0) // If you've there's no one left in the nisVolume, go back to looking for a target Jump IHaveNoTarget; ENDIF IF (FindEnemiesInside (VOLUME_SCVolume, SHIPS_NearDerelict, 700)) // While kicking ass, look inside the SCVolume VarSet ("G_NearDerelictSHIPS", (ShipsCount (SHIPS_NearDerelict))); ShipsSelectType (SHIPS_SalvageCorvettes, SHIPS_NearDerelict, "SalCapCorvette"); // Filter out the Salvage Corvettes VarSet ("G_SalvageCorvettesSHIPS", (ShipsCount (SHIPS_SalvageCorvettes))); IF (ShipsCount (SHIPS_SalvageCorvettes) > 0) // If you find any SCs, go attack them Jump AttackSC; ENDIF ENDIF // if the attack order gets cleared for some reason, jump back to this state IF (ShipsOrder (TEAMSHIPS_SCFighters) != 2) Jump IHaveNoTarget; ENDIF ENDWATCH ENDSTATE AttacknisVolume //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE DockWithMothership //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT DockStay (TEAM_P1Mothership); ENDINIT WATCH IF (ShipsCount (TEAMSHIPS_SCFighters) = 0) // If you're killed, go back to watching for SCs Jump WatchingForSC2; ENDIF IF (TeamDockedReadyForLaunch ()) // If you're docked, jump to the Docked state Jump Docked; ELSEIF (FindEnemiesInside (VOLUME_SCVolume, SHIPS_NearDerelict, 700)) // While on your way to dock, look inside the SCVolume VarSet ("G_NearDerelictSHIPS", (ShipsCount (SHIPS_NearDerelict))); ShipsSelectType (SHIPS_SalvageCorvettes, SHIPS_NearDerelict, "SalCapCorvette"); // Filter out the Salvage Corvettes VarSet ("G_SalvageCorvettesSHIPS", (ShipsCount (SHIPS_SalvageCorvettes))); IF (ShipsCount (SHIPS_SalvageCorvettes) > 0) // If you find any SCs, go attack them Jump AttackSC; ENDIF ENDIF ENDWATCH ENDSTATE DockWithMothership //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE Docked //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ENDINIT WATCH IF (FindEnemiesInside (VOLUME_SCVolume, SHIPS_NearDerelict, 700)) // While docked, watch the SCVolume for ships VarSet ("G_NearDerelictSHIPS", (ShipsCount (SHIPS_NearDerelict))); ShipsSelectType (SHIPS_SalvageCorvettes, SHIPS_NearDerelict, "SalCapCorvette"); // Filter out the Salvage Corvettes VarSet ("G_SalvageCorvettesSHIPS", (ShipsCount (SHIPS_SalvageCorvettes))); IF (ShipsCount (SHIPS_SalvageCorvettes) > 0) // If you find any SCs, launch Jump Launch2; ENDIF ENDIF ENDWATCH ENDSTATE Docked //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE Launch2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT IF (TeamDockedReadyForLaunch ()) Launch (); TimerCreateSetStart ("LaunchSCFighters2", 5); // Give it some time to launch before attacking ENDIF ENDINIT WATCH IF (ShipsCount (TEAMSHIPS_SCFighters) = 0) // If you're killed, go back to watching for SCs Jump WatchingForSC2; ENDIF IF (TimerExpiredDestroy ("LaunchSCFighters2")) Jump AttackSC; ENDIF ENDWATCH ENDSTATE Launch2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE WatchingForSC2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ENDINIT WATCH IF (FindEnemiesInside (VOLUME_SCVolume, SHIPS_NearDerelict, 700)) // After being killed, watch the SCVolume for ships VarSet ("G_NearDerelictSHIPS", (ShipsCount (SHIPS_NearDerelict))); ShipsSelectType (SHIPS_SalvageCorvettes, SHIPS_NearDerelict, "SalCapCorvette"); // Filter out the Salvage Corvettes VarSet ("G_SalvageCorvettesSHIPS", (ShipsCount (SHIPS_SalvageCorvettes))); IF (ShipsCount (SHIPS_SalvageCorvettes) > 0) // If you find any SCs, launch Jump AttackSC; ENDIF ENDIF ENDWATCH ENDSTATE WatchingForSC2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE DockForGood //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT DockStay (TEAM_P1Mothership); ENDINIT WATCH IF (VarGet ("G_P1MothershipHasRetreated") = TRUE) Jump BugginOutForGood; ENDIF IF (ShipsCount (THISTEAMSHIPS) = 0) // If the team dies, jump to a nullstate Jump NullState; ENDIF ENDWATCH ENDSTATE DockForGood //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE BugginOutForGood //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT Stop (); MoveTo (POINT_OutsideOfWorld); ENDINIT WATCH //IF (Nearby (POINT_OutsideOfWorld, 1000)) // TeamHyperspaceOut (); // Jump NullState; //ENDIF IF (PointInside (VOLUME_BugginOutVolume, THISTEAMSPOINT)) HideShips (THISTEAMSHIPS); Jump NullState; ENDIF ENDWATCH ENDSTATE BugginOutForGood //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE BugginOut //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT Stop (); DockStay (TEAM_P1Mothership); ENDINIT WATCH IF (TeamDockedReadyForLaunch ()) Jump NullState; ENDIF IF (ShipsCount (TEAMSHIPS_SCFighters) = 0) Jump NullState; ENDIF IF (VarGet ("G_P1MothershipHasRetreated") = TRUE) Jump BugginOutForGood; ENDIF ENDWATCH ENDSTATE BugginOut //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE NullState //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ENDINIT WATCH ENDWATCH ENDSTATE NullState //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ENDFSM SCFighters //ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ SCFighters ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ //ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ACT3Fighters ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ FSM ACT3Fighters States DockInstant, Launch, MASTERLooking, AttackMothershipSphere, AttackEntireWorld, AttackMothership, AllDeadWaitForShips, Defend, GoHelpP1Mothership, DockForGood, BugginOut, NullState; INIT VarCreateSet ("SHIPSOriginal", (ShipsCount (THISTEAMSHIPS))); VarCreateSet ("SHIPSRequested", 0); VarCreateSet ("SHIPSNeeded", 0); VarCreateSet ("SHIPSNewships", 0); VarCreateSet ("SHIPSKilled", 0); // Create a variable = to the number of ships killed VarSet ("G_TOTALOriginalACT3Fighters", VarGet ("G_TOTALOriginalACT3Fighters") + ShipsCount (THISTEAMSHIPS)); Jump DockInstant; ENDINIT WATCH // if there are 0 ships in the team, jump to a wait state to wait for more ships (otherwise the order will get lost) IF ( (ShipsCount (THISTEAMSHIPS) = 0) AND (VarGet ("WaitingForShips") = FALSE) ) Jump AllDeadWaitForShips; ENDIF // repopulation stuff from Falko IF ( ((ShipsCount (THISTEAMSHIPS) + VarGet ("SHIPSRequested")) < VarGet ("SHIPSOriginal")) AND (VarGet ("G_P1MothershipGettinOut") = FALSE) ) VarSet ("SHIPSNeeded", (VarGet ("SHIPSOriginal") - (ShipsCount (THISTEAMSHIPS) + VarGet("SHIPSRequested")))); RequestShips ("P1Fighter", VarGet ("SHIPSNeeded")); VarSet ("SHIPSKilled", VarGet ("SHIPSKilled") + VarGet ("SHIPSNeeded")); VarSet ("G_TOTALACT3FightersKilled", VarGet ("SHIPSKilled")); VarSet("SHIPSRequested", VarGet("SHIPSRequested") + VarGet("SHIPSNeeded")); ENDIF VarSet ("SHIPSNewships", NewShipsAdded()); IF (VarGet("SHIPSNewships")) //FormationBroad (); VarSet("SHIPSRequested", VarGet("SHIPSRequested") - VarGet("SHIPSNewships")); ENDIF ENDWATCH STATE AllDeadWaitForShips //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT VarCreateSet ("WaitingForShips", TRUE); ENDINIT WATCH IF (ShipsCount (THISTEAMSHIPS) > 0) VarDestroy ("WaitingForShips"); IF (VarGet ("G_P1MothershipGettinOut") = FALSE) Jump MASTERLooking; ELSEIF (VarGet ("G_P1MothershipGettinOut") = TRUE) Jump DockForGood; ENDIF ENDIF ENDWATCH ENDSTATE AllDeadWaitForShips //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE DockInstant //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT DockInstant (TEAM_P1Mothership); // Dock right away with the P1 Mothership ENDINIT WATCH //IF (ObjectiveGet ("SalvageVessel") = TRUE) // When the player's SCReturning docks, begin ACT3! IF (VarGet ("G_BeginACT3Now") = TRUE) // Told to begin ACT3 a little while after the player gets the data from the KS Jump Launch; ENDIF ENDWATCH ENDSTATE DockInstant //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE Launch //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT IF (TeamDockedReadyForLaunch ()) // Just for safety Launch (); VarCreateSet ("G_ACT3FightersHaveLaunched", TRUE); TimerCreateSetStart ("ACT3FightersHaveLaunched", 12); // Give it some time to launch before attacking ENDIF ENDINIT WATCH // **** watch everywhere stuff **** IF (VarGet ("G_P1MothershipUnderAttack") = TRUE) // If the P1 Mothership is under attack, go help it Jump GoHelpP1Mothership; ENDIF IF (VarGet ("G_P1MothershipGettinOut") = TRUE) // If the P1 Mothership is leaving, go dock with it Jump DockForGood; ENDIF IF (UnderAttack (SHIPS_ACT3FightersUnderAttack)) // If you get attacked, jump to defending yourself ShipsSelectClass (SHIPS_ACT3FightersMothership, SHIPS_ACT3FightersUnderAttack, "CLASS_Mothership"); ShipsRemove (SHIPS_ACT3FightersUnderAttack, SHIPS_ACT3FightersMothership); ShipsSelectClass (SHIPS_ACT3FightersFighterLOOK, SHIPS_ACT3FightersUnderAttack, "CLASS_Fighter"); ShipsSelectClass (SHIPS_ACT3FightersCorvetteLOOK, SHIPS_ACT3FightersUnderAttack, "CLASS_Corvette"); IF (ShipsCount (SHIPS_ACT3FightersFighterLOOK) > 3) Jump Defend; ELSEIF (ShipsCount (SHIPS_ACT3FightersCorvetteLOOK) > 2) Jump Defend; ENDIF ENDIF IF (TimerExpiredDestroy ("ACT3FightersHaveLaunched")) Jump MASTERLooking; ENDIF ENDWATCH ENDSTATE Launch //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE MASTERLooking //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ENDINIT WATCH // **** watch everywhere stuff **** IF (VarGet ("G_P1MothershipUnderAttack") = TRUE) // If the P1 Mothership is under attack, go help it Jump GoHelpP1Mothership; ENDIF IF (VarGet ("G_P1MothershipGettinOut") = TRUE) // If the P1 Mothership is under attack, go help it Jump DockForGood; ENDIF IF (UnderAttack (SHIPS_ACT3FightersUnderAttack)) // If you get attacked, jump to defending yourself ShipsSelectClass (SHIPS_ACT3FightersMothership, SHIPS_ACT3FightersUnderAttack, "CLASS_Mothership"); ShipsRemove (SHIPS_ACT3FightersUnderAttack, SHIPS_ACT3FightersMothership); ShipsSelectClass (SHIPS_ACT3FightersFighterLOOK, SHIPS_ACT3FightersUnderAttack, "CLASS_Fighter"); ShipsSelectClass (SHIPS_ACT3FightersCorvetteLOOK, SHIPS_ACT3FightersUnderAttack, "CLASS_Corvette"); IF (ShipsCount (SHIPS_ACT3FightersFighterLOOK) > 3) Jump Defend; ELSEIF (ShipsCount (SHIPS_ACT3FightersCorvetteLOOK) > 2) Jump Defend; ENDIF ENDIF FindEnemiesInside (VOLUME_MothershipSphere, SHIPS_ACT3EntireFleet1, 100); // Find everyone in the MothershipSphere ShipsSelectClass (SHIPS_ACT3Fighter1, SHIPS_ACT3EntireFleet1, "CLASS_Fighter"); // Then filter their asses ShipsSelectClass (SHIPS_ACT3Corvette1, SHIPS_ACT3EntireFleet1, "CLASS_Corvette"); ShipsSelectClass (SHIPS_ACT3Resource1, SHIPS_ACT3EntireFleet1, "CLASS_Resource"); ShipsSelectType (SHIPS_ACT3Research1, SHIPS_ACT3EntireFleet1, "ResearchShip"); ShipsSelectClass (SHIPS_ACT3NonCombat1, SHIPS_ACT3EntireFleet1, "CLASS_NonCombat"); ShipsSelectClass (SHIPS_ACT3Mothership1, SHIPS_ACT3EntireFleet1, "CLASS_Mothership"); VarCreateSet ("G_ACT3TeamMothershipSHIPS", ShipsCount (SHIPS_ACT3Mothership1)); // All these for debuggin' VarCreateSet ("G_ACT3TeamEntireFleetSHIPS", ShipsCount (SHIPS_ACT3EntireFleet1)); VarCreateSet ("G_ACT3TeamFighterSHIPS", ShipsCount (SHIPS_ACT3Fighter1)); VarCreateSet ("G_ACT3TeamCorvetteSHIPS", ShipsCount (SHIPS_ACT3Corvette1)); VarCreateSet ("G_ACT3TeamResourceSHIPS", ShipsCount (SHIPS_ACT3Resource1)); VarCreateSet ("G_ACT3TeamResearchSHIPS", ShipsCount (SHIPS_ACT3Research1)); VarCreateSet ("G_ACT3TeamNonCombatSHIPS", ShipsCount (SHIPS_ACT3NonCombat1)); FindEnemiesInside (VOLUME_EntireWorldVolume, SHIPS_ACT3WORLDEntireWorld1, 1000); // Find everyone inside the whole world ShipsSelectClass (SHIPS_ACT3WORLDFighter1, SHIPS_ACT3WORLDEntireWorld1, "CLASS_Fighter"); // Then filter their asses ShipsSelectClass (SHIPS_ACT3WORLDCorvette1, SHIPS_ACT3WORLDEntireWorld1, "CLASS_Corvette"); ShipsSelectClass (SHIPS_ACT3WORLDResource1, SHIPS_ACT3WORLDEntireWorld1, "CLASS_Resource"); ShipsSelectType (SHIPS_ACT3WORLDResearch1, SHIPS_ACT3WORLDEntireWorld1, "ResearchShip"); ShipsSelectClass (SHIPS_ACT3WORLDNonCombat1, SHIPS_ACT3WORLDEntireWorld1, "CLASS_NonCombat"); VarCreateSet ("G_ACT3TeamEntireFleetWORLDSHIPS", ShipsCount (SHIPS_EntireFleet)); // All these for debuggin' VarCreateSet ("G_ACT3TeamFighterWORLDSHIPS", ShipsCount (SHIPS_ACT3WORLDFighter1)); VarCreateSet ("G_ACT3TeamCorvetteWORLDSHIPS", ShipsCount (SHIPS_ACT3WORLDCorvette1)); VarCreateSet ("G_ACT3TeamResourceWORLDSHIPS", ShipsCount (SHIPS_ACT3WORLDResource1)); VarCreateSet ("G_ACT3TeamResearchWORLDSHIPS", ShipsCount (SHIPS_ACT3WORLDResearch1)); VarCreateSet ("G_ACT3TeamNonCombatWORLDSHIPS", ShipsCount (SHIPS_ACT3WORLDNonCombat1)); IF ( (ShipsCount (SHIPS_ACT3Fighter1) > 3) OR // If there are ships in the MothershipSphere go attack them (ShipsCount (SHIPS_ACT3Corvette1) > 2) OR (ShipsCount (SHIPS_ACT3Resource1) > 0) OR (ShipsCount (SHIPS_ACT3Research1) > 0) OR (ShipsCount (SHIPS_ACT3NonCombat1) > 0) ) Jump AttackMothershipSphere; ELSEIF ( (ShipsCount (SHIPS_ACT3WORLDFighter1) > 3) OR // ELSE, if there are ships in the EntireWorld volume, go attack them (ShipsCount (SHIPS_ACT3WORLDCorvette1) > 2) OR (ShipsCount (SHIPS_ACT3WORLDResource1) > 0) OR (ShipsCount (SHIPS_ACT3WORLDResearch1) > 0) OR (ShipsCount (SHIPS_ACT3WORLDNonCombat1) > 0) ) Jump AttackEntireWorld; ELSEIF (ShipsCount (SHIPS_ACT3Mothership1) > 0) // If there are NO ships left IN THE WHOLE WIDE WORLD, attack the Mothership Jump AttackMothership; ENDIF ENDWATCH ENDSTATE MASTERLooking //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE AttackMothershipSphere //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT //FormationDelta (); //TacticsAggressive (); IF (ShipsCount (SHIPS_ACT3Fighter1) > 3) Attack (SHIPS_ACT3Fighter1); // Attack Fighters first VarCreateSet ("AttackingFighter", TRUE); ELSEIF (ShipsCount (SHIPS_ACT3Corvette1) > 2) Attack (SHIPS_ACT3Corvette1); // Attack the Corvettes second VarCreateSet ("AttackingCorvette", TRUE); ELSEIF (ShipsCount (SHIPS_ACT3Resource1) > 0) Attack (SHIPS_ACT3Resource1); // Attack Resource Collectors third VarCreateSet ("AttackingResource", TRUE); ELSEIF ( (ShipsCount (SHIPS_ACT3Research1) > 0) AND (VarGet ("NeverAttackResearchAgain") = FALSE) ) Attack (SHIPS_ACT3Research1); // Attack Research Ships fourth VarCreateSet ("AttackingResearch", TRUE); ELSEIF (ShipsCount (SHIPS_ACT3NonCombat1) > 0) Attack (SHIPS_ACT3NonCombat1); // Attack the Mothership last VarCreateSet ("AttackingNonCombat", TRUE); ELSEIF (ShipsCount (SHIPS_ACT3Mothership1) > 0) Attack (SHIPS_ACT3Mothership1); // Attack the Mothership last VarCreateSet ("AttackingMothership", TRUE); ENDIF ENDINIT WATCH // **** watch everywhere stuff **** IF (VarGet ("G_P1MothershipUnderAttack") = TRUE) // If the P1 Mothership is under attack, go help it Jump GoHelpP1Mothership; ENDIF IF (VarGet ("G_P1MothershipGettinOut") = TRUE) // If the P1 Mothership is under attack, go help it Jump DockForGood; ENDIF IF (UnderAttack (SHIPS_ACT3FightersUnderAttack)) // If you get attacked, jump to defending yourself ShipsSelectClass (SHIPS_ACT3FightersMothership, SHIPS_ACT3FightersUnderAttack, "CLASS_Mothership"); ShipsRemove (SHIPS_ACT3FightersUnderAttack, SHIPS_ACT3FightersMothership); ShipsSelectClass (SHIPS_ACT3FightersFighterLOOK, SHIPS_ACT3FightersUnderAttack, "CLASS_Fighter"); ShipsSelectClass (SHIPS_ACT3FightersCorvetteLOOK, SHIPS_ACT3FightersUnderAttack, "CLASS_Corvette"); IF (ShipsCount (SHIPS_ACT3FightersFighterLOOK) > 3) Jump Defend; ELSEIF (ShipsCount (SHIPS_ACT3FightersCorvetteLOOK) > 2) Jump Defend; ENDIF ENDIF IF (VarGet ("AttackingCorvette") = TRUE) // If all Corvettes are dead, go back to watch loop IF (ShipsCount (SHIPS_ACT3Corvette1) < 3) VarDestroy ("AttackingCorvette"); Jump MASTERLooking; ENDIF ELSEIF (VarGet ("AttackingResource") = TRUE) // If Collector is dead, go back to watch loop IF (ShipsCount (SHIPS_ACT3Resource1) = 0) VarDestroy ("AttackingResource"); Jump MASTERLooking; ENDIF ELSEIF (VarGet ("AttackingResearch") = TRUE) // If Research Ship is at 50% health or below, go back to watch loop ShipsSelectDamaged (SHIPS_ACT3ResearchDamaged1, SHIPS_ACT3Research1, 50); IF ( (ShipsCount (SHIPS_ACT3Research1) = 0) OR (ShipsCount (SHIPS_ACT3ResearchDamaged1) > 0) ) VarDestroy ("AttackingResearch"); VarCreateSet ("NeverAttackResearchAgain", TRUE); Jump MASTERLooking; ENDIF ELSEIF (VarGet ("AttackingFighter") = TRUE) // If all Fighters are dead, go back to watch loop IF (ShipsCount (SHIPS_ACT3Fighter1) < 4) VarDestroy ("AttackingFighter"); Jump MASTERLooking; ENDIF ELSEIF (VarGet ("AttackingNonCombat") = TRUE) // If all the noncombat ships are dead, go back to watch loop IF (ShipsCount (SHIPS_ACT3NonCombat1) = 0) VarDestroy ("AttackingNonCombat"); Jump MASTERLooking; ENDIF ELSEIF (VarGet ("AttackingMothership") = TRUE) IF (ShipsCount (SHIPS_ACT3Mothership1) = 0) VarDestroy ("AttackingMothership"); Jump MASTERLooking; ENDIF ENDIF // if the attack order gets cleared for some reason, jump back to this state IF (ShipsOrder (TEAMSHIPS_ACT3Fighters) != 2) Jump MASTERLooking; ENDIF ENDWATCH ENDSTATE AttackMothershipSphere //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE AttackEntireWorld //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT //FormationDelta (); //TacticsAggressive (); IF (ShipsCount (SHIPS_ACT3WORLDFighter1) > 3) Attack (SHIPS_ACT3WORLDFighter1); // Attack Fighters first VarCreateSet ("AttackingFighter", TRUE); ELSEIF (ShipsCount (SHIPS_ACT3WORLDCorvette1) > 2) Attack (SHIPS_ACT3WORLDCorvette1); // Attack the Corvettes second VarCreateSet ("AttackingCorvette", TRUE); ELSEIF (ShipsCount (SHIPS_ACT3WORLDResource1) > 0) Attack (SHIPS_ACT3WORLDResource1); // Attack Resource Collectors third VarCreateSet ("AttackingResource", TRUE); ELSEIF ( (ShipsCount (SHIPS_ACT3WORLDResearch1) > 0) AND (VarGet ("NeverAttackResearchAgain") = FALSE) ) Attack (SHIPS_ACT3WORLDResearch1); // Attack Research Ships fourth VarCreateSet ("AttackingResearch", TRUE); ELSEIF (ShipsCount (SHIPS_ACT3WORLDNonCombat1) > 0) Attack (SHIPS_ACT3WORLDNonCombat1); // Attack the Mothership last VarCreateSet ("AttackingNonCombat", TRUE); ELSEIF (ShipsCount (SHIPS_ACT3WORLDMothership1) > 0) Attack (SHIPS_ACT3WORLDMothership1); // Attack the Mothership last VarCreateSet ("AttackingMothership", TRUE); ENDIF ENDINIT WATCH // **** watch everywhere stuff **** IF (VarGet ("G_P1MothershipUnderAttack") = TRUE) // If the P1 Mothership is under attack, go help it Jump GoHelpP1Mothership; ENDIF IF (VarGet ("G_P1MothershipGettinOut") = TRUE) // If the P1 Mothership is under attack, go help it Jump DockForGood; ENDIF IF (UnderAttack (SHIPS_ACT3FightersUnderAttack)) // If you get attacked, jump to defending yourself ShipsSelectClass (SHIPS_ACT3FightersMothership, SHIPS_ACT3FightersUnderAttack, "CLASS_Mothership"); ShipsRemove (SHIPS_ACT3FightersUnderAttack, SHIPS_ACT3FightersMothership); ShipsSelectClass (SHIPS_ACT3FightersFighterLOOK, SHIPS_ACT3FightersUnderAttack, "CLASS_Fighter"); ShipsSelectClass (SHIPS_ACT3FightersCorvetteLOOK, SHIPS_ACT3FightersUnderAttack, "CLASS_Corvette"); IF (ShipsCount (SHIPS_ACT3FightersFighterLOOK) > 3) Jump Defend; ELSEIF (ShipsCount (SHIPS_ACT3FightersCorvetteLOOK) > 2) Jump Defend; ENDIF ENDIF IF (VarGet ("AttackingCorvette") = TRUE) // If all Corvettes are dead, go back to watch loop IF (ShipsCount (SHIPS_ACT3WORLDCorvette1) < 3) VarDestroy ("AttackingCorvette"); Jump MASTERLooking; ENDIF ELSEIF (VarGet ("AttackingResource") = TRUE) // If Collector is dead, go back to watch loop IF (ShipsCount (SHIPS_ACT3WORLDResource1) = 0) VarDestroy ("AttackingResource"); Jump MASTERLooking; ENDIF ELSEIF (VarGet ("AttackingResearch") = TRUE) // If Research Ship is at 50% health or below, go back to watch loop ShipsSelectDamaged (SHIPS_ACT3WORLDResearchDamaged1, SHIPS_ACT3WORLDResearch1, 50); IF ( (ShipsCount (SHIPS_ACT3WORLDResearch1) = 0) OR (ShipsCount (SHIPS_ACT3WORLDResearchDamaged1) > 0) ) VarDestroy ("AttackingResearch"); VarCreateSet ("NeverAttackResearchAgain", TRUE); Jump MASTERLooking; ENDIF ELSEIF (VarGet ("AttackingFighter") = TRUE) // If all Fighters are dead, go back to watch loop IF (ShipsCount (SHIPS_ACT3WORLDFighter1) < 4) VarDestroy ("AttackingFighter"); Jump MASTERLooking; ENDIF ELSEIF (VarGet ("AttackingNonCombat") = TRUE) // If all the noncombat ships are dead, go back to watch loop IF (ShipsCount (SHIPS_ACT3WORLDNonCombat1) = 0) VarDestroy ("AttackingNonCombat"); Jump MASTERLooking; ENDIF ELSEIF (VarGet ("AttackingMothership") = TRUE) IF (ShipsCount (SHIPS_ACT3WORLDMothership1) = 0) VarDestroy ("AttackingMothership"); Jump MASTERLooking; ENDIF ENDIF // if the attack order gets cleared for some reason, jump back to this state IF (ShipsOrder (TEAMSHIPS_ACT3Fighters) != 2) Jump MASTERLooking; ENDIF ENDWATCH ENDSTATE AttackEntireWorld //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE AttackMothership //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT AttackMothership (); TimerCreateSetStart ("GoBackToMASTERLooking", 30); ENDINIT WATCH // **** watch everywhere stuff **** IF (VarGet ("G_P1MothershipUnderAttack") = TRUE) // If the P1 Mothership is under attack, go help it Jump GoHelpP1Mothership; ENDIF IF (VarGet ("G_P1MothershipGettinOut") = TRUE) // If the P1 Mothership is under attack, go help it Jump DockForGood; ENDIF IF (UnderAttack (SHIPS_ACT3FightersUnderAttack)) // If you get attacked, jump to defending yourself ShipsSelectClass (SHIPS_ACT3FightersMothership, SHIPS_ACT3FightersUnderAttack, "CLASS_Mothership"); ShipsRemove (SHIPS_ACT3FightersUnderAttack, SHIPS_ACT3FightersMothership); ShipsSelectClass (SHIPS_ACT3FightersFighterLOOK, SHIPS_ACT3FightersUnderAttack, "CLASS_Fighter"); ShipsSelectClass (SHIPS_ACT3FightersCorvetteLOOK, SHIPS_ACT3FightersUnderAttack, "CLASS_Corvette"); IF (ShipsCount (SHIPS_ACT3FightersFighterLOOK) > 3) Jump Defend; ELSEIF (ShipsCount (SHIPS_ACT3FightersCorvetteLOOK) > 2) Jump Defend; ENDIF ENDIF // if the attack order gets cleared for some reason, jump back to this state IF (ShipsOrder (TEAMSHIPS_ACT3Fighters) != 2) Jump MASTERLooking; ENDIF // if the timer is up, go back to the MASTERLooking state to make sure you should still be attacking the Mothership IF (TimerExpiredDestroy ("GoBackToMASTERLooking")) Jump MASTERLooking; ENDIF ENDWATCH ENDSTATE AttackMothership //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE Defend //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT //TacticsAggressive (); ShipsSelectClass (SHIPS_ACT3FightersFighters, SHIPS_ACT3FightersUnderAttack, "CLASS_Fighter"); // Filter out Fighters IF (ShipsCount (SHIPS_ACT3FightersFighters) > 0) // If there are any Fighters, attack them first Attack (SHIPS_ACT3FightersFighters); ELSE Attack (SHIPS_ACT3FightersUnderAttack); // Otherwise, just attack everyone ENDIF ENDINIT WATCH // **** watch everywhere stuff **** IF (VarGet ("G_P1MothershipUnderAttack") = TRUE) // If the P1 Mothership is under attack, go help it Jump GoHelpP1Mothership; ENDIF IF (VarGet ("G_P1MothershipGettinOut") = TRUE) // If the P1 Mothership is under attack, go help it Jump DockForGood; ENDIF IF (NOT (UnderAttack (SHIPS_Null91244))) // If you're not under attack anymore, go back to MASTERLooking Jump MASTERLooking; ENDIF IF (ShipsCount (SHIPS_ACT3FightersUnderAttack) < 4) // If you've killed off all the attackers, go back to MASTERLooking Jump MASTERLooking; ENDIF // if the attack order gets cleared for some reason, jump back to this state IF (ShipsOrder (TEAMSHIPS_ACT3Fighters) != 2) Jump MASTERLooking; ENDIF ENDWATCH ENDSTATE Defend //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE GoHelpP1Mothership //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT Attack (SHIPS_AttackingP1Mothership); ENDINIT WATCH // **** watch everywhere stuff **** IF (VarGet ("G_P1MothershipGettinOut") = TRUE) // If the P1 Mothership is under attack, go help it Jump DockForGood; ENDIF IF (UnderAttack (SHIPS_ACT3FightersUnderAttack)) // If you get attacked, jump to defending yourself ShipsSelectClass (SHIPS_ACT3FightersMothership, SHIPS_ACT3FightersUnderAttack, "CLASS_Mothership"); ShipsRemove (SHIPS_ACT3FightersUnderAttack, SHIPS_ACT3FightersMothership); ShipsSelectClass (SHIPS_ACT3FightersFighterLOOK, SHIPS_ACT3FightersUnderAttack, "CLASS_Fighter"); ShipsSelectClass (SHIPS_ACT3FightersCorvetteLOOK, SHIPS_ACT3FightersUnderAttack, "CLASS_Corvette"); IF (ShipsCount (SHIPS_ACT3FightersFighterLOOK) > 3) Jump Defend; ELSEIF (ShipsCount (SHIPS_ACT3FightersCorvetteLOOK) > 2) Jump Defend; ENDIF ENDIF // if the attack order gets cleared for some reason, jump back to this state IF (ShipsOrder (TEAMSHIPS_ACT3Fighters) != 2) Jump MASTERLooking; ENDIF ENDWATCH ENDSTATE GoHelpP1Mothership //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE DockForGood //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT DockStay (TEAM_P1Mothership); ENDINIT WATCH IFONCE (TeamDockedReadyForLaunch ()) VarCreateSet ("G_ACT3FightersHaveDocked", TRUE); ENDIFONCE IF (VarGet ("G_P1MothershipHasRetreated") = TRUE) Jump BugginOut; ENDIF IF (ShipsCount (TEAMSHIPS_ACT3Fighters) = 0) // If the team dies, jump to a nullstate Jump NullState; ENDIF ENDWATCH ENDSTATE DockForGood //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE BugginOut //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT Stop (); MoveTo (POINT_OutsideOfWorld); ENDINIT WATCH //IF (Nearby (POINT_OutsideOfWorld, 1000)) // TeamHyperspaceOut (); // Jump NullState; //ENDIF IF (PointInside (VOLUME_BugginOutVolume, THISTEAMSPOINT)) HideShips (THISTEAMSHIPS); Jump NullState; ENDIF ENDWATCH ENDSTATE BugginOut //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE NullState //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ENDINIT WATCH ENDWATCH ENDSTATE NullState //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ENDFSM ACT3Fighters //ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ACT3Fighters ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ //ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ACT3Corvettes1 ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ FSM ACT3Corvettes1 States DockInstant, Launch, MASTERLooking, AttackMothershipSphere, AttackEntireWorld, AttackMothership, AllDeadWaitForShips, Defend, GoHelpP1Mothership, DockForGood, BugginOut, NullState; INIT VarCreateSet ("SHIPSOriginal", (ShipsCount (THISTEAMSHIPS))); VarCreateSet ("SHIPSRequested", 0); VarCreateSet ("SHIPSNeeded", 0); VarCreateSet ("SHIPSNewships", 0); VarCreateSet ("SHIPSKilled", 0); // Create a variable = to the number of ships killed VarSet ("G_TOTALOriginalACT3Corvettes1", VarGet ("G_TOTALOriginalACT3Corvettes1") + ShipsCount (THISTEAMSHIPS)); Jump DockInstant; ENDINIT WATCH // if there are 0 ships in the team, jump to a wait state to wait for more ships (otherwise the order will get lost) IF ( (ShipsCount (THISTEAMSHIPS) = 0) AND (VarGet ("WaitingForShips") = FALSE) ) Jump AllDeadWaitForShips; ENDIF // repopulation stuff from Falko IF ( ((ShipsCount (THISTEAMSHIPS) + VarGet ("SHIPSRequested")) < VarGet ("SHIPSOriginal")) AND (VarGet ("G_P1MothershipGettinOut") = FALSE) ) VarSet ("SHIPSNeeded", (VarGet ("SHIPSOriginal") - (ShipsCount (THISTEAMSHIPS) + VarGet("SHIPSRequested")))); RequestShips ("P1MissileCorvette", VarGet ("SHIPSNeeded")); VarSet ("SHIPSKilled", VarGet ("SHIPSKilled") + VarGet ("SHIPSNeeded")); VarSet ("G_TOTALACT3Corvettes1Killed", VarGet ("SHIPSKilled")); VarSet("SHIPSRequested", VarGet("SHIPSRequested") + VarGet("SHIPSNeeded")); ENDIF VarSet ("SHIPSNewships", NewShipsAdded()); IF (VarGet("SHIPSNewships")) //FormationBroad (); VarSet("SHIPSRequested", VarGet("SHIPSRequested") - VarGet("SHIPSNewships")); ENDIF ENDWATCH STATE AllDeadWaitForShips //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT VarCreateSet ("WaitingForShips", TRUE); ENDINIT WATCH IF (ShipsCount (THISTEAMSHIPS) > 0) VarDestroy ("WaitingForShips"); Jump MASTERLooking; ENDIF ENDWATCH ENDSTATE AllDeadWaitForShips //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE DockInstant //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT DockInstant (TEAM_P1Mothership); // Dock right away with the P1 Mothership ENDINIT WATCH //IF (ObjectiveGet ("SalvageVessel") = TRUE) // When the player's SCReturning docks, begin ACT3! IF (VarGet ("G_BeginACT3Now") = TRUE) // Told to begin ACT3 a little while after the player gets the data from the KS Jump Launch; ENDIF ENDWATCH ENDSTATE DockInstant //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE Launch //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT IF (TeamDockedReadyForLaunch ()) // Just for safety Launch (); VarCreateSet ("G_ACT3Corvettes1HaveLaunched", TRUE); TimerCreateSetStart ("ACT3Corvettes1HaveLaunched", 12); // Give it some time to launch before attacking ENDIF ENDINIT WATCH // **** watch everywhere stuff **** IF (VarGet ("G_P1MothershipUnderAttack") = TRUE) // If the P1 Mothership is under attack, go help it Jump GoHelpP1Mothership; ENDIF IF (VarGet ("G_P1MothershipGettinOut") = TRUE) // If the P1 Mothership is under attack, go help it Jump DockForGood; ENDIF IF (UnderAttack (SHIPS_ACT3Corvettes1UnderAttack)) // If you get attacked, jump to defending yourself ShipsSelectClass (SHIPS_ACT3Corvettes1Mothership, SHIPS_ACT3Corvettes1UnderAttack, "CLASS_Mothership"); ShipsRemove (SHIPS_ACT3Corvettes1UnderAttack, SHIPS_ACT3Corvettes1Mothership); ShipsSelectClass (SHIPS_ACT3Corvettes1FighterLOOK, SHIPS_ACT3Corvettes1UnderAttack, "CLASS_Fighter"); ShipsSelectClass (SHIPS_ACT3Corvettes1CorvetteLOOK, SHIPS_ACT3Corvettes1UnderAttack, "CLASS_Corvette"); IF (ShipsCount (SHIPS_ACT3Corvettes1FighterLOOK) > 3) Jump Defend; ELSEIF (ShipsCount (SHIPS_ACT3Corvettes1CorvetteLOOK) > 2) Jump Defend; ENDIF ENDIF IF (TimerExpiredDestroy ("ACT3Corvettes1HaveLaunched")) Jump MASTERLooking; ENDIF ENDWATCH ENDSTATE Launch //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE MASTERLooking //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ENDINIT WATCH // **** watch everywhere stuff **** IF (VarGet ("G_P1MothershipUnderAttack") = TRUE) // If the P1 Mothership is under attack, go help it Jump GoHelpP1Mothership; ENDIF IF (VarGet ("G_P1MothershipGettinOut") = TRUE) // If the P1 Mothership is under attack, go help it Jump DockForGood; ENDIF IF (UnderAttack (SHIPS_ACT3Corvettes1UnderAttack)) // If you get attacked, jump to defending yourself ShipsSelectClass (SHIPS_ACT3Corvettes1Mothership, SHIPS_ACT3Corvettes1UnderAttack, "CLASS_Mothership"); ShipsRemove (SHIPS_ACT3Corvettes1UnderAttack, SHIPS_ACT3Corvettes1Mothership); ShipsSelectClass (SHIPS_ACT3Corvettes1FighterLOOK, SHIPS_ACT3Corvettes1UnderAttack, "CLASS_Fighter"); ShipsSelectClass (SHIPS_ACT3Corvettes1CorvetteLOOK, SHIPS_ACT3Corvettes1UnderAttack, "CLASS_Corvette"); IF (ShipsCount (SHIPS_ACT3Corvettes1FighterLOOK) > 3) Jump Defend; ELSEIF (ShipsCount (SHIPS_ACT3Corvettes1CorvetteLOOK) > 2) Jump Defend; ENDIF ENDIF FindEnemiesInside (VOLUME_MothershipSphere, SHIPS_ACT3EntireFleet2, 200); // Find everyone in the MothershipSphere ShipsSelectClass (SHIPS_ACT3Fighter2, SHIPS_ACT3EntireFleet2, "CLASS_Fighter"); // Then filter their asses ShipsSelectClass (SHIPS_ACT3Corvette2, SHIPS_ACT3EntireFleet2, "CLASS_Corvette"); ShipsSelectClass (SHIPS_ACT3Resource2, SHIPS_ACT3EntireFleet2, "CLASS_Resource"); ShipsSelectType (SHIPS_ACT3Research2, SHIPS_ACT3EntireFleet2, "ResearchShip"); ShipsSelectClass (SHIPS_ACT3NonCombat2, SHIPS_ACT3EntireFleet2, "CLASS_NonCombat"); ShipsSelectClass (SHIPS_ACT3Mothership2, SHIPS_ACT3EntireFleet2, "CLASS_Mothership"); VarCreateSet ("G_ACT3TeamMothershipSHIPS", ShipsCount (SHIPS_ACT3Mothership2)); // All these for debuggin' VarCreateSet ("G_ACT3TeamEntireFleetSHIPS", ShipsCount (SHIPS_ACT3EntireFleet2)); VarCreateSet ("G_ACT3TeamFighterSHIPS", ShipsCount (SHIPS_ACT3Fighter2)); VarCreateSet ("G_ACT3TeamCorvetteSHIPS", ShipsCount (SHIPS_ACT3Corvette2)); VarCreateSet ("G_ACT3TeamResourceSHIPS", ShipsCount (SHIPS_ACT3Resource2)); VarCreateSet ("G_ACT3TeamResearchSHIPS", ShipsCount (SHIPS_ACT3Research2)); VarCreateSet ("G_ACT3TeamNonCombatSHIPS", ShipsCount (SHIPS_ACT3NonCombat2)); FindEnemiesInside (VOLUME_EntireWorldVolume, SHIPS_ACT3WORLDEntireWorld2, 2000); // Find everyone inside the whole world ShipsSelectClass (SHIPS_ACT3WORLDFighter2, SHIPS_ACT3WORLDEntireWorld2, "CLASS_Fighter"); // Then filter their asses ShipsSelectClass (SHIPS_ACT3WORLDCorvette2, SHIPS_ACT3WORLDEntireWorld2, "CLASS_Corvette"); ShipsSelectClass (SHIPS_ACT3WORLDResource2, SHIPS_ACT3WORLDEntireWorld2, "CLASS_Resource"); ShipsSelectType (SHIPS_ACT3WORLDResearch2, SHIPS_ACT3WORLDEntireWorld2, "ResearchShip"); ShipsSelectClass (SHIPS_ACT3WORLDNonCombat2, SHIPS_ACT3WORLDEntireWorld2, "CLASS_NonCombat"); VarCreateSet ("G_ACT3TeamEntireFleetWORLDSHIPS", ShipsCount (SHIPS_EntireFleet)); // All these for debuggin' VarCreateSet ("G_ACT3TeamFighterWORLDSHIPS", ShipsCount (SHIPS_ACT3WORLDFighter2)); VarCreateSet ("G_ACT3TeamCorvetteWORLDSHIPS", ShipsCount (SHIPS_ACT3WORLDCorvette2)); VarCreateSet ("G_ACT3TeamResourceWORLDSHIPS", ShipsCount (SHIPS_ACT3WORLDResource2)); VarCreateSet ("G_ACT3TeamResearchWORLDSHIPS", ShipsCount (SHIPS_ACT3WORLDResearch2)); VarCreateSet ("G_ACT3TeamNonCombatWORLDSHIPS", ShipsCount (SHIPS_ACT3WORLDNonCombat2)); IF ( (ShipsCount (SHIPS_ACT3Fighter2) > 3) OR // If there are ships in the MothershipSphere go attack them (ShipsCount (SHIPS_ACT3Corvette2) > 2) OR (ShipsCount (SHIPS_ACT3Resource2) > 0) OR (ShipsCount (SHIPS_ACT3Research2) > 0) OR (ShipsCount (SHIPS_ACT3NonCombat2) > 0) ) Jump AttackMothershipSphere; ELSEIF ( (ShipsCount (SHIPS_ACT3WORLDFighter2) > 3) OR // ELSE, if there are ships in the EntireWorld volume, go attack them (ShipsCount (SHIPS_ACT3WORLDCorvette2) > 2) OR (ShipsCount (SHIPS_ACT3WORLDResource2) > 0) OR (ShipsCount (SHIPS_ACT3WORLDResearch2) > 0) OR (ShipsCount (SHIPS_ACT3WORLDNonCombat2) > 0) ) Jump AttackEntireWorld; ELSEIF (ShipsCount (SHIPS_ACT3Mothership2) > 0) // If there are NO ships left IN THE WHOLE WIDE WORLD, attack the Mothership Jump AttackMothership; ENDIF ENDWATCH ENDSTATE MASTERLooking //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE AttackMothershipSphere //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT //FormationDelta (); //TacticsAggressive (); IF (ShipsCount (SHIPS_ACT3Corvette2) > 2) Attack (SHIPS_ACT3Corvette2); // Attack the Corvettes second VarCreateSet ("AttackingCorvette", TRUE); ELSEIF (ShipsCount (SHIPS_ACT3Resource2) > 0) Attack (SHIPS_ACT3Resource2); // Attack Resource Collectors third VarCreateSet ("AttackingResource", TRUE); ELSEIF (ShipsCount (SHIPS_ACT3Fighter2) > 3) Attack (SHIPS_ACT3Fighter2); // Attack Fighters first VarCreateSet ("AttackingFighter", TRUE); ELSEIF ( (ShipsCount (SHIPS_ACT3Research2) > 0) AND (VarGet ("NeverAttackResearchAgain") = FALSE) ) Attack (SHIPS_ACT3Research2); // Attack Research Ships fourth VarCreateSet ("AttackingResearch", TRUE); ELSEIF (ShipsCount (SHIPS_ACT3NonCombat2) > 0) Attack (SHIPS_ACT3NonCombat2); // Attack the Mothership last VarCreateSet ("AttackingNonCombat", TRUE); ELSEIF (ShipsCount (SHIPS_ACT3Mothership2) > 0) Attack (SHIPS_ACT3Mothership2); // Attack the Mothership last VarCreateSet ("AttackingMothership", TRUE); ENDIF ENDINIT WATCH // **** watch everywhere stuff **** IF (VarGet ("G_P1MothershipUnderAttack") = TRUE) // If the P1 Mothership is under attack, go help it Jump GoHelpP1Mothership; ENDIF IF (VarGet ("G_P1MothershipGettinOut") = TRUE) // If the P1 Mothership is under attack, go help it Jump DockForGood; ENDIF IF (UnderAttack (SHIPS_ACT3Corvettes1UnderAttack)) // If you get attacked, jump to defending yourself ShipsSelectClass (SHIPS_ACT3Corvettes1Mothership, SHIPS_ACT3Corvettes1UnderAttack, "CLASS_Mothership"); ShipsRemove (SHIPS_ACT3Corvettes1UnderAttack, SHIPS_ACT3Corvettes1Mothership); ShipsSelectClass (SHIPS_ACT3Corvettes1FighterLOOK, SHIPS_ACT3Corvettes1UnderAttack, "CLASS_Fighter"); ShipsSelectClass (SHIPS_ACT3Corvettes1CorvetteLOOK, SHIPS_ACT3Corvettes1UnderAttack, "CLASS_Corvette"); IF (ShipsCount (SHIPS_ACT3Corvettes1FighterLOOK) > 3) Jump Defend; ELSEIF (ShipsCount (SHIPS_ACT3Corvettes1CorvetteLOOK) > 2) Jump Defend; ENDIF ENDIF IF (VarGet ("AttackingCorvette") = TRUE) // If all Corvettes are dead, go back to watch loop IF (ShipsCount (SHIPS_ACT3Corvette2) < 3) VarDestroy ("AttackingCorvette"); Jump MASTERLooking; ENDIF ELSEIF (VarGet ("AttackingResource") = TRUE) // If Collector is dead, go back to watch loop IF (ShipsCount (SHIPS_ACT3Resource2) = 0) VarDestroy ("AttackingResource"); Jump MASTERLooking; ENDIF ELSEIF (VarGet ("AttackingResearch") = TRUE) // If Research Ship is at 50% health or below, go back to watch loop ShipsSelectDamaged (SHIPS_ACT3ResearchDamaged2, SHIPS_ACT3Research2, 50); IF ( (ShipsCount (SHIPS_ACT3Research2) = 0) OR (ShipsCount (SHIPS_ACT3ResearchDamaged2) > 0) ) VarDestroy ("AttackingResearch"); VarCreateSet ("NeverAttackResearchAgain", TRUE); Jump MASTERLooking; ENDIF ELSEIF (VarGet ("AttackingFighter") = TRUE) // If all Fighters are dead, go back to watch loop IF (ShipsCount (SHIPS_ACT3Fighter2) < 4) VarDestroy ("AttackingFighter"); Jump MASTERLooking; ENDIF ELSEIF (VarGet ("AttackingNonCombat") = TRUE) // If all the noncombat ships are dead, go back to watch loop IF (ShipsCount (SHIPS_ACT3NonCombat2) = 0) VarDestroy ("AttackingNonCombat"); Jump MASTERLooking; ENDIF ELSEIF (VarGet ("AttackingMothership") = TRUE) IF (ShipsCount (SHIPS_ACT3Mothership2) = 0) VarDestroy ("AttackingMothership"); Jump MASTERLooking; ENDIF ENDIF // if the attack order gets cleared for some reason, jump back to this state IF (ShipsOrder (TEAMSHIPS_ACT3Corvettes2) != 2) Jump MASTERLooking; ENDIF ENDWATCH ENDSTATE AttackMothershipSphere //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE AttackEntireWorld //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT //FormationDelta (); //TacticsAggressive (); IF (ShipsCount (SHIPS_ACT3WORLDCorvette2) > 2) Attack (SHIPS_ACT3WORLDCorvette2); // Attack the Corvettes second VarCreateSet ("AttackingCorvette", TRUE); ELSEIF (ShipsCount (SHIPS_ACT3WORLDResource2) > 0) Attack (SHIPS_ACT3WORLDResource2); // Attack Resource Collectors third VarCreateSet ("AttackingResource", TRUE); ELSEIF (ShipsCount (SHIPS_ACT3WORLDFighter2) > 3) Attack (SHIPS_ACT3WORLDFighter2); // Attack Fighters first VarCreateSet ("AttackingFighter", TRUE); ELSEIF ( (ShipsCount (SHIPS_ACT3WORLDResearch2) > 0) AND (VarGet ("NeverAttackResearchAgain") = FALSE) ) Attack (SHIPS_ACT3WORLDResearch2); // Attack Research Ships fourth VarCreateSet ("AttackingResearch", TRUE); ELSEIF (ShipsCount (SHIPS_ACT3WORLDNonCombat2) > 0) Attack (SHIPS_ACT3WORLDNonCombat2); // Attack the Mothership last VarCreateSet ("AttackingNonCombat", TRUE); ELSEIF (ShipsCount (SHIPS_ACT3WORLDMothership2) > 0) Attack (SHIPS_ACT3WORLDMothership2); // Attack the Mothership last VarCreateSet ("AttackingMothership", TRUE); ENDIF ENDINIT WATCH // **** watch everywhere stuff **** IF (VarGet ("G_P1MothershipUnderAttack") = TRUE) // If the P1 Mothership is under attack, go help it Jump GoHelpP1Mothership; ENDIF IF (VarGet ("G_P1MothershipGettinOut") = TRUE) // If the P1 Mothership is under attack, go help it Jump DockForGood; ENDIF IF (UnderAttack (SHIPS_ACT3Corvettes1UnderAttack)) // If you get attacked, jump to defending yourself ShipsSelectClass (SHIPS_ACT3Corvettes1Mothership, SHIPS_ACT3Corvettes1UnderAttack, "CLASS_Mothership"); ShipsRemove (SHIPS_ACT3Corvettes1UnderAttack, SHIPS_ACT3Corvettes1Mothership); ShipsSelectClass (SHIPS_ACT3Corvettes1FighterLOOK, SHIPS_ACT3Corvettes1UnderAttack, "CLASS_Fighter"); ShipsSelectClass (SHIPS_ACT3Corvettes1CorvetteLOOK, SHIPS_ACT3Corvettes1UnderAttack, "CLASS_Corvette"); IF (ShipsCount (SHIPS_ACT3Corvettes1FighterLOOK) > 3) Jump Defend; ELSEIF (ShipsCount (SHIPS_ACT3Corvettes1CorvetteLOOK) > 2) Jump Defend; ENDIF ENDIF IF (VarGet ("AttackingCorvette") = TRUE) // If all Corvettes are dead, go back to watch loop IF (ShipsCount (SHIPS_ACT3WORLDCorvette2) < 3) VarDestroy ("AttackingCorvette"); Jump MASTERLooking; ENDIF ELSEIF (VarGet ("AttackingResource") = TRUE) // If Collector is dead, go back to watch loop IF (ShipsCount (SHIPS_ACT3WORLDResource2) = 0) VarDestroy ("AttackingResource"); Jump MASTERLooking; ENDIF ELSEIF (VarGet ("AttackingResearch") = TRUE) // If Research Ship is at 50% health or below, go back to watch loop ShipsSelectDamaged (SHIPS_ACT3WORLDResearchDamaged2, SHIPS_ACT3WORLDResearch2, 50); IF ( (ShipsCount (SHIPS_ACT3WORLDResearch2) = 0) OR (ShipsCount (SHIPS_ACT3WORLDResearchDamaged2) > 0) ) VarDestroy ("AttackingResearch"); VarCreateSet ("NeverAttackResearchAgain", TRUE); Jump MASTERLooking; ENDIF ELSEIF (VarGet ("AttackingFighter") = TRUE) // If all Fighters are dead, go back to watch loop IF (ShipsCount (SHIPS_ACT3WORLDFighter2) < 4) VarDestroy ("AttackingFighter"); Jump MASTERLooking; ENDIF ELSEIF (VarGet ("AttackingNonCombat") = TRUE) // If all the noncombat ships are dead, go back to watch loop IF (ShipsCount (SHIPS_ACT3WORLDNonCombat2) = 0) VarDestroy ("AttackingNonCombat"); Jump MASTERLooking; ENDIF ELSEIF (VarGet ("AttackingMothership") = TRUE) IF (ShipsCount (SHIPS_ACT3WORLDMothership2) = 0) VarDestroy ("AttackingMothership"); Jump MASTERLooking; ENDIF ENDIF // if the attack order gets cleared for some reason, jump back to this state IF (ShipsOrder (TEAMSHIPS_ACT3Corvettes1) != 2) Jump MASTERLooking; ENDIF ENDWATCH ENDSTATE AttackEntireWorld //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE AttackMothership //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT AttackMothership (); TimerCreateSetStart ("GoBackToMASTERLooking", 30); ENDINIT WATCH // **** watch everywhere stuff **** IF (VarGet ("G_P1MothershipUnderAttack") = TRUE) // If the P1 Mothership is under attack, go help it Jump GoHelpP1Mothership; ENDIF IF (VarGet ("G_P1MothershipGettinOut") = TRUE) // If the P1 Mothership is under attack, go help it Jump DockForGood; ENDIF IF (UnderAttack (SHIPS_ACT3Corvettes1UnderAttack)) // If you get attacked, jump to defending yourself ShipsSelectClass (SHIPS_ACT3Corvettes1Mothership, SHIPS_ACT3Corvettes1UnderAttack, "CLASS_Mothership"); ShipsRemove (SHIPS_ACT3Corvettes1UnderAttack, SHIPS_ACT3Corvettes1Mothership); ShipsSelectClass (SHIPS_ACT3Corvettes1FighterLOOK, SHIPS_ACT3Corvettes1UnderAttack, "CLASS_Fighter"); ShipsSelectClass (SHIPS_ACT3Corvettes1CorvetteLOOK, SHIPS_ACT3Corvettes1UnderAttack, "CLASS_Corvette"); IF (ShipsCount (SHIPS_ACT3Corvettes1FighterLOOK) > 3) Jump Defend; ELSEIF (ShipsCount (SHIPS_ACT3Corvettes1CorvetteLOOK) > 2) Jump Defend; ENDIF ENDIF // if the attack order gets cleared for some reason, jump back to this state IF (ShipsOrder (TEAMSHIPS_ACT3Corvettes1) != 2) Jump MASTERLooking; ENDIF // if the timer is up, go back to the MASTERLooking state to make sure you should still be attacking the Mothership IF (TimerExpiredDestroy ("GoBackToMASTERLooking")) Jump MASTERLooking; ENDIF ENDWATCH ENDSTATE AttackMothership //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE Defend //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT //TacticsAggressive (); ShipsSelectClass (SHIPS_ACT3Corvettes1Fighters, SHIPS_ACT3Corvettes1UnderAttack, "CLASS_Fighter"); // Filter out Fighters IF (ShipsCount (SHIPS_ACT3Corvettes1Fighters) > 3) // If there are any Fighters, attack them first Attack (SHIPS_ACT3Corvettes1Fighters); ELSE Attack (SHIPS_ACT3Corvettes1UnderAttack); // Otherwise, just attack everyone ENDIF ENDINIT WATCH // **** watch everywhere stuff **** IF (VarGet ("G_P1MothershipUnderAttack") = TRUE) // If the P1 Mothership is under attack, go help it Jump GoHelpP1Mothership; ENDIF IF (VarGet ("G_P1MothershipGettinOut") = TRUE) // If the P1 Mothership is under attack, go help it Jump DockForGood; ENDIF IF (NOT (UnderAttack (SHIPS_Null91244))) // If you're not under attack anymore, go back to MASTERLooking Jump MASTERLooking; ENDIF IF (ShipsCount (SHIPS_ACT3Corvettes1UnderAttack) < 4) // If you've killed off all the attackers, go back to MASTERLooking Jump MASTERLooking; ENDIF // if the attack order gets cleared for some reason, jump back to this state IF (ShipsOrder (TEAMSHIPS_ACT3Corvettes1) != 2) Jump MASTERLooking; ENDIF ENDWATCH ENDSTATE Defend //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE GoHelpP1Mothership //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT Attack (SHIPS_AttackingP1Mothership); ENDINIT WATCH // **** watch everywhere stuff **** IF (VarGet ("G_P1MothershipGettinOut") = TRUE) // If the P1 Mothership is under attack, go help it Jump DockForGood; ENDIF IF (UnderAttack (SHIPS_ACT3Corvettes1UnderAttack)) // If you get attacked, jump to defending yourself ShipsSelectClass (SHIPS_ACT3Corvettes1Mothership, SHIPS_ACT3Corvettes1UnderAttack, "CLASS_Mothership"); ShipsRemove (SHIPS_ACT3Corvettes1UnderAttack, SHIPS_ACT3Corvettes1Mothership); ShipsSelectClass (SHIPS_ACT3Corvettes1FighterLOOK, SHIPS_ACT3Corvettes1UnderAttack, "CLASS_Fighter"); ShipsSelectClass (SHIPS_ACT3Corvettes1CorvetteLOOK, SHIPS_ACT3Corvettes1UnderAttack, "CLASS_Corvette"); IF (ShipsCount (SHIPS_ACT3Corvettes1FighterLOOK) > 3) Jump Defend; ELSEIF (ShipsCount (SHIPS_ACT3Corvettes1CorvetteLOOK) > 2) Jump Defend; ENDIF ENDIF // if the attack order gets cleared for some reason, jump back to this state IF (ShipsOrder (TEAMSHIPS_ACT3Corvettes1) != 2) Jump MASTERLooking; ENDIF ENDWATCH ENDSTATE GoHelpP1Mothership //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE DockForGood //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT DockStay (TEAM_P1Mothership); ENDINIT WATCH IFONCE (TeamDockedReadyForLaunch ()) VarCreateSet ("G_ACT3Corvettes1HaveDocked", TRUE); ENDIFONCE IF (VarGet ("G_P1MothershipHasRetreated") = TRUE) Jump BugginOut; ENDIF IF (ShipsCount (TEAMSHIPS_ACT3Corvettes1) = 0) // If the team dies, jump to a nullstate VarCreateSet ("G_ACT3Corvettes1HaveDocked", TRUE); Jump NullState; ENDIF ENDWATCH ENDSTATE DockForGood //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE BugginOut //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT Stop (); MoveTo (POINT_OutsideOfWorld); ENDINIT WATCH //IF (Nearby (POINT_OutsideOfWorld, 1000)) // TeamHyperspaceOut (); // Jump NullState; //ENDIF IF (PointInside (VOLUME_BugginOutVolume, THISTEAMSPOINT)) HideShips (THISTEAMSHIPS); Jump NullState; ENDIF ENDWATCH ENDSTATE BugginOut //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE NullState //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ENDINIT WATCH ENDWATCH ENDSTATE NullState //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ENDFSM ACT3Corvettes1 //ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ACT3Corvettes1 ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ //ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ACT3Corvettes2 ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ FSM ACT3Corvettes2 States DockInstant, Launch, MASTERLooking, AttackMothershipSphere, AttackEntireWorld, AttackMothership, AllDeadWaitForShips, Defend, GoHelpP1Mothership, DockForGood, BugginOut, NullState; INIT VarCreateSet ("SHIPSOriginal", (ShipsCount (THISTEAMSHIPS))); VarCreateSet ("SHIPSRequested", 0); VarCreateSet ("SHIPSNeeded", 0); VarCreateSet ("SHIPSNewships", 0); VarCreateSet ("SHIPSKilled", 0); // Create a variable = to the number of ships killed VarSet ("G_TOTALOriginalACT3Corvettes2", VarGet ("G_TOTALOriginalACT3Corvettes2") + ShipsCount (THISTEAMSHIPS)); Jump DockInstant; ENDINIT WATCH // if there are 0 ships in the team, jump to a wait state to wait for more ships (otherwise the order will get lost) IF ( (ShipsCount (THISTEAMSHIPS) = 0) AND (VarGet ("WaitingForShips") = FALSE) ) Jump AllDeadWaitForShips; ENDIF // repopulation stuff from Falko IF ( ((ShipsCount (THISTEAMSHIPS) + VarGet ("SHIPSRequested")) < VarGet ("SHIPSOriginal")) AND (VarGet ("G_P1MothershipGettinOut") = FALSE) ) VarSet ("SHIPSNeeded", (VarGet ("SHIPSOriginal") - (ShipsCount (THISTEAMSHIPS) + VarGet("SHIPSRequested")))); RequestShips ("P1StandardCorvette", VarGet ("SHIPSNeeded")); VarSet ("SHIPSKilled", VarGet ("SHIPSKilled") + VarGet ("SHIPSNeeded")); VarSet ("G_TOTALACT3Corvettes2Killed", VarGet ("SHIPSKilled")); VarSet("SHIPSRequested", VarGet("SHIPSRequested") + VarGet("SHIPSNeeded")); ENDIF VarSet ("SHIPSNewships", NewShipsAdded()); IF (VarGet("SHIPSNewships")) //FormationBroad (); VarSet("SHIPSRequested", VarGet("SHIPSRequested") - VarGet("SHIPSNewships")); ENDIF ENDWATCH STATE AllDeadWaitForShips //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT VarCreateSet ("WaitingForShips", TRUE); ENDINIT WATCH IF (ShipsCount (THISTEAMSHIPS) > 0) VarDestroy ("WaitingForShips"); Jump MASTERLooking; ENDIF ENDWATCH ENDSTATE AllDeadWaitForShips //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE DockInstant //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT DockInstant (TEAM_P1Mothership); // Dock right away with the P1 Mothership ENDINIT WATCH //IF (ObjectiveGet ("SalvageVessel") = TRUE) // When the player's SCReturning docks, begin ACT3! IF (VarGet ("G_BeginACT3Now") = TRUE) // Told to begin ACT3 a little while after the player gets the data from the KS Jump Launch; ENDIF ENDWATCH ENDSTATE DockInstant //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE Launch //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT IF (TeamDockedReadyForLaunch ()) // Just for safety Launch (); VarCreateSet ("G_ACT3Corvettes2HaveLaunched", TRUE); TimerCreateSetStart ("ACT3Corvettes2HaveLaunched", 12); // Give it some time to launch before attacking ENDIF ENDINIT WATCH // **** watch everywhere stuff **** IF (VarGet ("G_P1MothershipGettinOut") = TRUE) // If the P1 Mothership is under attack, go help it Jump DockForGood; ENDIF IF (UnderAttack (SHIPS_ACT3Corvettes2UnderAttack)) // If you get attacked, jump to defending yourself ShipsSelectClass (SHIPS_ACT3Corvettes2Mothership, SHIPS_ACT3Corvettes2UnderAttack, "CLASS_Mothership"); ShipsRemove (SHIPS_ACT3Corvettes2UnderAttack, SHIPS_ACT3Corvettes2Mothership); ShipsSelectClass (SHIPS_ACT3Corvettes2FighterLOOK, SHIPS_ACT3Corvettes2UnderAttack, "CLASS_Fighter"); ShipsSelectClass (SHIPS_ACT3Corvettes2CorvetteLOOK, SHIPS_ACT3Corvettes2UnderAttack, "CLASS_Corvette"); IF (ShipsCount (SHIPS_ACT3Corvettes2FighterLOOK) > 3) Jump Defend; ELSEIF (ShipsCount (SHIPS_ACT3Corvettes2CorvetteLOOK) > 2) Jump Defend; ENDIF ENDIF IF (TimerExpiredDestroy ("ACT3Corvettes2HaveLaunched")) Jump MASTERLooking; ENDIF ENDWATCH ENDSTATE Launch //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE MASTERLooking //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ENDINIT WATCH // **** watch everywhere stuff **** IF (VarGet ("G_P1MothershipGettinOut") = TRUE) // If the P1 Mothership is under attack, go help it Jump DockForGood; ENDIF IF (UnderAttack (SHIPS_ACT3Corvettes2UnderAttack)) // If you get attacked, jump to defending yourself ShipsSelectClass (SHIPS_ACT3Corvettes2Mothership, SHIPS_ACT3Corvettes2UnderAttack, "CLASS_Mothership"); ShipsRemove (SHIPS_ACT3Corvettes2UnderAttack, SHIPS_ACT3Corvettes2Mothership); ShipsSelectClass (SHIPS_ACT3Corvettes2FighterLOOK, SHIPS_ACT3Corvettes2UnderAttack, "CLASS_Fighter"); ShipsSelectClass (SHIPS_ACT3Corvettes2CorvetteLOOK, SHIPS_ACT3Corvettes2UnderAttack, "CLASS_Corvette"); IF (ShipsCount (SHIPS_ACT3Corvettes2FighterLOOK) > 3) Jump Defend; ELSEIF (ShipsCount (SHIPS_ACT3Corvettes2CorvetteLOOK) > 2) Jump Defend; ENDIF ENDIF FindEnemiesInside (VOLUME_MothershipSphere, SHIPS_ACT3EntireFleet3, 300); // Find everyone in the MothershipSphere ShipsSelectClass (SHIPS_ACT3Fighter3, SHIPS_ACT3EntireFleet3, "CLASS_Fighter"); // Then filter their asses ShipsSelectClass (SHIPS_ACT3Corvette3, SHIPS_ACT3EntireFleet3, "CLASS_Corvette"); ShipsSelectClass (SHIPS_ACT3Resource3, SHIPS_ACT3EntireFleet3, "CLASS_Resource"); ShipsSelectType (SHIPS_ACT3Research3, SHIPS_ACT3EntireFleet3, "ResearchShip"); ShipsSelectClass (SHIPS_ACT3NonCombat3, SHIPS_ACT3EntireFleet3, "CLASS_NonCombat"); ShipsSelectClass (SHIPS_ACT3Mothership3, SHIPS_ACT3EntireFleet3, "CLASS_Mothership"); VarCreateSet ("G_ACT3TeamMothershipSHIPS", ShipsCount (SHIPS_ACT3Mothership3)); // All these for debuggin' VarCreateSet ("G_ACT3TeamEntireFleetSHIPS", ShipsCount (SHIPS_ACT3EntireFleet3)); VarCreateSet ("G_ACT3TeamFighterSHIPS", ShipsCount (SHIPS_ACT3Fighter3)); VarCreateSet ("G_ACT3TeamCorvetteSHIPS", ShipsCount (SHIPS_ACT3Corvette3)); VarCreateSet ("G_ACT3TeamResourceSHIPS", ShipsCount (SHIPS_ACT3Resource3)); VarCreateSet ("G_ACT3TeamResearchSHIPS", ShipsCount (SHIPS_ACT3Research3)); VarCreateSet ("G_ACT3TeamNonCombatSHIPS", ShipsCount (SHIPS_ACT3NonCombat3)); FindEnemiesInside (VOLUME_EntireWorldVolume, SHIPS_ACT3WORLDEntireWorld3, 3000); // Find everyone inside the whole world ShipsSelectClass (SHIPS_ACT3WORLDFighter3, SHIPS_ACT3WORLDEntireWorld3, "CLASS_Fighter"); // Then filter their asses ShipsSelectClass (SHIPS_ACT3WORLDCorvette3, SHIPS_ACT3WORLDEntireWorld3, "CLASS_Corvette"); ShipsSelectClass (SHIPS_ACT3WORLDResource3, SHIPS_ACT3WORLDEntireWorld3, "CLASS_Resource"); ShipsSelectType (SHIPS_ACT3WORLDResearch3, SHIPS_ACT3WORLDEntireWorld3, "ResearchShip"); ShipsSelectClass (SHIPS_ACT3WORLDNonCombat3, SHIPS_ACT3WORLDEntireWorld3, "CLASS_NonCombat"); VarCreateSet ("G_ACT3TeamEntireFleetWORLDSHIPS", ShipsCount (SHIPS_EntireFleet)); // All these for debuggin' VarCreateSet ("G_ACT3TeamFighterWORLDSHIPS", ShipsCount (SHIPS_ACT3WORLDFighter3)); VarCreateSet ("G_ACT3TeamCorvetteWORLDSHIPS", ShipsCount (SHIPS_ACT3WORLDCorvette3)); VarCreateSet ("G_ACT3TeamResourceWORLDSHIPS", ShipsCount (SHIPS_ACT3WORLDResource3)); VarCreateSet ("G_ACT3TeamResearchWORLDSHIPS", ShipsCount (SHIPS_ACT3WORLDResearch3)); VarCreateSet ("G_ACT3TeamNonCombatWORLDSHIPS", ShipsCount (SHIPS_ACT3WORLDNonCombat3)); IF ( (ShipsCount (SHIPS_ACT3Fighter3) > 3) OR // If there are ships in the MothershipSphere go attack them (ShipsCount (SHIPS_ACT3Corvette3) > 2) OR (ShipsCount (SHIPS_ACT3Resource3) > 0) OR (ShipsCount (SHIPS_ACT3Research3) > 0) OR (ShipsCount (SHIPS_ACT3NonCombat3) > 0) ) Jump AttackMothershipSphere; ELSEIF ( (ShipsCount (SHIPS_ACT3WORLDFighter3) > 3) OR // ELSE, if there are ships in the EntireWorld volume, go attack them (ShipsCount (SHIPS_ACT3WORLDCorvette3) > 2) OR (ShipsCount (SHIPS_ACT3WORLDResource3) > 0) OR (ShipsCount (SHIPS_ACT3WORLDResearch3) > 0) OR (ShipsCount (SHIPS_ACT3WORLDNonCombat3) > 0) ) Jump AttackEntireWorld; ELSEIF (ShipsCount (SHIPS_ACT3Mothership3) > 0) // If there are NO ships left IN THE WHOLE WIDE WORLD, attack the Mothership Jump AttackMothership; ENDIF ENDWATCH ENDSTATE MASTERLooking //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE AttackMothershipSphere //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT //FormationDelta (); //TacticsAggressive (); IF (ShipsCount (SHIPS_ACT3Fighter3) > 3) Attack (SHIPS_ACT3Fighter3); // Attack Fighters first VarCreateSet ("AttackingFighter", TRUE); ELSEIF (ShipsCount (SHIPS_ACT3Corvette3) > 2) Attack (SHIPS_ACT3Corvette3); // Attack the Corvettes second VarCreateSet ("AttackingCorvette", TRUE); //ELSEIF (ShipsCount (SHIPS_ACT3Resource3) > 0) // Attack (SHIPS_ACT3Resource3); // Attack Resource Collectors third // VarCreateSet ("AttackingResource", TRUE); ELSEIF ( (ShipsCount (SHIPS_ACT3Research3) > 0) AND (VarGet ("NeverAttackResearchAgain") = FALSE) ) Attack (SHIPS_ACT3Research3); // Attack Research Ships fourth VarCreateSet ("AttackingResearch", TRUE); ELSEIF (ShipsCount (SHIPS_ACT3NonCombat3) > 0) Attack (SHIPS_ACT3NonCombat3); // Attack the Mothership last VarCreateSet ("AttackingNonCombat", TRUE); ELSEIF (ShipsCount (SHIPS_ACT3Mothership3) > 0) Attack (SHIPS_ACT3Mothership3); // Attack the Mothership last VarCreateSet ("AttackingMothership", TRUE); ENDIF ENDINIT WATCH // **** watch everywhere stuff **** IF (VarGet ("G_P1MothershipGettinOut") = TRUE) // If the P1 Mothership is under attack, go help it Jump DockForGood; ENDIF IF (UnderAttack (SHIPS_ACT3Corvettes2UnderAttack)) // If you get attacked, jump to defending yourself ShipsSelectClass (SHIPS_ACT3Corvettes2Mothership, SHIPS_ACT3Corvettes2UnderAttack, "CLASS_Mothership"); ShipsRemove (SHIPS_ACT3Corvettes2UnderAttack, SHIPS_ACT3Corvettes2Mothership); ShipsSelectClass (SHIPS_ACT3Corvettes2FighterLOOK, SHIPS_ACT3Corvettes2UnderAttack, "CLASS_Fighter"); ShipsSelectClass (SHIPS_ACT3Corvettes2CorvetteLOOK, SHIPS_ACT3Corvettes2UnderAttack, "CLASS_Corvette"); IF (ShipsCount (SHIPS_ACT3Corvettes2FighterLOOK) > 3) Jump Defend; ELSEIF (ShipsCount (SHIPS_ACT3Corvettes2CorvetteLOOK) > 2) Jump Defend; ENDIF ENDIF IF (VarGet ("AttackingCorvette") = TRUE) // If all Corvettes are dead, go back to watch loop IF (ShipsCount (SHIPS_ACT3Corvette3) < 3) VarDestroy ("AttackingCorvette"); Jump MASTERLooking; ENDIF //ELSEIF (VarGet ("AttackingResource") = TRUE) // If Collector is dead, go back to watch loop // IF (ShipsCount (SHIPS_ACT3Resource3) = 0) // VarDestroy ("AttackingResource"); // Jump MASTERLooking; // ENDIF ELSEIF (VarGet ("AttackingResearch") = TRUE) // If Research Ship is at 50% health or below, go back to watch loop ShipsSelectDamaged (SHIPS_ACT3ResearchDamaged3, SHIPS_ACT3Research3, 50); IF ( (ShipsCount (SHIPS_ACT3Research3) = 0) OR (ShipsCount (SHIPS_ACT3ResearchDamaged3) > 0) ) VarDestroy ("AttackingResearch"); VarCreateSet ("NeverAttackResearchAgain", TRUE); Jump MASTERLooking; ENDIF ELSEIF (VarGet ("AttackingFighter") = TRUE) // If all Fighters are dead, go back to watch loop IF (ShipsCount (SHIPS_ACT3Fighter3) < 4) VarDestroy ("AttackingFighter"); Jump MASTERLooking; ENDIF ELSEIF (VarGet ("AttackingNonCombat") = TRUE) // If all the noncombat ships are dead, go back to watch loop IF (ShipsCount (SHIPS_ACT3NonCombat3) = 0) VarDestroy ("AttackingNonCombat"); Jump MASTERLooking; ENDIF ELSEIF (VarGet ("AttackingMothership") = TRUE) IF (ShipsCount (SHIPS_ACT3Mothership3) = 0) VarDestroy ("AttackingMothership"); Jump MASTERLooking; ENDIF ENDIF // if the attack order gets cleared for some reason, jump back to this state IF (ShipsOrder (TEAMSHIPS_ACT3Corvettes2) != 2) Jump MASTERLooking; ENDIF ENDWATCH ENDSTATE AttackMothershipSphere //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE AttackEntireWorld //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT //FormationDelta (); //TacticsAggressive (); IF (ShipsCount (SHIPS_ACT3WORLDFighter3) > 3) Attack (SHIPS_ACT3WORLDFighter3); // Attack Fighters first VarCreateSet ("AttackingFighter", TRUE); ELSEIF (ShipsCount (SHIPS_ACT3WORLDCorvette3) > 2) Attack (SHIPS_ACT3WORLDCorvette3); // Attack the Corvettes second VarCreateSet ("AttackingCorvette", TRUE); //ELSEIF (ShipsCount (SHIPS_ACT3WORLDResource3) > 0) // Attack (SHIPS_ACT3WORLDResource3); // Attack Resource Collectors third // VarCreateSet ("AttackingResource", TRUE); ELSEIF ( (ShipsCount (SHIPS_ACT3WORLDResearch3) > 0) AND (VarGet ("NeverAttackResearchAgain") = FALSE) ) Attack (SHIPS_ACT3WORLDResearch3); // Attack Research Ships fourth VarCreateSet ("AttackingResearch", TRUE); ELSEIF (ShipsCount (SHIPS_ACT3WORLDNonCombat3) > 0) Attack (SHIPS_ACT3WORLDNonCombat3); // Attack the Mothership last VarCreateSet ("AttackingNonCombat", TRUE); ELSEIF (ShipsCount (SHIPS_ACT3WORLDMothership3) > 0) Attack (SHIPS_ACT3WORLDMothership3); // Attack the Mothership last VarCreateSet ("AttackingMothership", TRUE); ENDIF ENDINIT WATCH // **** watch everywhere stuff **** IF (VarGet ("G_P1MothershipGettinOut") = TRUE) // If the P1 Mothership is under attack, go help it Jump DockForGood; ENDIF IF (UnderAttack (SHIPS_ACT3Corvettes2UnderAttack)) // If you get attacked, jump to defending yourself ShipsSelectClass (SHIPS_ACT3Corvettes2Mothership, SHIPS_ACT3Corvettes2UnderAttack, "CLASS_Mothership"); ShipsRemove (SHIPS_ACT3Corvettes2UnderAttack, SHIPS_ACT3Corvettes2Mothership); ShipsSelectClass (SHIPS_ACT3Corvettes2FighterLOOK, SHIPS_ACT3Corvettes2UnderAttack, "CLASS_Fighter"); ShipsSelectClass (SHIPS_ACT3Corvettes2CorvetteLOOK, SHIPS_ACT3Corvettes2UnderAttack, "CLASS_Corvette"); IF (ShipsCount (SHIPS_ACT3Corvettes2FighterLOOK) > 3) Jump Defend; ELSEIF (ShipsCount (SHIPS_ACT3Corvettes2CorvetteLOOK) > 2) Jump Defend; ENDIF ENDIF IF (VarGet ("AttackingCorvette") = TRUE) // If all Corvettes are dead, go back to watch loop IF (ShipsCount (SHIPS_ACT3WORLDCorvette3) < 3) VarDestroy ("AttackingCorvette"); Jump MASTERLooking; ENDIF //ELSEIF (VarGet ("AttackingResource") = TRUE) // If Collector is dead, go back to watch loop // IF (ShipsCount (SHIPS_ACT3WORLDResource3) = 0) // VarDestroy ("AttackingResource"); // Jump MASTERLooking; // ENDIF ELSEIF (VarGet ("AttackingResearch") = TRUE) // If Research Ship is at 50% health or below, go back to watch loop ShipsSelectDamaged (SHIPS_ACT3WORLDResearchDamaged3, SHIPS_ACT3WORLDResearch3, 50); IF ( (ShipsCount (SHIPS_ACT3WORLDResearch3) = 0) OR (ShipsCount (SHIPS_ACT3WORLDResearchDamaged3) > 0) ) VarDestroy ("AttackingResearch"); VarCreateSet ("NeverAttackResearchAgain", TRUE); Jump MASTERLooking; ENDIF ELSEIF (VarGet ("AttackingFighter") = TRUE) // If all Fighters are dead, go back to watch loop IF (ShipsCount (SHIPS_ACT3WORLDFighter3) < 4) VarDestroy ("AttackingFighter"); Jump MASTERLooking; ENDIF ELSEIF (VarGet ("AttackingNonCombat") = TRUE) // If all the noncombat ships are dead, go back to watch loop IF (ShipsCount (SHIPS_ACT3WORLDNonCombat3) = 0) VarDestroy ("AttackingNonCombat"); Jump MASTERLooking; ENDIF ELSEIF (VarGet ("AttackingMothership") = TRUE) IF (ShipsCount (SHIPS_ACT3WORLDMothership3) = 0) VarDestroy ("AttackingMothership"); Jump MASTERLooking; ENDIF ENDIF // if the attack order gets cleared for some reason, jump back to this state IF (ShipsOrder (TEAMSHIPS_ACT3Corvettes2) != 2) Jump MASTERLooking; ENDIF ENDWATCH ENDSTATE AttackEntireWorld //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE AttackMothership //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT AttackMothership (); TimerCreateSetStart ("GoBackToMASTERLooking", 30); ENDINIT WATCH // **** watch everywhere stuff **** IF (VarGet ("G_P1MothershipGettinOut") = TRUE) // If the P1 Mothership is under attack, go help it Jump DockForGood; ENDIF IF (UnderAttack (SHIPS_ACT3Corvettes2UnderAttack)) // If you get attacked, jump to defending yourself ShipsSelectClass (SHIPS_ACT3Corvettes2Mothership, SHIPS_ACT3Corvettes2UnderAttack, "CLASS_Mothership"); ShipsRemove (SHIPS_ACT3Corvettes2UnderAttack, SHIPS_ACT3Corvettes2Mothership); ShipsSelectClass (SHIPS_ACT3Corvettes2FighterLOOK, SHIPS_ACT3Corvettes2UnderAttack, "CLASS_Fighter"); ShipsSelectClass (SHIPS_ACT3Corvettes2CorvetteLOOK, SHIPS_ACT3Corvettes2UnderAttack, "CLASS_Corvette"); IF (ShipsCount (SHIPS_ACT3Corvettes2FighterLOOK) > 3) Jump Defend; ELSEIF (ShipsCount (SHIPS_ACT3Corvettes2CorvetteLOOK) > 2) Jump Defend; ENDIF ENDIF // if the attack order gets cleared for some reason, jump back to this state IF (ShipsOrder (TEAMSHIPS_ACT3Corvettes2) != 2) Jump MASTERLooking; ENDIF // if the timer is up, go back to the MASTERLooking state to make sure you should still be attacking the Mothership IF (TimerExpiredDestroy ("GoBackToMASTERLooking")) Jump MASTERLooking; ENDIF ENDWATCH ENDSTATE AttackMothership //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE Defend //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT //TacticsAggressive (); ShipsSelectClass (SHIPS_ACT3Corvettes2Fighters, SHIPS_ACT3Corvettes2UnderAttack, "CLASS_Fighter"); // Filter out Fighters IF (ShipsCount (SHIPS_ACT3Corvettes2Fighters) > 3) // If there are any Fighters, attack them first Attack (SHIPS_ACT3Corvettes2Fighters); ELSE Attack (SHIPS_ACT3Corvettes2UnderAttack); // Otherwise, just attack everyone ENDIF ENDINIT WATCH // **** watch everywhere stuff **** IF (VarGet ("G_P1MothershipGettinOut") = TRUE) // If the P1 Mothership is under attack, go help it Jump DockForGood; ENDIF IF (NOT (UnderAttack (SHIPS_Null91244))) // If you're not under attack anymore, go back to MASTERLooking Jump MASTERLooking; ENDIF IF (ShipsCount (SHIPS_ACT3Corvettes2UnderAttack) < 4) // If you've killed off all the attackers, go back to MASTERLooking Jump MASTERLooking; ENDIF // if the attack order gets cleared for some reason, jump back to this state IF (ShipsOrder (TEAMSHIPS_ACT3Corvettes2) != 2) Jump MASTERLooking; ENDIF ENDWATCH ENDSTATE Defend //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE GoHelpP1Mothership //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT Attack (SHIPS_AttackingP1Mothership); ENDINIT WATCH // **** watch everywhere stuff **** IF (VarGet ("G_P1MothershipGettinOut") = TRUE) // If the P1 Mothership is under attack, go help it Jump DockForGood; ENDIF IF (UnderAttack (SHIPS_ACT3Corvettes2UnderAttack)) // If you get attacked, jump to defending yourself ShipsSelectClass (SHIPS_ACT3Corvettes2Mothership, SHIPS_ACT3Corvettes2UnderAttack, "CLASS_Mothership"); ShipsRemove (SHIPS_ACT3Corvettes2UnderAttack, SHIPS_ACT3Corvettes2Mothership); ShipsSelectClass (SHIPS_ACT3Corvettes2FighterLOOK, SHIPS_ACT3Corvettes2UnderAttack, "CLASS_Fighter"); ShipsSelectClass (SHIPS_ACT3Corvettes2CorvetteLOOK, SHIPS_ACT3Corvettes2UnderAttack, "CLASS_Corvette"); IF (ShipsCount (SHIPS_ACT3Corvettes2FighterLOOK) > 3) Jump Defend; ELSEIF (ShipsCount (SHIPS_ACT3Corvettes2CorvetteLOOK) > 2) Jump Defend; ENDIF ENDIF // if the attack order gets cleared for some reason, jump back to this state IF (ShipsOrder (TEAMSHIPS_ACT3Corvettes2) != 2) Jump MASTERLooking; ENDIF ENDWATCH ENDSTATE GoHelpP1Mothership //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE DockForGood //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT DockStay (TEAM_P1Mothership); ENDINIT WATCH IFONCE (TeamDockedReadyForLaunch ()) VarCreateSet ("G_ACT3Corvettes2HaveDocked", TRUE); ENDIFONCE IF (VarGet ("G_P1MothershipHasRetreated") = TRUE) Jump BugginOut; ENDIF IF (ShipsCount (TEAMSHIPS_ACT3Corvettes2) = 0) // If the team dies, jump to a nullstate VarCreateSet ("G_ACT3Corvettes2HaveDocked", TRUE); Jump NullState; ENDIF ENDWATCH ENDSTATE DockForGood //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE BugginOut //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT Stop (); MoveTo (POINT_OutsideOfWorld); ENDINIT WATCH //IF (Nearby (POINT_OutsideOfWorld, 1000)) // TeamHyperspaceOut (); // Jump NullState; //ENDIF IF (PointInside (VOLUME_BugginOutVolume, THISTEAMSPOINT)) HideShips (THISTEAMSHIPS); Jump NullState; ENDIF ENDWATCH ENDSTATE BugginOut //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE NullState //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ENDINIT WATCH ENDWATCH ENDSTATE NullState //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ENDFSM ACT3Corvettes2 //ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ACT3Corvettes2 ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ //ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ P1Mothership ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ FSM P1Mothership States Hide, Amble, Retreat, GetIntoPosition, InPosition, DefendYourself, BackInPosition, PatrolPlayerFleet, Retreat2, OuttaHereLikeVladimir, HyperspaceOut, NullState; INIT Jump Hide; ENDINIT WATCH IFONCE (ObjectiveGet ("SalvageVessel") = TRUE) // When the player's SCReturning docks, set a timer to begin ACT3 //TimerCreateSetStart ("G_ACT3Timer", Random (15, 30)); ENDIFONCE IFONCE (TimerExpiredDestroy ("G_ACT3Timer")) // When the timer is up, tell the rest of the ACT3 ships to begin, using a variable VarCreateSet ("G_BeginACT3Now", TRUE); IF (VarGet ("P1MothershipGettinOut") = FALSE) Jump PatrolPlayerFleet; ENDIF ENDIFONCE IFONCE ( (TeamHealthAverage () < 45) AND (VarGet ("G_P1MothershipHasRetreated") = FALSE) ) VarCreateSet ("NowGettingOuttaHere", TRUE); Jump OuttaHereLikeVladimir; ENDIFONCE IFONCE ( (ObjectiveGet ("DestroyAllP1") = TRUE) AND (VarGet ("G_P1MothershipHasRetreated") = FALSE) ) VarCreateSet ("NowGettingOuttaHere", TRUE); Jump OuttaHereLikeVladimir; ENDIFONCE IF ((VarGet ("G_TOTALDoggedFightersKilled") + VarGet ("G_TOTALSCFightersKilled")) > 20) MsgSendAll ("DontHassleSCAnymore"); ENDIF ENDWATCH STATE Hide //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT HideShips (TEAMSHIPS_P1Mothership); TeamHyperspaceOut (); //HideShips (TEAMSHIPS_P1Mothership); ENDINIT WATCH IF (VarGet ("G_Nis2Complete")) //UnhideShips(TEAMSHIPS_P1Mothership); Jump Amble; ENDIF ENDWATCH ENDSTATE Hide //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE Amble //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT //TacticsNeutral (); //PatrolPath (PATH_P1MshipAMBLE); ENDINIT WATCH //IF (FindEnemiesNearTeam (SHIPS_Null897234, 16000) > 0) // If you see some human ships, start retreating // VarCreateSet ("G_PlayerHasShipsNearP1Mothership", TRUE); // Jump Retreat; //ENDIF IF (FindEnemiesInside (VOLUME_nisVolume, SHIPS_P1MothershipFound, 7000)) // Find all the ships around the derelict //VarCreateSet ("G_P1MothershipFound", (ShipsCount (SHIPS_P1MothershipFound))); ShipsSelectType (SHIPS_P1MothershipFoundSC, SHIPS_P1MothershipFound, "SalCapCorvette"); // Filter out the Salvage Corvettes //VarCreateSet ("G_P1MothershipFoundSC", (ShipsCount (SHIPS_P1MothershipFoundSC))); IF (ShipsCount (SHIPS_P1MothershipFoundSC) > 0) // If you find any SCs, get into position //Stop (); //TeamHyperspaceOut (); Jump GetIntoPosition; ENDIF ENDIF ENDWATCH ENDSTATE Amble //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE Retreat //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT TacticsEvasive (); ENDINIT WATCH IF (FindEnemiesNearTeam (SHIPS_Null999923, 16000) = 0) // If the human ships go away, go back to patrolling Jump Amble; ENDIF IF (FindEnemiesInside (VOLUME_nisVolume, SHIPS_P1MothershipFound, 700)) // Find all the ships around the derelict ShipsSelectType (SHIPS_P1MothershipFoundSC, SHIPS_P1MothershipFound, "SalCapCorvette"); // Filter out the Salvage Corvettes IF (ShipsCount (SHIPS_P1MothershipFoundSC) > 0) // If you find any SCs, get into position IF (VarGet ("P1MothershipHasHyperspacedIn") = FALSE) Stop (); VarCreateSet ("P1MothershipHasHyperspacedIn", TRUE); TeamHyperspaceOut (); Jump GetIntoPosition; ENDIF ENDIF ENDIF ENDWATCH ENDSTATE Retreat //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE GetIntoPosition //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT //MoveTo (POINT_NearDerelict); TeamHyperspaceIn (POINT_NearDerelict); // Hyperspace in to a point above the derelict TimerCreateSetStart ("G_P1MothershipHasHyperspacedIn", 24); Jump InPosition; ENDINIT WATCH //IF (FindEnemiesNearTeam (SHIPS_Null897234, 16000) > 0) // If you see some human ships, start retreating // VarCreateSet ("G_PlayerHasShipsNearP1Mothership", TRUE); // Jump Retreat; //ENDIF //IF (FindEnemiesInside (VOLUME_nisVolume, SHIPS_P1MothershipFound, 700)) // Find all the ships around the derelict // IF (ShipsCount (SHIPS_P1MothershipFound) = 0) // If you can't find any enemy ships, go back to amblin' // Jump Amble; // ENDIF //ENDIF ENDWATCH ENDSTATE GetIntoPosition //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE InPosition //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ENDINIT WATCH //IF (FindEnemiesNearTeam (SHIPS_Null897234, 16000) > 0) // If you see some human ships, start retreating // VarCreateSet ("G_PlayerHasShipsNearP1Mothership", TRUE); // Jump Retreat; //ENDIF //IF (FindEnemiesInside (VOLUME_nisVolume, SHIPS_P1MothershipFound, 700)) // Find all the ships around the derelict // VarCreateSet ("P1MothershipFOUNDSHIPS", ShipsCount (SHIPS_P1MothershipFound)); // IF (ShipsCount (SHIPS_P1MothershipFound) = 0) // If you can't find any enemy ships, go back to amblin' // Jump Amble; // ENDIF //ENDIF IF (UnderAttack (SHIPS_AttackingP1Mothership)) Jump DefendYourself; ENDIF ENDWATCH ENDSTATE InPosition //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE DefendYourself //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT IF (ShipsSelectClass (SHIPS_P1MothershipTargets, SHIPS_AttackingP1Mothership, "CLASS_Corvette")) ELSEIF (ShipsSelectType (SHIPS_P1MothershipTargets, SHIPS_AttackingP1Mothership, "CLASS_Fighter")) ELSE ShipsAdd (SHIPS_P1MothershipTargets, SHIPS_AttackingP1Mothership); ENDIF IF (ShipsCount (SHIPS_P1MothershipTargets) > 0) Attack (SHIPS_P1MothershipTargets); ELSE Jump BackInPosition; ENDIF ENDINIT WATCH IF ( (ShipsCount (SHIPS_P1MothershipTargets) = 0) OR (ShipsOrder (TEAMSHIPS_P1Mothership) != 2) ) Jump BackInPosition; ENDIF IF (NOT Nearby (POINT_NearDerelict, 35000)) Jump BackInPosition; ENDIF ENDWATCH ENDSTATE DefendYourself //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE BackInPosition //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT MoveTo (POINT_NearDerelict); ENDINIT WATCH IF (Nearby (POINT_NearDerelict, 3000)) Jump InPosition; ENDIF ENDWATCH ENDSTATE BackInPosition //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE PatrolPlayerFleet //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT PatrolPath (PATH_AroundPlayerFleet); TacticsNeutral (); ENDINIT WATCH IF (UnderAttack (SHIPS_AttackingP1Mothership)) Jump Retreat2; ENDIF ENDWATCH ENDSTATE PatrolPlayerFleet //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE Retreat2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT //MsgSendAll ("P1MothershipUnderAttack"); VarCreateSet ("G_P1MothershipUnderAttack", TRUE); TacticsEvasive (); ENDINIT WATCH FindEnemiesNearTeam (SHIPS_NearP1Mothership, 16000); // Make this list for the other P1 ships who will come help me IF (NOT UnderAttack (SHIPS_AttackingP1Mothership)) // If you're not under attack anymore, go back to patrolling MsgSendAll ("P1MothershipSafe"); Jump PatrolPlayerFleet; ENDIF ENDWATCH ENDSTATE Retreat2 //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE OuttaHereLikeVladimir //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT VarCreateSet ("G_P1MothershipGettinOut", TRUE); //MsgSendAll ("P1MothershipGettinOut"); TimerCreateSetStart ("WaitingForEveryoneToDock", 120); // Use a 2 minute timer to get out of there incase weird stuff happens while the ships are docking TacticsEvasive (); ENDINIT WATCH IF ( ( (VarGet ("G_ACT3FightersHaveDocked") = TRUE) AND (VarGet ("G_ACT3Corvettes1HaveDocked") = TRUE) AND (VarGet ("G_ACT3Corvettes2HaveDocked") = TRUE) ) OR (TeamHealthAverage () < 30) OR (TimerExpiredDestroy ("WaitingForEveryoneToDock")) ) Jump HyperspaceOut; ENDIF ENDWATCH ENDSTATE OuttaHereLikeVladimir //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE HyperspaceOut //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT VarCreateSet ("G_P1MothershipHasRetreated", TRUE); MusicStop (4); TeamHyperspaceOut (); Jump NullState; ENDINIT WATCH ENDWATCH ENDSTATE HyperspaceOut //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ STATE NullState //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ INIT ENDINIT WATCH ENDWATCH ENDSTATE NullState //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ENDFSM P1Mothership //ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ P1Mothership ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ Global Stuff ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ INIT //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ // FSM creates // FSMCreate (FleetIntel, TEAM_FleetIntel); // FSM used only for displaying Fleet Intel events; bound to a dummy ship in the MM FSMCreate (P1Mothership, TEAM_P1Mothership); // The P1 Mothership (duh) FSMCreate (DoggedFighter, TEAM_DoggedFighter); // Salvage Corvette attacker - relentless single Fighter FSMCreate (SCFighters, TEAM_SCFighters); // Salvage Corvette attackers - Fighters (can get distracted) FSMCreate (ACT3Fighters, TEAM_ACT3Fighters); // Fighter team that only attacks during "act 3" FSMCreate (ACT3Corvettes1, TEAM_ACT3Corvettes1); // Corvette team that only attacks during "act 3" FSMCreate (ACT3Corvettes2, TEAM_ACT3Corvettes2); // Corvette team that only attacks during "act 3" //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ // AI stuff // // DOGGED FIGHTER variables used for determining how many ships have been killed VarCreateSet ("G_TOTALDoggedFightersKilled", 0); VarCreateSet ("G_TOTALOriginalDoggedFighters", 0); // SCFIGHTERS variables used for determining how many ships have been killed VarCreateSet ("G_TOTALSCFightersKilled", 0); VarCreateSet ("G_TOTALOriginalSCFighters", 0); // ACT3Fighters variables used for determining how many ships have been killed VarCreateSet ("G_TOTALACT3FightersKilled", 0); VarCreateSet ("G_TOTALOriginalACT3Fighters", 0); // ACT3Corvettes1 variables used for determining how many ships have been killed VarCreateSet ("G_TOTALACT3Corvettes1Killed", 0); VarCreateSet ("G_TOTALOriginalACT3Corvettes1", 0); // ACT3Corvettes2 variables used for determining how many ships have been killed VarCreateSet ("G_TOTALACT3Corvettes2Killed", 0); VarCreateSet ("G_TOTALOriginalACT3Corvettes2", 0); //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ // speech stuff //VarCreateSet ("CurrentP1Ships", (ShipsCount (TEAMSHIPS_FirstLineTeam) + ShipsCount(TEAMSHIPS_SecondLineTeam) + ShipsCount (TEAMSHIPS_DerelictTeam1))); //TimerCreateSetStart ("PlayEvent131380", 3); // Hyperspace interupted." // save the level! SaveLevel (2, LSTRING_Savegame); ENDINIT WATCH //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ // location card // IFONCE (TRUE) TimerCreateSetStart ("LocationCardTimer", 1); ENDIFONCE IF (TimerExpiredDestroy ("LocationCardTimer")) LocationCard (5000, LSTRING_LocationCard); ENDIF //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ // FSM creates // IFONCE (VarGet ("G_Nis2Complete")) #if defined(GCW) || defined (Downloadable) GameEnd(); #endif ShipsClear(SHIPS_NisTriggerShips); VarSet ("G_NISISPlaying", FALSE); //VarCreateSet ("CurrentP1Ships", (ShipsCount (TEAMSHIPS_FirstLineTeam) + ShipsCount(TEAMSHIPS_SecondLineTeam) + ShipsCount (TEAMSHIPS_NISTeamFighter) + ShipsCount (TEAMSHIPS_DerelictTeam1))); //VarCreateSet ("G_StartDerelictTeam", TRUE); ENDIFONCE //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ // NIS's // // PROBE NISLet - start a timer to play it almost right away after hyperspace IFONCE (VarGet ("Null8458973") = FALSE) TimerCreateSetStart ("StartWideScreen", 8); ENDIFONCE // PROBE NISLet - when timer is up, start the widescreen IF (TimerExpiredDestroy ("StartWideScreen")) //wideScreenIn (90); //90 frames == 3 seconds TimerCreateSetStart ("PlayProbeNISLet", 3); ENDIF // PROBE NISLet - when the timer is up, play the damn NISLet IF (TimerExpiredDestroy ("PlayProbeNISLet")) //VarCreateSet ("G_PlayNislet", ??); //MusicPlay (??); ENDIF // n02 - hack to slow down incoming probes so they don't mess up the NIS transition IF ( (NOT VarGet ("G_PlayedNis")) AND (FindEnemiesInside (VOLUME_nisVolume2, SHIPS_nisVolume2FOUND, 1000)) ) VarCreateSet ("G_nisVolume2SHIPS", ShipsCount (SHIPS_nisVolume2FOUND)); ShipsSelectType (SHIPS_PlayerProbes, SHIPS_nisVolume2FOUND, "Probe"); VarCreateSet ("G_PlayerProbesSHIPS", ShipsCount (SHIPS_PlayerProbes)); IF (ShipsCount (SHIPS_PlayerProbes) > 0) ShipsVelocityMaxSet (SHIPS_PlayerProbes, 1000); ENDIF ENDIF // n02 - when the ships penetrate, start the widescreen and hide the ships around the derelict IF (NOT VarGet("G_PlayedNis") AND FindEnemiesInside(VOLUME_nisVolume, SHIPS_nisVolumeFOUND, 13000)) TimerCreateSetStart ("WideScreenInBeforeNIS", 4); wideScreenIn(90); //90 frames == 3 seconds VarCreateSet ("G_NISISPlaying", TRUE); VarCreateSet("G_PlayedNis", TRUE); ENDIF // n02 - after the widescreen is done, play the NIS IF (TimerExpiredDestroy("WideScreenInBeforeNIS")) ShipsSelectEnemy(SHIPS_NisTriggerShips, SHIPS_nisVolumeFOUND); //copy the list to the "official" selection FindEnemiesInside (VOLUME_MothershipSphere, SHIPS_EntireFleet, 3000); ShipsSelectClass (SHIPS_PlayerMothership, SHIPS_EntireFleet, "CLASS_Mothership"); VarCreateSet ("G_PlayNis",2); PingRemove ("ServiceVesselPING"); //VarCreateSet ("G_NisCentreDerelict", 20); // Note: this number **MUST** be kept up to date with the list in objtypes.h //VarCreateSet ("G_NISISPlaying", TRUE); //TimerCreateSetStart ("SpeechEvent350Timer", 3); TimerCreateSetStart ("CreateNISTeamsTimer", 3); ENDIF // create the NIS teams //IF (TimerExpiredDestroy ("CreateNISTeamsTimer")) IFONCE (VarGet ("G_Nis2Complete")) FSMCreate(NISTeamFighter, TEAM_NISTeamFighter); // Create a team from the P1 Fighters left by the NIS FSMCreate(NISTeamCorvette, TEAM_NISTeamCorvette); // Create a team from the P1 Corvettes left by the NIS ENDIFONCE // m02a (NISLet) - when the ships penetrate (set by the P1Mothership FSM), start the widescreen //IFONCE (VarGet ("G_NISLetPenetrationNow") = TRUE) // wideScreenIn (90); // 90 frames = 3 seconds // TimerCreateSetStart ("G_BeginNISNow", 3); //ENDIFONCE // m02a (NISLet) - after the widescreen is done, play the NISLet //IF (TimerExpiredDestroy ("G_BeginNISNow")) // VarCreateSet ("G_PlayNislet", 20); // MusicPlay (26); //ENDIF //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ // fleet intel // // After N02 is over, set a timer to trigger a Fleet Intel event (Service Vessel destroyed, Mothership under attack.. etc.) IFONCE ( (VarGet ("G_Nis2Complete")) ) //AND (VarGet ("G_NISTeamHasDamagedMothership") = TRUE) ) wideScreenOut (90); TimerCreateSetStart ("G_PostNISEventTimer", 4); ENDIFONCE // After the initial attack, if the player sees the Khar-Selim OR if the attack is over, then set the variable to play the Khar-Selim destroyed event // If the player renders the Khar-Selim at any LOD, they've "seen" it IFONCE (VarGet ("G_Nis2Complete")) // When the NIS is over, reset the rendered flags ResetDerelictRenderFlags ("Shipwreck"); VarCreateSet ("G_RenderedFlagsReset", TRUE); ENDIFONCE IFONCE ( (VarGet ("G_RenderedFlagsReset") = TRUE) AND ((RenderedDerelictType ("Shipwreck", 0)) OR (RenderedDerelictType ("Shipwreck", 1)) OR (RenderedDerelictType ("Shipwreck", 2)) OR (RenderedDerelictType ("Shipwreck", 3))) ) VarCreateSet ("G_ShipwreckHasBeenSeen", TRUE); ENDIFONCE IFONCE ( (VarGet ("G_FIProtectMothershipHasPlayed") = TRUE) AND ( //((RenderedDerelictType ("Shipwreck", 0)) OR //(RenderedDerelictType ("Shipwreck", 1)) OR //(RenderedDerelictType ("Shipwreck", 2)) OR //(RenderedDerelictType ("Shipwreck", 3))) (VarGet ("G_ShipwreckHasBeenSeen") = TRUE) OR (VarGet ("G_PlayerHasFinishedACT1") = TRUE) ) ) VarCreateSet ("G_PlayKharSelimDestroyed", TRUE); ENDIFONCE //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ // in-game events // // When you come out of hyperspace, start a timer to trigger an in-game Fleet Command event which talks about the jump IFONCE (TRUE) TimerCreateSetStart ("G_FCHyperspaceSuccessful", 5); ENDIFONCE // before doing the check for whether the SC with the technology has been destroyed , wait 2 seconds IF ( (VarGet ("G_TechRemoved") = 100) AND (VarGet ("PlaySCDeadEventOnce") = FALSE) ) VarCreateSet ("PlaySCDeadEventOnce", TRUE); TimerCreateSetStart ("G_PlaySCDiedStillNeedDataEvent", 4); ENDIF // If the player renders the P1Mothership at LOD4, they've "seen" it IFONCE ( (RenderedShips (TEAMSHIPS_P1Mothership, 0)) OR (RenderedShips (TEAMSHIPS_P1Mothership, 1)) OR (RenderedShips (TEAMSHIPS_P1Mothership, 2)) OR (RenderedShips (TEAMSHIPS_P1Mothership, 3)) ) VarCreateSet ("G_PlayerHasSeenP1Mothership", TRUE); ENDIFONCE // when the player has completed all the objectives and the P1 are gone, start a timer to create the hyperspace objective and play the FI event IFONCE (VarGet ("G_ReadyToHYPERSPACE") = TRUE) TimerCreateSetStart ("G_WaitToPlayFinalEvent", 10); ENDIFONCE //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ // mission objectives // // if the Fleet Intel intro is playing, create the initial objectives: IFONCE (VarGet ("G_FleetIntelIntroHasPlayed") = TRUE) //Print ("OBJECTIVE BRING CREATED NOW!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); ObjectiveCreate ("SendProbe", LSTRING_FISendProbeTASKBAR, LSTRING_FISendProbeTASKBAR); VarCreateSet ("G_SendProbeObjectiveCreated", TRUE); ENDIFONCE // when N02 is over, the "SendProbe" objective is met IFONCE ( (VarGet ("G_Nis2Complete")) AND (VarGet ("G_FleetIntelIntroHasPlayed") = TRUE) ) ObjectiveSet ("SendProbe", TRUE); ENDIFONCE // when Fleet Intel's reaction to N02 has played, create the objective to salvage the Khar Selim IFONCE (VarGet ("G_FIReactionToN02HasPlayed") = TRUE) ObjectiveCreate ("SalvageVessel", LSTRING_FISalvageVesselTASKBAR, LSTRING_FISalvageVesselTASKBAR); ENDIFONCE // when the FI event about destroying the incoming units plays, create the objective to Protect the Mothership IFONCE (VarGet ("G_FIProtectMothershipHasPlayed") = TRUE) ObjectiveCreate ("ProtectMothership", LSTRING_FCProtectMothershipTASKBAR, LSTRING_FCProtectMothershipTASKBAR); ENDIFONCE // when the player kills all the NISTeam ships, the "ProtectMothership" objective is met IFONCE ( (VarGet ("G_Nis2Complete")) AND (ShipsCount (TEAMSHIPS_NISTeamFighter) = 0) AND (ShipsCount (TEAMSHIPS_NISTeamCorvette) = 0) ) MusicStop (4); ObjectiveSet ("ProtectMothership", TRUE); VarCreateSet ("G_NISTeamKilled", TRUE); ENDIFONCE // when the DoggedFighter is well on its way to attack the player's Salvage Corvette, create the PRIMARY objective to defend the Salvage team IFONCE (TimerExpiredDestroy ("G_DoggedFighterOnItsWay")) ObjectiveCreate ("DefendSalvageTeam", LSTRING_DefendSalvageTeamTASKBAR, LSTRING_DefendSalvageTeamTASKBAR); VarCreateSet ("G_DefendSalvageTeamCreated", TRUE); ENDIFONCE // if the player docks the Salvage Corvette with the info, "DefendSalvageTeam" and "SalvageVessel" objectives are met IFONCE (TutGameSentMessage ("Game_TechnologyReturned")) VarSet ("G_TechRemoved", 0); ObjectiveSet ("DefendSalvageTeam", TRUE); ObjectiveSet ("SalvageVessel", TRUE); PingRemove ("ServiceVesselPING"); VarCreateSet ("G_SCDockedWithInfo", TRUE); ENDIFONCE // once the "Enemy units advancing" message has played, create the PRIMARY objective to defend the Mothership IFONCE (VarGet ("G_EnemyUnitsAdvancing") = TRUE) ObjectiveCreate ("DefendMothership", LSTRING_FIDefendMothershipTASKBAR, LSTRING_FIDefendMothershipTASKBAR); ENDIFONCE // if the P1Mothership power signature has been detected, create the SECONDARY objective to investigate it IFONCE (VarGet ("G_InvestigateP1Mothership") = TRUE) ObjectiveCreateSecondary ("InvestigateP1Mothership", LSTRING_FIInvestigateP1MothershipTASKBAR, LSTRING_FIInvestigateP1MothershipTASKBAR); ENDIFONCE // if the player sees the P1Mothership, the "InvestigateP1Mothership" objective is met IFONCE (VarGet ("G_PlayerHasSeenP1Mothership") = TRUE) ObjectiveSet ("InvestigateP1Mothership", TRUE); ENDIFONCE // if the player kills enough P1 ship, create create the variable "G_PlayerHasKilledEnoughP1" IFONCE (VarGet ("G_TotalP1KilledInACT3") > 10) VarCreateSet ("G_PlayerHasKilledEnoughP1", TRUE); ENDIFONCE // when the player kills enough P1 ships, create the PRIMARY objective to kill all of them IFONCE (VarGet ("G_PlayerHasKilledEnoughP1") = TRUE) ObjectiveSet ("DefendMothership", TRUE); ObjectiveCreate ("DestroyAllP1", LSTRING_FIDestroyAllP1TASKBAR, LSTRING_FIDestroyAllP1TASKBAR); ENDIFONCE // when the player destroys enough of the P1 attackers, the "DestroyAllP1" objective is met IFONCE (TRUE) VarCreateSet ("G_TotalP1KilledInACT3", 0); ENDIFONCE VarSet ("G_TotalP1KilledInACT3", ( (VarGet ("G_TOTALACT3FightersKilled")) + 3*(VarGet ("G_TOTALACT3Corvettes1Killed")) + 3*(VarGet ("G_TOTALACT3Corvettes2Killed")) ) ); IFONCE ( VarGet ("G_TotalP1KilledInACT3") > 40 ) ObjectiveSet ("DestroyAllP1", TRUE); ENDIFONCE // if the player makes the P1 Mothership retreat early AND they've completed all the other objectives, play the final event IFONCE ( (VarGet ("G_P1MothershipHasRetreated") = TRUE) AND (ObjectiveGet ("SalvageVessel") = TRUE) AND (ObjectiveGet ("ProtectMothership") = TRUE) AND (VarGet ("G_ReadyToHYPERSPACE") = FALSE) ) TimerCreateSetStart ("G_PlayNormalObjectivesComplete", 10); ENDIFONCE // if all primary objectives are complete, start a timer to create the HYPERSPACE objective IF ( (VarGet ("G_SendProbeObjectiveCreated") = TRUE) AND (VarGet ("G_P1MothershipHasRetreated") = FALSE) ) IFONCE ( (ObjectiveGet ("SendProbe") = TRUE) AND (ObjectiveGet ("ProtectMothership") = TRUE) AND (ObjectiveGet ("SalvageVessel") = TRUE) AND (ObjectiveGet ("DefendSalvageTeam") = TRUE) AND (ObjectiveGet ("DestroyAllP1") = TRUE) ) VarCreateSet ("G_ReadyToHYPERSPACE", TRUE); //TimerCreateSetStart ("G_MissionCompleteTimer", 5); ENDIFONCE ELSEIF ( (VarGet ("G_SendProbeObjectiveCreated") = FALSE) AND (VarGet ("G_P1MothershipHasRetreated") = FALSE) ) IFONCE ( (ObjectiveGet ("ProtectMothership") = TRUE) AND (ObjectiveGet ("SalvageVessel") = TRUE) AND (ObjectiveGet ("DefendSalvageTeam") = TRUE) AND (ObjectiveGet ("DestroyAllP1") = TRUE) ) VarCreateSet ("G_ReadyToHYPERSPACE", TRUE); //TimerCreateSetStart ("G_MissionCompleteTimer", 5); ENDIFONCE ENDIF // when the timer's up, create the HYPERSPACE objective and the ReadyToHYPERSPACE variable (which tells other parts of the script to do stuff) //IF (TimerExpiredDestroy ("G_MissionCompleteTimer")) // ObjectiveCreate ("Hyperspace", LSTRING_Hyperspace, LSTRING_Hyperspace); //ENDIF //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ // speech // // after hyperspacing in, play the hyperspace interrupted event //IFONCE (TimerExpiredDestroy ("PlayEvent131380")) // SpeechEvent (131380, 0); // "Hyperspace interrupted" //ENDIFONCE //// Event #131244 - STATUS_SalvageCorvette-TechRecoveredFromDerelict (" technology recovered from derelict.") //FindEnemiesInside (VOLUME_nisVolume, SHIPS_SearchForSalvageCorvette, 100); //ShipsSelectType (SHIPS_SalvageCorvette, SHIPS_SearchForSalvageCorvette, "SalCapCorvette"); // //IFONCE (TimerExpiredDestroy ("G_SpeechEvent131244")) // SpeechEventShips (SHIPS_SalvageCorvette , 131244, 18); // " technology recovered from derelict" //ENDIFONCE //// if all objectives are complete create the timer to play the hyperspace speech event //IFONCE ( (ObjectiveGet ("RemoveTech") = TRUE) AND (ObjectiveGet ("EliminatePirates") = TRUE) ) // ObjectiveCreate ("Hyperspace", LSTRING_Hyperspace, LSTRING_Hyperspace); // TimerCreateSetStart ("G_PlayFleetCommandSpeech", 4); //ENDIFONCE //IFONCE (TimerExpiredDestroy ("G_PlayFleetCommandSpeech")) // SpeechEvent (1333,0); // "Mission complete. Hyperspace drives online." Event #309 in speechevent.h, changed to #1333 because of magic numbers //ENDIFONCE // Event #131248 - STATUS_AnyShip-BringInSalvager ("No life signs detected. Let's get a Salvage Corvette out here.") //FindShipsInside (VOLUME_nisVolume, SHIPS_ShipwreckShips); //ShipsSelectFriendly (SHIPS_ShipwreckFriendly, SHIPS_ShipwreckShips); //ShipsSelectType (SHIPS_SalCaps, SHIPS_ShipwreckShips, "SalCapCorvette"); //IFONCE ( (FindEnemiesInside (VOLUME_nisVolume, SHIPS_ShipwreckEnemies, 7000)) AND // (ShipsCount (SHIPS_ShipwreckFriendly) = 0) AND // (ShipsCount (SHIPS_SalCaps) = 0) AND // (VarGet ("G_Nis2Complete")) ) // TimerCreateSetStart ("PlayEvent131248", (Random(5, 10))); //ENDIFONCE //IF ( (TimerExpired ("PlayEvent131248")) AND (VarGet ("YaddaBlach") = FALSE) ) // SpeechEventShips (SHIPS_ShipwreckEnemies, 131248, 0); // "No life signs detected. Let's get a Salvage Corvette out here." // VarCreateSet ("YaddaBlach", TRUE); //ENDIF // Event #131249 - STATUS_AnyShip-CombatWithMissileCorvettes ("Watch the missiles! They're too fast to outrun.") //IF (VarGet ("BLAHAONCE") = FALSE) // IF (ShipsCount (SHIPS_Temp) > 0) // ShipsSelectClass (SHIPS_Fighters, SHIPS_Temp, "CLASS_Fighter"); // IF (VarGet ("InitialFighters") = 0) // VarCreateSet ("InitialFighters", ShipsCount (SHIPS_Fighters)); // VarCreateSet ("RandomKilled", (Random (2,5))); // ELSEIF ( (ShipsCount (SHIPS_Fighters)) > (VarGet ("InitialFighters")) ) // VarSet ("InitialFighters", ShipsCount (SHIPS_Fighters)); // ELSEIF ( ((VarGet ("InitialFighters")) - (ShipsCount (SHIPS_Fighters))) > VarGet("RandomKilled") ) // VarCreateSet ("BLAHAONCE", TRUE); // SpeechEventShips (SHIPS_Fighters, 131249, 0); // "Watch the missiles! They're too fast to outrun." // ENDIF // ENDIF //ENDIF // Event #131250 - STATUS_AnyShip-CombatWithP1 ("These guys aren't so tough..") ShipsAdd (SHIPS_KillingP1, SHIPS_LineTeamsUnderAttack); ShipsAdd (SHIPS_KillingP1, SHIPS_NISTeamFighterUnderAttack); ShipsAdd (SHIPS_KillingP1, SHIPS_DerelictTeam1UnderAttack); //IF (VarGet ("BLAHAONCE2") = FALSE) // IF (VarGet ("G_Nis2Complete") = FALSE) // //VarCreateSet ("CurrentP1Ships", (ShipsCount (TEAMSHIPS_FirstLineTeam) + ShipsCount(TEAMSHIPS_SecondLineTeam) + ShipsCount (TEAMSHIPS_DerelictTeam1))); // ELSEIF (VarGet ("G_Nis2Complete") = TRUE) // //VarCreateSet ("CurrentP1Ships", (ShipsCount (TEAMSHIPS_FirstLineTeam) + ShipsCount(TEAMSHIPS_SecondLineTeam) + ShipsCount (TEAMSHIPS_NISTeamFighter) + ShipsCount (TEAMSHIPS_DerelictTeam1))); // ENDIF // IF (VarGet ("MaxP1Ships") = 0) // VarCreateSet ("MaxP1Ships", VarGet ("CurrentP1Ships")); // VarCreateSet ("RandomDead", (Random (3,5))); // ELSEIF ( ((VarGet ("MaxP1Ships")) - (VarGet ("CurrentP1Ships")) > 0) AND (VarGet ("P1DyingTimerCreated") = TRUE) ) // TimerCreateSetStart ("P1Dying", 150); // VarCreateSet ("P1DyingTimerCreated", TRUE); // ELSEIF ( (TimerExpired ("P1Dying")) ) // TimerDestroy ("P1Dying"); // VarSet ("P1DyingTimerCreated", FALSE); // ELSEIF ( ((VarGet ("MaxP1Ships")) - VarGet ("CurrentP1Ships")) > (VarGet ("RandomDead")) ) // SpeechEventShips (SHIPS_KillingP1, 131250, 0); // "These guys aren't so tough.." // VarCreateSet ("BLAHAONCE2", TRUE); // ENDIF //ENDIF // Event #131251 - STATUS_AnyShip-P1Protective ("Whoa! These guys are protective..") //IF (VarGet ("BLAHAONCE3") = FALSE) // IF ( (ShipsCount (SHIPS_Temp) > 0) AND (VarGet ("G_Nis2Complete")) AND (VarGet ("NEWTimerCreated") = FALSE) ) // IF (Random (1,1000) < 999) // TimerCreateSetStart ("PlayEvent131251", (Random (5,10))); // VarCreateSet ("NEWTimerCreated", TRUE); // ELSE // VarCreateSet ("BLAHAONCE3", TRUE); // ENDIF // ELSEIF (TimerExpiredDestroy ("PlayEvent131251")) // SpeechEventShips (SHIPS_Temp, 131251, 0); // "Whoa! These guys are protective.." // VarCreateSet ("BLAHAONCE3", TRUE); // ENDIF //ENDIF //// Event #350 - Triggered at start of N02 ("It looks like a shipwreck Fleet. Position static. Not much for readings...") //IFONCE (TimerExpiredDestroy ("SpeechEvent350Timer")) // SpeechEventShips (SHIPS_Null7676, 350, 0); // "It looks like a shipwreck Fleet. Position static. Not much for readings..." // TimerCreateSetStart ("SpeechEvent351Timer", 9); //ENDIFONCE //// Event #351 - Triggered at start of N02 ("Stand by, I'm getting something here...") //IFONCE (TimerExpiredDestroy ("SpeechEvent351Timer")) // SpeechEventShips (SHIPS_Null7676, 351, 0); // "Stand by, I'm getting something here..." //ENDIF //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ // technology // // if player researches Corvette drive, allow Corvette chassis // (Build: Light Corvette) IFONCE (TechGet ("MassDrive10Kt")) TechSetResearch ("Chassis2"); ENDIFONCE // if player researches Corvette chassis, allow Heavy Corvette upgrade // (Build: Heavy Corvette) IF ((TechGet ("Chassis2")) AND (VarGet ("SetMediumGuns") = FALSE)) TechSetResearch ("MediumGuns"); VarCreateSet ("SetMediumGuns", TRUE); ENDIF // MISSION 01 Tech stuff: //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ // if player researches Fighter chassis, allow Corvette Drive // (Build: Repair Corvette) IFONCE (TechGet ("Chassis1")) TechSetResearch ("MassDrive10Kt"); ENDIFONCE //ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ENDWATCH