-- $Id: //depot/Projects/StarWars_Steam/FOC/Run/Data/Scripts/Story/Story_Empire_ActI_M03_SPACE.lua#1 $ --///////////////////////////////////////////////////////////////////////////////////////////////// -- -- (C) Petroglyph Games, Inc. -- -- -- ***** ** * * -- * ** * * * -- * * * * * -- * * * * * * * * -- * * *** ****** * ** **** *** * * * ***** * *** -- * ** * * * ** * ** ** * * * * ** ** ** * -- *** ***** * * * * * * * * ** * * * * -- * * * * * * * * * * * * * * * -- * * * * * * * * * * ** * * * * -- * ** * * ** * ** * * ** * * * * -- ** **** ** * **** ***** * ** *** * * -- * * * -- * * * -- * * * -- * * * * -- **** * * -- --///////////////////////////////////////////////////////////////////////////////////////////////// -- C O N F I D E N T I A L S O U R C E C O D E -- D O N O T D I S T R I B U T E --///////////////////////////////////////////////////////////////////////////////////////////////// -- -- $File: //depot/Projects/StarWars_Steam/FOC/Run/Data/Scripts/Story/Story_Empire_ActI_M03_SPACE.lua $ -- -- Original Author: Steve_Copeland -- -- $Author: Brian_Hayes $ -- -- $Change: 637819 $ -- -- $DateTime: 2017/03/22 10:16:16 $ -- -- $Revision: #1 $ -- --///////////////////////////////////////////////////////////////////////////////////////////////// require("PGStoryMode") -- -- Definitions -- This function is called once when the script is first created. -- function Definitions() DebugMessage("%s -- In Definitions", tostring(Script)) StoryModeEvents = { Empire_M03_Begin = State_Empire_M03_Begin ,Empire_A01M03_Intro_Fett_TEXT = State_Empire_A01M03_Intro_Fett_TEXT ,Empire_A01M03_Intro_Officer_TEXT = State_Empire_A01M03_Intro_Officer_TEXT ,Empire_M2_Pirate_Base_is_Dead = State_M2_Pirate_Base_is_Dead ,Empire_M03_Final_Dialog_Begin_00 = State_Empire_M03_Final_Dialog_Begin_00 ,Empire_A01M03_Final_Fett_TEXT = State_Empire_A01M03_Final_Fett_TEXT ,Empire_A01M03_Final_Fett_END = State_Empire_A01M03_Final_Fett_END ,Empire_A01M03_Final_Officer_TEXT = State_Empire_A01M03_Final_Officer_TEXT ,Empire_A01M03_Final_Officer_END = State_Empire_A01M03_Final_Officer_END ,Empire_A01M03_TASK_Use_Fett_Against_Sensors = State_TASK_Use_Fett_Against_Sensors ,Empire_M03_HINT_Use_Seismic_Charge = State_HINT_Use_Seismic_Charge ,Empire_A01M03_Sat_Destroyed_Dialog_00_Remove_Text = State_Sat_Destroyed_Dialog_Remove_Text } pirate_type_list0 = { "Pirate_Fighter_Squadron" } pirate_type_list1 = { "Pirate_Fighter_Squadron" ,"Pirate_Fighter_Squadron" } pirate_type_list2 = { "Pirate_Fighter_Squadron" ,"Pirate_Fighter_Squadron" ,"Pirate_Fighter_Squadron" ,"Pirate_Fighter_Squadron" ,"Pirate_Fighter_Squadron" } pirate_type_list3 = { "Pirate_Fighter_Squadron" ,"Pirate_Fighter_Squadron" ,"Pirate_Fighter_Squadron" ,"Pirate_Fighter_Squadron" ,"Pirate_Fighter_Squadron" ,"IPV1_System_Patrol_Craft" ,"IPV1_System_Patrol_Craft" ,"IPV1_System_Patrol_Craft" } pirate_captain_type = { "Pirate_Frigate_Leader" } break_patrol = false sensor_range = 600 base_warning_range = 2000 base_alarm_range = 1000 patrol_aggro_range = 400 countdown_underway = false alarm_active = false alarm_time = 10 captain_disabled = false initial_units_spawned = false num_probes_triggered = 0 sensors_down = false captain_found = false captain_start_range = 600 sensor01_flagged = false sensor02_flagged = false sensor03_flagged = false sensor04_flagged = false sensor05_flagged = false sensor06_flagged = false sensor07_flagged = false sensor01_destroyed = false sensor02_destroyed = false sensor03_destroyed = false sensor04_destroyed = false sensor05_destroyed = false sensor06_destroyed = false sensor07_destroyed = false number_of_sensors_destroyed = 0 guard_loc_1 = 1 guard_loc_2 = 2 guard_loc_3 = 3 guard_loc_4 = 4 guard_loc_5 = 5 guard_loc_6 = 6 guard_loc_7 = 7 flag_fett_successful = false flag_pirate_base_dead = false flag_hardpoint_speech_given = false flag_spot_01_filled = false flag_spot_02_filled = false flag_spot_03_filled = false -- For memory pool cleanup hints enemy = nil unit = nil fog_id = nil fog_id2 = nil end -- Have the units in a list guard the location of an object (continue to guard after the obj dies). function List_Guard(list, obj) for k, unit in pairs(list) do if TestValid(unit) then unit.Attack_Move(obj.Get_Position()) end end end -- Have units attack an object. function List_Attack(list, object) --MessageBox("attacking") for k, unit in pairs(list) do if TestValid(object) then unit.Attack_Move(object) end end end function State_Empire_M03_Begin(message) if message == OnEnter then -- Prevent the AI from performing an automatic fog of war reveal for this tactical scenario. -- MessageBox("disallowing ai controlled fog reveal") GlobalValue.Set("Allow_AI_Controlled_Fog_Reveal", 0) -- MessageBox("OnEnter State_Empire_M03_Begin") -- Lock out controls for intro cinematic Suspend_AI(1) Lock_Controls(1) Letter_Box_In(0) -- Locate Boba Fett's ship fett = Find_First_Object("Slave_I") if not fett then --MessageBox("Can't find Boba Fett! Aborting!") return end fettfly2 = Find_Hint("GENERIC_MARKER_SPACE", "fettflyto2") fettfly3 = Find_Hint("GENERIC_MARKER_SPACE", "fettflyto3") pirate_base = Find_First_Object("PIRATE_ASTEROID_BASE_WEAK") --prevent pirate base shooting at fett until alarm is raised pirate_base.Prevent_All_Fire(true) Create_Thread("Intro_Cinematic") -- Find the various alarm triggers alarm1 = Find_Hint("Orbital_Sensor_Pod_Pirate", "sensor1") alarm2 = Find_Hint("Orbital_Sensor_Pod_Pirate", "sensor2") alarm3 = Find_Hint("Orbital_Sensor_Pod_Pirate", "sensor3") alarm4 = Find_Hint("Orbital_Sensor_Pod_Pirate", "sensor4") alarm5 = Find_Hint("Orbital_Sensor_Pod_Pirate", "sensor5") alarm6 = Find_Hint("Orbital_Sensor_Pod_Pirate", "sensor6") alarm7 = Find_Hint("Orbital_Sensor_Pod_Pirate", "sensor7") retreat1 = Find_Hint("GENERIC_MARKER_SPACE", "1") retreat2 = Find_Hint("GENERIC_MARKER_SPACE", "2") retreat3 = Find_Hint("GENERIC_MARKER_SPACE", "3") --captainspawn = (Find_Hint("GENERIC_MARKER_SPACE", "leaderspawn")).Get_Position() captainspawn = pirate_base.Get_Position() captainflyto = Find_Hint("GENERIC_MARKER_SPACE", "leaderflyto") patrol_01 = (Find_Hint("GENERIC_MARKER_SPACE", "patrol1")).Get_Position() patrol_02 = (Find_Hint("GENERIC_MARKER_SPACE", "patrol2")).Get_Position() patrol_03 = (Find_Hint("GENERIC_MARKER_SPACE", "patrol3")).Get_Position() patrol_04 = (Find_Hint("GENERIC_MARKER_SPACE", "patrol4")).Get_Position() patrol_05 = (Find_Hint("GENERIC_MARKER_SPACE", "patrol5")).Get_Position() patrol_06 = (Find_Hint("GENERIC_MARKER_SPACE", "patrol6")).Get_Position() cinematic_fett_start = Find_Hint("GENERIC_MARKER_SPACE", "cinematicfettstart") cinematic_fett_end = Find_Hint("GENERIC_MARKER_SPACE", "cinematicfettend") cinematic_pirate_start = Find_Hint("GENERIC_MARKER_SPACE", "cinematicpiratestart") cinematic_pirate_end = Find_Hint("GENERIC_MARKER_SPACE", "cinematicpirateend") cinematic_acclamator_start = Find_Hint("GENERIC_MARKER_SPACE", "cinematicacclamatorstart") cinematic_acclamator_end = Find_Hint("GENERIC_MARKER_SPACE", "cinematicacclamatorend") if not alarm1 or not alarm2 or not alarm3 or not alarm4 or not alarm5 or not alarm6 or not alarm7 or not retreat1 or not retreat2 or not retreat3 or not pirate_base or not captainspawn or not captainflyto then --MessageBox("missing expected objects; aborting") return else -- Find the players pirates = Find_Player("Pirates") empire = Find_Player("Empire") -- Set up death callbacks. Register_Death_Event(alarm1, Sensor_Destroyed) Register_Death_Event(alarm2, Sensor_Destroyed) Register_Death_Event(alarm3, Sensor_Destroyed) Register_Death_Event(alarm4, Sensor_Destroyed) Register_Death_Event(alarm5, Sensor_Destroyed) Register_Death_Event(alarm6, Sensor_Destroyed) Register_Death_Event(alarm7, Sensor_Destroyed) -- Set up proximities for each alarm. Register_Prox(alarm1, Prox_Sensor_Response, sensor_range, empire) Register_Prox(alarm2, Prox_Sensor_Response, sensor_range, empire) Register_Prox(alarm3, Prox_Sensor_Response, sensor_range, empire) Register_Prox(alarm4, Prox_Sensor_Response, sensor_range, empire) Register_Prox(alarm5, Prox_Sensor_Response, sensor_range, empire) Register_Prox(alarm6, Prox_Sensor_Response, sensor_range, empire) Register_Prox(alarm7, Prox_Sensor_Response, sensor_range, empire) -- Add a warning and an alarm-trigger prox for the main base Register_Prox(pirate_base, Prox_Base_Warning, base_warning_range, empire) Register_Prox(pirate_base, Prox_Base_Alarm, base_alarm_range, empire) end -- Spawn some non-AI pirates to guard each sat1guards_list = SpawnList(pirate_type_list1, alarm1, pirates, false, true) List_Guard(sat1guards_list, alarm1) sat2guards_list = SpawnList(pirate_type_list1, alarm2, pirates, false, true) List_Guard(sat2guards_list, alarm2) sat3guards_list = SpawnList(pirate_type_list1, alarm3, pirates, false, true) List_Guard(sat3guards_list, alarm3) sat4guards_list = SpawnList(pirate_type_list1, alarm4, pirates, false, true) List_Guard(sat4guards_list, alarm4) sat5guards_list = SpawnList(pirate_type_list1, alarm1, pirates, false, true) List_Guard(sat5guards_list, alarm5) sat6guards_list = SpawnList(pirate_type_list1, alarm1, pirates, false, true) List_Guard(sat6guards_list, alarm6) sat7guards_list = SpawnList(pirate_type_list1, alarm7, pirates, false, true) List_Guard(sat7guards_list, alarm7) -- dme 9/21/05 Spawn the patrol units patrol1_list = SpawnList(pirate_type_list0, patrol_02, pirates, false, true) patrol_group1 = patrol1_list[1] patrol2_list = SpawnList(pirate_type_list0, patrol_04, pirates, false, true) patrol_group2 = patrol2_list[1] patrol3_list = SpawnList(pirate_type_list0, patrol_04, pirates, false, true) patrol_group3 = patrol3_list[1] initial_units_spawned = true --jdg 8/23/05 putting sensors into idle anim here alarm1.Play_Animation("Idle",true) alarm2.Play_Animation("Idle",true) alarm3.Play_Animation("Idle",true) alarm4.Play_Animation("Idle",true) alarm5.Play_Animation("Idle",true) alarm6.Play_Animation("Idle",true) alarm7.Play_Animation("Idle",true) if TestValid(patrol_group1) then Create_Thread("Move_patrol_group_01") end if TestValid(patrol_group1) then Create_Thread("Move_patrol_group_02") end if TestValid(patrol_group1) then Create_Thread("Move_patrol_group_03") end end end --jdg delaying reinforcement hint/flashing until after Fetts line function State_Sat_Destroyed_Dialog_Remove_Text(message) if message == OnEnter then Story_Event("ENABLE_REINFORCEMENTS") end end -- dme 9/22/05 Pirate Group Management function Guard_Management (Old_Sensor_Loc, New_Sensor_Loc) if guard_loc_1 == Old_Sensor_Loc then guard_loc_1 = New_Sensor_Loc end if guard_loc_2 == Old_Sensor_Loc then guard_loc_2 = New_Sensor_Loc end if guard_loc_3 == Old_Sensor_Loc then guard_loc_3 = New_Sensor_Loc end if guard_loc_4 == Old_Sensor_Loc then guard_loc_4 = New_Sensor_Loc end if guard_loc_5 == Old_Sensor_Loc then guard_loc_5 = New_Sensor_Loc end if guard_loc_6 == Old_Sensor_Loc then guard_loc_6 = New_Sensor_Loc end if guard_loc_7 == Old_Sensor_Loc then guard_loc_7 = New_Sensor_Loc end end -- dme 9/22/05 Find closest sensor function Get_Closest_Sensor (Old_Sensor) if Old_Sensor == 1 then if TestValid(alarm5) then return 5 elseif TestValid(alarm6) then return 6 elseif TestValid(alarm7) then return 7 elseif TestValid(alarm3) then return 3 elseif TestValid(alarm4) then return 4 elseif TestValid(alarm2) then return 2 else return 8 end end if Old_Sensor == 2 then if TestValid(alarm4) then return 4 elseif TestValid(alarm3) then return 3 elseif TestValid(alarm7) then return 7 elseif TestValid(alarm5) then return 5 elseif TestValid(alarm1) then return 1 elseif TestValid(alarm6) then return 6 else return 8 end end if Old_Sensor == 3 then if TestValid(alarm4) then return 4 elseif TestValid(alarm2) then return 2 elseif TestValid(alarm5) then return 5 elseif TestValid(alarm1) then return 1 elseif TestValid(alarm7) then return 7 elseif TestValid(alarm6) then return 6 else return 8 end end if Old_Sensor == 4 then if TestValid(alarm3) then return 3 elseif TestValid(alarm2) then return 2 elseif TestValid(alarm5) then return 5 elseif TestValid(alarm1) then return 1 elseif TestValid(alarm7) then return 7 elseif TestValid(alarm6) then return 6 else return 8 end end if Old_Sensor == 5 then if TestValid(alarm1) then return 1 elseif TestValid(alarm3) then return 3 elseif TestValid(alarm4) then return 4 elseif TestValid(alarm6) then return 6 elseif TestValid(alarm7) then return 7 elseif TestValid(alarm2) then return 2 else return 8 end end if Old_Sensor == 6 then if TestValid(alarm7) then return 7 elseif TestValid(alarm1) then return 1 elseif TestValid(alarm5) then return 5 elseif TestValid(alarm4) then return 4 elseif TestValid(alarm3) then return 3 elseif TestValid(alarm2) then return 2 else return 8 end end if Old_Sensor == 7 then if TestValid(alarm6) then return 6 elseif TestValid(alarm1) then return 1 elseif TestValid(alarm4) then return 4 elseif TestValid(alarm3) then return 3 elseif TestValid(alarm5) then return 5 elseif TestValid(alarm2) then return 2 else return 8 end end end --jdg flagging the sensors at initial task message here function State_TASK_Use_Fett_Against_Sensors(message) if message == OnEnter then if TestValid(alarm1) then alarm1.Highlight(true) Add_Radar_Blip(alarm1, "blip_alarm1") end if TestValid(alarm2) then alarm2.Highlight(true) Add_Radar_Blip(alarm2, "blip_alarm2") end if TestValid(alarm3) then alarm3.Highlight(true) Add_Radar_Blip(alarm3, "blip_alarm3") end if TestValid(alarm4) then alarm4.Highlight(true) Add_Radar_Blip(alarm4, "blip_alarm4") end if TestValid(alarm5) then alarm5.Highlight(true) Add_Radar_Blip(alarm5, "blip_alarm5") end if TestValid(alarm6) then alarm6.Highlight(true) Add_Radar_Blip(alarm6, "blip_alarm6") end if TestValid(alarm7) then alarm7.Highlight(true) Add_Radar_Blip(alarm7, "blip_alarm7") end end end --jdg auto-select fett for button flash in XML function State_HINT_Use_Seismic_Charge(message) if message == OnEnter then --select fett so we can flash his force push icon thingy if TestValid(fett) then empire.Select_Object(fett) end end end function Intro_Cinematic() -- intro cine function Point_Camera_At(fettfly3) Start_Cinematic_Camera() Resume_Mode_Based_Music() -- Set_Cinematic_Camera_Key(target_pos, x_dist, y_pitch, z_yaw, euler, pobj, use_object_rotation, cinematic_animation) -- Set_Cinematic_Camera_Key(alarm2, 1925, 3, 92, 1, 0, 0, 0) Set_Cinematic_Camera_Key(alarm2, 1940, 0, 91.95, 1, 0, 0, 0) Set_Cinematic_Target_Key(fett, -15.0, 0, -10, 0, fett, 0, 0) --Transition_Cinematic_Camera_Key(alarm2, 6, 1925, 1, 92, 1, 0, 0, 0) -- Transition_Cinematic_Camera_Key(alarm2, 6, 1925, 0, 92, 1, 0, 0, 0) -- Transition_Cinematic_Camera_Key(alarm2, 6, 1925, -.5, 92, 1, 0, 0, 0) fett.Teleport_And_Face(fettfly3) --BlockOnCommand(fett.Turn_To_Face(fettfly3)) Fade_Screen_In(1) fett.Cinematic_Hyperspace_In(30) --BlockOnCommand(fett.Move_To(fettfly3)) fett.Move_To(fettfly2) Sleep(2) fett.Play_Cinematic_Engine_Flyby() Sleep(3) Transition_Cinematic_Target_Key(alarm2, 4, 0, -40, 0, 0, fett, 0, 0) Sleep(3) Story_Event("M2_INTRO_DIALOGUE_GO") end -- Fett dialogue catch function State_Empire_A01M03_Intro_Fett_TEXT(message) if message == OnEnter then Sleep(2) Set_Cinematic_Camera_Key(alarm2, 750, 10, 92, 1, 0, 0, 0) Set_Cinematic_Target_Key(alarm2, 0, 0, 0, 0, alarm2, 0, 0) Transition_Cinematic_Camera_Key(alarm2, 10, 500, 10, 97, 1, 0, 0, 0) Sleep(2) --jdg huh? no need for this wacky kluge. --Story_Event("LUA_FETT_SPEECH_HANDLED") end end function State_Empire_A01M03_Intro_Officer_TEXT(message) if message == OnEnter then Sleep(2) --Set_Cinematic_Camera_Key(alarm2, 1925, 1, 92, 1, 0, 0, 0) Set_Cinematic_Camera_Key(alarm2, 1925, 0, 92, 1, 0, 0, 0) --Set_Cinematic_Target_Key(fett, 0, -50, 0, 0, fett, 0, 0) Set_Cinematic_Target_Key(alarm2, 0, -50, 0, 0, fett, 0, 0) Sleep(2) Transition_To_Tactical_Camera(2) Sleep(1) End_Cinematic_Camera() Letter_Box_Out(.5) Lock_Controls(0) Suspend_AI(0) end end -- Start the alarm countdown and make sure that the timer can't be reset. function Prox_Sensor_Response(prox_obj, trigger_obj) --MessageBox("%s-- prox_obj type: %s trigger_obj type: %s", tostring(Script), tostring(prox_obj), tostring(trigger_obj)) -- Cancel the object in range event from signaling anymore. -- A probe detection always results in the probe being destroyed or the alarm going off (unreversable). prox_obj.Cancel_Event_Object_In_Range(Prox_Sensor_Response) if (trigger_obj.Get_Type() == Find_Object_Type("Slave_I")) then --Boba Fett has an opportunity to destroy the timer before it goes off. --MessageBox("Disarm countdown Triggered! ...user feedback, animation state, audio, etc.") Story_Event("SENSOR_RESPONSE") Register_Timer(Timer_Alarm, alarm_time) num_probes_triggered = num_probes_triggered + 1 -- jdg - 8/22/05 -- adding in map flag events here if prox_obj == alarm1 then --Story_Event("Sensor_1_Tripped") -- Empire_M03_Flag_Sensor01_OFF story flag to turn off --MessageBox("Sensor 01 should now be flagged") sensor01_flagged = true alarm1.Play_Animation("Warning",true) alarm1.Play_SFX_Event("Structure_Orbital_LRS_Loop") end if prox_obj == alarm2 then --Story_Event("Sensor_2_Tripped") --MessageBox("Sensor 02 should now be WARNING") sensor02_flagged = true alarm2.Play_Animation("Warning",true) alarm2.Play_SFX_Event("Structure_Orbital_LRS_Loop") end if prox_obj == alarm3 then --Story_Event("Sensor_3_Tripped") --MessageBox("Sensor 03 should now be flagged") sensor03_flagged = true alarm3.Play_Animation("Warning",true) alarm3.Play_SFX_Event("Structure_Orbital_LRS_Loop") end if prox_obj == alarm4 then --Story_Event("Sensor_4_Tripped") --MessageBox("Sensor 04 should now be flagged") sensor04_flagged = true alarm4.Play_Animation("Warning",true) alarm4.Play_SFX_Event("Structure_Orbital_LRS_Loop") end if prox_obj == alarm5 then --Story_Event("Sensor_5_Tripped") --MessageBox("Sensor 05 should now be flagged") sensor05_flagged = true alarm5.Play_Animation("Warning",true) alarm5.Play_SFX_Event("Structure_Orbital_LRS_Loop") end if prox_obj == alarm6 then --Story_Event("Sensor_6_Tripped") --MessageBox("Sensor 06 should now be flagged") sensor06_flagged = true alarm6.Play_Animation("Warning",true) alarm6.Play_SFX_Event("Structure_Orbital_LRS_Loop") end if prox_obj == alarm7 then --Story_Event("Sensor_7_Tripped") --MessageBox("Sensor 07 should now be flagged") sensor07_flagged = true alarm7.Play_Animation("Warning",true) alarm7.Play_SFX_Event("Structure_Orbital_LRS_Loop") end else --Other units immediately trip the alarm --MessageBox("Alarm tripped without disarm opportunity.") Story_Event("USED_SUPPORT_UNITS_TOO_EARLY") -- Create a thread for this event, because we want to use Sleep within a prox response Create_Thread("Timer_Alarm") end end function Prox_Base_Warning(prox_obj, trigger_obj) prox_obj.Cancel_Event_Object_In_Range(Prox_Base_Warning) if alarm_active then return end if not flag_fett_successful then --MessageBox("prox_obj is %s, trigger is %s", tostring(prox_obj), tostring(trigger_obj)) --MessageBox("Stay back from base warning.") Story_Event("BASE_PROX_WARNING") --reveal around base here fog_id = FogOfWar.Reveal(empire,prox_obj.Get_Position(),400,400) else --MessageBox("Player approaching base after Fett's success") end end function Prox_Base_Alarm(prox_obj, trigger_obj) prox_obj.Cancel_Event_Object_In_Range(Prox_Base_Alarm) if alarm_active then return end if flag_fett_successful then -- play the Pirate Leader: Imperials! Where did they come from? Prepare my shuttle! line here -- Story_Event("BASE_PROX_POST_FETT_SUCCESS") end if not flag_fett_successful then --MessageBox("Too close to base, alarm triggered with no timer.") -- Create a thread for this event, because we want to use Sleep within a prox response Create_Thread("Timer_Alarm") pirate_base.Prevent_All_Fire(false) end end function Extra_Pirates_Callback(pirate_list) if TestValid(captain) then pirate_fighter_list = Find_All_Objects_Of_Type("Pirate_Fighter_Squadron") --pirate_ipv_list = Find_All_Objects_Of_Type("IPV1_System_Patrol_Craft") local_list = pirate_list for j, unit in pairs(local_list) do unit.Override_Max_Speed(3) unit.Move_To(retreat3) end for j, unit in pairs(pirate_fighter_list) do unit.Override_Max_Speed(4) unit.Guard_Target(captain) end end end function Mid_Cine() -- Mini cinematic of pirate captain leaving station if not TestValid (captain) then --MessageBox("cannot find captain!") end Sleep(1) Suspend_AI(1) Lock_Controls(1) Letter_Box_In(0) Fade_Screen_Out(.5) Start_Cinematic_Camera() Fade_Screen_In(.5) Story_Event("FLAG_THE_LEADER") -- Set_Cinematic_Camera_Key(target_pos, xoffset_dist, yoffset_pitch, zoffset_yaw, angles?, attach_object, use_object_rotation, cinematic_animation) Set_Cinematic_Camera_Key(captain, 400, 6, 30, 1, 0, 0, 0) -- Set_Cinematic_Camera_Key(target_pos, xoffset_dist, yoffset_pitch, zoffset_yaw, angles?, attach_object, use_object_rotation, cinematic_animation) Set_Cinematic_Target_Key(captain, 0, 0, 0, 0, captain, 0, 0) -- Transition_Cinematic_Camera_Key(target_pos, xoffset_dist, yoffset_pitch, zoffset_yaw, angles?, attach_object, use_object_rotation, cinematic_animation) Transition_Cinematic_Camera_Key(captain, 8, 1200, 12, -60, 1, 0, 0, 0) --this midtro only plays if player fails the main sensor destruction objective -- so setting captain faster here captain.Override_Max_Speed(4) BlockOnCommand(captain.Move_To(captainflyto)) Sleep(2) Sleep(3) Story_Event("PIRATE_CAPTAIN_SPAWNS") Fade_Screen_Out(.5) if TestValid(fett) then Point_Camera_At(fett) end Transition_To_Tactical_Camera(0) Fade_Screen_Out(.5) Transition_To_Tactical_Camera(.5) End_Cinematic_Camera() Fade_Screen_In(.5) Letter_Box_Out(.5) Lock_Controls(0) Suspend_AI(0) Story_Event("ENABLE_REINFORCEMENTS") end function Timer_Alarm() if alarm_active then return end --setting base back to active pirate_base.Prevent_All_Fire(false) -- When this fires, the base is alerted --MessageBox("Alarm Triggered!") --jdg 8/23/05 putting alarm guys into alarm anim if TestValid (alarm1) then alarm1.Play_Animation("Alarm",true) alarm1.Play_SFX_Event("Structure_Orbital_LRS_Fast_Loop") Remove_Radar_Blip("blip_alarm1") end if TestValid (alarm2) then alarm2.Play_Animation("Alarm",true) alarm2.Play_SFX_Event("Structure_Orbital_LRS_Fast_Loop") Remove_Radar_Blip("blip_alarm2") end if TestValid (alarm3) then alarm3.Play_Animation("Alarm",true) alarm3.Play_SFX_Event("Structure_Orbital_LRS_Fast_Loop") Remove_Radar_Blip("blip_alarm3") end if TestValid (alarm4) then alarm4.Play_Animation("Alarm",true) alarm4.Play_SFX_Event("Structure_Orbital_LRS_Fast_Loop") Remove_Radar_Blip("blip_alarm4") end if TestValid (alarm5) then alarm5.Play_Animation("Alarm",true) alarm5.Play_SFX_Event("Structure_Orbital_LRS_Fast_Loop") Remove_Radar_Blip("blip_alarm5") end if TestValid (alarm6) then alarm6.Play_Animation("Alarm",true) alarm6.Play_SFX_Event("Structure_Orbital_LRS_Fast_Loop") Remove_Radar_Blip("blip_alarm6") end if TestValid (alarm7) then alarm7.Play_Animation("Alarm",true) alarm7.Play_SFX_Event("Structure_Orbital_LRS_Fast_Loop") Remove_Radar_Blip("blip_alarm7") end -- Spawn the pirate captain and don't let the AI control him captain_list = SpawnList(pirate_captain_type, captainspawn, pirates, false, true) captain = captain_list[1] --jdg setting the pirate leader to non-killable to prevent bugs. captain.Set_Cannot_Be_Killed(true) break_patrol = true --Story_Event("FLAG_THE_LEADER") --Story_Event("PIRATE_CAPTAIN_SPAWNS") fog_id2 = FogOfWar.Reveal_All(empire) --jdg moving to cinematic midtro --Story_Event("ENABLE_REINFORCEMENTS") if not flag_fett_successful then Story_Event("ALARM_TRIGGERED") end alarm_active = true Create_Thread("Mid_Cine") -- NEEDS MID-GAME CINE ISSUES RESOLVED -- reinforce extra pirates, and trigger early captain's retreat. if TestValid(captain)then --MessageBox("Reinforcing at Captain.") --Sleep(2) if not flag_fett_successful then Story_Event("PIRATES_INCOMING") end --Sleep(1) cap_guards = SpawnList(pirate_type_list3, captain, pirates, false, true, false, Extra_Pirates_Callback) Create_Thread("Extra_Pirates_Callback", cap_guards) Create_Thread("Move_Pirate_Captain") end end -- Destroying an alarm will deactivate the countdown. function Sensor_Destroyed() --MessageBox("Sensor destroyed.") if num_probes_triggered > 0 and not alarm_active then -- If we've destroyed as many probes as we've set off, then we're cool. -- Don't worry about tracking individual probes. num_probes_triggered = num_probes_triggered - 1 if num_probes_triggered < 1 and not alarm_triggered then --MessageBox("Countdown stopped. Probably need some user feedback here.") Cancel_Timer(Timer_Alarm) countdown_underway = false number_of_sensors_destroyed = number_of_sensors_destroyed + 1 --need to track probes so I can remove flags if not TestValid(alarm1) and sensor01_destroyed == false then sensor01_destroyed = true --alarm1.Highlight(false) Remove_Radar_Blip("blip_alarm1") end if not TestValid(alarm2) and sensor02_destroyed == false then sensor02_destroyed = true Remove_Radar_Blip("blip_alarm2") end if not TestValid(alarm3) and sensor03_destroyed == false then sensor03_destroyed = true Remove_Radar_Blip("blip_alarm3") end if not TestValid(alarm4) and sensor04_destroyed == false then sensor04_destroyed = true Remove_Radar_Blip("blip_alarm4") end if not TestValid(alarm5) and sensor05_destroyed == false then sensor05_destroyed = true Remove_Radar_Blip("blip_alarm5") end if not TestValid(alarm6) and sensor06_destroyed == false then sensor06_destroyed = true Remove_Radar_Blip("blip_alarm6") end if not TestValid(alarm7) and sensor07_destroyed == false then sensor07_destroyed = true Remove_Radar_Blip("blip_alarm7") end -- now turn off flags if appropriate if sensor01_destroyed == true then mylocation = Find_First_Object("Story_Trigger_Zone_01") Sensor_Guards_to_New_Spot (1, mylocation, sat1guards_list) if sensor01_flagged == true then Story_Event("Sensor_1_Destroyed") --MessageBox("Sensor 01 flag should now be off") sensor01_flagged = false end end if sensor02_destroyed == true then mylocation = Find_First_Object("Story_Trigger_Zone_02") Sensor_Guards_to_New_Spot (2, mylocation, sat2guards_list) if sensor02_flagged == true then Story_Event("Sensor_2_Destroyed") --MessageBox("Sensor 02 flag should now be off") sensor02_flagged = false end end if sensor03_destroyed == true then mylocation = Find_First_Object("Story_Trigger_Zone_03") Sensor_Guards_to_New_Spot (3, mylocation, sat3guards_list) if sensor03_flagged == true then Story_Event("Sensor_3_Destroyed") --MessageBox("Sensor 03 flag should now be off") sensor03_flagged = false end end if sensor04_destroyed == true then mylocation = Find_First_Object("Story_Trigger_Zone_04") Sensor_Guards_to_New_Spot (4, mylocation, sat4guards_list) if sensor04_flagged == true then Story_Event("Sensor_4_Destroyed") --MessageBox("Sensor 04 flag should now be off") sensor04_flagged = false end end if sensor05_destroyed == true then mylocation = Find_First_Object("Story_Trigger_Zone_05") Sensor_Guards_to_New_Spot (5, mylocation, sat5guards_list) if sensor05_flagged == true then Story_Event("Sensor_5_Destroyed") --MessageBox("Sensor 05 flag should now be off") sensor05_flagged = false end end if sensor06_destroyed == true then mylocation = Find_First_Object("Story_Trigger_Zone_06") Sensor_Guards_to_New_Spot (6, mylocation, sat6guards_list) if sensor06_flagged == true then Story_Event("Sensor_6_Destroyed") --MessageBox("Sensor 06 flag should now be off") sensor06_flagged = false end end if sensor07_destroyed == true then mylocation = Find_First_Object("Story_Trigger_Zone_07") Sensor_Guards_to_New_Spot (7, mylocation, sat7guards_list) if sensor07_flagged == true then Story_Event("Sensor_7_Destroyed") --MessageBox("Sensor 07 flag should now be off") sensor07_flagged = false end end -- Play appropriate feedback message if number_of_sensors_destroyed == 1 then Story_Event("Total_1_Sensor_Destroyed") -- TEXT_STORY_EMPIRE_ACT01_MISSION_THREE_40 -- Boba Fett: That's one down. end if number_of_sensors_destroyed == 2 then Story_Event("Total_2_Sensors_Destroyed") -- TEXT_STORY_EMPIRE_ACT01_MISSION_THREE_41 -- Boba Fett: That's two. end if number_of_sensors_destroyed == 3 then Story_Event("Total_3_Sensors_Destroyed") -- TEXT_STORY_EMPIRE_ACT01_MISSION_THREE_42 -- Boba Fett: Got it! end if number_of_sensors_destroyed == 4 then Story_Event("Total_4_Sensors_Destroyed") -- TEXT_STORY_EMPIRE_ACT01_MISSION_THREE_42 -- Boba Fett: Got it! end if number_of_sensors_destroyed == 5 then Story_Event("Total_5_Sensors_Destroyed") -- TEXT_STORY_EMPIRE_ACT01_MISSION_THREE_43 -- Boba Fett: Got it, only two sensors left. end if number_of_sensors_destroyed == 6 then Story_Event("Total_6_Sensors_Destroyed") -- TEXT_STORY_EMPIRE_ACT01_MISSION_THREE_44 -- Boba Fett: Just one more sensor and the pirates will be blind. end -- steve is taking care of this last one down message elsewhere end end end function Sensor_Guards_to_New_Spot(Sensor_num, origin, unit_list) --MessageBox("guards to new spot function hit") --new_GuardSpot = Find_First_Object("Orbital_Sensor_Pod_Pirate") --new_GuardSpot = Find_Nearest(origin, "Orbital_Sensor_Pod_Pirate") new_Guard_Loc = Get_Closest_Sensor (Sensor_num) if new_Guard_Loc == 1 then new_GuardSpot = alarm1 elseif new_Guard_Loc == 2 then new_GuardSpot = alarm2 elseif new_Guard_Loc == 3 then new_GuardSpot = alarm3 elseif new_Guard_Loc == 4 then new_GuardSpot = alarm4 elseif new_Guard_Loc == 5 then new_GuardSpot = alarm5 elseif new_Guard_Loc == 6 then new_GuardSpot = alarm6 elseif new_Guard_Loc == 7 then new_GuardSpot = alarm7 elseif new_Guard_Loc == 8 then new_GuardSpot = Find_First_Object("Pirate_Asteroid_Base_Weak") end if TestValid(new_GuardSpot) then if guard_loc_1 == Sensor_num then List_Guard(sat1guards_list, new_GuardSpot) end if guard_loc_2 == Sensor_num then List_Guard(sat2guards_list, new_GuardSpot) end if guard_loc_3 == Sensor_num then List_Guard(sat3guards_list, new_GuardSpot) end if guard_loc_4 == Sensor_num then List_Guard(sat4guards_list, new_GuardSpot) end if guard_loc_5 == Sensor_num then List_Guard(sat5guards_list, new_GuardSpot) end if guard_loc_6 == Sensor_num then List_Guard(sat6guards_list, new_GuardSpot) end if guard_loc_7 == Sensor_num then List_Guard(sat7guards_list, new_GuardSpot) end else -- send them to guard the starbase new_GuardSpot = Find_First_Object("Pirate_Asteroid_Base_Weak") List_Guard(unit_list, new_GuardSpot) --MessageBox("guards to new spot STARBASE") end Guard_Management (Sensor_num, new_Guard_Loc) end function Captain_Prox(prox_obj, trigger_obj) -- The player is near the captain. Start him up prox_obj.Cancel_Event_Object_In_Range(Captain_Prox) Create_Thread("Move_Pirate_Captain") end function Get_Block_Stop() return break_patrol end function Move_patrol_group_01() -- dme 9/21/05 function to move patrol groups back and forth if TestValid(patrol_group1) then --MessageBox("Moving patrol to first patrol waypoint.") BlockOnCommand(patrol_group1.Attack_Move(patrol_01), -1, Get_Block_Stop) end if TestValid(patrol_group1) then Sleep(1) end if TestValid(patrol_group1) then --MessageBox("Moving patrol to second patrol waypoint.") BlockOnCommand(patrol_group1.Attack_Move(patrol_02), -1, Get_Block_Stop) end if TestValid(patrol_group1) then Sleep(1) end if TestValid(patrol_group1) then --MessageBox("Moving patrol to first patrol waypoint.") BlockOnCommand(patrol_group1.Attack_Move(patrol_03), -1, Get_Block_Stop) end if TestValid(patrol_group1) then Sleep(1) end if TestValid(patrol_group1) then --MessageBox("Moving patrol to second patrol waypoint.") BlockOnCommand(patrol_group1.Attack_Move(patrol_04), -1, Get_Block_Stop) end if TestValid(patrol_group1) then Sleep(1) end if TestValid(patrol_group1) then --MessageBox("Moving patrol to first patrol waypoint.") BlockOnCommand(patrol_group1.Attack_Move(patrol_05), -1, Get_Block_Stop) end if TestValid(patrol_group1) then Sleep(1) end if TestValid(patrol_group1) then --MessageBox("Moving patrol to second patrol waypoint.") BlockOnCommand(patrol_group1.Attack_Move(patrol_06), -1, Get_Block_Stop) end if TestValid(patrol_group1) then Sleep(1) end if TestValid(patrol_group1) then Create_Thread("Move_patrol_group_01") end end function Move_patrol_group_02() -- dme 9/21/05 function to move patrol groups back and forth if TestValid(patrol_group2) then --MessageBox("Moving patrol to first patrol waypoint.") BlockOnCommand(patrol_group2.Attack_Move(patrol_03), -1, Get_Block_Stop) end if TestValid(patrol_group2) then Sleep(1) end if TestValid(patrol_group2) then --MessageBox("Moving patrol to second patrol waypoint.") BlockOnCommand(patrol_group2.Attack_Move(patrol_02), -1, Get_Block_Stop) end if TestValid(patrol_group2) then Sleep(1) end if TestValid(patrol_group2) then --MessageBox("Moving patrol to first patrol waypoint.") BlockOnCommand(patrol_group2.Attack_Move(patrol_01), -1, Get_Block_Stop) end if TestValid(patrol_group2) then Sleep(1) end if TestValid(patrol_group2) then --MessageBox("Moving patrol to second patrol waypoint.") BlockOnCommand(patrol_group2.Attack_Move(patrol_06), -1, Get_Block_Stop) end if TestValid(patrol_group2) then Sleep(1) end if TestValid(patrol_group2) then --MessageBox("Moving patrol to first patrol waypoint.") BlockOnCommand(patrol_group2.Attack_Move(patrol_05), -1, Get_Block_Stop) end if TestValid(patrol_group2) then Sleep(1) end if TestValid(patrol_group2) then --MessageBox("Moving patrol to second patrol waypoint.") BlockOnCommand(patrol_group2.Attack_Move(patrol_04), -1, Get_Block_Stop) end if TestValid(patrol_group2) then Sleep(1) end if TestValid(patrol_group2) then Create_Thread("Move_patrol_group_02") end end function Move_patrol_group_03() -- dme 9/21/05 function to move patrol groups back and forth if TestValid(patrol_group3) then --MessageBox("Moving patrol to first patrol waypoint.") BlockOnCommand(patrol_group3.Attack_Move(patrol_05), -1, Get_Block_Stop) end if TestValid(patrol_group3) then Sleep(1) end if TestValid(patrol_group3) then --MessageBox("Moving patrol to second patrol waypoint.") BlockOnCommand(patrol_group3.Attack_Move(patrol_06), -1, Get_Block_Stop) end if TestValid(patrol_group3) then Sleep(1) end if TestValid(patrol_group3) then --MessageBox("Moving patrol to first patrol waypoint.") BlockOnCommand(patrol_group3.Attack_Move(patrol_01), -1, Get_Block_Stop) end if TestValid(patrol_group3) then Sleep(1) end if TestValid(patrol_group3) then --MessageBox("Moving patrol to second patrol waypoint.") BlockOnCommand(patrol_group3.Attack_Move(patrol_02), -1, Get_Block_Stop) end if TestValid(patrol_group3) then Sleep(1) end if TestValid(patrol_group3) then --MessageBox("Moving patrol to first patrol waypoint.") BlockOnCommand(patrol_group3.Attack_Move(patrol_03), -1, Get_Block_Stop) end if TestValid(patrol_group3) then Sleep(1) end if TestValid(patrol_group3) then --MessageBox("Moving patrol to second patrol waypoint.") BlockOnCommand(patrol_group3.Attack_Move(patrol_04), -1, Get_Block_Stop) end if TestValid(patrol_group3) then Sleep(1) end if TestValid(patrol_group3) then Create_Thread("Move_patrol_group_03") end end function Move_Pirate_Captain() -- Exit sequence, run away. -- This is the last chance for the player to disable the captain. -- There is no "CAPTAIN_RETREATING" notification on the first move as the player is warned when -- the captain is spawned if TestValid(captain) and not captain_disabled then --MessageBox("Moving Captain to first escape waypoint.") BlockOnCommand(captain.Move_To(retreat1)) end if TestValid(captain) and not captain_disabled then Sleep(0) end if TestValid(captain) and not captain_disabled then --Story_Event("CAPTAIN_RETREATING") end if TestValid(captain) and not captain_disabled then --MessageBox("Moving Captain to second escape waypoint.") BlockOnCommand(captain.Move_To(retreat2)) end if TestValid(captain) and not captain_disabled then Sleep(0) end if TestValid(captain) and not captain_disabled then Story_Event("CAPTAIN_RETREATING2") end if TestValid(captain) and not captain_disabled then --MessageBox("Moving Captain to third escape waypoint.") BlockOnCommand(captain.Move_To(retreat3)) end -- Pirate retreat (player loss) if TestValid(captain) and not captain_disabled then --MessageBox("Triggering retreat.") --pirates.Retreat() captain.Hyperspace_Away() Story_Event("FAILURE_CAPTAIN_RETREAT") end end function State_Empire_M03_Final_Dialog_Begin_00(message) if message == OnEnter then Lock_Controls(1) Suspend_AI(1) Fade_Screen_Out(1) Sleep(1) Letter_Box_In(0) -- Clean up the map of spawned objects for the pirate side pirate_base_list = Find_All_Objects_Of_Type("PIRATE_ASTEROID_BASE_WEAK") pirate_fighters_list = Find_All_Objects_Of_Type("Pirate_Fighter_Squadron") pirate_IPV1_list = Find_All_Objects_Of_Type("IPV1_System_Patrol_Craft") pirate_satellite_list = Find_All_Objects_Of_Type("PIRATE_DEFENSE_SATELLITE_LASER") for i,pirate_base in pairs(pirate_base_list) do pirate_base.Despawn() end for i,pirate_fighters in pairs(pirate_fighters_list) do pirate_fighters.Despawn() end for i,pirate_IPV1 in pairs(pirate_IPV1_list) do pirate_IPV1.Despawn() end for i,pirate_satellite in pairs(pirate_satellite_list) do pirate_satellite.Despawn() end --jdg querry for player units and move into cinematic formation endcine_playerunit_spot01 = Find_Hint("GENERIC_MARKER_SPACE","endcine-playerunit-spot01") endcine_playerunit_spot02 = Find_Hint("GENERIC_MARKER_SPACE","endcine-playerunit-spot02") endcine_playerunit_spot03 = Find_Hint("GENERIC_MARKER_SPACE","endcine-playerunit-spot03") player_acclamator_list = Find_All_Objects_Of_Type("ACCLAMATOR_ASSAULT_SHIP") player_broadside_list = Find_All_Objects_Of_Type("BROADSIDE_CLASS_CRUISER") player_tartan_list = Find_All_Objects_Of_Type("TARTAN_PATROL_CRUISER") flag_broadside_01_used = false flag_broadside_02_used = false flag_tartan_01_used = false flag_tartan_02_used = false slot_01_ship = nil slot_02_ship = nil slot_03_ship = nil -- if player has acclamators fill in the cinematic spots if player_acclamator_list[1] then --MessageBox("moving acclamator1 to end cine spot 01.") player_acclamator_list[1].Teleport_And_Face(endcine_playerunit_spot01) player_acclamator_list[1].Prevent_Opportunity_Fire(true) slot_01_ship = player_acclamator_list[1] flag_spot_01_filled = true end if player_acclamator_list[2] then --MessageBox("moving acclamator2 to end cine spot 02.") player_acclamator_list[2].Teleport_And_Face(endcine_playerunit_spot02) player_acclamator_list[2].Prevent_Opportunity_Fire(true) slot_02_ship = player_acclamator_list[2] flag_spot_02_filled = true end if player_acclamator_list[3] then --MessageBox("moving acclamator3 to end cine spot 03.") player_acclamator_list[3].Teleport_And_Face(endcine_playerunit_spot03) player_acclamator_list[3].Prevent_Opportunity_Fire(true) slot_03_ship = player_acclamator_list[3] flag_spot_03_filled = true end --now fill in empty spot 01 if needed if not flag_spot_01_filled then if player_broadside_list[1] then --MessageBox("moving broadside1 to end cine spot 01.") player_broadside_list[1].Teleport_And_Face(endcine_playerunit_spot01) player_broadside_list[1].Prevent_Opportunity_Fire(true) slot_01_ship = player_broadside_list[1] flag_broadside_01_used = true elseif player_tartan_list[1] then --MessageBox("moving tartan1 to end cine spot 01.") player_tartan_list[1].Teleport_And_Face(endcine_playerunit_spot01) player_tartan_list[1].Prevent_Opportunity_Fire(true) slot_01_ship = player_tartan_list[1] flag_tartan_01_used = true end end --now fill in empty spot 02 if needed if not flag_spot_02_filled then if player_broadside_list[1] and not flag_broadside_01_used then --MessageBox("moving broadside1 to end cine spot 02.") player_broadside_list[1].Teleport_And_Face(endcine_playerunit_spot02) player_broadside_list[1].Prevent_Opportunity_Fire(true) slot_02_ship = player_broadside_list[1] flag_broadside_01_used = true elseif player_broadside_list[2] then --MessageBox("moving broadside2 to end cine spot 02.") player_broadside_list[2].Teleport_And_Face(endcine_playerunit_spot02) player_broadside_list[2].Prevent_Opportunity_Fire(true) slot_02_ship = player_broadside_list[2] flag_broadside_02_used = true elseif player_tartan_list[1] and not flag_tartan_01_used then --MessageBox("moving tartan1 to end cine spot 02.") player_tartan_list[1].Teleport_And_Face(endcine_playerunit_spot02) player_tartan_list[1].Prevent_Opportunity_Fire(true) slot_02_ship = player_tartan_list[1] flag_tartan_01_used = true elseif player_tartan_list[2] then --MessageBox("moving tartan2 to end cine spot 02.") player_tartan_list[2].Teleport_And_Face(endcine_playerunit_spot02) player_tartan_list[2].Prevent_Opportunity_Fire(true) slot_02_ship = player_tartan_list[2] flag_tartan_02_used = true end end --now fill in empty spot 03 if needed if not flag_spot_03_filled then if player_broadside_list[1] and not flag_broadside_01_used then --MessageBox("moving broadside1 to end cine spot 03.") player_broadside_list[1].Teleport_And_Face(endcine_playerunit_spot03) player_broadside_list[1].Prevent_Opportunity_Fire(true) slot_03_ship = player_broadside_list[1] elseif player_broadside_list[2] and not flag_broadside_02_used then --MessageBox("moving broadside2 to end cine spot 02.") player_broadside_list[2].Teleport_And_Face(endcine_playerunit_spot03) player_broadside_list[2].Prevent_Opportunity_Fire(true) slot_03_ship = player_broadside_list[2] elseif player_broadside_list[3] then --MessageBox("moving broadside3 to end cine spot 03.") player_broadside_list[3].Teleport_And_Face(endcine_playerunit_spot03) player_broadside_list[3].Prevent_Opportunity_Fire(true) slot_03_ship = player_broadside_list[3] elseif player_tartan_list[1] and not flag_tartan_01_used then --MessageBox("moving tartan1 to end cine spot 03.") player_tartan_list[1].Teleport_And_Face(endcine_playerunit_spot03) player_tartan_list[1].Prevent_Opportunity_Fire(true) slot_03_ship = player_tartan_list[1] elseif player_tartan_list[2] and not flag_tartan_02_used then --MessageBox("moving tartan2 to end cine spot 03.") player_tartan_list[2].Teleport_And_Face(endcine_playerunit_spot03) player_tartan_list[2].Prevent_Opportunity_Fire(true) slot_03_ship = player_tartan_list[2] elseif player_tartan_list[3] then --MessageBox("moving tartan3 to end cine spot 03.") player_tartan_list[3].Teleport_And_Face(endcine_playerunit_spot03) player_tartan_list[3].Prevent_Opportunity_Fire(true) slot_03_ship = player_tartan_list[3] end end if TestValid(captain) then Hide_Object(captain, 1) -- captain.Despawn() end -- Teleport or spawn units to the final cinematic setting if TestValid(slot_01_ship) then slot_01_ship.In_End_Cinematic(true) end if TestValid(slot_02_ship) then slot_02_ship.In_End_Cinematic(true) end if TestValid(slot_03_ship) then slot_03_ship.In_End_Cinematic(true) end if TestValid(fett) then fett.In_End_Cinematic(true) end Do_End_Cinematic_Cleanup() if TestValid(slot_01_ship) then slot_01_ship.Teleport_And_Face(endcine_playerunit_spot01) end if TestValid(slot_02_ship) then slot_02_ship.Teleport_And_Face(endcine_playerunit_spot02) end if TestValid(slot_03_ship) then slot_03_ship.Teleport_And_Face(endcine_playerunit_spot03) end if TestValid(fett) then fett.Prevent_AI_Usage(true) fett.Teleport(cinematic_fett_start) fett.Face_Immediate(cinematic_fett_end) fett.Prevent_Opportunity_Fire(true) end captain_list_cinematic = SpawnList(pirate_captain_type, captainspawn, pirates, false, true) cinematic_captain = captain_list_cinematic[1] cinematic_captain.Prevent_AI_Usage(true) cinematic_captain.Teleport(cinematic_pirate_start) cinematic_captain.Face_Immediate(cinematic_pirate_end) cinematic_captain.Move_To(cinematic_pirate_end) cinematic_captain.Make_Invulnerable(true) cinematic_captain.Prevent_Opportunity_Fire(true) Start_Cinematic_Camera() -- Set_Cinematic_Camera_Key(target_pos, x_dist, y_pitch, z_yaw, euler, pobj, use_object_rotation, cinematic_animation) Set_Cinematic_Camera_Key(cinematic_pirate_end, 200, -45, 210, 1, 0, 0, 0) Set_Cinematic_Target_Key(cinematic_pirate_end, 0, 0, -105, 0, 0, 0, 0) Transition_Cinematic_Camera_Key(cinematic_pirate_end, 15, 400, 10, 240, 1, 0, 0, 0) Transition_Cinematic_Target_Key(cinematic_pirate_end, 15, 0, 0, 0, 0, 0, 0, 0) Fade_Screen_In(1) Sleep(2) fett.Move_To(cinematic_fett_end) Sleep(2) Story_Event("M2_END_DIALOGUE_GO") end end function State_Empire_A01M03_Final_Fett_TEXT(message) if message == OnEnter then end end function State_Empire_A01M03_Final_Fett_END(message) if message == OnEnter then -- MessageBox("M2_END_DIALOGUE_2_GO.") Story_Event("M2_END_DIALOGUE_2_GO") end end function State_Empire_A01M03_Final_Officer_TEXT(message) if message == OnEnter then end end function State_Empire_A01M03_Final_Officer_END(message) if message == OnEnter then Sleep(1) Story_Event("M2_END_DIALOGUE_3_GO") Lock_Controls(0) Suspend_AI(0) Sleep(2) Fade_Screen_Out(1) Sleep(1) End_Cinematic_Camera() -- MessageBox("M2_END_DIALOGUE_3_GO.") end end -- Here is an opportunity for updates outside of an event function Story_Mode_Service() if initial_units_spawned then if alarm_active or flag_fett_successful then -- Set the captain as disabled, if sufficiently damaged. -- Once this happens, one component of victory conditions are met. if TestValid(captain) then if not captain_disabled then if not captain_found then if captain.Get_Hull() < 0.99 then -- Story_Event("CAPTAIN_FOUND") captain_found = true end elseif flag_fett_successful and captain.Get_Hull() < 0.5 then --MessageBox("Captain disabled.") captain.Make_Invulnerable(true) captain_disabled = true if TestValid(fett) then fett.Make_Invulnerable(true) end captain.Prevent_AI_Usage(true) captain.Move_To(captain) Story_Event("CAPTAIN_DISABLED") elseif not flag_fett_successful and captain.Get_Hull() < 0.1 then --MessageBox("Captain disabled.") captain.Make_Invulnerable(true) captain_disabled = true if TestValid(fett) then fett.Make_Invulnerable(true) end captain.Prevent_AI_Usage(true) captain.Move_To(captain) Story_Event("CAPTAIN_DISABLED") -- ScriptExit() end end else -- MessageBox("error, unexpected condition: captain killed") end end if not TestValid(pirate_base) then if not flag_pirate_base_dead then --MessageBox("LUA pirate base dead") flag_pirate_base_dead = true -- Spawn the pirate captain and don't let the AI control him captain_list = SpawnList(pirate_captain_type, captainspawn, pirates, false, true) captain = captain_list[1] captain.Set_Cannot_Be_Killed(true) break_patrol = true alarm_active = true Story_Event("FLAG_THE_LEADER") Story_Event("PIRATE_CAPTAIN_SPAWNS") fog_id2 = FogOfWar.Reveal_All(empire) --Story_Event("ENABLE_REINFORCEMENTS") -- reinforce extra pirates, and trigger early captain's retreat. if TestValid(captain)then --MessageBox("Reinforcing at Captain.") cap_guards = SpawnList(pirate_type_list2, captain, pirates, false, true, false, Extra_Pirates_Callback) Create_Thread("Extra_Pirates_Callback", cap_guards) Create_Thread("Move_Pirate_Captain") captain.Override_Max_Speed(2) end end end --this okays the captain to spawn when the pirate base is destroyed if TestValid(pirate_base) then if (pirate_base.Get_Shield() < .99) and not flag_pirate_base_dead and not flag_hardpoint_speech_given then Story_Event("FETT_TALKS_ABOUT_HARDPOINTS") flag_hardpoint_speech_given = true pirate_base.Prevent_All_Fire(false) end end -- Let the player know if all of the sensors are down if not alarm_active and not sensors_down and not TestValid(alarm1) and not TestValid(alarm2) and not TestValid(alarm3) and not TestValid(alarm4) and not TestValid(alarm5) and not TestValid(alarm6) and not TestValid(alarm7) then sensors_down = true -- MessageBox("Sensors down message here.") Story_Event("ALL_SENSORS_DOWN") fog_id2 = FogOfWar.Reveal_All(empire) --Story_Event("ENABLE_REINFORCEMENTS") flag_fett_successful = true --MessageBox("fett flag should now be changed") end end end