Mission event file for Vandea Coast special mission
Guides
/
Mission event file for Vandea Coast special mission
Updated 3 years ago by Merric

--[[ IMPORTS ]]

import("ScarUtil.scar") import("WXPScarUtil.scar")


--[[ TO DO ]]

-- IN THE MISSION BRIEFING, HINT TO THE PLAYER THAT THEY WILL NEED TO USE SKULL PROBES/DETECTION UNITS EQUIVALENT FOR THEIR RACE. They were not used much in the previous games, and the stealth suits are abundant here. -- if random attack guys suffer certain casualties, they will retreat, hoping to lure the player back so that they can ambush them or hit them with reinforcements


--[[ GAME SETUP ]]

--[[ the OnGameSetup() function is mandatory! ]] function OnGameSetup()

g_attacker_race = MetaMap_GetAttackerRaceName()
g_defender_race = MetaMap_GetDefenderRaceName()
g_player_race = MetaMap_GetPlayerRaceName() 

print("attacker race = "..g_attacker_race)
print("defender race = "..g_defender_race)

g_territory_index = MetaMap_GetDefendingTerritoryIndex()

--check for player vs CPU -- used in the enemy creation functions!
if g_player_race == g_attacker_race then
	
	g_cpu_player_race = g_defender_race
	
	g_defender_strength = MetaMap_GetTerritoryMilitaryStrength(MetaMap_GetDefendingTerritoryIndex())
	
	print("defender military strength = "..g_defender_strength)
	
	g_cpu_strength = g_defender_strength
	
elseif g_player_race == g_defender_race then
	
	g_cpu_player_race = g_attacker_race
	
	g_attacker_strength = MetaMap_GetTerritoryMilitaryStrength(MetaMap_GetAttackingTerritoryIndex())
	
	print("attacker military strength = "..g_attacker_strength)
	
	g_cpu_strength = g_attacker_strength
	
end



