--///////////////////////////////////////////////////////////////////////////////////////////////// -- -- (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: -- -- $Author: Brian_Hayes $ -- -- $Change: -- -- $DateTime: -- -- $Revision: -- --///////////////////////////////////////////////////////////////////////////////////////////////// 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_M10_Begin = State_Rebel_A3_M10_Begin ,Rebel_M10_IntroCine_Dialog_Line_01_Remove_Text = State_Dialog_Line_01_Remove_Text ,Rebel_M10_IntroCine_Dialog_Line_02_Remove_Text = State_Dialog_Line_02_Remove_Text ,Rebel_M10_IntroCine_Dialog_Line_03_Remove_Text = State_Dialog_Line_03_Remove_Text ,Rebel_M10_IntroCine_Dialog_Line_04_Remove_Text = State_Dialog_Line_04_Remove_Text ,Rebel_M10_IntroCine_Dialog_Line_05_Remove_Text = State_Dialog_Line_05_Remove_Text ,Rebel_M10_IntroCine_Dialog_Line_06_Remove_Text = State_Dialog_Line_06_Remove_Text ,Rebel_A3_M10_Reached_Falcon_00 = State_Reached_Falcon_00 } TransportList = { "Imperial_Landing_Craft" } reinforcement_list1 = { "Imperial_Stormtrooper_Squad" ,"Imperial_Stormtrooper_Squad" ,"Imperial_Stormtrooper_Squad" } reinforcement_list2 = { "Imperial_Light_Scout_Squad" ,"Imperial_Heavy_Scout_Squad" } patrol_loop_range = 100 notice_range = 150 notice_range_large = 300 start_service = false cargo_area_reached = false han_arrived = false chewie_arrived = false fog_id = nil end function State_Rebel_A3_M10_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) -- Get Players empire = Find_Player("Empire") rebel = Find_Player("Rebel") notice_stormtroopers = Find_Hint("GENERIC_MARKER_LAND", "notice-stormtroopers") notice_turrets = Find_Hint("GENERIC_MARKER_LAND", "notice-turrets") notice_maulers = Find_Hint("GENERIC_MARKER_LAND", "notice-maulers") notice_atsts = Find_Hint("GENERIC_MARKER_LAND", "notice-atsts") notice_tanks = Find_Hint("GENERIC_MARKER_LAND", "notice-tanks") notice_power = Find_Hint("GENERIC_MARKER_LAND", "notice-power") patrol_loop1_mark0 = Find_Hint("GENERIC_MARKER_LAND", "patrol-loop1-mark0") patrol_loop1_mark1 = Find_Hint("GENERIC_MARKER_LAND", "patrol-loop1-mark1") patrol_loop1_mark2 = Find_Hint("GENERIC_MARKER_LAND", "patrol-loop1-mark2") patrol_loop1_mark3 = Find_Hint("GENERIC_MARKER_LAND", "patrol-loop1-mark3") patrol_loop1_mark4 = Find_Hint("GENERIC_MARKER_LAND", "patrol-loop1-mark4") patrol_loop1_mark5 = Find_Hint("GENERIC_MARKER_LAND", "patrol-loop1-mark5") patrol_loop2_mark0 = Find_Hint("GENERIC_MARKER_LAND", "patrol-loop2-mark0") patrol_loop2_mark1 = Find_Hint("GENERIC_MARKER_LAND", "patrol-loop2-mark1") patrol_loop2_mark2 = Find_Hint("GENERIC_MARKER_LAND", "patrol-loop2-mark2") Emp_Shuttle_Land_Pos = Find_Hint("GENERIC_MARKER_LAND", "empshuttlelandpos") Han_Move_To = Find_Hint("GENERIC_MARKER_LAND", "hanmoveto") Chewie_Move_To = Find_Hint("GENERIC_MARKER_LAND", "chewiemoveto") Han_Move_To_2 = Find_Hint("GENERIC_MARKER_LAND", "hanmoveto2") Chewie_Move_To_2 = Find_Hint("GENERIC_MARKER_LAND", "chewiemoveto2") storage_area = Find_Hint("GENERIC_MARKER_LAND","storage-area") turret_camera = Find_Hint("GENERIC_MARKER_LAND","turret-camera") second_camera_pos = Find_Hint("GENERIC_MARKER_LAND","second-camera-pos") finally_hanrun = Find_Hint("GENERIC_MARKER_LAND", "hanrunto") finally_han_spawn = Find_Hint("GENERIC_MARKER_LAND", "hanfin") finally_chewie_spawn = Find_Hint("GENERIC_MARKER_LAND", "chewie-spawn") imp_shuttle1_loc = Find_Hint("GENERIC_MARKER_LAND", "shuttleland2") finally_shuttle = imp_shuttle1_loc imp_shuttle2_loc = Find_Hint("GENERIC_MARKER_LAND", "shuttlespot1") imp_shuttle1 = Create_Generic_Object("Imperial_Landing_Craft_Landing_Cinematic", imp_shuttle1_loc, empire) imp_shuttle2 = Create_Generic_Object("Imperial_Landing_Craft_Landing_Cinematic", imp_shuttle2_loc, empire) imp_shuttle1.Teleport_And_Face(imp_shuttle1_loc) imp_shuttle2.Teleport_And_Face(imp_shuttle2_loc) imp_shuttle1.Make_Invulnerable(true) -- Get handles to Han and Chewie han_list = Find_All_Objects_Of_Type("HAN_SOLO") han = han_list[1] chewie_list = Find_All_Objects_Of_Type("CHEWBACCA") chewie = chewie_list[1] -- Find all disabled objects disabled_list = Find_All_Objects_With_Hint("disable") for i,unit in pairs(disabled_list) do unit.Prevent_Opportunity_Fire(true) unit.Prevent_All_Fire(true) unit.Lock_Current_Orders() unit.Prevent_AI_Usage(true) unit.Suspend_Locomotor(true) end -- Tell the service func that things have been initialized start_service = true Create_Thread("Intro_Cinematic") --this freezes all build pads as the objects defined in the editor fog_id = FogOfWar.Reveal(rebel,han.Get_Position(),20000,20000) Register_Prox(patrol_loop1_mark0, f_Patrol_Loop1_Mark0, patrol_loop_range, empire) Register_Prox(patrol_loop1_mark1, f_Patrol_Loop1_Mark1, patrol_loop_range, empire) Register_Prox(patrol_loop1_mark2, f_Patrol_Loop1_Mark2, patrol_loop_range, empire) Register_Prox(patrol_loop1_mark3, f_Patrol_Loop1_Mark3, patrol_loop_range, empire) Register_Prox(patrol_loop1_mark4, f_Patrol_Loop1_Mark4, patrol_loop_range, empire) Register_Prox(patrol_loop1_mark5, f_Patrol_Loop1_Mark5, patrol_loop_range, empire) Register_Prox(patrol_loop2_mark0, f_Patrol_Loop2_Mark0, patrol_loop_range, empire) Register_Prox(patrol_loop2_mark1, f_Patrol_Loop2_Mark1, patrol_loop_range, empire) Register_Prox(patrol_loop2_mark2, f_Patrol_Loop2_Mark2, patrol_loop_range, empire) Register_Prox(notice_stormtroopers, f_Notice_Stormtroopers, notice_range, rebel) Register_Prox(notice_turrets, f_Notice_Turrets, notice_range, rebel) Register_Prox(notice_maulers, f_Notice_Maulers, notice_range, rebel) Register_Prox(notice_atsts, f_Notice_ATSTs, notice_range_large, rebel) Register_Prox(notice_tanks, f_Notice_Tanks, notice_range, rebel) Register_Prox(notice_power, f_Notice_Power, notice_range, rebel) Register_Prox(storage_area, f_Storage_Area, notice_range, rebel) Register_Prox(finally_chewie_spawn, f_End_Mission, notice_range, rebel) guard_table = Find_All_Objects_With_Hint("guards") for i,unit in pairs(guard_table) do unit.Guard_Target(unit.Get_Position()) end Add_Radar_Blip(storage_area, "storage_area_blip") end end function f_End_Mission(prox_obj, trigger_obj) if cargo_area_reached then if trigger_obj == han then han_arrived = true end if trigger_obj == chewie then chewie_arrived = true end if han_arrived and chewie_arrived then Remove_Radar_Blip("shuttle_blip") prox_obj.Cancel_Event_Object_In_Range(f_End_Mission) Story_Event("M10_REACHED_SHUTTLE") end end end function f_Storage_Area(prox_obj, trigger_obj) prox_obj.Cancel_Event_Object_In_Range(f_Storage_Area) cargo_area_reached = true Story_Event("M10_REACH_CARGO_AREA") prox_obj.Cancel_Event_Object_In_Range(f_Patrol_Loop2_Mark0) reinforcements1 = SpawnList(reinforcement_list1, finally_hanrun.Get_Position(), empire, false, true) for i,unit in pairs(reinforcements1) do unit.Attack_Move(han) end reinforcements2 = SpawnList(reinforcement_list2, Han_Move_To.Get_Position(), empire, false, true) for i,unit in pairs(reinforcements2) do unit.Attack_Move(chewie) end Remove_Radar_Blip("storage_area_blip") Add_Radar_Blip(imp_shuttle1, "shuttle_blip") end function f_Notice_Stormtroopers(prox_obj, trigger_obj) prox_obj.Cancel_Event_Object_In_Range(f_Notice_Stormtroopers) Story_Event("M10_DIALOG_NOTICE_STORMTROOPERS") end function f_Notice_Turrets(prox_obj, trigger_obj) prox_obj.Cancel_Event_Object_In_Range(f_Notice_Turrets) Story_Event("M10_DIALOG_HAN_EMP_NOTICE") end function f_Notice_Maulers(prox_obj, trigger_obj) prox_obj.Cancel_Event_Object_In_Range(f_Notice_Maulers) Story_Event("M10_DIALOG_TIE_MAULER_INTRO") end function f_Notice_ATSTs(prox_obj, trigger_obj) prox_obj.Cancel_Event_Object_In_Range(f_Notice_ATSTs) Story_Event("M10_DIALOG_NOTICE_ATSTS") end function f_Notice_Tanks(prox_obj, trigger_obj) prox_obj.Cancel_Event_Object_In_Range(f_Notice_Tanks) Story_Event("M10_DIALOG_NOTICE_TANKS") end function f_Notice_Power(prox_obj, trigger_obj) prox_obj.Cancel_Event_Object_In_Range(f_Notice_Power) if not cargo_area_reached then Story_Event("M10_NOTICE_POWER_PLANT") end end ------------------------------------------------------------------------------------------------------------------------ -- Patrol loop stuff ------------------------------------------------------------------------------------------------------------------------ function f_Patrol_Loop1_Mark0(prox_obj, trigger_obj) if TestValid(trigger_obj) then if trigger_obj.Get_Type() == Find_Object_Type("SQUAD_STORMTROOPER") then stormtrooper_team = trigger_obj.Get_Parent_Object() if TestValid(stormtrooper_team) then if not stormtrooper_team.Has_Active_Orders() then stormtrooper_team.Attack_Move(patrol_loop1_mark1.Get_Position()) end end end end end function f_Patrol_Loop1_Mark1(prox_obj, trigger_obj) if TestValid(trigger_obj) then if trigger_obj.Get_Type() == Find_Object_Type("SQUAD_STORMTROOPER") then stormtrooper_team = trigger_obj.Get_Parent_Object() if TestValid(stormtrooper_team) then if not stormtrooper_team.Has_Active_Orders() then stormtrooper_team.Attack_Move(patrol_loop1_mark0.Get_Position()) end end end end end function f_Patrol_Loop1_Mark2(prox_obj, trigger_obj) if TestValid(trigger_obj) then if trigger_obj.Get_Type() == Find_Object_Type("SQUAD_STORMTROOPER") then stormtrooper_team = trigger_obj.Get_Parent_Object() if TestValid(stormtrooper_team) then if not stormtrooper_team.Has_Active_Orders() then stormtrooper_team.Attack_Move(patrol_loop1_mark3.Get_Position()) end end end end end function f_Patrol_Loop1_Mark3(prox_obj, trigger_obj) if TestValid(trigger_obj) then if trigger_obj.Get_Type() == Find_Object_Type("SQUAD_STORMTROOPER") then stormtrooper_team = trigger_obj.Get_Parent_Object() if TestValid(stormtrooper_team) then if not stormtrooper_team.Has_Active_Orders() then stormtrooper_team.Attack_Move(patrol_loop1_mark4.Get_Position()) end end end end end function f_Patrol_Loop1_Mark4(prox_obj, trigger_obj) if TestValid(trigger_obj) then if trigger_obj.Get_Type() == Find_Object_Type("SQUAD_STORMTROOPER") then stormtrooper_team = trigger_obj.Get_Parent_Object() if TestValid(stormtrooper_team) then if not stormtrooper_team.Has_Active_Orders() then stormtrooper_team.Attack_Move(patrol_loop1_mark5.Get_Position()) end end end end end function f_Patrol_Loop1_Mark5(prox_obj, trigger_obj) if TestValid(trigger_obj) then if trigger_obj.Get_Type() == Find_Object_Type("SQUAD_STORMTROOPER") then stormtrooper_team = trigger_obj.Get_Parent_Object() if TestValid(stormtrooper_team) then if not stormtrooper_team.Has_Active_Orders() then stormtrooper_team.Attack_Move(patrol_loop1_mark2.Get_Position()) end end end end end function f_Patrol_Loop2_Mark0(prox_obj, trigger_obj) if TestValid(trigger_obj) then if trigger_obj.Get_Type() == Find_Object_Type("AT_ST_WALKER") then if not trigger_obj.Has_Active_Orders() then trigger_obj.Attack_Move(patrol_loop2_mark1.Get_Position()) end end if trigger_obj.Get_Type() == Find_Object_Type("SQUAD_STORMTROOPER") then stormtrooper_team = trigger_obj.Get_Parent_Object() if TestValid(stormtrooper_team) then if not stormtrooper_team.Has_Active_Orders() then stormtrooper_team.Attack_Move(patrol_loop2_mark1.Get_Position()) end end end end end function f_Patrol_Loop2_Mark1(prox_obj, trigger_obj) if TestValid(trigger_obj) then if trigger_obj.Get_Type() == Find_Object_Type("AT_ST_WALKER") then if not trigger_obj.Has_Active_Orders() then trigger_obj.Attack_Move(patrol_loop2_mark2.Get_Position()) end end if trigger_obj.Get_Type() == Find_Object_Type("SQUAD_STORMTROOPER") then stormtrooper_team = trigger_obj.Get_Parent_Object() if TestValid(stormtrooper_team) then if not stormtrooper_team.Has_Active_Orders() then stormtrooper_team.Attack_Move(patrol_loop2_mark2.Get_Position()) end end end end end function f_Patrol_Loop2_Mark2(prox_obj, trigger_obj) if TestValid(trigger_obj) then if trigger_obj.Get_Type() == Find_Object_Type("AT_ST_WALKER") then if not trigger_obj.Has_Active_Orders() then trigger_obj.Attack_Move(patrol_loop2_mark0.Get_Position()) end end if trigger_obj.Get_Type() == Find_Object_Type("SQUAD_STORMTROOPER") then stormtrooper_team = trigger_obj.Get_Parent_Object() if TestValid(stormtrooper_team) then if not stormtrooper_team.Has_Active_Orders() then stormtrooper_team.Attack_Move(patrol_loop2_mark0.Get_Position()) end end end end end ------------------------------------------------------------------------------------------------------------------------ -- Opening Cinematic stuff ------------------------------------------------------------------------------------------------------------------------ function Intro_Cinematic() -- Lock out controls for intro cinematic and reveal FOW Suspend_AI(1) Lock_Controls(1) Letter_Box_In(0) -- now find cinematic x-wing Start_Cinematic_Camera() Set_Cinematic_Camera_Key(han, 600, 30, 315, 1, 0, 0, 0) Set_Cinematic_Target_Key(han, 0, 0, 0, 0, han, 0, 0) Sleep(1) Story_Event("CUE_M10_DIALOG_HANSOLO_01") end ------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------ -- Opening Cinematic dialog done call backs ------------------------------------------------------------------------------------------------------------------------ function State_Dialog_Line_01_Remove_Text(message) if message == OnEnter then Fade_Screen_In(1) immperial_shuttle = Create_Cinematic_Transport("Imperial_Landing_Craft_Landing_Cinematic", empire.Get_ID(), Emp_Shuttle_Land_Pos, 180, 1, 0.25, 20, 1) han.Play_SFX_Event("Unit_Shuttle_Landing_3") Sleep(4) Transition_Cinematic_Camera_Key(han, 20, 500, 30, 315, 1, 0, 0, 0) Story_Event("CUE_M10_DIALOG_HANSOLO_02") end end function State_Dialog_Line_02_Remove_Text(message) if message == OnEnter then Story_Event("CUE_M10_DIALOG_HANSOLO_03") Sleep(1.5) han.Play_SFX_Event("Unit_Shuttle_Door_Open_2") end end function State_Dialog_Line_03_Remove_Text(message) if message == OnEnter then han.Move_To(Han_Move_To) Sleep(.1) chewie.Move_To(Chewie_Move_To) Story_Event("CUE_M10_DIALOG_HANSOLO_04") end end function State_Dialog_Line_04_Remove_Text(message) if message == OnEnter then Story_Event("CUE_M10_DIALOG_HANSOLO_05") end end -- Set_Cinematic_Camera_Key(target_pos, x_dist, y_pitch, z_yaw, euler, pobj, use_object_rotation, cinematic_animation) -- Transition_Cinematic_Camera_Key(target_pos, time, x_dist, y_pitch, z_yaw, euler, pobj, use_object_rotation, cinematic_animation) -- Set_Cinematic_Target_Key(target_pos, x_dist, y_pitch, z_yaw, euler, pobj, use_object_rotation, cinematic_animation) -- Transition_Cinematic_Target_Key(target_pos, time, x_dist, y_pitch, z_yaw, euler, pobj, use_object_rotation, cinematic_animation) function State_Dialog_Line_05_Remove_Text(message) if message == OnEnter then han.Move_To(Han_Move_To_2) Sleep(.1) BlockOnCommand(chewie.Move_To(Chewie_Move_To_2)) Sleep(1) Story_Event("CUE_M10_DIALOG_HANSOLO_06") Set_Cinematic_Camera_Key(second_camera_pos,0,0,200,0,0,0,0) Set_Cinematic_Target_Key(storage_area,0,0,0,0,0,0,0) Transition_Cinematic_Camera_Key(second_camera_pos,20,0,0,20,0,0,0,0) end end function State_Dialog_Line_06_Remove_Text(message) if message == OnEnter then turbolaser_list = Find_All_Objects_Of_Type("E_GROUND_TURBOLASER_TOWER") for i,turbolaser in pairs(turbolaser_list) do turbolaser.Highlight(true) end Story_Event("CUE_M10_DIALOG_HANSOLO_07") Transition_Cinematic_Target_Key(turret_camera, 8, 0, 0, 80, 0, 0, 0, 0) Sleep(6) --UNflag the turbolaser towers during this camera pan for i,turbolaser in pairs(turbolaser_list) do turbolaser.Highlight(false) end --MessageBox("should be leaving cine mode now!!!") Point_Camera_At(Han_Move_To_2) Transition_To_Tactical_Camera(2) Sleep(2) Letter_Box_Out(1) End_Cinematic_Camera() Lock_Controls(0) Suspend_AI(0) end end ----------------------------------------------------------------------------------------------------------------------- function Story_Mode_Service() if start_service then end end ----------------------------------------------------------------------------------------------------------------------- -- DME: Ending Cinematic ----------------------------------------------------------------------------------------------------------------------- function State_Reached_Falcon_00(message) if message == OnEnter then if not TestValid(han) or not TestValid(chewie) then ScriptExit() end --setting up cinematic stuff Fade_Screen_Out(1) Sleep(2) Suspend_AI(1) Lock_Controls(1) Start_Cinematic_Camera() Letter_Box_In(0) imp_shuttle1.Despawn() han.In_End_Cinematic(true) chewie.In_End_Cinematic(true) Do_End_Cinematic_Cleanup() exit_shuttle_loc = Find_Hint("GENERIC_MARKER_LAND", "shuttleland2") getaway_shuttle1 = Create_Cinematic_Transport("Imperial_Landing_Craft_Landing_Cinematic", empire.Get_ID(), exit_shuttle_loc, 90, 0, 1.0, 8, 0) han.Teleport_And_Face(finally_han_spawn) chewie.Teleport_And_Face(finally_chewie_spawn) han.Make_Invulnerable(true) chewie.Make_Invulnerable(true) Set_Cinematic_Camera_Key(han, 150, 45, 0, 1, 0, 0, 0) Set_Cinematic_Target_Key(han, 0, 0, 0, 0, han, 0, 0) Fade_Screen_In(1) han.Move_To(finally_hanrun) chewie.Move_To(finally_hanrun) Sleep(1) --Transition_Cinematic_Camera_Key(han, 6, 550, 55, 0, 1, 0, 0, 0) --Transition_Cinematic_Target_Key(Finally_Shuttle, 2, 550, 35, 0, 1, 0, 0, 0) Sleep(2) Transition_Cinematic_Camera_Key(imp_shuttle1_loc, 6, 1500, 1, 10, 1, 0, 0, 0) Transition_Cinematic_Target_Key(exit_shuttle_loc, 6, -500, 0, 0, 0, 0, 0, 0) Sleep(2) --put this in where you want to cue the victory screen Story_Event("CUE_M10_PLAYER_WINS") Sleep(6) end end