--[[ IMPORTS ]]
import("ScarUtil.scar") import("WXPScarUtil.scar")
--[[ GAME SETUP ]]
--Objectives: Objective_Locate_Farseer = {title_id = 2570000, short_desc_id = 2570001, help_tip_id = 2570000} Objective_Capture_Fortress = {title_id = 2570100, short_desc_id = 2570101, help_tip_id = 2570100} Objective_Destroy_Ork_Camp = {title_id = 2570200, short_desc_id = 2570201, help_tip_id = 2570200} Objective_Free_Squiggoths = {title_id = 2570300, short_desc_id = 2570301, help_tip_id = 2570300} Objective_Kill_Sorcerer = {title_id = 2570400, short_desc_id = 2570401, help_tip_id = 2570400}
--[[ the OnGameSetup() function is mandatory! ]] function OnGameSetup()
humanplayer = MetaMap_GetPlayerRaceName()
--[[defining the name of the player's faction]]
if MetaMap_GetPlayerRaceName() == "chaos_marine_race" then
factionname = "$690014"
colorscheme = "default_1"
g_Player1 = Setup_Player(0, factionname, MetaMap_GetPlayerRaceName(), 1)
Misc_PlayerTeamColor(g_Player1, colorscheme)
elseif MetaMap_GetPlayerRaceName() == "guard_race" then
factionname = "$690011"
colorscheme = "default_8"
g_Player1 = Setup_Player(0, factionname, MetaMap_GetPlayerRaceName(), 1)
elseif MetaMap_GetPlayerRaceName() == "ork_race" then
factionname = "$690013"
colorscheme = "default_4"
g_Player1 = Setup_Player(0, factionname, MetaMap_GetPlayerRaceName(), 1)
Misc_PlayerTeamColor(g_Player1, colorscheme)
elseif MetaMap_GetPlayerRaceName() == "space_marine_race" then
factionname = "$690010"
colorscheme = "default_0"
g_Player1 = Setup_Player(0, factionname, MetaMap_GetPlayerRaceName(), 1)
elseif MetaMap_GetPlayerRaceName() == "tau_race" then
factionname = "$690015"
colorscheme = "default_0"
g_Player1 = Setup_Player(0, factionname, MetaMap_GetPlayerRaceName(), 1)
elseif MetaMap_GetPlayerRaceName() == "necron_race" then
factionname = "$690016"
colorscheme = "default_0"
g_Player1 = Setup_Player(0, factionname, MetaMap_GetPlayerRaceName(), 1)
end
g_Player2 = Setup_Player(1, "$690012", "eldar_race", 2)
Misc_PlayerTeamColor(g_Player2, "default_5")
g_Player3 = Setup_Player(2, "$2570900", "chaos_marine_race", 3)
Misc_PlayerTeamColor(g_Player3, "default_3")
g_Player4 = Setup_Player(3, "$2570901", "ork_race", 4)
Misc_PlayerTeamColor(g_Player4, "default_3")
g_Player5 = Setup_Player(4, "$2570901", "ork_race", 1) --Squiggoths
Misc_PlayerTeamColor(g_Player5, "default_3")
--[[global variables]]
g_firstrun = true
g_Vehicle = 1
g_Win = false
g_Relic = false
g_Target = 1
g_Timer = 0
g_FinalTimer = 10
g_Relocated = false
g_HQ_Type = nil
g_Leader_Type = nil
g_Turret_Type = nil
g_AnnihilateChaosIterator = 10
g_FirstFailedCheck = false
g_SpawnEastReinforcements = false
g_SpawnWestReinforcements = false
--difficulty variable
g_Difficulty = 0
g_DBase = 10
g_DMax = 15
g_SmallSquadMin = 3
g_SmallSquadMax = 5
g_MediumSquadMin = 4
g_MediumSquadMax = 9
g_LargeSquadMin = 7
g_LargeSquadMax = 15
g_PlayerWins = false
--------
--LINEAR DIFFICULTY FUNCTION
-- TBASE + math.floor ((g_Difficulty - g_DBase) * ((TMAX - TBASE) / (g_DMax - g_DBase))) = TARGET
--------
--Eldar Patrol counter
g_EldarPatrol = 2
--Ork Patrol counter
g_OrkPatrol = 2
g_ChaosDead = false
g_OrkDead = false
g_Warning1 = false
g_Warning2 = false
g_Warning3 = false
--[[ define the "enemy" who will win if the player 'loses' ]] g_enemy = g_Player2
--[[Win condition Objective]]
end
--[[ the OnGameRestore() function is mandatory!, this will only get called after loading a game ]]
function OnGameRestore()
end
--[[ ON INITIALIZATION ]]
function OnInit()
--[[ RESEARCH LEVEL - sets the research level of the mission, locks researches, squads, and buildings for the appropriate mission number DOW specific!
sets the research level of the mission, locks researches, squads, and buildings]]
Rule_SetResearchLevel( 4 )
--[[ NIS PRESETS - turn off event cues, set the viewable space to black (faded out) and preset letterboxing
turn off event cues, set the viewable space to black (faded out) and preset letterboxing ]]
WXP_OpeningNISPreset()
--[[ START THE MUSIC ]]
-- call the function to load the jukebox with tunes]]
Rule_SetupMusicPlaylist()
--[[ SET AI - call the function to set the pregame state of the AI
call the function to set the pregame state of the AI ]]
Rule_PresetAI()
--[[ START NIS - calls the NIS function located in the MissionName.nis file
calls the NIS function located in the MissionName.nis file ]]
Util_StartNIS( EVENTS.NIS_Opening )
end
--[[ the Scar_AddInit(OnInit) function is mandatory! This registers your init function with scar. ]] Scar_AddInit(OnInit)
--[[ GAME RESTRICTIONS ]]
--[[ Disables, enables, and grants research items ]]
function Rule_SetResearchLevel( resLevel )
--[[ WXP Specific ]]
WXP_Restrict( resLevel )
end
--[[ MUSIC ]]
function Rule_SetupMusicPlaylist()
--music
t_music = {"MU_IG_STR_Eldar", "MU_IG_STR_Eldar_perc", "MU_IG_STR_Eldar_perc_brass", "MU_IG_STR_Eldar_perc_str"}
--t_music = {"MU_IG_STR_Necron", "MU_IG_STR_Necron_perc", "MU_IG_STR_Necron_perc_brass", "MU_IG_STR_Necron_perc_str"}
Playlist_Manager( PC_Music, t_music, true, true , {20, 40})
--ambient sound
t_ambient_sound = {"Snowy_wind_1"}
Playlist_Manager( PC_Ambient, t_ambient_sound, true, true , {2, 4})
end
--[[ PRESET AI ]]
function Rule_PresetAI()
--Cpu_EnableAll(true)
Cpu_Enable(g_Player3, false)
Cpu_Enable(g_Player2, false)
Cpu_Enable(g_Player4, false)
Cpu_Enable(g_Player5, false)
end
--[[ START PLAY ]]
--[[ NOW TO KICK OFF THE ACTUAL MISSION ONCE THE OPENING NIS IS DONE ]]
function Rule_GameStart()
if g_firstrun then
--[[ DEFINE VARIABLES AND TABLES - define any preset values here for later use]]
g_Difficulty = MetaMap_GetTerritoryMilitaryStrength(MetaMap_GetDefendingTerritoryIndex())
g_SmallSquadSize = g_SmallSquadMin + math.floor ((g_Difficulty - g_DBase) * ((g_SmallSquadMax - g_SmallSquadMin) / (g_DMax - g_DBase)))
g_MediumSquadSize = g_MediumSquadMin + math.floor ((g_Difficulty - g_DBase) * ((g_MediumSquadMax - g_MediumSquadMin) / (g_DMax - g_DBase)))
g_LargeSquadSize = g_LargeSquadMin + math.floor ((g_Difficulty - g_DBase) * ((g_LargeSquadMax - g_LargeSquadMin) / (g_DMax - g_DBase)))
g_MaxPrisms = 6 + math.floor ((g_Difficulty - g_DBase) * ((10 - 6) / (g_DMax - g_DBase)))
g_SpiderRecovery = 400 + math.floor ((g_Difficulty - g_DBase) * ((200 - 400) / (g_DMax - g_DBase)))
-- Allow Eldar to port buildings to and fro Player_GrantResearch(g_Player2, "eldar_webway_gate_relocation_research")
--Forward Base is invulnerable
EGroup_SetHealthInvulnerable("eg_ForwardBaseBuildings", true)
--[[ set resources ]]
--Player_SetAllResources(g_Player1, 1000, 500, 14)
--[[ PREACTION ]]
Entity_CreateBuildingMarker(g_Player2,"eg_EldarF_Support03", "eldar_support_portal","mkr_EldarF_Support03", 1)
--[[ DIFFICULTY LEVEL - gets the difficulty level from the UI and passes it into the function]]
--Rule_SetDifficultyLevel( Difficulty_Get() )
--[[ Get the AI doing whatever after the NIS is over ]]
Rule_StartAI()
-- Rule_AddOneShot(Rule_Setup_AI, 200)
-- Opening Intel (culled) -- Rule_AddOneShot(Rule_Intro1, 2)
-- Primary Objective Rule_AddIntervalDelay(Rule_Objective_Locate_Farseer, 5, 10) --must be added before the secondary objectives
-- Secondary Objective Rule_AddOneShot(Rule_Ork_Attack, 140)
-- Critical pts belong to Eldar EGroup_SetPlayerOwner("eg_CriticalPoint01", g_Player2) EGroup_SetPlayerOwner("eg_CriticalPoint02", g_Player2) EGroup_SetPlayerOwner("eg_CriticalPoint03", g_Player2)
-- Turret ambush in east corner Rule_AddInterval(Rule_TurretAmbush1, 5) Rule_AddInterval(Rule_TurretAmbush2, 5) Rule_AddInterval(Rule_TurretAmbush3, 5) Rule_AddInterval(Rule_TurretAmbush4, 5) Rule_AddInterval(Rule_TurretAmbush5, 5) Rule_AddInterval(Rule_TurretAmbush6, 5)
-- Skimmer attacks Util_CreateSquadsAtMarkerEx(g_Player2, "sg_Skimmers01", "eldar_squad_vypers", "mkr_SpawnSkimmers01", 1, 1) Cpu_LockSGroupAcrossPlayers("sg_Skimmers01")
local n_SkimmerInterval = 120 + math.floor ((g_Difficulty - g_DBase) * ((75 - 120) / (g_DMax - g_DBase)))
Rule_AddIntervalDelay(Rule_SpawnSkimmers, n_SkimmerInterval, 120)
-- Initial attack local n_InitialAttackDelay = 220 + math.floor ((g_Difficulty - g_DBase) * ((120 - 220) / (g_DMax - g_DBase))) Rule_AddOneShot(Rule_InitialAttack, n_InitialAttackDelay) Util_CreateSquadsAtMarkerEx(g_Player2, "sg_Skimmers02", "eldar_guardian_squad", "mkr_SpawnSkimmers01", 1, g_MediumSquadSize) Cpu_LockSGroupAcrossPlayers("sg_Skimmers02") Cmd_AttackMoveMarker( "sg_Skimmers02", "mkr_RaiderTarget01" )
-- Shock Troops, meant to raze player w/ no defenders Util_CreateSquadsAtMarkerEx(g_Player2, "sg_ShockTroops1", "eldar_squad_dark_reapers", "mkr_ShockSpawn1", 1, g_SmallSquadSize) Util_CreateSquadsAtMarkerEx(g_Player2, "sg_ShockTroops2", "eldar_squad_banshees", "mkr_ShockSpawn2", 1, g_MediumSquadSize) Util_CreateSquadsAtMarkerEx(g_Player2, "sg_ShockTroops3", "eldar_squad_fire_dragon", "mkr_ShockSpawn3", 1, g_SmallSquadSize) SGroup_AddLeaders("sg_ShockTroops3")
if (g_Difficulty - g_DBase) > 1 then
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_ShockSpiders1", "eldar_squad_warp_spider_stronghold_sp", "mkr_WarpSpiderRally01", 1, g_MediumSquadSize)
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_ShockSpiders2", "eldar_squad_warp_spider_stronghold_sp", "mkr_WarpSpiderRally01", 1, g_MediumSquadSize)
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_ShockSpiders3", "eldar_squad_warp_spider_stronghold_sp", "mkr_WarpSpiderRally01", 1, g_LargeSquadSize)
if (g_Difficulty - g_DBase) > 3 then
SGroup_AddLeaders("sg_ShockSpiders1")
SGroup_AddLeaders("sg_ShockSpiders2")
SGroup_AddLeaders("sg_ShockSpiders3")
end
end
for i = 1, 3 do
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_ShockTank"..i, "eldar_squad_falcon_grav_tank", "mkr_ShockSpawn"..i, 1, 1)
Cpu_LockSGroupAcrossPlayers("sg_ShockTank"..i)
Cpu_LockSGroupAcrossPlayers("sg_ShockTroops"..i)
end
if g_Difficulty > (g_DBase + 1) then
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_ShockTank4", "eldar_squad_vypers", "mkr_ShockSpawn4", 1, 1)
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_ShockTank5", "eldar_squad_vypers", "mkr_ShockSpawn5", 1, 1)
end
if g_Difficulty > (g_DBase +3) then
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_ShockTank4", "eldar_squad_warp_spider_stronghold_sp", "mkr_ShockSpawn4", 1, g_LargeSquadSize)
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_ShockTank5", "eldar_squad_fire_prism", "mkr_ShockSpawn5", 1, 1)
end
Rule_AddOneShot(Rule_LoadShockTroops, 5)
-- Wraithlords guarding the ramp for i = 1, 3 do Util_CreateSquadsAtMarkerEx(g_Player2, "sg_WraithlordGuard"..i, "eldar_squad_wraithlord", "mkr_SpawnSupport0"..i, 1, 1) Cpu_LockSGroupAcrossPlayers("sg_WraithlordGuard"..i) Cmd_AttackMoveMarker( "sg_WraithlordGuard"..i, "mkr_WraithlordGuard0"..i ) end local n_WraithlordInterval = 400 + math.floor ((g_Difficulty - g_DBase) * ((200 - 400) / (g_DMax - g_DBase))) Rule_AddInterval(Rule_SpawnWraithlordGuards, n_WraithlordInterval)
-- Avatar parked on the bridge --Util_CreateSquadsAtMarkerEx(g_Player2, "sg_Avatar", "eldar_squad_avatar", "mkr_SpawnAvatar01", 1, 1) --Cpu_LockSGroupAcrossPlayers("sg_Avatar") --Cmd_SetStance("sg_Avatar", STANCE_Hold) Rule_AddOneShot(Rule_SpawnAvatarGuard, 120)
-- Eldar patrol Util_CreateSquadsAtMarkerEx(g_Player2, "sg_EldarPatrol1", "eldar_squad_dark_reapers", "mkr_EldarPatrol1", 2, g_SmallSquadSize) Util_CreateSquadsAtMarkerEx(g_Player2, "sg_EldarPatrol1", "eldar_squad_banshees", "mkr_EldarPatrol1", 1, g_MediumSquadSize) Cpu_LockSGroupAcrossPlayers("sg_EldarPatrol1") if g_Difficulty > (g_DBase + 2) then SGroup_AddLeaders("sg_EldarPatrol1") end Cmd_AttackMoveMarker( "sg_EldarPatrol1", "mkr_EldarPatrol2" ) Rule_AddInterval(Rule_EldarPatrol, 15)
-- Squiggoths
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_Squiggoths", "ork_squad_squiggoth", "mkr_Squiggoth1", 1, 1)
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_Squiggoths", "ork_squad_squiggoth", "mkr_Squiggoth2", 1, 1)
Cpu_LockSGroupAcrossPlayers("sg_Squiggoths")
Cmd_SetStance("sg_Squiggoths", STANCE_CeaseFire)
Rule_AddInterval(Rule_GateCheck, 2)
-- Parked Ork Tanks
for i = 1, 4 do
if g_Difficulty > (g_DBase + 2) then
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkTank"..i, "ork_squad_looted_tank", "mkr_OrkTank"..i, 1, 1)
else
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkTank"..i, "ork_squad_wartrak", "mkr_OrkTank"..i, 1, 1)
end
Cpu_LockSGroupAcrossPlayers("sg_OrkTank"..i)
Cmd_SetStance("sg_OrkTank"..i, STANCE_Hold)
end
-- Patrolling Gitz
for i = 1, 3 do
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkGitz"..i, "ork_flash_gitz_squad", "mkr_OrkGitz"..i, 1, g_SmallSquadSize)
Cpu_LockSGroupAcrossPlayers("sg_OrkGitz"..i)
Cmd_SetStance("sg_OrkGitz"..i, STANCE_Hold)
end
Rule_AddInterval(Rule_MoveGitz, 10)
local n_GitzInterval = 240 + math.floor ((g_Difficulty - g_DBase) * ((60 - 240) / (g_DMax - g_DBase)))
Rule_AddInterval(Rule_ReinforceGitz, n_GitzInterval)
-- Patrolling Meganobs
for i = 1, 2 do
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkMeganobs"..i, "ork_squad_armored_nob", "mkr_OrkMeganobs"..i, 1, g_SmallSquadSize)
Cpu_LockSGroupAcrossPlayers("sg_OrkMeganobs"..i)
Cmd_SetStance("sg_OrkMeganobs"..i, STANCE_Hold)
end
Rule_AddInterval(Rule_MoveMeganobs, 15)
local n_MeganobsInterval = 250 + math.floor ((g_Difficulty - g_DBase) * ((80 - 250) / (g_DMax - g_DBase)))
Rule_AddInterval(Rule_ReinforceMeganobs, n_MeganobsInterval)
-- Patrolling Kans
for i = 1, 2 do
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkKan"..i, "ork_squad_killa_kan", "mkr_OrkKan"..i, 1, 1)
Cpu_LockSGroupAcrossPlayers("sg_OrkKan"..i)
Cmd_SetStance("sg_OrkKan"..i, STANCE_Hold)
end
Rule_AddInterval(Rule_MoveKans, 15)
local n_KansInterval = 300 + math.floor ((g_Difficulty - g_DBase) * ((100 - 300) / (g_DMax - g_DBase)))
Rule_AddInterval(Rule_ReinforceKans, n_KansInterval)
-- Patrolling Guardians
for i = 1, 7 do
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_EldarGuardians"..i, "eldar_guardian_squad", "mkr_EldarGuardians"..i, 1, g_MediumSquadSize)
if g_Difficulty > (g_DBase + 2) then
SGroup_AddLeaders("sg_EldarGuardians"..i)
end
Cpu_LockSGroupAcrossPlayers("sg_EldarGuardians"..i)
Cmd_SetStance("sg_EldarGuardians"..i, STANCE_Hold)
end
Rule_AddInterval(Rule_MoveGuardians, 8)
local n_GuardianInterval = 240 + math.floor ((g_Difficulty - g_DBase) * ((60 - 240) / (g_DMax - g_DBase)))
Rule_AddInterval(Rule_ReinforceGuardians, n_GuardianInterval)
-- Eldar Prisms
for i = 1, g_MaxPrisms do
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_FinalPrism"..i, "eldar_squad_fire_prism", "mkr_Prism"..i, 1, 1)
Cpu_LockSGroupAcrossPlayers("sg_FinalPrism"..i)
end
-- No Farseer other than Taldeer!
Player_RestrictSquad(g_Player2, "eldar_squad_farseer")
local n_PrismInterval = 240 + math.floor ((g_Difficulty - g_DBase) * ((45 - 240) / (g_DMax - g_DBase)))
Rule_AddInterval(Rule_ReinforcePrisms, n_PrismInterval)
-- Retaking captured crit points
for i = 1, 3 do
--This will be the initial attack on the captured crit points
if g_Difficulty > (g_DBase + 4) then
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_Prism"..i, "eldar_squad_fire_prism", "mkr_SpawnSupport0"..i, 1, 1)
else
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_Prism"..i, "eldar_squad_falcon_grav_tank", "mkr_SpawnSupport0"..i, 1, 1)
end
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_Banshees"..i, "eldar_squad_banshees", "mkr_SpawnAspect"..i, 1, g_MediumSquadSize)
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_Dragons"..i, "eldar_squad_fire_dragon", "mkr_SpawnAspect"..(i + 3), 1, g_SmallSquadSize)
if g_Difficulty > (g_DBase + 2) then
SGroup_AddLeaders("sg_Banshees"..i)
SGroup_AddLeaders("sg_Dragons"..i)
end
Cpu_LockSGroupAcrossPlayers("sg_Prism"..i)
Cmd_SetStance("sg_Prism"..i, STANCE_Hold)
Cpu_LockSGroupAcrossPlayers("sg_Banshees"..i)
Cmd_SetStance("sg_Banshees"..i, STANCE_Hold)
Cpu_LockSGroupAcrossPlayers("sg_Dragons"..i)
Cmd_SetStance("sg_Dragons"..i, STANCE_Hold)
end
local n_RecapInterval = 110 + math.floor ((g_Difficulty - g_DBase) * ((75 - 110) / (g_DMax - g_DBase)))
Rule_AddInterval(Rule_MonitorCriticalPoints, n_RecapInterval)
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_RecapSquad", "eldar_squad_seer_council", "mkr_CreateAvatar", 1, g_MediumSquadSize)
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_RecapSquad", "eldar_squad_banshees", "mkr_CreateAvatar", 1, g_MediumSquadSize)
if g_Difficulty > (g_DBase + 2) then
SGroup_AddLeaders("sg_RecapSquad")
end
--Util_CreateSquadsAtMarkerEx(g_Player2, "sg_RecapSquad", "eldar_squad_wraithlord", "mkr_SpawnSupport03", 1, 1)
Cpu_LockSGroupAcrossPlayers("sg_RecapSquad")
Cmd_SetStance("sg_RecapSquad", STANCE_Hold)
Rule_AddInterval(Rule_StartRecapturing, 30)
Rule_AddOneShot(Rule_UpgradeTurrets, 5)
--[[Set up timer]]
--Rule_AddOneShot(Rule_Add_Timer, 1) --this will need to be put after the Nis
Rule_AddOneShot(Rule_Create_Player_Buildings, 0)
--[[ Set up a Win Check ]]
Rule_AddInterval(Rule_EndGame_Win, 10)
--[[ Set up a Lose Check ]]
Rule_AddInterval(Rule_EndGameLose, 10)
--replenish bonus units if player has earned them, frequently if difficulty is lower
local n_BonusInterval = 60 + math.floor ((g_Difficulty - g_DBase) * ((180 - 60) / (g_DMax - g_DBase)))
Rule_AddInterval(Rule_MoreReinforcements, n_BonusInterval)
--[[ Clean up ]]
Rule_Remove(Rule_GameStart)
end
end
function Rule_LoadShockTroops() for i = 1, 3 do Cmd_EnterTransport("sg_ShockTroops"..i, "sg_ShockTank"..i) end
local n_ShockDelay = 60 + math.floor ((g_Difficulty - g_DBase) * ((20 - 60) / (g_DMax - g_DBase)))
Rule_AddOneShot(Rule_ShockWave1, n_ShockDelay)
end
function Rule_ShockWave1() if SGroup_Exists("sg_ShockTank1") and (SGroup_IsEmpty("sg_ShockTank1") == false) then Cmd_JumpToMarker("sg_ShockTank1", "mkr_ShockTarget1") end
if SGroup_Exists("sg_ShockSpiders1") and (SGroup_IsEmpty("sg_ShockSpiders1") == false) then
Cmd_JumpToMarker("sg_ShockSpiders1", "mkr_ShockTarget1")
end
Rule_AddOneShot(Rule_DeployShockWave1, 6)
local n_ShockDelay = 90 + math.floor ((g_Difficulty - g_DBase) * ((20 - 70) / (g_DMax - g_DBase)))
Rule_AddOneShot(Rule_ShockWave2, n_ShockDelay)
end
function Rule_DeployShockWave1() Cmd_EmptyTransport("sg_ShockTank1", Marker_GetPosition(Marker_FromName("mkr_ShockTarget1", "basic_marker")))
Rule_AddOneShot(Rule_ShockAdvance1, 1)
end
function Rule_ShockWave2()
if SGroup_Exists("sg_ShockTank2") and (SGroup_IsEmpty("sg_ShockTank2") == false) then
Cmd_JumpToMarker("sg_ShockTank2", "mkr_ShockTarget2")
end
if SGroup_Exists("sg_ShockTank5") and (SGroup_IsEmpty("sg_ShockTank5") == false) then
Cmd_JumpToMarker("sg_ShockTank5", "mkr_ShockTarget3")
end
if SGroup_Exists("sg_ShockSpiders2") and (SGroup_IsEmpty("sg_ShockSpiders2") == false) then
Cmd_JumpToMarker("sg_ShockSpiders2", "mkr_ShockTarget2")
end
Rule_AddOneShot(Rule_DeployShockWave2, 6)
local n_ShockDelay = 90 + math.floor ((g_Difficulty - g_DBase) * ((20 - 70) / (g_DMax - g_DBase)))
Rule_AddOneShot(Rule_ShockWave3, n_ShockDelay)
end
function Rule_DeployShockWave2() Cmd_EmptyTransport("sg_ShockTank2", Marker_GetPosition(Marker_FromName("mkr_ShockTarget2", "basic_marker")))
Rule_AddOneShot(Rule_ShockAdvance2, 1)
end
function Rule_ShockWave3() if SGroup_Exists("sg_ShockTank3") and (SGroup_IsEmpty("sg_ShockTank3") == false) then Cmd_JumpToMarker("sg_ShockTank3", "mkr_ShockTarget3") end
if SGroup_Exists("sg_ShockTank4") and (SGroup_IsEmpty("sg_ShockTank4") == false) then
Cmd_JumpToMarker("sg_ShockTank4", "mkr_ShockTarget4")
end
if SGroup_Exists("sg_ShockSpiders3") and (SGroup_IsEmpty("sg_ShockSpiders3") == false) then
Cmd_JumpToMarker("sg_ShockSpiders3", "mkr_ShockTarget3")
end
Rule_AddOneShot(Rule_DeployShockWave3, 6)
end
function Rule_DeployShockWave3()
if SGroup_Exists("sg_ShockTank3") and (SGroup_IsEmpty("sg_ShockTank3") == false) then
Cmd_EmptyTransport("sg_ShockTank3", Marker_GetPosition(Marker_FromName("mkr_ShockTarget3", "basic_marker")))
end
--Rule_AddOneShot(Rule_ShockAdvance, 5)
Rule_AddOneShot(Rule_ShockAdvance3, 1)
end
function Rule_ShockAdvance1() if SGroup_Exists("sg_ShockTroops1") and (SGroup_IsEmpty("sg_ShockTroops1") == false) then Cmd_AttackMoveMarker("sg_ShockTroops1", "mkr_Player_HQ") end
if SGroup_Exists("sg_ShockTank1") and (SGroup_IsEmpty("sg_ShockTank1") == false) then
Cmd_AttackMoveMarker("sg_ShockTank1", "mkr_Player_HQ")
end
if SGroup_Exists("sg_ShockSpiders1") and (SGroup_IsEmpty("sg_ShockSpiders1") == false) then
Cmd_AttackMoveMarker("sg_ShockSpiders1", "mkr_Player_HQ")
end
end
function Rule_ShockAdvance2() if SGroup_Exists("sg_ShockTroops2") and (SGroup_IsEmpty("sg_ShockTroops2") == false) then Cmd_AttackMoveMarker("sg_ShockTroops2", "mkr_Player_HQ") end
if SGroup_Exists("sg_ShockTank2") and (SGroup_IsEmpty("sg_ShockTank2") == false) then
Cmd_AttackMoveMarker("sg_ShockTank2", "mkr_Player_HQ")
end
if SGroup_Exists("sg_ShockTank5") and (SGroup_IsEmpty("sg_ShockTank5") == false) then
Cmd_AttackMoveMarker("sg_ShockTank5", "mkr_Player_HQ")
end
if SGroup_Exists("sg_ShockSpiders2") and (SGroup_IsEmpty("sg_ShockSpiders2") == false) then
Cmd_AttackMoveMarker("sg_ShockSpiders2", "mkr_Player_HQ")
end
end
function Rule_ShockAdvance3() if SGroup_Exists("sg_ShockTroops3") and (SGroup_IsEmpty("sg_ShockTroops3") == false) then Cmd_AttackMoveMarker("sg_ShockTroops3", "mkr_Player_HQ") end if SGroup_Exists("sg_ShockTank4") and (SGroup_IsEmpty("sg_ShockTank4") == false) then Cmd_AttackMoveMarker("sg_ShockTank4", "mkr_Player_HQ") end if SGroup_Exists("sg_ShockTank3") and (SGroup_IsEmpty("sg_ShockTank3") == false) then Cmd_AttackMoveMarker("sg_ShockTank3", "mkr_Player_HQ") end if SGroup_Exists("sg_ShockSpiders3") and (SGroup_IsEmpty("sg_ShockSpiders3") == false) then Cmd_AttackMoveMarker("sg_ShockSpiders3", "mkr_Player_HQ") end end
function Rule_MoveKans() for i = 1, 2 do if SGroup_Exists("sg_OrkKan"..i) and (SGroup_IsEmpty("sg_OrkKan"..i) == false) then Util_AttackMoveMarkerRandomRadius("sg_OrkKan"..i, "mkr_OrkKan"..i) end end end
function Rule_MoveMeganobs() for i = 1, 2 do if SGroup_Exists("sg_OrkMeganobs"..i) and (SGroup_IsEmpty("sg_OrkMeganobs"..i) == false) then Util_AttackMoveMarkerRandomRadius("sg_OrkMeganobs"..i, "mkr_OrkMeganobs"..i) end end end
function Rule_MoveGitz() for i = 1, 3 do if SGroup_Exists("sg_OrkGitz"..i) and (SGroup_IsEmpty("sg_OrkGitz"..i) == false) then Util_AttackMoveMarkerRandomRadius("sg_OrkGitz"..i, "mkr_OrkGitz"..i) end end end
function Rule_MoveGuardians() for i = 1, 7 do if SGroup_Exists("sg_EldarGuardians"..i) and (SGroup_IsEmpty("sg_EldarGuardians"..i) == false) then Util_AttackMoveMarkerRandomRadius("sg_EldarGuardians"..i, "mkr_EldarGuardians"..i) end end end
function Rule_ReinforceKans() for i = 1, 2 do if SGroup_IsEmpty("sg_OrkKan"..i) then if not EGroup_IsEmpty("eg_KanShop") then Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkKan"..i, "ork_squad_killa_kan", "mkr_SpawnOrkKan", 1, 1) Cpu_LockSGroupAcrossPlayers("sg_OrkKan"..i) Cmd_SetStance("sg_OrkKan"..i, STANCE_Hold) break end end end end
function Rule_ReinforceMeganobs() for i = 1, 2 do if SGroup_IsEmpty("sg_OrkMeganobs"..i) then if not EGroup_IsEmpty("eg_MeganobsHut") then Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkMeganobs"..i, "ork_squad_armored_nob", "mkr_SpawnOrkMeganobs", 1, g_SmallSquadSize) Cpu_LockSGroupAcrossPlayers("sg_OrkMeganobs"..i) Cmd_SetStance("sg_OrkMeganobs"..i, STANCE_Hold) break end end end end
function Rule_ReinforceGitz() for i = 1, 3 do if SGroup_IsEmpty("sg_OrkGitz"..i) then if not EGroup_IsEmpty("eg_GitzHut") then Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkGitz"..i, "ork_flash_gitz_squad", "mkr_SpawnOrkGitz", 1, g_SmallSquadSize) Cpu_LockSGroupAcrossPlayers("sg_OrkGitz"..i) Cmd_SetStance("sg_OrkGitz"..i, STANCE_Hold) break end end end end
function Rule_ReinforceGuardians() local reinforced = false for i = 1, 7 do if SGroup_IsEmpty("sg_EldarGuardians"..i) then for j = 1, 3 do if not EGroup_IsEmpty("eg_GuardianPortal"..j) then Util_CreateSquadsAtMarkerEx(g_Player2, "sg_EldarGuardians"..i, "eldar_guardian_squad", "mkr_SpawnEldarGuardians"..j, 1, g_MediumSquadSize) SGroup_AddLeaders("sg_EldarGuardians"..i) Cpu_LockSGroupAcrossPlayers("sg_EldarGuardians"..i) Cmd_SetStance("sg_EldarGuardians"..i, STANCE_Hold) reinforced = true break end end if reinforced then break end end end end
function Rule_StartRecapturing() -- If both sub-objectives are complete, send an Eldar squad to retake points. if g_OrkDead and g_ChaosDead then if SGroup_IsEmpty("sg_RecapSquad") then if not EGroup_IsEmpty("eg_EldarAspectCluster") then Util_CreateSquadsAtMarkerEx(g_Player2, "sg_RecapSquad", "eldar_squad_seer_council", "mkr_CreateAvatar", 1, g_MediumSquadSize) Util_CreateSquadsAtMarkerEx(g_Player2, "sg_RecapSquad", "eldar_squad_banshees", "mkr_CreateAvatar", 1, g_MediumSquadSize) if g_Difficulty > (g_DBase + 2) then SGroup_AddLeaders("sg_RecapSquad") end end for i = 1, 3 do if not EGroup_IsEmpty("eg_EldarF_Support0"..i) then Util_CreateSquadsAtMarkerEx(g_Player2, "sg_RecapSquad", "eldar_squad_wraithlord", "mkr_SpawnSupport0"..i, 1, 1) break end end end
Cpu_LockSGroupAcrossPlayers("sg_RecapSquad")
Cmd_SetStance("sg_RecapSquad", STANCE_Hold)
for i = 1, 6 do
if not EGroup_IsCapturedByPlayer("eg_CritPoint"..i, g_Player2, true) then
if not Prox_SquadsInProximityOfEntities("sg_RecapSquad", "eg_CritPoint"..i, 15, false) then
Cmd_AttackMovePos("sg_RecapSquad", EGroup_GetPosition("eg_CritPoint"..i))
break
else
Cmd_Capture("sg_RecapSquad", "eg_CritPoint"..i)
break
end
end
end
end
end
function Rule_GateCheck() if Player_AreSquadsNearMarker(g_Player1, "mkr_PenGate") then Anim_PlayEGroupAnim( "eg_PenGate", "die" ) Rule_AddOneShot(Rule_SquiggothRampage, 4)
Util_ObjectiveComplete(Objective_Free_Squiggoths.title_id)
Rule_Remove(Rule_GateCheck)
end
end
function Rule_SquiggothRampage() SGroup_SetPlayerOwner("sg_Squiggoths", g_Player5) Cmd_SetStance("sg_Squiggoths", STANCE_Burn)
Cmd_MoveToMarker("sg_Squiggoths", "mkr_Ork_Barracks_Spawn2")
end
function Rule_SquiggothEscape() if Prox_AllSquadsNearMarker("sg_Squiggoths", "mkr_Ork_Barracks_Spawn2") then Cmd_SetStance("sg_Squiggoths", STANCE_CeaseFire)
Cmd_MoveToMarker("sg_Squiggoths", "mkr_SquiggothDespawn")
Rule_AddInterval(Rule_SquiggothDespawn, 5)
Rule_Remove(Rule_SquiggothEscape)
end
end
function Rule_SquiggothDespawn() if Prox_AllSquadsNearMarker("sg_Squiggoths", "mkr_SquiggothDespawn") then SGroup_DeSpawn("sg_Squiggoths")
Rule_Remove(Rule_SquiggothDespawn)
end
end
function Rule_UpgradeTurrets() -- Upgrade final base missile turrets for i = 1, 4 do EGroup_ForceAddOn("eg_EldarF_MissileTurret0"..i, "eldar_support_platform_addon") end
for i = 1, 15 do
EGroup_ForceAddOn("eg_OrkTower"..i, "ork_waagh_banner_gunzaddon")
end
EGroup_ForceAddOn("eg_AmbushTurret5", "eldar_support_platform_addon")
EGroup_ForceAddOn("eg_AmbushTurret10", "eldar_support_platform_addon")
EGroup_ForceAddOn("eg_AmbushTurret14", "eldar_support_platform_addon")
EGroup_ForceAddOn("eg_AmbushTurret17", "eldar_support_platform_addon")
EGroup_ForceAddOn("eg_AmbushTurret19", "eldar_support_platform_addon")
EGroup_ForceAddOn("eg_AmbushTurret24", "eldar_support_platform_addon")
EGroup_ForceAddOn("eg_AmbushTurret25", "eldar_support_platform_addon")
end
function Rule_ReinforcePrisms() -- Replenish Fire Prisms guarding final Eldar base supports = 1
for i = 1, g_MaxPrisms do
if SGroup_IsEmpty("sg_FinalPrism"..i) then
for j = supports, 3 do
if not EGroup_IsEmpty("eg_EldarF_Support0"..j) then
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_FinalPrism"..i, "eldar_squad_fire_prism", "mkr_SpawnSupport0"..j, 1, 1)
Cpu_LockSGroupAcrossPlayers("sg_FinalPrism"..i)
Cmd_AttackMoveMarker("sg_FinalPrism"..i, "mkr_Prism"..i)
supports = supports + 1
break
end
end
if supports > 3 then
break
end
end
end
end
function Rule_StartAI()
--Cpu_EnableAll(true)
Cpu_Enable(g_Player3, false)
Cpu_Enable(g_Player2, false)
Cpu_Enable(g_Player4, false)
Cpu_Enable(g_Player5, false)
end
--[[AI Restrictions]]
function Rule_Setup_AI()
Cpu_Enable(g_Player3, false)
Cpu_Enable(g_Player2, false)
Cpu_Enable(g_Player4, false)
Cpu_Enable(g_Player5, false)
-- Cpu_EnableComponent(g_Player3, true, CT_Resourcing) -- Cpu_EnableComponent(g_Player3, false, CT_BuildBuildings) -- Cpu_EnableComponent(g_Player3, true, CT_BuildUnits) -- Cpu_EnableComponent(g_Player3, true, CT_BuildResearch) -- Cpu_EnableComponent(g_Player3, false, CT_BuildAddOns) -- Cpu_EnableComponent(g_Player3, true, CT_Tactics)
Cpu_SetDifficulty(g_Player3, AD_Standard)
Rule_AddInterval(Rule_AI_Moral, 5)
Rule_AddOneShot(Rule_Increase_AI, 600)
end
function Rule_Increase_AI()
-- Cpu_SetDifficulty(g_Player3, AD_Standard)
Rule_AddOneShot(Rule_Increase_AI2, 1000)
end
function Rule_Increase_AI2()
Rule_AddOneShot(Rule_Increase_AI3,1000)
end
function Rule_Increase_AI3()
Rule_AddOneShot(Rule_Increase_AI4, 1000)
end
function Rule_Increase_AI4()
Cpu_SetDifficulty(g_Player3, AD_Hard)
end
--[[ TRACK PERSISTENT CHARACTERS ]]
-- this section keeps track of the characters, and controls losing when they die. function Rule_TrackCharacters()
end
--[[ CORE GAME ]]
--[[Spawning andUpgrading Things on the map]]
--[[Player buildings and builder units ]]
function Rule_Create_Player_Buildings()
t_Player_Buildings ={
chaos_name = {"eg_Player_HQ"},
chaos_building_blueprint = {"chaos_hq"},
chaos_marker_spawn = {"mkr_Player_HQ"},
eldar_name = {"eg_Player_HQ"},
eldar_building_blueprint = {"eldar_hq"},
eldar_marker_spawn ={"mkr_Player_HQ"},
guard_name = {"eg_Player_HQ"},
guard_building_blueprint = {"guard_hq"},
guard_marker_spawn ={"mkr_Player_HQ"},
ork_name = {"eg_Player_HQ"},
ork_building_blueprint = {"ork_hq"},
ork_marker_spawn ={"mkr_Player_HQ"},
marines_name = {"eg_Player_HQ"},
marines_building_blueprint = {"space_marine_hq"},
marines_marker_spawn ={"mkr_Player_HQ"},
tau_name = {"eg_Player_HQ"},
tau_building_blueprint = {"tau_hq"},
tau_marker_spawn= {"mkr_Player_HQ"},
necron_name ={"eg_Player_HQ"},
necron_building_blueprint = {"monolith"},
necron_marker_spawn = {"mkr_Player_HQ"},
}
t_Player_Builder_Units = {
chaos_buildername = {"sg_Player_Builder"},
chaos_builder_blueprint = {"chaos_squad_slave"},
chaos_buildermarker_spawn = {"mkr_Player_Builder"},
eldar_buildername = {"sg_Player_Builder"},
eldar_builder_blueprint = {"eldar_squad_bonesinger"},
eldar_buildermarker_spawn ={"mkr_Player_Builder"},
guard_buildername = {"sg_Player_Builder"},
guard_builder_blueprint = {"guard_squad_enginseer"},
guard_buildermarker_spawn ={"mkr_Player_Builder"},
ork_buildername = {"sg_Player_Builder"},
ork_builder_blueprint = {"ork_squad_grot"},
ork_buildermarker_spawn ={"mkr_Player_Builder"},
marines_buildername = {"sg_Player_Builder"},
marines_builder_blueprint = {"space_marine_squad_servitor"},
marines_buildermarker_spawn ={"mkr_Player_Builder"},
tau_buildername = {"sg_Player_Builder"},
tau_builder_blueprint = {"tau_builder_squad"},
tau_buildermarker_spawn= {"mkr_Player_Builder"},
necron_buildername ={"sg_Player_Builder"},
necron_builder_blueprint = {"necron_builder_scarab_squad"},
necron_buildermarker_spawn = {"mkr_Player_Builder"},
}
--setting up the upgrades for the commander
MetaMap_UpdatePlayerWargear(g_Player1)
--setting up the bonus units for the player
t_blueprintbonus = {}
MetaMap_GetRaceStartingSquadsList(MetaMap_GetPlayerRaceName(), t_blueprintbonus)
for j = 1, table.getn(t_blueprintbonus) do
k = math.mod(j - 1, 6) + 1
Util_CreateSquadsAtMarker(g_Player1, "sg_Bonus"..j, t_blueprintbonus[j], "mkr_Bonus"..k, 1)
end
if MetaMap_GetPlayerRaceName() == "chaos_marine_race" then
for i = 1, table.getn(t_Player_Buildings.chaos_name) do
Entity_CreateBuildingMarker(g_Player1, t_Player_Buildings.chaos_name[i], t_Player_Buildings.chaos_building_blueprint[i], t_Player_Buildings.chaos_marker_spawn[i], 1)
Util_CreateSquadsAtMarkerEx(g_Player1, t_Player_Builder_Units.chaos_buildername[i], t_Player_Builder_Units.chaos_builder_blueprint[i], t_Player_Builder_Units.chaos_buildermarker_spawn[i], 1, 1)
--i'm saving the hq blueprint in order to use it later
g_HQ_Type = "chaos_hq"
g_Leader_Type = "chaos_squad_lord"
g_Turret_Type = "chaos_turret_bolter"
g_TankType = "chaos_squad_predator_advance_sp"
g_EastUnitType = "chaos_squad_possessed_marine_advance_sp"
g_WestUnitType = "chaos_squad_obliterator_advance_sp"
--win/loss
t_building_exceptions = {
"chaos_thermo_plasma_generator",
"chaos_plasma_generator",
"chaos_turret_bolter",
"chaos_mine_field"}
t_unit_exceptions = {}
end
elseif MetaMap_GetPlayerRaceName() == "guard_race" then
for i = 1, table.getn(t_Player_Buildings.guard_name) do
Entity_CreateBuildingMarker(g_Player1, t_Player_Buildings.guard_name[i], t_Player_Buildings.guard_building_blueprint[i], t_Player_Buildings.guard_marker_spawn[i], 1)
Util_CreateSquadsAtMarkerEx(g_Player1, t_Player_Builder_Units.guard_buildername[i], t_Player_Builder_Units.guard_builder_blueprint[i], t_Player_Builder_Units.guard_buildermarker_spawn[i], 1, 1)
--i'm saving the hq blueprint in order to use it later
g_HQ_Type = "guard_hq"
g_Leader_Type = "guard_squad_command_squad"
g_Turret_Type = "guard_turret_heavy_bolter"
g_TankType = "guard_squad_lemanruss_advance_sp"
g_EastUnitType = "guard_squad_kasrkin_advance_sp"
g_WestUnitType = "guard_squad_ogryns_advance_sp"
--win/loss
t_building_exceptions = {
"guard_thermo_plasma",
"guard_plasma_generator",
"guard_turret_heavy_bolter",
"guard_mines"}
t_unit_exceptions = {}
end
elseif MetaMap_GetPlayerRaceName() == "ork_race" then
for i = 1, table.getn(t_Player_Buildings.ork_name) do
Entity_CreateBuildingMarker(g_Player1, t_Player_Buildings.ork_name[i], t_Player_Buildings.ork_building_blueprint[i], t_Player_Buildings.ork_marker_spawn[i], 1)
Util_CreateSquadsAtMarkerEx(g_Player1, t_Player_Builder_Units.ork_buildername[i], t_Player_Builder_Units.ork_builder_blueprint[i], t_Player_Builder_Units.ork_buildermarker_spawn[i], 1, 1)
--i'm saving the hq blueprint in order to use it later
g_HQ_Type = "ork_hq"
g_Leader_Type = "ork_squad_warboss"
g_Turret_Type = "ork_waagh_banner"
g_TankType = "ork_squad_looted_tank_advance_sp"
g_EastUnitType = "ork_squad_nob_advance_sp"
g_WestUnitType = "ork_squad_tankbusta_advance_sp"
--win/loss
t_building_exceptions = {
"ork_bigger_generator",
"ork_generator",
"ork_waagh_banner",
"ork_mine_field"}
t_unit_exceptions = {}
end
elseif MetaMap_GetPlayerRaceName() == "space_marine_race" then
for i = 1, table.getn(t_Player_Buildings.marines_name) do
Entity_CreateBuildingMarker(g_Player1, t_Player_Buildings.marines_name[i], t_Player_Buildings.marines_building_blueprint[i], t_Player_Buildings.marines_marker_spawn[i], 1)
Util_CreateSquadsAtMarkerEx(g_Player1, t_Player_Builder_Units.marines_buildername[i], t_Player_Builder_Units.marines_builder_blueprint[i], t_Player_Builder_Units.marines_buildermarker_spawn[i], 1, 1)
--i'm saving the hq blueprint in order to use it later
g_HQ_Type = "space_marine_hq"
g_Leader_Type = "space_marine_squad_force_commander"
g_Turret_Type = "space_marine_turret_bolter"
g_TankType = "space_marine_squad_predator_advance_sp"
g_EastUnitType = "space_marine_squad_terminator_veteran_sp"
g_WestUnitType = "space_marine_squad_terminator_assault_veteran_sp"
--win/loss
t_building_exceptions = {
"space_marine_thermo_generator",
"space_marine_generator",
"space_marine_turret_bolter",
"space_marine_mine_field"}
t_unit_exceptions = {}
end
elseif MetaMap_GetPlayerRaceName() == "tau_race" then
for i = 1, table.getn(t_Player_Buildings.tau_name) do
Entity_CreateBuildingMarker(g_Player1, t_Player_Buildings.tau_name[i], t_Player_Buildings.tau_building_blueprint[i], t_Player_Buildings.tau_marker_spawn[i], 1)
Util_CreateSquadsAtMarkerEx(g_Player1, t_Player_Builder_Units.tau_buildername[i], t_Player_Builder_Units.tau_builder_blueprint[i], t_Player_Builder_Units.tau_buildermarker_spawn[i], 1, 1)
--i'm saving the hq blueprint in order to use it later
g_HQ_Type = "tau_hq"
g_Leader_Type = "tau_commander_squad"
g_Turret_Type = "space_marine_turret_bolter"
g_TankType = "tau_hammerhead_gunship_squad_advance_sp"
g_EastUnitType = "tau_vespid_elder_squad_advance_sp"
g_WestUnitType = "tau_kroot_hound_squad_advance_sp"
--win/loss
t_building_exceptions = {
"tau_thermoplasma_generator",
"tau_plasma_generator",}
t_unit_exceptions = {}
end
elseif MetaMap_GetPlayerRaceName() == "necron_race" then
for i = 1, table.getn(t_Player_Buildings.necron_name) do
Entity_CreateBuildingMarker(g_Player1, t_Player_Buildings.tau_name[i], t_Player_Buildings.necron_building_blueprint[i], t_Player_Buildings.necron_marker_spawn[i], 1)
Util_CreateSquadsAtMarkerEx(g_Player1, t_Player_Builder_Units.necron_buildername[i], t_Player_Builder_Units.necron_builder_blueprint[i], t_Player_Builder_Units.necron_buildermarker_spawn[i], 1, 1)
--i'm saving the hq blueprint in order to use it later
g_HQ_Type = "monolith"
g_Leader_Type = "necron_lord_squad"
g_Turret_Type = "necron_turret"
g_TankType = "necron_heavy_destroyer_squad_advance_sp"
g_EastUnitType = "necron_immortal_squad_advance_sp"
g_WestUnitType = "necron_pariah_squad_advance_sp"
--win/loss
t_building_exceptions = {
"necron_thermoplasma_generator",
"necron_plasma_generator",
"necron_turret",}
t_unit_exceptions = {}
end
end
--blueprint table with the relevant hq
t_blueprinthq = Util_MakeBlueprintTable(g_HQ_Type)
t_blueprintleader = Util_MakeBlueprintTable(g_Leader_Type)
t_blueprintturret = Util_MakeBlueprintTable(g_Turret_Type)
Rule_Remove(Rule_Create_Player_Buildings)
--[[Add bonus buildings]]
--establish variables to be used to incrementally create turrets and generators by concantenating the variables onto the markers as needed
-- generator markers start at 0
g_bonus_gen_counter = 0
-- turrer markers start at 6
g_bonus_turret_counter = 6
--determine race specific blueprints to be looked for when creating forward base
if MetaMap_GetPlayerRaceName() == "chaos_marine_race" then
g_bonus_generator = "chaos_plasma_generator"
g_bonus_turret = "chaos_turret_bolter"
g_bonus_barracks = "chaos_temple"
g_bonus_barracks2 = 0 --value on used for tau kroot nest, dummy value for all other races, like the Tau turret.
g_bonus_research = "chaos_armoury"
elseif MetaMap_GetPlayerRaceName() == "eldar_race" then
g_bonus_generator = "eldar_warp_generator"
g_bonus_turret = "eldar_support_platform_scatterlaser"
g_bonus_barracks = "eldar_aspect_portal"
g_bonus_barracks2 = 0 --value on used for tau kroot nest, dummy value for all other races, like the Tau turret.
g_bonus_research = "eldar_soul_shrine"
elseif MetaMap_GetPlayerRaceName() == "guard_race" then
g_bonus_generator = "guard_plasma_generator"
g_bonus_turret = "guard_turret_heavy_bolter"
g_bonus_barracks = "guard_infantry"
g_bonus_barracks2 = 0 --value on used for tau kroot nest, dummy value for all other races, like the Tau turret.
g_bonus_research = "guard_tactica"
elseif MetaMap_GetPlayerRaceName() == "ork_race" then
g_bonus_generator = "ork_generator"
g_bonus_turret = "ork_waagh_banner"
g_bonus_barracks = "ork_boy_hut"
g_bonus_barracks2 = 0 --value on used for tau kroot nest, dummy value for all other races, like the Tau turret.
g_bonus_research = "ork_pile_o_guns"
elseif MetaMap_GetPlayerRaceName() == "space_marine_race" then
g_bonus_generator = "space_marine_generator"
g_bonus_turret = "space_marine_turret_bolter"
g_bonus_barracks = "space_marine_barracks"
g_bonus_barracks2 = 0 --value on used for tau kroot nest, dummy value for all other races, like the Tau turret.
g_bonus_research = "space_marine_armoury"
elseif MetaMap_GetPlayerRaceName() == "tau_race" then
g_bonus_generator = "tau_plasma_generator"
g_bonus_turret = 0 --tau have no turrets, so zero is simply a filler value to establish the variable instead of writting cutom checks for tau later. 0 will never be a value fed in by code, so it simply allows the algorithym to function in a standadrd manner for all races.
g_bonus_barracks = "tau_barracks"
g_bonus_barracks2 = "tau_kroot_nest"
g_bonus_research = "tau_research_building"
elseif MetaMap_GetPlayerRaceName() == "necron_race" then
g_bonus_generator = "necron_plasma_generator"
g_bonus_turret = "necron_turret"
g_bonus_barracks = "necron_summoning_core"
g_bonus_barracks2 = 0 --value on used for tau kroot nest, dummy value for all other races, like the Tau turret.
g_bonus_research = "necron_forbidden_archive"
end
--Add in any bonus buildings made availible if the player has purchased them via owning Hyperion peaks province
t_blueprintEntitybonus = {}
MetaMap_GetAttackingRaceStartingEntitiesList(t_blueprintEntitybonus)
for j = 1,table.getn(t_blueprintEntitybonus) do
if t_blueprintEntitybonus[j] == g_bonus_generator then
Entity_CreateBuildingMarker(g_Player1, "eg_Bonus"..j, t_blueprintEntitybonus[j], "MM_Reinforcement"..g_bonus_gen_counter, 1)
--increase by one, the next generator will then spawn at the correct marker after this one
g_bonus_gen_counter = g_bonus_gen_counter + 1
elseif t_blueprintEntitybonus[j] == g_bonus_turret then
Entity_CreateBuildingMarker(g_Player1, "eg_Bonus"..j, t_blueprintEntitybonus[j], "MM_Reinforcement"..g_bonus_turret_counter, 1)
--increase by one, the next turret will then spawn at the correct marker after this one
g_bonus_turret_counter = g_bonus_turret_counter + 1
elseif t_blueprintEntitybonus[j] == g_bonus_barracks then
--fixed marker spawn based on Phil's table. Only one barracks is spawned, always at marker 10
--Necron intentionally spawn a summoning core in place of a barracks due to the monolith doubling as their barracks.
Entity_CreateBuildingMarker(g_Player1, "eg_Bonus"..j, t_blueprintEntitybonus[j], "MM_Reinforcement10", 1)
elseif t_blueprintEntitybonus[j] == g_bonus_research then
--fixed marker spawn based on Phil's table. Only one research building is spawned, always at marker 11
Entity_CreateBuildingMarker(g_Player1, "eg_Bonus"..j, t_blueprintEntitybonus[j], "MM_Reinforcement11", 1)
elseif t_blueprintEntitybonus[j] == g_bonus_barracks2 then
--This will only be used to spawn the kroot nest when the player is Tau, otherwise it will be passed over due to g_bonus_barracks2 being a dummy value.
--fixed marker spawn based on Phil's table. Only one kroot nest is spawned, always at marker 13
Entity_CreateBuildingMarker(g_Player1, "eg_Bonus"..j, t_blueprintEntitybonus[j], "MM_Reinforcement13", 1)
end
end
end
--[[ OBJECTIVES ]]
--[[Primary Objective - destroy the space marine HQ]] function Rule_ButtonObjectiveShow() if Event_IsAnyRunning() == false then Objective_ShowScreen() Flash_OtherButton("dlg_objectives", 0, false, true) Rule_Remove(Rule_ButtonObjectiveShow) end end
function Rule_Objective_Locate_Farseer()
if Event_IsAnyRunning() == false and Objective_Exists(Objective_Locate_Farseer.title_id) == false then
Util_WXP_ObjectiveCreate(Objective_Locate_Farseer, true, g_Player1)
if not Rule_Exists(Rule_ButtonObjectiveShow) then
Rule_AddIntervalDelay(Rule_ButtonObjectiveShow, 2, 5)
end
--Objective_ShowScreen()
--[[adding map and mini-map pings]]
g_ping_farseer = Objective_PingMarker(Objective_Locate_Farseer.title_id, "mkr_SpawnFarseer01", true, "attack")
g_ping_farseer_mini = Ping_Marker("mkr_SpawnFarseer01", true, "attack")
Rule_AddOneShot(Rule_Stop_Farseer_Ping, 5)
FOW_RevealArea(61, -156, 40, 30)
-- Spawn Taldeer, set her patrolling. Make her invulnerable, for now. Util_CreateSquadsAtMarkerEx(g_Player2, "sg_Farseer", "eldar_squad_farseer_stronghold_sp", "mkr_SpawnFarseer01", 1, 1) Cpu_LockSGroupAcrossPlayers("sg_Farseer") SGroup_SetHealthInvulnerable("sg_Farseer", true) Rule_AddInterval(Rule_MoveFarseer, 6)
-- Detect when the player gets too close. Rule_Add(Rule_Player_Near_Forward_Base)
-- Start Warp Spiders coming for the player. TODO: Make the delay longer --local n_SpiderDelay = 600 + math.floor ((g_Difficulty - g_DBase) * ((300 - 600) / (g_DMax - g_DBase))) local n_SpiderDelay = 400 + math.floor ((g_Difficulty - g_DBase) * ((200 - 400) / (g_DMax - g_DBase))) Rule_AddOneShot(Rule_SpawnWarpSpiders, n_SpiderDelay)
Rule_AddOneShot(Rule_Intro2, 1)
Rule_Remove(Rule_Objective_Locate_Farseer)
end
end
function Rule_MoveFarseer() x = World_GetRand( 1, 3 )
if x == 1 then
Cmd_MoveToMarker("sg_Farseer", "mkr_FarseerPatrol01")
end
if x == 2 then
Cmd_MoveToMarker("sg_Farseer", "mkr_FarseerPatrol02")
end
if x == 3 then
Cmd_MoveToMarker("sg_Farseer", "mkr_FarseerPatrol03")
end
end
function Rule_SpawnWarpSpiders() if not (EGroup_IsEmpty( "eg_WarpSpiderAspectPortal01" ) and EGroup_IsEmpty( "eg_WarpSpiderAspectPortal02")) then local n_SpiderSquads = 1 + math.floor ((g_Difficulty - g_DBase) * ((2 - 1) / (g_DMax - g_DBase))) Util_CreateSquadsAtMarkerEx(g_Player2, "sg_WarpSpiders", "eldar_squad_warp_spider_stronghold_sp", "mkr_WarpSpiderRally01", n_SpiderSquads, 8) Cpu_LockSGroupAcrossPlayers("sg_WarpSpiders") if g_Difficulty > (g_DBase + 3) then SGroup_AddLeaders("sg_WarpSpiders") end Cmd_AttackMoveMarker( "sg_WarpSpiders", "mkr_WarpSpiderLaunch01" ) Rule_Add(Rule_WarpSpiderLaunch) end end
function Rule_WarpSpiderLaunch() if SGroup_IsEmpty("sg_WarpSpiders") then Rule_AddOneShot(Rule_SpawnWarpSpiders, g_SpiderRecovery) Rule_Remove(Rule_WarpSpiderLaunch) else if Prox_AllSquadsNearMarker("sg_WarpSpiders", "mkr_WarpSpiderLaunch01") then
i = World_GetRand(1, 3)
if i == 1 then
Util_StartIntel(EVENTS.IE_Global_WarpSpider1)
else
if i == 2 then
Util_StartIntel(EVENTS.IE_Global_WarpSpider2)
else
Util_StartIntel(EVENTS.IE_Global_WarpSpider3)
end
end
Cmd_JumpToMarker("sg_WarpSpiders", "mkr_WarpSpiderTarget"..(World_GetRand(1, 3)))
Rule_AddOneShot(Rule_WarpSpiderRetreat, 25)
Rule_Remove(Rule_WarpSpiderLaunch)
end
end
end
function Rule_WarpSpiderRetreat() if SGroup_IsEmpty("sg_WarpSpiders") then Rule_AddOneShot(Rule_SpawnWarpSpiders, g_SpiderRecovery) else Cmd_JumpToMarker("sg_WarpSpiders", "mkr_WarpSpiderLaunch01") Rule_AddOneShot(Rule_WarpSpiderRegroup, 2) end end
function Rule_WarpSpiderRegroup() if SGroup_IsEmpty("sg_WarpSpiders") then Rule_AddOneShot(Rule_SpawnWarpSpiders, g_SpiderRecovery) else Cmd_MoveToMarker("sg_WarpSpiders", "mkr_SpawnAvatar01")
if SGroup_CountLeaders("sg_WarpSpiders") == 0 then
if g_Difficulty > (g_DBase + 3) then
SGroup_AddLeaders("sg_WarpSpiders")
end
end
--Command_Squad(g_Player2, SGroup_FromName("sg_WarpSpiders"), SCMD_ReinforceTrooperOverwatch)
Rule_Add(Rule_WarpSpiderCheck)
end
end
function Rule_WarpSpiderCheck() if SGroup_IsEmpty("sg_WarpSpiders") then Rule_AddOneShot(Rule_SpawnWarpSpiders, g_SpiderRecovery) Rule_Remove(Rule_WarpSpiderCheck) else if Prox_AllSquadsNearMarker("sg_WarpSpiders", "mkr_SpawnAvatar01") then if g_Difficulty > (g_DBase) then Cmd_ReinforceTrooper( "sg_WarpSpiders", 8 ) end local n_SpiderReturn = 200 + math.floor ((g_Difficulty - g_DBase) * ((90 - 200) / (g_DMax - g_DBase))) Rule_AddOneShot(Rule_WarpSpiderAttack, n_SpiderReturn) Rule_Remove(Rule_WarpSpiderCheck) end end end
function Rule_WarpSpiderAttack() if SGroup_IsEmpty("sg_WarpSpiders") then Rule_AddOneShot(Rule_SpawnWarpSpiders, g_SpiderRecovery) else Cmd_AttackMoveMarker( "sg_WarpSpiders", "mkr_WarpSpiderLaunch01" ) Rule_Add(Rule_WarpSpiderLaunch) end end
function Rule_SpawnSkimmers() if EGroup_IsEmpty("eg_Relocate06") then if not EGroup_IsEmpty("eg_EldarAspectCluster") then local n_BreakerSquads = 1 + math.floor ((g_Difficulty - g_DBase) * ((4 - 1) / (g_DMax - g_DBase))) Util_CreateSquadsAtMarkerEx(g_Player2, "sg_CloakBreakers", "eldar_guardian_squad", "mkr_CreateAvatar", n_BreakerSquads, 3) SGroup_AddLeaders("sg_CloakBreakers") local n_BreakerInterval = 180 + math.floor ((g_Difficulty - g_DBase) * ((60 - 180) / (g_DMax - g_DBase))) Rule_AddInterval(Rule_CloakBreakers, n_BreakerInterval) end Rule_Remove(Rule_SpawnSkimmers) else if SGroup_Count("sg_Skimmers01") < 3 then if not g_Relocated then if World_GetRand(1, 3) == 1 then Util_CreateSquadsAtMarkerEx(g_Player2, "sg_Skimmers01", "eldar_squad_vypers", "mkr_SpawnSkimmers01", 1, 1) else Util_CreateSquadsAtMarkerEx(g_Player2, "sg_Skimmers01", "eldar_guardian_squad", "mkr_SpawnSkimmers01", 1, g_MediumSquadSize) end else if World_GetRand(1, 3) == 1 then Util_CreateSquadsAtMarkerEx(g_Player2, "sg_Skimmers01", "eldar_guardian_squad", "mkr_SpawnSkimmers02", 1, g_MediumSquadSize) else Util_CreateSquadsAtMarkerEx(g_Player2, "sg_Skimmers01", "eldar_squad_wraithlord", "mkr_SpawnSkimmers02", 1, 1) end end Cpu_LockSGroupAcrossPlayers("sg_Skimmers01") else if SGroup_Count("sg_Skimmers01") == 3 then if not g_Relocated then Util_CreateSquadsAtMarkerEx(g_Player2, "sg_Skimmers01", "eldar_squad_banshees", "mkr_SpawnSkimmers01", 1, g_SmallSquadSize) else Util_CreateSquadsAtMarkerEx(g_Player2, "sg_Skimmers01", "eldar_squad_banshees", "mkr_SpawnSkimmers02", 1, g_MediumSquadSize) end SGroup_AddLeaders("sg_Skimmers01") Cpu_LockSGroupAcrossPlayers("sg_Skimmers01") else Cmd_AttackMoveMarker( "sg_Skimmers01", "mkr_RaiderTarget01" ) end end end end
function Rule_InitialAttack() Util_CreateSquadsAtMarkerEx(g_Player2, "sg_Skimmers02", "eldar_squad_vypers", "mkr_SpawnSkimmers01", 1, 1) Cpu_LockSGroupAcrossPlayers("sg_Skimmers02") Cmd_AttackMoveMarker( "sg_Skimmers02", "mkr_RaiderTarget01" ) end
function Rule_CloakBreakers() if SGroup_IsEmpty("sg_CloakBreakers") then if not EGroup_IsEmpty("eg_EldarAspectCluster") then local n_BreakerSquads = 1 + math.floor ((g_Difficulty - g_DBase) * ((4 - 1) / (g_DMax - g_DBase))) Util_CreateSquadsAtMarkerEx(g_Player2, "sg_CloakBreakers", "eldar_squad_banshees", "mkr_CreateAvatar", n_BreakerSquads, 3) SGroup_AddLeaders("sg_CloakBreakers") Cpu_LockSGroupAcrossPlayers("sg_CloakBreakers") else Rule_Remove(Rule_CloakBreakers) end end
Cmd_AttackMoveMarker( "sg_CloakBreakers", "mkr_RaiderTarget01" )
end
function Rule_SpawnWraithlordGuards() for i = 1, 3 do if (not EGroup_IsEmpty("eg_EldarF_Support0"..i)) and (SGroup_IsEmpty("sg_WraithlordGuard"..i)) then Util_CreateSquadsAtMarkerEx(g_Player2, "sg_WraithlordGuard"..i, "eldar_squad_wraithlord", "mkr_SpawnSupport0"..i, 1, 1) Cpu_LockSGroupAcrossPlayers("sg_WraithlordGuard"..i) Cmd_AttackMoveMarker( "sg_WraithlordGuard"..i, "mkr_WraithlordGuard0"..i ) break end end end
function Rule_SpawnAvatarGuard() --If the player knocks out the Avatar guarding the bridge, then the Super Avatar spawns in the final base and stays there. --if (not EGroup_IsEmpty("eg_EldarAspectCluster")) and (SGroup_IsEmpty("sg_Avatar")) then Util_CreateSquadsAtMarkerEx(g_Player2, "sg_Avatar", "eldar_squad_avatar_stronghold_sp", "mkr_CreateAvatar", 1, 1) Cmd_SetStance("sg_Avatar", STANCE_Hold) Cpu_LockSGroupAcrossPlayers("sg_Avatar") -- Cmd_AttackMoveMarker( "sg_Avatar", "mkr_SpawnAvatar01" ) --end end
function Rule_EldarPatrol() if SGroup_IsEmpty("sg_EldarPatrol1") then Rule_Remove(Rule_EldarPatrol) end
if g_EldarPatrol == 1 and Prox_AllSquadsNearMarker("sg_EldarPatrol1", "mkr_EldarPatrol1") then
Cmd_AttackMoveMarker( "sg_EldarPatrol1", "mkr_EldarPatrol2" )
g_EldarPatrol = 2
end
if g_EldarPatrol == 2 and Prox_AllSquadsNearMarker("sg_EldarPatrol1", "mkr_EldarPatrol2") then
Cmd_AttackMoveMarker( "sg_EldarPatrol1", "mkr_EldarPatrol1" )
g_EldarPatrol = 1
end
end
function Rule_OrkPatrol()
if SGroup_IsEmpty("sg_OrkPatrol1") then
Rule_Remove(Rule_OrkPatrol)
end
if g_OrkPatrol == 1 and Prox_AllSquadsNearMarker("sg_OrkPatrol1", "mkr_OrkPatrol1") then
Cmd_AttackMoveMarker( "sg_OrkPatrol1", "mkr_OrkPatrol2" )
g_OrkPatrol = 2
end
if g_OrkPatrol == 2 and Prox_AllSquadsNearMarker("sg_OrkPatrol1", "mkr_OrkPatrol2") then
Cmd_AttackMoveMarker( "sg_OrkPatrol1", "mkr_OrkPatrol1" )
g_OrkPatrol = 1
end
end
function Rule_MonitorCriticalPoints() for i = 1, 3 do if SGroup_IsEmpty("sg_Prism"..i) and (not EGroup_IsEmpty("eg_EldarF_Support0"..i)) then if (World_GetRand(1, 2) == 1) and (g_Difficulty > (g_DBase + 2)) then Util_CreateSquadsAtMarkerEx(g_Player2, "sg_Prism"..i, "eldar_squad_fire_prism", "mkr_SpawnSupport0"..i, 1, 1) else Util_CreateSquadsAtMarkerEx(g_Player2, "sg_Prism"..i, "eldar_squad_vypers", "mkr_SpawnSupport0"..i, 2, 1) end Cpu_LockSGroupAcrossPlayers("sg_Prism"..i) Cmd_SetStance("sg_Prism"..i, STANCE_Hold) end if SGroup_IsEmpty("sg_Banshees"..i) and (not EGroup_IsEmpty("eg_EldarAspectCluster")) then Util_CreateSquadsAtMarkerEx(g_Player2, "sg_Banshees"..i, "eldar_guardian_squad", "mkr_SpawnAspect"..i, 1, g_SmallSquadSize) if g_Difficulty > (g_DBase + 1) then SGroup_AddLeaders("sg_Banshees"..i) end Cpu_LockSGroupAcrossPlayers("sg_Banshees"..i) Cmd_SetStance("sg_Banshees"..i, STANCE_CeaseFire) end if SGroup_IsEmpty("sg_Dragons"..i) and (not EGroup_IsEmpty("eg_EldarAspectCluster")) then Util_CreateSquadsAtMarkerEx(g_Player2, "sg_Dragons"..i, "eldar_squad_fire_dragon", "mkr_SpawnAspect"..(i + 3), 1, g_SmallSquadSize) Util_CreateSquadsAtMarkerEx(g_Player2, "sg_Dragons"..i, "eldar_squad_banshees", "mkr_SpawnAspect"..i, 1, g_SmallSquadSize) if g_Difficulty > (g_DBase + 1) then SGroup_AddLeaders("sg_Dragons"..i) end Cpu_LockSGroupAcrossPlayers("sg_Dragons"..i) Cmd_SetStance("sg_Dragons"..i, STANCE_Hold) end end
j = World_GetRand(1, 3)
if EGroup_IsCapturedByPlayer("eg_CriticalPoints", g_Player1, true) then
Cmd_AttackMoveMarker("sg_Prism"..j, "mkr_CriticalPoint0"..j)
Cmd_AttackMoveMarker("sg_Dragons"..j, "mkr_CriticalPoint0"..j)
end
if EGroup_IsCapturedByPlayer("eg_CriticalPoint0"..j, g_Player1, true) then
Cmd_Capture("sg_Banshees"..j, "eg_CriticalPoint0"..j)
end
end
--[[Ork Attack and Revelation]]
function Rule_Ork_Attack() Cpu_Enable(g_Player4, false)
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkRaiders01", "ork_squad_slugga", "mkr_SpawnRaiders01", 1, g_LargeSquadSize)
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkRaiders02", "ork_squad_shoota_boy", "mkr_SpawnRaiders02", 1, g_MediumSquadSize)
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkRaiders03", "ork_squad_stormboy", "mkr_SpawnRaiders03", 1, g_MediumSquadSize)
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkSaboteurs1", "ork_squad_tankbusta", "mkr_Ork_Barracks_Spawn1", 1, g_SmallSquadSize)
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkSaboteurs2", "ork_squad_tankbusta", "mkr_Ork_Barracks_Spawn2", 1, g_SmallSquadSize)
Cpu_LockSGroupAcrossPlayers("sg_OrkRaiders01")
Cpu_LockSGroupAcrossPlayers("sg_OrkRaiders02")
Cpu_LockSGroupAcrossPlayers("sg_OrkRaiders03")
Cpu_LockSGroupAcrossPlayers("sg_OrkSaboteurs1")
Cpu_LockSGroupAcrossPlayers("sg_OrkSaboteurs2")
Cmd_SetStance("sg_OrkRaiders01", STANCE_Attack)
Cmd_SetStance("sg_OrkRaiders02", STANCE_Attack)
Cmd_SetStance("sg_OrkRaiders03", STANCE_Attack)
Cmd_AttackMoveMarker("sg_OrkRaiders01" , "mkr_RaiderTarget01")
Cmd_AttackMoveMarker("sg_OrkRaiders02" , "mkr_RaiderTarget01")
Cmd_AttackMoveMarker("sg_OrkRaiders03" , "mkr_RaiderTarget01")
local n_RaiderInterval = 240 + math.floor ((g_Difficulty - g_DBase) * ((120 - 240) / (g_DMax - g_DBase)))
local n_RaiderDelay1 = 120 + math.floor ((g_Difficulty - g_DBase) * ((60 - 120) / (g_DMax - g_DBase)))
local n_RaiderDelay2 = 240 + math.floor ((g_Difficulty - g_DBase) * ((120 - 240) / (g_DMax - g_DBase)))
Rule_AddIntervalDelay(Rule_Ork_Saboteurs1, n_RaiderInterval, n_RaiderDelay1)
Rule_AddIntervalDelay(Rule_Ork_Saboteurs2, n_RaiderInterval, n_RaiderDelay2)
Rule_Add(Rule_Ork_Objective)
end
function Rule_Ork_Objective() if SGroup_IsEmpty("sg_OrkRaiders01") then
Util_WXP_ObjectiveCreate(Objective_Destroy_Ork_Camp, false, g_Player1)
--Objective_ShowScreen()
if not Rule_Exists(Rule_ButtonObjectiveShow) then
Rule_AddIntervalDelay(Rule_ButtonObjectiveShow, 2, 5)
end
g_ping_ork_camp = Objective_PingMarker(Objective_Destroy_Ork_Camp.title_id, "mkr_Ork_HQ01", true, "attack")
g_ping_ork_camp_mini = Ping_Marker("mkr_Ork_HQ01", true, "attack")
Rule_AddOneShot(Rule_Stop_Ork_Camp_Ping, 5)
FOW_RevealArea(-100, 234, 50, 30)
Rule_AddInterval(Rule_Monitor_Ork_Camp, 5)
Rule_AddOneShot(Rule_OrkAttackDialogue, 6)
Rule_AddOneShot(Rule_SquiggothDialogue, 30)
Cpu_Enable(g_Player4, false)
Cpu_SetDifficulty(g_Player4, AD_Standard)
-- Squiggoths
Cpu_LockSGroupAcrossPlayers("sg_Squiggoths")
Cmd_SetStance("sg_Squiggoths", STANCE_CeaseFire)
-- Ork patrol
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkPatrol1", "ork_squad_nob", "mkr_SpawnRaiders01", 1, g_MediumSquadSize)
local n_PatrolKans = 1 + math.floor ((g_Difficulty - g_DBase) * ((2 - 1) / (g_DMax - g_DBase)))
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkPatrol1", "ork_squad_killa_kan", "mkr_SpawnRaiders02", n_PatrolKans, 1)
Cpu_LockSGroupAcrossPlayers("sg_OrkPatrol1")
if g_Difficulty > (g_DBase + 1) then
SGroup_AddLeaders("sg_OrkPatrol1")
end
Cmd_AttackMoveMarker( "sg_OrkPatrol1", "mkr_OrkPatrol2" )
Rule_AddInterval(Rule_OrkPatrol, 15)
Rule_Remove(Rule_Ork_Objective)
end
end
function Rule_Monitor_Ork_Camp() if EGroup_IsEmpty("eg_Ork_Camp01") then
Util_ObjectiveComplete(Objective_Destroy_Ork_Camp.title_id)
Cpu_Enable(g_Player4, false)
g_OrkDead = true
Rule_AddOneShot(Rule_OrkDeadDialogue, 0)
Rule_AddInterval(Rule_SquiggothEscape, 5)
Rule_AddOneShot(Rule_InitializeEastReinforcements, 8)
Rule_Remove(Rule_ReinforceGitz)
Rule_Remove(Rule_ReinforceMeganobs)
Rule_Remove(Rule_ReinforceKans)
Rule_Remove(Rule_Monitor_Ork_Camp)
end
end
function Rule_Ork_Saboteurs1() if SGroup_IsEmpty( "sg_OrkSaboteurs1") then i = World_GetRand(1, 3)
if i == 1 then
if not EGroup_IsEmpty( "eg_Ork_Barracks01" ) then
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkSaboteurs1", "ork_squad_tankbusta", "mkr_Ork_Barracks_Spawn1", 1, g_SmallSquadSize)
end
if not EGroup_IsEmpty( "eg_Ork_Barracks02" ) then
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkSaboteurs1", "ork_squad_shoota_boy", "mkr_Ork_Barracks_Spawn2", 1, g_MediumSquadSize)
end
else
if i == 2 then
if not EGroup_IsEmpty( "eg_Ork_MekShop2" ) then
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkSaboteurs1", "ork_squad_wartrak", "mkr_Ork_MekShop_Spawn2", 1, 1)
end
if not EGroup_IsEmpty( "eg_Ork_Barracks01" ) then
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkSaboteurs1", "ork_squad_shoota_boy", "mkr_Ork_Barracks_Spawn1", 1, g_MediumSquadSize)
end
else
if not EGroup_IsEmpty( "eg_Ork_Barracks01" ) then
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkSaboteurs1", "ork_squad_slugga", "mkr_Ork_Barracks_Spawn1", 1, g_LargeSquadSize)
end
if not EGroup_IsEmpty( "eg_Ork_Barracks02" ) then
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkSaboteurs1", "ork_squad_mek_boy", "mkr_Ork_Barracks_Spawn2", 1, 1)
end
end
end
if g_Difficulty > (g_DBase + 1) then
SGroup_AddLeaders("sg_OrkSaboteurs1")
end
Cpu_LockSGroupAcrossPlayers("sg_OrkSaboteurs1")
end
--Attack a player turret
--If none exist, guard the base.
EGroup_AddGroup(EGroup_CreateIfNotFound("eg_Player1_Buildings"), Player_GetEntities(g_Player1))
local turretfound = false
local countbuilding = EGroup_CountSpawned(EGroup_FromName("eg_Player1_Buildings"))
for i = 1, countbuilding do
EGroup_Clear(EGroup_CreateIfNotFound("eg_Potential_Turret"))
EGroup_Add(EGroup_FromName("eg_Potential_Turret"), EGroup_GetSpawnedEntityAt("eg_Player1_Buildings", i))
if EGroup_ContainsBlueprints(EGroup_FromName("eg_Potential_Turret"), t_blueprintturret, true) then
pos_turret = Entity_GetPosition( EGroup_GetSpawnedEntityAt("eg_Potential_Turret", 1))
Cmd_AttackMovePos("sg_OrkSaboteurs1", pos_turret)
turretfound = true
break
--Check if it's closest
end
end
if not turretfound then
Cmd_AttackMoveMarker("sg_OrkSaboteurs1", "mkr_RaiderTarget01")
end
--end
end
function Rule_Ork_Saboteurs2() if SGroup_IsEmpty( "sg_OrkSaboteurs2") then i = World_GetRand(1, 3)
if i == 1 then
if not EGroup_IsEmpty( "eg_Ork_Barracks01" ) then
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkSaboteurs2", "ork_squad_tankbusta", "mkr_Ork_Barracks_Spawn1", 1, g_SmallSquadSize)
end
if not EGroup_IsEmpty( "eg_Ork_Barracks02" ) then
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkSaboteurs2", "ork_squad_shoota_boy", "mkr_Ork_Barracks_Spawn2", 1, g_MediumSquadSize)
end
else
if i == 2 then
if not EGroup_IsEmpty( "eg_Ork_MekShop2" ) then
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkSaboteurs2", "ork_squad_wartrak", "mkr_Ork_MekShop_Spawn2", 1, 1)
end
if not EGroup_IsEmpty( "eg_Ork_Barracks01" ) then
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkSaboteurs2", "ork_squad_shoota_boy", "mkr_Ork_Barracks_Spawn1", 1, g_MediumSquadSize)
end
else
if not EGroup_IsEmpty( "eg_Ork_Barracks01" ) then
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkSaboteurs2", "ork_squad_slugga", "mkr_Ork_Barracks_Spawn1", 1, g_LargeSquadSize)
end
if not EGroup_IsEmpty( "eg_Ork_Barracks02" ) then
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_OrkSaboteurs2", "ork_squad_mek_boy", "mkr_Ork_Barracks_Spawn2", 1, 1)
end
end
end
if g_Difficulty > (g_DBase + 1) then
SGroup_AddLeaders("sg_OrkSaboteurs2")
end
Cpu_LockSGroupAcrossPlayers("sg_OrkSaboteurs2")
end
-- Attack a player HQ
--If none exist, guard the base.
EGroup_AddGroup(EGroup_CreateIfNotFound("eg_Player1_Buildings"), Player_GetEntities(g_Player1))
local countbuilding = EGroup_CountSpawned(EGroup_FromName("eg_Player1_Buildings"))
for i = 1, countbuilding do
EGroup_Clear(EGroup_CreateIfNotFound("eg_Potential_HQ"))
EGroup_Add(EGroup_FromName("eg_Potential_HQ"), EGroup_GetSpawnedEntityAt("eg_Player1_Buildings", i))
if EGroup_ContainsBlueprints(EGroup_FromName("eg_Potential_HQ"), t_blueprinthq, true) then
pos_HQ = Entity_GetPosition( EGroup_GetSpawnedEntityAt("eg_Potential_HQ", 1))
Cmd_AttackMovePos("sg_OrkSaboteurs2", pos_HQ)
--Check if it's closest
end
end
--end
end
--[[ Forward Base Event ]]
function Rule_Player_Near_Forward_Base() -- The player has arrived at Taldeer's position. A lot of things happen...
if (Player_AreSquadsNearMarker(g_Player1, "mkr_ForwardBase01") or
Player_AreSquadsNearMarker(g_Player1, "mkr_ChaosBase1") or
Player_AreSquadsNearMarker(g_Player1, "mkr_ChaosBase2") or
Player_AreSquadsNearMarker(g_Player1, "mkr_FinalBase")) and Event_IsAnyRunning() == false then
-- Chaos are now in the game. Give them intelligence. --Cpu_Enable(g_Player3, true) --Cpu_SetDifficulty(g_Player3, AD_Standard)
Rule_Remove(Rule_MoveFarseer)
Player_RestrictSquad(g_Player3, "chaos_squad_sorcerer")
Util_StartNIS( EVENTS.NIS_Mid )
Util_CreateSquadsAtMarkerEx(g_Player3, "sg_ChaosSorcererGuards", "chaos_squad_predator", "mkr_ChaosPredator01", 1, 1)
Util_CreateSquadsAtMarkerEx(g_Player3, "sg_ChaosSorcererGuards", "chaos_squad_defiler", "mkr_ChaosDefiler1", 1, 1)
if g_Difficulty > (g_DBase + 1) then
Util_CreateSquadsAtMarkerEx(g_Player3, "sg_ChaosSorcererGuards", "chaos_squad_predator", "mkr_ChaosPredator02", 1, 1)
Util_CreateSquadsAtMarkerEx(g_Player3, "sg_ChaosSorcererGuards", "chaos_squad_defiler", "mkr_ChaosDefiler2", 1, 1)
end
if g_Difficulty > (g_DBase + 3) then
Util_CreateSquadsAtMarkerEx(g_Player3, "sg_ChaosSorcererGuards", "chaos_squad_defiler", "mkr_ChaosDefiler3", 1, 1)
end
if g_Difficulty > (g_DBase + 4) then
Util_CreateSquadsAtMarkerEx(g_Player3, "sg_ChaosSorcererGuards", "chaos_squad_defiler", "mkr_ChaosDefiler4", 1, 1)
end
Rule_Remove(Rule_Player_Near_Forward_Base)
end
end
function Rule_DestroyGates() EGroup_SelfDestroy("eg_LeftoverGates", true) end
function Rule_FarseerWarnings() i = 0
for j = 1, 3 do
if EGroup_IsCapturedByPlayer("eg_CriticalPoint0"..j, g_Player1, true) then
i = i + 1
end
end
if (i == 1) and (g_Warning1 == false) then
Rule_AddOneShot(Rule_CritCap1Dialogue, 1)
g_Warning1 = true
end
if (i == 2) and (g_Warning2 == false) then
Rule_AddOneShot(Rule_CritCap2Dialogue, 1)
g_Warning2 = true
end
if (i == 3) and (g_Warning3 == false) then
Rule_AddOneShot(Rule_CritCap3Dialogue, 1)
g_Warning3 = true
Rule_Remove(Rule_FarseerWarnings)
end
end
function Rule_UnloadFarseer() -- Taldeer hops out of a webgate back home Cmd_EmptyBuilding("eg_EscapeGate02")
Rule_AddOneShot(Rule_EldarRallyDialogue, 0)
Rule_AddOneShot(Rule_FinalAttackDialogue, 60)
-- Since it's convenient, we unreveal that bit of the map FOW_UnRevealArea(61, -156, 30) end
function Rule_Objective_Chaos_Sorcerer() -- Set up Chaos Sorcerer- reveal his location, set him to hold his position, keep an eye on him. Util_WXP_ObjectiveCreate(Objective_Kill_Sorcerer, false, g_Player1)
if not Rule_Exists(Rule_ButtonObjectiveShow) then
Rule_AddIntervalDelay(Rule_ButtonObjectiveShow, 2, 5)
end
--Objective_ShowScreen()
Util_CreateSquadsAtMarkerEx(g_Player3, "sg_Sorcerer", "chaos_squad_sorcerer_stronghold_sp", "mkr_SpawnSorcerer01", 1, 1)
g_ping_sorcerer01 = Objective_PingMarker(Objective_Kill_Sorcerer.title_id, "mkr_SpawnSorcerer01", true, "attack")
g_ping_sorcerer01_mini = Ping_Marker("mkr_SpawnSorcerer01", true, "attack")
FOW_RevealArea(-135, -219, 30, 30)
Cpu_LockSGroupAcrossPlayers("sg_Sorcerer")
Cmd_SetStance("sg_Sorcerer", STANCE_Hold )
Rule_AddOneShot(Rule_Stop_Sorcerer_Ping, 5)
Rule_AddOneShot(Rule_ChaosTauntDialogue, 0)
Rule_Add(Rule_Monitor_Sorcerer)
end
function Rule_ChaosAttacks() -- Send units to kill the player's units. if (EGroup_IsEmpty("eg_ChaosSpawns") and SGroup_IsEmpty("sg_Assassins")) or SGroup_IsEmpty("sg_Sorcerer") then Rule_Remove(Rule_ChaosAttacks) else
local squads = 0
--Only spawn more if previous assassins are dead
if SGroup_IsEmpty("sg_Assassins") then
--Send weak units if there's 3 or more production buildings- no more than 1 defiler
if (EGroup_Count("eg_ChaosSpawns") > 2) then
if not EGroup_IsEmpty("eg_ChaosBarracks2") then
Util_CreateSquadsAtMarkerEx(g_Player3, "sg_Assassins", "chaos_marine_squad", "mkr_Spawn_Temple2", 1, g_MediumSquadSize)
squads = squads + 1
end
if not EGroup_IsEmpty("eg_ChaosCircle2") then
Util_CreateSquadsAtMarkerEx(g_Player3, "sg_Assassins", "chaos_squad_horror", "mkr_Spawn_Circle2", 1, g_SmallSquadSize)
squads = squads + 1
end
if not EGroup_IsEmpty("eg_ChaosBarracks1") then
Util_CreateSquadsAtMarkerEx(g_Player3, "sg_Assassins", "chaos_marine_squad", "mkr_Spawn_Temple1", 1, g_MediumSquadSize)
squads = squads + 1
end
if squads < 3 and (not EGroup_IsEmpty("eg_ChaosCircle1")) then
Util_CreateSquadsAtMarkerEx(g_Player3, "sg_Assassins", "chaos_squad_horror", "mkr_Spawn_Circle1", 1, g_SmallSquadSize)
squads = squads + 1
end
if squads < 3 and (not EGroup_IsEmpty("eg_ChaosMachinePit2")) then
Util_CreateSquadsAtMarkerEx(g_Player3, "sg_Assassins", "chaos_squad_defiler", "mkr_Spawn_MachinePit2", 1, 1)
squads = 3
end
if squads < 3 and (not EGroup_IsEmpty("eg_ChaosMachinePit1")) then
Util_CreateSquadsAtMarkerEx(g_Player3, "sg_Assassins", "chaos_squad_defiler", "mkr_Spawn_MachinePit1", 1, 1)
squads = 3
end
--Send strong units if there are 2 or less production buildings
else
if not EGroup_IsEmpty("eg_ChaosBarracks2") then
Util_CreateSquadsAtMarkerEx(g_Player3, "sg_Assassins", "chaos_squad_khorne_berserker", "mkr_Spawn_Temple2", 1, g_MediumSquadSize)
end
if not EGroup_IsEmpty("eg_ChaosCircle2") then
Util_CreateSquadsAtMarkerEx(g_Player3, "sg_Assassins", "chaos_squad_possessed_marine", "mkr_Spawn_Circle2", 1, g_MediumSquadSize)
end
if not EGroup_IsEmpty("eg_ChaosBarracks1") then
Util_CreateSquadsAtMarkerEx(g_Player3, "sg_Assassins", "chaos_squad_khorne_berserker", "mkr_Spawn_Temple1", 1, g_MediumSquadSize)
end
if (not EGroup_IsEmpty("eg_ChaosCircle1")) then
Util_CreateSquadsAtMarkerEx(g_Player3, "sg_Assassins", "chaos_squad_possessed_marine", "mkr_Spawn_Circle1", 1, g_MediumSquadSize)
end
if (not EGroup_IsEmpty("eg_ChaosMachinePit2")) then
Util_CreateSquadsAtMarkerEx(g_Player3, "sg_Assassins", "chaos_squad_predator", "mkr_Spawn_MachinePit2", 1, 1)
end
if (not EGroup_IsEmpty("eg_ChaosMachinePit1")) then
Util_CreateSquadsAtMarkerEx(g_Player3, "sg_Assassins", "chaos_squad_predator", "mkr_Spawn_MachinePit1", 1, 1)
end
end
end
--Attack the player's commander.
--If none exist, attack the closest squad.
SGroup_AddGroup(SGroup_CreateIfNotFound("sg_Player1_Squads"), Player_GetSquads(g_Player1))
local countsquads = SGroup_CountSpawned(SGroup_FromName("sg_Player1_Squads"))
local nearestrange = 1
local temprange = 1
SGroup_Clear(SGroup_CreateIfNotFound("sg_Target"))
for i = 1, countsquads do
SGroup_Clear(SGroup_CreateIfNotFound("sg_Potential"))
SGroup_Add(SGroup_FromName("sg_Potential"), SGroup_GetSpawnedSquadAt("sg_Player1_Squads", i))
if SGroup_ContainsBlueprints(SGroup_FromName("sg_Potential"), t_blueprintleader, true) then
SGroup_Clear(SGroup_CreateIfNotFound("sg_Target"))
SGroup_AddGroup(SGroup_FromName("sg_Target"), SGroup_FromName("sg_Potential"))
break
else
if i == 1 then
nearestrange = Prox_SGroupSGroup("sg_Potential", "sg_Assassins", PROX_SHORTEST)
SGroup_Clear(SGroup_CreateIfNotFound("sg_Target"))
SGroup_Add(SGroup_FromName("sg_Target"), SGroup_GetSpawnedSquadAt("sg_Player1_Squads", i))
else
temprange = Prox_SGroupSGroup("sg_Potential", "sg_Assassins", PROX_SHORTEST)
if temprange < nearestrange then
nearestrange = temprange
SGroup_Clear(SGroup_CreateIfNotFound("sg_Target"))
SGroup_Add(SGroup_FromName("sg_Target"), SGroup_GetSpawnedSquadAt("sg_Player1_Squads", i))
end
end
end
end
if not SGroup_IsEmpty("sg_Target") then
pos_target = SGroup_GetPosition( SGroup_FromName("sg_Target"))
Cpu_LockSGroupAcrossPlayers("sg_Assassins")
Cmd_AttackMovePos("sg_Assassins", pos_target)
end
end
end
function Rule_Monitor_Sorcerer() if SGroup_IsEmpty("sg_Sorcerer") then Util_ObjectiveComplete(Objective_Kill_Sorcerer.title_id)
g_ChaosDead = true
Rule_AddOneShot(Rule_ChaosDeadDialogue, 0)
SGroup_AddGroup(SGroup_CreateIfNotFound("sg_ChaosSquads"), Player_GetSquads(g_Player3))
EGroup_AddGroup(EGroup_CreateIfNotFound("eg_ChaosEntities"), Player_GetEntities(g_Player3))
Rule_AddIntervalDelay(Rule_AnnihilateChaos, 1, 3)
Rule_Remove(Rule_Monitor_Sorcerer)
end
end
function Rule_AnnihilateChaos() if EGroup_IsEmpty("eg_ChaosEntities") and SGroup_IsEmpty("sg_ChaosSquads") then Rule_AddOneShot(Rule_InitializeWestReinforcements, 8) Rule_Remove(Rule_AnnihilateChaos) end
local countsquads = SGroup_CountSpawned(SGroup_FromName("sg_ChaosSquads"))
local countentities = EGroup_CountSpawned(EGroup_FromName("eg_ChaosEntities"))
for i = 1, countsquads do
SGroup_Clear(SGroup_CreateIfNotFound("sg_Doomed"))
SGroup_Add(SGroup_FromName("sg_Doomed"), SGroup_GetSpawnedSquadAt("sg_ChaosSquads", i))
SGroup_SelfDestroy("sg_Doomed", false)
i = i + g_AnnihilateChaosIterator
if i > countsquads then
break
end
end
for i = 1, countentities do
EGroup_Clear(EGroup_CreateIfNotFound("eg_Doomed"))
EGroup_Add(EGroup_FromName("eg_Doomed"), EGroup_GetSpawnedEntityAt("eg_ChaosEntities", i))
t_CapturableTable = Util_MakeBlueprintTable("strategic_objective_struct", "relic_struct", "strategic_point_flag")
if EGroup_ContainsBlueprints(EGroup_FromName("eg_Doomed"), t_CapturableTable, false) then
EGroup_ResetPlayerOwner("eg_Doomed")
EGroup_Uncapture("eg_Doomed")
else
EGroup_SelfDestroy("eg_Doomed", false)
end
i = i + g_AnnihilateChaosIterator
if i > countentities then
break
end
end
g_AnnihilateChaosIterator = g_AnnihilateChaosIterator - 1
if g_AnnihilateChaosIterator < 0 then
Rule_AddOneShot(Rule_InitializeWestReinforcements, 8)
Rule_Remove(Rule_AnnihilateChaos)
end
end
function Rule_InitializeWestReinforcements()
Util_CreateSquadsAtMarkerEx(g_Player1, "sg_WestReinforcements1", g_TankType, "mkr_SpawnWestReinforcements", 1, 1)
Util_CreateSquadsAtMarkerEx(g_Player1, "sg_WestReinforcements2", g_WestUnitType, "mkr_SpawnWestReinforcements", 1, 8)
Rule_AddOneShot(Rule_WestReinforcementDialogue, 1)
g_SpawnWestReinforcements = true
g_ping_westreinforcements = Ping_Marker("mkr_SpawnWestReinforcements", true, "attack")
Rule_AddOneShot(Rule_Stop_West_Ping, 5)
end
function Rule_InitializeEastReinforcements()
Util_CreateSquadsAtMarkerEx(g_Player1, "sg_EastReinforcements1", g_TankType, "mkr_SpawnEastReinforcements", 1, 1)
Util_CreateSquadsAtMarkerEx(g_Player1, "sg_EastReinforcements2", g_EastUnitType, "mkr_SpawnEastReinforcements", 1, 8)
Rule_AddOneShot(Rule_EastReinforcementDialogue, 1)
g_SpawnEastReinforcements = true
g_ping_eastreinforcements = Ping_Marker("mkr_SpawnEastReinforcements", true, "attack")
Rule_AddOneShot(Rule_Stop_East_Ping, 5)
end
function Rule_MoreReinforcements() local noise = false local westping = false local eastping = false
if g_SpawnEastReinforcements then
if SGroup_IsEmpty("sg_EastReinforcements1") then
Util_CreateSquadsAtMarkerEx(g_Player1, "sg_EastReinforcements1", g_TankType, "mkr_SpawnEastReinforcements", 1, 1)
noise = true
eastping = true
end
if SGroup_IsEmpty("sg_EastReinforcements2") then
Util_CreateSquadsAtMarkerEx(g_Player1, "sg_EastReinforcements2", g_EastUnitType, "mkr_SpawnEastReinforcements", 1, 8)
noise = true
eastping = true
end
end
if g_SpawnWestReinforcements then
if SGroup_IsEmpty("sg_WestReinforcements1") then
Util_CreateSquadsAtMarkerEx(g_Player1, "sg_WestReinforcements1", g_TankType, "mkr_SpawnWestReinforcements", 1, 1)
noise = true
westping = true
end
if SGroup_IsEmpty("sg_WestReinforcements2") then
Util_CreateSquadsAtMarkerEx(g_Player1, "sg_WestReinforcements2", g_WestUnitType, "mkr_SpawnWestReinforcements", 1, 8)
noise = true
westping = true
end
end
if noise then
Rule_AddOneShot(Rule_MoreReinforcementDialogue, 1)
end
if westping then
g_ping_westreinforcements = Ping_Marker("mkr_SpawnWestReinforcements", true, "attack")
Rule_AddOneShot(Rule_Stop_West_Ping, 5)
end
if eastping then
g_ping_eastreinforcements = Ping_Marker("mkr_SpawnEastReinforcements", true, "attack")
Rule_AddOneShot(Rule_Stop_East_Ping, 5)
end
end
function Rule_Stop_West_Ping()
Ping_Stop(g_ping_westreinforcements)
end
function Rule_Stop_East_Ping()
Ping_Stop(g_ping_eastreinforcements)
end
function Rule_Stop_Farseer_Ping()
Ping_Stop(g_ping_farseer_mini)
end
function Rule_Stop_Squiggoths_Ping()
Ping_Stop(g_ping_squiggoths_mini)
end
function Rule_Stop_Sorcerer_Ping()
Ping_Stop(g_ping_sorcerer01_mini)
end
function Rule_Stop_Ork_Camp_Ping()
Ping_Stop(g_ping_ork_camp_mini)
end
function Rule_Stop_Critical_Point_Ping()
Ping_Stop(g_ping_criticalpoint01_mini)
Ping_Stop(g_ping_criticalpoint02_mini)
Ping_Stop(g_ping_criticalpoint03_mini)
end
function Rule_Detect_Final_Capture() if EGroup_IsCapturedByPlayer( "eg_CriticalPoint01", g_Player1, true) and EGroup_IsCapturedByPlayer( "eg_CriticalPoint02", g_Player1, true) and EGroup_IsCapturedByPlayer( "eg_CriticalPoint03", g_Player1, true) then
Rule_AddOneShot(Rule_Game_Win_Timer, 1)
Rule_AddInterval(Rule_Monitor_Critical_Points, 60)
Rule_Remove(Rule_Detect_Final_Capture)
end
end
function Rule_Monitor_Critical_Points() if not (EGroup_IsCapturedByPlayer( "eg_CriticalPoint01", g_Player1, true) and EGroup_IsCapturedByPlayer( "eg_CriticalPoint02", g_Player1, true) and EGroup_IsCapturedByPlayer( "eg_CriticalPoint03", g_Player1, true)) then
-- Player must fail this check twice in a row to reset the timer, to compensate for very brief lapses in holding -- Check occurs every 60 seconds... a substantial grace period if g_FirstFailedCheck then g_FinalTimer = 10 Rule_Add(Rule_Detect_Final_Capture)
UI_HideCount( "FinalTimer" )
if not SGroup_IsEmpty("sg_Avatar") then
Cmd_MoveToMarker("sg_Avatar", "mkr_CreateAvatar")
end
Rule_Remove(Rule_Decrement_Timer)
Rule_Remove(Rule_Monitor_Critical_Points)
else
g_FirstFailedCheck = true
end
else
g_FirstFailedCheck = false
end
end
function Rule_TurretAmbush1() -- If player gets close to the E slag deposit, port in the turrets if Player_AreSquadsNearMarker(g_Player1, "mkr_TriggerTurretAmbush1") then for i = 1, 4 do if not EGroup_IsEmpty("eg_AmbushTurret"..i) then Cmd_EGroupRelocateMarker("eg_AmbushTurret"..i, "mkr_EldarB_TurretTarget"..i, 5) end end
Rule_Remove(Rule_TurretAmbush1)
end
end
function Rule_TurretAmbush2() if Player_AreSquadsNearMarker(g_Player1, "mkr_TriggerTurretAmbush2") then for i = 5, 8 do if not EGroup_IsEmpty("eg_AmbushTurret"..i) then Cmd_EGroupRelocateMarker("eg_AmbushTurret"..i, "mkr_EldarB_TurretTarget"..i, 5) end end
Rule_Remove(Rule_TurretAmbush2)
end
end
function Rule_TurretAmbush3() if Player_AreSquadsNearMarker(g_Player1, "mkr_TriggerTurretAmbush3") then for i = 9, 12 do if not EGroup_IsEmpty("eg_AmbushTurret"..i) then Cmd_EGroupRelocateMarker("eg_AmbushTurret"..i, "mkr_EldarB_TurretTarget"..i, 5) end end
Rule_Remove(Rule_TurretAmbush3)
end
end
function Rule_TurretAmbush4() if Player_AreSquadsNearMarker(g_Player1, "mkr_TriggerTurretAmbush4") then for i = 13, 18 do if not EGroup_IsEmpty("eg_AmbushTurret"..i) then Cmd_EGroupRelocateMarker("eg_AmbushTurret"..i, "mkr_EldarB_TurretTarget"..i, 5) end end
Rule_Remove(Rule_TurretAmbush4)
end
end
function Rule_TurretAmbush5() if Player_AreSquadsNearMarker(g_Player1, "mkr_TriggerTurretAmbush5") then for i = 19, 23 do if not EGroup_IsEmpty("eg_AmbushTurret"..i) then Cmd_EGroupRelocateMarker("eg_AmbushTurret"..i, "mkr_EldarB_TurretTarget"..i, 5) end end
Rule_Remove(Rule_TurretAmbush5)
end
end
function Rule_TurretAmbush6() if Player_AreSquadsNearMarker(g_Player1, "mkr_TriggerTurretAmbush6") then for i = 24, 28 do if not EGroup_IsEmpty("eg_AmbushTurret"..i) then Cmd_EGroupRelocateMarker("eg_AmbushTurret"..i, "mkr_EldarB_TurretTarget"..i, 5) end end
Rule_Remove(Rule_TurretAmbush6)
end
end
--[[ win loss ]]
function Rule_EndGame_Win()
if g_FinalTimer == 0 or EGroup_IsEmpty("eg_EldarCriticalStructures") then
Rule_Remove(Rule_EndGameLose)
g_PlayerWins = true
Util_StartNIS( EVENTS.NIS_Outro )
Rule_Remove( Rule_EndGame_Win )
end
end
function Rule_EndGameLose()
g_building_exceptions =
{
}
g_unit_exceptions =
{
}
--[[ Lose because of Annihilation ]]
if( Player_HasBuildingsExcept(g_Player1, g_building_exceptions) == false ) then
if( Player_HasSquadsExcept(g_Player1, g_unit_exceptions ) == false ) then
Rule_RemoveAll()
Fade_Start(4, false)
World_SetTeamWin( g_enemy, "" )
Rule_AddIntervalEx( Rule_GameOver,5,1 )
Rule_Remove( Rule_EndGameLose )
Rule_Remove( Rule_EndGame_Win )
end
end
end
--[[ call this with an interval to ensure the mission ends ]] function Rule_GameOver() World_SetGameOver() end
-- Dialogue
function Rule_Intro1()
Util_StartIntel(EVENTS.IE_Global_Intro)
end
function Rule_OrkAttackDialogue()
Util_StartIntel(EVENTS.IE_Global_OrkAttack)
end
function Rule_SquiggothDialogue()
Util_StartIntel(EVENTS.IE_Global_Squiggoth)
Util_WXP_ObjectiveCreate(Objective_Free_Squiggoths, false, g_Player1)
if not Rule_Exists(Rule_ButtonObjectiveShow) then
Rule_AddIntervalDelay(Rule_ButtonObjectiveShow, 2, 5)
end
--Objective_ShowScreen()
g_ping_squiggoths = Objective_PingMarker(Objective_Free_Squiggoths.title_id, "mkr_Squiggoth1", true, "attack")
g_ping_squiggoths_mini = Ping_Marker("mkr_Squiggoth1", true, "attack")
Rule_AddOneShot(Rule_Stop_Squiggoths_Ping, 5)
FOW_RevealArea(-18, 143, 50, 30)
end
function Rule_OrkDeadDialogue()
if not g_PlayerWins then
Util_StartIntel(EVENTS.IE_Global_OrkDead)
end
end
function Rule_ChaosDeadDialogue()
if not g_PlayerWins then
Util_StartIntel(EVENTS.IE_Global_ChaosDead)
end
end
function Rule_EldarDeadDialogue()
if not g_PlayerWins then
Util_StartIntel(EVENTS.IE_Global_EldarDead)
end
end
function Rule_EldarRallyDialogue()
if not g_PlayerWins then
Util_StartIntel(EVENTS.IE_Global_EldarRally)
end
end
function Rule_CritCap1Dialogue()
if not g_PlayerWins then
Util_StartIntel(EVENTS.IE_Global_CriticalCapture1)
end
end
function Rule_CritCap2Dialogue()
if not g_PlayerWins then
Util_StartIntel(EVENTS.IE_Global_CriticalCapture2)
end
end
function Rule_CritCap3Dialogue()
if not g_PlayerWins then
Util_StartIntel(EVENTS.IE_Global_CriticalCapture3)
end
end
function Rule_TwoMinuteWarningDialogue()
if not g_PlayerWins then
Util_StartIntel(EVENTS.IE_Global_TwoMinuteWarning)
end
end
function Rule_Intro2() if not g_PlayerWins then if humanplayer == "chaos_marine_race" then
Util_StartIntel(EVENTS.IE_Chaos_Intro)
elseif humanplayer == "guard_race" then
Util_StartIntel(EVENTS.IE_IG_Intro)
elseif humanplayer == "ork_race" then
Util_StartIntel(EVENTS.IE_Ork_Intro)
elseif humanplayer =="space_marine_race" then
Util_StartIntel(EVENTS.IE_SM_Intro)
elseif humanplayer == "tau_race" then
Util_StartIntel(EVENTS.IE_Tau_Intro)
elseif humanplayer == "necron_race" then
Util_StartIntel(EVENTS.IE_Necron_Intro)
end
end
end
function Rule_OrkAttackDialogue2() if not g_PlayerWins then if humanplayer == "chaos_marine_race" then
Util_StartIntel(EVENTS.IE_Chaos_OrkAttack)
elseif humanplayer == "guard_race" then
Util_StartIntel(EVENTS.IE_IG_OrkAttack)
elseif humanplayer == "ork_race" then
Util_StartIntel(EVENTS.IE_Ork_OrkAttack)
elseif humanplayer =="space_marine_race" then
Util_StartIntel(EVENTS.IE_SM_OrkAttack)
elseif humanplayer == "tau_race" then
Util_StartIntel(EVENTS.IE_Tau_OrkAttack)
elseif humanplayer == "necron_race" then
Util_StartIntel(EVENTS.IE_Necron_OrkAttack)
end
end
end
function Rule_ForwardBaseDialogue() if not g_PlayerWins then if humanplayer == "chaos_marine_race" then
Util_StartIntel(EVENTS.IE_Chaos_ForwardBase)
elseif humanplayer == "guard_race" then
Util_StartIntel(EVENTS.IE_IG_ForwardBase)
elseif humanplayer == "ork_race" then
Util_StartIntel(EVENTS.IE_Ork_ForwardBase)
elseif humanplayer =="space_marine_race" then
Util_StartIntel(EVENTS.IE_SM_ForwardBase)
elseif humanplayer == "tau_race" then
Util_StartIntel(EVENTS.IE_Tau_ForwardBase)
elseif humanplayer == "necron_race" then
Util_StartIntel(EVENTS.IE_Necron_ForwardBase)
end
end
end
function Rule_ChaosTauntDialogue() if not g_PlayerWins then if humanplayer == "chaos_marine_race" then
Util_StartIntel(EVENTS.IE_Chaos_ChaosTaunt)
elseif humanplayer == "guard_race" then
Util_StartIntel(EVENTS.IE_IG_ChaosTaunt)
elseif humanplayer == "ork_race" then
Util_StartIntel(EVENTS.IE_Ork_ChaosTaunt)
elseif humanplayer =="space_marine_race" then
Util_StartIntel(EVENTS.IE_SM_ChaosTaunt)
elseif humanplayer == "tau_race" then
Util_StartIntel(EVENTS.IE_Tau_ChaosTaunt)
elseif humanplayer == "necron_race" then
Util_StartIntel(EVENTS.IE_Necron_ChaosTaunt)
end
end
end
function Rule_WestReinforcementDialogue() if not g_PlayerWins then if humanplayer == "chaos_marine_race" then
Util_StartIntel(EVENTS.IE_Chaos_WestReinforcements)
elseif humanplayer == "guard_race" then
Util_StartIntel(EVENTS.IE_IG_WestReinforcements)
elseif humanplayer == "ork_race" then
Util_StartIntel(EVENTS.IE_Ork_WestReinforcements)
elseif humanplayer =="space_marine_race" then
Util_StartIntel(EVENTS.IE_SM_WestReinforcements)
elseif humanplayer == "tau_race" then
Util_StartIntel(EVENTS.IE_Tau_WestReinforcements)
elseif humanplayer == "necron_race" then
Util_StartIntel(EVENTS.IE_Necron_WestReinforcements)
end
end
end
function Rule_EastReinforcementDialogue() if not g_PlayerWins then if humanplayer == "chaos_marine_race" then
Util_StartIntel(EVENTS.IE_Chaos_EastReinforcements)
elseif humanplayer == "guard_race" then
Util_StartIntel(EVENTS.IE_IG_EastReinforcements)
elseif humanplayer == "ork_race" then
Util_StartIntel(EVENTS.IE_Ork_EastReinforcements)
elseif humanplayer =="space_marine_race" then
Util_StartIntel(EVENTS.IE_SM_EastReinforcements)
elseif humanplayer == "tau_race" then
Util_StartIntel(EVENTS.IE_Tau_EastReinforcements)
elseif humanplayer == "necron_race" then
Util_StartIntel(EVENTS.IE_Necron_EastReinforcements)
end
end
end
function Rule_MoreReinforcementDialogue() if not g_PlayerWins then if humanplayer == "chaos_marine_race" then
Util_StartIntel(EVENTS.IE_Chaos_MoreReinforcements)
elseif humanplayer == "guard_race" then
Util_StartIntel(EVENTS.IE_IG_MoreReinforcements)
elseif humanplayer == "ork_race" then
Util_StartIntel(EVENTS.IE_Ork_MoreReinforcements)
elseif humanplayer =="space_marine_race" then
Util_StartIntel(EVENTS.IE_SM_MoreReinforcements)
elseif humanplayer == "tau_race" then
Util_StartIntel(EVENTS.IE_Tau_MoreReinforcements)
elseif humanplayer == "necron_race" then
Util_StartIntel(EVENTS.IE_Necron_MoreReinforcements)
end
end
end
function Rule_FinalAttackDialogue() SGroup_SetHealthInvulnerable("sg_Farseer", false)
if not g_PlayerWins then
if humanplayer == "chaos_marine_race" then
Util_StartIntel(EVENTS.IE_Chaos_FinalAttack)
elseif humanplayer == "guard_race" then
Util_StartIntel(EVENTS.IE_IG_FinalAttack)
elseif humanplayer == "ork_race" then
Util_StartIntel(EVENTS.IE_Ork_FinalAttack)
elseif humanplayer =="space_marine_race" then
Util_StartIntel(EVENTS.IE_SM_FinalAttack)
elseif humanplayer == "tau_race" then
Util_StartIntel(EVENTS.IE_Tau_FinalAttack)
elseif humanplayer == "necron_race" then
Util_StartIntel(EVENTS.IE_Necron_FinalAttack)
end
end
end
--[[Timer ]]
function Rule_Add_Timer()
UI_ShowCountDXP("Timer", g_Player1, 2774601, g_Timer )
Rule_AddInterval(Rule_Increment_Timer, 60)
end
function Rule_Increment_Timer()
g_Timer = g_Timer +1
UI_ShowCountUpdateDxp("Timer", g_Timer, 2774601)
end
function Rule_Game_Win_Timer()
UI_ShowCountDXP( "FinalTimer", g_Player1, 2599990, g_FinalTimer )
Rule_AddInterval( Rule_Decrement_Timer, 60)
end
function Rule_Decrement_Timer()
g_FinalTimer = g_FinalTimer - 1
local n_AvatarAttack = 1 + math.floor ((g_Difficulty - g_DBase) * ((3 - 1) / (g_DMax - g_DBase)))
if g_FinalTimer == n_AvatarAttack then
Rule_AddOneShot( Rule_TwoMinuteWarningDialogue, 0 )
if not SGroup_IsEmpty("sg_Avatar") then
Cmd_AttackMoveMarker( "sg_Avatar", "mkr_CriticalPoint03" )
end
end
if not (g_FinalTimer == 1) then
UI_ShowCountUpdateDxp("FinalTimer", g_FinalTimer, 2599990)
else
UI_ShowCountUpdateDxp("FinalTimer", g_FinalTimer, 2599991)
end
end