Mission event file for Eldar Stronghold mission
गाइड
/
Mission event file for Eldar Stronghold mission
अपडेट किया गया 3 years ago से Merric

--[[ 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

गेम विवरण
फॉलोअर्स
52
दौड़
138
खिलाड़ियों
16
ताज़ा धागे
पोस्ट किया गया 5 years ago
2 जवाब
पोस्ट किया गया 5 years ago
3 जवाब
पोस्ट किया गया 5 years ago
35 जवाब
पोस्ट किया गया 5 years ago
6 जवाब
पोस्ट किया गया 5 years ago
10 जवाब
पोस्ट किया गया 5 years ago
4 जवाब
मॉडरेटर्स