--[[defining the name of the player's faction]]
if g_player_race == "chaos_marine_race" then
	
	factionname = "$690014"
	g_team_color = "default_1"
	
	g_Player1 = Setup_Player(0, factionname, g_player_race, 1) 
	Misc_PlayerTeamColor(g_Player1, g_team_color)
	
elseif g_player_race == "eldar_race" then

	factionname = "$690012"
	g_team_color = "default_5"
	
	g_Player1 = Setup_Player(0, factionname, g_player_race, 1) 
	Misc_PlayerTeamColor(g_Player1, g_team_color)
	
elseif g_player_race == "guard_race" then

	factionname = "$690011"
	g_team_color = "liberators"
	g_Player1 = Setup_Player(0, factionname, g_player_race, 1) 

elseif g_player_race == "ork_race" then

	factionname = "$690013"
	g_team_color = "default_4"	
	
	g_Player1 = Setup_Player(0, factionname, g_player_race, 1) 
	Misc_PlayerTeamColor(g_Player1, g_team_color)

elseif g_player_race == "space_marine_race" then

	factionname = "$690010"
	g_team_color = "default_0"
	g_Player1 = Setup_Player(0, factionname, g_player_race, 1) 
	
elseif g_player_race == "tau_race" then
	
	factionname = "$690015"
	g_team_color = "default_1"
	g_Player1 = Setup_Player(0, factionname, g_player_race, 1) 
	
elseif g_player_race == "necron_race" then

	factionname = "$690016"
	g_team_color = "default_1"
	g_Player1 = Setup_Player(0, factionname, g_player_race, 1) 
		
end


	--[[defining the name of the enemy's faction]]
if g_cpu_player_race == "chaos_marine_race" then
	
	enemy_factionname = "$690014"
	--Here we can define a string that will carry the team colour setting needed.  (i.e.  "default_2", etc.)
	g_cpu_team_color = "default_1"
	
	g_Player2 = Setup_Player(1, enemy_factionname, g_cpu_player_race, 2) 
	g_Player3 = Setup_Player(2, enemy_factionname, g_cpu_player_race, 2) 
	g_Player4 = Setup_Player(3, enemy_factionname, g_cpu_player_race, 2) 
	
	Misc_PlayerTeamColor(g_Player2, g_cpu_team_color)
	Misc_PlayerTeamColor(g_Player3, g_cpu_team_color)
	Misc_PlayerTeamColor(g_Player4, g_cpu_team_color)
	
elseif g_cpu_player_race == "eldar_race" then
	
	enemy_factionname = "$690012"
	g_cpu_team_color = "default_5"
	
	g_Player2 = Setup_Player(1, enemy_factionname, g_cpu_player_race, 2) 
	g_Player3 = Setup_Player(2, enemy_factionname, g_cpu_player_race, 2) 
	g_Player4 = Setup_Player(3, enemy_factionname, g_cpu_player_race, 2) 
	
	Misc_PlayerTeamColor(g_Player2, g_cpu_team_color)
	Misc_PlayerTeamColor(g_Player3, g_cpu_team_color)
	Misc_PlayerTeamColor(g_Player4, g_cpu_team_color)
	
elseif g_cpu_player_race == "guard_race" then
	
	enemy_factionname = "$690011"
	g_cpu_team_color = "liberators"
	
	g_Player2 = Setup_Player(1, enemy_factionname, g_cpu_player_race, 2) 
	g_Player3 = Setup_Player(2, enemy_factionname, g_cpu_player_race, 2) 
	g_Player4 = Setup_Player(3, enemy_factionname, g_cpu_player_race, 2) 
	
elseif g_cpu_player_race == "ork_race" then
	
	enemy_factionname = "$690013"
	g_cpu_team_color = "default_4"
	
	g_Player2 = Setup_Player(1, enemy_factionname, g_cpu_player_race, 2) 
	g_Player3 = Setup_Player(2, enemy_factionname, g_cpu_player_race, 2) 
	g_Player4 = Setup_Player(3, enemy_factionname, g_cpu_player_race, 2) 
	
	Misc_PlayerTeamColor(g_Player2, g_cpu_team_color)
	Misc_PlayerTeamColor(g_Player3, g_cpu_team_color)
	Misc_PlayerTeamColor(g_Player4, g_cpu_team_color)
	
elseif g_cpu_player_race == "space_marine_race" then
	
	enemy_factionname = "$690010"
	g_cpu_team_color = "default_0"
	
	g_Player2 = Setup_Player(1, enemy_factionname, g_cpu_player_race, 2) 
	g_Player3 = Setup_Player(2, enemy_factionname, g_cpu_player_race, 2) 
	g_Player4 = Setup_Player(3, enemy_factionname, g_cpu_player_race, 2) 
	
elseif g_cpu_player_race == "tau_race" then
	
	enemy_factionname = "$690015"
	g_cpu_team_color = "default_1"
	
	g_Player2 = Setup_Player(1, enemy_factionname, g_cpu_player_race, 2) 
	g_Player3 = Setup_Player(2, enemy_factionname, g_cpu_player_race, 2) 
	g_Player4 = Setup_Player(3, enemy_factionname, g_cpu_player_race, 2) 
	
elseif g_cpu_player_race == "necron_race" then
	
	enemy_factionname = "$690016"
	g_cpu_team_color = "default_1"
	
	g_Player2 = Setup_Player(1, enemy_factionname, g_cpu_player_race, 2) 
	g_Player3 = Setup_Player(2, enemy_factionname, g_cpu_player_race, 2) 
	g_Player4 = Setup_Player(3, enemy_factionname, g_cpu_player_race, 2) 
	
end



--g_Player1 = Setup_Player(0, factionname, g_player_race, 1) 


--g_Player2 = Setup_Player(1, enemy_factionname, g_cpu_player_race, 2) 
--Misc_PlayerTeamColor(g_Player2, g_cpu_team_color)

--g_Player3 = Setup_Player(2, enemy_factionname, g_cpu_player_race, 2) 
--Misc_PlayerTeamColor(g_Player3, g_cpu_team_color)

--g_Player4 = Setup_Player(3, enemy_factionname, g_cpu_player_race, 2) 
--Misc_PlayerTeamColor(g_Player4, g_cpu_team_color)

g_Player5 = Setup_Player(4, "$2703040", g_cpu_player_race, 2) 
--Misc_PlayerTeamColor(g_Player5, g_cpu_team_color)

g_Player6 = Setup_Player(5, "$2703050", g_cpu_player_race, 2) 
--Misc_PlayerTeamColor(g_Player6, g_cpu_team_color)
--[[
g_Player7 = Setup_Player(6, "$2703060", g_cpu_player_race, 2) 
Misc_PlayerTeamColor(g_Player7, g_cpu_team_color)

g_Player8 = Setup_Player(7, "$2703070", g_cpu_player_race, 2)
Misc_PlayerTeamColor(g_Player8, g_cpu_team_color)]]

-- forces the team colours to automatically switch when the team itself switches sides
Misc_ForceAutoSwitchTeamColor (g_Player1, true) 	
Misc_ForceAutoSwitchTeamColor (g_Player2, true) 

Misc_ForceAutoSwitchTeamColor (g_Player3, true) 
Misc_ForceAutoSwitchTeamColor (g_Player4, true) 

Misc_ForceAutoSwitchTeamColor (g_Player5, true) 
Misc_ForceAutoSwitchTeamColor (g_Player6, true) 
--[[
Misc_ForceAutoSwitchTeamColor (g_Player7, true) 
Misc_ForceAutoSwitchTeamColor (g_Player8, true) ]]


g_firstrun = true

g_player_thermo_generator_type = ""

g_Player1_thermo_count = 0
g_Player2_thermo_count = 0
g_Player3_thermo_count = 0
g_Player4_thermo_count = 0
g_Player5_thermo_count = 0
g_Player6_thermo_count = 0
g_Player7_thermo_count = 0
g_Player8_thermo_count = 0


g_countdown_initiated = false


g_Player1_countdown_started = false
g_Player2_countdown_started = false

g_Player1_power = 0
g_Player2_power = 0
g_Player3_power = 0
g_Player4_power = 0
g_Player5_power = 0
g_Player6_power = 0

g_player_fail = false

g_total_enemy_power = 0
g_total_enemy_power_rounded = 0

g_enemy_players_on_map =MetaMap_GetTerritoryOpponentCount(g_territory_index) -- currently a hard limit we're going to use, according to spec

t_Enemy_Players = {g_Player2, g_Player3, g_Player4, g_Player5, g_Player6, g_Player7, g_Player8} -- just in case we need up to player 8
t_Enemy_Players_Index = {0, 1, 2, 3, 4, 5, 6, 7}

--g_player2_defeated = false
--g_player3_defeated = false
--g_player4_defeated = false


g_player_defeated = {false, false, false, false, false}


g_player_win_count = 0

g_updated_figure = 0



t_player_building_count = {}

-- coordinates for enemy barracks
t_Forwardpos = {}
t_enemy_barracks_potential = {}
t_necron_potential_portable_monolith = {}
t_barracks_defined = {false, false, false}

--strength variables used for difficulty tuning.  Tied in with g_defender_strength
g_DBASE = 1
g_DMAX = 10


--tuning variable
g_difficulty = g_defender_strength


--difficulty defense size tuning
g_goal_TBASE = 20
g_goal_TMAX = 80
g_goal_adjustment = g_goal_TBASE + math.floor((g_difficulty - g_DBASE) * ((g_goal_TMAX - g_goal_TBASE)/ (g_DMAX - g_DBASE)))


end

--[[ the OnGameRestore() function is mandatory!, this will only get called after loading a game ]] function OnGameRestore() --Rule_AddOneShot(Rule_GameRestore, 1) end

function OnLoad()

FOW_Reset()

end

Scar_AddLoad(OnLoad)


--[[ 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! ]]
Rule_SetResearchLevel( 4 )

--[[ NIS PRESETS - turn off event cues, set the viewable space to black (faded out) and preset letterboxing ]]

-- EventCue_Enable(false) -- Fade_Start( 0, false ) -- W40k_Letterbox( true, 0 )

--[[ START THE MUSIC - call the function to load the jukebox with tunes]]
Rule_Start_Music()

--[[ SET 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 ]]
--Util_StartNIS( EVENTS.NIS_Opening ) 	

--Rule_AddOneShot(Rule_IE_OpeningSpeech, 0)

--[[ GET THE START PLAY MISSION READY TO ROLL ]]
Rule_Add( Rule_GameStart )	

--[[ Define the OBJECTIVES ]]

-- Objective_TakeOverClanHeadCrushazBase = {title_id = 871000, short_desc_id = 871002, help_tip_id = 871004}

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 )

--[[ DoW Specific!! Restrict_SpaceMarines( g_Player1, resLevel ) Unrestrict_ResearchWithAlerts( g_Player1, "marine_requisition_research_2", "none", "none" ) Unrestrict_ResearchWithAlerts( g_Player1, "marine_power_research_2", "none", "none" ) ]]

end


--[[ MUSIC ]]

function Rule_Start_Music()

--set the music table based on the players race

if MetaMap_GetPlayerRaceName()  == "chaos_marine_race" then
	
	t_music = {        "MU_IG_STR_Chaos_perc_brass", "MU_IG_STR_Chaos", "MU_IG_STR_Chaos_perc", 
		"MU_IG_STR_Chaos_perc_str", "MU_IG_STR_Chaos_perc_voice"}
		
elseif MetaMap_GetPlayerRaceName()  == "eldar_race" then
	
	t_music = {        "MU_IG_STR_Eldar_perc_brass", "MU_IG_STR_Eldar", "MU_IG_STR_Eldar_perc", 
		"MU_IG_STR_Eldar_perc_str"}
		
elseif MetaMap_GetPlayerRaceName()  == "guard_race" then
	
	t_music = {        "MU_IG_STR_ImpGd_perc_brass", "MU_IG_STR_ImpGd", "MU_IG_STR_ImpGd_perc", 
		"MU_IG_STR_ImpGd_perc_str", "MU_IG_STR_ImpGd_perc_voice"}
		
elseif MetaMap_GetPlayerRaceName()  == "ork_race" then
	
	t_music = {        "MU_IG_STR_Ork_perc_brass", "MU_IG_STR_Ork", "MU_IG_STR_Ork_perc", 
		"MU_IG_STR_Ork_perc_str"}
	
elseif MetaMap_GetPlayerRaceName()  == "space_marine_race" then
	
	t_music = {        "MU_IG_STR_SpaceMarine_perc_brass", "MU_IG_STR_SpaceMarine", "MU_IG_STR_SpaceMarine_perc", 
		"MU_IG_STR_SpaceMarine_perc_str"}
	
elseif MetaMap_GetPlayerRaceName()  == "tau_race" then
	
	t_music = {        "MU_IG_STR_Tau_perc_brass", "MU_IG_STR_Tau", "MU_IG_STR_Tau_perc", 
		"MU_IG_STR_Tau_perc_str"}
	
elseif MetaMap_GetPlayerRaceName()  == "necron_race" then
	
	t_music = {        "MU_IG_STR_Necron_perc_brass", "MU_IG_STR_Necron", "MU_IG_STR_Necron_brass", 
		"MU_IG_STR_Necron_perc"}
	
end


Playlist_Manager( PC_Music, t_music, true, true , {2, 4})

t_ambient_sound = {"ambient_space"}

--Sound_PlaylistClear(PC_Music)
Playlist_Manager( PC_Ambient, t_ambient_sound, true, true , {0, 15})

end


--[[ PRESET AI ]]

function Rule_PresetAI()

Cpu_EnableAll(true)	

	

end


--[[ START PLAY ]]

--[[ NOW TO KICK OFF THE ACTUAL MISSION ONCE THE OPENING NIS IS DONE ]]

function Rule_GameStart()

if g_firstrun then
	
	
	--[[ set resources ]]
	--Player_SetAllResources(g_Player1, 1000, 100)
	
	--[[
	Player_SetAllResources(g_Player2, 1000, 100) -- we can disable 2-8 if needed
	Player_SetAllResources(g_Player3, 1000, 100)
	Player_SetAllResources(g_Player4, 1000, 100)
	Player_SetAllResources(g_Player5, 1000, 100)
	Player_SetAllResources(g_Player6, 1000, 100)]]
	
	--[[
	Player_SetAllResources(g_Player7, 2000, 750)
	Player_SetAllResources(g_Player8, 2000, 750)]]
	
	
	
	--[[ 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()
	

	--[[ Mechanics in Motion]]
	--Rule_AddIntervalDelay(Rule_Thermo_Count, 1, 2)
	--Rule_AddIntervalDelay(Rule_Countdown_Timer_Activation, 1, 2) -- kicks off timer and countdown
	--Rule_AddIntervalDelay(Rule_Power_Counter_Display, 1, 1)
	
	--[[Starts Player Army and Ork Army]]
	Rule_AddOneShot(Rule_Calculate_Strength_And_Numbers, 0)
	Rule_AddOneShot(Rule_Attacker_Defender, 1)
	
	g_firstrun = false
	
	
elseif Event_IsAnyRunning() == false then		
	
	--Rule_AddOneShot(TeamSwitchTest, 60)
	
	Rule_AddIntervalDelay(Rule_Check_Enemy, 1, 11)
	
	--[[ Set up a Win Check ]]
	Rule_AddIntervalDelay(Rule_EndGameWin, 1, 10)
	
	--[[ Set up a Lose Check ]]
	Rule_AddIntervalDelay(Rule_EndGameLose, 1, 10)
	
	--[[ Assigning objectives]]

	--Rule_AddInterval(Rule_Objective_Build_Thermo, 1)
	
	--Rule_AddOneShot(Rule_Power_Count_Objective_Variation, 3) -- kicks off objective variations
	--Rule_AddOneShot(Rule_Countdown_Timer_Activation, 5) -- kicks off timer and countdown and objectives
	
	
	
	
	-- The following sets it up so that the triggers for the objectives are activated

			
	--[[ Clean up ]]
	Rule_Remove(Rule_GameStart)
	
end

end


--[[ DIFFICULTY ]]

function Rule_SetDifficultyLevel( difficultyLevel )

--Difficulty_SetForAll( difficultyLevel )



--[[ Types of things that can me done include: a) adding resource values b) changing variables for the number of starting units a player recieves b) or even activating new objectives (although we refrained from this in DoW as the increased testing requirements it dictates)]]

-- easy
if difficultyLevel == DIFFICULTY_EASY then

-- Cpu_SetDifficulty( g_Player2, AD_Standard ) -- medium elseif difficultyLevel == DIFFICULTY_NORMAL then -- hard elseif difficultyLevel == DIFFICULTY_HARD then end

--]]

