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,518 @@
-- $Id: //depot/Projects/StarWars_Steam/FOC/Run/Data/Scripts/GameObject/UM02_Mission_Script.lua#1 $
--/////////////////////////////////////////////////////////////////////////////////////////////////
--
-- (C) Petroglyph Games, Inc.
--
--
-- ***** ** * *
-- * ** * * *
-- * * * * *
-- * * * * * * * *
-- * * *** ****** * ** **** *** * * * ***** * ***
-- * ** * * * ** * ** ** * * * * ** ** ** *
-- *** ***** * * * * * * * * ** * * * *
-- * * * * * * * * * * * * * * *
-- * * * * * * * * * * ** * * * *
-- * ** * * ** * ** * * ** * * * *
-- ** **** ** * **** ***** * ** *** * *
-- * * *
-- * * *
-- * * *
-- * * * *
-- **** * *
--
--/////////////////////////////////////////////////////////////////////////////////////////////////
-- C O N F I D E N T I A L S O U R C E C O D E -- D O N O T D I S T R I B U T E
--/////////////////////////////////////////////////////////////////////////////////////////////////
--
-- $File: //depot/Projects/StarWars_Steam/FOC/Run/Data/Scripts/GameObject/UM02_Mission_Script.lua $
--
-- Original Author: Jeff_Stewart
--
-- $Author: Brian_Hayes $
--
-- $Change: 637819 $
--
-- $DateTime: 2017/03/22 10:16:16 $
--
-- $Revision: #1 $
--
--/////////////////////////////////////////////////////////////////////////////////////////////////
require("PGStateMachine")
require("PGSpawnUnits")
require("JGS_FunctionLib") -- added library of commonly used functions
function Definitions()
-- Object isn't valid at this point so don't do any operations that
-- would require it. State_Init is the first chance you have to do
-- operations on Object
DebugMessage("%s -- In Definitions", tostring(Script))
Define_State("State_Init", State_Init);
end
function State_Init(message)
if message == OnEnter then
-- This is simply a sound to let the designer know the script is running
-- Object.Play_SFX_Event("SFX_UMP_EmpireKesselAlarm")
neutral_player = Find_Player("Neutral")
empire_player = Find_Player("Empire")
underworld_player = Find_Player("Underworld")
tyber_zann = Find_Nearest(Object,"TYBER_ZANN")
Register_Death_Event(tyber_zann, Tyber_Destroyed)
urai_fen = Find_Nearest(Object,"URAI_FEN")
Register_Death_Event(urai_fen, Urai_Destroyed)
pad1 = Find_Hint("REINFORCEMENT_POINT", "pad1")
pad2 = Find_Hint("REINFORCEMENT_POINT", "pad2")
pad3 = Find_Hint("REINFORCEMENT_POINT", "pad3")
pad4 = Find_Hint("REINFORCEMENT_POINT", "pad4")
-- Register prox events for battle chatter and game events
chatter1 = Find_Hint("GENERIC_MARKER_LAND","chatterbadfeeling")
Register_Prox(chatter1, Prox_Chatter_BadFeeling, 60, underworld_player)
startdroids=Find_Hint("GENERIC_MARKER_LAND","startdestroyerdroids")
Register_Prox(startdroids, Prox_StartDestroyers, 60, underworld_player)
seescontrols=Find_Hint("GENERIC_MARKER_LAND","seencontrols")
Register_Prox(seescontrols, Prox_HintAtControls, 60, underworld_player)
gotcontrols=Find_Hint("GENERIC_MARKER_LAND","factorycontrols")
Register_Prox(gotcontrols, Prox_UseControls, 60, underworld_player)
Register_Prox(gotcontrols, Prox_UseControls_Wrong, 60, underworld_player)
droidworksloc=Find_Hint("GENERIC_MARKER_LAND","droidworksloc")
Register_Prox(droidworksloc, Prox_CapturedDroidWorks, 60, underworld_player)
droidworks=Find_Hint("U_GROUND_DROID_WORKS","droidworks")
Register_Death_Event(droidworks, DroidWorks_Destroyed)
-- set up some global mission state flags
MissionPartOneStarted = false
MissionPartTwoStarted = false
MissionPartTwoSetup = true
PadOneCaptured = false
PadTwoCaptured = false
PadThreeCaptured = false
PadFourCaptured = false
VictoryCondition_DroidWorks = false
VictoryCondition_LandingPads = false
DefeatCondition_TyberDead = false
DefeatCondition_UraiDead = false
DefeatCondition_DroidWorksDead = false
VictoryStarted = false
DefeatStarted = false
Create_Thread("CINE_Start_Mission")
elseif message == OnUpdate then
--Do Nothing
if MissionPartTwoStarted then
if MissionPartTwoSetup then
MissionPartTwoSetup = false
Mid_Mission_Setup()
end
if VictoryCondition_DroidWorks and VictoryCondition_LandingPads then
if not VictoryStarted then
VictoryStarted = true
Create_Thread("EndMissionVictory")
end
end
end
if DefeatCondition_TyberDead or DefeatCondition_UraiDead or DefeatCondition_DroidWorksDead then
if not DefeatStarted then
DefeatStarted = true
Create_Thread("EndMissionDefeat")
end
end
elseif message == OnExit then
--Do Nothing
end
end
-- delay a short time and then start the game
function CINE_Start_Mission()
Suspend_AI(1)
Lock_Controls(1)
--Fade_Screen_Out(1)
--Sleep(1)
Letter_Box_In(0)
Start_Cinematic_Camera()
Fade_Screen_In(1)
Sleep(1)
MessageBox("Insert Game Intro Cinematic Here")
Sleep(1)
Fade_Screen_Out(1)
End_Cinematic_Camera()
Letter_Box_Out(.5)
Lock_Controls(0)
Suspend_AI(0)
Sleep(1)
Fade_Screen_In(1)
Sleep(1)
MissionPartOneStarted = true
end
function Tyber_Destroyed()
DefeatCondition_TyberDead = true
end
function Urai_Destroyed()
DefeatCondition_UraiDead = true
end
function DroidWorks_Destroyed()
DefeatCondition_DroidWorksDead = true
end
-- triggered when tyber exits the landing pad, to set the mood
function Prox_Chatter_BadFeeling(self_obj, trigger_obj)
if MissionPartOneStarted then
-- CHATTER -- Tyber Zann: "I've got a bad feeling about this."
if not trigger_obj then
DebugMessage("Warning: prox received a nil trigger_obj .")
return
end
tyber=Find_Nearest(self_obj, "TYBER_ZANN")
tyber_distance=self_obj.Get_Distance(tyber)
if tyber_distance < 200 then
tyber.Play_SFX_Event("SFX_UMP_EmpireKesselAlarm")
self_obj.Cancel_Event_Object_In_Range(Prox_Chatter_BadFeeling)
end
end
end
-- triggered when the player gets close to the droid pens, which will then begin spawning droids
function Prox_StartDestroyers(self_obj, trigger_obj)
if MissionPartOneStarted then
-- Begin producing destroyer droids
if not trigger_obj then
DebugMessage("Warning: prox received a nil trigger_obj .")
return
end
closest_infantry = Find_Nearest(self_obj, "TYBER_ZANN")
closest_infantry.Play_SFX_Event("SFX_UMP_EmpireKesselAlarm")
droid1 = Find_Hint("GENERIC_MARKER_LAND","ddroid1")
Create_Generic_Object("UM02_DESTROYER_SPAWNER",droid1.Get_Position(),empire_player)
droid2 = Find_Hint("GENERIC_MARKER_LAND","ddroid2")
Create_Generic_Object("UM02_DESTROYER_SPAWNER",droid2.Get_Position(),empire_player)
droid3 = Find_Hint("GENERIC_MARKER_LAND","ddroid3")
Create_Generic_Object("UM02_DESTROYER_SPAWNER",droid3.Get_Position(),empire_player)
droid4 = Find_Hint("GENERIC_MARKER_LAND","ddroid4")
Create_Generic_Object("UM02_DESTROYER_SPAWNER",droid4.Get_Position(),empire_player)
droid5 = Find_Hint("GENERIC_MARKER_LAND","ddroid5")
Create_Generic_Object("UM02_DESTROYER_SPAWNER",droid5.Get_Position(),empire_player)
droid6 = Find_Hint("GENERIC_MARKER_LAND","ddroid6")
Create_Generic_Object("UM02_DESTROYER_SPAWNER",droid6.Get_Position(),empire_player)
droid7 = Find_Hint("GENERIC_MARKER_LAND","ddroid7")
Create_Generic_Object("UM02_DESTROYER_SPAWNER",droid7.Get_Position(),empire_player)
droid8 = Find_Hint("GENERIC_MARKER_LAND","ddroid8")
Create_Generic_Object("UM02_DESTROYER_SPAWNER",droid8.Get_Position(),empire_player)
self_obj.Cancel_Event_Object_In_Range(Prox_StartDestroyers)
Create_Thread("StartMissionObjective")
end
end
-- delay a short time and then display the mission objective
function StartMissionObjective()
Sleep(2)
Create_Thread("Set_Hint_At_Object",gotcontrols)
end
-- triggered when player gets close to the droid controls for part one of the mission
function Prox_HintAtControls(self_obj, trigger_obj)
if MissionPartOneStarted then
-- CHATTER -- Tyber Zann: "There are the controls!"
if not trigger_obj then
DebugMessage("Warning: prox received a nil trigger_obj .")
return
end
closest_infantry = Find_Nearest(self_obj, "TYBER_ZANN")
closest_infantry.Play_SFX_Event("SFX_UMP_EmpireKesselAlarm")
self_obj.Cancel_Event_Object_In_Range(Prox_HintAtControls)
end
end
-- triggered when the player gets urai at the controls, triggering part two
function Prox_UseControls(self_obj, trigger_obj)
if MissionPartOneStarted then
if not trigger_obj then
DebugMessage("Warning: prox received a nil trigger_obj .")
return
end
urai=Find_Nearest(self_obj, "URAI_FEN")
urai_distance=self_obj.Get_Distance(urai)
if urai_distance < 60 then
self_obj.Cancel_Event_Object_In_Range(Prox_UseControls)
self_obj.Cancel_Event_Object_In_Range(Prox_UseControls_Wrong)
urai.Play_SFX_Event("SFX_UMP_EmpireKesselAlarm")
Create_Thread("Remove_Hint_At_Object",gotcontrols)
Create_Thread("UraiUsesControls")
end
end
end
function UraiUsesControls()
urai_fen=Find_Nearest(Object, "URAI_FEN")
urai_fen.Change_Owner(neutral_player)
BlockOnCommand(urai_fen.Move_To(gotcontrols))
Sleep(5)
-- finds all destroyer droid spawners and deletes them
unit_list = Find_All_Objects_Of_Type("UM02_DESTROYER_SPAWNER")
for k, unit in pairs(unit_list) do
if TestValid(unit) then
unit.Despawn()
end
end
-- finds all destroyer droids and deactivates them
droid_list = Find_All_Objects_Of_Type("DESTROYER_DROID")
for k, unit in pairs(droid_list) do
if TestValid(unit) then
newunit = Create_Generic_Object("DESTROYER_DROID",unit.Get_Position(),neutral_player)
newunit.Teleport_And_Face(unit)
newunit.Attach_Particle_Effect("HAN_SOLO_TARGET_STUN_EFFECT")
unit.Take_Damage(10000)
end
end
Sleep(1)
urai_fen.Change_Owner(underworld_player)
urai_fen.Play_SFX_Event("SFX_UMP_EmpireKesselAlarm")
Sleep(2)
Create_Thread("CINE_Mid_Mission")
end
-- triggered when the player gets tyber close to controls
function Prox_UseControls_Wrong(self_obj, trigger_obj)
if MissionPartOneStarted then
-- CHATTER -- Tyber Zann: "I don't know how to use this thing. Urai get over here."
if not trigger_obj then
DebugMessage("Warning: prox received a nil trigger_obj .")
return
end
tyber=Find_Nearest(self_obj, "TYBER_ZANN")
tyber_distance=self_obj.Get_Distance(tyber)
if tyber_distance < 60 then
tyber.Play_SFX_Event("SFX_UMP_EmpireKesselAlarm")
self_obj.Cancel_Event_Object_In_Range(Prox_UseControls_Wrong)
end
end
end
-- mid-mission cinematic where jabba lands and gives his best
function CINE_Mid_Mission()
Suspend_AI(1)
Lock_Controls(1)
Fade_Screen_Out(1)
Sleep(1)
Letter_Box_In(0)
Start_Cinematic_Camera()
Fade_Screen_In(1)
Sleep(1)
MessageBox("Insert Mid-Mission Cinematic Here")
Sleep(1)
Fade_Screen_Out(1)
End_Cinematic_Camera()
Letter_Box_Out(.5)
Lock_Controls(0)
Suspend_AI(0)
Sleep(1)
Fade_Screen_In(1)
Sleep(1)
MissionPartTwoStarted = true
end
function Mid_Mission_Setup()
-- Destroys all magnetically sealed doors
unit_list = Find_All_Objects_Of_Type("UM02_MAGNETICALLY_SEALED_DOORWAY")
for k, unit in pairs(unit_list) do
if TestValid(unit) then
unit.Take_Damage(50000)
end
end
Create_Thread("MidMissionObjective")
end
function Check_LandingPads()
reinforce_list = {
"Pirate_Soldier_Squad",
"Pirate_Plex_Squad"
}
Register_Timer(JabbaGuysLand, 1)
while not VictoryCondition_LandingPads do
if pad1.Get_Owner() == underworld_player and not PadOneCaptured then
--MessageBox("WOOHOO pad one!!!!")
PadOneCaptured = true
end
if pad2.Get_Owner() == underworld_player and not PadTwoCaptured then
--MessageBox("WOOHOO pad two!!!!")
PadTwoCaptured = true
end
if pad3.Get_Owner() == underworld_player and not PadThreeCaptured then
--MessageBox("WOOHOO pad three!!!!")
PadThreeCaptured = true
end
if pad4.Get_Owner() == underworld_player and not PadFourCaptured then
--MessageBox("WOOHOO pad four!!!!")
PadFourCaptured = true
end
if PadOneCaptured and PadTwoCaptured and PadThreeCaptured and PadFourCaptured then
--MessageBox("WOOHOO ALL CAPTURED!!!!")
VictoryCondition_LandingPads = true
end
Sleep(1)
end
end
function JabbaGuysLand ()
if not PadOneCaptured then
ReinforceList(reinforce_list, pad1, empire_player, false, true, true, Find_And_Attack)
end
if not PadTwoCaptured then
ReinforceList(reinforce_list, pad2, empire_player, false, true, true, Find_And_Attack)
end
if not PadThreeCaptured then
ReinforceList(reinforce_list, pad3, empire_player, false, true, true, Find_And_Attack)
end
if not PadFourCaptured then
ReinforceList(reinforce_list, pad4, empire_player, false, true, true, Find_And_Attack)
end
Register_Timer(JabbaGuysLand, 90)
end
function Find_And_Attack(attack_list)
Create_Thread("Hunt_Underworld",attack_list)
end
-- delay a short time and then display the mission objective
function MidMissionObjective()
Sleep(2)
Create_Thread("Set_Hint_At_Object",droidworksloc)
-- this creates a small timer/re-timer system that checks for victory conditions on landing pads
Create_Thread("Check_LandingPads")
end
-- triggered when the player gets urai at the droid works
function Prox_CapturedDroidWorks(self_obj, trigger_obj)
if MissionPartTwoStarted then
if not trigger_obj then
DebugMessage("Warning: prox received a nil trigger_obj .")
return
end
urai=Find_Nearest(self_obj, "URAI_FEN")
urai_distance=self_obj.Get_Distance(urai)
if urai_distance < 60 then
self_obj.Cancel_Event_Object_In_Range(Prox_CapturedDroidWorks)
urai.Play_SFX_Event("SFX_UMP_EmpireKesselAlarm")
Create_Thread("UraiUsesDroidWorks")
Create_Thread("Remove_Hint_At_Object",droidworksloc)
end
end
end
function UraiUsesDroidWorks()
urai_fen=Find_Nearest(Object, "URAI_FEN")
urai_fen.Change_Owner(neutral_player)
BlockOnCommand(urai_fen.Move_To(droidworksloc))
Sleep(5)
-- changes control of droid works to underworld player
droidworks=Find_Hint("U_GROUND_DROID_WORKS","droidworks")
VictoryCondition_DroidWorks = true
droidworks.Change_Owner(underworld_player)
-- finds all droid nodes and captures them
unit_list = Find_All_Objects_Of_Type("UNDERWORLD_DROID_NODE")
for k, unit in pairs(unit_list) do
if TestValid(unit) then
unit.Change_Owner(underworld_player)
end
end
-- finds all destroyer droids and "activates" them
droid_list = Find_All_Objects_Of_Type("DESTROYER_DROID")
for k, unit in pairs(droid_list) do
if TestValid(unit) then
unit.Change_Owner(underworld_player)
unit.Attach_Particle_Effect("HAN_SOLO_TARGET_STUN_EFFECT")
end
end
Sleep(1)
urai_fen.Change_Owner(underworld_player)
urai_fen.Play_SFX_Event("SFX_UMP_EmpireKesselAlarm")
end
-- delay a short time and then show game has been won VICTORY
function EndMissionVictory()
Suspend_AI(1)
Lock_Controls(1)
Fade_Screen_Out(1)
Sleep(1)
Letter_Box_In(0)
Start_Cinematic_Camera()
Fade_Screen_In(1)
Sleep(1)
MessageBox("Insert Game Victory Cinematic Here")
MissionPartTwoStarted = true
Sleep(1)
Fade_Screen_Out(1)
End_Cinematic_Camera()
Letter_Box_Out(.5)
Lock_Controls(0)
Suspend_AI(0)
Sleep(1)
--Fade_Screen_In(1)
--Sleep(1)
end
-- delay a short time and then show game has been lost DEFEAT
function EndMissionDefeat()
Suspend_AI(1)
Lock_Controls(1)
Fade_Screen_Out(1)
Sleep(1)
Letter_Box_In(0)
Start_Cinematic_Camera()
Fade_Screen_In(1)
Sleep(1)
MessageBox("Insert Game Defeat Cinematic Here")
MissionPartTwoStarted = true
Sleep(1)
Fade_Screen_Out(1)
End_Cinematic_Camera()
Letter_Box_Out(.5)
Lock_Controls(0)
Suspend_AI(0)
Sleep(1)
--Fade_Screen_In(1)
--Sleep(1)
end