Initial commit
This commit is contained in:
893
DATA/SCRIPTS/STORY/STORY_REBEL_ACTI_M02_LAND.LUA
Normal file
893
DATA/SCRIPTS/STORY/STORY_REBEL_ACTI_M02_LAND.LUA
Normal file
@@ -0,0 +1,893 @@
|
||||
--/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
--
|
||||
-- (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: Joseph_Gernert $
|
||||
--
|
||||
-- $Change:
|
||||
--
|
||||
-- $DateTime:
|
||||
--
|
||||
-- $Revision:
|
||||
--
|
||||
--/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
require("PGStoryMode")
|
||||
|
||||
--
|
||||
-- Definitions -- This function is called once when the script is first created.
|
||||
--
|
||||
|
||||
function Definitions()
|
||||
|
||||
DebugMessage("%s -- In Definitions", tostring(Script))
|
||||
|
||||
StoryModeEvents =
|
||||
{
|
||||
Rebel_Act1_M02_Begin = State_Rebel_A01M02_Begin
|
||||
,Rebel_ActI_M02_OK_To_Hack = State_Rebel_A01M02_OK_To_Hack
|
||||
,Rebel_ActI_M02_Stormtrooper_Speech_00 = State_Rebel_ActI_M02_Clear_Base
|
||||
--,Rebel_ActI_M02_Entry_Speech_03a = State_Intro_Dialogue_Done
|
||||
,Rebel_ActI_M02_Entry_Speech_000b = State_ActI_M02_Entry_Speech_000b
|
||||
,Rebel_ActI_M02_Entry_Speech_00_Remove_Text = State_Rebel_ActI_M02_Entry_Speech_00_Remove_Text
|
||||
,Rebel_ActI_M02_Entry_Speech_01_Remove_Text = State_Rebel_ActI_M02_Entry_Speech_01_Remove_Text
|
||||
,Rebel_ActI_M02_Entry_Speech_03a = State_Rebel_ActI_M02_Entry_Speech_03a
|
||||
,Rebel_Act1_M02_R2_Victory = State_Play_R2_VictoryAnim
|
||||
|
||||
}
|
||||
|
||||
reinforcement_list1 = {
|
||||
"Imperial_Medium_Stormtrooper_Squad"
|
||||
,"Imperial_Medium_Stormtrooper_Squad"
|
||||
,"Imperial_Medium_Stormtrooper_Squad"
|
||||
,"Imperial_Heavy_Scout_Squad"
|
||||
}
|
||||
|
||||
reinforcement_list2 = {
|
||||
"Imperial_Medium_Stormtrooper_Squad"
|
||||
,"Imperial_Medium_Stormtrooper_Squad"
|
||||
,"Imperial_Medium_Stormtrooper_Squad"
|
||||
,"Imperial_Heavy_Scout_Squad"
|
||||
--,"Imperial_Heavy_Scout_Squad"
|
||||
}
|
||||
|
||||
reinforcement_list3 = {
|
||||
"Imperial_Medium_Stormtrooper_Squad"
|
||||
,"Imperial_Medium_Stormtrooper_Squad"
|
||||
,"Imperial_Medium_Stormtrooper_Squad"
|
||||
--,"Imperial_Heavy_Scout_Squad"
|
||||
--,"Imperial_Heavy_Scout_Squad"
|
||||
,"Imperial_Anti_Infantry_Brigade_Small"
|
||||
}
|
||||
|
||||
marker_function_list = {
|
||||
lz1_setup
|
||||
,lz2_setup
|
||||
,lz3_setup
|
||||
}
|
||||
|
||||
droid_hunter_list1 = {
|
||||
"Imperial_Light_Scout_Squad"
|
||||
}
|
||||
|
||||
droid_hunter_list2 = {
|
||||
"Imperial_Light_Scout_Squad"
|
||||
,"Imperial_Light_Scout_Squad"
|
||||
}
|
||||
|
||||
droid_hunter_list3 = {
|
||||
"Imperial_Light_Scout_Squad"
|
||||
,"Imperial_Light_Scout_Squad"
|
||||
,"Imperial_Anti_Infantry_Brigade_Small"
|
||||
}
|
||||
|
||||
num_reinforcements = 0
|
||||
allowed_reinforcements = 3
|
||||
reinforcement_delay = 30
|
||||
initial_reinforcement_delay = 10
|
||||
r2_uplink_range = 80
|
||||
r2_enemy_range = 30
|
||||
r2_hack_time = 180
|
||||
r2_hack_done = false
|
||||
r2_reinforcement_range = 180
|
||||
|
||||
turret_reveal_range = 200
|
||||
|
||||
camera_reset_time = 8
|
||||
|
||||
reinforcement_waves = 3
|
||||
|
||||
r_marker_loc = 0
|
||||
end_triggered = false
|
||||
flag_playing_lightning_sound = false
|
||||
trooper_group1 = nil
|
||||
trooper_group2 = nil
|
||||
|
||||
-- For memory pool cleanup hints
|
||||
rebel_player = nil
|
||||
unit = nil
|
||||
r2d2_team = nil
|
||||
r2d2 = nil
|
||||
fog_id = nil
|
||||
fog_id2 = nil
|
||||
fog_id3 = nil
|
||||
fog_id4 = nil
|
||||
|
||||
end
|
||||
|
||||
-- ##########################################################################################
|
||||
-- Set up the mission
|
||||
-- ##########################################################################################
|
||||
|
||||
function State_Rebel_A01M02_Begin(message)
|
||||
if message == OnEnter then
|
||||
-- Prevent the AI from performing an automatic fog of war reveal for this tactical scenario.
|
||||
-- MessageBox("disallowing ai controlled fog reveal")
|
||||
GlobalValue.Set("Allow_AI_Controlled_Fog_Reveal", 0)
|
||||
|
||||
--Fade_Screen_Out(0)
|
||||
--Suspend_AI(1)
|
||||
--Lock_Controls(1)
|
||||
--Letter_Box_In(0)
|
||||
|
||||
r_marker_list = Find_All_Objects_Of_Type("REINFORCEMENT_POINT_PLUS10_CAP")
|
||||
r_marker_list[0] = Find_Hint("REINFORCEMENT_POINT_PLUS10_CAP", "area0")
|
||||
r_marker_list[1] = Find_Hint("REINFORCEMENT_POINT_PLUS10_CAP", "area1")
|
||||
r_marker_list[2] = Find_Hint("REINFORCEMENT_POINT_PLUS10_CAP", "area2")
|
||||
|
||||
-- Find the uplink where R2 needs to go
|
||||
r2_uplink = Find_Hint("GENERIC_MARKER_LAND", "UPLINK") -- Marker in front of uplink that r2 moves to
|
||||
uplink = Find_First_Object("Droid_Interface_Station") -- Actual uplink
|
||||
|
||||
-- Find the spawn points
|
||||
empire_spawn_0 = Find_Hint("GENERIC_MARKER_LAND", "REINFORCE_0")
|
||||
empire_spawn_1 = Find_Hint("GENERIC_MARKER_LAND", "REINFORCE_1")
|
||||
empire_spawn_2 = Find_Hint("GENERIC_MARKER_LAND", "REINFORCE_2")
|
||||
|
||||
rebel_transport_pos = Find_Hint("GENERIC_MARKER_LAND", "introshuttle")
|
||||
|
||||
attk_flag_0 = Find_Hint("GENERIC_MARKER_LAND", "attack0")
|
||||
attk_flag_1 = Find_Hint("GENERIC_MARKER_LAND", "attack1")
|
||||
attk_flag_2 = Find_Hint("GENERIC_MARKER_LAND", "attack2")
|
||||
st_guardpos_01 = Find_Hint("GENERIC_MARKER_LAND", "st-guard-01")
|
||||
st_guardpos_02 = Find_Hint("GENERIC_MARKER_LAND", "st-guard-02")
|
||||
st_guard_01 = Find_Hint("AT_ST_WALKER", "st01")
|
||||
st_guard_02 = Find_Hint("AT_ST_WALKER", "st02")
|
||||
hacking_turret = Find_Hint("SKIRMISH_BUILD_PAD", "hackhint")
|
||||
droid_move = Find_Hint("GENERIC_MARKER_LAND", "3pomoveto")
|
||||
droid_teleport = Find_Hint("GENERIC_MARKER_LAND", "3poteleport")
|
||||
cinematic_droids_prime = Find_First_Object("Tactical_R2_3PO_Team")
|
||||
cinematic_c3po = Find_First_Object("Droid_C3P0")
|
||||
cinematic_r2d2 = Find_First_Object("Droid_R2D2")
|
||||
|
||||
scout_trooper = Find_Hint("SCOUT_TROOPER", "scouttrooper")
|
||||
--scout_trooper.Prevent_AI_Usage(true)
|
||||
|
||||
stormtrooper_guard_list = Find_All_Objects_Of_Type("STORMTROOPER")
|
||||
for j, unit in pairs(stormtrooper_guard_list) do
|
||||
unit.Prevent_AI_Usage(true)
|
||||
nearest_unit = Find_Nearest(unit, "AT_ST_WALKER")
|
||||
unit.Guard_Target(nearest_unit.Get_Position())
|
||||
end
|
||||
|
||||
st_guard_01.Guard_Target(st_guardpos_01.Get_Position())
|
||||
st_guard_02.Guard_Target(st_guardpos_02.Get_Position())
|
||||
|
||||
-- Make sure we found everything
|
||||
if not empire_spawn_0 or not empire_spawn_1 or not empire_spawn_2 or not r2_uplink or not uplink then
|
||||
--MessageBox("%s-expected objects not found; aborting", tostring(Script))
|
||||
return
|
||||
else
|
||||
rebel_player = Find_Player("Rebel")
|
||||
empire_player = Find_Player("Empire")
|
||||
|
||||
-- SoaFE: This is now done in-map to prevent perception errors
|
||||
-- Force create all anti-infantry turrets
|
||||
-- e_turret_list = Find_All_Objects_Of_Type("SKIRMISH_BUILD_PAD")
|
||||
--
|
||||
-- for i, unit in pairs(e_turret_list) do
|
||||
-- unit.Change_Owner(empire_player)
|
||||
-- unit.Build("UC_Empire_Buildable_Anti_Infantry_Turret")
|
||||
-- unit.Lock_Build_Pad_Contents(true)
|
||||
-- end
|
||||
end
|
||||
|
||||
-- Lock out controls for intro cinematic and reveal FOW
|
||||
|
||||
-- Create_Cinematic_Transport(object_type_name, player_id, transport_pos, zangle, phase_mode, anim_delta, idle_time, persist,hint)
|
||||
rebel_shuttle = Create_Cinematic_Transport("Gallofree_Transport_Landing", rebel_player.Get_ID(), rebel_transport_pos, 344, 1, 1.0, 14, 0)
|
||||
|
||||
if not rebel_shuttle then
|
||||
MessageBox("No Shuttle For Joo!")
|
||||
end
|
||||
|
||||
Create_Thread("Intro_Cinematic")
|
||||
|
||||
-- uplink.Highlight(true)
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
function Shuttle_Liftoff()
|
||||
|
||||
-- Sleep(1.5)
|
||||
-- BlockOnCommand(rebel_transport.Play_Animation("Takeoff",false))
|
||||
-- rebel_transport.Despawn()
|
||||
|
||||
|
||||
|
||||
end
|
||||
|
||||
-- ##########################################################################################
|
||||
-- Intro Cinematic functions
|
||||
-- ##########################################################################################
|
||||
|
||||
function Intro_Cinematic()
|
||||
Fade_Screen_Out(0)
|
||||
Suspend_AI(1)
|
||||
Lock_Controls(1)
|
||||
Letter_Box_In(0)
|
||||
Start_Cinematic_Camera()
|
||||
|
||||
if TestValid(cinematic_r2d2) then
|
||||
cinematic_droids = cinematic_r2d2.Get_Parent_Object()
|
||||
end
|
||||
cinematic_droids.Teleport_And_Face(droid_teleport)
|
||||
cinematic_droids.Face_Immediate(droid_move)
|
||||
Fade_Screen_In(2)
|
||||
|
||||
Set_Cinematic_Camera_Key(cinematic_droids, 400, 45, 90, 1, 0, 0, 0)
|
||||
Set_Cinematic_Target_Key(cinematic_droids, 0, 0, 0, 0, 0, 0, 0)
|
||||
Cinematic_Zoom(10,0.9)
|
||||
Story_Event("RM02_REBELTROOPER_LINE01_GO")
|
||||
|
||||
|
||||
end
|
||||
|
||||
|
||||
function State_ActI_M02_Entry_Speech_000b(message)
|
||||
if message == OnEnter then
|
||||
|
||||
Story_Event("RM02_C3P0_LINE01_GO")
|
||||
|
||||
Set_Cinematic_Camera_Key(cinematic_droids, 55, 12, 280, 1, 0, 0, 0)
|
||||
Set_Cinematic_Target_Key(cinematic_droids, 0, 0, 14, 0, 0, 0, 0)
|
||||
cinematic_c3po.Play_Animation("Idle",false,2)
|
||||
Cinematic_Zoom(10,0.9)
|
||||
end
|
||||
end
|
||||
|
||||
function State_Rebel_ActI_M02_Entry_Speech_00_Remove_Text(message)
|
||||
if message == OnEnter then
|
||||
|
||||
Story_Event("RM02_R2D2_LINE01_GO")
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
function State_Rebel_ActI_M02_Entry_Speech_01_Remove_Text(message)
|
||||
if message == OnEnter then
|
||||
|
||||
Story_Event("RM02_ANTILLES_LINE01_GO")
|
||||
|
||||
Sleep(.5)
|
||||
|
||||
Set_Cinematic_Camera_Key(r2_uplink, 400, 35, 0, 1, 0, 0, 0)
|
||||
Set_Cinematic_Target_Key(r2_uplink, 0, 10, 0, 0, 0, 0, 0)
|
||||
Sleep(.5)
|
||||
Cinematic_Zoom(2,0.15)
|
||||
Sleep(2)
|
||||
|
||||
if TestValid(cinematic_r2d2) then
|
||||
cinematic_droids = cinematic_r2d2.Get_Parent_Object()
|
||||
end
|
||||
Set_Cinematic_Camera_Key(droid_move, 100, 12, 180, 1, 0, 0, 0)
|
||||
Set_Cinematic_Target_Key(droid_teleport, 0, 0, 10, 1, 0, 0, 0)
|
||||
|
||||
cinematic_droids.Override_Max_Speed(.4)
|
||||
cinematic_droids.Move_To(droid_move)
|
||||
Transition_Cinematic_Target_Key(droid_move, 5, 0, 0, 10, 1, 0, 0, 0)
|
||||
|
||||
Sleep(5)
|
||||
|
||||
-- Create_Thread("Shuttle_Liftoff")
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
function State_Rebel_ActI_M02_Entry_Speech_03a(message)
|
||||
if message == OnEnter then
|
||||
|
||||
Set_Cinematic_Camera_Key(cinematic_droids, 300, 45, 320, 1, 0, 0, 0)
|
||||
Set_Cinematic_Target_Key(cinematic_droids, 0, 0, 0, 0, 0, 0, 0)
|
||||
|
||||
Sleep(1)
|
||||
|
||||
--end of cinematic ... return to gameplay here
|
||||
Transition_To_Tactical_Camera(1)
|
||||
--Small_Reveal_Area.Undo_Reveal()
|
||||
Sleep(1)
|
||||
End_Cinematic_Camera()
|
||||
cinematic_droids.Override_Max_Speed(false)
|
||||
Letter_Box_Out(1)
|
||||
Lock_Controls(0)
|
||||
Suspend_AI(0)
|
||||
Story_Event("Start_Mission")
|
||||
Register_Prox(hacking_turret, Turret_Hack_Message, turret_reveal_range, rebel_player)
|
||||
fog_id = FogOfWar.Reveal_All(empire_player) -- TEST for AI aggressiveness
|
||||
end
|
||||
end
|
||||
|
||||
function Turret_Hack_Message(prox_obj, trigger_obj)
|
||||
|
||||
prox_obj.Cancel_Event_Object_In_Range(Turret_Hack_Message)
|
||||
Turret_Reveal = FogOfWar.Reveal(rebel_player, prox_obj, 100, 100)
|
||||
Story_Event("Hack_Turret_Message")
|
||||
Register_Timer(Remove_Turret_FOW, 10)
|
||||
|
||||
end
|
||||
|
||||
function Remove_Turret_FOW()
|
||||
|
||||
Turret_Reveal.Undo_Reveal()
|
||||
|
||||
end
|
||||
|
||||
|
||||
-- ##########################################################################################
|
||||
-- Reveal base, set guards to attack
|
||||
-- ##########################################################################################
|
||||
|
||||
function State_Rebel_ActI_M02_Clear_Base(message)
|
||||
if message == OnEnter then
|
||||
-- Set up proximities for R2 near the uplink
|
||||
Register_Prox(r2_uplink, Uplink_Prox, r2_uplink_range, rebel_player)
|
||||
fog_id2 = FogOfWar.Reveal(rebel_player, uplink, 600, 600)
|
||||
|
||||
Create_Thread("Biker_Flees")
|
||||
|
||||
Suspend_AI(0)
|
||||
|
||||
closest_target = Find_Nearest(r2_uplink, rebel_player, true)
|
||||
for k, unit in pairs(stormtrooper_guard_list) do
|
||||
if TestValid(closest_target) and TestValid(unit) then
|
||||
unit.Attack_Move(closest_target)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
function Biker_Flees()
|
||||
|
||||
if TestValid(scout_trooper) then
|
||||
BlockOnCommand(scout_trooper.Move_To(empire_spawn_2))
|
||||
scout_trooper.Make_Invulnerable(false)
|
||||
scout_trooper.Despawn()
|
||||
|
||||
-- MessageBox("Biker killed")
|
||||
|
||||
Sleep(1)
|
||||
pad_list = nil
|
||||
pad_list = Find_All_Objects_Of_Type("Scout_Trooper_No_Bike")
|
||||
if pad_list then
|
||||
for i,unit in pairs(pad_list) do
|
||||
unit.Despawn()
|
||||
end
|
||||
end
|
||||
else
|
||||
-- MessageBox("Biker not found!")
|
||||
end
|
||||
|
||||
Story_Event("ok_to_hack")
|
||||
|
||||
end
|
||||
|
||||
-- ##########################################################################################
|
||||
-- Prox when R2 gets close enough...
|
||||
-- ##########################################################################################
|
||||
|
||||
function Uplink_Prox(prox_obj, trigger_obj)
|
||||
|
||||
if TestValid(trigger_obj) and trigger_obj.Get_Type() == Find_Object_Type("Droid_R2D2") then
|
||||
|
||||
r2d2 = trigger_obj
|
||||
|
||||
prox_obj.Cancel_Event_Object_In_Range(Uplink_Prox)
|
||||
|
||||
-- Have to do this because Prox can't hold BlockOnCommand
|
||||
Create_Thread("Droids_Get_Busy", trigger_obj)
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
function Droids_Get_Busy(r2d2)
|
||||
|
||||
if TestValid(r2d2) then
|
||||
r2d2_team = r2d2.Get_Parent_Object()
|
||||
end
|
||||
|
||||
-- Don't let the player control R2
|
||||
|
||||
if TestValid(r2d2_team) then
|
||||
r2d2_team.Set_Selectable(false)
|
||||
end
|
||||
|
||||
-- MessageBox("about to move")
|
||||
|
||||
if TestValid(r2d2_team) then
|
||||
BlockOnCommand(r2d2_team.Move_To(r2d2_team.Get_Position()))
|
||||
end
|
||||
if TestValid(r2d2_team) then
|
||||
BlockOnCommand(r2d2_team.Move_To(uplink)) --r2_uplink
|
||||
end
|
||||
|
||||
-- MessageBox("done moving")
|
||||
|
||||
if TestValid(r2d2_team) then
|
||||
BlockOnCommand(r2d2_team.Turn_To_Face(uplink))
|
||||
end
|
||||
|
||||
if TestValid(r2d2_team) then
|
||||
|
||||
-- Inform the story script that R2 has arrived at his destination
|
||||
Story_Event("begin_hacking_0")
|
||||
|
||||
-- Add timer to wait until the hack is done
|
||||
Register_Timer(R2_Hack_Done,r2_hack_time)
|
||||
|
||||
-- Bring in the first wave of imperial forces
|
||||
Register_Timer(Bring_In_Reinforcements, initial_reinforcement_delay)
|
||||
|
||||
-- MessageBox("R2 = %s",tostring(r2d2))
|
||||
Create_Thread("R2_Hacking_Turret", r2d2)
|
||||
end
|
||||
end
|
||||
|
||||
-- ##########################################################################################
|
||||
-- Hacking turret functions & timer callbacks
|
||||
-- ##########################################################################################
|
||||
|
||||
function R2_Hacking_Turret(r2pass)
|
||||
|
||||
-- MessageBox("r2pass = %s",tostring(r2pass))
|
||||
|
||||
uplink_bone = uplink.Get_Bone_Position("MuzzleA_01")
|
||||
|
||||
while r2_hack_done == false do
|
||||
if TestValid(r2d2_team) then
|
||||
r2d2_team.Teleport(r2_uplink.Get_Position())
|
||||
r2_bone = r2pass.Get_Bone_Position("MuzzleA_00")
|
||||
if not flag_playing_lightning_sound then
|
||||
flag_playing_lightning_sound = true
|
||||
r2d2_team.Play_SFX_Event("Unit_R2_Lightning")
|
||||
end
|
||||
|
||||
BlockOnCommand(Play_Lightning_Effect("Hack_Electicity_Zaps", r2_bone, uplink_bone))
|
||||
--add sound here
|
||||
|
||||
else
|
||||
r2_team_killed = true
|
||||
r2_hack_done = true
|
||||
Cancel_Timer(R2_Hack_Done)
|
||||
end
|
||||
end
|
||||
|
||||
if not r2_team_killed then
|
||||
r2d2_team.Set_Selectable(true)
|
||||
Story_Event("hack_complete")
|
||||
--remove sound here
|
||||
if TestValid(r2d2_team) then
|
||||
r2d2_team.Stop_SFX_Event("Unit_R2_Lightning")
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function R2_Hack_Done()
|
||||
|
||||
r2_hack_done = true
|
||||
|
||||
-- Now that R2 is done hacking, we need to detect when he's near a reinforcement marker
|
||||
for i, marker in pairs(r_marker_list) do
|
||||
Register_Prox(marker, Reinforcement_Prox, r2_reinforcement_range, rebel_player)
|
||||
end
|
||||
end
|
||||
|
||||
-- ##########################################################################################
|
||||
-- Reinforcement timer functions
|
||||
-- ##########################################################################################
|
||||
|
||||
function Grab_Reinforcement_Point(wave)
|
||||
|
||||
if wave == 1 then
|
||||
rand_index = GameRandom(1,3)
|
||||
--MessageBox("index is %d",rand_index)
|
||||
run_function = marker_function_list[rand_index]
|
||||
run_function()
|
||||
table.remove(marker_function_list, rand_index)
|
||||
|
||||
elseif wave == 2 then
|
||||
rand_index = GameRandom(1,2)
|
||||
--MessageBox("index is %d",rand_index)
|
||||
run_function = marker_function_list[rand_index]
|
||||
run_function()
|
||||
table.remove(marker_function_list, rand_index)
|
||||
|
||||
else
|
||||
run_function = marker_function_list[1]
|
||||
run_function()
|
||||
end
|
||||
end
|
||||
|
||||
function lz1_setup()
|
||||
|
||||
spawn_point = empire_spawn_0
|
||||
attack_marker = attk_flag_0
|
||||
warning_direction = "incoming_reinforcements_0"
|
||||
|
||||
end
|
||||
|
||||
function lz2_setup()
|
||||
|
||||
spawn_point = empire_spawn_1
|
||||
attack_marker = attk_flag_1
|
||||
warning_direction = "incoming_reinforcements_1"
|
||||
|
||||
end
|
||||
|
||||
function lz3_setup()
|
||||
|
||||
spawn_point = empire_spawn_2
|
||||
attack_marker = attk_flag_2
|
||||
warning_direction = "incoming_reinforcements_2"
|
||||
|
||||
end
|
||||
|
||||
function Bring_In_Reinforcements()
|
||||
|
||||
if num_reinforcements < allowed_reinforcements then
|
||||
|
||||
attack_marker = nil
|
||||
|
||||
if num_reinforcements == 0 then
|
||||
|
||||
reinforce_list = reinforcement_list1
|
||||
|
||||
elseif num_reinforcements == 1 then
|
||||
|
||||
reinforce_list = reinforcement_list2
|
||||
|
||||
else
|
||||
|
||||
reinforce_list = reinforcement_list3
|
||||
|
||||
end
|
||||
|
||||
Grab_Reinforcement_Point(num_reinforcements + 1)
|
||||
Story_Event(warning_direction)
|
||||
|
||||
if TestValid(spawn_point) then
|
||||
if TestValid(empire_player) then
|
||||
--MessageBox("Spawning reinforcements")
|
||||
fog_id3 = FogOfWar.Temporary_Reveal(rebel_player, spawn_point, 300)
|
||||
ReinforceList(reinforce_list, spawn_point, empire_player, false, true, true, Find_And_Attack)
|
||||
num_reinforcements = num_reinforcements + 1
|
||||
|
||||
-- Add a timer so that this function will be called again
|
||||
if num_reinforcements <= allowed_reinforcements then
|
||||
Register_Timer(Bring_In_Reinforcements, reinforcement_delay)
|
||||
end
|
||||
else
|
||||
--MessageBox("Invalid player")
|
||||
end
|
||||
else
|
||||
--MessageBox("Invalid spawn point")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Find_And_Attack(attack_list)
|
||||
|
||||
-- find the closest rebel unit and have the newly reinforced units attack it!
|
||||
if attack_marker == nil then
|
||||
attack_marker = r2_uplink
|
||||
end
|
||||
|
||||
-- closest_target = Find_Nearest(attack_marker, rebel_player, true)
|
||||
for k, unit in pairs(attack_list) do
|
||||
if TestValid(unit) then
|
||||
if TestValid(r2d2_team) then
|
||||
unit.Attack_Move(r2d2_team)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- ##########################################################################################
|
||||
-- Droids get to rebel owned marker (win)
|
||||
-- ##########################################################################################
|
||||
|
||||
function Reinforcement_Prox(prox_obj, trigger_obj)
|
||||
|
||||
-- This proximity check is only valid once R2 has done his hacking
|
||||
if r2_hack_done then
|
||||
if not end_triggered then
|
||||
-- We only want to check for R2's proximity
|
||||
if trigger_obj == r2d2_team or trigger_obj.Get_Type() == Find_Object_Type("Droid_R2D2") then
|
||||
-- The marker must be rebel owned
|
||||
if prox_obj.Get_Owner() == rebel_player then
|
||||
end_triggered = true
|
||||
--start end cinematic.
|
||||
Create_Thread("End_Cinematic")
|
||||
--figure out which reforcement point the droids are at.
|
||||
if prox_obj == r_marker_list[0] then
|
||||
r_marker_loc = 0
|
||||
elseif prox_obj == r_marker_list[1] then
|
||||
r_marker_loc = 1
|
||||
elseif prox_obj == r_marker_list[2] then
|
||||
r_marker_loc = 2
|
||||
end
|
||||
--MessageBox("Reinforcement location = %s", r_marker_loc)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- ##########################################################################################
|
||||
-- End Cinematic functions
|
||||
-- ##########################################################################################
|
||||
--r2's cinematic anim call back
|
||||
function State_Play_R2_VictoryAnim(message)
|
||||
if message == OnEnter then
|
||||
cinematic_r2d2 = Find_First_Object("Droid_R2D2")
|
||||
cinematic_r2d2.Play_Animation("idle", false, 3)
|
||||
end
|
||||
end
|
||||
|
||||
function End_Cinematic()
|
||||
|
||||
--Set up markers for cinematic.
|
||||
if r_marker_loc == 0 then
|
||||
transport1_loc = Find_Hint("GENERIC_MARKER_LAND", "trans1loc0")
|
||||
transport2_loc = Find_Hint("GENERIC_MARKER_LAND", "trans2loc0")
|
||||
transport3_loc = Find_Hint("GENERIC_MARKER_LAND", "trans3loc0")
|
||||
droid_start = Find_Hint("GENERIC_MARKER_LAND", "droid1loc0")
|
||||
forces11_start = Find_Hint("GENERIC_MARKER_LAND", "forces11loc0")
|
||||
forces12_start = Find_Hint("GENERIC_MARKER_LAND", "forces12loc0")
|
||||
forces13_start = Find_Hint("GENERIC_MARKER_LAND", "forces13loc0")
|
||||
forces2_start = Find_Hint("GENERIC_MARKER_LAND", "forces2loc0")
|
||||
elseif r_marker_loc == 1 then
|
||||
transport1_loc = Find_Hint("GENERIC_MARKER_LAND", "trans1loc1")
|
||||
transport2_loc = Find_Hint("GENERIC_MARKER_LAND", "trans2loc1")
|
||||
transport3_loc = Find_Hint("GENERIC_MARKER_LAND", "trans3loc1")
|
||||
droid_start = Find_Hint("GENERIC_MARKER_LAND", "droid1loc1")
|
||||
forces11_start = Find_Hint("GENERIC_MARKER_LAND", "forces11loc1")
|
||||
forces12_start = Find_Hint("GENERIC_MARKER_LAND", "forces12loc1")
|
||||
forces13_start = Find_Hint("GENERIC_MARKER_LAND", "forces13loc1")
|
||||
forces2_start = Find_Hint("GENERIC_MARKER_LAND", "forces2loc1")
|
||||
elseif r_marker_loc == 2 then
|
||||
transport1_loc = Find_Hint("GENERIC_MARKER_LAND", "trans1loc2")
|
||||
transport2_loc = Find_Hint("GENERIC_MARKER_LAND", "trans2loc2")
|
||||
transport3_loc = Find_Hint("GENERIC_MARKER_LAND", "trans3loc2")
|
||||
droid_start = Find_Hint("GENERIC_MARKER_LAND", "droid1loc2")
|
||||
forces11_start = Find_Hint("GENERIC_MARKER_LAND", "forces11loc2")
|
||||
forces12_start = Find_Hint("GENERIC_MARKER_LAND", "forces12loc2")
|
||||
forces13_start = Find_Hint("GENERIC_MARKER_LAND", "forces13loc2")
|
||||
forces2_start = Find_Hint("GENERIC_MARKER_LAND", "forces2loc2")
|
||||
end
|
||||
|
||||
--Find Current Forces
|
||||
plex_list = Find_All_Objects_Of_Type("Squad_Plex_Soldier")
|
||||
T2B_list = Find_All_Objects_Of_Type("T2B_Tank")
|
||||
T1C_list = Find_All_Objects_Of_Type("T1C_Tank")
|
||||
Infantry_list = Find_All_Objects_Of_Type("Squad_Rebel_Trooper")
|
||||
|
||||
Fade_Screen_Out(1)
|
||||
Suspend_AI(1)
|
||||
Lock_Controls(1)
|
||||
|
||||
Sleep(1)
|
||||
|
||||
-- Turn off Fog of War
|
||||
fog_id4 = FogOfWar.Reveal(rebel_player, transport1_loc, 9999, 9999)
|
||||
|
||||
Letter_Box_In(0)
|
||||
Start_Cinematic_Camera()
|
||||
|
||||
--Cleanup for valid plex
|
||||
for i,unit in pairs(plex_list) do
|
||||
plex_group = unit.Get_Parent_Object()
|
||||
plex_group.Teleport_And_Face(Find_Hint("GENERIC_MARKER_LAND", "UPLINK"))
|
||||
end
|
||||
|
||||
--Cleanup for valid T2Bs
|
||||
|
||||
for i,unit in pairs(T2B_list) do
|
||||
unit.Teleport_And_Face(Find_Hint("GENERIC_MARKER_LAND", "UPLINK"))
|
||||
end
|
||||
|
||||
for i,unit in pairs(T2B_list) do
|
||||
if i == 1 then
|
||||
unit.Teleport_And_Face(forces11_start)
|
||||
end
|
||||
if i == 2 then
|
||||
unit.Teleport_And_Face(forces12_start)
|
||||
end
|
||||
if i == 3 then
|
||||
unit.Teleport_And_Face(forces13_start)
|
||||
end
|
||||
end
|
||||
|
||||
--Cleanup for valid T1Cs
|
||||
|
||||
for i,unit in pairs(T1C_list) do
|
||||
unit.Teleport_And_Face(Find_Hint("GENERIC_MARKER_LAND", "UPLINK"))
|
||||
end
|
||||
|
||||
for i,unit in pairs(T1C_list) do
|
||||
if i == 1 then
|
||||
unit.Teleport_And_Face(forces11_start)
|
||||
end
|
||||
if i == 2 then
|
||||
unit.Teleport_And_Face(forces12_start)
|
||||
end
|
||||
if i == 3 then
|
||||
unit.Teleport_And_Face(forces13_start)
|
||||
end
|
||||
end
|
||||
|
||||
--Cleanup for valid infantry
|
||||
for i,unit in pairs(Infantry_list) do
|
||||
troop_group = unit.Get_Parent_Object()
|
||||
troop_group.Teleport_And_Face(Find_Hint("GENERIC_MARKER_LAND", "UPLINK"))
|
||||
end
|
||||
|
||||
for i,unit in pairs(Infantry_list) do
|
||||
if i <= 6 then
|
||||
--MessageBox("Infantry_list[%s] teleported", i)
|
||||
trooper_group_prime = unit.Get_Parent_Object()
|
||||
if trooper_group1 == nil then
|
||||
trooper_group1 = trooper_group_prime
|
||||
trooper_group1.Teleport_And_Face(forces2_start)
|
||||
elseif trooper_group2 == nil then
|
||||
trooper_group2 = trooper_group_prime
|
||||
trooper_group2.Teleport_And_Face(forces2_start)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
cinematic_r2d2 = Find_First_Object("Droid_R2D2")
|
||||
cinematic_c3po = Find_First_Object("Droid_C3P0")
|
||||
if TestValid(cinematic_r2d2) and TestValid(cinematic_c3po) then
|
||||
cinematic_droids = cinematic_r2d2.Get_Parent_Object()
|
||||
end
|
||||
cinematic_droids.Teleport_And_Face(droid_start)
|
||||
cinematic_r2d2.Face_Immediate(droid_start)
|
||||
cinematic_c3po.Face_Immediate(droid_start)
|
||||
|
||||
Fade_Screen_In(2)
|
||||
|
||||
--Set_Cinematic_Target_Key(target_pos, xoffset_dist, yoffset_pitch, zoffset_yaw, angles?, attach_object, use_object_rotation, cinematic_animation)
|
||||
Set_Cinematic_Camera_Key(droid_start, 60, 15, 90, 1, 0, 1, 0)
|
||||
Set_Cinematic_Target_Key(transport1_loc, 0, 0, 100, 0, 0, 0, 0)
|
||||
|
||||
Sleep(1)
|
||||
|
||||
cinematic_c3po.Face_Immediate(transport1_loc)
|
||||
|
||||
Transition_Cinematic_Target_Key(transport1_loc, 5, 0, 0, 0, 1, 0, 0, 0)
|
||||
Story_Event("end_cin_audio")
|
||||
|
||||
-- Create_Cinematic_Transport(object_type_name, player_id, transport_pos, zangle, phase_mode, anim_delta, idle_time, persist,hint)
|
||||
rebel_shuttle1 = Create_Cinematic_Transport("Gallofree_Transport_Landing", rebel_player.Get_ID(), transport1_loc, 0, 1, 0.25, 15, 0)
|
||||
rebel_shuttle2 = Create_Cinematic_Transport("Gallofree_Transport_Landing", rebel_player.Get_ID(), transport2_loc, 0, 1, 0.15, 15, 0)
|
||||
rebel_shuttle3 = Create_Cinematic_Transport("Gallofree_Transport_Landing", rebel_player.Get_ID(), transport3_loc, 0, 1, 0.0, 15, 0)
|
||||
|
||||
Sleep(4)
|
||||
|
||||
cinematic_c3po.Face_Immediate(transport1_loc)
|
||||
|
||||
Set_Cinematic_Camera_Key(cinematic_c3po, 60, 25, -90, 1, 0, 1, 0)
|
||||
Set_Cinematic_Target_Key(cinematic_c3po, 0, 0, 10, 0, 0, 0, 0)
|
||||
|
||||
Story_Event("end_c3po_audio")
|
||||
cinematic_c3po.Play_Animation("idle", false, 3)
|
||||
|
||||
Transition_Cinematic_Camera_Key(cinematic_c3po, 5, 70, 25, -90, 1, 0, 1, 0)
|
||||
|
||||
Sleep(5)
|
||||
|
||||
Transition_Cinematic_Camera_Key(droid_start, 4, 400, 25, -65, 1, 0, 1, 0)
|
||||
|
||||
Sleep(2)
|
||||
|
||||
cinematic_droids.Move_To(transport1_loc)
|
||||
|
||||
Sleep(1)
|
||||
|
||||
for i,unit in pairs(T2B_list) do
|
||||
if i <= 3 then
|
||||
unit.Move_To(transport2_loc)
|
||||
end
|
||||
end
|
||||
|
||||
for i,unit in pairs(T1C_list) do
|
||||
if i <= 3 then
|
||||
unit.Move_To(transport2_loc)
|
||||
end
|
||||
end
|
||||
|
||||
if TestValid(trooper_group1) then
|
||||
trooper_group1.Move_To(transport3_loc)
|
||||
end
|
||||
if TestValid(trooper_group2) then
|
||||
trooper_group2.Move_To(transport3_loc)
|
||||
end
|
||||
|
||||
Sleep(3)
|
||||
|
||||
Transition_Cinematic_Target_Key(transport1_loc, 5, 0, 0, 0, 1, 0, 0, 0)
|
||||
Sleep(2)
|
||||
Transition_Cinematic_Camera_Key(transport1_loc, 5, 900, 60, -50, 1, 0, 1, 0)
|
||||
|
||||
cinematic_droids.Teleport_And_Face(Find_Hint("GENERIC_MARKER_LAND", "UPLINK"))
|
||||
if TestValid(trooper_group1) then
|
||||
trooper_group1.Teleport_And_Face(Find_Hint("GENERIC_MARKER_LAND", "UPLINK"))
|
||||
end
|
||||
if TestValid(trooper_group2) then
|
||||
trooper_group2.Teleport_And_Face(Find_Hint("GENERIC_MARKER_LAND", "UPLINK"))
|
||||
end
|
||||
|
||||
for i,unit in pairs(T2B_list) do
|
||||
if i <= 3 then
|
||||
unit.Teleport_And_Face(Find_Hint("GENERIC_MARKER_LAND", "UPLINK"))
|
||||
end
|
||||
end
|
||||
|
||||
for i,unit in pairs(T1C_list) do
|
||||
if i <= 3 then
|
||||
unit.Teleport_And_Face(Find_Hint("GENERIC_MARKER_LAND", "UPLINK"))
|
||||
end
|
||||
end
|
||||
|
||||
-- Tell the story script that the win condition has been met
|
||||
Story_Event("win_a01m02")
|
||||
|
||||
Sleep(9)
|
||||
|
||||
Letter_Box_Out(0)
|
||||
Lock_Controls(0)
|
||||
Suspend_AI(0)
|
||||
|
||||
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user