end


--[[ AI ]]

function Rule_StartAI()

Cpu_EnableAll(true)	

end

function Rule_Calculate_Strength_And_Numbers()

for a = 1, g_enemy_players_on_map do
	print(t_Enemy_Players_Index[a])
	Cpu_SetDifficultyForDummies( t_Enemy_Players[a], MetaMap_GetTerritoryOpponentDifficulty(g_territory_index, t_Enemy_Players_Index[a]))
end

--print("player 2 strength: "..Cpu_GetDifficulty(g_Player2))
--print("player 3 strength: "..Cpu_GetDifficulty(g_Player3))
--print("player 4 strength: "..Cpu_GetDifficulty(g_Player4))

--sets AI difficulty and number.  First, it determines the number of AI players that should be present, and then sets their AI strength accordingly
--[[
if g_cpu_strength >= 0 and g_cpu_strength <=2 then
	
	g_enemy_players_on_map = 1
	g_countdown_timer = 1200
	
	if g_cpu_strength == 1 or g_cpu_strength == 0 then
		
		Cpu_SetDifficultyForDummies( g_Player2, AD_Easy)
		
	elseif g_cpu_strength == 2 then
		
		Cpu_SetDifficultyForDummies( g_Player2, AD_Standard)
		
	end
	
elseif g_cpu_strength >= 3 and g_cpu_strength <=4 then
	
	g_enemy_players_on_map = 2
	g_countdown_timer = 1800
	
	if g_cpu_strength == 3 then
		
		Cpu_SetDifficultyForDummies( g_Player2, AD_Hard)
		Cpu_SetDifficultyForDummies( g_Player3, AD_Easy)
		
	elseif g_cpu_strength == 4 then
		
		Cpu_SetDifficultyForDummies( g_Player2, AD_Hard)
		Cpu_SetDifficultyForDummies( g_Player3, AD_Standard)
		
	end
	
elseif g_cpu_strength >= 5 and g_cpu_strength <= 6 then
	
	g_enemy_players_on_map = 3
	g_countdown_timer = 2400
	
	if g_cpu_strength == 5 then
		
		Cpu_SetDifficultyForDummies( g_Player2, AD_Hard)
		Cpu_SetDifficultyForDummies( g_Player3, AD_Hard)
		Cpu_SetDifficultyForDummies( g_Player4, AD_Easy)
		
	elseif g_cpu_strength == 6 then
		
		Cpu_SetDifficultyForDummies( g_Player2, AD_Hard)
		Cpu_SetDifficultyForDummies( g_Player3, AD_Hard)
		Cpu_SetDifficultyForDummies( g_Player4, AD_Standard)
		
	end
	
elseif g_cpu_strength >= 7 and g_cpu_strength <= 8 then
	
	g_enemy_players_on_map = 4
		g_countdown_timer = 3000
	
	if g_cpu_strength == 7 then
		
		Cpu_SetDifficultyForDummies( g_Player2, AD_Hard)
		Cpu_SetDifficultyForDummies( g_Player3, AD_Hard)
		Cpu_SetDifficultyForDummies( g_Player4, AD_Hard)
		Cpu_SetDifficultyForDummies( g_Player5, AD_Easy)
		
	elseif g_cpu_strength == 8 then
		
		Cpu_SetDifficultyForDummies( g_Player2, AD_Hard)
		Cpu_SetDifficultyForDummies( g_Player3, AD_Hard)
		Cpu_SetDifficultyForDummies( g_Player4, AD_Hard)
		Cpu_SetDifficultyForDummies( g_Player5, AD_Easy)
		
	end
	
	
elseif g_cpu_strength >= 9 then
	
	g_enemy_players_on_map = 5
	g_countdown_timer = 3600
	
	Cpu_SetDifficultyForDummies( g_Player2, AD_Hard)
	Cpu_SetDifficultyForDummies( g_Player3, AD_Hard)
	Cpu_SetDifficultyForDummies( g_Player4, AD_Hard)
	Cpu_SetDifficultyForDummies( g_Player5, AD_Hard)
	Cpu_SetDifficultyForDummies( g_Player6, AD_Hard)
	
end]]

