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,693 @@
--/////////////////////////////////////////////////////////////////////////////////////////////////
--
-- (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: Brian_Hayes $
--
-- $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_M06_Begin = State_Rebel_M06_Begin
,Rebel_M06_Start_OpeningDialog_HanSolo_01_Remove_Text = State_OpeningDialog_HanSolo_01_Remove_Text
,Rebel_M06_Start_OpeningDialog_MonMothma_01_Remove_Text = State_OpeningDialog_MonMothma_01_Remove_Text
,Rebel_M06_Start_OpeningDialog_HanSolo_02_Remove_Text = State_OpeningDialog_HanSolo_02_Remove_Text
,Rebel_M06_Prison_Delayed_Explosion_00b = State_Rebel_M06_Prison_Delayed_Explosion_00b
,Rebel_M06_Prison_Delayed_Explosion_01b = State_Rebel_M06_Prison_Delayed_Explosion_01b
,Rebel_M06_Prison_Delayed_Explosion_02b = State_Rebel_M06_Prison_Delayed_Explosion_02b
,Rebel_M06_Prison_Delayed_Explosion_03b = State_Rebel_M06_Prison_Delayed_Explosion_03b
,Rebel_M06_Prison_Delayed_Explosion_04b = State_Rebel_M06_Prison_Delayed_Explosion_04b
,Rebel_M06_Set_Goal = State_Rebel_M06_Set_Goal
,Rebel_M06_Han_End_Cin_01b = State_Rebel_M06_Han_End_Cin_01b
}
prison_marker_names = {
"prison1-marker",
"prison2-marker",
"prison3-marker",
"prison4-marker",
"prison5-marker"
}
prison_list = {}
prison_markers = {}
prison_locations = {}
wookie_houses = {}
-- Victory Condition Tracking --
wookies_liberated = 0
wookies_liberated_goal = 5
wookies_armed = 0
wookies_armed_goal = 3
unarmed_wookie_type_list = {
"Kashyyyk_Wookie_War_Party_Unarmed"
}
armed_wookie_type_list = {
"Kashyyyk_Wookie_War_Party"
}
han_solo = nil
hans_health = nil
waiting_for_next_complaint = false
flag_prison_attacked = false
time_required_to_jailbreak = 30
release_the_hounds = false
flag_prison_1_destroyed = false
flag_prison_2_destroyed = false
flag_prison_3_destroyed = false
flag_prison_4_destroyed = false
flag_prison_5_destroyed = false
flag_mission_initiated = false
end
-----------------------------------------------------------------------------------------------------------------------
function Tell_Units_To_Guard(unit_list)
if unit_list == nil then
return
end
for i, unit in pairs(unit_list) do
unit.Prevent_AI_Usage(true)
unit.Guard_Target(unit.Get_Position())
end
end
-----------------------------------------------------------------------------------------------------------------------
-- Explosives were placed in the prisons, Han Solo has the destruct codes
function Prox_Prison(prox_obj, trigger_obj)
if trigger_obj.Get_Type().Get_Name() == "HAN_SOLO" then
if TestValid(trigger_obj) then
--put han in bomb animation here
Create_Thread("Han_Ties_His_Shoes")
prox_obj.Cancel_Event_Object_In_Range(Prox_Prison)
trigger_obj.Set_Selectable(false)
Story_Event("XML_PRISON_DELAY")
end
end
end
function Han_Ties_His_Shoes()
if TestValid(han_solo) then
--MessageBox("han starts shoe tying anim")
han_solo.Stop()
han_solo.Prevent_All_Fire(true)
han_solo.Prevent_AI_Usage(true)
han_solo.Suspend_Locomotor(true)
--rebel.Select_Object(falcon_spawn_point)
Sleep(1)
han_solo.Play_Animation("cinematic", false, 2)
Sleep(2.75)
han_solo.Play_Animation("cinematic", true, 3)
end
end
function State_Rebel_M06_Prison_Delayed_Explosion_00b(message)
if message == OnEnter then
closest_prison = Find_Nearest(han_solo, "IMPERIAL_PRISON_KASHYYYK")
if TestValid(closest_prison) then
closest_prison.Take_Damage(10001)
end
if TestValid(han_solo) then
han_solo.Set_Selectable(true)
Story_Event("PRISON_DESTROYED")
end
end
end
function State_Rebel_M06_Prison_Delayed_Explosion_01b(message)
if message == OnEnter then
closest_prison = Find_Nearest(han_solo, "IMPERIAL_PRISON_KASHYYYK")
if TestValid(closest_prison) then
closest_prison.Take_Damage(10001)
end
if TestValid(han_solo) then
han_solo.Set_Selectable(true)
Story_Event("PRISON_DESTROYED")
end
end
end
function State_Rebel_M06_Prison_Delayed_Explosion_02b(message)
if message == OnEnter then
closest_prison = Find_Nearest(han_solo, "IMPERIAL_PRISON_KASHYYYK")
if TestValid(closest_prison) then
closest_prison.Take_Damage(10001)
end
if TestValid(han_solo) then
han_solo.Set_Selectable(true)
Story_Event("PRISON_DESTROYED")
end
end
end
function State_Rebel_M06_Prison_Delayed_Explosion_03b(message)
if message == OnEnter then
closest_prison = Find_Nearest(han_solo, "IMPERIAL_PRISON_KASHYYYK")
if TestValid(closest_prison) then
closest_prison.Take_Damage(10001)
end
if TestValid(han_solo) then
han_solo.Set_Selectable(true)
Story_Event("PRISON_DESTROYED")
end
end
end
function State_Rebel_M06_Prison_Delayed_Explosion_04b(message)
if message == OnEnter then
closest_prison = Find_Nearest(han_solo, "IMPERIAL_PRISON_KASHYYYK")
if TestValid(closest_prison) then
closest_prison.Take_Damage(10001)
end
if TestValid(han_solo) then
han_solo.Set_Selectable(true)
Story_Event("PRISON_DESTROYED")
end
end
end
-----------------------------------------------------------------------------------------------------------------------
function Prox_Wookie_House(prox_obj, trigger_obj)
if TestValid(trigger_obj) and trigger_obj.Get_Type() == Find_Object_Type("Wookie_Warrior_Unarmed") then
wookie_team = trigger_obj.Get_Parent_Object()
if TestValid(wookie_team) then
armed_wookie = SpawnList(armed_wookie_type_list, wookie_team, rebel, true, true)
wookie_team.Despawn()
wookies_armed = wookies_armed + 1
if wookies_armed >= wookies_armed_goal then
Story_Event("WOOKIES_ARMED")
end
end
end
end
-----------------------------------------------------------------------------------------------------------------------
-- Function for Event:
-----------------------------------------------------------------------------------------------------------------------
function State_Rebel_M06_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)
-- Get Empire & Rebel Owners
empire = Find_Player("Empire")
rebel = Find_Player("Rebel")
--spawn in falcon
falcon_spawn_point = Find_Hint("GENERIC_MARKER_LAND", "spawn-falcon")
if not falcon_spawn_point then
MessageBox("cannot find falcon_spawn_point")
end
falcon = Find_Hint("Millennium_Falcon_Ground", "falcon")
if not falcon then
MessageBox("cannot find falcon")
end
falcon.Teleport_And_Face(falcon_spawn_point)
empire_marker = Find_Hint("GENERIC_MARKER_LAND", "empiremarker")
pad_list = Find_All_Objects_Of_Type("Skirmish_Build_Pad")
for i,pad in pairs(pad_list) do
pad.Lock_Build_Pad_Contents(true)
end
-- defining the prisons here
prison_1 = Find_Hint("IMPERIAL_PRISON_KASHYYYK", "prison1")
prison_2 = Find_Hint("IMPERIAL_PRISON_KASHYYYK", "prison2")
prison_3 = Find_Hint("IMPERIAL_PRISON_KASHYYYK", "prison3")
prison_4 = Find_Hint("IMPERIAL_PRISON_KASHYYYK", "prison4")
prison_5 = Find_Hint("IMPERIAL_PRISON_KASHYYYK", "prison5")
Register_Death_Event(prison_1,Prison_Destroyed)
Register_Death_Event(prison_2,Prison_Destroyed)
Register_Death_Event(prison_3,Prison_Destroyed)
Register_Death_Event(prison_4,Prison_Destroyed)
Register_Death_Event(prison_5,Prison_Destroyed)
--preventing turrets from auto-destroying these
prison_1.Prevent_Opportunity_Fire(true)
prison_2.Prevent_Opportunity_Fire(true)
prison_3.Prevent_Opportunity_Fire(true)
prison_4.Prevent_Opportunity_Fire(true)
prison_5.Prevent_Opportunity_Fire(true)
prison1_marker = Find_Hint("GENERIC_MARKER_LAND", "prison1-marker")
prison2_marker = Find_Hint("GENERIC_MARKER_LAND", "prison2-marker")
prison3_marker = Find_Hint("GENERIC_MARKER_LAND", "prison3-marker")
prison4_marker = Find_Hint("GENERIC_MARKER_LAND", "prison4-marker")
prison5_marker = Find_Hint("GENERIC_MARKER_LAND", "prison5-marker")
prox_range = 40
Register_Prox(prison1_marker, Prox_Prison, prox_range, rebel)
Register_Prox(prison2_marker, Prox_Prison, prox_range, rebel)
Register_Prox(prison3_marker, Prox_Prison, prox_range, rebel)
Register_Prox(prison4_marker, Prox_Prison, prox_range, rebel)
Register_Prox(prison5_marker, Prox_Prison, prox_range, rebel)
prison1_marker.Highlight(true)
prison2_marker.Highlight(true)
prison3_marker.Highlight(true)
prison4_marker.Highlight(true)
prison5_marker.Highlight(true)
-- Set most of the units to guard
guard_list = Find_All_Objects_With_Hint("guard")
Tell_Units_To_Guard(guard_list)
second_list = Find_All_Objects_With_Hint("second")
Tell_Units_To_Guard(second_list)
-- Setup callbacks for prisons
-- Setup proximity callbacks for wookie houses
wookie_house_range = 150
wookie_houses = Find_All_Objects_Of_Type("WOOKIEE_HOUSE")
for i,unit in pairs(wookie_houses) do
Register_Prox(unit, Prox_Wookie_House, wookie_house_range, rebel)
unit.Make_Invulnerable(true)
end
-- Look up Han Solo
unit_list = Find_All_Objects_Of_Type("HAN_SOLO")
if unit_list then
han_solo = unit_list[1]
hans_health = han_solo.Get_Hull()
Register_Death_Event(han_solo,Han_Killed)
end
Create_Thread("Intro_Cinematic")
flag_mission_initiated = true
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)
-- now find han solo
han = Find_First_Object("HAN_SOLO")
if not han then
return
end
-- find R2D3
R2D3 = Find_Hint("MOV_R2D3", "r2d3")
if not R2D3 then
return
end
-- find Mothma hologram
Mothma = Find_Hint("MOV_Mothma", "mothma")
if not Mothma then
return
end
-- find R2D3 Flag
R2D3_Move_To = Find_Hint("GENERIC_MARKER_LAND", "r2d3goto")
if not R2D3_Move_To then
return
end
Point_Camera_At(han)
R2D3.Suspend_Locomotor(true)
R2D3.Play_Animation("cinematic", true, 0)
Mothma.Play_Animation("cinematic", true, 0)
falcon.Hide(true)
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(han, 115, 15, 0, 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(han, 0, 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(han, 10, 105, 20, 10, 1, 0, 0, 0)
Story_Event("M06_INTRO_DIALOG_HANSOLO_01_GO")
Mothma.Play_Animation("cinematic", true, 0)
han.Play_Animation("talk", true, 1)
end
function State_OpeningDialog_HanSolo_01_Remove_Text(message)
if message == OnEnter then
falcon.Hide(false)
Story_Event("M06_INTRO_DIALOG_MONMOTHMA_01_GO")
Mothma.Play_Animation("cinematic", true, 1)
han.Play_Animation("idle", true, 0)
Set_Cinematic_Camera_Key(han, 65, 11, 70, 1, 0, 0, 0)
Set_Cinematic_Target_Key(han, 0, 0, 15, 0, 0, 0, 0)
Cinematic_Zoom(8,1.3)
end
end
function State_OpeningDialog_MonMothma_01_Remove_Text(message)
if message == OnEnter then
Story_Event("M06_INTRO_DIALOG_HANSOLO_02_GO")
han.Play_Animation("talk", false, 0)
Mothma.Play_Animation("cinematic", true, 0)
Set_Cinematic_Camera_Key(han, 65, 15, 340, 1, 0, 0, 0)
Set_Cinematic_Target_Key(han, 15, 0, 10, 0, 0, 0, 0)
Transition_Cinematic_Camera_Key(han, 6, 70, 20, 340, 1, 0, 0, 0)
end
end
function State_OpeningDialog_HanSolo_02_Remove_Text(message)
if message == OnEnter then
-- get rid of the cinematic actors
R2D3.Play_SFX_Event("Unit_Anim_R2_Holo_Off_1")
Mothma.Despawn()
R2D3.Play_Animation("move", true, 1)
R2D3.Suspend_Locomotor(false)
R2D3.Move_To(R2D3_Move_To)
han.Play_Animation("idle", true, 0)
Sleep(1)
Transition_To_Tactical_Camera(2)
Sleep(2)
R2D3.Despawn()
End_Cinematic_Camera()
Letter_Box_Out(.5)
Lock_Controls(0)
Suspend_AI(0)
end
end
-----------------------------------------------------------------------------------------------------------------------
function Han_Killed()
Story_Event("HAN_KILLED")
end
-----------------------------------------------------------------------------------------------------------------------
function State_Rebel_M06_Set_Goal(message)
if message == OnEnter then
prison_radar_marker = Find_All_Objects_Of_Type("IMPERIAL_PRISON_KASHYYYK")
for i,unit in pairs(prison_radar_marker) do
Add_Radar_Blip(unit, "prison_marker")
end
end
end
function Prison_Destroyed()
--take solo out of bomb animation and allow usage again.
if TestValid(han_solo) then
--MessageBox("han leaves shoe tying anim")
han_solo.Play_Animation("cinematic", false, 4)
han_solo.Prevent_All_Fire(false)
han_solo.Prevent_AI_Usage(false)
han_solo.Suspend_Locomotor(false)
end
-- Turn the secondary group on for an assault.
if not release_the_hounds then
if second_list == nil then
return
end
for i, unit in pairs(second_list) do
if TestValid(unit) then
unit.Prevent_AI_Usage(false)
if TestValid(han) then
unit.Attack_Move(han)
end
end
end
end
end
-----------------------------------------------------------------------------------------------------------------------
function Spawn_Wookie_Unit(spawn_location, marker)
new_units = SpawnList(unarmed_wookie_type_list, marker, rebel, false, true)
end
-----------------------------------------------------------------------------------------------------------------------
function Reset_Complaint()
waiting_for_next_complaint = false
end
-----------------------------------------------------------------------------------------------------------------------
function End_Cinematic()
-- Lock out controls for end cinematic and reveal FOW
Suspend_AI(1)
Lock_Controls(1)
Fade_Screen_Out(1)
Sleep(1)
Letter_Box_In(0)
--cinematic cleanup
han = Find_First_Object("HAN_SOLO")
falcon = Find_First_Object("MILLENNIUM_FALCON_GROUND")
han.In_End_Cinematic(true)
falcon.In_End_Cinematic(true)
Do_End_Cinematic_Cleanup()
-- now find han solo and put him at the end cine
han_loc = Find_Hint("GENERIC_MARKER_LAND", "endstart")
han.Teleport_And_Face(han_loc)
if not han then
return
end
-- Find Wookiee spawn location and Millennium Falcon Loc and obj
wookiee_loc1 = Find_Hint("GENERIC_MARKER_LAND", "wookieespawn1")
wookiee_loc2 = Find_Hint("GENERIC_MARKER_LAND", "wookieespawn2")
falcon_loc = Find_Hint("GENERIC_MARKER_LAND", "r2d3goto")
han_move = Find_Hint("GENERIC_MARKER_LAND", "handespawn")
horizon = Find_Hint("GENERIC_MARKER_LAND", "horizonpoint")
-- Spawn Wookiee war party
wookieelist1 = SpawnList(armed_wookie_type_list, wookiee_loc1, rebel, false, true)
wookieelist2 = SpawnList(armed_wookie_type_list, wookiee_loc2, rebel, false, true)
-- Play Cheer Anim on Wookiees
for i, wookiee in pairs(wookieelist1) do
Sleep(0.1)
--MessageBox("playing anim on group 1")
wookiee.Prevent_All_Fire(true)
wookiee.Play_Animation("celebrate", true, 0)
end
for j, wookiee2 in pairs(wookieelist2) do
Sleep(0.1)
--MessageBox("playing anim on group 2")
wookiee2.Prevent_All_Fire(true)
wookiee2.Play_Animation("celebrate", true, 0)
end
Start_Cinematic_Camera()
Fade_Screen_In(1)
-- Set_Cinematic_Camera_Key(target_pos, xoffset_dist, yoffset_pitch, zoffset_yaw, angles?, attach_object, use_object_rotation, cinematic_animation)
Set_Cinematic_Camera_Key(han_loc, 140, 25, 110, 1, 0, 0, 0)
-- Set_Cinematic_Target_Key(target_pos, xoffset_dist, yoffset_pitch, zoffset_yaw, angles?, attach_object, use_object_rotation, cinematic_animation)
Set_Cinematic_Target_Key(falcon_loc, 0, 0, 0, 0, 0, 0, 0)
Sleep(1)
Story_Event("WOOKIES_LIBERATED")
han.Play_Animation("talk", true, 1)
Cinematic_Zoom(5,1.1)
Sleep(1)
han.Move_To(falcon_loc)
Sleep(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(falcon_loc, 350, 50, 240, 1, 0, 0, 0)
-- Set_Cinematic_Target_Key(target_pos, xoffset_dist, yoffset_pitch, zoffset_yaw, angles?, attach_object, use_object_rotation, cinematic_animation)
Set_Cinematic_Target_Key(falcon_loc, 50, 0, 0, 0, 0, 0, 0)
Sleep(.5)
Story_Event("CINEMATIC_COMPLETE")
Sleep(1)
han.Teleport(han_move)
Sleep(1)
falcon.Play_Animation("takeoff", false)
Transition_Cinematic_Camera_Key(falcon_loc, 4, 450, 55, 240, 1, 0, 0, 0)
Transition_Cinematic_Target_Key(falcon_loc, 4, 50, 0, 500, 0, 0, 0, 0)
Sleep(6)
Fade_Screen_Out(1)
End_Cinematic_Camera()
Letter_Box_Out(.5)
Lock_Controls(0)
Suspend_AI(0)
end
-----------------------------------------------------------------------------------------------------------------------
function Story_Mode_Service()
if not flag_mission_initiated then
return
end
-- See if any prisons have been attacked
for i, unit in pairs(prison_list) do
if unit.Is_Valid() and unit.Get_Hull() < 1.0 and not flag_prison_attacked then
Story_Event("USE_HAN_HINT_TEXT")
flag_prison_attacked = true
end
end
if not flag_prison_1_destroyed and not TestValid(prison_1) then
flag_prison_1_destroyed = true
prison1_marker.Highlight(false)
--Spawn_Wookie_Unit(prison1_marker.Get_Position(),prison_markers[i])
SpawnList(unarmed_wookie_type_list, han, rebel, false, true)
Story_Event("ARM_WOOKIE_TEXT")
wookies_liberated = wookies_liberated + 1
if wookies_liberated >= wookies_liberated_goal then
Create_Thread("End_Cinematic")
end
end
if not flag_prison_2_destroyed and not TestValid(prison_2) then
flag_prison_2_destroyed = true
prison2_marker.Highlight(false)
SpawnList(unarmed_wookie_type_list, han, rebel, false, true)
Story_Event("ARM_WOOKIE_TEXT")
wookies_liberated = wookies_liberated + 1
if wookies_liberated >= wookies_liberated_goal then
Create_Thread("End_Cinematic")
end
end
if not flag_prison_3_destroyed and not TestValid(prison_3) then
flag_prison_3_destroyed = true
prison3_marker.Highlight(false)
SpawnList(unarmed_wookie_type_list, han, rebel, false, true)
Story_Event("ARM_WOOKIE_TEXT")
wookies_liberated = wookies_liberated + 1
if wookies_liberated >= wookies_liberated_goal then
Create_Thread("End_Cinematic")
end
end
if not flag_prison_4_destroyed and not TestValid(prison_4) then
flag_prison_4_destroyed = true
prison4_marker.Highlight(false)
SpawnList(unarmed_wookie_type_list, han, rebel, false, true)
Story_Event("ARM_WOOKIE_TEXT")
wookies_liberated = wookies_liberated + 1
if wookies_liberated >= wookies_liberated_goal then
Create_Thread("End_Cinematic")
end
end
if not flag_prison_5_destroyed and not TestValid(prison_5) then
flag_prison_5_destroyed = true
prison5_marker.Highlight(false)
SpawnList(unarmed_wookie_type_list, han, rebel, false, true)
Story_Event("ARM_WOOKIE_TEXT")
wookies_liberated = wookies_liberated + 1
if wookies_liberated >= wookies_liberated_goal then
Create_Thread("End_Cinematic")
end
end
if TestValid(han_solo) and han_solo.Get_Hull() < hans_health then
if not waiting_for_next_complaint then
Story_Event("HAN_TAKING_DAMAGE")
waiting_for_next_complaint = true
Register_Timer(Reset_Complaint,10)
end
hans_health = han_solo.Get_Hull()
end
end