2016 lines
67 KiB
Lua
2016 lines
67 KiB
Lua
-- $Id: //depot/Projects/StarWars_Steam/FOC/Run/Data/Scripts/Story/Story_Underworld_ActII_M07_LAND.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_ActII_M07_LAND.lua $
|
||
--
|
||
-- Original Author: Dan Etter
|
||
--
|
||
-- $Author: Brian_Hayes $
|
||
--
|
||
-- $Change: 637819 $
|
||
--
|
||
-- $DateTime: 2017/03/22 10:16:16 $
|
||
--
|
||
-- $Revision: #1 $
|
||
--
|
||
--/////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
||
require("PGStoryMode")
|
||
require("PGSpawnUnits")
|
||
require("PGStateMachine")
|
||
|
||
--
|
||
-- Definitions -- This function is called once when the script is first created.
|
||
--
|
||
function Definitions()
|
||
|
||
StoryModeEvents =
|
||
{
|
||
Underworld_A02M07_Begin = State_Underworld_A02M07_Begin,
|
||
Underworld_A02M07_Speech_Line_00_Remove_Text = State_Underworld_A02M07_Speech_Line_00_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_01_Remove_Text = State_Underworld_A02M07_Speech_Line_01_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_02_Remove_Text = State_Underworld_A02M07_Speech_Line_02_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_03_Remove_Text = State_Underworld_A02M07_Speech_Line_03_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_04_Remove_Text = State_Underworld_A02M07_Speech_Line_04_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_05_Remove_Text = State_Underworld_A02M07_Speech_Line_05_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_06_Remove_Text = State_Underworld_A02M07_Speech_Line_06_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_07_Remove_Text = State_Underworld_A02M07_Speech_Line_07_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_08_Remove_Text = State_Underworld_A02M07_Speech_Line_08_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_09_Remove_Text = State_Underworld_A02M07_Speech_Line_09_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_10_Remove_Text = State_Underworld_A02M07_Speech_Line_10_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_11_Remove_Text = State_Underworld_A02M07_Speech_Line_11_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_12_Remove_Text = State_Underworld_A02M07_Speech_Line_12_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_13_Remove_Text = State_Underworld_A02M07_Speech_Line_13_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_14_Remove_Text = State_Underworld_A02M07_Speech_Line_14_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_15_Remove_Text = State_Underworld_A02M07_Speech_Line_15_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_16_Remove_Text = State_Underworld_A02M07_Speech_Line_16_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_17_Remove_Text = State_Underworld_A02M07_Speech_Line_17_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_18_Remove_Text = State_Underworld_A02M07_Speech_Line_18_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_20_Remove_Text = State_Underworld_A02M07_Speech_Line_20_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_21_Remove_Text = State_Underworld_A02M07_Speech_Line_21_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_22_Remove_Text = State_Underworld_A02M07_Speech_Line_22_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_24_Remove_Text = State_Underworld_A02M07_Speech_Line_24_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_25_Remove_Text = State_Underworld_A02M07_Speech_Line_25_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_26_Remove_Text = State_Underworld_A02M07_Speech_Line_26_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_27_Remove_Text = State_Underworld_A02M07_Speech_Line_27_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_28_Remove_Text = State_Underworld_A02M07_Speech_Line_28_Remove_Text,
|
||
UM07_VaderCine_Choking_SFX_Over = State_UM07_VaderCine_Choking_SFX_Over,
|
||
Underworld_A02M07_Speech_Line_29_Remove_Text = State_Underworld_A02M07_Speech_Line_29_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_30_Remove_Text = State_Underworld_A02M07_Speech_Line_30_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_31_Remove_Text = State_Underworld_A02M07_Speech_Line_31_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_32_Remove_Text = State_Underworld_A02M07_Speech_Line_32_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_33_Remove_Text = State_Underworld_A02M07_Speech_Line_33_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_34_Remove_Text = State_Underworld_A02M07_Speech_Line_34_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_35_Remove_Text = State_Underworld_A02M07_Speech_Line_35_Remove_Text,
|
||
Underworld_A02M07_Speech_Line_36_Remove_Text = State_Underworld_A02M07_Speech_Line_36_Remove_Text,
|
||
|
||
}
|
||
|
||
|
||
empire_reinforcement_list_0 = {
|
||
"Imperial_Stormtrooper_Squad",
|
||
}
|
||
|
||
empire_reinforcement_list_1 = {
|
||
"Imperial_Heavy_Scout_Squad"
|
||
}
|
||
|
||
empire_reinforcement_list_2 = {
|
||
"Imperial_Heavy_Scout_Squad"
|
||
}
|
||
|
||
empire_reinforcement_list_3 = {
|
||
"Imperial_Armor_Group"
|
||
}
|
||
|
||
reinforcement_table_list = {
|
||
empire_reinforcement_list_0,
|
||
empire_reinforcement_list_1,
|
||
empire_reinforcement_list_2,
|
||
empire_reinforcement_list_3
|
||
}
|
||
|
||
--jdg cheat flag to skip intro cine
|
||
flag_skip_intro = false
|
||
flag_no_enemy_reinforcements = false
|
||
|
||
underworld = Find_Player("Underworld")
|
||
empire = Find_Player("Empire")
|
||
rebel = Find_Player("Rebel")
|
||
neutral = Find_Player("Neutral")
|
||
hostile = Find_Player("Hostile")
|
||
|
||
mission_started = false
|
||
|
||
droids_returned = 0
|
||
current_droids_alive = 5
|
||
droid_warning = false
|
||
droid_objective_achieved = false
|
||
|
||
var_empire_reinforcement_timer = 90
|
||
|
||
outposts_tripped = 0
|
||
outpost_objective_achieved = false
|
||
|
||
objectives_achieved = 0
|
||
final_objective_triggered = false
|
||
|
||
vader_landed = false
|
||
|
||
reinforcement_table = 0
|
||
reinforce_countdown = -1
|
||
reinforced_once = false
|
||
reinforced_units = 0
|
||
|
||
empire_map_reveal = nil
|
||
|
||
end_cinematic_started = false
|
||
create_droid_lost_message = true
|
||
|
||
cloud_city_cars = {}
|
||
cloud_cars_in_use = {}
|
||
|
||
outpost_list = {}
|
||
outposts_discovered = {}
|
||
|
||
bool_Gas_Droid00_Spawned = false
|
||
bool_Gas_Droid01_Spawned = false
|
||
bool_Gas_Droid02_Spawned = false
|
||
bool_Gas_Droid03_Spawned = false
|
||
bool_Gas_Droid04_Spawned = false
|
||
|
||
|
||
--jdg
|
||
bool_first_security_outpost = true
|
||
|
||
gas_droid_full = {}
|
||
end
|
||
|
||
function State_Underworld_A02M07_Begin (message)
|
||
if message == OnEnter then
|
||
JoeMessage("######################################UM07 START*************************")
|
||
|
||
tyber = Find_First_Object("TYBER_ZANN_PASSENGER")
|
||
urai = Find_First_Object("URAI_FEN")
|
||
ig88 = Find_First_Object("IG-88")
|
||
empire_map_reveal = FogOfWar.Reveal_All(empire)
|
||
|
||
cin_trooper_0 = Find_Hint("STORMTROOPER","cintrooper0")
|
||
cin_trooper_1 = Find_Hint("STORMTROOPER","cintrooper1")
|
||
cin_trooper_0.Suspend_Locomotor(true)
|
||
cin_trooper_0.Prevent_All_Fire(true)
|
||
cin_trooper_1.Suspend_Locomotor(true)
|
||
cin_trooper_1.Prevent_All_Fire(true)
|
||
|
||
reinforce_1 = Find_Hint("REINFORCEMENT_POINT_PLUS1_CAP","reinforce1")
|
||
reinforce_2 = Find_Hint("REINFORCEMENT_POINT_PLUS2_CAP","reinforce2")
|
||
reinforce_3 = Find_Hint("REINFORCEMENT_POINT_PLUS3_CAP","reinforce3")
|
||
reinforce_4 = Find_Hint("REINFORCEMENT_POINT_PLUS4_CAP","reinforce4")
|
||
|
||
point_guard_list = Find_All_Objects_With_Hint("pointguard")
|
||
for i, point_guard in pairs(point_guard_list) do
|
||
point_guard.Prevent_AI_Usage(true)
|
||
--point_guard.Guard_Target(point_guard.Get_Position())
|
||
end
|
||
|
||
refinery01 = Find_Hint("UM07_CLOUDCITY_REFINERY","refinery01")
|
||
refinery02 = Find_Hint("UM07_CLOUDCITY_REFINERY","refinery02")
|
||
refinery03 = Find_Hint("UM07_CLOUDCITY_REFINERY","refinery03")
|
||
refinery04 = Find_Hint("UM07_CLOUDCITY_REFINERY","refinery04")
|
||
refinery05 = Find_Hint("UM07_CLOUDCITY_REFINERY","refinery05")
|
||
refinery06 = Find_Hint("UM07_CLOUDCITY_REFINERY","refinery06")
|
||
refinery07 = Find_Hint("UM07_CLOUDCITY_REFINERY","refinery07")
|
||
refinery08 = Find_Hint("UM07_CLOUDCITY_REFINERY","refinery08")
|
||
|
||
--set refineries into idle anims
|
||
refinery_list = Find_All_Objects_Of_Type("UM07_CLOUDCITY_REFINERY")
|
||
for i, refinery in pairs(refinery_list) do
|
||
refinery.Play_Animation("Cinematic", true, 0) --Cinematic_00 <20> full state
|
||
refinery.Set_Cannot_Be_Killed(true)
|
||
--refinery.Highlight(true)
|
||
end
|
||
--List of the refineries animation states
|
||
--Cinematic_00 <20> full state
|
||
--Cinematic_01 <20> draining animation
|
||
--Cinematic_02 <20> empty state
|
||
--Cinematic_03 <20> filling state
|
||
|
||
--turbo-laser definition stuff
|
||
turbo_power = Find_Hint("POWER_GENERATOR_E","turbo-power")
|
||
|
||
outpost1 = Find_Hint("PROP_BESPIN_BUILDING_A","outpost01")
|
||
outpost2 = Find_Hint("PROP_BESPIN_BUILDING_A","outpost02")
|
||
outpost3 = Find_Hint("PROP_BESPIN_BUILDING_A","outpost03")
|
||
outpost4 = Find_Hint("PROP_BESPIN_BUILDING_A","outpost04")
|
||
|
||
outpost_list[1] = outpost1
|
||
outpost_list[2] = outpost2
|
||
outpost_list[3] = outpost3
|
||
outpost_list[4] = outpost4
|
||
|
||
|
||
|
||
tyber_shuttle = Find_Hint("STORY_TRIGGER_ZONE_00","shuttleland")
|
||
|
||
Register_Prox(refinery01, PROX_Gas_Refinery, 75, underworld)
|
||
Register_Prox(refinery02, PROX_Gas_Refinery, 75, underworld)
|
||
Register_Prox(refinery03, PROX_Gas_Refinery, 75, underworld)
|
||
Register_Prox(refinery04, PROX_Gas_Refinery, 75, underworld)
|
||
Register_Prox(refinery05, PROX_Gas_Refinery, 75, underworld)
|
||
Register_Prox(refinery06, PROX_Gas_Refinery, 75, underworld)
|
||
Register_Prox(refinery07, PROX_Gas_Refinery, 75, underworld)
|
||
Register_Prox(refinery08, PROX_Gas_Refinery, 75, underworld)
|
||
|
||
server = Find_Hint("DROID_INTERFACE_STATION","server")
|
||
Register_Prox(server, PROX_Bespin_Server, 50, underworld)
|
||
|
||
Register_Prox(outpost1, PROX_Guard_Outpost, 100, underworld)
|
||
Register_Prox(outpost2, PROX_Guard_Outpost, 100, underworld)
|
||
Register_Prox(outpost3, PROX_Guard_Outpost, 100, underworld)
|
||
Register_Prox(outpost4, PROX_Guard_Outpost, 100, underworld)
|
||
|
||
Register_Prox(tyber_shuttle, PROX_Droid_Return, 95, underworld)
|
||
Register_Prox(tyber_shuttle, PROX_Hero_Return, 300, underworld)
|
||
|
||
server_prox_obj = Find_Hint("STORY_TRIGGER_ZONE_00","serverprox")
|
||
Register_Prox(server_prox_obj, PROX_Server_Notification, 175, underworld)
|
||
|
||
--hide all the preplaced flyover anim objects
|
||
cloud_city_cars = Find_All_Objects_Of_Type("UM07_CLOUD_CITY_FLYOVER")
|
||
for i, cloud_city_car in pairs(cloud_city_cars) do
|
||
cloud_city_car.Hide(true)
|
||
end
|
||
|
||
Create_Thread("Thread_Cloud_Car_Flyovers")
|
||
|
||
|
||
--making the terminals invulneralbe to prevnet A class bugs when they get destroyed.
|
||
terminal_list = Find_All_Objects_Of_Type("UM07_INTERFACE_NODE")
|
||
for i, terminal in pairs(terminal_list) do
|
||
terminal.Set_Selectable(false)
|
||
terminal.Make_Invulnerable(true)
|
||
terminal.Set_Cannot_Be_Killed(true)
|
||
|
||
--MessageBox("terminal set to invulnerable")
|
||
end
|
||
|
||
|
||
if flag_skip_intro == false then
|
||
current_cinematic_thread = Create_Thread("Intro_Cinematic")
|
||
|
||
else
|
||
--stuff that has to happen even if cine is skipped
|
||
shuttle_land_loc = Find_Hint("STORY_TRIGGER_ZONE_00","shuttleland")
|
||
tyber_temp_loc = Find_Hint("STORY_TRIGGER_ZONE_00","temploc")
|
||
unit_spawn_loc = Find_Hint("STORY_TRIGGER_ZONE_00","unitspawn")
|
||
tyber_goto_0 = Find_Hint("STORY_TRIGGER_ZONE_00","tybergoto0")
|
||
tyber = Find_First_Object("TYBER_ZANN_PASSENGER")
|
||
urai_kill_spot = Find_Hint("STORY_TRIGGER_ZONE_00","uraikill")
|
||
|
||
|
||
if TestValid(tyber) then
|
||
tyber.Teleport_And_Face(tyber_goto_0)
|
||
tyber.Prevent_All_Fire(true)
|
||
--MessageBox("Tyber Reinforcement found, teleporting")
|
||
else
|
||
MessageBox("No Tyber Reinforcement found, spawning and teleporting")
|
||
--tyber_spawn = Spawn_Unit(Find_Object_Type("TYBER_ZANN_PASSENGER"), tyber_temp_loc, underworld)
|
||
tyber_spawn = Spawn_Unit(Find_Object_Type("TYBER_ZANN_PASSENGER"), tyber_goto_0, underworld)
|
||
tyber = tyber_spawn[1]
|
||
tyber.Prevent_All_Fire(true)
|
||
end
|
||
|
||
urai_spawn = Spawn_From_Reinforcement_Pool(Find_Object_Type("Urai_Fen_Team"), urai_kill_spot, underworld)
|
||
urai = urai_spawn[1]
|
||
|
||
spawn_ig88 = Spawn_Unit(Find_Object_Type("IG-88"), Find_Hint("STORY_TRIGGER_ZONE_00","unitspawn"), underworld)
|
||
spawn_ig88[1].Teleport_And_Face(Find_Hint("STORY_TRIGGER_ZONE_00","unitspawn"))
|
||
ig_88 = spawn_ig88[1]
|
||
|
||
|
||
droid_goto_0 = Find_Hint("STORY_TRIGGER_ZONE_00","droidgoto0")
|
||
droid_goto_1 = Find_Hint("STORY_TRIGGER_ZONE_00","droidgoto1")
|
||
droid_goto_2 = Find_Hint("STORY_TRIGGER_ZONE_00","droidgoto2")
|
||
droid_goto_3 = Find_Hint("STORY_TRIGGER_ZONE_00","droidgoto3")
|
||
droid_goto_4 = Find_Hint("STORY_TRIGGER_ZONE_00","droidgoto4")
|
||
|
||
Create_Thread("Spawn_Gas_Droid", droid_goto_0)
|
||
Create_Thread("Spawn_Gas_Droid", droid_goto_1)
|
||
Create_Thread("Spawn_Gas_Droid", droid_goto_2)
|
||
Create_Thread("Spawn_Gas_Droid", droid_goto_3)
|
||
Create_Thread("Spawn_Gas_Droid", droid_goto_4)
|
||
|
||
|
||
Fade_Screen_In(2)
|
||
--MessageBox("Exit_Cinematic")
|
||
Create_Thread("Exit_Cinematic")
|
||
Master_Volume_Restore()
|
||
|
||
|
||
|
||
--Create_Thread("Thread_DeathMonitor_TurboPower")
|
||
|
||
end
|
||
|
||
end
|
||
end
|
||
|
||
|
||
|
||
function Thread_DeathMonitor_TurboPower()
|
||
while TestValid(turbo_power) do
|
||
Sleep(3)
|
||
end
|
||
|
||
turbo_laser_list = Find_All_Objects_Of_Type("E_GROUND_TURBOLASER_TOWER")
|
||
for i, turbo_laser in pairs(turbo_laser_list) do
|
||
turbo_laser.Prevent_All_Fire(true)
|
||
end
|
||
end
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
function Reinforce_Empire_Units()
|
||
--function ReinforceList(type_list, entry_marker, player, allow_ai_usage, delete_after_scenario, ignore_reinforcement_rules, callback)
|
||
while (true) do
|
||
empire_reinforcement_loc_list = {}
|
||
reinforcement_table = 0
|
||
if TestValid(reinforce_1) then
|
||
if reinforce_1.Get_Owner().Get_Faction_Name() == "EMPIRE" then
|
||
table.insert(empire_reinforcement_loc_list, reinforce_1)
|
||
reinforcement_table = reinforcement_table + 1
|
||
end
|
||
end
|
||
if TestValid(reinforce_2) then
|
||
if reinforce_2.Get_Owner().Get_Faction_Name() == "EMPIRE" then
|
||
table.insert(empire_reinforcement_loc_list, reinforce_2)
|
||
reinforcement_table = reinforcement_table + 1
|
||
end
|
||
end
|
||
if TestValid(reinforce_3) then
|
||
if reinforce_3.Get_Owner().Get_Faction_Name() == "EMPIRE" then
|
||
table.insert(empire_reinforcement_loc_list, reinforce_3)
|
||
reinforcement_table = reinforcement_table + 1
|
||
end
|
||
end
|
||
if TestValid(reinforce_4) then
|
||
if reinforce_4.Get_Owner().Get_Faction_Name() == "EMPIRE" then
|
||
table.insert(empire_reinforcement_loc_list, reinforce_4)
|
||
reinforcement_table = reinforcement_table + 1
|
||
end
|
||
end
|
||
--MessageBox("Empire controlls %d reinforcement points", reinforcement_table)
|
||
if reinforcement_table <= 0 then
|
||
MessageBox("Empire controlls no reinforcement points...breaking out of loop")
|
||
break
|
||
end
|
||
|
||
if reinforcement_table > 0 then
|
||
reinforce_loc_num = GameRandom(1, reinforcement_table)
|
||
reinforcement_location = empire_reinforcement_loc_list[reinforce_loc_num]
|
||
|
||
--current_list = reinforcement_table_list[GameRandom(1, 4)]
|
||
|
||
--MessageBox("current reinforced_units is %d", reinforced_units)
|
||
|
||
if reinforced_units <= 6 then
|
||
current_list = reinforcement_table_list[GameRandom(1, 1)]
|
||
ReinforceList(current_list, reinforcement_location, empire, false, true, true, Callback_Hunt_Underworld)
|
||
|
||
elseif reinforced_units <= 12 and reinforced_units > 6 then
|
||
current_list = reinforcement_table_list[GameRandom(1, 2)]
|
||
ReinforceList(current_list, reinforcement_location, empire, false, true, true, Callback_Hunt_Underworld)
|
||
var_empire_reinforcement_timer = 60
|
||
|
||
elseif reinforced_units <= 18 and reinforced_units > 12 then
|
||
current_list = reinforcement_table_list[GameRandom(1, 3)]
|
||
ReinforceList(current_list, reinforcement_location, empire, false, true, true, Callback_Hunt_Underworld)
|
||
elseif reinforced_units <= 24 and reinforced_units > 18 then
|
||
current_list = reinforcement_table_list[GameRandom(1, 4)]
|
||
ReinforceList(current_list, reinforcement_location, empire, false, true, true, Callback_Hunt_Underworld)
|
||
|
||
end
|
||
|
||
--reinforce_countdown = 400
|
||
reinforced_units = reinforced_units + 1
|
||
Sleep(var_empire_reinforcement_timer)
|
||
end
|
||
end
|
||
end
|
||
|
||
function Garrison_Prox(unit_list)
|
||
for k, unit in pairs(unit_list) do
|
||
if TestValid(unit) then
|
||
if unit.Is_Category("Infantry") and unit.Get_Owner().Get_Faction_Name() == "EMPIRE" then
|
||
--MessageBox("Attaching Prox to %s!", unit.Get_Type().Get_Name())
|
||
Register_Prox(unit, PROX_Juggernaut_Load, 250, empire)
|
||
end
|
||
if unit.Get_Type().Get_Name() == "HAV_JUGGERNAUT" then
|
||
unit.Suspend_Locomotor(true)
|
||
Create_Thread("Move_Jug", unit)
|
||
Register_Attacked_Event(unit, Juggernaut_Attacked_Callback)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
function Move_Jug(juggernaut)
|
||
garrison_list = juggernaut.Get_Garrisoned_Units()
|
||
garrison_count = table.getn(garrison_list)
|
||
if garrison_count >= 3 then
|
||
juggernaut.Suspend_Locomotor(false)
|
||
Create_Thread("Hunt_Underworld", juggernaut)
|
||
--MessageBox("Hunting Underworld! Total Garrisons = %d", garrison_count)
|
||
else
|
||
--MessageBox("Not enough garrisons to hunt! Total Garrisons = %d", garrison_count)
|
||
Sleep(5)
|
||
Create_Thread("Move_Jug", juggernaut)
|
||
end
|
||
end
|
||
|
||
function Juggernaut_Attacked_Callback(fell_under_attack, most_deadly_enemy, victim)
|
||
--MessageBox("Juggernaut Attacked!")
|
||
victim_garrison_list = victim.Get_Garrisoned_Units()
|
||
victim_garrison_count = table.getn(victim_garrison_list)
|
||
if victim_garrison_count > 0 then
|
||
for k, unit in pairs(victim_garrison_list) do
|
||
if TestValid(unit) then
|
||
unit.Leave_Garrison()
|
||
--unit.Attack_Move(most_deadly_enemy[1].Get_Position())
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
function Callback_Hunt_Underworld(new_list)
|
||
for k, unit in pairs(new_list) do
|
||
if TestValid(unit) then
|
||
Create_Thread("Hunt_Underworld", unit)
|
||
end
|
||
end
|
||
end
|
||
|
||
function Hunt_Underworld(attacker)
|
||
|
||
while TestValid(attacker) and attacker.Get_Owner() ~= underworld do
|
||
closest_enemy = Find_Nearest(attacker, underworld, true)
|
||
if TestValid(closest_enemy) then
|
||
attacker.Attack_Move(closest_enemy)
|
||
end
|
||
Sleep(5)
|
||
end
|
||
end
|
||
|
||
function Story_Mode_Service()
|
||
|
||
if not droid_objective_achieved and droids_returned >= 8 then
|
||
droid_objective_achieved = true
|
||
--MessageBox("All 8 Droids returned.")
|
||
Story_Event("TRIGGER_MISSION_07_DROIDS_RETURNED")
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_22")
|
||
--Urai Fen: Tyber, we've collected enough gas. All droids are returning to the shuttle.
|
||
objectives_achieved = objectives_achieved + 1
|
||
|
||
--GAS_COLLECTION_DROID
|
||
gas_droids_list = Find_All_Objects_Of_Type("GAS_COLLECTION_DROID")
|
||
for i, gas_droid in pairs(gas_droids_list) do
|
||
Create_Thread("Thread_Droids_Return_To_Shuttle", gas_droid)
|
||
end
|
||
|
||
|
||
end
|
||
|
||
if not outpost_objective_achieved and outposts_tripped >= 4 then
|
||
outpost_objective_achieved = true
|
||
--MessageBox("All Outposts Visited.")
|
||
Story_Event("TRIGGER_MISSION_07_EVIDENCE_PLANTED")
|
||
|
||
objectives_achieved = objectives_achieved + 1
|
||
end
|
||
|
||
if not final_objective_triggered and objectives_achieved >= 3 then
|
||
final_objective_triggered = true
|
||
--MessageBox("3 objectives triggered.")
|
||
|
||
Story_Event("TRIGGER_MISSION_07_FINAL_OBJECTIVE")
|
||
end
|
||
|
||
if mission_started and not end_cinematic_started then
|
||
if not TestValid(tyber) then
|
||
Story_Event("TYBER_KILLED")
|
||
end
|
||
if not TestValid(ig88) then
|
||
Story_Event("IG88_KILLED")
|
||
end
|
||
if not TestValid(urai) then
|
||
Story_Event("URAI_KILLED")
|
||
end
|
||
|
||
droids_list = Find_All_Objects_Of_Type("GAS_COLLECTION_DROID")
|
||
--full_droids_list = Find_All_Objects_Of_Type("GAS_COLLECTION_DROID_FULL")
|
||
|
||
current_droids_count = table.getn(droids_list)
|
||
if current_droids_count < current_droids_alive then
|
||
--Story_Event("TEXT_UW_ACT02_M07_19")
|
||
if not droid_objective_achieved then
|
||
if create_droid_lost_message then
|
||
Create_Thread("Droid_Lost_Message")
|
||
end
|
||
end
|
||
end
|
||
|
||
if not droid_objective_achieved and current_droids_alive <= 2 and not droid_warning then
|
||
droid_warning = true
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_20")
|
||
end
|
||
if not droid_objective_achieved and current_droids_alive == 0 and not droid_objective_achieved then
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_21")
|
||
Story_Event("ALL_DROIDS_DEAD")
|
||
end
|
||
end
|
||
|
||
if not vader_landed and objectives_achieved == 2 then
|
||
vader_landed = true
|
||
Sleep(10)
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_24")
|
||
Create_Thread("Reinforce_Vader")
|
||
end
|
||
|
||
if objectives_achieved == 3 then
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_30")
|
||
end
|
||
|
||
tyber = Find_First_Object("TYBER_ZANN_PASSENGER")
|
||
urai = Find_First_Object("URAI_FEN")
|
||
ig88 = Find_First_Object("IG-88")
|
||
end
|
||
|
||
function Thread_Droids_Return_To_Shuttle(local_droid)
|
||
if TestValid(local_droid) then
|
||
local_droid.Set_Selectable(false)
|
||
BlockOnCommand(local_droid.Move_To(unit_spawn_loc))
|
||
local_droid.Despawn()
|
||
|
||
end
|
||
end
|
||
|
||
function Droid_Lost_Message()
|
||
create_droid_lost_message = false
|
||
Sleep(1)
|
||
|
||
droids_list = Find_All_Objects_Of_Type("GAS_COLLECTION_DROID")
|
||
--full_droids_list = Find_All_Objects_Of_Type("GAS_COLLECTION_DROID_FULL")
|
||
current_droids_count = table.getn(droids_list)
|
||
if current_droids_count < current_droids_alive then
|
||
Story_Event("TEXT_UW_ACT02_M07_19")
|
||
end
|
||
|
||
current_droids_alive = current_droids_count
|
||
create_droid_lost_message = true
|
||
end
|
||
|
||
function Reinforce_Vader()
|
||
Sleep (10)
|
||
Fade_Screen_Out(1)
|
||
Create_Thread("Vader_Midtro")
|
||
end
|
||
|
||
function State_Underworld_A02M07_Speech_Line_24_Remove_Text(message)
|
||
if message == OnEnter then
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_25")
|
||
end
|
||
end
|
||
|
||
function PROX_Gas_Refinery(prox_obj, trigger_obj)
|
||
if not droid_objective_achieved then
|
||
if trigger_obj.Get_Type().Get_Name() == "GAS_COLLECTION_DROID" then
|
||
if gas_droid_full[trigger_obj] then
|
||
return
|
||
end
|
||
|
||
prox_obj.Cancel_Event_Object_In_Range(PROX_Gas_Refinery)
|
||
--MessageBox("Droid tripped Refinery prox event.")
|
||
|
||
prox_obj.Highlight(false)
|
||
Create_Thread("Remove_Refinery_Blip", prox_obj)
|
||
|
||
Create_Thread("Regenerate_Refinery_Gas", prox_obj)
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_15")
|
||
--Gas Cargo Droid: Acquiring gas<61>
|
||
local thread_info = {}
|
||
thread_info[1] = trigger_obj
|
||
thread_info[2] = prox_obj
|
||
|
||
Create_Thread("Fill_Droid_Up", thread_info)
|
||
end
|
||
end
|
||
end
|
||
|
||
function Fill_Droid_Up(thread_info)
|
||
if not droid_objective_achieved then
|
||
local droid = thread_info[1]
|
||
local refinery = thread_info[2]
|
||
|
||
droid.Set_Cannot_Be_Killed(true)
|
||
droid.Set_Selectable(false)
|
||
--Sleep(6)
|
||
--play refinery filling up anim here
|
||
--List of the refineries animation states
|
||
--Cinematic_00 <20> full state
|
||
--Cinematic_01 <20> draining animation
|
||
--Cinematic_02 <20> empty state
|
||
--Cinematic_03 <20> filling state
|
||
--BlockOnCommand(refinery.Play_Animation("Cinematic", false, 1))
|
||
--Sleep(6)
|
||
--Play_Refinery_Empties_Animation(refinery)
|
||
--Play_Droid_Fills_Animation(droid)
|
||
|
||
Create_Thread("Thread_Play_Refinery_Empties_Animation", refinery)
|
||
Create_Thread("Thread_Play_Droid_Fills_Animation", droid)
|
||
|
||
--if TestValid(droid) then
|
||
--full_droid = Spawn_Unit(Find_Object_Type("GAS_COLLECTION_DROID_FULL"), droid, underworld)
|
||
--full_droid[1].Teleport_And_Face(droid)
|
||
--droid.Despawn()
|
||
--refinery.Play_Animation("Cinematic", true, 2)
|
||
--Story_Event("TEXT_SPEECH_UW_ACT02_M07_16")
|
||
--end
|
||
end
|
||
end
|
||
|
||
function Thread_Play_Refinery_Empties_Animation(local_refinery)
|
||
--local_refinery.Play_Animation("Cinematic", false, 1)
|
||
BlockOnCommand(local_refinery.Play_Animation("Cinematic", false, 1))
|
||
|
||
if TestValid(local_refinery) then
|
||
local_refinery.Play_Animation("Cinematic", true, 2)
|
||
end
|
||
end
|
||
|
||
function Thread_Play_Droid_Fills_Animation(local_droid)
|
||
BlockOnCommand(local_droid.Play_Animation("Cinematic", false, 4)) --should be anim of bot filling up with gas
|
||
|
||
if TestValid(local_droid) then
|
||
local_droid.Play_Animation("Cinematic", false, 1) -- should be anim of idle with gas
|
||
local_droid.Set_Cannot_Be_Killed(false)
|
||
local_droid.Set_Selectable(true)
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_16")
|
||
|
||
gas_droid_full[local_droid] = true
|
||
end
|
||
end
|
||
|
||
function Remove_Refinery_Blip(refinery)
|
||
if refinery == refinery01 then
|
||
Remove_Radar_Blip("refinery1_blip")
|
||
end
|
||
if refinery == refinery02 then
|
||
Remove_Radar_Blip("refinery2_blip")
|
||
end
|
||
if refinery == refinery03 then
|
||
Remove_Radar_Blip("refinery3_blip")
|
||
end
|
||
if refinery == refinery04 then
|
||
Remove_Radar_Blip("refinery4_blip")
|
||
end
|
||
if refinery == refinery05 then
|
||
Remove_Radar_Blip("refinery5_blip")
|
||
end
|
||
if refinery == refinery06 then
|
||
Remove_Radar_Blip("refinery6_blip")
|
||
end
|
||
if refinery == refinery07 then
|
||
Remove_Radar_Blip("refinery7_blip")
|
||
end
|
||
if refinery == refinery08 then
|
||
Remove_Radar_Blip("refinery8_blip")
|
||
end
|
||
end
|
||
|
||
function Add_Refinery_Blip(refinery)
|
||
if refinery == refinery01 then
|
||
refinery.Highlight(true)
|
||
--Add_Radar_Blip(refinery, "refinery1_blip")
|
||
end
|
||
if refinery == refinery02 then
|
||
refinery.Highlight(true)
|
||
--Add_Radar_Blip(refinery, "refinery2_blip")
|
||
end
|
||
if refinery == refinery03 then
|
||
refinery.Highlight(true)
|
||
--Add_Radar_Blip(refinery, "refinery3_blip")
|
||
end
|
||
if refinery == refinery04 then
|
||
refinery.Highlight(true)
|
||
--Add_Radar_Blip(refinery, "refinery4_blip")
|
||
end
|
||
if refinery == refinery05 then
|
||
refinery.Highlight(true)
|
||
--Add_Radar_Blip(refinery, "refinery5_blip")
|
||
end
|
||
if refinery == refinery06 then
|
||
refinery.Highlight(true)
|
||
--Add_Radar_Blip(refinery, "refinery6_blip")
|
||
end
|
||
if refinery == refinery07 then
|
||
refinery.Highlight(true)
|
||
--Add_Radar_Blip(refinery, "refinery7_blip")
|
||
end
|
||
if refinery == refinery08 then
|
||
refinery.Highlight(true)
|
||
--Add_Radar_Blip(refinery, "refinery8_blip")
|
||
end
|
||
end
|
||
|
||
function Regenerate_Refinery_Gas(refinery)
|
||
--Sleep(300)
|
||
|
||
Sleep(30)
|
||
|
||
--List of the refineries animation states
|
||
--Cinematic_00 <20> full state
|
||
--Cinematic_01 <20> draining animation
|
||
--Cinematic_02 <20> empty state
|
||
--Cinematic_03 <20> filling state
|
||
|
||
BlockOnCommand(refinery.Play_Animation("Cinematic", false, 3)) --Cinematic_03 <20> filling state
|
||
refinery.Play_Animation("Cinematic", true, 0) --Cinematic_00 <20> full state
|
||
|
||
Create_Thread("Add_Refinery_Blip", refinery)
|
||
Register_Prox(refinery, PROX_Gas_Refinery, 75, underworld)
|
||
end
|
||
|
||
function PROX_Droid_Return(prox_obj, trigger_obj)
|
||
if not droid_objective_achieved then
|
||
if trigger_obj.Get_Type().Get_Name() == "GAS_COLLECTION_DROID" then
|
||
if not gas_droid_full[trigger_obj] then
|
||
return
|
||
end
|
||
|
||
prox_obj.Cancel_Event_Object_In_Range(PROX_Droid_Return)
|
||
|
||
trigger_obj.Set_Selectable(false)
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_17")
|
||
--Gas Cargo Droid: Transferring gas<61>
|
||
--MessageBox("Droid tripped shuttle prox event, droids returned = %d", droids_returned)
|
||
Create_Thread("Gas_Droid_Returned", trigger_obj)
|
||
end
|
||
|
||
gas_droid_full[trigger_obj] = false
|
||
end
|
||
end
|
||
|
||
function Gas_Droid_Returned(full_droid)
|
||
full_droid.Set_Cannot_Be_Killed(true)
|
||
--MessageBox("function Gas_Droid_Returned(full_droid) HIT!!")
|
||
--Sleep(6)
|
||
|
||
if TestValid(full_droid) then
|
||
--empty_droid = Spawn_Unit(Find_Object_Type("GAS_COLLECTION_DROID"), full_droid, underworld)
|
||
--empty_droid[1].Teleport_And_Face(full_droid)
|
||
--full_droid.Despawn()
|
||
BlockOnCommand(full_droid.Play_Animation("Cinematic", false, 5)) --should be anim of bot emptying the gas
|
||
full_droid.Play_Animation("Cinematic", true, 3) --should be move anim with no gas
|
||
full_droid.Set_Selectable(true)
|
||
|
||
droids_returned = droids_returned + 1
|
||
|
||
if droids_returned == 1 then
|
||
--MessageBox("droids_returned == 1")
|
||
Story_Event("UM07_SEVEN_CONTAINERS_LEFT")
|
||
elseif droids_returned == 2 then
|
||
Story_Event("UM07_SIX_CONTAINERS_LEFT")
|
||
elseif droids_returned == 3 then
|
||
Story_Event("UM07_FIVE_CONTAINERS_LEFT")
|
||
elseif droids_returned == 4 then
|
||
Story_Event("UM07_FOUR_CONTAINERS_LEFT")
|
||
elseif droids_returned == 5 then
|
||
Story_Event("UM07_THREE_CONTAINERS_LEFT")
|
||
elseif droids_returned == 6 then
|
||
Story_Event("UM07_TWO_CONTAINERS_LEFT")
|
||
elseif droids_returned == 7 then
|
||
Story_Event("UM07_ONE_CONTAINER_LEFT")
|
||
elseif droids_returned == 8 then
|
||
|
||
end
|
||
|
||
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_18")
|
||
Register_Prox(tyber_shuttle, PROX_Droid_Return, 95, underworld)
|
||
end
|
||
end
|
||
|
||
function PROX_Server_Notification(prox_obj, trigger_obj)
|
||
--if trigger_obj.Get_Type().Get_Name() == "IG-88" then
|
||
if trigger_obj.Get_Owner() == underworld then
|
||
prox_obj.Cancel_Event_Object_In_Range(PROX_Server_Notification)
|
||
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_12")
|
||
|
||
server = Find_Hint("DROID_INTERFACE_STATION","server")
|
||
server.Highlight(true)
|
||
Add_Radar_Blip(server, "server_blip")
|
||
FogOfWar.Reveal(underworld, server, 250,250)
|
||
end
|
||
end
|
||
|
||
function PROX_Bespin_Server(prox_obj, trigger_obj)
|
||
if trigger_obj.Get_Type().Get_Name() == "IG-88" then
|
||
prox_obj.Cancel_Event_Object_In_Range(PROX_Bespin_Server)
|
||
--MessageBox("IG-88 tripped Server prox event.")
|
||
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_13")
|
||
--ig88.Suspend_Locomotor(true)
|
||
Create_Thread("IG88_Acquire_Data", prox_obj)
|
||
end
|
||
end
|
||
|
||
function IG88_Acquire_Data(server)
|
||
--Sleep(10)
|
||
if TestValid(ig88) then
|
||
server_flag = Find_Hint("MARKER_GENERIC_YELLOW","server-flag")
|
||
|
||
ig88.Set_Cannot_Be_Killed(true)
|
||
ig88.Set_Selectable(false)
|
||
|
||
|
||
if not TestValid(server_flag) then
|
||
MessageBox("not TestValid(server_flag)")
|
||
else
|
||
BlockOnCommand(ig88.Move_To(server_flag))
|
||
ig88.Turn_To_Face(server)
|
||
end
|
||
|
||
server.Highlight(false)
|
||
Remove_Radar_Blip("server_blip")
|
||
|
||
Sleep(1)
|
||
Story_Event("TRIGGER_MISSION_07_SERVER_HACKED")
|
||
Sleep(1)
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_14")
|
||
ig88.Set_Cannot_Be_Killed(false)
|
||
ig88.Set_Selectable(true)
|
||
|
||
objectives_achieved = objectives_achieved + 1
|
||
end
|
||
end
|
||
|
||
function PROX_Guard_Outpost(prox_obj, trigger_obj)
|
||
--MessageBox("Prox Tripped by: %s", trigger_obj.Get_Type().Get_Name())
|
||
if trigger_obj.Get_Type().Get_Name() == "TYBER_ZANN_PASSENGER" then
|
||
prox_obj.Cancel_Event_Object_In_Range(PROX_Guard_Outpost)
|
||
|
||
outposts_discovered[prox_obj] = true
|
||
|
||
local thread_info = {}
|
||
thread_info[1] = trigger_obj
|
||
thread_info[2] = prox_obj
|
||
Create_Thread("Thread_Guard_Outpost", thread_info)
|
||
|
||
if bool_first_security_outpost == false then
|
||
prox_obj.Highlight(false)
|
||
end
|
||
|
||
end
|
||
end
|
||
|
||
function Thread_Guard_Outpost(thread_info)
|
||
local local_tyber = thread_info[1]
|
||
local local_outpost = thread_info[2]
|
||
|
||
if local_outpost == outpost1 then
|
||
terminal_flag= Find_Hint("MARKER_GENERIC_YELLOW","outpost01-flag")
|
||
outpost_console = Find_Hint("MARKER_GENERIC_GREEN","outpost01-console")
|
||
elseif local_outpost == outpost2 then
|
||
terminal_flag= Find_Hint("MARKER_GENERIC_YELLOW","outpost02-flag")
|
||
outpost_console = Find_Hint("MARKER_GENERIC_GREEN","outpost02-console")
|
||
elseif local_outpost == outpost3 then
|
||
terminal_flag= Find_Hint("MARKER_GENERIC_YELLOW","outpost03-flag")
|
||
outpost_console = Find_Hint("MARKER_GENERIC_GREEN","outpost03-console")
|
||
else
|
||
terminal_flag= Find_Hint("MARKER_GENERIC_YELLOW","outpost04-flag")
|
||
outpost_console = Find_Hint("MARKER_GENERIC_GREEN","outpost04-console")
|
||
end
|
||
|
||
if bool_first_security_outpost == true then
|
||
bool_first_security_outpost = false
|
||
--MessageBox("Story_Event(UM07_TYBER_IDENTIFIES_GUARD_OUTPOSTS)")
|
||
Story_Event("UM07_TYBER_IDENTIFIES_GUARD_OUTPOSTS")
|
||
end
|
||
|
||
|
||
|
||
--prox_obj.Highlight(false)
|
||
--Create_Thread("Remove_Outpost_Blip", prox_obj)
|
||
local_tyber.Set_Cannot_Be_Killed(true)
|
||
local_tyber.Set_Selectable(false)
|
||
|
||
if not TestValid(local_tyber) then
|
||
MessageBox("not local_tyber")
|
||
end
|
||
|
||
--find nearest interface node
|
||
terminal = Find_Nearest(local_tyber, "UM07_INTERFACE_NODE")
|
||
--terminal_flag= Find_Nearest(local_tyber, "UM07_INTERFACE_NODE_FLAG")
|
||
--terminal = Find_Nearest(local_tyber, empire)
|
||
--if not TestValid(terminal) then
|
||
-- MessageBox("not TestValid(terminal)")
|
||
--else
|
||
BlockOnCommand(local_tyber.Move_To(terminal_flag))
|
||
--BlockOnCommand(local_tyber.Move_To(terminal))
|
||
--BlockOnCommand(local_tyber.Turn_To_Face(terminal))
|
||
BlockOnCommand(local_tyber.Turn_To_Face(outpost_console))
|
||
BlockOnCommand(local_tyber.Play_Animation("Cinematic", false, 0)) --Cinematic_00 <20> tyber planting evidence anim
|
||
--end
|
||
|
||
|
||
|
||
|
||
|
||
--Sleep(5)
|
||
outposts_tripped = outposts_tripped + 1
|
||
if outposts_tripped == 1 then
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_08")
|
||
Sleep(3)
|
||
Story_Event("UM07_ADD_OBJECTIVE_TYBER_HACKS_GUARD_OUTPOSTS")
|
||
elseif outposts_tripped == 2 then
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_09")
|
||
Sleep(1)
|
||
Story_Event("UM07_TYBER_IDENTIFIES_GUARD_OUTPOSTS_UPDATE_OBJECTIVE_01")
|
||
elseif outposts_tripped == 3 then
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_10")
|
||
Sleep(1)
|
||
Story_Event("UM07_TYBER_IDENTIFIES_GUARD_OUTPOSTS_UPDATE_OBJECTIVE_02")
|
||
elseif outposts_tripped == 4 then
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_11")
|
||
end
|
||
|
||
local_tyber.Set_Cannot_Be_Killed(false)
|
||
local_tyber.Set_Selectable(true)
|
||
|
||
if outposts_tripped == 1 then
|
||
--outpost_list = Find_All_Objects_Of_Type("PROP_BESPIN_BUILDING_A")
|
||
for i, outpost in pairs(outpost_list) do
|
||
if TestValid(outpost) and outposts_discovered[outpost] ~= true then
|
||
outpost.Highlight(true, 100)
|
||
Add_Radar_Blip(outpost, "outpost_blip")
|
||
end
|
||
end
|
||
|
||
Sleep(10)
|
||
|
||
for i, outpost in pairs(outpost_list) do
|
||
--if TestValid(outpost) and outposts_discovered[outpost] ~= true then
|
||
if TestValid(outpost) then
|
||
Remove_Radar_Blip("outpost_blip")
|
||
end
|
||
end
|
||
end
|
||
|
||
end
|
||
|
||
function PROX_Hero_Return(prox_obj, trigger_obj)
|
||
if final_objective_triggered then
|
||
if trigger_obj.Get_Type().Get_Name() == "TYBER_ZANN_PASSENGER" or
|
||
trigger_obj.Get_Type().Get_Name() == "URAI_FEN" or
|
||
trigger_obj.Get_Type().Get_Name() == "IG-88" then
|
||
if TestValid (tyber) then
|
||
tyber_dist = tyber.Get_Distance(prox_obj)
|
||
end
|
||
if TestValid (urai) then
|
||
urai_dist = urai.Get_Distance(prox_obj)
|
||
end
|
||
if TestValid (ig88) then
|
||
ig88_dist = ig88.Get_Distance(prox_obj)
|
||
end
|
||
|
||
--MessageBox("Hero Prox triggered. tyber_dist = %d, urai_dist = %d, ig88_dist = %d.", tyber_dist, urai_dist, ig88_dist)
|
||
|
||
if tyber_dist <= 275 and
|
||
urai_dist <= 275 and
|
||
ig88_dist <= 275 then
|
||
prox_obj.Cancel_Event_Object_In_Range(PROX_Hero_Return)
|
||
--MessageBox("All Heroes in range! Sending Victory Trigger!")
|
||
Story_Event("TRIGGER_MISSION_07_HEROES_AT_SHUTTLE")
|
||
Create_Thread("End_Cinematic")
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
function Spawn_Gas_Droid(obj)
|
||
spawn_droid = Spawn_Unit(Find_Object_Type("GAS_COLLECTION_DROID"), Find_Hint("STORY_TRIGGER_ZONE_00","unitspawn"), underworld)
|
||
spawn_droid[1].Teleport_And_Face(Find_Hint("STORY_TRIGGER_ZONE_00","unitspawn"))
|
||
droid = spawn_droid[1]
|
||
|
||
|
||
|
||
droid.Move_To(obj)
|
||
|
||
|
||
end
|
||
|
||
function PROX_Droid_Reached_Dest(prox_obj, trigger_obj)
|
||
if trigger_obj.Get_Type().Get_Name() == "GAS_COLLECTION_DROID" then
|
||
prox_obj.Cancel_Event_Object_In_Range(PROX_Droid_Reached_Dest)
|
||
|
||
Create_Thread("Thread_Droid_Reached_Dest", trigger_obj)
|
||
|
||
end
|
||
end
|
||
|
||
function Thread_Droid_Reached_Dest(droid)
|
||
droid.Stop()
|
||
BlockOnCommand(droid.Turn_To_Face(Find_Hint("STORY_TRIGGER_ZONE_00","unitspawn")))
|
||
|
||
BlockOnCommand(droid.Play_Animation("Cinematic", false, 0)) --should be idle anim of bot with no gas
|
||
droid.Play_Animation("Cinematic", true, 0) --should be idle anim of bot with no gas
|
||
end
|
||
|
||
-- ##########################################################################################
|
||
-- Cinematic functions
|
||
-- ##########################################################################################
|
||
|
||
function Intro_Cinematic()
|
||
shuttle_land_loc = Find_Hint("STORY_TRIGGER_ZONE_00","shuttleland")
|
||
tyber_temp_loc = Find_Hint("STORY_TRIGGER_ZONE_00","temploc")
|
||
unit_spawn_loc = Find_Hint("STORY_TRIGGER_ZONE_00","unitspawn")
|
||
tyber_goto_0 = Find_Hint("STORY_TRIGGER_ZONE_00","tybergoto0")
|
||
tyber = Find_First_Object("TYBER_ZANN_PASSENGER")
|
||
|
||
|
||
|
||
if TestValid(tyber) then
|
||
tyber.Teleport_And_Face(tyber_temp_loc)
|
||
tyber.Prevent_All_Fire(true)
|
||
--MessageBox("Tyber Reinforcement found, teleporting")
|
||
else
|
||
MessageBox("No Tyber Reinforcement found, spawning and teleporting")
|
||
tyber_spawn = Spawn_Unit(Find_Object_Type("TYBER_ZANN_PASSENGER"), tyber_temp_loc, underworld)
|
||
tyber = tyber_spawn[1]
|
||
tyber.Prevent_All_Fire(true)
|
||
end
|
||
|
||
|
||
|
||
Suspend_AI(1)
|
||
Lock_Controls(1)
|
||
Start_Cinematic_Camera()
|
||
Letter_Box_In(0)
|
||
Fade_Screen_In(2)
|
||
|
||
Cancel_Fast_Forward()
|
||
|
||
-- ***********Opening Shot***************
|
||
|
||
-- Create_Cinematic_Transport(object_type_name, player_id, transport_pos, zangle, phase_mode, anim_delta, idle_time, persist,hint)
|
||
opening_cinematic_transport = Create_Cinematic_Transport("Shuttle_Tyderium_Landing_Cinematic", underworld.Get_ID(), shuttle_land_loc, 60, 1, 0, 20, 1)
|
||
|
||
-- Set_Cinematic_Camera_Key(target_pos, x_dist, y_pitch, z_yaw, euler, pobj, use_object_rotation, cinematic_animation)
|
||
--Set_Cinematic_Camera_Key(transport, 400, 90, 0, 1, transport, 0, 1)
|
||
Set_Cinematic_Camera_Key(shuttle_land_loc, 3000, 8, 120, 1, 0, 0, 1)
|
||
--Set_Cinematic_Target_Key(target_pos, xoffset_dist, yoffset_pitch, zoffset_yaw, angles?, attach_object, use_object_rotation, cinematic_animation)
|
||
Set_Cinematic_Target_Key(opening_cinematic_transport, 0, 0, 0, 0, opening_cinematic_transport, 0, 1)
|
||
|
||
Transition_Cinematic_Camera_Key(shuttle_land_loc, 9, 400, 15, 185, 1, 0, 0, 1)
|
||
|
||
Sleep(9)
|
||
|
||
cin_trooper_0 = Find_Hint("STORMTROOPER","cintrooper0")
|
||
tyber.Teleport_And_Face(unit_spawn_loc)
|
||
urai_spawn = Spawn_From_Reinforcement_Pool(Find_Object_Type("Urai_Fen_Team"), tyber_temp_loc, underworld)
|
||
urai = urai_spawn[1]
|
||
urai.Suspend_Locomotor(true)
|
||
Allow_Localized_SFX(false)
|
||
urai.Activate_Ability("STEALTH", true)
|
||
|
||
Transition_Cinematic_Camera_Key(shuttle_land_loc, 0, 400, 40, -45, 1, 0, 1, 1)
|
||
Transition_Cinematic_Target_Key(tyber, 0, 0, 0, 0, 0, tyber, 0, 0)
|
||
tyber.Move_To(tyber_goto_0)
|
||
Transition_Cinematic_Camera_Key(tyber_goto_0, 6, 450, 25, -90, 1, 0, 1, 1)
|
||
Sleep(3)
|
||
tyber.Turn_To_Face(unit_spawn_loc)
|
||
Allow_Localized_SFX(true)
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_36")
|
||
|
||
droid_goto_0 = Find_Hint("STORY_TRIGGER_ZONE_00","droidgoto0")
|
||
droid_goto_1 = Find_Hint("STORY_TRIGGER_ZONE_00","droidgoto1")
|
||
droid_goto_2 = Find_Hint("STORY_TRIGGER_ZONE_00","droidgoto2")
|
||
droid_goto_3 = Find_Hint("STORY_TRIGGER_ZONE_00","droidgoto3")
|
||
droid_goto_4 = Find_Hint("STORY_TRIGGER_ZONE_00","droidgoto4")
|
||
|
||
Register_Prox(droid_goto_0, PROX_Droid_Reached_Dest, 5, underworld)
|
||
Register_Prox(droid_goto_1, PROX_Droid_Reached_Dest, 5, underworld)
|
||
Register_Prox(droid_goto_2, PROX_Droid_Reached_Dest, 5, underworld)
|
||
Register_Prox(droid_goto_3, PROX_Droid_Reached_Dest, 5, underworld)
|
||
Register_Prox(droid_goto_4, PROX_Droid_Reached_Dest, 5, underworld)
|
||
|
||
Create_Thread("Spawn_Gas_Droid", droid_goto_4)
|
||
bool_Gas_Droid04_Spawned = true
|
||
Sleep(2)
|
||
|
||
trooper_goto = Find_Hint("STORY_TRIGGER_ZONE_00","troopergoto")
|
||
cin_trooper_0.Suspend_Locomotor(false)
|
||
cin_trooper_0.Move_To(trooper_goto)
|
||
|
||
Create_Thread("Spawn_Gas_Droid", droid_goto_3)
|
||
bool_Gas_Droid03_Spawned = true
|
||
Sleep(2)
|
||
|
||
Sleep(2)
|
||
|
||
tyber.Turn_To_Face(cin_trooper_0)
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_00")
|
||
|
||
Create_Thread("Spawn_Gas_Droid", droid_goto_2)
|
||
bool_Gas_Droid02_Spawned = true
|
||
Sleep(2)
|
||
Create_Thread("Spawn_Gas_Droid", droid_goto_1)
|
||
bool_Gas_Droid01_Spawned = true
|
||
Sleep(2)
|
||
spawn_ig88 = Spawn_Unit(Find_Object_Type("IG-88"), Find_Hint("STORY_TRIGGER_ZONE_00","unitspawn"), underworld)
|
||
spawn_ig88[1].Teleport_And_Face(Find_Hint("STORY_TRIGGER_ZONE_00","unitspawn"))
|
||
ig_88 = spawn_ig88[1]
|
||
|
||
ig_88.Prevent_All_Fire(true)
|
||
ig_88.Move_To(Find_Hint("STORY_TRIGGER_ZONE_00","ig88goto"))
|
||
Sleep(2)
|
||
Create_Thread("Spawn_Gas_Droid", droid_goto_0)
|
||
bool_Gas_Droid00_Spawned = true
|
||
Sleep(1)
|
||
ig_88.Turn_To_Face(tyber)
|
||
|
||
end
|
||
|
||
function State_Underworld_A02M07_Speech_Line_00_Remove_Text(message)
|
||
if message == OnEnter then
|
||
|
||
--MessageBox("State_Underworld_A02M07_Speech_Line_00_Remove_Text HIT!!")
|
||
Transition_Cinematic_Camera_Key(cin_trooper_0, 0, 100, 15, 180, 1, 0, 1, 0)
|
||
Transition_Cinematic_Target_Key(tyber, 0, 0, 0, 0, 0, 0, 0, 0)
|
||
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_01")
|
||
--TYBER ZANN: You don<6F>t need to see my identification.
|
||
|
||
tyber.Play_Animation("Cinematic", false, 2) --Cinematic_02 <20> talk anim on tyber
|
||
end
|
||
end
|
||
|
||
function State_Underworld_A02M07_Speech_Line_01_Remove_Text(message)
|
||
if message == OnEnter then
|
||
|
||
--MessageBox("State_Underworld_A02M07_Speech_Line_01_Remove_Text HIT!!")
|
||
Transition_Cinematic_Camera_Key(tyber, 0, 100, 15, 0, 1, 0, 1, 0)
|
||
Transition_Cinematic_Target_Key(cin_trooper_0, 0, 0, 0, 0, 0, 0, 0, 0)
|
||
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_02")
|
||
--STORMTROOPER: This one thinks he<68>s a Jedi. And why wouldn<64>t I need to see your identification?
|
||
end
|
||
end
|
||
|
||
function State_Underworld_A02M07_Speech_Line_02_Remove_Text(message)
|
||
if message == OnEnter then
|
||
|
||
--Transition_Cinematic_Camera_Key(tyber, 0, 100, 15, 180, 1, 0, 1, 0)
|
||
--Transition_Cinematic_Target_Key(cin_trooper_0, 0, 0, 0, 0, 0, 0, 0, 0)
|
||
--MessageBox("State_Underworld_A02M07_Speech_Line_02_Remove_Text HIT!!")
|
||
|
||
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_03")
|
||
--TYBER ZANN: Because you're dead.
|
||
|
||
tyber.Play_Animation("Cinematic", false, 2) --Cinematic_02 <20> talk anim on tyber
|
||
|
||
urai_kill_spot = Find_Hint("STORY_TRIGGER_ZONE_00","uraikill")
|
||
urai.Prevent_All_Fire(true)
|
||
urai.Hide(true)
|
||
urai.Teleport_And_Face(urai_kill_spot)
|
||
end
|
||
end
|
||
|
||
function State_Underworld_A02M07_Speech_Line_03_Remove_Text(message)
|
||
if message == OnEnter then
|
||
|
||
--Transition_Cinematic_Camera_Key(tyber, 0, 100, 15, 180, 1, 0, 1, 0)
|
||
--Transition_Cinematic_Target_Key(cin_trooper_0, 0, 0, 0, 0, 0, 0, 0, 0)
|
||
|
||
--Story_Event("TEXT_SPEECH_UW_ACT02_M07_03")
|
||
--Sleep(.5)
|
||
urai.Play_Animation("Attack", false, 1)
|
||
urai.Hide(false)
|
||
urai.Activate_Ability("STEALTH", false)
|
||
Sleep(.30)
|
||
cin_trooper_0.Turn_To_Face(urai)
|
||
Sleep(.45)
|
||
if TestValid(cin_trooper_0) then
|
||
cin_trooper_0.Take_Damage(50000)
|
||
end
|
||
|
||
if TestValid(cin_trooper_1) then
|
||
cin_trooper_1.Suspend_Locomotor(false)
|
||
cin_trooper_1.Prevent_All_Fire(false)
|
||
end
|
||
tyber.Prevent_All_Fire(false)
|
||
|
||
if TestValid(tyber) and TestValid(cin_trooper_1) then
|
||
tyber.Attack_Move(cin_trooper_1)
|
||
end
|
||
|
||
Sleep(3)
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_04")
|
||
Transition_Cinematic_Camera_Key(tyber, 0, 100, 15, 0, 1, 0, 1, 0)
|
||
Transition_Cinematic_Target_Key(tyber, 0, 0, 0, 0, 0, 0, 0, 0)
|
||
Sleep(1)
|
||
BlockOnCommand( tyber.Turn_To_Face(urai))
|
||
tyber.Play_Animation("Cinematic", false, 2) --Cinematic_02 <20> talk anim on tyber
|
||
end
|
||
end
|
||
|
||
function State_Underworld_A02M07_Speech_Line_04_Remove_Text(message)
|
||
if message == OnEnter then
|
||
--Urai Fen: Each Tibanna gas collection facility is surrounded by four refineries.
|
||
--I will need to escort the gas droids to the refineries and they will procure the gas.
|
||
--We will need to return eight full droids for this mission to be a success.
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_05")
|
||
--Transition_Cinematic_Camera_Key(urai, 5, 100, 15, 0, 1, 0, 1, 0)
|
||
--Transition_Cinematic_Target_Key(urai, 3, 0, 0, 0, 0, 0, 0, 0)
|
||
|
||
urai.Play_Animation("Cinematic", false, 0) --Cinematic_00 <20> talk anim on urai
|
||
|
||
--Sleep(1)
|
||
refinery_flyover = Find_Hint("STORY_TRIGGER_ZONE_00", "refineryflyover")
|
||
Transition_Cinematic_Camera_Key(refinery_flyover, 6, 1000, 15, 180, 1, 0, 1, 0)
|
||
Transition_Cinematic_Target_Key(refinery_flyover, 10, 0, 0, 0, 0, 0, 0, 0)
|
||
|
||
Sleep(3.5)
|
||
Transition_Cinematic_Camera_Key(refinery_flyover, 6, 1000, 15, 90, 1, 0, 1, 0)
|
||
end
|
||
end
|
||
|
||
function State_Underworld_A02M07_Speech_Line_05_Remove_Text(message)
|
||
if message == OnEnter then
|
||
Transition_Cinematic_Camera_Key(ig88, 0, 100, 15, 180, 1, 0, 1, 0)
|
||
Transition_Cinematic_Target_Key(ig88, 0, 0, 0, 0, 0, 0, 0, 0)
|
||
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_06")
|
||
--IG-88: I'll find the needed planetary security codes by hacking into Bespin's central server cluster. It should only take a few nanoseconds.
|
||
end
|
||
end
|
||
|
||
function State_Underworld_A02M07_Speech_Line_06_Remove_Text(message)
|
||
if message == OnEnter then
|
||
Transition_Cinematic_Camera_Key(tyber, 0, 100, 15, 0, 1, 0, 1, 0)
|
||
Transition_Cinematic_Target_Key(tyber, 0, 0, 0, 0, 0, 0, 0, 0)
|
||
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_07")
|
||
--Tyber Zann: In order to make this look like a Black Sun operation,
|
||
--I'll need to sneak into the four security outposts and plant information that leaves no doubt that Xizor alone was behind the theft of the Tibanna gas.
|
||
|
||
tyber.Play_Animation("Cinematic", false, 2) --Cinematic_02 <20> talk anim on tyber
|
||
end
|
||
end
|
||
|
||
function State_Underworld_A02M07_Speech_Line_07_Remove_Text(message)
|
||
if message == OnEnter then
|
||
|
||
Create_Thread("Exit_Cinematic")
|
||
|
||
end
|
||
end
|
||
|
||
function Exit_Cinematic()
|
||
--MessageBox("Exit_Cinematic HIT!")
|
||
current_cinematic_thread = nil
|
||
|
||
urai.Suspend_Locomotor(false)
|
||
urai.Prevent_All_Fire(false)
|
||
ig_88.Prevent_All_Fire(false)
|
||
|
||
Transition_To_Tactical_Camera(3)
|
||
Sleep(2)
|
||
Letter_Box_Out(1)
|
||
Sleep(1)
|
||
Lock_Controls(0)
|
||
End_Cinematic_Camera()
|
||
Suspend_AI(0)
|
||
|
||
point_guard_list = Find_All_Objects_With_Hint("pointguard")
|
||
for i, point_guard in pairs(point_guard_list) do
|
||
point_guard.Prevent_AI_Usage(true)
|
||
point_guard.Guard_Target(point_guard.Get_Position())
|
||
end
|
||
|
||
|
||
|
||
mission_started = true
|
||
|
||
|
||
refinery_list = Find_All_Objects_Of_Type("UM07_CLOUDCITY_REFINERY")
|
||
for i, refinery in pairs(refinery_list) do
|
||
refinery.Highlight(true)
|
||
Add_Radar_Blip(refinery, "refinery_blip")
|
||
end
|
||
|
||
Sleep(30)
|
||
|
||
for i, refinery in pairs(refinery_list) do
|
||
Remove_Radar_Blip("refinery_blip")
|
||
end
|
||
|
||
Sleep(10)
|
||
if flag_no_enemy_reinforcements == false then
|
||
Create_Thread("Reinforce_Empire_Units")
|
||
end
|
||
end
|
||
|
||
function Story_Handle_Esc()
|
||
if current_cinematic_thread ~= nil then
|
||
Thread.Kill(current_cinematic_thread)
|
||
current_cinematic_thread = nil
|
||
Create_Thread("End_Camera")
|
||
Story_Event("UM07_ESCAPEKEY_PREVENT_INTRO_DIALOG_AI_NOTIFICATION")
|
||
end
|
||
end
|
||
|
||
function End_Camera()
|
||
Stop_All_Music()
|
||
Stop_All_Speech()
|
||
Remove_All_Text()
|
||
|
||
--set up actors final positions here
|
||
shuttle_land_loc = Find_Hint("STORY_TRIGGER_ZONE_00","shuttleland")
|
||
tyber_temp_loc = Find_Hint("STORY_TRIGGER_ZONE_00","temploc")
|
||
unit_spawn_loc = Find_Hint("STORY_TRIGGER_ZONE_00","unitspawn")
|
||
tyber_goto_0 = Find_Hint("STORY_TRIGGER_ZONE_00","tybergoto0")
|
||
tyber = Find_First_Object("TYBER_ZANN_PASSENGER")
|
||
urai_kill_spot = Find_Hint("STORY_TRIGGER_ZONE_00","uraikill")
|
||
|
||
--manipulate opening shuttle here...
|
||
if TestValid(opening_cinematic_transport) then
|
||
opening_cinematic_transport.Despawn()
|
||
end
|
||
|
||
opening_cinematic_transport = Create_Cinematic_Transport("Shuttle_Tyderium_Landing_Cinematic", underworld.Get_ID(), shuttle_land_loc, 60, 1, 1, 20, 1)
|
||
|
||
cin_trooper_0 = Find_Hint("STORMTROOPER","cintrooper0")
|
||
if TestValid(cin_trooper_0) then
|
||
cin_trooper_0.Despawn()
|
||
end
|
||
|
||
cin_trooper_1 = Find_Hint("STORMTROOPER","cintrooper1")
|
||
if TestValid(cin_trooper_1) then
|
||
cin_trooper_1.Despawn()
|
||
end
|
||
|
||
|
||
if TestValid(tyber) then
|
||
tyber.Teleport_And_Face(tyber_goto_0)
|
||
tyber.Prevent_All_Fire(false)
|
||
--MessageBox("Tyber Reinforcement found, teleporting")
|
||
else
|
||
MessageBox("No Tyber Reinforcement found, spawning and teleporting")
|
||
--tyber_spawn = Spawn_Unit(Find_Object_Type("TYBER_ZANN_PASSENGER"), tyber_temp_loc, underworld)
|
||
tyber_spawn = Spawn_Unit(Find_Object_Type("TYBER_ZANN_PASSENGER"), tyber_goto_0, underworld)
|
||
tyber = tyber_spawn[1]
|
||
tyber.Prevent_All_Fire(true)
|
||
end
|
||
|
||
if not TestValid(urai) then
|
||
urai_spawn = Spawn_From_Reinforcement_Pool(Find_Object_Type("Urai_Fen_Team"), urai_kill_spot, underworld)
|
||
urai = urai_spawn[1]
|
||
end
|
||
|
||
|
||
|
||
urai.Hide(false)
|
||
urai.Teleport_And_Face(urai_kill_spot)
|
||
urai.Activate_Ability("STEALTH", false)
|
||
|
||
|
||
if not TestValid(ig_88) then
|
||
spawn_ig88 = Spawn_Unit(Find_Object_Type("IG-88"), Find_Hint("STORY_TRIGGER_ZONE_00","unitspawn"), underworld)
|
||
spawn_ig88[1].Teleport_And_Face(Find_Hint("STORY_TRIGGER_ZONE_00","unitspawn"))
|
||
ig_88 = spawn_ig88[1]
|
||
end
|
||
|
||
ig_88.Move_To(Find_Hint("STORY_TRIGGER_ZONE_00","ig88goto"))
|
||
|
||
|
||
droid_goto_0 = Find_Hint("STORY_TRIGGER_ZONE_00","droidgoto0")
|
||
droid_goto_1 = Find_Hint("STORY_TRIGGER_ZONE_00","droidgoto1")
|
||
droid_goto_2 = Find_Hint("STORY_TRIGGER_ZONE_00","droidgoto2")
|
||
droid_goto_3 = Find_Hint("STORY_TRIGGER_ZONE_00","droidgoto3")
|
||
droid_goto_4 = Find_Hint("STORY_TRIGGER_ZONE_00","droidgoto4")
|
||
|
||
|
||
if bool_Gas_Droid04_Spawned == false then
|
||
Create_Thread("Spawn_Gas_Droid", droid_goto_4)
|
||
bool_Gas_Droid04_Spawned = true
|
||
Register_Prox(droid_goto_4, PROX_Droid_Reached_Dest, 5, underworld)
|
||
end
|
||
if bool_Gas_Droid03_Spawned == false then
|
||
Create_Thread("Spawn_Gas_Droid", droid_goto_3)
|
||
bool_Gas_Droid03_Spawned = true
|
||
Register_Prox(droid_goto_3, PROX_Droid_Reached_Dest, 5, underworld)
|
||
end
|
||
if bool_Gas_Droid02_Spawned == false then
|
||
Create_Thread("Spawn_Gas_Droid", droid_goto_2)
|
||
bool_Gas_Droid02_Spawned = true
|
||
Register_Prox(droid_goto_2, PROX_Droid_Reached_Dest, 5, underworld)
|
||
end
|
||
if bool_Gas_Droid01_Spawned == false then
|
||
Create_Thread("Spawn_Gas_Droid", droid_goto_1)
|
||
bool_Gas_Droid01_Spawned = true
|
||
Register_Prox(droid_goto_1, PROX_Droid_Reached_Dest, 5, underworld)
|
||
end
|
||
if bool_Gas_Droid00_Spawned == false then
|
||
Create_Thread("Spawn_Gas_Droid", droid_goto_0)
|
||
bool_Gas_Droid00_Spawned = true
|
||
Register_Prox(droid_goto_0, PROX_Droid_Reached_Dest, 5, underworld)
|
||
end
|
||
|
||
|
||
|
||
|
||
Fade_Screen_In(2)
|
||
--MessageBox("Exit_Cinematic")
|
||
Create_Thread("Exit_Cinematic")
|
||
|
||
|
||
|
||
|
||
--Create_Thread("Thread_DeathMonitor_TurboPower")
|
||
|
||
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()
|
||
|
||
Transition_To_Tactical_Camera(2)
|
||
Letter_Box_Out(2)
|
||
Sleep(2)
|
||
Lock_Controls(0)
|
||
End_Cinematic_Camera()
|
||
Suspend_AI(0)
|
||
|
||
end
|
||
|
||
function Vader_Midtro()
|
||
vader_shuttle_land_loc = Find_Hint("STORY_TRIGGER_ZONE_00","vaderland")
|
||
vader_guard_spawn_loc = Find_Hint("STORY_TRIGGER_ZONE_00","vaderguardspawn")
|
||
vader_spawn_0 = Find_Hint("STORY_TRIGGER_ZONE_00","vaderspawn0")
|
||
vader_spawn_1 = Find_Hint("STORY_TRIGGER_ZONE_00","vaderspawn1")
|
||
commander_goto = Find_Hint("STORY_TRIGGER_ZONE_00","commandergoto")
|
||
vader_goto = Find_Hint("STORY_TRIGGER_ZONE_00","vadergoto")
|
||
|
||
--imperial guard definitions
|
||
imp_guard01_spawn_loc = Find_Hint("MARKER_GENERIC_GREEN","imp-guard01")
|
||
imp_guard02_spawn_loc = Find_Hint("MARKER_GENERIC_GREEN","imp-guard02")
|
||
imp_guard03_spawn_loc = Find_Hint("MARKER_GENERIC_GREEN","imp-guard03")
|
||
imp_guard04_spawn_loc = Find_Hint("MARKER_GENERIC_GREEN","imp-guard04")
|
||
imp_guard05_spawn_loc = Find_Hint("MARKER_GENERIC_GREEN","imp-guard05")
|
||
imp_guard06_spawn_loc = Find_Hint("MARKER_GENERIC_GREEN","imp-guard06")
|
||
|
||
imp_guard01_teleport_loc = Find_Hint("MARKER_GENERIC_GREEN","imp-guard01-teleport")
|
||
imp_guard02_teleport_loc = Find_Hint("MARKER_GENERIC_GREEN","imp-guard02-teleport")
|
||
imp_guard03_teleport_loc = Find_Hint("MARKER_GENERIC_GREEN","imp-guard03-teleport")
|
||
imp_guard04_teleport_loc = Find_Hint("MARKER_GENERIC_GREEN","imp-guard04-teleport")
|
||
imp_guard05_teleport_loc = Find_Hint("MARKER_GENERIC_GREEN","imp-guard05-teleport")
|
||
imp_guard06_teleport_loc = Find_Hint("MARKER_GENERIC_GREEN","imp-guard06-teleport")
|
||
|
||
imp_guard01_list = Spawn_Unit(Find_Object_Type("UM05_ADEPTONE"), imp_guard01_spawn_loc, neutral)
|
||
imp_guard01 = imp_guard01_list[1]
|
||
imp_guard01.Teleport_And_Face(imp_guard01_spawn_loc)
|
||
imp_guard01.Suspend_Locomotor(true)
|
||
imp_guard01.Prevent_AI_Usage(true)
|
||
imp_guard01.Prevent_Opportunity_Fire(true)
|
||
|
||
imp_guard02_list = Spawn_Unit(Find_Object_Type("UM05_ADEPTONE"), imp_guard02_spawn_loc, neutral)
|
||
imp_guard02 = imp_guard02_list[1]
|
||
imp_guard02.Teleport_And_Face(imp_guard02_spawn_loc)
|
||
imp_guard02.Suspend_Locomotor(true)
|
||
imp_guard01.Prevent_AI_Usage(true)
|
||
imp_guard01.Prevent_Opportunity_Fire(true)
|
||
|
||
imp_guard03_list = Spawn_Unit(Find_Object_Type("UM05_ADEPTONE"), imp_guard03_spawn_loc, neutral)
|
||
imp_guard03 = imp_guard03_list[1]
|
||
imp_guard03.Teleport_And_Face(imp_guard03_spawn_loc)
|
||
imp_guard03.Suspend_Locomotor(true)
|
||
imp_guard01.Prevent_AI_Usage(true)
|
||
imp_guard01.Prevent_Opportunity_Fire(true)
|
||
|
||
imp_guard04_list = Spawn_Unit(Find_Object_Type("UM05_ADEPTONE"), imp_guard04_spawn_loc, neutral)
|
||
imp_guard04 = imp_guard04_list[1]
|
||
imp_guard04.Teleport_And_Face(imp_guard04_spawn_loc)
|
||
imp_guard04.Suspend_Locomotor(true)
|
||
imp_guard01.Prevent_AI_Usage(true)
|
||
imp_guard01.Prevent_Opportunity_Fire(true)
|
||
|
||
imp_guard05_list = Spawn_Unit(Find_Object_Type("UM05_ADEPTONE"), imp_guard05_spawn_loc, neutral)
|
||
imp_guard05 = imp_guard05_list[1]
|
||
imp_guard05.Teleport_And_Face(imp_guard05_spawn_loc)
|
||
imp_guard05.Suspend_Locomotor(true)
|
||
imp_guard01.Prevent_AI_Usage(true)
|
||
imp_guard01.Prevent_Opportunity_Fire(true)
|
||
|
||
imp_guard06_list = Spawn_Unit(Find_Object_Type("UM05_ADEPTONE"), imp_guard06_spawn_loc, neutral)
|
||
imp_guard06 = imp_guard06_list[1]
|
||
imp_guard06.Teleport_And_Face(imp_guard06_spawn_loc)
|
||
imp_guard06.Suspend_Locomotor(true)
|
||
imp_guard01.Prevent_AI_Usage(true)
|
||
imp_guard01.Prevent_Opportunity_Fire(true)
|
||
|
||
|
||
|
||
cine_field_commander_list = Spawn_Unit(Find_Object_Type("GENERIC_FIELD_COMMANDER_EMPIRE"), vader_guard_spawn_loc, neutral)
|
||
cine_field_commander = cine_field_commander_list[1]
|
||
cine_field_commander.Make_Invulnerable(true)
|
||
cine_field_commander.Teleport_And_Face(vader_guard_spawn_loc)
|
||
|
||
-- Turn off opportunity fire for all units.
|
||
empire_list = Find_All_Objects_Of_Type(empire)
|
||
underworld_list = Find_All_Objects_Of_Type(underworld)
|
||
|
||
for k, unit in pairs(empire_list) do
|
||
if TestValid(unit) and unit ~= cine_field_commander then
|
||
unit.Suspend_Locomotor(true)
|
||
unit.Prevent_All_Fire(true)
|
||
end
|
||
end
|
||
|
||
for k, unit in pairs(underworld_list) do
|
||
if TestValid(unit) then
|
||
unit.Suspend_Locomotor(true)
|
||
unit.Prevent_All_Fire(true)
|
||
end
|
||
end
|
||
|
||
Suspend_AI(1)
|
||
Lock_Controls(1)
|
||
Start_Cinematic_Camera()
|
||
Letter_Box_In(0)
|
||
Fade_Screen_In(2)
|
||
|
||
Cancel_Fast_Forward()
|
||
|
||
-- ***********Opening Shot***************
|
||
|
||
-- Create_Cinematic_Transport(object_type_name, player_id, transport_pos, zangle, phase_mode, anim_delta, idle_time, persist,hint)
|
||
vader_transport = Create_Cinematic_Transport("Shuttle_Tyderium_Landing_Cinematic", empire.Get_ID(), vader_shuttle_land_loc, -85, 1, 0, 20, 1)
|
||
|
||
-- Set_Cinematic_Camera_Key(target_pos, x_dist, y_pitch, z_yaw, euler, pobj, use_object_rotation, cinematic_animation)
|
||
Set_Cinematic_Camera_Key(vader_transport, 1800, 60, 180, 1, 0, 0, 1)
|
||
--Set_Cinematic_Target_Key(target_pos, xoffset_dist, yoffset_pitch, zoffset_yaw, angles?, attach_object, use_object_rotation, cinematic_animation)
|
||
Set_Cinematic_Target_Key(vader_spawn_0, 0, 0, 0, 0, vader_spawn_0, 0, 1)
|
||
|
||
Transition_Cinematic_Camera_Key(vader_spawn_0, 13, 200, 25, 100, 1, 0, 0, 1)
|
||
Transition_Cinematic_Target_Key(vader_guard_spawn_loc, 7, 0, 0, 0, 0, vader_spawn_0, 0, 1)
|
||
Sleep(7)
|
||
vader_list = Spawn_Unit(Find_Object_Type("DARTH_VADER"), vader_spawn_0, neutral)
|
||
vader = vader_list[1]
|
||
vader.Prevent_AI_Usage(true)
|
||
vader.Prevent_Opportunity_Fire(true)
|
||
vader.Move_To(vader_goto)
|
||
cine_field_commander.Move_To(commander_goto)
|
||
Sleep(2.5)
|
||
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_26")
|
||
end
|
||
|
||
function State_Underworld_A02M07_Speech_Line_26_Remove_Text(message)
|
||
if message == OnEnter then
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_27")
|
||
end
|
||
end
|
||
|
||
function State_Underworld_A02M07_Speech_Line_27_Remove_Text(message)
|
||
if message == OnEnter then
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_28")
|
||
--FIELD COMMANDER: Sir, we're in trying to capture them as we speak, but they<65>
|
||
|
||
end
|
||
end
|
||
|
||
|
||
|
||
function State_Underworld_A02M07_Speech_Line_28_Remove_Text(message)
|
||
if message == OnEnter then
|
||
vader.Play_Animation("Choke", false)
|
||
cine_field_commander.Play_Animation("Choke_Die", false)
|
||
Sleep(0.25)
|
||
|
||
Story_Event("UM07_VaderCine_Start_Choking_SFX_AI_NOTIFICATION")
|
||
|
||
end
|
||
end
|
||
|
||
function State_UM07_VaderCine_Choking_SFX_Over(message)
|
||
if message == OnEnter then
|
||
cine_field_commander.Make_Invulnerable(false)
|
||
cine_field_commander.Take_Damage(50000)
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_29")
|
||
--DARTH VADER: I'm severely displeased with your incompetance. I will see to these thieves myself.
|
||
end
|
||
end
|
||
|
||
function State_Underworld_A02M07_Speech_Line_29_Remove_Text(message)
|
||
if message == OnEnter then
|
||
Fade_Screen_Out(1)
|
||
Sleep(1)
|
||
|
||
|
||
|
||
|
||
|
||
|
||
--[[vader.Prevent_AI_Usage(false)
|
||
vader.Prevent_Opportunity_Fire(false)
|
||
vader.Teleport_And_Face(vader_spawn_1)
|
||
Create_Thread("Hunt_Underworld", vader)
|
||
|
||
imp_guard01.Teleport_And_Face(imp_guard01_teleport_loc)
|
||
imp_guard01.Suspend_Locomotor(false)
|
||
imp_guard01.Prevent_AI_Usage(false)
|
||
imp_guard01.Prevent_Opportunity_Fire(false)
|
||
imp_guard01.Guard_Target(vader)
|
||
|
||
|
||
imp_guard02.Teleport_And_Face(imp_guard02_teleport_loc)
|
||
imp_guard02.Suspend_Locomotor(false)
|
||
imp_guard02.Prevent_AI_Usage(false)
|
||
imp_guard02.Prevent_Opportunity_Fire(false)
|
||
imp_guard02.Guard_Target(vader)
|
||
|
||
|
||
imp_guard03.Teleport_And_Face(imp_guard03_teleport_loc)
|
||
imp_guard03.Suspend_Locomotor(false)
|
||
imp_guard03.Prevent_AI_Usage(false)
|
||
imp_guard03.Prevent_Opportunity_Fire(false)
|
||
imp_guard03.Guard_Target(vader)
|
||
|
||
|
||
imp_guard04.Teleport_And_Face(imp_guard04_teleport_loc)
|
||
imp_guard04.Suspend_Locomotor(false)
|
||
imp_guard04.Prevent_AI_Usage(false)
|
||
imp_guard04.Prevent_Opportunity_Fire(false)
|
||
imp_guard04.Guard_Target(vader)
|
||
|
||
|
||
imp_guard05.Teleport_And_Face(imp_guard05_teleport_loc)
|
||
imp_guard05.Suspend_Locomotor(false)
|
||
imp_guard05.Prevent_AI_Usage(false)
|
||
imp_guard05.Prevent_Opportunity_Fire(false)
|
||
imp_guard05.Guard_Target(vader)
|
||
|
||
|
||
imp_guard06.Teleport_And_Face(imp_guard06_teleport_loc)
|
||
imp_guard06.Suspend_Locomotor(false)
|
||
imp_guard06.Prevent_AI_Usage(false)
|
||
imp_guard06.Prevent_Opportunity_Fire(false)
|
||
imp_guard06.Guard_Target(vader)]]
|
||
|
||
-- Turn on opportunity fire for all units.
|
||
empire_list = Find_All_Objects_Of_Type(empire)
|
||
underworld_list = Find_All_Objects_Of_Type(underworld)
|
||
|
||
for k, unit in pairs(empire_list) do
|
||
if TestValid(unit) then
|
||
unit.Suspend_Locomotor(false)
|
||
unit.Prevent_All_Fire(false)
|
||
end
|
||
end
|
||
|
||
for k, unit in pairs(underworld_list) do
|
||
if TestValid(unit) then
|
||
unit.Suspend_Locomotor(false)
|
||
unit.Prevent_All_Fire(false)
|
||
end
|
||
end
|
||
|
||
Point_Camera_At(vader)
|
||
|
||
Fade_Screen_In(1)
|
||
Transition_To_Tactical_Camera(0)
|
||
Letter_Box_Out(0)
|
||
Lock_Controls(0)
|
||
End_Cinematic_Camera()
|
||
Suspend_AI(0)
|
||
|
||
Create_Thread("Thread_Vader_Leaves_Landing_Area")
|
||
|
||
Sleep(1)
|
||
|
||
Create_Thread("Thread_Unit_Leaves_Landing_Area", imp_guard01)
|
||
Create_Thread("Thread_Unit_Leaves_Landing_Area", imp_guard02)
|
||
|
||
|
||
Sleep(1)
|
||
|
||
Create_Thread("Thread_Unit_Leaves_Landing_Area", imp_guard03)
|
||
Create_Thread("Thread_Unit_Leaves_Landing_Area", imp_guard04)
|
||
|
||
|
||
Sleep(1)
|
||
|
||
Create_Thread("Thread_Unit_Leaves_Landing_Area", imp_guard05)
|
||
Create_Thread("Thread_Unit_Leaves_Landing_Area", imp_guard06)
|
||
|
||
end
|
||
end
|
||
|
||
|
||
|
||
function Thread_Vader_Leaves_Landing_Area()
|
||
despawn_flag = Find_Hint("MARKER_GENERIC_PURPLE", "vader-despawn")
|
||
|
||
vader.Suspend_Locomotor(false)
|
||
BlockOnCommand(vader.Move_To(despawn_flag))
|
||
vader.Despawn()
|
||
|
||
Sleep(2)
|
||
|
||
Create_Thread("Thread_Vader_Enters_Play_Area")
|
||
end
|
||
|
||
function Thread_Vader_Enters_Play_Area()
|
||
--Sleep(3)
|
||
respawn_flag = Find_Hint("MARKER_GENERIC_PURPLE", "vader-respawn")
|
||
|
||
ref_type = Find_Object_Type("Darth_Vader")
|
||
vaderlist = Spawn_Unit(ref_type, respawn_flag, empire)
|
||
new_vader = vaderlist[1]
|
||
|
||
Create_Thread("Hunt_Underworld", new_vader)
|
||
end
|
||
|
||
function Thread_Unit_Leaves_Landing_Area(local_unit)
|
||
despawn_flag = Find_Hint("MARKER_GENERIC_PURPLE", "vader-despawn")
|
||
|
||
local_unit.Suspend_Locomotor(false)
|
||
BlockOnCommand(local_unit.Move_To(despawn_flag))
|
||
local_unit.Despawn()
|
||
|
||
Sleep(2)
|
||
|
||
Create_Thread("Thread_Unit_Enters_Play_Area")
|
||
end
|
||
|
||
function Thread_Unit_Enters_Play_Area()
|
||
--Sleep(3)
|
||
respawn_flag = Find_Hint("MARKER_GENERIC_PURPLE", "vader-respawn")
|
||
|
||
local imp_guard_list = Spawn_Unit(Find_Object_Type("UM05_ADEPTONE"), respawn_flag, empire)
|
||
local imp_guard = imp_guard_list[1]
|
||
|
||
if TestValid(new_vader) then
|
||
imp_guard.Guard_Target(new_vader)
|
||
else
|
||
Create_Thread("Hunt_Underworld", imp_guard)
|
||
end
|
||
end
|
||
|
||
|
||
|
||
function End_Cinematic()
|
||
|
||
end_cinematic_started = true
|
||
-- lockout player control & AI
|
||
Allow_Localized_SFX(false)
|
||
Suspend_AI(1)
|
||
Lock_Controls(1)
|
||
|
||
Fade_Screen_Out(1)
|
||
Sleep(1)
|
||
Letter_Box_In(0)
|
||
|
||
Start_Cinematic_Camera()
|
||
|
||
Cancel_Fast_Forward()
|
||
-- Despawn relevent units
|
||
|
||
if new_vader then
|
||
new_vader.Despawn()
|
||
end
|
||
|
||
-- Disable the other objects for the final cinematic
|
||
Do_End_Cinematic_Cleanup()
|
||
|
||
tyber_end_loc = Find_Hint("STORY_TRIGGER_ZONE_00", "tyberendloc")
|
||
urai_end_loc = Find_Hint("STORY_TRIGGER_ZONE_00", "uraiendloc")
|
||
ig88_end_loc = Find_Hint("STORY_TRIGGER_ZONE_00", "ig88endloc")
|
||
|
||
tyberlist = Spawn_Unit(Find_Object_Type("Tyber_Zann"), tyber_end_loc, underworld)
|
||
cin_tyber = tyberlist[1]
|
||
urailist = Spawn_Unit(Find_Object_Type("Urai_Fen"), urai_end_loc, underworld)
|
||
cin_urai = urailist[1]
|
||
ig88list = Spawn_Unit(Find_Object_Type("IG-88"), ig88_end_loc, underworld)
|
||
cin_ig88 = ig88list[1]
|
||
|
||
cin_tyber.In_End_Cinematic(true)
|
||
cin_urai.In_End_Cinematic(true)
|
||
cin_ig88.In_End_Cinematic(true)
|
||
|
||
cin_tyber.Teleport_And_Face(tyber_end_loc)
|
||
cin_urai.Teleport_And_Face(urai_end_loc)
|
||
cin_ig88.Teleport_And_Face(ig88_end_loc)
|
||
|
||
unitspawn = Find_Hint("STORY_TRIGGER_ZONE_00","unitspawn")
|
||
cin_tyber.Move_To(unitspawn)
|
||
cin_urai.Move_To(unitspawn)
|
||
cin_ig88.Move_To(unitspawn)
|
||
|
||
Fade_Screen_In(1)
|
||
|
||
Set_Cinematic_Camera_Key(shuttle_land_loc, 400, 35, 270, 1, 0, 1, 1)
|
||
Set_Cinematic_Target_Key(cin_tyber, 0, 0, 0, 0, cin_tyber, 0, 1)
|
||
|
||
Transition_Cinematic_Camera_Key(shuttle_land_loc, 9, 500, 25, 0, 1, 0, 1, 1)
|
||
Transition_Cinematic_Target_Key(opening_cinematic_transport, 5, 0, 0, 0, 1, opening_cinematic_transport, 1, 1)
|
||
|
||
Sleep(7)
|
||
if TestValid(opening_cinematic_transport) then
|
||
opening_cinematic_transport.Play_Animation("Takeoff",false)
|
||
end
|
||
cin_tyber.Despawn()
|
||
cin_urai.Despawn()
|
||
cin_ig88.Despawn()
|
||
Sleep(7)
|
||
|
||
Fade_Screen_Out(2)
|
||
Sleep(1)
|
||
|
||
-- spawn a new vader at the right location
|
||
final_vader_start_loc = Find_Hint("STORY_TRIGGER_ZONE_00", "vaderendcin")
|
||
ref_type = Find_Object_Type("Darth_Vader")
|
||
vaderlist = Spawn_Unit(ref_type, final_vader_start_loc, empire)
|
||
vader = vaderlist[1]
|
||
vader.In_End_Cinematic(true)
|
||
|
||
-- spawn dialog stormtrooper
|
||
final_trooper1_loc = Find_Hint("STORY_TRIGGER_ZONE_00", "trooperendcin")
|
||
stref_type = Find_Object_Type("DIALOGUE_STORMTROOPER")
|
||
finaltrooperlist1 = Spawn_Unit(stref_type, final_trooper1_loc, empire)
|
||
finaltrooper1 = finaltrooperlist1[1]
|
||
finaltrooper1.In_End_Cinematic(true)
|
||
|
||
end_trooper_goto = Find_Hint("STORY_TRIGGER_ZONE_00", "endtroopergoto")
|
||
finaltrooper1.Move_To(end_trooper_goto)
|
||
vader.Turn_To_Face(finaltrooper1)
|
||
|
||
Fade_Screen_In(2)
|
||
|
||
Transition_Cinematic_Camera_Key(vader, 0, 200, 15, 80, 1, 0, 1, 1)
|
||
Transition_Cinematic_Target_Key(vader, 0, 0, 0, 0, 1, vader, 1, 1)
|
||
Transition_Cinematic_Camera_Key(vader, 10, 100, 15, 80, 1, 0, 1, 1)
|
||
Sleep(3)
|
||
finaltrooper1.Play_Animation("Attention",true)
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_31")
|
||
|
||
end
|
||
|
||
function State_Underworld_A02M07_Speech_Line_31_Remove_Text(message)
|
||
if message == OnEnter then
|
||
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_32")
|
||
|
||
end
|
||
end
|
||
|
||
function State_Underworld_A02M07_Speech_Line_32_Remove_Text(message)
|
||
if message == OnEnter then
|
||
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_33")
|
||
|
||
end
|
||
end
|
||
|
||
function State_Underworld_A02M07_Speech_Line_33_Remove_Text(message)
|
||
if message == OnEnter then
|
||
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_34")
|
||
|
||
end
|
||
end
|
||
|
||
function State_Underworld_A02M07_Speech_Line_34_Remove_Text(message)
|
||
if message == OnEnter then
|
||
|
||
Story_Event("TEXT_SPEECH_UW_ACT02_M07_35")
|
||
|
||
end
|
||
end
|
||
|
||
function State_Underworld_A02M07_Speech_Line_35_Remove_Text(message)
|
||
if message == OnEnter then
|
||
|
||
Fade_Screen_In(1)
|
||
Transition_To_Tactical_Camera(0)
|
||
Letter_Box_Out(0)
|
||
Lock_Controls(0)
|
||
End_Cinematic_Camera()
|
||
Suspend_AI(0)
|
||
|
||
Story_Event("VICTORY_TRIGGER")
|
||
--MessageBox("Victory message sent!")
|
||
|
||
end
|
||
end
|
||
|
||
-- ##########################################################################################
|
||
-- ##################FLYOVER(S) CONTROLLER AND SCRIPTS###########################################
|
||
-- ##########################################################################################
|
||
|
||
function Thread_Cloud_Car_Flyovers()
|
||
--see how many flyovers there currently are
|
||
--MessageBox("function Thread_Cloud_Car_Flyovers() HIT!")
|
||
Sleep(5)
|
||
local flyover_max = 0
|
||
for i, cloud_city_car in pairs(cloud_city_cars) do
|
||
flyover_max = flyover_max + 1
|
||
end
|
||
if flyover_max == 0 then
|
||
JoeMessage("No flyovers found...aborting thread")
|
||
return
|
||
end
|
||
|
||
while (true) do
|
||
|
||
--now pick a random flyover to play
|
||
local flyover_roll = GameRandom.Free_Random(1, flyover_max)
|
||
|
||
while cloud_cars_in_use[cloud_city_cars[flyover_roll]] do
|
||
--MessageBox("Cloud car in use")
|
||
flyover_roll = GameRandom.Free_Random(1, flyover_max)
|
||
Sleep(3)
|
||
end
|
||
|
||
Create_Thread("Thread_Flyover_Animation", cloud_city_cars[flyover_roll])
|
||
|
||
Sleep(1)
|
||
end
|
||
|
||
end
|
||
|
||
|
||
function Thread_Flyover_Animation(cloud_car)
|
||
|
||
cloud_cars_in_use[cloud_car] = true
|
||
|
||
cloud_car.Hide(false)
|
||
--MessageBox("BlockOnCommand(cloud_car.Play_Animation")
|
||
BlockOnCommand(cloud_car.Play_Animation("Cinematic", false, 0))
|
||
cloud_car.Hide(true)
|
||
|
||
cloud_cars_in_use[cloud_car] = false
|
||
|
||
end
|
||
|
||
|
||
-- ##########################################################################################
|
||
function JoeMessage(...)
|
||
--JoeMessage("current current_spawn_times is %d", current_spawn_times)
|
||
_CustomScriptMessage("JoeLog.txt", string.format(unpack(arg)))
|
||
end |