417 lines
14 KiB
Lua
417 lines
14 KiB
Lua
-- $Id: //depot/Projects/StarWars/Run/Data/Scripts/Story/Story_Rebel_ActIII_M07A_SPACE.lua#9 $
|
|
--/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
--
|
|
-- (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/Run/Data/Scripts/Story/Story_Rebel_ActIII_M07A_SPACE.lua $
|
|
--
|
|
-- Original Author: Eric_Yiskis
|
|
--
|
|
-- $Author: Joseph_Gernert $
|
|
--
|
|
-- $Change: 30437 $
|
|
--
|
|
-- $DateTime: 2005/10/28 11:13:55 $
|
|
--
|
|
-- $Revision: #9 $
|
|
--
|
|
--/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
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_M07A_Begin = State_Rebel_A3_M07A_Begin
|
|
,Rebel_A3_M07A_Intro_HANSOLO_DIALOG_Remove_Text = State_Intro_HANSOLO_DIALOG_Remove_Text
|
|
}
|
|
|
|
player_notified = false
|
|
init_done = false
|
|
tractor_beam_timer_active = false
|
|
falcon_near_death = 0.3
|
|
unit_list = {}
|
|
|
|
end_cine_falcon = {
|
|
"MOV_Millenium_Falcon" }
|
|
|
|
flag_falcon_captured = false
|
|
flag_player_won = false
|
|
flag_engines_offline = false
|
|
|
|
end
|
|
|
|
------------------------------------------------------------------------------------------------------------------------
|
|
-- State_Rebel_A3_M07A_Begin -- Get the mission started
|
|
------------------------------------------------------------------------------------------------------------------------
|
|
|
|
function State_Rebel_A3_M07A_Begin(message)
|
|
if message == OnEnter then
|
|
|
|
--MessageBox("OnEnter State_Rebel_A3_M07A_Begin")
|
|
|
|
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
|
|
-- Get Players
|
|
empire = Find_Player("Empire")
|
|
rebel = Find_Player("Rebel")
|
|
bothan = Find_Player("Bothan") --SoaFE: Need to force the falcon as bothan faction
|
|
player = rebel
|
|
|
|
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
|
|
unit_list = Find_All_Objects_Of_Type("STAR_DESTROYER_TRACTOR_FIGHTERS")
|
|
star_destroyer = unit_list[1]
|
|
|
|
unit_list = Find_All_Objects_Of_Type("MILLENIUM_FALCON_BACKWARDS")
|
|
falcon = unit_list[1]
|
|
falcon.Change_Owner(bothan) --SoaFE: Need to force the falcon as bothan faction
|
|
|
|
starbase = Find_Hint("EMPIRE_STAR_BASE_4", "starbase")
|
|
destroyer_2 = Find_Hint("STAR_DESTROYER", "guard1")
|
|
destroyer_3 = Find_Hint("STAR_DESTROYER", "guard2")
|
|
|
|
if not starbase then
|
|
MessageBox("Couldn't Find starbase!")
|
|
end
|
|
|
|
--jdg removing target-of-opportunity from falcon
|
|
falcon.Prevent_Opportunity_Fire(true)
|
|
starbase.Prevent_Opportunity_Fire(true)
|
|
destroyer_2.Prevent_Opportunity_Fire(true)
|
|
destroyer_3.Prevent_Opportunity_Fire(true)
|
|
destroyer_2.Guard_Target(destroyer_2.Get_Position())
|
|
destroyer_3.Guard_Target(destroyer_3.Get_Position())
|
|
|
|
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
|
|
-- If falcon is destroyed, mission is over!
|
|
|
|
Register_Death_Event(falcon,Falcon_Death)
|
|
Register_Death_Event(star_destroyer,Star_Destroyer_Death)
|
|
|
|
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
|
|
-- Have the Star Destroyer tractor-beam the falcon
|
|
capture_range = 200
|
|
star_destroyer.Activate_Ability("TRACTOR_BEAM",falcon)
|
|
--star_destroyer.Move_To(star_destroyer.Get_Position())
|
|
--Register_Prox(star_destroyer,Prox_Star_Destroyer,capture_range,rebel)
|
|
|
|
--jdg smoke-and-mirrors here...make destroyer and falcon move toward starbase
|
|
destroyer_goto = Find_Hint("GENERIC_MARKER_SPACE", "destroyer-goto")
|
|
falcon_goto = Find_Hint("GENERIC_MARKER_SPACE", "falcon-goto")
|
|
|
|
if not destroyer_goto then
|
|
MessageBox("Couldn't Find destroyer_goto!")
|
|
end
|
|
|
|
if not falcon_goto then
|
|
MessageBox("Couldn't Find falcon_goto!")
|
|
end
|
|
star_destroyer.Prevent_AI_Usage(true)
|
|
--falcon.Prevent_AI_Usage(true)
|
|
star_destroyer.Move_To(destroyer_goto)
|
|
falcon.Move_To(falcon_goto)
|
|
falcon.Set_Selectable(false)
|
|
|
|
Create_Thread("Thread_Falcon_Orders", falcon)
|
|
|
|
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
|
|
-- We have to give the star destroyer time to activate the tractor beam.
|
|
-- We also don't want the star destroyer to be moving while we hyperspace in...
|
|
Register_Timer(Start_Service,10) --SoaFE: Increase to debug; vanilla = 10
|
|
|
|
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
|
|
Create_Thread("Intro_Cinematic")
|
|
end
|
|
end
|
|
|
|
function Thread_Falcon_Orders( unit_list )
|
|
Formation_Move(unit_list, falcon_goto)
|
|
if not flag_player_won and not flag_engines_offline then
|
|
flag_falcon_captured = true
|
|
unit_list.Despawn()
|
|
Story_Event("FALCON_CAPTURED")
|
|
end
|
|
end
|
|
|
|
function Intro_Cinematic()
|
|
|
|
--MessageBox("intro_cinematic function hit")
|
|
-- Fade_Screen_Out(0)
|
|
Suspend_AI(1)
|
|
Lock_Controls(1)
|
|
Letter_Box_In(0)
|
|
|
|
Start_Cinematic_Camera()
|
|
|
|
Set_Cinematic_Camera_Key(star_destroyer, 1200, 3, 145, 1, 0, 0, 0)
|
|
Set_Cinematic_Target_Key(star_destroyer, 0, 0, 0, 0, 0, 0, 0)
|
|
|
|
|
|
|
|
Fade_Screen_In(1)
|
|
Sleep(1)
|
|
|
|
Story_Event("M7A_INTRO_OFFICER_DIALOG_GO")
|
|
--Imperial Officer: Smuggler scum! We've got you now!
|
|
--Prepare to be boarded!
|
|
|
|
Sleep(2)
|
|
Resume_Hyperspace_In()
|
|
Transition_Cinematic_Camera_Key(falcon, 6.0, 375, 15, 310, 1, 0, 0, 0)
|
|
Transition_Cinematic_Target_Key(falcon, 2.5, 0, 0, 0, 0, 0, 0, 0)
|
|
|
|
Sleep(2)
|
|
Story_Event("M7A_INTRO_HANSOLO_DIALOG_GO")
|
|
|
|
end
|
|
|
|
function State_Intro_HANSOLO_DIALOG_Remove_Text(message)
|
|
if message == OnEnter then
|
|
closest_unit = Find_Nearest(falcon, player, true)
|
|
Story_Event("M7A_INTRO_TASK_TEXT_GO")
|
|
Sleep(3)
|
|
|
|
Point_Camera_At(closest_unit)
|
|
Transition_To_Tactical_Camera(2)
|
|
Letter_Box_Out(2)
|
|
Sleep(2)
|
|
End_Cinematic_Camera()
|
|
|
|
Suspend_AI(0)
|
|
Lock_Controls(0)
|
|
|
|
Add_Radar_Blip(star_destroyer, "blip_star_destroyer")
|
|
star_destroyer.Highlight(true)
|
|
end
|
|
end
|
|
|
|
|
|
------------------------------------------------------------------------------------------------------------------------
|
|
-- Start_Service()
|
|
------------------------------------------------------------------------------------------------------------------------
|
|
|
|
function Start_Service()
|
|
|
|
if TestValid(star_destroyer) then
|
|
--star_destroyer.Move_To(falcon.Get_Position())
|
|
end
|
|
|
|
init_done = true
|
|
|
|
end
|
|
|
|
------------------------------------------------------------------------------------------------------------------------
|
|
-- Prox_Star_Destroyer()
|
|
------------------------------------------------------------------------------------------------------------------------
|
|
|
|
--function Prox_Star_Destroyer(prox_obj, trigger_obj)
|
|
-- if trigger_obj == falcon then
|
|
-- Story_Event("FALCON_CAPTURED")
|
|
-- star_destroyer.Cancel_Event_Object_In_Range(Prox_Star_Destroyer)
|
|
-- star_destroyer.Move_To(star_destroyer.Get_Position())
|
|
-- end
|
|
--end
|
|
|
|
------------------------------------------------------------------------------------------------------------------------
|
|
-- Falcon_Death()
|
|
------------------------------------------------------------------------------------------------------------------------
|
|
|
|
function Falcon_Death()
|
|
if not flag_falcon_captured and not flag_player_won then
|
|
Story_Event("FALCON_DESTROYED")
|
|
end
|
|
end
|
|
|
|
------------------------------------------------------------------------------------------------------------------------
|
|
-- Star_Destroyer_Death()
|
|
------------------------------------------------------------------------------------------------------------------------
|
|
|
|
function Star_Destroyer_Death()
|
|
--Story_Event("FALCON_FREE_OF_TRACTOR")
|
|
flag_player_won = true
|
|
Create_Thread("Ending_Cinematic")
|
|
falcon.Make_Invulnerable(true)
|
|
end
|
|
|
|
function Ending_Cinematic()
|
|
|
|
--flag_player_won = true
|
|
--MessageBox("intro_cinematic function hit")
|
|
Fade_Screen_Out(1)
|
|
Suspend_AI(1)
|
|
Lock_Controls(1)
|
|
Letter_Box_In(0)
|
|
|
|
--despawn backwards falcon and replace with MOV version one MILLENNIUM_FALCON
|
|
falcon_pos = falcon.Get_Position()
|
|
cine_falcon = SpawnList(end_cine_falcon, falcon_pos, player, false, true)
|
|
|
|
if not cine_falcon then
|
|
MessageBox("Couldn't Find cine_falcon!")
|
|
end
|
|
|
|
cine_falcon_face = Find_Hint("GENERIC_MARKER_SPACE","cine-falcon-face")
|
|
falcon_escape_spot = Find_Hint("GENERIC_MARKER_SPACE","falcon-escape-spot")
|
|
|
|
if not cine_falcon_face then
|
|
MessageBox("Couldn't Find cine_falcon_face!")
|
|
end
|
|
|
|
for i,unit in pairs(cine_falcon) do
|
|
unit.Face_Immediate(cine_falcon_face)
|
|
unit.Move_To(falcon_escape_spot)
|
|
end
|
|
|
|
falcon.Despawn()
|
|
|
|
redundant_falcon = Find_First_Object("MOV_Millenium_Falcon")
|
|
|
|
if not redundant_falcon then
|
|
MessageBox("Couldn't Find redundant_falcon!")
|
|
end
|
|
|
|
--hiding/despawning the defense satellites if needed
|
|
laser_satellites_list = Find_All_Objects_Of_Type("DEFENSE_SATELLITE_LASER")
|
|
missile_satellites_list = Find_All_Objects_Of_Type("DEFENSE_SATELLITE_MISSILE")
|
|
|
|
for i,laser_satellites in pairs(laser_satellites_list) do
|
|
if TestValid(laser_satellites) then
|
|
laser_satellites.Despawn()
|
|
end
|
|
end
|
|
|
|
for i,missile_satellites in pairs(missile_satellites_list) do
|
|
if TestValid(missile_satellites) then
|
|
missile_satellites.Despawn()
|
|
end
|
|
end
|
|
|
|
Start_Cinematic_Camera()
|
|
Sleep(2)
|
|
Set_Cinematic_Camera_Key(redundant_falcon, 200, 3, 145, 1, 0, 0, 0)
|
|
Set_Cinematic_Target_Key(redundant_falcon, 0, 0, 0, 0, redundant_falcon, 0, 0)
|
|
|
|
Fade_Screen_In(1)
|
|
Sleep(1)
|
|
|
|
Story_Event("FALCON_FREE_OF_TRACTOR")
|
|
|
|
Sleep(4)
|
|
|
|
|
|
|
|
redundant_falcon.Hyperspace_Away()
|
|
Sleep(1)
|
|
Story_Event("PLAYER_WINS")
|
|
|
|
end
|
|
|
|
------------------------------------------------------------------------------------------------------------------------
|
|
-- Tractor_Beam_Timer()
|
|
------------------------------------------------------------------------------------------------------------------------
|
|
|
|
function Tractor_Beam_Timer()
|
|
|
|
-- Reset checking code
|
|
tractor_beam_timer_active = false
|
|
|
|
-- The Star Destroyer was not able to re-establish the tractor beam
|
|
if TestValid(falcon) and not falcon.Is_Under_Effects_Of_Ability("TRACTOR_BEAM") then
|
|
--star_destroyer.Cancel_Event_Object_In_Range(Prox_Star_Destroyer)
|
|
--Story_Event("FALCON_FREE_OF_TRACTOR")
|
|
flag_player_won = true
|
|
Create_Thread("Ending_Cinematic")
|
|
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(falcon) and TestValid(star_destroyer) then
|
|
if not falcon.Is_Under_Effects_Of_Ability("TRACTOR_BEAM") and not flag_player_won then
|
|
flag_player_won = true
|
|
Create_Thread("Ending_Cinematic")
|
|
end
|
|
end
|
|
|
|
if TestValid(falcon) and TestValid(star_destroyer) then
|
|
if not tractor_beam_timer_active and not falcon.Is_Under_Effects_Of_Ability("TRACTOR_BEAM") and not flag_player_won then
|
|
star_destroyer.Activate_Ability("TRACTOR_BEAM",falcon)
|
|
tractor_beam_timer_active = true
|
|
Register_Timer(Tractor_Beam_Timer,3)
|
|
end
|
|
end
|
|
|
|
--check if falcon has been attacked...make it NOT a target-of-opp
|
|
if TestValid(falcon) and falcon.Get_Shield() < 0.9 then
|
|
falcon.Prevent_Opportunity_Fire(true)
|
|
starbase.Prevent_Opportunity_Fire(true)
|
|
end
|
|
|
|
if TestValid(star_destroyer) and not star_destroyer.Are_Engines_Online() and not flag_engines_offline then
|
|
if TestValid(falcon) then
|
|
flag_engines_offline = true
|
|
--MessageBox("star destroyers engines gone...falcon stops moving")
|
|
--falcon.Move_To(falcon.Get_Position())
|
|
--star_destroyer.Move_To(star_destroyer.Get_Position())
|
|
falcon.Stop()
|
|
star_destroyer.Stop()
|
|
end
|
|
|
|
end
|
|
|
|
-- Tell the player when the falcon will soon be destroyed
|
|
if not player_notified then
|
|
if TestValid(falcon) and falcon.Get_Hull() < falcon_near_death then
|
|
Story_Event("FALCON_NEAR_DEATH")
|
|
player_notified = true
|
|
end
|
|
end
|
|
end
|
|
|
|
------------------------------------------------------------------------------------------------------------------------
|