854 lines
28 KiB
Lua
854 lines
28 KiB
Lua
--/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
--
|
|
-- (C) Petroglyph Games, Inc.
|
|
--
|
|
--
|
|
-- ***** ** * *
|
|
-- * ** * * *
|
|
-- * * * * *
|
|
-- * * * * * * * *
|
|
-- * * *** ****** * ** **** *** * * * ***** * ***
|
|
-- * ** * * * ** * ** ** * * * * ** ** ** *
|
|
-- *** ***** * * * * * * * * ** * * * *
|
|
-- * * * * * * * * * * * * * * *
|
|
-- * * * * * * * * * * ** * * * *
|
|
-- * ** * * ** * ** * * ** * * * *
|
|
-- ** **** ** * **** ***** * ** *** * *
|
|
-- * * *
|
|
-- * * *
|
|
-- * * *
|
|
-- * * * *
|
|
-- **** * *
|
|
--
|
|
--/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
-- C O N F I D E N T I A L S O U R C E C O D E -- D O N O T D I S T R I B U T E
|
|
--/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
--
|
|
-- $File:
|
|
--
|
|
-- $Author: Brian_Hayes $
|
|
--
|
|
-- $Change:
|
|
--
|
|
-- $DateTime:
|
|
--
|
|
-- $Revision:
|
|
--
|
|
--/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
require("PGStoryMode")
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------
|
|
-- Definitions -- This function is called once when the script is first created.
|
|
-----------------------------------------------------------------------------------------------------------------------
|
|
function Definitions()
|
|
|
|
DebugMessage("%s -- In Definitions", tostring(Script))
|
|
|
|
StoryModeEvents =
|
|
{
|
|
Tutorial_M01_Begin = State_Tutorial_M01_Begin,
|
|
Tutorial_M01_Give_Clearance_For_Imperial_Attack = State_Tutorial_M01_Construct_Done,
|
|
Tutorial_M01_Construct_01 = State_Tutorial_M01_Construct_01,
|
|
Tutorial_M01_Intro_07 = State_Tutorial_M01_Intro_07,
|
|
Tutorial_M01_Task_Two_04d = State_Highlight_On_Comm_Jammer,
|
|
Tutorial_M01_Task_Four_02a = State_Highlight_On_Turrets,
|
|
Tutorial_M01_Construct_Highlight_Off = State_Highlight_Off_AITurret,
|
|
|
|
Tutorial_M01_Intro_02 = State_First_Intro_Dialog_Done,
|
|
Tutorial_M01_Intro_04 = State_Second_Intro_Dialog_Done,
|
|
Tutorial_M01_Task_Five_02 = State_Remove_Base_Walls,
|
|
Tutorial_M01_Give_Hint_62 = State_Land_Troops_at_First_RP,
|
|
Tutorial_M01_Patrol_SpreadOut_Hint = State_Tutorial_M01_Patrol_SpreadOut_Hint
|
|
|
|
}
|
|
|
|
rebel_squad = {
|
|
"REBEL_MINI_INFANTRY_SQUAD"
|
|
}
|
|
|
|
rebel_base_squad = {
|
|
"REBEL_MINI_INFANTRY_SQUAD"
|
|
,"REBEL_TANK_BUSTER_SQUAD"
|
|
}
|
|
|
|
imperial_squad = {
|
|
"IMPERIAL_MEDIUM_STORMTROOPER_SQUAD"
|
|
}
|
|
|
|
spawn_range = 150
|
|
unit_list = {}
|
|
base_list = {}
|
|
|
|
imperial_assault_in_progress = false
|
|
init_done = false
|
|
comm_jammer_deleted = false
|
|
skipped_building = false
|
|
|
|
-- Keep track of how many reinforce points have been captured
|
|
rps_captured = 0
|
|
rp1_captured = false
|
|
rp2_captured = false
|
|
wookie_speed = 1
|
|
flag_wookie_clearing_breached = false
|
|
flag_wookie_clearing2_breached = false
|
|
flag_okay_SkipBuild_Mission = true
|
|
flag_given_HIGHLIGHT_OFF_03 = false
|
|
flag_rebel_wall_is_down = false
|
|
end
|
|
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------
|
|
-- Function for Event: Tutorial_M01_Begin
|
|
-----------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
function State_Tutorial_M01_Begin(message)
|
|
|
|
if message == OnEnter then
|
|
|
|
--MessageBox("]]]] LUA: State_Tutorial_M01_Begin")
|
|
|
|
-- Get Empire & Rebel Owners
|
|
rebel_player = Find_Player("Rebel")
|
|
empire_player = Find_Player("Empire")
|
|
neutral_player = Find_Player("Neutral")
|
|
|
|
-- Get the Markers
|
|
squad1_marker = Find_Hint("GENERIC_MARKER_LAND", "squad1")
|
|
rebel_base_marker = Find_Hint("GENERIC_MARKER_LAND", "rebelbase")
|
|
rebel_base_marker2 = Find_Hint("GENERIC_MARKER_LAND", "basespawn")
|
|
|
|
unit_list = Find_All_Objects_With_Hint("reinforce1");
|
|
reinforce_point1 = unit_list[1]
|
|
unit_list = Find_All_Objects_With_Hint("reinforce2");
|
|
reinforce_point2 = unit_list[1]
|
|
--skip_build_list = Find_All_Objects_With_Hint("skip-mission")
|
|
--skip_build_marker = skip_build_list[1]
|
|
skip_build_marker = Find_Hint("REINFORCEMENT_POINT_PLUS5_CAP","reinforce1")
|
|
|
|
-- Get the rebel base
|
|
base_list = Find_All_Objects_Of_Type("R_GROUND_BARRACKS")
|
|
rebel_base = base_list[1]
|
|
--rebel_base.Change_Owner(neutral_player)
|
|
base_list = Find_All_Objects_Of_Type("COMMUNICATIONS_ARRAY_R")
|
|
rebel_comm_array = base_list[1]
|
|
--rebel_comm_array.Change_Owner(neutral_player)
|
|
|
|
turret_01 = Find_Hint("REBEL_BUILD_PAD_BACTA","turret01")
|
|
turret_02 = Find_Hint("REBEL_BUILD_PAD_AITURRET","turret02")
|
|
|
|
reinforcement_point01 = Find_Hint("REINFORCEMENT_POINT_PLUS5_CAP","reinforce1")
|
|
|
|
if not reinforcement_point01 then
|
|
MessageBox("missing reinforcement_point01!!")
|
|
end
|
|
|
|
-- Set up first proximity triggers
|
|
Register_Prox(squad1_marker, Spawn_Squad_1, spawn_range, rebel_player)
|
|
Register_Prox(rebel_base_marker, Prox_Base, 200, rebel_player)
|
|
Register_Prox(skip_build_marker, Prox_SkipBuildMission, 150, rebel_player)
|
|
|
|
|
|
prox_reinforce01 = Find_Hint("GENERIC_MARKER_LAND","prox-reinforce01")
|
|
--Register_Prox(prox_reinforce01, Prox_Reinforcement_Hint, 150, rebel_player)
|
|
|
|
-- Trigger first marker
|
|
--Story_Event("HIGHLIGHT_ZONE_ONE")
|
|
|
|
init_done = true
|
|
|
|
--markers and stuff for cinematic
|
|
player_squad_list = Find_All_Objects_With_Hint("playersquad")
|
|
player_squad = player_squad_list[1]
|
|
|
|
|
|
wookiie_clearing_wookiie_01 = Find_Hint("WOOKIE_WARRIOR_UNARMED_SOLO","wokclearing-wok1")
|
|
wookiie_clearing_wookiie_02 = Find_Hint("WOOKIE_WARRIOR_UNARMED_SOLO","wokclearing-wok2")
|
|
wookiie_clearing_wookiie_03 = Find_Hint("WOOKIE_WARRIOR_UNARMED_SOLO","wokclearing-wok3")
|
|
wookiie_clearing_wookiie_04 = Find_Hint("WOOKIE_WARRIOR_UNARMED_SOLO","wokclearing-wok4")
|
|
wookiie_clearing_wookiie_05 = Find_Hint("WOOKIE_WARRIOR_UNARMED_SOLO","wokclearing-wok5")
|
|
wookiie_clearing_wookiie_06 = Find_Hint("WOOKIE_WARRIOR_UNARMED_SOLO","wokclearing-wok6")
|
|
wookiie_clearing_wookiie_07 = Find_Hint("WOOKIE_WARRIOR_UNARMED_SOLO","wokclearing-wok7")
|
|
wookiie_clearing_wookiie_08 = Find_Hint("WOOKIE_WARRIOR_UNARMED_SOLO","wokclearing-wok8")
|
|
wookiie_clearing_wookiie_09 = Find_Hint("WOOKIE_WARRIOR_UNARMED_SOLO","wokclearing-wok9")
|
|
|
|
wookiie_clearing02_wookiie_01 = Find_Hint("WOOKIE_WARRIOR_UNARMED_SOLO","wokclearing2-wok1")
|
|
wookiie_clearing02_wookiie_02 = Find_Hint("WOOKIE_WARRIOR_UNARMED_SOLO","wokclearing2-wok2")
|
|
wookiie_clearing02_wookiie_03 = Find_Hint("WOOKIE_WARRIOR_UNARMED_SOLO","wokclearing2-wok3")
|
|
wookiie_clearing02_wookiie_04 = Find_Hint("WOOKIE_WARRIOR_UNARMED_SOLO","wokclearing2-wok4")
|
|
wookiie_clearing02_wookiie_05 = Find_Hint("WOOKIE_WARRIOR_UNARMED_SOLO","wokclearing2-wok5")
|
|
|
|
wookiie_clearing_proxflag = Find_Hint("GENERIC_MARKER_LAND","wokclearing-proxflag")
|
|
wookiie_tree03= Find_Hint("GENERIC_MARKER_LAND","woktree-03")
|
|
|
|
wookiie_clearing2_proxflag = Find_Hint("GENERIC_MARKER_LAND","wokclearing2-proxflag")
|
|
wookiie_tree04= Find_Hint("GENERIC_MARKER_LAND","woktree-04")
|
|
|
|
mauler_01 = Find_Hint("TIE_CRAWLER","mauler01")
|
|
mauler_02 = Find_Hint("TIE_CRAWLER","mauler02")
|
|
|
|
mauler_01_goto = Find_Hint("GENERIC_MARKER_LAND","mauler01-goto")
|
|
mauler_02_goto = Find_Hint("GENERIC_MARKER_LAND","mauler02-goto")
|
|
|
|
if not (mauler_01 or mauler_02) then
|
|
MessageBox("cannot find maulers")
|
|
end
|
|
|
|
if not (mauler_01_goto or mauler_02_goto) then
|
|
MessageBox("cannot find maulers goto spots")
|
|
end
|
|
|
|
rebel_base_enemy_prox = Find_Hint("GENERIC_MARKER_LAND","prox-imperials-nearby")
|
|
|
|
Register_Prox(wookiie_tree03, Enter_Wookie_Tree, 10, neutral_player)
|
|
Register_Prox(wookiie_tree04, Enter_Wookie_Tree, 10, neutral_player)
|
|
Register_Prox(wookiie_clearing_proxflag, Clearing_Wookies_Retreat, 50, rebel_player)
|
|
Register_Prox(wookiie_clearing2_proxflag, Clearing2_Wookies_Retreat, 50, rebel_player)
|
|
|
|
--Register_Prox(rebel_base_enemy_prox, Empire_Attacking, 100, empire_player)
|
|
|
|
Create_Thread("Intro_Cinematic")
|
|
end
|
|
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------
|
|
-- JDG OPENING CINEMATIC STUFF HERE
|
|
-----------------------------------------------------------------------------------------------------------------------
|
|
function Intro_Cinematic()
|
|
|
|
-- intro cine function
|
|
cine_start = Find_Hint("GENERIC_MARKER_LAND","empire-landing-cine")
|
|
Point_Camera_At(cine_start)
|
|
Start_Cinematic_Camera()
|
|
Resume_Mode_Based_Music()
|
|
|
|
walker_01 = Find_Hint("AT_ST_WALKER","walker01")
|
|
walker_02 = Find_Hint("AT_ST_WALKER","walker02")
|
|
|
|
walker_01_goto = Find_Hint("GENERIC_MARKER_LAND","walker01-goto")
|
|
walker_02_face = Find_Hint("GENERIC_MARKER_LAND","walker02-face")
|
|
|
|
walker_01.Move_To(walker_01_goto)
|
|
|
|
|
|
|
|
Sleep(1)
|
|
Fade_Screen_In(1)
|
|
|
|
-- Set_Cinematic_Camera_Key(target_pos, xoffset_dist, yoffset_pitch, zoffset_yaw, angles?, attach_object, use_object_rotation, cinematic_animation)
|
|
Set_Cinematic_Camera_Key(cine_start, 500, 20, 350, 1, 0, 0, 0)
|
|
-- Set_Cinematic_Camera_Key(target_pos, xoffset_dist, yoffset_pitch, zoffset_yaw, angles?, attach_object, use_object_rotation, cinematic_animation)
|
|
Set_Cinematic_Target_Key(cine_start, 0, 0, 0, 0, 0, 0, 0)
|
|
-- Transition_Cinematic_Camera_Key(target_pos, xoffset_dist, yoffset_pitch, zoffset_yaw, angles?, attach_object, use_object_rotation, cinematic_animation)
|
|
Transition_Cinematic_Camera_Key(cine_start, 8, 400, 30, 350, 1, 0, 0, 0)
|
|
|
|
--imperial_squad
|
|
|
|
ReinforceList(imperial_squad, cine_start.Get_Position(), empire_player, false, true)
|
|
|
|
|
|
|
|
Story_Event("CUE_FIRST_INTRO_DIALOG")
|
|
--Hint: Imperial forces have detected the Rebel presence here on the surface of Kashyyyk.
|
|
--You will need to gather your troops and defend the Alliance base on this planet.
|
|
Sleep(1.5)
|
|
walker_02.Turn_To_Face(walker_02_face)
|
|
Sleep(2)
|
|
cine_start.Play_SFX_Event("Unit_Shuttle_Landing_3")
|
|
Sleep(2)
|
|
walker_02.Turn_To_Face(walker_01)
|
|
|
|
|
|
|
|
end
|
|
|
|
function State_First_Intro_Dialog_Done(message)
|
|
if message == OnEnter then
|
|
Sleep(2)
|
|
Fade_Screen_Out(1)
|
|
|
|
|
|
Create_Thread("Cine_Patrol_PatrolAway")
|
|
|
|
Sleep(1)
|
|
|
|
Story_Event("CUE_SECOND_INTRO_DIALOG")
|
|
Fade_Screen_In(1)
|
|
|
|
Set_Cinematic_Camera_Key(player_squad, 250, 12, 30, 1, player_squad, 1, 0)
|
|
-- Set_Cinematic_Target_Key(target_pos, x_dist, y_pitch, z_yaw, euler, pobj, use_object_rotation, cinematic_animation)
|
|
Set_Cinematic_Target_Key(player_squad, 0, 0, 0, 0, player_squad, 1, 0)
|
|
|
|
Create_Thread("Cine_Wookies_Run_Away")
|
|
end
|
|
end
|
|
|
|
function State_Second_Intro_Dialog_Done(message)
|
|
if message == OnEnter then
|
|
|
|
Point_Camera_At(player_squad)
|
|
|
|
End_Cinematic_Camera()
|
|
Letter_Box_Out(.5)
|
|
Lock_Controls(0)
|
|
Suspend_AI(0)
|
|
end
|
|
end
|
|
|
|
function Cine_Patrol_PatrolAway()
|
|
patrol_goto1 = Find_Hint("GENERIC_MARKER_LAND","patrol-goto1")
|
|
patrol_goto2 = Find_Hint("GENERIC_MARKER_LAND","patrol-goto2")
|
|
--patrol_goto3 = Find_Hint("GENERIC_MARKER_LAND","patrol-goto3")
|
|
patrol_finalface = Find_Hint("GENERIC_MARKER_LAND","patrol-finalfacespot")
|
|
--player_squad.Move_To(patrol_goto1)
|
|
--player_squad.Move_To(patrol_goto2)
|
|
--player_squad.Move_To(patrol_goto3)
|
|
Formation_Move(player_squad, patrol_goto1)
|
|
Formation_Move(player_squad, patrol_goto2)
|
|
--Formation_Move(player_squad, patrol_goto3)
|
|
|
|
player_squad.Turn_To_Face(patrol_finalface)
|
|
end
|
|
|
|
function Cine_Wookies_Run_Away()
|
|
--MessageBox("Cine_Wookies_Run_Away hit!!")
|
|
wookie_01 = Find_Hint("WOOKIE_WARRIOR_UNARMED_SOLO","wok1")
|
|
wookie_02 = Find_Hint("WOOKIE_WARRIOR_UNARMED_SOLO","wok2")
|
|
wookie_03 = Find_Hint("WOOKIE_WARRIOR_UNARMED_SOLO","wok3")
|
|
wookie_04 = Find_Hint("WOOKIE_WARRIOR_UNARMED_SOLO","wok4")
|
|
wookie_05 = Find_Hint("WOOKIE_WARRIOR_UNARMED_SOLO","wok5")
|
|
|
|
wookie_01.Override_Max_Speed(wookie_speed)
|
|
wookie_02.Override_Max_Speed(wookie_speed)
|
|
wookie_03.Override_Max_Speed(wookie_speed)
|
|
wookie_04.Override_Max_Speed(wookie_speed)
|
|
wookie_05.Override_Max_Speed(wookie_speed)
|
|
|
|
wookie_tree_01 = Find_Hint("GENERIC_MARKER_LAND","woktree-01")
|
|
wookie_tree_02 = Find_Hint("GENERIC_MARKER_LAND","woktree-02")
|
|
|
|
Register_Prox(wookie_tree_01, Enter_Wookie_Tree, 10, neutral_player)
|
|
Register_Prox(wookie_tree_02, Enter_Wookie_Tree, 10, neutral_player)
|
|
|
|
Sleep(3)
|
|
wookie_01.Move_To(wookie_tree_01)
|
|
Sleep(.25)
|
|
wookie_02.Move_To(wookie_tree_01)
|
|
Sleep(.25)
|
|
wookie_03.Move_To(wookie_tree_01)
|
|
Sleep(1)
|
|
wookie_04.Move_To(wookie_tree_02)
|
|
Sleep(.25)
|
|
wookie_05.Move_To(wookie_tree_02)
|
|
end
|
|
|
|
|
|
|
|
function Enter_Wookie_Tree(prox_obj, trigger_obj)
|
|
if trigger_obj.Get_Type().Get_Name() == "WOOKIE_WARRIOR_UNARMED_SOLO" then
|
|
--MessageBox("deleting wookie?")
|
|
trigger_obj.Despawn()
|
|
end
|
|
end
|
|
|
|
function Clearing_Wookies_Retreat(prox_obj, trigger_obj)
|
|
|
|
if not flag_wookie_clearing_breached then
|
|
flag_wookie_clearing_breached = true
|
|
--MessageBox("Wookie clearing prox breached!!")
|
|
Create_Thread("Clearing_Wookies_Run_Away")
|
|
end
|
|
end
|
|
|
|
function Clearing_Wookies_Run_Away()
|
|
--MessageBox("Cine_Wookies_Run_Away hit!!")
|
|
|
|
wookiie_clearing_wookiie_01.Override_Max_Speed(wookie_speed)
|
|
wookiie_clearing_wookiie_02.Override_Max_Speed(wookie_speed)
|
|
wookiie_clearing_wookiie_03.Override_Max_Speed(wookie_speed)
|
|
wookiie_clearing_wookiie_04.Override_Max_Speed(wookie_speed)
|
|
wookiie_clearing_wookiie_05.Override_Max_Speed(wookie_speed)
|
|
wookiie_clearing_wookiie_06.Override_Max_Speed(wookie_speed)
|
|
wookiie_clearing_wookiie_07.Override_Max_Speed(wookie_speed)
|
|
wookiie_clearing_wookiie_08.Override_Max_Speed(wookie_speed)
|
|
wookiie_clearing_wookiie_09.Override_Max_Speed(wookie_speed)
|
|
|
|
--Sleep(1)
|
|
wookiie_clearing_wookiie_01.Move_To(wookiie_tree03)
|
|
Sleep(.05)
|
|
wookiie_clearing_wookiie_02.Move_To(wookiie_tree03)
|
|
Sleep(.25)
|
|
wookiie_clearing_wookiie_03.Move_To(wookiie_tree03)
|
|
Sleep(.05)
|
|
wookiie_clearing_wookiie_04.Move_To(wookiie_tree03)
|
|
Sleep(.25)
|
|
wookiie_clearing_wookiie_05.Move_To(wookiie_tree03)
|
|
Sleep(.05)
|
|
wookiie_clearing_wookiie_06.Move_To(wookiie_tree03)
|
|
Sleep(.05)
|
|
wookiie_clearing_wookiie_07.Move_To(wookiie_tree03)
|
|
Sleep(.25)
|
|
wookiie_clearing_wookiie_08.Move_To(wookiie_tree03)
|
|
Sleep(.05)
|
|
wookiie_clearing_wookiie_09.Move_To(wookiie_tree03)
|
|
Sleep(.25)
|
|
|
|
end
|
|
|
|
function Clearing2_Wookies_Retreat(prox_obj, trigger_obj)
|
|
|
|
if not flag_wookie_clearing2_breached then
|
|
flag_wookie_clearing2_breached = true
|
|
--MessageBox("Wookie clearing2 prox breached!!")
|
|
Create_Thread("Clearing2_Wookies_Run_Away")
|
|
end
|
|
end
|
|
|
|
function Clearing2_Wookies_Run_Away()
|
|
--MessageBox("Clearing2_Wookies_Retreat hit!!")
|
|
|
|
wookiie_clearing02_wookiie_01.Override_Max_Speed(wookie_speed)
|
|
wookiie_clearing02_wookiie_02.Override_Max_Speed(wookie_speed)
|
|
wookiie_clearing02_wookiie_03.Override_Max_Speed(wookie_speed)
|
|
wookiie_clearing02_wookiie_04.Override_Max_Speed(wookie_speed)
|
|
wookiie_clearing02_wookiie_05.Override_Max_Speed(wookie_speed)
|
|
|
|
|
|
--Sleep(1)
|
|
wookiie_clearing02_wookiie_01.Move_To(wookiie_tree04)
|
|
Sleep(.05)
|
|
wookiie_clearing02_wookiie_02.Move_To(wookiie_tree04)
|
|
Sleep(.25)
|
|
wookiie_clearing02_wookiie_03.Move_To(wookiie_tree04)
|
|
Sleep(.05)
|
|
wookiie_clearing02_wookiie_04.Move_To(wookiie_tree04)
|
|
Sleep(.25)
|
|
wookiie_clearing02_wookiie_05.Move_To(wookiie_tree04)
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------
|
|
--jdg misc highlighting events (small arrows)
|
|
function State_Highlight_On_Comm_Jammer(message)
|
|
if message == OnEnter then
|
|
comm_jammer = Find_Hint("GENERIC_MARKER_LAND","comm-jammer")
|
|
if TestValid(comm_jammer) then
|
|
Add_Radar_Blip(comm_jammer, "comm_jammer_blip")
|
|
comm_jammer.Highlight_Small(true, -50)
|
|
end
|
|
end
|
|
end
|
|
|
|
function State_Highlight_On_Turrets(message)
|
|
if message == OnEnter then
|
|
turret_01_flag = Find_Hint("GENERIC_MARKER_LAND","bactatank")
|
|
if TestValid(turret_01_flag) then -- bacta tank
|
|
Add_Radar_Blip(turret_01_flag, "turret_01_blip")
|
|
turret_01_flag.Highlight_Small(true, -100)
|
|
end
|
|
|
|
turret_02_flag = Find_Hint("GENERIC_MARKER_LAND","ai-turret")
|
|
if TestValid(turret_02_flag) then -- anti-infantry turret
|
|
Add_Radar_Blip(turret_02_flag, "turret_02_blip")
|
|
turret_02_flag.Highlight_Small(true, -100)
|
|
end
|
|
end
|
|
end
|
|
|
|
function State_Highlight_Off_AITurret(message)
|
|
if message == OnEnter then
|
|
-- anti-infantry turret
|
|
--MessageBox("remove flag from ai turret")
|
|
Remove_Radar_Blip("turret_02_blip")
|
|
turret_02_flag.Highlight_Small(false)
|
|
|
|
end
|
|
end
|
|
|
|
------------------------------------------------------------------------------------------------------------
|
|
--jdg this destroys the walls at the rebel base that prevent getting too far ahead
|
|
function State_Remove_Base_Walls(message)
|
|
if message == OnEnter then
|
|
Create_Thread("Mauler01_Attack_Wall")
|
|
Create_Thread("Mauler02_Attack_Wall")
|
|
|
|
--make all rebels invulnerable for a few seconds
|
|
player_unit_list = Find_All_Objects_Of_Type(rebel_player)
|
|
|
|
for i, player_unit in pairs(player_unit_list) do
|
|
if TestValid(player_unit) then
|
|
--MessageBox("player_unit.Make_Invulnerable(true)")
|
|
player_unit.Make_Invulnerable(true)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
end
|
|
end
|
|
|
|
function Mauler01_Attack_Wall()
|
|
mauler_01.Prevent_All_Fire(true)
|
|
mauler_01.Prevent_Opportunity_Fire(true)
|
|
--Formation_Move(mauler_01, mauler_01_goto)
|
|
--BlockOnCommand(mauler_01.Move_To(mauler_01_goto))
|
|
|
|
mauler_01.Move_To(mauler_01_goto)
|
|
Sleep(3)
|
|
mauler_01.Stop()
|
|
mauler_01.Activate_Ability("SELF_DESTRUCT", true)
|
|
end
|
|
|
|
function Mauler02_Attack_Wall()
|
|
mauler_02.Prevent_All_Fire(true)
|
|
mauler_02.Prevent_Opportunity_Fire(true)
|
|
--Formation_Move(mauler_02, mauler_02_goto)
|
|
--BlockOnCommand(mauler_02.Move_To(mauler_02_goto))
|
|
mauler_02.Move_To(mauler_02_goto)
|
|
Sleep(3)
|
|
mauler_02.Stop()
|
|
|
|
mauler_02.Activate_Ability("SELF_DESTRUCT", true)
|
|
end
|
|
|
|
function State_Tutorial_M01_Patrol_SpreadOut_Hint(message)
|
|
if message == OnEnter then
|
|
|
|
unit_list = Find_All_Objects_Of_Type("SQUAD_REBEL_TROOPER")
|
|
if table.getn(unit_list) == 0 then
|
|
MessageBox("Couldn't find the Rebel Troopers!")
|
|
else
|
|
for i,unit in pairs(unit_list) do
|
|
rebel_player.Select_Object(unit)
|
|
end
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
|
|
------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
------------------------------------------------------------------------------------------------------------
|
|
function Spawn_Squad_1(prox_obj, trigger_obj)
|
|
|
|
-- Ignore transports which aparently have a HUGE bound
|
|
if trigger_obj.Get_Type().Get_Name() == "GALLOFREE_TRANSPORT_LANDING" then
|
|
return
|
|
end
|
|
|
|
-- Turn off the prox trigger otherwise we are going to have a whole lot 'o rebels running around
|
|
prox_obj.Cancel_Event_Object_In_Range(Spawn_Squad_1)
|
|
|
|
-- Spawn the first squad, and let the story script know
|
|
--MessageBox("]]]] Spawning Squad 1: triggering object = %s",trigger_obj.Get_Type().Get_Name())
|
|
unit_list = SpawnList(rebel_squad, squad1_marker, rebel_player, false, true)
|
|
Story_Event("SQUAD_ONE")
|
|
|
|
-- Set up next step
|
|
Story_Event("HIGHLIGHT_ZONE_TWO")
|
|
comm_jammer_list = Find_All_Objects_Of_Type("COMM_JAMMER")
|
|
if table.getn(comm_jammer_list) == 0 then
|
|
MessageBox("Couldn't find the Comm_Jammer object! Aborting.")
|
|
return
|
|
end
|
|
comm_jammer_obj = comm_jammer_list[1]
|
|
Register_Death_Event(comm_jammer_obj,Comm_Jammer_Destroyed)
|
|
Register_Prox(comm_jammer_obj, Prox_Jammer, 150, rebel_player)
|
|
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------
|
|
|
|
function Comm_Jammer_Destroyed()
|
|
Story_Event("HIGHLIGHT_ZONE_THREE")
|
|
Remove_Radar_Blip("comm_jammer_blip")
|
|
comm_jammer.Highlight_Small(false)
|
|
|
|
if not comm_jammer_deleted then
|
|
Story_Event("JAMMER_VICTORY")
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------
|
|
|
|
function Prox_SkipBuildMission(prox_obj, trigger_obj)
|
|
if flag_okay_SkipBuild_Mission == true then
|
|
prox_obj.Cancel_Event_Object_In_Range(Prox_SkipBuildMission)
|
|
Story_Event("HIGHLIGHT_ZONE_FOUR")
|
|
Story_Event("HINT_OVERRIDE")
|
|
skipped_building = true
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------
|
|
|
|
function Prox_Base(prox_obj, trigger_obj)
|
|
|
|
if TestValid(trigger_obj) and trigger_obj.Get_Type() == Find_Object_Type("SQUAD_REBEL_TROOPER") then
|
|
|
|
-- turn off the trigger
|
|
prox_obj.Cancel_Event_Object_In_Range(Prox_Base)
|
|
|
|
comm_jammer_deleted = true
|
|
if TestValid(comm_jammer_obj) then
|
|
comm_jammer_obj.Take_Damage(10000)
|
|
end
|
|
|
|
turret_01.Change_Owner(rebel_player)
|
|
turret_02.Change_Owner(rebel_player)
|
|
rebel_comm_array.Change_Owner(rebel_player)
|
|
rebel_base.Change_Owner(rebel_player)
|
|
rebel_base.Set_Garrison_Spawn(true)
|
|
|
|
unit_list = SpawnList(rebel_base_squad, rebel_base_marker, rebel_player, false, true)
|
|
unit_list = SpawnList(rebel_base_squad, rebel_base_marker2, rebel_player, false, true)
|
|
|
|
--if not flag_given_HIGHLIGHT_OFF_03 then
|
|
--flag_given_HIGHLIGHT_OFF_03 = true
|
|
Story_Event("HIGHLIGHT_OFF_03")
|
|
--end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------
|
|
|
|
function Prox_Jammer(prox_obj, trigger_obj)
|
|
prox_obj.Cancel_Event_Object_In_Range(Prox_Jammer)
|
|
Story_Event("JAMMER_SPOTTED")
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------
|
|
|
|
function State_Tutorial_M01_Construct_Done(message)
|
|
|
|
if message == OnEnter then
|
|
if not skipped_building then
|
|
--MessageBox("State_Tutorial_M01_Construct_Done HIT!!")
|
|
time_until_assault = 1
|
|
Register_Timer(Start_Imperial_Assault,time_until_assault)
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------
|
|
|
|
function Start_Imperial_Assault()
|
|
--jdg causing a crash....commenting out for now
|
|
--skip_build_marker.Cancel_Event_Object_In_Range(Prox_SkipBuildMission)
|
|
flag_okay_SkipBuild_Mission = false
|
|
|
|
-- Send the imperials to the base
|
|
unit_list = Find_All_Objects_Of_Type("STORMTROOPER_TEAM")
|
|
for i,unit in pairs(unit_list) do
|
|
unit.Attack_Move(rebel_base)
|
|
end
|
|
|
|
--MessageBox("Starting assault")
|
|
Sleep(3)
|
|
Story_Event("IMPERIAL_ASSAULT")
|
|
Story_Event("HINT_OVERRIDE")
|
|
--Register_Timer(Send_Scouts,40) -- The imperial light scouts are next in line, but they are fast!
|
|
Register_Timer(Send_ATSTs,15)
|
|
|
|
imperial_assault_in_progress = true
|
|
end
|
|
|
|
|
|
function Send_ATSTs()
|
|
--MessageBox("Sending AT-ST's")
|
|
unit_list = Find_All_Objects_Of_Type("AT_ST_WALKER")
|
|
for i,unit in pairs(unit_list) do
|
|
unit.Attack_Move(rebel_base)
|
|
end
|
|
Story_Event("HINT_OVERRIDE")
|
|
Story_Event("ATST_ASSAULT")
|
|
end
|
|
|
|
--function Send_Scouts()
|
|
--MessageBox("Sending Scouts")
|
|
--unit_list = Find_All_Objects_Of_Type("SCOUT_TROOPER")
|
|
--for i,unit in pairs(unit_list) do
|
|
--unit.Attack_Move(rebel_base)
|
|
--end
|
|
--Story_Event("HINT_OVERRIDE")
|
|
--Story_Event("SCOUT_ASSAULT")
|
|
--end
|
|
|
|
function Player_Back_To_Vulnerable()
|
|
Sleep(1)
|
|
|
|
--remove rebels invulnerable status
|
|
player_unit_list = Find_All_Objects_Of_Type(rebel_player)
|
|
|
|
for i, player_unit in pairs(player_unit_list) do
|
|
if TestValid(player_unit) then
|
|
--MessageBox("Player_Back_To_Vulnerable")
|
|
player_unit.Make_Invulnerable(false)
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------
|
|
-- Story_Mode_Service() - Processes each frame.
|
|
-----------------------------------------------------------------------------------------------------------------------
|
|
|
|
function Story_Mode_Service()
|
|
|
|
if not init_done then
|
|
return
|
|
end
|
|
|
|
-- If all the infantry are killed, rebels lose
|
|
unit_list = Find_All_Objects_Of_Type("REBEL_TROOPER_TEAM")
|
|
plex_list = Find_All_Objects_Of_Type("PLEX_SOLDIER_TEAM")
|
|
if (table.getn(unit_list) == 0) and (table.getn(plex_list) == 0) then
|
|
Story_Event("REBELS_LOSE")
|
|
end
|
|
|
|
|
|
if not flag_rebel_wall_is_down and not
|
|
(TestValid(mauler_01) or TestValid(mauler_02))then
|
|
flag_rebel_wall_is_down = true
|
|
|
|
|
|
|
|
wall_list = Find_All_Objects_With_Hint("tempwall")
|
|
for i,wall in pairs(wall_list) do
|
|
if TestValid(wall) then
|
|
--MessageBox("walls invulnerable == false")
|
|
wall.Make_Invulnerable(false)
|
|
--wall.Despawn()
|
|
wall.Take_Damage(10000)
|
|
end
|
|
end
|
|
|
|
Create_Thread("Player_Back_To_Vulnerable")
|
|
|
|
|
|
|
|
end
|
|
|
|
if imperial_assault_in_progress then
|
|
unit_list = Find_All_Objects_Of_Type("STORMTROOPER_TEAM")
|
|
if table.getn(unit_list) > 0 then
|
|
--DebugMessage("]]]] still stormtroopers alive")
|
|
return
|
|
end
|
|
unit_list = Find_All_Objects_Of_Type("AT_ST_WALKER")
|
|
if table.getn(unit_list) > 0 then
|
|
--DebugMessage("]]]] still AT-ST's alive")
|
|
return
|
|
end
|
|
unit_list = Find_All_Objects_Of_Type("SCOUT_TROOPER")
|
|
if table.getn(unit_list) > 0 then
|
|
--DebugMessage("]]]] still scouts alive")
|
|
return
|
|
end
|
|
|
|
--MessageBox("Imperial Assault was repelled")
|
|
imperial_assault_in_progress = false
|
|
Story_Event("HINT_OVERRIDE")
|
|
Story_Event("HIGHLIGHT_ZONE_FOUR")
|
|
--Register_Prox(reinforce_point1, Spawn_Troopers_01, 200, rebel_player)
|
|
Register_Prox(reinforce_point2, Spawn_Troopers_02, 200, rebel_player)
|
|
end
|
|
|
|
if not rp1_captured and reinforce_point1.Get_Owner() == rebel_player then
|
|
Story_Event("HINT_OVERRIDE")
|
|
Story_Event("STOP_HIGHLIGHT_RP1")
|
|
rp1_captured = true
|
|
rps_captured = rps_captured + 1
|
|
if rps_captured == 1 then
|
|
Story_Event("FIRST_REINFORCE_CAPTURED")
|
|
else
|
|
Story_Event("MISSION_COMPLETE")
|
|
end
|
|
end
|
|
|
|
if not rp2_captured and reinforce_point2.Get_Owner() == rebel_player then
|
|
Story_Event("HINT_OVERRIDE")
|
|
Story_Event("STOP_HIGHLIGHT_RP2")
|
|
rp2_captured = true
|
|
rps_captured = rps_captured + 1
|
|
if rps_captured == 1 then
|
|
Story_Event("FIRST_REINFORCE_CAPTURED")
|
|
else
|
|
Story_Event("MISSION_COMPLETE")
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------
|
|
|
|
function Spawn_Troopers_01 (prox_obj, trigger_obj)
|
|
--MessageBox("TROOP_TRANSPORT_1")
|
|
--Story_Event("TROOP_TRANSPORT_1")
|
|
prox_obj.Cancel_Event_Object_In_Range(Spawn_Troopers_01)
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function State_Land_Troops_at_First_RP(message)
|
|
if message == OnEnter then
|
|
ReinforceList(imperial_squad, reinforce_point1.Get_Position(), empire_player, false, true)
|
|
end
|
|
end
|
|
|
|
function Spawn_Troopers_02 (prox_obj, trigger_obj)
|
|
--MessageBox("TROOP_TRANSPORT_2")
|
|
Story_Event("TROOP_TRANSPORT_2")
|
|
prox_obj.Cancel_Event_Object_In_Range(Spawn_Troopers_02)
|
|
ReinforceList(imperial_squad, reinforce_point2.Get_Position(), empire_player, false, true)
|
|
end
|
|
|
|
function State_Tutorial_M01_Construct_01(message)
|
|
if message == OnEnter then
|
|
Story_Event("HINT_OVERRIDE")
|
|
|
|
--MessageBox("remove flag from bacta tank")
|
|
Remove_Radar_Blip("turret_01_blip")
|
|
turret_01_flag.Highlight_Small(false)
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------
|
|
|
|
function State_Tutorial_M01_Intro_07(message)
|
|
if message == OnEnter then
|
|
|
|
--SQUAD_REBEL_TROOPER
|
|
unit_list = Find_All_Objects_Of_Type("SQUAD_REBEL_TROOPER")
|
|
if table.getn(unit_list) == 0 then
|
|
MessageBox("Couldn't find the Rebel Troopers!")
|
|
else
|
|
for i,unit in pairs(unit_list) do
|
|
rebel_player.Select_Object(unit)
|
|
end
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------
|
|
|