Files
SoaFE/DATA/SCRIPTS/STORY/STORY_EMPIRE_ACTI_M03_SPACE.LUA
2026-02-28 14:00:45 -06:00

1785 lines
53 KiB
Lua

-- $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