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,577 @@
-- $Id: //depot/Projects/StarWars/Run/Data/Scripts/Story/Story_Rebel_ActII_M04_SPACE.lua#40 $
--/////////////////////////////////////////////////////////////////////////////////////////////////
--
-- (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/Run/Data/Scripts/Story/Story_Rebel_ActII_M04_SPACE.lua $
--
-- Original Author: Eric_Yiskis
--
-- $Author: Joseph_Gernert $
--
-- $Change: 36429 $
--
-- $DateTime: 2006/01/16 10:05:23 $
--
-- $Revision: #40 $
--
--/////////////////////////////////////////////////////////////////////////////////////////////////
require("PGStoryMode")
------------------------------------------------------------------------------------------------------------------------
-- Definitions -- This function is called once when the script is first created.
------------------------------------------------------------------------------------------------------------------------
function Definitions()
DebugMessage("%s -- In Definitions", tostring(Script))
StoryModeEvents =
{
Rebel_A2_M04_Begin = State_Rebel_A2_M04_Begin
,Rebel_A2_M04_All_Shuttles_Rescued_03 = State_End_Cinematic_Camera
}
convoy_escort_type = {
"ACCLAMATOR_ASSAULT_SHIP",
"TIE_FIGHTER_SQUADRON",
"TIE_FIGHTER_SQUADRON",
"TIE_FIGHTER_SQUADRON",
"TIE_FIGHTER_SQUADRON",
"ACCLAMATOR_ASSAULT_SHIP",
"TIE_FIGHTER_SQUADRON",
"TIE_FIGHTER_SQUADRON",
--"TARTAN_PATROL_CRUISER",
"TIE_FIGHTER_SQUADRON",
"TIE_FIGHTER_SQUADRON",
--"TARTAN_PATROL_CRUISER",
"TIE_FIGHTER_SQUADRON",
"TIE_FIGHTER_SQUADRON"
}
-- these are markers in the layout where the ships will be spawned.
convoy_escort_markers = {
"capital4",
"tiefighter5",
"tiefighter6",
"tiefighter7",
"tiefighter8",
"capital11",
"tiefighter12",
"tiefighter13",
--"cruiser17",
"tiefighter18",
"tiefighter19",
--"cruiser22",
"tiefighter24",
"tiefighter25"
}
shuttle_markers = {
"shuttletyderium2",
"shuttletyderium3",
"shuttletyderium9",
"shuttletyderium10",
"shuttletyderium14",
"shuttletyderium15",
}
star_destroyer_markers = {
"shuttletyderium2",
"cruiser22"
}
star_destoyers = {
"VICTORY_DESTROYER"
,"VICTORY_DESTROYER"
}
-- Init values
start_service_calls = false
shuttles_rescued = 0
total_shuttles = 6
player_notified = 0
counter_shuttle_needs_rescue = 1
counter_shuttles_disabled = 0
-- For memory pool cleanup hints
unit = nil
new_units = nil
convoy_escorts = nil
star_destroyers = nil
sundered_heart = nil
flag_all_shuttles_disabled = false
flag_mission_over = false
fog_id = nil
end
function State_Rebel_A2_M04_Begin(message)
if message == OnEnter then
-- Find the waypoints
rescued_shuttle_goto = Find_Hint("GENERIC_MARKER_SPACE", "rescued-shuttle-goto")
waypoint1 = Find_Hint("GENERIC_MARKER_SPACE", "waypoint1")
waypoint2 = Find_Hint("GENERIC_MARKER_SPACE", "waypoint2")
waypoint3 = Find_Hint("GENERIC_MARKER_SPACE", "waypoint3")
waypoint4 = Find_Hint("GENERIC_MARKER_SPACE", "waypoint4")
waypoint4a= Find_Hint("GENERIC_MARKER_SPACE", "waypoint4a")
waypoint5 = Find_Hint("GENERIC_MARKER_SPACE", "waypoint5")
waypoint5a= Find_Hint("GENERIC_MARKER_SPACE", "waypoint5a")
waypoint6 = Find_Hint("GENERIC_MARKER_SPACE", "waypoint6")
waypoint7 = Find_Hint("GENERIC_MARKER_SPACE", "waypoint7")
waypoint7a= Find_Hint("GENERIC_MARKER_SPACE", "waypoint7a")
waypoint8 = Find_Hint("GENERIC_MARKER_SPACE", "waypoint8")
waypoint9 = Find_Hint("GENERIC_MARKER_SPACE", "waypoint9")
destroyer_arrival = Find_Hint("GENERIC_MARKER_SPACE", "cruiser17")
if not waypoint1 or not waypoint2 or not waypoint3 or not waypoint4 or not waypoint4a or not waypoint5 or not waypoint6 or not waypoint7 or not waypoint7a or not waypoint8 or not waypoint9 then
MessageBox("Error - Could not find all waypoint markers.")
return
end
-- Get Empire & Rebel Owners
empire = Find_Player("Empire")
rebel = Find_Player("Rebel")
neutral_player = Find_Player("Neutral")
fog_id = FogOfWar.Reveal_All(rebel)
-- Spawn the shuttles
ref_type = Find_Object_Type("SHUTTLE_TYDERIUM_PRISONERS")
for index, marker_name in pairs(shuttle_markers) do
spawn_marker = Find_Hint("GENERIC_MARKER_SPACE",marker_name)
if not spawn_marker then
spawn_marker = waypoint1
end
new_units = Spawn_Unit(ref_type, spawn_marker, empire)
for j, unit in pairs(new_units) do
unit.Prevent_AI_Usage(true)
unit.Mark_Parent_Mode_Object_For_Death()
unit.Move_To(waypoint1)
Register_Death_Event(unit,Shuttle_Destroyed)
end
end
-- Spawn the escorting convoy ships
convoy_escorts = {}
for index, marker_name in pairs(convoy_escort_markers) do
spawn_marker = Find_Hint("GENERIC_MARKER_SPACE",marker_name)
if not spawn_marker then
spawn_marker = waypoint1
end
ref_type = Find_Object_Type(convoy_escort_type[index])
new_units = Spawn_Unit(ref_type, spawn_marker, empire)
for j, unit in pairs(new_units) do
table.insert(convoy_escorts,unit)
unit.Prevent_AI_Usage(true)
unit.Mark_Parent_Mode_Object_For_Death()
if convoy_escort_type[index] ~= "ACCLAMATOR_ASSAULT_SHIP" then
unit.Guard_Target(Find_Nearest(unit,"SHUTTLE_TYDERIUM_PRISONERS"))
unit.Override_Max_Speed(1)
-- max speed is 2.2 normally
else
unit.Move_To(waypoint1)
end
end
end
-- Set up proximity calls to keep convoy moving along, and the final prox for shuttle exit
prox_range = 300
Register_Prox(waypoint1, Prox_Waypoint, prox_range, empire)
Register_Prox(waypoint2, Prox_Waypoint, prox_range, empire)
Register_Prox(waypoint3, Prox_Waypoint, prox_range, empire)
Register_Prox(waypoint4, Prox_Waypoint, prox_range, empire)
Register_Prox(waypoint4a, Prox_Waypoint, prox_range, empire)
Register_Prox(waypoint5, Prox_Waypoint, prox_range, empire)
Register_Prox(waypoint5a, Prox_Waypoint, prox_range, empire)
Register_Prox(waypoint6, Prox_Waypoint, prox_range, empire)
Register_Prox(waypoint7, Prox_Waypoint, prox_range, empire)
Register_Prox(waypoint7a, Prox_Waypoint, prox_range, empire)
Register_Prox(waypoint8, Prox_Waypoint, prox_range, empire)
Register_Prox(waypoint9, Prox_Final_Waypoint, 200, empire)
-- wait a while, then spawn a star destroyer to wipe out incautious rebels. Also set up service call timer.
Register_Timer(Spawn_Star_Destroyers,120)
Register_Timer(Start_Service_Calls,3)
-- Ensure the mission ends if the Sundered Heart is destroyed
new_units = Find_All_Objects_Of_Type("SUNDERED_HEART")
if new_units then
sundered_heart = new_units[1]
Register_Death_Event(sundered_heart,Antillies_Destroyed)
end
-- Start the intro cinematic
Create_Thread("Intro_Cinematic")
end
end
------------------------------------------------------------------------------------------------------------------------
-- jdg Opening Cinematic stuff
------------------------------------------------------------------------------------------------------------------------
function Intro_Cinematic()
-- Lock out controls for intro cinematic and reveal FOW
Suspend_AI(1)
Lock_Controls(1)
Letter_Box_In(0)
Point_Camera_At(sundered_heart)
-- now find a shuttle to point the camera at
shuttle = Find_Hint("GENERIC_MARKER_SPACE", "shuttletyderium9")
Start_Cinematic_Camera()
Sleep(3)
Fade_Screen_In(2)
-- Set_Cinematic_Camera_Key(target_pos, xoffset_dist, yoffset_pitch, zoffset_yaw, angles?, attach_object, use_object_rotation, cinematic_animation)
Set_Cinematic_Camera_Key(shuttle, 800, -4, -55, 1, 0, 1, 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(shuttle, 100, 0, 50, 0, 0, 0, 0)
Transition_Cinematic_Camera_Key(shuttle, 5, 800, -2, -55, 1, 0, 1, 0)
Sleep (1)
Story_Event("M04_INTRO_DIALOG_01_GO")
Sleep (4)
--Fade_Screen_Out(.5)
--Sleep(.5)
Set_Cinematic_Camera_Key(shuttle, 2000, 5, -60, 1, 0, 1, 0)
--Fade_Screen_In(.5)
Sleep(5)
Fade_Screen_Out(.5)
Sleep(.5)
Transition_To_Tactical_Camera(0)
End_Cinematic_Camera()
Letter_Box_Out(.5)
Lock_Controls(0)
Suspend_AI(0)
Point_Camera_At(sundered_heart)
Fade_Screen_In(.5)
Story_Event("M04_INTRO_DIALOG_02_GO")
end
------------------------------------------------------------------------------------------------------------------------
-- jdg Ending Cinematic stuff
------------------------------------------------------------------------------------------------------------------------
function Ending_Cinematic()
-- Lock out controls for intro cinematic and reveal FOW
Sleep (2)
Story_Event("ALL_SHUTTLES_RESCUED")
Fade_Screen_Out(.5)
Suspend_AI(1)
Lock_Controls(1)
Letter_Box_In(0)
-- Ensure Antilles is still present for this cinematic
if not sundered_heart then
return
end
warp_loc = Find_Hint("GENERIC_MARKER_SPACE", "warploc")
exit_pos = Find_Hint("ATTACKER ENTRY POSITION", "attacker-entry")
Start_Cinematic_Camera()
Fade_Screen_In(2)
-- Set_Cinematic_Camera_Key(target_pos, xoffset_dist, yoffset_pitch, zoffset_yaw, angles?, attach_object, use_object_rotation, cinematic_animation)
Set_Cinematic_Camera_Key(warp_loc, 1000, -10, 60, 1, 0, 1, 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(warp_loc, -20, 0, 0, 0, 0, 0, 0)
-- Transition_Cinematic_Camera_Key(target_pos, time, xoffset_dist, yoffset_pitch, zoffset_yaw, angles?, attach_object, use_object_rotation, cinematic_animation)
Transition_Cinematic_Camera_Key(warp_loc, 7, 600, 2.5, 110, 1, 0, 1, 0)
Transition_Cinematic_Camera_Key(warp_loc, 7, 600, 17, 160, 1, 0, 1, 0)
rebel = Find_Player("Rebel")
Start_Cinematic_Space_Retreat(rebel.Get_ID(), 8)
Sleep(12)
--End_Cinematic_Camera()
end
function State_End_Cinematic_Camera(message)
if message == OnEnter then
Fade_Screen_Out(2)
Sleep(2)
End_Cinematic_Camera()
end
end
-- Move the convoy along the waypoint paths
function Prox_Waypoint(prox_obj, trigger_obj)
-- Send shuttles, assault ships, and scouts; the rest are guarding the shuttles
trigger_type = trigger_obj.Get_Type().Get_Name()
if trigger_type == "SHUTTLE_TYDERIUM_PRISONERS" or trigger_type == "ACCLAMATOR_ASSAULT_SHIP" or trigger_type == "VICTORY_DESTROYER" then
if prox_obj == waypoint1 then
trigger_obj.Move_To(waypoint2)
end
if prox_obj == waypoint2 then
trigger_obj.Move_To(waypoint3)
end
if prox_obj == waypoint3 then
trigger_obj.Move_To(waypoint4)
end
if prox_obj == waypoint4 then
trigger_obj.Move_To(waypoint4a)
end
if prox_obj == waypoint4a then
trigger_obj.Move_To(waypoint5)
end
if prox_obj == waypoint5 then
trigger_obj.Move_To(waypoint5a)
end
if prox_obj == waypoint5a then
trigger_obj.Move_To(waypoint6)
end
if prox_obj == waypoint6 then
trigger_obj.Move_To(waypoint7)
end
if prox_obj == waypoint7 then
trigger_obj.Move_To(waypoint7a)
end
if prox_obj == waypoint7a then
if trigger_type == "SHUTTLE_TYDERIUM_PRISONERS" and player_notified == 0 then
if not flag_all_shuttles_disabled then
player_notified = 1
Story_Event("SHUTTLE_ESCAPED")
end
end
trigger_obj.Move_To(waypoint8)
end
if prox_obj == waypoint8 then
trigger_obj.Move_To(waypoint9)
end
end
end
function Prox_Final_Waypoint(prox_obj, trigger_obj)
trigger_obj.Hyperspace_Away()
end
function Spawn_Star_Destroyers()
Story_Event("DESTROYERS_INBOUND")
spawn_marker = Find_Hint("GENERIC_MARKER_SPACE",marker_name)
new_units = SpawnList(star_destoyers, destroyer_arrival, empire, false, true)
for j, unit in pairs(new_units) do
unit.Prevent_AI_Usage(true)
unit.Mark_Parent_Mode_Object_For_Death()
unit.Move_To(waypoint1)
end
end
-- The prox_obj is an immobilized shuttle waiting to be rescued
-- The trigger object is a rebel ship
function Prox_Shuttle_Rescue(prox_obj, trigger_obj)
-- You must rescue with Capt. Antillies
if trigger_obj ~= sundered_heart then
return
end
prox_obj.Cancel_Event_Object_In_Range(Prox_Shuttle_Rescue)
Create_Thread("Handle_Shuttle_Rescue_Thread", prox_obj)
end
function Antillies_Destroyed()
if not flag_mission_over then
Story_Event("ANTILLIES_DESTROYED")
end
end
-- let play know that a disabled shuttle is waiting for a rescue
function Shuttle_Needs_Rescue(unit)
if TestValid(unit) then
if counter_shuttle_needs_rescue == 1 then
Story_Event("SHUTTLE_NEEDS_RESCUE_1")
counter_shuttle_needs_rescue = counter_shuttle_needs_rescue + 1
elseif counter_shuttle_needs_rescue == 2 then
Story_Event("SHUTTLE_NEEDS_RESCUE_2")
counter_shuttle_needs_rescue = counter_shuttle_needs_rescue + 1
end
end
end
function Shuttle_Destroyed()
if not flag_mission_over then
Story_Event("SHUTTLES_LOST")
end
end
------------------------------------------------------------------------------------------------------------------------
-- Some values are not properly initialized (Under_Effects_Of_Ability) on the first frame of execution, wait a bit...
function Start_Service_Calls()
start_service_calls = true
end
-- Here is an opportunity for updates outside of an event
function Story_Mode_Service()
-- wait until things are initialized (See Start_Service_Calls)
if not start_service_calls then
return
end
-- If the user hasn't enough Y-Wings and there are still shuttles left to disable, end the mission
if not flag_all_shuttles_disabled then
ywing_total = Find_All_Objects_Of_Type("Y-Wing_Story")
if not TestValid(ywing_total[1]) then
shuttle_list = Find_All_Objects_Of_Type("SHUTTLE_TYDERIUM_PRISONERS")
for j, unit in pairs(shuttle_list) do
if not unit.Is_Under_Effects_Of_Ability("Ion_Cannon_Shot") then
Story_Event("NOT_ENOUGH_YWINGS")
break
end
end
end
end
-- if a shuttle gets ion-cannon'ed, set it up for rescue.
shuttle_list = Find_All_Objects_Of_Type("SHUTTLE_TYDERIUM_PRISONERS")
for i, unit in pairs(shuttle_list) do
if TestValid(unit) then
if unit.Is_Under_Effects_Of_Ability("Ion_Cannon_Shot") and unit.Get_Owner() ~= rebel then
--Story_Event("SHUTTLE_DISABLED")
unit.Change_Owner(rebel)
unit.Move_To(unit.Get_Position())
unit.Set_Selectable(false)
unit.Highlight(true)
Register_Prox(unit, Prox_Shuttle_Rescue, 75, rebel)
Register_Timer(Shuttle_Needs_Rescue,15,unit)
if counter_shuttles_disabled == 0 then
counter_shuttles_disabled = counter_shuttles_disabled + 1
Story_Event("SHUTTLE_DISABLED1")
elseif counter_shuttles_disabled == 1 then
counter_shuttles_disabled = counter_shuttles_disabled + 1
Story_Event("SHUTTLE_DISABLED2")
elseif counter_shuttles_disabled == 2 then
counter_shuttles_disabled = counter_shuttles_disabled + 1
Story_Event("SHUTTLE_DISABLED3")
elseif counter_shuttles_disabled == 3 then
counter_shuttles_disabled = counter_shuttles_disabled + 1
Story_Event("SHUTTLE_DISABLED4")
else
counter_shuttles_disabled = counter_shuttles_disabled + 1
end
if counter_shuttles_disabled == 6 then
-- turn off y-wing loss condition here
--MessageBox("All 6 shuttles disabled--turning off y-wing lose condition")
Story_Event("CANCEL_NOT_ENOUGH_YWINGS")
flag_all_shuttles_disabled = true
end
break
end
end
end
end
function Handle_Shuttle_Rescue_Thread(shuttle_obj)
shuttles_rescued = shuttles_rescued + 1
-- Check if the appropriate amount of shuttles has been met for collection
if shuttles_rescued >= total_shuttles then
flag_mission_over = true
Create_Thread("Ending_Cinematic")
elseif shuttles_rescued == 1 then
Story_Event("1_SHUTTLE_RESCUED")
elseif shuttles_rescued == 2 then
Story_Event("2_SHUTTLES_RESCUED")
elseif shuttles_rescued == 3 then
Story_Event("3_SHUTTLES_RESCUED")
elseif shuttles_rescued == 4 then
Story_Event("4_SHUTTLES_RESCUED")
elseif shuttles_rescued == 5 then
Story_Event("5_SHUTTLES_RESCUED")
end
shuttle_obj.Highlight(false)
shuttle_obj.Make_Invulnerable(true)
shuttle_obj.Prevent_AI_Usage(true)
shuttle_obj.Prevent_All_Fire(true)
--Play a rescue effect for player feedback and wait for it to finish before removing the shuttle
shuttle_obj.Attach_Particle_Effect("Rescue_Effect")
Sleep(1)
--shuttle_obj.Teleport(waypoint1)
shuttle_obj.Teleport(rescued_shuttle_goto)
--shuttle_obj.Move_To(shuttle_obj.Get_Position())
shuttle_obj.Move_To(rescued_shuttle_goto)
shuttle_obj.Hide(true)
shuttle_obj.Stop()
--below will not work unless we can cancel the death event
--shuttle_obj.Change_Owner(neutral_player)
--shuttle_obj.Despawn()
end