Lua:
Hidden/Spoiler:
--
-- Copyright (c) 2005 Pandemic Studios, LLC. All rights reserved.
--
-- Mos Eisley Hero Deathmatch (uses Space Assault rules)
-- First team to reach 100 kills wins
--
ScriptCB_DoFile("ObjectiveConquest")
ScriptCB_DoFile("setup_teams")
ScriptCB_DoFile("MultiObjectiveContainer")
ScriptCB_DoFile("ObjectiveGoto")
ScriptCB_SetGameRules("Campaign")
--ADD THIS AFTER THE ScriptCB_DoFile SECTION
count = 0
--END
---------------------------------------------------------------------------
-- ScriptPostLoad
---------------------------------------------------------------------------
function ScriptPostLoad()
function ScriptPostLoad()
SetAIDifficulty(0, 2, "hard")
AllowAISpawn(ATT, false)
AllowAISpawn(DEF, true)
EnableSPScriptedHeroes()
ScriptCB_SetGameRules("campaign")
onfirstspawn = OnCharacterSpawn(
function(character)
if character == 0 then
ShowPopup("level.AMC.hints.hints")
ReleaseCharacterSpawn(onfirstspawn)
onfirstspawn = nil
BeginObjectivesTimer()
ScriptCB_EnableCommandPostVO(0)
ShowMessageText("Darth Bane... a miner in the Apatros colony..", ATT)
end
end)
--objective :goto the cantina
Objective1 = ObjectiveGoto:New{TeamATT = ATT, TeamDEF = DEF,
text = "Good. Speak to Groshik inside for more help.", popupText = "Bane. Come in, Bane. Go to the cantina on the hill.",
regionName = "cantinaregion", mapIcon = "hud_objective_icon_circle", AIGoalWeight = 0}
Objective1:AddHint("level.AMC.hints.movement")
Objective1:AddHint("level.AMC.hints.obj_markers")
Objective1:AddHint("level.AMC.hints.review_objectives")
Objective1:AddHint("level.AMC.hints.sprint")
Objective1.OnStart = function(self)
att_obj1_aigoal = AddAIGoal(ATT, "Deathmatch", 100)
def_obj1_aigoal = AddAIGoal(DEF, "Deathmatch", 100)
end
Objective1.OnComplete = function(self)
DeleteAIGoal(att_obj1_aigoal)
DeleteAIGoal(def_obj1_aigoal)
ShowMessageText("game.objectives.complete", ATT)
end
--objective: assault on the republic soldiers
Objective2= ObjectiveAssault:New{teamATT = ATT, teamDEF = DEF,
text = "Good job.", popupText = "Some republic soldiers are trying to stalk and kill you. Kill them."}
Dclass = TargetType:New{classname = "rvs_inf_rbasic", killLimit = 5}
Objective2:AddTarget(Dclass)
Objective2.OnStart = function(self)
Objective2.Dclass_cpGoal1 = AddAIGoal(ATT, "Defend", 100, "rvs_inf_rbasic")
Objective2.Dclass_cpGoal2 = AddAIGoal(DEF, "Defend", 100, "rvs_inf_rbasic")
end
Objective2.OnComplete = function(self)
DeleteAIGoal(Objective2.Dclass_cpGoal1)
DeleteAIGoal(Objective2.Dclass_cpGoal2)
end
--objective :goto groshik again for task
Objective3 = ObjectiveGoto:New{TeamATT = ATT, TeamDEF = DEF,
text = "Speak to him. He has a task for you.", popupText = "Go back to Groshik.",
regionName = "cantinaregion", mapIcon = "hud_objective_icon_circle", AIGoalWeight = 0}
Objective3:AddHint("level.AMC.hints.movement")
Objective3:AddHint("level.AMC.hints.obj_markers")
Objective3:AddHint("level.AMC.hints.review_objectives")
Objective3:AddHint("level.AMC.hints.sprint")
Objective3.OnStart = function(self)
att_obj3_aigoal = AddAIGoal(ATT, "Deathmatch", 100)
def_obj3_aigoal = AddAIGoal(DEF, "Deathmatch", 100)
MapAddEntityMarker("tat2_bldg_cantina", "hud_objective_icon_circle", 3.0, 1, "YELLOW", true)
end
Objective3.OnComplete = function(self)
DeleteAIGoal(att_obj3_aigoal)
DeleteAIGoal(def_obj3_aigoal)
ShowMessageText("game.objectives.complete", ATT)
MapRemoveEntityMarker("tat2_bldg_cantina")
end
--objective :goto speak to Neimoidian groshik
Objective4 = ObjectiveGoto:New{TeamATT = ATT, TeamDEF = DEF,
text = "Greetings, human. I am the Neimoidian Groshik, and this is my cantina. Isn't it beautiful! *Ahem.* There is a Jedi running wild on the hill not far from here. I need you to kill him. He is scaring away my customers!", popupText = "Good. Groshik has a task...",
regionName = "groshik", mapIcon = "hud_objective_icon_circle", AIGoalWeight = 0}
Objective4:AddHint("level.AMC.hints.movement")
Objective4:AddHint("level.AMC.hints.obj_markers")
Objective4:AddHint("level.AMC.hints.review_objectives")
Objective4:AddHint("level.AMC.hints.sprint")
Objective4.OnStart = function(self)
att_obj4_aigoal = AddAIGoal(ATT, "Deathmatch", 100)
def_obj4_aigoal = AddAIGoal(DEF, "Deathmatch", 100)
end
Objective4.OnComplete = function(self)
DeleteAIGoal(att_obj4_aigoal)
DeleteAIGoal(def_obj4_aigoal)
ShowMessageText("game.objectives.complete", ATT)
end
--objective: assault, kill the mad jedi
Objective5= ObjectiveAssault:New{teamATT = ATT, teamDEF = DEF,
text = "(The Mad Jedi has been killed. Return to Groshik for the transport he promised.)", popupText = "Go! Kill him! "}
Dclass = TargetType:New{classname = "jed_master_02", killLimit = 1}
Objective5:AddTarget(Dclass)
Objective5.OnStart = function(self)
Objective5.Dclass_cpGoal1 = AddAIGoal(ATT, "Defend", 100, "jed_master_02")
Objective5.Dclass_cpGoal2 = AddAIGoal(DEF, "Defend", 100, "jed_master_02")
end
Objective5.OnComplete = function(self)
DeleteAIGoal(Objective5.Dclass_cpGoal1)
DeleteAIGoal(Objective5.Dclass_cpGoal2)
end
--objective :goto back to the Neimoidian groshik for some transport out of this hell hole
Objective6 = ObjectiveGoto:New{TeamATT = ATT, TeamDEF = DEF,
text = "As I promised.. your craft is waiting for you at the docking bay. A fine beaut, I must say.", popupText = "(Return To Groshik.) ",
regionName = "groshik", mapIcon = "hud_objective_icon_circle", AIGoalWeight = 0}
Objective6:AddHint("level.AMC.hints.movement")
Objective6:AddHint("level.AMC.hints.obj_markers")
Objective6:AddHint("level.AMC.hints.review_objectives")
Objective6:AddHint("level.AMC.hints.sprint")
Objective6.OnStart = function(self)
att_obj6_aigoal = AddAIGoal(ATT, "Deathmatch", 100)
def_obj6_aigoal = AddAIGoal(DEF, "Deathmatch", 100)
end
Objective6.OnComplete = function(self)
DeleteAIGoal(att_obj6_aigoal)
DeleteAIGoal(def_obj6_aigoal)
ShowMessageText("game.objectives.complete", ATT)
end
--objective :goto last place, the docking bay
Objective7 = ObjectiveGoto:New{TeamATT = ATT, TeamDEF = DEF,
text = "Mission Complete.", popupText = "Go to the ship waiting at the docking bay.",
regionName = "leaveregion", mapIcon = "hud_objective_icon_circle", AIGoalWeight = 0}
Objective7:AddHint("level.AMC.hints.movement")
Objective7:AddHint("level.AMC.hints.obj_markers")
Objective7:AddHint("level.AMC.hints.review_objectives")
Objective7:AddHint("level.AMC.hints.sprint")
Objective7.OnStart = function(self)
att_obj7_aigoal = AddAIGoal(ATT, "Deathmatch", 100)
def_obj7_aigoal = AddAIGoal(DEF, "Deathmatch", 100)
MapAddEntityMarker("tat2_bldg_dockingbay_01", "hud_objective_icon_circle", 3.0, 1, "YELLOW", true)
end
Objective7.OnComplete = function(self)
DeleteAIGoal(att_obj7_aigoal)
DeleteAIGoal(def_obj7_aigoal)
ShowMessageText("game.objectives.complete", ATT)
MapRemoveEntityMarker("tat2_bldg_dockingbay_01")
end
end
function BeginObjectivesTimer()
beginobjectivestimer = CreateTimer("beginobjectivestimer")
OnTimerElapse(BeginObjectives, beginobjectivestimer)
SetTimerValue(beginobjectivestimer, 2)
StartTimer(beginobjectivestimer)
end
function BeginObjectives()
objectiveSequence = MultiObjectiveContainer:New{delayVictoryTime = 3}
objectiveSequence:AddObjectiveSet(Objective1)
objectiveSequence:AddObjectiveSet(Objective2)
objectiveSequence:AddObjectiveSet(Objective3)
objectiveSequence:AddObjectiveSet(Objective4)
objectiveSequence:AddObjectiveSet(Objective5)
objectiveSequence:AddObjectiveSet(Objective6)
objectiveSequence:AddObjectiveSet(Objective7)
objectiveSequence:Start()
end
--This defines the CPs. These need to happen first
cp2 = CommandPost:New{name = "cp2"}
cp4 = CommandPost:New{name = "cp4"}
--This sets up the actual objective. This needs to happen after cp's are defined
conquest = ObjectiveConquest:New{teamATT = ATT, teamDEF = DEF,
textATT = "game.modes.con",
textDEF = "game.modes.con2",
multiplayerRules = true}
-- ADD THIS IN THE ScriptPostLoad SECTION
OnObjectDamage(
function(object, damager)
if GetObjectHealth(object) > 900000 then return end
if GetObjectLastHitWeaponClass(object) == "com_weap_inf_stasis" then
FreezeFor(object,2)
end
end
)
--END
SetClassProperty("all_inf_recon_twilek", "PointsToUnlock", 0)
--This adds the CPs to the objective. This needs to happen after the objective is set up
conquest:AddCommandPost(cp2)
conquest:AddCommandPost(cp4)
--ADD THIS AFTER THE ScriptPostLoad SECTION
function FreezeFor(object, timercount)
--Freeze
print("--Freeze")
count = count + 1
health = GetObjectHealth(object)
SetProperty(object, "CurHealth", 1000000)
DeactivateObject(object)
-- Wait for timercount
print("-- Wait for timercount")
CreateTimer("timer" .. count)
SetTimerValue("timer" .. count, timercount)
StartTimer("timer" .. count)
OnTimerElapse(
function(timer)
--Unfreeze
print("--Unfreeze")
ActivateObject(object)
SetProperty(object, "CurHealth", (GetObjectHealth(object) - 1000000) + health)
end,
"timer" .. count
)
DestroyTimer("timer" .. count)
end
--END
conquest:Start()
EnableSPHeroRules()
end
---------------------------------------------------------------------------
-- ScriptInit
---------------------------------------------------------------------------
function ScriptInit()
SetMemoryPoolSize ("SoldierAnimation",1700) -- should be number in log x 1.5 rounded to the nearest hundred.
SetMemoryPoolSize ("ClothData",20)
SetMemoryPoolSize ("Combo",70) -- should be ~ 2x number of jedi classes
SetMemoryPoolSize ("Combo::State",850) -- should be ~12x #Combo
SetMemoryPoolSize ("Combo::Transition",850) -- should be a bit bigger than #Combo::State
SetMemoryPoolSize ("Combo::Condition",850) -- should be a bit bigger than #Combo::State
SetMemoryPoolSize ("Combo::Attack",750) -- should be ~8-12x #Combo
SetMemoryPoolSize ("Combo::DamageSample",8000) -- should be ~8-12x #Combo::Attack
SetMemoryPoolSize ("Combo::Deflect",140) -- should be ~1x #combo -- should be ~1x #combo
ReadDataFile("ingame.lvl")
--ForceHumansOntoTeam1()
ALL = 1
IMP = 2
-- These variables do not change
ATT = 1
DEF = 2
SetMaxFlyHeight(100)
SetMaxPlayerFlyHeight(100)
ReadDataFile("sound\\dea.lvl;dea1gcw")
ReadDataFile("SIDE\\BFX\\all.lvl",
"all_inf_recon_twilek")
ReadDataFile("dc:SIDE\\jed.lvl",
"jed_master_02",
"jed_knight_03")
ReadDataFile("dc:SIDE\\rvs.lvl",
"rvs_inf_rbasic",
"rvs_inf_sbasic",
"rvs_inf_rheavy",
"rvs_inf_sheavy",
"rvs_inf_rmelee",
"rvs_inf_smelee",
"rvs_inf_rsupport",
"rvs_inf_ssupport",
"rvs_inf_rstealth",
"rvs_inf_sstealth",
"kor_knight_02",
"kor_inf_K")
ReadDataFile("dc:SIDE\\rep.lvl",
"rep_inf_ep2_rifleman")
ReadDataFile("dc:SIDE\\cis.lvl",
"bane_inf_bane")
--[[ Turrets disabled
ReadDataFile("SIDE\\tur.lvl",
"tur_bldg_chaingun_roof",
"tur_weap_built_gunturret")
SetMemoryPoolSize("MountedTurret", 15)
--]]
--ReadDataFile("SIDE\\snw.lvl", "snw_inf_wampa")
SetupTeams{
hero = {
team = ALL,
units = 2,
reinforcements = 5,
soldier = { "bane_inf_bane",1,2},
},
}
SetupTeams{
villain = {
team = IMP,
units = 30,
reinforcements = -1,
soldier = { "rvs_inf_rbasic",5,6},
assault = { "rvs_inf_rheavy",5,6},
engineer= { "rvs_inf_rmelee",2,3},
sniper = { "rvs_inf_rsupport",3,5},
officer = { "rvs_inf_rstealth",1,2},
},
}
AddUnitClass(IMP, "jed_knight_03",30,51)
AddUnitClass(IMP, "rep_inf_ep2_rifleman",1,2)
AddUnitClass(IMP, "all_inf_recon_twilek",20,25)
AddUnitClass(IMP, "jed_master_02",20,25)
-- Please ignore this it's just a reminder of the unit.
-- Level Stats
ClearWalkers()
AddWalkerType(0, 0) -- special -> droidekas
AddWalkerType(1, 0) -- 1x2 (1 pair of legs)
AddWalkerType(2, 0) -- 2x2 (2 pairs of legs)
AddWalkerType(3, 0) -- 3x2 (3 pairs of legs)
local weaponCnt = 96
SetMemoryPoolSize("Aimer", 1)
SetMemoryPoolSize("AmmoCounter", weaponCnt)
SetMemoryPoolSize("BaseHint", 320)
SetMemoryPoolSize("ConnectivityGraphFollower", 23)
SetMemoryPoolSize("EnergyBar", weaponCnt)
SetMemoryPoolSize("EntityCloth",41)
SetMemoryPoolSize("EntityDefenseGridTurret", 0)
SetMemoryPoolSize("EntityDroid", 0)
SetMemoryPoolSize("EntityFlyer", 5) -- to account for 5 chewbaccas
SetMemoryPoolSize("EntityLight", 80, 80) -- stupid trickery to actually set lights to 80
SetMemoryPoolSize("EntityPortableTurret", 0) -- nobody has autoturrets AFAIK - MZ
SetMemoryPoolSize("EntitySoundStream", 2)
SetMemoryPoolSize("EntitySoundStatic", 45)
SetMemoryPoolSize("FLEffectObject::OffsetMatrix", 120)
SetMemoryPoolSize("MountedTurret", 0)
SetMemoryPoolSize("Navigator", 23)
SetMemoryPoolSize("Obstacle", 667)
SetMemoryPoolSize("Ordnance", 80) -- not much ordnance going on in the level
SetMemoryPoolSize("ParticleEmitter", 512)
SetMemoryPoolSize("ParticleEmitterInfoData", 512)
SetMemoryPoolSize("PathFollower", 23)
SetMemoryPoolSize("PathNode", 128)
SetMemoryPoolSize("ShieldEffect", 0)
SetMemoryPoolSize("TentacleSimulator", 24)
SetMemoryPoolSize("TreeGridStack", 290)
SetMemoryPoolSize("UnitAgent", 23)
SetMemoryPoolSize("UnitController", 23)
SetMemoryPoolSize("Weapon", weaponCnt)
SetSpawnDelay(10.0, 0.25)
ReadDataFile("dc:AMC\\AMC.lvl", "AMC_eli")
SetDenseEnvironment("false")
-- Sound Stats
ScriptCB_EnableHeroMusic(0)
ScriptCB_EnableHeroVO(0)
voiceSlow = OpenAudioStream("sound\\global.lvl", "all_unit_vo_slow")
AudioStreamAppendSegments("sound\\global.lvl", "imp_unit_vo_slow", voiceSlow)
AudioStreamAppendSegments("sound\\global.lvl", "global_vo_slow", voiceSlow)
voiceQuick = OpenAudioStream("sound\\global.lvl", "all_unit_vo_quick")
AudioStreamAppendSegments("sound\\global.lvl", "imp_unit_vo_quick", voiceQuick)
OpenAudioStream("sound\\global.lvl", "gcw_music")
OpenAudioStream("sound\\tat.lvl", "tat2")
OpenAudioStream("sound\\tat.lvl", "tat2")
-- OpenAudioStream("sound\\global.lvl", "global_vo_quick")
-- OpenAudioStream("sound\\global.lvl", "global_vo_slow")
SetBleedingVoiceOver(ALL, ALL, "all_off_com_report_us_overwhelmed", 1)
SetBleedingVoiceOver(ALL, IMP, "all_off_com_report_enemy_losing", 1)
SetBleedingVoiceOver(IMP, ALL, "imp_off_com_report_enemy_losing", 1)
SetBleedingVoiceOver(IMP, IMP, "imp_off_com_report_us_overwhelmed", 1)
SetLowReinforcementsVoiceOver(ALL, ALL, "all_off_defeat_im", .1, 1)
SetLowReinforcementsVoiceOver(ALL, IMP, "all_off_victory_im", .1, 1)
SetLowReinforcementsVoiceOver(IMP, IMP, "imp_off_defeat_im", .1, 1)
SetLowReinforcementsVoiceOver(IMP, ALL, "imp_off_victory_im", .1, 1)
SetOutOfBoundsVoiceOver(1, "Allleaving")
SetOutOfBoundsVoiceOver(2, "Impleaving")
SetAmbientMusic(ALL, 1.0, "gen_amb_celebDeathmatch", 0,1)
-- SetAmbientMusic(ALL, 0.9, "all_tat_amb_middle", 1,1)
-- SetAmbientMusic(ALL, 0.1, "all_tat_amb_end", 2,1)
SetAmbientMusic(IMP, 1.0, "gen_amb_celebDeathmatch", 0,1)
-- SetAmbientMusic(IMP, 0.9, "imp_tat_amb_middle", 1,1)
-- SetAmbientMusic(IMP, 0.1, "imp_tat_amb_end", 2,1)
SetVictoryMusic(ALL, "all_tat_amb_victory")
SetDefeatMusic (ALL, "all_tat_amb_defeat")
SetVictoryMusic(IMP, "imp_tat_amb_victory")
SetDefeatMusic (IMP, "imp_tat_amb_defeat")
SetSoundEffect("ScopeDisplayZoomIn", "binocularzoomin")
SetSoundEffect("ScopeDisplayZoomOut", "binocularzoomout")
--SetSoundEffect("WeaponUnableSelect", "com_weap_inf_weaponchange_null")
--SetSoundEffect("WeaponModeUnableSelect", "com_weap_inf_modechange_null")
SetSoundEffect("SpawnDisplayUnitChange", "shell_select_unit")
SetSoundEffect("SpawnDisplayUnitAccept", "shell_menu_enter")
SetSoundEffect("SpawnDisplaySpawnPointChange", "shell_select_change")
SetSoundEffect("SpawnDisplaySpawnPointAccept", "shell_menu_enter")
SetSoundEffect("SpawnDisplayBack", "shell_menu_exit")
SetAttackingTeam(ATT)
-- Camera Stats
--Tat2 Mos Eisley
AddCameraShot(0.974338, -0.222180, 0.035172, 0.008020, -82.664650, 23.668301, 43.955681);
AddCameraShot(0.390197, -0.089729, -0.893040, -0.205362, 23.563562, 12.914885, -101.465561);
AddCameraShot(0.169759, 0.002225, -0.985398, 0.012916, 126.972809, 4.039628, -22.020613);
AddCameraShot(0.677453, -0.041535, 0.733016, 0.044942, 97.517807, 4.039628, 36.853477);
AddCameraShot(0.866029, -0.156506, 0.467299, 0.084449, 7.685640, 7.130688, -10.895234);
end
-- Copyright (c) 2005 Pandemic Studios, LLC. All rights reserved.
--
-- Mos Eisley Hero Deathmatch (uses Space Assault rules)
-- First team to reach 100 kills wins
--
ScriptCB_DoFile("ObjectiveConquest")
ScriptCB_DoFile("setup_teams")
ScriptCB_DoFile("MultiObjectiveContainer")
ScriptCB_DoFile("ObjectiveGoto")
ScriptCB_SetGameRules("Campaign")
--ADD THIS AFTER THE ScriptCB_DoFile SECTION
count = 0
--END
---------------------------------------------------------------------------
-- ScriptPostLoad
---------------------------------------------------------------------------
function ScriptPostLoad()
function ScriptPostLoad()
SetAIDifficulty(0, 2, "hard")
AllowAISpawn(ATT, false)
AllowAISpawn(DEF, true)
EnableSPScriptedHeroes()
ScriptCB_SetGameRules("campaign")
onfirstspawn = OnCharacterSpawn(
function(character)
if character == 0 then
ShowPopup("level.AMC.hints.hints")
ReleaseCharacterSpawn(onfirstspawn)
onfirstspawn = nil
BeginObjectivesTimer()
ScriptCB_EnableCommandPostVO(0)
ShowMessageText("Darth Bane... a miner in the Apatros colony..", ATT)
end
end)
--objective :goto the cantina
Objective1 = ObjectiveGoto:New{TeamATT = ATT, TeamDEF = DEF,
text = "Good. Speak to Groshik inside for more help.", popupText = "Bane. Come in, Bane. Go to the cantina on the hill.",
regionName = "cantinaregion", mapIcon = "hud_objective_icon_circle", AIGoalWeight = 0}
Objective1:AddHint("level.AMC.hints.movement")
Objective1:AddHint("level.AMC.hints.obj_markers")
Objective1:AddHint("level.AMC.hints.review_objectives")
Objective1:AddHint("level.AMC.hints.sprint")
Objective1.OnStart = function(self)
att_obj1_aigoal = AddAIGoal(ATT, "Deathmatch", 100)
def_obj1_aigoal = AddAIGoal(DEF, "Deathmatch", 100)
end
Objective1.OnComplete = function(self)
DeleteAIGoal(att_obj1_aigoal)
DeleteAIGoal(def_obj1_aigoal)
ShowMessageText("game.objectives.complete", ATT)
end
--objective: assault on the republic soldiers
Objective2= ObjectiveAssault:New{teamATT = ATT, teamDEF = DEF,
text = "Good job.", popupText = "Some republic soldiers are trying to stalk and kill you. Kill them."}
Dclass = TargetType:New{classname = "rvs_inf_rbasic", killLimit = 5}
Objective2:AddTarget(Dclass)
Objective2.OnStart = function(self)
Objective2.Dclass_cpGoal1 = AddAIGoal(ATT, "Defend", 100, "rvs_inf_rbasic")
Objective2.Dclass_cpGoal2 = AddAIGoal(DEF, "Defend", 100, "rvs_inf_rbasic")
end
Objective2.OnComplete = function(self)
DeleteAIGoal(Objective2.Dclass_cpGoal1)
DeleteAIGoal(Objective2.Dclass_cpGoal2)
end
--objective :goto groshik again for task
Objective3 = ObjectiveGoto:New{TeamATT = ATT, TeamDEF = DEF,
text = "Speak to him. He has a task for you.", popupText = "Go back to Groshik.",
regionName = "cantinaregion", mapIcon = "hud_objective_icon_circle", AIGoalWeight = 0}
Objective3:AddHint("level.AMC.hints.movement")
Objective3:AddHint("level.AMC.hints.obj_markers")
Objective3:AddHint("level.AMC.hints.review_objectives")
Objective3:AddHint("level.AMC.hints.sprint")
Objective3.OnStart = function(self)
att_obj3_aigoal = AddAIGoal(ATT, "Deathmatch", 100)
def_obj3_aigoal = AddAIGoal(DEF, "Deathmatch", 100)
MapAddEntityMarker("tat2_bldg_cantina", "hud_objective_icon_circle", 3.0, 1, "YELLOW", true)
end
Objective3.OnComplete = function(self)
DeleteAIGoal(att_obj3_aigoal)
DeleteAIGoal(def_obj3_aigoal)
ShowMessageText("game.objectives.complete", ATT)
MapRemoveEntityMarker("tat2_bldg_cantina")
end
--objective :goto speak to Neimoidian groshik
Objective4 = ObjectiveGoto:New{TeamATT = ATT, TeamDEF = DEF,
text = "Greetings, human. I am the Neimoidian Groshik, and this is my cantina. Isn't it beautiful! *Ahem.* There is a Jedi running wild on the hill not far from here. I need you to kill him. He is scaring away my customers!", popupText = "Good. Groshik has a task...",
regionName = "groshik", mapIcon = "hud_objective_icon_circle", AIGoalWeight = 0}
Objective4:AddHint("level.AMC.hints.movement")
Objective4:AddHint("level.AMC.hints.obj_markers")
Objective4:AddHint("level.AMC.hints.review_objectives")
Objective4:AddHint("level.AMC.hints.sprint")
Objective4.OnStart = function(self)
att_obj4_aigoal = AddAIGoal(ATT, "Deathmatch", 100)
def_obj4_aigoal = AddAIGoal(DEF, "Deathmatch", 100)
end
Objective4.OnComplete = function(self)
DeleteAIGoal(att_obj4_aigoal)
DeleteAIGoal(def_obj4_aigoal)
ShowMessageText("game.objectives.complete", ATT)
end
--objective: assault, kill the mad jedi
Objective5= ObjectiveAssault:New{teamATT = ATT, teamDEF = DEF,
text = "(The Mad Jedi has been killed. Return to Groshik for the transport he promised.)", popupText = "Go! Kill him! "}
Dclass = TargetType:New{classname = "jed_master_02", killLimit = 1}
Objective5:AddTarget(Dclass)
Objective5.OnStart = function(self)
Objective5.Dclass_cpGoal1 = AddAIGoal(ATT, "Defend", 100, "jed_master_02")
Objective5.Dclass_cpGoal2 = AddAIGoal(DEF, "Defend", 100, "jed_master_02")
end
Objective5.OnComplete = function(self)
DeleteAIGoal(Objective5.Dclass_cpGoal1)
DeleteAIGoal(Objective5.Dclass_cpGoal2)
end
--objective :goto back to the Neimoidian groshik for some transport out of this hell hole
Objective6 = ObjectiveGoto:New{TeamATT = ATT, TeamDEF = DEF,
text = "As I promised.. your craft is waiting for you at the docking bay. A fine beaut, I must say.", popupText = "(Return To Groshik.) ",
regionName = "groshik", mapIcon = "hud_objective_icon_circle", AIGoalWeight = 0}
Objective6:AddHint("level.AMC.hints.movement")
Objective6:AddHint("level.AMC.hints.obj_markers")
Objective6:AddHint("level.AMC.hints.review_objectives")
Objective6:AddHint("level.AMC.hints.sprint")
Objective6.OnStart = function(self)
att_obj6_aigoal = AddAIGoal(ATT, "Deathmatch", 100)
def_obj6_aigoal = AddAIGoal(DEF, "Deathmatch", 100)
end
Objective6.OnComplete = function(self)
DeleteAIGoal(att_obj6_aigoal)
DeleteAIGoal(def_obj6_aigoal)
ShowMessageText("game.objectives.complete", ATT)
end
--objective :goto last place, the docking bay
Objective7 = ObjectiveGoto:New{TeamATT = ATT, TeamDEF = DEF,
text = "Mission Complete.", popupText = "Go to the ship waiting at the docking bay.",
regionName = "leaveregion", mapIcon = "hud_objective_icon_circle", AIGoalWeight = 0}
Objective7:AddHint("level.AMC.hints.movement")
Objective7:AddHint("level.AMC.hints.obj_markers")
Objective7:AddHint("level.AMC.hints.review_objectives")
Objective7:AddHint("level.AMC.hints.sprint")
Objective7.OnStart = function(self)
att_obj7_aigoal = AddAIGoal(ATT, "Deathmatch", 100)
def_obj7_aigoal = AddAIGoal(DEF, "Deathmatch", 100)
MapAddEntityMarker("tat2_bldg_dockingbay_01", "hud_objective_icon_circle", 3.0, 1, "YELLOW", true)
end
Objective7.OnComplete = function(self)
DeleteAIGoal(att_obj7_aigoal)
DeleteAIGoal(def_obj7_aigoal)
ShowMessageText("game.objectives.complete", ATT)
MapRemoveEntityMarker("tat2_bldg_dockingbay_01")
end
end
function BeginObjectivesTimer()
beginobjectivestimer = CreateTimer("beginobjectivestimer")
OnTimerElapse(BeginObjectives, beginobjectivestimer)
SetTimerValue(beginobjectivestimer, 2)
StartTimer(beginobjectivestimer)
end
function BeginObjectives()
objectiveSequence = MultiObjectiveContainer:New{delayVictoryTime = 3}
objectiveSequence:AddObjectiveSet(Objective1)
objectiveSequence:AddObjectiveSet(Objective2)
objectiveSequence:AddObjectiveSet(Objective3)
objectiveSequence:AddObjectiveSet(Objective4)
objectiveSequence:AddObjectiveSet(Objective5)
objectiveSequence:AddObjectiveSet(Objective6)
objectiveSequence:AddObjectiveSet(Objective7)
objectiveSequence:Start()
end
--This defines the CPs. These need to happen first
cp2 = CommandPost:New{name = "cp2"}
cp4 = CommandPost:New{name = "cp4"}
--This sets up the actual objective. This needs to happen after cp's are defined
conquest = ObjectiveConquest:New{teamATT = ATT, teamDEF = DEF,
textATT = "game.modes.con",
textDEF = "game.modes.con2",
multiplayerRules = true}
-- ADD THIS IN THE ScriptPostLoad SECTION
OnObjectDamage(
function(object, damager)
if GetObjectHealth(object) > 900000 then return end
if GetObjectLastHitWeaponClass(object) == "com_weap_inf_stasis" then
FreezeFor(object,2)
end
end
)
--END
SetClassProperty("all_inf_recon_twilek", "PointsToUnlock", 0)
--This adds the CPs to the objective. This needs to happen after the objective is set up
conquest:AddCommandPost(cp2)
conquest:AddCommandPost(cp4)
--ADD THIS AFTER THE ScriptPostLoad SECTION
function FreezeFor(object, timercount)
--Freeze
print("--Freeze")
count = count + 1
health = GetObjectHealth(object)
SetProperty(object, "CurHealth", 1000000)
DeactivateObject(object)
-- Wait for timercount
print("-- Wait for timercount")
CreateTimer("timer" .. count)
SetTimerValue("timer" .. count, timercount)
StartTimer("timer" .. count)
OnTimerElapse(
function(timer)
--Unfreeze
print("--Unfreeze")
ActivateObject(object)
SetProperty(object, "CurHealth", (GetObjectHealth(object) - 1000000) + health)
end,
"timer" .. count
)
DestroyTimer("timer" .. count)
end
--END
conquest:Start()
EnableSPHeroRules()
end
---------------------------------------------------------------------------
-- ScriptInit
---------------------------------------------------------------------------
function ScriptInit()
SetMemoryPoolSize ("SoldierAnimation",1700) -- should be number in log x 1.5 rounded to the nearest hundred.
SetMemoryPoolSize ("ClothData",20)
SetMemoryPoolSize ("Combo",70) -- should be ~ 2x number of jedi classes
SetMemoryPoolSize ("Combo::State",850) -- should be ~12x #Combo
SetMemoryPoolSize ("Combo::Transition",850) -- should be a bit bigger than #Combo::State
SetMemoryPoolSize ("Combo::Condition",850) -- should be a bit bigger than #Combo::State
SetMemoryPoolSize ("Combo::Attack",750) -- should be ~8-12x #Combo
SetMemoryPoolSize ("Combo::DamageSample",8000) -- should be ~8-12x #Combo::Attack
SetMemoryPoolSize ("Combo::Deflect",140) -- should be ~1x #combo -- should be ~1x #combo
ReadDataFile("ingame.lvl")
--ForceHumansOntoTeam1()
ALL = 1
IMP = 2
-- These variables do not change
ATT = 1
DEF = 2
SetMaxFlyHeight(100)
SetMaxPlayerFlyHeight(100)
ReadDataFile("sound\\dea.lvl;dea1gcw")
ReadDataFile("SIDE\\BFX\\all.lvl",
"all_inf_recon_twilek")
ReadDataFile("dc:SIDE\\jed.lvl",
"jed_master_02",
"jed_knight_03")
ReadDataFile("dc:SIDE\\rvs.lvl",
"rvs_inf_rbasic",
"rvs_inf_sbasic",
"rvs_inf_rheavy",
"rvs_inf_sheavy",
"rvs_inf_rmelee",
"rvs_inf_smelee",
"rvs_inf_rsupport",
"rvs_inf_ssupport",
"rvs_inf_rstealth",
"rvs_inf_sstealth",
"kor_knight_02",
"kor_inf_K")
ReadDataFile("dc:SIDE\\rep.lvl",
"rep_inf_ep2_rifleman")
ReadDataFile("dc:SIDE\\cis.lvl",
"bane_inf_bane")
--[[ Turrets disabled
ReadDataFile("SIDE\\tur.lvl",
"tur_bldg_chaingun_roof",
"tur_weap_built_gunturret")
SetMemoryPoolSize("MountedTurret", 15)
--]]
--ReadDataFile("SIDE\\snw.lvl", "snw_inf_wampa")
SetupTeams{
hero = {
team = ALL,
units = 2,
reinforcements = 5,
soldier = { "bane_inf_bane",1,2},
},
}
SetupTeams{
villain = {
team = IMP,
units = 30,
reinforcements = -1,
soldier = { "rvs_inf_rbasic",5,6},
assault = { "rvs_inf_rheavy",5,6},
engineer= { "rvs_inf_rmelee",2,3},
sniper = { "rvs_inf_rsupport",3,5},
officer = { "rvs_inf_rstealth",1,2},
},
}
AddUnitClass(IMP, "jed_knight_03",30,51)
AddUnitClass(IMP, "rep_inf_ep2_rifleman",1,2)
AddUnitClass(IMP, "all_inf_recon_twilek",20,25)
AddUnitClass(IMP, "jed_master_02",20,25)
-- Please ignore this it's just a reminder of the unit.
-- Level Stats
ClearWalkers()
AddWalkerType(0, 0) -- special -> droidekas
AddWalkerType(1, 0) -- 1x2 (1 pair of legs)
AddWalkerType(2, 0) -- 2x2 (2 pairs of legs)
AddWalkerType(3, 0) -- 3x2 (3 pairs of legs)
local weaponCnt = 96
SetMemoryPoolSize("Aimer", 1)
SetMemoryPoolSize("AmmoCounter", weaponCnt)
SetMemoryPoolSize("BaseHint", 320)
SetMemoryPoolSize("ConnectivityGraphFollower", 23)
SetMemoryPoolSize("EnergyBar", weaponCnt)
SetMemoryPoolSize("EntityCloth",41)
SetMemoryPoolSize("EntityDefenseGridTurret", 0)
SetMemoryPoolSize("EntityDroid", 0)
SetMemoryPoolSize("EntityFlyer", 5) -- to account for 5 chewbaccas
SetMemoryPoolSize("EntityLight", 80, 80) -- stupid trickery to actually set lights to 80
SetMemoryPoolSize("EntityPortableTurret", 0) -- nobody has autoturrets AFAIK - MZ
SetMemoryPoolSize("EntitySoundStream", 2)
SetMemoryPoolSize("EntitySoundStatic", 45)
SetMemoryPoolSize("FLEffectObject::OffsetMatrix", 120)
SetMemoryPoolSize("MountedTurret", 0)
SetMemoryPoolSize("Navigator", 23)
SetMemoryPoolSize("Obstacle", 667)
SetMemoryPoolSize("Ordnance", 80) -- not much ordnance going on in the level
SetMemoryPoolSize("ParticleEmitter", 512)
SetMemoryPoolSize("ParticleEmitterInfoData", 512)
SetMemoryPoolSize("PathFollower", 23)
SetMemoryPoolSize("PathNode", 128)
SetMemoryPoolSize("ShieldEffect", 0)
SetMemoryPoolSize("TentacleSimulator", 24)
SetMemoryPoolSize("TreeGridStack", 290)
SetMemoryPoolSize("UnitAgent", 23)
SetMemoryPoolSize("UnitController", 23)
SetMemoryPoolSize("Weapon", weaponCnt)
SetSpawnDelay(10.0, 0.25)
ReadDataFile("dc:AMC\\AMC.lvl", "AMC_eli")
SetDenseEnvironment("false")
-- Sound Stats
ScriptCB_EnableHeroMusic(0)
ScriptCB_EnableHeroVO(0)
voiceSlow = OpenAudioStream("sound\\global.lvl", "all_unit_vo_slow")
AudioStreamAppendSegments("sound\\global.lvl", "imp_unit_vo_slow", voiceSlow)
AudioStreamAppendSegments("sound\\global.lvl", "global_vo_slow", voiceSlow)
voiceQuick = OpenAudioStream("sound\\global.lvl", "all_unit_vo_quick")
AudioStreamAppendSegments("sound\\global.lvl", "imp_unit_vo_quick", voiceQuick)
OpenAudioStream("sound\\global.lvl", "gcw_music")
OpenAudioStream("sound\\tat.lvl", "tat2")
OpenAudioStream("sound\\tat.lvl", "tat2")
-- OpenAudioStream("sound\\global.lvl", "global_vo_quick")
-- OpenAudioStream("sound\\global.lvl", "global_vo_slow")
SetBleedingVoiceOver(ALL, ALL, "all_off_com_report_us_overwhelmed", 1)
SetBleedingVoiceOver(ALL, IMP, "all_off_com_report_enemy_losing", 1)
SetBleedingVoiceOver(IMP, ALL, "imp_off_com_report_enemy_losing", 1)
SetBleedingVoiceOver(IMP, IMP, "imp_off_com_report_us_overwhelmed", 1)
SetLowReinforcementsVoiceOver(ALL, ALL, "all_off_defeat_im", .1, 1)
SetLowReinforcementsVoiceOver(ALL, IMP, "all_off_victory_im", .1, 1)
SetLowReinforcementsVoiceOver(IMP, IMP, "imp_off_defeat_im", .1, 1)
SetLowReinforcementsVoiceOver(IMP, ALL, "imp_off_victory_im", .1, 1)
SetOutOfBoundsVoiceOver(1, "Allleaving")
SetOutOfBoundsVoiceOver(2, "Impleaving")
SetAmbientMusic(ALL, 1.0, "gen_amb_celebDeathmatch", 0,1)
-- SetAmbientMusic(ALL, 0.9, "all_tat_amb_middle", 1,1)
-- SetAmbientMusic(ALL, 0.1, "all_tat_amb_end", 2,1)
SetAmbientMusic(IMP, 1.0, "gen_amb_celebDeathmatch", 0,1)
-- SetAmbientMusic(IMP, 0.9, "imp_tat_amb_middle", 1,1)
-- SetAmbientMusic(IMP, 0.1, "imp_tat_amb_end", 2,1)
SetVictoryMusic(ALL, "all_tat_amb_victory")
SetDefeatMusic (ALL, "all_tat_amb_defeat")
SetVictoryMusic(IMP, "imp_tat_amb_victory")
SetDefeatMusic (IMP, "imp_tat_amb_defeat")
SetSoundEffect("ScopeDisplayZoomIn", "binocularzoomin")
SetSoundEffect("ScopeDisplayZoomOut", "binocularzoomout")
--SetSoundEffect("WeaponUnableSelect", "com_weap_inf_weaponchange_null")
--SetSoundEffect("WeaponModeUnableSelect", "com_weap_inf_modechange_null")
SetSoundEffect("SpawnDisplayUnitChange", "shell_select_unit")
SetSoundEffect("SpawnDisplayUnitAccept", "shell_menu_enter")
SetSoundEffect("SpawnDisplaySpawnPointChange", "shell_select_change")
SetSoundEffect("SpawnDisplaySpawnPointAccept", "shell_menu_enter")
SetSoundEffect("SpawnDisplayBack", "shell_menu_exit")
SetAttackingTeam(ATT)
-- Camera Stats
--Tat2 Mos Eisley
AddCameraShot(0.974338, -0.222180, 0.035172, 0.008020, -82.664650, 23.668301, 43.955681);
AddCameraShot(0.390197, -0.089729, -0.893040, -0.205362, 23.563562, 12.914885, -101.465561);
AddCameraShot(0.169759, 0.002225, -0.985398, 0.012916, 126.972809, 4.039628, -22.020613);
AddCameraShot(0.677453, -0.041535, 0.733016, 0.044942, 97.517807, 4.039628, 36.853477);
AddCameraShot(0.866029, -0.156506, 0.467299, 0.084449, 7.685640, 7.130688, -10.895234);
end