--Rule_AddOneShot(Rule_Power_Count_Objective_Variation, 0) -- 

end


--[[ CORE GAME ]]

function Rule_Attacker_Defender()

Rule_AddOneShot(Rule_Create_Player_Buildings_And_Squads, 1)
Rule_AddOneShot(Rule_Create_Enemies, 1)

end


--[[ PLAYER ARMY ]]

function Rule_Create_Player_Buildings_And_Squads()

MetaMap_UpdatePlayerWargear(g_Player1)

t_Player_Buildings ={

chaos_name = {"eg_player_HQ"},
chaos_building_blueprint = {"chaos_hq"},
chaos_marker_spawn = {"mkr_player_HQ"},
chaos_thermo_type = {"chaos_thermo_plasma_generator"},

eldar_name = {"eg_player_HQ"},
eldar_building_blueprint = {"eldar_hq"},
eldar_marker_spawn ={"mkr_player_HQ"}, 
eldar_thermo_type = {"eldar_advanced_warp_generator"},

guard_name = {"eg_player_HQ"},
guard_building_blueprint = {"guard_hq"}, 
guard_marker_spawn ={"mkr_player_HQ"},
guard_thermo_type = {"guard_plasma_generator"},

ork_name = {"eg_player_HQ"},
ork_building_blueprint = {"ork_hq"},
ork_marker_spawn ={"mkr_player_HQ"},
ork_thermo_type = {"ork_bigger_generator"},

marines_name = {"eg_player_HQ"},
marines_building_blueprint = {"space_marine_hq"},
marines_marker_spawn ={"mkr_player_HQ"},
marines_thermo_type = {"space_marine_thermo_generator"},

tau_name = {"eg_player_HQ"},
tau_building_blueprint = {"tau_hq"},
tau_marker_spawn= {"mkr_player_HQ"},
tau_thermo_type = {"tau_thermoplasma_generator"},

necron_name ={"eg_player_HQ"},
necron_building_blueprint = {"monolith"},
necron_marker_spawn = {"mkr_player_HQ"},
necron_thermo_type = {"necron_thermoplasma_generator"},

}

if g_player_race == "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)
	end
	
	Util_CreateSquadsAtMarkerEx(g_Player1, "sg_player_builder", "chaos_squad_slave", "mkr_builder_spawn" ,1, 1)
	
	
	g_player_thermo_generator_type = t_Player_Buildings.chaos_thermo_type[1]
	
elseif g_player_race == "eldar_race" then
	
	for i = 1, table.getn(t_Player_Buildings.eldar_name) do
		Entity_CreateBuildingMarker(g_Player1, t_Player_Buildings.eldar_name[i], t_Player_Buildings.eldar_building_blueprint[i], t_Player_Buildings.eldar_marker_spawn[i], 1)
	end
	
	Util_CreateSquadsAtMarkerEx(g_Player1, "sg_player_builder", "eldar_squad_bonesinger", "mkr_builder_spawn" ,1, 1)
	
	
	g_player_thermo_generator_type = t_Player_Buildings.eldar_thermo_type[1]
	
elseif g_player_race == "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)
	end
	
	Util_CreateSquadsAtMarkerEx(g_Player1, "sg_player_builder", "guard_squad_enginseer", "mkr_builder_spawn" ,1, 1)
	
	
	g_player_thermo_generator_type = t_Player_Buildings.guard_thermo_type[1]
	
elseif g_player_race == "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)
	end
	
	Util_CreateSquadsAtMarkerEx(g_Player1, "sg_player_builder", "ork_squad_grot", "mkr_builder_spawn" ,1, 1)
	
	
	g_player_thermo_generator_type = t_Player_Buildings.ork_thermo_type[1]
	
elseif g_player_race == "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)
	end
	
	Util_CreateSquadsAtMarkerEx(g_Player1, "sg_player_builder", "space_marine_squad_servitor", "mkr_builder_spawn" ,1, 1)
	
	
	g_player_thermo_generator_type = t_Player_Buildings.marines_thermo_type[1]
	
elseif g_player_race == "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)
	end
	
	Util_CreateSquadsAtMarkerEx(g_Player1, "sg_player_builder", "tau_builder_squad", "mkr_builder_spawn" ,1, 1)
	
	
	g_player_thermo_generator_type = t_Player_Buildings.tau_thermo_type[1]
	
elseif g_player_race == "necron_race" then
	
	for i = 1, table.getn(t_Player_Buildings.necron_name) do
		Entity_CreateBuildingMarker(g_Player1, t_Player_Buildings.necron_name[i], t_Player_Buildings.necron_building_blueprint[i], t_Player_Buildings.necron_marker_spawn[i], 1)
	end
	
	Util_CreateSquadsAtMarkerEx(g_Player1, "sg_player_builder", "necron_builder_scarab_squad", "mkr_builder_spawn" ,1, 1)
	
	
	g_player_thermo_generator_type = t_Player_Buildings.necron_thermo_type[1]
	
	
end

------------------------------------

