Files
SoaFE/DATA/SCRIPTS/STORY/STORY_EMPIRE_ACTI_M04_LAND.LUA
2026-02-28 14:00:45 -06:00

319 lines
10 KiB
Lua
Raw Permalink Blame History

-- $Id: //depot/Projects/StarWars_Steam/FOC/Run/Data/Scripts/Story/Story_Empire_ActI_M04_LAND.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/Story/Story_Empire_ActI_M04_LAND.lua $
--
-- Original Author: Steve_Copeland
--
-- $Author: Brian_Hayes $
--
-- $Change: 637819 $
--
-- $DateTime: 2017/03/22 10:16:16 $
--
-- $Revision: #1 $
--
--/////////////////////////////////////////////////////////////////////////////////////////////////
require("PGStoryMode")
--
-- Definitions -- This function is called once when the script is first created.
--
function Definitions()
StoryModeEvents =
{
Empire_M04_Land_Begin = State_Empire_M04_Land_Begin
}
reinforcement_list1 = {
"Geonosian_Resistors"
}
-- For memory pool cleanup hints
rebel_player = nil
flag_spire_1_dead = false
flag_spire_2_dead = false
flag_spire_3_dead = false
flag_spire_4_dead = false
flag_spire_5_dead = false
flag_spire_6_dead = false
flag_initialized = false
counter_spires_killed = 0
timer_geonosian_spawn = 60
fog_id = nil
end
function State_Empire_M04_Land_Begin(message)
if message == OnEnter then
rebel_player = Find_Player("Rebel")
ewok_player = Find_Player("Rebel")
structure_list = Find_All_Objects_Of_Type("GEONOSIAN_SPAWN_HOUSE")
fog_id = FogOfWar.Reveal_All(rebel_player)
--spawn some geonosians around the spires
geonosian_spawner_table = Find_All_Objects_With_Hint("solo-spawner")
for i,unit in pairs(geonosian_spawner_table) do
SpawnList(reinforcement_list1, unit, ewok_player, true, true)
end
--MessageBox("about to create intro cine!!!")
Create_Thread("Intro_Cinematic")
end
end
function Geonosian_Spawn_Loop()
--MessageBox("Geonosian_Spawn_Loop hit!!!")
max_spawn_times = 50
current_spawn_times = 0
max_geonosians_allowed = 50
repeat
current_spawn_times = current_spawn_times + 1
-- Spawn some guys at the first structure that hasn't been destroyed (if any)
building_still_standing = false
for i, building in pairs(structure_list) do
if building.Get_Hull() then
building_still_standing = true
current_geonosian_count = 0
geonosian_list = Find_All_Objects_Of_Type("GEONOSIAN")
current_geonosian_count =table.getn(geonosian_list)
for i, unit in pairs(geonosian_list) do
current_geonosian_count = current_geonosian_count + 1
end
--DebugMessage("%s<>Found %i Geonosian objects...spires killed is %i", tostring(Script), current_geonosian_count, counter_spires_killed)
if current_geonosian_count >= max_geonosians_allowed then
--MessageBox("more than 100 geonosians...not spawning!!!")
break
end
--MessageBox("spawning some dudes")
geonosian_list = SpawnList(reinforcement_list1, building, ewok_player, true, true)
break
end
end
if counter_spires_killed == 1 then
timer_geonosian_spawn = 45
end
if counter_spires_killed == 2 then
timer_geonosian_spawn = 30
end
if counter_spires_killed == 3 then
timer_geonosian_spawn = 15
end
if counter_spires_killed == 4 then
timer_geonosian_spawn = 7
end
if counter_spires_killed >= 5 then
timer_geonosian_spawn = 3
end
Sleep(timer_geonosian_spawn)
until current_spawn_times > max_spawn_times or not building_still_standing
end
function Intro_Cinematic()
--MessageBox("intro cine function hit!!!")
-- Lock out controls for intro cinematic and reveal FOW
Suspend_AI(1)
Lock_Controls(1)
Letter_Box_In(0)
-- now find the cinematic spire and pan around it
spire = Find_Hint("GEONOSIAN_SPAWN_HOUSE", "spire4")
if not spire then
--MessageBox("intro cine Can't find spire!!!")
return
end
Start_Cinematic_Camera()
Fade_Screen_In(.5)
-- this pans around the geonosian spire...also shows the rebel base
base_loc = Find_Hint("GENERIC_MARKER_LAND", "rebelbase1")
entry_loc = Find_Hint("GENERIC_MARKER_LAND", "entry")
-- Set_Cinematic_Camera_Key(target_pos, xoffset_dist, yoffset_pitch, zoffset_yaw, angles?, attach_object, use_object_rotation, cinematic_animation)
Set_Cinematic_Camera_Key(spire, 400, 6, 30, 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(spire, 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(spire, 10, 1200, 12, -60, 1, 0, 0, 0)
Sleep(5)
-- This cinematic pans around the Rebel Base.
-- Set_Cinematic_Camera_Key(target_pos, xoffset_dist, yoffset_pitch, zoffset_yaw, angles?, attach_object, use_object_rotation, cinematic_animation)
Set_Cinematic_Camera_Key(base_loc, 400, 6, 30, 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(base_loc, 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(base_loc, 6, 800, 30, 120, 1, 0, 0, 0)
Sleep(6)
-- Set_Cinematic_Camera_Key(target_pos, xoffset_dist, yoffset_pitch, zoffset_yaw, angles?, attach_object, use_object_rotation, cinematic_animation)
Set_Cinematic_Camera_Key(base_loc, 800, 30, 120, 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(base_loc, 0, 0, 0, 0, 0, 0, 0)
-- Transition_Cinematic_Target_Key(target_pos, xoffset_dist, yoffset_pitch, zoffset_yaw, angles?, attach_object, use_object_rotation, cinematic_animation)
Transition_Cinematic_Target_Key(entry_loc, 1, 0, 0, 0, 1, 0, 0, 0)
Sleep(0.5)
Transition_To_Tactical_Camera(5)
Sleep(5)
--Fade_Screen_Out(.5)
Transition_To_Tactical_Camera(2)
--Sleep(2)
End_Cinematic_Camera()
--Fade_Screen_In(.5)
Letter_Box_Out(.5)
Lock_Controls(0)
Suspend_AI(0)
spire_1 = Find_Hint("GEONOSIAN_SPAWN_HOUSE", "spire1")
spire_2 = Find_Hint("GEONOSIAN_SPAWN_HOUSE", "spire2")
spire_3 = Find_Hint("GEONOSIAN_SPAWN_HOUSE", "spire3")
spire_4 = Find_Hint("GEONOSIAN_SPAWN_HOUSE", "spire4")
spire_5 = Find_Hint("GEONOSIAN_SPAWN_HOUSE", "spire5")
spire_6 = Find_Hint("GEONOSIAN_SPAWN_HOUSE", "spire6")
if TestValid(spire_1) then
Add_Radar_Blip(spire_1, "blip_spire1")
end
if TestValid(spire_2) then
Add_Radar_Blip(spire_2, "blip_spire2")
end
if TestValid(spire_3) then
Add_Radar_Blip(spire_3, "blip_spire3")
end
if TestValid(spire_4) then
Add_Radar_Blip(spire_4, "blip_spire4")
end
if TestValid(spire_5) then
Add_Radar_Blip(spire_5, "blip_spire5")
end
if TestValid(spire_6) then
Add_Radar_Blip(spire_6, "blip_spire6")
end
flag_initialized = true
Geonosian_Spawn_Loop()
end
-- Here is an opportunity for updates outside of an event
function Story_Mode_Service()
if not flag_initialized then
return
end
if not TestValid(spire_1) and not flag_spire_1_dead then
flag_spire_1_dead = true
counter_spires_killed = counter_spires_killed + 1
end
if not TestValid(spire_2) and not flag_spire_2_dead then
flag_spire_2_dead = true
counter_spires_killed = counter_spires_killed + 1
end
if not TestValid(spire_3) and not flag_spire_3_dead then
flag_spire_3_dead = true
counter_spires_killed = counter_spires_killed + 1
end
if not TestValid(spire_4) and not flag_spire_4_dead then
flag_spire_4_dead = true
counter_spires_killed = counter_spires_killed + 1
end
if not TestValid(spire_5) and not flag_spire_5_dead then
flag_spire_5_dead = true
counter_spires_killed = counter_spires_killed + 1
end
if not TestValid(spire_6) and not flag_spire_6_dead then
flag_spire_6_dead = true
counter_spires_killed = counter_spires_killed + 1
end
end