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

896 lines
30 KiB
Lua

-- $Id: //depot/Projects/StarWars_Steam/FOC/Run/Data/Scripts/Story/Story_Rebel_ActIII_M07_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_Rebel_ActIII_M07_SPACE.lua $
--
-- Original Author: Eric_Yiskis
--
-- $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 =
{
Rebel_A3_M07_Begin = State_Rebel_A3_M07_Begin,
Rebel_ActIII_Mission_Seven_Intro_Cinematic_00a = State_Rebel_ActIII_Mission_Seven_Intro_Cinematic_00a,
Rebel_ActIII_Mission_Seven_Intro_Cinematic_01a = State_Rebel_ActIII_Mission_Seven_Intro_Cinematic_01a,
Rebel_ActIII_Mission_Seven_Intro_Cinematic_02a = State_Rebel_ActIII_Mission_Seven_Intro_Cinematic_02a,
Rebel_ActIII_Mission_Seven_Intro_Cinematic_03a = State_Rebel_ActIII_Mission_Seven_Intro_Cinematic_03a,
Rebel_ActIII_Mission_Seven_Intro_Cinematic_04a = State_Rebel_ActIII_Mission_Seven_Intro_Cinematic_04a,
Rebel_ActIII_Mission_Seven_Intro_Cinematic_05a = State_Rebel_ActIII_Mission_Seven_Intro_Cinematic_05a,
Rebel_ActIII_Mission_Seven_Intro_Cinematic_06a = State_Rebel_ActIII_Mission_Seven_Intro_Cinematic_06a,
Rebel_A3_M07_Victory_Trigger = State_Rebel_A3_M07_Victory_Trigger
}
-- These patrol markers form a ring around the level
patrol_marker_names = {
"waypoint1",
"waypoint2",
"waypoint3",
"waypoint4",
"waypoint5",
"waypoint6",
"waypoint7",
"waypoint8"
}
patrol_marker_count = 8
patrol_markers = {}
interdictor_marker_names = {
"waypoint2",
"waypoint4",
"waypoint6",
"waypoint8"
}
-- Note: this list is parallel with the marker_names, it matches a marker with an index into the waypoints
interdictor_destination_index = {
3,
5,
7,
1
}
pirate_spawn_list = {
"Pirate_Frigate_Captain"
}
pirate_under_attack = false
init_done = false
pirate_fleeing = false
pirate_disabled = false
pirate_captured = false
interdictor_list = {}
pirate_flee_range = 600
capture_range = 250
hull_considered_disabled = 0.5 -- when the pirate drops below this fraction hull, it's considered disabled.
player_informed = false
flag_interdictors_flagged = false
end
------------------------------------------------------------------------------------------------------------------------
-- State_Rebel_A3_M07_Begin -- Get the mission started
------------------------------------------------------------------------------------------------------------------------
function State_Rebel_A3_M07_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)
Suspend_AI(1)
--MessageBox("OnEnter State_Rebel_A3_M07_Begin")
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-- Get Players
empire = Find_Player("Empire")
rebel = Find_Player("Rebel")
pirates = Find_Player("Pirates")
neutral = Find_Player("Neutral")
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-- Find Antilles as he has to be on the mission
antilles = Find_First_Object("SUNDERED_HEART")
if not TestValid(antilles) then
--MessageBox("Missing Captain Antilles")
end
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-- Find the marker where the rebel ships will enter
attacker_entry_pos = Find_Hint("GENERIC_MARKER_SPACE", "cinematichyperspacepos")
if not TestValid(attacker_entry_pos) then
--MessageBox("Missing Attacker Entry Position")
end
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-- Find the Imperial hyperspace in point
empire_entry_pos = Find_Hint("GENERIC_MARKER_SPACE", "emphyperspacein")
if not TestValid(empire_entry_pos) then
--MessageBox("Missing Empire Entry Position")
end
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-- Find the Imperial Fleet so we can Hyperspace them in
star_destroyer = Find_Hint("STAR_DESTROYER")
if not TestValid(star_destroyer) then
--MessageBox("Missing Imperial Star Destroyer")
end
star_destroyer.Hide(true)
star_destroyer.Suspend_Locomotor(true)
tartan_cruiser_1 = Find_Hint("Tartan_Patrol_Cruiser", "emptartan1")
if not TestValid(tartan_cruiser_1) then
--MessageBox("Missing Tartan Cruiser 1")
end
tartan_cruiser_1.Hide(true)
tartan_cruiser_1.Suspend_Locomotor(true)
tartan_cruiser_2 = Find_Hint("Tartan_Patrol_Cruiser", "emptartan2")
if not TestValid(tartan_cruiser_2) then
--MessageBox("Missing Tartan Cruiser 2")
end
tartan_cruiser_2.Hide(true)
tartan_cruiser_2.Suspend_Locomotor(true)
--tartan_cruiser_3 = Find_Hint("Tartan_Patrol_Cruiser", "emptartan3")
--if not TestValid(tartan_cruiser_3) then
--MessageBox("Missing Tartan Cruiser 3")
--end
--tartan_cruiser_3.Hide(true)
--tartan_cruiser_3.Suspend_Locomotor(true)
victory_destroyer_1 = Find_Hint("VICTORY_DESTROYER", "empvictory1")
if not TestValid(victory_destroyer_1) then
--MessageBox("Missing Victory Destroyer 1")
end
victory_destroyer_1.Hide(true)
victory_destroyer_1.Suspend_Locomotor(true)
victory_destroyer_2 = Find_Hint("VICTORY_DESTROYER", "empvictory2")
if not TestValid(victory_destroyer_2) then
--MessageBox("Missing Victory Destroyer 2")
end
victory_destroyer_2.Hide(true)
victory_destroyer_2.Suspend_Locomotor(true)
interdictor_1 = Find_Hint("INTERDICTOR_CRUISER", "empinterdictor1")
if not TestValid(interdictor_1) then
--MessageBox("Missing Interdictor 1")
end
interdictor_1.Hide(true)
interdictor_1.Suspend_Locomotor(true)
interdictor_2 = Find_Hint("INTERDICTOR_CRUISER", "empinterdictor2")
if not TestValid(interdictor_2) then
--MessageBox("Missing Interdictor 2")
end
interdictor_2.Hide(true)
interdictor_2.Suspend_Locomotor(true)
interdictor_3 = Find_Hint("INTERDICTOR_CRUISER", "empinterdictor3")
if not TestValid(interdictor_3) then
--MessageBox("Missing Interdictor 3")
end
interdictor_3.Hide(true)
interdictor_3.Suspend_Locomotor(true)
interdictor_4 = Find_Hint("INTERDICTOR_CRUISER", "empinterdictor4")
if not TestValid(interdictor_4) then
--MessageBox("Missing Interdictor 4")
end
interdictor_4.Hide(true)
interdictor_4.Suspend_Locomotor(true)
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-- Find all the patrol markers (waypoints)
for i,name in pairs(patrol_marker_names) do
marker = Find_Hint("GENERIC_MARKER_SPACE", name)
if not marker then
--MessageBox("Missing patrol marker %s",name)
end
table.insert(patrol_markers,marker)
end
--MessageBox("Done finding patrol markers")
pirate_path_01 = Find_Hint("GENERIC_MARKER_SPACE", "pirate-patrol-1")
pirate_path_02 = Find_Hint("GENERIC_MARKER_SPACE", "pirate-patrol-2")
pirate_path_03 = Find_Hint("GENERIC_MARKER_SPACE", "pirate-patrol-3")
pirate_path_04 = Find_Hint("GENERIC_MARKER_SPACE", "pirate-patrol-4")
pirate_path_05 = Find_Hint("GENERIC_MARKER_SPACE", "pirate-patrol-5")
pirate_path_06 = Find_Hint("GENERIC_MARKER_SPACE", "pirate-patrol-6")
pirate_path_07 = Find_Hint("GENERIC_MARKER_SPACE", "pirate-patrol-7")
pirate_path_08 = Find_Hint("GENERIC_MARKER_SPACE", "pirate-patrol-8")
pirate_path_09 = Find_Hint("GENERIC_MARKER_SPACE", "pirate-patrol-9")
pirate_path_10 = Find_Hint("GENERIC_MARKER_SPACE", "pirate-patrol-10")
prox_range = 200
Register_Prox(pirate_path_01, Prox_Waypoint, prox_range, pirates)
Register_Prox(pirate_path_02, Prox_Waypoint, prox_range, pirates)
Register_Prox(pirate_path_03, Prox_Waypoint, prox_range, pirates)
Register_Prox(pirate_path_04, Prox_Waypoint, prox_range, pirates)
Register_Prox(pirate_path_05, Prox_Waypoint, prox_range, pirates)
Register_Prox(pirate_path_06, Prox_Waypoint, prox_range, pirates)
Register_Prox(pirate_path_07, Prox_Waypoint, prox_range, pirates)
Register_Prox(pirate_path_08, Prox_Waypoint, prox_range, pirates)
Register_Prox(pirate_path_09, Prox_Waypoint, prox_range, pirates)
Register_Prox(pirate_path_10, Prox_Waypoint, prox_range, pirates)
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-- Find the interdictors
-- for i,name in pairs(interdictor_marker_names) do
-- marker = Find_Hint("GENERIC_MARKER_SPACE", name)
-- interdictor = Find_Nearest(marker, "INTERDICTOR_CRUISER")
-- if not interdictor or not marker then
-- MessageBox("Missing something finding interdictor near %s",name)
-- else
--MessageBox("Sending interdictor at %s to waypoint %d",name,interdictor_destination_index[i])
-- Since we already know the interdictors and we are hyperspacing them in with the fleet
-- just set the table for now and we will let them patrol after the intro cinematic is finished
interdictor_list[interdictor_1] = interdictor_destination_index[1]
interdictor_list[interdictor_2] = interdictor_destination_index[2]
interdictor_list[interdictor_3] = interdictor_destination_index[3]
interdictor_list[interdictor_4] = interdictor_destination_index[4]
--Create_Thread("Loop_Waypoints", interdictor)
-- end
-- end
--MessageBox("Done finding interdictors")
-- Spawn the pirate
pirate_marker = Find_Hint("GENERIC_MARKER_SPACE", "pirate")
pirate_move_to_marker = Find_Hint("GENERIC_MARKER_SPACE", "piratemoveto")
pirate_move_to_empire_marker = Find_Hint("GENERIC_MARKER_SPACE", "piratemovetoemp")
new_units = SpawnList(pirate_spawn_list, pirate_marker, pirates, false, true)
pirate_ship = new_units[1]
--pirate_ship = Find_Hint ("PIRATE_FRIGATE_CAPTAIN","pirate-ship")
if not pirate_ship then
MessageBox("Couldn't create pirate ship ... aborting!")
return
end
pirate_ship.Face_Immediate(pirate_move_to_marker)
pirate_ship.Set_Cannot_Be_Killed(true)
pirate_ship.Prevent_Opportunity_Fire(true)
pirate_ship.Prevent_AI_Usage(true)
pirate_ship.Make_Invulnerable(true)
pirate_ship.Move_To(pirate_move_to_marker)
interdictor_already_attacked = false
init_done = true
-- Do the cinematic intro
Cinematic_Intro_Thread_ID = Create_Thread("Cinematic_Intro")
end
end
-- **********************************************--
-- ****Mission is over, trigger end cinematic****--
-- **********************************************--
function State_Rebel_A3_M07_Victory_Trigger(message)
if message == OnEnter then
Create_Thread("Ending_Cinematic")
end
end
------------------------------------------------------------------------------------------------------------------------
-- ******************************************** CINEMATIC SEQUENCES ****************************************************
------------------------------------------------------------------------------------------------------------------------
-- This cinematic establishes the rebel forces and establishes the presence of Antilles befoe the dialog begins
function Cinematic_Intro()
-- Set up the start tactical camera position
Point_Camera_At(attacker_entry_pos)
-- Suspend relevent systems while cinematic plays
Suspend_AI(1)
Lock_Controls(1)
-- Set up cinematic stroy mode
Start_Cinematic_Camera()
Letter_Box_In(0)
-- Set intial camera and target positions
-- As we do not know where in the feet formation Anitlles will be, base the camera and target positions off of his ship
-- The entry marker has a z angle that is opposite of 45 degrees on this map
if TestValid(antilles) then
Set_Cinematic_Camera_Key(antilles, 10800, -.2, 47, 1, 0, 0, 0)
Set_Cinematic_Target_Key(antilles, 10100, 0, 45, 1, 1, 0, 0)
end
-- Fade the scene in and wait for the scene to be fully visisble before proceeding
Fade_Screen_In(2)
Sleep(2)
-- Tell the ships we put on hold in XML to come in
Resume_Hyperspace_In()
-- Wait on the current shot a bit
Sleep(3.5)
-- Start hyperspacing in the imperial fleet
if TestValid(star_destroyer) then
--star_destroyer.Cinematic_Hyperspace_In(220)
star_destroyer.Cinematic_Hyperspace_In(160)
end
if TestValid(tartan_cruiser_1) then
--tartan_cruiser_1.Cinematic_Hyperspace_In(232)
tartan_cruiser_1.Cinematic_Hyperspace_In(172)
end
if TestValid(tartan_cruiser_2) then
--tartan_cruiser_2.Cinematic_Hyperspace_In(245)
tartan_cruiser_2.Cinematic_Hyperspace_In(185)
end
--if TestValid(tartan_cruiser_3) then
--tartan_cruiser_3.Cinematic_Hyperspace_In(263)
--tartan_cruiser_3.Cinematic_Hyperspace_In(203)
--end
if TestValid(victory_destroyer_1) then
--victory_destroyer_1.Cinematic_Hyperspace_In(238)
victory_destroyer_1.Cinematic_Hyperspace_In(178)
end
if TestValid(victory_destroyer_2) then
--victory_destroyer_2.Cinematic_Hyperspace_In(258)
victory_destroyer_2.Cinematic_Hyperspace_In(198)
end
if TestValid(interdictor_1) then
--interdictor_1.Cinematic_Hyperspace_In(252)
interdictor_1.Cinematic_Hyperspace_In(192)
--interdictor_1.Stop()
interdictor_1.Suspend_Locomotor(true)
end
if TestValid(interdictor_2) then
--interdictor_2.Cinematic_Hyperspace_In(270)
interdictor_2.Cinematic_Hyperspace_In(210)
--interdictor_2.Stop()
interdictor_2.Suspend_Locomotor(true)
end
if TestValid(interdictor_3) then
--interdictor_3.Cinematic_Hyperspace_In(240)
interdictor_3.Cinematic_Hyperspace_In(180)
--interdictor_3.Stop()
interdictor_3.Suspend_Locomotor(true)
end
if TestValid(interdictor_4) then
--interdictor_4.Cinematic_Hyperspace_In(226)
interdictor_4.Cinematic_Hyperspace_In(166)
--interdictor_4.Stop()
interdictor_4.Suspend_Locomotor(true)
end
-- Switch to a different shot
if TestValid(antilles) then
Set_Cinematic_Camera_Key(antilles, 255, -15, 160, 1, antilles, 1, 0)
Set_Cinematic_Target_Key(empire_entry_pos, 0, 0, 0, 0, 0, 0, 0)
end
-- Antilles dialogue is okay to start
Story_Event("RA3M7_ANTILLES_DIALOGUE_1_GO")
end
-- ------------------------------------------------------------------------------------------------------------------------
-- This cinematic establishes the Imperial forces on the map prior to Antilles "Looks like I spoke too soon"
function Cinematic_Imperial_Establishing()
Sleep(2)
Cinematic_Zoom(2, .02)
Story_Event("RA3M7_ANTILLES_DIALOGUE_2_GO")
Sleep(5)
end
-- ------------------------------------------------------------------------------------------------------------------------
-- This cinematic establishes the Imperial forces on the map prior to Antilles "Looks like I spoke too soon"
function Cinematic_Imperial_Dialogue_1()
-- We need a shot of the star destroyer here
Sleep(1.5)
Set_Cinematic_Camera_Key(star_destroyer, 400, -15, 170, 1, star_destroyer, 1, 0)
Set_Cinematic_Target_Key(antilles, 0, 0, 0, 0, 0, 0, 0)
Cinematic_Zoom(10, .99)
pirate_ship.Move_To(pirate_move_to_empire_marker)
Sleep(1)
Story_Event("RA3M7_IMPERIAL_DIALOGUE_1_GO")
end
-- ------------------------------------------------------------------------------------------------------------------------
-- This cinematic establishes the pirate moving toward the Imperial forces
function Cinematic_Pirate_To_Empire()
Sleep(1)
Set_Cinematic_Camera_Key(star_destroyer, -200, 50, 35, 0, pirate_ship, 0, 0)
Set_Cinematic_Target_Key(star_destroyer, 0, 0, 0, 0, 0, 0, 0)
Story_Event("RA3M7_ANTILLES_DIALOGUE_3_GO")
end
-- ------------------------------------------------------------------------------------------------------------------------
-- This cinematic holds the existing shot while the empire threatens the pirate
function Cinematic_Empire_Threatens_Pirate()
Sleep(1)
Set_Cinematic_Camera_Key(star_destroyer, 400, -15, 170, 1, star_destroyer, 1, 0)
Set_Cinematic_Target_Key(pirate_ship, 0, 0, 0, 0, pirate_ship, 0, 0)
Story_Event("RA3M7_IMPERIAL_DIALOGUE_2_GO")
Sleep(4)
Set_Cinematic_Camera_Key(star_destroyer, -200, 50, 35, 0, pirate_ship, 0, 0)
Set_Cinematic_Target_Key(star_destroyer, 0, 0, 0, 0, 0, 0, 0)
end
-- ------------------------------------------------------------------------------------------------------------------------
-- This cinematic shows the pirate fleeing after being threatened by the empire
function Cinematic_Pirate_Retreats()
Set_Cinematic_Camera_Key(star_destroyer, 400, 10, 170, 1, star_destroyer, 1, 0)
Set_Cinematic_Target_Key(pirate_ship, 0, 0, 0, 0, pirate_ship, 0, 0)
--Create_Thread("Thread_Pirate_Escape_Patrol")
--pirate_ship.Move_To(pirate_move_to_marker)
pirate_ship.Move_To(pirate_path_01)
Sleep(6)
Story_Event("RA3M7_IMPERIAL_DIALOGUE_3_GO")
Sleep(.5)
end
-- ------------------------------------------------------------------------------------------------------------------------
-- The race is on to destroy the pirate
function Cinematic_Attack_Pirate()
pirate_ship.Prevent_Opportunity_Fire(false)
star_destroyer.Attack_Move(pirate_ship)
victory_destroyer_1.Attack_Move(pirate_ship)
victory_destroyer_2.Attack_Move(pirate_ship)
tartan_cruiser_1.Attack_Move(pirate_ship)
tartan_cruiser_2.Attack_Move(pirate_ship)
--tartan_cruiser_3.Attack_Move(pirate_ship)
Sleep(6)
Set_Cinematic_Camera_Key(antilles, 550, 15, 180, 1, antilles, 1, 0)
Set_Cinematic_Target_Key(antilles, 200, 0, 0, 0, antilles, 1, 0)
Cinematic_Zoom(10, .9)
Story_Event("RA3M7_ANTILLES_DIALOGUE_4_GO")
end
-- ------------------------------------------------------------------------------------------------------------------------
-- End the intro cinematic
function Cinematic_Intro_End()
Sleep(1)
Point_Camera_At(antilles)
Transition_To_Tactical_Camera(1)
Letter_Box_Out(1)
Sleep(1)
for interdictor, index in pairs(interdictor_list) do
--Register_Attacked_Event(interdictor, Interdictor_Attacked_Callback)
--preventing auto-fire on interdictors and making interdictors actually interdict
interdictor.Prevent_AI_Usage(true)
interdictor.Prevent_Opportunity_Fire(true)
interdictor.Activate_Ability("INTERDICT", true)
end
pirate_ship.Override_Max_Speed(3)
pirate_ship.Set_Cannot_Be_Killed(true)
pirate_ship.Make_Invulnerable(false)
--Register_Attacked_Event(pirate_ship, Pirate_Attacked_Callback)
--Register_Prox(pirate_ship, Pirate_Prox, pirate_flee_range, rebel)
End_Cinematic_Camera()
Suspend_AI(0)
Lock_Controls(0)
end
------------------------------------------------------------------------------------------------------------------------
-- Interdictor_Attacked_Callback - respond to falling under attack or cooling off from being attacked
------------------------------------------------------------------------------------------------------------------------
function Interdictor_Attacked_Callback(fell_under_attack, most_deadly_enemy)
-- We only care about the first time an interdictor is attacked
if not interdictor_already_attacked and fell_under_attack and most_deadly_enemy == pirate_ship then
interdictor_already_attacked = true
Story_Event("interdictor_attacked")
end
if interdictor_already_attacked then
Cancel_Attacked_Event(fell_under_attack)
end
end
------------------------------------------------------------------------------------------------------------------------
-- Disable_Pirate
------------------------------------------------------------------------------------------------------------------------
function Disable_Pirate()
--MessageBox("Pirate Disabled!")
pirate_disabled = true
Cancel_Attacked_Event(pirate_ship)
pirate_ship.Move_To(pirate_ship.Get_Position())
pirate_ship.Lock_Current_Orders()
pirate_ship.Make_Invulnerable(true)
pirate_ship.Prevent_Opportunity_Fire(true)
Story_Event("PIRATE_DISABLED")
Register_Prox(pirate_ship,Prox_Rebel_Capture,capture_range,rebel)
end
------------------------------------------------------------------------------------------------------------------------
-- Despawn_Pirate()
------------------------------------------------------------------------------------------------------------------------
function Despawn_Pirate()
pirate_ship.Cancel_Event_Object_In_Range(Prox_Rebel_Capture)
--pirate_ship.Cancel_Event_Object_In_Range(Prox_Empire_Capture)
--pirate_ship.Despawn()
--making the pirate "killable" again
pirate_ship.Make_Invulnerable(false)
pirate_ship.Set_Cannot_Be_Killed(false)
pirate_ship = nil
end
------------------------------------------------------------------------------------------------------------------------
-- Prox_Rebel_Capture - One of the rebels captured the pirate
------------------------------------------------------------------------------------------------------------------------
function Prox_Rebel_Capture(prox_obj, trigger_obj)
if not pirate_disabled then
return
end
if trigger_obj.Is_Category("Fighter") or trigger_obj.Is_Category("Bomber") then
return
end
--MessageBox("Rebels captured the pirate")
Despawn_Pirate()
Story_Event("REBELS_CAPTURED_PIRATE")
pirate_captured = true
if one_left == true then
Story_Event("REBELS_CAPTURED_PIRATE_SI") -- Still interdictors
else
Story_Event("REBELS_CAPTURED_PIRATE_NI") -- No interdictors
end
end
------------------------------------------------------------------------------------------------------------------------
-- Story_Mode_Service() - gets serviced each frame
------------------------------------------------------------------------------------------------------------------------
-- Here is an opportunity for updates outside of an event
function Story_Mode_Service()
if not init_done then
return
end
if TestValid(pirate_ship) and not pirate_disabled then
-- If the pirate ship takes too much damage, then disable it.
if pirate_ship.Get_Hull() < hull_considered_disabled then
Disable_Pirate()
end
end
-- if interdictor receives hull damage, let the AI take over
one_left = false
remainder = 0
for unit,i in pairs(interdictor_list) do
if TestValid(unit) then
one_left = true
remainder = remainder + 1
else
--MessageBox("Interdictor destroyed, if they all go, the pirate will get away.")
interdictor_list[unit] = nil
end
end
if not one_left then
if not pirate_disabled then
--MessageBox("YOU LOSE: All of the interdictors are gone and we haven't disabled the pirate, so he's fleeing.")
pirate_ship.Hyperspace_Away()
Story_Event("PIRATE_ESCAPED")
ScriptExit()
else
Story_Event("INTERDICTORS_DESTROYED")
end
elseif not player_informed and remainder == 1 then
-- Tell the player that there's only one left
player_informed = true
if pirate_captured then
Story_Event("one_left_captured")
else
Story_Event("one_left_not_captured")
end
end
end
-- Cinematic triggers
-- Antilles first speaks "Looks like we beat the imperial fleet..." or similar
function State_Rebel_ActIII_Mission_Seven_Intro_Cinematic_00a(message)
if message == OnEnter then
Cinematic_Imperial_Establishing_Thread_ID = Create_Thread("Cinematic_Imperial_Establishing")
end
end
function State_Rebel_ActIII_Mission_Seven_Intro_Cinematic_01a(message)
if message == OnEnter then
Cinematic_Imperial_Dialogue_1_Thread_ID = Create_Thread("Cinematic_Imperial_Dialogue_1")
end
end
function State_Rebel_ActIII_Mission_Seven_Intro_Cinematic_02a(message)
if message == OnEnter then
Cinematic_Pirate_To_Empire_Thread_ID = Create_Thread("Cinematic_Pirate_To_Empire")
end
end
function State_Rebel_ActIII_Mission_Seven_Intro_Cinematic_03a(message)
if message == OnEnter then
Cinematic_Empire_Threatens_Pirate_Thread_ID = Create_Thread("Cinematic_Empire_Threatens_Pirate")
end
end
function State_Rebel_ActIII_Mission_Seven_Intro_Cinematic_04a(message)
if message == OnEnter then
Cinematic_Pirate_Retreats_Thread_ID = Create_Thread("Cinematic_Pirate_Retreats")
end
end
function State_Rebel_ActIII_Mission_Seven_Intro_Cinematic_05a(message)
if message == OnEnter then
Cinematic_Attack_Pirate_Thread_ID = Create_Thread("Cinematic_Attack_Pirate")
end
end
function State_Rebel_ActIII_Mission_Seven_Intro_Cinematic_06a(message)
if message == OnEnter then
Cinematic_Intro_End_Thread_ID = Create_Thread("Cinematic_Intro_End")
end
end
-- prox events to keep pirate on the move
function Prox_Waypoint(prox_obj, trigger_obj)
if trigger_obj == pirate_ship and not pirate_disabled then
--MessageBox("Prox_Waypoint hit")
if prox_obj == pirate_path_01 then
--MessageBox("pirate to pirate_path_02")
trigger_obj.Move_To(pirate_path_02)
end
if prox_obj == pirate_path_02 then
--MessageBox("pirate to pirate_path_03")
trigger_obj.Move_To(pirate_path_03)
if not flag_interdictors_flagged then
flag_interdictors_flagged = true
for interdictor, index in pairs(interdictor_list) do
Register_Attacked_Event(interdictor, Interdictor_Attacked_Callback)
interdictor.Prevent_Opportunity_Fire(false)
end
end
end
if prox_obj == pirate_path_03 then
trigger_obj.Move_To(pirate_path_04)
end
if prox_obj == pirate_path_04 then
trigger_obj.Move_To(pirate_path_05)
end
if prox_obj == pirate_path_05 then
trigger_obj.Move_To(pirate_path_06)
end
if prox_obj == pirate_path_06 then
pirate_ship.Override_Max_Speed(1)
trigger_obj.Move_To(pirate_path_07)
end
if prox_obj == pirate_path_07 then
pirate_ship.Override_Max_Speed(2)
trigger_obj.Move_To(pirate_path_08)
end
if prox_obj == pirate_path_08 then
trigger_obj.Move_To(pirate_path_09)
end
if prox_obj == pirate_path_09 then
trigger_obj.Move_To(pirate_path_10)
end
if prox_obj == pirate_path_10 then
trigger_obj.Move_To(pirate_path_01)
end
end
end
------------------------------------------------------------------------------------------------------------------------
-- dme Ending Cinematic stuff
------------------------------------------------------------------------------------------------------------------------
function Ending_Cinematic()
Story_Event("DISABLE_ANTILLES_KILLED")
Fade_Screen_Out(.5)
Suspend_AI(1)
Lock_Controls(1)
Letter_Box_In(0)
-- Ensure Antilles is still present for this cinematic
sundered_heart = Find_First_Object("SUNDERED_HEART")
if not sundered_heart then
return
end
warp_loc = Find_Hint("GENERIC_MARKER_SPACE", "warploc")
Start_Cinematic_Camera()
Fade_Screen_In(2)
-- Set_Cinematic_Camera_Key(target_pos, xoffset_dist, yoffset_pitch, zoffset_yaw, angles?, attach_object, use_object_rotation, cinematic_animation)
Set_Cinematic_Camera_Key(warp_loc, 1000, -10, -90, 1, 0, 1, 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(warp_loc, -50, 0, 0, 0, 0, 0, 0)
-- Transition_Cinematic_Camera_Key(target_pos, time, xoffset_dist, yoffset_pitch, zoffset_yaw, angles?, attach_object, use_object_rotation, cinematic_animation)
Transition_Cinematic_Camera_Key(warp_loc, 5, 200, 2.5, -37.5, 1, 0, 1, 0)
Transition_Cinematic_Camera_Key(warp_loc, 5, 200, 17, 15, 1, 0, 1, 0)
rebel = Find_Player("Rebel")
Start_Cinematic_Space_Retreat(rebel.Get_ID(), 8)
Sleep(4)
End_Cinematic_Camera()
Story_Event("MISSION_07_VICTORY")
end