Initial commit

This commit is contained in:
2026-02-28 14:00:45 -06:00
commit 16d3170787
1134 changed files with 589134 additions and 0 deletions

View 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