--Creation of 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

	
--setting up the bonus units for the player
t_blueprintbonus = {}
MetaMap_GetRaceStartingSquadsList(g_player_race, 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

Rule_AddOneShot(Rule_Power_Count_Objective_Variation, 0)

Rule_Remove(Rule_Create_Player_Buildings_And_Squads)

end

function Rule_Create_Enemies()

t_Enemy_Buildings ={

chaos_name = {"eg_enemy_HQ"},
chaos_building_blueprint = {"chaos_hq"},
chaos_marker_spawn = {"mkr_enemy_HQ"},
chaos_thermo_type = {"chaos_thermo_plasma_generator"},
chaos_barracks = {"chaos_temple"},
chaos_fodder_type = {"chaos_marine_squad"},

eldar_name = {"eg_enemy_HQ"},
eldar_building_blueprint = {"eldar_hq"},
eldar_marker_spawn ={"mkr_enemy_HQ"}, 
eldar_thermo_type = {"eldar_advanced_warp_generator"},
eldar_barracks = {"eldar_aspect_portal"},
eldar_fodder_type = {"eldar_guardian_squad"},

guard_name = {"eg_enemy_HQ"},
guard_building_blueprint = {"guard_hq"}, 
guard_marker_spawn ={"mkr_enemy_HQ"},
guard_thermo_type = {"guard_plasma_generator"},
guard_barracks = {"guard_infantry"},
guard_fodder_type = {"guard_squad_guardsmen"},

ork_name = {"eg_enemy_HQ"},
ork_building_blueprint = {"ork_hq"},
ork_marker_spawn ={"mkr_enemy_HQ"},
ork_thermo_type = {"ork_bigger_generator"},
ork_barracks = {"ork_boy_hut"},
ork_fodder_type = {"ork_squad_slugga"},

marines_name = {"eg_enemy_HQ"},
marines_building_blueprint = {"space_marine_hq"},
marines_marker_spawn ={"mkr_enemy_HQ"},
marines_thermo_type = {"space_marine_thermo_generator"},
marines_barracks = {"space_marine_barracks"},
marines_fodder_type = {"space_marine_squad_tactical"},

tau_name = {"eg_enemy_HQ"},
tau_building_blueprint = {"tau_hq"},
tau_marker_spawn= {"mkr_enemy_HQ"},
tau_thermo_type = {"tau_thermoplasma_generator"},
tau_barracks = {"tau_barracks"},
tau_fodder_type = {"tau_fire_warrior_squad"},

necron_name ={"eg_enemy_HQ"},
necron_building_blueprint = {"monolith"},
necron_marker_spawn = {"mkr_enemy_HQ"},
necron_thermo_type = {"necron_thermoplasma_generator"},
necron_barracks = {"monolith"},
necron_fodder_type = {"necron_basic_warrior_squad"}

}

t_Enemy_Players = {g_Player2, g_Player3, g_Player4, g_Player5, g_Player6}

--use variable for CPU name instead! if g_cpu_player_race == "chaos_marine_race" then

	for i = 1, g_enemy_players_on_map do
		
		Entity_CreateBuildingMarker(t_Enemy_Players[i], "eg_enemy_hq"..i, t_Enemy_Buildings.chaos_building_blueprint[1], "mkr_enemy_hq"..i, 1)
		
		--Entity_CreateBuildingMarker(t_Enemy_Players[i], "eg_enemy_barracks"..i, t_Enemy_Buildings.chaos_barracks[1], "mkr_CL_barracks"..i, 1)
		
		Util_CreateSquadsAtMarkerEx(t_Enemy_Players[i], "sg_cpu_builder"..i, "chaos_squad_slave", "mkr_enemy_hq"..i ,1, 1)
		
	end
	
	g_enemy_barracks_type = t_Enemy_Buildings.chaos_barracks[1]
	g_enemy_fodder_type = t_Enemy_Buildings.chaos_fodder_type[1]
	
	g_booster_spawn_number = 1
	
	
	--unit size tuning
	g_booster_TBASE = 4
	g_booster_TMAX = 4
	g_booster_deployment_size = g_booster_TBASE + math.floor((g_difficulty - g_DBASE) * ((g_booster_TMAX - g_booster_TBASE)/ (g_DMAX - g_DBASE)))
	
	
elseif g_cpu_player_race== "eldar_race" then
	
	for i = 1, g_enemy_players_on_map do
		
		Entity_CreateBuildingMarker(t_Enemy_Players[i], "eg_enemy_hq"..i, t_Enemy_Buildings.eldar_building_blueprint[1], "mkr_enemy_hq"..i, 1)
		
		Entity_CreateBuildingMarker(t_Enemy_Players[i], "eg_enemy_barracks"..i, t_Enemy_Buildings.eldar_barracks[1], "mkr_CL_barracks"..i, 1)
		
		Util_CreateSquadsAtMarkerEx(t_Enemy_Players[i], "sg_cpu_builder"..i, "eldar_squad_bonesinger", "mkr_enemy_hq"..i ,1, 1)
		
	end
	
	g_enemy_barracks_type = t_Enemy_Buildings.eldar_barracks[1]
	g_enemy_fodder_type = t_Enemy_Buildings.eldar_fodder_type[1]
	
	g_booster_spawn_number = 1
	
		--unit size tuning
	g_booster_TBASE = 4
	g_booster_TMAX = 4
	g_booster_deployment_size = g_booster_TBASE + math.floor((g_difficulty - g_DBASE) * ((g_booster_TMAX - g_booster_TBASE)/ (g_DMAX - g_DBASE)))
	
elseif g_cpu_player_race == "guard_race" then
	
	for i = 1, g_enemy_players_on_map do
		
		Entity_CreateBuildingMarker(t_Enemy_Players[i], "eg_enemy_hq"..i, t_Enemy_Buildings.guard_building_blueprint[1], "mkr_enemy_hq"..i, 1)
		
		Entity_CreateBuildingMarker(t_Enemy_Players[i], "eg_enemy_barracks"..i, t_Enemy_Buildings.guard_barracks[1], "mkr_CL_barracks"..i, 1)
		
		Util_CreateSquadsAtMarkerEx(t_Enemy_Players[i], "sg_cpu_builder"..i, "guard_squad_enginseer", "mkr_enemy_hq"..i ,1, 1)
		
	end
	
	g_enemy_barracks_type = t_Enemy_Buildings.guard_barracks[1]
	g_enemy_fodder_type = t_Enemy_Buildings.guard_fodder_type[1]
	
	g_booster_spawn_number = 1
	
		--unit size tuning
	g_booster_TBASE = 5
	g_booster_TMAX = 5
	g_booster_deployment_size = g_booster_TBASE + math.floor((g_difficulty - g_DBASE) * ((g_booster_TMAX - g_booster_TBASE)/ (g_DMAX - g_DBASE)))
	
elseif g_cpu_player_race == "ork_race" then
	
	for i = 1, g_enemy_players_on_map do
		Entity_CreateBuildingMarker(t_Enemy_Players[i], "eg_enemy_hq"..i, t_Enemy_Buildings.ork_building_blueprint[1], "mkr_enemy_hq"..i, 1)
		
		Entity_CreateBuildingMarker(t_Enemy_Players[i], "eg_enemy_barracks"..i, t_Enemy_Buildings.ork_barracks[1], "mkr_CL_barracks"..i, 1)
		
		Util_CreateSquadsAtMarkerEx(t_Enemy_Players[i], "sg_cpu_builder"..i, "ork_squad_grot", "mkr_enemy_hq"..i ,1, 1)
		
	end
	
	g_enemy_barracks_type = t_Enemy_Buildings.ork_barracks[1]
	g_enemy_fodder_type = t_Enemy_Buildings.ork_fodder_type[1]
	
	g_booster_spawn_number = 1
	
	--unit size tuning
	g_booster_TBASE = 4
	g_booster_TMAX = 4
	g_booster_deployment_size = g_booster_TBASE + math.floor((g_difficulty - g_DBASE) * ((g_booster_TMAX - g_booster_TBASE)/ (g_DMAX - g_DBASE)))
	
	
elseif g_cpu_player_race == "space_marine_race" then
	
	for i = 1, g_enemy_players_on_map do
		
		Entity_CreateBuildingMarker(t_Enemy_Players[i], "eg_enemy_hq"..i, t_Enemy_Buildings.marines_building_blueprint[1], "mkr_enemy_hq"..i, 1)
		
		Entity_CreateBuildingMarker(t_Enemy_Players[i], "eg_enemy_barracks"..i, t_Enemy_Buildings.marines_barracks[1], "mkr_CL_barracks"..i, 1)
		
		Util_CreateSquadsAtMarkerEx(t_Enemy_Players[i], "sg_cpu_builder"..i, "space_marine_squad_servitor", "mkr_enemy_hq"..i ,1, 1)
		
	end
	
	g_enemy_barracks_type = t_Enemy_Buildings.marines_barracks[1]
	g_enemy_fodder_type = t_Enemy_Buildings.marines_fodder_type[1]
	
	g_booster_spawn_number = 1
	
	--unit size tuning
	g_booster_TBASE = 4
	g_booster_TMAX = 4
	g_booster_deployment_size = g_booster_TBASE + math.floor((g_difficulty - g_DBASE) * ((g_booster_TMAX - g_booster_TBASE)/ (g_DMAX - g_DBASE)))
	
elseif g_cpu_player_race == "tau_race" then
	
	for i = 1, g_enemy_players_on_map do
		
		Entity_CreateBuildingMarker(t_Enemy_Players[i], "eg_enemy_hq"..i, t_Enemy_Buildings.tau_building_blueprint[1], "mkr_enemy_hq"..i, 1)
		
		Entity_CreateBuildingMarker(t_Enemy_Players[i], "eg_enemy_barracks"..i, t_Enemy_Buildings.tau_barracks[1], "mkr_CL_barracks"..i, 1)
		
		Util_CreateSquadsAtMarkerEx(t_Enemy_Players[i], "sg_cpu_builder"..i, "tau_builder_squad", "mkr_enemy_hq"..i ,1, 1)
		
	end
	
	g_enemy_barracks_type = t_Enemy_Buildings.tau_barracks[1]
	g_enemy_fodder_type = t_Enemy_Buildings.tau_fodder_type[1]
	
	g_booster_spawn_number = 1
	
	--unit size tuning
	g_booster_TBASE = 4
	g_booster_TMAX = 4
	g_booster_deployment_size = g_booster_TBASE + math.floor((g_difficulty - g_DBASE) * ((g_booster_TMAX - g_booster_TBASE)/ (g_DMAX - g_DBASE)))
	
elseif g_cpu_player_race == "necron_race" then

	for i = 1, g_enemy_players_on_map do
		
		Entity_CreateBuildingMarker(t_Enemy_Players[i], "eg_enemy_hq"..i, t_Enemy_Buildings.necron_building_blueprint[1], "mkr_enemy_hq"..i, 1)
		
		--Entity_CreateBuildingMarker(t_Enemy_Players[i], "eg_enemy_barracks"..i, t_Enemy_Buildings.necron_barracks[1], "mkr_CL_barracks"..i, 1) -- Necron do not require barracks, they already have a monolith
		
		Util_CreateSquadsAtMarkerEx(t_Enemy_Players[i], "sg_cpu_builder"..i, "necron_bulder_scarab_squad", "mkr_enemy_hq"..i ,1, 1)
	end	
	
	g_enemy_barracks_type = t_Enemy_Buildings.necron_barracks[1]
	g_enemy_fodder_type = t_Enemy_Buildings.necron_fodder_type[1]
	
	g_booster_spawn_number = 1
	
	--unit size tuning
	g_booster_TBASE = 3
	g_booster_TMAX = 3
	g_booster_deployment_size = g_booster_TBASE + math.floor((g_difficulty - g_DBASE) * ((g_booster_TMAX - g_booster_TBASE)/ (g_DMAX - g_DBASE)))
	
end



Rule_AddOneShot(Rule_Create_Enemy_Bonus_Squads, 1)

Rule_AddIntervalDelay(Rule_Get_Enemy_Barracks, 2, 10)

end

function Rule_Create_Enemy_Bonus_Squads()

--setting up the bonus units for the player
t_cpu_blueprintbonus = {}
MetaMap_GetRaceStartingSquadsList(g_cpu_player_race, t_cpu_blueprintbonus)

for t = 1,  table.getn(t_cpu_blueprintbonus) do
		
	u = math.mod(t - 1, 6) + 1
	
	Util_CreateSquadsAtMarker(g_Player2, "sg_cpu_bonus"..t, t_cpu_blueprintbonus[t], "mkr_cpu_bonus"..u, 1)
	
	
end

end


--[[BASE DEFENDER CREATION]] -- These rules govern what happens when a base's defenses are activated via the Rule_Initiate_<name of clan> functions


--[[Gameplay]] -- Rules governing slag deposit count --[[ function Rule_Thermo_Count()

g_Player1_thermo_count = Player_GetBlueprintCount(g_Player1, g_player_thermo_generator_type)

--g_Player2_thermo_count = Player_GetBlueprintCount(g_Player2, g_player_thermo_generator_type)

g_Player2_thermo_count = Player_GetBlueprintCount(g_Player2, t_Player_Buildings.ork_thermo_type[1])
--[[
g_Player3_thermo_count = Player_GetBlueprintCount(g_Player3, g_player_thermo_generator_type)
g_Player4_thermo_count = Player_GetBlueprintCount(g_Player4, g_player_thermo_generator_type)
g_Player5_thermo_count = Player_GetBlueprintCount(g_Player5, g_player_thermo_generator_type)
g_Player6_thermo_count = Player_GetBlueprintCount(g_Player6, g_player_thermo_generator_type)
g_Player7_thermo_count = Player_GetBlueprintCount(g_Player7, g_player_thermo_generator_type)
g_Player8_thermo_count = Player_GetBlueprintCount(g_Player8, g_player_thermo_generator_type)]]

	

end]]

-- Rule governing the entomb ability


function Rule_Countdown_Timer_Activation()

	UI_ShowCountdown(3540004, g_countdown_timer )
	Rule_Remove(Rule_Countdown_Timer_Activation)
	
	Rule_AddOneShot(Rule_Power_Counter_Init, 1)
	--Rule_AddOneShot(Rule_Enemy_Power_Counter_Init, 1)
	
	if g_countdown_initiated == false then
		Rule_Check_AddInterval(Rule_Timer_Function, 1)
		g_countdown_initiated = true
	end
		
	
	print("timer started")
	
	Rule_AddIntervalDelay(Rule_Objective_Gather_Power, 1, 5) -- kicks off objective
	

end

function Rule_Timer_Function()

g_countdown_timer = g_countdown_timer - 1

end

function Rule_Power_Counter_Init() --g_Player1_power = Stats_PlayerResGathered(Player_GetID(g_Player1), RT_Power) g_Player1_power = Player_GetResource(g_Player1, RT_Power) g_Player1_power_rounded_start = math.floor(g_Player1_power) print(g_Player1_power_rounded_start) UI_ShowCountDXP("Power", g_Player1, 3540005, (g_power_goal - g_Player1_power_rounded_start) ) --354002 Rule_AddInterval(Rule_Power_Counter_Update, 1)

end

function Rule_Power_Counter_Update() --g_Player1_power = Stats_PlayerResGathered(Player_GetID(g_Player1), RT_Power) g_Player1_power = Player_GetResource(g_Player1, RT_Power) g_Player1_power_rounded = math.floor(g_Player1_power)

g_updated_figure = g_power_goal - g_Player1_power_rounded 

if g_updated_figure <= 0 then

	g_updated_figure = 0
	
end

UI_ShowCountUpdateDxp("Power", g_updated_figure, 3540005) --3540002

end

--[[ function Rule_Enemy_Power_Counter_Init()

g_Player2_power = Player_GetResource(g_Player2, RT_Power)
g_Player3_power = Player_GetResource(g_Player3, RT_Power)
g_Player4_power = Player_GetResource(g_Player4, RT_Power)
g_Player5_power = Player_GetResource(g_Player5, RT_Power)
g_Player6_power = Player_GetResource(g_Player6, RT_Power)

t_cpu_power_table = {g_Player2_power, g_Player3_power, g_Player4_power, g_Player5_power, g_Player6_power}

for x = 1, g_enemy_players_on_map do

	g_total_enemy_power = g_total_enemy_power + t_cpu_power_table[x]

end

--g_total_enemy_power = g_Player2_power + g_Player3_power + g_Player4_power + g_Player5_power + g_Player6_power

UI_ShowCountDXP("Enemy Power", g_Player2, 3540003, g_total_enemy_power)
Rule_AddInterval(Rule_Enemy_Power_Counter_Update, 1)

end

function Rule_Enemy_Power_Counter_Update()

g_total_enemy_power_rounded = 0

g_Player2_power = Player_GetResource(g_Player2, RT_Power)
g_Player3_power = Player_GetResource(g_Player3, RT_Power)
g_Player4_power = Player_GetResource(g_Player4, RT_Power)
g_Player5_power = Player_GetResource(g_Player5, RT_Power)
g_Player6_power = Player_GetResource(g_Player6, RT_Power)

g_Player2_power_rounded = math.floor(g_Player2_power)
g_Player3_power_rounded = math.floor(g_Player3_power)
g_Player4_power_rounded = math.floor(g_Player4_power)
g_Player5_power_rounded = math.floor(g_Player5_power)
g_Player6_power_rounded = math.floor(g_Player6_power)

t_cpu_power_table_rounded = {g_Player2_power_rounded, g_Player3_power_rounded, g_Player4_power_rounded, 
	g_Player5_power_rounded, g_Player6_power_rounded}

for y = 1, g_enemy_players_on_map do
	
	g_total_enemy_power_rounded = g_total_enemy_power_rounded + t_cpu_power_table_rounded[y]
	
end

g_enemy_power_total = g_total_enemy_power_rounded
print("g_enemy_power_total = "..g_enemy_power_total)

UI_ShowCountUpdateDxp("Enemy Power", g_total_enemy_power_rounded, 3540003)

end]]

function Rule_Power_Count_Objective_Variation()

g_power_TBASE = 1000
g_power_TMAX = 1500
g_power_adjustment = g_power_TBASE + math.floor((g_difficulty - g_DBASE) * ((g_power_TMAX - g_power_TBASE)/ (g_DMAX - g_DBASE)))
print(g_power_adjustment)

g_gen_DBASE = 0 -- generator base number -- default is 0
g_gen_DMAX = 4 -- player can buy up to 4 extra generators
g_gen_TBASE = 0 -- base amount of extra power the player needs on top of regular amount when the player has 0 forward base generators
g_gen_TMAX = 1600 -- max amount of extra power the player needs when they have full forward base generators

g_gen_adjustment = g_gen_TBASE  + math.floor((g_bonus_gen_counter - g_gen_DBASE) * ((g_power_TMAX - g_power_TBASE)/ (g_gen_DMAX - g_gen_DBASE)))
print(g_gen_adjustment)
--g_bonus_gen_counter



g_objective_title = 3520006
g_objective_short_desc = 3520008
g_help_tip = 3520006

if g_player_race == "necron_race" then
	
	g_power_goal = 2900 + g_gen_adjustment -- + g_power_adjustment
	
elseif (g_player_race == "necron_race") == false then
	
	g_power_goal = 1900 + g_gen_adjustment -- + g_power_adjustment
	
end

g_countdown_timer = 1200 -- 1200

Rule_AddOneShot(Rule_Countdown_Timer_Activation, 1)

end


function Rule_Get_Enemy_Barracks()

for z = 1, g_enemy_players_on_map do
	
	if t_barracks_defined[z] == false then
		
		if g_cpu_player_race == "necron_race" then
			
			t_necron_potential_portable_monolith[z] = Player_GetSquads(t_Enemy_Players[z])
			
			g_monolith_count = SGroup_CountSpawned(t_necron_potential_portable_monolith[z])
			
			for y = 1, g_monolith_count do 
				
				
				if Squad_GetBlueprintName(SGroup_GetSpawnedSquadAt(t_necron_potential_portable_monolith[z], y))	== "necron_restored_monolith_squad" then
					
					SGroup_Add(SGroup_CreateIfNotFound("sg_spawning_monolith"..z), SGroup_GetSpawnedSquadAt(t_necron_potential_portable_monolith[z], y))
					
					t_Forwardpos[z] = SGroup_GetPosition(SGroup_FromName("sg_spawning_monolith"..z))
					
					SGroup_Clear(SGroup_FromName("sg_spawning_monolith"..z))
					
					t_barracks_defined[z] = true
					
					--Rule_Check_AddOneShot(Rule_Spawn_At_Enemy_Barracks, 1) -- 100 is placeholder
					--Rule_Remove(Rule_Get_Enemy_Barracks)
					
					break
					
				end
				
			end
			
		end
		
	end
	
	
	
	if t_barracks_defined[z] == false then
		
		t_enemy_barracks_potential[z] = Player_GetEntities(t_Enemy_Players[z])	
		
		if EGroup_Exists(EGroup_GetName(t_enemy_barracks_potential[z])) and EGroup_IsEmpty(EGroup_GetName(t_enemy_barracks_potential[z])) == false then
			
			g_building_count = EGroup_CountSpawned(t_enemy_barracks_potential[z])
			
			for x = 1, g_building_count do
				
				if Entity_GetBlueprintName(EGroup_GetSpawnedEntityAt(t_enemy_barracks_potential[z], x))	== g_enemy_barracks_type then
					
					if Entity_GetBuildingProgress(EGroup_GetSpawnedEntityAt(t_enemy_barracks_potential[z], x)) == 1.0 then 
						
						EGroup_Add(EGroup_CreateIfNotFound("eg_spawning_barracks"..z), EGroup_GetSpawnedEntityAt(t_enemy_barracks_potential[z], x))
						
						t_Forwardpos[z] = EGroup_GetPosition(EGroup_FromName("eg_spawning_barracks"..z))
						
						t_barracks_defined[z] = true
					
					end
					
				else
					
				end
				
			end
			
		end
		
	end
	
end

Rule_Check_AddOneShot(Rule_Spawn_At_Enemy_Barracks, 1) -- 100 is placeholder
Rule_Remove(Rule_Get_Enemy_Barracks)

end

function Rule_Spawn_At_Enemy_Barracks()

for z = 1, g_enemy_players_on_map do
	
	if SGroup_Exists("sg_fodder"..z) == false or SGroup_IsEmpty("sg_fodder"..z) then
		
		if t_Forwardpos[z] ~= nil then
			
			if EGroup_Exists("eg_spawning_barracks"..z) and (EGroup_IsEmpty("eg_spawning_barracks"..z) == false) then
			
				Util_CreateSquadsAtPositionEx(t_Enemy_Players[z], "sg_fodder"..z, g_enemy_fodder_type, t_Forwardpos[z], g_booster_spawn_number, g_booster_deployment_size)
				
				Cmd_SetStance("sg_fodder"..z, STANCE_Attack)
				
				EGroup_Clear(EGroup_FromName("eg_spawning_barracks"..z))
				
				t_barracks_defined[z] = false
			
			end
			
		end
		
	end
	
end

Rule_Check_AddInterval(Rule_Get_Enemy_Barracks_Delay, 1) -- 300 is placeholder
Rule_Remove(Rule_Spawn_At_Enemy_Barracks)

end

function Rule_Get_Enemy_Barracks_Delay()

for z = 1, g_enemy_players_on_map do
	
	if SGroup_Exists("sg_fodder"..z) == false or SGroup_IsEmpty("sg_fodder"..z) then
		
		Rule_AddIntervalDelay(Rule_Get_Enemy_Barracks, 2, 30) -- 300 is placeholder
		
		Rule_Remove(Rule_Get_Enemy_Barracks_Delay)
		
		break
		
	end

end

end


function Rule_Objective_Gather_Power()

Objective_Gather_Power = { title_id = g_objective_title, short_desc_id = g_objective_short_desc, help_tip_id = g_help_tip }

if Event_IsAnyRunning() == false and Objective_Exists(Objective_Gather_Power.title_id) == false then
	
	Util_WXP_ObjectiveCreate( Objective_Gather_Power, true, g_Player1 )
	
	Objective_ShowScreen()	
	Flash_OtherButton("dlg_objectives", 0, false, true)
	
elseif Event_IsAnyRunning() == false and ((g_Player1_power_rounded >= g_power_goal) and g_countdown_timer >= 0 ) then
	
	Util_ObjectiveComplete(Objective_Gather_Power.title_id)
	
	Rule_Remove(Rule_Objective_Gather_Power)


elseif Event_IsAnyRunning() == false and ((g_Player1_power_rounded < g_power_goal) and g_countdown_timer <= -1 ) --[[or
	((g_total_enemy_power_rounded >= g_power_goal) and g_countdown_timer >= 0 )]] then

	Util_ObjectiveFail(Objective_Gather_Power.title_id)
	
	Rule_Remove(Rule_Objective_Gather_Power)
	
	g_player_fail = true


end

end

function Rule_Check_Enemy()

g_cpu_unit_exceptions = {}
g_cpu_building_exceptions = {
	"chaos_listening_post",
	"chaos_turret_bolter",
	
	"eldar_listening_post",
	"eldar_support_platform_scatterlaser",
	"eldar_webway_gate",
	
	"guard_listening_post",
	"guard_turret_heavy_bolter",
	
	"necron_listening_post",
	"necron_turret",
	
	"ork_gork_totem",
	"ork_waagh_banner",
	
	"tau_listening_post",
	
	"space_marine_listening_post",
	"space_marine_turret_bolter"
}

for z = 1, g_enemy_players_on_map do


if g_player_defeated[z] == false then
	if(Player_HasBuildingsExcept(t_Enemy_Players[z], g_cpu_building_exceptions) == false ) then
			if(Player_HasSquadsExcept(t_Enemy_Players[z], g_cpu_unit_exceptions ) == false ) then
				
				g_player_win_count = g_player_win_count + 1
				g_player_defeated[z] = true
				
			end
	end
end

end

--[[
if g_player2_defeated == false then
	if(Player_HasBuildingsExcept(g_Player2, g_cpu_building_exceptions) == false ) then
			if(Player_HasSquadsExcept(g_Player2, g_cpu_unit_exceptions ) == false ) then
				
				g_player_win_count = g_player_win_count + 1
				g_player2_defeated = true
				
			end
	end
end


if g_player3_defeated == false then
	if(Player_HasBuildingsExcept(g_Player3, g_cpu_building_exceptions) == false ) then
			if(Player_HasSquadsExcept(g_Player3, g_cpu_unit_exceptions ) == false ) then
				
				g_player_win_count = g_player_win_count + 1
				g_player3_defeated = true
				
			end
	end
end

if g_player4_defeated == false then
	if(Player_HasBuildingsExcept(g_Player4, g_cpu_building_exceptions) == false ) then
			if(Player_HasSquadsExcept(g_Player4, g_cpu_unit_exceptions ) == false ) then
				
				g_player_win_count = g_player_win_count + 1
				g_player4_defeated = true
				
			end
	end
end]]

if g_player_win_count >= g_enemy_players_on_map then
	g_player_win = true
	Rule_Remove(Rule_Check_Enemy)
end

end


--[[ GAME OVER - Player Wins ]]

function Rule_EndGameWin() -- Player wins when Gorgutz is dead. if Objective_Gather_Power ~= nil and Objective_Exists(Objective_Gather_Power.title_id) and Objective_GetState(Objective_Gather_Power.title_id) == OS_Complete then Rule_RemoveAll() World_SetTeamWin(g_Player1,"") Rule_AddIntervalEx(Rule_GameOver, 5, 1) elseif g_player_win == true then Rule_RemoveAll() World_SetTeamWin(g_Player1,"") Rule_AddIntervalEx(Rule_GameOver, 5, 1) end

end


--[[ GAME OVER - Player Loses ]]

--[[ The Player Loses condition will be mission specific this version of the function detects if the player has lost their base and has no servitors left ]]

function Rule_EndGameLose()

g_building_exceptions = 
{
	"chaos_listening_post",
	"chaos_turret_bolter",
	
	"eldar_listening_post",
	"eldar_support_platform_scatterlaser",
	"eldar_webway_gate",
	
	"guard_listening_post",
	"guard_turret_heavy_bolter",
	
	"necron_listening_post",
	"necron_turret",
	
	"ork_gork_totem",
	"ork_waagh_banner",
	
	"tau_listening_post",
	
	"space_marine_listening_post",
	"space_marine_turret_bolter"
}

g_unit_exceptions = 
{
	--"ork_squad_warboss"
}

--[[ Lose because of Annihilation ]]	

	if( Player_HasBuildingsExcept(g_Player1, g_building_exceptions) == false ) then
		if( Player_HasSquadsExcept(g_Player1, g_unit_exceptions ) == false ) then
			
			g_player_fail = true
			
		end
	end
	
	if g_player_fail == true then --[[Lose due to not killing enough enemies or not razing enough buildings]]	
		
		Rule_RemoveAll()
		Fade_Start(4, false)
		World_SetTeamWin( g_Player2, "" )
		Rule_AddIntervalEx( Rule_GameOver,5,1 )
		Rule_Remove( Rule_EndGameLose )
		
	end

end

--[[ call this with an interval to ensure the mission ends ]] function Rule_GameOver() World_SetGameOver() end


--INTEL EVENTS