-- $Id: //depot/Projects/StarWars_Steam/FOC/Run/Data/Scripts/Story/Story_Underworld_ActIII_M12_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_Underworld_ActIII_M12_SPACE.lua $ -- -- Original Author: Jeff_Stewart -- -- $Author: Brian_Hayes $ -- -- $Change: 637819 $ -- -- $DateTime: 2017/03/22 10:16:16 $ -- -- $Revision: #1 $ -- --///////////////////////////////////////////////////////////////////////////////////////////////// require("JGS_FunctionLib") -- added library of commonly used functions require("PGSpawnUnits") require("PGStoryMode") function Definitions() bool_skip_intro = false StoryModeEvents = { Underworld_A03M12_Begin = State_Underworld_A03M12_Begin, --UM12_ADD_OBJECTIVE_Defeat_The_Empire = State_UM12_ADD_OBJECTIVE_Defeat_The_Empire, UM12_ADD_OBJECTIVE_Defeat_The_Rebels = State_UM12_ADD_OBJECTIVE_Defeat_The_Rebels, UM12_DIALOG_Intro_Dialog_Line_01_Remove_Text = State_UM12_DIALOG_Intro_Dialog_Line_01_Remove_Text, UM12_DIALOG_Intro_Dialog_Line_02_Remove_Text = State_UM12_DIALOG_Intro_Dialog_Line_02_Remove_Text, UM12_DIALOG_Intro_Dialog_Line_03_Remove_Text = State_UM12_DIALOG_Intro_Dialog_Line_03_Remove_Text, UM12_DIALOG_Intro_Dialog_Line_04_Remove_Text = State_UM12_DIALOG_Intro_Dialog_Line_04_Remove_Text, UM12_DIALOG_Intro_Dialog_Line_05_Remove_Text = State_UM12_DIALOG_Intro_Dialog_Line_05_Remove_Text, UM12_DIALOG_Intro_Dialog_Line_06_Remove_Text = State_UM12_DIALOG_Intro_Dialog_Line_06_Remove_Text, UM12_DIALOG_Intro_Dialog_Line_07_Remove_Text = State_UM12_DIALOG_Intro_Dialog_Line_07_Remove_Text, UM12_DIALOG_Intro_Dialog_Line_08_Remove_Text = State_UM12_DIALOG_Intro_Dialog_Line_08_Remove_Text, UM12_DIALOG_Intro_Dialog_Line_09_Remove_Text = State_UM12_DIALOG_Intro_Dialog_Line_09_Remove_Text, UM12_Bring_In_SuperStarDestroyer = State_UM12_Bring_In_SuperStarDestroyer, UM12_DIALOG_SuperStarDestroyer_Has_Arrived_Remove_Movie = State_UM12_DIALOG_SuperStarDestroyer_Has_Arrived_Remove_Movie, UM12_REMOVE_OBJECTIVE_Help_Rebels = State_UM12_REMOVE_OBJECTIVE_Help_Rebels, } rebel_shiptype_list = { --"A_WING_SQUADRON", --"B-WING_SQUADRON", "REBEL_X-WING_SQUADRON", --"Y-WING_SQUADRON", "CALAMARI_CRUISER", "ALLIANCE_ASSAULT_FRIGATE", "CORELLIAN_CORVETTE", "CORELLIAN_GUNBOAT", "MARAUDER_MISSILE_CRUISER", "MC30_FRIGATE", "NEBULON_B_FRIGATE" } empire_shiptype_list = { "ACCLAMATOR_ASSAULT_SHIP", "BROADSIDE_CLASS_CRUISER", "INTERDICTOR_CRUISER", "STAR_DESTROYER", "TARTAN_PATROL_CRUISER", "VICTORY_DESTROYER", } acclamator_hardpoint_list = { "HP_Acclamator_Weapon_FL", "HP_Acclamator_Weapon_FR", "HP_Acclamator_Weapon_FC", "HP_Acclamator_Weapon_BL", "HP_Acclamator_Weapon_BR", "HP_Acclamator_Weapon_BC", "HP_Acclamator_Fighter_Bay" } interdictor_hardpoint_list = { "HP_Interdictor_Weapon_01", "HP_Interdictor_Weapon_02", "HP_Interdictor_Weapon_03", "HP_Interdictor_Weapon_04", "HP_Interdictor_GravWell_01", "HP_Interdictor_Shields_01", } stardestroyer_hardpoint_list = { "HP_Star_Destroyer_Weapon_FL", "HP_Star_Destroyer_Weapon_FR", "HP_Star_Destroyer_Weapon_BL", "HP_Star_Destroyer_Weapon_BR", "HP_Star_Destroyer_Weapon_ML", "HP_Star_Destroyer_Weapon_MR", "HP_Star_Destroyer_Shield_Generator", "HP_Star_Destroyer_Tractor_Beam", "HP_Star_Destroyer_Fighter_Bay" } victory_hardpoint_list = { "HP_Victory_Weapon_01", "HP_Victory_Weapon_02", "HP_Victory_Weapon_03", "HP_Victory_Shields_01", "HP_Victory_Fighter_Bay" } empire_super_stardestroyer = {} rebel_reinforce_list = {} empire_reinforce_list = {} rebel_entryflag_list = {} --defining constants here const_max_tie_scout_health = 70 const_max_broadside_health = 650 const_max_tartan_health = 500 const_acclamator_popcap_value = 3 const_broadside_popcap_value = 2 const_interdictor_popcap_value = 3 const_stardestroyer_popcap_value = 4 const_tartan_popcap_value = 2 const_victorydestroyer_popcap_value = 3 const_max_popcap = 20 esc_pressed = false num_current_popcap = 0 num_shuttles_destroyed = 2 --long list of bools bool_sy01_hf01_taken = false bool_sy01_hf02_taken = false bool_sy01_hf03_taken = false bool_sy01_hf04_taken = false bool_sy02_hf01_taken = false bool_sy02_hf02_taken = false bool_sy03_hf01_taken = false bool_sy03_hf02_taken = false bool_sy04_hf01_taken = false bool_sy05_hf01_taken = false bool_sy01_full = false bool_sy02_full = false bool_sy03_full = false bool_sy04_full = false bool_sy05_full = false bool_shuttle01_being_expended = false bool_shuttle02_being_expended = false bool_shuttle03_being_expended = false bool_capturing_starbase01 = false bool_capturing_starbase02 = false bool_capturing_starbase03 = false bool_capturing_eclipse = false bool_eclipse_captured = false bool_first_shot_fired = false bool_starbase01_active = true bool_starbase02_active = true bool_starbase03_active = true bool_rebels_attacking = true bool_rebels_are_friends = true bool_okay_to_reinforce_empire = true shuttles_in_use = {} starbase_in_use = {} escort_list = {} escort_location_list = {} uw_reveal = nil end function State_Underworld_A03M12_Begin(message) if message == OnEnter then JoeMessage("******************************STARTING NEW MISSION******************************") --GlobalValue.Set("Allow_AI_Controlled_Fog_Reveal", 0) --player definitions neutral_player = Find_Player("Neutral") empire_player = Find_Player("Empire") rebel_player = Find_Player("Rebel") underworld_player = Find_Player("Underworld") uw_reveal = FogOfWar.Reveal_All(underworld_player) underworld_player.Make_Ally(rebel_player) rebel_player.Make_Ally(underworld_player) --making the eclipse not a target of opportunity eclipse = Find_First_Object("ECLIPSE_SUPER_STAR_DESTROYER") eclipse.Change_Owner(empire_player) eclipse.Prevent_Opportunity_Fire(true) --eclipse.Highlight(true) Add_Radar_Blip(eclipse, "eclipse_blip") eclipse.Set_Cannot_Be_Killed(true) --making the shipyards not targets of opportunity shipyard_list = Find_All_Objects_Of_Type("EMPIRE_DOCK_DESTROYABLE") for i, shipyard in pairs(shipyard_list) do shipyard.Prevent_Opportunity_Fire(true) end --defining the 3 empire starbases here starbase_01 = Find_Hint("UM12_STAR_BASE", "starbase01") starbase_02 = Find_Hint("UM12_STAR_BASE", "starbase02") starbase_03 = Find_Hint("UM12_STAR_BASE", "starbase03") --############################################## rebel_hero = Find_Hint("MILLENNIUM_FALCON", "rebel-hero") --cannot be killed until given the objective rebel_hero.Set_Cannot_Be_Killed(true) rebel_hero.Make_Invulnerable(true) rebel_hero.Prevent_AI_Usage(true) rebel_hero.Hide(true) rebel_hero.Suspend_Locomotor(true) rebel_hero_location = rebel_hero.Get_Position() --defining han's escorts here escort_list[1] = Find_Hint("NEBULON_B_FRIGATE", "escort01") escort_list[2] = Find_Hint("NEBULON_B_FRIGATE", "escort02") escort_list[3] = Find_Hint("CALAMARI_CRUISER", "escort03") escort_list[4] = Find_Hint("CALAMARI_CRUISER", "escort04") escort_location_list[1] = escort_list[1].Get_Position() escort_location_list[2] = escort_list[2].Get_Position() escort_location_list[3] = escort_list[3].Get_Position() escort_location_list[4] = escort_list[4].Get_Position() for i, escort in pairs(escort_list) do escort.Set_Cannot_Be_Killed(true) escort.Prevent_AI_Usage(true) escort.Hide(true) escort.Suspend_Locomotor(true) end --entry flag definitions - empire entryflag_empire01 = Find_Hint("MARKER_GENERIC_YELLOW", "entryflag-empire01") --entry flag definitions - rebel rebel_entryflag_list[1] = Find_Hint("MARKER_GENERIC_GREEN", "entryflag-rebel-starbase01") rebel_entryflag_list[2] = Find_Hint("MARKER_GENERIC_GREEN", "entryflag-rebel-starbase02") rebel_entryflag_list[3] = Find_Hint("MARKER_GENERIC_GREEN", "entryflag-rebel-starbase03") --shipyard definitions shipyard01 = Find_Hint("EMPIRE_DOCK_DESTROYABLE", "shipyard01") shipyard02 = Find_Hint("EMPIRE_DOCK_DESTROYABLE", "shipyard02") shipyard03 = Find_Hint("EMPIRE_DOCK_DESTROYABLE", "shipyard03") shipyard04 = Find_Hint("EMPIRE_DOCK_DESTROYABLE", "shipyard04") shipyard05 = Find_Hint("EMPIRE_DOCK_DESTROYABLE", "shipyard05") if not shipyard01 then MessageBox("not shipyard01") end if not shipyard02 then MessageBox("not shipyard02") end --healing "bays" definintions sy01_healbay01 = Find_Hint("UM12_MARKER_HEALING", "sy01-healbay01") sy01_healbay02 = Find_Hint("UM12_MARKER_HEALING", "sy01-healbay02") sy01_healbay03 = Find_Hint("UM12_MARKER_HEALING", "sy01-healbay03") sy01_healbay04 = Find_Hint("UM12_MARKER_HEALING", "sy01-healbay04") sy02_healbay01 = Find_Hint("UM12_MARKER_HEALING", "sy02-healbay01") sy02_healbay02 = Find_Hint("UM12_MARKER_HEALING", "sy02-healbay02") sy03_healbay01 = Find_Hint("UM12_MARKER_HEALING", "sy03-healbay01") sy03_healbay02 = Find_Hint("UM12_MARKER_HEALING", "sy03-healbay02") sy04_healbay01 = Find_Hint("UM12_MARKER_HEALING", "sy04-healbay01") sy05_healbay01 = Find_Hint("UM12_MARKER_HEALING", "sy05-healbay01") --defining "mission critical" units here tyber_start_spot = Find_Hint("MARKER_GENERIC_BLUE", "peacebringer-startspot") if not TestValid(tyber_start_spot) then MessageBox("no tyber_start_spot") end tyber = Find_First_Object("THE_PEACEBRINGER") if TestValid(tyber) then tyber.Teleport_And_Face(tyber_start_spot) else tyber_spawn = Spawn_From_Reinforcement_Pool(Find_Object_Type("Tyber_Zann_Team"), tyber_start_spot, underworld_player) tyber = tyber_spawn --tyber = Find_First_Object("THE_PEACEBRINGER") if TestValid (tyber) then tyber.Teleport_And_Face(tyber_start_spot) --tyber.Prevent_Opportunity_Fire(true) --tyber.Prevent_All_Fire(true) --tyber.Set_Cannot_Be_Killed(true) else --MessageBox("No Tyber!! Fool") Spawn_Unit(Find_Object_Type("THE_PEACEBRINGER"), tyber_start_spot, underworld_player) tyber = Find_First_Object("THE_PEACEBRINGER") tyber.Teleport_And_Face(tyber_start_spot) --tyber.Prevent_Opportunity_Fire(true) --tyber.Prevent_All_Fire(true) --tyber.Set_Cannot_Be_Killed(true) end end shuttle01 = Find_Hint("UM12_BOARDING_SHUTTLE", "shuttle01") shuttle02 = Find_Hint("UNDERWORLD_PIRATE_IPV", "shuttle02") shuttle03 = Find_Hint("UNDERWORLD_PIRATE_IPV", "shuttle03") --setting up prox events on the shuttles to track when they reach the --eclipse or a starbase Register_Prox(shuttle01, PROX_Boarding_Shuttles, 500, empire_player) shuttle01.Highlight(true) --Register_Prox(shuttle02, PROX_Boarding_Shuttles, 500, empire_player) --Register_Prox(shuttle03, PROX_Boarding_Shuttles, 500, empire_player) --this is a setup for the opening cinematic underworld_ship_list = Find_All_Objects_Of_Type(underworld_player) for i, underworld_ship in pairs(underworld_ship_list) do underworld_ship.Prevent_Opportunity_Fire(true) underworld_ship.Prevent_All_Fire(true) underworld_ship.Stop() end --put pointguards on guard duty pointguard_list = Find_All_Objects_With_Hint("pointguard") for i, pointguard in pairs(pointguard_list) do if TestValid(pointguard) then pointguard.Prevent_AI_Usage(true) pointguard.Guard_Target(pointguard.Get_Position()) end end if bool_skip_intro == false then current_cinematic_thread = Create_Thread("Thread_Opening_Cinematic") else --fill in needed stuff here rebel_hero.Hide(false) rebel_hero.Prevent_AI_Usage(false) rebel_hero.Prevent_Opportunity_Fire(false) rebel_hero.Prevent_All_Fire(false) rebel_hero.Suspend_Locomotor(false) for i, escort in pairs(escort_list) do escort.Set_Cannot_Be_Killed(false) escort.Prevent_AI_Usage(false) escort.Suspend_Locomotor(false) escort.Hide(false) escort.Prevent_AI_Usage(false) end Point_Camera_At(tyber) --MessageBox("A really cool opening cinematic goes here...you'd be super impressed.") Sleep(1) End_Cinematic_Camera() Letter_Box_Out(1) Lock_Controls(0) Suspend_AI(0) Fade_Screen_In(1) Story_Event("UM12_GIVE_STARTING_OBJECTIVES") uw_reveal = FogOfWar.Reveal_All(underworld_player) Create_Thread("Thread_DeathMonitor_TyberZann") Create_Thread("Thread_DeathMonitor_BoardingShuttle01") --Create_Thread("Thread_DeathMonitor_BoardingShuttle02") --Create_Thread("Thread_DeathMonitor_BoardingShuttle03") starbase_01.Highlight(true, 250) Add_Radar_Blip(starbase_01, "starbase_01_blip") starbase_02.Highlight(true, 250) Add_Radar_Blip(starbase_02, "starbase_02_blip") starbase_03.Highlight(true, 250) Add_Radar_Blip(starbase_03, "starbase_03_blip") Create_Thread("Thread_DeathMonitor_Starbase01") Create_Thread("Thread_DeathMonitor_Starbase02") Create_Thread("Thread_DeathMonitor_Starbase03") Create_Thread("Thread_DeathMonitor_Starbases") Create_Thread("Thread_DeathMonitor_Shipyard01") Create_Thread("Thread_DeathMonitor_Shipyard02") Create_Thread("Thread_DeathMonitor_Shipyard03") Create_Thread("Thread_DeathMonitor_Shipyard04") Create_Thread("Thread_DeathMonitor_Shipyard05") Create_Thread("Thread_Empire_Units_Arrive") Create_Thread("Thread_Rebel_Units_Arrive") Sleep(10) Create_Thread("Thread_Give_Opening_Hint") end end end function Thread_Opening_Cinematic() Fade_Screen_Out(0) Suspend_AI(1) Lock_Controls(1) Letter_Box_In(0) Start_Cinematic_Camera() Cancel_Fast_Forward() Sleep(1) Story_Event("UM12_CUE_INTRO_DIALOG_LINE_01") --show the eclipse here --Point_Camera_At(eclipse) intro_camera_start = Find_Hint("MARKER_GENERIC_RED", "intro-camera-start") intro_look_start = Find_Hint("MARKER_GENERIC_RED", "introstart") intro_camera_move01 = Find_Hint("MARKER_GENERIC_RED", "intro-camera-move01") if not esc_pressed then Transition_Cinematic_Camera_Key(intro_camera_start, 0, 0, 0, 0, 0, 0, 0, 0) Transition_Cinematic_Target_Key(intro_look_start, 0, 0, 0, 0, 0, 0, 0, 0) Transition_Cinematic_Camera_Key(intro_camera_move01, 10, 0, 0, 0, 0, 0, 0, 0) --Transition_Cinematic_Target_Key(intro_camera_move01, 7, 0, 0, 0, 0, 0, 0, 0) end --Sleep(1) Fade_Screen_In(1) end function State_UM12_DIALOG_Intro_Dialog_Line_01_Remove_Text(message) if message == OnEnter then --just finished the line "Tyber Zann: That is the most glorious thing I have ever seen, Urai, once we take control of her we will…" --TEXT_SPEECH_UW_ACT03_M12_34 --do camera stuff here --zoom down length of the eclipse to show her off. --cue'ing the line "Urai Fen: Tyber, we are tracking several in-bound fleets!" --TEXT_SPEECH_UW_ACT03_M12_35 Story_Event("UM12_CUE_INTRO_DIALOG_LINE_02") end end function State_UM12_DIALOG_Intro_Dialog_Line_02_Remove_Text(message) if message == OnEnter then --just finished the line "Urai Fen: Tyber, we are tracking several in-bound fleets!" --TEXT_SPEECH_UW_ACT03_M12_35 --cue'ing the line "Tyber Zann: It's probably the remains of the Imperial fleet attempting to repair and regroup here -" --TEXT_SPEECH_UW_ACT03_M12_36 Story_Event("UM12_CUE_INTRO_DIALOG_LINE_03") Create_Thread("Thread_Empire_Units_Arrive") --Sleep(2) --show an injured imperial fleet coming in intro_camera_cut01 = Find_Hint("MARKER_GENERIC_RED", "intro-camera-cut01") intro_look_cut01 = Find_Hint("MARKER_GENERIC_YELLOW", "entryflag-empire01") intro_camera_cut01_move01 = Find_Hint("MARKER_GENERIC_RED", "intro-camera-cut01-move01") if not esc_pressed then Transition_Cinematic_Camera_Key(intro_look_cut01, 0, 800, 15, 75, 1, 0, 0, 0) Transition_Cinematic_Target_Key(intro_look_cut01, 0, 0, 0, -100, 0, 0, 0, 0) Transition_Cinematic_Camera_Key(intro_look_cut01, 10, 800, 20, 100, 1, 0, 0, 0) end end end function State_UM12_DIALOG_Intro_Dialog_Line_03_Remove_Text(message) if message == OnEnter then --just finished the line "Tyber Zann: It's probably the remains of the Imperial fleet attempting to repair and regroup here -" --TEXT_SPEECH_UW_ACT03_M12_36 --cue'ing the line "Urai Fen: There are multiple Alliance signatures as well. " --TEXT_SPEECH_UW_ACT03_M12_37 Story_Event("UM12_CUE_INTRO_DIALOG_LINE_04") end end function State_UM12_DIALOG_Intro_Dialog_Line_04_Remove_Text(message) if message == OnEnter then --just finished the line "Urai Fen: There are multiple Alliance signatures as well." --TEXT_SPEECH_UW_ACT03_M12_37 --show the rebel commander hyperspacing in near tyber here intro_camera_cut02 = Find_Hint("MARKER_GENERIC_RED", "intro-camera-cut02") intro_look_cut02 = Find_Hint("MARKER_GENERIC_RED", "intro-look-cut02") intro_camera_cut02_move01 = Find_Hint("MARKER_GENERIC_RED", "intro-camera-cut02-move01") if not esc_pressed then Transition_Cinematic_Camera_Key(tyber, 0, 1000, 20, 110, 1, 0, 0, 0) Transition_Cinematic_Target_Key(intro_look_cut02, 0, 0, 0, -200, 0, 0, 0, 0) Transition_Cinematic_Camera_Key(tyber, 8, 900, 30, 120, 1, 0, 0, 0) end --current_cinematic_thread = nil --rebel_hero.Prevent_AI_Usage(true) rebel_hero.Hide(false) rebel_hero.Prevent_Opportunity_Fire(true) rebel_hero.Prevent_All_Fire(true) --rebel_hero.Suspend_Locomotor(false) rebel_hero.Cinematic_Hyperspace_In(1) if TestValid(escort_list[1]) then escort_list[1].Hide(false) escort_list[1].Prevent_Opportunity_Fire(true) escort_list[1].Prevent_All_Fire(true) escort_list[1].Cinematic_Hyperspace_In(10) end if TestValid(escort_list[2]) then escort_list[2].Hide(false) escort_list[2].Prevent_Opportunity_Fire(true) escort_list[2].Prevent_All_Fire(true) escort_list[2].Cinematic_Hyperspace_In(30) end if TestValid(escort_list[3]) then escort_list[3].Hide(false) escort_list[3].Prevent_Opportunity_Fire(true) escort_list[3].Prevent_All_Fire(true) escort_list[3].Cinematic_Hyperspace_In(50) end if TestValid(escort_list[4]) then escort_list[4].Hide(false) escort_list[4].Prevent_Opportunity_Fire(true) escort_list[4].Prevent_All_Fire(true) escort_list[4].Cinematic_Hyperspace_In(60) end --current_cinematic_thread = 1 --Transition_Cinematic_Camera_Key(intro_camera_cut02_move01, 1, 0, 0, 0, 0, 0, 0, 0) --Transition_Cinematic_Target_Key(rebel_hero, 1, 0, 0, 0, 0, 0, 0, 0) --Cinematic_Zoom(2, .02) --cue'ing the line "Rebel Commander: Unidentified ships, what is your purpose in this sector?! " --TEXT_SPEECH_UW_ACT03_M12_39 Story_Event("UM12_CUE_INTRO_DIALOG_LINE_05") end end function State_UM12_DIALOG_Intro_Dialog_Line_05_Remove_Text(message) if message == OnEnter then --just finished the line "Rebel Commander: Unidentified ships, what is your purpose in this sector?! " --TEXT_SPEECH_UW_ACT03_M12_39 intro_camera_cut03 = Find_Hint("MARKER_GENERIC_RED", "intro-camera-cut03") --Transition_Cinematic_Camera_Key(intro_camera_cut03, 0, 0, 0, 0, 0, 0, 0, 0) --Transition_Cinematic_Target_Key(tyber, 0, 0, 0, 0, 0, 0, 0, 0) --back to tyber here --cue'ing the line "Tyber Zann: We heard of the Alliance's glorious victory at Endor, and have come to help." " --TEXT_SPEECH_UW_ACT03_M12_40 Story_Event("UM12_CUE_INTRO_DIALOG_LINE_06") end end function State_UM12_DIALOG_Intro_Dialog_Line_06_Remove_Text(message) if message == OnEnter then --just finished the line "Tyber Zann: We heard of the Alliance's glorious victory at Endor, and have come to help." " --TEXT_SPEECH_UW_ACT03_M12_40 --close up on rebel commander here --rebel_hero.Stop() --rebel_hero.Suspend_Locomotor(true) if not esc_pressed then rebel_hero.Move_To(tyber) Transition_Cinematic_Target_Key(rebel_hero, 3, 0, 0, 0, 0, rebel_hero, 0, 0) Transition_Cinematic_Camera_Key(tyber, 8, 900, 50, 120, 1, 0, 0, 0) for i, escort in pairs(escort_list) do escort.Stop() end end hancloseup_cameramove = Find_Hint("MARKER_GENERIC_RED", "han-closeup-cameramove") --Transition_Cinematic_Camera_Key(rebel_hero, 0, 40, 40, 10, 0, 0, 0, 0) --Transition_Cinematic_Target_Key(rebel_hero, 0, 0, 0, 0, 0, 0, 0, 0) --Transition_Cinematic_Camera_Key(hancloseup_cameramove, 5, 40, 40, 10, 0, 0, 0, 0) --cue'ing the line "Rebel Commander: Help us destroy the Eclipse, and you will be well rewarded by the Alliance. " --TEXT_SPEECH_UW_ACT03_M12_41 Story_Event("UM12_CUE_INTRO_DIALOG_LINE_07") end end function State_UM12_DIALOG_Intro_Dialog_Line_07_Remove_Text(message) if message == OnEnter then --just finished the line "Rebel Commander: Help us destroy the Eclipse, and you will be well rewarded by the Alliance. " --TEXT_SPEECH_UW_ACT03_M12_41 --cue'ing the line "Tyber Zann: Looks like there's a few starbases between us and the Eclipse, focus your attacks there." --TEXT_SPEECH_UW_ACT03_M12_42 Story_Event("UM12_CUE_INTRO_DIALOG_LINE_08") --flyover of the Imperial starbases here --starbase_01 if not esc_pressed then Transition_Cinematic_Camera_Key(starbase_01, 0, 2500, 1200, 50, 0, 0, 0, 0) Transition_Cinematic_Target_Key(starbase_01, 0, 0, 0, 0, 0, 0, 0, 0) Sleep(0.5) starbase_01.Highlight(true, 250) Add_Radar_Blip(starbase_01, "starbase_01_blip") end Sleep(1) if not esc_pressed then Transition_Cinematic_Camera_Key(starbase_02, 2, 2500, 1200, 50, 0, 0, 0, 0) Transition_Cinematic_Target_Key(starbase_02, 2, 0, 0, 0, 0, 0, 0, 0) Sleep(0.5) starbase_02.Highlight(true, 250) Add_Radar_Blip(starbase_02, "starbase_02_blip") end Sleep(2) if not esc_pressed then Transition_Cinematic_Camera_Key(starbase_03, 2, 2500, 1200, 50, 0, 0, 0, 0) Transition_Cinematic_Target_Key(starbase_03, 2, 0, 0, 0, 0, 0, 0, 0) Sleep(0.5) starbase_03.Highlight(true, 250) Add_Radar_Blip(starbase_03, "starbase_03_blip") end Sleep(1) end end function State_UM12_DIALOG_Intro_Dialog_Line_08_Remove_Text(message) if message == OnEnter then --just finished the line "Tyber Zann: Looks like there's a few starbases between us and the Eclipse, focus your attacks there." --TEXT_SPEECH_UW_ACT03_M12_42 --leave cinematic here --Fade_Screen_Out(0) Suspend_AI(1) --Lock_Controls(1) Letter_Box_In(0) --Start_Cinematic_Camera() --Sleep(1) --cue'ing the line "Rebel Commander: Agreed." --TEXT_SPEECH_UW_ACT03_M12_43 Story_Event("UM12_CUE_INTRO_DIALOG_LINE_09") end end function State_UM12_DIALOG_Intro_Dialog_Line_09_Remove_Text(message) if message == OnEnter then Thread.Kill(current_cinematic_thread) current_cinematic_thread = nil Create_Thread("End_Camera") end end function Story_Handle_Esc() if current_cinematic_thread ~= nil then esc_pressed = true Thread.Kill(current_cinematic_thread) current_cinematic_thread = nil Create_Thread("End_Camera") Story_Event("UM12_ESCAPEKEY_PREVENT_INTRO_DIALOG_AI_NOTIFICATION") end end function End_Camera() Stop_All_Music() Stop_All_Speech() Remove_All_Text() underworld_ship_list = Find_All_Objects_Of_Type(underworld_player) for i, underworld_ship in pairs(underworld_ship_list) do underworld_ship.Prevent_Opportunity_Fire(false) underworld_ship.Prevent_All_Fire(false) underworld_ship.Stop() end rebel_hero.Despawn() new_hero_list= Spawn_Unit(Find_Object_Type("MILLENNIUM_FALCON"), rebel_hero_location, rebel_player) rebel_hero = new_hero_list[1] rebel_hero.Set_Cannot_Be_Killed(true) rebel_hero.Make_Invulnerable(true) for i, escort in pairs(escort_list) do escort.Despawn() --escort.Prevent_AI_Usage(false) --escort.Suspend_Locomotor(false) --escort.Hide(false) --escort.Teleport(escort_location_list[i]) --Create_Thread("Thread_Rebel_Reinforcement_Orders", escort) --escort.Cinematic_Hyperspace_In(1) end escort_list = {} new_escort_list1= Spawn_Unit(Find_Object_Type("NEBULON_B_FRIGATE"), escort_location_list[1], rebel_player) escort_list[1] = new_escort_list1[1] new_escort_list2= Spawn_Unit(Find_Object_Type("NEBULON_B_FRIGATE"), escort_location_list[2], rebel_player) escort_list[2] = new_escort_list2[1] new_escort_list3= Spawn_Unit(Find_Object_Type("CALAMARI_CRUISER"), escort_location_list[3], rebel_player) escort_list[3] = new_escort_list3[1] new_escort_list4= Spawn_Unit(Find_Object_Type("CALAMARI_CRUISER"), escort_location_list[4], rebel_player) escort_list[4] = new_escort_list4[1] for i, escort in pairs(escort_list) do Create_Thread("Thread_Rebel_Reinforcement_Orders", escort) end Point_Camera_At(tyber) Transition_To_Tactical_Camera(5) Sleep(5) Lock_Controls(0) End_Cinematic_Camera() Letter_Box_Out(0) Suspend_AI(0) Weather_Audio_Pause(false) Allow_Localized_SFX(true) Resume_Mode_Based_Music() Fade_Screen_In(0) Transition_To_Tactical_Camera(2) Letter_Box_Out(2) Sleep(2) Lock_Controls(0) End_Cinematic_Camera() Suspend_AI(0) Story_Event("UM12_GIVE_STARTING_OBJECTIVES") uw_reveal = FogOfWar.Reveal_All(underworld_player) Create_Thread("Thread_DeathMonitor_TyberZann") Create_Thread("Thread_DeathMonitor_BoardingShuttle01") --Create_Thread("Thread_DeathMonitor_BoardingShuttle02") --Create_Thread("Thread_DeathMonitor_BoardingShuttle03") starbase_01.Highlight(true, 250) Add_Radar_Blip(starbase_01, "starbase_01_blip") starbase_02.Highlight(true, 250) Add_Radar_Blip(starbase_02, "starbase_02_blip") starbase_03.Highlight(true, 250) Add_Radar_Blip(starbase_03, "starbase_03_blip") Create_Thread("Thread_DeathMonitor_Starbase01") Create_Thread("Thread_DeathMonitor_Starbase02") Create_Thread("Thread_DeathMonitor_Starbase03") Create_Thread("Thread_DeathMonitor_Starbases") Create_Thread("Thread_DeathMonitor_Shipyard01") Create_Thread("Thread_DeathMonitor_Shipyard02") Create_Thread("Thread_DeathMonitor_Shipyard03") Create_Thread("Thread_DeathMonitor_Shipyard04") Create_Thread("Thread_DeathMonitor_Shipyard05") Create_Thread("Thread_Empire_Units_Arrive") Create_Thread("Thread_Rebel_Units_Arrive") Sleep(10) Create_Thread("Thread_Give_Opening_Hint") end function Thread_Give_Opening_Hint() local flag_hint_01_valid = true local flag_hint_02_valid = true local flag_hint_03_valid = true while (true) do local hint_timer = 60 local hint_number = GameRandom.Free_Random(2, 3) JoeMessage("current hint_number is %d", hint_number) --MessageBox("current hint_number is %d", hint_number) if hint_number == 1 then --check to see if any starbases are still alive and not under your control if bool_starbase01_active == true or bool_starbase01_active == true or bool_starbase01_active == true then Story_Event("UM12_GIVE_HINT_01_BOARDING_SHUTTLES") else hint_timer = 1 flag_hint_01_valid = false end elseif hint_number == 2 then --check to see if there are still shipyards shipyard_list = Find_All_Objects_Of_Type("EMPIRE_DOCK_DESTROYABLE") local flag_all_shipyards_destroyed = true for i, shipyard in pairs(shipyard_list) do if TestValid(shipyard) then flag_all_shipyards_destroyed = false end end if flag_all_shipyards_destroyed == false then Story_Event("UM12_GIVE_HINT_02_EMPIRE_REPAIRING") else hint_timer = 1 flag_hint_02_valid = false end else --check to see if player is still friends with rebels if bool_rebels_are_friends == true then Story_Event("UM12_GIVE_HINT_03_USE_THE_REBELS") else hint_timer = 1 flag_hint_03_valid = false end end if flag_hint_01_valid == false and flag_hint_02_valid == false and flag_hint_03_valid == false then break end Sleep(hint_timer) end end function State_UM12_ADD_OBJECTIVE_Defeat_The_Rebels(message) if message == OnEnter then --player has been given objective to destroy the rebel hero...mark him --and start monitoring his health if TestValid(rebel_hero) then rebel_hero.Highlight(true) Add_Radar_Blip(rebel_hero, "rebel_hero_blip") rebel_hero.Set_Cannot_Be_Killed(false) rebel_hero.Make_Invulnerable(false) underworld_player.Make_Enemy(rebel_player) rebel_player.Make_Enemy(underworld_player) bool_rebels_are_friends = false Create_Thread("Thread_DeathMonitor_RebelHero") else MessageBox("Cannot find Rebel hero...aborting. Tell Dan Etter immediately") end end end function State_UM12_REMOVE_OBJECTIVE_Help_Rebels(message) if message == OnEnter then --see if there are still space stations and that you dont control them if bool_starbase01_active == true or bool_starbase01_active == true or bool_starbase01_active == true then Story_Event("UM12_CHANGE_SPACE_STATION_OBJECTIVE") end end end function State_UM12_Bring_In_SuperStarDestroyer(message) if message == OnEnter then --MessageBox("Eclipse weapon goes offline here") --make sure there's no attack target while eclipse.Has_Attack_Target() == true do Sleep(0.25) end if TestValid(eclipse) then eclipse.Force_Ability_Recharge("SUPER_LASER", 10000.0) --Put the ability on recharge with a 10000 second timer end Story_Event("UM12_SUPER_STARDESTROYER_ENTERS_STAGE_LEFT") Sleep(3) --bring in the super-star destroyer now...make it attack the eclipse stardestroyer_list = { "STAR_DESTROYER", } entryflag_eclipse01 = Find_Hint("MARKER_GENERIC_YELLOW", "entryflag-eclipse01") entryflag_eclipse02 = Find_Hint("MARKER_GENERIC_YELLOW", "entryflag-eclipse02") entryflag_eclipse03 = Find_Hint("MARKER_GENERIC_YELLOW", "entryflag-eclipse03") ReinforceList(stardestroyer_list, entryflag_eclipse01, empire_player, false, true, true, Callback_Empire_StarDestroyer01_Arrives) ReinforceList(stardestroyer_list, entryflag_eclipse02, empire_player, false, true, true, Callback_Empire_StarDestroyer02_Arrives) ReinforceList(stardestroyer_list, entryflag_eclipse03, empire_player, false, true, true, Callback_Empire_StarDestroyer03_Arrives) --turning over all pointguards to AI control for i, pointguard in pairs(pointguard_list) do if TestValid(pointguard) then pointguard.Prevent_AI_Usage(false) end end end end function State_UM12_DIALOG_SuperStarDestroyer_Has_Arrived_Remove_Movie(message) if message == OnEnter then empire_super_stardestroyer[1] = "UM12_SUPER_STAR_DESTROYER" entryflag_eclipse = Find_Hint("MARKER_GENERIC_YELLOW", "entryflag-eclipse") ReinforceList(empire_super_stardestroyer, entryflag_eclipse, empire_player, false, true, true, Callback_Empire_SuperStarDestroyer_Arrives) --Create_Thread("Thread_Monitor_Eclipse_FiringStatus") Sleep(225) Story_Event("UM12_SUPERLASER_COMES_BACK_ONLINE_AI_NOTIFICATION") if TestValid(eclipse) then eclipse.Force_Ability_Recharge("SUPER_LASER", 10.0) --Put the ability back to a 10 second timer end end end --******************************************************************************* --******jdg below are the scripts and stuff to bring in both empire and rebel units during --******the mission. There are also scipts to make the "damaged" empire ships dock --******at the shipyards, heal, and then go back out and fight. --******************************************************************************* function Thread_Rebel_Units_Arrive() while(bool_rebels_attacking == true) do --random pick of how many units in the incoming force local num_list_total = GameRandom(3,5) --random pick of group composition for i=1,num_list_total do rebel_reinforce_list[i] = rebel_shiptype_list[GameRandom(1,6)] end --do a quick querry on how many entry locations are currently allowed local top_end = 0 for i, entryflag in pairs(rebel_entryflag_list) do top_end = top_end + 1 end --MessageBox("top_end is %d", top_end) --random pick of entry location local roll_entryflag = GameRandom(1,top_end) if (bool_rebels_attacking == true) then if not TestValid(rebel_entryflag_list[roll_entryflag]) then MessageBox("cannot find rebel entry flag") else ReinforceList(rebel_reinforce_list, rebel_entryflag_list[roll_entryflag], rebel_player, false, true, false, Callback_Rebel_Reinforcements) end end Sleep(30) end end function Callback_Rebel_Reinforcements(new_list) --MessageBox("Callback_Rebel_Reinforcements HIT!") Create_Thread("Thread_Rebel_Reinforcements", new_list) end function Thread_Rebel_Reinforcements(reinforce_list) --MessageBox("Thread_Rebel_Reinforcements HIT!") for i, rebel_ship in pairs(reinforce_list) do if TestValid(rebel_ship) then Create_Thread("Thread_Rebel_Reinforcement_Orders", rebel_ship) end end end function Thread_Rebel_Reinforcement_Orders(rebel_ship) while TestValid(rebel_ship) do --JoeMessage("Thread_Rebel_Reinforcement_Orders HIT!") if (bool_rebels_attacking == false) then Sleep(1) rebel_ship.Hyperspace_Away() return end if TestValid(eclipse) and eclipse.Get_Owner().Get_Faction_Name() == "UNDERWORLD" then if TestValid(eclipse) and TestValid(rebel_ship) then rebel_ship.Attack_Target(eclipse) rebel_ship.Prevent_AI_Usage(false) --JoeMessage("rebel_ship.Attack_Move(eclipse) HIT!") break end end local my_nearest_starbase = Find_Nearest(rebel_ship, "UM12_STAR_BASE") if TestValid(rebel_ship) and TestValid(my_nearest_starbase) then rebel_ship.Attack_Target(my_nearest_starbase) --JoeMessage("rebel_ship.Attack_Move(my_nearest_starbase) HIT!") elseif TestValid(rebel_ship) then rebel_ship.Prevent_AI_Usage(false) --JoeMessage("rebel_ship.Prevent_AI_Usage(false) HIT!") break end Sleep(20) end end function Thread_Empire_Units_Arrive() while(bool_okay_to_reinforce_empire == true) do --pick how many units in the incoming force local num_list_total = GameRandom(1,2) for i=1,num_list_total do empire_reinforce_list[i] = empire_shiptype_list[GameRandom(1,6)] end --local num_this_lists_popcap_value = Get_Popcap_Value(empire_reinforce_list) --while ((num_this_lists_popcap_value + num_current_popcap) >= const_max_popcap) do -- Sleep (5) --end --if ((num_this_lists_popcap_value + num_current_popcap) < const_max_popcap) then ReinforceList(empire_reinforce_list, entryflag_empire01, empire_player, false, true, false, Callback_Empire_Ships_Arrive_Damaged) -- num_current_popcap = num_current_popcap + num_this_lists_popcap_value JoeMessage("new pop count (after reinforcing) is %d", num_current_popcap) --else -- MessageBox("current pop cap too high, not reinforcing") --end Sleep(30) end end function Get_Popcap_Value(reinforce_list) local pop_cap_value = 0 for i, empire_ship in pairs(reinforce_list) do if empire_ship == "ACCLAMATOR_ASSAULT_SHIP" then pop_cap_value = pop_cap_value + const_acclamator_popcap_value elseif empire_ship == "BROADSIDE_CLASS_CRUISER" then pop_cap_value = pop_cap_value + const_broadside_popcap_value elseif empire_ship == "INTERDICTOR_CRUISER" then pop_cap_value = pop_cap_value + const_interdictor_popcap_value elseif empire_ship == "STAR_DESTROYER" then pop_cap_value = pop_cap_value + const_stardestroyer_popcap_value elseif empire_ship == "TARTAN_PATROL_CRUISER" then pop_cap_value = pop_cap_value + const_tartan_popcap_value elseif empire_ship == "VICTORY_DESTROYER" then pop_cap_value = pop_cap_value + const_victorydestroyer_popcap_value end end JoeMessage("current pop_cap_value of incoming empire list is %d", pop_cap_value) return pop_cap_value end function Callback_Empire_Ships_Arrive_Damaged(new_list) Create_Thread("Thread_Empire_Ships_Arrive_Damaged", new_list) end function Thread_Empire_Ships_Arrive_Damaged(new_list) for i, empire_ship in pairs(new_list) do if TestValid(empire_ship) then empire_ship.Set_Cannot_Be_Killed(true) if empire_ship.Get_Type().Get_Name() == "ACCLAMATOR_ASSAULT_SHIP" then --pick how many hardpoint to destroy local number_of_hps_to_destroy = GameRandom(4,7) local number_of_hps_destroyed = 0 while (number_of_hps_to_destroy > number_of_hps_destroyed) do hp_to_destroy = GameRandom(1,7) empire_ship.Take_Damage(100000, acclamator_hardpoint_list[hp_to_destroy]) number_of_hps_destroyed = number_of_hps_destroyed + 1 end elseif empire_ship.Get_Type().Get_Name() == "BROADSIDE_CLASS_CRUISER" then --no hard points need to do something else max_health = const_max_broadside_health local damage_weight = GameRandom(12,12) local damage_amount = max_health * damage_weight * 0.1 empire_ship.Take_Damage(damage_amount) elseif empire_ship.Get_Type().Get_Name() == "INTERDICTOR_CRUISER" then --pick how many hardpoint to destroy local number_of_hps_to_destroy = GameRandom(3,6) local number_of_hps_destroyed = 0 while (number_of_hps_to_destroy > number_of_hps_destroyed) do hp_to_destroy = GameRandom(1,6) empire_ship.Take_Damage(100000, interdictor_hardpoint_list[hp_to_destroy]) number_of_hps_destroyed = number_of_hps_destroyed + 1 end elseif empire_ship.Get_Type().Get_Name() == "STAR_DESTROYER" then --its a stardestroyer, now blow off a few hardpoints --pick how many hardpoint to destroy local number_of_hps_to_destroy = GameRandom(5,9) local number_of_hps_destroyed = 0 while (number_of_hps_to_destroy > number_of_hps_destroyed) do hp_to_destroy = GameRandom(1,9) empire_ship.Take_Damage(100000, stardestroyer_hardpoint_list[hp_to_destroy]) number_of_hps_destroyed = number_of_hps_destroyed + 1 end elseif empire_ship.Get_Type().Get_Name() == "TARTAN_PATROL_CRUISER" then --no hard points need to do something else max_health = const_max_tartan_health local damage_weight = GameRandom(22,22) local damage_amount = max_health * damage_weight * 0.1 empire_ship.Take_Damage(damage_amount) elseif empire_ship.Get_Type().Get_Name() == "VICTORY_DESTROYER" then --pick how many hardpoint to destroy local number_of_hps_to_destroy = GameRandom(2,5) local number_of_hps_destroyed = 0 while (number_of_hps_to_destroy > number_of_hps_destroyed) do hp_to_destroy = GameRandom(1,5) empire_ship.Take_Damage(100000, victory_hardpoint_list[hp_to_destroy]) number_of_hps_destroyed = number_of_hps_destroyed + 1 end end Create_Thread("Thread_Empire_Ships_Dock_to_Heal", empire_ship) --Create_Thread("Thread_PopCap_Death_Monitor", empire_ship) end empire_ship.Set_Cannot_Be_Killed(false) end empire_reinforce_list = {} end function Thread_PopCap_Death_Monitor(empire_ship) local deadship_popcap_value = 0 if TestValid(empire_ship) then if empire_ship.Get_Type().Get_Name() == "ACCLAMATOR_ASSAULT_SHIP" then deadship_popcap_value = const_acclamator_popcap_value elseif empire_ship.Get_Type().Get_Name() == "BROADSIDE_CLASS_CRUISER" then deadship_popcap_value = const_broadside_popcap_value elseif empire_ship.Get_Type().Get_Name() == "INTERDICTOR_CRUISER" then deadship_popcap_value = const_interdictor_popcap_value elseif empire_ship.Get_Type().Get_Name() == "STAR_DESTROYER" then deadship_popcap_value = const_stardestroyer_popcap_value elseif empire_ship.Get_Type().Get_Name() == "TARTAN_PATROL_CRUISER" then deadship_popcap_value = const_tartan_popcap_value elseif empire_ship.Get_Type().Get_Name() == "VICTORY_DESTROYER" then deadship_popcap_value = const_victorydestroyer_popcap_value end empire_ship.Set_Cannot_Be_Killed(false) while TestValid(empire_ship) do Sleep(3) end num_current_popcap = num_current_popcap - deadship_popcap_value JoeMessage("empire ship dead, popcap value is %d", deadship_popcap_value) JoeMessage("empire ship dead, current popcap value is %d", num_current_popcap) end end function Thread_Empire_Ships_Dock_to_Heal(damaged_ship) --Sleep(3) if TestValid(damaged_ship) then if (damaged_ship.Get_Hull() < 1) then local bay_number = Find_First_Open_Bay() local shipyard_number = nil if bay_number == sy01_healbay01 or bay_number == sy01_healbay02 or bay_number == sy01_healbay03 or bay_number == sy01_healbay04 then shipyard_number = shipyard01 elseif bay_nuber == sy02_healbay01 or bay_number == sy02_healbay02 then shipyard_number = shipyard02 elseif bay_number == sy03_healbay01 or bay_number == sy03_healbay02 then shipyard_number = shipyard03 elseif bay_number == sy04_healbay01 then shipyard_number = shipyard04 elseif bay_number == sy05_healbay01 then shipyard_number = shipyard05 end if (bay_number == nil) then --there are no open bays...go fight damaged_ship.Prevent_AI_Usage(false) elseif TestValid (damaged_ship) then damaged_ship.Move_To(bay_number.Get_Position()) Register_Prox(bay_number, Prox_FAKE_Heal_Big_Ships, 200, damaged_ship) damaged_ship_info_list = {} damaged_ship_info_list[1] = damaged_ship damaged_ship_info_list[2] = bay_number damaged_ship_info_list[3] = shipyard_number Create_Thread("Thread_Monitor_Healing", damaged_ship_info_list) else Heal_Bay_Is_Now_Clear(bay_number) end end end end function Prox_FAKE_Heal_Big_Ships(prox_obj, trigger_obj) if trigger_obj.Get_Type().Get_Name() == "ACCLAMATOR_ASSAULT_SHIP" or trigger_obj.Get_Type().Get_Name() == "INTERDICTOR_CRUISER" or trigger_obj.Get_Type().Get_Name() == "STAR_DESTROYER" or trigger_obj.Get_Type().Get_Name() == "VICTORY_DESTROYER" then prox_obj.Cancel_Event_Object_In_Range(Prox_FAKE_Heal_Big_Ships) local thread_info = {} thread_info[1] = trigger_obj thread_info[2] = prox_obj Create_Thread("Thread_FAKE_Heal_Big_Ships", thread_info) --MessageBox("Prox_FAKE_Heal_Big_Ships hit") end end function Thread_FAKE_Heal_Big_Ships (thread_info) local big_ship = thread_info[1] local my_bay_number = thread_info[2] if TestValid(big_ship) then big_ship.Stop() end Sleep(15) if TestValid(big_ship) then --MessageBox("Thread_FAKE_Heal_Big_Ships hit") local ship_loc = big_ship.Get_Position() local healed_ship = Create_Generic_Object(big_ship.Get_Type().Get_Name(),ship_loc,empire_player) healed_ship.Teleport_And_Face(big_ship) big_ship.Despawn() end Heal_Bay_Is_Now_Clear(my_bay_number) end function Find_First_Open_Bay() if TestValid(shipyard01) and (bool_sy01_hf01_taken == false) then bool_sy01_hf01_taken = true JoeMessage("bool_sy01_hf01_taken = true") return sy01_healbay01 elseif TestValid(shipyard01) and (bool_sy01_hf02_taken == false) then bool_sy01_hf02_taken = true JoeMessage("bool_sy01_hf02_taken = true") return sy01_healbay02 elseif TestValid(shipyard01) and (bool_sy01_hf03_taken == false) then bool_sy01_hf03_taken = true JoeMessage("bool_sy01_hf03_taken = true") return sy01_healbay03 elseif TestValid(shipyard01) and (bool_sy01_hf04_taken == false) then bool_sy01_hf04_taken = true JoeMessage("bool_sy01_hf04_taken = true") return sy01_healbay04 elseif TestValid(shipyard02) and (bool_sy02_hf01_taken == false) then bool_sy02_hf01_taken = true JoeMessage("bool_sy02_hf01_taken = true") return sy02_healbay01 elseif TestValid(shipyard02) and (bool_sy02_hf02_taken == false) then bool_sy02_hf02_taken = true JoeMessage("bool_sy02_hf02_taken = true") return sy02_healbay02 elseif TestValid(shipyard03) and (bool_sy03_hf01_taken == false) then bool_sy03_hf01_taken = true JoeMessage("bool_sy03_hf01_taken = true") return sy03_healbay01 elseif TestValid(shipyard03) and (bool_sy03_hf02_taken == false) then bool_sy03_hf02_taken = true JoeMessage("bool_sy03_hf02_taken = true") return sy03_healbay02 elseif TestValid(shipyard04) and (bool_sy04_hf01_taken == false) then bool_sy04_hf01_taken = true JoeMessage("bool_sy04_hf01_taken = true") return sy04_healbay01 elseif TestValid(shipyard05) and (bool_sy05_hf01_taken == false) then bool_sy05_hf01_taken = true JoeMessage("bool_sy05_hf01_taken = true") return sy05_healbay01 else --MessageBox("damaged ship cannot find any open healbays") JoeMessage("damaged ship cannot find any open healbays") return nil end end function Thread_Monitor_Healing(info_list) local damaged_ship = info_list[1] local my_bay_number = info_list[2] local my_shipyard_number = info_list[3] --damaged_ship.Stop() while TestValid(damaged_ship) and (damaged_ship.Get_Hull() < 1) do if not TestValid(my_shipyard_number) then break end Sleep(1) end --ship is healed...releasing to the AI if TestValid(damaged_ship) then damaged_ship.Prevent_AI_Usage(false) end --give clearance for next ship to use your healing bay if TestValid(my_shipyard_number) then Heal_Bay_Is_Now_Clear(my_bay_number) end end function Heal_Bay_Is_Now_Clear(heal_bay) if (heal_bay == sy01_healbay01) then bool_sy01_hf01_taken = false --MessageBox("bool_sy01_hf01_taken = false") JoeMessage("bool_sy01_hf01_taken = false") return elseif (heal_bay == sy01_healbay02) then bool_sy01_hf02_taken = false --MessageBox("bool_sy01_hf02_taken = false") JoeMessage("bool_sy01_hf02_taken = false") return elseif (heal_bay == sy01_healbay03) then bool_sy01_hf03_taken = false --MessageBox("bool_sy01_hf03_taken = false") JoeMessage("bool_sy01_hf03_taken = false") return elseif (heal_bay == sy01_healbay04) then bool_sy01_hf04_taken = false --MessageBox("bool_sy01_hf04_taken = false") JoeMessage("bool_sy01_hf04_taken = false") return elseif (heal_bay == sy02_healbay01) then bool_sy02_hf01_taken = false JoeMessage("bool_sy02_hf01_taken = false") return elseif (heal_bay == sy02_healbay02) then bool_sy02_hf02_taken = false JoeMessage("bool_sy02_hf02_taken = false") return elseif (heal_bay == sy03_healbay01) then bool_sy03_hf01_taken = false JoeMessage("bool_sy03_hf01_taken = false") return elseif (heal_bay == sy03_healbay02) then bool_sy03_hf02_taken = false JoeMessage("bool_sy03_hf02_taken = false") return elseif (heal_bay == sy04_healbay01) then bool_sy04_hf01_taken = false JoeMessage("bool_sy04_hf01_taken = false") return elseif (heal_bay == sy05_healbay01) then bool_sy05_hf01_taken = false JoeMessage("bool_sy05_hf01_taken = false") return end end --******************************************************************************* --******jdg below are the scripts and prox events used to capture/destroy the starbases --******and the Eclipse --******************************************************************************* function PROX_Boarding_Shuttles(prox_obj, trigger_obj) --if shuttles_in_use[prox_obj] then -- return --end --if starbase_in_use[trigger_obj] then -- return --end --if trigger_obj.Get_Type().Get_Name() == "EMPIRE_STAR_BASE_5" then --starbase_in_use[trigger_obj] = true --shuttles_in_use[prox_obj] = true --if trigger_obj == starbase_01 and bool_capturing_starbase01 == true then -- return --elseif trigger_obj == starbase_01 then -- bool_capturing_starbase01 = true -- Create_Thread("Thread_Shuttle_Approaching_Starbase01", prox_obj) -- prox_obj.Cancel_Event_Object_In_Range(PROX_Boarding_Shuttles) -- return --end --if trigger_obj == starbase_02 and bool_capturing_starbase02 == true then -- return --elseif trigger_obj == starbase_02 then -- bool_capturing_starbase02 = true -- Create_Thread("Thread_Shuttle_Approaching_Starbase02", prox_obj) -- prox_obj.Cancel_Event_Object_In_Range(PROX_Boarding_Shuttles) -- return --end --if trigger_obj == starbase_03 and bool_capturing_starbase03 == true then -- return --elseif trigger_obj == starbase_03 then -- bool_capturing_starbase03 = true -- Create_Thread("Thread_Shuttle_Approaching_Starbase03", prox_obj) -- prox_obj.Cancel_Event_Object_In_Range(PROX_Boarding_Shuttles) -- return --end if trigger_obj.Get_Type().Get_Name() == "ECLIPSE_SUPER_STAR_DESTROYER" then --shuttles_in_use[prox_obj] = true local thread_info = {} thread_info[1] = prox_obj thread_info[2] = trigger_obj if bool_capturing_eclipse == false then bool_capturing_eclipse = true Create_Thread("Thread_Shuttle_Approaching_Eclipse", thread_info) prox_obj.Cancel_Event_Object_In_Range(PROX_Boarding_Shuttles) end end end function Thread_Shuttle_Approaching_Starbase01(shuttle) if shuttle == shuttle01 then bool_shuttle01_being_expended = true elseif shuttle == shuttle02 then bool_shuttle02_being_expended = true elseif shuttle == shuttle03 then bool_shuttle03_being_expended = true end Story_Event("UM12_SHUTTLE_APPROACHING_STARBASE") --set the shuttle invulnerable and send it at the starbase to fake a boarding shuttle.Set_Cannot_Be_Killed(true) shuttle.Prevent_AI_Usage(true) shuttle.Set_Selectable(false) shuttle.Move_To(starbase_01) Sleep(8) shuttle.Despawn() local random_starbase_event = GameRandom(1,2) if random_starbase_event == 1 then Sleep(10) if TestValid(starbase_01) then Story_Event("UM12_SHUTTLE_DESTROYS_STARBASE") Sleep(5) starbase_01.Take_Damage(100000) end else Sleep(10) if TestValid(starbase_01) then Story_Event("UM12_SHUTTLE_CAPTURES_STARBASE") Sleep(2) starbase_01.Change_Owner(underworld_player) --remove radar blips here starbase_01.Highlight(false) Remove_Radar_Blip("starbase_01_blip") end end end function Thread_Shuttle_Approaching_Starbase02(shuttle) if shuttle == shuttle01 then bool_shuttle01_being_expended = true elseif shuttle == shuttle02 then bool_shuttle02_being_expended = true elseif shuttle == shuttle03 then bool_shuttle03_being_expended = true end Story_Event("UM12_SHUTTLE_APPROACHING_STARBASE") --set the shuttle invulnerable and send it at the starbase to fake a boarding shuttle.Set_Cannot_Be_Killed(true) shuttle.Prevent_AI_Usage(true) shuttle.Set_Selectable(false) shuttle.Move_To(starbase_02) Sleep(8) shuttle.Despawn() local random_starbase_event = GameRandom(1,2) if random_starbase_event == 1 then Sleep(10) if TestValid(starbase_02) then Story_Event("UM12_SHUTTLE_DESTROYS_STARBASE") Sleep(5) starbase_02.Take_Damage(100000) end else Sleep(10) if TestValid(starbase_02) then Story_Event("UM12_SHUTTLE_CAPTURES_STARBASE") Sleep(2) starbase_02.Change_Owner(underworld_player) --remove radar blips here starbase_02.Highlight(false) Remove_Radar_Blip("starbase_02_blip") end end end function Thread_Shuttle_Approaching_Starbase03(shuttle) if shuttle == shuttle01 then bool_shuttle01_being_expended = true elseif shuttle == shuttle02 then bool_shuttle02_being_expended = true elseif shuttle == shuttle03 then bool_shuttle03_being_expended = true end Story_Event("UM12_SHUTTLE_APPROACHING_STARBASE") --set the shuttle invulnerable and send it at the starbase to fake a boarding shuttle.Set_Cannot_Be_Killed(true) shuttle.Prevent_AI_Usage(true) shuttle.Set_Selectable(false) shuttle.Move_To(starbase_03) Sleep(8) shuttle.Despawn() local random_starbase_event = GameRandom(1,2) if random_starbase_event == 1 then Sleep(10) if TestValid(starbase_03) then Story_Event("UM12_SHUTTLE_DESTROYS_STARBASE") Sleep(5) starbase_03.Take_Damage(100000) end else Sleep(10) if TestValid(starbase_03) then Story_Event("UM12_SHUTTLE_CAPTURES_STARBASE") Sleep(2) starbase_03.Change_Owner(underworld_player) --remove radar blips here starbase_03.Highlight(false) Remove_Radar_Blip("starbase_03_blip") end end end function Thread_Shuttle_Approaching_Starbase(thread_info) ThreadValue.Set("starbase", thread_info[2]) ThreadValue.Set("shuttle", thread_info[1]) starbase = ThreadValue.Get("starbase"); shuttle = ThreadValue.Get("shuttle"); if shuttle == shuttle01 then bool_shuttle01_being_expended = true elseif shuttle == shuttle02 then bool_shuttle02_being_expended = true elseif shuttle == shuttle03 then bool_shuttle03_being_expended = true end Story_Event("UM12_SHUTTLE_APPROACHING_STARBASE") --set the shuttle invulnerable and send it at the starbase to fake a boarding shuttle.Set_Cannot_Be_Killed(true) shuttle.Prevent_AI_Usage(true) shuttle.Set_Selectable(false) shuttle.Move_To(starbase) Sleep(8) shuttle.Despawn() if starbase == starbase_01 then local random_starbase_01_event = GameRandom(1,2) if random_starbase_01_event == 1 then Sleep(10) if TestValid(starbase) then Story_Event("UM12_SHUTTLE_DESTROYS_STARBASE") Sleep(5) starbase.Take_Damage(100000) end else Sleep(10) if TestValid(starbase) then Story_Event("UM12_SHUTTLE_CAPTURES_STARBASE") Sleep(2) starbase.Change_Owner(underworld_player) --remove radar blips here starbase_01.Highlight(false) Remove_Radar_Blip("starbase_01_blip") end end elseif starbase == starbase_02 then local random_starbase_02_event = GameRandom(1,2) if random_starbase_02_event == 1 then Sleep(10) if TestValid(starbase) then Story_Event("UM12_SHUTTLE_DESTROYS_STARBASE") Sleep(5) starbase.Take_Damage(100000) end else Sleep(10) if TestValid(starbase) then Story_Event("UM12_SHUTTLE_CAPTURES_STARBASE") Sleep(2) starbase.Change_Owner(underworld_player) --remove radar blips here starbase_02.Highlight(false) Remove_Radar_Blip("starbase_02_blip") end end elseif starbase == starbase_03 then local random_starbase_03_event = GameRandom(1,2) if random_starbase_03_event == 1 then Sleep(10) if TestValid(starbase) then Story_Event("UM12_SHUTTLE_DESTROYS_STARBASE") Sleep(5) starbase.Take_Damage(100000) end else Sleep(10) if TestValid(starbase) then Story_Event("UM12_SHUTTLE_CAPTURES_STARBASE") Sleep(2) starbase.Change_Owner(underworld_player) --remove radar blips here starbase_03.Highlight(false) Remove_Radar_Blip("starbase_03_blip") end end end end function Thread_Shuttle_Approaching_Eclipse(thread_info) local shuttle = thread_info[1] local eclipse = thread_info[2] Story_Event("UM12_SHUTTLE_APPROACHING_THE_ECLIPSE") shuttle.Set_Cannot_Be_Killed(true) shuttle.Prevent_AI_Usage(true) shuttle.Set_Selectable(false) shuttle.Move_To(eclipse) Sleep(8) shuttle.Despawn() Sleep(15) if TestValid(eclipse) then Story_Event("UM12_SHUTTLE_CAPTURES_ECLIPSE") Sleep(2) eclipse.Change_Owner(underworld_player) eclipse.Prevent_Opportunity_Fire(false) --remove radar blips here --eclipse.Highlight(false) Remove_Radar_Blip("eclipse_blip") bool_eclipse_captured = true eclipse.Set_Cannot_Be_Killed(false) Create_Thread("Thread_Monitor_Eclipse_FiringStatus") Create_Thread("Thread_DeathMonitor_Eclipse") end Sleep(180) end function Thread_Monitor_Eclipse_FiringStatus() if TestValid(eclipse) then while not eclipse.Is_Ability_Ready("SUPER_LASER") do Sleep(1) end while bool_first_shot_fired == false do if eclipse.Has_Attack_Target() == true then --MessageBox("Player is firing the Eclipse") target = eclipse.Get_Attack_Target() --if target == empire_super_stardestroyer[1] then --if target.Get_Type().Get_Name() == "UM12_SUPER_STAR_DESTROYER" then --if target.Get_Type().Get_Name() == "Executor_Super_Star_Destroyer" then Create_Thread("Thread_Midtro_Cinematic_Eclipse_Fires", target) bool_first_shot_fired = true break --else --MessageBox("detected fire event ... not registering super star destroyer") --end end Sleep(1) end end end function Thread_Midtro_Cinematic_Eclipse_Fires(target) if not TestValid(eclipse) or not TestValid(target) then MessageBox("UM12 Midtro is missing key objects...aborting...let Joe G know immediately!") end target.Set_Cannot_Be_Killed(true) Fade_Screen_Out(0) Suspend_AI(1) Lock_Controls(1) Letter_Box_In(0) Start_Cinematic_Camera() Cancel_Fast_Forward() Sleep(0.25) midtro_camera_start = Find_Hint("MARKER_GENERIC_RED", "midtro-camera-start") midtro_look_start = Find_Hint("MARKER_GENERIC_RED", "midtro-look-start") midtro_camera_move01 = Find_Hint("MARKER_GENERIC_RED", "midtro-camera-move01") Fade_Screen_In(0.25) Transition_Cinematic_Camera_Key(midtro_camera_move01, 0, 0, 0, 0, 0, 0, 0, 0) Transition_Cinematic_Target_Key(midtro_look_start, 0, 0, 0, 0, 0, 0, 0, 0) Transition_Cinematic_Camera_Key(target, 10, 2000, 25, -135, 1, target, 0, 0) Sleep(2.5) target.Set_Cannot_Be_Killed(false) --Transition_Cinematic_Camera_Key(target, 5, 1300, 1300, 100, 0, target, 0, 0) Transition_Cinematic_Target_Key(target, 4, 0, 0, 0, 0, target, 0, 0) Sleep(8) End_Cinematic_Camera() Letter_Box_Out(1) Lock_Controls(0) Suspend_AI(0) Fade_Screen_In(1) end function Callback_Empire_SuperStarDestroyer_Arrives(new_list) Create_Thread("Thread_Empire_SuperStarDestroyer_Arrives", new_list) bool_okay_to_reinforce_empire = false end function Thread_Empire_SuperStarDestroyer_Arrives(new_list) super_destroyer = new_list[1] if not TestValid(super_destroyer) then MessagBox("cannot find super star destroyer") end if TestValid(eclipse) and TestValid(super_destroyer) then --super_destroyer.Attack_Move(eclipse) --super_destroyer.Attack_Target(eclipse) --mark the destroyer and start monitoring its status super_destroyer.Highlight(true, 100) Add_Radar_Blip(super_destroyer, "super_destroyer_blip") Create_Thread("Thread_DeathMonitor_SuperStarDestroyer", super_destroyer) local goto_flag = Find_Hint("MARKER_GENERIC_GREEN", "goto-superstardestroyer") BlockOnCommand(super_destroyer.Move_To(goto_flag)) MessageBox("super_destroyer.Attack_Target(eclipse)") super_destroyer.Attack_Target(eclipse) block_table = {} end end function Callback_Empire_StarDestroyer01_Arrives(new_list) local goto_flag = Find_Hint("MARKER_GENERIC_GREEN", "goto-stardestroyer01") destroyer = new_list[1] local thread_info = {} thread_info[1] = destroyer thread_info[2] = goto_flag Create_Thread("Thread_Empire_StarDestroyer_Arrives", thread_info) end function Callback_Empire_StarDestroyer02_Arrives(new_list) local goto_flag = Find_Hint("MARKER_GENERIC_GREEN", "goto-stardestroyer02") destroyer = new_list[1] local thread_info = {} thread_info[1] = destroyer thread_info[2] = goto_flag Create_Thread("Thread_Empire_StarDestroyer_Arrives", thread_info) end function Callback_Empire_StarDestroyer03_Arrives(new_list) local goto_flag = Find_Hint("MARKER_GENERIC_GREEN", "goto-stardestroyer03") destroyer = new_list[1] local thread_info = {} thread_info[1] = destroyer thread_info[2] = goto_flag Create_Thread("Thread_Empire_StarDestroyer_Arrives", thread_info) end function Thread_Empire_StarDestroyer_Arrives(thread_info) destroyer = thread_info[1] goto_flag = thread_info[2] BlockOnCommand(destroyer.Move_To(goto_flag)) --MessageBox("Destroyer in position...releasing to AI") --destroyer.Prevent_AI_Usage(false) --destroyer.Guard_Target(goto_flag.Get_Position()) if TestValid(destroyer) and TestValid(eclipse) then destroyer.Attack_Target(eclipse) end end --******************************************************************************* --****** Cinematics --******************************************************************************* --******************************************************************************* --******************* DEATH MONITORS ********************************** --******************************************************************************* function Thread_DeathMonitor_TyberZann() while TestValid(tyber) do Sleep(3) end Story_Event("UM12_PLAYER_LOSES_TYBER_KILLED") end function Thread_DeathMonitor_BoardingShuttle01() while TestValid(shuttle01) do Sleep(1) end if bool_capturing_eclipse == true then return end if bool_shuttle01_being_expended == true then num_shuttles_destroyed = num_shuttles_destroyed + 1 if num_shuttles_destroyed == 1 then Story_Event("UM12_ONE_SHUTTLE_EXPENDED") elseif num_shuttles_destroyed == 2 then Story_Event("UM12_TWO_SHUTTLES_EXPENDED") else Story_Event("UM12_PLAYER_LOSES_ALL_SHUTTLES_EXPENDED") end else num_shuttles_destroyed = num_shuttles_destroyed + 1 if num_shuttles_destroyed == 1 then Story_Event("UM12_ONE_SHUTTLE_DESTROYED") elseif num_shuttles_destroyed == 2 then Story_Event("UM12_TWO_SHUTTLES_DESTROYED") else Story_Event("UM12_PLAYER_LOSES_ALL_SHUTTLES_DESTROYED") end end end function Thread_DeathMonitor_BoardingShuttle02() while TestValid(shuttle02) do Sleep(1) end if bool_capturing_eclipse == true then return end if bool_shuttle02_being_expended == true then num_shuttles_destroyed = num_shuttles_destroyed + 1 if num_shuttles_destroyed == 1 then Story_Event("UM12_ONE_SHUTTLE_EXPENDED") elseif num_shuttles_destroyed == 2 then Story_Event("UM12_TWO_SHUTTLES_EXPENDED") else Story_Event("UM12_PLAYER_LOSES_ALL_SHUTTLES_EXPENDED") end else num_shuttles_destroyed = num_shuttles_destroyed + 1 if num_shuttles_destroyed == 1 then Story_Event("UM12_ONE_SHUTTLE_DESTROYED") elseif num_shuttles_destroyed == 2 then Story_Event("UM12_TWO_SHUTTLES_DESTROYED") else Story_Event("UM12_PLAYER_LOSES_ALL_SHUTTLES_DESTROYED") end end end function Thread_DeathMonitor_BoardingShuttle03() while TestValid(shuttle03) do Sleep(1) end if bool_capturing_eclipse == true then return end if bool_shuttle03_being_expended == true then num_shuttles_destroyed = num_shuttles_destroyed + 1 if num_shuttles_destroyed == 1 then Story_Event("UM12_ONE_SHUTTLE_EXPENDED") elseif num_shuttles_destroyed == 2 then Story_Event("UM12_TWO_SHUTTLES_EXPENDED") else Story_Event("UM12_PLAYER_LOSES_ALL_SHUTTLES_EXPENDED") end else num_shuttles_destroyed = num_shuttles_destroyed + 1 if num_shuttles_destroyed == 1 then Story_Event("UM12_ONE_SHUTTLE_DESTROYED") elseif num_shuttles_destroyed == 2 then Story_Event("UM12_TWO_SHUTTLES_DESTROYED") else Story_Event("UM12_PLAYER_LOSES_ALL_SHUTTLES_DESTROYED") end end end function Thread_DeathMonitor_Starbase01() while TestValid(starbase_01) and (starbase_01.Get_Owner() ~= underworld_player) do Sleep(3) end bool_starbase01_active = false --MessageBox("bool_starbase01_active = false") end function Thread_DeathMonitor_Starbase02() while TestValid(starbase_02) and (starbase_02.Get_Owner() ~= underworld_player) do Sleep(3) end bool_starbase02_active = false --MessageBox("bool_starbase02_active = false") end function Thread_DeathMonitor_Starbase03() while TestValid(starbase_03) and (starbase_03.Get_Owner() ~= underworld_player) do Sleep(3) end bool_starbase03_active = false --MessageBox("bool_starbase03_active = false") end function Thread_DeathMonitor_Starbases() while (bool_starbase01_active == true) or (bool_starbase02_active == true) or (bool_starbase03_active == true) do Sleep(3) end if bool_capturing_eclipse == true then Story_Event("UM12_STARBASE_OBJECTIVE_COMPLETE_NO_REBELS") else Story_Event("UM12_STARBASE_OBJECTIVE_COMPLETE_WITH_REBELS") end end function Thread_DeathMonitor_Shipyard01() while TestValid(shipyard01) do Sleep(1) end --shipyard is dead...delete correspoding heal flags if TestValid(sy01_healbay01) then sy01_healbay01.Despawn() end if TestValid(sy01_healbay02) then sy01_healbay02.Despawn() end if TestValid(sy01_healbay03) then sy01_healbay03.Despawn() end if TestValid(sy01_healbay04) then sy01_healbay04.Despawn() end end function Thread_DeathMonitor_Shipyard02() while TestValid(shipyard02) do Sleep(1) end --shipyard is dead...delete correspoding heal flags if TestValid(sy02_healbay01) then sy02_healbay01.Despawn() end if TestValid(sy02_healbay02) then sy02_healbay02.Despawn() end end function Thread_DeathMonitor_Shipyard03() while TestValid(shipyard03) do Sleep(1) end --shipyard is dead...delete correspoding heal flags if TestValid(sy03_healbay01) then sy03_healbay01.Despawn() end if TestValid(sy03_healbay02) then sy03_healbay02.Despawn() end end function Thread_DeathMonitor_Shipyard04() while TestValid(shipyard04) do Sleep(1) end --shipyard is dead...delete correspoding heal flags if TestValid(sy04_healbay01) then sy04_healbay01.Despawn() end end function Thread_DeathMonitor_Shipyard05() while TestValid(shipyard05) do Sleep(1) end --shipyard is dead...delete correspoding heal flags if TestValid(sy05_healbay01) then sy05_healbay01.Despawn() end end function Thread_DeathMonitor_Shipyards() while(true) do local all_shipyards_destroyed = true shipyard_list = Find_All_Objects_Of_Type("EMPIRE_DOCK_DESTROYABLE") for i, shipyard in pairs(shipyard_list) do if TestValid(shipyard) then all_shipyards_destroyed = false end end if all_shipyards_destroyed == true then --all shipyards are destroyed...complete the objective Story_Event("UM12_SHIPYARD_OBJECTIVE_COMPLETE") end Sleep(5) end end function Thread_DeathMonitor_RebelHero() while TestValid(rebel_hero) do Sleep(3) end bool_rebels_attacking = false --rebel hero destroyed, complete the objective Story_Event("UM12_OBJECTIVE_COMPLETE_DESTROY_REBEL_HERO") Sleep(5) rebel_forces = Find_All_Objects_Of_Type(rebel_player) for i, rebel in pairs(rebel_forces) do if TestValid(rebel) then if rebel.Is_Category("Fighter") or rebel.Is_Category("Corvette") or rebel.Is_Category("Frigate") or rebel.Is_Category("Capital") then if rebel.Get_Type().Get_Name() == "DUMMY_BARRAGE_TARGET" then --do nothing else rebel.Hyperspace_Away() end end end end end function Thread_DeathMonitor_Eclipse() --put health warning here while TestValid(eclipse) do local eclipse_current_health = eclipse.Get_Hull() --MessageBox("eclipse_current_health is %d", eclipse_current_health) if TestValid(eclipse) and eclipse_current_health < 0.9 then MessageBox("current eclipse_current_health is %d", eclipse_current_health) Story_Event("UM12_ECLIPSE_BEING_ATTACKED") break end Sleep(3) end while TestValid(eclipse) do --MessageBox("Thread_DeathMonitor_Eclipse entering into wait mode.") Sleep(3) end Story_Event("UM12_PLAYER_LOSES_ECLIPSE_DESTROYED") end function Thread_DeathMonitor_SuperStarDestroyer(destroyer) while TestValid(destroyer) do Sleep(3) end --super star destroyer has been killed, clear objective Story_Event("UM12_OBJECTIVE_COMPLETE_DESTROY_SUPER_STAR_DESTROYER") --MessageBox("Super Star Destroyer dead...Rebels retreat...player wins!") end function JoeMessage(...) --JoeMessage("current current_spawn_times is %d", current_spawn_times) _CustomScriptMessage("JoeLog.txt", string.format(unpack(arg))) end